pi-harness-runtime 1.1.310 → 1.1.312

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.
Files changed (101) hide show
  1. package/index.ts +84 -77
  2. package/package.json +1 -1
  3. package/packages/a2a-adapter/package.json +1 -1
  4. package/packages/agent-policy/package.json +1 -1
  5. package/packages/architecture-generator/package.json +1 -1
  6. package/packages/auth/package.json +1 -1
  7. package/packages/autonomous-refactor/package.json +1 -1
  8. package/packages/autonomous-runtime/package.json +1 -1
  9. package/packages/cache-strategy/package.json +1 -1
  10. package/packages/capability-registry/package.json +1 -1
  11. package/packages/checkpoint/package.json +1 -1
  12. package/packages/cli-plugin-sdk/package.json +1 -1
  13. package/packages/clipboard/package.json +1 -1
  14. package/packages/clipboard-plugin/package.json +1 -1
  15. package/packages/code-generation/package.json +1 -1
  16. package/packages/code-review/package.json +1 -1
  17. package/packages/codex-adapter/package.json +1 -1
  18. package/packages/codex-watcher/package.json +1 -1
  19. package/packages/config-capture/package.json +1 -1
  20. package/packages/context-compiler/package.json +1 -1
  21. package/packages/context-discovery/package.json +1 -1
  22. package/packages/context-manager/package.json +1 -1
  23. package/packages/cookie-sanitizer/package.json +1 -1
  24. package/packages/cost-optimizer/package.json +1 -1
  25. package/packages/dependency-analyzer/package.json +1 -1
  26. package/packages/django-plugin/package.json +1 -1
  27. package/packages/doc-generator/package.json +1 -1
  28. package/packages/e2e-tester/package.json +1 -1
  29. package/packages/evaluation-engine/package.json +1 -1
  30. package/packages/evaluation-runner/package.json +1 -1
  31. package/packages/event-bus/package.json +1 -1
  32. package/packages/event-store/package.json +1 -1
  33. package/packages/experience-replay/package.json +1 -1
  34. package/packages/feedback-collector/package.json +1 -1
  35. package/packages/file-copy-helper/package.json +1 -1
  36. package/packages/framework-detector/package.json +1 -1
  37. package/packages/framework-plugin-sdk/package.json +1 -1
  38. package/packages/frappe-plugin/package.json +1 -1
  39. package/packages/generic-web-plugin/package.json +1 -1
  40. package/packages/health-monitor/package.json +1 -1
  41. package/packages/intent-analyzer/package.json +1 -1
  42. package/packages/jev-judge/package.json +1 -1
  43. package/packages/knowledge-graph/package.json +1 -1
  44. package/packages/knowledge-retrieval/package.json +1 -1
  45. package/packages/laravel-plugin/package.json +1 -1
  46. package/packages/learning-engine/package.json +1 -1
  47. package/packages/mcp-adapter/package.json +1 -1
  48. package/packages/memory-engine/package.json +1 -1
  49. package/packages/milestone-manager/package.json +1 -1
  50. package/packages/model-registry/package.json +1 -1
  51. package/packages/nextjs-plugin/package.json +1 -1
  52. package/packages/notification/package.json +1 -1
  53. package/packages/observability/package.json +1 -1
  54. package/packages/okf-indexer/package.json +1 -1
  55. package/packages/paperclip-integration/package.json +1 -1
  56. package/packages/performance-optimizer/package.json +1 -1
  57. package/packages/privilege-broker/package.json +1 -1
  58. package/packages/project-analyzer/package.json +1 -1
  59. package/packages/project-bootstrap/package.json +1 -1
  60. package/packages/projection-engine/package.json +1 -1
  61. package/packages/prompt-compiler/package.json +1 -1
  62. package/packages/prompt-versioning/package.json +1 -1
  63. package/packages/provider-adapter-sdk/package.json +1 -1
  64. package/packages/provider-router/package.json +1 -1
  65. package/packages/provider-selector/package.json +1 -1
  66. package/packages/providers/package.json +1 -1
  67. package/packages/qdrant-skills/package.json +1 -1
  68. package/packages/quota-manager/package.json +1 -1
  69. package/packages/rate-limiter/package.json +1 -1
  70. package/packages/react-vite-plugin/package.json +1 -1
  71. package/packages/release-manager/package.json +1 -1
  72. package/packages/requirement-compiler/package.json +1 -1
  73. package/packages/runtime/package.json +1 -1
  74. package/packages/scheduler/package.json +1 -1
  75. package/packages/scheduler-adapter/package.json +1 -1
  76. package/packages/session/package.json +1 -1
  77. package/packages/session-api/package.json +1 -1
  78. package/packages/session-export/package.json +1 -1
  79. package/packages/shared-context/package.json +1 -1
  80. package/packages/skill-mcp-client/package.json +1 -1
  81. package/packages/skill-registry/package.json +1 -1
  82. package/packages/skills/package.json +1 -1
  83. package/packages/sprint-planner/package.json +1 -1
  84. package/packages/subscription-engine/package.json +1 -1
  85. package/packages/task-compiler/package.json +1 -1
  86. package/packages/telegram/package.json +1 -1
  87. package/packages/tencentdb-memory/package.json +1 -1
  88. package/packages/tencentdb-sync/package.json +1 -1
  89. package/packages/test-data-generator/package.json +1 -1
  90. package/packages/test-generator/package.json +1 -1
  91. package/packages/todo-bd-sync/package.json +1 -1
  92. package/packages/token-estimation/package.json +1 -1
  93. package/packages/token-optimizer/package.json +1 -1
  94. package/packages/trajectory/package.json +1 -1
  95. package/packages/tui/package.json +1 -1
  96. package/packages/types/package.json +1 -1
  97. package/packages/webmcp-tester/package.json +1 -1
  98. package/packages/workflow-events/package.json +1 -1
  99. package/packages/workspace-scanner/package.json +1 -1
  100. package/packages/worktree/package.json +1 -1
  101. package/packages/write-review/package.json +1 -1
