my-pi 0.3.5 → 0.4.0

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 (38) hide show
  1. package/README.md +32 -252
  2. package/dist/extensions.d.ts +11 -0
  3. package/dist/extensions.js +148 -0
  4. package/dist/extensions.js.map +1 -0
  5. package/dist/index.d.ts +2 -1
  6. package/dist/index.js +40 -523
  7. package/dist/index.js.map +1 -1
  8. package/dist/manager.d.ts +3 -0
  9. package/dist/manager.js +71 -0
  10. package/dist/manager.js.map +1 -0
  11. package/dist/settings.d.ts +3 -0
  12. package/dist/settings.js +16 -0
  13. package/dist/settings.js.map +1 -0
  14. package/package.json +33 -78
  15. package/dist/api.d.ts +0 -494
  16. package/dist/api.js +0 -532
  17. package/dist/api.js.map +0 -1
  18. package/dist/builtin-registry-wSfsQBi4.js +0 -563
  19. package/dist/builtin-registry-wSfsQBi4.js.map +0 -1
  20. package/dist/footer-BAZIMVSb.js +0 -1
  21. package/dist/handoff-C6wR2mSG.js +0 -28
  22. package/dist/handoff-C6wR2mSG.js.map +0 -1
  23. package/dist/hooks-resolution-qlhPfMFJ.js +0 -485
  24. package/dist/hooks-resolution-qlhPfMFJ.js.map +0 -1
  25. package/dist/openrouter-fusion-config-BWsHBPQv.js +0 -65
  26. package/dist/openrouter-fusion-config-BWsHBPQv.js.map +0 -1
  27. package/dist/prompt-presets-XraV03Ed.js +0 -1402
  28. package/dist/prompt-presets-XraV03Ed.js.map +0 -1
  29. package/dist/session-name-CD6TVRnh.js +0 -158
  30. package/dist/session-name-CD6TVRnh.js.map +0 -1
  31. package/dist/settings-BCn3P9qH.js +0 -177
  32. package/dist/settings-BCn3P9qH.js.map +0 -1
  33. package/dist/startup-screen-DUeBWuAc.js +0 -218
  34. package/dist/startup-screen-DUeBWuAc.js.map +0 -1
  35. package/dist/turn-timer-CoyDI4gQ.js +0 -64
  36. package/dist/turn-timer-CoyDI4gQ.js.map +0 -1
  37. package/dist/umans-provider-C2UJ4qkO.js +0 -307
  38. package/dist/umans-provider-C2UJ4qkO.js.map +0 -1
