sensemaking 0.15.4 → 0.16.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 (213) hide show
  1. package/README.md +33 -5
  2. package/dist/cjs/cli/download.js +12 -11
  3. package/dist/cjs/cli/download.js.map +1 -1
  4. package/dist/cjs/cli/index.d.cts +1 -1
  5. package/dist/cjs/cli/index.d.ts +1 -1
  6. package/dist/cjs/cli/index.js +1 -1
  7. package/dist/cjs/cli/index.js.map +1 -1
  8. package/dist/cjs/cli/init.js +31 -5
  9. package/dist/cjs/cli/init.js.map +1 -1
  10. package/dist/cjs/cli/status.js +343 -99
  11. package/dist/cjs/cli/status.js.map +1 -1
  12. package/dist/cjs/commands/related.js +17 -13
  13. package/dist/cjs/commands/related.js.map +1 -1
  14. package/dist/cjs/commands/search.js +25 -96
  15. package/dist/cjs/commands/search.js.map +1 -1
  16. package/dist/cjs/commands/signals.d.cts +18 -0
  17. package/dist/cjs/commands/signals.d.ts +18 -0
  18. package/dist/cjs/commands/signals.js +299 -0
  19. package/dist/cjs/commands/signals.js.map +1 -0
  20. package/dist/cjs/commands/status.d.cts +2 -2
  21. package/dist/cjs/commands/status.d.ts +2 -2
  22. package/dist/cjs/commands/status.js +1 -1
  23. package/dist/cjs/commands/status.js.map +1 -1
  24. package/dist/cjs/config/access.d.cts +5 -2
  25. package/dist/cjs/config/access.d.ts +5 -2
  26. package/dist/cjs/config/access.js +30 -12
  27. package/dist/cjs/config/access.js.map +1 -1
  28. package/dist/cjs/config/index.d.cts +4 -1
  29. package/dist/cjs/config/index.d.ts +4 -1
  30. package/dist/cjs/config/index.js +12 -2
  31. package/dist/cjs/config/index.js.map +1 -1
  32. package/dist/cjs/config/load.d.cts +6 -1
  33. package/dist/cjs/config/load.d.ts +6 -1
  34. package/dist/cjs/config/load.js +83 -8
  35. package/dist/cjs/config/load.js.map +1 -1
  36. package/dist/cjs/config/resolve.js +1 -1
  37. package/dist/cjs/config/resolve.js.map +1 -1
  38. package/dist/cjs/config/signals.d.cts +4 -0
  39. package/dist/cjs/config/signals.d.ts +4 -0
  40. package/dist/cjs/config/signals.js +30 -0
  41. package/dist/cjs/config/signals.js.map +1 -0
  42. package/dist/cjs/config/types.d.cts +6 -4
  43. package/dist/cjs/config/types.d.ts +6 -4
  44. package/dist/cjs/config/types.js +1 -1
  45. package/dist/cjs/config/types.js.map +1 -1
  46. package/dist/cjs/config/validate.js +120 -11
  47. package/dist/cjs/config/validate.js.map +1 -1
  48. package/dist/cjs/db/open.d.cts +1 -1
  49. package/dist/cjs/db/open.d.ts +1 -1
  50. package/dist/cjs/db/open.js +6 -1
  51. package/dist/cjs/db/open.js.map +1 -1
  52. package/dist/cjs/db/reconcile.d.cts +1 -0
  53. package/dist/cjs/db/reconcile.d.ts +1 -0
  54. package/dist/cjs/db/reconcile.js +15 -0
  55. package/dist/cjs/db/reconcile.js.map +1 -1
  56. package/dist/cjs/embed/cohere.d.cts +2 -0
  57. package/dist/cjs/embed/cohere.d.ts +2 -0
  58. package/dist/cjs/embed/cohere.js +238 -0
  59. package/dist/cjs/embed/cohere.js.map +1 -0
  60. package/dist/cjs/embed/http.d.cts +2 -0
  61. package/dist/cjs/embed/http.d.ts +2 -0
  62. package/dist/cjs/embed/http.js +258 -0
  63. package/dist/cjs/embed/http.js.map +1 -0
  64. package/dist/cjs/embed/identity.d.cts +13 -0
  65. package/dist/cjs/embed/identity.d.ts +13 -0
  66. package/dist/cjs/embed/identity.js +194 -0
  67. package/dist/cjs/embed/identity.js.map +1 -0
  68. package/dist/cjs/embed/langfit.d.cts +6 -0
  69. package/dist/cjs/embed/langfit.d.ts +6 -0
  70. package/dist/cjs/embed/langfit.js +326 -0
  71. package/dist/cjs/embed/langfit.js.map +1 -0
  72. package/dist/cjs/embed/languages.d.cts +3 -0
  73. package/dist/cjs/embed/languages.d.ts +3 -0
  74. package/dist/cjs/embed/languages.js +98 -0
  75. package/dist/cjs/embed/languages.js.map +1 -0
  76. package/dist/cjs/embed/openai.d.cts +2 -0
  77. package/dist/cjs/embed/openai.d.ts +2 -0
  78. package/dist/cjs/embed/openai.js +268 -0
  79. package/dist/cjs/embed/openai.js.map +1 -0
  80. package/dist/cjs/embed/query.d.cts +21 -0
  81. package/dist/cjs/embed/query.d.ts +21 -0
  82. package/dist/cjs/embed/query.js +610 -0
  83. package/dist/cjs/embed/query.js.map +1 -0
  84. package/dist/cjs/embed/registry.d.cts +3 -0
  85. package/dist/cjs/embed/registry.d.ts +3 -0
  86. package/dist/cjs/embed/registry.js +114 -0
  87. package/dist/cjs/embed/registry.js.map +1 -0
  88. package/dist/cjs/embed/static.d.cts +2 -0
  89. package/dist/cjs/embed/static.d.ts +2 -0
  90. package/dist/cjs/embed/static.js +367 -0
  91. package/dist/cjs/embed/static.js.map +1 -0
  92. package/dist/cjs/embed/store.d.cts +8 -0
  93. package/dist/cjs/embed/store.d.ts +8 -0
  94. package/dist/cjs/embed/store.js +498 -0
  95. package/dist/cjs/embed/store.js.map +1 -0
  96. package/dist/cjs/embed/types.d.cts +8 -0
  97. package/dist/cjs/embed/types.d.ts +8 -0
  98. package/dist/cjs/embed/types.js +7 -0
  99. package/dist/cjs/embed/types.js.map +1 -0
  100. package/dist/cjs/errors.d.cts +1 -1
  101. package/dist/cjs/errors.d.ts +1 -1
  102. package/dist/cjs/errors.js.map +1 -1
  103. package/dist/cjs/features/embed.d.cts +4 -27
  104. package/dist/cjs/features/embed.d.ts +4 -27
  105. package/dist/cjs/features/embed.js +3 -969
  106. package/dist/cjs/features/embed.js.map +1 -1
  107. package/dist/cjs/index.d.cts +1 -1
  108. package/dist/cjs/index.d.ts +1 -1
  109. package/dist/cjs/index.js.map +1 -1
  110. package/dist/cjs/output.d.cts +2 -2
  111. package/dist/cjs/output.d.ts +2 -2
  112. package/dist/cjs/output.js +9 -2
  113. package/dist/cjs/output.js.map +1 -1
  114. package/dist/cjs/scan.js +8 -5
  115. package/dist/cjs/scan.js.map +1 -1
  116. package/dist/cjs/segment.js +67 -14
  117. package/dist/cjs/segment.js.map +1 -1
  118. package/dist/esm/cli/download.js +9 -8
  119. package/dist/esm/cli/download.js.map +1 -1
  120. package/dist/esm/cli/index.d.ts +1 -1
  121. package/dist/esm/cli/index.js +1 -1
  122. package/dist/esm/cli/index.js.map +1 -1
  123. package/dist/esm/cli/init.js +32 -6
  124. package/dist/esm/cli/init.js.map +1 -1
  125. package/dist/esm/cli/status.js +36 -8
  126. package/dist/esm/cli/status.js.map +1 -1
  127. package/dist/esm/commands/related.js +14 -10
  128. package/dist/esm/commands/related.js.map +1 -1
  129. package/dist/esm/commands/search.js +27 -78
  130. package/dist/esm/commands/search.js.map +1 -1
  131. package/dist/esm/commands/signals.d.ts +18 -0
  132. package/dist/esm/commands/signals.js +78 -0
  133. package/dist/esm/commands/signals.js.map +1 -0
  134. package/dist/esm/commands/status.d.ts +2 -2
  135. package/dist/esm/commands/status.js +2 -2
  136. package/dist/esm/commands/status.js.map +1 -1
  137. package/dist/esm/config/access.d.ts +5 -2
  138. package/dist/esm/config/access.js +31 -12
  139. package/dist/esm/config/access.js.map +1 -1
  140. package/dist/esm/config/index.d.ts +4 -1
  141. package/dist/esm/config/index.js +2 -1
  142. package/dist/esm/config/index.js.map +1 -1
  143. package/dist/esm/config/load.d.ts +6 -1
  144. package/dist/esm/config/load.js +67 -9
  145. package/dist/esm/config/load.js.map +1 -1
  146. package/dist/esm/config/resolve.js +2 -2
  147. package/dist/esm/config/resolve.js.map +1 -1
  148. package/dist/esm/config/signals.d.ts +4 -0
  149. package/dist/esm/config/signals.js +14 -0
  150. package/dist/esm/config/signals.js.map +1 -0
  151. package/dist/esm/config/types.d.ts +6 -4
  152. package/dist/esm/config/types.js +1 -1
  153. package/dist/esm/config/types.js.map +1 -1
  154. package/dist/esm/config/validate.js +58 -11
  155. package/dist/esm/config/validate.js.map +1 -1
  156. package/dist/esm/db/open.d.ts +1 -1
  157. package/dist/esm/db/open.js +7 -2
  158. package/dist/esm/db/open.js.map +1 -1
  159. package/dist/esm/db/reconcile.d.ts +1 -0
  160. package/dist/esm/db/reconcile.js +10 -0
  161. package/dist/esm/db/reconcile.js.map +1 -1
  162. package/dist/esm/embed/cohere.d.ts +2 -0
  163. package/dist/esm/embed/cohere.js +46 -0
  164. package/dist/esm/embed/cohere.js.map +1 -0
  165. package/dist/esm/embed/http.d.ts +2 -0
  166. package/dist/esm/embed/http.js +33 -0
  167. package/dist/esm/embed/http.js.map +1 -0
  168. package/dist/esm/embed/identity.d.ts +13 -0
  169. package/dist/esm/embed/identity.js +92 -0
  170. package/dist/esm/embed/identity.js.map +1 -0
  171. package/dist/esm/embed/langfit.d.ts +6 -0
  172. package/dist/esm/embed/langfit.js +44 -0
  173. package/dist/esm/embed/langfit.js.map +1 -0
  174. package/dist/esm/embed/languages.d.ts +3 -0
  175. package/dist/esm/embed/languages.js +80 -0
  176. package/dist/esm/embed/languages.js.map +1 -0
  177. package/dist/esm/embed/openai.d.ts +2 -0
  178. package/dist/esm/embed/openai.js +49 -0
  179. package/dist/esm/embed/openai.js.map +1 -0
  180. package/dist/esm/embed/query.d.ts +21 -0
  181. package/dist/esm/embed/query.js +181 -0
  182. package/dist/esm/embed/query.js.map +1 -0
  183. package/dist/esm/embed/registry.d.ts +3 -0
  184. package/dist/esm/embed/registry.js +45 -0
  185. package/dist/esm/embed/registry.js.map +1 -0
  186. package/dist/esm/embed/static.d.ts +2 -0
  187. package/dist/esm/embed/static.js +72 -0
  188. package/dist/esm/embed/static.js.map +1 -0
  189. package/dist/esm/embed/store.d.ts +8 -0
  190. package/dist/esm/embed/store.js +123 -0
  191. package/dist/esm/embed/store.js.map +1 -0
  192. package/dist/esm/embed/types.d.ts +8 -0
  193. package/dist/esm/embed/types.js +3 -0
  194. package/dist/esm/embed/types.js.map +1 -0
  195. package/dist/esm/errors.d.ts +1 -1
  196. package/dist/esm/errors.js.map +1 -1
  197. package/dist/esm/features/embed.d.ts +4 -27
  198. package/dist/esm/features/embed.js +0 -346
  199. package/dist/esm/features/embed.js.map +1 -1
  200. package/dist/esm/index.d.ts +1 -1
  201. package/dist/esm/index.js.map +1 -1
  202. package/dist/esm/output.d.ts +2 -2
  203. package/dist/esm/output.js +6 -2
  204. package/dist/esm/output.js.map +1 -1
  205. package/dist/esm/scan.js +7 -4
  206. package/dist/esm/scan.js.map +1 -1
  207. package/dist/esm/segment.js +49 -19
  208. package/dist/esm/segment.js.map +1 -1
  209. package/package.json +9 -1
  210. package/schema.json +14 -7
  211. package/skills/sense/SKILL.md +21 -5
  212. package/skills/sense-setup/EXAMPLES.md +6 -6
  213. package/skills/sense-setup/SKILL.md +6 -4
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get linksCandidates () {
13
+ return linksCandidates;
14
+ },
15
+ get vectorsCandidates () {
16
+ return vectorsCandidates;
17
+ },
18
+ get wordsCandidates () {
19
+ return wordsCandidates;
20
+ }
21
+ });
22
+ var _queryts = require("../embed/query.js");
23
+ var _indexts = require("../features/index.js");
24
+ var _graphts = require("../graph.js");
25
+ function _array_like_to_array(arr, len) {
26
+ if (len == null || len > arr.length) len = arr.length;
27
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
28
+ return arr2;
29
+ }
30
+ function _array_with_holes(arr) {
31
+ if (Array.isArray(arr)) return arr;
32
+ }
33
+ function _array_without_holes(arr) {
34
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
35
+ }
36
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
37
+ try {
38
+ var info = gen[key](arg);
39
+ var value = info.value;
40
+ } catch (error) {
41
+ reject(error);
42
+ return;
43
+ }
44
+ if (info.done) resolve(value);
45
+ else Promise.resolve(value).then(_next, _throw);
46
+ }
47
+ function _async_to_generator(fn) {
48
+ return function() {
49
+ var self = this, args = arguments;
50
+ return new Promise(function(resolve, reject) {
51
+ var gen = fn.apply(self, args);
52
+ function _next(value) {
53
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
54
+ }
55
+ function _throw(err) {
56
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
57
+ }
58
+ _next(undefined);
59
+ });
60
+ };
61
+ }
62
+ function _iterable_to_array(iter) {
63
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
64
+ return Array.from(iter);
65
+ }
66
+ }
67
+ function _iterable_to_array_limit(arr, i) {
68
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
69
+ if (_i == null) return;
70
+ var _arr = [];
71
+ var _n = true;
72
+ var _d = false;
73
+ var _s, _e;
74
+ try {
75
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
76
+ _arr.push(_s.value);
77
+ if (i && _arr.length === i) break;
78
+ }
79
+ } catch (err) {
80
+ _d = true;
81
+ _e = err;
82
+ } finally{
83
+ try {
84
+ if (!_n && _i["return"] != null) _i["return"]();
85
+ } finally{
86
+ if (_d) throw _e;
87
+ }
88
+ }
89
+ return _arr;
90
+ }
91
+ function _non_iterable_rest() {
92
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
93
+ }
94
+ function _non_iterable_spread() {
95
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
96
+ }
97
+ function _sliced_to_array(arr, i) {
98
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
99
+ }
100
+ function _to_consumable_array(arr) {
101
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
102
+ }
103
+ function _ts_generator(thisArg, body) {
104
+ var f, y, t, _ = {
105
+ label: 0,
106
+ sent: function() {
107
+ if (t[0] & 1) throw t[1];
108
+ return t[1];
109
+ },
110
+ trys: [],
111
+ ops: []
112
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
113
+ return d(g, "next", {
114
+ value: verb(0)
115
+ }), d(g, "throw", {
116
+ value: verb(1)
117
+ }), d(g, "return", {
118
+ value: verb(2)
119
+ }), typeof Symbol === "function" && d(g, Symbol.iterator, {
120
+ value: function() {
121
+ return this;
122
+ }
123
+ }), g;
124
+ function verb(n) {
125
+ return function(v) {
126
+ return step([
127
+ n,
128
+ v
129
+ ]);
130
+ };
131
+ }
132
+ function step(op) {
133
+ if (f) throw new TypeError("Generator is already executing.");
134
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
135
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
136
+ if (y = 0, t) op = [
137
+ op[0] & 2,
138
+ t.value
139
+ ];
140
+ switch(op[0]){
141
+ case 0:
142
+ case 1:
143
+ t = op;
144
+ break;
145
+ case 4:
146
+ _.label++;
147
+ return {
148
+ value: op[1],
149
+ done: false
150
+ };
151
+ case 5:
152
+ _.label++;
153
+ y = op[1];
154
+ op = [
155
+ 0
156
+ ];
157
+ continue;
158
+ case 7:
159
+ op = _.ops.pop();
160
+ _.trys.pop();
161
+ continue;
162
+ default:
163
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
164
+ _ = 0;
165
+ continue;
166
+ }
167
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
168
+ _.label = op[1];
169
+ break;
170
+ }
171
+ if (op[0] === 6 && _.label < t[1]) {
172
+ _.label = t[1];
173
+ t = op;
174
+ break;
175
+ }
176
+ if (t && _.label < t[2]) {
177
+ _.label = t[2];
178
+ _.ops.push(op);
179
+ break;
180
+ }
181
+ if (t[2]) _.ops.pop();
182
+ _.trys.pop();
183
+ continue;
184
+ }
185
+ op = body.call(thisArg, _);
186
+ } catch (e) {
187
+ op = [
188
+ 6,
189
+ e
190
+ ];
191
+ y = 0;
192
+ } finally{
193
+ f = t = 0;
194
+ }
195
+ if (op[0] & 5) throw op[1];
196
+ return {
197
+ value: op[0] ? op[1] : void 0,
198
+ done: true
199
+ };
200
+ }
201
+ }
202
+ function _unsupported_iterable_to_array(o, minLen) {
203
+ if (!o) return;
204
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
205
+ var n = Object.prototype.toString.call(o).slice(8, -1);
206
+ if (n === "Object" && o.constructor) n = o.constructor.name;
207
+ if (n === "Map" || n === "Set") return Array.from(n);
208
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
209
+ }
210
+ // RRF composes whatever the preset declares; the constant lives here since it belongs to
211
+ // the fusion these three functions share, not to search() itself.
212
+ var RRF_K = 60;
213
+ function wordsCandidates(db, candidates, query, whereJoin, whereCond, scopeCond, fetch, weight) {
214
+ var WEIGHTED_BM25 = 'bm25(content, 10.0, 5.0, 1.0, 0, 10.0, 5.0, 1.0)';
215
+ var SNIPPET_BOUND = 16384;
216
+ var matchSql = "SELECT content.path AS path, CASE WHEN length(content.text) <= ".concat(SNIPPET_BOUND, " THEN snippet(content, 2, '\xab', '\xbb', '…', 10) ELSE NULL END AS hit FROM content ").concat(whereJoin, " WHERE content MATCH ? ").concat(whereCond, " ").concat(scopeCond, " ORDER BY ").concat(WEIGHTED_BM25, " LIMIT ").concat(fetch);
217
+ var matchRows = db.prepare(matchSql).all(query);
218
+ matchRows.forEach(function(r, i) {
219
+ candidates.set(r.path, {
220
+ score: weight / (RRF_K + i),
221
+ via: 'match'
222
+ });
223
+ });
224
+ return matchRows;
225
+ }
226
+ function linksCandidates(db, candidates, matchRows, allPaths, allowedPaths, fetch, weight) {
227
+ if (matchRows.length === 0) return;
228
+ var edges = (0, _indexts.linkEdges)(db);
229
+ if (edges.length === 0) return;
230
+ // Gates the label only, not the score: restart mass ranks every seed without an incident
231
+ // edge, but dropping it from the score reweights fusion (FEVER hit@10 0.997 -> 0.907).
232
+ var linked = new Set(edges.flat());
233
+ var seeds = new Map(matchRows.map(function(r, i) {
234
+ return [
235
+ r.path,
236
+ 1 / (i + 1)
237
+ ];
238
+ }));
239
+ var ranked = _to_consumable_array((0, _graphts.personalizedRank)(allPaths, edges, seeds)).filter(function(param) {
240
+ var _param = _sliced_to_array(param, 2), path = _param[0], score = _param[1];
241
+ return score > 1e-9 && allowedPaths.has(path);
242
+ }).sort(function(a, b) {
243
+ return b[1] - a[1];
244
+ }).slice(0, fetch);
245
+ ranked.forEach(function(param, i) {
246
+ var _param = _sliced_to_array(param, 1), path = _param[0];
247
+ var existing = candidates.get(path);
248
+ if (existing) {
249
+ existing.score += weight / (RRF_K + i);
250
+ if (linked.has(path)) existing.via = 'match+link';
251
+ } else {
252
+ candidates.set(path, {
253
+ score: weight / (RRF_K + i),
254
+ via: 'link'
255
+ });
256
+ }
257
+ });
258
+ }
259
+ function vectorsCandidates(db, cfg, candidates, terms, fetch, allowedPaths, weight) {
260
+ return _async_to_generator(function() {
261
+ var chunkLines, chunkSimilarity, vec;
262
+ return _ts_generator(this, function(_state) {
263
+ switch(_state.label){
264
+ case 0:
265
+ chunkLines = new Map();
266
+ chunkSimilarity = new Map();
267
+ return [
268
+ 4,
269
+ (0, _queryts.semanticCandidates)(db, cfg, terms, fetch, allowedPaths)
270
+ ];
271
+ case 1:
272
+ vec = _state.sent();
273
+ vec.forEach(function(param, i) {
274
+ var path = param.path, lines = param.lines, similarity = param.similarity;
275
+ chunkLines.set(path, lines);
276
+ chunkSimilarity.set(path, similarity);
277
+ var existing = candidates.get(path);
278
+ if (existing) {
279
+ existing.score += weight / (RRF_K + i);
280
+ existing.via = "".concat(existing.via, "+vector");
281
+ } else {
282
+ candidates.set(path, {
283
+ score: weight / (RRF_K + i),
284
+ via: 'vector'
285
+ });
286
+ }
287
+ });
288
+ return [
289
+ 2,
290
+ {
291
+ chunkLines: chunkLines,
292
+ chunkSimilarity: chunkSimilarity
293
+ }
294
+ ];
295
+ }
296
+ });
297
+ })();
298
+ }
299
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/commands/signals.ts"],"sourcesContent":["import type { DatabaseSync } from 'node:sqlite';\nimport type { ResolvedConfig } from '../config/index.ts';\nimport { semanticCandidates } from '../embed/query.ts';\nimport { linkEdges } from '../features/index.ts';\nimport { personalizedRank } from '../graph.ts';\n\n// RRF composes whatever the preset declares; the constant lives here since it belongs to\n// the fusion these three functions share, not to search() itself.\nconst RRF_K = 60;\n\nexport type Candidates = Map<string, { score: number; via: string }>;\n\n// BM25 match rows, folded into `candidates` by reciprocal rank scaled by the preset's declared\n// weight for this signal (default 1, bit-identical to the unweighted score). Every other signal\n// is seeded from its output, so search() runs this one first when \"words\" is declared.\nexport function wordsCandidates(db: DatabaseSync, candidates: Candidates, query: string, whereJoin: string, whereCond: string, scopeCond: string, fetch: number, weight: number): Array<{ path: string; hit: string | null }> {\n const WEIGHTED_BM25 = 'bm25(content, 10.0, 5.0, 1.0, 0, 10.0, 5.0, 1.0)';\n const SNIPPET_BOUND = 16_384;\n const matchSql = `SELECT content.path AS path, CASE WHEN length(content.text) <= ${SNIPPET_BOUND} THEN snippet(content, 2, '«', '»', '…', 10) ELSE NULL END AS hit FROM content ${whereJoin} WHERE content MATCH ? ${whereCond} ${scopeCond} ORDER BY ${WEIGHTED_BM25} LIMIT ${fetch}`;\n const matchRows = db.prepare(matchSql).all(query) as Array<{ path: string; hit: string | null }>;\n matchRows.forEach((r, i) => {\n candidates.set(r.path, { score: weight / (RRF_K + i), via: 'match' });\n });\n return matchRows;\n}\n\n// Personalized-PageRank expansion from the word-match seeds, folded into `candidates` at this\n// signal's weight. A no-op when there is nothing to seed from (matchRows empty), same as before\n// this was a signal.\nexport function linksCandidates(db: DatabaseSync, candidates: Candidates, matchRows: Array<{ path: string; hit: string | null }>, allPaths: string[], allowedPaths: Set<string>, fetch: number, weight: number): void {\n if (matchRows.length === 0) return;\n const edges = linkEdges(db);\n if (edges.length === 0) return;\n // Gates the label only, not the score: restart mass ranks every seed without an incident\n // edge, but dropping it from the score reweights fusion (FEVER hit@10 0.997 -> 0.907).\n const linked = new Set(edges.flat());\n const seeds = new Map(matchRows.map((r, i) => [r.path, 1 / (i + 1)]));\n const ranked = [...personalizedRank(allPaths, edges, seeds)]\n .filter(([path, score]) => score > 1e-9 && allowedPaths.has(path))\n .sort((a, b) => b[1] - a[1])\n .slice(0, fetch);\n ranked.forEach(([path], i) => {\n const existing = candidates.get(path);\n if (existing) {\n existing.score += weight / (RRF_K + i);\n if (linked.has(path)) existing.via = 'match+link';\n } else {\n candidates.set(path, { score: weight / (RRF_K + i), via: 'link' });\n }\n });\n}\n\n// Vector expansion at the swept flat-region constants (pool = fetch), folded into `candidates`\n// at this signal's weight. Each row also carries its best chunk's line range and similarity,\n// for the caller.\nexport async function vectorsCandidates(db: DatabaseSync, cfg: ResolvedConfig, candidates: Candidates, terms: string, fetch: number, allowedPaths: Set<string>, weight: number): Promise<{ chunkLines: Map<string, string>; chunkSimilarity: Map<string, number> }> {\n const chunkLines = new Map<string, string>();\n const chunkSimilarity = new Map<string, number>();\n const vec = await semanticCandidates(db, cfg, terms, fetch, allowedPaths);\n vec.forEach(({ path, lines, similarity }, i) => {\n chunkLines.set(path, lines);\n chunkSimilarity.set(path, similarity);\n const existing = candidates.get(path);\n if (existing) {\n existing.score += weight / (RRF_K + i);\n existing.via = `${existing.via}+vector`;\n } else {\n candidates.set(path, { score: weight / (RRF_K + i), via: 'vector' });\n }\n });\n return { chunkLines, chunkSimilarity };\n}\n"],"names":["linksCandidates","vectorsCandidates","wordsCandidates","RRF_K","db","candidates","query","whereJoin","whereCond","scopeCond","fetch","weight","WEIGHTED_BM25","SNIPPET_BOUND","matchSql","matchRows","prepare","all","forEach","r","i","set","path","score","via","allPaths","allowedPaths","length","edges","linkEdges","linked","Set","flat","seeds","Map","map","ranked","personalizedRank","filter","has","sort","a","b","slice","existing","get","cfg","terms","chunkLines","chunkSimilarity","vec","semanticCandidates","lines","similarity"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import type { DatabaseSync } from 'node:sqlite';
2
- import type { ResolvedConfig } from '../config/index.js';
2
+ import type { ResolvedConfig, SignalWeights } from '../config/index.js';
3
3
  export interface PresetCoverage {
4
4
  name: string;
5
5
  files: number;
6
6
  embedded: number;
7
- semantic: boolean;
7
+ signals: SignalWeights;
8
8
  }
