@appinternalleads/ui 0.3.0 → 0.4.0

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 (100) hide show
  1. package/dist/cjs/agent/base.js +25 -0
  2. package/dist/cjs/agent/base.js.map +1 -0
  3. package/dist/cjs/agent/catalog.js +0 -32
  4. package/dist/cjs/agent/catalog.js.map +1 -1
  5. package/dist/cjs/agent/core.js +22 -20
  6. package/dist/cjs/agent/core.js.map +1 -1
  7. package/dist/cjs/agent/index.js +6 -5
  8. package/dist/cjs/agent/index.js.map +1 -1
  9. package/dist/cjs/agent/search/document.js +50 -0
  10. package/dist/cjs/agent/search/document.js.map +1 -0
  11. package/dist/cjs/agent/search/embedding.js +107 -0
  12. package/dist/cjs/agent/search/embedding.js.map +1 -0
  13. package/dist/cjs/agent/search/index.js +25 -0
  14. package/dist/cjs/agent/search/index.js.map +1 -0
  15. package/dist/cjs/agent/search/lexical.js +28 -0
  16. package/dist/cjs/agent/search/lexical.js.map +1 -0
  17. package/dist/cjs/agent/search/normalize.js +15 -0
  18. package/dist/cjs/agent/search/normalize.js.map +1 -0
  19. package/dist/cjs/agent/search/search.js +123 -0
  20. package/dist/cjs/agent/search/search.js.map +1 -0
  21. package/dist/cjs/agent/search/searchIndex.js +120 -0
  22. package/dist/cjs/agent/search/searchIndex.js.map +1 -0
  23. package/dist/cjs/agent/search/types.js +8 -0
  24. package/dist/cjs/agent/search/types.js.map +1 -0
  25. package/dist/cjs/agent/search/weights.js +34 -0
  26. package/dist/cjs/agent/search/weights.js.map +1 -0
  27. package/dist/cjs/agent/search/wordvectors.json +1 -0
  28. package/dist/cjs/index.js +1 -1
  29. package/dist/cjs/index.js.map +1 -1
  30. package/dist/esm/agent/base.d.ts +11 -0
  31. package/dist/esm/agent/base.d.ts.map +1 -0
  32. package/dist/esm/agent/base.js +11 -0
  33. package/dist/esm/agent/base.js.map +1 -0
  34. package/dist/esm/agent/catalog.d.ts +0 -8
  35. package/dist/esm/agent/catalog.d.ts.map +1 -1
  36. package/dist/esm/agent/catalog.js +0 -31
  37. package/dist/esm/agent/catalog.js.map +1 -1
  38. package/dist/esm/agent/core.d.ts +6 -7
  39. package/dist/esm/agent/core.d.ts.map +1 -1
  40. package/dist/esm/agent/core.js +6 -7
  41. package/dist/esm/agent/core.js.map +1 -1
  42. package/dist/esm/agent/index.d.ts +6 -5
  43. package/dist/esm/agent/index.d.ts.map +1 -1
  44. package/dist/esm/agent/index.js +6 -5
  45. package/dist/esm/agent/index.js.map +1 -1
  46. package/dist/esm/agent/search/document.d.ts +6 -0
  47. package/dist/esm/agent/search/document.d.ts.map +1 -0
  48. package/dist/esm/agent/search/document.js +46 -0
  49. package/dist/esm/agent/search/document.js.map +1 -0
  50. package/dist/esm/agent/search/embedding.d.ts +31 -0
  51. package/dist/esm/agent/search/embedding.d.ts.map +1 -0
  52. package/dist/esm/agent/search/embedding.js +103 -0
  53. package/dist/esm/agent/search/embedding.js.map +1 -0
  54. package/dist/esm/agent/search/index.d.ts +10 -0
  55. package/dist/esm/agent/search/index.d.ts.map +1 -0
  56. package/dist/esm/agent/search/index.js +17 -0
  57. package/dist/esm/agent/search/index.js.map +1 -0
  58. package/dist/esm/agent/search/lexical.d.ts +3 -0
  59. package/dist/esm/agent/search/lexical.d.ts.map +1 -0
  60. package/dist/esm/agent/search/lexical.js +25 -0
  61. package/dist/esm/agent/search/lexical.js.map +1 -0
  62. package/dist/esm/agent/search/normalize.d.ts +13 -0
  63. package/dist/esm/agent/search/normalize.d.ts.map +1 -0
  64. package/dist/esm/agent/search/normalize.js +12 -0
  65. package/dist/esm/agent/search/normalize.js.map +1 -0
  66. package/dist/esm/agent/search/search.d.ts +42 -0
  67. package/dist/esm/agent/search/search.d.ts.map +1 -0
  68. package/dist/esm/agent/search/search.js +119 -0
  69. package/dist/esm/agent/search/search.js.map +1 -0
  70. package/dist/esm/agent/search/searchIndex.d.ts +42 -0
  71. package/dist/esm/agent/search/searchIndex.d.ts.map +1 -0
  72. package/dist/esm/agent/search/searchIndex.js +114 -0
  73. package/dist/esm/agent/search/searchIndex.js.map +1 -0
  74. package/dist/esm/agent/search/types.d.ts +67 -0
  75. package/dist/esm/agent/search/types.d.ts.map +1 -0
  76. package/dist/esm/agent/search/types.js +7 -0
  77. package/dist/esm/agent/search/types.js.map +1 -0
  78. package/dist/esm/agent/search/weights.d.ts +22 -0
  79. package/dist/esm/agent/search/weights.d.ts.map +1 -0
  80. package/dist/esm/agent/search/weights.js +31 -0
  81. package/dist/esm/agent/search/weights.js.map +1 -0
  82. package/dist/esm/agent/search/wordvectors.json +1 -0
  83. package/dist/esm/index.js +1 -1
  84. package/dist/esm/index.js.map +1 -1
  85. package/package.json +2 -1
  86. package/src/agent/base.ts +17 -0
  87. package/src/agent/catalog.ts +0 -32
  88. package/src/agent/core.ts +6 -14
  89. package/src/agent/index.ts +6 -5
  90. package/src/agent/search/document.ts +46 -0
  91. package/src/agent/search/embedding.ts +95 -0
  92. package/src/agent/search/index.ts +20 -0
  93. package/src/agent/search/lexical.ts +25 -0
  94. package/src/agent/search/normalize.ts +17 -0
  95. package/src/agent/search/search.ts +148 -0
  96. package/src/agent/search/searchIndex.ts +107 -0
  97. package/src/agent/search/types.ts +68 -0
  98. package/src/agent/search/weights.ts +32 -0
  99. package/src/index.ts +1 -1
  100. package/tools/ask/dist/components.mjs +348 -12
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RESULT_SCHEMA = exports.RENDER_SCHEMA = exports.CAPABILITY_SCHEMA = exports.makeResult = exports.RESULT_EVENTS = exports.validateRenderRequest = exports.listAgentComponents = exports.isAgentComponent = exports.describeComponent = exports.agentAvailability = exports.AGENT_COMPONENTS = void 0;
4
+ /**
5
+ * **The agent contract without search** — describe, `render/1` validation, `result/1`, the types.
6
+ * Small and React-free. Both entry points carry it: `@appinternalleads/ui/agent` (`./core`) adds
7
+ * `searchComponents`; the main entry adds `AgentComponent`. Search is not here on purpose — its
8
+ * word-vector table is 2.8 MB, and an app that renders components must not bundle it.
9
+ */
10
+ var catalog_1 = require("./catalog");
11
+ Object.defineProperty(exports, "AGENT_COMPONENTS", { enumerable: true, get: function () { return catalog_1.AGENT_COMPONENTS; } });
12
+ Object.defineProperty(exports, "agentAvailability", { enumerable: true, get: function () { return catalog_1.agentAvailability; } });
13
+ Object.defineProperty(exports, "describeComponent", { enumerable: true, get: function () { return catalog_1.describeComponent; } });
14
+ Object.defineProperty(exports, "isAgentComponent", { enumerable: true, get: function () { return catalog_1.isAgentComponent; } });
15
+ Object.defineProperty(exports, "listAgentComponents", { enumerable: true, get: function () { return catalog_1.listAgentComponents; } });
16
+ var validate_1 = require("./validate");
17
+ Object.defineProperty(exports, "validateRenderRequest", { enumerable: true, get: function () { return validate_1.validateRenderRequest; } });
18
+ var result_1 = require("./result");
19
+ Object.defineProperty(exports, "RESULT_EVENTS", { enumerable: true, get: function () { return result_1.RESULT_EVENTS; } });
20
+ Object.defineProperty(exports, "makeResult", { enumerable: true, get: function () { return result_1.makeResult; } });
21
+ var types_1 = require("./types");
22
+ Object.defineProperty(exports, "CAPABILITY_SCHEMA", { enumerable: true, get: function () { return types_1.CAPABILITY_SCHEMA; } });
23
+ Object.defineProperty(exports, "RENDER_SCHEMA", { enumerable: true, get: function () { return types_1.RENDER_SCHEMA; } });
24
+ Object.defineProperty(exports, "RESULT_SCHEMA", { enumerable: true, get: function () { return types_1.RESULT_SCHEMA; } });
25
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/agent/base.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,qCAEmB;AADjB,2GAAA,gBAAgB,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAE/F,uCAAmD;AAA1C,iHAAA,qBAAqB,OAAA;AAC9B,mCAAqD;AAA5C,uGAAA,aAAa,OAAA;AAAE,oGAAA,UAAU,OAAA;AAClC,iCAKiB;AAJf,0GAAA,iBAAiB,OAAA;AAAE,sGAAA,aAAa,OAAA;AAAE,sGAAA,aAAa,OAAA"}
@@ -5,7 +5,6 @@ exports.nonCopyKeys = nonCopyKeys;
5
5
  exports.describeComponent = describeComponent;
