pi-harness-runtime 1.1.346 → 1.1.348

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 (125) hide show
  1. package/index.ts +71 -75
  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/connection-runtime/package.json +1 -1
  21. package/packages/context-compiler/package.json +1 -1
  22. package/packages/context-discovery/package.json +1 -1
  23. package/packages/context-manager/package.json +1 -1
  24. package/packages/contracts/package.json +1 -1
  25. package/packages/cookie-sanitizer/package.json +1 -1
  26. package/packages/cost-optimizer/package.json +1 -1
  27. package/packages/dependency-analyzer/package.json +1 -1
  28. package/packages/django-plugin/package.json +1 -1
  29. package/packages/doc-generator/package.json +1 -1
  30. package/packages/durable-review/package.json +1 -1
  31. package/packages/e2e-tester/package.json +1 -1
  32. package/packages/evaluation-engine/package.json +1 -1
  33. package/packages/evaluation-runner/package.json +1 -1
  34. package/packages/event-bus/package.json +1 -1
  35. package/packages/event-sink/package.json +1 -1
  36. package/packages/event-store/package.json +1 -1
  37. package/packages/experience-replay/package.json +1 -1
  38. package/packages/feedback-collector/package.json +1 -1
  39. package/packages/file-copy-helper/package.json +1 -1
  40. package/packages/framework-detector/package.json +1 -1
  41. package/packages/framework-plugin-sdk/package.json +1 -1
  42. package/packages/frappe-plugin/package.json +1 -1
  43. package/packages/generic-web-plugin/package.json +1 -1
  44. package/packages/health-monitor/package.json +1 -1
  45. package/packages/intent-analyzer/package.json +1 -1
  46. package/packages/jev-judge/package.json +1 -1
  47. package/packages/knowledge-graph/package.json +1 -1
  48. package/packages/knowledge-retrieval/package.json +1 -1
  49. package/packages/laravel-plugin/package.json +1 -1
  50. package/packages/learning-engine/package.json +1 -1
  51. package/packages/mcp-adapter/package.json +1 -1
  52. package/packages/memory-engine/package.json +1 -1
  53. package/packages/milestone-manager/package.json +1 -1
  54. package/packages/model-registry/package.json +1 -1
  55. package/packages/nextjs-plugin/package.json +1 -1
  56. package/packages/notification/dist/index.d.ts +1 -0
  57. package/packages/notification/dist/index.d.ts.map +1 -1
  58. package/packages/notification/dist/index.js +1 -0
  59. package/packages/notification/dist/index.js.map +1 -1
  60. package/packages/notification/dist/notification-center.d.ts +13 -0
  61. package/packages/notification/dist/notification-center.d.ts.map +1 -1
  62. package/packages/notification/dist/notification-center.js +91 -1
  63. package/packages/notification/dist/notification-center.js.map +1 -1
  64. package/packages/notification/dist/pending-question.d.ts +198 -0
  65. package/packages/notification/dist/pending-question.d.ts.map +1 -0
  66. package/packages/notification/dist/pending-question.js +410 -0
  67. package/packages/notification/dist/pending-question.js.map +1 -0
  68. package/packages/notification/package.json +1 -1
  69. package/packages/notification/src/index.ts +1 -0
  70. package/packages/notification/src/notification-center.ts +92 -1
  71. package/packages/notification/src/pending-question.ts +594 -0
  72. package/packages/notification/test/pending-question.test.ts +331 -0
  73. package/packages/observability/package.json +1 -1
  74. package/packages/okf-indexer/package.json +1 -1
  75. package/packages/paperclip-integration/package.json +1 -1
  76. package/packages/performance-optimizer/package.json +1 -1
  77. package/packages/permission-mode/package.json +1 -1
  78. package/packages/privilege-broker/package.json +1 -1
  79. package/packages/project-analyzer/package.json +1 -1
  80. package/packages/project-bootstrap/package.json +1 -1
  81. package/packages/projection-engine/package.json +1 -1
  82. package/packages/prompt-compiler/package.json +1 -1
  83. package/packages/prompt-versioning/package.json +1 -1
  84. package/packages/provider-adapter-sdk/package.json +1 -1
  85. package/packages/provider-router/package.json +1 -1
  86. package/packages/provider-selector/package.json +1 -1
  87. package/packages/providers/package.json +1 -1
  88. package/packages/qdrant-skills/package.json +1 -1
  89. package/packages/quota-manager/package.json +1 -1
  90. package/packages/rate-limiter/package.json +1 -1
  91. package/packages/react-vite-plugin/package.json +1 -1
  92. package/packages/relay/package.json +1 -1
  93. package/packages/release-manager/package.json +1 -1
  94. package/packages/requirement-compiler/package.json +1 -1
  95. package/packages/runtime/package.json +1 -1
  96. package/packages/scheduler/package.json +1 -1
  97. package/packages/scheduler-adapter/package.json +1 -1
  98. package/packages/session/package.json +1 -1
  99. package/packages/session-api/package.json +1 -1
  100. package/packages/session-export/package.json +1 -1
  101. package/packages/shared-context/package.json +1 -1
  102. package/packages/skill-mcp-client/package.json +1 -1
  103. package/packages/skill-registry/package.json +1 -1
  104. package/packages/skills/package.json +1 -1
  105. package/packages/sprint-planner/package.json +1 -1
  106. package/packages/subscription-engine/package.json +1 -1
  107. package/packages/task-compiler/package.json +1 -1
  108. package/packages/telegram/package.json +1 -1
  109. package/packages/tencentdb-memory/package.json +1 -1
  110. package/packages/tencentdb-sync/package.json +1 -1
  111. package/packages/test-data-generator/package.json +1 -1
  112. package/packages/test-generator/package.json +1 -1
  113. package/packages/todo-bd-sync/package.json +1 -1
  114. package/packages/token-estimation/package.json +1 -1
  115. package/packages/token-optimizer/package.json +1 -1
  116. package/packages/trajectory/package.json +1 -1
  117. package/packages/tui/package.json +1 -1
  118. package/packages/types/package.json +1 -1
  119. package/packages/voice-api/package.json +1 -1
  120. package/packages/webmcp-tester/package.json +1 -1
  121. package/packages/wiki/package.json +1 -1
  122. package/packages/workflow-events/package.json +1 -1
  123. package/packages/workspace-scanner/package.json +1 -1
  124. package/packages/worktree/package.json +1 -1
  125. package/packages/write-review/package.json +1 -1
