pi-harness-runtime 1.1.138 → 1.1.140
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/index.ts +48 -40
- package/package.json +1 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/architecture-generator/package.json +1 -1
- package/packages/auth/package.json +1 -1
- package/packages/autonomous-refactor/package.json +1 -1
- package/packages/autonomous-runtime/package.json +1 -1
- package/packages/cache-strategy/package.json +1 -1
- package/packages/capability-registry/package.json +1 -1
- package/packages/checkpoint/package.json +1 -1
- package/packages/cli-plugin-sdk/package.json +1 -1
- package/packages/clipboard/package.json +1 -1
- package/packages/clipboard-plugin/package.json +1 -1
- package/packages/code-generation/package.json +1 -1
- package/packages/code-review/package.json +1 -1
- package/packages/codex-adapter/package.json +1 -1
- package/packages/codex-watcher/package.json +1 -1
- package/packages/config-capture/package.json +1 -1
- package/packages/context-compiler/package.json +1 -1
- package/packages/context-discovery/package.json +1 -1
- package/packages/context-manager/package.json +1 -1
- package/packages/cookie-sanitizer/package.json +1 -1
- package/packages/cost-optimizer/package.json +1 -1
- package/packages/dependency-analyzer/package.json +1 -1
- package/packages/django-plugin/package.json +1 -1
- package/packages/doc-generator/package.json +1 -1
- package/packages/evaluation-engine/package.json +1 -1
- package/packages/evaluation-runner/package.json +1 -1
- package/packages/event-bus/package.json +1 -1
- package/packages/event-store/package.json +1 -1
- package/packages/experience-replay/package.json +1 -1
- package/packages/feedback-collector/package.json +1 -1
- package/packages/file-copy-helper/package.json +1 -1
- package/packages/framework-detector/package.json +1 -1
- package/packages/framework-plugin-sdk/package.json +1 -1
- package/packages/frappe-plugin/package.json +1 -1
- package/packages/generic-web-plugin/package.json +1 -1
- package/packages/health-monitor/package.json +1 -1
- package/packages/intent-analyzer/package.json +1 -1
- package/packages/jev-judge/package.json +1 -1
- package/packages/knowledge-graph/package.json +1 -1
- package/packages/knowledge-retrieval/package.json +1 -1
- package/packages/laravel-plugin/package.json +1 -1
- package/packages/learning-engine/package.json +1 -1
- package/packages/mcp-adapter/package.json +1 -1
- package/packages/memory-engine/package.json +1 -1
- package/packages/milestone-manager/package.json +1 -1
- package/packages/model-registry/package.json +1 -1
- package/packages/nextjs-plugin/package.json +1 -1
- package/packages/notification/package.json +1 -1
- package/packages/observability/package.json +1 -1
- package/packages/okf-indexer/package.json +1 -1
- package/packages/performance-optimizer/package.json +1 -1
- package/packages/privilege-broker/package.json +1 -1
- package/packages/project-analyzer/package.json +1 -1
- package/packages/project-bootstrap/package.json +1 -1
- package/packages/projection-engine/package.json +1 -1
- package/packages/prompt-compiler/package.json +1 -1
- package/packages/prompt-versioning/package.json +1 -1
- package/packages/provider-adapter-sdk/package.json +1 -1
- package/packages/provider-router/package.json +1 -1
- package/packages/provider-selector/package.json +1 -1
- package/packages/providers/package.json +1 -1
- package/packages/qdrant-skills/package.json +1 -1
- package/packages/quota-manager/package.json +1 -1
- package/packages/rate-limiter/package.json +1 -1
- package/packages/react-vite-plugin/package.json +1 -1
- package/packages/release-manager/package.json +1 -1
- package/packages/requirement-compiler/package.json +1 -1
- package/packages/runtime/package.json +1 -1
- package/packages/scheduler/package.json +1 -1
- package/packages/scheduler-adapter/package.json +1 -1
- package/packages/session/package.json +1 -1
- package/packages/session-api/package.json +1 -1
- package/packages/session-export/package.json +1 -1
- package/packages/shared-context/package.json +1 -1
- package/packages/skill-mcp-client/package.json +1 -1
- package/packages/skill-registry/package.json +1 -1
- package/packages/skills/package.json +1 -1
- package/packages/sprint-planner/package.json +1 -1
- package/packages/subscription-engine/package.json +1 -1
- package/packages/task-compiler/package.json +1 -1
- package/packages/tencentdb-memory/package.json +1 -1
- package/packages/tencentdb-sync/package.json +1 -1
- package/packages/test-data-generator/package.json +1 -1
- package/packages/test-generator/package.json +1 -1
- package/packages/todo-bd-sync/package.json +1 -1
- package/packages/token-estimation/package.json +1 -1
- package/packages/token-optimizer/package.json +1 -1
- package/packages/trajectory/package.json +1 -1
- package/packages/tui/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/packages/workflow-events/package.json +1 -1
- package/packages/workspace-scanner/package.json +1 -1
- package/packages/worktree/package.json +1 -1
- package/packages/write-review/package.json +1 -1
package/index.ts
CHANGED
|
@@ -289,7 +289,7 @@ async function initTelegram(): Promise<void> {
|
|
|
289
289
|
return;
|
|
290
290
|
}
|
|
291
291
|
|
|
292
|
-
// NotificationCenter
|
|
292
|
+
// NotificationCenter ready
|
|
293
293
|
logStartup(`[pi-harness] Telegram notifications ready`);
|
|
294
294
|
} catch (err) {
|
|
295
295
|
logStartup("[pi-harness] Telegram: init failed:", err instanceof Error ? err.message : String(err));
|
|
@@ -2362,36 +2362,49 @@ Run \`bd ready\` to see current bd issues.
|
|
|
2362
2362
|
// Detached pattern: spawn with detached:true + stdio:ignore + unref() so
|
|
2363
2363
|
// the extension process can exit without killing the daemon.
|
|
2364
2364
|
// PID file at ~/.pi-harness-runtime/daemon.pid prevents double-start.
|
|
2365
|
-
|
|
2366
|
-
|
|
2367
|
-
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2365
|
+
//
|
|
2366
|
+
// SAFETY: fire-and-forget IIFE with try/catch. Throwing from this handler
|
|
2367
|
+
// crashes pi.dev and kicks the user out. NEVER let exceptions escape.
|
|
2368
|
+
void (async () => {
|
|
2369
|
+
try {
|
|
2370
|
+
const { readFileSync: dfs, writeFileSync: wfs, unlinkSync: ufs } = await import("node:fs");
|
|
2371
|
+
const { spawn: spwn } = await import("node:child_process");
|
|
2372
|
+
const { dirname } = await import("node:path");
|
|
2373
|
+
const { fileURLToPath } = await import("node:url");
|
|
2374
|
+
const { freemem } = await import("node:os");
|
|
2375
|
+
const runtimeRoot = dirname(fileURLToPath(import.meta.url));
|
|
2376
|
+
const DAEMON_PID_FILE = `${process.env.HOME}/.pi-harness-runtime/daemon.pid`;
|
|
2377
|
+
const DAEMON_SCRIPT = `${runtimeRoot}/harness/langchain/run.ts`;
|
|
2378
|
+
|
|
2379
|
+
// Memory guard: skip if system has < 1 GB free (daemon can spike to 500 MB+)
|
|
2380
|
+
const FREE_RAM_MB = freemem() / (1024 * 1024);
|
|
2381
|
+
const MIN_FREE_MB = 1024;
|
|
2382
|
+
if (FREE_RAM_MB < MIN_FREE_MB) {
|
|
2383
|
+
console.error(`[pi-harness] Daemon skipped: only ${FREE_RAM_MB.toFixed(0)} MB RAM free (need ${MIN_FREE_MB} MB). Run /langchain manually.`);
|
|
2384
|
+
return;
|
|
2385
|
+
}
|
|
2386
|
+
|
|
2387
|
+
let daemonPid = 0;
|
|
2388
|
+
try { daemonPid = parseInt(dfs(DAEMON_PID_FILE, "utf8").trim(), 10); } catch { /* no PID file */ }
|
|
2389
|
+
if (daemonPid > 0) {
|
|
2390
|
+
try { process.kill(daemonPid, 0); /* alive? */ } catch {
|
|
2391
|
+
try { ufs(DAEMON_PID_FILE); } catch { /* ignore */ }
|
|
2392
|
+
daemonPid = 0;
|
|
2393
|
+
}
|
|
2394
|
+
}
|
|
2395
|
+
if (daemonPid > 0) {
|
|
2396
|
+
console.error(`[pi-harness] LangChain daemon already running (pid=${daemonPid})`);
|
|
2397
|
+
return;
|
|
2398
|
+
}
|
|
2399
|
+
const daemonProc = spwn("bun", ["run", DAEMON_SCRIPT, "--daemon"], { detached: true, stdio: "ignore" });
|
|
2400
|
+
daemonProc.unref();
|
|
2401
|
+
try { wfs(DAEMON_PID_FILE, String(daemonProc.pid), "utf8"); } catch { /* ignore */ }
|
|
2402
|
+
console.error(`[pi-harness] LangChain daemon started (pid=${daemonProc.pid})`);
|
|
2403
|
+
} catch (err) {
|
|
2404
|
+
// MUST NOT throw — throwing here crashes pi.dev and kicks the user out
|
|
2405
|
+
console.error("[pi-harness] Daemon spawn failed (non-fatal):", err instanceof Error ? err.message : String(err));
|
|
2379
2406
|
}
|
|
2380
|
-
}
|
|
2381
|
-
// Only start if not already alive
|
|
2382
|
-
if (daemonPid <= 0 || !efs(DAEMON_PID_FILE)) {
|
|
2383
|
-
// Use detached: true + stdio: ignore so the daemon outlives this process
|
|
2384
|
-
const daemonProc = spwn(
|
|
2385
|
-
"bun",
|
|
2386
|
-
["run", DAEMON_SCRIPT, "--daemon"],
|
|
2387
|
-
{ detached: true, stdio: "ignore" },
|
|
2388
|
-
);
|
|
2389
|
-
daemonProc.unref(); // Don't wait for daemon to exit
|
|
2390
|
-
try { wfs(DAEMON_PID_FILE, String(daemonProc.pid), "utf8"); } catch { /* ignore */ }
|
|
2391
|
-
console.error("[pi-harness] LangChain daemon started (pid=%d)", daemonProc.pid);
|
|
2392
|
-
} else {
|
|
2393
|
-
console.error("[pi-harness] LangChain daemon already running (pid=%d)", daemonPid);
|
|
2394
|
-
}
|
|
2407
|
+
})();
|
|
2395
2408
|
|
|
2396
2409
|
// Capture only the setStatus function, not the ctx
|
|
2397
2410
|
footerSetStatus = ctx.ui.setStatus.bind(ctx.ui);
|
|
@@ -2403,17 +2416,12 @@ Run \`bd ready\` to see current bd issues.
|
|
|
2403
2416
|
() => lastActiveProvider,
|
|
2404
2417
|
);
|
|
2405
2418
|
|
|
2406
|
-
// ---
|
|
2407
|
-
//
|
|
2408
|
-
//
|
|
2419
|
+
// --- Show harness branding as a compact line (pi header stays intact) ----
|
|
2420
|
+
// Do NOT call setHeader() — that replaces pi's ASCII header which shows
|
|
2421
|
+
// community shortcuts (ctrl+c/d, /, !, ctrl+o). Keep pi's header and add
|
|
2422
|
+
// harness info as a small separate notify line.
|
|
2409
2423
|
if (ctx.mode === "tui") {
|
|
2410
|
-
|
|
2411
|
-
ctx.ui.setHeader((tui, theme) =>
|
|
2412
|
-
createHarnessHeader(tui, theme, {
|
|
2413
|
-
version: HARNESS_VERSION,
|
|
2414
|
-
productName: "Harness",
|
|
2415
|
-
}),
|
|
2416
|
-
);
|
|
2424
|
+
ctx.ui.notify(`Harness v${HARNESS_VERSION} — quota management, automation, memory, multi-agent`, "info");
|
|
2417
2425
|
}
|
|
2418
2426
|
|
|
2419
2427
|
// --- Show collected startup messages --------------------------------
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-harness/capability-registry",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.140",
|
|
4
4
|
"description": "Capability Registry for pi-harness-runtime — tracks model capabilities and enables capability-based routing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-harness/provider-router",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.140",
|
|
4
4
|
"description": "Enhanced Provider Router for pi-harness-runtime — intelligent routing with capabilities, costs, and quotas",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/provider-router.js",
|