@sma1lboy/kobe 0.5.17 → 0.5.19

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.
package/dist/bin/kobed.js CHANGED
@@ -2626,7 +2626,7 @@ var init_bridge = __esm(() => {
2626
2626
  init_server();
2627
2627
  });
2628
2628
 
2629
- // ../../node_modules/.bun/solid-js@1.9.10/node_modules/solid-js/dist/dev.js
2629
+ // ../../node_modules/.bun/solid-js@1.9.12/node_modules/solid-js/dist/dev.js
2630
2630
  function getContextId(count) {
2631
2631
  const num = String(count), len = num.length - 1;
2632
2632
  return sharedConfig.context.id + (len ? String.fromCharCode(96 + len) : "") + num;
@@ -3154,6 +3154,8 @@ function runComputation(node, value, time) {
3154
3154
  if (node.updatedAt != null && "observers" in node) {
3155
3155
  writeSignal(node, nextValue, true);
3156
3156
  } else if (Transition && Transition.running && node.pure) {
3157
+ if (!Transition.sources.has(node))
3158
+ node.value = nextValue;
3157
3159
  Transition.sources.add(node);
3158
3160
  node.tValue = nextValue;
3159
3161
  } else
@@ -3197,16 +3199,27 @@ function createComputation(fn, init, pure, state = STALE, options) {
3197
3199
  if (options && options.name)
3198
3200
  c.name = options.name;
3199
3201
  if (ExternalSourceConfig && c.fn) {
3202
+ const sourceFn = c.fn;
3200
3203
  const [track, trigger] = createSignal(undefined, {
3201
3204
  equals: false
3202
3205
  });
3203
- const ordinary = ExternalSourceConfig.factory(c.fn, trigger);
3206
+ const ordinary = ExternalSourceConfig.factory(sourceFn, trigger);
3204
3207
  onCleanup(() => ordinary.dispose());
3205
- const triggerInTransition = () => startTransition(trigger).then(() => inTransition.dispose());
3206
- const inTransition = ExternalSourceConfig.factory(c.fn, triggerInTransition);
3208
+ let inTransition;
3209
+ const triggerInTransition = () => startTransition(trigger).then(() => {
3210
+ if (inTransition) {
3211
+ inTransition.dispose();
3212
+ inTransition = undefined;
3213
+ }
3214
+ });
3207
3215
  c.fn = (x) => {
3208
3216
  track();
3209
- return Transition && Transition.running ? inTransition.track(x) : ordinary.track(x);
3217
+ if (Transition && Transition.running) {
3218
+ if (!inTransition)
3219
+ inTransition = ExternalSourceConfig.factory(sourceFn, triggerInTransition);
3220
+ return inTransition.track(x);
3221
+ }
3222
+ return ordinary.track(x);
3210
3223
  };
3211
3224
  }
3212
3225
  DevHooks.afterCreateOwner && DevHooks.afterCreateOwner(c);
@@ -3798,12 +3811,7 @@ var init_dev = __esm(() => {
3798
3811
  equals: equalFn
3799
3812
  };
3800
3813
  runEffects = runQueue;
3801
- UNOWNED = {
3802
- owned: null,
3803
- cleanups: null,
3804
- context: null,
3805
- owner: null
3806
- };
3814
+ UNOWNED = {};
3807
3815
  NO_INIT = {};
3808
3816
  DevHooks = {
3809
3817
  afterUpdate: null,
package/dist/cli/index.js CHANGED
@@ -182,7 +182,7 @@ var init_repos = __esm(() => {
182
182
  init_env();
183
183
  });
184
184
 
185
- // ../../node_modules/.bun/solid-js@1.9.10/node_modules/solid-js/dist/dev.js
185
+ // ../../node_modules/.bun/solid-js@1.9.12/node_modules/solid-js/dist/dev.js
186
186
  function getContextId(count) {
187
187
  const num = String(count), len = num.length - 1;
188
188
  return sharedConfig.context.id + (len ? String.fromCharCode(96 + len) : "") + num;
@@ -710,6 +710,8 @@ function runComputation(node, value, time) {
710
710
  if (node.updatedAt != null && "observers" in node) {
711
711
  writeSignal(node, nextValue, true);
712
712
  } else if (Transition && Transition.running && node.pure) {
713
+ if (!Transition.sources.has(node))
714
+ node.value = nextValue;
713
715
  Transition.sources.add(node);
714
716
  node.tValue = nextValue;
715
717
  } else
@@ -753,16 +755,27 @@ function createComputation(fn, init, pure, state = STALE, options) {
753
755
  if (options && options.name)
754
756
  c.name = options.name;
755
757
  if (ExternalSourceConfig && c.fn) {
758
+ const sourceFn = c.fn;
756
759
  const [track, trigger] = createSignal(undefined, {
757
760
  equals: false
758
761
  });
759
- const ordinary = ExternalSourceConfig.factory(c.fn, trigger);
762
+ const ordinary = ExternalSourceConfig.factory(sourceFn, trigger);
760
763
  onCleanup(() => ordinary.dispose());
761
- const triggerInTransition = () => startTransition(trigger).then(() => inTransition.dispose());
762
- const inTransition = ExternalSourceConfig.factory(c.fn, triggerInTransition);
764
+ let inTransition;
765
+ const triggerInTransition = () => startTransition(trigger).then(() => {
766
+ if (inTransition) {
767
+ inTransition.dispose();
768
+ inTransition = undefined;
769
+ }
770
+ });
763
771
  c.fn = (x) => {
764
772
  track();
765
- return Transition && Transition.running ? inTransition.track(x) : ordinary.track(x);
773
+ if (Transition && Transition.running) {
774
+ if (!inTransition)
775
+ inTransition = ExternalSourceConfig.factory(sourceFn, triggerInTransition);
776
+ return inTransition.track(x);
777
+ }
778
+ return ordinary.track(x);
766
779
  };
767
780
  }
768
781
  DevHooks.afterCreateOwner && DevHooks.afterCreateOwner(c);
@@ -1354,12 +1367,7 @@ var init_dev = __esm(() => {
1354
1367
  equals: equalFn
1355
1368
  };
1356
1369
  runEffects = runQueue;
1357
- UNOWNED = {
1358
- owned: null,
1359
- cleanups: null,
1360
- context: null,
1361
- owner: null
1362
- };
1370
+ UNOWNED = {};
1363
1371
  NO_INIT = {};
1364
1372
  DevHooks = {
1365
1373
  afterUpdate: null,
@@ -1817,7 +1825,7 @@ var init_esm = __esm(() => {
1817
1825
  })(EncodingMode || (EncodingMode = {}));
1818
1826
  });
1819
1827
 
1820
- // ../../node_modules/.bun/@opentui+solid@0.2.4+ddd5ad692ec39e82/node_modules/@opentui/solid/index.js
1828
+ // ../../node_modules/.bun/@opentui+solid@0.2.4+f38a454781f02d2a/node_modules/@opentui/solid/index.js
1821
1829
  import { CliRenderer, createCliRenderer, engine as engine2 } from "@opentui/core";
1822
1830
  import { createTestRenderer } from "@opentui/core/testing";
1823
1831
  import {
@@ -2686,7 +2694,7 @@ var init_solid = __esm(() => {
2686
2694
  });
2687
2695
  });
2688
2696
 
2689
- // ../../node_modules/.bun/solid-js@1.9.10/node_modules/solid-js/store/dist/dev.js
2697
+ // ../../node_modules/.bun/solid-js@1.9.12/node_modules/solid-js/store/dist/dev.js
2690
2698
  function wrap$1(value) {
2691
2699
  let p = value[$PROXY];
2692
2700
  if (!p) {
@@ -15503,7 +15511,7 @@ var init_package = __esm(() => {
15503
15511
  package_default = {
15504
15512
  $schema: "https://json.schemastore.org/package.json",
15505
15513
  name: "@sma1lboy/kobe",
15506
- version: "0.5.17",
15514
+ version: "0.5.19",
15507
15515
  description: "TUI orchestrator for Claude Code (codename)",
15508
15516
  type: "module",
15509
15517
  packageManager: "bun@1.3.13",
@@ -15548,7 +15556,7 @@ var init_package = __esm(() => {
15548
15556
  "@opentui/core": "0.2.4",
15549
15557
  "@opentui/solid": "0.2.4",
15550
15558
  "@xterm/headless": "^6.0.0",
15551
- "solid-js": "1.9.10"
15559
+ "solid-js": "1.9.12"
15552
15560
  },
15553
15561
  devDependencies: {
15554
15562
  "@biomejs/biome": "1.9.4",
@@ -30793,23 +30801,46 @@ var init_MessageList = __esm(() => {
30793
30801
  });
30794
30802
 
30795
30803
  // src/tui/panes/chat/composer/model-picker-row.ts
30796
- function modelPickerRowParts(choice) {
30797
- const caps = getCapabilities(choice.vendor);
30798
- return {
30799
- level: choice.level ?? "level1",
30800
- vendor: choice.vendor,
30801
- engine: caps.label,
30802
- from: "catalog",
30803
- model: choice.label,
30804
- hint: choice.hint
30805
- };
30804
+ function modelPickerModelOptions(choices) {
30805
+ const byKey = new Map;
30806
+ for (const choice of choices) {
30807
+ const key = `${choice.vendor}:${choice.id}`;
30808
+ const bucket = byKey.get(key);
30809
+ if (bucket)
30810
+ bucket.push(choice);
30811
+ else
30812
+ byKey.set(key, [choice]);
30813
+ }
30814
+ return [...byKey.values()].map((bucket) => {
30815
+ const base = bucket.find((choice) => choice.effort === undefined) ?? bucket[0];
30816
+ if (!base) {
30817
+ throw new Error("model picker option bucket unexpectedly empty");
30818
+ }
30819
+ return {
30820
+ vendor: base.vendor,
30821
+ id: base.id,
30822
+ label: stripEffortSuffix(base.label, base.effort),
30823
+ hint: base.hint,
30824
+ choices: bucket
30825
+ };
30826
+ });
30827
+ }
30828
+ function modelPickerEffortOptions(model) {
30829
+ return model.choices.map((choice) => ({
30830
+ id: choice.id,
30831
+ effort: choice.effort,
30832
+ label: choice.effort ?? "default",
30833
+ hint: choice.effort ? choice.hint : choice.hint ?? "use the model default"
30834
+ }));
30806
30835
  }
30807
- function modelPickerMetaLabel(parts) {
30808
- return `${parts.level} ${parts.vendor} ${parts.engine} from ${parts.from}`;
30836
+ function stripEffortSuffix(label, effort) {
30837
+ if (!effort)
30838
+ return label;
30839
+ return label.replace(new RegExp(`\\s+\xB7\\s+${escapeRegExp3(effort)}$`), "");
30840
+ }
30841
+ function escapeRegExp3(value) {
30842
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
30809
30843
  }
30810
- var init_model_picker_row = __esm(() => {
30811
- init_registry2();
30812
- });
30813
30844
 
30814
30845
  // src/tui/panes/chat/composer/ModelPicker.tsx
30815
30846
  import { TextAttributes as TextAttributes24 } from "@opentui/core";
@@ -30818,137 +30849,293 @@ function ModelPicker(props) {
30818
30849
  const {
30819
30850
  theme
30820
30851
  } = useTheme();
30821
- const choices = createMemo(() => allModels());
30852
+ const models = createMemo(() => modelPickerModelOptions(allModels()));
30853
+ const [selectedModel, setSelectedModel] = createSignal();
30854
+ const effortChoices = createMemo(() => {
30855
+ const model = selectedModel();
30856
+ return model ? modelPickerEffortOptions(model) : [];
30857
+ });
30822
30858
  const seed = props.current ?? defaultCapabilities.defaultModelId();
30823
- const initial = choices().findIndex((m2) => m2.id === seed && m2.effort === props.currentEffort);
30859
+ const initial = models().findIndex((m2) => m2.id === seed);
30824
30860
  const [cursor, setCursor] = createSignal(initial >= 0 ? initial : 0);
30861
+ const [effortCursor, setEffortCursor] = createSignal(0);
30862
+ const inEffortStep = () => selectedModel() !== undefined;
30863
+ function setInitialEffortCursor(model) {
30864
+ const efforts = modelPickerEffortOptions(model);
30865
+ const idx = efforts.findIndex((choice) => choice.effort === props.currentEffort);
30866
+ setEffortCursor(idx >= 0 ? idx : 0);
30867
+ }
30825
30868
  function commit() {
30826
- const choice = choices()[cursor()];
30869
+ if (inEffortStep()) {
30870
+ commitEffort();
30871
+ return;
30872
+ }
30873
+ const model = models()[cursor()];
30874
+ if (!model)
30875
+ return;
30876
+ const efforts = modelPickerEffortOptions(model);
30877
+ if (efforts.length <= 1 && efforts[0]?.effort === undefined) {
30878
+ props.onPick({
30879
+ id: model.id,
30880
+ effort: undefined
30881
+ });
30882
+ dialog.clear();
30883
+ return;
30884
+ }
30885
+ setSelectedModel(model);
30886
+ setInitialEffortCursor(model);
30887
+ }
30888
+ function commitEffort() {
30889
+ const model = selectedModel();
30890
+ if (!model)
30891
+ return;
30892
+ const choice = effortChoices()[effortCursor()];
30827
30893
  if (!choice)
30828
30894
  return;
30829
30895
  props.onPick({
30830
- id: choice.id,
30896
+ id: model.id,
30831
30897
  effort: choice.effort
30832
30898
  });
30833
30899
  dialog.clear();
30834
30900
  }
30901
+ function backToModels() {
30902
+ setSelectedModel(undefined);
30903
+ }
30835
30904
  useBindings(() => ({
30836
30905
  bindings: [{
30837
30906
  key: "up",
30838
30907
  cmd: () => {
30839
- const n2 = choices().length;
30908
+ const n2 = inEffortStep() ? effortChoices().length : models().length;
30840
30909
  if (n2 === 0)
30841
30910
  return;
30842
- setCursor((c2) => (c2 - 1 + n2) % n2);
30911
+ if (inEffortStep())
30912
+ setEffortCursor((c2) => (c2 - 1 + n2) % n2);
30913
+ else
30914
+ setCursor((c2) => (c2 - 1 + n2) % n2);
30843
30915
  }
30844
30916
  }, {
30845
30917
  key: "down",
30846
30918
  cmd: () => {
30847
- const n2 = choices().length;
30919
+ const n2 = inEffortStep() ? effortChoices().length : models().length;
30848
30920
  if (n2 === 0)
30849
30921
  return;
30850
- setCursor((c2) => (c2 + 1) % n2);
30922
+ if (inEffortStep())
30923
+ setEffortCursor((c2) => (c2 + 1) % n2);
30924
+ else
30925
+ setCursor((c2) => (c2 + 1) % n2);
30851
30926
  }
30852
30927
  }, {
30853
30928
  key: "k",
30854
30929
  cmd: () => {
30855
- const n2 = choices().length;
30930
+ const n2 = inEffortStep() ? effortChoices().length : models().length;
30856
30931
  if (n2 === 0)
30857
30932
  return;
30858
- setCursor((c2) => (c2 - 1 + n2) % n2);
30933
+ if (inEffortStep())
30934
+ setEffortCursor((c2) => (c2 - 1 + n2) % n2);
30935
+ else
30936
+ setCursor((c2) => (c2 - 1 + n2) % n2);
30859
30937
  }
30860
30938
  }, {
30861
30939
  key: "j",
30862
30940
  cmd: () => {
30863
- const n2 = choices().length;
30941
+ const n2 = inEffortStep() ? effortChoices().length : models().length;
30864
30942
  if (n2 === 0)
30865
30943
  return;
30866
- setCursor((c2) => (c2 + 1) % n2);
30944
+ if (inEffortStep())
30945
+ setEffortCursor((c2) => (c2 + 1) % n2);
30946
+ else
30947
+ setCursor((c2) => (c2 + 1) % n2);
30867
30948
  }
30949
+ }, {
30950
+ key: "left",
30951
+ cmd: backToModels
30952
+ }, {
30953
+ key: "h",
30954
+ cmd: backToModels
30868
30955
  }, {
30869
30956
  key: "return",
30870
30957
  cmd: commit
30871
30958
  }]
30872
30959
  }));
30873
30960
  return (() => {
30874
- var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text"), _el$5 = createElement("text"), _el$7 = createElement("box"), _el$8 = createElement("box"), _el$9 = createElement("text");
30961
+ var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text"), _el$4 = createElement("text"), _el$6 = createElement("box"), _el$7 = createElement("text");
30875
30962
  insertNode(_el$, _el$2);
30876
- insertNode(_el$, _el$7);
30877
- insertNode(_el$, _el$8);
30963
+ insertNode(_el$, _el$6);
30878
30964
  setProp(_el$, "paddingLeft", 2);
30879
30965
  setProp(_el$, "paddingRight", 2);
30880
30966
  setProp(_el$, "gap", 1);
30881
30967
  insertNode(_el$2, _el$3);
30882
- insertNode(_el$2, _el$5);
30968
+ insertNode(_el$2, _el$4);
30883
30969
  setProp(_el$2, "flexDirection", "row");
30884
30970
  setProp(_el$2, "justifyContent", "space-between");
30885
- insertNode(_el$3, createTextNode(`Pick a model`));
30886
- insertNode(_el$5, createTextNode(`esc`));
30887
- setProp(_el$5, "onMouseUp", () => props.onCancel());
30888
- setProp(_el$7, "flexDirection", "column");
30889
- setProp(_el$7, "paddingBottom", 1);
30890
- insert(_el$7, createComponent2(For, {
30891
- get each() {
30892
- return choices();
30893
- },
30894
- children: (choice, i2) => {
30895
- const active = () => i2() === cursor();
30896
- const parts = () => modelPickerRowParts(choice);
30897
- return (() => {
30898
- var _el$1 = createElement("box"), _el$10 = createElement("text"), _el$11 = createElement("text");
30899
- insertNode(_el$1, _el$10);
30900
- insertNode(_el$1, _el$11);
30901
- setProp(_el$1, "flexDirection", "row");
30902
- setProp(_el$1, "gap", 2);
30903
- setProp(_el$1, "paddingLeft", 1);
30904
- setProp(_el$1, "paddingRight", 1);
30905
- setProp(_el$1, "onMouseUp", () => {
30906
- setCursor(i2());
30907
- commit();
30908
- });
30909
- setProp(_el$10, "wrapMode", "none");
30910
- insert(_el$10, () => active() ? "\u25B8 " : " ", null);
30911
- insert(_el$10, () => modelPickerMetaLabel(parts()), null);
30912
- setProp(_el$11, "wrapMode", "none");
30913
- insert(_el$11, () => parts().model);
30914
- insert(_el$1, (() => {
30915
- var _c$ = memo2(() => !!parts().hint);
30916
- return () => _c$() ? (() => {
30917
- var _el$12 = createElement("text");
30971
+ insert(_el$3, () => inEffortStep() ? "Pick effort" : "Pick a model");
30972
+ insertNode(_el$4, createTextNode(`esc`));
30973
+ setProp(_el$4, "onMouseUp", () => props.onCancel());
30974
+ insert(_el$, (() => {
30975
+ var _c$ = memo2(() => !!inEffortStep());
30976
+ return () => _c$() ? (() => {
30977
+ var _el$8 = createElement("box"), _el$9 = createElement("box"), _el$0 = createElement("text"), _el$10 = createElement("text");
30978
+ insertNode(_el$8, _el$9);
30979
+ setProp(_el$8, "flexDirection", "column");
30980
+ setProp(_el$8, "paddingBottom", 1);
30981
+ insertNode(_el$9, _el$0);
30982
+ insertNode(_el$9, _el$10);
30983
+ setProp(_el$9, "flexDirection", "row");
30984
+ setProp(_el$9, "gap", 2);
30985
+ setProp(_el$9, "paddingLeft", 1);
30986
+ setProp(_el$9, "paddingRight", 1);
30987
+ insertNode(_el$0, createTextNode(`model`));
30988
+ setProp(_el$0, "wrapMode", "none");
30989
+ setProp(_el$10, "wrapMode", "none");
30990
+ insert(_el$10, () => selectedModel()?.label);
30991
+ insert(_el$8, createComponent2(For, {
30992
+ get each() {
30993
+ return effortChoices();
30994
+ },
30995
+ children: (choice, i2) => {
30996
+ const active = () => i2() === effortCursor();
30997
+ return (() => {
30998
+ var _el$11 = createElement("box"), _el$12 = createElement("text");
30999
+ insertNode(_el$11, _el$12);
31000
+ setProp(_el$11, "flexDirection", "row");
31001
+ setProp(_el$11, "gap", 2);
31002
+ setProp(_el$11, "paddingLeft", 1);
31003
+ setProp(_el$11, "paddingRight", 1);
31004
+ setProp(_el$11, "onMouseUp", () => {
31005
+ setEffortCursor(i2());
31006
+ props.onPick({
31007
+ id: choice.id,
31008
+ effort: choice.effort
31009
+ });
31010
+ dialog.clear();
31011
+ });
30918
31012
  setProp(_el$12, "wrapMode", "none");
30919
- insert(_el$12, () => parts().hint);
30920
- effect((_$p) => setProp(_el$12, "fg", active() ? theme.selectedListItemText : theme.textMuted, _$p));
30921
- return _el$12;
30922
- })() : null;
30923
- })(), null);
30924
- effect((_p$) => {
30925
- var _v$5 = active() ? theme.primary : undefined, _v$6 = active() ? theme.selectedListItemText : theme.text, _v$7 = active() ? TextAttributes24.BOLD : undefined, _v$8 = active() ? theme.selectedListItemText : theme.text, _v$9 = active() ? TextAttributes24.BOLD : undefined;
30926
- _v$5 !== _p$.e && (_p$.e = setProp(_el$1, "backgroundColor", _v$5, _p$.e));
30927
- _v$6 !== _p$.t && (_p$.t = setProp(_el$10, "fg", _v$6, _p$.t));
30928
- _v$7 !== _p$.a && (_p$.a = setProp(_el$10, "attributes", _v$7, _p$.a));
30929
- _v$8 !== _p$.o && (_p$.o = setProp(_el$11, "fg", _v$8, _p$.o));
30930
- _v$9 !== _p$.i && (_p$.i = setProp(_el$11, "attributes", _v$9, _p$.i));
30931
- return _p$;
30932
- }, {
30933
- e: undefined,
30934
- t: undefined,
30935
- a: undefined,
30936
- o: undefined,
30937
- i: undefined
30938
- });
30939
- return _el$1;
30940
- })();
30941
- }
30942
- }));
30943
- insertNode(_el$8, _el$9);
30944
- setProp(_el$8, "paddingBottom", 1);
30945
- insertNode(_el$9, createTextNode(`\u2191\u2193 pick \xB7 enter select \xB7 esc cancel`));
31013
+ insert(_el$12, () => active() ? "\u25B8 " : " ", null);
31014
+ insert(_el$12, () => choice.label, null);
31015
+ insert(_el$11, (() => {
31016
+ var _c$2 = memo2(() => !!choice.hint);
31017
+ return () => _c$2() ? (() => {
31018
+ var _el$13 = createElement("text");
31019
+ setProp(_el$13, "wrapMode", "none");
31020
+ insert(_el$13, () => choice.hint);
31021
+ effect((_$p) => setProp(_el$13, "fg", active() ? theme.selectedListItemText : theme.textMuted, _$p));
31022
+ return _el$13;
31023
+ })() : null;
31024
+ })(), null);
31025
+ effect((_p$) => {
31026
+ var _v$8 = active() ? theme.primary : undefined, _v$9 = active() ? theme.selectedListItemText : theme.text, _v$0 = active() ? TextAttributes24.BOLD : undefined;
31027
+ _v$8 !== _p$.e && (_p$.e = setProp(_el$11, "backgroundColor", _v$8, _p$.e));
31028
+ _v$9 !== _p$.t && (_p$.t = setProp(_el$12, "fg", _v$9, _p$.t));
31029
+ _v$0 !== _p$.a && (_p$.a = setProp(_el$12, "attributes", _v$0, _p$.a));
31030
+ return _p$;
31031
+ }, {
31032
+ e: undefined,
31033
+ t: undefined,
31034
+ a: undefined
31035
+ });
31036
+ return _el$11;
31037
+ })();
31038
+ }
31039
+ }), null);
31040
+ effect((_p$) => {
31041
+ var { textMuted: _v$5, text: _v$6 } = theme, _v$7 = TextAttributes24.BOLD;
31042
+ _v$5 !== _p$.e && (_p$.e = setProp(_el$0, "fg", _v$5, _p$.e));
31043
+ _v$6 !== _p$.t && (_p$.t = setProp(_el$10, "fg", _v$6, _p$.t));
31044
+ _v$7 !== _p$.a && (_p$.a = setProp(_el$10, "attributes", _v$7, _p$.a));
31045
+ return _p$;
31046
+ }, {
31047
+ e: undefined,
31048
+ t: undefined,
31049
+ a: undefined
31050
+ });
31051
+ return _el$8;
31052
+ })() : (() => {
31053
+ var _el$14 = createElement("box");
31054
+ setProp(_el$14, "flexDirection", "column");
31055
+ setProp(_el$14, "paddingBottom", 1);
31056
+ insert(_el$14, createComponent2(For, {
31057
+ get each() {
31058
+ return models();
31059
+ },
31060
+ children: (model, i2) => {
31061
+ const active = () => i2() === cursor();
31062
+ const hasEfforts = () => modelPickerEffortOptions(model).some((choice) => choice.effort !== undefined);
31063
+ return (() => {
31064
+ var _el$15 = createElement("box"), _el$16 = createElement("text"), _el$17 = createElement("text");
31065
+ insertNode(_el$15, _el$16);
31066
+ insertNode(_el$15, _el$17);
31067
+ setProp(_el$15, "flexDirection", "row");
31068
+ setProp(_el$15, "gap", 2);
31069
+ setProp(_el$15, "paddingLeft", 1);
31070
+ setProp(_el$15, "paddingRight", 1);
31071
+ setProp(_el$15, "onMouseUp", () => {
31072
+ const efforts = modelPickerEffortOptions(model);
31073
+ if (efforts.length <= 1 && efforts[0]?.effort === undefined) {
31074
+ props.onPick({
31075
+ id: model.id,
31076
+ effort: undefined
31077
+ });
31078
+ dialog.clear();
31079
+ return;
31080
+ }
31081
+ setCursor(i2());
31082
+ setSelectedModel(model);
31083
+ setInitialEffortCursor(model);
31084
+ });
31085
+ setProp(_el$16, "wrapMode", "none");
31086
+ insert(_el$16, () => active() ? "\u25B8 " : " ", null);
31087
+ insert(_el$16, () => model.label, null);
31088
+ setProp(_el$17, "wrapMode", "none");
31089
+ insert(_el$17, () => model.vendor);
31090
+ insert(_el$15, (() => {
31091
+ var _c$3 = memo2(() => !!hasEfforts());
31092
+ return () => _c$3() ? (() => {
31093
+ var _el$18 = createElement("text");
31094
+ insertNode(_el$18, createTextNode(`effort\u2026`));
31095
+ setProp(_el$18, "wrapMode", "none");
31096
+ effect((_$p) => setProp(_el$18, "fg", active() ? theme.selectedListItemText : theme.textMuted, _$p));
31097
+ return _el$18;
31098
+ })() : null;
31099
+ })(), null);
31100
+ insert(_el$15, (() => {
31101
+ var _c$4 = memo2(() => !!model.hint);
31102
+ return () => _c$4() ? (() => {
31103
+ var _el$20 = createElement("text");
31104
+ setProp(_el$20, "wrapMode", "none");
31105
+ insert(_el$20, () => model.hint);
31106
+ effect((_$p) => setProp(_el$20, "fg", active() ? theme.selectedListItemText : theme.textMuted, _$p));
31107
+ return _el$20;
31108
+ })() : null;
31109
+ })(), null);
31110
+ effect((_p$) => {
31111
+ var _v$1 = active() ? theme.primary : undefined, _v$10 = active() ? theme.selectedListItemText : theme.text, _v$11 = active() ? TextAttributes24.BOLD : undefined, _v$12 = active() ? theme.selectedListItemText : theme.textMuted;
31112
+ _v$1 !== _p$.e && (_p$.e = setProp(_el$15, "backgroundColor", _v$1, _p$.e));
31113
+ _v$10 !== _p$.t && (_p$.t = setProp(_el$16, "fg", _v$10, _p$.t));
31114
+ _v$11 !== _p$.a && (_p$.a = setProp(_el$16, "attributes", _v$11, _p$.a));
31115
+ _v$12 !== _p$.o && (_p$.o = setProp(_el$17, "fg", _v$12, _p$.o));
31116
+ return _p$;
31117
+ }, {
31118
+ e: undefined,
31119
+ t: undefined,
31120
+ a: undefined,
31121
+ o: undefined
31122
+ });
31123
+ return _el$15;
31124
+ })();
31125
+ }
31126
+ }));
31127
+ return _el$14;
31128
+ })();
31129
+ })(), _el$6);
31130
+ insertNode(_el$6, _el$7);
31131
+ setProp(_el$6, "paddingBottom", 1);
31132
+ insert(_el$7, () => inEffortStep() ? "\u2191\u2193 pick \xB7 enter select \xB7 h back \xB7 esc cancel" : "\u2191\u2193 pick \xB7 enter select \xB7 esc cancel");
30946
31133
  effect((_p$) => {
30947
31134
  var _v$ = TextAttributes24.BOLD, _v$2 = theme.text, _v$3 = theme.textMuted, _v$4 = theme.textMuted;
30948
31135
  _v$ !== _p$.e && (_p$.e = setProp(_el$3, "attributes", _v$, _p$.e));
30949
31136
  _v$2 !== _p$.t && (_p$.t = setProp(_el$3, "fg", _v$2, _p$.t));
30950
- _v$3 !== _p$.a && (_p$.a = setProp(_el$5, "fg", _v$3, _p$.a));
30951
- _v$4 !== _p$.o && (_p$.o = setProp(_el$9, "fg", _v$4, _p$.o));
31137
+ _v$3 !== _p$.a && (_p$.a = setProp(_el$4, "fg", _v$3, _p$.a));
31138
+ _v$4 !== _p$.o && (_p$.o = setProp(_el$7, "fg", _v$4, _p$.o));
30952
31139
  return _p$;
30953
31140
  }, {
30954
31141
  e: undefined,
@@ -30973,7 +31160,6 @@ var init_ModelPicker = __esm(() => {
30973
31160
  init_theme();
30974
31161
  init_keymap();
30975
31162
  init_dialog();
30976
- init_model_picker_row();
30977
31163
  ModelPicker.show = (dialog, current, currentEffort) => {
30978
31164
  return new Promise((resolve4) => {
30979
31165
  dialog.replace(() => createComponent2(ModelPicker, {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@sma1lboy/kobe",
4
- "version": "0.5.17",
4
+ "version": "0.5.19",
5
5
  "description": "TUI orchestrator for Claude Code (codename)",
6
6
  "type": "module",
7
7
  "packageManager": "bun@1.3.13",
@@ -46,7 +46,7 @@
46
46
  "@opentui/core": "0.2.4",
47
47
  "@opentui/solid": "0.2.4",
48
48
  "@xterm/headless": "^6.0.0",
49
- "solid-js": "1.9.10"
49
+ "solid-js": "1.9.12"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@biomejs/biome": "1.9.4",