@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.
Files changed (152) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/{CHANGELOG-d9xenpn9.md → CHANGELOG-k9ghy5sn.md} +13 -0
  3. package/dist/cli.js +10795 -10791
  4. package/dist/types/advisor/runtime.d.ts +1 -1
  5. package/dist/types/config/custom-models.d.ts +31 -0
  6. package/dist/types/config/model-config-values.d.ts +19 -0
  7. package/dist/types/config/model-patch.d.ts +93 -0
  8. package/dist/types/config/model-provider-discovery.d.ts +51 -0
  9. package/dist/types/config/model-registry.d.ts +5 -52
  10. package/dist/types/config/settings.d.ts +5 -3
  11. package/dist/types/debug/raw-sse-buffer.d.ts +9 -0
  12. package/dist/types/discovery/agent-plugin-format.d.ts +6 -13
  13. package/dist/types/discovery/contained-path.d.ts +2 -3
  14. package/dist/types/eval/executor-base.d.ts +8 -2
  15. package/dist/types/eval/kernel-session-registry.d.ts +60 -0
  16. package/dist/types/export/share.d.ts +1 -1
  17. package/dist/types/lsp/diagnostics.d.ts +96 -0
  18. package/dist/types/lsp/index.d.ts +7 -128
  19. package/dist/types/lsp/servers.d.ts +72 -0
  20. package/dist/types/lsp/tool.d.ts +42 -0
  21. package/dist/types/lsp/workspace-diagnostics.d.ts +12 -0
  22. package/dist/types/lsp/writethrough.d.ts +33 -0
  23. package/dist/types/mcp/transports/header-policy.d.ts +2 -1
  24. package/dist/types/modes/components/agent-hub-projection.d.ts +2 -7
  25. package/dist/types/modes/components/agent-hub-renderer.d.ts +0 -7
  26. package/dist/types/modes/theme/color.d.ts +19 -0
  27. package/dist/types/modes/theme/loader.d.ts +19 -0
  28. package/dist/types/modes/theme/schema.d.ts +175 -0
  29. package/dist/types/modes/theme/symbols.d.ts +28 -0
  30. package/dist/types/modes/theme/theme-class.d.ts +244 -0
  31. package/dist/types/modes/theme/theme.d.ts +9 -280
  32. package/dist/types/modes/theme/tui-adapters.d.ts +13 -0
  33. package/dist/types/registry/agent-registry.d.ts +1 -3
  34. package/dist/types/secrets/index.d.ts +3 -1
  35. package/dist/types/secrets/message-transform.d.ts +40 -0
  36. package/dist/types/secrets/obfuscator.d.ts +0 -108
  37. package/dist/types/secrets/placeholder-scan.d.ts +95 -0
  38. package/dist/types/secrets/placeholder.d.ts +94 -0
  39. package/dist/types/secrets/replacement.d.ts +82 -0
  40. package/dist/types/session/agent-session-types.d.ts +6 -0
  41. package/dist/types/session/agent-session.d.ts +1 -1
  42. package/dist/types/session/session-handoff.d.ts +3 -3
  43. package/dist/types/session/session-manager.d.ts +32 -0
  44. package/dist/types/session/session-provider-boundary.d.ts +1 -1
  45. package/dist/types/session/turn-recovery.d.ts +2 -2
  46. package/dist/types/slash-commands/builtin-collaboration.d.ts +2 -0
  47. package/dist/types/slash-commands/builtin-completions.d.ts +36 -0
  48. package/dist/types/slash-commands/builtin-control.d.ts +2 -0
  49. package/dist/types/slash-commands/builtin-lifecycle.d.ts +3 -0
  50. package/dist/types/slash-commands/builtin-marketplace.d.ts +11 -0
  51. package/dist/types/slash-commands/builtin-modes.d.ts +5 -0
  52. package/dist/types/slash-commands/builtin-registry.d.ts +1 -1
  53. package/dist/types/slash-commands/builtin-session.d.ts +2 -0
  54. package/dist/types/tools/gh-common.d.ts +69 -0
  55. package/dist/types/tools/gh-pr-checkout.d.ts +84 -0
  56. package/dist/types/tools/gh-pr-diff.d.ts +102 -0
  57. package/dist/types/tools/gh-run-watch.d.ts +78 -0
  58. package/dist/types/tools/gh-search.d.ts +61 -0
  59. package/dist/types/tools/gh-types.d.ts +340 -0
  60. package/dist/types/tools/gh-view.d.ts +88 -0
  61. package/dist/types/tools/gh.d.ts +4 -201
  62. package/dist/types/tools/read-archive.d.ts +16 -0
  63. package/dist/types/tools/read-format.d.ts +104 -0
  64. package/dist/types/tools/read-path-resolution.d.ts +19 -0
  65. package/dist/types/tools/read-pdf-images.d.ts +12 -0
  66. package/dist/types/tools/read-renderer.d.ts +24 -0
  67. package/dist/types/tools/read-selector.d.ts +27 -0
  68. package/dist/types/tools/read-sqlite.d.ts +16 -0
  69. package/dist/types/tools/read-summary.d.ts +19 -0
  70. package/dist/types/tools/read.d.ts +1 -23
  71. package/dist/types/tools/shell-tokenize.d.ts +2 -1
  72. package/dist/types/utils/changelog.d.ts +0 -5
  73. package/package.json +13 -13
  74. package/src/advisor/runtime.ts +12 -7
  75. package/src/config/custom-models.ts +188 -0
  76. package/src/config/model-config-values.ts +128 -0
  77. package/src/config/model-patch.ts +252 -0
  78. package/src/config/model-provider-discovery.ts +132 -0
  79. package/src/config/model-registry.ts +64 -704
  80. package/src/config/settings.ts +7 -3
  81. package/src/debug/raw-sse-buffer.ts +20 -0
  82. package/src/discovery/agent-plugin-format.ts +7 -7
  83. package/src/discovery/contained-path.ts +2 -5
  84. package/src/edit/hashline/diff.ts +5 -1
  85. package/src/eval/executor-base.ts +39 -6
  86. package/src/eval/jl/executor.ts +82 -371
  87. package/src/eval/kernel-session-registry.ts +398 -0
  88. package/src/eval/py/executor.ts +53 -261
  89. package/src/eval/rb/executor.ts +36 -279
  90. package/src/export/share.ts +2 -1
  91. package/src/lsp/diagnostics.ts +516 -0
  92. package/src/lsp/index.ts +20 -2819
  93. package/src/lsp/servers.ts +296 -0
  94. package/src/lsp/tool.ts +1352 -0
  95. package/src/lsp/workspace-diagnostics.ts +170 -0
  96. package/src/lsp/writethrough.ts +561 -0
  97. package/src/mcp/transports/header-policy.ts +1 -1
  98. package/src/modes/components/agent-hub-projection.ts +2 -2
  99. package/src/modes/components/agent-hub-renderer.ts +3 -7
  100. package/src/modes/controllers/command-controller.ts +4 -1
  101. package/src/modes/theme/color.ts +133 -0
  102. package/src/modes/theme/loader.ts +178 -0
  103. package/src/modes/theme/schema.ts +263 -0
  104. package/src/modes/theme/symbols.ts +1000 -0
  105. package/src/modes/theme/theme-class.ts +611 -0
  106. package/src/modes/theme/theme.ts +27 -2453
  107. package/src/modes/theme/tui-adapters.ts +279 -0
  108. package/src/registry/agent-registry.ts +2 -2
  109. package/src/secrets/index.ts +6 -12
  110. package/src/secrets/message-transform.ts +287 -0
  111. package/src/secrets/obfuscator.ts +39 -1303
  112. package/src/secrets/placeholder-scan.ts +506 -0
  113. package/src/secrets/placeholder.ts +309 -0
  114. package/src/secrets/replacement.ts +216 -0
  115. package/src/session/agent-session-types.ts +6 -0
  116. package/src/session/agent-session.ts +113 -7
  117. package/src/session/indexed-session-storage.ts +7 -2
  118. package/src/session/session-advisors.ts +32 -34
  119. package/src/session/session-handoff.ts +39 -20
  120. package/src/session/session-manager.ts +67 -3
  121. package/src/session/session-provider-boundary.ts +3 -6
  122. package/src/session/turn-recovery.ts +21 -12
  123. package/src/slash-commands/builtin-collaboration.ts +504 -0
  124. package/src/slash-commands/builtin-completions.ts +291 -0
  125. package/src/slash-commands/builtin-control.ts +78 -0
  126. package/src/slash-commands/builtin-lifecycle.ts +506 -0
  127. package/src/slash-commands/builtin-marketplace.ts +567 -0
  128. package/src/slash-commands/builtin-modes.ts +518 -0
  129. package/src/slash-commands/builtin-registry.ts +21 -3000
  130. package/src/slash-commands/builtin-session.ts +592 -0
  131. package/src/task/executor.ts +17 -14
  132. package/src/tools/gh-common.ts +288 -0
  133. package/src/tools/gh-pr-checkout.ts +679 -0
  134. package/src/tools/gh-pr-diff.ts +473 -0
  135. package/src/tools/gh-run-watch.ts +1015 -0
  136. package/src/tools/gh-search.ts +500 -0
  137. package/src/tools/gh-types.ts +379 -0
  138. package/src/tools/gh-view.ts +612 -0
  139. package/src/tools/gh.ts +109 -3821
  140. package/src/tools/read-archive.ts +209 -0
  141. package/src/tools/read-format.ts +593 -0
  142. package/src/tools/read-path-resolution.ts +36 -0
  143. package/src/tools/read-pdf-images.ts +250 -0
  144. package/src/tools/read-renderer.ts +289 -0
  145. package/src/tools/read-selector.ts +84 -0
  146. package/src/tools/read-sqlite.ts +215 -0
  147. package/src/tools/read-summary.ts +199 -0
  148. package/src/tools/read.ts +77 -1820
  149. package/src/tools/shell-tokenize.ts +1 -1
  150. package/src/utils/changelog.ts +1 -1
  151. package/src/utils/title-generator.ts +3 -1
  152. 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
+ }