my-pi 0.1.21 → 0.1.22
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/README.md +23 -4
- package/dist/{api-SEiGG2V_.js → api-ByzD9jne.js} +37 -101
- package/dist/api-ByzD9jne.js.map +1 -0
- package/dist/api.js +1 -1
- package/dist/index.js +28 -1
- package/dist/index.js.map +1 -1
- package/package.json +14 -13
- package/src/extensions/manager/index.ts +30 -87
- package/src/extensions/prompt-presets/index.ts +31 -98
- package/dist/api-SEiGG2V_.js.map +0 -1
- package/themes/catppuccin-mocha.json +0 -79
- package/themes/dracula.json +0 -78
- package/themes/gruvbox-dark.json +0 -78
- package/themes/night-owl.json +0 -78
- package/themes/nord.json +0 -78
- package/themes/one-dark.json +0 -78
- package/themes/rose-pine.json +0 -78
- package/themes/solarized-dark.json +0 -79
- package/themes/tokyo-night.json +0 -78
|
@@ -2,12 +2,8 @@ import type {
|
|
|
2
2
|
ExtensionAPI,
|
|
3
3
|
ExtensionCommandContext,
|
|
4
4
|
} from '@mariozechner/pi-coding-agent';
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
SettingsList,
|
|
8
|
-
Text,
|
|
9
|
-
type SettingItem,
|
|
10
|
-
} from '@mariozechner/pi-tui';
|
|
5
|
+
import { type SettingItem } from '@mariozechner/pi-tui';
|
|
6
|
+
import { show_settings_modal } from '@spences10/pi-tui-modal';
|
|
11
7
|
import {
|
|
12
8
|
BUILTIN_EXTENSIONS,
|
|
13
9
|
find_builtin_extension,
|
|
@@ -18,8 +14,8 @@ import {
|
|
|
18
14
|
type BuiltinExtensionState,
|
|
19
15
|
} from './config.js';
|
|
20
16
|
|
|
21
|
-
const ENABLED = '
|
|
22
|
-
const DISABLED = '
|
|
17
|
+
const ENABLED = '● enabled';
|
|
18
|
+
const DISABLED = '○ disabled';
|
|
23
19
|
|
|
24
20
|
export interface ExtensionsManagerOptions {
|
|
25
21
|
force_disabled?: Iterable<BuiltinExtensionKey>;
|
|
@@ -152,85 +148,32 @@ export function create_extensions_extension(
|
|
|
152
148
|
);
|
|
153
149
|
const current_enabled = new Set(initial_enabled);
|
|
154
150
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
Math.min(Math.max(items.length + 4, 8), 16),
|
|
182
|
-
{
|
|
183
|
-
cursor: theme.fg('accent', '›'),
|
|
184
|
-
label: (text, selected) =>
|
|
185
|
-
selected ? theme.fg('accent', text) : text,
|
|
186
|
-
value: (text, selected) => {
|
|
187
|
-
const color = text === ENABLED ? 'success' : 'dim';
|
|
188
|
-
const rendered = theme.fg(color, text);
|
|
189
|
-
return selected
|
|
190
|
-
? theme.bold(theme.fg('accent', rendered))
|
|
191
|
-
: rendered;
|
|
192
|
-
},
|
|
193
|
-
description: (text) => theme.fg('muted', text),
|
|
194
|
-
hint: (text) => theme.fg('dim', text),
|
|
195
|
-
},
|
|
196
|
-
(id, new_value) => {
|
|
197
|
-
const key = id as BuiltinExtensionKey;
|
|
198
|
-
const enabled = new_value === ENABLED;
|
|
199
|
-
if (enabled) {
|
|
200
|
-
current_enabled.add(key);
|
|
201
|
-
} else {
|
|
202
|
-
current_enabled.delete(key);
|
|
203
|
-
}
|
|
204
|
-
save_extension_enabled(key, enabled);
|
|
205
|
-
},
|
|
206
|
-
() => done(undefined),
|
|
207
|
-
{ enableSearch: true },
|
|
208
|
-
);
|
|
209
|
-
|
|
210
|
-
container.addChild(settings_list);
|
|
211
|
-
container.addChild(
|
|
212
|
-
new Text(
|
|
213
|
-
theme.fg(
|
|
214
|
-
'dim',
|
|
215
|
-
'esc close • search filters • changes save immediately • CLI --no-* flags still win in this process',
|
|
216
|
-
),
|
|
217
|
-
0,
|
|
218
|
-
1,
|
|
219
|
-
),
|
|
220
|
-
);
|
|
221
|
-
|
|
222
|
-
return {
|
|
223
|
-
render(width: number) {
|
|
224
|
-
return container.render(width);
|
|
225
|
-
},
|
|
226
|
-
invalidate() {
|
|
227
|
-
container.invalidate();
|
|
228
|
-
},
|
|
229
|
-
handleInput(data: string) {
|
|
230
|
-
settings_list.handleInput(data);
|
|
231
|
-
tui.requestRender();
|
|
232
|
-
},
|
|
233
|
-
};
|
|
151
|
+
const items = states.map(to_setting_item);
|
|
152
|
+
await show_settings_modal(ctx, {
|
|
153
|
+
title: 'Built-in extensions',
|
|
154
|
+
subtitle: () => {
|
|
155
|
+
const saved_enabled = current_enabled.size;
|
|
156
|
+
const saved_disabled = states.length - saved_enabled;
|
|
157
|
+
const enabled_now = [...current_enabled].filter(
|
|
158
|
+
(key) => !force_disabled.has(key as BuiltinExtensionKey),
|
|
159
|
+
).length;
|
|
160
|
+
const disabled_now = states.length - enabled_now;
|
|
161
|
+
return `${saved_enabled} saved enabled • ${saved_disabled} saved disabled • ${enabled_now} enabled now • ${disabled_now} disabled now`;
|
|
162
|
+
},
|
|
163
|
+
items,
|
|
164
|
+
enable_search: true,
|
|
165
|
+
footer:
|
|
166
|
+
'esc close • search filters • changes save immediately • CLI --no-* flags still win in this process',
|
|
167
|
+
on_change: (id, new_value) => {
|
|
168
|
+
const key = id as BuiltinExtensionKey;
|
|
169
|
+
const enabled = new_value === ENABLED;
|
|
170
|
+
if (enabled) {
|
|
171
|
+
current_enabled.add(key);
|
|
172
|
+
} else {
|
|
173
|
+
current_enabled.delete(key);
|
|
174
|
+
}
|
|
175
|
+
save_extension_enabled(key, enabled);
|
|
176
|
+
},
|
|
234
177
|
});
|
|
235
178
|
|
|
236
179
|
if (!sets_equal(initial_enabled, current_enabled)) {
|
|
@@ -6,13 +6,11 @@ import {
|
|
|
6
6
|
type ReadonlyFooterDataProvider,
|
|
7
7
|
} from '@mariozechner/pi-coding-agent';
|
|
8
8
|
import {
|
|
9
|
-
Container,
|
|
10
|
-
SettingsList,
|
|
11
|
-
Text,
|
|
12
9
|
truncateToWidth,
|
|
13
10
|
visibleWidth,
|
|
14
11
|
type SettingItem,
|
|
15
12
|
} from '@mariozechner/pi-tui';
|
|
13
|
+
import { show_settings_modal } from '@spences10/pi-tui-modal';
|
|
16
14
|
import {
|
|
17
15
|
existsSync,
|
|
18
16
|
mkdirSync,
|
|
@@ -55,10 +53,10 @@ interface PersistedPromptPresetStates {
|
|
|
55
53
|
|
|
56
54
|
const PRESET_STATE_TYPE = 'prompt-preset-state';
|
|
57
55
|
export const DEFAULT_BASE_PROMPT_PRESET_NAME = 'terse';
|
|
58
|
-
const ENABLED = '
|
|
59
|
-
const DISABLED = '
|
|
60
|
-
const SELECTED = '
|
|
61
|
-
const UNSELECTED = '
|
|
56
|
+
const ENABLED = '● enabled';
|
|
57
|
+
const DISABLED = '○ disabled';
|
|
58
|
+
const SELECTED = '● selected';
|
|
59
|
+
const UNSELECTED = '○';
|
|
62
60
|
const NONE_BASE_ID = '__base_none__';
|
|
63
61
|
|
|
64
62
|
export const DEFAULT_PROMPT_PRESETS: PromptPresetMap = {
|
|
@@ -1404,99 +1402,34 @@ export default async function prompt_presets(pi: ExtensionAPI) {
|
|
|
1404
1402
|
|
|
1405
1403
|
sync_values();
|
|
1406
1404
|
|
|
1407
|
-
await ctx
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
return selected
|
|
1426
|
-
? theme.bold(theme.fg('accent', rendered))
|
|
1427
|
-
: rendered;
|
|
1428
|
-
},
|
|
1429
|
-
description: (text) => theme.fg('muted', text),
|
|
1430
|
-
hint: (text) => theme.fg('dim', text),
|
|
1431
|
-
},
|
|
1432
|
-
(id, new_value) => {
|
|
1433
|
-
if (id.startsWith('__header_')) return;
|
|
1434
|
-
|
|
1435
|
-
if (base_ids.has(id)) {
|
|
1436
|
-
selected_base =
|
|
1437
|
-
new_value === SELECTED && id !== NONE_BASE_ID
|
|
1438
|
-
? id
|
|
1439
|
-
: undefined;
|
|
1440
|
-
sync_values();
|
|
1441
|
-
return;
|
|
1442
|
-
}
|
|
1405
|
+
await show_settings_modal(ctx, {
|
|
1406
|
+
title: 'Prompt presets',
|
|
1407
|
+
subtitle: () =>
|
|
1408
|
+
`base: ${selected_base ?? '(none)'} • ${enabled_layers.size} layer(s) enabled`,
|
|
1409
|
+
items,
|
|
1410
|
+
max_visible: Math.min(Math.max(items.length + 4, 8), 24),
|
|
1411
|
+
enable_search: true,
|
|
1412
|
+
on_change: (id, new_value) => {
|
|
1413
|
+
if (id.startsWith('__header_')) return;
|
|
1414
|
+
|
|
1415
|
+
if (base_ids.has(id)) {
|
|
1416
|
+
selected_base =
|
|
1417
|
+
new_value === SELECTED && id !== NONE_BASE_ID
|
|
1418
|
+
? id
|
|
1419
|
+
: undefined;
|
|
1420
|
+
sync_values();
|
|
1421
|
+
return;
|
|
1422
|
+
}
|
|
1443
1423
|
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
}
|
|
1450
|
-
sync_values();
|
|
1424
|
+
if (layer_ids.has(id)) {
|
|
1425
|
+
if (new_value === ENABLED) {
|
|
1426
|
+
enabled_layers.add(id);
|
|
1427
|
+
} else {
|
|
1428
|
+
enabled_layers.delete(id);
|
|
1451
1429
|
}
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
);
|
|
1456
|
-
|
|
1457
|
-
const container = new Container();
|
|
1458
|
-
container.addChild({
|
|
1459
|
-
render: () => [
|
|
1460
|
-
theme.fg('accent', theme.bold('Prompt presets')),
|
|
1461
|
-
theme.fg(
|
|
1462
|
-
'muted',
|
|
1463
|
-
`base: ${selected_base ?? '(none)'} • ${enabled_layers.size} layer(s) enabled`,
|
|
1464
|
-
),
|
|
1465
|
-
'',
|
|
1466
|
-
],
|
|
1467
|
-
invalidate: () => {},
|
|
1468
|
-
});
|
|
1469
|
-
container.addChild({
|
|
1470
|
-
render(width: number) {
|
|
1471
|
-
return list.render(width);
|
|
1472
|
-
},
|
|
1473
|
-
invalidate() {
|
|
1474
|
-
list.invalidate();
|
|
1475
|
-
},
|
|
1476
|
-
});
|
|
1477
|
-
container.addChild(
|
|
1478
|
-
new Text(
|
|
1479
|
-
theme.fg(
|
|
1480
|
-
'dim',
|
|
1481
|
-
'search filters • enter toggles • esc close',
|
|
1482
|
-
),
|
|
1483
|
-
0,
|
|
1484
|
-
1,
|
|
1485
|
-
),
|
|
1486
|
-
);
|
|
1487
|
-
|
|
1488
|
-
return {
|
|
1489
|
-
render(width: number) {
|
|
1490
|
-
return container.render(width);
|
|
1491
|
-
},
|
|
1492
|
-
invalidate() {
|
|
1493
|
-
container.invalidate();
|
|
1494
|
-
},
|
|
1495
|
-
handleInput(data: string) {
|
|
1496
|
-
list.handleInput(data);
|
|
1497
|
-
tui.requestRender();
|
|
1498
|
-
},
|
|
1499
|
-
};
|
|
1430
|
+
sync_values();
|
|
1431
|
+
}
|
|
1432
|
+
},
|
|
1500
1433
|
});
|
|
1501
1434
|
|
|
1502
1435
|
if (
|