@@ -0,0 +1,71 @@
1
+ import { show_settings_modal } from '@spences10/pi-tui-modal';
2
+ import { EXTENSIONS } from './extensions.js';
3
+ import { is_enabled, set_enabled } from './settings.js';
4
+ const ENABLED = '● enabled';
5
+ const DISABLED = '○ disabled';
6
+ const SUBCOMMANDS = ['list', 'enable', 'disable'];
7
+ function find_extension(query) {
8
+ const q = query.trim().toLowerCase();
9
+ return EXTENSIONS.find((extension) => extension.key === q || extension.label.toLowerCase() === q);
10
+ }
11
+ export function format_list() {
12
+ return EXTENSIONS.map((extension) => `${is_enabled(extension.key) ? ENABLED : DISABLED} ${extension.key} ${extension.description}`).join('\n');
13
+ }
14
+ async function show_manager(ctx) {
15
+ const before = EXTENSIONS.map((extension) => is_enabled(extension.key)).join();
16
+ await show_settings_modal(ctx, {
17
+ title: 'my-pi extensions',
18
+ items: EXTENSIONS.map((extension) => ({
19
+ id: extension.key,
20
+ label: extension.label,
21
+ description: `${extension.key}\n${extension.description}`,
22
+ currentValue: is_enabled(extension.key) ? ENABLED : DISABLED,
23
+ values: [ENABLED, DISABLED],
24
+ })),
25
+ enable_search: true,
26
+ footer: 'esc close • changes save immediately',
27
+ on_change: (id, value) => set_enabled(id, value === ENABLED),
28
+ });
29
+ const after = EXTENSIONS.map((extension) => is_enabled(extension.key)).join();
30
+ if (before !== after) {
31
+ ctx.ui.notify('Reloading to apply extension changes...', 'info');
32
+ await ctx.reload();
33
+ }
34
+ }
35
+ export default function extensions_manager(pi) {
36
+ pi.registerCommand('extensions', {
37
+ description: 'Turn my-pi extensions on or off',
38
+ getArgumentCompletions: (prefix) => {
39
+ const [sub = '', query = ''] = prefix.trimStart().split(/\s+/);
40
+ if (!['enable', 'disable'].includes(sub)) {
41
+ return SUBCOMMANDS.filter((name) => name.startsWith(sub)).map((name) => ({ value: name, label: name }));
42
+ }
43
+ return EXTENSIONS.filter((extension) => extension.key.startsWith(query)).map((extension) => ({
44
+ value: `${sub} ${extension.key}`,
45
+ label: extension.key,
46
+ }));
47
+ },
48
+ handler: async (args, ctx) => {
49
+ const [sub, ...rest] = args.trim().split(/\s+/);
50
+ if (!sub && ctx.hasUI)
51
+ return show_manager(ctx);
52
+ if (!sub || sub === 'list') {
53
+ ctx.ui.notify(format_list());
54
+ return;
55
+ }
56
+ if (sub !== 'enable' && sub !== 'disable') {
57
+ ctx.ui.notify(`Usage: /extensions [${SUBCOMMANDS.join('|')}] [key]`, 'warning');
58
+ return;
59
+ }
60
+ const extension = find_extension(rest.join(' '));
61
+ if (!extension) {
62
+ ctx.ui.notify(`Unknown extension. Keys: ${EXTENSIONS.map((item) => item.key).join(', ')}`, 'warning');
63
+ return;
64
+ }
65
+ set_enabled(extension.key, sub === 'enable');
66
+ ctx.ui.notify(`${extension.key} ${sub}d. Reloading...`, 'info');
67
+ await ctx.reload();
68
+ },
69
+ });
70
+ }
71
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Extensions are enabled unless saved as `false`. */
2
+ export declare function is_enabled(key: string): boolean;
3
+ export declare function set_enabled(key: string, enabled: boolean): void;
@@ -0,0 +1,16 @@
1
+ import { read_settings, write_settings, } from '@spences10/pi-settings';
2
+ /** Extensions are enabled unless saved as `false`. */
3
+ export function is_enabled(key) {
4
+ return read_settings().extensions?.enabled?.[key] !== false;
5
+ }
6
+ export function set_enabled(key, enabled) {
7
+ const settings = read_settings();
8
+ write_settings({
9
+ ...settings,
10
+ extensions: {
11
+ ...settings.extensions,
12
+ enabled: { ...settings.extensions?.enabled, [key]: enabled },
13
+ },
14
+ });
15
+ }
16
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,cAAc,GACd,MAAM,wBAAwB,CAAC;AAEhC,sDAAsD;AACtD,MAAM,UAAU,UAAU,CAAC,GAAW;IACrC,OAAO,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,OAAgB;IACxD,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;IACjC,cAAc,CAAC;QACd,GAAG,QAAQ;QACX,UAAU,EAAE;YACX,GAAG,QAAQ,CAAC,UAAU;YACtB,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE;SAC5D;KACD,CAAC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,18 +1,14 @@
1
1
  {
2
2
  "name": "my-pi",
3
- "version": "0.3.5",
4
- "description": "Composable pi coding agent with MCP, LSP, prompt presets, and local eval telemetry",
3
+ "version": "0.4.0",
4
+ "description": "Pi with Scott Spence's extensions built in, switchable with /extensions",
5
5
  "keywords": [
6
6
  "cli",
7
7
  "coding-agent",
8
- "evals",
9
8
  "lsp",
10
- "mcp",
11
- "pi",
12
- "sqlite",
13
- "telemetry"
9
+ "pi"
14
10
  ],
15
- "homepage": "https://github.com/spences10/my-pi#readme",
11
+ "homepage": "https://github.com/spences10/my-pi/tree/main/packages/my-pi#readme",
16
12
  "bugs": {
17
13
  "url": "https://github.com/spences10/my-pi/issues"
18
14
  },
@@ -20,7 +16,8 @@
20
16
  "author": "Scott Spence <spences10apps@gmail.com>",
21
17
  "repository": {
22
18
  "type": "git",
23
- "url": "git+https://github.com/spences10/my-pi.git"
19
+ "url": "git+https://github.com/spences10/my-pi.git",
20
+ "directory": "packages/my-pi"
24
21
  },
25
22
  "bin": {
26
23
  "my-pi": "./dist/index.js"
@@ -30,90 +27,48 @@
30
27
  "README.md"
31
28
  ],
32
29
  "type": "module",
33
- "main": "./dist/api.js",
34
- "types": "./dist/api.d.ts",
35
- "exports": {
36
- ".": {
37
- "types": "./dist/api.d.ts",
38
- "import": "./dist/api.js"
39
- },
40
- "./cli": {
41
- "types": "./dist/index.d.ts",
42
- "import": "./dist/index.js"
43
- }
30
+ "publishConfig": {
31
+ "access": "public"
44
32
  },
45
33
  "dependencies": {
46
- "@earendil-works/pi-ai": "1.3.0",
47
- "@earendil-works/pi-coding-agent": "1.3.0",
48
- "@earendil-works/pi-tui": "1.3.0",
49
- "@spences10/pi-project-trust": "0.0.19",
50
- "@spences10/pi-settings": "0.0.3",
51
- "@spences10/pi-themes": "0.0.10",
52
- "@spences10/pi-tui-modal": "0.0.24",
53
- "citty": "^0.2.2"
54
- },
55
- "devDependencies": {
56
- "@changesets/cli": "^3.0.0",
57
- "@resvg/resvg-js": "^2.6.2",
58
- "@types/node": "^25.8.0",
59
- "@vitest/coverage-v8": "5.0.1",
60
- "vite": "npm:@voidzero-dev/vite-plus-core@1.2.0",
61
- "vite-plus": "1.2.0",
62
- "vitest": "5.0.1"
63
- },
64
- "optionalDependencies": {
65
- "@spences10/pi-child-env": "0.1.10",
34
+ "@earendil-works/pi-coding-agent": "1.4.0",
66
35
  "@spences10/pi-codex-usage": "0.0.2",
67
- "@spences10/pi-coding-preferences": "0.0.16",
36
+ "@spences10/pi-coding-preferences": "0.0.17",
68
37
  "@spences10/pi-confirm-destructive": "0.0.21",
69
- "@spences10/pi-context": "0.1.16",
70
- "@spences10/pi-factory": "0.0.17",
71
- "@spences10/pi-footer": "0.0.16",
38
+ "@spences10/pi-context": "0.2.0",
39
+ "@spences10/pi-footer": "0.0.17",
72
40
  "@spences10/pi-git-ui": "0.0.16",
73
41
  "@spences10/pi-harness": "0.1.2",
74
42
  "@spences10/pi-kimi-usage": "0.0.2",
75
- "@spences10/pi-lsp": "0.0.49",
76
- "@spences10/pi-mcp": "0.0.60",
77
- "@spences10/pi-nopeek": "0.0.16",
78
- "@spences10/pi-observability": "0.0.23",
79
- "@spences10/pi-omnisearch": "0.0.15",
43
+ "@spences10/pi-lsp": "0.0.50",
44
+ "@spences10/pi-observability": "0.0.24",
80
45
  "@spences10/pi-recall": "0.0.16",
81
46
  "@spences10/pi-redact": "0.0.15",
82
- "@spences10/pi-skill-importer": "0.0.14",
83
- "@spences10/pi-skills": "0.0.37",
84
- "@spences10/pi-sqlite-tools": "0.0.15",
85
- "@spences10/pi-starfield": "0.0.1",
86
- "@spences10/pi-svelte-guardrails": "0.0.16",
47
+ "@spences10/pi-settings": "0.1.0",
48
+ "@spences10/pi-starfield": "0.0.2",
49
+ "@spences10/pi-svelte-guardrails": "0.0.17",
87
50
  "@spences10/pi-talk": "0.1.1",
88
51
  "@spences10/pi-team-mode": "0.0.58",
89
- "@spences10/pi-telemetry": "0.0.33"
52
+ "@spences10/pi-telemetry": "0.0.34",
53
+ "@spences10/pi-themes": "0.0.10",
54
+ "@spences10/pi-tui-modal": "0.0.24"
55
+ },
56
+ "devDependencies": {
57
+ "@types/node": "^26.0.0",
58
+ "typescript": "^7.0.0",
59
+ "vite-plus": "1.4.0"
90
60
  },
91
61
  "engines": {
92
62
  "node": ">=24.15.0"
93
63
  },
94
64
  "scripts": {
95
- "build": "pnpm --filter \"./packages/*\" run build:self && vp pack",
96
- "dev": "vp pack --watch",
97
- "start": "node ./dist/index.js",
98
- "docs:sync": "node tools/sync-package-readmes.ts --write",
99
- "docs:links": "node tools/check-markdown-links.ts",
100
- "docs:check": "node tools/sync-package-readmes.ts && pnpm run docs:links",
101
- "check": "pnpm run docs:check && pnpm --filter \"./packages/*\" run build:self && vp check && pnpm run check:boundaries && pnpm --filter \"./packages/*\" run check:self",
102
- "check:boundaries": "node tools/check-boundaries.ts",
103
- "check:fix": "vp check --fix",
104
- "format": "vp check --fix",
105
- "test": "pnpm --filter \"./packages/*\" run build:self && vp pack && sh -c 'if [ \"$#\" -gt 0 ]; then vp test \"$@\"; else vp test && pnpm --workspace-concurrency=1 --filter \"./packages/*\" --if-present run test:self; fi' --",
106
- "test:watch": "vp test watch",
107
- "eval:local": "node scripts/run-eval-case.ts",
108
- "eval:suite": "node scripts/run-eval-suite.ts",
109
- "preview:generate": "node scripts/generate-startup-preview.ts",
110
- "web:share-card": "node scripts/generate-web-share-card.ts",
111
- "changeset": "changeset",
112
- "version": "changeset version && pnpm run preview:generate",
113
- "release": "git diff --quiet && git diff --cached --quiet && pnpm run build && changeset publish",
114
- "coverage": "pnpm --filter \"./packages/*\" run build:self && vp pack && sh -c 'vp test --coverage && pnpm --workspace-concurrency=1 --filter \"./packages/*\" --if-present run coverage:self' --",
115
- "web:sync": "pnpm --dir apps/web exec svelte-kit sync",
116
- "web:check": "pnpm --dir apps/web check",
117
- "web:gen": "pnpm --dir apps/web gen"
65
+ "build": "pnpm --filter \"$npm_package_name^...\" run build:self && pnpm run build:self",
66
+ "build:self": "vp exec tsc -p tsconfig.build.json",
67
+ "check": "pnpm --filter \"$npm_package_name^...\" run build:self && pnpm run check:self",
68
+ "check:self": "vp exec tsc --noEmit -p tsconfig.json",
69
+ "test": "pnpm --filter \"$npm_package_name^...\" run build:self && pnpm run test:self",
70
+ "test:self": "vp test run",
71
+ "coverage:self": "vp test run --coverage",
72
+ "coverage": "pnpm --filter \"$npm_package_name^...\" run build:self && pnpm run coverage:self"
118
73
  }
119
74
  }