pi-harness-runtime 1.1.381 → 1.1.383

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 (146) hide show
  1. package/index.ts +133 -13
  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/dist/continuation-controller.d.ts +174 -9
  47. package/packages/jev-judge/dist/continuation-controller.d.ts.map +1 -1
  48. package/packages/jev-judge/dist/continuation-controller.js +530 -77
  49. package/packages/jev-judge/dist/continuation-controller.js.map +1 -1
  50. package/packages/jev-judge/dist/typesafe-provider.d.ts.map +1 -1
  51. package/packages/jev-judge/dist/typesafe-provider.js +29 -2
  52. package/packages/jev-judge/dist/typesafe-provider.js.map +1 -1
  53. package/packages/jev-judge/package.json +1 -1
  54. package/packages/jev-judge/src/continuation-controller.ts +636 -83
  55. package/packages/jev-judge/src/typesafe-provider.ts +31 -2
  56. package/packages/jev-judge/tests/continuation-controller.test.ts +1229 -0
  57. package/packages/jev-judge/tests/typesafe-provider.test.ts +180 -0
  58. package/packages/knowledge-graph/package.json +1 -1
  59. package/packages/knowledge-retrieval/package.json +1 -1
  60. package/packages/laravel-plugin/package.json +1 -1
  61. package/packages/learning-engine/package.json +1 -1
  62. package/packages/mcp-adapter/package.json +1 -1
  63. package/packages/memory-engine/package.json +1 -1
  64. package/packages/milestone-manager/package.json +1 -1
  65. package/packages/model-registry/package.json +1 -1
  66. package/packages/nextjs-plugin/package.json +1 -1
  67. package/packages/notification/dist/adapters/telegram-adapter.d.ts.map +1 -1
  68. package/packages/notification/dist/adapters/telegram-adapter.js +37 -4
  69. package/packages/notification/dist/adapters/telegram-adapter.js.map +1 -1
  70. package/packages/notification/package.json +1 -1
  71. package/packages/notification/src/adapters/telegram-adapter.ts +45 -4
  72. package/packages/observability/package.json +1 -1
  73. package/packages/okf-indexer/package.json +1 -1
  74. package/packages/paperclip-integration/package.json +1 -1
  75. package/packages/performance-optimizer/package.json +1 -1
  76. package/packages/permission-mode/package.json +1 -1
  77. package/packages/privilege-broker/package.json +1 -1
  78. package/packages/project-analyzer/package.json +1 -1
  79. package/packages/project-bootstrap/package.json +1 -1
  80. package/packages/projection-engine/package.json +1 -1
  81. package/packages/prompt-compiler/package.json +1 -1
  82. package/packages/prompt-versioning/package.json +1 -1
  83. package/packages/provider-adapter-sdk/package.json +1 -1
  84. package/packages/provider-router/package.json +1 -1
  85. package/packages/provider-selector/package.json +1 -1
  86. package/packages/providers/package.json +1 -1
  87. package/packages/qdrant-skills/package.json +1 -1
  88. package/packages/quota-manager/package.json +1 -1
  89. package/packages/rate-limiter/package.json +1 -1
  90. package/packages/react-vite-plugin/package.json +1 -1
  91. package/packages/relay/dist/client.d.ts +36 -1
  92. package/packages/relay/dist/client.js +195 -25
  93. package/packages/relay/dist/server.d.ts +5 -1
  94. package/packages/relay/dist/server.js +74 -7
  95. package/packages/relay/dist/types.d.ts +7 -0
  96. package/packages/relay/package.json +1 -1
  97. package/packages/relay/src/client.ts +206 -42
  98. package/packages/relay/src/server.ts +78 -10
  99. package/packages/relay/src/types.ts +7 -0
  100. package/packages/relay/test/client.test.ts +312 -0
  101. package/packages/relay/test/relay-e2e.test.ts +263 -0
  102. package/packages/release-manager/package.json +1 -1
  103. package/packages/requirement-compiler/package.json +1 -1
  104. package/packages/runtime/package.json +1 -1
  105. package/packages/scheduler/package.json +1 -1
  106. package/packages/scheduler-adapter/package.json +1 -1
  107. package/packages/session/package.json +1 -1
  108. package/packages/session-api/package.json +1 -1
  109. package/packages/session-export/package.json +1 -1
  110. package/packages/shared-context/package.json +1 -1
  111. package/packages/skill-mcp-client/package.json +1 -1
  112. package/packages/skill-registry/package.json +1 -1
  113. package/packages/skills/package.json +1 -1
  114. package/packages/sprint-planner/package.json +1 -1
  115. package/packages/subscription-engine/package.json +1 -1
  116. package/packages/task-compiler/package.json +1 -1
  117. package/packages/telegram/package.json +1 -1
  118. package/packages/tencentdb-memory/package.json +1 -1
  119. package/packages/tencentdb-sync/package.json +1 -1
  120. package/packages/test-data-generator/package.json +1 -1
  121. package/packages/test-generator/package.json +1 -1
  122. package/packages/todo-bd-sync/package.json +1 -1
  123. package/packages/token-estimation/package.json +1 -1
  124. package/packages/token-optimizer/package.json +1 -1
  125. package/packages/trajectory/package.json +1 -1
  126. package/packages/tui/dist/harness-footer.d.ts +131 -0
  127. package/packages/tui/dist/harness-footer.d.ts.map +1 -0
  128. package/packages/tui/dist/harness-footer.js +463 -0
  129. package/packages/tui/dist/harness-footer.js.map +1 -0
  130. package/packages/tui/dist/index.d.ts +1 -0
  131. package/packages/tui/dist/index.d.ts.map +1 -1
  132. package/packages/tui/dist/index.js +1 -0
  133. package/packages/tui/dist/index.js.map +1 -1
  134. package/packages/tui/package.json +1 -1
  135. package/packages/tui/src/harness-footer.ts +580 -0
  136. package/packages/tui/src/index.ts +17 -0
  137. package/packages/tui/test/harness-footer.test.ts +440 -0
  138. package/packages/types/package.json +1 -1
  139. package/packages/voice-api/package.json +1 -1
  140. package/packages/webmcp-tester/package.json +1 -1
  141. package/packages/wiki/package.json +1 -1
  142. package/packages/workflow-events/package.json +1 -1
  143. package/packages/workspace-scanner/package.json +1 -1
  144. package/packages/worktree/package.json +1 -1
  145. package/packages/write-review/package.json +1 -1
  146. package/scripts/unified-webhook-server.ts +70 -13
