pi-harness-runtime 1.1.396 → 1.1.398

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 (236) hide show
  1. package/AGENTS.md +54 -7
  2. package/harness/notification-events.ts +6 -6
  3. package/index.ts +1 -1
  4. package/package.json +1 -1
  5. package/packages/a2a-adapter/package.json +1 -1
  6. package/packages/agent-policy/package.json +1 -1
  7. package/packages/architecture-generator/package.json +1 -1
  8. package/packages/auth/package.json +1 -1
  9. package/packages/autonomous-refactor/package.json +1 -1
  10. package/packages/autonomous-runtime/package.json +1 -1
  11. package/packages/cache-strategy/package.json +1 -1
  12. package/packages/capability-registry/package.json +1 -1
  13. package/packages/checkpoint/package.json +1 -1
  14. package/packages/cli-plugin-sdk/package.json +1 -1
  15. package/packages/clipboard/package.json +1 -1
  16. package/packages/clipboard-plugin/package.json +1 -1
  17. package/packages/code-generation/package.json +1 -1
  18. package/packages/code-review/package.json +1 -1
  19. package/packages/codex-adapter/package.json +1 -1
  20. package/packages/codex-watcher/package.json +1 -1
  21. package/packages/config-capture/package.json +1 -1
  22. package/packages/connection-runtime/package.json +1 -1
  23. package/packages/context-compiler/package.json +1 -1
  24. package/packages/context-discovery/package.json +1 -1
  25. package/packages/context-manager/package.json +1 -1
  26. package/packages/contracts/package.json +1 -1
  27. package/packages/cookie-sanitizer/package.json +1 -1
  28. package/packages/cost-optimizer/package.json +1 -1
  29. package/packages/dependency-analyzer/package.json +1 -1
  30. package/packages/django-plugin/package.json +1 -1
  31. package/packages/doc-generator/package.json +1 -1
  32. package/packages/durable-review/package.json +1 -1
  33. package/packages/e2e-tester/package.json +1 -1
  34. package/packages/evaluation-engine/package.json +1 -1
  35. package/packages/evaluation-runner/package.json +1 -1
  36. package/packages/event-bus/package.json +1 -1
  37. package/packages/event-sink/package.json +1 -1
  38. package/packages/event-store/package.json +1 -1
  39. package/packages/experience-replay/package.json +1 -1
  40. package/packages/feedback-collector/package.json +1 -1
  41. package/packages/file-copy-helper/package.json +1 -1
  42. package/packages/framework-detector/package.json +1 -1
  43. package/packages/framework-plugin-sdk/package.json +1 -1
  44. package/packages/frappe-plugin/package.json +1 -1
  45. package/packages/generic-web-plugin/package.json +1 -1
  46. package/packages/health-monitor/package.json +1 -1
  47. package/packages/intent-analyzer/package.json +1 -1
  48. package/packages/jev-judge/package.json +1 -1
  49. package/packages/knowledge-graph/package.json +1 -1
  50. package/packages/knowledge-retrieval/package.json +1 -1
  51. package/packages/laravel-plugin/package.json +1 -1
  52. package/packages/learning-engine/package.json +1 -1
  53. package/packages/logging/README.md +41 -6
  54. package/packages/logging/dist/classification.d.ts +65 -0
  55. package/packages/logging/dist/classification.d.ts.map +1 -0
  56. package/packages/logging/dist/classification.js +155 -0
  57. package/packages/logging/dist/classification.js.map +1 -0
  58. package/packages/logging/dist/config.d.ts +9 -0
  59. package/packages/logging/dist/config.d.ts.map +1 -1
  60. package/packages/logging/dist/config.js +40 -3
  61. package/packages/logging/dist/config.js.map +1 -1
  62. package/packages/logging/dist/index.d.ts +9 -1
  63. package/packages/logging/dist/index.d.ts.map +1 -1
  64. package/packages/logging/dist/index.js +10 -1
  65. package/packages/logging/dist/index.js.map +1 -1
  66. package/packages/logging/dist/ingest/schema.d.ts +60 -0
  67. package/packages/logging/dist/ingest/schema.d.ts.map +1 -0
  68. package/packages/logging/dist/ingest/schema.js +245 -0
  69. package/packages/logging/dist/ingest/schema.js.map +1 -0
  70. package/packages/logging/dist/installation.d.ts +32 -0
  71. package/packages/logging/dist/installation.d.ts.map +1 -0
  72. package/packages/logging/dist/installation.js +64 -0
  73. package/packages/logging/dist/installation.js.map +1 -0
  74. package/packages/logging/dist/sensitive-keys.d.ts +12 -0
  75. package/packages/logging/dist/sensitive-keys.d.ts.map +1 -0
  76. package/packages/logging/dist/sensitive-keys.js +39 -0
  77. package/packages/logging/dist/sensitive-keys.js.map +1 -0
  78. package/packages/logging/dist/server/credentials.d.ts +85 -0
  79. package/packages/logging/dist/server/credentials.d.ts.map +1 -0
  80. package/packages/logging/dist/server/credentials.js +147 -0
  81. package/packages/logging/dist/server/credentials.js.map +1 -0
  82. package/packages/logging/dist/server/http.d.ts +36 -0
  83. package/packages/logging/dist/server/http.d.ts.map +1 -0
  84. package/packages/logging/dist/server/http.js +139 -0
  85. package/packages/logging/dist/server/http.js.map +1 -0
  86. package/packages/logging/dist/server/index-store.d.ts +95 -0
  87. package/packages/logging/dist/server/index-store.d.ts.map +1 -0
  88. package/packages/logging/dist/server/index-store.js +190 -0
  89. package/packages/logging/dist/server/index-store.js.map +1 -0
  90. package/packages/logging/dist/server/index.d.ts +22 -0
  91. package/packages/logging/dist/server/index.d.ts.map +1 -0
  92. package/packages/logging/dist/server/index.js +15 -0
  93. package/packages/logging/dist/server/index.js.map +1 -0
  94. package/packages/logging/dist/server/keys.d.ts +22 -0
  95. package/packages/logging/dist/server/keys.d.ts.map +1 -0
  96. package/packages/logging/dist/server/keys.js +24 -0
  97. package/packages/logging/dist/server/keys.js.map +1 -0
  98. package/packages/logging/dist/server/outbox-worker.d.ts +55 -0
  99. package/packages/logging/dist/server/outbox-worker.d.ts.map +1 -0
  100. package/packages/logging/dist/server/outbox-worker.js +95 -0
  101. package/packages/logging/dist/server/outbox-worker.js.map +1 -0
  102. package/packages/logging/dist/server/outbox.d.ts +112 -0
  103. package/packages/logging/dist/server/outbox.d.ts.map +1 -0
  104. package/packages/logging/dist/server/outbox.js +247 -0
  105. package/packages/logging/dist/server/outbox.js.map +1 -0
  106. package/packages/logging/dist/server/service.d.ts +83 -0
  107. package/packages/logging/dist/server/service.d.ts.map +1 -0
  108. package/packages/logging/dist/server/service.js +144 -0
  109. package/packages/logging/dist/server/service.js.map +1 -0
  110. package/packages/logging/dist/shipper.d.ts +20 -4
  111. package/packages/logging/dist/shipper.d.ts.map +1 -1
  112. package/packages/logging/dist/shipper.js +31 -5
  113. package/packages/logging/dist/shipper.js.map +1 -1
  114. package/packages/logging/dist/singleton.d.ts.map +1 -1
  115. package/packages/logging/dist/singleton.js +3 -0
  116. package/packages/logging/dist/singleton.js.map +1 -1
  117. package/packages/logging/dist/types.d.ts +28 -1
  118. package/packages/logging/dist/types.d.ts.map +1 -1
  119. package/packages/logging/dist/types.js +8 -0
  120. package/packages/logging/dist/types.js.map +1 -1
  121. package/packages/logging/package.json +1 -1
  122. package/packages/logging/src/classification.ts +175 -0
  123. package/packages/logging/src/config.ts +60 -3
  124. package/packages/logging/src/index.ts +45 -1
  125. package/packages/logging/src/ingest/schema.ts +295 -0
  126. package/packages/logging/src/installation.ts +76 -0
  127. package/packages/logging/src/sensitive-keys.ts +40 -0
  128. package/packages/logging/src/server/credentials.ts +198 -0
  129. package/packages/logging/src/server/http.ts +170 -0
  130. package/packages/logging/src/server/index-store.ts +242 -0
  131. package/packages/logging/src/server/index.ts +56 -0
  132. package/packages/logging/src/server/keys.ts +32 -0
  133. package/packages/logging/src/server/outbox-worker.ts +124 -0
  134. package/packages/logging/src/server/outbox.ts +316 -0
  135. package/packages/logging/src/server/service.ts +196 -0
  136. package/packages/logging/src/shipper.ts +54 -8
  137. package/packages/logging/src/singleton.ts +3 -0
  138. package/packages/logging/src/types.ts +29 -1
  139. package/packages/logging/test/classification.test.ts +137 -0
  140. package/packages/logging/test/identity-transport.test.ts +197 -0
  141. package/packages/logging/test/ingest-schema.test.ts +184 -0
  142. package/packages/logging/test/integration.test.ts +9 -4
  143. package/packages/logging/test/log-http.test.ts +246 -0
  144. package/packages/logging/test/server.test.ts +444 -0
  145. package/packages/logging/test/shipper.test.ts +11 -11
  146. package/packages/logging/test/spool.test.ts +4 -1
  147. package/packages/mcp-adapter/package.json +1 -1
  148. package/packages/memory-engine/package.json +1 -1
  149. package/packages/milestone-manager/package.json +1 -1
  150. package/packages/model-registry/package.json +1 -1
  151. package/packages/nextjs-plugin/package.json +1 -1
  152. package/packages/notification/dist/adapters/detail-format.d.ts +34 -0
  153. package/packages/notification/dist/adapters/detail-format.d.ts.map +1 -0
  154. package/packages/notification/dist/adapters/detail-format.js +55 -0
  155. package/packages/notification/dist/adapters/detail-format.js.map +1 -0
  156. package/packages/notification/dist/adapters/email-adapter.d.ts.map +1 -1
  157. package/packages/notification/dist/adapters/email-adapter.js +3 -2
  158. package/packages/notification/dist/adapters/email-adapter.js.map +1 -1
  159. package/packages/notification/dist/adapters/line-adapter.d.ts.map +1 -1
  160. package/packages/notification/dist/adapters/line-adapter.js +3 -2
  161. package/packages/notification/dist/adapters/line-adapter.js.map +1 -1
  162. package/packages/notification/dist/adapters/ntfy-adapter.d.ts.map +1 -1
  163. package/packages/notification/dist/adapters/ntfy-adapter.js +3 -2
  164. package/packages/notification/dist/adapters/ntfy-adapter.js.map +1 -1
  165. package/packages/notification/dist/adapters/telegram-adapter.d.ts +14 -0
  166. package/packages/notification/dist/adapters/telegram-adapter.d.ts.map +1 -1
  167. package/packages/notification/dist/adapters/telegram-adapter.js +83 -67
  168. package/packages/notification/dist/adapters/telegram-adapter.js.map +1 -1
  169. package/packages/notification/dist/notification-center.d.ts.map +1 -1
  170. package/packages/notification/dist/notification-center.js +1 -0
  171. package/packages/notification/dist/notification-center.js.map +1 -1
  172. package/packages/notification/dist/types.d.ts +3 -0
  173. package/packages/notification/dist/types.d.ts.map +1 -1
  174. package/packages/notification/package.json +1 -1
  175. package/packages/notification/src/adapters/detail-format.ts +74 -0
  176. package/packages/notification/src/adapters/email-adapter.ts +3 -2
  177. package/packages/notification/src/adapters/line-adapter.ts +3 -2
  178. package/packages/notification/src/adapters/ntfy-adapter.ts +3 -2
  179. package/packages/notification/src/adapters/telegram-adapter.ts +92 -74
  180. package/packages/notification/src/notification-center.ts +1 -0
  181. package/packages/notification/src/types.ts +3 -0
  182. package/packages/notification/test/detail-format.test.ts +106 -0
  183. package/packages/observability/package.json +1 -1
  184. package/packages/okf-indexer/package.json +1 -1
  185. package/packages/paperclip-integration/package.json +1 -1
  186. package/packages/performance-optimizer/package.json +1 -1
  187. package/packages/permission-mode/package.json +1 -1
  188. package/packages/privilege-broker/package.json +1 -1
  189. package/packages/project-analyzer/package.json +1 -1
  190. package/packages/project-bootstrap/package.json +1 -1
  191. package/packages/projection-engine/package.json +1 -1
  192. package/packages/prompt-compiler/package.json +1 -1
  193. package/packages/prompt-versioning/package.json +1 -1
  194. package/packages/provider-adapter-sdk/package.json +1 -1
  195. package/packages/provider-router/package.json +1 -1
  196. package/packages/provider-selector/package.json +1 -1
  197. package/packages/providers/package.json +1 -1
  198. package/packages/qdrant-skills/package.json +1 -1
  199. package/packages/quota-manager/package.json +1 -1
  200. package/packages/rate-limiter/package.json +1 -1
  201. package/packages/react-vite-plugin/package.json +1 -1
  202. package/packages/relay/package.json +1 -1
  203. package/packages/release-manager/package.json +1 -1
  204. package/packages/requirement-compiler/package.json +1 -1
  205. package/packages/runtime/package.json +1 -1
  206. package/packages/scheduler/package.json +1 -1
  207. package/packages/scheduler-adapter/package.json +1 -1
  208. package/packages/session/package.json +1 -1
  209. package/packages/session-api/package.json +1 -1
  210. package/packages/session-export/package.json +1 -1
  211. package/packages/shared-context/package.json +1 -1
  212. package/packages/skill-mcp-client/package.json +1 -1
  213. package/packages/skill-registry/package.json +1 -1
  214. package/packages/skills/package.json +1 -1
  215. package/packages/sprint-planner/package.json +1 -1
  216. package/packages/subscription-engine/package.json +1 -1
  217. package/packages/task-compiler/package.json +1 -1
  218. package/packages/telegram/package.json +1 -1
  219. package/packages/tencentdb-memory/package.json +1 -1
  220. package/packages/tencentdb-sync/package.json +1 -1
  221. package/packages/test-data-generator/package.json +1 -1
  222. package/packages/test-generator/package.json +1 -1
  223. package/packages/todo-bd-sync/package.json +1 -1
  224. package/packages/token-estimation/package.json +1 -1
  225. package/packages/token-optimizer/package.json +1 -1
  226. package/packages/trajectory/package.json +1 -1
  227. package/packages/tui/package.json +1 -1
  228. package/packages/types/package.json +1 -1
  229. package/packages/voice-api/package.json +1 -1
  230. package/packages/webmcp-tester/package.json +1 -1
  231. package/packages/wiki/package.json +1 -1
  232. package/packages/workflow-events/package.json +1 -1
  233. package/packages/workspace-scanner/package.json +1 -1
  234. package/packages/worktree/package.json +1 -1
  235. package/packages/write-review/package.json +1 -1
  236. package/scripts/unified-webhook-server.ts +86 -81
