@oh-my-pi/pi-coding-agent 15.10.6 → 15.10.7
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 +7 -0
- package/package.json +9 -9
- package/src/mcp/manager.ts +17 -16
- package/src/prompts/tools/read.md +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [15.10.7] - 2026-06-08
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Fixed MCP OAuth fallback rendering to show a short terminal hyperlink and keep the raw authorization URL on one unwrapped copy line ([#2121](https://github.com/can1357/oh-my-pi/issues/2121)).
|
|
10
|
+
- Fixed `omp` startup blocking 25–30 s on a single unresponsive MCP server when no cached tools were available for it. `MCPManager.connectServers` used to fall through to an unbounded `Promise.allSettled` over every still-pending server without a cached tool list, so one server stuck waiting on the per-request MCP timeout (`OMP_MCP_TIMEOUT_MS`, default 30 000 ms) gated the entire UI ready signal. Pending-without-cache servers are now left in flight: their tools surface via the existing background `#onToolsChanged` → `refreshMCPTools` path the moment the connect completes, and failures continue to log through the background catch handler ([#2100](https://github.com/can1357/oh-my-pi/issues/2100)).
|
|
11
|
+
|
|
5
12
|
## [15.10.6] - 2026-06-08
|
|
6
13
|
|
|
7
14
|
### Added
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@oh-my-pi/pi-coding-agent",
|
|
4
|
-
"version": "15.10.
|
|
4
|
+
"version": "15.10.7",
|
|
5
5
|
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
|
|
6
6
|
"homepage": "https://omp.sh",
|
|
7
7
|
"author": "Can Boluk",
|
|
@@ -47,14 +47,14 @@
|
|
|
47
47
|
"@agentclientprotocol/sdk": "0.22.1",
|
|
48
48
|
"@babel/parser": "^7.29.7",
|
|
49
49
|
"@mozilla/readability": "^0.6.0",
|
|
50
|
-
"@oh-my-pi/hashline": "15.10.
|
|
51
|
-
"@oh-my-pi/omp-stats": "15.10.
|
|
52
|
-
"@oh-my-pi/pi-agent-core": "15.10.
|
|
53
|
-
"@oh-my-pi/pi-ai": "15.10.
|
|
54
|
-
"@oh-my-pi/pi-mnemopi": "15.10.
|
|
55
|
-
"@oh-my-pi/pi-natives": "15.10.
|
|
56
|
-
"@oh-my-pi/pi-tui": "15.10.
|
|
57
|
-
"@oh-my-pi/pi-utils": "15.10.
|
|
50
|
+
"@oh-my-pi/hashline": "15.10.7",
|
|
51
|
+
"@oh-my-pi/omp-stats": "15.10.7",
|
|
52
|
+
"@oh-my-pi/pi-agent-core": "15.10.7",
|
|
53
|
+
"@oh-my-pi/pi-ai": "15.10.7",
|
|
54
|
+
"@oh-my-pi/pi-mnemopi": "15.10.7",
|
|
55
|
+
"@oh-my-pi/pi-natives": "15.10.7",
|
|
56
|
+
"@oh-my-pi/pi-tui": "15.10.7",
|
|
57
|
+
"@oh-my-pi/pi-utils": "15.10.7",
|
|
58
58
|
"@opentelemetry/api": "^1.9.1",
|
|
59
59
|
"@opentelemetry/context-async-hooks": "^2.7.1",
|
|
60
60
|
"@opentelemetry/exporter-trace-otlp-proto": "^0.218.0",
|
package/src/mcp/manager.ts
CHANGED
|
@@ -472,24 +472,25 @@ export class MCPManager {
|
|
|
472
472
|
const cachedTools = new Map<string, MCPToolDefinition[]>();
|
|
473
473
|
const pendingTasks = connectionTasks.filter(task => task.tracked.status === "pending");
|
|
474
474
|
|
|
475
|
-
if (pendingTasks.length > 0) {
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
);
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
const pendingWithoutCache = pendingTasks.filter(task => !cachedTools.has(task.name));
|
|
488
|
-
if (pendingWithoutCache.length > 0) {
|
|
489
|
-
await Promise.allSettled(pendingWithoutCache.map(task => task.tracked.promise));
|
|
490
|
-
}
|
|
475
|
+
if (pendingTasks.length > 0 && this.toolCache) {
|
|
476
|
+
await Promise.all(
|
|
477
|
+
pendingTasks.map(async task => {
|
|
478
|
+
const cached = await this.toolCache?.get(task.name, task.config);
|
|
479
|
+
if (cached) {
|
|
480
|
+
cachedTools.set(task.name, cached);
|
|
481
|
+
}
|
|
482
|
+
}),
|
|
483
|
+
);
|
|
491
484
|
}
|
|
492
485
|
|
|
486
|
+
// Pending tasks without cached tools used to be awaited synchronously here,
|
|
487
|
+
// which gated the entire UI on the slowest server's per-request timeout
|
|
488
|
+
// (issue #2100: a single unresponsive MCP server blocked startup for the
|
|
489
|
+
// full 30 s `OMP_MCP_TIMEOUT_MS`). Leave them in flight — the background
|
|
490
|
+
// `void toolsPromise.then(...)` chain above registers their tools and
|
|
491
|
+
// fires `#onToolsChanged` once the connect finishes, or logs the failure
|
|
492
|
+
// after `allowBackgroundLogging` flips below.
|
|
493
|
+
|
|
493
494
|
for (const task of connectionTasks) {
|
|
494
495
|
const { name } = task;
|
|
495
496
|
if (task.tracked.status === "fulfilled") {
|
|
@@ -79,7 +79,6 @@ For `.sqlite`, `.sqlite3`, `.db`, `.db3`:
|
|
|
79
79
|
<critical>
|
|
80
80
|
- You MUST use `read` for every file, directory, archive, and URL inspection. `cat`, `head`, `tail`, `less`, `more`, `ls`, `tar`, `unzip`, `curl`, `wget` are FORBIDDEN — any such bash call is a bug, regardless of how short or convenient it looks.
|
|
81
81
|
- You MUST prefer `read` over a browser/puppeteer tool for URL content; only reach for a browser when `read` cannot deliver reasonable content.
|
|
82
|
-
- You MUST always include `path`. NEVER call `read` with `{}`.
|
|
83
82
|
- For line ranges, append the selector to `path` (`path="src/foo.ts:50-200"`, `path="src/foo.ts:50+150"`). NEVER substitute `sed -n`, `awk NR`, or `head`/`tail` pipelines.
|
|
84
83
|
- Summary footer says `read <path>:raw …`? Re-issue the exact selector it names. NEVER guess what's inside `..` / `…` markers — they carry no content.
|
|
85
84
|
- You MAY combine selectors with URL reads and internal URIs; both paginate the cached resolved output.
|