9
9
  export declare function presetCoverage(db: DatabaseSync, cfg: ResolvedConfig): PresetCoverage[];
@@ -1,9 +1,9 @@
1
1
  import type { DatabaseSync } from 'node:sqlite';
2
- import type { ResolvedConfig } from '../config/index.js';
2
+ import type { ResolvedConfig, SignalWeights } from '../config/index.js';
3
3
  export interface PresetCoverage {
4
4
  name: string;
5
5
  files: number;
6
6
  embedded: number;
7
- semantic: boolean;
7
+ signals: SignalWeights;
8
8
  }
9
9
  export declare function presetCoverage(db: DatabaseSync, cfg: ResolvedConfig): PresetCoverage[];
@@ -18,7 +18,7 @@ function presetCoverage(db, cfg) {
18
18
  name: name,
19
19
  files: files,
20
20
  embedded: embedded,
21
- semantic: (0, _indexts.presetSemanticEnabled)(cfg, name)
21
+ signals: (0, _indexts.presetSignals)(cfg, name)
22
22
  };
23
23
  });
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/commands/status.ts"],"sourcesContent":["import type { DatabaseSync } from 'node:sqlite';\nimport type { ResolvedConfig } from '../config/index.ts';\nimport { anyPresetEmbeds, presetNames, presetSemanticEnabled } from '../config/index.ts';\n\nexport interface PresetCoverage {\n name: string;\n files: number;\n embedded: number;\n // Reported so 0 embedded reads as \"this scope declined vectors\" rather than \"not yet built\".\n semantic: boolean;\n}\n\n// Indexing derives from presets, so the derivation stays visible. Read from preset_files, not\n// recomputed from globs, so it reflects the cache rather than the config.\nexport function presetCoverage(db: DatabaseSync, cfg: ResolvedConfig): PresetCoverage[] {\n const embedActive = anyPresetEmbeds(cfg);\n return presetNames(cfg).map((name) => {\n const files = (db.prepare('SELECT COUNT(*) AS n FROM preset_files WHERE preset = ?').get(name) as { n: number }).n;\n const embedded = embedActive ? (db.prepare('SELECT COUNT(*) AS n FROM preset_files pf WHERE pf.preset = ? AND EXISTS (SELECT 1 FROM embeddings e WHERE e.\"path\" = pf.\"path\" AND e.vector IS NOT NULL)').get(name) as { n: number }).n : 0;\n return { name, files, embedded, semantic: presetSemanticEnabled(cfg, name) };\n });\n}\n"],"names":["presetCoverage","db","cfg","embedActive","anyPresetEmbeds","presetNames","map","name","files","prepare","get","n","embedded","semantic","presetSemanticEnabled"],"mappings":";;;;+BAcgBA;;;eAAAA;;;uBAZoD;AAY7D,SAASA,eAAeC,EAAgB,EAAEC,GAAmB;IAClE,IAAMC,cAAcC,IAAAA,wBAAe,EAACF;IACpC,OAAOG,IAAAA,oBAAW,EAACH,KAAKI,GAAG,CAAC,SAACC;QAC3B,IAAMC,QAAQ,AAACP,GAAGQ,OAAO,CAAC,2DAA2DC,GAAG,CAACH,MAAwBI,CAAC;QAClH,IAAMC,WAAWT,cAAc,AAACF,GAAGQ,OAAO,CAAC,6JAA6JC,GAAG,CAACH,MAAwBI,CAAC,GAAG;QACxO,OAAO;YAAEJ,MAAAA;YAAMC,OAAAA;YAAOI,UAAAA;YAAUC,UAAUC,IAAAA,8BAAqB,EAACZ,KAAKK;QAAM;IAC7E;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/commands/status.ts"],"sourcesContent":["import type { DatabaseSync } from 'node:sqlite';\nimport type { ResolvedConfig, SignalWeights } from '../config/index.ts';\nimport { anyPresetEmbeds, presetNames, presetSignals } from '../config/index.ts';\n\nexport interface PresetCoverage {\n name: string;\n files: number;\n embedded: number;\n // Reported so 0 embedded reads as \"this scope declined vectors\" rather than \"not yet built\".\n signals: SignalWeights;\n}\n\n// Indexing derives from presets, so the derivation stays visible. Read from preset_files, not\n// recomputed from globs, so it reflects the cache rather than the config.\nexport function presetCoverage(db: DatabaseSync, cfg: ResolvedConfig): PresetCoverage[] {\n const embedActive = anyPresetEmbeds(cfg);\n return presetNames(cfg).map((name) => {\n const files = (db.prepare('SELECT COUNT(*) AS n FROM preset_files WHERE preset = ?').get(name) as { n: number }).n;\n const embedded = embedActive ? (db.prepare('SELECT COUNT(*) AS n FROM preset_files pf WHERE pf.preset = ? AND EXISTS (SELECT 1 FROM embeddings e WHERE e.\"path\" = pf.\"path\" AND e.vector IS NOT NULL)').get(name) as { n: number }).n : 0;\n return { name, files, embedded, signals: presetSignals(cfg, name) };\n });\n}\n"],"names":["presetCoverage","db","cfg","embedActive","anyPresetEmbeds","presetNames","map","name","files","prepare","get","n","embedded","signals","presetSignals"],"mappings":";;;;+BAcgBA;;;eAAAA;;;uBAZ4C;AAYrD,SAASA,eAAeC,EAAgB,EAAEC,GAAmB;IAClE,IAAMC,cAAcC,IAAAA,wBAAe,EAACF;IACpC,OAAOG,IAAAA,oBAAW,EAACH,KAAKI,GAAG,CAAC,SAACC;QAC3B,IAAMC,QAAQ,AAACP,GAAGQ,OAAO,CAAC,2DAA2DC,GAAG,CAACH,MAAwBI,CAAC;QAClH,IAAMC,WAAWT,cAAc,AAACF,GAAGQ,OAAO,CAAC,6JAA6JC,GAAG,CAACH,MAAwBI,CAAC,GAAG;QACxO,OAAO;YAAEJ,MAAAA;YAAMC,OAAAA;YAAOI,UAAAA;YAAUC,SAASC,IAAAA,sBAAa,EAACZ,KAAKK;QAAM;IACpE;AACF"}
@@ -1,7 +1,9 @@
1
+ import type { SignalName, SignalWeights } from './signals.js';
1
2
  import { type Config, type FeatureName } from './types.js';
2
3
  export declare function presetNames(cfg: Config): string[];
3
4
  export declare function embedEnabled(cfg: Config): boolean;
4
- export declare function presetSemanticEnabled(cfg: Config, name: string): boolean;
5
+ export declare function presetSignals(cfg: Config, name: string): SignalWeights;
6
+ export declare function presetHasSignal(cfg: Config, name: string, signal: SignalName): boolean;
5
7
  export declare function anyPresetEmbeds(cfg: Config): boolean;
6
8
  export declare function featureEnabled(cfg: Config, name: FeatureName): boolean;
7
9
  export declare function enabledFeatures(cfg: Config): FeatureName[];
@@ -11,9 +13,10 @@ export declare function featureStates(cfg: Config): {
11
13
  };
12
14
  export declare function embedConfig(cfg: Config): {
13
15
  model: string;
14
- type: 'static' | 'api';
16
+ provider: 'static' | 'openai' | 'cohere';
15
17
  url?: string;
16
18
  key?: string;
19
+ languages?: string[];
17
20
  } | null;
18
21
  export declare function contentTokenize(cfg: Config): string | undefined;
19
22
  export declare function featureSignature(cfg: Config): string;
@@ -1,7 +1,9 @@
1
+ import type { SignalName, SignalWeights } from './signals.js';
1
2
  import { type Config, type FeatureName } from './types.js';
2
3
  export declare function presetNames(cfg: Config): string[];
3
4
  export declare function embedEnabled(cfg: Config): boolean;
4
- export declare function presetSemanticEnabled(cfg: Config, name: string): boolean;
5
+ export declare function presetSignals(cfg: Config, name: string): SignalWeights;
6
+ export declare function presetHasSignal(cfg: Config, name: string, signal: SignalName): boolean;
5
7
  export declare function anyPresetEmbeds(cfg: Config): boolean;
6
8
  export declare function featureEnabled(cfg: Config, name: FeatureName): boolean;
7
9
  export declare function enabledFeatures(cfg: Config): FeatureName[];
@@ -11,9 +13,10 @@ export declare function featureStates(cfg: Config): {
11
13
  };
12
14
  export declare function embedConfig(cfg: Config): {
13
15
  model: string;
14
- type: 'static' | 'api';
16
+ provider: 'static' | 'openai' | 'cohere';
15
17
  url?: string;
16
18
  key?: string;
19
+ languages?: string[];
17
20
  } | null;
18
21
  export declare function contentTokenize(cfg: Config): string | undefined;
19
22
  export declare function featureSignature(cfg: Config): string;
@@ -33,13 +33,17 @@ _export(exports, {
33
33
  get featureStates () {
34
34
  return featureStates;
35
35
  },
36
+ get presetHasSignal () {
37
+ return presetHasSignal;
38
+ },
36
39
  get presetNames () {
37
40
  return presetNames;
38
41
  },
39
- get presetSemanticEnabled () {
40
- return presetSemanticEnabled;
42
+ get presetSignals () {
43
+ return presetSignals;
41
44
  }
42
45
  });
46
+ var _identityts = require("../embed/identity.js");
43
47
  var _typests = require("./types.js");
44
48
  function _array_like_to_array(arr, len) {
45
49
  if (len == null || len > arr.length) len = arr.length;
@@ -75,13 +79,23 @@ function embedEnabled(cfg) {
75
79
  var _cfg_embed;
76
80
  return typeof ((_cfg_embed = cfg.embed) === null || _cfg_embed === void 0 ? void 0 : _cfg_embed.model) === 'string' && cfg.embed.model.length > 0;
77
81
  }
78
- function presetSemanticEnabled(cfg, name) {
79
- var _cfg_presets_name;
80
- return ((_cfg_presets_name = cfg.presets[name]) === null || _cfg_presets_name === void 0 ? void 0 : _cfg_presets_name.semantic) !== false;
82
+ function presetSignals(cfg, name) {
83
+ var _cfg_presets_name, _cfg_features;
84
+ var declared = (_cfg_presets_name = cfg.presets[name]) === null || _cfg_presets_name === void 0 ? void 0 : _cfg_presets_name.signals;
85
+ if (declared) return declared;
86
+ var signals = {
87
+ words: 1
88
+ };
89
+ if (((_cfg_features = cfg.features) === null || _cfg_features === void 0 ? void 0 : _cfg_features.links) !== false) signals.links = 1;
90
+ if (embedEnabled(cfg)) signals.vectors = 1;
91
+ return signals;
92
+ }
93
+ function presetHasSignal(cfg, name, signal) {
94
+ return presetSignals(cfg, name)[signal] !== undefined;
81
95
  }
82
96
  function anyPresetEmbeds(cfg) {
83
- return embedEnabled(cfg) && presetNames(cfg).some(function(name) {
84
- return presetSemanticEnabled(cfg, name);
97
+ return presetNames(cfg).some(function(name) {
98
+ return presetHasSignal(cfg, name, 'vectors');
85
99
  });
86
100
  }
87
101
  function featureEnabled(cfg, name) {
@@ -110,14 +124,15 @@ function featureStates(cfg) {
110
124
  };
111
125
  }
112
126
  function embedConfig(cfg) {
113
- var _e_type;
127
+ var _e_provider;
114
128
  if (!embedEnabled(cfg)) return null;
115
129
  var e = cfg.embed;
116
130
  return {
117
131
  model: e.model,
118
- type: (_e_type = e.type) !== null && _e_type !== void 0 ? _e_type : 'static',
132
+ provider: (_e_provider = e.provider) !== null && _e_provider !== void 0 ? _e_provider : 'static',
119
133
  url: e.url,
120
- key: e.key
134
+ key: e.key,
135
+ languages: e.languages
121
136
  };
122
137
  }
123
138
  function contentTokenize(cfg) {
@@ -130,14 +145,17 @@ function featureSignature(cfg) {
130
145
  return name !== 'embed';
131
146
  }).join(',');
132
147
  var e = embedConfig(cfg);
133
- var embedPart = e ? "embed:".concat(e.type, ":").concat(e.model) : 'embed:off';
148
+ // Weight identity from identity.ts, no network: a static model's resolved sha or local
149
+ // size+mtime, appended once known so changed weights re-embed.
150
+ var identity = e && e.provider === 'static' ? (0, _identityts.modelIdentity)(e.model) : undefined;
151
+ var embedPart = e ? "embed:".concat(e.provider, ":").concat(e.model).concat(identity !== undefined ? "@".concat(identity) : '') : 'embed:off';
134
152
  // One keyed segment per preset so a rebuild notice can name exactly which preset moved.
135
153
  var presetsPart = _to_consumable_array(presetNames(cfg)).sort().map(function(name) {
136
154
  var _p_exclude;
137
155
  var p = cfg.presets[name];
138
156
  var include = _to_consumable_array(p.include).sort().join('+');
139
157
  var exclude = _to_consumable_array((_p_exclude = p.exclude) !== null && _p_exclude !== void 0 ? _p_exclude : []).sort().join('+');
140
- return "preset:".concat(name, ":").concat(include, ":").concat(exclude, ":").concat(p.semantic === false ? 'off' : 'on');
158
+ return "preset:".concat(name, ":").concat(include, ":").concat(exclude, ":").concat(presetHasSignal(cfg, name, 'vectors') ? 'on' : 'off');
141
159
  }).join('|');
142
160
  var tokenize = contentTokenize(cfg);
143
161
  var parts = [
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/config/access.ts"],"sourcesContent":["import { type Config, type EmbedConfig, FEATURE_NAMES, type FeatureName } from './types.ts';\n\nexport function presetNames(cfg: Config): string[] {\n return Object.keys(cfg.presets);\n}\n\n// Whether the tree names a model at all.\nexport function embedEnabled(cfg: Config): boolean {\n return typeof cfg.embed?.model === 'string' && cfg.embed.model.length > 0;\n}\n\n// A preset's own vector participation: absent or true means on, false means off.\nexport function presetSemanticEnabled(cfg: Config, name: string): boolean {\n return cfg.presets[name]?.semantic !== false;\n}\n\n// Whether embedding needs to run: a model is named AND some preset wants vectors.\nexport function anyPresetEmbeds(cfg: Config): boolean {\n return embedEnabled(cfg) && presetNames(cfg).some((name) => presetSemanticEnabled(cfg, name));\n}\n\n// Opt-out features (default on): absent block or key means enabled. `rank` additionally\n// requires `links`. `embed` is derived, not a features-block member: on iff `embed` names a model.\nexport function featureEnabled(cfg: Config, name: FeatureName): boolean {\n if (name === 'embed') return anyPresetEmbeds(cfg);\n const enabled = cfg.features?.[name] !== false;\n if (name === 'rank') return enabled && featureEnabled(cfg, 'links');\n return enabled;\n}\n\nexport function enabledFeatures(cfg: Config): FeatureName[] {\n return FEATURE_NAMES.filter((name) => featureEnabled(cfg, name));\n}\n\n// Feature states, so \"off\" and \"empty\" stay distinguishable in output. `embed` is excluded:\n// it is not a features-block toggle, and `status` reports it on its own line.\nexport function featureStates(cfg: Config): { on: FeatureName[]; off: FeatureName[] } {\n const reported = FEATURE_NAMES.filter((name) => name !== 'embed');\n return {\n on: reported.filter((name) => featureEnabled(cfg, name)),\n off: reported.filter((name) => !featureEnabled(cfg, name)),\n };\n}\n\n// Resolved embed provider settings, or null when the config names no model. There is no\n// fallback to DEFAULT_EMBED_MODEL: that constant is a template `init` and the v4 migration\n// write into the file, never an implicit runtime default.\nexport function embedConfig(cfg: Config): { model: string; type: 'static' | 'api'; url?: string; key?: string } | null {\n if (!embedEnabled(cfg)) return null;\n const e = cfg.embed as EmbedConfig;\n return { model: e.model as string, type: e.type ?? 'static', url: e.url, key: e.key };\n}\n\n// The configured FTS5 tokenizer, or undefined for the built-in default. Undefined rather than\n// the default string so featureSignature can leave the segment off entirely for trees that\n// never set it, which is what keeps existing indexes from rebuilding on upgrade.\nexport function contentTokenize(cfg: Config): string | undefined {\n const tokenize = cfg.content?.tokenize;\n return tokenize === undefined || tokenize.trim() === '' ? undefined : tokenize.trim();\n}\n\n// Cache key over everything indexing derives from, so any change to those inputs rebuilds.\nexport function featureSignature(cfg: Config): string {\n const globalPart = enabledFeatures(cfg)\n .filter((name) => name !== 'embed')\n .join(',');\n const e = embedConfig(cfg);\n const embedPart = e ? `embed:${e.type}:${e.model}` : 'embed:off';\n // One keyed segment per preset so a rebuild notice can name exactly which preset moved.\n const presetsPart = [...presetNames(cfg)]\n .sort()\n .map((name) => {\n const p = cfg.presets[name];\n const include = [...p.include].sort().join('+');\n const exclude = [...(p.exclude ?? [])].sort().join('+');\n return `preset:${name}:${include}:${exclude}:${p.semantic === false ? 'off' : 'on'}`;\n })\n .join('|');\n const tokenize = contentTokenize(cfg);\n const parts = [`features:${globalPart}`, embedPart];\n if (tokenize !== undefined) parts.push(`tokenize:${tokenize}`);\n parts.push(presetsPart);\n return parts.join('|');\n}\n"],"names":["anyPresetEmbeds","contentTokenize","embedConfig","embedEnabled","enabledFeatures","featureEnabled","featureSignature","featureStates","presetNames","presetSemanticEnabled","cfg","Object","keys","presets","embed","model","length","name","semantic","some","enabled","features","FEATURE_NAMES","filter","reported","on","off","e","type","url","key","tokenize","content","undefined","trim","globalPart","join","embedPart","presetsPart","sort","map","p","include","exclude","parts","push"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/config/access.ts"],"sourcesContent":["import { modelIdentity } from '../embed/identity.ts';\nimport type { SignalName, SignalWeights } from './signals.ts';\nimport { type Config, type EmbedConfig, FEATURE_NAMES, type FeatureName } from './types.ts';\n\nexport function presetNames(cfg: Config): string[] {\n return Object.keys(cfg.presets);\n}\n\n// Whether the tree names a model at all.\nexport function embedEnabled(cfg: Config): boolean {\n return typeof cfg.embed?.model === 'string' && cfg.embed.model.length > 0;\n}\n\n// A preset's effective signal weights: declared exhaustively when `signals` is present;\n// otherwise every signal whose prerequisite holds, each at weight 1 -- words always, links when\n// the feature is on, vectors when the tree names a model. Single source search() and status/map\n// read.\nexport function presetSignals(cfg: Config, name: string): SignalWeights {\n const declared = cfg.presets[name]?.signals;\n if (declared) return declared;\n const signals: SignalWeights = { words: 1 };\n if (cfg.features?.links !== false) signals.links = 1;\n if (embedEnabled(cfg)) signals.vectors = 1;\n return signals;\n}\n\nexport function presetHasSignal(cfg: Config, name: string, signal: SignalName): boolean {\n return presetSignals(cfg, name)[signal] !== undefined;\n}\n\n// Whether embedding needs to run: a model is named AND some preset's effective signals include vectors.\nexport function anyPresetEmbeds(cfg: Config): boolean {\n return presetNames(cfg).some((name) => presetHasSignal(cfg, name, 'vectors'));\n}\n\n// Opt-out features (default on): absent block or key means enabled. `rank` additionally\n// requires `links`. `embed` is derived, not a features-block member: on iff some preset's\n// effective signals include vectors.\nexport function featureEnabled(cfg: Config, name: FeatureName): boolean {\n if (name === 'embed') return anyPresetEmbeds(cfg);\n const enabled = cfg.features?.[name] !== false;\n if (name === 'rank') return enabled && featureEnabled(cfg, 'links');\n return enabled;\n}\n\nexport function enabledFeatures(cfg: Config): FeatureName[] {\n return FEATURE_NAMES.filter((name) => featureEnabled(cfg, name));\n}\n\n// Feature states, so \"off\" and \"empty\" stay distinguishable in output. `embed` is excluded:\n// it is not a features-block toggle, and `status` reports it on its own line.\nexport function featureStates(cfg: Config): { on: FeatureName[]; off: FeatureName[] } {\n const reported = FEATURE_NAMES.filter((name) => name !== 'embed');\n return {\n on: reported.filter((name) => featureEnabled(cfg, name)),\n off: reported.filter((name) => !featureEnabled(cfg, name)),\n };\n}\n\n// Resolved embed provider settings, or null when the config names no model. There is no\n// fallback to DEFAULT_EMBED_MODEL: that constant is a template `init` and the v4 migration\n// write into the file, never an implicit runtime default.\nexport function embedConfig(cfg: Config): { model: string; provider: 'static' | 'openai' | 'cohere'; url?: string; key?: string; languages?: string[] } | null {\n if (!embedEnabled(cfg)) return null;\n const e = cfg.embed as EmbedConfig;\n return { model: e.model as string, provider: e.provider ?? 'static', url: e.url, key: e.key, languages: e.languages };\n}\n\n// The configured FTS5 tokenizer, or undefined for the built-in default. Undefined rather than\n// the default string so featureSignature can leave the segment off entirely for trees that\n// never set it, which is what keeps existing indexes from rebuilding on upgrade.\nexport function contentTokenize(cfg: Config): string | undefined {\n const tokenize = cfg.content?.tokenize;\n return tokenize === undefined || tokenize.trim() === '' ? undefined : tokenize.trim();\n}\n\n// Cache key over everything indexing derives from, so any change to those inputs rebuilds.\nexport function featureSignature(cfg: Config): string {\n const globalPart = enabledFeatures(cfg)\n .filter((name) => name !== 'embed')\n .join(',');\n const e = embedConfig(cfg);\n // Weight identity from identity.ts, no network: a static model's resolved sha or local\n // size+mtime, appended once known so changed weights re-embed.\n const identity = e && e.provider === 'static' ? modelIdentity(e.model) : undefined;\n const embedPart = e ? `embed:${e.provider}:${e.model}${identity !== undefined ? `@${identity}` : ''}` : 'embed:off';\n // One keyed segment per preset so a rebuild notice can name exactly which preset moved.\n const presetsPart = [...presetNames(cfg)]\n .sort()\n .map((name) => {\n const p = cfg.presets[name];\n const include = [...p.include].sort().join('+');\n const exclude = [...(p.exclude ?? [])].sort().join('+');\n return `preset:${name}:${include}:${exclude}:${presetHasSignal(cfg, name, 'vectors') ? 'on' : 'off'}`;\n })\n .join('|');\n const tokenize = contentTokenize(cfg);\n const parts = [`features:${globalPart}`, embedPart];\n if (tokenize !== undefined) parts.push(`tokenize:${tokenize}`);\n parts.push(presetsPart);\n return parts.join('|');\n}\n"],"names":["anyPresetEmbeds","contentTokenize","embedConfig","embedEnabled","enabledFeatures","featureEnabled","featureSignature","featureStates","presetHasSignal","presetNames","presetSignals","cfg","Object","keys","presets","embed","model","length","name","declared","signals","words","features","links","vectors","signal","undefined","some","enabled","FEATURE_NAMES","filter","reported","on","off","e","provider","url","key","languages","tokenize","content","trim","globalPart","join","identity","modelIdentity","embedPart","presetsPart","sort","map","p","include","exclude","parts","push"],"mappings":"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"}
@@ -1,5 +1,8 @@
1
- export { anyPresetEmbeds, contentTokenize, embedConfig, embedEnabled, enabledFeatures, featureEnabled, featureSignature, featureStates, presetNames, presetSemanticEnabled } from './access.js';
1
+ export { anyPresetEmbeds, contentTokenize, embedConfig, embedEnabled, enabledFeatures, featureEnabled, featureSignature, featureStates, presetHasSignal, presetNames, presetSignals } from './access.js';
2
+ export type { InitOverrides } from './load.js';
2
3
  export { findConfigPath, initConfig, loadConfig, migrateConfig } from './load.js';
3
4
  export { resolvePreset, resolveSearch } from './resolve.js';
5
+ export type { SignalName, SignalWeights } from './signals.js';
6
+ export { SIGNAL_NAMES, SIGNAL_PREREQUISITES } from './signals.js';
4
7
  export type { Config, EffectiveSearch, EmbedConfig, FeatureName, Preset, ResolvedConfig, SavedQuery, SavedSearch, SearchOverrides } from './types.js';
5
8
  export { CONFIG_FILENAME, DEFAULT_EMBED_MODEL, STATE_DIR, SUPPORTED_CONFIG_VERSION } from './types.js';
@@ -1,5 +1,8 @@
1
- export { anyPresetEmbeds, contentTokenize, embedConfig, embedEnabled, enabledFeatures, featureEnabled, featureSignature, featureStates, presetNames, presetSemanticEnabled } from './access.js';
1
+ export { anyPresetEmbeds, contentTokenize, embedConfig, embedEnabled, enabledFeatures, featureEnabled, featureSignature, featureStates, presetHasSignal, presetNames, presetSignals } from './access.js';
2
+ export type { InitOverrides } from './load.js';
2
3
  export { findConfigPath, initConfig, loadConfig, migrateConfig } from './load.js';
3
4
  export { resolvePreset, resolveSearch } from './resolve.js';
5
+ export type { SignalName, SignalWeights } from './signals.js';
6
+ export { SIGNAL_NAMES, SIGNAL_PREREQUISITES } from './signals.js';
4
7
  export type { Config, EffectiveSearch, EmbedConfig, FeatureName, Preset, ResolvedConfig, SavedQuery, SavedSearch, SearchOverrides } from './types.js';
5
8
  export { CONFIG_FILENAME, DEFAULT_EMBED_MODEL, STATE_DIR, SUPPORTED_CONFIG_VERSION } from './types.js';
@@ -15,6 +15,12 @@ _export(exports, {
15
15
  get DEFAULT_EMBED_MODEL () {
16
16
  return _typests.DEFAULT_EMBED_MODEL;
17
17
  },
18
+ get SIGNAL_NAMES () {
19
+ return _signalsts.SIGNAL_NAMES;
20
+ },
21
+ get SIGNAL_PREREQUISITES () {
22
+ return _signalsts.SIGNAL_PREREQUISITES;
23
+ },
18
24
  get STATE_DIR () {
19
25
  return _typests.STATE_DIR;
20
26
  },
@@ -57,11 +63,14 @@ _export(exports, {
57
63
  get migrateConfig () {
58
64
  return _loadts.migrateConfig;
59
65
  },
66
+ get presetHasSignal () {
67
+ return _accessts.presetHasSignal;
68
+ },
60
69
  get presetNames () {
61
70
  return _accessts.presetNames;
62
71
  },
63
- get presetSemanticEnabled () {
64
- return _accessts.presetSemanticEnabled;
72
+ get presetSignals () {
73
+ return _accessts.presetSignals;
65
74
  },
66
75
  get resolvePreset () {
67
76
  return _resolvets.resolvePreset;
@@ -73,5 +82,6 @@ _export(exports, {
73
82
  var _accessts = require("./access.js");
74
83
  var _loadts = require("./load.js");
75
84
  var _resolvets = require("./resolve.js");
85
+ var _signalsts = require("./signals.js");
76
86
  var _typests = require("./types.js");
77
87
  /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/config/index.ts"],"sourcesContent":["export { anyPresetEmbeds, contentTokenize, embedConfig, embedEnabled, enabledFeatures, featureEnabled, featureSignature, featureStates, presetNames, presetSemanticEnabled } from './access.ts';\nexport { findConfigPath, initConfig, loadConfig, migrateConfig } from './load.ts';\nexport { resolvePreset, resolveSearch } from './resolve.ts';\nexport type { Config, EffectiveSearch, EmbedConfig, FeatureName, Preset, ResolvedConfig, SavedQuery, SavedSearch, SearchOverrides } from './types.ts';\nexport { CONFIG_FILENAME, DEFAULT_EMBED_MODEL, STATE_DIR, SUPPORTED_CONFIG_VERSION } from './types.ts';\n"],"names":["CONFIG_FILENAME","DEFAULT_EMBED_MODEL","STATE_DIR","SUPPORTED_CONFIG_VERSION","anyPresetEmbeds","contentTokenize","embedConfig","embedEnabled","enabledFeatures","featureEnabled","featureSignature","featureStates","findConfigPath","initConfig","loadConfig","migrateConfig","presetNames","presetSemanticEnabled","resolvePreset","resolveSearch"],"mappings":";;;;;;;;;;;QAISA;eAAAA,wBAAe;;QAAEC;eAAAA,4BAAmB;;QAAEC;eAAAA,kBAAS;;QAAEC;eAAAA,iCAAwB;;QAJzEC;eAAAA,yBAAe;;QAAEC;eAAAA,yBAAe;;QAAEC;eAAAA,qBAAW;;QAAEC;eAAAA,sBAAY;;QAAEC;eAAAA,yBAAe;;QAAEC;eAAAA,wBAAc;;QAAEC;eAAAA,0BAAgB;;QAAEC;eAAAA,uBAAa;;QAC7HC;eAAAA,sBAAc;;QAAEC;eAAAA,kBAAU;;QAAEC;eAAAA,kBAAU;;QAAEC;eAAAA,qBAAa;;QAD0EC;eAAAA,qBAAW;;QAAEC;eAAAA,+BAAqB;;QAEjKC;eAAAA,wBAAa;;QAAEC;eAAAA,wBAAa;;;wBAF6I;sBAC5G;yBACzB;uBAE6C"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/config/index.ts"],"sourcesContent":["export { anyPresetEmbeds, contentTokenize, embedConfig, embedEnabled, enabledFeatures, featureEnabled, featureSignature, featureStates, presetHasSignal, presetNames, presetSignals } from './access.ts';\nexport type { InitOverrides } from './load.ts';\nexport { findConfigPath, initConfig, loadConfig, migrateConfig } from './load.ts';\nexport { resolvePreset, resolveSearch } from './resolve.ts';\nexport type { SignalName, SignalWeights } from './signals.ts';\nexport { SIGNAL_NAMES, SIGNAL_PREREQUISITES } from './signals.ts';\nexport type { Config, EffectiveSearch, EmbedConfig, FeatureName, Preset, ResolvedConfig, SavedQuery, SavedSearch, SearchOverrides } from './types.ts';\nexport { CONFIG_FILENAME, DEFAULT_EMBED_MODEL, STATE_DIR, SUPPORTED_CONFIG_VERSION } from './types.ts';\n"],"names":["CONFIG_FILENAME","DEFAULT_EMBED_MODEL","SIGNAL_NAMES","SIGNAL_PREREQUISITES","STATE_DIR","SUPPORTED_CONFIG_VERSION","anyPresetEmbeds","contentTokenize","embedConfig","embedEnabled","enabledFeatures","featureEnabled","featureSignature","featureStates","findConfigPath","initConfig","loadConfig","migrateConfig","presetHasSignal","presetNames","presetSignals","resolvePreset","resolveSearch"],"mappings":";;;;;;;;;;;QAOSA;eAAAA,wBAAe;;QAAEC;eAAAA,4BAAmB;;QAFpCC;eAAAA,uBAAY;;QAAEC;eAAAA,+BAAoB;;QAEIC;eAAAA,kBAAS;;QAAEC;eAAAA,iCAAwB;;QAPzEC;eAAAA,yBAAe;;QAAEC;eAAAA,yBAAe;;QAAEC;eAAAA,qBAAW;;QAAEC;eAAAA,sBAAY;;QAAEC;eAAAA,yBAAe;;QAAEC;eAAAA,wBAAc;;QAAEC;eAAAA,0BAAgB;;QAAEC;eAAAA,uBAAa;;QAE7HC;eAAAA,sBAAc;;QAAEC;eAAAA,kBAAU;;QAAEC;eAAAA,kBAAU;;QAAEC;eAAAA,qBAAa;;QAF0EC;eAAAA,yBAAe;;QAAEC;eAAAA,qBAAW;;QAAEC;eAAAA,uBAAa;;QAG1KC;eAAAA,wBAAa;;QAAEC;eAAAA,wBAAa;;;wBAHsJ;sBAErH;yBACzB;yBAEM;uBAEuC"}
@@ -3,6 +3,11 @@ export declare function migrateConfig(cfg: Config): {
3
3
  cfg: Config;
4
4
  from: number;
5
5
  };
6
- export declare function initConfig(dir: string): string;
6
+ export interface InitOverrides {
7
+ model?: string;
8
+ provider?: string;
9
+ url?: string;
10
+ }
11
+ export declare function initConfig(dir: string, overrides?: InitOverrides): string;
7
12
  export declare function findConfigPath(startDir: string): string | null;
8
13
  export declare function loadConfig(explicitPath?: string): ResolvedConfig;