package/index.ts CHANGED
@@ -168,6 +168,8 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
168
168
  readFileSync(`${keysDir}/jev-api-key.txt`, "utf8").trim();
169
169
 
170
170
  const mod = await import("./packages/jev-judge/src/auto-continue.js");
171
+ const { createPendingQuestionController } = await import("./packages/notification/dist/index.js");
172
+ const pqController = createPendingQuestionController();
171
173
 
172
174
  // Track waiting state
173
175
  let waitingForUserSince: Date | null = null;
@@ -176,6 +178,7 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
176
178
  let _inferenceInProgress = false; // Track for overlap prevention
177
179
  let _sessionId = Date.now().toString(36); // Track session for cancellation
178
180
  let _lastNotifiedQuestion = ""; // Track last question to prevent repeat notifications
181
+ let _completedNotifiedFor: string | null = null; // Track completion notification deduplication
179
182
 
180
183
  // UI status for auto-continue (captured from session_start ctx)
181
184
  let _setAutoContinueStatus: ((text: string | undefined) => void) | null = null;
@@ -271,50 +274,20 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
271
274
  }
272
275
 
273
276
  // Detect actual confirmation requests (questions, not progress statements)
274
- // Must be a question ending with ? AND contain both a request word AND user intent
277
+ // Uses the pending question controller for detection with expanded patterns
275
278
  function detectConfirmationRequest(text: string): string | null {
276
- // Find questions ending with ? and check each
277
- // Use regex to match question sentences (ending with ?)
278
- const questionPattern = /([^?]*\?)/g;
279
- const matches = text.matchAll(questionPattern);
280
-
281
- for (const match of matches) {
282
- const sentence = match[1].trim();
283
- const lower = sentence.toLowerCase();
284
-
285
- // Must contain request words AND user intent words
286
- const hasRequest = /\b(continue|proceed|next|wait|pause|stop|hold|resume|repeat|rephrase|clarify|explain)\b/i.test(lower);
287
- const hasUserIntent = /\b(should|would|could|shall|may i|do you|would you|should i|could we|can i|can we|would like)\b/i.test(lower);
288
-
289
- if (hasRequest && hasUserIntent) {
290
- // Return the question for deduplication (with the ? preserved)
291
- return sentence;
292
- }
279
+ const result = pqController.detectQuestion(text);
280
+ if (result.detected && result.questionText) {
281
+ return result.questionText;
293
282
  }
294
-
295
283
  return null;
296
284
  }
297
285
 
298
286
  // Detect routine continuation questions ("Should I continue?")
299
287
  // These should NOT block immediate continuation - let Jev/todo controller decide
300
288
  function isRoutineContinuation(question: string): boolean {
301
- const lower = question.toLowerCase();
302
- // Match ALL routine continuation patterns
303
- const routinePatterns = [
304
- /\b(should i|should we|should the|can i continue|can we continue)\b/,
305
- /\b(would you like me to continue|shall i proceed)\b/,
306
- /\b(can i proceed|may i continue)\b/,
307
- /\b(continue|proceed)\s*(with|to|on|with the next|to the next)\b/,
308
- /\bshall\s+(i|we)\s+(proceed|continue)\b/,
309
- /\bshould\s+(i|we)\s+(continue|proceed|move on)\b/,
310
- /\b(continue|proceed)\s+\?/,
311
- ];
312
- for (const pattern of routinePatterns) {
313
- if (pattern.test(lower)) {
314
- return true;
315
- }
316
- }
317
- return false;
289
+ const result = pqController.detectQuestion(question);
290
+ return result.isRoutine ?? false;
318
291
  }
319
292
 
320
293
  // Detect when agent asks for continuation
@@ -792,26 +765,50 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
792
765
  if (result.action === "blocked") {
793
766
  updateAutoContinueStatus("ERROR", "blocked");
794
767
  logToFile("[auto-continue]", "Tasks blocked:", result.question ?? "unknown");
795
- } else if (result.action === "stop") {
796
- logToFile("[auto-continue]", "decide returned stop:", result.reason ?? "unknown");
797
- // Get full todo list for notification
798
- const snapshot = await todoContinuationController.getSnapshot();
799
- const todoList = snapshot.items
800
- .map((item) => {
801
- const status = item.status === "completed" ? "[DONE]" : "[PENDING]";
802
- const subject = item.subject.length > 50 ? item.subject.slice(0, 47) + "..." : item.subject;
803
- return `${status} ${subject}`;
804
- })
805
- .join("\n");
806
- const message = todoList || "All tasks completed";
807
- // Notify user that all work is complete with todo list
808
- _nc?.notify("ReadyForClient", {
809
- jobId: `done-${Date.now()}`,
810
- requirement: message,
811
- }).catch((e) => logToFile("[Notification]", "ReadyForClient failed:", String(e)));
768
+ } else if (result.action === "stop") {
769
+ const reason = result.reason ?? "unknown";
770
+ logToFile("[auto-continue]", "decide returned stop:", reason);
771
+
772
+ // Only send completion notification for "No pending tasks"
773
+ // Other stop reasons (paused, unavailable, max attempts) are not completion
774
+ const isNoPendingTasks = reason === "No pending tasks";
775
+
776
+ if (isNoPendingTasks) {
777
+ // Check if there's a pending question - suppress completion if so
778
+ if (pqController.hasPendingQuestion()) {
779
+ logToFile("[auto-continue]", "Suppressing completion - pending question exists");
780
+ updateAutoContinueStatus("WAITING", "pending");
781
+ return;
782
+ }
783
+
784
+ // Deduplication: only notify once per work generation
785
+ // Use a static flag for this session's settled cycle
786
+ const completionKey = `done-${reason}`;
787
+ if (_completedNotifiedFor === completionKey) {
788
+ logToFile("[auto-continue]", "Completion already notified for:", reason);
789
+ return;
790
+ }
791
+ _completedNotifiedFor = completionKey;
792
+
793
+ // Get full todo list for notification
794
+ const snapshot = await todoContinuationController.getSnapshot();
795
+ const todoList = snapshot.items
796
+ .map((item) => {
797
+ const status = item.status === "completed" ? "[DONE]" : "[PENDING]";
798
+ const subject = item.subject.length > 50 ? item.subject.slice(0, 47) + "..." : item.subject;
799
+ return `${status} ${subject}`;
800
+ })
801
+ .join("\n");
802
+ const message = todoList || "All tasks completed";
803
+ // Notify user that all work is complete with todo list
804
+ _nc?.notify("ReadyForClient", {
805
+ jobId: `done-${reason.replace(/\s+/g, "-")}`,
806
+ requirement: message,
807
+ }).catch((e) => logToFile("[Notification]", "ReadyForClient failed:", String(e)));
812
808
  }
813
- }
814
- } catch (err) {
809
+ }
810
+ }
811
+ } catch (err) {
815
812
  logToFile("[auto-continue]", "agent_settled handler error:", String(err));
816
813
  todoContinuationController?.clearQueue();
817
814
  }
