@k1e1n04/mav 0.1.6 → 0.1.7
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/package.json +1 -1
- package/dist/src/config.js +4 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/ui/overview.d.ts +4 -0
- package/dist/src/ui/overview.js +148 -39
- package/dist/src/ui/overview.js.map +1 -1
- package/dist/src/ui/path-completion.d.ts +5 -0
- package/dist/src/ui/path-completion.js +51 -0
- package/dist/src/ui/path-completion.js.map +1 -0
- package/package.json +1 -1
- package/src/config.ts +5 -1
- package/src/ui/overview.ts +155 -42
- package/src/ui/path-completion.ts +59 -0
package/dist/package.json
CHANGED
package/dist/src/config.js
CHANGED
|
@@ -20,10 +20,14 @@ export function loadConfig(configPath) {
|
|
|
20
20
|
const cmd = typeof a.cmd === 'string' && a.cmd.trim().length > 0
|
|
21
21
|
? a.cmd
|
|
22
22
|
: defaults.cmd;
|
|
23
|
+
const cwd = typeof a.cwd === 'string' && a.cwd.trim().length > 0
|
|
24
|
+
? a.cwd.replace(/^~/, process.env.HOME ?? '~')
|
|
25
|
+
: undefined;
|
|
23
26
|
return {
|
|
24
27
|
type: a.type,
|
|
25
28
|
cmd,
|
|
26
29
|
args: Array.isArray(a.args) ? a.args : defaults.args,
|
|
30
|
+
cwd,
|
|
27
31
|
resumeArgs: Array.isArray(a.resumeArgs) ? a.resumeArgs : defaults.resumeArgs,
|
|
28
32
|
};
|
|
29
33
|
});
|
package/dist/src/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAcpD,MAAM,cAAc,GAAc;IAChC,MAAM,EAAE,EAAE;CACX,CAAA;AAED,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAwE,CAAA;IAEnG,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,MAAM,MAAM,GAAkB,MAAM,CAAC,MAAM;SACxC,MAAM,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAcpD,MAAM,cAAc,GAAc;IAChC,MAAM,EAAE,EAAE;CACX,CAAA;AAED,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAwE,CAAA;IAEnG,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,MAAM,MAAM,GAAkB,MAAM,CAAC,MAAM;SACxC,MAAM,CAAC,CAAC,CAAC,EAA6F,EAAE,CACvG,OAAO,CAAC,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CACjD;SACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACzC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC9D,CAAC,CAAC,CAAC,CAAC,GAAG;YACP,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAA;QAChB,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC9D,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;YAC9C,CAAC,CAAC,SAAS,CAAA;QACb,OAAO;YACL,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,GAAG;YACH,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;YACpD,GAAG;YACH,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU;SAC7E,CAAA;IACH,CAAC,CAAC,CAAA;IAEJ,OAAO,EAAE,MAAM,EAAE,CAAA;AACnB,CAAC"}
|
|
@@ -11,8 +11,12 @@ export declare class OverviewUI {
|
|
|
11
11
|
constructor(screen: Widgets.Screen, manager: SessionManager, onSessionCreated?: (session: SessionManager['selectedSession']) => void);
|
|
12
12
|
private bindKeys;
|
|
13
13
|
private showAddPrompt;
|
|
14
|
+
private showCwdPrompt;
|
|
15
|
+
private spawnAgent;
|
|
14
16
|
private showError;
|
|
15
17
|
private syncList;
|
|
18
|
+
private groupByCwd;
|
|
19
|
+
private shortenPath;
|
|
16
20
|
private getOrderedSessions;
|
|
17
21
|
private moveSelection;
|
|
18
22
|
private getStatusLabel;
|
package/dist/src/ui/overview.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import blessed from 'neo-blessed';
|
|
2
2
|
import { getAgentDefaults, resolveSessionArgs } from '../agent-launch.js';
|
|
3
|
+
import { completePath } from './path-completion.js';
|
|
3
4
|
export class OverviewUI {
|
|
4
5
|
static STATUS_GROUPS = [
|
|
5
6
|
{ status: 'running', label: 'Working' },
|
|
@@ -116,33 +117,115 @@ export class OverviewUI {
|
|
|
116
117
|
prompt.key('enter', () => {
|
|
117
118
|
const selectedIdx = prompt.selected ?? 0;
|
|
118
119
|
const selected = agentTypes[selectedIdx];
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const session = this.manager.addSession({
|
|
123
|
-
type: selected,
|
|
124
|
-
cmd: defaults.cmd,
|
|
125
|
-
args,
|
|
126
|
-
cwd: process.cwd(),
|
|
127
|
-
});
|
|
128
|
-
session.baseArgs = defaults.args;
|
|
129
|
-
if (newSessionId != null) {
|
|
130
|
-
session.sessionId = newSessionId;
|
|
131
|
-
}
|
|
132
|
-
if (session.status === 'error') {
|
|
133
|
-
this.manager.removeSession(session.id);
|
|
134
|
-
this.showError(`'${defaults.cmd}' command not found.\nIs ${selected} installed?`);
|
|
135
|
-
this.syncList();
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
this.manager.selectSession(this.manager.sessions.length - 1);
|
|
139
|
-
this.syncList();
|
|
140
|
-
this.onSessionCreated?.(session);
|
|
120
|
+
prompt.destroy();
|
|
121
|
+
this.screen.render();
|
|
122
|
+
this.showCwdPrompt(selected);
|
|
141
123
|
});
|
|
142
124
|
prompt.key('escape', close);
|
|
143
125
|
prompt.focus();
|
|
144
126
|
this.screen.render();
|
|
145
127
|
}
|
|
128
|
+
showCwdPrompt(agentType) {
|
|
129
|
+
let value = process.cwd();
|
|
130
|
+
let candidateList = null;
|
|
131
|
+
const box = blessed.box({
|
|
132
|
+
parent: this.screen,
|
|
133
|
+
top: 'center',
|
|
134
|
+
left: 'center',
|
|
135
|
+
width: 60,
|
|
136
|
+
height: 3,
|
|
137
|
+
border: { type: 'line' },
|
|
138
|
+
label: ' cwd Tab:補完 Enter:確定 Esc:キャンセル ',
|
|
139
|
+
style: { border: { fg: 'green' } },
|
|
140
|
+
});
|
|
141
|
+
const renderInput = () => {
|
|
142
|
+
box.setContent(value);
|
|
143
|
+
this.screen.render();
|
|
144
|
+
};
|
|
145
|
+
const closeCandidates = () => {
|
|
146
|
+
if (candidateList) {
|
|
147
|
+
candidateList.destroy();
|
|
148
|
+
candidateList = null;
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
const cleanup = () => {
|
|
152
|
+
this.screen.removeListener('keypress', onKeypress);
|
|
153
|
+
closeCandidates();
|
|
154
|
+
this.promptOpen = false;
|
|
155
|
+
box.destroy();
|
|
156
|
+
this.listBox.focus();
|
|
157
|
+
this.screen.render();
|
|
158
|
+
};
|
|
159
|
+
const onKeypress = (_ch, key) => {
|
|
160
|
+
if (!key)
|
|
161
|
+
return;
|
|
162
|
+
closeCandidates();
|
|
163
|
+
if (key.name === 'enter' || key.name === 'return') {
|
|
164
|
+
const expanded = value.trim().replace(/^~/, process.env.HOME ?? '~') || process.cwd();
|
|
165
|
+
cleanup();
|
|
166
|
+
this.spawnAgent(agentType, expanded);
|
|
167
|
+
}
|
|
168
|
+
else if (key.name === 'escape') {
|
|
169
|
+
cleanup();
|
|
170
|
+
}
|
|
171
|
+
else if (key.name === 'tab') {
|
|
172
|
+
const { completed, candidates } = completePath(value);
|
|
173
|
+
value = completed;
|
|
174
|
+
if (candidates.length > 1) {
|
|
175
|
+
const maxVisible = Math.min(candidates.length, 8);
|
|
176
|
+
candidateList = blessed.list({
|
|
177
|
+
parent: this.screen,
|
|
178
|
+
top: '50%',
|
|
179
|
+
left: 'center',
|
|
180
|
+
width: 60,
|
|
181
|
+
height: maxVisible + 2,
|
|
182
|
+
border: { type: 'line' },
|
|
183
|
+
items: candidates,
|
|
184
|
+
keys: false,
|
|
185
|
+
style: { border: { fg: 'cyan' } },
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
renderInput();
|
|
189
|
+
}
|
|
190
|
+
else if (key.name === 'backspace') {
|
|
191
|
+
value = value.slice(0, -1);
|
|
192
|
+
renderInput();
|
|
193
|
+
}
|
|
194
|
+
else if (!key.ctrl && !key.meta && key.sequence?.length === 1) {
|
|
195
|
+
value += key.sequence;
|
|
196
|
+
renderInput();
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
// 現在のキーイベント(enter)がこのリスナーに届かないよう1tick遅らせる
|
|
200
|
+
setImmediate(() => {
|
|
201
|
+
this.screen.on('keypress', onKeypress);
|
|
202
|
+
});
|
|
203
|
+
box.focus();
|
|
204
|
+
renderInput();
|
|
205
|
+
}
|
|
206
|
+
spawnAgent(agentType, cwd) {
|
|
207
|
+
const defaults = getAgentDefaults(agentType);
|
|
208
|
+
const { args, newSessionId } = resolveSessionArgs(agentType, defaults.args, undefined, false);
|
|
209
|
+
const session = this.manager.addSession({
|
|
210
|
+
type: agentType,
|
|
211
|
+
cmd: defaults.cmd,
|
|
212
|
+
args,
|
|
213
|
+
cwd,
|
|
214
|
+
});
|
|
215
|
+
session.baseArgs = defaults.args;
|
|
216
|
+
if (newSessionId != null) {
|
|
217
|
+
session.sessionId = newSessionId;
|
|
218
|
+
}
|
|
219
|
+
if (session.status === 'error') {
|
|
220
|
+
this.manager.removeSession(session.id);
|
|
221
|
+
this.showError(`'${defaults.cmd}' command not found.\nIs ${agentType} installed?`);
|
|
222
|
+
this.syncList();
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
this.manager.selectSession(this.manager.sessions.length - 1);
|
|
226
|
+
this.syncList();
|
|
227
|
+
this.onSessionCreated?.(session);
|
|
228
|
+
}
|
|
146
229
|
showError(message) {
|
|
147
230
|
const overlay = blessed.box({
|
|
148
231
|
parent: this.screen,
|
|
@@ -170,23 +253,27 @@ export class OverviewUI {
|
|
|
170
253
|
const items = [];
|
|
171
254
|
const selectedId = this.manager.selectedSession?.id;
|
|
172
255
|
let selectedDisplayIndex = -1;
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
256
|
+
const cwdGroups = this.groupByCwd(orderedSessions);
|
|
257
|
+
for (const [cwd, sessions] of cwdGroups) {
|
|
258
|
+
items.push(` {bold}${this.shortenPath(cwd)}{/bold}`);
|
|
259
|
+
for (const group of OverviewUI.STATUS_GROUPS) {
|
|
260
|
+
const groupSessions = sessions.filter((s) => s.status === group.status);
|
|
261
|
+
if (groupSessions.length === 0)
|
|
262
|
+
continue;
|
|
263
|
+
items.push(` ${group.label}`);
|
|
264
|
+
for (const session of groupSessions) {
|
|
265
|
+
const statusIcon = session.status === 'running' ? '⣾'
|
|
266
|
+
: session.status === 'idle' ? '○'
|
|
267
|
+
: session.status === 'done' ? '✓'
|
|
268
|
+
: '✗';
|
|
269
|
+
const sessionTitle = session.displayName ?? session.id;
|
|
270
|
+
const sessionLabel = session.type ? `${sessionTitle} (${session.type})` : sessionTitle;
|
|
271
|
+
const content = `${statusIcon} ${sessionLabel} ${this.getStatusLabel(session.status)}`;
|
|
272
|
+
const color = OverviewUI.STATUS_COLORS[session.status];
|
|
273
|
+
items.push(` {${color}-fg}${content}{/${color}-fg}`);
|
|
274
|
+
if (session.id === selectedId) {
|
|
275
|
+
selectedDisplayIndex = items.length - 1;
|
|
276
|
+
}
|
|
190
277
|
}
|
|
191
278
|
}
|
|
192
279
|
}
|
|
@@ -195,8 +282,30 @@ export class OverviewUI {
|
|
|
195
282
|
this.listBox.select(selectedDisplayIndex);
|
|
196
283
|
}
|
|
197
284
|
}
|
|
285
|
+
groupByCwd(sessions) {
|
|
286
|
+
const map = new Map();
|
|
287
|
+
for (const session of sessions) {
|
|
288
|
+
const key = session.cwd ?? process.cwd();
|
|
289
|
+
if (!map.has(key))
|
|
290
|
+
map.set(key, []);
|
|
291
|
+
map.get(key).push(session);
|
|
292
|
+
}
|
|
293
|
+
return map;
|
|
294
|
+
}
|
|
295
|
+
shortenPath(p) {
|
|
296
|
+
const home = process.env.HOME;
|
|
297
|
+
if (home && p.startsWith(home)) {
|
|
298
|
+
return '~' + p.slice(home.length);
|
|
299
|
+
}
|
|
300
|
+
return p;
|
|
301
|
+
}
|
|
198
302
|
getOrderedSessions() {
|
|
199
303
|
return [...this.manager.sessions].sort((a, b) => {
|
|
304
|
+
const cwdA = a.cwd ?? process.cwd();
|
|
305
|
+
const cwdB = b.cwd ?? process.cwd();
|
|
306
|
+
const cwdDiff = cwdA.localeCompare(cwdB);
|
|
307
|
+
if (cwdDiff !== 0)
|
|
308
|
+
return cwdDiff;
|
|
200
309
|
const rankDiff = this.getStatusRank(a.status) - this.getStatusRank(b.status);
|
|
201
310
|
if (rankDiff !== 0)
|
|
202
311
|
return rankDiff;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../src/ui/overview.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../src/ui/overview.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,aAAa,CAAA;AAIjC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,MAAM,OAAO,UAAU;IACb,MAAM,CAAU,aAAa,GAAG;QACtC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;QACvC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE;QACpC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;QACrC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;KAC5B,CAAA;IACF,MAAM,CAAU,aAAa,GAAG;QACtC,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,KAAK;KACJ,CAAA;IAEF,MAAM,CAAgB;IACtB,OAAO,CAAgB;IACvB,gBAAgB,CAAuD;IACvE,OAAO,CAAqB;IAC5B,UAAU,GAAG,KAAK,CAAA;IAE1B,YACE,MAAsB,EACtB,OAAuB,EACvB,gBAAuE;QAEvE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QAExC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACxB,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,IAAI;YACV,KAAK,EAAE;gBACL,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE;gBACrC,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;aACvB;YACD,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI;SACZ,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,EAAE,CAAA;QACf,IAAI,CAAC,QAAQ,EAAE,CAAA;QAEf,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,SAAiB,EAAE,EAAE;YACvC,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,EAAE,CAAC;gBACnD,OAAM;YACR,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAA;YACf,MAAM,CAAC,MAAM,EAAE,CAAA;QACjB,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACtB,IAAI,CAAC,QAAQ,EAAE,CAAA;YACf,MAAM,CAAC,MAAM,EAAE,CAAA;QACjB,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxB,IAAI,CAAC,QAAQ,EAAE,CAAA;YACf,MAAM,CAAC,MAAM,EAAE,CAAA;QACjB,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACtB,IAAI,CAAC,QAAQ,EAAE,CAAA;YACf,MAAM,CAAC,MAAM,EAAE,CAAA;QACjB,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE;YACjC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAC9C,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;YACtB,IAAI,CAAC,QAAQ,EAAE,CAAA;YACf,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE;YACnC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAC9C,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;YACrB,IAAI,CAAC,QAAQ,EAAE,CAAA;YACf,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;YACzB,IAAI,CAAC,aAAa,EAAE,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAA;YAC5C,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;gBACtC,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;YACtB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAM;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QAEtB,MAAM,UAAU,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC,CAAA;QAEpE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC;YAC7B,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACxB,KAAK,EAAE,qBAAqB;YAC5B,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,IAAI;YACV,KAAK,EAAE;gBACL,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE;gBACrC,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;aACxB;SACF,CAAC,CAAA;QAEF,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;YACvB,MAAM,CAAC,OAAO,EAAE,CAAA;YAChB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;YACpB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;QACtB,CAAC,CAAA;QAED,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,MAAM,WAAW,GAAI,MAA0C,CAAC,QAAQ,IAAI,CAAC,CAAA;YAC7E,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAE,CAAA;YACzC,MAAM,CAAC,OAAO,EAAE,CAAA;YAChB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;YACpB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAA;QAEF,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QAE3B,MAAM,CAAC,KAAK,EAAE,CAAA;QACd,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;IACtB,CAAC;IAEO,aAAa,CAAC,SAAiB;QACrC,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;QACzB,IAAI,aAAa,GAA+B,IAAI,CAAA;QAEpD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACxB,KAAK,EAAE,oCAAoC;YAC3C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;SACnC,CAAC,CAAA;QAEF,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;YACrB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;QACtB,CAAC,CAAA;QAED,MAAM,eAAe,GAAG,GAAG,EAAE;YAC3B,IAAI,aAAa,EAAE,CAAC;gBAClB,aAAa,CAAC,OAAO,EAAE,CAAA;gBACvB,aAAa,GAAG,IAAI,CAAA;YACtB,CAAC;QACH,CAAC,CAAA;QAED,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;YAClD,eAAe,EAAE,CAAA;YACjB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;YACvB,GAAG,CAAC,OAAO,EAAE,CAAA;YACb,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;YACpB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;QACtB,CAAC,CAAA;QAED,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,GAAwE,EAAE,EAAE;YAC3G,IAAI,CAAC,GAAG;gBAAE,OAAM;YAChB,eAAe,EAAE,CAAA;YAEjB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;gBACrF,OAAO,EAAE,CAAA;gBACT,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YACtC,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACjC,OAAO,EAAE,CAAA;YACX,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC9B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;gBACrD,KAAK,GAAG,SAAS,CAAA;gBACjB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;oBACjD,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;wBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,GAAG,EAAE,KAAK;wBACV,IAAI,EAAE,QAAQ;wBACd,KAAK,EAAE,EAAE;wBACT,MAAM,EAAE,UAAU,GAAG,CAAC;wBACtB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;wBACxB,KAAK,EAAE,UAAU;wBACjB,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;qBAClC,CAAwB,CAAA;gBAC3B,CAAC;gBACD,WAAW,EAAE,CAAA;YACf,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACpC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;gBAC1B,WAAW,EAAE,CAAA;YACf,CAAC;iBAAM,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChE,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAA;gBACrB,WAAW,EAAE,CAAA;YACf,CAAC;QACH,CAAC,CAAA;QAED,0CAA0C;QAC1C,YAAY,CAAC,GAAG,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QACF,GAAG,CAAC,KAAK,EAAE,CAAA;QACX,WAAW,EAAE,CAAA;IACf,CAAC;IAEO,UAAU,CAAC,SAAiB,EAAE,GAAW;QAC/C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAA;QAC5C,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;QAC7F,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YACtC,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,IAAI;YACJ,GAAG;SACJ,CAA0C,CAAA;QAC3C,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAA;QAChC,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YACzB,OAAO,CAAC,SAAS,GAAG,YAAY,CAAA;QAClC,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACtC,IAAI,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,GAAG,4BAA4B,SAAS,aAAa,CAAC,CAAA;YAClF,IAAI,CAAC,QAAQ,EAAE,CAAA;YACf,OAAM;QACR,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAC5D,IAAI,CAAC,QAAQ,EAAE,CAAA;QACf,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IAEO,SAAS,CAAC,OAAe;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;YAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YACtC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACxB,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAChD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;YACtD,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI;SACZ,CAAC,CAAA;QACF,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE;YACzC,OAAO,CAAC,OAAO,EAAE,CAAA;YACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;YACpB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;QACtB,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,KAAK,EAAE,CAAA;QACf,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;IACtB,CAAC;IAEO,QAAQ;QACd,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAEjD,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAA;QACnD,IAAI,oBAAoB,GAAG,CAAC,CAAC,CAAA;QAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;QAClD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAEpD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;gBAC7C,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAA;gBACvE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAQ;gBAExC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;gBAC9B,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;oBACpC,MAAM,UAAU,GACd,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG;wBAClC,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAI,CAAC,CAAC,GAAG;4BACpC,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAI,CAAC,CAAC,GAAG;gCACpC,CAAC,CAAC,GAAG,CAAA;oBACP,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,EAAE,CAAA;oBACtD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,YAAY,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,CAAA;oBACtF,MAAM,OAAO,GAAG,GAAG,UAAU,IAAI,YAAY,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAA;oBACvF,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;oBACtD,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,OAAO,KAAK,KAAK,MAAM,CAAC,CAAA;oBACrD,IAAI,OAAO,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;wBAC9B,oBAAoB,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;oBACzC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC5B,IAAI,oBAAoB,IAAI,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,QAAoC;QACrD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAsC,CAAA;QACzD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;YACxC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;YACnC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC7B,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAEO,WAAW,CAAC,CAAS;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAA;QAC7B,IAAI,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACnC,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAEO,kBAAkB;QACxB,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC9C,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;YACnC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;YACxC,IAAI,OAAO,KAAK,CAAC;gBAAE,OAAO,OAAO,CAAA;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YAC5E,IAAI,QAAQ,KAAK,CAAC;gBAAE,OAAO,QAAQ,CAAA;YACnC,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,aAAa,CAAC,SAAiB;QACrC,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAA;QACnD,MAAM,YAAY,GAAG,UAAU;YAC7B,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,UAAU,CAAC;YACnE,CAAC,CAAC,CAAC,CAAC,CAAA;QACN,MAAM,SAAS,GAAG,YAAY,KAAK,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC,CAAC,CAAA;QAC/E,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,CAAA;QAC9C,IAAI,CAAC,WAAW;YAAE,OAAM;QAExB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,CAAC,CAAA;QAChG,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,MAAc;QACnC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAA;YAClB,KAAK,MAAM;gBACT,OAAO,SAAS,CAAA;YAClB,KAAK,MAAM;gBACT,OAAO,UAAU,CAAA;YACnB,KAAK,OAAO;gBACV,OAAO,QAAQ,CAAA;YACjB;gBACE,OAAO,MAAM,CAAA;QACjB,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,MAAc;QAClC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,SAAS;gBACZ,OAAO,CAAC,CAAA;YACV,KAAK,MAAM;gBACT,OAAO,CAAC,CAAA;YACV,KAAK,MAAM;gBACT,OAAO,CAAC,CAAA;YACV,KAAK,OAAO;gBACV,OAAO,CAAC,CAAA;YACV;gBACE,OAAO,EAAE,CAAA;QACb,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QACnB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QACpB,IAAI,CAAC,QAAQ,EAAE,CAAA;QACf,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;IACtB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAED,qBAAqB;QACnB,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { readdirSync } from 'node:fs';
|
|
2
|
+
import { join, dirname, basename } from 'node:path';
|
|
3
|
+
export function completePath(input) {
|
|
4
|
+
const expanded = input.replace(/^~/, process.env.HOME ?? '~');
|
|
5
|
+
const isAbsolute = expanded.startsWith('/');
|
|
6
|
+
const dir = isAbsolute || expanded.includes('/')
|
|
7
|
+
? dirname(expanded)
|
|
8
|
+
: process.cwd();
|
|
9
|
+
const prefix = basename(expanded);
|
|
10
|
+
let entries;
|
|
11
|
+
try {
|
|
12
|
+
entries = readdirSync(dir, { withFileTypes: true })
|
|
13
|
+
.filter((e) => e.isDirectory() && e.name.startsWith(prefix))
|
|
14
|
+
.map((e) => join(dir, e.name) + '/');
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return { completed: input, candidates: [] };
|
|
18
|
+
}
|
|
19
|
+
if (entries.length === 0) {
|
|
20
|
+
return { completed: input, candidates: [] };
|
|
21
|
+
}
|
|
22
|
+
if (entries.length === 1) {
|
|
23
|
+
return { completed: restoreHome(entries[0], input), candidates: [] };
|
|
24
|
+
}
|
|
25
|
+
const lcp = longestCommonPrefix(entries);
|
|
26
|
+
return {
|
|
27
|
+
completed: restoreHome(lcp, input),
|
|
28
|
+
candidates: entries.map((e) => restoreHome(e, input)),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function longestCommonPrefix(strs) {
|
|
32
|
+
if (strs.length === 0)
|
|
33
|
+
return '';
|
|
34
|
+
let prefix = strs[0];
|
|
35
|
+
for (let i = 1; i < strs.length; i++) {
|
|
36
|
+
while (!strs[i].startsWith(prefix)) {
|
|
37
|
+
prefix = prefix.slice(0, -1);
|
|
38
|
+
if (prefix === '')
|
|
39
|
+
return '';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return prefix;
|
|
43
|
+
}
|
|
44
|
+
function restoreHome(path, original) {
|
|
45
|
+
const home = process.env.HOME;
|
|
46
|
+
if (home && original.startsWith('~') && path.startsWith(home)) {
|
|
47
|
+
return '~' + path.slice(home.length);
|
|
48
|
+
}
|
|
49
|
+
return path;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=path-completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-completion.js","sourceRoot":"","sources":["../../../src/ui/path-completion.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/config.ts
CHANGED
|
@@ -31,7 +31,7 @@ export function loadConfig(configPath: string): MavConfig {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
const agents: AgentConfig[] = parsed.agents
|
|
34
|
-
.filter((a): a is { type: string; cmd?: string; args?: string[]; resumeArgs?: string[] } =>
|
|
34
|
+
.filter((a): a is { type: string; cmd?: string; args?: string[]; cwd?: string; resumeArgs?: string[] } =>
|
|
35
35
|
typeof a?.type === 'string' && a.type.length > 0
|
|
36
36
|
)
|
|
37
37
|
.map((a) => {
|
|
@@ -39,10 +39,14 @@ export function loadConfig(configPath: string): MavConfig {
|
|
|
39
39
|
const cmd = typeof a.cmd === 'string' && a.cmd.trim().length > 0
|
|
40
40
|
? a.cmd
|
|
41
41
|
: defaults.cmd
|
|
42
|
+
const cwd = typeof a.cwd === 'string' && a.cwd.trim().length > 0
|
|
43
|
+
? a.cwd.replace(/^~/, process.env.HOME ?? '~')
|
|
44
|
+
: undefined
|
|
42
45
|
return {
|
|
43
46
|
type: a.type,
|
|
44
47
|
cmd,
|
|
45
48
|
args: Array.isArray(a.args) ? a.args : defaults.args,
|
|
49
|
+
cwd,
|
|
46
50
|
resumeArgs: Array.isArray(a.resumeArgs) ? a.resumeArgs : defaults.resumeArgs,
|
|
47
51
|
}
|
|
48
52
|
})
|
package/src/ui/overview.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { Widgets } from 'neo-blessed'
|
|
|
3
3
|
import type { SessionManager } from '../session-manager.js'
|
|
4
4
|
import type { AgentSession } from '../agent.js'
|
|
5
5
|
import { getAgentDefaults, resolveSessionArgs } from '../agent-launch.js'
|
|
6
|
+
import { completePath } from './path-completion.js'
|
|
6
7
|
|
|
7
8
|
export class OverviewUI {
|
|
8
9
|
private static readonly STATUS_GROUPS = [
|
|
@@ -138,37 +139,122 @@ export class OverviewUI {
|
|
|
138
139
|
prompt.key('enter', () => {
|
|
139
140
|
const selectedIdx = (prompt as unknown as { selected: number }).selected ?? 0
|
|
140
141
|
const selected = agentTypes[selectedIdx]!
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
142
|
+
prompt.destroy()
|
|
143
|
+
this.screen.render()
|
|
144
|
+
this.showCwdPrompt(selected)
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
prompt.key('escape', close)
|
|
148
|
+
|
|
149
|
+
prompt.focus()
|
|
150
|
+
this.screen.render()
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
private showCwdPrompt(agentType: string): void {
|
|
154
|
+
let value = process.cwd()
|
|
155
|
+
let candidateList: Widgets.ListElement | null = null
|
|
156
|
+
|
|
157
|
+
const box = blessed.box({
|
|
158
|
+
parent: this.screen,
|
|
159
|
+
top: 'center',
|
|
160
|
+
left: 'center',
|
|
161
|
+
width: 60,
|
|
162
|
+
height: 3,
|
|
163
|
+
border: { type: 'line' },
|
|
164
|
+
label: ' cwd Tab:補完 Enter:確定 Esc:キャンセル ',
|
|
165
|
+
style: { border: { fg: 'green' } },
|
|
166
|
+
})
|
|
167
|
+
|
|
168
|
+
const renderInput = () => {
|
|
169
|
+
box.setContent(value)
|
|
170
|
+
this.screen.render()
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const closeCandidates = () => {
|
|
174
|
+
if (candidateList) {
|
|
175
|
+
candidateList.destroy()
|
|
176
|
+
candidateList = null
|
|
154
177
|
}
|
|
178
|
+
}
|
|
155
179
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
180
|
+
const cleanup = () => {
|
|
181
|
+
this.screen.removeListener('keypress', onKeypress)
|
|
182
|
+
closeCandidates()
|
|
183
|
+
this.promptOpen = false
|
|
184
|
+
box.destroy()
|
|
185
|
+
this.listBox.focus()
|
|
186
|
+
this.screen.render()
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const onKeypress = (_ch: string, key: { name: string; ctrl?: boolean; meta?: boolean; sequence?: string }) => {
|
|
190
|
+
if (!key) return
|
|
191
|
+
closeCandidates()
|
|
192
|
+
|
|
193
|
+
if (key.name === 'enter' || key.name === 'return') {
|
|
194
|
+
const expanded = value.trim().replace(/^~/, process.env.HOME ?? '~') || process.cwd()
|
|
195
|
+
cleanup()
|
|
196
|
+
this.spawnAgent(agentType, expanded)
|
|
197
|
+
} else if (key.name === 'escape') {
|
|
198
|
+
cleanup()
|
|
199
|
+
} else if (key.name === 'tab') {
|
|
200
|
+
const { completed, candidates } = completePath(value)
|
|
201
|
+
value = completed
|
|
202
|
+
if (candidates.length > 1) {
|
|
203
|
+
const maxVisible = Math.min(candidates.length, 8)
|
|
204
|
+
candidateList = blessed.list({
|
|
205
|
+
parent: this.screen,
|
|
206
|
+
top: '50%',
|
|
207
|
+
left: 'center',
|
|
208
|
+
width: 60,
|
|
209
|
+
height: maxVisible + 2,
|
|
210
|
+
border: { type: 'line' },
|
|
211
|
+
items: candidates,
|
|
212
|
+
keys: false,
|
|
213
|
+
style: { border: { fg: 'cyan' } },
|
|
214
|
+
}) as Widgets.ListElement
|
|
215
|
+
}
|
|
216
|
+
renderInput()
|
|
217
|
+
} else if (key.name === 'backspace') {
|
|
218
|
+
value = value.slice(0, -1)
|
|
219
|
+
renderInput()
|
|
220
|
+
} else if (!key.ctrl && !key.meta && key.sequence?.length === 1) {
|
|
221
|
+
value += key.sequence
|
|
222
|
+
renderInput()
|
|
161
223
|
}
|
|
224
|
+
}
|
|
162
225
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
this.
|
|
226
|
+
// 現在のキーイベント(enter)がこのリスナーに届かないよう1tick遅らせる
|
|
227
|
+
setImmediate(() => {
|
|
228
|
+
this.screen.on('keypress', onKeypress)
|
|
166
229
|
})
|
|
230
|
+
box.focus()
|
|
231
|
+
renderInput()
|
|
232
|
+
}
|
|
167
233
|
|
|
168
|
-
|
|
234
|
+
private spawnAgent(agentType: string, cwd: string): void {
|
|
235
|
+
const defaults = getAgentDefaults(agentType)
|
|
236
|
+
const { args, newSessionId } = resolveSessionArgs(agentType, defaults.args, undefined, false)
|
|
237
|
+
const session = this.manager.addSession({
|
|
238
|
+
type: agentType,
|
|
239
|
+
cmd: defaults.cmd,
|
|
240
|
+
args,
|
|
241
|
+
cwd,
|
|
242
|
+
}) as AgentSession & { sessionId?: string }
|
|
243
|
+
session.baseArgs = defaults.args
|
|
244
|
+
if (newSessionId != null) {
|
|
245
|
+
session.sessionId = newSessionId
|
|
246
|
+
}
|
|
169
247
|
|
|
170
|
-
|
|
171
|
-
|
|
248
|
+
if (session.status === 'error') {
|
|
249
|
+
this.manager.removeSession(session.id)
|
|
250
|
+
this.showError(`'${defaults.cmd}' command not found.\nIs ${agentType} installed?`)
|
|
251
|
+
this.syncList()
|
|
252
|
+
return
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
this.manager.selectSession(this.manager.sessions.length - 1)
|
|
256
|
+
this.syncList()
|
|
257
|
+
this.onSessionCreated?.(session)
|
|
172
258
|
}
|
|
173
259
|
|
|
174
260
|
private showError(message: string): void {
|
|
@@ -201,24 +287,29 @@ export class OverviewUI {
|
|
|
201
287
|
const selectedId = this.manager.selectedSession?.id
|
|
202
288
|
let selectedDisplayIndex = -1
|
|
203
289
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
290
|
+
const cwdGroups = this.groupByCwd(orderedSessions)
|
|
291
|
+
for (const [cwd, sessions] of cwdGroups) {
|
|
292
|
+
items.push(` {bold}${this.shortenPath(cwd)}{/bold}`)
|
|
293
|
+
|
|
294
|
+
for (const group of OverviewUI.STATUS_GROUPS) {
|
|
295
|
+
const groupSessions = sessions.filter((s) => s.status === group.status)
|
|
296
|
+
if (groupSessions.length === 0) continue
|
|
297
|
+
|
|
298
|
+
items.push(` ${group.label}`)
|
|
299
|
+
for (const session of groupSessions) {
|
|
300
|
+
const statusIcon =
|
|
301
|
+
session.status === 'running' ? '⣾'
|
|
302
|
+
: session.status === 'idle' ? '○'
|
|
303
|
+
: session.status === 'done' ? '✓'
|
|
304
|
+
: '✗'
|
|
305
|
+
const sessionTitle = session.displayName ?? session.id
|
|
306
|
+
const sessionLabel = session.type ? `${sessionTitle} (${session.type})` : sessionTitle
|
|
307
|
+
const content = `${statusIcon} ${sessionLabel} ${this.getStatusLabel(session.status)}`
|
|
308
|
+
const color = OverviewUI.STATUS_COLORS[session.status]
|
|
309
|
+
items.push(` {${color}-fg}${content}{/${color}-fg}`)
|
|
310
|
+
if (session.id === selectedId) {
|
|
311
|
+
selectedDisplayIndex = items.length - 1
|
|
312
|
+
}
|
|
222
313
|
}
|
|
223
314
|
}
|
|
224
315
|
}
|
|
@@ -229,8 +320,30 @@ export class OverviewUI {
|
|
|
229
320
|
}
|
|
230
321
|
}
|
|
231
322
|
|
|
323
|
+
private groupByCwd(sessions: SessionManager['sessions']): Map<string, SessionManager['sessions']> {
|
|
324
|
+
const map = new Map<string, SessionManager['sessions']>()
|
|
325
|
+
for (const session of sessions) {
|
|
326
|
+
const key = session.cwd ?? process.cwd()
|
|
327
|
+
if (!map.has(key)) map.set(key, [])
|
|
328
|
+
map.get(key)!.push(session)
|
|
329
|
+
}
|
|
330
|
+
return map
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
private shortenPath(p: string): string {
|
|
334
|
+
const home = process.env.HOME
|
|
335
|
+
if (home && p.startsWith(home)) {
|
|
336
|
+
return '~' + p.slice(home.length)
|
|
337
|
+
}
|
|
338
|
+
return p
|
|
339
|
+
}
|
|
340
|
+
|
|
232
341
|
private getOrderedSessions(): SessionManager['sessions'] {
|
|
233
342
|
return [...this.manager.sessions].sort((a, b) => {
|
|
343
|
+
const cwdA = a.cwd ?? process.cwd()
|
|
344
|
+
const cwdB = b.cwd ?? process.cwd()
|
|
345
|
+
const cwdDiff = cwdA.localeCompare(cwdB)
|
|
346
|
+
if (cwdDiff !== 0) return cwdDiff
|
|
234
347
|
const rankDiff = this.getStatusRank(a.status) - this.getStatusRank(b.status)
|
|
235
348
|
if (rankDiff !== 0) return rankDiff
|
|
236
349
|
return a.id.localeCompare(b.id)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { readdirSync } from 'node:fs'
|
|
2
|
+
import { join, dirname, basename } from 'node:path'
|
|
3
|
+
|
|
4
|
+
export interface CompletionResult {
|
|
5
|
+
completed: string
|
|
6
|
+
candidates: string[]
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function completePath(input: string): CompletionResult {
|
|
10
|
+
const expanded = input.replace(/^~/, process.env.HOME ?? '~')
|
|
11
|
+
const isAbsolute = expanded.startsWith('/')
|
|
12
|
+
const dir = isAbsolute || expanded.includes('/')
|
|
13
|
+
? dirname(expanded)
|
|
14
|
+
: process.cwd()
|
|
15
|
+
const prefix = basename(expanded)
|
|
16
|
+
|
|
17
|
+
let entries: string[]
|
|
18
|
+
try {
|
|
19
|
+
entries = readdirSync(dir, { withFileTypes: true })
|
|
20
|
+
.filter((e) => e.isDirectory() && e.name.startsWith(prefix))
|
|
21
|
+
.map((e) => join(dir, e.name) + '/')
|
|
22
|
+
} catch {
|
|
23
|
+
return { completed: input, candidates: [] }
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (entries.length === 0) {
|
|
27
|
+
return { completed: input, candidates: [] }
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (entries.length === 1) {
|
|
31
|
+
return { completed: restoreHome(entries[0]!, input), candidates: [] }
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const lcp = longestCommonPrefix(entries)
|
|
35
|
+
return {
|
|
36
|
+
completed: restoreHome(lcp, input),
|
|
37
|
+
candidates: entries.map((e) => restoreHome(e, input)),
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function longestCommonPrefix(strs: string[]): string {
|
|
42
|
+
if (strs.length === 0) return ''
|
|
43
|
+
let prefix = strs[0]!
|
|
44
|
+
for (let i = 1; i < strs.length; i++) {
|
|
45
|
+
while (!strs[i]!.startsWith(prefix)) {
|
|
46
|
+
prefix = prefix.slice(0, -1)
|
|
47
|
+
if (prefix === '') return ''
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return prefix
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function restoreHome(path: string, original: string): string {
|
|
54
|
+
const home = process.env.HOME
|
|
55
|
+
if (home && original.startsWith('~') && path.startsWith(home)) {
|
|
56
|
+
return '~' + path.slice(home.length)
|
|
57
|
+
}
|
|
58
|
+
return path
|
|
59
|
+
}
|