pi-harness-runtime 1.1.406 → 1.1.408

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 (183) hide show
  1. package/index.ts +145 -0
  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/logging/package.json +1 -1
  52. package/packages/mcp-adapter/package.json +1 -1
  53. package/packages/memory-engine/package.json +1 -1
  54. package/packages/milestone-manager/package.json +1 -1
  55. package/packages/model-registry/package.json +1 -1
  56. package/packages/nextjs-plugin/package.json +1 -1
  57. package/packages/notification/package.json +1 -1
  58. package/packages/observability/package.json +1 -1
  59. package/packages/okf-indexer/package.json +1 -1
  60. package/packages/paperclip-integration/package.json +1 -1
  61. package/packages/performance-optimizer/package.json +1 -1
  62. package/packages/permission-mode/package.json +1 -1
  63. package/packages/privilege-broker/package.json +1 -1
  64. package/packages/project-analyzer/package.json +1 -1
  65. package/packages/project-bootstrap/package.json +1 -1
  66. package/packages/projection-engine/package.json +1 -1
  67. package/packages/prompt-compiler/package.json +1 -1
  68. package/packages/prompt-versioning/package.json +1 -1
  69. package/packages/provider-adapter-sdk/package.json +1 -1
  70. package/packages/provider-router/package.json +1 -1
  71. package/packages/provider-selector/package.json +1 -1
  72. package/packages/providers/package.json +1 -1
  73. package/packages/qdrant-skills/package.json +1 -1
  74. package/packages/quota-manager/package.json +1 -1
  75. package/packages/rate-limiter/package.json +1 -1
  76. package/packages/react-vite-plugin/package.json +1 -1
  77. package/packages/relay/package.json +1 -1
  78. package/packages/release-manager/package.json +1 -1
  79. package/packages/requirement-compiler/package.json +1 -1
  80. package/packages/runtime/package.json +1 -1
  81. package/packages/scheduler/package.json +1 -1
  82. package/packages/scheduler-adapter/package.json +1 -1
  83. package/packages/session/package.json +1 -1
  84. package/packages/session-api/package.json +1 -1
  85. package/packages/session-export/package.json +1 -1
  86. package/packages/shared-context/package.json +1 -1
  87. package/packages/skill-mcp-client/package.json +1 -1
  88. package/packages/skill-registry/package.json +1 -1
  89. package/packages/skills/package.json +1 -1
  90. package/packages/sprint-planner/package.json +1 -1
  91. package/packages/subscription-engine/package.json +1 -1
  92. package/packages/task-compiler/package.json +1 -1
  93. package/packages/telegram/package.json +1 -1
  94. package/packages/tencentdb-memory/package.json +1 -1
  95. package/packages/tencentdb-sync/package.json +1 -1
  96. package/packages/test-data-generator/package.json +1 -1
  97. package/packages/test-generator/package.json +1 -1
  98. package/packages/todo-bd-sync/package.json +1 -1
  99. package/packages/token-estimation/package.json +1 -1
  100. package/packages/token-optimizer/package.json +1 -1
  101. package/packages/tooling-preference/dist/changed-files.d.ts +45 -0
  102. package/packages/tooling-preference/dist/changed-files.d.ts.map +1 -0
  103. package/packages/tooling-preference/dist/changed-files.js +125 -0
  104. package/packages/tooling-preference/dist/changed-files.js.map +1 -0
  105. package/packages/tooling-preference/dist/index.d.ts +2 -0
  106. package/packages/tooling-preference/dist/index.d.ts.map +1 -1
  107. package/packages/tooling-preference/dist/index.js +2 -0
  108. package/packages/tooling-preference/dist/index.js.map +1 -1
  109. package/packages/tooling-preference/dist/quality-check.d.ts +75 -0
  110. package/packages/tooling-preference/dist/quality-check.d.ts.map +1 -0
  111. package/packages/tooling-preference/dist/quality-check.js +216 -0
  112. package/packages/tooling-preference/dist/quality-check.js.map +1 -0
  113. package/packages/tooling-preference/package.json +1 -1
  114. package/packages/tooling-preference/src/changed-files.ts +147 -0
  115. package/packages/tooling-preference/src/index.ts +19 -0
  116. package/packages/tooling-preference/src/quality-check.ts +279 -0
  117. package/packages/tooling-preference/tests/changed-files.test.ts +124 -0
  118. package/packages/tooling-preference/tests/quality-check.test.ts +272 -0
  119. package/packages/trajectory/package.json +1 -1
  120. package/packages/tui/package.json +1 -1
  121. package/packages/two-phase-review/dist/classify.d.ts +56 -0
  122. package/packages/two-phase-review/dist/classify.d.ts.map +1 -0
  123. package/packages/two-phase-review/dist/classify.js +108 -0
  124. package/packages/two-phase-review/dist/classify.js.map +1 -0
  125. package/packages/two-phase-review/dist/index.d.ts +20 -0
  126. package/packages/two-phase-review/dist/index.d.ts.map +1 -0
  127. package/packages/two-phase-review/dist/index.js +14 -0
  128. package/packages/two-phase-review/dist/index.js.map +1 -0
  129. package/packages/two-phase-review/dist/rules.d.ts +81 -0
  130. package/packages/two-phase-review/dist/rules.d.ts.map +1 -0
  131. package/packages/two-phase-review/dist/rules.js +195 -0
  132. package/packages/two-phase-review/dist/rules.js.map +1 -0
  133. package/packages/two-phase-review/dist/runtime.d.ts +70 -0
  134. package/packages/two-phase-review/dist/runtime.d.ts.map +1 -0
  135. package/packages/two-phase-review/dist/runtime.js +298 -0
  136. package/packages/two-phase-review/dist/runtime.js.map +1 -0
  137. package/packages/two-phase-review/dist/scope.d.ts +68 -0
  138. package/packages/two-phase-review/dist/scope.d.ts.map +1 -0
  139. package/packages/two-phase-review/dist/scope.js +205 -0
  140. package/packages/two-phase-review/dist/scope.js.map +1 -0
  141. package/packages/two-phase-review/dist/signals.d.ts +74 -0
  142. package/packages/two-phase-review/dist/signals.d.ts.map +1 -0
  143. package/packages/two-phase-review/dist/signals.js +297 -0
  144. package/packages/two-phase-review/dist/signals.js.map +1 -0
  145. package/packages/two-phase-review/dist/state.d.ts +72 -0
  146. package/packages/two-phase-review/dist/state.d.ts.map +1 -0
  147. package/packages/two-phase-review/dist/state.js +238 -0
  148. package/packages/two-phase-review/dist/state.js.map +1 -0
  149. package/packages/two-phase-review/dist/types.d.ts +62 -0
  150. package/packages/two-phase-review/dist/types.d.ts.map +1 -0
  151. package/packages/two-phase-review/dist/types.js +9 -0
  152. package/packages/two-phase-review/dist/types.js.map +1 -0
  153. package/packages/two-phase-review/package.json +21 -0
  154. package/packages/two-phase-review/src/classify.ts +129 -0
  155. package/packages/two-phase-review/src/index.ts +110 -0
  156. package/packages/two-phase-review/src/rules.ts +236 -0
  157. package/packages/two-phase-review/src/runtime.ts +392 -0
  158. package/packages/two-phase-review/src/scope.ts +247 -0
  159. package/packages/two-phase-review/src/signals.ts +340 -0
  160. package/packages/two-phase-review/src/state.ts +280 -0
  161. package/packages/two-phase-review/src/types.ts +72 -0
  162. package/packages/two-phase-review/test/classify.test.ts +102 -0
  163. package/packages/two-phase-review/test/helpers.ts +72 -0
  164. package/packages/two-phase-review/test/rules.test.ts +150 -0
  165. package/packages/two-phase-review/test/runtime.test.ts +362 -0
  166. package/packages/two-phase-review/test/scope.test.ts +186 -0
  167. package/packages/two-phase-review/test/signals.test.ts +183 -0
  168. package/packages/two-phase-review/test/state.test.ts +201 -0
  169. package/packages/types/package.json +1 -1
  170. package/packages/voice-api/package.json +1 -1
  171. package/packages/webmcp-tester/package.json +1 -1
  172. package/packages/wiki/package.json +1 -1
  173. package/packages/workflow-events/package.json +1 -1
  174. package/packages/workspace-scanner/package.json +1 -1
  175. package/packages/worktree/dist/worktree.d.ts +31 -0
  176. package/packages/worktree/dist/worktree.d.ts.map +1 -1
  177. package/packages/worktree/dist/worktree.js +21 -8
  178. package/packages/worktree/dist/worktree.js.map +1 -1
  179. package/packages/worktree/package.json +1 -1
  180. package/packages/worktree/src/worktree.ts +49 -8
  181. package/packages/worktree/test/worktree.test.ts +27 -27
  182. package/packages/write-review/package.json +1 -1
  183. package/packages/worktree/worktree.ts +0 -293
