pi-harness-runtime 1.1.414 → 1.1.416

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 (135) hide show
  1. package/package.json +1 -1
  2. package/packages/a2a-adapter/package.json +1 -1
  3. package/packages/agent-policy/package.json +1 -1
  4. package/packages/architecture-generator/package.json +1 -1
  5. package/packages/auth/package.json +1 -1
  6. package/packages/autonomous-refactor/package.json +1 -1
  7. package/packages/autonomous-runtime/package.json +1 -1
  8. package/packages/cache-strategy/package.json +1 -1
  9. package/packages/capability-registry/package.json +1 -1
  10. package/packages/checkpoint/package.json +1 -1
  11. package/packages/cli-plugin-sdk/package.json +1 -1
  12. package/packages/clipboard/package.json +1 -1
  13. package/packages/clipboard-plugin/package.json +1 -1
  14. package/packages/code-generation/package.json +1 -1
  15. package/packages/code-review/package.json +1 -1
  16. package/packages/codex-adapter/package.json +1 -1
  17. package/packages/codex-watcher/package.json +1 -1
  18. package/packages/config-capture/package.json +1 -1
  19. package/packages/connection-runtime/package.json +1 -1
  20. package/packages/context-compiler/package.json +1 -1
  21. package/packages/context-discovery/package.json +1 -1
  22. package/packages/context-manager/package.json +1 -1
  23. package/packages/contracts/package.json +1 -1
  24. package/packages/cookie-sanitizer/package.json +1 -1
  25. package/packages/cost-optimizer/package.json +1 -1
  26. package/packages/dependency-analyzer/package.json +1 -1
  27. package/packages/django-plugin/package.json +1 -1
  28. package/packages/doc-generator/package.json +1 -1
  29. package/packages/durable-review/package.json +1 -1
  30. package/packages/e2e-tester/package.json +1 -1
  31. package/packages/evaluation-engine/package.json +1 -1
  32. package/packages/evaluation-runner/package.json +1 -1
  33. package/packages/event-bus/package.json +1 -1
  34. package/packages/event-sink/package.json +1 -1
  35. package/packages/event-store/package.json +1 -1
  36. package/packages/experience-replay/package.json +1 -1
  37. package/packages/feedback-collector/package.json +1 -1
  38. package/packages/file-copy-helper/package.json +1 -1
  39. package/packages/framework-detector/package.json +1 -1
  40. package/packages/framework-plugin-sdk/package.json +1 -1
  41. package/packages/frappe-plugin/package.json +1 -1
  42. package/packages/generic-web-plugin/package.json +1 -1
  43. package/packages/health-monitor/package.json +1 -1
  44. package/packages/intent-analyzer/package.json +1 -1
  45. package/packages/jev-judge/package.json +1 -1
  46. package/packages/knowledge-graph/package.json +1 -1
  47. package/packages/knowledge-retrieval/package.json +1 -1
  48. package/packages/laravel-plugin/package.json +1 -1
  49. package/packages/learning-engine/package.json +1 -1
  50. package/packages/logging/package.json +1 -1
  51. package/packages/mcp-adapter/package.json +1 -1
  52. package/packages/memory-engine/package.json +1 -1
  53. package/packages/milestone-manager/package.json +1 -1
  54. package/packages/model-registry/package.json +1 -1
  55. package/packages/nextjs-plugin/package.json +1 -1
  56. package/packages/notification/package.json +1 -1
  57. package/packages/observability/package.json +1 -1
  58. package/packages/okf-indexer/package.json +1 -1
  59. package/packages/paperclip-integration/package.json +1 -1
  60. package/packages/performance-optimizer/package.json +1 -1
  61. package/packages/permission-mode/package.json +1 -1
  62. package/packages/privilege-broker/package.json +1 -1
  63. package/packages/project-analyzer/package.json +1 -1
  64. package/packages/project-bootstrap/package.json +1 -1
  65. package/packages/projection-engine/package.json +1 -1
  66. package/packages/prompt-compiler/package.json +1 -1
  67. package/packages/prompt-versioning/package.json +1 -1
  68. package/packages/provider-adapter-sdk/package.json +1 -1
  69. package/packages/provider-router/package.json +1 -1
  70. package/packages/provider-selector/package.json +1 -1
  71. package/packages/providers/package.json +1 -1
  72. package/packages/qdrant-skills/package.json +1 -1
  73. package/packages/quota-manager/package.json +1 -1
  74. package/packages/rate-limiter/package.json +1 -1
  75. package/packages/react-vite-plugin/package.json +1 -1
  76. package/packages/relay/package.json +1 -1
  77. package/packages/release-manager/package.json +1 -1
  78. package/packages/requirement-compiler/package.json +1 -1
  79. package/packages/runtime/package.json +1 -1
  80. package/packages/scheduler/package.json +1 -1
  81. package/packages/scheduler-adapter/package.json +1 -1
  82. package/packages/session/package.json +1 -1
  83. package/packages/session-api/package.json +1 -1
  84. package/packages/session-export/package.json +1 -1
  85. package/packages/shared-context/package.json +1 -1
  86. package/packages/skill-mcp-client/package.json +1 -1
  87. package/packages/skill-registry/package.json +1 -1
  88. package/packages/skills/dist/index.d.ts +1 -0
  89. package/packages/skills/dist/index.d.ts.map +1 -1
  90. package/packages/skills/dist/index.js +1 -0
  91. package/packages/skills/dist/index.js.map +1 -1
  92. package/packages/skills/dist/loader.d.ts +9 -0
  93. package/packages/skills/dist/loader.d.ts.map +1 -1
  94. package/packages/skills/dist/loader.js +24 -3
  95. package/packages/skills/dist/loader.js.map +1 -1
  96. package/packages/skills/dist/sanitize.d.ts +32 -0
  97. package/packages/skills/dist/sanitize.d.ts.map +1 -0
  98. package/packages/skills/dist/sanitize.js +100 -0
  99. package/packages/skills/dist/sanitize.js.map +1 -0
  100. package/packages/skills/dist/vector-schema.d.ts +4 -0
  101. package/packages/skills/dist/vector-schema.d.ts.map +1 -1
  102. package/packages/skills/dist/vector-schema.js +13 -4
  103. package/packages/skills/dist/vector-schema.js.map +1 -1
  104. package/packages/skills/package.json +1 -1
  105. package/packages/skills/src/index.ts +1 -0
  106. package/packages/skills/src/loader.ts +26 -3
  107. package/packages/skills/src/sanitize.ts +111 -0
  108. package/packages/skills/src/vector-schema.ts +14 -4
  109. package/packages/skills/test/remote-skills.test.ts +41 -0
  110. package/packages/skills/test/sanitize.test.ts +131 -0
  111. package/packages/skills/test/vector-schema.test.ts +15 -2
  112. package/packages/sprint-planner/package.json +1 -1
  113. package/packages/subscription-engine/package.json +1 -1
  114. package/packages/task-compiler/package.json +1 -1
  115. package/packages/telegram/package.json +1 -1
  116. package/packages/tencentdb-memory/package.json +1 -1
  117. package/packages/tencentdb-sync/package.json +1 -1
  118. package/packages/test-data-generator/package.json +1 -1
  119. package/packages/test-generator/package.json +1 -1
  120. package/packages/todo-bd-sync/package.json +1 -1
  121. package/packages/token-estimation/package.json +1 -1
  122. package/packages/token-optimizer/package.json +1 -1
  123. package/packages/tooling-preference/package.json +1 -1
  124. package/packages/trajectory/package.json +1 -1
  125. package/packages/tui/package.json +1 -1
  126. package/packages/two-phase-review/package.json +1 -1
  127. package/packages/types/package.json +1 -1
  128. package/packages/voice-api/package.json +1 -1
  129. package/packages/webmcp-tester/package.json +1 -1
  130. package/packages/wiki/package.json +1 -1
  131. package/packages/workflow-events/package.json +1 -1
  132. package/packages/workspace-scanner/package.json +1 -1
  133. package/packages/worktree/package.json +1 -1
  134. package/packages/write-review/package.json +1 -1
  135. package/scripts/sync-to-qdrant.ts +18 -83
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/webmcp-tester",
3
- "version": "1.1.414",
3
+ "version": "1.1.416",
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/wiki",
3
- "version": "1.1.414",
3
+ "version": "1.1.416",
4
4
  "description": "LLM Wiki integration for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/workflow-events",
