claude-starter 1.3.2 → 1.3.3

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 (2) hide show
  1. package/index.js +34 -4
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -447,6 +447,16 @@ function runListMode(limit) {
447
447
  function createApp() {
448
448
  const allSessions = loadAllSessions();
449
449
  const meta = loadMeta();
450
+
451
+ // Apply meta customTitles — these take priority over JSONL titles
452
+ // so renames persist even after continuing a conversation
453
+ for (const session of allSessions) {
454
+ const sm = meta.sessions[session.sessionId];
455
+ if (sm && sm.customTitle) {
456
+ session.customTitle = sm.customTitle;
457
+ }
458
+ }
459
+
450
460
  let filteredSessions = [...allSessions];
451
461
  let selectedIndex = -1; // -1 = "New Session", 0+ = session index
452
462
  let filterText = '';
@@ -532,6 +542,16 @@ function createApp() {
532
542
  });
533
543
 
534
544
  function updateFooter() {
545
+ if (isSearchMode) {
546
+ const keys = [
547
+ '{#e0af68-fg}{bold}↵{/} {#e0af68-fg}Confirm{/}',
548
+ '{#7aa2f7-fg}{bold}↑↓{/} {#7aa2f7-fg}Navigate{/}',
549
+ '{#565f89-fg}{bold}⌫{/} {#565f89-fg}Delete char{/}',
550
+ '{#565f89-fg}{bold}Esc{/} {#565f89-fg}Clear{/}',
551
+ ];
552
+ footer.setContent(`\n ${keys.join(' {#414868-fg}│{/} ')}`);
553
+ return;
554
+ }
535
555
  const keys = [
536
556
  '{#9ece6a-fg}{bold}n{/} {#9ece6a-fg}New{/}',
537
557
  '{#7aa2f7-fg}{bold}↵{/} {#7aa2f7-fg}Resume{/}',
@@ -654,6 +674,10 @@ function createApp() {
654
674
  const session = filteredSessions[selectedIndex];
655
675
  loadSessionDetail(session);
656
676
 
677
+ // Meta customTitle takes priority over JSONL
678
+ const sm = meta.sessions[session.sessionId];
679
+ if (sm && sm.customTitle) session.customTitle = sm.customTitle;
680
+
657
681
  const color = getProjectColor(session.project, projectColorMap);
658
682
  let c = '';
659
683
  const sep = ` {#414868-fg}${'─'.repeat(44)}{/}`;
@@ -843,11 +867,13 @@ function createApp() {
843
867
  }
844
868
 
845
869
  screen.key(['down'], () => {
846
- if (renameMode || popupOpen || isSearchMode) return;
870
+ if (renameMode || popupOpen) return;
871
+ if (isSearchMode) { isSearchMode = false; updateHeader(); updateFooter(); screen.render(); }
847
872
  moveSelection(1);
848
873
  });
849
874
  screen.key(['up'], () => {
850
- if (renameMode || popupOpen || isSearchMode) return;
875
+ if (renameMode || popupOpen) return;
876
+ if (isSearchMode) { isSearchMode = false; updateHeader(); updateFooter(); screen.render(); }
851
877
  moveSelection(-1);
852
878
  });
853
879
  screen.key(['home'], () => {
@@ -880,7 +906,9 @@ function createApp() {
880
906
  // Search
881
907
  screen.key(['/'], () => {
882
908
  if (renameMode || isSearchMode) return;
883
- isSearchMode = true; filterText = ''; applyFilter();
909
+ isSearchMode = true;
910
+ if (!filterText) filterText = ''; // keep existing filterText if any
911
+ updateHeader(); updateFooter(); screen.render();
884
912
  });
885
913
 
886
914
  screen.on('keypress', (ch, key) => {
@@ -948,7 +976,7 @@ function createApp() {
948
976
  }
949
977
 
950
978
  if (!isSearchMode) return;
951
- if (key.name === 'return' || key.name === 'enter') { isSearchMode = false; renderAll(); return; }
979
+ if (key.name === 'return' || key.name === 'enter') { isSearchMode = false; searchJustConfirmed = true; renderAll(); return; }
952
980
  if (key.name === 'escape') { isSearchMode = false; filterText = ''; applyFilter(); return; }
953
981
  // Only accept printable characters (exclude control chars like \r \n \t)
954
982
  if (ch && ch.length === 1 && ch.charCodeAt(0) >= 32 && !key.ctrl && !key.meta) { filterText += ch; selectedIndex = -1; applyFilter(); }
@@ -1007,10 +1035,12 @@ function createApp() {
1007
1035
  // Track the rename confirm popup and its session for Enter handling
1008
1036
  let renameConfirmPopup = null;
1009
1037
  let renameConfirmSession = null;
1038
+ let searchJustConfirmed = false;
1010
1039
 
1011
1040
  screen.key(['enter'], () => {
1012
1041
  if (renameMode) return;
1013
1042
  if (renameJustFinished) return;
1043
+ if (searchJustConfirmed) { searchJustConfirmed = false; return; }
1014
1044
  // Handle rename confirm popup Enter
1015
1045
  if (renameConfirmPopup && popupOpen) {
1016
1046
  const session = renameConfirmSession;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-starter",
3
- "version": "1.3.2",
3
+ "version": "1.3.3",
4
4
  "description": "A beautiful terminal UI for managing Claude Code sessions — start new or resume past conversations",
5
5
  "main": "index.js",
6
6
  "bin": {