6
6
  exports.listAgentComponents = listAgentComponents;
7
7
  exports.agentAvailability = agentAvailability;
8
- exports.searchComponents = searchComponents;
9
8
  const presets_1 = require("../components/onboarding/presets");
10
9
  const actions_data_1 = require("../components/onboarding/shared/actions-data");
11
10
  const contract_1 = require("../components/onboarding/shared/contract");
@@ -92,35 +91,4 @@ function agentAvailability(id) {
92
91
  }
93
92
  return { component: id, agentEditable: false, reason: 'No such component.' };
94
93
  }
95
- /* ── Search ────────────────────────────────────────────────────────────────────────────────── */
96
- const STOP = new Set('a an the of for to and or in on at by with my me i we our you your it is are be this that these those can could would should please make create show give get want need some any what how which who when from as into about'.split(' '));
97
- const stem = (w) => w.replace(/(ies)$/, 'y').replace(/(ing|ed|es|s)$/, '');
98
- const words = (s) => s.toLowerCase().replace(/[^\p{L}\p{N}\s'-]/gu, ' ').split(/[\s'-]+/).filter(w => w.length > 1 && !STOP.has(w)).map(stem);
99
- /**
100
- * **Intent → candidates.** A short list of cards, best first. Scored on the component's own
101
- * selection signals (a whole phrase in the request counts most), then its name and purpose, then
102
- * when to use it. Deterministic: the same words give the same order.
103
- */
104
- function searchComponents(query, limit = 5) {
105
- const q = ` ${query.toLowerCase().replace(/[^\p{L}\p{N}\s]/gu, ' ').replace(/\s+/g, ' ')} `;
106
- const qw = new Set(words(query));
107
- const scored = [...CAPABILITIES.values()].map((c, order) => {
108
- let score = 0;
109
- for (const s of c.signals) {
110
- const phrase = ` ${s.toLowerCase().replace(/[^\p{L}\p{N}\s]/gu, ' ').replace(/\s+/g, ' ')} `;
111
- if (q.includes(phrase))
112
- score += 6 + 2 * (phrase.trim().split(' ').length - 1);
113
- else
114
- score += words(s).filter(w => qw.has(w)).length * 2;
115
- }
116
- score += words(`${c.name} ${c.purpose}`).filter(w => qw.has(w)).length;
117
- score += new Set(words(c.useWhen.join(' ')).filter(w => qw.has(w))).size * 0.5;
118
- return { card: cardOf(c), score, order };
119
- });
120
- return scored
121
- .filter(s => s.score > 0)
122
- .sort((a, b) => b.score - a.score || a.order - b.order)
123
- .slice(0, limit)
124
- .map(s => ({ ...s.card, score: s.score }));
125
- }
126
94
  //# sourceMappingURL=catalog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/agent/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/agent/catalog.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,27 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RESULT_SCHEMA = exports.RENDER_SCHEMA = exports.CAPABILITY_SCHEMA = exports.makeResult = exports.RESULT_EVENTS = exports.validateRenderRequest = exports.searchComponents = exports.listAgentComponents = exports.isAgentComponent = exports.describeComponent = exports.agentAvailability = exports.AGENT_COMPONENTS = void 0;
