pi-harness-runtime 1.1.425 → 1.1.427
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/AGENTS.md +1 -1
- package/README.md +1 -1
- package/harness/e2e/api-key-resolver.ts +3 -2
- package/harness/notification-center.ts +2 -1
- package/harness/skills-plan/2026-07-12-herdr-moo-skills-adaptation-plan.md +3 -3
- package/harness/skills-plan/2026-07-12-minimax-prompt-step1-sync.md +3 -3
- package/harness/skills-plan/2026-07-12-public-skill-export-and-sync-design.md +4 -4
- package/harness/ssh-detach-interceptor.test.ts +3 -3
- package/harness/ssh-hang-recovery.test.ts +86 -0
- package/harness/ssh-hang-recovery.ts +48 -14
- package/index.ts +9 -9
- package/package.json +1 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/agent-policy/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/connection-runtime/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/contracts/dist/delegation-store.js +2 -1
- package/packages/contracts/dist/workspace-env-format.d.ts +2 -2
- package/packages/contracts/dist/workspace-env-format.js +2 -2
- package/packages/contracts/dist/workspace-env.js +2 -1
- package/packages/contracts/package.json +1 -1
- package/packages/contracts/src/delegation-store.ts +2 -1
- package/packages/contracts/src/workspace-env-format.ts +2 -2
- package/packages/contracts/src/workspace-env.ts +2 -1
- package/packages/contracts/test/workspace-env.test.ts +6 -6
- 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/durable-review/package.json +1 -1
- package/packages/e2e-tester/README.md +1 -1
- package/packages/e2e-tester/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-sink/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/dist/delegation-harness.d.ts.map +1 -1
- package/packages/jev-judge/dist/delegation-harness.js +2 -1
- package/packages/jev-judge/dist/delegation-harness.js.map +1 -1
- package/packages/jev-judge/dist/index.d.ts.map +1 -1
- package/packages/jev-judge/dist/index.js +2 -1
- package/packages/jev-judge/dist/index.js.map +1 -1
- package/packages/jev-judge/package.json +1 -1
- package/packages/jev-judge/src/delegation-harness.ts +2 -1
- package/packages/jev-judge/src/index.ts +2 -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/logging/package.json +1 -1
- package/packages/logging/test/classification.test.ts +2 -2
- 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/dist/adapters/telegram-adapter.js +2 -2
- package/packages/notification/dist/adapters/telegram-adapter.js.map +1 -1
- package/packages/notification/dist/notification-center.d.ts.map +1 -1
- package/packages/notification/dist/notification-center.js +2 -1
- package/packages/notification/dist/notification-center.js.map +1 -1
- package/packages/notification/package.json +1 -1
- package/packages/notification/src/adapters/telegram-adapter.ts +2 -2
- package/packages/notification/src/notification-center.ts +2 -1
- package/packages/observability/package.json +1 -1
- package/packages/okf-indexer/package.json +1 -1
- package/packages/paperclip-integration/dist/index.d.ts.map +1 -1
- package/packages/paperclip-integration/dist/index.js +3 -2
- package/packages/paperclip-integration/dist/index.js.map +1 -1
- package/packages/paperclip-integration/package.json +1 -1
- package/packages/paperclip-integration/src/index.ts +4 -2
- package/packages/performance-optimizer/package.json +1 -1
- package/packages/permission-mode/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/relay/package.json +1 -1
- package/packages/relay/test/relay-e2e.test.ts +4 -4
- 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/dist/loader.d.ts.map +1 -1
- package/packages/skills/dist/loader.js +2 -1
- package/packages/skills/dist/loader.js.map +1 -1
- package/packages/skills/package.json +1 -1
- package/packages/skills/src/loader.ts +2 -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/telegram/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/tooling-preference/package.json +1 -1
- package/packages/trajectory/package.json +1 -1
- package/packages/tui/dist/harness-footer.d.ts +2 -2
- package/packages/tui/dist/harness-footer.js +2 -2
- package/packages/tui/package.json +1 -1
- package/packages/tui/src/harness-footer.ts +2 -2
- package/packages/tui/test/harness-footer.test.ts +10 -10
- package/packages/two-phase-review/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/packages/voice-api/package.json +1 -1
- package/packages/webmcp-tester/package.json +1 -1
- package/packages/wiki/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/scripts/convert-skills-to-okf.ts +4 -1
- package/scripts/r2-storage.ts +2 -1
- package/scripts/sync-callback-queue.ts +4 -3
- package/scripts/telegram-mobile-bot.ts +3 -2
- package/scripts/test-r2-telegram.ts +2 -1
- package/scripts/test-telegram-approval.ts +2 -1
- package/scripts/voice-api-example.ts +2 -1
|
@@ -54,7 +54,7 @@ function makeFooterData(statuses: Record<string, string>): ReadonlyFooterDataPro
|
|
|
54
54
|
|
|
55
55
|
function makeSessionInfo(overrides: Partial<FooterSessionInfo> = {}): FooterSessionInfo {
|
|
56
56
|
return {
|
|
57
|
-
cwd: "/home/
|
|
57
|
+
cwd: "/home/tester/pi-harness-runtime",
|
|
58
58
|
branch: "main",
|
|
59
59
|
sessionName: null,
|
|
60
60
|
modelId: "MiniMax-M2",
|
|
@@ -89,11 +89,11 @@ const WORKSPACE =
|
|
|
89
89
|
function makeLiveCtx(overrides: Record<string, unknown> = {}): ExtensionContext {
|
|
90
90
|
return {
|
|
91
91
|
mode: "tui",
|
|
92
|
-
cwd: "/home/
|
|
92
|
+
cwd: "/home/tester/pi-harness-runtime",
|
|
93
93
|
model: { id: "MiniMax-M2", provider: "minimax", contextWindow: 200000 },
|
|
94
94
|
thinkingLevel: "high",
|
|
95
95
|
sessionManager: {
|
|
96
|
-
getCwd: () => "/home/
|
|
96
|
+
getCwd: () => "/home/tester/pi-harness-runtime",
|
|
97
97
|
getSessionName: () => "session-1",
|
|
98
98
|
getEntries: () => [
|
|
99
99
|
{
|
|
@@ -202,7 +202,7 @@ describe("harness footer rows", () => {
|
|
|
202
202
|
// `input ?? (0 + cacheRead + cacheWrite)` and reported CH9000.0%.
|
|
203
203
|
const ctx = makeLiveCtx({
|
|
204
204
|
sessionManager: {
|
|
205
|
-
getCwd: () => "/home/
|
|
205
|
+
getCwd: () => "/home/tester/pi-harness-runtime",
|
|
206
206
|
getSessionName: () => "session-1",
|
|
207
207
|
getEntries: () => [
|
|
208
208
|
{
|
|
@@ -440,7 +440,7 @@ describe("harness footer helpers", () => {
|
|
|
440
440
|
|
|
441
441
|
it("breaks a word that is longer than the width", () => {
|
|
442
442
|
const lines = wrapStatusText(
|
|
443
|
-
"Workspace: /home/
|
|
443
|
+
"Workspace: /home/tester/a-very-long-directory-name/pi-harness-runtime",
|
|
444
444
|
20,
|
|
445
445
|
0,
|
|
446
446
|
);
|
|
@@ -522,14 +522,14 @@ describe("harness footer helpers", () => {
|
|
|
522
522
|
});
|
|
523
523
|
|
|
524
524
|
it("collapses the home directory to ~", () => {
|
|
525
|
-
expect(formatCwdForFooter("/home/
|
|
525
|
+
expect(formatCwdForFooter("/home/tester/project", "/home/tester")).toBe(
|
|
526
526
|
"~/project",
|
|
527
527
|
);
|
|
528
|
-
expect(formatCwdForFooter("/home/
|
|
529
|
-
expect(formatCwdForFooter("/opt/work", "/home/
|
|
528
|
+
expect(formatCwdForFooter("/home/tester", "/home/tester")).toBe("~");
|
|
529
|
+
expect(formatCwdForFooter("/opt/work", "/home/tester")).toBe("/opt/work");
|
|
530
530
|
// A sibling directory that merely shares the home prefix is NOT in home.
|
|
531
|
-
expect(formatCwdForFooter("/home/
|
|
532
|
-
"/home/
|
|
531
|
+
expect(formatCwdForFooter("/home/testerX", "/home/tester")).toBe(
|
|
532
|
+
"/home/testerX",
|
|
533
533
|
);
|
|
534
534
|
});
|
|
535
535
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-harness/two-phase-review",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.427",
|
|
4
4
|
"description": "pi-harness-runtime — two-phase implementation and review workflow (queue review signals, gate the phase, scope the diff)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -10,9 +10,12 @@
|
|
|
10
10
|
|
|
11
11
|
import { readdir, readFile, writeFile, mkdir } from "fs/promises";
|
|
12
12
|
import { existsSync } from "fs";
|
|
13
|
+
import { homedir as osHomedir } from "node:os";
|
|
14
|
+
import { join } from "node:path";
|
|
13
15
|
|
|
14
16
|
const SOURCE_DIR =
|
|
15
|
-
|
|
17
|
+
process.env.SKILLS_SOURCE_DIR ||
|
|
18
|
+
join(process.env.HOME || osHomedir(), "frappe-bench", ".claude-plugins", "moocoding-skills", "skills");
|
|
16
19
|
const OUTPUT_DIR = "./OKF/skills";
|
|
17
20
|
|
|
18
21
|
// Sensitive patterns to sanitize
|
package/scripts/r2-storage.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* Credentials loaded from key files per sensitive data rules.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
import { homedir as osHomedir } from "node:os";
|
|
8
9
|
import { existsSync, readFileSync } from "node:fs";
|
|
9
10
|
import { join } from "node:path";
|
|
10
11
|
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
|
|
@@ -27,7 +28,7 @@ export interface R2Config {
|
|
|
27
28
|
* Load R2 config from key files
|
|
28
29
|
*/
|
|
29
30
|
export function loadR2Config(): R2Config | null {
|
|
30
|
-
const keysDir = join(process.env.HOME ||
|
|
31
|
+
const keysDir = join(process.env.HOME || osHomedir(), ".pi-harness-runtime", "keys");
|
|
31
32
|
|
|
32
33
|
const accountIdFile = join(keysDir, "r2-account-id.txt");
|
|
33
34
|
const accessKeyFile = join(keysDir, "r2-access-key-id.txt");
|
|
@@ -7,16 +7,17 @@
|
|
|
7
7
|
* bun run scripts/sync-callback-queue.ts
|
|
8
8
|
*
|
|
9
9
|
* Or set up a cron job:
|
|
10
|
-
* * * * * * bun
|
|
10
|
+
* * * * * * bun ~/pi-harness-runtime/scripts/sync-callback-queue.ts
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
+
import { homedir as osHomedir } from "node:os";
|
|
13
14
|
import { execSync } from "child_process";
|
|
14
15
|
import { readFileSync, writeFileSync, existsSync } from "fs";
|
|
15
16
|
import { join } from "path";
|
|
16
17
|
|
|
17
18
|
const VPS_HOST = process.env.VPS_HOST || "frappe@217.216.37.251";
|
|
18
|
-
const VPS_QUEUE = "
|
|
19
|
-
const LOCAL_QUEUE = join(process.env.HOME ||
|
|
19
|
+
const VPS_QUEUE = process.env.VPS_QUEUE || "~/.pi-harness-runtime/callback-queue.jsonl";
|
|
20
|
+
const LOCAL_QUEUE = join(process.env.HOME || osHomedir(), ".pi-harness-runtime", "callback-queue.jsonl");
|
|
20
21
|
|
|
21
22
|
function syncQueue(): number {
|
|
22
23
|
try {
|
|
@@ -8,12 +8,13 @@
|
|
|
8
8
|
* - Quick status - current job at a glance
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
import { homedir as osHomedir } from "node:os";
|
|
11
12
|
import * as fs from "node:fs";
|
|
12
13
|
import * as path from "node:path";
|
|
13
14
|
import { existsSync, readFileSync, writeFileSync, appendFileSync } from "node:fs";
|
|
14
15
|
|
|
15
|
-
const keysDir = path.join(process.env.HOME ||
|
|
16
|
-
const dataDir = path.join(process.env.HOME ||
|
|
16
|
+
const keysDir = path.join(process.env.HOME || osHomedir(), ".pi-harness-runtime", "keys");
|
|
17
|
+
const dataDir = path.join(process.env.HOME || osHomedir(), ".pi-harness-runtime", "data");
|
|
17
18
|
|
|
18
19
|
// Load config
|
|
19
20
|
const botToken = fs.readFileSync(path.join(keysDir, "telegram-bot-token.txt"), "utf8").trim();
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* Run: bun run scripts/test-r2-telegram.ts
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
import { homedir as osHomedir } from "node:os";
|
|
9
10
|
import * as fs from "node:fs";
|
|
10
11
|
import * as path from "node:path";
|
|
11
12
|
import { uploadLogsToR2 } from "./r2-storage.js";
|
|
@@ -16,7 +17,7 @@ async function main() {
|
|
|
16
17
|
console.log("=".repeat(60));
|
|
17
18
|
|
|
18
19
|
// Load Telegram config
|
|
19
|
-
const keysDir = path.join(process.env.HOME ||
|
|
20
|
+
const keysDir = path.join(process.env.HOME || osHomedir(), ".pi-harness-runtime", "keys");
|
|
20
21
|
const botToken = fs.readFileSync(path.join(keysDir, "telegram-bot-token.txt"), "utf8").trim();
|
|
21
22
|
const chatId = fs.readFileSync(path.join(keysDir, "telegram-chat-id.txt"), "utf8").trim();
|
|
22
23
|
|
|
@@ -9,11 +9,12 @@
|
|
|
9
9
|
* 5. Job command written for pi-harness to resume
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
+
import { homedir as osHomedir } from "node:os";
|
|
12
13
|
import * as fs from "node:fs";
|
|
13
14
|
import * as path from "node:path";
|
|
14
15
|
|
|
15
16
|
// Load config
|
|
16
|
-
const keysDir = path.join(process.env.HOME ||
|
|
17
|
+
const keysDir = path.join(process.env.HOME || osHomedir(), ".pi-harness-runtime", "keys");
|
|
17
18
|
|
|
18
19
|
const botToken = fs.readFileSync(path.join(keysDir, "telegram-bot-token.txt"), "utf8").trim();
|
|
19
20
|
const chatId = fs.readFileSync(path.join(keysDir, "telegram-chat-id.txt"), "utf8").trim();
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* OPENAI_API_KEY=sk-xxx bun run scripts/voice-api-example.ts
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
+
import { homedir as osHomedir } from "node:os";
|
|
13
14
|
import * as fs from "node:fs";
|
|
14
15
|
import * as path from "node:path";
|
|
15
16
|
import { VoiceTranscriber } from "../packages/voice-api/dist/transcriber.js";
|
|
@@ -17,7 +18,7 @@ import { TelegramVoiceHandler } from "../packages/voice-api/dist/telegram.js";
|
|
|
17
18
|
|
|
18
19
|
// Load API keys from key files
|
|
19
20
|
function loadKey(filename: string): string | null {
|
|
20
|
-
const keysDir = path.join(process.env.HOME ||
|
|
21
|
+
const keysDir = path.join(process.env.HOME || osHomedir(), ".pi-harness-runtime", "keys");
|
|
21
22
|
const filepath = path.join(keysDir, filename);
|
|
22
23
|
try {
|
|
23
24
|
return fs.readFileSync(filepath, "utf8").trim();
|