package/AGENTS.md CHANGED
@@ -648,20 +648,41 @@ Production detection ≠ deployment authorization
648
648
 
649
649
  ## Centralized Application Logging
650
650
 
651
- All application logs can be shipped to **Cloudflare R2** (durable archive) and to the
652
- **unified webhook server** (live path). The pipeline lives in `packages/logging`
653
- (`@pi-harness/logging`); the harness uses the process-wide singleton from it.
651
+ All application logs can be shipped to the **unified webhook server** (ingest path),
652
+ which is the only component that writes to **Cloudflare R2** (durable archive). The
653
+ pipeline lives in `packages/logging` (`@pi-harness/logging`); the harness uses the
654
+ process-wide singleton from it.
654
655
 
655
- **Delivery order** (first success wins, the rest are skipped):
656
+ **Client side** (first success wins, the rest are skipped - a fallback chain, never
657
+ a broadcast):
656
658
 
657
659
  ```text
658
- producer -> redact -> sample -> buffer -> R2 -> webhook -> local spool (~/.pi-harness-runtime/logs/spool)
660
+ producer -> classify -> redact -> sample -> buffer -> webhook -> local spool (~/.pi-harness-runtime/logs/spool)
661
+ ```
662
+
663
+ **Server side** (durable hand-off, then an independent upload):
664
+
665
+ ```text
666
+ POST /api/logs -> authenticate -> validate -> durable outbox -> 202
667
+ |
668
+ v
669
+ worker -> R2 -> done
659
670
  ```
