pi-harness-runtime 1.1.366 → 1.1.368

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 (113) hide show
  1. package/AGENTS.md +33 -0
  2. package/index.ts +12 -0
  3. package/package.json +1 -1
  4. package/packages/a2a-adapter/package.json +1 -1
  5. package/packages/agent-policy/package.json +1 -1
  6. package/packages/architecture-generator/package.json +1 -1
  7. package/packages/auth/package.json +1 -1
  8. package/packages/autonomous-refactor/package.json +1 -1
  9. package/packages/autonomous-runtime/package.json +1 -1
  10. package/packages/cache-strategy/package.json +1 -1
  11. package/packages/capability-registry/package.json +1 -1
  12. package/packages/checkpoint/package.json +1 -1
  13. package/packages/cli-plugin-sdk/package.json +1 -1
  14. package/packages/clipboard/package.json +1 -1
  15. package/packages/clipboard-plugin/package.json +1 -1
  16. package/packages/code-generation/package.json +1 -1
  17. package/packages/code-review/package.json +1 -1
  18. package/packages/codex-adapter/package.json +1 -1
  19. package/packages/codex-watcher/package.json +1 -1
  20. package/packages/config-capture/package.json +1 -1
  21. package/packages/connection-runtime/package.json +1 -1
  22. package/packages/context-compiler/package.json +1 -1
  23. package/packages/context-discovery/package.json +1 -1
  24. package/packages/context-manager/package.json +1 -1
  25. package/packages/contracts/dist/workspace-env.d.ts +46 -0
  26. package/packages/contracts/dist/workspace-env.js +231 -0
  27. package/packages/contracts/package.json +1 -1
  28. package/packages/contracts/src/workspace-env.ts +278 -0
  29. package/packages/cookie-sanitizer/package.json +1 -1
  30. package/packages/cost-optimizer/package.json +1 -1
  31. package/packages/dependency-analyzer/package.json +1 -1
  32. package/packages/django-plugin/package.json +1 -1
  33. package/packages/doc-generator/package.json +1 -1
  34. package/packages/durable-review/package.json +1 -1
  35. package/packages/e2e-tester/package.json +1 -1
  36. package/packages/evaluation-engine/package.json +1 -1
  37. package/packages/evaluation-runner/package.json +1 -1
  38. package/packages/event-bus/package.json +1 -1
  39. package/packages/event-sink/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/permission-mode/package.json +1 -1
  66. package/packages/privilege-broker/package.json +1 -1
  67. package/packages/project-analyzer/package.json +1 -1
  68. package/packages/project-bootstrap/package.json +1 -1
  69. package/packages/projection-engine/package.json +1 -1
  70. package/packages/prompt-compiler/package.json +1 -1
  71. package/packages/prompt-versioning/package.json +1 -1
  72. package/packages/provider-adapter-sdk/package.json +1 -1
  73. package/packages/provider-router/package.json +1 -1
  74. package/packages/provider-selector/package.json +1 -1
  75. package/packages/providers/package.json +1 -1
  76. package/packages/qdrant-skills/package.json +1 -1
  77. package/packages/quota-manager/package.json +1 -1
  78. package/packages/rate-limiter/package.json +1 -1
  79. package/packages/react-vite-plugin/package.json +1 -1
  80. package/packages/relay/package.json +1 -1
  81. package/packages/release-manager/package.json +1 -1
  82. package/packages/requirement-compiler/package.json +1 -1
  83. package/packages/runtime/package.json +1 -1
  84. package/packages/scheduler/package.json +1 -1
  85. package/packages/scheduler-adapter/package.json +1 -1
  86. package/packages/session/package.json +1 -1
  87. package/packages/session-api/package.json +1 -1
  88. package/packages/session-export/package.json +1 -1
  89. package/packages/shared-context/package.json +1 -1
  90. package/packages/skill-mcp-client/package.json +1 -1
  91. package/packages/skill-registry/package.json +1 -1
  92. package/packages/skills/package.json +1 -1
  93. package/packages/sprint-planner/package.json +1 -1
  94. package/packages/subscription-engine/package.json +1 -1
  95. package/packages/task-compiler/package.json +1 -1
  96. package/packages/telegram/package.json +1 -1
  97. package/packages/tencentdb-memory/package.json +1 -1
  98. package/packages/tencentdb-sync/package.json +1 -1
  99. package/packages/test-data-generator/package.json +1 -1
  100. package/packages/test-generator/package.json +1 -1
  101. package/packages/todo-bd-sync/package.json +1 -1
  102. package/packages/token-estimation/package.json +1 -1
  103. package/packages/token-optimizer/package.json +1 -1
  104. package/packages/trajectory/package.json +1 -1
  105. package/packages/tui/package.json +1 -1
  106. package/packages/types/package.json +1 -1
  107. package/packages/voice-api/package.json +1 -1
  108. package/packages/webmcp-tester/package.json +1 -1
  109. package/packages/wiki/package.json +1 -1
  110. package/packages/workflow-events/package.json +1 -1
  111. package/packages/workspace-scanner/package.json +1 -1
  112. package/packages/worktree/package.json +1 -1
  113. package/packages/write-review/package.json +1 -1