3
- "version": "1.1.414",
3
+ "version": "1.1.416",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/workspace-scanner",
3
- "version": "1.1.414",
3
+ "version": "1.1.416",
4
4
  "type": "module",
5
5
  "main": "src/index.ts",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/worktree",
3
- "version": "1.1.414",
3
+ "version": "1.1.416",
4
4
  "description": "pi-harness-runtime — worktree",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moocoding/write-review",
3
- "version": "1.1.414",
3
+ "version": "1.1.416",
4
4
  "description": "Two-agent write-review loop with blackboard coordination",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -12,7 +12,7 @@
12
12
  */
13
13
 
14
14
  import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
15
- import { join, basename } from "node:path";
15
+ import { join } from "node:path";
16
16
  import { QdrantClient } from "@qdrant/js-client-rest";
17
17
  // The runtime and this script must write into the SAME collection with the
18
18
  // SAME vectors: a collection holds vectors of exactly one size, and a vector
@@ -31,59 +31,11 @@ import {
31
31
  skillPointPayload,
32
32
  skillQdrantPoint,
33
33
  } from "../packages/skills/dist/vector-schema.js";
34
-
35
- // =============================================================================
36
- // SANITIZATION: Replace client-specific names with placeholders
37
- // =============================================================================
38
-
39
- interface SanitizationRule {
40
- pattern: RegExp;
41
- replacement: string;
42
- }
43
-
44
- const SANITIZATION_RULES: SanitizationRule[] = [
45
- // Client company names (case-insensitive)
46
- { pattern: /\binpac\b/gi, replacement: "[Client A]" },
47
- { pattern: /\bm-capital\b/gi, replacement: "[Client A]" },
48
- { pattern: /\bmcapital\b/gi, replacement: "[Client A]" },
49
- { pattern: /\bdigisoft\b/gi, replacement: "[Client B]" },
50
-
51
- // Project/app specific names
52
- { pattern: /\bgse-insurance\b/gi, replacement: "[Insurance Project]" },
53
- { pattern: /\btbs-import\b/gi, replacement: "[Import Project]" },
54
- { pattern: /\bdigisoft_erp\b/gi, replacement: "[Client B Erp]" },
55
- { pattern: /\bm_capital\b/gi, replacement: "[Client A]" },
56
- { pattern: /\binpac_\b/gi, replacement: "[Client A]_" },
57
- { pattern: /\bpaperclip_\b/gi, replacement: "[Client D]_" },
58
- { pattern: /\bopenclaw_\b/gi, replacement: "[Client F]_" },
59
-
60
- // Generic replacements
61
- { pattern: /Company Name/gi, replacement: "[Client Name]" },
62
- { pattern: /your company/gi, replacement: "[Client]" },
63
- { pattern: /our client/gi, replacement: "[Client]" },
64
- { pattern: /client-specific/gi, replacement: "[Project-specific]" },
65
- ];
66
-
67
- // Skill name sanitization (for skill directory name -> sanitized display name)
68
- const SKILL_NAME_MAP: Record<string, string> = {
69
- 'gse-insurance-step5-slot-filter': 'insurance-project-step-filter',
70
- 'inpac-pe-approval-workflow': 'client-a-pe-approval-workflow',
71
- 'inpac-po-approval-workflow': 'client-a-po-approval-workflow',
72
- 'inpac-pr-approval-workflow': 'client-a-pr-approval-workflow',
73
- 'tbs-import-clearance-lcv': 'import-project-clearance',
74
- 'whispertool': 'whisper-tool',
75
- };
76
-
77
- /**
78
- * Sanitize text by replacing client-specific patterns
79
- */
80
- function sanitize(text: string): string {
81
- let result = text;
82
- for (const rule of SANITIZATION_RULES) {
83
- result = result.replace(rule.pattern, rule.replacement);
84
- }
85
- return result;
86
- }
34
+ // The parser and the sanitization live in the shared package. The runtime
35
+ // registry writes into the same collection and needs the same rules, or it
36
+ // would leave the raw name and the raw body of a client skill in a shared
37
+ // cluster - and a parser of its own would name the same skill differently.
38
+ import { parseSkillContent } from "../packages/skills/dist/parser.js";
87
39
 