660
671
 
661
672
  - The local spool is the fallback: if every transport fails the batch is written to
662
673
  disk as NDJSON and re-shipped on the next successful flush. Nothing is lost, only delayed.
663
674
  - The local log files (`~/.pi-harness-runtime/logs/*.jsonl`, `harness/*.log`) stay the
664
675
  source of truth. The centralized pipeline is a copy for the archive.
676
+ - **Only the server writes to R2.** In `auto` mode the webhook is preferred when
677
+ `PI_LOG_WEBHOOK_URL` is set, so client machines need no R2 credentials.
678
+
679
+ **What may leave the machine** (`classify`): an event allowlist decides, not a
680
+ denylist. Structured service/session/validation events are remote; the catch-all
681
+ `harness.log` mirror of a local log line, prompts, responses and command output stay
682
+ local. A message only travels when it looks sanitized (one line, short, no path, no
683
+ URL with a query string), and fields with a private key name (`prompt`, `output`,
684
+ `path`, `url`, `user`, ...) are dropped. `PI_LOG_DIAGNOSTIC=1` relaxes the message rule
685
+ for a user who explicitly asked for more - it never widens the event allowlist.
665
686
 
666
687
  **Configuration** (environment first, then `~/.pi-harness-runtime/keys/`):
667
688
 
@@ -676,6 +697,9 @@ producer -> redact -> sample -> buffer -> R2 -> webhook -> local spool (~/.pi-ha
676
697
  | `PI_LOG_FLUSH_INTERVAL_MS` | Automatic flush interval | `15000` |
677
698
  | `PI_LOG_WEBHOOK_URL` | Ingest URL of the webhook server | unset |
678
699
  | `PI_LOG_WEBHOOK_TOKEN` | Bearer token for the ingest endpoint | unset |
700
+ | `PI_LOG_APP_VERSION` | Version reported with every batch | unset |
701
+ | `PI_LOG_INSTALLATION_ID` | Stable id of this installation | generated once |
702
+ | `PI_LOG_DIAGNOSTIC` | `1` allows raw messages (events stay allowlisted) | unset |
679
703
  | `PI_LOG_R2_BUCKET` / `PI_LOG_R2_ENDPOINT` / `PI_LOG_R2_ACCESS_KEY_ID` / `PI_LOG_R2_SECRET_ACCESS_KEY` | R2 credentials | key files |
680
704
  | `PI_LOG_SPOOL_DIR` | Local spool directory | `~/.pi-harness-runtime/logs/spool` |
681
705
 
@@ -686,9 +710,32 @@ R2 credentials are read from the key files `r2-bucket-name.txt`, `r2-endpoint.tx
686
710
 
687
711
  - Emit through the singleton: `centralInfo/centralWarn/centralError(source, event, message?, fields?)`.
688
712
  The `source` identifies the component, the `event` is a dotted name.
713
+ - The event name decides whether a record may leave the machine. Use one of the
714
+ allowlisted shapes (`service.*`, `session.*`, `validation.*`, `harness.service-diagnostics.*`,
715
+ `harness.planner.decision`, `harness.glm-quota.quota`, ...) or a `warn`/`error` level.
716
+ An unknown event stays local.
689
717
  - Redaction is automatic (key names, credential patterns, truncation), but producers must
690
718
  not pass user content: prompts, raw model output and message bodies are dropped by the
691
719
  redactor, so shipping them is pointless.
692
720
  - Never put a credential in a log message. The redactor is a safety net, not a licence.
693
- - The webhook server exposes `POST /api/logs` for the ingest path. Set `LOG_INGEST_TOKEN`
694
- to require a bearer token; the server re-redacts every batch and relays it to R2.
721
+ - Prefer a structured event over mirroring a local log line. The `logToFile()` mirror
722
+ (`harness.log`) stays local on purpose - the local file is the source of truth.
723
+
724
+ **Server endpoints** (all require an ingest credential):
725
+
726
+ | Route | Method | Purpose |
727
+ |-------|--------|---------|
728
+ | `/api/logs` | POST | Accept a batch. `202` only after the durable write, `503` when the endpoint is not configured or the queue is unavailable (the client keeps its spool). |
729
+ | `/api/logs/query` | POST | Read-only, tenant-scoped metadata query (installation, session, time range, level, source, event). Bounded and paginated; never returns message text. |
730
+ | `/api/logs/health` | GET | Queue depth, oldest pending age, failure count, last error. |
731
+
732
+ **Ingest credentials** (server side):
733
+
734
+ - The endpoint **fails closed**: without a credential every write is refused with `503`.
735
+ - `LOG_INGEST_TOKEN` (or `keys/log-ingest-token.txt`) is a shared token for a
736
+ single-tenant deployment; `LOG_INGEST_TENANT` names its tenant.
737
+ - `keys/log-ingest-credentials.json` holds scoped credentials, one per installation:
738
+ `{ "id", "tenantId", "label", "scopes", "tokenHash", "createdAt", "revokedAt" }`.
739
+ Tokens are stored as SHA-256 hashes; the tenant is derived from the credential and
740
+ never from the request body.
741
+ - Rotate by adding an entry and revoking the old one (`revokedAt`).
@@ -105,7 +105,7 @@ export class HarnessNotificationEvents {
105
105
  */
106
106
  async emitQuotaPaused(resumeAt?: string): Promise<void> {
107
107
  await this.emit("QuotaPaused", {
108
- error: resumeAt ? `Resumes at ${resumeAt}` : undefined,
108
+ reason: resumeAt ? `Resumes at ${resumeAt}` : undefined,
109
109
  });
110
110
  }
111
111
 
@@ -113,7 +113,7 @@ export class HarnessNotificationEvents {
113
113
  * Emit ResumeScheduled event
114
114
  */
115
115
  async emitResumeScheduled(resumeAt: string): Promise<void> {
116
- await this.emit("ResumeScheduled", { error: resumeAt });
116
+ await this.emit("ResumeScheduled", { reason: resumeAt });
117
117
  }
118
118
 
119
119
  /**
@@ -121,7 +121,7 @@ export class HarnessNotificationEvents {
121
121
  */
122
122
  async emitContextCompacted(tokensCompacted?: number): Promise<void> {
123
123
  await this.emit("ContextCompacted", {
124
- error: tokensCompacted
124
+ reason: tokensCompacted
125
125
  ? `Compacted ${tokensCompacted.toLocaleString()} tokens`
126
126
  : undefined,
127
127
  });
@@ -132,7 +132,7 @@ export class HarnessNotificationEvents {
132
132
  */
133
133
  async emitOutputLimitContinued(attempt: number): Promise<void> {
134
134
  await this.emit("OutputLimitContinued", {
135
- error: `Attempt ${attempt}`,
135
+ reason: `Attempt ${attempt}`,
136
136
  });
137
137
  }
138
138
 
@@ -149,7 +149,7 @@ export class HarnessNotificationEvents {
149
149
  * Emit HumanReviewNeeded event
150
150
  */
151
151
  async emitHumanReviewNeeded(taskId: string, reason: string): Promise<void> {
152
- await this.emit("HumanReviewNeeded", { taskId, error: reason });
152
+ await this.emit("HumanReviewNeeded", { taskId, reason });
153
153
  }
154
154
 
155
155
  /**
@@ -163,7 +163,7 @@ export class HarnessNotificationEvents {
163
163
  * Emit JobCancelled event
164
164
  */
165
165
  async emitJobCancelled(reason?: string): Promise<void> {
166
- await this.emit("JobCancelled", { error: reason });
166
+ await this.emit("JobCancelled", { reason });
167
167
  }
168
168
 
169
169
  /**
package/index.ts CHANGED
@@ -5610,7 +5610,7 @@ Run \`bd ready\` to see current bd issues.
5610
5610
  pi.sendUserMessage(content, { deliverAs });
5611
5611
  await nc("ResumeScheduled", {
5612
5612
  requirement: "Session auto-resume",
5613
- error: reason,
5613
+ reason,
5614
5614
  });
5615
5615
  } catch (error) {
5616
5616
  logToFile(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-harness-runtime",
3
- "version": "1.1.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
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.396",
3
+ "version": "1.1.398",
4
4
  "description": "Learning engine for extracting lessons from runtime execution (RFC-0058)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",