omni-pi 0.9.0 → 0.11.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.
- package/CHANGELOG.md +32 -0
- package/README.md +7 -25
- package/extensions/omni-core/index.ts +14 -11
- package/package.json +9 -5
- package/src/prompt-template-sync.ts +63 -0
- package/src/providers.ts +11 -707
- package/templates/managed-prompts/commit.md +23 -0
- package/templates/managed-prompts/push.md +30 -0
- package/vendor/pi-diff-review/README.md +39 -0
- package/vendor/pi-diff-review/package-lock.json +4369 -0
- package/vendor/pi-diff-review/package.json +26 -0
- package/vendor/pi-diff-review/src/git.ts +366 -0
- package/vendor/pi-diff-review/src/index.ts +283 -0
- package/vendor/pi-diff-review/src/prompt.ts +58 -0
- package/vendor/pi-diff-review/src/types.ts +83 -0
- package/vendor/pi-diff-review/src/ui.ts +20 -0
- package/vendor/pi-diff-review/tsconfig.json +14 -0
- package/vendor/pi-diff-review/types/glimpseui.d.ts +89 -0
- package/vendor/pi-diff-review/web/app.js +1110 -0
- package/vendor/pi-diff-review/web/index.html +186 -0
- package/PROVIDERS.md +0 -80
- package/extensions/omni-providers/index.ts +0 -16
- package/src/anthropic-auth-guard.ts +0 -95
- package/src/model-command.ts +0 -205
- package/src/model-refresh-state.ts +0 -39
- package/src/model-setup.ts +0 -1149
- package/src/provider-auth-command.ts +0 -104
- package/src/provider-catalog.json +0 -20391
- package/src/searchable-select.ts +0 -198
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.11.0 - 2026-04-24
|
|
4
|
+
|
|
5
|
+
### Removed
|
|
6
|
+
|
|
7
|
+
- Removed `/model-setup`, `/manage-providers`, the `omni-providers` extension, and the bundled provider catalog. Pi now handles provider and model management natively.
|
|
8
|
+
- Removed `PROVIDERS.md` and the provider docs spec.
|
|
9
|
+
|
|
10
|
+
## 0.10.1 - 2026-04-24
|
|
11
|
+
|
|
12
|
+
### Release follow-up
|
|
13
|
+
|
|
14
|
+
- republished the previous 0.10.0 release work under a new patch version because npm will not republish a previously published version number
|
|
15
|
+
- kept the bundled `pi-diff-review` and `pi-prompt-template-model` integration changes intact
|
|
16
|
+
|
|
17
|
+
## 0.10.0 - 2026-04-24
|
|
18
|
+
|
|
19
|
+
### Removed
|
|
20
|
+
|
|
21
|
+
- Removed `/model-setup`, `/manage-providers`, and the `omni-providers` extension. Pi now handles provider and model management natively.
|
|
22
|
+
|
|
23
|
+
### Runtime and integrations
|
|
24
|
+
|
|
25
|
+
- upgraded `@mariozechner/pi-coding-agent` to `0.70.0`
|
|
26
|
+
- bundled `pi-diff-review` as a packaged Omni-Pi dependency so `/diff-review` is available out of the box
|
|
27
|
+
- vendored `pi-diff-review` locally so global installs no longer fail on the extension's git prepare hook
|
|
28
|
+
- bundled `pi-prompt-template-model` so packaged prompt templates can register smarter slash commands
|
|
29
|
+
|
|
30
|
+
### Commands
|
|
31
|
+
|
|
32
|
+
- added `/commit` to review local changes and create a descriptive conventional commit
|
|
33
|
+
- added `/push` with a deterministic first `git push` attempt that only hands off to the model when the push fails
|
|
34
|
+
|
|
3
35
|
## 0.8.3 - 2026-04-17
|
|
4
36
|
|
|
5
37
|
### Model refresh flow
|
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ Requires Node.js 22 or newer.
|
|
|
15
15
|
- Keeps durable standards and project context in `.omni/`, even when Omni mode is off.
|
|
16
16
|
- Writes specs, tasks, and progress into `.omni/` once Omni mode is enabled.
|
|
17
17
|
- Adds a repo map that indexes supported source files, ranks them by structure plus recent activity, and injects a compact codebase-awareness block into Omni prompts.
|
|
18
|
-
- Bundles web search, guided interviews, themed UI, native micro-UI via Glimpse, a task viewer, a powerbar,
|
|
18
|
+
- Bundles web search, guided interviews, themed UI, native micro-UI via Glimpse, native git diff review, prompt-template-powered workflow commands, a task viewer, a powerbar, and automatic updates out of the box.
|
|
19
19
|
|
|
20
20
|
## Install
|
|
21
21
|
|
|
@@ -30,8 +30,6 @@ cd your-project
|
|
|
30
30
|
omni
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
Custom provider setup, refresh behavior, and bundled provider behavior are documented in [PROVIDERS.md](PROVIDERS.md).
|
|
34
|
-
|
|
35
33
|
## Features
|
|
36
34
|
|
|
37
35
|
### Bundled Skills
|
|
@@ -66,11 +64,12 @@ Current deferred roadmap items remain intentional and visible in docs rather tha
|
|
|
66
64
|
| Extension | What it does |
|
|
67
65
|
|-----------|-------------|
|
|
68
66
|
| **omni-core** | Brain workflow, themed header, session init, system prompt injection |
|
|
69
|
-
| **omni-providers** | Model provider wiring |
|
|
70
67
|
| **omni-memory** | `.omni/` durable memory bootstrap |
|
|
71
68
|
| **glimpseui** | Native micro-UI windows and the optional floating companion widget |
|
|
72
69
|
| **pi-web-access** | Web search and fetch tools for the agent |
|
|
73
70
|
| **pi-interview** | Guided Q&A when the agent needs clarification |
|
|
71
|
+
| **pi-diff-review** | Native git diff review window that inserts structured review feedback into the editor |
|
|
72
|
+
| **pi-prompt-template-model** | Prompt templates can set thinking/model behavior and back commands like `/commit` and `/push` |
|
|
74
73
|
| **pi-powerbar** | Powerline-style status bar with segments |
|
|
75
74
|
| **pi-extension-settings** | Settings persistence for extensions |
|
|
76
75
|
|
|
@@ -86,10 +85,11 @@ Omni-Pi now bundles [Glimpse](https://github.com/HazAT/glimpse) for native micro
|
|
|
86
85
|
|
|
87
86
|
| Command | Description |
|
|
88
87
|
|---------|-------------|
|
|
89
|
-
| `/model-setup` | Add, refresh, or remove custom provider/model entries |
|
|
90
|
-
| `/manage-providers` | Remove stored auth for bundled providers |
|
|
91
88
|
| `/omni-mode` | Toggle persistent Omni mode on or off for this project |
|
|
92
89
|
| `/companion` | Toggle the Glimpse floating companion widget |
|
|
90
|
+
| `/diff-review` | Open a native git diff review window and insert feedback into the editor |
|
|
91
|
+
| `/commit` | Review local changes and create a descriptive conventional commit |
|
|
92
|
+
| `/push` | Push the current branch, with automatic recovery flow if the first push fails |
|
|
93
93
|
| `/theme` | Switch between color presets (lavender, ember, ocean, mint, rose, gold, arctic, neon, copper, slate) |
|
|
94
94
|
| `/update` | Check for Omni-Pi updates |
|
|
95
95
|
|
|
@@ -103,24 +103,6 @@ Omni-Pi now bundles [Glimpse](https://github.com/HazAT/glimpse) for native micro
|
|
|
103
103
|
|
|
104
104
|
Omni-Pi checks for new versions on startup (cached, re-checks every 4 hours). When an update is available, it prompts to install and restart. Pi's own update notification is suppressed to avoid duplication.
|
|
105
105
|
|
|
106
|
-
## Provider Support
|
|
107
|
-
|
|
108
|
-
`/model-setup` is for custom providers and custom model entries only.
|
|
109
|
-
|
|
110
|
-
Use `/model-setup` when you want to configure:
|
|
111
|
-
|
|
112
|
-
- a custom provider id
|
|
113
|
-
- an API type and base URL
|
|
114
|
-
- an API key for that custom provider
|
|
115
|
-
- discovered models or manual model entries
|
|
116
|
-
- a manual refresh of already configured custom providers
|
|
117
|
-
|
|
118
|
-
Use `/manage-providers` to remove stored auth for bundled Pi providers.
|
|
119
|
-
|
|
120
|
-
Anthropic is intentionally API-key-only in Omni-Pi. Anthropic OAuth login is disabled.
|
|
121
|
-
|
|
122
|
-
See [PROVIDERS.md](PROVIDERS.md) for the current supported-provider list and auth-management split.
|
|
123
|
-
|
|
124
106
|
## Omni Mode
|
|
125
107
|
|
|
126
108
|
Omni-Pi keeps its current branding and shell at all times, but the specialized workflow is opt-in.
|
|
@@ -171,7 +153,7 @@ npm run chat # launch locally in dev mode
|
|
|
171
153
|
## CI/CD
|
|
172
154
|
|
|
173
155
|
- Pull requests and pushes to `main` run `npm run verify`.
|
|
174
|
-
- The docs are part of the test contract
|
|
156
|
+
- The docs are part of the test contract.
|
|
175
157
|
- Pushing a `v*` tag runs the release workflow, verifies the repo again, publishes to npm through GitHub Actions trusted publishing with provenance, and then creates the GitHub release.
|
|
176
158
|
- Trusted publishing still requires npm-side setup for this repository/workflow in the npm package settings.
|
|
177
159
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { fileURLToPath } from "node:url";
|
|
2
|
+
|
|
1
3
|
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
2
4
|
|
|
3
5
|
import {
|
|
@@ -7,12 +9,11 @@ import {
|
|
|
7
9
|
} from "../../src/brain.js";
|
|
8
10
|
import { createOmniCommands } from "../../src/commands.js";
|
|
9
11
|
import { renderHeader } from "../../src/header.js";
|
|
10
|
-
import { registerModelCommand } from "../../src/model-command.js";
|
|
11
12
|
import {
|
|
12
13
|
registerOmniMessageRenderer,
|
|
13
14
|
registerPiCommands,
|
|
14
15
|
} from "../../src/pi.js";
|
|
15
|
-
import {
|
|
16
|
+
import { ensureBundledPromptTemplates } from "../../src/prompt-template-sync.js";
|
|
16
17
|
import {
|
|
17
18
|
buildRepoMapPromptSuffix,
|
|
18
19
|
registerRepoMapTracking,
|
|
@@ -39,8 +40,6 @@ import { buildOnboardingInterviewKickoff } from "../../src/workflow.js";
|
|
|
39
40
|
export default function omniCoreExtension(api: ExtensionAPI): void {
|
|
40
41
|
registerOmniMessageRenderer(api);
|
|
41
42
|
registerPiCommands(api, createOmniCommands());
|
|
42
|
-
registerModelCommand(api);
|
|
43
|
-
registerProviderAuthCommand(api);
|
|
44
43
|
registerThemeCommand(api);
|
|
45
44
|
registerTodoShortcut(api);
|
|
46
45
|
registerUpdater(api);
|
|
@@ -49,6 +48,11 @@ export default function omniCoreExtension(api: ExtensionAPI): void {
|
|
|
49
48
|
|
|
50
49
|
api.on("session_start", async (_event, ctx) => {
|
|
51
50
|
await ensurePiSettings(ctx.cwd);
|
|
51
|
+
ensureBundledPromptTemplates(
|
|
52
|
+
fileURLToPath(
|
|
53
|
+
new URL("../../templates/managed-prompts", import.meta.url),
|
|
54
|
+
),
|
|
55
|
+
);
|
|
52
56
|
loadSavedTheme(ctx.cwd);
|
|
53
57
|
const omniMode = readOmniMode(ctx.cwd);
|
|
54
58
|
ctx.ui.setTitle("Omni-Pi");
|
|
@@ -57,17 +61,19 @@ export default function omniCoreExtension(api: ExtensionAPI): void {
|
|
|
57
61
|
ctx.ui.setStatus("omni", formatOmniModeStatus(omniMode));
|
|
58
62
|
ctx.ui.setStatus("rtk", formatRtkModeStatus(readRtkMode(ctx.cwd), false));
|
|
59
63
|
await refreshRtkStatusIndicator(ctx);
|
|
60
|
-
|
|
61
|
-
void warmRepoMap(ctx.cwd);
|
|
62
|
-
}
|
|
64
|
+
void warmRepoMap(ctx.cwd);
|
|
63
65
|
});
|
|
64
66
|
|
|
65
67
|
api.on("before_agent_start", async (event, ctx) => {
|
|
66
68
|
const omniMode = readOmniMode(ctx.cwd);
|
|
67
69
|
const passivePrompt = await buildPassiveOmniPromptSuffix(ctx.cwd);
|
|
70
|
+
const repoMapPrompt = await buildRepoMapPromptSuffix(ctx.cwd, {
|
|
71
|
+
prompt: typeof event.prompt === "string" ? event.prompt : "",
|
|
72
|
+
maxTokens: omniMode ? undefined : 120,
|
|
73
|
+
});
|
|
68
74
|
if (!omniMode) {
|
|
69
75
|
return {
|
|
70
|
-
systemPrompt: [event.systemPrompt, passivePrompt]
|
|
76
|
+
systemPrompt: [event.systemPrompt, passivePrompt, repoMapPrompt]
|
|
71
77
|
.filter(Boolean)
|
|
72
78
|
.join("\n\n"),
|
|
73
79
|
};
|
|
@@ -80,9 +86,6 @@ export default function omniCoreExtension(api: ExtensionAPI): void {
|
|
|
80
86
|
const onboardingKickoff = init.initResult?.onboardingInterviewNeeded
|
|
81
87
|
? buildOnboardingInterviewKickoff(init.initResult)
|
|
82
88
|
: "";
|
|
83
|
-
const repoMapPrompt = await buildRepoMapPromptSuffix(ctx.cwd, {
|
|
84
|
-
prompt: typeof event.prompt === "string" ? event.prompt : "",
|
|
85
|
-
});
|
|
86
89
|
const prompt = [
|
|
87
90
|
event.systemPrompt,
|
|
88
91
|
passivePrompt,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omni-pi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "Single-agent Pi package that interviews the user, documents the spec, and implements work in bounded slices.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"skills",
|
|
37
37
|
"src",
|
|
38
38
|
"templates",
|
|
39
|
+
"vendor/pi-diff-review",
|
|
39
40
|
"README.md",
|
|
40
|
-
"PROVIDERS.md",
|
|
41
41
|
"CREDITS.md"
|
|
42
42
|
],
|
|
43
43
|
"scripts": {
|
|
@@ -58,19 +58,21 @@
|
|
|
58
58
|
},
|
|
59
59
|
"pi": {
|
|
60
60
|
"extensions": [
|
|
61
|
-
"./extensions/omni-providers/index.ts",
|
|
62
61
|
"./extensions/omni-core/index.ts",
|
|
63
62
|
"./extensions/omni-memory/index.ts",
|
|
64
63
|
"./node_modules/glimpseui/pi-extension/index.ts",
|
|
65
64
|
"./node_modules/pi-web-access/index.ts",
|
|
66
65
|
"./node_modules/pi-interview/index.ts",
|
|
66
|
+
"./node_modules/pi-diff-review/src/index.ts",
|
|
67
|
+
"./node_modules/pi-prompt-template-model/index.ts",
|
|
67
68
|
"./node_modules/@juanibiapina/pi-extension-settings/dist/index.js",
|
|
68
69
|
"./node_modules/@juanibiapina/pi-powerbar/dist"
|
|
69
70
|
],
|
|
70
71
|
"skills": [
|
|
71
72
|
"./skills",
|
|
72
73
|
"./node_modules/glimpseui/skills",
|
|
73
|
-
"./node_modules/pi-web-access/skills"
|
|
74
|
+
"./node_modules/pi-web-access/skills",
|
|
75
|
+
"./node_modules/pi-prompt-template-model/skills"
|
|
74
76
|
],
|
|
75
77
|
"prompts": [
|
|
76
78
|
"./prompts"
|
|
@@ -80,9 +82,11 @@
|
|
|
80
82
|
"@anthropic-ai/claude-agent-sdk": "0.2.84",
|
|
81
83
|
"@juanibiapina/pi-extension-settings": "^0.6.1",
|
|
82
84
|
"@juanibiapina/pi-powerbar": "^0.8.0",
|
|
83
|
-
"@mariozechner/pi-coding-agent": "^0.
|
|
85
|
+
"@mariozechner/pi-coding-agent": "^0.70.0",
|
|
84
86
|
"glimpseui": "^0.7.0",
|
|
87
|
+
"pi-diff-review": "file:./vendor/pi-diff-review",
|
|
85
88
|
"pi-interview": "^0.6.2",
|
|
89
|
+
"pi-prompt-template-model": "^0.8.2",
|
|
86
90
|
"pi-web-access": "^0.10.6",
|
|
87
91
|
"zod": "^4.3.6"
|
|
88
92
|
},
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import {
|
|
2
|
+
existsSync,
|
|
3
|
+
mkdirSync,
|
|
4
|
+
readFileSync,
|
|
5
|
+
rmSync,
|
|
6
|
+
writeFileSync,
|
|
7
|
+
} from "node:fs";
|
|
8
|
+
import os from "node:os";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
|
|
11
|
+
const MANAGED_PROMPT_FILES = ["commit.md", "push.md"] as const;
|
|
12
|
+
const MANAGED_SUBDIR = "omni-pi";
|
|
13
|
+
const LEGACY_MANAGED_SUBDIRS = ["zz-omni-pi"] as const;
|
|
14
|
+
|
|
15
|
+
export function ensureBundledPromptTemplates(
|
|
16
|
+
sourceDir: string,
|
|
17
|
+
options?: {
|
|
18
|
+
homeDir?: string;
|
|
19
|
+
targetSubdir?: string;
|
|
20
|
+
promptFiles?: readonly string[];
|
|
21
|
+
legacySubdirs?: readonly string[];
|
|
22
|
+
},
|
|
23
|
+
): string[] {
|
|
24
|
+
const homeDir = options?.homeDir ?? os.homedir();
|
|
25
|
+
const targetSubdir = options?.targetSubdir ?? MANAGED_SUBDIR;
|
|
26
|
+
const promptFiles = options?.promptFiles ?? MANAGED_PROMPT_FILES;
|
|
27
|
+
const legacySubdirs = options?.legacySubdirs ?? LEGACY_MANAGED_SUBDIRS;
|
|
28
|
+
const promptsRoot = path.join(homeDir, ".pi", "agent", "prompts");
|
|
29
|
+
const targetDir = path.join(promptsRoot, targetSubdir);
|
|
30
|
+
|
|
31
|
+
for (const legacySubdir of legacySubdirs) {
|
|
32
|
+
const legacyDir = path.join(promptsRoot, legacySubdir);
|
|
33
|
+
if (legacyDir === targetDir || !existsSync(legacyDir)) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
rmSync(legacyDir, { recursive: true, force: true });
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
mkdirSync(targetDir, { recursive: true });
|
|
40
|
+
|
|
41
|
+
const written: string[] = [];
|
|
42
|
+
for (const file of promptFiles) {
|
|
43
|
+
const sourcePath = path.join(sourceDir, file);
|
|
44
|
+
const targetPath = path.join(targetDir, file);
|
|
45
|
+
const nextContent = readFileSync(sourcePath, "utf8");
|
|
46
|
+
|
|
47
|
+
let currentContent: string | null = null;
|
|
48
|
+
try {
|
|
49
|
+
currentContent = readFileSync(targetPath, "utf8");
|
|
50
|
+
} catch {
|
|
51
|
+
currentContent = null;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (currentContent === nextContent) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
writeFileSync(targetPath, nextContent, "utf8");
|
|
59
|
+
written.push(targetPath);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return written;
|
|
63
|
+
}
|