harness-mcp-v2 3.2.3 → 3.2.5

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 (111) hide show
  1. package/README.md +62 -3
  2. package/build/config.d.ts +22 -3
  3. package/build/config.d.ts.map +1 -1
  4. package/build/config.js +10 -0
  5. package/build/config.js.map +1 -1
  6. package/build/data/examples/index.d.ts +2 -0
  7. package/build/data/examples/index.d.ts.map +1 -1
  8. package/build/data/examples/index.js +4 -0
  9. package/build/data/examples/index.js.map +1 -1
  10. package/build/data/schemas/v0/pipeline.d.ts.map +1 -1
  11. package/build/data/schemas/v0/pipeline.js +31 -10
  12. package/build/data/schemas/v0/pipeline.js.map +1 -1
  13. package/build/data/schemas/v0/template.d.ts.map +1 -1
  14. package/build/data/schemas/v0/template.js +28 -10
  15. package/build/data/schemas/v0/template.js.map +1 -1
  16. package/build/index.js +67 -11
  17. package/build/index.js.map +1 -1
  18. package/build/prompts/build-deploy-app.d.ts.map +1 -1
  19. package/build/prompts/build-deploy-app.js +4 -3
  20. package/build/prompts/build-deploy-app.js.map +1 -1
  21. package/build/prompts/create-agent.d.ts.map +1 -1
  22. package/build/prompts/create-agent.js +21 -1
  23. package/build/prompts/create-agent.js.map +1 -1
  24. package/build/prompts/create-pipeline.d.ts.map +1 -1
  25. package/build/prompts/create-pipeline.js +1 -0
  26. package/build/prompts/create-pipeline.js.map +1 -1
  27. package/build/registry/extractors.d.ts +10 -3
  28. package/build/registry/extractors.d.ts.map +1 -1
  29. package/build/registry/extractors.js +27 -9
  30. package/build/registry/extractors.js.map +1 -1
  31. package/build/registry/toolsets/chaos-descriptions.d.ts +23 -19
  32. package/build/registry/toolsets/chaos-descriptions.d.ts.map +1 -1
  33. package/build/registry/toolsets/chaos-descriptions.js +134 -48
  34. package/build/registry/toolsets/chaos-descriptions.js.map +1 -1
  35. package/build/registry/toolsets/chaos.d.ts.map +1 -1
  36. package/build/registry/toolsets/chaos.js +323 -56
  37. package/build/registry/toolsets/chaos.js.map +1 -1
  38. package/build/registry/toolsets/dbops.js +2 -2
  39. package/build/registry/toolsets/dbops.js.map +1 -1
  40. package/build/registry/toolsets/idp.d.ts.map +1 -1
  41. package/build/registry/toolsets/idp.js +0 -6
  42. package/build/registry/toolsets/idp.js.map +1 -1
  43. package/build/registry/toolsets/pipelines.d.ts.map +1 -1
  44. package/build/registry/toolsets/pipelines.js +7 -5
  45. package/build/registry/toolsets/pipelines.js.map +1 -1
  46. package/build/registry/toolsets/pull-requests.d.ts.map +1 -1
  47. package/build/registry/toolsets/pull-requests.js +47 -2
  48. package/build/registry/toolsets/pull-requests.js.map +1 -1
  49. package/build/registry/toolsets/templates.d.ts.map +1 -1
  50. package/build/registry/toolsets/templates.js +28 -4
  51. package/build/registry/toolsets/templates.js.map +1 -1
  52. package/build/search/embedding-content.d.ts +5 -0
  53. package/build/search/embedding-content.d.ts.map +1 -0
  54. package/build/search/embedding-content.js +31 -0
  55. package/build/search/embedding-content.js.map +1 -0
  56. package/build/search/index.d.ts +8 -0
  57. package/build/search/index.d.ts.map +1 -0
  58. package/build/search/index.js +6 -0
  59. package/build/search/index.js.map +1 -0
  60. package/build/search/local-provider.d.ts +37 -0
  61. package/build/search/local-provider.d.ts.map +1 -0
  62. package/build/search/local-provider.js +269 -0
  63. package/build/search/local-provider.js.map +1 -0
  64. package/build/search/manager.d.ts +39 -0
  65. package/build/search/manager.d.ts.map +1 -0
  66. package/build/search/manager.js +283 -0
  67. package/build/search/manager.js.map +1 -0
  68. package/build/search/null-provider.d.ts +9 -0
  69. package/build/search/null-provider.d.ts.map +1 -0
  70. package/build/search/null-provider.js +8 -0
  71. package/build/search/null-provider.js.map +1 -0
  72. package/build/search/remote-provider.d.ts +28 -0
  73. package/build/search/remote-provider.d.ts.map +1 -0
  74. package/build/search/remote-provider.js +139 -0
  75. package/build/search/remote-provider.js.map +1 -0
  76. package/build/search/routing-eval.d.ts +49 -0
  77. package/build/search/routing-eval.d.ts.map +1 -0
  78. package/build/search/routing-eval.js +80 -0
  79. package/build/search/routing-eval.js.map +1 -0
  80. package/build/search/types.d.ts +58 -0
  81. package/build/search/types.d.ts.map +1 -0
  82. package/build/search/types.js +7 -0
  83. package/build/search/types.js.map +1 -0
  84. package/build/tools/harness-execute.d.ts.map +1 -1
  85. package/build/tools/harness-execute.js +19 -7
  86. package/build/tools/harness-execute.js.map +1 -1
  87. package/build/tools/harness-get.d.ts +2 -1
  88. package/build/tools/harness-get.d.ts.map +1 -1
  89. package/build/tools/harness-get.js +21 -1
  90. package/build/tools/harness-get.js.map +1 -1
  91. package/build/tools/harness-list.d.ts +2 -1
  92. package/build/tools/harness-list.d.ts.map +1 -1
  93. package/build/tools/harness-list.js +22 -1
  94. package/build/tools/harness-list.js.map +1 -1
  95. package/build/tools/harness-search.d.ts +20 -1
  96. package/build/tools/harness-search.d.ts.map +1 -1
  97. package/build/tools/harness-search.js +124 -14
  98. package/build/tools/harness-search.js.map +1 -1
  99. package/build/tools/index.d.ts +2 -1
  100. package/build/tools/index.d.ts.map +1 -1
  101. package/build/tools/index.js +4 -4
  102. package/build/tools/index.js.map +1 -1
  103. package/build/utils/http-health.d.ts +11 -0
  104. package/build/utils/http-health.d.ts.map +1 -0
  105. package/build/utils/http-health.js +11 -0
  106. package/build/utils/http-health.js.map +1 -0
  107. package/build/utils/http-sessions.d.ts +8 -0
  108. package/build/utils/http-sessions.d.ts.map +1 -0
  109. package/build/utils/http-sessions.js +12 -0
  110. package/build/utils/http-sessions.js.map +1 -0
  111. package/package.json +5 -1