package/index.ts CHANGED
@@ -373,6 +373,78 @@ let _extensionApi: ExtensionAPI | null = null;
373
373
  /** How long an unanswered proposal stays quiet before it is offered again. */
374
374
  const TOOLING_PROPOSAL_COOLDOWN_MS = 30 * 24 * 60 * 60 * 1000;
375
375
 
376
+ // --- two-phase-review: implementation first, review as a second phase -----
377
+
378
+ /** The package of the two-phase workflow. */
379
+ type TwoPhaseModule = typeof import("./packages/two-phase-review/dist/index.js");
380
+
381
+ /** The todo shape the workflow needs. */
382
+ type TwoPhaseTodoLike = import("./packages/two-phase-review/dist/index.js").TodoLike;
383
+
384
+ /**
385
+ * Load the two-phase review package.
386
+ */
387
+ async function loadTwoPhaseModule(): Promise<TwoPhaseModule | null> {
388
+ try {
389
+ return await import("./packages/two-phase-review/dist/index.js");
390
+ } catch (error) {
391
+ logToFile("[TwoPhase]", `package unavailable: ${oneLineError(error)}`);
392
+ return null;
393
+ }
394
+ }
395
+
396
+ /**
397
+ * Register the two-phase workflow in the session.
398
+ *
399
+ * The wiring itself lives in the package (it is tested there). The session
400
+ * only provides the todo list of the session and the workspace.
401
+ */
402
+ async function initTwoPhaseReview(pi: ExtensionAPI): Promise<void> {
403
+ const mod = await loadTwoPhaseModule();
404
+ if (!mod) return;
405
+
406
+ /** Read the todo list of the session (the local one, never bd). */
407
+ const readTodos = async (ctx: unknown): Promise<{
408
+ available: boolean;
409
+ todos: TwoPhaseTodoLike[];
410
+ reason?: string;
411
+ }> => {
412
+ try {
413
+ const jev = await import("./packages/jev-judge/dist/index.js");
414
+ const provider = jev.createTodoProvider(ctx as never);
415
+ const availability = await provider.availability();
416
+ if (!availability.available) {
417
+ return {
418
+ available: false,
419
+ todos: [],
420
+ reason: availability.error ?? "the todo provider is not available",
421
+ };
422
+ }
423
+ const snapshot = await provider.getSnapshot();
424
+ return { available: true, todos: (snapshot.items ?? []) as TwoPhaseTodoLike[] };
425
+ } catch (error) {
426
+ return { available: false, todos: [], reason: oneLineError(error) };
427
+ }
428
+ };
429
+
430
+ try {
431
+ await mod.initTwoPhaseReview({
432
+ pi,
433
+ readTodos,
434
+ workspaceRoot: () => {
435
+ try {
436
+ return realpathSync(process.cwd());
437
+ } catch {
438
+ return process.cwd();
439
+ }
440
+ },
441
+ log: (message: string) => logToFile("[TwoPhase]", message),
442
+ });
443
+ } catch (error) {
444
+ logToFile("[TwoPhase]", `runtime not registered: ${oneLineError(error)}`);
445
+ }
446
+ }
447
+
376
448
  /**
377
449
  * Load the tooling preference package and watch for the session start.
378
450
  *
@@ -530,6 +602,70 @@ async function startBiomeImplementation(
530
602
  }
531
603
  }
532
604
 
605
+ /** The last time a quality check ran - the check is not repeated in a loop. */
606
+ let _toolingCheckAt = 0;
607
+ /** Is a quality check running right now? */
608
+ let _toolingCheckRunning = false;
609
+ /** The shortest time between two quality checks. */
610
+ const TOOLING_CHECK_INTERVAL_MS = 15_000;
611
+
612
+ /**
613
+ * Run the post-change quality check of the workspace.
614
+ *
615
+ * The check honors the saved preference: Biome when the user asked for it,
616
+ * the project's own script otherwise. It never writes, it never blocks the
617
+ * session and it never runs without a decision of the user.
618
+ */
619
+ async function maybeRunToolingCheck(ctx: ExtensionContext): Promise<void> {
620
+ const store = _toolingStore;
621
+ if (!store || _toolingCheckRunning) return;
622
+ const now = Date.now();
623
+ if (now - _toolingCheckAt < TOOLING_CHECK_INTERVAL_MS) return;
624
+
625
+ let workspaceRoot: string;
626
+ try {
627
+ workspaceRoot = realpathSync(process.cwd());
628
+ } catch {
629
+ return;
630
+ }
631
+
632
+ try {
633
+ const mod = await import("./packages/tooling-preference/dist/index.js");
634
+ const userKey = mod.buildToolingUserKey(readToolingIdentity());
635
+ const record = store.read(userKey, workspaceRoot);
636
+ // Without a decision of the user no tool is selected, so nothing runs.
637
+ if (!record?.decision) return;
638
+
639
+ const changed = mod.detectChangedJsTsFiles(workspaceRoot);
640
+ if (!changed.detected || changed.files.length === 0) return;
641
+
642
+ const context = mod.detectToolingContext(workspaceRoot);
643
+ const plan = mod.selectQualityCheck({
644
+ context,
645
+ preference: record.decision,
646
+ files: changed.files,
647
+ });
648
+ if (plan.tool === "none") return;
649
+
650
+ _toolingCheckRunning = true;
651
+ _toolingCheckAt = now;
652
+ try {
653
+ const result = mod.runQualityCheck(plan, {
654
+ cwd: workspaceRoot,
655
+ timeoutMs: 60_000,
656
+ });
657
+ const line = mod.formatQualityCheckStatus(result);
658
+ logToFile("[ToolingCheck]", line);
659
+ // The status line names the tool and says whether the check ran.
660
+ ctx.ui.setStatus("harness-tooling", line);
661
+ } finally {
662
+ _toolingCheckRunning = false;
663
+ }
664
+ } catch (error) {
665
+ logToFile("[ToolingCheck]", `check failed: ${oneLineError(error)}`);
666
+ }
667
+ }
668
+
533
669
  async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