@@ -0,0 +1,278 @@
1
+ /**
2
+ * Workspace Environment Detector
3
+ *
4
+ * Detects if the workspace is a development environment by checking:
5
+ * 1. .env file existence and NODE_ENV value
6
+ * 2. package.json "dev" script presence
7
+ * 3. .env.development or .env.local files
8
+ *
9
+ * Stores detected environment in SQLite for agent reference.
10
+ */
11
+
12
+ import { DatabaseSync } from "node:sqlite";
13
+ import { existsSync, readFileSync } from "fs";
14
+ import { join, dirname } from "path";
15
+ import { fileURLToPath } from "url";
16
+
17
+ const __dirname = dirname(fileURLToPath(import.meta.url));
18
+ const STORE_DIR = join(process.env.HOME || "/home/frappe", ".pi-harness-runtime");
19
+
20
+ /**
21
+ * Ensure store directory exists
22
+ */
23
+ function ensureStoreDir(): void {
24
+ if (!existsSync(STORE_DIR)) {
25
+ // mkdirSync is not available in all contexts, use fs promises or exec
26
+ import("fs").then((fs) => fs.mkdirSync(STORE_DIR, { recursive: true }));
27
+ }
28
+ }
29
+
30
+ /**
31
+ * Get workspace database path
32
+ */
33
+ function getDbPath(): string {
34
+ ensureStoreDir();
35
+ return join(STORE_DIR, "workspace-env.sqlite");
36
+ }
37
+
38
+ /**
39
+ * Initialize workspace environment database
40
+ */
41
+ function initDatabase(): DatabaseSync {
42
+ const db = new DatabaseSync(getDbPath());
43
+ db.exec(`
44
+ CREATE TABLE IF NOT EXISTS workspace_env (
45
+ workspace_path TEXT PRIMARY KEY,
46
+ is_dev_env INTEGER NOT NULL DEFAULT 0,
47
+ has_dev_script INTEGER NOT NULL DEFAULT 0,
48
+ node_env TEXT,
49
+ has_env_file INTEGER NOT NULL DEFAULT 0,
50
+ ram_gb REAL,
51
+ detected_at INTEGER NOT NULL,
52
+ updated_at INTEGER NOT NULL
53
+ )
54
+ `);
55
+ return db;
56
+ }
57
+
58
+ /**
59
+ * Detect RAM in GB
60
+ */
61
+ function detectRamGb(): number | null {
62
+ try {
63
+ if (process.platform === "linux") {
64
+ const meminfo = readFileSync("/proc/meminfo", "utf8");
65
+ const match = meminfo.match(/MemTotal:\\s+(\\d+)\\s+kB/);
66
+ if (match) {
67
+ return Math.round((parseInt(match[1], 10) / 1024 / 1024) * 10) / 10;
68
+ }
69
+ } else if (process.platform === "darwin") {
70
+ const out = require("child_process").execSync("sysctl hw.memsize", { encoding: "utf8" });
71
+ const match = out.match(/hw\\.memsize:\\s+(\\d+)/);
72
+ if (match) {
73
+ return Math.round((parseInt(match[1], 10) / 1024 / 1024 / 1024) * 10) / 10;
74
+ }
75
+ }
76
+ } catch {
77
+ // Fallback: return null
78
+ }
79
+ return null;
80
+ }
81
+
82
+ /**
83
+ * Detect if workspace is a dev environment
84
+ */
85
+ export interface WorkspaceEnvResult {
86
+ workspacePath: string;
87
+ isDevEnv: boolean;
88
+ hasDevScript: boolean;
89
+ nodeEnv: string | null;
90
+ hasEnvFile: boolean;
91
+ ramGb: number | null;
92
+ detectedAt: number;
93
+ }
94
+
95
+ /**
96
+ * Detect and store workspace environment
97
+ */
98
+ export function detectWorkspaceEnv(workspacePath: string): WorkspaceEnvResult {
99
+ const now = Date.now();
100
+ const ramGb = detectRamGb();
101
+
102
+ // Check for .env files
103
+ const hasEnvFile = existsSync(join(workspacePath, ".env")) ||
104
+ existsSync(join(workspacePath, ".env.development")) ||
105
+ existsSync(join(workspacePath, ".env.local")) ||
106
+ existsSync(join(workspacePath, ".env.dev"));
107
+
108
+ // Read NODE_ENV from .env file if present
109
+ let nodeEnv: string | null = null;
110
+ const envFile = join(workspacePath, ".env");
111
+ if (existsSync(envFile)) {
112
+ try {
113
+ const envContent = readFileSync(envFile, "utf8");
114
+ const match = envContent.match(/NODE_ENV=(.+)/);
115
+ if (match) {
116
+ nodeEnv = match[1].trim().replace(/['"]/g, "");
117
+ }
118
+ } catch {
119
+ // Ignore read errors
120
+ }
121
+ }
122
+
123
+ // Check for dev script in package.json
124
+ let hasDevScript = false;
125
+ const pkgJsonPath = join(workspacePath, "package.json");
126
+ if (existsSync(pkgJsonPath)) {
127
+ try {
128
+ const pkg = JSON.parse(readFileSync(pkgJsonPath, "utf8"));
129
+ hasDevScript = !!(pkg.scripts && (pkg.scripts.dev || pkg.scripts.development));
130
+ } catch {
131
+ // Ignore parse errors
132
+ }
133
+ }
134
+
135
+ // Determine if this is a dev environment
136
+ // Dev env if: has .env file OR has dev script OR NODE_ENV=development
137
+ const isDevEnv = hasEnvFile || hasDevScript || nodeEnv === "development" || nodeEnv === "dev";
138
+
139
+ // Store in SQLite
140
+ const db = initDatabase();
141
+ db.prepare(`
142
+ INSERT OR REPLACE INTO workspace_env
143
+ (workspace_path, is_dev_env, has_dev_script, node_env, has_env_file, ram_gb, detected_at, updated_at)
144
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
145
+ `).run(workspacePath, isDevEnv ? 1 : 0, hasDevScript ? 1 : 0, nodeEnv, hasEnvFile ? 1 : 0, ramGb, now, now);
146
+
147
+ db.close();
148
+
149
+ return {
150
+ workspacePath,
151
+ isDevEnv,
152
+ hasDevScript,
153
+ nodeEnv,
154
+ hasEnvFile,
155
+ ramGb,
156
+ detectedAt: now,
157
+ };
158
+ }
159
+
160
+ /**
161
+ * Load cached workspace environment
162
+ */
163
+ export function loadWorkspaceEnv(workspacePath: string): WorkspaceEnvResult | null {
164
+ const db = initDatabase();
165
+ const row = db.prepare("SELECT * FROM workspace_env WHERE workspace_path = ?").get(workspacePath) as {
166
+ workspace_path: string;
167
+ is_dev_env: number;
168
+ has_dev_script: number;
169
+ node_env: string | null;
170
+ has_env_file: number;
171
+ ram_gb: number | null;
172
+ detected_at: number;
173
+ } | undefined;
174
+ db.close();
175
+
176
+ if (!row) return null;
177
+
178
+ return {
179
+ workspacePath: row.workspace_path,
180
+ isDevEnv: row.is_dev_env === 1,
181
+ hasDevScript: row.has_dev_script === 1,
182
+ nodeEnv: row.node_env,
183
+ hasEnvFile: row.has_env_file === 1,
184
+ ramGb: row.ram_gb,
185
+ detectedAt: row.detected_at,
186
+ };
187
+ }
188
+
189
+ /**
190
+ * Get or detect workspace environment
191
+ */
192
+ export function getWorkspaceEnv(workspacePath: string): WorkspaceEnvResult {
193
+ // Try to load cached result first
194
+ const cached = loadWorkspaceEnv(workspacePath);
195
+ if (cached) {
196
+ // Check if cache is recent (within 1 hour)
197
+ const ageMs = Date.now() - cached.detectedAt;
198
+ if (ageMs < 60 * 60 * 1000) {
199
+ return cached;
200
+ }
201
+ }
202
+ // Detect fresh
203
+ return detectWorkspaceEnv(workspacePath);
204
+ }
205
+
206
+ /**
207
+ * Check if agent should prefer dev mode (no build)
208
+ */
209
+ export function shouldUseDevMode(workspacePath: string): {
210
+ preferDev: boolean;
211
+ reason: string;
212
+ ramGb: number | null;
213
+ } {
214
+ const env = getWorkspaceEnv(workspacePath);
215
+
216
+ // Low RAM threshold
217
+ const LOW_RAM_GB = 16;
218
+
219
+ if (!env.isDevEnv) {
220
+ return {
221
+ preferDev: false,
222
+ reason: "Not detected as dev environment",
223
+ ramGb: env.ramGb,
224
+ };
225
+ }
226
+
227
+ if (env.ramGb !== null && env.ramGb < LOW_RAM_GB) {
228
+ return {
229
+ preferDev: true,
230
+ reason: `Low RAM (${env.ramGb}GB < ${LOW_RAM_GB}GB) - avoid parallel build + dev`,
231
+ ramGb: env.ramGb,
232
+ };
233
+ }
234
+
235
+ if (env.hasDevScript) {
236
+ return {
237
+ preferDev: true,
238
+ reason: `Dev script detected - hot reload available`,
239
+ ramGb: env.ramGb,
240
+ };
241
+ }
242
+
243
+ return {
244
+ preferDev: false,
245
+ reason: "Dev environment but no dev script found",
246
+ ramGb: env.ramGb,
247
+ };
248
+ }
249
+
250
+ /**
251
+ * Format workspace env as agent-readable message
252
+ */
253
+ export function formatEnvForAgent(workspacePath: string): string {
254
+ const env = shouldUseDevMode(workspacePath);
255
+ const details = getWorkspaceEnv(workspacePath);
256
+
257
+ let message = `[Workspace Environment]\n`;
258
+ message += `- Path: ${workspacePath}\n`;
259
+ message += `- Detected: ${details.isDevEnv ? "Development" : "Production/Unknown"}\n`;
260
+ message += `- Has dev script: ${details.hasDevScript ? "Yes" : "No"}\n`;
261
+ message += `- NODE_ENV: ${details.nodeEnv || "not set"}\n`;
262
+ message += `- Has .env file: ${details.hasEnvFile ? "Yes" : "No"}\n`;
263
+ message += `- RAM: ${details.ramGb ? `${details.ramGb}GB` : "unknown"}\n`;
264
+ message += `\n`;
265
+
266
+ if (env.preferDev) {
267
+ message += `RECOMMENDATION: Use \`dev\` mode (no build needed)\n`;
268
+ message += `Reason: ${env.reason}\n`;
269
+ message += `→ Run: \`bun run dev\` (or \`npm run dev\`)\n`;
270
+ message += `→ DON'T: Run \`build\` unless explicitly requested\n`;
271
+ } else {
272
+ message += `RECOMMENDATION: Build may be needed\n`;
273
+ message += `Reason: ${env.reason}\n`;
274
+ message += `→ Use: \`bun run build\` before running\n`;
275
+ }
276
+
277
+ return message;
278
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/cookie-sanitizer",
3
- "version": "1.1.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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-harness/permission-mode",
3
- "version": "1.1.366",
3
+ "version": "1.1.368",
4
4
  "type": "module",
5
5
  "description": "Runtime permission modes for pi-harness - Supervised/Auto/Full-access",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/privilege-broker",
3
- "version": "1.1.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
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.366",
3
+ "version": "1.1.368",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {