@oh-my-pi/pi-coding-agent 13.1.2 → 13.2.1
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 +31 -0
- package/package.json +7 -7
- package/scripts/format-prompts.ts +33 -14
- package/src/async/job-manager.ts +43 -1
- package/src/capability/index.ts +1 -2
- package/src/capability/tool.ts +1 -1
- package/src/cli/args.ts +1 -2
- package/src/cli/config-cli.ts +1 -1
- package/src/cli/file-processor.ts +1 -2
- package/src/cli/grep-cli.ts +1 -1
- package/src/cli/jupyter-cli.ts +1 -1
- package/src/cli/plugin-cli.ts +1 -1
- package/src/cli/setup-cli.ts +1 -1
- package/src/cli/shell-cli.ts +1 -1
- package/src/cli/ssh-cli.ts +1 -1
- package/src/cli/stats-cli.ts +1 -2
- package/src/cli/update-cli.ts +1 -2
- package/src/cli/web-search-cli.ts +1 -1
- package/src/cli.ts +1 -1
- package/src/commands/launch.ts +2 -1
- package/src/commit/agentic/agent.ts +2 -1
- package/src/commit/agentic/index.ts +1 -2
- package/src/commit/agentic/prompts/system.md +3 -3
- package/src/commit/agentic/tools/propose-changelog.ts +30 -19
- package/src/commit/changelog/generate.ts +16 -6
- package/src/commit/changelog/index.ts +2 -1
- package/src/commit/pipeline.ts +1 -2
- package/src/commit/prompts/reduce-system.md +1 -1
- package/src/commit/types.ts +10 -1
- package/src/config/keybindings.ts +1 -2
- package/src/config/model-registry.ts +1 -1
- package/src/config/prompt-templates.ts +14 -2
- package/src/config/settings-schema.ts +10 -0
- package/src/config/settings.ts +25 -2
- package/src/config.ts +1 -2
- package/src/debug/index.ts +1 -1
- package/src/debug/report-bundle.ts +1 -2
- package/src/debug/system-info.ts +1 -2
- package/src/discovery/agents.ts +2 -2
- package/src/discovery/builtin.ts +24 -14
- package/src/discovery/claude-plugins.ts +3 -2
- package/src/discovery/claude.ts +9 -9
- package/src/discovery/codex.ts +3 -3
- package/src/discovery/cursor.ts +5 -4
- package/src/discovery/gemini.ts +5 -5
- package/src/discovery/helpers.ts +47 -69
- package/src/discovery/mcp-json.ts +3 -3
- package/src/discovery/opencode.ts +7 -8
- package/src/discovery/ssh.ts +3 -3
- package/src/discovery/vscode.ts +3 -2
- package/src/discovery/windsurf.ts +3 -2
- package/src/exa/company.ts +1 -1
- package/src/exa/factory.ts +1 -6
- package/src/exa/linkedin.ts +1 -1
- package/src/exa/mcp-client.ts +19 -8
- package/src/exa/search.ts +2 -2
- package/src/exa/types.ts +3 -3
- package/src/exec/bash-executor.ts +2 -1
- package/src/exec/non-interactive-env.ts +43 -0
- package/src/export/custom-share.ts +1 -1
- package/src/export/html/index.ts +1 -2
- package/src/extensibility/custom-commands/loader.ts +1 -2
- package/src/extensibility/plugins/installer.ts +1 -2
- package/src/extensibility/plugins/loader.ts +1 -2
- package/src/extensibility/plugins/manager.ts +3 -2
- package/src/extensibility/skills.ts +59 -115
- package/src/index.ts +1 -3
- package/src/internal-urls/docs-index.generated.ts +1 -1
- package/src/ipy/executor.ts +1 -2
- package/src/ipy/gateway-coordinator.ts +1 -2
- package/src/ipy/modules.ts +1 -1
- package/src/ipy/runtime.ts +1 -3
- package/src/main.ts +1 -2
- package/src/mcp/config.ts +1 -1
- package/src/mcp/transports/stdio.ts +1 -2
- package/src/memories/index.ts +1 -2
- package/src/modes/components/diff.ts +49 -19
- package/src/modes/components/extensions/extension-dashboard.ts +1 -1
- package/src/modes/components/extensions/inspector-panel.ts +8 -2
- package/src/modes/components/footer.ts +1 -2
- package/src/modes/components/status-line/segments.ts +1 -2
- package/src/modes/components/tool-execution.ts +3 -10
- package/src/modes/components/welcome.ts +1 -1
- package/src/modes/controllers/command-controller.ts +1 -2
- package/src/modes/controllers/mcp-command-controller.ts +1 -1
- package/src/modes/controllers/selector-controller.ts +1 -1
- package/src/modes/controllers/ssh-command-controller.ts +1 -1
- package/src/modes/interactive-mode.ts +2 -3
- package/src/modes/shared.ts +1 -2
- package/src/modes/theme/theme.ts +1 -2
- package/src/patch/index.ts +1 -25
- package/src/prompts/agents/designer.md +7 -10
- package/src/prompts/agents/explore.md +15 -23
- package/src/prompts/agents/init.md +23 -23
- package/src/prompts/agents/plan.md +14 -77
- package/src/prompts/agents/reviewer.md +6 -5
- package/src/prompts/agents/task.md +13 -11
- package/src/prompts/compaction/branch-summary.md +3 -3
- package/src/prompts/compaction/compaction-short-summary.md +7 -7
- package/src/prompts/compaction/compaction-summary-context.md +1 -1
- package/src/prompts/compaction/compaction-summary.md +5 -5
- package/src/prompts/compaction/compaction-turn-prefix.md +3 -3
- package/src/prompts/compaction/compaction-update-summary.md +11 -11
- package/src/prompts/memories/consolidation.md +5 -5
- package/src/prompts/memories/read-path.md +6 -6
- package/src/prompts/memories/stage_one_input.md +1 -1
- package/src/prompts/memories/stage_one_system.md +5 -5
- package/src/prompts/review-request.md +4 -4
- package/src/prompts/system/agent-creation-architect.md +17 -17
- package/src/prompts/system/agent-creation-user.md +2 -2
- package/src/prompts/system/custom-system-prompt.md +4 -4
- package/src/prompts/system/plan-mode-active.md +20 -20
- package/src/prompts/system/plan-mode-approved.md +7 -7
- package/src/prompts/system/plan-mode-reference.md +2 -2
- package/src/prompts/system/plan-mode-subagent.md +8 -8
- package/src/prompts/system/subagent-submit-reminder.md +5 -5
- package/src/prompts/system/subagent-system-prompt.md +29 -22
- package/src/prompts/system/subagent-user-prompt.md +7 -3
- package/src/prompts/system/summarization-system.md +1 -1
- package/src/prompts/system/system-prompt.md +201 -226
- package/src/prompts/system/title-system.md +2 -2
- package/src/prompts/system/ttsr-interrupt.md +1 -1
- package/src/prompts/system/web-search.md +16 -16
- package/src/prompts/tools/ask.md +1 -3
- package/src/prompts/tools/await.md +2 -4
- package/src/prompts/tools/bash.md +5 -7
- package/src/prompts/tools/browser.md +4 -6
- package/src/prompts/tools/calculator.md +1 -3
- package/src/prompts/tools/cancel-job.md +2 -4
- package/src/prompts/tools/exit-plan-mode.md +7 -7
- package/src/prompts/tools/fetch.md +0 -2
- package/src/prompts/tools/find.md +3 -5
- package/src/prompts/tools/gemini-image.md +6 -22
- package/src/prompts/tools/grep.md +4 -6
- package/src/prompts/tools/hashline.md +12 -15
- package/src/prompts/tools/lsp.md +1 -3
- package/src/prompts/tools/patch.md +7 -9
- package/src/prompts/tools/python.md +10 -14
- package/src/prompts/tools/read.md +0 -2
- package/src/prompts/tools/replace.md +5 -7
- package/src/prompts/tools/ssh.md +3 -5
- package/src/prompts/tools/task.md +6 -8
- package/src/prompts/tools/todo-write.md +7 -9
- package/src/prompts/tools/web-search.md +3 -5
- package/src/prompts/tools/write.md +3 -5
- package/src/sdk.ts +1 -2
- package/src/session/agent-session.ts +10 -26
- package/src/session/agent-storage.ts +1 -2
- package/src/session/history-storage.ts +1 -2
- package/src/session/session-manager.ts +10 -2
- package/src/ssh/connection-manager.ts +11 -2
- package/src/ssh/sshfs-mount.ts +7 -1
- package/src/system-prompt.ts +25 -103
- package/src/task/agents.ts +1 -1
- package/src/task/worktree.ts +1 -2
- package/src/tools/ask.ts +0 -1
- package/src/tools/await-tool.ts +6 -3
- package/src/tools/bash-interactive.ts +2 -45
- package/src/tools/bash.ts +5 -5
- package/src/tools/browser.ts +1 -2
- package/src/tools/gemini-image.ts +8 -28
- package/src/tools/json-tree.ts +2 -1
- package/src/tools/python.ts +1 -1
- package/src/tools/read.ts +1 -2
- package/src/tools/render-utils.ts +5 -2
- package/src/tools/todo-write.ts +11 -9
- package/src/utils/tools-manager.ts +1 -2
- package/src/web/scrapers/artifacthub.ts +2 -1
- package/src/web/scrapers/aur.ts +2 -1
- package/src/web/scrapers/biorxiv.ts +2 -1
- package/src/web/scrapers/bluesky.ts +2 -1
- package/src/web/scrapers/chocolatey.ts +2 -1
- package/src/web/scrapers/cisa-kev.ts +2 -1
- package/src/web/scrapers/clojars.ts +2 -1
- package/src/web/scrapers/coingecko.ts +2 -1
- package/src/web/scrapers/crates-io.ts +2 -1
- package/src/web/scrapers/crossref.ts +2 -1
- package/src/web/scrapers/discogs.ts +3 -1
- package/src/web/scrapers/discourse.ts +2 -1
- package/src/web/scrapers/dockerhub.ts +2 -1
- package/src/web/scrapers/fdroid.ts +2 -1
- package/src/web/scrapers/firefox-addons.ts +2 -1
- package/src/web/scrapers/flathub.ts +2 -1
- package/src/web/scrapers/gitlab.ts +1 -1
- package/src/web/scrapers/go-pkg.ts +2 -1
- package/src/web/scrapers/hackage.ts +2 -1
- package/src/web/scrapers/hackernews.ts +2 -1
- package/src/web/scrapers/hex.ts +2 -1
- package/src/web/scrapers/huggingface.ts +2 -1
- package/src/web/scrapers/jetbrains-marketplace.ts +2 -1
- package/src/web/scrapers/lemmy.ts +2 -1
- package/src/web/scrapers/lobsters.ts +2 -1
- package/src/web/scrapers/mastodon.ts +2 -1
- package/src/web/scrapers/maven.ts +2 -1
- package/src/web/scrapers/mdn.ts +2 -1
- package/src/web/scrapers/metacpan.ts +2 -1
- package/src/web/scrapers/musicbrainz.ts +3 -1
- package/src/web/scrapers/npm.ts +2 -1
- package/src/web/scrapers/nuget.ts +2 -1
- package/src/web/scrapers/nvd.ts +2 -1
- package/src/web/scrapers/ollama.ts +2 -1
- package/src/web/scrapers/open-vsx.ts +2 -1
- package/src/web/scrapers/opencorporates.ts +2 -1
- package/src/web/scrapers/openlibrary.ts +2 -1
- package/src/web/scrapers/orcid.ts +3 -1
- package/src/web/scrapers/osv.ts +2 -1
- package/src/web/scrapers/packagist.ts +2 -1
- package/src/web/scrapers/pub-dev.ts +2 -1
- package/src/web/scrapers/pubmed.ts +2 -1
- package/src/web/scrapers/pypi.ts +2 -1
- package/src/web/scrapers/rawg.ts +2 -8
- package/src/web/scrapers/reddit.ts +2 -1
- package/src/web/scrapers/repology.ts +2 -1
- package/src/web/scrapers/rfc.ts +2 -1
- package/src/web/scrapers/rubygems.ts +2 -1
- package/src/web/scrapers/searchcode.ts +2 -1
- package/src/web/scrapers/sec-edgar.ts +2 -1
- package/src/web/scrapers/semantic-scholar.ts +2 -1
- package/src/web/scrapers/snapcraft.ts +2 -1
- package/src/web/scrapers/sourcegraph.ts +2 -1
- package/src/web/scrapers/spdx.ts +2 -1
- package/src/web/scrapers/stackoverflow.ts +2 -1
- package/src/web/scrapers/terraform.ts +2 -1
- package/src/web/scrapers/types.ts +0 -11
- package/src/web/scrapers/vimeo.ts +2 -1
- package/src/web/scrapers/vscode-marketplace.ts +2 -1
- package/src/web/scrapers/w3c.ts +2 -1
- package/src/web/scrapers/wikidata.ts +2 -1
- package/src/web/search/index.ts +10 -14
- package/src/web/search/provider.ts +2 -2
- package/src/web/search/providers/codex.ts +1 -2
- package/src/web/search/providers/exa.ts +1 -6
- package/src/web/search/providers/gemini.ts +1 -1
- package/src/web/search/providers/perplexity.ts +1 -2
- package/src/web/search/providers/utils.ts +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getIndentation } from "@oh-my-pi/pi-utils";
|
|
1
2
|
import * as Diff from "diff";
|
|
2
3
|
import { theme } from "../../modes/theme/theme";
|
|
3
4
|
import { replaceTabs } from "../../tools/render-utils";
|
|
@@ -12,26 +13,30 @@ const DIM_OFF = "\x1b[22m";
|
|
|
12
13
|
* before the first non-whitespace character; remaining tabs in code
|
|
13
14
|
* content are replaced with spaces (like replaceTabs).
|
|
14
15
|
*/
|
|
15
|
-
function visualizeIndent(text: string): string {
|
|
16
|
+
function visualizeIndent(text: string, filePath?: string): string {
|
|
16
17
|
const match = text.match(/^([ \t]+)/);
|
|
17
|
-
if (!match) return replaceTabs(text);
|
|
18
|
+
if (!match) return replaceTabs(text, filePath);
|
|
18
19
|
const indent = match[1];
|
|
19
20
|
const rest = text.slice(indent.length);
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const
|
|
21
|
+
const indentation = getIndentation(filePath);
|
|
22
|
+
const tabWidth = indentation.length;
|
|
23
|
+
const leftPadding = Math.floor(tabWidth / 2);
|
|
24
|
+
const rightPadding = Math.max(0, tabWidth - leftPadding - 1);
|
|
25
|
+
const tabMarker = `${DIM}${" ".repeat(leftPadding)}→${" ".repeat(rightPadding)}${DIM_OFF}`;
|
|
26
|
+
// Normalize: collapse configured tab-width groups into tab markers, then handle remaining spaces.
|
|
27
|
+
const normalized = indent.replaceAll("\t", indentation);
|
|
23
28
|
let visible = "";
|
|
24
29
|
let pos = 0;
|
|
25
30
|
while (pos < normalized.length) {
|
|
26
|
-
if (pos +
|
|
27
|
-
visible +=
|
|
28
|
-
pos +=
|
|
31
|
+
if (pos + tabWidth <= normalized.length && normalized.slice(pos, pos + tabWidth) === indentation) {
|
|
32
|
+
visible += tabMarker;
|
|
33
|
+
pos += tabWidth;
|
|
29
34
|
} else {
|
|
30
35
|
visible += `${DIM}·${DIM_OFF}`;
|
|
31
36
|
pos++;
|
|
32
37
|
}
|
|
33
38
|
}
|
|
34
|
-
return `${visible}${replaceTabs(rest)}`;
|
|
39
|
+
return `${visible}${replaceTabs(rest, filePath)}`;
|
|
35
40
|
}
|
|
36
41
|
|
|
37
42
|
/**
|
|
@@ -96,7 +101,7 @@ function renderIntraLineDiff(oldContent: string, newContent: string): { removedL
|
|
|
96
101
|
}
|
|
97
102
|
|
|
98
103
|
export interface RenderDiffOptions {
|
|
99
|
-
/** File path
|
|
104
|
+
/** File path used to resolve indentation (.editorconfig + defaults) */
|
|
100
105
|
filePath?: string;
|
|
101
106
|
}
|
|
102
107
|
|
|
@@ -106,7 +111,7 @@ export interface RenderDiffOptions {
|
|
|
106
111
|
* - Removed lines: red, with inverse on changed tokens
|
|
107
112
|
* - Added lines: green, with inverse on changed tokens
|
|
108
113
|
*/
|
|
109
|
-
export function renderDiff(diffText: string,
|
|
114
|
+
export function renderDiff(diffText: string, options: RenderDiffOptions = {}): string {
|
|
110
115
|
const lines = diffText.split("\n");
|
|
111
116
|
const result: string[] = [];
|
|
112
117
|
|
|
@@ -154,30 +159,55 @@ export function renderDiff(diffText: string, _options: RenderDiffOptions = {}):
|
|
|
154
159
|
const added = addedLines[0];
|
|
155
160
|
|
|
156
161
|
const { removedLine, addedLine } = renderIntraLineDiff(
|
|
157
|
-
replaceTabs(removed.content),
|
|
158
|
-
replaceTabs(added.content),
|
|
162
|
+
replaceTabs(removed.content, options.filePath),
|
|
163
|
+
replaceTabs(added.content, options.filePath),
|
|
159
164
|
);
|
|
160
165
|
|
|
161
|
-
result.push(
|
|
162
|
-
|
|
166
|
+
result.push(
|
|
167
|
+
theme.fg(
|
|
168
|
+
"toolDiffRemoved",
|
|
169
|
+
formatLine("-", removed.lineNum, visualizeIndent(removedLine, options.filePath)),
|
|
170
|
+
),
|
|
171
|
+
);
|
|
172
|
+
result.push(
|
|
173
|
+
theme.fg("toolDiffAdded", formatLine("+", added.lineNum, visualizeIndent(addedLine, options.filePath))),
|
|
174
|
+
);
|
|
163
175
|
} else {
|
|
164
176
|
// Show all removed lines first, then all added lines
|
|
165
177
|
for (const removed of removedLines) {
|
|
166
178
|
result.push(
|
|
167
|
-
theme.fg(
|
|
179
|
+
theme.fg(
|
|
180
|
+
"toolDiffRemoved",
|
|
181
|
+
formatLine("-", removed.lineNum, visualizeIndent(removed.content, options.filePath)),
|
|
182
|
+
),
|
|
168
183
|
);
|
|
169
184
|
}
|
|
170
185
|
for (const added of addedLines) {
|
|
171
|
-
result.push(
|
|
186
|
+
result.push(
|
|
187
|
+
theme.fg(
|
|
188
|
+
"toolDiffAdded",
|
|
189
|
+
formatLine("+", added.lineNum, visualizeIndent(added.content, options.filePath)),
|
|
190
|
+
),
|
|
191
|
+
);
|
|
172
192
|
}
|
|
173
193
|
}
|
|
174
194
|
} else if (parsed.prefix === "+") {
|
|
175
195
|
// Standalone added line
|
|
176
|
-
result.push(
|
|
196
|
+
result.push(
|
|
197
|
+
theme.fg(
|
|
198
|
+
"toolDiffAdded",
|
|
199
|
+
formatLine("+", parsed.lineNum, visualizeIndent(parsed.content, options.filePath)),
|
|
200
|
+
),
|
|
201
|
+
);
|
|
177
202
|
i++;
|
|
178
203
|
} else {
|
|
179
204
|
// Context line
|
|
180
|
-
result.push(
|
|
205
|
+
result.push(
|
|
206
|
+
theme.fg(
|
|
207
|
+
"toolDiffContext",
|
|
208
|
+
formatLine(" ", parsed.lineNum, visualizeIndent(parsed.content, options.filePath)),
|
|
209
|
+
),
|
|
210
|
+
);
|
|
181
211
|
i++;
|
|
182
212
|
}
|
|
183
213
|
}
|
|
@@ -298,7 +298,7 @@ class TwoColumnBody implements Component {
|
|
|
298
298
|
|
|
299
299
|
render(width: number): string[] {
|
|
300
300
|
const leftWidth = Math.floor(width * 0.5);
|
|
301
|
-
const rightWidth = width - leftWidth - 3;
|
|
301
|
+
const rightWidth = Math.max(0, width - leftWidth - 3);
|
|
302
302
|
|
|
303
303
|
const leftLines = this.leftPane.render(leftWidth);
|
|
304
304
|
const rightLines = this.rightPane.render(rightWidth);
|
|
@@ -35,12 +35,18 @@ export class InspectorPanel implements Component {
|
|
|
35
35
|
lines.push("");
|
|
36
36
|
|
|
37
37
|
// Description (wrapped)
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
const desc = ext.description;
|
|
39
|
+
const isValidDescription = typeof desc === "string" && desc.length > 0;
|
|
40
|
+
if (isValidDescription && width > 2) {
|
|
41
|
+
const wrapped = wrapTextWithAnsi(desc, width - 2);
|
|
40
42
|
for (const line of wrapped) {
|
|
41
43
|
lines.push(truncateToWidth(line, width));
|
|
42
44
|
}
|
|
43
45
|
lines.push("");
|
|
46
|
+
} else if (isValidDescription) {
|
|
47
|
+
// Width too small for wrapping, show truncated single line
|
|
48
|
+
lines.push(truncateToWidth(desc, width));
|
|
49
|
+
lines.push("");
|
|
44
50
|
}
|
|
45
51
|
|
|
46
52
|
// Origin
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import { type Component, padding, truncateToWidth, visibleWidth } from "@oh-my-pi/pi-tui";
|
|
3
|
-
import { formatNumber } from "@oh-my-pi/pi-utils";
|
|
4
|
-
import { getProjectDir } from "@oh-my-pi/pi-utils/dirs";
|
|
3
|
+
import { formatNumber, getProjectDir } from "@oh-my-pi/pi-utils";
|
|
5
4
|
import { theme } from "../../modes/theme/theme";
|
|
6
5
|
import type { AgentSession } from "../../session/agent-session";
|
|
7
6
|
import { shortenPath } from "../../tools/render-utils";
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as os from "node:os";
|
|
2
|
-
import { formatDuration, formatNumber } from "@oh-my-pi/pi-utils";
|
|
3
|
-
import { getProjectDir } from "@oh-my-pi/pi-utils/dirs";
|
|
2
|
+
import { formatDuration, formatNumber, getProjectDir } from "@oh-my-pi/pi-utils";
|
|
4
3
|
import { theme } from "../../../modes/theme/theme";
|
|
5
4
|
import { shortenPath } from "../../../tools/render-utils";
|
|
6
5
|
import type { RenderedSegment, SegmentContext, StatusLineSegment, StatusLineSegmentId } from "./types";
|
|
@@ -13,17 +13,10 @@ import {
|
|
|
13
13
|
Text,
|
|
14
14
|
type TUI,
|
|
15
15
|
} from "@oh-my-pi/pi-tui";
|
|
16
|
-
import { logger } from "@oh-my-pi/pi-utils";
|
|
17
|
-
import { getProjectDir } from "@oh-my-pi/pi-utils/dirs";
|
|
16
|
+
import { getProjectDir, logger } from "@oh-my-pi/pi-utils";
|
|
18
17
|
import type { Theme } from "../../modes/theme/theme";
|
|
19
18
|
import { theme } from "../../modes/theme/theme";
|
|
20
|
-
import {
|
|
21
|
-
computeEditDiff,
|
|
22
|
-
computeHashlineDiff,
|
|
23
|
-
computePatchDiff,
|
|
24
|
-
type EditDiffError,
|
|
25
|
-
type EditDiffResult,
|
|
26
|
-
} from "../../patch";
|
|
19
|
+
import { computeEditDiff, computeHashlineDiff, computePatchDiff, type DiffError, type DiffResult } from "../../patch";
|
|
27
20
|
import { BASH_DEFAULT_PREVIEW_LINES } from "../../tools/bash";
|
|
28
21
|
import {
|
|
29
22
|
formatArgsInline,
|
|
@@ -106,7 +99,7 @@ export class ToolExecutionComponent extends Container {
|
|
|
106
99
|
details?: any;
|
|
107
100
|
};
|
|
108
101
|
// Cached edit diff preview (computed when args arrive, before tool executes)
|
|
109
|
-
#editDiffPreview?:
|
|
102
|
+
#editDiffPreview?: DiffResult | DiffError;
|
|
110
103
|
#editDiffArgsKey?: string; // Track which args the preview is for
|
|
111
104
|
// Cached converted images for Kitty protocol (which requires PNG), keyed by index
|
|
112
105
|
#convertedImages: Map<number, { data: string; mimeType: string }> = new Map();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Component, padding, truncateToWidth, visibleWidth } from "@oh-my-pi/pi-tui";
|
|
2
|
-
import { APP_NAME } from "@oh-my-pi/pi-utils
|
|
2
|
+
import { APP_NAME } from "@oh-my-pi/pi-utils";
|
|
3
3
|
import { theme } from "../../modes/theme/theme";
|
|
4
4
|
|
|
5
5
|
export interface RecentSession {
|
|
@@ -10,8 +10,7 @@ import {
|
|
|
10
10
|
} from "@oh-my-pi/pi-ai";
|
|
11
11
|
import { copyToClipboard } from "@oh-my-pi/pi-natives";
|
|
12
12
|
import { Loader, Markdown, padding, Spacer, Text, visibleWidth } from "@oh-my-pi/pi-tui";
|
|
13
|
-
import { formatDuration, Snowflake } from "@oh-my-pi/pi-utils";
|
|
14
|
-
import { setProjectDir } from "@oh-my-pi/pi-utils/dirs";
|
|
13
|
+
import { formatDuration, Snowflake, setProjectDir } from "@oh-my-pi/pi-utils";
|
|
15
14
|
import { $ } from "bun";
|
|
16
15
|
import { reset as resetCapabilities } from "../../capability";
|
|
17
16
|
import { loadCustomShare } from "../../export/custom-share";
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Handles /mcp subcommands for managing MCP servers.
|
|
5
5
|
*/
|
|
6
6
|
import { Spacer, Text } from "@oh-my-pi/pi-tui";
|
|
7
|
-
import { getMCPConfigPath, getProjectDir } from "@oh-my-pi/pi-utils
|
|
7
|
+
import { getMCPConfigPath, getProjectDir } from "@oh-my-pi/pi-utils";
|
|
8
8
|
import type { SourceMeta } from "../../capability/types";
|
|
9
9
|
import { analyzeAuthError, discoverOAuthEndpoints, MCPManager } from "../../mcp";
|
|
10
10
|
import { connectToServer, disconnectServer, listTools } from "../../mcp/client";
|
|
@@ -2,7 +2,7 @@ import type { ThinkingLevel } from "@oh-my-pi/pi-agent-core";
|
|
|
2
2
|
import { getOAuthProviders, type OAuthProvider } from "@oh-my-pi/pi-ai";
|
|
3
3
|
import type { Component } from "@oh-my-pi/pi-tui";
|
|
4
4
|
import { Input, Loader, Spacer, Text } from "@oh-my-pi/pi-tui";
|
|
5
|
-
import { getAgentDbPath, getProjectDir } from "@oh-my-pi/pi-utils
|
|
5
|
+
import { getAgentDbPath, getProjectDir } from "@oh-my-pi/pi-utils";
|
|
6
6
|
import { MODEL_ROLES } from "../../config/model-registry";
|
|
7
7
|
import { settings } from "../../config/settings";
|
|
8
8
|
import { DebugSelectorComponent } from "../../debug";
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Handles /ssh subcommands for managing SSH host configurations.
|
|
5
5
|
*/
|
|
6
6
|
import { Spacer, Text } from "@oh-my-pi/pi-tui";
|
|
7
|
-
import { getProjectDir, getSSHConfigPath } from "@oh-my-pi/pi-utils
|
|
7
|
+
import { getProjectDir, getSSHConfigPath } from "@oh-my-pi/pi-utils";
|
|
8
8
|
import { type SSHHost, sshCapability } from "../../capability/ssh";
|
|
9
9
|
import { loadCapability } from "../../discovery";
|
|
10
10
|
import { addSSHHost, readSSHConfigFile, removeSSHHost, type SSHHostConfig } from "../../ssh/config-writer";
|
|
@@ -15,8 +15,7 @@ import {
|
|
|
15
15
|
Text,
|
|
16
16
|
TUI,
|
|
17
17
|
} from "@oh-my-pi/pi-tui";
|
|
18
|
-
import { hsvToRgb, isEnoent, logger, postmortem } from "@oh-my-pi/pi-utils";
|
|
19
|
-
import { APP_NAME, getProjectDir } from "@oh-my-pi/pi-utils/dirs";
|
|
18
|
+
import { APP_NAME, getProjectDir, hsvToRgb, isEnoent, logger, postmortem } from "@oh-my-pi/pi-utils";
|
|
20
19
|
import chalk from "chalk";
|
|
21
20
|
import { KeybindingsManager } from "../config/keybindings";
|
|
22
21
|
import { renderPromptTemplate } from "../config/prompt-templates";
|
|
@@ -776,7 +775,7 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
776
775
|
await this.sessionManager.flush();
|
|
777
776
|
|
|
778
777
|
// Emit shutdown event to hooks
|
|
779
|
-
await this.session.
|
|
778
|
+
await this.session.dispose();
|
|
780
779
|
|
|
781
780
|
if (this.isInitialized) {
|
|
782
781
|
this.ui.requestRender(true);
|
package/src/modes/shared.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
3
|
import type { TabBarTheme } from "@oh-my-pi/pi-tui";
|
|
4
|
-
import { isEnoent } from "@oh-my-pi/pi-utils";
|
|
5
|
-
import { getProjectDir } from "@oh-my-pi/pi-utils/dirs";
|
|
4
|
+
import { getProjectDir, isEnoent } from "@oh-my-pi/pi-utils";
|
|
6
5
|
import { theme } from "./theme/theme";
|
|
7
6
|
|
|
8
7
|
// ═══════════════════════════════════════════════════════════════════════════
|
package/src/modes/theme/theme.ts
CHANGED
|
@@ -6,8 +6,7 @@ import {
|
|
|
6
6
|
supportsLanguage as nativeSupportsLanguage,
|
|
7
7
|
} from "@oh-my-pi/pi-natives";
|
|
8
8
|
import type { EditorTheme, MarkdownTheme, SelectListTheme, SymbolTheme } from "@oh-my-pi/pi-tui";
|
|
9
|
-
import { adjustHsv, isEnoent, logger } from "@oh-my-pi/pi-utils";
|
|
10
|
-
import { getCustomThemesDir } from "@oh-my-pi/pi-utils/dirs";
|
|
9
|
+
import { adjustHsv, getCustomThemesDir, isEnoent, logger } from "@oh-my-pi/pi-utils";
|
|
11
10
|
import { type Static, Type } from "@sinclair/typebox";
|
|
12
11
|
import { TypeCompiler } from "@sinclair/typebox/compiler";
|
|
13
12
|
import chalk from "chalk";
|
package/src/patch/index.ts
CHANGED
|
@@ -77,31 +77,7 @@ export { normalizeCreateContent, normalizeDiff, parseHunks as parseDiffHunks } f
|
|
|
77
77
|
export type { EditRenderContext, EditToolDetails } from "./shared";
|
|
78
78
|
// Rendering
|
|
79
79
|
export { editToolRenderer, getLspBatchRequest } from "./shared";
|
|
80
|
-
export
|
|
81
|
-
ApplyPatchOptions,
|
|
82
|
-
ApplyPatchResult,
|
|
83
|
-
ContextLineResult,
|
|
84
|
-
DiffError,
|
|
85
|
-
DiffError as EditDiffError,
|
|
86
|
-
DiffHunk,
|
|
87
|
-
DiffHunk as UpdateChunk,
|
|
88
|
-
DiffHunk as UpdateFileChunk,
|
|
89
|
-
DiffResult,
|
|
90
|
-
DiffResult as EditDiffResult,
|
|
91
|
-
FileChange,
|
|
92
|
-
FileSystem,
|
|
93
|
-
FuzzyMatch as EditMatch,
|
|
94
|
-
FuzzyMatch,
|
|
95
|
-
HashMismatch,
|
|
96
|
-
MatchOutcome as EditMatchOutcome,
|
|
97
|
-
MatchOutcome,
|
|
98
|
-
Operation,
|
|
99
|
-
PatchInput,
|
|
100
|
-
SequenceSearchResult,
|
|
101
|
-
} from "./types";
|
|
102
|
-
// Types
|
|
103
|
-
// Legacy aliases for backwards compatibility
|
|
104
|
-
export { ApplyPatchError, EditMatchError, ParseError } from "./types";
|
|
80
|
+
export * from "./types";
|
|
105
81
|
|
|
106
82
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
107
83
|
// Schemas
|
|
@@ -5,11 +5,8 @@ spawns: explore
|
|
|
5
5
|
model: google-gemini-cli/gemini-3-pro, gemini-3-pro, gemini-3, pi/default
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
<critical>
|
|
11
|
-
You MAY make file edits, create components, and run commands—and SHOULD do so when needed.
|
|
12
|
-
</critical>
|
|
8
|
+
You are an expert UI/UX designer implementing and reviewing UI designs.
|
|
9
|
+
You **MAY** make file edits, create components, and run commands—and **SHOULD** do so when needed.
|
|
13
10
|
|
|
14
11
|
<strengths>
|
|
15
12
|
- Translate design intent into working UI code
|
|
@@ -35,9 +32,9 @@ You MAY make file edits, create components, and run commands—and SHOULD do so
|
|
|
35
32
|
</procedure>
|
|
36
33
|
|
|
37
34
|
<directives>
|
|
38
|
-
- You SHOULD prefer editing existing files over creating new ones
|
|
39
|
-
- Changes MUST be minimal and consistent with existing code style
|
|
40
|
-
- You MUST NOT create documentation files (*.md) unless explicitly requested
|
|
35
|
+
- You **SHOULD** prefer editing existing files over creating new ones
|
|
36
|
+
- Changes **MUST** be minimal and consistent with existing code style
|
|
37
|
+
- You **MUST NOT** create documentation files (*.md) unless explicitly requested
|
|
41
38
|
</directives>
|
|
42
39
|
|
|
43
40
|
<avoid>
|
|
@@ -66,6 +63,6 @@ You MAY make file edits, create components, and run commands—and SHOULD do so
|
|
|
66
63
|
|
|
67
64
|
<critical>
|
|
68
65
|
Every interface should prompt "how was this made?" not "which AI made this?"
|
|
69
|
-
You MUST commit to clear aesthetic direction and execute with precision.
|
|
70
|
-
You MUST keep going until implementation is complete.
|
|
66
|
+
You **MUST** commit to clear aesthetic direction and execute with precision.
|
|
67
|
+
You **MUST** keep going until implementation is complete.
|
|
71
68
|
</critical>
|
|
@@ -74,39 +74,31 @@ output:
|
|
|
74
74
|
type: string
|
|
75
75
|
---
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
You are a file search specialist and a codebase scout.
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
You MUST operate as read-only. You MUST NOT:
|
|
81
|
-
- Creating/modifying files (no Write/Edit/touch/rm/mv/cp)
|
|
82
|
-
- Creating temporary files anywhere (incl /tmp)
|
|
83
|
-
- Using redirects (>, >>, |) or heredocs to write files
|
|
84
|
-
- Running state-changing commands (git add/commit, npm/pip install)
|
|
85
|
-
</critical>
|
|
79
|
+
Given a task, you rapidly investigate the codebase and return structured findings another agent can use without re-reading everything.
|
|
86
80
|
|
|
87
81
|
<directives>
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
- Use read when path is known
|
|
91
|
-
- You MUST use bash ONLY for git status/log/diff; you MUST use read/grep/find/ls for file/search operations
|
|
92
|
-
- You SHOULD spawn parallel tool calls when possible—this agent is meant to be fast
|
|
93
|
-
- Return absolute file paths in final response
|
|
82
|
+
- You **MUST** use tools for broad pattern matching / code search as much as possible.
|
|
83
|
+
- You **SHOULD** invoke tools in parallel when possible—this is a short investigation, and you are supposed to finish in a few seconds.
|
|
94
84
|
</directives>
|
|
95
85
|
|
|
96
86
|
<thoroughness>
|
|
97
|
-
|
|
98
|
-
- Quick
|
|
99
|
-
- Medium
|
|
100
|
-
- Thorough
|
|
87
|
+
You **MUST** infer the thoroughness from the task; default to medium:
|
|
88
|
+
- **Quick**: Targeted lookups, key files only
|
|
89
|
+
- **Medium**: Follow imports, read critical sections
|
|
90
|
+
- **Thorough**: Trace all dependencies, check tests/types.
|
|
101
91
|
</thoroughness>
|
|
102
92
|
|
|
103
93
|
<procedure>
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
94
|
+
You **SHOULD** generally follow this procedure, but are allowed to adjust it as the task requires:
|
|
95
|
+
1. Locate relevant code using tools.
|
|
96
|
+
2. Read key sections (You **MUST NOT** read full files unless they're tiny)
|
|
97
|
+
3. Identify types/interfaces/key functions.
|
|
98
|
+
4. Note dependencies between files.
|
|
108
99
|
</procedure>
|
|
109
100
|
|
|
110
101
|
<critical>
|
|
111
|
-
You MUST
|
|
102
|
+
You **MUST** operate as read-only. You **MUST NOT** write, edit, or modify files, nor execute any state-changing commands, via git, build system, package manager, etc.
|
|
103
|
+
You **MUST** keep going until complete.
|
|
112
104
|
</critical>
|
|
@@ -4,33 +4,33 @@ description: Generate AGENTS.md for current codebase
|
|
|
4
4
|
thinking-level: medium
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
Analyze codebase, generate AGENTS.md documenting:
|
|
9
|
-
1. **Project Overview**: Brief description of project purpose
|
|
10
|
-
2. **Architecture & Data Flow**: High-level structure, key modules, data flow
|
|
11
|
-
3. **Key Directories**: Main source directories, purposes
|
|
12
|
-
4. **Development Commands**: Build, test, lint, run commands
|
|
13
|
-
5. **Code Conventions & Common Patterns**: Formatting, naming, error handling, async patterns, dependency injection, state management
|
|
14
|
-
6. **Important Files**: Entry points, config files, key modules
|
|
15
|
-
7. **Runtime/Tooling Preferences**: Required runtime (e.g., Bun vs Node), package manager, tooling constraints
|
|
16
|
-
8. **Testing & QA**: Test frameworks, running tests, coverage expectations
|
|
17
|
-
</task>
|
|
7
|
+
You are an expert project lead specializing in writing excellent project documentation.
|
|
18
8
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
9
|
+
You **MUST** launch multiple `explore` agents in parallel (via `task` tool) scanning different areas (core src, tests, configs/build, scripts/docs), then synthesize your findings into a detailed AGENTS.md file.
|
|
10
|
+
|
|
11
|
+
<structure>
|
|
12
|
+
You will likely need to document these sections, but only take it as a starting point and adjust it to the specific codebase:
|
|
13
|
+
- **Project Overview**: Brief description of project purpose
|
|
14
|
+
- **Architecture & Data Flow**: High-level structure, key modules, data flow
|
|
15
|
+
- **Key Directories**: Main source directories, purposes
|
|
16
|
+
- **Development Commands**: Build, test, lint, run commands
|
|
17
|
+
- **Code Conventions & Common Patterns**: Formatting, naming, error handling, async patterns, dependency injection, state management
|
|
18
|
+
- **Important Files**: Entry points, config files, key modules
|
|
19
|
+
- **Runtime/Tooling Preferences**: Required runtime (e.g., Bun vs Node), package manager, tooling constraints
|
|
20
|
+
- **Testing & QA**: Test frameworks, running tests, coverage expectations
|
|
21
|
+
</structure>
|
|
22
22
|
|
|
23
23
|
<directives>
|
|
24
|
-
- You MUST title the document "Repository Guidelines"
|
|
25
|
-
- You MUST use Markdown headings for structure
|
|
26
|
-
- You MUST be concise and practical
|
|
27
|
-
- You MUST focus on what an AI assistant needs to help with the codebase
|
|
28
|
-
- You SHOULD include examples where helpful (commands, paths, naming patterns)
|
|
29
|
-
- You SHOULD include file paths where relevant
|
|
30
|
-
- You MUST call out architecture and code patterns explicitly
|
|
31
|
-
- You SHOULD omit information obvious from code structure
|
|
24
|
+
- You **MUST** title the document "Repository Guidelines"
|
|
25
|
+
- You **MUST** use Markdown headings for structure
|
|
26
|
+
- You **MUST** be concise and practical
|
|
27
|
+
- You **MUST** focus on what an AI assistant needs to help with the codebase
|
|
28
|
+
- You **SHOULD** include examples where helpful (commands, paths, naming patterns)
|
|
29
|
+
- You **SHOULD** include file paths where relevant
|
|
30
|
+
- You **MUST** call out architecture and code patterns explicitly
|
|
31
|
+
- You **SHOULD** omit information obvious from code structure
|
|
32
32
|
</directives>
|
|
33
33
|
|
|
34
34
|
<output>
|
|
35
|
-
After analysis, you MUST write AGENTS.md to the project root.
|
|
35
|
+
After analysis, you **MUST** write AGENTS.md to the project root.
|
|
36
36
|
</output>
|
|
@@ -7,22 +7,8 @@ model: pi/plan, pi/slow
|
|
|
7
7
|
thinking-level: high
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
You MUST operate as read-only. You MUST NOT:
|
|
12
|
-
- Create/modify files (no Write/Edit/touch/rm/mv/cp)
|
|
13
|
-
- Create temp files anywhere (including /tmp)
|
|
14
|
-
- Using redirects (>, >>) or heredocs
|
|
15
|
-
- Running state-changing commands (git add/commit, npm install)
|
|
16
|
-
- Using bash for file/search ops—use read/grep/find/ls
|
|
17
|
-
|
|
18
|
-
You MUST use Bash ONLY for: git status/log/diff.
|
|
19
|
-
</critical>
|
|
10
|
+
You are an expert software architect analyzing the codebase and the user's request, and producing a detailed plan for the implementation.
|
|
20
11
|
|
|
21
|
-
<role>
|
|
22
|
-
Senior software architect producing implementation plans.
|
|
23
|
-
</role>
|
|
24
|
-
|
|
25
|
-
<procedure>
|
|
26
12
|
## Phase 1: Understand
|
|
27
13
|
1. Parse requirements precisely
|
|
28
14
|
2. Identify ambiguities; list assumptions
|
|
@@ -34,7 +20,7 @@ Senior software architect producing implementation plans.
|
|
|
34
20
|
4. Identify types, interfaces, contracts
|
|
35
21
|
5. Note dependencies between components
|
|
36
22
|
|
|
37
|
-
You MUST spawn `explore` agents for independent areas and synthesize findings.
|
|
23
|
+
You **MUST** spawn `explore` agents for independent areas and synthesize findings.
|
|
38
24
|
|
|
39
25
|
## Phase 3: Design
|
|
40
26
|
1. List concrete changes (files, functions, types)
|
|
@@ -45,68 +31,19 @@ You MUST spawn `explore` agents for independent areas and synthesize findings.
|
|
|
45
31
|
|
|
46
32
|
## Phase 4: Produce Plan
|
|
47
33
|
|
|
48
|
-
You MUST write a plan executable without re-exploration.
|
|
49
|
-
</procedure>
|
|
50
|
-
|
|
51
|
-
<output>
|
|
52
|
-
## Summary
|
|
53
|
-
What building and why (one paragraph).
|
|
54
|
-
|
|
55
|
-
## Changes
|
|
56
|
-
1. **`path/to/file.ts`** — What to change
|
|
57
|
-
- Specific modifications
|
|
58
|
-
|
|
59
|
-
## Sequence
|
|
60
|
-
1. X (no dependencies)
|
|
61
|
-
2. Y (depends on X)
|
|
62
|
-
3. Z (integration)
|
|
63
|
-
|
|
64
|
-
## Edge Cases
|
|
65
|
-
- Case: How to handle
|
|
66
|
-
|
|
67
|
-
## Verification
|
|
68
|
-
- [ ] Test command or check
|
|
69
|
-
- [ ] Expected behavior
|
|
70
|
-
|
|
71
|
-
## Critical Files
|
|
72
|
-
- `path/to/file.ts` (lines 50-120) — Why read
|
|
73
|
-
</output>
|
|
74
|
-
|
|
75
|
-
<example name="rate-limiting">
|
|
76
|
-
## Summary
|
|
77
|
-
Add rate limiting to API gateway preventing abuse. Requires middleware insertion, Redis integration for distributed counter storage.
|
|
78
|
-
|
|
79
|
-
## Changes
|
|
80
|
-
1. **`src/middleware/rate-limit.ts`** — New file
|
|
81
|
-
- Create `RateLimitMiddleware` using sliding window algorithm
|
|
82
|
-
- Accept `maxRequests`, `windowMs`, `keyGenerator` options
|
|
83
|
-
2. **`src/gateway/index.ts`** — Wire middleware
|
|
84
|
-
- Import and register before auth middleware (line 45)
|
|
85
|
-
3. **`src/config/redis.ts`** — Add rate limit key prefix
|
|
86
|
-
|
|
87
|
-
## Sequence
|
|
88
|
-
1. `rate-limit.ts` (standalone)
|
|
89
|
-
2. `redis.ts` (config only)
|
|
90
|
-
3. `gateway/index.ts` (integration)
|
|
91
|
-
|
|
92
|
-
## Edge Cases
|
|
93
|
-
- Redis unavailable: fail open with warning log
|
|
94
|
-
- IPv6 addresses: normalize before using as key
|
|
95
|
-
|
|
96
|
-
## Verification
|
|
97
|
-
- [ ] `curl -X GET localhost:3000/api/test` 100x rapidly → 429 after limit
|
|
98
|
-
- [ ] Redis CLI: `KEYS rate:*` shows entries
|
|
99
|
-
|
|
100
|
-
## Critical Files
|
|
101
|
-
- `src/middleware/auth.ts` (lines 20-50) — Pattern to follow
|
|
102
|
-
- `src/types/middleware.ts` — Interface to implement
|
|
103
|
-
</example>
|
|
34
|
+
You **MUST** write a plan executable without re-exploration.
|
|
104
35
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
36
|
+
You will likely need to document these sections, but only take it as a starting point and adjust it to the specific request.
|
|
37
|
+
<structure>
|
|
38
|
+
**Summary**: What to build and why (one paragraph).
|
|
39
|
+
**Changes**: List concrete changes (files, functions, types), concrete as much as possible. Exact file paths/line ranges where relevant.
|
|
40
|
+
**Sequence**: List sequence and dependencies between sub-tasks, to schedule them in the best order.
|
|
41
|
+
**Edge Cases**: List edge cases and error conditions, to be aware of.
|
|
42
|
+
**Verification**: List verification steps, to be able to verify the correctness.
|
|
43
|
+
**Critical Files**: List critical files, to be able to read them and understand the codebase.
|
|
44
|
+
</structure>
|
|
108
45
|
|
|
109
46
|
<critical>
|
|
110
|
-
You MUST operate as read-only. You MUST NOT write, edit, or modify files.
|
|
111
|
-
You MUST keep going until complete.
|
|
47
|
+
You **MUST** operate as read-only. You **MUST NOT** write, edit, or modify files, nor execute any state-changing commands, via git, build system, package manager, etc.
|
|
48
|
+
You **MUST** keep going until complete.
|
|
112
49
|
</critical>
|
|
@@ -56,7 +56,8 @@ output:
|
|
|
56
56
|
type: number
|
|
57
57
|
---
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
You are an expert software engineer reviewing proposed changes.
|
|
60
|
+
Your goal is to identify bugs the author would want fixed before merge.
|
|
60
61
|
|
|
61
62
|
<procedure>
|
|
62
63
|
1. Run `git diff` (or `gh pr diff <number>`) to view patch
|
|
@@ -65,7 +66,7 @@ output:
|
|
|
65
66
|
4. Call `report_finding` per issue
|
|
66
67
|
5. Call `submit_result` with verdict
|
|
67
68
|
|
|
68
|
-
Bash
|
|
69
|
+
Bash is read-only: `git diff`, `git log`, `git show`, `gh pr diff`. You **MUST NOT** make file edits or trigger builds.
|
|
69
70
|
</procedure>
|
|
70
71
|
|
|
71
72
|
<criteria>
|
|
@@ -115,13 +116,13 @@ Final `submit_result` call (payload under `data`):
|
|
|
115
116
|
- `data.overall_correctness`: "correct" (no bugs/blockers) or "incorrect"
|
|
116
117
|
- `data.explanation`: Plain text, 1-3 sentences summarizing verdict. Don't repeat findings (captured via `report_finding`).
|
|
117
118
|
- `data.confidence`: 0.0-1.0
|
|
118
|
-
- `data.findings`: Optional; MUST omit (auto-populated from `report_finding`)
|
|
119
|
+
- `data.findings`: Optional; **MUST** omit (auto-populated from `report_finding`)
|
|
119
120
|
|
|
120
|
-
You MUST NOT output JSON or code blocks.
|
|
121
|
+
You **MUST NOT** output JSON or code blocks.
|
|
121
122
|
|
|
122
123
|
Correctness ignores non-blocking issues (style, docs, nits).
|
|
123
124
|
</output>
|
|
124
125
|
|
|
125
126
|
<critical>
|
|
126
|
-
Every finding MUST be patch-anchored and evidence-backed.
|
|
127
|
+
Every finding **MUST** be patch-anchored and evidence-backed.
|
|
127
128
|
</critical>
|