534
670
  addHarnessMessage("Jev", "initializing", "wait");
535
671
  try {
@@ -3949,6 +4085,12 @@ export default async function (pi: ExtensionAPI) {
3949
4085
  // The proposal is a decision of its own: it never pauses the work.
3950
4086
  void initToolingPreference(pi);
3951
4087
 
4088
+ // --- two-phase-review: implementation first, review as a second phase ----
4089
+ // A review signal during the implementation is queued, never executed.
4090
+ // The handlers are registered before the extension is ready, so a session
4091
+ // that starts right away is already covered.
4092
+ await initTwoPhaseReview(pi);
4093
+
3952
4094
  // --- telegram-notifications: Telegram bot for harness event notifications ----
3953
4095
  // Collect promise so we can wait for initialization before showing startup notification
3954
4096
  asyncInitPromises.push(
@@ -5988,6 +6130,9 @@ Run \`bd ready\` to see current bd issues.
5988
6130
  void maybeAutoFetchQuota(ctx.model?.id ?? null);
5989
6131
  maybeTriggerProactiveCompact(ctx);
5990
6132
  maybeNotifyContextUsage(ctx);
6133
+ // The quality check of the workspace runs after the turn: it never
6134
+ // writes and it never steers the session.
6135
+ void maybeRunToolingCheck(ctx);
5991
6136
  });
5992
6137
 
5993
6138
  pi.on("agent_end", () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-harness-runtime",
3
- "version": "1.1.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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.406",
3
+ "version": "1.1.408",
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-harness/logging",
3
- "version": "1.1.406",
3
+ "version": "1.1.408",
4
4
  "type": "module",
5
5
  "description": "Centralized structured application logging with buffered Cloudflare R2 and webhook transports",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/mcp-adapter",
3
- "version": "1.1.406",
3
+ "version": "1.1.408",
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",