17
+ exports.searchComponents = void 0;
4
18
  /**
5
- * **The agent component contract, without React** — `@appinternalleads/ui/agent`. Search, describe,
6
- * `render/1` validation and `result/1`: what a backend or an MCP server needs, and all of it runs in
7
- * plain Node. The renderer, `AgentComponent`, is in the main entry. `docs/AGENT-COMPONENT-CONTRACT.md`.
19
+ * **`@appinternalleads/ui/agent` — the agent contract, with search, without React.** Search,
20
+ * describe, `render/1` validation and `result/1`: what a backend or an MCP server needs, all of it in
21
+ * plain Node. `searchComponents` lives only here (and its word-vector table with it); the renderer,
22
+ * `AgentComponent`, is in the main entry. `docs/AGENT-COMPONENT-CONTRACT.md`.
8
23
  */
9
- var catalog_1 = require("./catalog");
10
- Object.defineProperty(exports, "AGENT_COMPONENTS", { enumerable: true, get: function () { return catalog_1.AGENT_COMPONENTS; } });
11
- Object.defineProperty(exports, "agentAvailability", { enumerable: true, get: function () { return catalog_1.agentAvailability; } });
12
- Object.defineProperty(exports, "describeComponent", { enumerable: true, get: function () { return catalog_1.describeComponent; } });
13
- Object.defineProperty(exports, "isAgentComponent", { enumerable: true, get: function () { return catalog_1.isAgentComponent; } });
14
- Object.defineProperty(exports, "listAgentComponents", { enumerable: true, get: function () { return catalog_1.listAgentComponents; } });
15
- Object.defineProperty(exports, "searchComponents", { enumerable: true, get: function () { return catalog_1.searchComponents; } });
16
- var validate_1 = require("./validate");
17
- Object.defineProperty(exports, "validateRenderRequest", { enumerable: true, get: function () { return validate_1.validateRenderRequest; } });
18
- var result_1 = require("./result");
19
- Object.defineProperty(exports, "RESULT_EVENTS", { enumerable: true, get: function () { return result_1.RESULT_EVENTS; } });
20
- Object.defineProperty(exports, "makeResult", { enumerable: true, get: function () { return result_1.makeResult; } });
21
- var types_1 = require("./types");
22
- Object.defineProperty(exports, "CAPABILITY_SCHEMA", { enumerable: true, get: function () { return types_1.CAPABILITY_SCHEMA; } });
23
- Object.defineProperty(exports, "RENDER_SCHEMA", { enumerable: true, get: function () { return types_1.RENDER_SCHEMA; } });
24
- Object.defineProperty(exports, "RESULT_SCHEMA", { enumerable: true, get: function () { return types_1.RESULT_SCHEMA; } });
24
+ __exportStar(require("./base"), exports);
25
+ var search_1 = require("./search");
26
+ Object.defineProperty(exports, "searchComponents", { enumerable: true, get: function () { return search_1.searchComponents; } });
25
27
  //# sourceMappingURL=core.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/agent/core.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,qCAEmB;AADjB,2GAAA,gBAAgB,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAEjH,uCAAmD;AAA1C,iHAAA,qBAAqB,OAAA;AAC9B,mCAAqD;AAA5C,uGAAA,aAAa,OAAA;AAAE,oGAAA,UAAU,OAAA;AAClC,iCAKiB;AAJf,0GAAA,iBAAiB,OAAA;AAAE,sGAAA,aAAa,OAAA;AAAE,sGAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/agent/core.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;;;;GAKG;AACH,yCAAuB;AACvB,mCAA4C;AAAnC,0GAAA,gBAAgB,OAAA"}
