pi-harness-runtime 1.1.309 → 1.1.311

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 +119 -33
  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
@@ -385,12 +385,40 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
385
385
  const _SETTLE_DELAY_MS = 5000; // Wait 5 seconds after plan ready
386
386
 
387
387
  // Capture our Pi session's cwd on session_start
388
- pi.on("session_start", () => {
388
+ pi.on("session_start", async () => {
389
389
  try {
390
390
  _piSessionCwd = realpathSync(process.cwd());
391
391
  logToFile("[codex-trigger]", "Pi session cwd captured:", _piSessionCwd);
392
- } catch {
393
- _piSessionCwd = process.cwd();
392
+
393
+ // --- Drain pending greeting when Pi becomes active ---
394
+ if (codexSessionState.pendingGreeting) {
395
+ const pg = codexSessionState.pendingGreeting;
396
+ // Check expiry (5 minutes)
397
+ if (Date.now() - pg.timestamp > 5 * 60 * 1000) {
398
+ logToFile("[codex-greeting]", "Pending greeting expired");
399
+ codexSessionState.pendingGreeting = null;
400
+ } else if (_piSessionCwd === pg.projectRoot) {
401
+ // Roots match - send greeting with followUp mode
402
+ const greetKey = `${_piSessionCwd}:${pg.sessionId}`;
403
+ if (!codexSessionState.greetedSessions.has(greetKey)) {
404
+ logToFile("[codex-greeting]", "Delivering pending greeting for:", pg.sessionId);
405
+ try {
406
+ await pi.sendUserMessage(
407
+ `Codex opened in this workspace (session ${pg.sessionId.slice(0, 8)}...). Say hello briefly, then wait for the user's next instruction.`,
408
+ { deliverAs: "followUp" }
409
+ );
410
+ codexSessionState.greetedSessions.add(greetKey);
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;
418
+ }
419
+ }
420
+ } catch {
421
+ logToFile("[codex-greeting]", "Error in session_start greeting drain");
394
422
  }
395
423
  });
396
424
 
@@ -2522,22 +2550,15 @@ export default function (pi: ExtensionAPI) {
2522
2550
 
2523
2551
  // --- greeting: Track baseline session on watcher startup ---
2524
2552
  // 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.
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;
2527
2556
  try {
2528
2557
  const { getLatestSession } = await import("./packages/codex-watcher/dist/index.js");
2529
2558
  const baseline = getLatestSession();
2530
- if (baseline && baseline.updatedAt) {
2531
- // Parse ISO-8601 timestamp to milliseconds
2532
- const updatedAtMs = Date.parse(baseline.updatedAt);
2533
- const sessionAgeMs = Date.now() - updatedAtMs;
2534
- const isRecent = updatedAtMs > 0 && sessionAgeMs < 10 * 60 * 1000;
2535
- if (isRecent) {
2536
- codexSessionState.greetingBaselineSessionId = baseline.id;
2537
- logToFile("[codex-greeting]", "Baseline session set (recent):", baseline.id, `age=${Math.round(sessionAgeMs/1000)}s`);
2538
- } else {
2539
- logToFile("[codex-greeting]", "Baseline session stale, skipping baseline:", baseline.id, `age=${Math.round(sessionAgeMs/1000)}s`);
2540
- }
2559
+ if (baseline) {
2560
+ codexSessionState.greetingBaselineSessionId = baseline.id;
2561
+ logToFile("[codex-greeting]", "Baseline session set:", baseline.id);
2541
2562
  }
2542
2563
  } catch {
2543
2564
  logToFile("[codex-greeting]", "Could not get baseline session");
@@ -2564,6 +2585,8 @@ export default function (pi: ExtensionAPI) {
2564
2585
  codexSessionState.greetedSessions.add(greetKey);
2565
2586
  } catch (err) {
2566
2587
  logToFile("[codex-greeting]", "Failed to deliver greeting:", String(err));
2588
+ // Keep pendingGreeting for retry - don't clear on failure
2589
+ return;
2567
2590
  }
2568
2591
  }
2569
2592
  codexSessionState.pendingGreeting = null;
@@ -2573,9 +2596,67 @@ export default function (pi: ExtensionAPI) {
2573
2596
  const codexHandle = startWatcher({
2574
2597
  pollIntervalMs: 5000,
2575
2598
  maxIdlePolls: Infinity,
2576
- onSessionChange: (session) => {
2599
+ onSessionChange: async (session) => {
2577
2600
  if (session) {
2578
2601
  logToFile("[codex]", `Session started: ${session.threadName}, root: ${session.projectRoot}`);
2602
+
2603
+ // --- Same-workspace greeting ---
2604
+ const codexSessionId = session.id;
2605
+ const codexProjectRoot = session.projectRoot;
2606
+
2607
+ // Skip the first callback - it's the baseline poll, not a new session
2608
+ if (!firstPollDone) {
2609
+ firstPollDone = true;
2610
+ logToFile("[codex-greeting]", "Skipping first poll callback (baseline):", codexSessionId);
2611
+ return;
2612
+ }
2613
+
2614
+ // Skip if this is the baseline session (Pi just restarted)
2615
+ if (codexSessionId === codexSessionState.greetingBaselineSessionId) {
2616
+ logToFile("[codex-greeting]", "Skipping baseline session:", codexSessionId);
2617
+ return;
2618
+ }
2619
+
2620
+ // Check for duplicate greeting
2621
+ const piCwd = _piSessionCwd || "";
2622
+ const greetKey = `${piCwd}:${codexSessionId}`;
2623
+ if (codexSessionState.greetedSessions.has(greetKey)) {
2624
+ logToFile("[codex-greeting]", "Already greeted:", greetKey);
2625
+ return;
2626
+ }
2627
+
2628
+ // Check root match
2629
+ if (!piCwd || !codexProjectRoot || piCwd !== codexProjectRoot) {
2630
+ logToFile("[codex-greeting]", "Different workspace or Pi cwd unknown, skipping greeting");
2631
+ return;
2632
+ }
2633
+
2634
+ logToFile("[codex-greeting]", "Same workspace detected:", codexSessionId);
2635
+
2636
+ // Use _piSessionCwd (Pi state) to check if Pi is active
2637
+ if (piCwd) {
2638
+ // Pi session active - send greeting now with await for safe delivery
2639
+ logToFile("[codex-greeting]", "Sending greeting for:", codexSessionId);
2640
+ try {
2641
+ await pi.sendUserMessage(
2642
+ `Codex opened in this workspace (session ${codexSessionId.slice(0, 8)}...). Say hello briefly, then wait for the user's next instruction.`,
2643
+ { deliverAs: "followUp" }
2644
+ );
2645
+ codexSessionState.greetedSessions.add(greetKey);
2646
+ } catch (err) {
2647
+ logToFile("[codex-greeting]", "Failed to deliver greeting:", String(err));
2648
+ // Keep greetKey out of greetedSessions so retry is possible
2649
+ }
2650
+ } else {
2651
+ // Pi session not active yet - queue for delivery on session_start
2652
+ logToFile("[codex-greeting]", "Pi not active, queueing greeting for:", codexSessionId);
2653
+ codexSessionState.pendingGreeting = {
2654
+ sessionId: codexSessionId,
2655
+ projectRoot: codexProjectRoot,
2656
+ timestamp: Date.now(),
2657
+ };
2658
+ }
2659
+ return;
2579
2660
 
2580
2661
  // --- Same-workspace greeting ---
2581
2662
  const codexSessionId = session.id;
@@ -2593,22 +2674,27 @@ export default function (pi: ExtensionAPI) {
2593
2674
  if (piCwd && codexProjectRoot && piCwd === codexProjectRoot) {
2594
2675
  logToFile("[codex-greeting]", "Same workspace detected:", codexSessionId);
2595
2676
 
2596
- if (codexSessionState.currentCodexSessionId) {
2597
- // Pi session active - send greeting now
2598
- logToFile("[codex-greeting]", "Sending greeting for:", codexSessionId);
2599
- void pi.sendUserMessage(
2600
- `Codex opened in this workspace (session ${codexSessionId.slice(0, 8)}...). Say hello briefly, then wait for the user's next instruction.`,
2601
- { deliverAs: "followUp" }
2602
- );
2603
- codexSessionState.greetedSessions.add(greetKey);
2604
- } else {
2605
- // Pi session not active yet - queue for delivery on session_start
2606
- logToFile("[codex-greeting]", "Pi not active, queueing greeting for:", codexSessionId);
2607
- codexSessionState.pendingGreeting = {
2608
- sessionId: codexSessionId,
2609
- projectRoot: codexProjectRoot,
2610
- timestamp: Date.now(),
2611
- };
2677
+ // Use _piSessionCwd (Pi state) to check if Pi is active, not Codex state
2678
+ if (piCwd) {
2679
+ // Pi session active - send greeting now with await for safe delivery
2680
+ logToFile("[codex-greeting]", "Sending greeting for:", codexSessionId);
2681
+ try {
2682
+ await pi.sendUserMessage(
2683
+ `Codex opened in this workspace (session ${codexSessionId.slice(0, 8)}...). Say hello briefly, then wait for the user's next instruction.`,
2684
+ { deliverAs: "followUp" }
2685
+ );
2686
+ codexSessionState.greetedSessions.add(greetKey);
2687
+ } catch (err) {
2688
+ logToFile("[codex-greeting]", "Failed to deliver greeting:", String(err));
2689
+ }
2690
+ } else {
2691
+ // Pi session not active yet - queue for delivery on session_start
2692
+ logToFile("[codex-greeting]", "Pi not active, queueing greeting for:", codexSessionId);
2693
+ codexSessionState.pendingGreeting = {
2694
+ sessionId: codexSessionId,
2695
+ projectRoot: codexProjectRoot,
2696
+ timestamp: Date.now(),
2697
+ };
2612
2698
  }
2613
2699
  } else {
2614
2700
  logToFile("[codex-greeting]", "Different workspace or Pi cwd unknown, skipping greeting");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-harness-runtime",
3
- "version": "1.1.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
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.309",
3
+ "version": "1.1.311",
4
4
  "description": "Memory engine with OKF integration for durable knowledge management (RFC-0060)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",