@yeshwanthyk/coding-agent 0.3.13 → 0.3.14
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/adapters/tui/app.js +29 -17
- package/dist/adapters/tui/{app.js.map → app.jsx.map} +1 -1
- package/dist/components/Footer.js +60 -24
- package/dist/components/{Footer.js.map → Footer.jsx.map} +1 -1
- package/dist/components/Header.js +312 -96
- package/dist/components/{Header.js.map → Header.jsx.map} +1 -1
- package/dist/components/MessageList.js +393 -146
- package/dist/components/MessageList.jsx.map +1 -0
- package/dist/runtime/context.js +15 -9
- package/dist/runtime/context.jsx.map +1 -0
- package/dist/session-picker.js +123 -69
- package/dist/session-picker.jsx.map +1 -0
- package/dist/tui-open-rendering.js +716 -343
- package/dist/tui-open-rendering.jsx.map +1 -0
- package/dist/ui/app-shell/TuiApp.js +590 -441
- package/dist/ui/app-shell/{TuiApp.js.map → TuiApp.jsx.map} +1 -1
- package/dist/ui/components/modals/ConfirmModal.js +80 -23
- package/dist/ui/components/modals/ConfirmModal.jsx.map +1 -0
- package/dist/ui/components/modals/EditorModal.js +55 -15
- package/dist/ui/components/modals/EditorModal.jsx.map +1 -0
- package/dist/ui/components/modals/InputModal.js +36 -9
- package/dist/ui/components/modals/InputModal.jsx.map +1 -0
- package/dist/ui/components/modals/ModalContainer.js +72 -16
- package/dist/ui/components/modals/ModalContainer.jsx.map +1 -0
- package/dist/ui/components/modals/SelectModal.js +53 -24
- package/dist/ui/components/modals/SelectModal.jsx.map +1 -0
- package/dist/ui/features/composer/Composer.js +145 -26
- package/dist/ui/features/composer/Composer.jsx.map +1 -0
- package/dist/ui/features/main-view/MainView.js +341 -248
- package/dist/ui/features/main-view/{MainView.js.map → MainView.jsx.map} +1 -1
- package/dist/ui/features/message-pane/MessagePane.js +46 -4
- package/dist/ui/features/message-pane/MessagePane.jsx.map +1 -0
- package/package.json +2 -2
- package/dist/components/MessageList.js.map +0 -1
- package/dist/runtime/context.js.map +0 -1
- package/dist/session-picker.js.map +0 -1
- package/dist/tui-open-rendering.js.map +0 -1
- package/dist/ui/components/modals/ConfirmModal.js.map +0 -1
- package/dist/ui/components/modals/EditorModal.js.map +0 -1
- package/dist/ui/components/modals/InputModal.js.map +0 -1
- package/dist/ui/components/modals/ModalContainer.js.map +0 -1
- package/dist/ui/components/modals/SelectModal.js.map +0 -1
- package/dist/ui/features/composer/Composer.js.map +0 -1
- package/dist/ui/features/message-pane/MessagePane.js.map +0 -1
package/dist/session-picker.js
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { effect as _$effect } from "@opentui/solid";
|
|
2
|
+
import { insert as _$insert } from "@opentui/solid";
|
|
3
|
+
import { createComponent as _$createComponent } from "@opentui/solid";
|
|
4
|
+
import { createTextNode as _$createTextNode } from "@opentui/solid";
|
|
5
|
+
import { insertNode as _$insertNode } from "@opentui/solid";
|
|
6
|
+
import { setProp as _$setProp } from "@opentui/solid";
|
|
7
|
+
import { createElement as _$createElement } from "@opentui/solid";
|
|
2
8
|
/**
|
|
3
9
|
* OpenTUI-based session picker
|
|
4
10
|
*/
|
|
@@ -6,84 +12,132 @@ import { render, useTerminalDimensions, useKeyboard } from "@opentui/solid";
|
|
|
6
12
|
import { SelectList, ThemeProvider, useTheme } from "@yeshwanthyk/open-tui";
|
|
7
13
|
/** Detect system dark/light mode (macOS only, defaults to dark) */
|
|
8
14
|
function detectThemeMode() {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
15
|
+
try {
|
|
16
|
+
const result = Bun.spawnSync(["defaults", "read", "-g", "AppleInterfaceStyle"]);
|
|
17
|
+
return result.stdout.toString().trim().toLowerCase() === "dark" ? "dark" : "light";
|
|
18
|
+
} catch {
|
|
19
|
+
return "dark";
|
|
20
|
+
}
|
|
16
21
|
}
|
|
17
22
|
function SessionPickerApp(props) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
23
|
+
const {
|
|
24
|
+
theme
|
|
25
|
+
} = useTheme();
|
|
26
|
+
const dimensions = useTerminalDimensions();
|
|
27
|
+
let listRef;
|
|
28
|
+
const items = props.sessions.map(s => ({
|
|
29
|
+
value: s.path,
|
|
30
|
+
label: formatFirstMessage(s.firstMessage),
|
|
31
|
+
description: formatMeta(s.timestamp, s.messageCount, s.modelId)
|
|
32
|
+
}));
|
|
33
|
+
useKeyboard(e => {
|
|
34
|
+
if (e.name === "up" || e.ctrl && e.name === "p") {
|
|
35
|
+
listRef?.moveUp();
|
|
36
|
+
} else if (e.name === "down" || e.ctrl && e.name === "n") {
|
|
37
|
+
listRef?.moveDown();
|
|
38
|
+
} else if (e.name === "return") {
|
|
39
|
+
listRef?.select();
|
|
40
|
+
} else if (e.name === "escape" || e.ctrl && e.name === "c") {
|
|
41
|
+
props.onCancel();
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
return (() => {
|
|
45
|
+
var _el$ = _$createElement("box"),
|
|
46
|
+
_el$2 = _$createElement("text"),
|
|
47
|
+
_el$4 = _$createElement("box"),
|
|
48
|
+
_el$5 = _$createElement("box"),
|
|
49
|
+
_el$6 = _$createElement("text");
|
|
50
|
+
_$insertNode(_el$, _el$2);
|
|
51
|
+
_$insertNode(_el$, _el$4);
|
|
52
|
+
_$insertNode(_el$, _el$5);
|
|
53
|
+
_$insertNode(_el$, _el$6);
|
|
54
|
+
_$setProp(_el$, "flexDirection", "column");
|
|
55
|
+
_$insertNode(_el$2, _$createTextNode(`Resume Session`));
|
|
56
|
+
_$setProp(_el$4, "height", 1);
|
|
57
|
+
_$insert(_el$, _$createComponent(SelectList, {
|
|
58
|
+
ref: r => {
|
|
59
|
+
listRef = r;
|
|
60
|
+
},
|
|
61
|
+
items: items,
|
|
62
|
+
get maxVisible() {
|
|
63
|
+
return Math.min(10, dimensions().height - 4);
|
|
64
|
+
},
|
|
65
|
+
get width() {
|
|
66
|
+
return dimensions().width - 2;
|
|
67
|
+
},
|
|
68
|
+
onSelect: item => props.onSelect(item.value),
|
|
69
|
+
get onCancel() {
|
|
70
|
+
return props.onCancel;
|
|
71
|
+
}
|
|
72
|
+
}), _el$5);
|
|
73
|
+
_$setProp(_el$5, "flexGrow", 1);
|
|
74
|
+
_$insertNode(_el$6, _$createTextNode(`↑/↓ navigate · Enter select · Esc cancel`));
|
|
75
|
+
_$effect(_p$ => {
|
|
76
|
+
var _v$ = dimensions().width,
|
|
77
|
+
_v$2 = dimensions().height,
|
|
78
|
+
_v$3 = theme.textMuted,
|
|
79
|
+
_v$4 = theme.textMuted;
|
|
80
|
+
_v$ !== _p$.e && (_p$.e = _$setProp(_el$, "width", _v$, _p$.e));
|
|
81
|
+
_v$2 !== _p$.t && (_p$.t = _$setProp(_el$, "height", _v$2, _p$.t));
|
|
82
|
+
_v$3 !== _p$.a && (_p$.a = _$setProp(_el$2, "fg", _v$3, _p$.a));
|
|
83
|
+
_v$4 !== _p$.o && (_p$.o = _$setProp(_el$6, "fg", _v$4, _p$.o));
|
|
84
|
+
return _p$;
|
|
85
|
+
}, {
|
|
86
|
+
e: undefined,
|
|
87
|
+
t: undefined,
|
|
88
|
+
a: undefined,
|
|
89
|
+
o: undefined
|
|
39
90
|
});
|
|
40
|
-
return
|
|
91
|
+
return _el$;
|
|
92
|
+
})();
|
|
41
93
|
}
|
|
42
94
|
function formatFirstMessage(msg) {
|
|
43
|
-
|
|
95
|
+
return msg.replace(/\n/g, " ").slice(0, 60);
|
|
44
96
|
}
|
|
45
97
|
function formatMeta(ts, count, model) {
|
|
46
|
-
|
|
47
|
-
|
|
98
|
+
const ago = formatRelativeTime(ts);
|
|
99
|
+
return `${ago} · ${count} msgs · ${model}`;
|
|
48
100
|
}
|
|
49
101
|
function formatRelativeTime(ts) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
return `${hours}h ago`;
|
|
59
|
-
const days = Math.floor(hours / 24);
|
|
60
|
-
return `${days}d ago`;
|
|
102
|
+
const seconds = Math.floor((Date.now() - ts) / 1000);
|
|
103
|
+
if (seconds < 60) return `${seconds}s ago`;
|
|
104
|
+
const minutes = Math.floor(seconds / 60);
|
|
105
|
+
if (minutes < 60) return `${minutes}m ago`;
|
|
106
|
+
const hours = Math.floor(minutes / 60);
|
|
107
|
+
if (hours < 24) return `${hours}h ago`;
|
|
108
|
+
const days = Math.floor(hours / 24);
|
|
109
|
+
return `${days}d ago`;
|
|
61
110
|
}
|
|
62
111
|
export async function selectSession(sessionManager) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
112
|
+
const sessions = sessionManager.loadAllSessions();
|
|
113
|
+
if (sessions.length === 0) return null;
|
|
114
|
+
if (sessions.length === 1) return sessions[0].path;
|
|
115
|
+
return new Promise(resolve => {
|
|
116
|
+
let resolved = false;
|
|
117
|
+
const doResolve = value => {
|
|
118
|
+
if (resolved) return;
|
|
119
|
+
resolved = true;
|
|
120
|
+
if (value === null) {
|
|
121
|
+
// Cancel - exit immediately since we're done
|
|
122
|
+
process.stdout.write("\nNo session selected\n");
|
|
123
|
+
process.exit(0);
|
|
124
|
+
}
|
|
125
|
+
resolve(value);
|
|
126
|
+
};
|
|
127
|
+
const themeMode = detectThemeMode();
|
|
128
|
+
render(() => _$createComponent(ThemeProvider, {
|
|
129
|
+
mode: themeMode,
|
|
130
|
+
get children() {
|
|
131
|
+
return _$createComponent(SessionPickerApp, {
|
|
132
|
+
sessions: sessions,
|
|
133
|
+
onSelect: path => doResolve(path),
|
|
134
|
+
onCancel: () => doResolve(null)
|
|
86
135
|
});
|
|
136
|
+
}
|
|
137
|
+
}), {
|
|
138
|
+
targetFps: 30,
|
|
139
|
+
exitOnCtrlC: false,
|
|
140
|
+
useKittyKeyboard: {}
|
|
87
141
|
});
|
|
88
|
-
}
|
|
89
|
-
|
|
142
|
+
});
|
|
143
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-picker.jsx","sourceRoot":"","sources":["../src/session-picker.tsx"],"names":[],"mappings":"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"}
|