@@ -16,13 +16,14 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.AGENT_RENDERABLE = exports.AgentComponent = void 0;
18
18
  /**
19
- * **The agent component contract** — `docs/AGENT-COMPONENT-CONTRACT.md`.
19
+ * **The agent contract, as the main entry carries it** — for the app that renders: `AgentComponent`,
20
+ * `AGENT_RENDERABLE`, and the small React-free contract they use (describe, validate, results).
20
21
  *
21
- * search → describe → build a `render/1` → `validateRenderRequest` → `<AgentComponent>` → `result/1`.
22
- * Everything but `AgentComponent` is pure and serialisable, and is also its own entry point —
23
- * `@appinternalleads/ui/agent` (`./core`) — so a server or an MCP tool can use it without React.
22
+ * Not `searchComponents`: component search belongs to the agent, and its word-vector table must not
23
+ * reach an app's bundle. Import it from `@appinternalleads/ui/agent`. `tests/agent/boundary.test.ts`
24
+ * holds this line on the built package.
24
25
  */
25
- __exportStar(require("./core"), exports);
26
+ __exportStar(require("./base"), exports);
26
27
  var AgentComponent_1 = require("./AgentComponent");
27
28
  Object.defineProperty(exports, "AgentComponent", { enumerable: true, get: function () { return AgentComponent_1.AgentComponent; } });