@@ -0,0 +1,8 @@
1
+ export type { SearchProvider, SearchProviderName, SearchReadiness, SearchResult, SearchOptions, IndexableItem, SearchCorpus, } from "./types.js";
2
+ export type { SearchRoutingGoldenCase, SearchRoutingObservation, SearchRoutingCaseResult, SearchRoutingSummary, SearchRoutingEvaluation, } from "./routing-eval.js";
3
+ export { NullSearchProvider } from "./null-provider.js";
4
+ export { LocalSearchProvider } from "./local-provider.js";
5
+ export { RemoteSearchProvider } from "./remote-provider.js";
6
+ export { SearchManager } from "./manager.js";
7
+ export { validateGoldenCases, evaluateRoutingCase, summarizeRoutingEvaluation, evaluateRouting, } from "./routing-eval.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { NullSearchProvider } from "./null-provider.js";
2
+ export { LocalSearchProvider } from "./local-provider.js";
3
+ export { RemoteSearchProvider } from "./remote-provider.js";
4
+ export { SearchManager } from "./manager.js";
5
+ export { validateGoldenCases, evaluateRoutingCase, summarizeRoutingEvaluation, evaluateRouting, } from "./routing-eval.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { SearchProvider, SearchResult, SearchOptions, IndexableItem, SearchCorpus } from "./types.js";
2
+ export declare const DEFAULT_EMBEDDING_MODEL = "Xenova/all-MiniLM-L6-v2";
3
+ /** True for per-account live entity buckets (not the static global corpora keys). */
4
+ export declare function isResourceAccountKey(key: string): boolean;
5
+ /** entities corpus is always capped; other corpora only cap TTL-backed items. */
6
+ export declare function needsPerKeyCap(corpus: SearchCorpus, expiresAt: number | undefined): boolean;
7
+ export declare function countResourceAccountKeys(store: ReadonlyMap<string, unknown[]>): number;
8
+ export declare function totalItemCount(store: ReadonlyMap<string, readonly unknown[]>): number;
9
+ export declare function findLruKey(store: ReadonlyMap<string, unknown[]>, keyLastAccessed: ReadonlyMap<string, number>, predicate: (key: string) => boolean): string | undefined;
10
+ export declare function findSoonestExpiryIndex(items: ReadonlyArray<{
11
+ expiresAt: number | undefined;
12
+ }>): number;
13
+ export interface LocalSearchProviderOptions {
14
+ cacheDir?: string;
15
+ model?: string;
16
+ }
17
+ export declare class LocalSearchProvider implements SearchProvider {
18
+ private available;
19
+ private initError;
20
+ private embed;
21
+ private readonly cacheDir;
22
+ private readonly model;
23
+ private store;
24
+ private keyLastAccessed;
25
+ private evictionTimer;
26
+ constructor(options?: LocalSearchProviderOptions);
27
+ initialize(): Promise<void>;
28
+ getInitError(): string | undefined;
29
+ isAvailable(): boolean;
30
+ evictExpired(): void;
31
+ search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
32
+ index(item: IndexableItem): Promise<void>;
33
+ private touchKey;
34
+ private evictStoreKey;
35
+ private evictOneGlobally;
36
+ }
37
+ //# sourceMappingURL=local-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-provider.d.ts","sourceRoot":"","sources":["../../src/search/local-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM3G,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AAUjE,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE3F;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAMtF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC,GAAG,MAAM,CAIrF;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EACrC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5C,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAClC,MAAM,GAAG,SAAS,CAYpB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,CAAC;IAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,GAAG,MAAM,CAWtG;AAgCD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,mBAAoB,YAAW,cAAc;IACxD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,aAAa,CAA+C;gBAExD,OAAO,GAAE,0BAA+B;IAK9C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBjC,YAAY,IAAI,MAAM,GAAG,SAAS;IAIlC,WAAW,IAAI,OAAO;IAItB,YAAY,IAAI,IAAI;IAcd,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAqC3E,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAmD/C,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,gBAAgB;CAyBzB"}
@@ -0,0 +1,269 @@
1
+ import { CORPUS_DEFAULT_TTL_MS } from "./types.js";
2
+ import { createLogger } from "../utils/logger.js";
3
+ const log = createLogger("local-provider");
4
+ const DEFAULT_HF_CACHE_DIR = "/tmp/hf-cache";
5
+ export const DEFAULT_EMBEDDING_MODEL = "Xenova/all-MiniLM-L6-v2";
6
+ const EMBEDDING_DIM = 384;
7
+ const CORPORA = ["entities", "docs", "knowledge"];
8
+ /** Per-key cap for TTL-backed or live entity corpus items. */
9
+ const MAX_ITEMS_PER_KEY = 5000;
10
+ /** Max distinct entities:<account> buckets — cross-key LRU evicts the stalest account. */
11
+ const MAX_RESOURCE_ACCOUNT_KEYS = 32;
12
+ /** Global item ceiling across all store keys (safety net for long-lived multi-user processes). */
13
+ const MAX_TOTAL_ITEMS = 20_000;
14
+ /** True for per-account live entity buckets (not the static global corpora keys). */
15
+ export function isResourceAccountKey(key) {
16
+ return key.startsWith("entities:") && !key.endsWith(":global");
17
+ }
18
+ /** entities corpus is always capped; other corpora only cap TTL-backed items. */
19
+ export function needsPerKeyCap(corpus, expiresAt) {
20
+ return corpus === "entities" || expiresAt !== undefined;
21
+ }
22
+ export function countResourceAccountKeys(store) {
23
+ let count = 0;
24
+ for (const key of store.keys()) {
25
+ if (isResourceAccountKey(key))
26
+ count++;
27
+ }
28
+ return count;
29
+ }
30
+ export function totalItemCount(store) {
31
+ let total = 0;
32
+ for (const items of store.values())
33
+ total += items.length;
34
+ return total;
35
+ }
36
+ export function findLruKey(store, keyLastAccessed, predicate) {
37
+ let lruKey;
38
+ let lruTime = Infinity;
39
+ for (const key of store.keys()) {
40
+ if (!predicate(key))
41
+ continue;
42
+ const t = keyLastAccessed.get(key) ?? 0;
43
+ if (t < lruTime) {
44
+ lruTime = t;
45
+ lruKey = key;
46
+ }
47
+ }
48
+ return lruKey;
49
+ }
50
+ export function findSoonestExpiryIndex(items) {
51
+ let minIdx = -1;
52
+ let minExpiry = Infinity;
53
+ for (let i = 0; i < items.length; i++) {
54
+ const exp = items[i].expiresAt;
55
+ if (exp !== undefined && exp < minExpiry) {
56
+ minExpiry = exp;
57
+ minIdx = i;
58
+ }
59
+ }
60
+ return minIdx;
61
+ }
62
+ function cosineSimilarity(a, b) {
63
+ let dot = 0, normA = 0, normB = 0;
64
+ for (let i = 0; i < a.length; i++) {
65
+ dot += a[i] * b[i];
66
+ normA += a[i] * a[i];
67
+ normB += b[i] * b[i];
68
+ }
69
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
70
+ return denom === 0 ? 0 : dot / denom;
71
+ }
72
+ function resolveExpiresAt(item, now) {
73
+ // Explicit ttlMs=0 means permanent, overriding corpus default
74
+ if (item.ttlMs === 0)
75
+ return undefined;
76
+ const ttl = item.ttlMs ?? CORPUS_DEFAULT_TTL_MS[item.corpus];
77
+ return ttl !== undefined ? now + ttl : undefined;
78
+ }
79
+ export class LocalSearchProvider {
80
+ available = false;
81
+ initError;
82
+ embed = null;
83
+ cacheDir;
84
+ model;
85
+ // key: `${corpus}:${accountId ?? "global"}`
86
+ store = new Map();
87
+ keyLastAccessed = new Map();
88
+ evictionTimer = null;
89
+ constructor(options = {}) {
90
+ this.cacheDir = options.cacheDir ?? DEFAULT_HF_CACHE_DIR;
91
+ this.model = options.model ?? DEFAULT_EMBEDDING_MODEL;
92
+ }
93
+ async initialize() {
94
+ try {
95
+ const { pipeline, env } = await import("@huggingface/transformers");
96
+ env.cacheDir = this.cacheDir;
97
+ const extractor = await pipeline("feature-extraction", this.model, { dtype: "fp32" });
98
+ this.embed = async (text) => {
99
+ const out = await extractor(text, { pooling: "mean", normalize: true });
100
+ const raw = out.data;
101
+ return raw instanceof Float32Array ? raw : new Float32Array(raw);
102
+ };
103
+ this.available = true;
104
+ // Run eviction every 10 minutes
105
+ this.evictionTimer = setInterval(() => this.evictExpired(), 10 * 60 * 1000);
106
+ this.evictionTimer.unref?.();
107
+ log.info("LocalSearchProvider initialized", { model: this.model, dim: EMBEDDING_DIM, cacheDir: this.cacheDir });
108
+ }
109
+ catch (err) {
110
+ this.initError = String(err);
111
+ log.error("LocalSearchProvider initialization failed", { error: this.initError });
112
+ }
113
+ }
114
+ getInitError() {
115
+ return this.initError;
116
+ }
117
+ isAvailable() {
118
+ return this.available;
119
+ }
120
+ evictExpired() {
121
+ const now = Date.now();
122
+ let evicted = 0;
123
+ for (const [key, items] of this.store) {
124
+ const before = items.length;
125
+ const fresh = items.filter(i => i.expiresAt === undefined || i.expiresAt > now);
126
+ if (fresh.length !== before) {
127
+ this.store.set(key, fresh);
128
+ evicted += before - fresh.length;
129
+ }
130
+ }
131
+ if (evicted > 0)
132
+ log.info(`Evicted ${evicted} expired items`);
133
+ }
134
+ async search(query, options = {}) {
135
+ if (!this.available || !this.embed)
136
+ return [];
137
+ try {
138
+ const { corpus = "all", accountId, k = 10 } = options;
139
+ const now = Date.now();
140
+ const queryEmbedding = await this.embed(query);
141
+ const corpora = corpus === "all" ? CORPORA : [corpus];
142
+ const scored = [];
143
+ const seen = new Set();
144
+ for (const c of corpora) {
145
+ // Include account-specific items + global items (accountId=undefined)
146
+ const keys = accountId ? [storeKey(c, accountId), storeKey(c, undefined)] : [storeKey(c, undefined)];
147
+ for (const key of keys) {
148
+ const items = this.store.get(key) ?? [];
149
+ if (items.length > 0)
150
+ this.touchKey(key);
151
+ for (const item of items) {
152
+ if (seen.has(item.id))
153
+ continue;
154
+ // Skip expired items (lazy eviction during search)
155
+ if (item.expiresAt !== undefined && item.expiresAt <= now)
156
+ continue;
157
+ seen.add(item.id);
158
+ const score = cosineSimilarity(queryEmbedding, item.embedding);
159
+ scored.push({ id: item.id, content: item.content, score, corpus: c, metadata: item.metadata, _score: score });
160
+ }
161
+ }
162
+ }
163
+ return scored
164
+ .sort((a, b) => b._score - a._score)
165
+ .slice(0, k)
166
+ .map(({ _score: _s, ...r }) => r);
167
+ }
168
+ catch (err) {
169
+ log.error("LocalSearchProvider search failed", { error: String(err) });
170
+ return [];
171
+ }
172
+ }
173
+ async index(item) {
174
+ if (!this.available || !this.embed)
175
+ return;
176
+ try {
177
+ if (!item.id || !item.content)
178
+ return;
179
+ const key = storeKey(item.corpus, item.accountId);
180
+ if (!this.store.has(key) && isResourceAccountKey(key)) {
181
+ while (countResourceAccountKeys(this.store) >= MAX_RESOURCE_ACCOUNT_KEYS) {
182
+ const lruKey = findLruKey(this.store, this.keyLastAccessed, isResourceAccountKey);
183
+ if (!lruKey)
184
+ break;
185
+ this.evictStoreKey(lruKey);
186
+ }
187
+ }
188
+ if (!this.store.has(key))
189
+ this.store.set(key, []);
190
+ const items = this.store.get(key);
191
+ const existing = items.findIndex(i => i.id === item.id);
192
+ const expiresAt = resolveExpiresAt(item, Date.now());
193
+ if (existing < 0 && needsPerKeyCap(item.corpus, expiresAt) && items.length >= MAX_ITEMS_PER_KEY) {
194
+ const minIdx = findSoonestExpiryIndex(items);
195
+ if (minIdx >= 0) {
196
+ items.splice(minIdx, 1);
197
+ }
198
+ else {
199
+ // resources corpus with only permanent rows — drop oldest entry
200
+ items.shift();
201
+ }
202
+ }
203
+ const embedding = existing >= 0 && items[existing].content === item.content
204
+ ? items[existing].embedding
205
+ : await this.embed(item.content);
206
+ const stored = {
207
+ id: item.id,
208
+ content: item.content,
209
+ corpus: item.corpus,
210
+ metadata: item.metadata,
211
+ embedding,
212
+ expiresAt,
213
+ };
214
+ if (existing >= 0) {
215
+ items[existing] = stored;
216
+ }
217
+ else {
218
+ items.push(stored);
219
+ }
220
+ this.touchKey(key);
221
+ while (totalItemCount(this.store) > MAX_TOTAL_ITEMS) {
222
+ if (!this.evictOneGlobally())
223
+ break;
224
+ }
225
+ }
226
+ catch (err) {
227
+ log.error("LocalSearchProvider index failed", { id: item.id, error: String(err) });
228
+ }
229
+ }
230
+ touchKey(key) {
231
+ this.keyLastAccessed.set(key, Date.now());
232
+ }
233
+ evictStoreKey(key) {
234
+ const count = this.store.get(key)?.length ?? 0;
235
+ this.store.delete(key);
236
+ this.keyLastAccessed.delete(key);
237
+ if (count > 0)
238
+ log.info("Evicted store key", { key, items: count });
239
+ }
240
+ evictOneGlobally() {
241
+ let bestKey;
242
+ let bestIdx = -1;
243
+ let bestExpiry = Infinity;
244
+ for (const [key, items] of this.store) {
245
+ for (let i = 0; i < items.length; i++) {
246
+ const exp = items[i].expiresAt;
247
+ if (exp !== undefined && exp < bestExpiry) {
248
+ bestExpiry = exp;
249
+ bestKey = key;
250
+ bestIdx = i;
251
+ }
252
+ }
253
+ }
254
+ if (bestKey !== undefined && bestIdx >= 0) {
255
+ this.store.get(bestKey).splice(bestIdx, 1);
256
+ return true;
257
+ }
258
+ const lruKey = findLruKey(this.store, this.keyLastAccessed, isResourceAccountKey);
259
+ if (lruKey) {
260
+ this.evictStoreKey(lruKey);
261
+ return true;
262
+ }
263
+ return false;
264
+ }
265
+ }
266
+ function storeKey(corpus, accountId) {
267
+ return `${corpus}:${accountId ?? "global"}`;
268
+ }
269
+ //# sourceMappingURL=local-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-provider.js","sourceRoot":"","sources":["../../src/search/local-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { Config } from "../config.js";
2
+ import type { Registry } from "../registry/index.js";
3
+ import type { HarnessClient } from "../client/harness-client.js";
4
+ import type { SearchCorpus, SearchProvider, SearchReadiness, IndexableItem } from "./types.js";
5
+ import "../data/examples/load-all.js";
6
+ export declare class SearchManager {
7
+ private provider;
8
+ private readonly mcpMode;
9
+ private readonly configuredProvider;
10
+ private readiness;
11
+ private loggedResourcesCorpusDisabled;
12
+ constructor(config: Config);
13
+ /**
14
+ * Whether live customer data may be indexed into the given corpus.
15
+ * In multi-user mode the local in-process store must not hold per-account entity data
16
+ * (no isolation between accounts). The remote provider handles this correctly via tenant_id.
17
+ */
18
+ canIndexCorpus(corpus: SearchCorpus): boolean;
19
+ /**
20
+ * Index a single item, enforcing corpus/mode policy before delegating to the provider.
21
+ */
22
+ indexItem(item: IndexableItem): Promise<void>;
23
+ getProvider(): SearchProvider;
24
+ getReadiness(): SearchReadiness;
25
+ initialize(): Promise<void>;
26
+ /**
27
+ * Index all static, account-agnostic content into mcp_resources corpus.
28
+ * Safe to call in any mode — no account context needed.
29
+ * Items are permanent (ttlMs=0) since they're bundled with the server.
30
+ */
31
+ indexStaticContent(registry: Registry): Promise<void>;
32
+ /**
33
+ * Pre-index tier-1 Harness resources for a specific account.
34
+ * Only call in stdio (single-user) mode where client.account is known.
35
+ */
36
+ initializeIndex(registry: Registry, client: HarnessClient): Promise<void>;
37
+ private loadProvider;
38
+ }
39
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/search/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAsB,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKnH,OAAO,8BAA8B,CAAC;AAUtC,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,6BAA6B,CAAS;gBAElC,MAAM,EAAE,MAAM;IAS1B;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO;IAO7C;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnD,WAAW,IAAI,cAAc;IAI7B,YAAY,IAAI,eAAe;IAIzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCjC;;;;OAIG;IACG,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA8G3D;;;OAGG;IACG,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC/E,OAAO,CAAC,YAAY;CAoBrB"}