@oh-my-pi/pi-coding-agent 17.2.11 → 17.2.12
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 +13 -0
- package/dist/{CHANGELOG-d9xenpn9.md → CHANGELOG-k9ghy5sn.md} +13 -0
- package/dist/cli.js +10795 -10791
- package/dist/types/advisor/runtime.d.ts +1 -1
- package/dist/types/config/custom-models.d.ts +31 -0
- package/dist/types/config/model-config-values.d.ts +19 -0
- package/dist/types/config/model-patch.d.ts +93 -0
- package/dist/types/config/model-provider-discovery.d.ts +51 -0
- package/dist/types/config/model-registry.d.ts +5 -52
- package/dist/types/config/settings.d.ts +5 -3
- package/dist/types/debug/raw-sse-buffer.d.ts +9 -0
- package/dist/types/discovery/agent-plugin-format.d.ts +6 -13
- package/dist/types/discovery/contained-path.d.ts +2 -3
- package/dist/types/eval/executor-base.d.ts +8 -2
- package/dist/types/eval/kernel-session-registry.d.ts +60 -0
- package/dist/types/export/share.d.ts +1 -1
- package/dist/types/lsp/diagnostics.d.ts +96 -0
- package/dist/types/lsp/index.d.ts +7 -128
- package/dist/types/lsp/servers.d.ts +72 -0
- package/dist/types/lsp/tool.d.ts +42 -0
- package/dist/types/lsp/workspace-diagnostics.d.ts +12 -0
- package/dist/types/lsp/writethrough.d.ts +33 -0
- package/dist/types/mcp/transports/header-policy.d.ts +2 -1
- package/dist/types/modes/components/agent-hub-projection.d.ts +2 -7
- package/dist/types/modes/components/agent-hub-renderer.d.ts +0 -7
- package/dist/types/modes/theme/color.d.ts +19 -0
- package/dist/types/modes/theme/loader.d.ts +19 -0
- package/dist/types/modes/theme/schema.d.ts +175 -0
- package/dist/types/modes/theme/symbols.d.ts +28 -0
- package/dist/types/modes/theme/theme-class.d.ts +244 -0
- package/dist/types/modes/theme/theme.d.ts +9 -280
- package/dist/types/modes/theme/tui-adapters.d.ts +13 -0
- package/dist/types/registry/agent-registry.d.ts +1 -3
- package/dist/types/secrets/index.d.ts +3 -1
- package/dist/types/secrets/message-transform.d.ts +40 -0
- package/dist/types/secrets/obfuscator.d.ts +0 -108
- package/dist/types/secrets/placeholder-scan.d.ts +95 -0
- package/dist/types/secrets/placeholder.d.ts +94 -0
- package/dist/types/secrets/replacement.d.ts +82 -0
- package/dist/types/session/agent-session-types.d.ts +6 -0
- package/dist/types/session/agent-session.d.ts +1 -1
- package/dist/types/session/session-handoff.d.ts +3 -3
- package/dist/types/session/session-manager.d.ts +32 -0
- package/dist/types/session/session-provider-boundary.d.ts +1 -1
- package/dist/types/session/turn-recovery.d.ts +2 -2
- package/dist/types/slash-commands/builtin-collaboration.d.ts +2 -0
- package/dist/types/slash-commands/builtin-completions.d.ts +36 -0
- package/dist/types/slash-commands/builtin-control.d.ts +2 -0
- package/dist/types/slash-commands/builtin-lifecycle.d.ts +3 -0
- package/dist/types/slash-commands/builtin-marketplace.d.ts +11 -0
- package/dist/types/slash-commands/builtin-modes.d.ts +5 -0
- package/dist/types/slash-commands/builtin-registry.d.ts +1 -1
- package/dist/types/slash-commands/builtin-session.d.ts +2 -0
- package/dist/types/tools/gh-common.d.ts +69 -0
- package/dist/types/tools/gh-pr-checkout.d.ts +84 -0
- package/dist/types/tools/gh-pr-diff.d.ts +102 -0
- package/dist/types/tools/gh-run-watch.d.ts +78 -0
- package/dist/types/tools/gh-search.d.ts +61 -0
- package/dist/types/tools/gh-types.d.ts +340 -0
- package/dist/types/tools/gh-view.d.ts +88 -0
- package/dist/types/tools/gh.d.ts +4 -201
- package/dist/types/tools/read-archive.d.ts +16 -0
- package/dist/types/tools/read-format.d.ts +104 -0
- package/dist/types/tools/read-path-resolution.d.ts +19 -0
- package/dist/types/tools/read-pdf-images.d.ts +12 -0
- package/dist/types/tools/read-renderer.d.ts +24 -0
- package/dist/types/tools/read-selector.d.ts +27 -0
- package/dist/types/tools/read-sqlite.d.ts +16 -0
- package/dist/types/tools/read-summary.d.ts +19 -0
- package/dist/types/tools/read.d.ts +1 -23
- package/dist/types/tools/shell-tokenize.d.ts +2 -1
- package/dist/types/utils/changelog.d.ts +0 -5
- package/package.json +13 -13
- package/src/advisor/runtime.ts +12 -7
- package/src/config/custom-models.ts +188 -0
- package/src/config/model-config-values.ts +128 -0
- package/src/config/model-patch.ts +252 -0
- package/src/config/model-provider-discovery.ts +132 -0
- package/src/config/model-registry.ts +64 -704
- package/src/config/settings.ts +7 -3
- package/src/debug/raw-sse-buffer.ts +20 -0
- package/src/discovery/agent-plugin-format.ts +7 -7
- package/src/discovery/contained-path.ts +2 -5
- package/src/edit/hashline/diff.ts +5 -1
- package/src/eval/executor-base.ts +39 -6
- package/src/eval/jl/executor.ts +82 -371
- package/src/eval/kernel-session-registry.ts +398 -0
- package/src/eval/py/executor.ts +53 -261
- package/src/eval/rb/executor.ts +36 -279
- package/src/export/share.ts +2 -1
- package/src/lsp/diagnostics.ts +516 -0
- package/src/lsp/index.ts +20 -2819
- package/src/lsp/servers.ts +296 -0
- package/src/lsp/tool.ts +1352 -0
- package/src/lsp/workspace-diagnostics.ts +170 -0
- package/src/lsp/writethrough.ts +561 -0
- package/src/mcp/transports/header-policy.ts +1 -1
- package/src/modes/components/agent-hub-projection.ts +2 -2
- package/src/modes/components/agent-hub-renderer.ts +3 -7
- package/src/modes/controllers/command-controller.ts +4 -1
- package/src/modes/theme/color.ts +133 -0
- package/src/modes/theme/loader.ts +178 -0
- package/src/modes/theme/schema.ts +263 -0
- package/src/modes/theme/symbols.ts +1000 -0
- package/src/modes/theme/theme-class.ts +611 -0
- package/src/modes/theme/theme.ts +27 -2453
- package/src/modes/theme/tui-adapters.ts +279 -0
- package/src/registry/agent-registry.ts +2 -2
- package/src/secrets/index.ts +6 -12
- package/src/secrets/message-transform.ts +287 -0
- package/src/secrets/obfuscator.ts +39 -1303
- package/src/secrets/placeholder-scan.ts +506 -0
- package/src/secrets/placeholder.ts +309 -0
- package/src/secrets/replacement.ts +216 -0
- package/src/session/agent-session-types.ts +6 -0
- package/src/session/agent-session.ts +113 -7
- package/src/session/indexed-session-storage.ts +7 -2
- package/src/session/session-advisors.ts +32 -34
- package/src/session/session-handoff.ts +39 -20
- package/src/session/session-manager.ts +67 -3
- package/src/session/session-provider-boundary.ts +3 -6
- package/src/session/turn-recovery.ts +21 -12
- package/src/slash-commands/builtin-collaboration.ts +504 -0
- package/src/slash-commands/builtin-completions.ts +291 -0
- package/src/slash-commands/builtin-control.ts +78 -0
- package/src/slash-commands/builtin-lifecycle.ts +506 -0
- package/src/slash-commands/builtin-marketplace.ts +567 -0
- package/src/slash-commands/builtin-modes.ts +518 -0
- package/src/slash-commands/builtin-registry.ts +21 -3000
- package/src/slash-commands/builtin-session.ts +592 -0
- package/src/task/executor.ts +17 -14
- package/src/tools/gh-common.ts +288 -0
- package/src/tools/gh-pr-checkout.ts +679 -0
- package/src/tools/gh-pr-diff.ts +473 -0
- package/src/tools/gh-run-watch.ts +1015 -0
- package/src/tools/gh-search.ts +500 -0
- package/src/tools/gh-types.ts +379 -0
- package/src/tools/gh-view.ts +612 -0
- package/src/tools/gh.ts +109 -3821
- package/src/tools/read-archive.ts +209 -0
- package/src/tools/read-format.ts +593 -0
- package/src/tools/read-path-resolution.ts +36 -0
- package/src/tools/read-pdf-images.ts +250 -0
- package/src/tools/read-renderer.ts +289 -0
- package/src/tools/read-selector.ts +84 -0
- package/src/tools/read-sqlite.ts +215 -0
- package/src/tools/read-summary.ts +199 -0
- package/src/tools/read.ts +77 -1820
- package/src/tools/shell-tokenize.ts +1 -1
- package/src/utils/changelog.ts +1 -1
- package/src/utils/title-generator.ts +3 -1
- package/src/web/search/providers/zai.ts +12 -3
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { ToolAbortError, throwIfAborted } from "../tools/tool-errors";
|
|
4
|
+
|
|
5
|
+
/** Project type detection result */
|
|
6
|
+
interface ProjectType {
|
|
7
|
+
type: "rust" | "typescript" | "go" | "python" | "unknown";
|
|
8
|
+
command?: string[];
|
|
9
|
+
description: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Convert a `go.work` use directory into the package pattern `go build` needs. */
|
|
13
|
+
function goWorkspaceBuildPattern(diskPath: string): string | null {
|
|
14
|
+
const trimmed = diskPath.trim();
|
|
15
|
+
if (!trimmed) return null;
|
|
16
|
+
|
|
17
|
+
const isAbsolute = path.isAbsolute(trimmed) || path.win32.isAbsolute(trimmed);
|
|
18
|
+
const normalized = trimmed.replaceAll("\\", "/").replace(/\/+$/, "");
|
|
19
|
+
const dir = normalized || ".";
|
|
20
|
+
if (dir === ".") return "./...";
|
|
21
|
+
if (dir.endsWith("/...")) return dir;
|
|
22
|
+
if (isAbsolute || dir.startsWith("./") || dir.startsWith("../")) return `${dir}/...`;
|
|
23
|
+
return `./${dir}/...`;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Parse `go work edit -json` output into per-module package patterns. */
|
|
27
|
+
function parseGoWorkspaceBuildPatterns(output: string): string[] {
|
|
28
|
+
let parsed: unknown;
|
|
29
|
+
try {
|
|
30
|
+
parsed = JSON.parse(output);
|
|
31
|
+
} catch {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (!parsed || typeof parsed !== "object" || !("Use" in parsed) || !Array.isArray(parsed.Use)) return [];
|
|
36
|
+
|
|
37
|
+
const patterns = new Set<string>();
|
|
38
|
+
for (const entry of parsed.Use) {
|
|
39
|
+
if (!entry || typeof entry !== "object" || !("DiskPath" in entry) || typeof entry.DiskPath !== "string") {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const pattern = goWorkspaceBuildPattern(entry.DiskPath);
|
|
43
|
+
if (pattern) patterns.add(pattern);
|
|
44
|
+
}
|
|
45
|
+
return [...patterns];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Resolve the `go build` command for a `go.work` workspace. */
|
|
49
|
+
async function resolveGoWorkspaceDiagnosticsCommand(cwd: string, signal?: AbortSignal): Promise<string[]> {
|
|
50
|
+
const fallback = ["go", "build", "./..."];
|
|
51
|
+
try {
|
|
52
|
+
const proc = Bun.spawn(["go", "work", "edit", "-json"], {
|
|
53
|
+
cwd,
|
|
54
|
+
stdout: "pipe",
|
|
55
|
+
stderr: "pipe",
|
|
56
|
+
windowsHide: true,
|
|
57
|
+
});
|
|
58
|
+
const abortHandler = () => {
|
|
59
|
+
proc.kill();
|
|
60
|
+
};
|
|
61
|
+
if (signal) {
|
|
62
|
+
signal.addEventListener("abort", abortHandler, { once: true });
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
try {
|
|
66
|
+
const [stdout] = await Promise.all([new Response(proc.stdout).text(), new Response(proc.stderr).text()]);
|
|
67
|
+
const exitCode = await proc.exited;
|
|
68
|
+
throwIfAborted(signal);
|
|
69
|
+
if (exitCode !== 0) return fallback;
|
|
70
|
+
const patterns = parseGoWorkspaceBuildPatterns(stdout);
|
|
71
|
+
return patterns.length > 0 ? ["go", "build", ...patterns] : fallback;
|
|
72
|
+
} finally {
|
|
73
|
+
signal?.removeEventListener("abort", abortHandler);
|
|
74
|
+
}
|
|
75
|
+
} catch {
|
|
76
|
+
if (signal?.aborted) {
|
|
77
|
+
throw new ToolAbortError();
|
|
78
|
+
}
|
|
79
|
+
return fallback;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** Detect project type from root markers */
|
|
84
|
+
async function detectProjectType(cwd: string, signal?: AbortSignal): Promise<ProjectType> {
|
|
85
|
+
// Check for Rust (Cargo.toml)
|
|
86
|
+
if (fs.existsSync(path.join(cwd, "Cargo.toml"))) {
|
|
87
|
+
return { type: "rust", command: ["cargo", "check", "--message-format=short"], description: "Rust (cargo check)" };
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Check for TypeScript (tsconfig.json)
|
|
91
|
+
if (fs.existsSync(path.join(cwd, "tsconfig.json"))) {
|
|
92
|
+
return { type: "typescript", command: ["npx", "tsc", "--noEmit"], description: "TypeScript (tsc --noEmit)" };
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Check for Go workspaces before single-module Go projects.
|
|
96
|
+
if (fs.existsSync(path.join(cwd, "go.work"))) {
|
|
97
|
+
return {
|
|
98
|
+
type: "go",
|
|
99
|
+
command: await resolveGoWorkspaceDiagnosticsCommand(cwd, signal),
|
|
100
|
+
description: "Go workspace (go build)",
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Check for Go (go.mod)
|
|
105
|
+
if (fs.existsSync(path.join(cwd, "go.mod"))) {
|
|
106
|
+
return { type: "go", command: ["go", "build", "./..."], description: "Go (go build)" };
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Check for Python (pyproject.toml or pyrightconfig.json)
|
|
110
|
+
if (fs.existsSync(path.join(cwd, "pyproject.toml")) || fs.existsSync(path.join(cwd, "pyrightconfig.json"))) {
|
|
111
|
+
return { type: "python", command: ["pyright"], description: "Python (pyright)" };
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return { type: "unknown", description: "Unknown project type" };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Run workspace diagnostics command and parse output */
|
|
118
|
+
export async function runWorkspaceDiagnostics(
|
|
119
|
+
cwd: string,
|
|
120
|
+
signal?: AbortSignal,
|
|
121
|
+
): Promise<{ output: string; projectType: ProjectType }> {
|
|
122
|
+
throwIfAborted(signal);
|
|
123
|
+
const projectType = await detectProjectType(cwd, signal);
|
|
124
|
+
if (!projectType.command) {
|
|
125
|
+
return {
|
|
126
|
+
output: `Cannot detect project type. Supported: Rust (Cargo.toml), TypeScript (tsconfig.json), Go (go.work/go.mod), Python (pyproject.toml)`,
|
|
127
|
+
projectType,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
const proc = Bun.spawn(projectType.command, {
|
|
132
|
+
cwd,
|
|
133
|
+
stdout: "pipe",
|
|
134
|
+
stderr: "pipe",
|
|
135
|
+
windowsHide: true,
|
|
136
|
+
});
|
|
137
|
+
const abortHandler = () => {
|
|
138
|
+
proc.kill();
|
|
139
|
+
};
|
|
140
|
+
if (signal) {
|
|
141
|
+
signal.addEventListener("abort", abortHandler, { once: true });
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
try {
|
|
145
|
+
const [stdout, stderr] = await Promise.all([
|
|
146
|
+
new Response(proc.stdout).text(),
|
|
147
|
+
new Response(proc.stderr).text(),
|
|
148
|
+
]);
|
|
149
|
+
await proc.exited;
|
|
150
|
+
throwIfAborted(signal);
|
|
151
|
+
const combined = (stdout + stderr).trim();
|
|
152
|
+
if (!combined) {
|
|
153
|
+
return { output: "No issues found", projectType };
|
|
154
|
+
}
|
|
155
|
+
// Limit output length
|
|
156
|
+
const lines = combined.split("\n");
|
|
157
|
+
if (lines.length > 50) {
|
|
158
|
+
return { output: `${lines.slice(0, 50).join("\n")}\n[…${lines.length - 50}ln elided…]`, projectType };
|
|
159
|
+
}
|
|
160
|
+
return { output: combined, projectType };
|
|
161
|
+
} finally {
|
|
162
|
+
signal?.removeEventListener("abort", abortHandler);
|
|
163
|
+
}
|
|
164
|
+
} catch (e) {
|
|
165
|
+
if (signal?.aborted) {
|
|
166
|
+
throw new ToolAbortError();
|
|
167
|
+
}
|
|
168
|
+
return { output: `Failed to run ${projectType.command.join(" ")}: ${e}`, projectType };
|
|
169
|
+
}
|
|
170
|
+
}
|