88
40
  // =============================================================================
89
41
  // Qdrant Config
@@ -131,44 +83,27 @@ interface SkillDoc {
131
83
  text: string;
132
84
  }
133
85
 
134
- function parseFrontmatter(content: string): Record<string, string> | null {
135
- const match = content.match(/^---\n([\s\S]*?)\n---/);
136
- if (!match) return null;
137
-
138
- const fm: Record<string, string> = {};
139
- for (const line of match[1].split("\n")) {
140
- const idx = line.indexOf(":");
141
- if (idx === -1) continue;
142
- fm[line.slice(0, idx).trim()] = line.slice(idx + 1).trim();
143
- }
144
- return fm;
145
- }
146
-
147
86
  function readSkill(dirPath: string): SkillDoc | null {
148
87
  const skillPath = join(dirPath, "SKILL.md");
149
88
  if (!existsSync(skillPath)) return null;
150
89
 
151
90
  try {
152
91
  const rawContent = readFileSync(skillPath, "utf-8");
153
- const fm = parseFrontmatter(rawContent);
154
- if (!fm) return null;
155
-
156
- // Get original skill name from directory
157
- const originalName = fm.name || basename(dirPath);
158
-
159
- // Sanitize content
160
- const sanitizedContent = sanitize(rawContent);
161
-
162
- // Use name map for known sensitive skill names, otherwise sanitize
163
- const name = SKILL_NAME_MAP[originalName] || sanitize(originalName);
164
-
165
- const description = sanitize(fm.description || "");
166
- const body = sanitizedContent.replace(/^---[\s\S]*?---\n/, "").trim();
92
+ // The SAME parser as the runtime registry. A parser of its own would
93
+ // read a quoted name with the quotes and write a point that the
94
+ // runtime never addresses - the two writers would name the same skill
95
+ // differently.
96
+ const skill = parseSkillContent(rawContent, skillPath);
167
97
 
168
98
  // The payload and the text come from the shared schema, so this script
169
99
  // and the runtime store the SAME point for the same skill: the point
170
- // id is the hash of the name the payload carries.
171
- const payload = skillPointPayload({ name, description, body });
100
+ // id is the hash of the name the payload carries, and the payload
101
+ // carries no client name.
102
+ const payload = skillPointPayload({
103
+ name: skill.id,
104
+ description: skill.frontmatter.description ?? "",
105
+ body: skill.body,
106
+ });
172
107
 
173
108
  return {
174
109
  name: payload.name,