pi-harness-runtime 1.1.252 → 1.1.254

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 (109) hide show
  1. package/index.ts +41 -23
  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/dist/src/index.d.ts +1 -0
  19. package/packages/codex-watcher/dist/src/index.d.ts.map +1 -1
  20. package/packages/codex-watcher/dist/src/index.js +41 -17
  21. package/packages/codex-watcher/dist/src/index.js.map +1 -1
  22. package/packages/codex-watcher/dist/src/session.js +23 -29
  23. package/packages/codex-watcher/dist/src/session.js.map +1 -1
  24. package/packages/codex-watcher/package.json +1 -1
  25. package/packages/codex-watcher/src/index.ts +45 -19
  26. package/packages/codex-watcher/src/session.ts +20 -33
  27. package/packages/config-capture/package.json +1 -1
  28. package/packages/context-compiler/package.json +1 -1
  29. package/packages/context-discovery/package.json +1 -1
  30. package/packages/context-manager/package.json +1 -1
  31. package/packages/cookie-sanitizer/package.json +1 -1
  32. package/packages/cost-optimizer/package.json +1 -1
  33. package/packages/dependency-analyzer/package.json +1 -1
  34. package/packages/django-plugin/package.json +1 -1
  35. package/packages/doc-generator/package.json +1 -1
  36. package/packages/e2e-tester/package.json +1 -1
  37. package/packages/evaluation-engine/package.json +1 -1
  38. package/packages/evaluation-runner/package.json +1 -1
  39. package/packages/event-bus/package.json +1 -1
  40. package/packages/event-store/package.json +1 -1
  41. package/packages/experience-replay/package.json +1 -1
  42. package/packages/feedback-collector/package.json +1 -1
  43. package/packages/file-copy-helper/package.json +1 -1
  44. package/packages/framework-detector/package.json +1 -1
  45. package/packages/framework-plugin-sdk/package.json +1 -1
  46. package/packages/frappe-plugin/package.json +1 -1
  47. package/packages/generic-web-plugin/package.json +1 -1
  48. package/packages/health-monitor/package.json +1 -1
  49. package/packages/intent-analyzer/package.json +1 -1
  50. package/packages/jev-judge/package.json +1 -1
  51. package/packages/knowledge-graph/package.json +1 -1
  52. package/packages/knowledge-retrieval/package.json +1 -1
  53. package/packages/laravel-plugin/package.json +1 -1
  54. package/packages/learning-engine/package.json +1 -1
  55. package/packages/mcp-adapter/package.json +1 -1
  56. package/packages/memory-engine/package.json +1 -1
  57. package/packages/milestone-manager/package.json +1 -1
  58. package/packages/model-registry/package.json +1 -1
  59. package/packages/nextjs-plugin/package.json +1 -1
  60. package/packages/notification/package.json +1 -1
  61. package/packages/observability/package.json +1 -1
  62. package/packages/okf-indexer/package.json +1 -1
  63. package/packages/paperclip-integration/package.json +1 -1
  64. package/packages/performance-optimizer/package.json +1 -1
  65. package/packages/privilege-broker/package.json +1 -1
  66. package/packages/project-analyzer/package.json +1 -1
  67. package/packages/project-bootstrap/package.json +1 -1
  68. package/packages/projection-engine/package.json +1 -1
  69. package/packages/prompt-compiler/package.json +1 -1
  70. package/packages/prompt-versioning/package.json +1 -1
  71. package/packages/provider-adapter-sdk/package.json +1 -1
  72. package/packages/provider-router/package.json +1 -1
  73. package/packages/provider-selector/package.json +1 -1
  74. package/packages/providers/package.json +1 -1
  75. package/packages/qdrant-skills/package.json +1 -1
  76. package/packages/quota-manager/package.json +1 -1
  77. package/packages/rate-limiter/package.json +1 -1
  78. package/packages/react-vite-plugin/package.json +1 -1
  79. package/packages/release-manager/package.json +1 -1
  80. package/packages/requirement-compiler/package.json +1 -1
  81. package/packages/runtime/package.json +1 -1
  82. package/packages/scheduler/package.json +1 -1
  83. package/packages/scheduler-adapter/package.json +1 -1
  84. package/packages/session/package.json +1 -1
  85. package/packages/session-api/package.json +1 -1
  86. package/packages/session-export/package.json +1 -1
  87. package/packages/shared-context/package.json +1 -1
  88. package/packages/skill-mcp-client/package.json +1 -1
  89. package/packages/skill-registry/package.json +1 -1
  90. package/packages/skills/package.json +1 -1
  91. package/packages/sprint-planner/package.json +1 -1
  92. package/packages/subscription-engine/package.json +1 -1
  93. package/packages/task-compiler/package.json +1 -1
  94. package/packages/telegram/package.json +1 -1
  95. package/packages/tencentdb-memory/package.json +1 -1
  96. package/packages/tencentdb-sync/package.json +1 -1
  97. package/packages/test-data-generator/package.json +1 -1
  98. package/packages/test-generator/package.json +1 -1
  99. package/packages/todo-bd-sync/package.json +1 -1
  100. package/packages/token-estimation/package.json +1 -1
  101. package/packages/token-optimizer/package.json +1 -1
  102. package/packages/trajectory/package.json +1 -1
  103. package/packages/tui/package.json +1 -1
  104. package/packages/types/package.json +1 -1
  105. package/packages/webmcp-tester/package.json +1 -1
  106. package/packages/workflow-events/package.json +1 -1
  107. package/packages/workspace-scanner/package.json +1 -1
  108. package/packages/worktree/package.json +1 -1
  109. package/packages/write-review/package.json +1 -1
@@ -18,7 +18,7 @@
18
18
  * // later: handle.stop();
19
19
  */
20
20
 
21
- import { existsSync, openSync, readFileSync, statSync } from "node:fs";
21
+ import { existsSync, openSync, readFileSync, readSync, fstatSync, closeSync } from "node:fs";
22
22
  import { homedir } from "node:os";
23
23
  import { join } from "node:path";
24
24
  import { classifyMessage, parseNewMessages } from "./parser.js";
@@ -75,6 +75,7 @@ export async function getVisibleMessages(
75
75
  * 1. Polls session_index.jsonl to detect active session changes
76
76
  * 2. Tracks file position so it only reads new lines (no re-read of full file)
77
77
  * 3. Calls onMessages with incremental messages each poll cycle
78
+ * 4. Preserves incomplete JSON lines until a complete newline-delimited record arrives
78
79
  */
79
80
  export function startWatcher(options: WatcherOptions = {}): WatcherHandle {
80
81
  const {
@@ -89,6 +90,8 @@ export function startWatcher(options: WatcherOptions = {}): WatcherHandle {
89
90
  let currentFd: ReturnType<typeof openSync> | null = null;
90
91
  let currentPath: string | null = null;
91
92
  let currentOrdinal = 0;
93
+ let currentBytePos = 0; // Track byte position we're at in the file
94
+ let pendingText = ""; // Preserve incomplete lines across reads
92
95
  let pollCount = 0;
93
96
  const maxIdlePolls = options.maxIdlePolls ?? Infinity;
94
97
 
@@ -99,11 +102,11 @@ export function startWatcher(options: WatcherOptions = {}): WatcherHandle {
99
102
  stopped = true;
100
103
  if (currentFd !== null) {
101
104
  try {
102
- const { closeSync } = require("node:fs") as typeof import("node:fs");
103
105
  closeSync(currentFd);
104
106
  } catch {
105
107
  // ignore
106
108
  }
109
+ currentFd = null;
107
110
  }
108
111
  }
109
112
 
@@ -122,43 +125,65 @@ export function startWatcher(options: WatcherOptions = {}): WatcherHandle {
122
125
  function openRollout(path: string) {
123
126
  if (currentFd !== null && currentPath !== path) {
124
127
  try {
125
- const { closeSync } = require("node:fs") as typeof import("node:fs");
126
128
  closeSync(currentFd);
127
129
  } catch {
128
130
  // ignore
129
131
  }
132
+ currentFd = null;
130
133
  }
131
134
 
132
- // stat to get current size
133
- const stat = statSync(path);
135
+ // Open the file for reading
134
136
  currentFd = openSync(path, "r");
135
137
  currentPath = path;
136
138
  currentOrdinal = 0;
137
- return { fd: currentFd, size: stat.size };
139
+ currentBytePos = 0;
140
+ pendingText = ""; // Reset pending text for new file
141
+ return currentFd;
138
142
  }
139
143
 
144
+ /**
145
+ * Read new lines from the file, preserving incomplete records.
146
+ * Returns complete lines only; incomplete trailing data is kept for next read.
147
+ */
140
148
  function readNewLines(
141
149
  fd: number,
142
- knownSize: number,
143
150
  ): {
144
151
  lines: string[];
145
- newSize: number;
152
+ newBytePos: number;
146
153
  } {
147
- const { readSync, fstatSync } =
148
- require("node:fs") as typeof import("node:fs");
149
154
  const stat = fstatSync(fd);
150
- const newSize = stat.size;
155
+ const fileSize = stat.size;
151
156
 
152
- if (newSize <= knownSize) {
153
- return { lines: [], newSize: knownSize };
157
+ // Read from our tracked position to current end of file
158
+ const bytesToRead = fileSize - currentBytePos;
159
+ if (bytesToRead <= 0) {
160
+ return { lines: [], newBytePos: currentBytePos };
154
161
  }
155
162
 
156
- const buf = Buffer.alloc(newSize - knownSize);
157
- const bytesRead = readSync(fd, buf, 0, buf.length, knownSize);
163
+ const buf = Buffer.alloc(bytesToRead);
164
+ const bytesRead = readSync(fd, buf, 0, buf.length, currentBytePos);
158
165
  const text = buf.subarray(0, bytesRead).toString("utf8");
159
- const lines = text.split("\n").filter((l) => l.trim());
160
166
 
161
- return { lines, newSize };
167
+ // Prepend any pending text from previous incomplete read
168
+ const fullText = pendingText + text;
169
+
170
+ // Split by newline, keeping track of whether we ended with a complete line
171
+ const lines = fullText.split("\n");
172
+
173
+ // If text doesn't end with newline, last element is incomplete - save it
174
+ if (!text.endsWith("\n")) {
175
+ pendingText = lines.pop() ?? "";
176
+ } else {
177
+ pendingText = "";
178
+ }
179
+
180
+ // Filter out empty lines
181
+ const completeLines = lines.filter((l) => l.trim());
182
+
183
+ // Update our tracked position by bytes actually read
184
+ const newBytePos = currentBytePos + bytesRead;
185
+
186
+ return { lines: completeLines, newBytePos };
162
187
  }
163
188
 
164
189
  async function poll() {
@@ -198,8 +223,9 @@ export function startWatcher(options: WatcherOptions = {}): WatcherHandle {
198
223
  return;
199
224
  }
200
225
 
201
- const stat = statSync(session.rolloutPath);
202
- const { lines } = readNewLines(currentFd, stat.size);
226
+ // Read new lines from our tracked byte position
227
+ const { lines, newBytePos } = readNewLines(currentFd!);
228
+ currentBytePos = newBytePos; // Update tracked position
203
229
 
204
230
  if (lines.length > 0) {
205
231
  pollCount = 0;
@@ -2,7 +2,7 @@
2
2
  * Session discovery — reads ~/.codex/session_index.jsonl to find active sessions.
3
3
  */
4
4
 
5
- import { existsSync, readFileSync } from "node:fs";
5
+ import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
6
6
  import { homedir } from "node:os";
7
7
  import { join } from "node:path";
8
8
  import type { CodexSession } from "./types.js";
@@ -69,51 +69,38 @@ function findRolloutPath(sessionId: string, codexDir?: string): string {
69
69
  // The rollout path follows: sessions/YYYY/MM/DD/rollout-YYYY-MM-DDTHH-MM-SS-<sessionId>.jsonl
70
70
  // We need to find the file whose name ends with <sessionId>.jsonl
71
71
  // Since there can be multiple sessions per day, iterate all files.
72
- try {
73
- const { readdirSync } = require("node:fs") as typeof import("node:fs");
74
- for (const dirPath of walkDirs(sessionsDir)) {
75
- for (const file of readdirSync(dirPath)) {
76
- if (file.endsWith(`${sessionId}.jsonl`)) {
77
- return join(dirPath, file);
78
- }
79
- }
80
- }
81
- } catch {
82
- // walkSync may not be available on all Node versions; fall back to find
83
- }
84
- return findRolloutPathFallback(sessionId, sessionsDir);
85
- }
86
-
87
- function findRolloutPathFallback(
88
- sessionId: string,
89
- sessionsDir: string,
90
- ): string {
91
72
  const found = walkForSession(sessionsDir, sessionId);
92
- return found ?? join(sessionsDir, "unknown", `${sessionId}.jsonl`);
73
+ if (found) return found;
74
+ return join(sessionsDir, "unknown", `${sessionId}.jsonl`);
93
75
  }
94
76
 
95
77
  /** Recursively walk all subdirectories, yielding each directory path. */
96
78
  function* walkDirs(dir: string): Generator<string> {
97
- const { readdirSync, statSync } =
98
- require("node:fs") as typeof import("node:fs");
99
- for (const entry of readdirSync(dir)) {
100
- const full = join(dir, entry);
101
- const stat = statSync(full);
102
- if (stat.isDirectory()) {
103
- yield full;
104
- yield* walkDirs(full);
79
+ try {
80
+ for (const entry of readdirSync(dir)) {
81
+ const full = join(dir, entry);
82
+ const stat = statSync(full);
83
+ if (stat.isDirectory()) {
84
+ yield full;
85
+ yield* walkDirs(full);
86
+ }
105
87
  }
88
+ } catch {
89
+ // Directory may not exist or be readable
106
90
  }
107
91
  }
108
92
 
109
93
  /** Find the rollout file for a given session ID by walking directories. */
110
94
  function walkForSession(sessionsDir: string, sessionId: string): string | null {
111
- const { readdirSync } = require("node:fs") as typeof import("node:fs");
112
95
  for (const dirPath of walkDirs(sessionsDir)) {
113
- for (const file of readdirSync(dirPath)) {
114
- if (file.startsWith("rollout-") && file.endsWith(`${sessionId}.jsonl`)) {
115
- return join(dirPath, file);
96
+ try {
97
+ for (const file of readdirSync(dirPath)) {
98
+ if (file.startsWith("rollout-") && file.endsWith(`${sessionId}.jsonl`)) {
99
+ return join(dirPath, file);
100
+ }
116
101
  }
102
+ } catch {
103
+ // Skip unreadable directories
117
104
  }
118
105
  }
119
106
  return null;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moocoding/config-capture",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "Auto-capture API-fetched configuration values to AGENTS.md",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/context-compiler",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
4
4
  "description": "Context Window Manager — prevents model context overflow via compaction and resume prompts (RFC-0010)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/cookie-sanitizer",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
4
4
  "description": "Auto-Doc Generator — generate documentation from source code (RFC-0014)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/e2e-tester",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/event-store",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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.252",
3
+ "version": "1.1.254",
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/mcp-adapter",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/memory-engine",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "Memory engine with OKF integration for durable knowledge management (RFC-0060)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/milestone-manager",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "Track milestones and alerts when items are at risk",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/model-registry",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "Model Registry for pi-harness-runtime — centralized model metadata with pricing",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/nextjs-plugin",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "Next.js framework detection and analysis for pi-harness-runtime (RFC-0062)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/notification",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "pi-harness-runtime — notification",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/observability",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "Comprehensive observability system with structured logging, tracing, metrics, and alerting",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/okf-indexer",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "OKF document indexer for SKILL.md files (RFC-0106)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/paperclip-integration",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "Paperclip API integration: poll agent inbox, route tasks to pi.dev, Telegram alerts",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/performance-optimizer",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "Performance optimization analyzer for pi-harness runtime (RFC-0056)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/privilege-broker",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "Privilege Broker — capability registry and command executor for autonomous runtime (RFC-0101 §7)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/project-analyzer",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "Project analysis system for pi-harness-runtime - detects frameworks, rules, and project structure",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/project-bootstrap",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "Project scaffolding from typed ProjectSpec",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/projection-engine",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/prompt-compiler",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "Deterministic prompt compiler for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/prompt-versioning",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "type": "module",
5
5
  "description": "Version control for prompts with rollback support (RFC-0019)",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/provider-adapter-sdk",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "SDK for building, testing, and registering AI provider adapters",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/provider-router",
3
- "version": "1.1.252",
3
+ "version": "1.1.254",
4
4
  "description": "Enhanced Provider Router for pi-harness-runtime — intelligent routing with capabilities, costs, and quotas",
5
5
  "type": "module",
6
6
  "main": "./dist/provider-router.js",