pi-harness-runtime 1.1.311 → 1.1.313

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 +72 -113
  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
@@ -2551,14 +2551,21 @@ export default function (pi: ExtensionAPI) {
2551
2551
  // --- greeting: Track baseline session on watcher startup ---
2552
2552
  // Get the current Codex session ID as baseline - don't greet it.
2553
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.
2554
+ // Only treat recent sessions (within 10 min) as baseline to avoid stale entries.
2555
2555
  let firstPollDone = false;
2556
2556
  try {
2557
2557
  const { getLatestSession } = await import("./packages/codex-watcher/dist/index.js");
2558
2558
  const baseline = getLatestSession();
2559
- if (baseline) {
2560
- codexSessionState.greetingBaselineSessionId = baseline.id;
2561
- logToFile("[codex-greeting]", "Baseline session set:", baseline.id);
2559
+ if (baseline && baseline.updatedAt) {
2560
+ const updatedAtMs = Date.parse(baseline.updatedAt);
2561
+ const sessionAgeMs = Date.now() - updatedAtMs;
2562
+ const isRecent = updatedAtMs > 0 && sessionAgeMs < 10 * 60 * 1000;
2563
+ if (isRecent) {
2564
+ codexSessionState.greetingBaselineSessionId = baseline.id;
2565
+ logToFile("[codex-greeting]", "Baseline session set (recent):", baseline.id, `age=${Math.round(sessionAgeMs/1000)}s`);
2566
+ } else {
2567
+ logToFile("[codex-greeting]", "Baseline session stale, skipped:", baseline.id, `age=${Math.round(sessionAgeMs/1000)}s`);
2568
+ }
2562
2569
  }
2563
2570
  } catch {
2564
2571
  logToFile("[codex-greeting]", "Could not get baseline session");
@@ -2596,126 +2603,78 @@ export default function (pi: ExtensionAPI) {
2596
2603
  const codexHandle = startWatcher({
2597
2604
  pollIntervalMs: 5000,
2598
2605
  maxIdlePolls: Infinity,
2599
- onSessionChange: async (session) => {
2600
- if (session) {
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
- }
2606
+ onSessionChange: async (session) => {
2607
+ if (session) {
2608
+ logToFile("[codex]", `Session started: ${session.threadName}, root: ${session.projectRoot}`);
2609
+
2610
+ // Update session state FIRST - needed for message handler
2611
+ codexSessionState.currentCodexSessionId = session.id;
2612
+ codexSessionState.currentProjectRoot = session.projectRoot;
2613
+ nc("CodexSessionStarted", {
2614
+ requirement: `${session.threadName || "Codex session"} [${session.projectRoot || "unknown"}]`,
2615
+ taskTitle: session.id,
2616
+ });
2619
2617
 
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
- }
2618
+ // --- Same-workspace greeting ---
2619
+ const codexSessionId = session.id;
2620
+ const codexProjectRoot = session.projectRoot;
2627
2621
 
2628
- // Check root match
2629
- if (!piCwd || !codexProjectRoot || piCwd !== codexProjectRoot) {
2630
- logToFile("[codex-greeting]", "Different workspace or Pi cwd unknown, skipping greeting");
2622
+ // Skip the first callback only if it matches the baseline
2623
+ if (!firstPollDone) {
2624
+ firstPollDone = true;
2625
+ if (codexSessionId === codexSessionState.greetingBaselineSessionId) {
2626
+ logToFile("[codex-greeting]", "Skipping baseline session (first poll):", codexSessionId);
2631
2627
  return;
2632
2628
  }
2629
+ // First poll was a new session - continue to greeting logic
2630
+ logToFile("[codex-greeting]", "First poll is new session:", codexSessionId);
2631
+ }
2633
2632
 
2634
- logToFile("[codex-greeting]", "Same workspace detected:", codexSessionId);
2633
+ // Check for duplicate greeting
2634
+ const piCwd = _piSessionCwd || "";
2635
+ const greetKey = `${piCwd}:${codexSessionId}`;
2636
+ if (codexSessionState.greetedSessions.has(greetKey)) {
2637
+ logToFile("[codex-greeting]", "Already greeted:", greetKey);
2638
+ return;
2639
+ }
2635
2640
 
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
- }
2641
+ // Check root match
2642
+ if (!piCwd || !codexProjectRoot || piCwd !== codexProjectRoot) {
2643
+ logToFile("[codex-greeting]", "Different workspace or Pi cwd unknown, skipping greeting");
2659
2644
  return;
2660
-
2661
- // --- Same-workspace greeting ---
2662
- const codexSessionId = session.id;
2663
- const codexProjectRoot = session.projectRoot;
2645
+ }
2664
2646
 
2665
- // Skip if this is the baseline session (Pi just restarted)
2666
- if (codexSessionId === codexSessionState.greetingBaselineSessionId) {
2667
- logToFile("[codex-greeting]", "Skipping baseline session:", codexSessionId);
2668
- } else {
2669
- // Check for duplicate greeting
2670
- const piCwd = _piSessionCwd || "";
2671
- const greetKey = `${piCwd}:${codexSessionId}`;
2672
- if (!codexSessionState.greetedSessions.has(greetKey)) {
2673
- // Check root match
2674
- if (piCwd && codexProjectRoot && piCwd === codexProjectRoot) {
2675
- logToFile("[codex-greeting]", "Same workspace detected:", codexSessionId);
2676
-
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
- };
2698
- }
2699
- } else {
2700
- logToFile("[codex-greeting]", "Different workspace or Pi cwd unknown, skipping greeting");
2701
- }
2702
- } else {
2703
- logToFile("[codex-greeting]", "Already greeted:", greetKey);
2704
- }
2705
- }
2647
+ logToFile("[codex-greeting]", "Same workspace detected:", codexSessionId);
2706
2648
 
2707
- codexSessionState.currentCodexSessionId = session.id;
2708
- codexSessionState.currentProjectRoot = session.projectRoot;
2709
- nc("CodexSessionStarted", {
2710
- requirement: `${session.threadName || "Codex session"} [${session.projectRoot || "unknown"}]`,
2711
- taskTitle: session.id,
2712
- });
2649
+ // Use _piSessionCwd (Pi state) to check if Pi is active
2650
+ if (piCwd) {
2651
+ // Pi session active - send greeting now with await for safe delivery
2652
+ logToFile("[codex-greeting]", "Sending greeting for:", codexSessionId);
2653
+ try {
2654
+ await pi.sendUserMessage(
2655
+ `Codex opened in this workspace (session ${codexSessionId.slice(0, 8)}...). Say hello briefly, then wait for the user's next instruction.`,
2656
+ { deliverAs: "followUp" }
2657
+ );
2658
+ codexSessionState.greetedSessions.add(greetKey);
2659
+ } catch (err) {
2660
+ logToFile("[codex-greeting]", "Failed to deliver greeting:", String(err));
2661
+ // Keep greetKey out of greetedSessions so retry is possible
2662
+ }
2713
2663
  } else {
2714
- codexSessionState.currentCodexSessionId = null;
2715
- codexSessionState.currentProjectRoot = null;
2716
- codexSessionState.currentPlanCandidate = null;
2664
+ // Pi session not active yet - queue for delivery on session_start
2665
+ logToFile("[codex-greeting]", "Pi not active, queueing greeting for:", codexSessionId);
2666
+ codexSessionState.pendingGreeting = {
2667
+ sessionId: codexSessionId,
2668
+ projectRoot: codexProjectRoot,
2669
+ timestamp: Date.now(),
2670
+ };
2717
2671
  }
2718
- },
2672
+ } else {
2673
+ codexSessionState.currentCodexSessionId = null;
2674
+ codexSessionState.currentProjectRoot = null;
2675
+ codexSessionState.currentPlanCandidate = null;
2676
+ }
2677
+ },
2719
2678
  onMessages: (msgs) => {
2720
2679
  if (!codexSessionState.currentCodexSessionId) return;
2721
2680
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-harness-runtime",
3
- "version": "1.1.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
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.311",
3
+ "version": "1.1.313",
4
4
  "description": "Learning engine for extracting lessons from runtime execution (RFC-0058)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",