@quantiya/codevibe-codex-plugin 2.0.117 → 2.0.118

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.
@@ -40581,6 +40581,11 @@ function filterSlashSuggestions(value, commands) {
40581
40581
  let q = value.toLowerCase();
40582
40582
  return commands.filter((c) => c.name.toLowerCase().startsWith(q));
40583
40583
  }
40584
+ function enterRunsTypedCommand(value, suggestions, highlight) {
40585
+ if (suggestions.length === 0 || !value.startsWith("/")) return !1;
40586
+ let pick2 = suggestions[Math.min(Math.max(highlight, 0), suggestions.length - 1)];
40587
+ return pick2 !== void 0 && pick2.name === value;
40588
+ }
40584
40589
  function formatSuggestionRow(opts) {
40585
40590
  let base2 = `${opts.highlighted ? "\u276F " : " "}${opts.name.padEnd(opts.namePad)}`, blurbBudget = opts.maxCols - base2.length - 1, full = blurbBudget > 0 ? `${base2} ${truncate(opts.blurb, blurbBudget)}` : base2;
40586
40591
  return truncate(full, Math.max(0, opts.maxCols));
@@ -40957,6 +40962,10 @@ function InputBar(props) {
40957
40962
  setHl((Math.min(highlightRef.current, n - 1) + 1) % n);
40958
40963
  return;
40959
40964
  }
40965
+ if (key.return && enterRunsTypedCommand(valueRef.current, live, highlightRef.current)) {
40966
+ setHl(0), doSubmit();
40967
+ return;
40968
+ }
40960
40969
  if (key.tab || key.return) {
40961
40970
  completeToHighlighted();
40962
40971
  return;
@@ -88524,17 +88533,28 @@ ${formatImplementorPolicy(detected, updated, props.tier)}`
88524
88533
  trackLabelByTaskId,
88525
88534
  gateActionRecoveryBlocked: state.gateActionRecoveryBlocked
88526
88535
  }),
88527
- ...shownTaskProgress.length > 0 ? shownTaskProgress.map(
88528
- ([taskId, line], index) => React22.createElement(LiveProgressLine, {
88529
- key: `progress-${taskId}`,
88530
- progress: line,
88531
- label: (() => {
88532
- let l = taskLabel(state, taskId);
88533
- return l.startsWith("#") ? l : void 0;
88534
- })(),
88535
- ...index === shownTaskProgress.length - 1 && hiddenTaskProgress > 0 ? { moreCount: hiddenTaskProgress } : {}
88536
- })
88537
- ) : [],
88536
+ // CP-1.f live progress surfacing — the ephemeral spinner status lines,
88537
+ // rendered ONLY while work is busy: P46b §3.7 one line per busy single task
88538
+ // (`progressByTask`, capped, `(+n more)` on the last), then a window that
88539
+ // belongs to no task (classify / familiarize). An idle line returns null and
88540
+ // its row collapses. The per-task lines are ONE keyed child so their count
88541
+ // never shifts the InputBar's position (a shift remounted it: typed text and
88542
+ // keystrokes were lost while tasks started/stopped — Hendry item 3).
88543
+ React22.createElement(
88544
+ React22.Fragment,
88545
+ { key: "progress-tasks" },
88546
+ ...shownTaskProgress.map(
88547
+ ([taskId, line], index) => React22.createElement(LiveProgressLine, {
88548
+ key: `progress-${taskId}`,
88549
+ progress: line,
88550
+ label: (() => {
88551
+ let l = taskLabel(state, taskId);
88552
+ return l.startsWith("#") ? l : void 0;
88553
+ })(),
88554
+ ...index === shownTaskProgress.length - 1 && hiddenTaskProgress > 0 ? { moreCount: hiddenTaskProgress } : {}
88555
+ })
88556
+ )
88557
+ ),
88538
88558
  React22.createElement(LiveProgressLine, { key: "progress-untasked", progress: untaskedProgress }),
88539
88559
  // `/reviewer-setup` wizard (2026-06-29) — while open it REPLACES the InputBar
88540
88560
  // at the same layout slot and owns keyboard focus (arrow-key ink-select); on
@@ -13,6 +13,16 @@ export declare function isSlashCommandInProgress(value: string): boolean;
13
13
  * dropdown). A bare `/` returns the whole list.
14
14
  */
15
15
  export declare function filterSlashSuggestions(value: string, commands: SlashCommandInfo[]): SlashCommandInfo[];
16
+ /**
17
+ * True when Enter should RUN the input instead of completing it: the value is
18
+ * already exactly the highlighted slash command (`/exit` with `/exit`
19
+ * highlighted). A partial (`/ex`) or a highlight the user moved to another
20
+ * command still completes (Hendry 2026-11-12: a fully typed command must not
21
+ * need a second Enter).
22
+ */
23
+ export declare function enterRunsTypedCommand(value: string, suggestions: ReadonlyArray<{
24
+ name: string;
25
+ }>, highlight: number): boolean;
16
26
  /**
17
27
  * Builds a single dropdown row as ONE physical line (≤ `maxCols`) so it can
18
28
  * never wrap and inflate the dropdown's row count on a narrow terminal
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quantiya/codevibe-core",
3
- "version": "2.0.101",
3
+ "version": "2.0.102",
4
4
  "description": "Core library for CodeVibe plugins - shared keychain, crypto, AppSync, and auth functionality",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quantiya/codevibe-codex-plugin",
3
- "version": "2.0.117",
3
+ "version": "2.0.118",
4
4
  "description": "Control OpenAI Codex CLI from your iPhone and Android — real-time sync, approve file edits, send prompts by voice. Part of CodeVibe.",
5
5
  "main": "dist/server.js",
6
6
  "codevibe": {
@@ -47,7 +47,7 @@
47
47
  "node": ">=22.0.0"
48
48
  },
49
49
  "dependencies": {
50
- "@quantiya/codevibe-core": "^2.0.101",
50
+ "@quantiya/codevibe-core": "^2.0.102",
51
51
  "@quantiya/quorum-core": "^1.0.1",
52
52
  "chokidar": "^4.0.0",
53
53
  "dotenv": "^16.6.1",