pi-harness-runtime 1.1.413 → 1.1.415

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 +19 -7
  93. package/packages/skills/dist/loader.d.ts.map +1 -1
  94. package/packages/skills/dist/loader.js +39 -22
  95. package/packages/skills/dist/loader.js.map +1 -1
  96. package/packages/skills/dist/sanitize.d.ts +27 -0
  97. package/packages/skills/dist/sanitize.d.ts.map +1 -0
  98. package/packages/skills/dist/sanitize.js +75 -0
  99. package/packages/skills/dist/sanitize.js.map +1 -0
  100. package/packages/skills/dist/vector-schema.d.ts +93 -4
  101. package/packages/skills/dist/vector-schema.d.ts.map +1 -1
  102. package/packages/skills/dist/vector-schema.js +71 -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 +53 -27
  107. package/packages/skills/src/sanitize.ts +86 -0
  108. package/packages/skills/src/vector-schema.ts +127 -4
  109. package/packages/skills/test/remote-skills.test.ts +41 -0
  110. package/packages/skills/test/sanitize.test.ts +88 -0
  111. package/packages/skills/test/vector-schema.test.ts +167 -0
  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 +29 -69
@@ -28,60 +28,16 @@ import {
28
28
  import {
29
29
  LEGACY_SKILL_COLLECTION,
30
30
  SKILL_COLLECTION,
31
+ skillPointPayload,
32
+ skillQdrantPoint,
31
33
  } from "../packages/skills/dist/vector-schema.js";
32
-
33
- // =============================================================================
34
- // SANITIZATION: Replace client-specific names with placeholders
35
- // =============================================================================
36
-
37
- interface SanitizationRule {
38
- pattern: RegExp;
39
- replacement: string;
40
- }
41
-
42
- const SANITIZATION_RULES: SanitizationRule[] = [
43
- // Client company names (case-insensitive)
44
- { pattern: /\binpac\b/gi, replacement: "[Client A]" },
45
- { pattern: /\bm-capital\b/gi, replacement: "[Client A]" },
46
- { pattern: /\bmcapital\b/gi, replacement: "[Client A]" },
47
- { pattern: /\bdigisoft\b/gi, replacement: "[Client B]" },
48
-
49
- // Project/app specific names
50
- { pattern: /\bgse-insurance\b/gi, replacement: "[Insurance Project]" },
51
- { pattern: /\btbs-import\b/gi, replacement: "[Import Project]" },
52
- { pattern: /\bdigisoft_erp\b/gi, replacement: "[Client B Erp]" },
53
- { pattern: /\bm_capital\b/gi, replacement: "[Client A]" },
54
- { pattern: /\binpac_\b/gi, replacement: "[Client A]_" },
55
- { pattern: /\bpaperclip_\b/gi, replacement: "[Client D]_" },
56
- { pattern: /\bopenclaw_\b/gi, replacement: "[Client F]_" },
57
-
58
- // Generic replacements
59
- { pattern: /Company Name/gi, replacement: "[Client Name]" },
60
- { pattern: /your company/gi, replacement: "[Client]" },
61
- { pattern: /our client/gi, replacement: "[Client]" },
62
- { pattern: /client-specific/gi, replacement: "[Project-specific]" },
63
- ];
64
-
65
- // Skill name sanitization (for skill directory name -> sanitized display name)
66
- const SKILL_NAME_MAP: Record<string, string> = {
67
- 'gse-insurance-step5-slot-filter': 'insurance-project-step-filter',
68
- 'inpac-pe-approval-workflow': 'client-a-pe-approval-workflow',
69
- 'inpac-po-approval-workflow': 'client-a-po-approval-workflow',
70
- 'inpac-pr-approval-workflow': 'client-a-pr-approval-workflow',
71
- 'tbs-import-clearance-lcv': 'import-project-clearance',
72
- 'whispertool': 'whisper-tool',
73
- };
74
-
75
- /**
76
- * Sanitize text by replacing client-specific patterns
77
- */
78
- function sanitize(text: string): string {
79
- let result = text;
80
- for (const rule of SANITIZATION_RULES) {
81
- result = result.replace(rule.pattern, rule.replacement);
82
- }
83
- return result;
84
- }
34
+ // The sanitization lives in the shared package: the runtime registry writes
35
+ // into the same collection and needs the same rules, or it would leave the
36
+ // raw name and the raw body of a client skill in a shared cluster.
37
+ import {
38
+ sanitizeText,
39
+ skillPointName,
40
+ } from "../packages/skills/dist/sanitize.js";
85
41
 
86
42
  // =============================================================================
87
43
  // Qdrant Config
@@ -123,7 +79,6 @@ function parseHostPort(url: string): { host: string; port: number } {
123
79
  // =============================================================================
124
80
 
125
81
  interface SkillDoc {
126
- id: number;
127
82
  name: string;
128
83
  description: string;
129
84
  body: string;
@@ -156,23 +111,24 @@ function readSkill(dirPath: string): SkillDoc | null {
156
111
  const originalName = fm.name || basename(dirPath);
157
112
 
158
113
  // Sanitize content
159
- const sanitizedContent = sanitize(rawContent);
114
+ const sanitizedContent = sanitizeText(rawContent);
160
115
 
161
116
  // Use name map for known sensitive skill names, otherwise sanitize
162
- const name = SKILL_NAME_MAP[originalName] || sanitize(originalName);
117
+ const name = skillPointName(originalName);
163
118
 
164
- const description = sanitize(fm.description || "");
119
+ const description = sanitizeText(fm.description || "");
165
120
  const body = sanitizedContent.replace(/^---[\s\S]*?---\n/, "").trim();
166
-
167
- // Text for embedding (sanitized)
168
- const text = `${name}. ${description}. ${body.slice(0, 1000)}`;
121
+
122
+ // The payload and the text come from the shared schema, so this script
123
+ // and the runtime store the SAME point for the same skill: the point
124
+ // id is the hash of the name the payload carries.
125
+ const payload = skillPointPayload({ name, description, body });
169
126
 
170
127
  return {
171
- id: 0,
172
- name,
173
- description,
174
- body: body.slice(0, 2000),
175
- text,
128
+ name: payload.name,
129
+ description: payload.description,
130
+ body: payload.body,
131
+ text: payload.text,
176
132
  };
177
133
  } catch {
178
134
  return null;
@@ -273,12 +229,16 @@ async function upsertSkills(
273
229
  }
274
230
 
275
231
  const points = skills.map((skill, idx) => ({
276
- id: idx + 1,
277
- payload: {
232
+ // The point comes from the shared schema, so this script and the
233
+ // runtime store the SAME point for the same skill. A sequential id
234
+ // would leave a second point for every skill the runtime also indexes,
235
+ // and could overwrite an unrelated one.
236
+ ...skillQdrantPoint({
278
237
  name: skill.name,
279
238
  description: skill.description,
280
239
  body: skill.body,
281
- },
240
+ text: skill.text,
241
+ }),
282
242
  vector: embeddings[idx],
283
243
  }));
284
244
 
@@ -431,7 +391,7 @@ Usage:
431
391
  Environment:
432
392
  QDRANT_API_KEY Your Qdrant Cloud API key
433
393
  QDRANT_CLUSTER_ENDPOINT Qdrant URL
434
- QDRANT_COLLECTION Collection name (default: pi-harness-skills)
394
+ QDRANT_COLLECTION Collection name (default: ${SKILL_COLLECTION})
435
395
 
436
396
  Or create file:
437
397
  ~/.pi-harness-runtime/keys/qdrant-api-key.txt