@@ -1231,30 +1228,29 @@ async function initTelegram(pi: ExtensionAPI): Promise<void> {
1231
1228
 
1232
1229
  // Register message handler to forward Telegram messages to Pi
1233
1230
  center.setMessageHandler(async (text: string, _chatId: string) => {
1234
- // Parse /notify command for channel management
1235
- // Usage: /notify on telegram, /notify off line, /notify on all, /notify (show status)
1236
- const notifyRegex = /^\/notify(?:\s+(on|off)(?:\s+(telegram|line|all))?/i;
1237
- const notifyMatch = text.match(notifyRegex);
1238
- if (notifyMatch) {
1239
- const [, action, channel] = notifyMatch;
1240
- const isEnabled = action === "on";
1241
- const channels = channel === "all" ? ["telegram", "line"] : [channel || "telegram"];
1242
-
1243
- for (const ch of channels) {
1244
- (center as any).setChannelEnabled?.(ch, isEnabled);
1245
- logToFile("[NotifyCommand]", `Set ${ch} to ${isEnabled ? "enabled" : "disabled"}`);
1231
+ // Parse /notify-settings command for channel management
1232
+ // Usage: /notify-settings - show current status
1233
+ // /notify-settings telegram on - enable Telegram
1234
+ // /notify-settings line off - disable LINE
1235
+ // /notify-settings all on - enable all channels
1236
+ const settingsMatch = text.match(/^\/notify-settings(?:\s+(\w+)\s+(on|off))?/i);
1237
+ if (settingsMatch || text === "/notify-settings") {
1238
+ const [, channel, action] = settingsMatch || [];
1239
+
1240
+ if (action && channel) {
1241
+ const isEnabled = action === "on";
1242
+ const targetChannels = channel === "all" ? ["telegram", "line"] : [channel];
1243
+ for (const ch of targetChannels) {
1244
+ (center as any).setChannelEnabled?.(ch, isEnabled);
1245
+ logToFile("[NotifySettings]", `Set ${ch} to ${isEnabled ? "enabled" : "disabled"}`);
1246
+ }
1246
1247
  }
1247
- const telegramStatus = (center as any).isChannelEnabled?.("telegram") ? "ON" : "OFF";
1248
- const lineStatus = (center as any).isChannelEnabled?.("line") ? "ON" : "OFF";
1249
- logToFile("[NotifyCommand]", `Current: Telegram=${telegramStatus}, LINE=${lineStatus}`);
1250
- return;
1251
- }
1252
1248
 
1253
- // Show help for /notify without args
1254
- if (text === "/notify") {
1249
+ // Show current status
1255
1250
  const telegramStatus = (center as any).isChannelEnabled?.("telegram") ? "ON" : "OFF";
1256
1251
  const lineStatus = (center as any).isChannelEnabled?.("line") ? "ON" : "OFF";
1257
- logToFile("[NotifyCommand]", `Channel Status: Telegram=${telegramStatus}, LINE=${lineStatus}`);
1252
+ logToFile("[NotifySettings]", `Current: Telegram=${telegramStatus}, LINE=${lineStatus}`);
1253
+ logToFile("[NotifySettings]", `Commands: /notify-settings telegram on|off, /notify-settings line on|off, /notify-settings all on|off`);
1258
1254
  return;
1259
1255
  }
1260
1256
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-harness-runtime",
3
- "version": "1.1.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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-harness/connection-runtime",
3
- "version": "1.1.346",
3
+ "version": "1.1.348",
4
4
  "type": "module",
5
5
  "description": "Connection management with jittered exponential backoff for pi-harness",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/context-compiler",
3
- "version": "1.1.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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/contracts",
3
- "version": "1.1.346",
3
+ "version": "1.1.348",
4
4
  "type": "module",
5
5
  "description": "RPC schema definitions for pi-harness runtime",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/cookie-sanitizer",
3
- "version": "1.1.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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": "@moocoding/durable-review",
3
- "version": "1.1.346",
3
+ "version": "1.1.348",
4
4
  "description": "SQLite-backed durable reviewer using @earendil-works/pi-durable",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/e2e-tester",
3
- "version": "1.1.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/event-sink",
3
- "version": "1.1.346",
3
+ "version": "1.1.348",
4
4
  "type": "module",
5
5
  "description": "Atomic event sourcing with SQLite transactions for pi-harness",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/event-store",
3
- "version": "1.1.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
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.346",
3
+ "version": "1.1.348",
4
4
  "description": "Knowledge Graph extraction and provenance linking for SKILL.md files",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",