pi-harness-runtime 1.1.301 → 1.1.303
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 +68 -50
- 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/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/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-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/paperclip-integration/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/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/trajectory/package.json +1 -1
- package/packages/tui/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/packages/webmcp-tester/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
|
@@ -1025,32 +1025,50 @@ async function initTelegram(pi: ExtensionAPI): Promise<void> {
|
|
|
1025
1025
|
const matchingSession = codexSessionState.deliveredEvents.get(sessionId) ||
|
|
1026
1026
|
Array.from(codexSessionState.deliveredEvents.values()).find(e => e.codexSessionId === sessionId);
|
|
1027
1027
|
|
|
1028
|
-
|
|
1029
|
-
|
|
1028
|
+
// Validate session matches current project
|
|
1029
|
+
if (!matchingSession || matchingSession.codexSessionId !== codexSessionState.currentCodexSessionId) {
|
|
1030
|
+
logToFile("[codex-trigger]", `Unknown session or session not active: ${sessionId}`);
|
|
1031
|
+
return;
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
// For code/review commands, check Pi cwd matches project root
|
|
1035
|
+
if (action.toLowerCase() === "code" || action.toLowerCase() === "review") {
|
|
1036
|
+
if (_piSessionCwd && codexSessionState.currentProjectRoot &&
|
|
1037
|
+
_piSessionCwd !== codexSessionState.currentProjectRoot) {
|
|
1038
|
+
logToFile("[codex-trigger]", `Cwd mismatch for /task ${action}: Pi cwd=${_piSessionCwd} vs project=${codexSessionState.currentProjectRoot}`);
|
|
1039
|
+
return;
|
|
1040
|
+
}
|
|
1030
1041
|
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
);
|
|
1037
|
-
matchingSession.status = "triggered";
|
|
1038
|
-
logToFile("[codex-trigger]", "Triggered Pi for plan:", matchingSession.planPath);
|
|
1039
|
-
} else if (action.toLowerCase() === "review") {
|
|
1040
|
-
// Advance to review stage
|
|
1041
|
-
await pi.sendUserMessage(
|
|
1042
|
-
"Human requests a review of the implementation.",
|
|
1043
|
-
{ deliverAs: "steer" }
|
|
1044
|
-
);
|
|
1045
|
-
} else if (action.toLowerCase() === "done") {
|
|
1046
|
-
// Mark as done
|
|
1047
|
-
matchingSession.status = "done";
|
|
1048
|
-
logToFile("[codex-trigger]", "Human marked session done:", sessionId);
|
|
1042
|
+
// For code command, require manual_wait or ready status
|
|
1043
|
+
if (action.toLowerCase() === "code" &&
|
|
1044
|
+
matchingSession.status !== "manual_wait" && matchingSession.status !== "ready") {
|
|
1045
|
+
logToFile("[codex-trigger]", `Cannot /task code: plan not ready (status=${matchingSession.status})`);
|
|
1046
|
+
return;
|
|
1049
1047
|
}
|
|
1050
|
-
return;
|
|
1051
|
-
} else {
|
|
1052
|
-
logToFile("[codex-trigger]", `Unknown session or wrong project: ${sessionId}`);
|
|
1053
1048
|
}
|
|
1049
|
+
|
|
1050
|
+
logToFile("[codex-trigger]", `Human command: ${action} for session ${sessionId}`);
|
|
1051
|
+
|
|
1052
|
+
if (action.toLowerCase() === "code") {
|
|
1053
|
+
// Advance to code stage - send a message to Pi
|
|
1054
|
+
await pi.sendUserMessage(
|
|
1055
|
+
`Human approved the plan. Proceed to implement: ${matchingSession.planPath}`,
|
|
1056
|
+
{ deliverAs: "steer" }
|
|
1057
|
+
);
|
|
1058
|
+
matchingSession.status = "triggered";
|
|
1059
|
+
logToFile("[codex-trigger]", "Triggered Pi for plan:", matchingSession.planPath);
|
|
1060
|
+
} else if (action.toLowerCase() === "review") {
|
|
1061
|
+
// Advance to review stage
|
|
1062
|
+
await pi.sendUserMessage(
|
|
1063
|
+
"Human requests a review of the implementation.",
|
|
1064
|
+
{ deliverAs: "steer" }
|
|
1065
|
+
);
|
|
1066
|
+
} else if (action.toLowerCase() === "done") {
|
|
1067
|
+
// Mark as done
|
|
1068
|
+
matchingSession.status = "done";
|
|
1069
|
+
logToFile("[codex-trigger]", "Human marked session done:", sessionId);
|
|
1070
|
+
}
|
|
1071
|
+
return;
|
|
1054
1072
|
}
|
|
1055
1073
|
|
|
1056
1074
|
logToFile("[TelegramInbound]", `Forwarding message to Pi: "${text.slice(0, 50)}..."`);
|
|
@@ -2292,8 +2310,8 @@ export default function (pi: ExtensionAPI) {
|
|
|
2292
2310
|
// Trigger Pi to read the plan
|
|
2293
2311
|
async function triggerPiForPlan(event: PlanEvent): Promise<void> {
|
|
2294
2312
|
// Check cwd match
|
|
2295
|
-
if (_piSessionCwd && currentProjectRoot && _piSessionCwd !== currentProjectRoot) {
|
|
2296
|
-
logToFile("[codex-trigger]", "Cwd mismatch, skipping:", _piSessionCwd, "!=", currentProjectRoot);
|
|
2313
|
+
if (_piSessionCwd && codexSessionState.currentProjectRoot && _piSessionCwd !== codexSessionState.currentProjectRoot) {
|
|
2314
|
+
logToFile("[codex-trigger]", "Cwd mismatch, skipping:", _piSessionCwd, "!=", codexSessionState.currentProjectRoot);
|
|
2297
2315
|
return;
|
|
2298
2316
|
}
|
|
2299
2317
|
|
|
@@ -2319,15 +2337,15 @@ export default function (pi: ExtensionAPI) {
|
|
|
2319
2337
|
|
|
2320
2338
|
// Start settle timer for plan
|
|
2321
2339
|
function startSettleTimer(planPath: string, ordinal: number) {
|
|
2322
|
-
const eventKey = `${currentCodexSessionId}:${planPath}`;
|
|
2323
|
-
const existing = deliveredEvents.get(eventKey);
|
|
2340
|
+
const eventKey = `${codexSessionState.currentCodexSessionId}:${planPath}`;
|
|
2341
|
+
const existing = codexSessionState.deliveredEvents.get(eventKey);
|
|
2324
2342
|
if (existing && (existing.status === "triggered" || existing.status === "ready" || existing.status === "manual_wait")) {
|
|
2325
2343
|
logToFile("[codex-trigger]", "Event already handled:", eventKey);
|
|
2326
2344
|
return;
|
|
2327
2345
|
}
|
|
2328
2346
|
|
|
2329
2347
|
const event: PlanEvent = {
|
|
2330
|
-
codexSessionId: currentCodexSessionId ?? "",
|
|
2348
|
+
codexSessionId: codexSessionState.currentCodexSessionId ?? "",
|
|
2331
2349
|
planPath,
|
|
2332
2350
|
planHash: "",
|
|
2333
2351
|
status: "settling",
|
|
@@ -2336,7 +2354,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
2336
2354
|
settleTimer: null,
|
|
2337
2355
|
fileStableSince: 0,
|
|
2338
2356
|
};
|
|
2339
|
-
deliveredEvents.set(eventKey, event);
|
|
2357
|
+
codexSessionState.deliveredEvents.set(eventKey, event);
|
|
2340
2358
|
|
|
2341
2359
|
logToFile("[codex-trigger]", "Plan observed, starting settle timer:", planPath);
|
|
2342
2360
|
|
|
@@ -2373,20 +2391,20 @@ export default function (pi: ExtensionAPI) {
|
|
|
2373
2391
|
onSessionChange: (session) => {
|
|
2374
2392
|
if (session) {
|
|
2375
2393
|
logToFile("[codex]", `Session started: ${session.threadName}, root: ${session.projectRoot}`);
|
|
2376
|
-
currentCodexSessionId = session.id;
|
|
2377
|
-
currentProjectRoot = session.projectRoot;
|
|
2394
|
+
codexSessionState.currentCodexSessionId = session.id;
|
|
2395
|
+
codexSessionState.currentProjectRoot = session.projectRoot;
|
|
2378
2396
|
nc("CodexSessionStarted", {
|
|
2379
2397
|
requirement: `${session.threadName || "Codex session"} [${session.projectRoot || "unknown"}]`,
|
|
2380
2398
|
taskTitle: session.id,
|
|
2381
2399
|
});
|
|
2382
2400
|
} else {
|
|
2383
|
-
currentCodexSessionId = null;
|
|
2384
|
-
currentProjectRoot =
|
|
2385
|
-
currentPlanCandidate = null;
|
|
2401
|
+
codexSessionState.currentCodexSessionId = null;
|
|
2402
|
+
codexSessionState.currentProjectRoot = null;
|
|
2403
|
+
codexSessionState.currentPlanCandidate = null;
|
|
2386
2404
|
}
|
|
2387
2405
|
},
|
|
2388
2406
|
onMessages: (msgs) => {
|
|
2389
|
-
|
|
2407
|
+
if (!codexSessionState.currentCodexSessionId) return;
|
|
2390
2408
|
|
|
2391
2409
|
for (const msg of msgs) {
|
|
2392
2410
|
lastActivityTime = Date.now();
|
|
@@ -2404,11 +2422,11 @@ export default function (pi: ExtensionAPI) {
|
|
|
2404
2422
|
|
|
2405
2423
|
// Only start settle timer for plans (not reviews)
|
|
2406
2424
|
// Reviews don't have a file to watch
|
|
2407
|
-
|
|
2408
|
-
const planPath = findPlanFile(currentProjectRoot);
|
|
2425
|
+
if (!hasReviewMarker && codexSessionState.currentProjectRoot) {
|
|
2426
|
+
const planPath = findPlanFile(codexSessionState.currentProjectRoot);
|
|
2409
2427
|
if (planPath) {
|
|
2410
2428
|
// Track plan candidate
|
|
2411
|
-
currentPlanCandidate = { ordinal: msg.ordinal, text: msg.text, timestamp: Date.now() };
|
|
2429
|
+
codexSessionState.currentPlanCandidate = { ordinal: msg.ordinal, text: msg.text, timestamp: Date.now() };
|
|
2412
2430
|
logToFile("[codex-trigger]", "Plan message + wiki file detected:", planPath);
|
|
2413
2431
|
startSettleTimer(planPath, msg.ordinal);
|
|
2414
2432
|
} else {
|
|
@@ -2418,28 +2436,28 @@ export default function (pi: ExtensionAPI) {
|
|
|
2418
2436
|
}
|
|
2419
2437
|
|
|
2420
2438
|
// Emit Telegram alert with full content
|
|
2421
|
-
const planPath = currentProjectRoot ? findPlanFile(currentProjectRoot) : undefined;
|
|
2439
|
+
const planPath = codexSessionState.currentProjectRoot ? findPlanFile(codexSessionState.currentProjectRoot) : undefined;
|
|
2422
2440
|
|
|
2423
2441
|
// Use event type based on stage
|
|
2424
2442
|
if (hasReviewMarker) {
|
|
2425
2443
|
nc("CodexReviewDetected", {
|
|
2426
2444
|
requirement: msg.text,
|
|
2427
|
-
|
|
2428
|
-
|
|
2429
|
-
|
|
2430
|
-
|
|
2431
|
-
|
|
2445
|
+
taskTitle: codexSessionState.currentCodexSessionId || `Ordinal ${msg.ordinal}`,
|
|
2446
|
+
details: {
|
|
2447
|
+
ordinal: msg.ordinal,
|
|
2448
|
+
stage: "review",
|
|
2449
|
+
projectRoot: codexSessionState.currentProjectRoot || undefined,
|
|
2432
2450
|
messageLength: msg.text.length,
|
|
2433
2451
|
},
|
|
2434
2452
|
});
|
|
2435
2453
|
} else {
|
|
2436
2454
|
nc("CodexPlanDetected", {
|
|
2437
|
-
|
|
2438
|
-
|
|
2439
|
-
|
|
2440
|
-
|
|
2441
|
-
|
|
2442
|
-
|
|
2455
|
+
requirement: msg.text, // Full text, no truncation
|
|
2456
|
+
taskTitle: codexSessionState.currentCodexSessionId || `Ordinal ${msg.ordinal}`,
|
|
2457
|
+
details: {
|
|
2458
|
+
ordinal: msg.ordinal,
|
|
2459
|
+
stage: "plan",
|
|
2460
|
+
projectRoot: codexSessionState.currentProjectRoot || undefined,
|
|
2443
2461
|
planPath: planPath || undefined,
|
|
2444
2462
|
messageLength: msg.text.length,
|
|
2445
2463
|
},
|
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.303",
|
|
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",
|