package/index.ts CHANGED
@@ -408,15 +408,17 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
408
408
  { deliverAs: "followUp" }
409
409
  );
410
410
  codexSessionState.greetedSessions.add(greetKey);
411
- } catch (err) {
412
- logToFile("[codex-greeting]", "Failed to deliver greeting:", String(err));
411
+ } catch (err) {
412
+ logToFile("[codex-greeting]", "Failed to deliver greeting:", String(err));
413
+ // Keep pendingGreeting for retry - don't clear on failure
414
+ return;
415
+ }
416
+ }
417
+ codexSessionState.pendingGreeting = null;
413
418
  }
414
- }
415
- codexSessionState.pendingGreeting = null;
416
419
  }
417
- }
418
- } catch {
419
- logToFile("[codex-greeting]", "Error in session_start greeting drain");
420
+ } catch {
421
+ logToFile("[codex-greeting]", "Error in session_start greeting drain");
420
422
  }
421
423
  });
422
424
 
@@ -2548,22 +2550,15 @@ export default function (pi: ExtensionAPI) {
2548
2550
 
2549
2551
  // --- greeting: Track baseline session on watcher startup ---
2550
2552
  // Get the current Codex session ID as baseline - don't greet it.
2551
- // Only treat it as baseline if it's recent (within 10 minutes) to avoid
2552
- // stale index entries being treated as "current" sessions.
2553
+ // The first watcher poll will see this as "existing" and skip it.
2554
+ // Also track firstPollDone to ensure the first callback is always skipped.
2555
+ let firstPollDone = false;
2553
2556
  try {
2554
2557
  const { getLatestSession } = await import("./packages/codex-watcher/dist/index.js");
2555
2558
  const baseline = getLatestSession();
2556
- if (baseline && baseline.updatedAt) {
2557
- // Parse ISO-8601 timestamp to milliseconds
2558
- const updatedAtMs = Date.parse(baseline.updatedAt);
2559
- const sessionAgeMs = Date.now() - updatedAtMs;
2560
- const isRecent = updatedAtMs > 0 && sessionAgeMs < 10 * 60 * 1000;
2561
- if (isRecent) {
2562
- codexSessionState.greetingBaselineSessionId = baseline.id;
2563
- logToFile("[codex-greeting]", "Baseline session set (recent):", baseline.id, `age=${Math.round(sessionAgeMs/1000)}s`);
2564
- } else {
2565
- logToFile("[codex-greeting]", "Baseline session stale, skipping baseline:", baseline.id, `age=${Math.round(sessionAgeMs/1000)}s`);
2566
- }
2559
+ if (baseline) {
2560
+ codexSessionState.greetingBaselineSessionId = baseline.id;
2561
+ logToFile("[codex-greeting]", "Baseline session set:", baseline.id);
2567
2562
  }
2568
2563
  } catch {
2569
2564
  logToFile("[codex-greeting]", "Could not get baseline session");
@@ -2590,6 +2585,8 @@ export default function (pi: ExtensionAPI) {
2590
2585
  codexSessionState.greetedSessions.add(greetKey);
2591
2586
  } catch (err) {
2592
2587
  logToFile("[codex-greeting]", "Failed to deliver greeting:", String(err));
2588
+ // Keep pendingGreeting for retry - don't clear on failure
2589
+ return;
2593
2590
  }
2594
2591
  }
2595
2592
  codexSessionState.pendingGreeting = null;
@@ -2599,68 +2596,78 @@ export default function (pi: ExtensionAPI) {
2599
2596
  const codexHandle = startWatcher({
2600
2597
  pollIntervalMs: 5000,
2601
2598
  maxIdlePolls: Infinity,
2602
- onSessionChange: (session) => {
2603
- if (session) {
2604
- logToFile("[codex]", `Session started: ${session.threadName}, root: ${session.projectRoot}`);
2605
-
2606
- // --- Same-workspace greeting ---
2607
- const codexSessionId = session.id;
2608
- const codexProjectRoot = session.projectRoot;
2609
-
2610
- // Skip if this is the baseline session (Pi just restarted)
2599
+ onSessionChange: async (session) => {
2600
+ if (session) {
2601
+ logToFile("[codex]", `Session started: ${session.threadName}, root: ${session.projectRoot}`);
2602
+
2603
+ // Update session state FIRST - needed for message handler
2604
+ codexSessionState.currentCodexSessionId = session.id;
2605
+ codexSessionState.currentProjectRoot = session.projectRoot;
2606
+ nc("CodexSessionStarted", {
2607
+ requirement: `${session.threadName || "Codex session"} [${session.projectRoot || "unknown"}]`,
2608
+ taskTitle: session.id,
2609
+ });
2610
+
2611
+ // --- Same-workspace greeting ---
2612
+ const codexSessionId = session.id;
2613
+ const codexProjectRoot = session.projectRoot;
2614
+
2615
+ // Skip the first callback only if it matches the baseline
2616
+ if (!firstPollDone) {
2617
+ firstPollDone = true;
2611
2618
  if (codexSessionId === codexSessionState.greetingBaselineSessionId) {
2612
- logToFile("[codex-greeting]", "Skipping baseline session:", codexSessionId);
2613
- } else {
2614
- // Check for duplicate greeting
2615
- const piCwd = _piSessionCwd || "";
2616
- const greetKey = `${piCwd}:${codexSessionId}`;
2617
- if (!codexSessionState.greetedSessions.has(greetKey)) {
2618
- // Check root match
2619
- if (piCwd && codexProjectRoot && piCwd === codexProjectRoot) {
2620
- logToFile("[codex-greeting]", "Same workspace detected:", codexSessionId);
2621
-
2622
- // Use _piSessionCwd (Pi state) to check if Pi is active, not Codex state
2623
- if (piCwd) {
2624
- // Pi session active - send greeting now with await for safe delivery
2625
- logToFile("[codex-greeting]", "Sending greeting for:", codexSessionId);
2626
- try {
2627
- await pi.sendUserMessage(
2628
- `Codex opened in this workspace (session ${codexSessionId.slice(0, 8)}...). Say hello briefly, then wait for the user's next instruction.`,
2629
- { deliverAs: "followUp" }
2630
- );
2631
- codexSessionState.greetedSessions.add(greetKey);
2632
- } catch (err) {
2633
- logToFile("[codex-greeting]", "Failed to deliver greeting:", String(err));
2634
- }
2635
- } else {
2636
- // Pi session not active yet - queue for delivery on session_start
2637
- logToFile("[codex-greeting]", "Pi not active, queueing greeting for:", codexSessionId);
2638
- codexSessionState.pendingGreeting = {
2639
- sessionId: codexSessionId,
2640
- projectRoot: codexProjectRoot,
2641
- timestamp: Date.now(),
2642
- };
2643
- }
2644
- } else {
2645
- logToFile("[codex-greeting]", "Different workspace or Pi cwd unknown, skipping greeting");
2646
- }
2647
- } else {
2648
- logToFile("[codex-greeting]", "Already greeted:", greetKey);
2649
- }
2619
+ logToFile("[codex-greeting]", "Skipping baseline session (first poll):", codexSessionId);
2620
+ return;
2650
2621
  }
2622
+ // First poll was a new session - continue to greeting logic
2623
+ logToFile("[codex-greeting]", "First poll is new session:", codexSessionId);
2624
+ }
2651
2625
 
2652
- codexSessionState.currentCodexSessionId = session.id;
2653
- codexSessionState.currentProjectRoot = session.projectRoot;
2654
- nc("CodexSessionStarted", {
2655
- requirement: `${session.threadName || "Codex session"} [${session.projectRoot || "unknown"}]`,
2656
- taskTitle: session.id,
2657
- });
2626
+ // Check for duplicate greeting
2627
+ const piCwd = _piSessionCwd || "";
2628
+ const greetKey = `${piCwd}:${codexSessionId}`;
2629
+ if (codexSessionState.greetedSessions.has(greetKey)) {
2630
+ logToFile("[codex-greeting]", "Already greeted:", greetKey);
2631
+ return;
2632
+ }
2633
+
2634
+ // Check root match
2635
+ if (!piCwd || !codexProjectRoot || piCwd !== codexProjectRoot) {
2636
+ logToFile("[codex-greeting]", "Different workspace or Pi cwd unknown, skipping greeting");
2637
+ return;
2638
+ }
2639
+
2640
+ logToFile("[codex-greeting]", "Same workspace detected:", codexSessionId);
2641
+
2642
+ // Use _piSessionCwd (Pi state) to check if Pi is active
2643
+ if (piCwd) {
2644
+ // Pi session active - send greeting now with await for safe delivery
2645
+ logToFile("[codex-greeting]", "Sending greeting for:", codexSessionId);
2646
+ try {
2647
+ await pi.sendUserMessage(
2648
+ `Codex opened in this workspace (session ${codexSessionId.slice(0, 8)}...). Say hello briefly, then wait for the user's next instruction.`,
2649
+ { deliverAs: "followUp" }
2650
+ );
2651
+ codexSessionState.greetedSessions.add(greetKey);
2652
+ } catch (err) {
2653
+ logToFile("[codex-greeting]", "Failed to deliver greeting:", String(err));
2654
+ // Keep greetKey out of greetedSessions so retry is possible
2655
+ }
2658
2656
  } else {
2659
- codexSessionState.currentCodexSessionId = null;
2660
- codexSessionState.currentProjectRoot = null;
2661
- codexSessionState.currentPlanCandidate = null;
2657
+ // Pi session not active yet - queue for delivery on session_start
2658
+ logToFile("[codex-greeting]", "Pi not active, queueing greeting for:", codexSessionId);
2659
+ codexSessionState.pendingGreeting = {
2660
+ sessionId: codexSessionId,
2661
+ projectRoot: codexProjectRoot,
2662
+ timestamp: Date.now(),
2663
+ };
2662
2664
  }
2663
- },
2665
+ } else {
2666
+ codexSessionState.currentCodexSessionId = null;
2667
+ codexSessionState.currentProjectRoot = null;
2668
+ codexSessionState.currentPlanCandidate = null;
2669
+ }
2670
+ },
2664
2671
  onMessages: (msgs) => {
2665
2672
  if (!codexSessionState.currentCodexSessionId) return;
2666
2673
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-harness-runtime",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "[BETA] Codex-style /usage status + autonomous coding harness for pi. Not production ready — expect breaking changes.",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/a2a-adapter",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "description": "Google Agent-to-Agent (A2A) protocol adapter for pi-harness",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/agent-policy",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Agent policy runtime for pi-harness - enforces mandatory rule delivery and mutation gating",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/architecture-generator",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Generate ADR and Mermaid diagrams from project analysis",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/auth",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "pi-harness-runtime — auth",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/autonomous-refactor",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "description": "Autonomous refactoring engine",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/autonomous-runtime",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Autonomous Operations Runtime — task inbox, lease management, and worker lifecycle (RFC-0101)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/cache-strategy",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "description": "Smart caching with TTL and invalidation strategies (RFC-0022)",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/capability-registry",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
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/checkpoint",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Enhanced checkpoint system with incremental snapshots, diff-based storage, and recovery strategies",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/cli-plugin-sdk",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "description": "CLI Plugin SDK for pi-harness — install, list, remove, update, invoke plugins",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/clipboard",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/clipboard-plugin",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/code-generation",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Code generation pipeline for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/code-review",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Automated code review engine for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/codex-adapter",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "description": "OpenAI Codex provider adapter for pi-harness",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/codex-watcher",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Watches Codex CLI sessions and emits visible messages for PING-PONG monitoring",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moocoding/config-capture",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Auto-capture API-fetched configuration values to AGENTS.md",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/context-compiler",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Bounded context selection engine for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/context-discovery",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/context-manager",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Context Window Manager — prevents model context overflow via compaction and resume prompts (RFC-0010)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/cookie-sanitizer",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "pi-harness-runtime — cookie sanitizer (provider-quota cookie file normaliser)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/cost-optimizer",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Cost Optimizer for pi-harness-runtime — budget tracking, forecasting, and model selection optimization",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/dependency-analyzer",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/django-plugin",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Django framework analysis — models, management commands, settings",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/doc-generator",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Auto-Doc Generator — generate documentation from source code (RFC-0014)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/e2e-tester",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "WebMCP-powered E2E testing for pi-harness - natural language test scenarios",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/evaluation-engine",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Evaluation engine for pi-harness runtime (RFC-0057)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/evaluation-runner",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "description": "Framework-agnostic evaluation framework for AI outputs (RFC-0020)",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/event-bus",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/event-store",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/experience-replay",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Experience replay for debugging and reproducibility (RFC-0059)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/feedback-collector",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "description": "Collect and aggregate human/automated feedback (RFC-0021)",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moocoding/file-copy-helper",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Injects cp/sudo cp rule when user asks to mimic/copy files",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/framework-detector",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Framework detection system for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/framework-plugin-sdk",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Framework plugin SDK for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/frappe-plugin",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Frappe/ERPNext framework analysis — DocTypes, hooks, bench sites, site config",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/generic-web-plugin",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Generic web framework analysis — REST/GraphQL endpoints, OpenAPI, auth",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/health-monitor",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "description": "Health monitoring and auto-healing",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/intent-analyzer",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/jev-judge",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Jev Judge - Structured decision model for agent routing, E2E testing, and automated decisions",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/knowledge-graph",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Knowledge Graph extraction and provenance linking for SKILL.md files",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/knowledge-retrieval",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Knowledge retrieval via TencentDB-Agent-Memory MCP (RFC-0105)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/laravel-plugin",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Laravel framework analysis — artisan commands, Eloquent models, Blade",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/learning-engine",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Learning engine for extracting lessons from runtime execution (RFC-0058)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/mcp-adapter",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "type": "module",
5
5
  "description": "MCP server adapter for pi-harness — exposes harness capabilities as MCP tools/resources/prompts (RFC-0068)",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/memory-engine",
3
- "version": "1.1.310",
3
+ "version": "1.1.312",
4
4
  "description": "Memory engine with OKF integration for durable knowledge management (RFC-0060)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",