28
29
  Object.defineProperty(exports, "AGENT_RENDERABLE", { enumerable: true, get: function () { return AgentComponent_1.AGENT_RENDERABLE; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;;;;;GAMG;AACH,yCAAuB;AACvB,mDAA8F;AAArF,gHAAA,cAAc,OAAA;AAAE,kHAAA,gBAAgB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;;;;;;GAOG;AACH,yCAAuB;AACvB,mDAA8F;AAArF,gHAAA,cAAc,OAAA;AAAE,kHAAA,gBAAgB,OAAA"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.searchDocumentOf = searchDocumentOf;
4
+ exports.versionOf = versionOf;
5
+ /**
6
+ * **A component's search document, derived from its capability.** It says what problem the
7
+ * component solves — purpose, when to use it, its selection signals, its case studies' scenarios,
8
+ * what a person can do with it, what it shows and what it reports — and, separately, what it is not
9
+ * for (`avoidWhen`). Nothing is written for search alone, so a new approved component is searchable
10
+ * the moment it has a capability. No source, no implementation, no runtime values.
11
+ */
12
+ /** "…statement over time — use budget-tracker or a list." → "…statement over time": the pointer to another component is advice, not meaning. */
13
+ function ownMeaning(text, ids) {
14
+ let t = text.replace(/\s[—–-]+\s*use\s.*$/i, '').replace(/:\s*use\s.*$/i, '');
15
+ for (const id of ids)
16
+ t = t.split(id).join(' ');
17
+ return t.replace(/\s+/g, ' ').trim();
18
+ }
19
+ const describeData = (key, spec) => {
20
+ const words = key.replace(/([a-z])([A-Z])/g, '$1 $2').toLowerCase();
21
+ return `${words}: ${spec.description}`;
22
+ };
23
+ function searchDocumentOf(c, order, allIds) {
24
+ const positive = [];
25
+ const add = (type, text) => { const t = text && ownMeaning(text, allIds); if (t)
26
+ positive.push({ type, text: t }); };
27
+ add('name', c.name);
28
+ add('purpose', c.purpose);
29
+ c.signals.forEach(s => add('signal', s));
30
+ c.useWhen.forEach(s => add('useWhen', s));
31
+ c.presets.forEach(p => add('scenario', `${p.title}. ${p.scenario}`));
32
+ c.actions.forEach(a => add('action', a.description));
33
+ c.states.forEach(s => add('state', s.description));
34
+ c.events.forEach(e => add('event', e.description));
35
+ for (const [k, spec] of Object.entries(c.data))
36
+ add('data', describeData(k, spec));
37
+ const negative = c.avoidWhen.map(t => ownMeaning(t, allIds)).filter(Boolean).map(text => ({ text }));
38
+ return { component: c.component, order, positive, negative };
39
+ }
40
+ /** FNV-1a over the documents: the catalogue's search version. Any change to what search reads changes it. */
41
+ function versionOf(value) {
42
+ const s = JSON.stringify(value);
43
+ let h = 0x811c9dc5;
44
+ for (let i = 0; i < s.length; i++) {
45
+ h ^= s.charCodeAt(i);
46
+ h = Math.imul(h, 0x01000193);
47
+ }
48
+ return (h >>> 0).toString(16).padStart(8, '0');
49
+ }
50
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../../../src/agent/search/document.ts"],"names":[],"mappings":";;AAuBA,4CAcC;AAGD,8BAKC;AA1CD;;;;;;GAMG;AAEH,gJAAgJ;AAChJ,SAAS,UAAU,CAAC,IAAY,EAAE,GAAsB;IACtD,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAC9E,KAAK,MAAM,EAAE,IAAI,GAAG;QAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,IAAe,EAAU,EAAE;IAC5D,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,OAAO,GAAG,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;AACzC,CAAC,CAAC;AAEF,SAAgB,gBAAgB,CAAC,CAAkB,EAAE,KAAa,EAAE,MAAyB;IAC3F,MAAM,QAAQ,GAAwC,EAAE,CAAC;IACzD,MAAM,GAAG,GAAG,CAAC,IAAe,EAAE,IAAwB,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpJ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACpB,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IACnD,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACrG,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAC/D,CAAC;AAED,6GAA6G;AAC7G,SAAgB,SAAS,CAAC,KAAc;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAAC,CAAC;IAC1F,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createWordVectorProvider = createWordVectorProvider;
4
+ exports.createFakeEmbeddingProvider = createFakeEmbeddingProvider;
5
+ const bytesOf = (b64) => {
6
+ if (typeof Buffer !== 'undefined') {
7
+ const b = Buffer.from(b64, 'base64');
8
+ return new Uint8Array(b.buffer, b.byteOffset, b.length);
9
+ }
10
+ const bin = atob(b64);
11
+ const out = new Uint8Array(bin.length);
12
+ for (let i = 0; i < bin.length; i++)
13
+ out[i] = bin.charCodeAt(i);
14
+ return out;
15
+ };
16
+ /* One signed value per entry, whatever the storage. Only directions matter (vectors are averaged and normalised), so no rescaling. */
17
+ function decode(t) {
18
+ const bytes = bytesOf(t.data);
19
+ if (t.bits !== 4)
20
+ return new Int8Array(bytes.buffer, bytes.byteOffset, bytes.length);
21
+ const out = new Int8Array(t.count * t.dims);
22
+ for (let i = 0; i < out.length; i++)
23
+ out[i] = ((bytes[i >> 1] >> ((i & 1) * 4)) & 15) - 8;
24
+ return out;
25
+ }
26
+ const unit = (v) => {
27
+ let n = 0;
28
+ for (const x of v)
29
+ n += x * x;
30
+ n = Math.sqrt(n);
31
+ if (n > 0)
32
+ for (let i = 0; i < v.length; i++)
33
+ v[i] /= n;
34
+ return v;
35
+ };
36
+ /**
37
+ * **Word vectors, averaged — offline and deterministic.** A text's vector is the average of its
38
+ * words' vectors, each weighted by how rare the word is (Arora et al.'s smooth inverse frequency,
39
+ * with the table's frequency order standing in for counts), so "the" counts for almost nothing and
40
+ * "receipt" for a lot. A word the table lacks is tried without a plural or tense ending; failing
41
+ * that it is skipped (lexical matching still sees it).
42
+ */
43
+ function createWordVectorProvider(table, opts = {}) {
44
+ let index = null;
45
+ let data = null;
46
+ const a = opts.smoothing ?? 1e-3;
47
+ /* Zipf: a word's share of text ∝ 1 / rank. H is the normaliser for the table's size. */
48
+ const H = Math.log(table.count) + 0.5772;
49
+ const load = () => {
50
+ if (index)
51
+ return;
52
+ index = new Map(table.words.split(' ').map((w, i) => [w, i]));
53
+ data = decode(table);
54
+ };
55
+ const lookup = (w) => {
56
+ const m = index;
57
+ return m.get(w) ?? m.get(w.replace(/'s$/, '')) ?? m.get(w.replace(/ies$/, 'y')) ?? m.get(w.replace(/s$/, ''))
58
+ ?? m.get(w.replace(/ing$/, '')) ?? m.get(w.replace(/ing$/, 'e')) ?? m.get(w.replace(/ed$/, '')) ?? m.get(w.replace(/d$/, ''));
59
+ };
60
+ return {
61
+ id: `word-vectors:${table.dims}x${table.count}x${table.bits ?? 8}bit:sif-${a}`,
62
+ embed(texts) {
63
+ load();
64
+ return texts.map(text => {
65
+ const v = new Float32Array(table.dims);
66
+ for (const raw of text.toLowerCase().split(/[^\p{L}']+/u)) {
67
+ if (!raw)
68
+ continue;
69
+ const r = lookup(raw);
70
+ if (r === undefined)
71
+ continue;
72
+ const p = 1 / ((r + 1) * H);
73
+ const w = a / (a + p);
74
+ const off = r * table.dims;
75
+ for (let d = 0; d < table.dims; d++)
76
+ v[d] += w * data[off + d];
77
+ }
78
+ return unit(v);
79
+ });
80
+ },
81
+ };
82
+ }
83
+ /**
84
+ * **For tests: deterministic vectors, no model.** Each word hashes to a few dimensions, so equal words
85
+ * give equal vectors and different words mostly do not. It proves the machinery — indexing, ranking,
86
+ * filtering, fallback — not semantic quality.
87
+ */
88
+ function createFakeEmbeddingProvider(dims = 64) {
89
+ const hash = (s, seed) => { let h = 0x811c9dc5 ^ seed; for (let i = 0; i < s.length; i++) {
90
+ h ^= s.charCodeAt(i);
91
+ h = Math.imul(h, 0x01000193);
92
+ } return h >>> 0; };
93
+ return {
94
+ id: `fake:${dims}`,
95
+ embed(texts) {
96
+ return texts.map(t => {
97
+ const v = new Float32Array(dims);
98
+ for (const w of t.toLowerCase().split(/[^\p{L}\p{N}]+/u))
99
+ if (w)
100
+ for (let s = 0; s < 3; s++)
101
+ v[hash(w, s) % dims] += (hash(w, s + 7) & 1) ? 1 : -1;
102
+ return unit(v);
103
+ });
104
+ },
105
+ };
106
+ }
107
+ //# sourceMappingURL=embedding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../../src/agent/search/embedding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.explainSearch = void 0;
7
+ exports.searchComponents = searchComponents;
8
+ const embedding_1 = require("./embedding");
9
+ const search_1 = require("./search");
10
+ const weights_1 = require("./weights");
11
+ const wordvectors_json_1 = __importDefault(require("./wordvectors.json"));
12
+ /**
13
+ * **`searchComponents` — the package's one search.** The MCP tool and the site's API call this; the
14
+ * hybrid engine behind it (`search.ts`) uses the offline word-vector provider shipped with the
15
+ * package, so it needs no network and gives the same answer every time.
16
+ */
17
+ const engine = (0, search_1.createComponentSearch)({ provider: (0, embedding_1.createWordVectorProvider)(wordvectors_json_1.default), weights: weights_1.DEFAULT_WEIGHTS });
18
+ /** Intent → candidate cards, best first. `options.available` is the host's policy: only those components may be offered. */
19
+ function searchComponents(query, limit = 5, options) {
20
+ return engine.search(query, limit, options);
21
+ }
22
+ /** Development only: why each component scored what it did. Not part of the agent's result. */
23
+ const explainSearch = (query, options) => engine.explain(query, options);
24
+ exports.explainSearch = explainSearch;
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/agent/search/index.ts"],"names":[],"mappings":";;;;;;AAcA,4CAEC;AAhBD,2CAA6E;AAC7E,qCAAkE;AAElE,uCAA4C;AAC5C,0EAAuC;AAEvC;;;;GAIG;AACH,MAAM,MAAM,GAAG,IAAA,8BAAqB,EAAC,EAAE,QAAQ,EAAE,IAAA,oCAAwB,EAAC,0BAAwB,CAAC,EAAE,OAAO,EAAE,yBAAe,EAAE,CAAC,CAAC;AAEjI,4HAA4H;AAC5H,SAAgB,gBAAgB,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC,EAAE,OAAuB;IAChF,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,+FAA+F;AACxF,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,OAAuB,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAA3F,QAAA,aAAa,iBAA8E"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lexicalScore = lexicalScore;
4
+ /**
5
+ * **Lexical scoring — the search as it shipped in 0.3.0, unchanged.** Whole selection-signal phrases
6
+ * in the request count most, then shared words with the signals, the name and purpose, then when to
7
+ * use it. It is one input to the hybrid ranking, and on its own it is the fallback whenever semantic
8
+ * retrieval is unavailable.
9
+ */
10
+ const STOP = new Set('a an the of for to and or in on at by with my me i we our you your it is are be this that these those can could would should please make create show give get want need some any what how which who when from as into about'.split(' '));
11
+ const stem = (w) => w.replace(/(ies)$/, 'y').replace(/(ing|ed|es|s)$/, '');
12
+ const words = (s) => s.toLowerCase().replace(/[^\p{L}\p{N}\s'-]/gu, ' ').split(/[\s'-]+/).filter(w => w.length > 1 && !STOP.has(w)).map(stem);
13
+ function lexicalScore(c, query) {
14
+ const q = ` ${query.toLowerCase().replace(/[^\p{L}\p{N}\s]/gu, ' ').replace(/\s+/g, ' ')} `;
15
+ const qw = new Set(words(query));
16
+ let score = 0;
17
+ for (const s of c.signals) {
18
+ const phrase = ` ${s.toLowerCase().replace(/[^\p{L}\p{N}\s]/gu, ' ').replace(/\s+/g, ' ')} `;
19
+ if (q.includes(phrase))
20
+ score += 6 + 2 * (phrase.trim().split(' ').length - 1);
21
+ else
22
+ score += words(s).filter(w => qw.has(w)).length * 2;
23
+ }
24
+ score += words(`${c.name} ${c.purpose}`).filter(w => qw.has(w)).length;
25
+ score += new Set(words(c.useWhen.join(' ')).filter(w => qw.has(w))).size * 0.5;
26
+ return score;
27
+ }
28
+ //# sourceMappingURL=lexical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexical.js","sourceRoot":"","sources":["../../../../src/agent/search/lexical.ts"],"names":[],"mappings":";;AAYA,oCAYC;AAtBD;;;;;GAKG;AACH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,6NAA6N,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/P,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;AACnF,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAEtJ,SAAgB,YAAY,CAAC,CAAkB,EAAE,KAAa;IAC5D,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;IAC5F,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;QAC7F,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;;YAC1E,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3D,CAAC;IACD,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACvE,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;IAC/E,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeQuery = normalizeQuery;
4
+ function normalizeQuery(query) {
5
+ const original = typeof query === 'string' ? query : '';
6
+ const text = original.toLowerCase().normalize('NFKC').replace(/[^\p{L}\p{N}\s'-]/gu, ' ').replace(/\s+/g, ' ').trim();
7
+ const tokens = [];
8
+ for (const t of text.split(/[\s-]+/)) {
9
+ const w = t.replace(/^'+|'+$/g, '');
10
+ if (w && tokens[tokens.length - 1] !== w)
11
+ tokens.push(w);
12
+ }
13
+ return { original, text: tokens.join(' '), tokens, empty: tokens.length === 0 };
14
+ }
15
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../../src/agent/search/normalize.ts"],"names":[],"mappings":";;AAOA,wCASC;AATD,SAAgB,cAAc,CAAC,KAAc;IAC3C,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACtH,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;AAClF,CAAC"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.searchCatalog = searchCatalog;
4
+ exports.createComponentSearch = createComponentSearch;
5
+ const catalog_1 = require("../catalog");
6
+ const document_1 = require("./document");
7
+ const searchIndex_1 = require("./searchIndex");
8
+ const lexical_1 = require("./lexical");
9
+ const normalize_1 = require("./normalize");
10
+ const round = (x) => Math.round(x * 1000) / 1000;
11
+ const cardOf = (c) => ({ component: c.component, name: c.name, kind: c.kind, purpose: c.purpose, signals: c.signals });
12
+ /** The approved catalogue, in order, and its search documents — derived once per module. */
13
+ let catalogCache = null;
14
+ function searchCatalog() {
15
+ if (!catalogCache) {
16
+ const caps = catalog_1.AGENT_COMPONENTS.map(id => (0, catalog_1.describeComponent)(id));
17
+ catalogCache = { caps, docs: caps.map((c, i) => (0, document_1.searchDocumentOf)(c, i, catalog_1.AGENT_COMPONENTS)) };
18
+ }
19
+ return catalogCache;
20
+ }
21
+ function createComponentSearch(opts) {
22
+ const catalog = opts.catalog ?? searchCatalog;
23
+ const w = opts.weights;
24
+ let built = null;
25
+ let failed = null;
26
+ /* The index for the catalogue as it is now — rebuilt whenever its version (documents + provider) changes. */
27
+ const indexFor = (docs) => {
28
+ const provider = opts.provider;
29
+ if (!provider)
30
+ return null;
31
+ const version = (0, searchIndex_1.indexVersion)(docs, provider);
32
+ if (built?.version === version)
33
+ return built;
34
+ if (failed === version)
35
+ return null;
36
+ try {
37
+ built = new searchIndex_1.SearchIndex(provider, version).build(docs);
38
+ return built;
39
+ }
40
+ catch {
41
+ failed = version;
42
+ built = null;
43
+ return null;
44
+ }
45
+ };
46
+ const queryVector = (q, index) => {
47
+ try {
48
+ const v = index.provider.embed([q.text])[0];
49
+ if (!v || v.length !== index.mean?.length || !v.some(x => x !== 0) || v.some(x => !Number.isFinite(x)))
50
+ return null;
51
+ return v;
52
+ }
53
+ catch {
54
+ return null;
55
+ }
56
+ };
57
+ function retrieveCandidates(q) {
58
+ const { caps, docs } = catalog();
59
+ const index = q.empty ? null : indexFor(docs);
60
+ const qv = index ? queryVector(q, index) : null;
61
+ const centring = { mean: w.centre !== 'none' ? index?.mean ?? null : null, principal: w.centre === 'pc' ? index?.principal ?? null : null };
62
+ return {
63
+ mode: (qv ? 'hybrid' : 'lexical'),
64
+ version: index?.version ?? '',
65
+ candidates: caps.map((c, order) => {
66
+ const lexical = q.empty ? 0 : (0, lexical_1.lexicalScore)(c, q.original);
67
+ if (!qv || !index)
68
+ return { cap: c, order, lexical, semantic: null, negative: null };
69
+ const e = index.entries.get(c.component);
70
+ if (!e)
71
+ return { cap: c, order, lexical, semantic: null, negative: null };
72
+ const { pos, posMax } = fieldScore(qv, e, centring);
73
+ const neg = e.negative.length ? Math.max(...e.negative.map(n => (0, searchIndex_1.cosine)(qv, n, centring))) : 0;
74
+ return { cap: c, order, lexical, semantic: pos - w.negative * Math.max(0, neg - posMax), negative: neg };
75
+ }),
76
+ };
77
+ }
78
+ /* How close a query vector is to a component: the mean of its `topK` closest fields (weighted by kind), and the closest one. */
79
+ function fieldScore(qv, e, centring) {
80
+ const sims = e.positive.filter(p => w.fields[p.type] > 0).map(p => { const raw = (0, searchIndex_1.cosine)(qv, p.vector, centring); return { raw, weighted: w.fields[p.type] * raw }; });
81
+ const top = sims.map(x => x.weighted).sort((a, b) => b - a).slice(0, w.topK);
82
+ return { pos: top.length ? top.reduce((a, b) => a + b, 0) / top.length : 0, posMax: sims.length ? Math.max(...sims.map(x => x.raw)) : 0 };
83
+ }
84
+ const applyEligibility = (list, options = {}) => list.map(x => ({
85
+ ...x,
86
+ availability: (0, catalog_1.isAgentComponent)(x.cap.component) && (!options.available || options.available.includes(x.cap.component)) ? 1 : 0,
87
+ metadata: !options.kinds || options.kinds.includes(x.cap.kind) ? 1 : 0,
88
+ }));
89
+ function rankCandidates(query, options) {
90
+ const q = (0, normalize_1.normalizeQuery)(query);
91
+ const r = retrieveCandidates(q);
92
+ const scored = applyEligibility(r.candidates, options).map(x => ({
93
+ ...x,
94
+ final: r.mode === 'lexical' || x.semantic === null
95
+ ? x.lexical
96
+ : w.semantic * x.semantic + w.lexical * (x.lexical / (x.lexical + w.lexicalHalf)),
97
+ }));
98
+ scored.sort((a, b) => b.final - a.final || a.order - b.order);
99
+ return { ...r, scored };
100
+ }
101
+ return {
102
+ search(query, limit = 5, options) {
103
+ const r = rankCandidates(query, options);
104
+ const eligible = r.scored.filter(x => x.availability && x.metadata);
105
+ const kept = r.mode === 'lexical'
106
+ ? eligible.filter(x => x.final > 0)
107
+ : (() => { const best = eligible[0]?.final ?? 0; return eligible.filter(x => x.final >= w.minScore && (best <= 0 || x.final >= best * w.relative)); })();
108
+ return kept.slice(0, Math.max(0, limit)).map(x => ({ ...cardOf(x.cap), score: round(x.final) }));
109
+ },
110
+ explain(query, options) {
111
+ const r = rankCandidates(query, options);
112
+ const out = r.scored.map(x => ({
113
+ component: x.cap.component, semantic: x.semantic === null ? null : round(x.semantic), negative: x.negative === null ? null : round(x.negative),
114
+ lexical: round(x.lexical), metadata: x.metadata, availability: x.availability, final: round(x.final),
115
+ }));
116
+ out.mode = r.mode;
117
+ out.version = r.version;
118
+ return out;
119
+ },
120
+ index: () => indexFor(catalog().docs),
121
+ };
122
+ }
123
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../src/agent/search/search.ts"],"names":[],"mappings":"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"}