package/index.ts CHANGED
@@ -660,6 +660,9 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
660
660
 
661
661
  // Clean up controller on session shutdown
662
662
  pi.on("session_shutdown", () => {
663
+ // Release the guard timer and the queue: a stopped session must not
664
+ // keep a timer alive nor block a later continuation.
665
+ todoContinuationController?.dispose?.();
663
666
  todoContinuationController = null;
664
667
  });
665
668
 
@@ -830,6 +833,12 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
830
833
 
831
834
  // --- agent_settled: Check todos and continue work ---------------
832
835
  pi.on("agent_settled", async (_event, ctx) => {
836
+ // The turn that a previous continuation triggered has now settled:
837
+ // release the dispatch guard so the next decision can dispatch again.
838
+ // Keeping it set would block every later dispatch while still
839
+ // consuming the retry budget.
840
+ todoContinuationController?.releaseContinuationGuard?.("agent_settled");
841
+
833
842
  // Don't continue if user is waiting for response
834
843
  if (waitingForUserSince) {
835
844
  todoContinuationController?.clearQueue();
@@ -857,8 +866,19 @@ async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
857
866
 
858
867
  if (result.action === "continue" && result.nextItemId) {
859
868
  updateAutoContinueStatus("CONTINUING");
860
- await todoContinuationController.steerToContinue(result.nextItemId);
861
- // Queue remains set while agent processes, cleared on agent_end
869
+ const steer = await todoContinuationController.steerToContinue(result.nextItemId);
870
+ if (!steer?.dispatched) {
871
+ // Surface an explicit stall reason instead of silently doing nothing
872
+ logToFile(
873
+ "[auto-continue]",
874
+ "Continuation not dispatched:",
875
+ steer?.reason ?? "unknown reason",
876
+ `(attempts=${steer?.attempts ?? 0}, blocked=${steer?.blockedDispatches ?? 0})`,
877
+ );
878
+ updateAutoContinueStatus("IDLE");
879
+ }
880
+ // Guard stays set while the agent processes the continuation and is
881
+ // released by releaseContinuationGuard() on the next agent_settled.
862
882
  } else {
863
883
  // Not continuing - clear queue to allow future decisions
864
884
  todoContinuationController.clearQueue();
@@ -1242,7 +1262,11 @@ async function initTelegram(pi: ExtensionAPI): Promise<void> {
1242
1262
  enabled: true,
1243
1263
  config: { channelAccessToken: lineAccessToken, userId: lineUserId },
1244
1264
  });
1245
- addHarnessMessage("LINE", "configured and enabled", "ok");
1265
+ addHarnessMessage("LINE", "configured and enabled (tap Toggle LINE to disable)", "ok");
1266
+ } else {
1267
+ addHarnessMessage("LINE", "not configured", "warn", [
1268
+ "Configure LINE in ~/.pi-harness-runtime/keys/",
1269
+ ]);
1246
1270
  }
1247
1271
 
1248
1272
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -1451,7 +1475,7 @@ async function initTelegram(pi: ExtensionAPI): Promise<void> {
1451
1475
  const botUsername = center.getTelegramBotUsername();
1452
1476
  const telegram = center.getTelegramAdapter();
1453
1477
  telegram?.setGreetingVerifiedHandler(() => {
1454
- addHarnessMessage("Telegram", "ready (Hi reply received; two-way verified)", "ok");
1478
+ addHarnessMessage("Telegram", "ready (tap Toggle Telegram to disable)", "ok");
1455
1479
  });
1456
1480
 
1457
1481
  // Set adapter for relay streaming (receives callbacks via WebSocket)
@@ -1462,18 +1486,14 @@ async function initTelegram(pi: ExtensionAPI): Promise<void> {
1462
1486
  _relayClient?.disconnect();
1463
1487
  });
1464
1488
 
1465
- // Check if webhook mode is configured
1466
- const homedir2 = process.env.HOME || process.env.USERPROFILE || "/home/frappe";
1467
- const webhookUrlPath = join(homedir2, ".pi-harness-runtime", "keys", "telegram-webhook-url.txt");
1468
- const _hasWebhook = existsSync(webhookUrlPath);
1469
-
1470
1489
  // Initialize relay streaming (receives callbacks via WebSocket)
1471
1490
  // In webhook mode, streaming delivers callbacks in real-time
1472
1491
  await initRelayStream();
1473
1492
 
1474
1493
  const greeting = await telegram?.sendStartupGreeting();
1494
+ logStartup(`[pi-harness] Telegram greeting result: ${JSON.stringify(greeting)}`);
1475
1495
  if (!greeting?.success) {
1476
- logStartup("[pi-harness] Telegram: startup greeting delivery failed");
1496
+ logStartup("[pi-harness] Telegram: startup greeting delivery failed - see logs");
1477
1497
  addHarnessMessage("Telegram", "bot verified; Hi delivery failed", "err", [
1478
1498
  "Open your bot in Telegram and press Start; unblock it if necessary.",
1479
1499
  "Verify telegram-chat-id.txt in ~/.pi-harness-runtime/keys/ and network access, then reload Pi.",
@@ -1482,7 +1502,7 @@ async function initTelegram(pi: ExtensionAPI): Promise<void> {
1482
1502
  }
1483
1503
  telegram?.startPolling();
1484
1504
  if (!telegram?.isGreetingVerified()) {
1485
- addHarnessMessage("Telegram", "Hi sent; tap Say Hi back to verify inbound", "wait");
1505
+ addHarnessMessage("Telegram", "Hi sent; tap Say Hi to verify inbound (tap Toggle Telegram to disable)", "wait");
1486
1506
  }
1487
1507
  if (botUsername) {
1488
1508
  logStartup(`[pi-harness] Telegram (@${botUsername}) ready — DM the bot to receive alerts`);
@@ -1547,6 +1567,9 @@ async function initRelayStream(): Promise<void> {
1547
1567
  {
1548
1568
  serverUrl: relayWsUrl,
1549
1569
  token: relayToken,
1570
+ // Keep retrying in the background: the relay server may not be up
1571
+ // yet when the harness starts.
1572
+ retryOnConnectFailure: true,
1550
1573
  },
1551
1574
  {
1552
1575
  onConnected: (sessionId) => {
@@ -3664,6 +3687,49 @@ Run \`bd ready\` to see current bd issues.
3664
3687
  // Store only the setStatus function, NOT the ctx itself.
3665
3688
  // Storing ctx causes stale-context errors after pi reload/restart.
3666
3689
  let footerSetStatus: ((key: string, value: string) => void) | null = null;
3690
+ // The custom footer needs live session data (cwd, model, usage, context).
3691
+ // The ctx is stored here as well, but the footer guards every access and
3692
+ // keeps the last known values when the ctx has gone stale, so a replaced
3693
+ // session can never break the rendering.
3694
+ let latestFooterCtx: ExtensionContext | null = null;
3695
+ let harnessFooterEnabled = true;
3696
+
3697
+ /**
3698
+ * Install the harness footer.
3699
+ *
3700
+ * Pi's built-in footer renders ALL `setStatus()` values on ONE shared line,
3701
+ * so the quota and the workspace environment summary used to be appended to
3702
+ * each other (and the workspace summary was truncated away on narrow
3703
+ * terminals). The harness footer gives the workspace summary its own row
3704
+ * while keeping Pi's footer information (cwd/branch, token stats, cost,
3705
+ * context usage, model/thinking state, other extensions' statuses).
3706
+ *
3707
+ * This function never rejects: every access to the (possibly stale) ctx is
3708
+ * guarded and failures are logged.
3709
+ */
3710
+ async function installHarnessFooter(ctx: ExtensionContext): Promise<void> {
3711
+ try {
3712
+ if (!harnessFooterEnabled) return;
3713
+ // A stale ctx throws on property access - read it defensively.
3714
+ let mode: string | undefined;
3715
+ try {
3716
+ mode = ctx.mode;
3717
+ } catch {
3718
+ mode = undefined;
3719
+ }
3720
+ if (mode !== "tui") return;
3721
+ const { createHarnessFooter } = await import(
3722
+ "./packages/tui/src/harness-footer.js"
3723
+ );
3724
+ ctx.ui.setFooter((tui, theme, footerData) =>
3725
+ createHarnessFooter(tui, theme, footerData, {
3726
+ getContext: () => latestFooterCtx,
3727
+ }),
3728
+ );
3729
+ } catch (e) {
3730
+ logToFile("[pi-harness] harness footer install failed:", String(e));
3731
+ }
3732
+ }
3667
3733
  let quotaAutoFetchInFlight = false;
3668
3734
  let proactiveCompactInFlight = false;
3669
3735
  let lastProactiveCompactAt = 0;
@@ -4577,6 +4643,49 @@ Run \`bd ready\` to see current bd issues.
4577
4643
  },
4578
4644
  });
4579
4645
 
4646
+ // --- /harness-footer — Toggle harness custom footer vs built-in Pi footer ----
4647
+ pi.registerCommand("harness-footer", {
4648
+ description: "Toggle or restore footer: /harness-footer [harness|builtin]",
4649
+ handler: async (args: string, ctx: ExtensionCommandContext) => {
4650
+ // A stale ctx throws on property access - read it defensively.
4651
+ let ctxMode: string | undefined;
4652
+ try {
4653
+ ctxMode = ctx.mode;
4654
+ } catch {
4655
+ ctxMode = undefined;
4656
+ }
4657
+ if (ctxMode !== "tui") {
4658
+ ctx.ui.notify("Footer control is only available in TUI mode.", "info");
4659
+ return;
4660
+ }
4661
+
4662
+ const mode = args.trim().toLowerCase();
4663
+ if (mode === "builtin" || mode === "pi") {
4664
+ harnessFooterEnabled = false;
4665
+ ctx.ui.setFooter(undefined);
4666
+ ctx.ui.notify(
4667
+ "Built-in Pi footer restored. The workspace summary shares the status line again.",
4668
+ "info",
4669
+ );
4670
+ } else if (mode === "harness" || mode === "") {
4671
+ harnessFooterEnabled = true;
4672
+ latestFooterCtx = ctx;
4673
+ await installHarnessFooter(ctx);
4674
+ ctx.ui.notify(
4675
+ "Harness custom footer installed. The workspace summary has its own row.",
4676
+ "info",
4677
+ );
4678
+ } else {
4679
+ ctx.ui.notify(
4680
+ "Usage: /harness-footer [harness|builtin]\n" +
4681
+ " harness — install the Harness footer (workspace summary on its own row)\n" +
4682
+ " builtin — restore Pi's built-in footer",
4683
+ "info",
4684
+ );
4685
+ }
4686
+ },
4687
+ });
4688
+
4580
4689
  // --- Harness widget state (like Todos extension) -----------------------
4581
4690
  // Learn from Todos extension:
4582
4691
  // - setWidget with placement: "aboveEditor" (fixed above input)
@@ -4652,6 +4761,7 @@ Run \`bd ready\` to see current bd issues.
4652
4761
 
4653
4762
  // Capture only the setStatus function, not the ctx
4654
4763
  footerSetStatus = ctx.ui.setStatus.bind(ctx.ui);
4764
+ latestFooterCtx = ctx;
4655
4765
  refreshFooterStatus(
4656
4766
  footerSetStatus,
4657
4767
  tracker,
@@ -4660,6 +4770,9 @@ Run \`bd ready\` to see current bd issues.
4660
4770
  () => lastActiveProvider,
4661
4771
  );
4662
4772
 
4773
+ // Give the workspace environment summary its own footer row
4774
+ void installHarnessFooter(ctx);
4775
+
4663
4776
  // Increment session generation to fence late callbacks
4664
4777
  sessionGeneration++;
4665
4778
  const mySession = sessionGeneration;
@@ -4722,6 +4835,7 @@ Run \`bd ready\` to see current bd issues.
4722
4835
  noteActiveProvider(ctx.model?.id ?? null);
4723
4836
  // Capture only the setStatus function, not the ctx
4724
4837
  footerSetStatus = ctx.ui.setStatus.bind(ctx.ui);
4838
+ latestFooterCtx = ctx;
4725
4839
  refreshFooterStatus(
4726
4840
  footerSetStatus,
4727
4841
  tracker,
@@ -4751,6 +4865,7 @@ Run \`bd ready\` to see current bd issues.
4751
4865
  pi.on("session_compact", async (event, ctx) => {
4752
4866
  // Capture only the setStatus function, not the ctx
4753
4867
  footerSetStatus = ctx.ui.setStatus.bind(ctx.ui);
4868
+ latestFooterCtx = ctx;
4754
4869
  proactiveCompactInFlight = false;
4755
4870
  lastProactiveCompactAt = Date.now();
4756
4871
  consecutiveCompactFailures = 0;
@@ -4931,13 +5046,18 @@ function refreshFooterStatus(
4931
5046
  statusValue,
4932
5047
  );
4933
5048
 
4934
- // Set workspace environment on separate row below quota
5049
+ // The workspace environment summary is published under its own status key.
5050
+ // Pi renders every status value on ONE shared line, so the harness footer
5051
+ // (see installHarnessFooter) renders it on a dedicated row instead.
4935
5052
  setWorkspaceEnvStatus(setStatus);
4936
5053
  }
4937
5054
 
4938
5055
  /**
4939
5056
  * Set workspace environment status line
4940
- * This appears on a NEW LINE below the quota line
5057
+ *
5058
+ * Published under the `harness-workspace` status key. The harness footer
5059
+ * renders it on its own row (Pi's built-in footer joins all status values
5060
+ * into a single line).
4941
5061
  */
4942
5062
  async function setWorkspaceEnvStatus(setStatus: (key: string, value: string) => void) {
4943
5063
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-harness-runtime",
3
- "version": "1.1.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
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.381",
3
+ "version": "1.1.383",
4
4
  "description": "Generic web framework analysis — REST/GraphQL endpoints, OpenAPI, auth",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",