@yeshwanthyk/coding-agent 0.3.21 → 0.3.23
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/mmem.d.ts +28 -0
- package/dist/mmem.d.ts.map +1 -0
- package/dist/mmem.js +77 -0
- package/dist/mmem.js.map +1 -0
- package/dist/session-picker.d.ts +1 -1
- package/dist/session-picker.d.ts.map +1 -1
- package/dist/session-picker.js +223 -31
- package/dist/session-picker.jsx.map +1 -1
- package/package.json +1 -1
package/dist/mmem.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mmem client for full-text session search
|
|
3
|
+
* Gracefully falls back when mmem unavailable
|
|
4
|
+
*/
|
|
5
|
+
export interface MmemSession {
|
|
6
|
+
path: string;
|
|
7
|
+
title: string;
|
|
8
|
+
lastActivity: number;
|
|
9
|
+
score: number;
|
|
10
|
+
}
|
|
11
|
+
export type MmemSearchResult = {
|
|
12
|
+
ok: true;
|
|
13
|
+
sessions: MmemSession[];
|
|
14
|
+
} | {
|
|
15
|
+
ok: false;
|
|
16
|
+
reason: "not-installed" | "not-indexed" | "exec-error" | "parse-error";
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Search sessions via mmem with full-text search
|
|
20
|
+
* Filters to marvin sessions in the specified cwd
|
|
21
|
+
*/
|
|
22
|
+
export declare function searchSessions(query: string, cwd: string, limit?: number): MmemSearchResult;
|
|
23
|
+
/**
|
|
24
|
+
* Trigger mmem index in background (non-blocking)
|
|
25
|
+
* Call after session ends or when picker opens
|
|
26
|
+
*/
|
|
27
|
+
export declare function triggerBackgroundIndex(): void;
|
|
28
|
+
//# sourceMappingURL=mmem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mmem.d.ts","sourceRoot":"","sources":["../src/mmem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,GACrC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,CAAA;CAAE,CAAC;AAiB1F;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,gBAAgB,CAgDvF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAS7C"}
|
package/dist/mmem.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mmem client for full-text session search
|
|
3
|
+
* Gracefully falls back when mmem unavailable
|
|
4
|
+
*/
|
|
5
|
+
import { spawnSync, spawn } from "bun";
|
|
6
|
+
/**
|
|
7
|
+
* Encode cwd to match marvin's session directory naming
|
|
8
|
+
* e.g., /Users/foo/bar -> --Users--foo--bar--
|
|
9
|
+
*/
|
|
10
|
+
function encodeCwd(cwd) {
|
|
11
|
+
return `--${cwd.replace(/\//g, "--")}--`;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Search sessions via mmem with full-text search
|
|
15
|
+
* Filters to marvin sessions in the specified cwd
|
|
16
|
+
*/
|
|
17
|
+
export function searchSessions(query, cwd, limit = 30) {
|
|
18
|
+
// Check if mmem exists
|
|
19
|
+
const which = spawnSync(["which", "mmem"]);
|
|
20
|
+
if (which.exitCode !== 0) {
|
|
21
|
+
return { ok: false, reason: "not-installed" };
|
|
22
|
+
}
|
|
23
|
+
// Run search
|
|
24
|
+
const result = spawnSync([
|
|
25
|
+
"mmem", "find", query,
|
|
26
|
+
"--agent", "marvin",
|
|
27
|
+
"--scope", "session",
|
|
28
|
+
"--limit", String(limit),
|
|
29
|
+
"--json",
|
|
30
|
+
]);
|
|
31
|
+
if (result.exitCode !== 0) {
|
|
32
|
+
const stderr = result.stderr.toString();
|
|
33
|
+
if (stderr.includes("no such table") || stderr.includes("no index")) {
|
|
34
|
+
return { ok: false, reason: "not-indexed" };
|
|
35
|
+
}
|
|
36
|
+
return { ok: false, reason: "exec-error" };
|
|
37
|
+
}
|
|
38
|
+
// Parse JSON
|
|
39
|
+
let data;
|
|
40
|
+
try {
|
|
41
|
+
const stdout = result.stdout.toString().trim();
|
|
42
|
+
if (!stdout) {
|
|
43
|
+
return { ok: true, sessions: [] };
|
|
44
|
+
}
|
|
45
|
+
data = JSON.parse(stdout);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return { ok: false, reason: "parse-error" };
|
|
49
|
+
}
|
|
50
|
+
// Filter to current cwd and transform
|
|
51
|
+
const encodedCwd = encodeCwd(cwd);
|
|
52
|
+
const sessions = data
|
|
53
|
+
.filter((r) => r.path.includes(encodedCwd))
|
|
54
|
+
.map((r) => ({
|
|
55
|
+
path: r.path,
|
|
56
|
+
title: r.title,
|
|
57
|
+
lastActivity: parseInt(r.last_message_at, 10),
|
|
58
|
+
score: r.score,
|
|
59
|
+
}));
|
|
60
|
+
return { ok: true, sessions };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Trigger mmem index in background (non-blocking)
|
|
64
|
+
* Call after session ends or when picker opens
|
|
65
|
+
*/
|
|
66
|
+
export function triggerBackgroundIndex() {
|
|
67
|
+
try {
|
|
68
|
+
spawn(["mmem", "index"], {
|
|
69
|
+
detached: true,
|
|
70
|
+
stdio: ["ignore", "ignore", "ignore"],
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Silently ignore - mmem may not be installed
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=mmem.js.map
|
package/dist/mmem.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mmem.js","sourceRoot":"","sources":["../src/mmem.ts"],"names":[],"mappings":"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"}
|
package/dist/session-picker.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-picker.d.ts","sourceRoot":"","sources":["../src/session-picker.tsx"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"session-picker.d.ts","sourceRoot":"","sources":["../src/session-picker.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAsR3D,wBAAsB,aAAa,CAClC,cAAc,EAAE,cAAc,GAC5B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6CxB"}
|
package/dist/session-picker.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { effect as _$effect } from "@opentui/solid";
|
|
2
|
+
import { memo as _$memo } from "@opentui/solid";
|
|
2
3
|
import { insert as _$insert } from "@opentui/solid";
|
|
3
4
|
import { createComponent as _$createComponent } from "@opentui/solid";
|
|
4
5
|
import { createTextNode as _$createTextNode } from "@opentui/solid";
|
|
@@ -6,10 +7,12 @@ import { insertNode as _$insertNode } from "@opentui/solid";
|
|
|
6
7
|
import { setProp as _$setProp } from "@opentui/solid";
|
|
7
8
|
import { createElement as _$createElement } from "@opentui/solid";
|
|
8
9
|
/**
|
|
9
|
-
* OpenTUI-based session picker
|
|
10
|
+
* OpenTUI-based session picker with full-text search
|
|
10
11
|
*/
|
|
11
|
-
import { render,
|
|
12
|
-
import { SelectList, ThemeProvider, useTheme } from "@yeshwanthyk/open-tui";
|
|
12
|
+
import { render, useKeyboard, useTerminalDimensions } from "@opentui/solid";
|
|
13
|
+
import { Input, SelectList, ThemeProvider, useTheme } from "@yeshwanthyk/open-tui";
|
|
14
|
+
import { createMemo, createSignal, For, onMount, Show } from "solid-js";
|
|
15
|
+
import { searchSessions, triggerBackgroundIndex } from "./mmem.js";
|
|
13
16
|
/** Detect system dark/light mode (macOS only, defaults to dark) */
|
|
14
17
|
function detectThemeMode() {
|
|
15
18
|
try {
|
|
@@ -19,74 +22,258 @@ function detectThemeMode() {
|
|
|
19
22
|
return "dark";
|
|
20
23
|
}
|
|
21
24
|
}
|
|
25
|
+
function getDateCategory(timestamp) {
|
|
26
|
+
const now = new Date();
|
|
27
|
+
const date = new Date(timestamp);
|
|
28
|
+
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
|
29
|
+
const yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000);
|
|
30
|
+
const weekAgo = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000);
|
|
31
|
+
if (date >= today) return "Today";
|
|
32
|
+
if (date >= yesterday) return "Yesterday";
|
|
33
|
+
if (date >= weekAgo) return "This Week";
|
|
34
|
+
return "Older";
|
|
35
|
+
}
|
|
36
|
+
function groupByDate(sessions) {
|
|
37
|
+
const categories = ["Today", "Yesterday", "This Week", "Older"];
|
|
38
|
+
const grouped = {
|
|
39
|
+
Today: [],
|
|
40
|
+
Yesterday: [],
|
|
41
|
+
"This Week": [],
|
|
42
|
+
Older: []
|
|
43
|
+
};
|
|
44
|
+
for (const session of sessions) {
|
|
45
|
+
const cat = getDateCategory(session.lastActivity);
|
|
46
|
+
grouped[cat].push(session);
|
|
47
|
+
}
|
|
48
|
+
return categories.map(cat => ({
|
|
49
|
+
category: cat,
|
|
50
|
+
sessions: grouped[cat]
|
|
51
|
+
})).filter(g => g.sessions.length > 0);
|
|
52
|
+
}
|
|
22
53
|
function SessionPickerApp(props) {
|
|
23
54
|
const {
|
|
24
55
|
theme
|
|
25
56
|
} = useTheme();
|
|
26
57
|
const dimensions = useTerminalDimensions();
|
|
27
58
|
let listRef;
|
|
28
|
-
const
|
|
59
|
+
const [query, setQuery] = createSignal("");
|
|
60
|
+
const [searchFocused, setSearchFocused] = createSignal(true);
|
|
61
|
+
const [usingFallback, setUsingFallback] = createSignal(false);
|
|
62
|
+
// Trigger background index on mount
|
|
63
|
+
onMount(() => {
|
|
64
|
+
triggerBackgroundIndex();
|
|
65
|
+
});
|
|
66
|
+
// Convert loaded sessions to display format
|
|
67
|
+
const loadedSessions = createMemo(() => props.sessions.map(s => ({
|
|
68
|
+
path: s.path,
|
|
69
|
+
title: s.firstMessage,
|
|
70
|
+
lastActivity: s.lastActivity,
|
|
71
|
+
messageCount: s.messageCount,
|
|
72
|
+
modelId: s.modelId
|
|
73
|
+
})));
|
|
74
|
+
// Search results (mmem or fallback)
|
|
75
|
+
const searchResults = createMemo(() => {
|
|
76
|
+
const q = query().trim();
|
|
77
|
+
if (!q) return null;
|
|
78
|
+
// Try mmem search
|
|
79
|
+
const result = searchSessions(q, props.cwd);
|
|
80
|
+
if (result.ok) {
|
|
81
|
+
setUsingFallback(false);
|
|
82
|
+
return result.sessions;
|
|
83
|
+
}
|
|
84
|
+
// Fallback to title filter
|
|
85
|
+
setUsingFallback(true);
|
|
86
|
+
const lowerQ = q.toLowerCase();
|
|
87
|
+
return loadedSessions().filter(s => s.title.toLowerCase().includes(lowerQ));
|
|
88
|
+
});
|
|
89
|
+
// Final display list
|
|
90
|
+
const displaySessions = createMemo(() => searchResults() ?? loadedSessions());
|
|
91
|
+
// Group by date only when not searching
|
|
92
|
+
const grouped = createMemo(() => {
|
|
93
|
+
if (query().trim()) return null;
|
|
94
|
+
return groupByDate(displaySessions());
|
|
95
|
+
});
|
|
96
|
+
// Flat items for SelectList
|
|
97
|
+
const items = createMemo(() => displaySessions().map(s => ({
|
|
29
98
|
value: s.path,
|
|
30
|
-
label: formatFirstMessage(s.
|
|
31
|
-
description: formatMeta(s.
|
|
32
|
-
}));
|
|
99
|
+
label: formatFirstMessage(s.title),
|
|
100
|
+
description: formatMeta(s.lastActivity, s.messageCount, s.modelId)
|
|
101
|
+
})));
|
|
33
102
|
useKeyboard(e => {
|
|
34
103
|
if (e.name === "up" || e.ctrl && e.name === "p") {
|
|
35
104
|
listRef?.moveUp();
|
|
36
105
|
} else if (e.name === "down" || e.ctrl && e.name === "n") {
|
|
37
106
|
listRef?.moveDown();
|
|
38
|
-
} else if (e.name === "return") {
|
|
107
|
+
} else if (e.name === "return" && !searchFocused()) {
|
|
39
108
|
listRef?.select();
|
|
40
109
|
} else if (e.name === "escape" || e.ctrl && e.name === "c") {
|
|
41
|
-
|
|
110
|
+
if (query()) {
|
|
111
|
+
setQuery("");
|
|
112
|
+
} else {
|
|
113
|
+
props.onCancel();
|
|
114
|
+
}
|
|
42
115
|
}
|
|
43
116
|
});
|
|
117
|
+
const maxVisible = () => Math.min(10, dimensions().height - 6);
|
|
44
118
|
return (() => {
|
|
45
119
|
var _el$ = _$createElement("box"),
|
|
46
120
|
_el$2 = _$createElement("text"),
|
|
47
121
|
_el$4 = _$createElement("box"),
|
|
48
122
|
_el$5 = _$createElement("box"),
|
|
49
|
-
_el$6 = _$createElement("text")
|
|
123
|
+
_el$6 = _$createElement("text"),
|
|
124
|
+
_el$8 = _$createElement("box"),
|
|
125
|
+
_el$9 = _$createElement("box"),
|
|
126
|
+
_el$0 = _$createElement("box"),
|
|
127
|
+
_el$1 = _$createElement("text");
|
|
50
128
|
_$insertNode(_el$, _el$2);
|
|
51
129
|
_$insertNode(_el$, _el$4);
|
|
52
130
|
_$insertNode(_el$, _el$5);
|
|
53
|
-
_$insertNode(_el$, _el$
|
|
131
|
+
_$insertNode(_el$, _el$8);
|
|
132
|
+
_$insertNode(_el$, _el$9);
|
|
133
|
+
_$insertNode(_el$, _el$0);
|
|
54
134
|
_$setProp(_el$, "flexDirection", "column");
|
|
55
135
|
_$insertNode(_el$2, _$createTextNode(`Resume Session`));
|
|
56
136
|
_$setProp(_el$4, "height", 1);
|
|
57
|
-
_$
|
|
58
|
-
|
|
59
|
-
|
|
137
|
+
_$insertNode(_el$5, _el$6);
|
|
138
|
+
_$setProp(_el$5, "flexDirection", "row");
|
|
139
|
+
_$insertNode(_el$6, _$createTextNode(`Search: `));
|
|
140
|
+
_$insert(_el$5, _$createComponent(Input, {
|
|
141
|
+
get value() {
|
|
142
|
+
return query();
|
|
60
143
|
},
|
|
61
|
-
|
|
62
|
-
get
|
|
63
|
-
return
|
|
144
|
+
placeholder: "search sessions...",
|
|
145
|
+
get focused() {
|
|
146
|
+
return searchFocused();
|
|
64
147
|
},
|
|
65
148
|
get width() {
|
|
66
|
-
return dimensions().width -
|
|
149
|
+
return dimensions().width - 12;
|
|
150
|
+
},
|
|
151
|
+
onChange: v => setQuery(v),
|
|
152
|
+
onSubmit: () => setSearchFocused(false),
|
|
153
|
+
onEscape: () => {
|
|
154
|
+
if (query()) {
|
|
155
|
+
setQuery("");
|
|
156
|
+
} else {
|
|
157
|
+
props.onCancel();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}), null);
|
|
161
|
+
_$setProp(_el$8, "height", 1);
|
|
162
|
+
_$insert(_el$, _$createComponent(Show, {
|
|
163
|
+
get when() {
|
|
164
|
+
return grouped();
|
|
67
165
|
},
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
166
|
+
get fallback() {
|
|
167
|
+
return _$createComponent(SelectList, {
|
|
168
|
+
ref: r => {
|
|
169
|
+
listRef = r;
|
|
170
|
+
},
|
|
171
|
+
get items() {
|
|
172
|
+
return items();
|
|
173
|
+
},
|
|
174
|
+
get maxVisible() {
|
|
175
|
+
return maxVisible();
|
|
176
|
+
},
|
|
177
|
+
get width() {
|
|
178
|
+
return dimensions().width - 2;
|
|
179
|
+
},
|
|
180
|
+
onSelect: item => props.onSelect(item.value),
|
|
181
|
+
get onCancel() {
|
|
182
|
+
return props.onCancel;
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
},
|
|
186
|
+
children: groups => (() => {
|
|
187
|
+
var _el$13 = _$createElement("box");
|
|
188
|
+
_$setProp(_el$13, "flexDirection", "column");
|
|
189
|
+
_$insert(_el$13, _$createComponent(For, {
|
|
190
|
+
get each() {
|
|
191
|
+
return groups();
|
|
192
|
+
},
|
|
193
|
+
children: group => (() => {
|
|
194
|
+
var _el$14 = _$createElement("box"),
|
|
195
|
+
_el$15 = _$createElement("text"),
|
|
196
|
+
_el$16 = _$createElement("box");
|
|
197
|
+
_$insertNode(_el$14, _el$15);
|
|
198
|
+
_$insertNode(_el$14, _el$16);
|
|
199
|
+
_$setProp(_el$14, "flexDirection", "column");
|
|
200
|
+
_$insert(_el$15, () => group.category);
|
|
201
|
+
_$insert(_el$14, _$createComponent(For, {
|
|
202
|
+
get each() {
|
|
203
|
+
return group.sessions;
|
|
204
|
+
},
|
|
205
|
+
children: (session, idx) => (() => {
|
|
206
|
+
var _el$17 = _$createElement("text"),
|
|
207
|
+
_el$18 = _$createTextNode(` `),
|
|
208
|
+
_el$19 = _$createElement("span");
|
|
209
|
+
_$insertNode(_el$17, _el$18);
|
|
210
|
+
_$insertNode(_el$17, _el$19);
|
|
211
|
+
_$insert(_el$17, () => idx() === 0 ? "→ " : " ", _el$18);
|
|
212
|
+
_$insert(_el$17, () => formatFirstMessage(session.title), _el$18);
|
|
213
|
+
_$insert(_el$19, () => formatRelativeTime(session.lastActivity));
|
|
214
|
+
_$effect(_p$ => {
|
|
215
|
+
var _v$8 = idx() === 0 ? theme.text : theme.textMuted,
|
|
216
|
+
_v$9 = {
|
|
217
|
+
fg: theme.textMuted
|
|
218
|
+
};
|
|
219
|
+
_v$8 !== _p$.e && (_p$.e = _$setProp(_el$17, "fg", _v$8, _p$.e));
|
|
220
|
+
_v$9 !== _p$.t && (_p$.t = _$setProp(_el$19, "style", _v$9, _p$.t));
|
|
221
|
+
return _p$;
|
|
222
|
+
}, {
|
|
223
|
+
e: undefined,
|
|
224
|
+
t: undefined
|
|
225
|
+
});
|
|
226
|
+
return _el$17;
|
|
227
|
+
})()
|
|
228
|
+
}), _el$16);
|
|
229
|
+
_$setProp(_el$16, "height", 1);
|
|
230
|
+
_$effect(_$p => _$setProp(_el$15, "fg", theme.accent, _$p));
|
|
231
|
+
return _el$14;
|
|
232
|
+
})()
|
|
233
|
+
}));
|
|
234
|
+
return _el$13;
|
|
235
|
+
})()
|
|
236
|
+
}), _el$9);
|
|
237
|
+
_$setProp(_el$9, "flexGrow", 1);
|
|
238
|
+
_$insertNode(_el$0, _el$1);
|
|
239
|
+
_$setProp(_el$0, "flexDirection", "row");
|
|
240
|
+
_$setProp(_el$0, "justifyContent", "space-between");
|
|
241
|
+
_$insertNode(_el$1, _$createTextNode(`↑/↓ navigate · Enter select · Esc cancel`));
|
|
242
|
+
_$insert(_el$0, _$createComponent(Show, {
|
|
243
|
+
get when() {
|
|
244
|
+
return _$memo(() => !!usingFallback())() && query();
|
|
245
|
+
},
|
|
246
|
+
get children() {
|
|
247
|
+
var _el$11 = _$createElement("text");
|
|
248
|
+
_$insertNode(_el$11, _$createTextNode(`[title only]`));
|
|
249
|
+
_$effect(_$p => _$setProp(_el$11, "fg", theme.textMuted, _$p));
|
|
250
|
+
return _el$11;
|
|
71
251
|
}
|
|
72
|
-
}),
|
|
73
|
-
_$setProp(_el$5, "flexGrow", 1);
|
|
74
|
-
_$insertNode(_el$6, _$createTextNode(`↑/↓ navigate · Enter select · Esc cancel`));
|
|
252
|
+
}), null);
|
|
75
253
|
_$effect(_p$ => {
|
|
76
254
|
var _v$ = dimensions().width,
|
|
77
255
|
_v$2 = dimensions().height,
|
|
78
|
-
_v$3 = theme.
|
|
79
|
-
_v$4 =
|
|
256
|
+
_v$3 = theme.text,
|
|
257
|
+
_v$4 = dimensions().width - 2,
|
|
258
|
+
_v$5 = theme.textMuted,
|
|
259
|
+
_v$6 = dimensions().width - 2,
|
|
260
|
+
_v$7 = theme.textMuted;
|
|
80
261
|
_v$ !== _p$.e && (_p$.e = _$setProp(_el$, "width", _v$, _p$.e));
|
|
81
262
|
_v$2 !== _p$.t && (_p$.t = _$setProp(_el$, "height", _v$2, _p$.t));
|
|
82
263
|
_v$3 !== _p$.a && (_p$.a = _$setProp(_el$2, "fg", _v$3, _p$.a));
|
|
83
|
-
_v$4 !== _p$.o && (_p$.o = _$setProp(_el$
|
|
264
|
+
_v$4 !== _p$.o && (_p$.o = _$setProp(_el$5, "width", _v$4, _p$.o));
|
|
265
|
+
_v$5 !== _p$.i && (_p$.i = _$setProp(_el$6, "fg", _v$5, _p$.i));
|
|
266
|
+
_v$6 !== _p$.n && (_p$.n = _$setProp(_el$0, "width", _v$6, _p$.n));
|
|
267
|
+
_v$7 !== _p$.s && (_p$.s = _$setProp(_el$1, "fg", _v$7, _p$.s));
|
|
84
268
|
return _p$;
|
|
85
269
|
}, {
|
|
86
270
|
e: undefined,
|
|
87
271
|
t: undefined,
|
|
88
272
|
a: undefined,
|
|
89
|
-
o: undefined
|
|
273
|
+
o: undefined,
|
|
274
|
+
i: undefined,
|
|
275
|
+
n: undefined,
|
|
276
|
+
s: undefined
|
|
90
277
|
});
|
|
91
278
|
return _el$;
|
|
92
279
|
})();
|
|
@@ -94,9 +281,12 @@ function SessionPickerApp(props) {
|
|
|
94
281
|
function formatFirstMessage(msg) {
|
|
95
282
|
return msg.replace(/\n/g, " ").slice(0, 60);
|
|
96
283
|
}
|
|
97
|
-
function formatMeta(
|
|
98
|
-
const ago = formatRelativeTime(
|
|
99
|
-
|
|
284
|
+
function formatMeta(lastActivity, count, model) {
|
|
285
|
+
const ago = formatRelativeTime(lastActivity);
|
|
286
|
+
const parts = [ago];
|
|
287
|
+
if (count !== undefined) parts.push(`${count} msgs`);
|
|
288
|
+
if (model) parts.push(model);
|
|
289
|
+
return parts.join(" · ");
|
|
100
290
|
}
|
|
101
291
|
function formatRelativeTime(ts) {
|
|
102
292
|
const seconds = Math.floor((Date.now() - ts) / 1000);
|
|
@@ -114,6 +304,7 @@ export async function selectSession(sessionManager) {
|
|
|
114
304
|
const sessions = allSessions.filter(s => s.messageCount > 0 && !s.firstMessage.startsWith("System context:"));
|
|
115
305
|
if (sessions.length === 0) return null;
|
|
116
306
|
if (sessions.length === 1) return sessions[0].path;
|
|
307
|
+
const cwd = process.cwd();
|
|
117
308
|
return new Promise(resolve => {
|
|
118
309
|
let resolved = false;
|
|
119
310
|
const doResolve = value => {
|
|
@@ -132,6 +323,7 @@ export async function selectSession(sessionManager) {
|
|
|
132
323
|
get children() {
|
|
133
324
|
return _$createComponent(SessionPickerApp, {
|
|
134
325
|
sessions: sessions,
|
|
326
|
+
cwd: cwd,
|
|
135
327
|
onSelect: path => doResolve(path),
|
|
136
328
|
onCancel: () => doResolve(null)
|
|
137
329
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-picker.jsx","sourceRoot":"","sources":["../src/session-picker.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"session-picker.jsx","sourceRoot":"","sources":["../src/session-picker.tsx"],"names":[],"mappings":"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"}
|