pi-harness-runtime 1.1.306 → 1.1.308
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 +88 -1
- 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
|
@@ -932,6 +932,10 @@ const codexSessionState = {
|
|
|
932
932
|
currentProjectRoot: null as string | null,
|
|
933
933
|
currentPlanCandidate: null as { ordinal: number; text: string; timestamp: number } | null,
|
|
934
934
|
pendingActions: new Map<string, PendingPINGPONGAction>(),
|
|
935
|
+
// --- greeting state ---
|
|
936
|
+
greetingBaselineSessionId: null as string | null, // set on watcher startup
|
|
937
|
+
greetedSessions: new Set<string>(), // "piSessionId:codexSessionId"
|
|
938
|
+
pendingGreeting: null as { sessionId: string; projectRoot: string; timestamp: number } | null,
|
|
935
939
|
};
|
|
936
940
|
|
|
937
941
|
// PING_PONG callback action type (different from generic APPROVE/REJECT)
|
|
@@ -1110,7 +1114,7 @@ async function initTelegram(pi: ExtensionAPI): Promise<void> {
|
|
|
1110
1114
|
const { parseCallbackData, CallbackActions } = await import(
|
|
1111
1115
|
"./packages/notification/dist/telegram-webhook-handler.js"
|
|
1112
1116
|
);
|
|
1113
|
-
center.setCallbackHandler(async (data: string,
|
|
1117
|
+
center.setCallbackHandler(async (data: string, _query: { id: string; from: { id: number } }, acknowledge) => {
|
|
1114
1118
|
const parsed = parseCallbackData(data);
|
|
1115
1119
|
logToFile("[TelegramCallback]", `action=${parsed.action} target=${parsed.targetId}`);
|
|
1116
1120
|
|
|
@@ -2516,12 +2520,95 @@ export default function (pi: ExtensionAPI) {
|
|
|
2516
2520
|
}, _SETTLE_DELAY_MS);
|
|
2517
2521
|
}
|
|
2518
2522
|
|
|
2523
|
+
// --- greeting: Track baseline session on watcher startup ---
|
|
2524
|
+
// Get the current Codex session ID as baseline - don't greet it.
|
|
2525
|
+
// Only treat it as baseline if it's recent (within 10 minutes) to avoid
|
|
2526
|
+
// stale index entries being treated as "current" sessions.
|
|
2527
|
+
try {
|
|
2528
|
+
const { getLatestSession } = await import("./packages/codex-watcher/dist/index.js");
|
|
2529
|
+
const baseline = getLatestSession();
|
|
2530
|
+
if (baseline) {
|
|
2531
|
+
const sessionAgeMs = Date.now() - (baseline.updatedAt || 0);
|
|
2532
|
+
const isRecent = (baseline.updatedAt || 0) > 0 && sessionAgeMs < 10 * 60 * 1000;
|
|
2533
|
+
if (isRecent) {
|
|
2534
|
+
codexSessionState.greetingBaselineSessionId = baseline.id;
|
|
2535
|
+
logToFile("[codex-greeting]", "Baseline session set (recent):", baseline.id, `age=${Math.round(sessionAgeMs/1000)}s`);
|
|
2536
|
+
} else {
|
|
2537
|
+
logToFile("[codex-greeting]", "Baseline session stale, skipping baseline:", baseline.id, `age=${Math.round(sessionAgeMs/1000)}s`);
|
|
2538
|
+
}
|
|
2539
|
+
}
|
|
2540
|
+
} catch {
|
|
2541
|
+
logToFile("[codex-greeting]", "Could not get baseline session");
|
|
2542
|
+
}
|
|
2543
|
+
|
|
2544
|
+
// Deliver any pending greeting if Pi session is now active
|
|
2545
|
+
if (codexSessionState.pendingGreeting && _piSessionCwd) {
|
|
2546
|
+
const pg = codexSessionState.pendingGreeting;
|
|
2547
|
+
// Check expiry (5 minutes)
|
|
2548
|
+
if (Date.now() - pg.timestamp > 5 * 60 * 1000) {
|
|
2549
|
+
logToFile("[codex-greeting]", "Pending greeting expired");
|
|
2550
|
+
codexSessionState.pendingGreeting = null;
|
|
2551
|
+
} else if (_piSessionCwd === pg.projectRoot) {
|
|
2552
|
+
// Roots match - send greeting
|
|
2553
|
+
const greetKey = `${_piSessionCwd}:${pg.sessionId}`;
|
|
2554
|
+
if (!codexSessionState.greetedSessions.has(greetKey)) {
|
|
2555
|
+
logToFile("[codex-greeting]", "Delivering pending greeting for:", pg.sessionId);
|
|
2556
|
+
void pi.sendUserMessage(
|
|
2557
|
+
`Codex opened in this workspace (session ${pg.sessionId.slice(0, 8)}...). Say hello briefly, then wait for the user's next instruction.`
|
|
2558
|
+
);
|
|
2559
|
+
codexSessionState.greetedSessions.add(greetKey);
|
|
2560
|
+
}
|
|
2561
|
+
codexSessionState.pendingGreeting = null;
|
|
2562
|
+
}
|
|
2563
|
+
}
|
|
2564
|
+
|
|
2519
2565
|
const codexHandle = startWatcher({
|
|
2520
2566
|
pollIntervalMs: 5000,
|
|
2521
2567
|
maxIdlePolls: Infinity,
|
|
2522
2568
|
onSessionChange: (session) => {
|
|
2523
2569
|
if (session) {
|
|
2524
2570
|
logToFile("[codex]", `Session started: ${session.threadName}, root: ${session.projectRoot}`);
|
|
2571
|
+
|
|
2572
|
+
// --- Same-workspace greeting ---
|
|
2573
|
+
const codexSessionId = session.id;
|
|
2574
|
+
const codexProjectRoot = session.projectRoot;
|
|
2575
|
+
|
|
2576
|
+
// Skip if this is the baseline session (Pi just restarted)
|
|
2577
|
+
if (codexSessionId === codexSessionState.greetingBaselineSessionId) {
|
|
2578
|
+
logToFile("[codex-greeting]", "Skipping baseline session:", codexSessionId);
|
|
2579
|
+
} else {
|
|
2580
|
+
// Check for duplicate greeting
|
|
2581
|
+
const piCwd = _piSessionCwd || "";
|
|
2582
|
+
const greetKey = `${piCwd}:${codexSessionId}`;
|
|
2583
|
+
if (!codexSessionState.greetedSessions.has(greetKey)) {
|
|
2584
|
+
// Check root match
|
|
2585
|
+
if (piCwd && codexProjectRoot && piCwd === codexProjectRoot) {
|
|
2586
|
+
logToFile("[codex-greeting]", "Same workspace detected:", codexSessionId);
|
|
2587
|
+
|
|
2588
|
+
if (codexSessionState.currentCodexSessionId) {
|
|
2589
|
+
// Pi session active - send greeting now
|
|
2590
|
+
logToFile("[codex-greeting]", "Sending greeting for:", codexSessionId);
|
|
2591
|
+
void pi.sendUserMessage(
|
|
2592
|
+
`Codex opened in this workspace (session ${codexSessionId.slice(0, 8)}...). Say hello briefly, then wait for the user's next instruction.`
|
|
2593
|
+
);
|
|
2594
|
+
codexSessionState.greetedSessions.add(greetKey);
|
|
2595
|
+
} else {
|
|
2596
|
+
// Pi session not active yet - queue for delivery on session_start
|
|
2597
|
+
logToFile("[codex-greeting]", "Pi not active, queueing greeting for:", codexSessionId);
|
|
2598
|
+
codexSessionState.pendingGreeting = {
|
|
2599
|
+
sessionId: codexSessionId,
|
|
2600
|
+
projectRoot: codexProjectRoot,
|
|
2601
|
+
timestamp: Date.now(),
|
|
2602
|
+
};
|
|
2603
|
+
}
|
|
2604
|
+
} else {
|
|
2605
|
+
logToFile("[codex-greeting]", "Different workspace or Pi cwd unknown, skipping greeting");
|
|
2606
|
+
}
|
|
2607
|
+
} else {
|
|
2608
|
+
logToFile("[codex-greeting]", "Already greeted:", greetKey);
|
|
2609
|
+
}
|
|
2610
|
+
}
|
|
2611
|
+
|
|
2525
2612
|
codexSessionState.currentCodexSessionId = session.id;
|
|
2526
2613
|
codexSessionState.currentProjectRoot = session.projectRoot;
|
|
2527
2614
|
nc("CodexSessionStarted", {
|
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.308",
|
|
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.308",
|
|
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",
|