sensemaking 0.9.1 → 0.9.3
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.
- package/README.md +7 -2
- package/bin/cli.js +5 -1
- package/dist/cjs/cli/check.js +36 -4
- package/dist/cjs/cli/check.js.map +1 -1
- package/dist/cjs/cli/exit.d.cts +5 -0
- package/dist/cjs/cli/exit.d.ts +5 -0
- package/dist/cjs/cli/exit.js +147 -0
- package/dist/cjs/cli/exit.js.map +1 -0
- package/dist/cjs/cli/index.d.cts +11 -0
- package/dist/cjs/cli/index.d.ts +11 -0
- package/dist/cjs/cli/index.js +22 -3
- package/dist/cjs/cli/index.js.map +1 -1
- package/dist/cjs/cli/init.js +3 -0
- package/dist/cjs/cli/init.js.map +1 -1
- package/dist/cjs/cli/map.js +33 -2
- package/dist/cjs/cli/map.js.map +1 -1
- package/dist/cjs/cli/named.d.cts +1 -1
- package/dist/cjs/cli/named.d.ts +1 -1
- package/dist/cjs/cli/named.js +48 -17
- package/dist/cjs/cli/named.js.map +1 -1
- package/dist/cjs/cli/peek.js +36 -4
- package/dist/cjs/cli/peek.js.map +1 -1
- package/dist/cjs/cli/query.js +35 -3
- package/dist/cjs/cli/query.js.map +1 -1
- package/dist/cjs/cli/rebuild.js +31 -1
- package/dist/cjs/cli/rebuild.js.map +1 -1
- package/dist/cjs/cli/search.js +42 -10
- package/dist/cjs/cli/search.js.map +1 -1
- package/dist/cjs/cli/shared.d.cts +18 -2
- package/dist/cjs/cli/shared.d.ts +18 -2
- package/dist/cjs/cli/shared.js +238 -11
- package/dist/cjs/cli/shared.js.map +1 -1
- package/dist/cjs/cli/status.js +5 -2
- package/dist/cjs/cli/status.js.map +1 -1
- package/dist/cjs/cli/types.d.cts +2 -12
- package/dist/cjs/cli/types.d.ts +2 -12
- package/dist/cjs/cli/watch.js +38 -2
- package/dist/cjs/cli/watch.js.map +1 -1
- package/dist/cjs/cli.js +147 -150
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/db.js +5 -0
- package/dist/cjs/db.js.map +1 -1
- package/dist/esm/cli/check.js +11 -4
- package/dist/esm/cli/check.js.map +1 -1
- package/dist/esm/cli/exit.d.ts +5 -0
- package/dist/esm/cli/exit.js +15 -0
- package/dist/esm/cli/exit.js.map +1 -0
- package/dist/esm/cli/index.d.ts +11 -0
- package/dist/esm/cli/index.js +14 -0
- package/dist/esm/cli/index.js.map +1 -1
- package/dist/esm/cli/init.js +3 -0
- package/dist/esm/cli/init.js.map +1 -1
- package/dist/esm/cli/map.js +11 -3
- package/dist/esm/cli/map.js.map +1 -1
- package/dist/esm/cli/named.d.ts +1 -1
- package/dist/esm/cli/named.js +25 -18
- package/dist/esm/cli/named.js.map +1 -1
- package/dist/esm/cli/peek.js +12 -5
- package/dist/esm/cli/peek.js.map +1 -1
- package/dist/esm/cli/query.js +11 -4
- package/dist/esm/cli/query.js.map +1 -1
- package/dist/esm/cli/rebuild.js +6 -2
- package/dist/esm/cli/rebuild.js.map +1 -1
- package/dist/esm/cli/search.js +18 -10
- package/dist/esm/cli/search.js.map +1 -1
- package/dist/esm/cli/shared.d.ts +18 -2
- package/dist/esm/cli/shared.js +100 -11
- package/dist/esm/cli/shared.js.map +1 -1
- package/dist/esm/cli/status.js +9 -3
- package/dist/esm/cli/status.js.map +1 -1
- package/dist/esm/cli/types.d.ts +2 -12
- package/dist/esm/cli/types.js.map +1 -1
- package/dist/esm/cli/watch.js +11 -3
- package/dist/esm/cli/watch.js.map +1 -1
- package/dist/esm/cli.js +83 -102
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/db.js +5 -0
- package/dist/esm/db.js.map +1 -1
- package/package.json +3 -1
package/dist/cjs/cli/shared.js
CHANGED
|
@@ -9,6 +9,21 @@ function _export(target, all) {
|
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
+
get CONFIG () {
|
|
13
|
+
return CONFIG;
|
|
14
|
+
},
|
|
15
|
+
get FORMAT () {
|
|
16
|
+
return FORMAT;
|
|
17
|
+
},
|
|
18
|
+
get SEARCH_FLAGS () {
|
|
19
|
+
return SEARCH_FLAGS;
|
|
20
|
+
},
|
|
21
|
+
get formatOf () {
|
|
22
|
+
return formatOf;
|
|
23
|
+
},
|
|
24
|
+
get parse () {
|
|
25
|
+
return parse;
|
|
26
|
+
},
|
|
12
27
|
get parseK () {
|
|
13
28
|
return parseK;
|
|
14
29
|
},
|
|
@@ -22,14 +37,19 @@ _export(exports, {
|
|
|
22
37
|
return withDb;
|
|
23
38
|
}
|
|
24
39
|
});
|
|
40
|
+
var _getoptscompat = /*#__PURE__*/ _interop_require_default(require("getopts-compat"));
|
|
25
41
|
var _dbts = require("../db.js");
|
|
26
42
|
var _outputts = require("../output.js");
|
|
27
43
|
var _searcherrorts = require("../search-error.js");
|
|
44
|
+
var _exitts = require("./exit.js");
|
|
28
45
|
function _array_like_to_array(arr, len) {
|
|
29
46
|
if (len == null || len > arr.length) len = arr.length;
|
|
30
47
|
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
31
48
|
return arr2;
|
|
32
49
|
}
|
|
50
|
+
function _array_with_holes(arr) {
|
|
51
|
+
if (Array.isArray(arr)) return arr;
|
|
52
|
+
}
|
|
33
53
|
function _array_without_holes(arr) {
|
|
34
54
|
if (Array.isArray(arr)) return _array_like_to_array(arr);
|
|
35
55
|
}
|
|
@@ -62,12 +82,99 @@ function _async_to_generator(fn) {
|
|
|
62
82
|
});
|
|
63
83
|
};
|
|
64
84
|
}
|
|
85
|
+
function _define_property(obj, key, value) {
|
|
86
|
+
if (key in obj) {
|
|
87
|
+
Object.defineProperty(obj, key, {
|
|
88
|
+
value: value,
|
|
89
|
+
enumerable: true,
|
|
90
|
+
configurable: true,
|
|
91
|
+
writable: true
|
|
92
|
+
});
|
|
93
|
+
} else {
|
|
94
|
+
obj[key] = value;
|
|
95
|
+
}
|
|
96
|
+
return obj;
|
|
97
|
+
}
|
|
98
|
+
function _interop_require_default(obj) {
|
|
99
|
+
return obj && obj.__esModule ? obj : {
|
|
100
|
+
default: obj
|
|
101
|
+
};
|
|
102
|
+
}
|
|
65
103
|
function _iterable_to_array(iter) {
|
|
66
104
|
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
67
105
|
}
|
|
106
|
+
function _iterable_to_array_limit(arr, i) {
|
|
107
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
108
|
+
if (_i == null) return;
|
|
109
|
+
var _arr = [];
|
|
110
|
+
var _n = true;
|
|
111
|
+
var _d = false;
|
|
112
|
+
var _s, _e;
|
|
113
|
+
try {
|
|
114
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
115
|
+
_arr.push(_s.value);
|
|
116
|
+
if (i && _arr.length === i) break;
|
|
117
|
+
}
|
|
118
|
+
} catch (err) {
|
|
119
|
+
_d = true;
|
|
120
|
+
_e = err;
|
|
121
|
+
} finally{
|
|
122
|
+
try {
|
|
123
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
124
|
+
} finally{
|
|
125
|
+
if (_d) throw _e;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return _arr;
|
|
129
|
+
}
|
|
130
|
+
function _non_iterable_rest() {
|
|
131
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
132
|
+
}
|
|
68
133
|
function _non_iterable_spread() {
|
|
69
134
|
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
70
135
|
}
|
|
136
|
+
function _object_spread(target) {
|
|
137
|
+
for(var i = 1; i < arguments.length; i++){
|
|
138
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
139
|
+
var ownKeys = Object.keys(source);
|
|
140
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
141
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
142
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
ownKeys.forEach(function(key) {
|
|
146
|
+
_define_property(target, key, source[key]);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return target;
|
|
150
|
+
}
|
|
151
|
+
function ownKeys(object, enumerableOnly) {
|
|
152
|
+
var keys = Object.keys(object);
|
|
153
|
+
if (Object.getOwnPropertySymbols) {
|
|
154
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
155
|
+
if (enumerableOnly) {
|
|
156
|
+
symbols = symbols.filter(function(sym) {
|
|
157
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
keys.push.apply(keys, symbols);
|
|
161
|
+
}
|
|
162
|
+
return keys;
|
|
163
|
+
}
|
|
164
|
+
function _object_spread_props(target, source) {
|
|
165
|
+
source = source != null ? source : {};
|
|
166
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
167
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
168
|
+
} else {
|
|
169
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
170
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
return target;
|
|
174
|
+
}
|
|
175
|
+
function _sliced_to_array(arr, i) {
|
|
176
|
+
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
177
|
+
}
|
|
71
178
|
function _to_consumable_array(arr) {
|
|
72
179
|
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
73
180
|
}
|
|
@@ -178,11 +285,134 @@ function _ts_generator(thisArg, body) {
|
|
|
178
285
|
};
|
|
179
286
|
}
|
|
180
287
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
288
|
+
var FORMAT = {
|
|
289
|
+
format: {
|
|
290
|
+
type: 'string',
|
|
291
|
+
default: 'table'
|
|
292
|
+
}
|
|
293
|
+
};
|
|
294
|
+
var CONFIG = {
|
|
295
|
+
config: {
|
|
296
|
+
type: 'string'
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
var SEARCH_FLAGS = {
|
|
300
|
+
where: {
|
|
301
|
+
type: 'string'
|
|
302
|
+
},
|
|
303
|
+
k: {
|
|
304
|
+
type: 'string'
|
|
305
|
+
},
|
|
306
|
+
preset: {
|
|
307
|
+
type: 'string'
|
|
308
|
+
},
|
|
309
|
+
include: {
|
|
310
|
+
type: 'string',
|
|
311
|
+
multiple: true
|
|
312
|
+
},
|
|
313
|
+
lexical: {
|
|
314
|
+
type: 'boolean',
|
|
315
|
+
default: false
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
function formatOf(values) {
|
|
319
|
+
return values.format === 'json' ? 'json' : 'table';
|
|
320
|
+
}
|
|
321
|
+
function parse(argv, usage) {
|
|
322
|
+
var flags = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
|
|
323
|
+
var table = _object_spread_props(_object_spread({}, flags), {
|
|
324
|
+
help: {
|
|
325
|
+
type: 'boolean',
|
|
326
|
+
default: false,
|
|
327
|
+
short: 'h'
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
var string = [];
|
|
331
|
+
var boolean = [];
|
|
332
|
+
var alias = {};
|
|
333
|
+
var defaults = {};
|
|
334
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
335
|
+
try {
|
|
336
|
+
for(var _iterator = Object.entries(table)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
337
|
+
var _step_value = _sliced_to_array(_step.value, 2), name = _step_value[0], flag = _step_value[1];
|
|
338
|
+
(flag.type === 'boolean' ? boolean : string).push(name);
|
|
339
|
+
if (flag.default !== undefined) defaults[name] = flag.default;
|
|
340
|
+
if (flag.short !== undefined) alias[name] = flag.short;
|
|
341
|
+
}
|
|
342
|
+
} catch (err) {
|
|
343
|
+
_didIteratorError = true;
|
|
344
|
+
_iteratorError = err;
|
|
345
|
+
} finally{
|
|
346
|
+
try {
|
|
347
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
348
|
+
_iterator.return();
|
|
349
|
+
}
|
|
350
|
+
} finally{
|
|
351
|
+
if (_didIteratorError) {
|
|
352
|
+
throw _iteratorError;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
// getopts is lenient about undeclared flags -- they land in the result and are silently
|
|
357
|
+
// ignored, which is the bug 0.9.2 fixed. Record the first and fail below; returning false
|
|
358
|
+
// also keeps it out of the result. `--k -1` arrives here as unknown option "1", because
|
|
359
|
+
// getopts reads a leading dash as a new option rather than as --k's value; the message is
|
|
360
|
+
// blunter than the old one but it is still a usage error rather than a silent default.
|
|
361
|
+
var unknown;
|
|
362
|
+
var parsed = (0, _getoptscompat.default)(argv, {
|
|
363
|
+
string: string,
|
|
364
|
+
boolean: boolean,
|
|
365
|
+
alias: alias,
|
|
366
|
+
default: defaults,
|
|
367
|
+
unknown: function unknown1(name) {
|
|
368
|
+
if (unknown === undefined) unknown = name;
|
|
369
|
+
return false;
|
|
370
|
+
}
|
|
371
|
+
});
|
|
372
|
+
if (unknown !== undefined) (0, _exitts.usageError)("unknown option: ".concat(unknown), usage);
|
|
373
|
+
if (parsed.help) {
|
|
374
|
+
console.log(usage);
|
|
375
|
+
throw new _exitts.ExitError(0);
|
|
376
|
+
}
|
|
377
|
+
// Two getopts shapes the callers must not see: an unset string flag reads as "" rather
|
|
378
|
+
// than undefined, and a flag passed once reads as a string rather than a one-element
|
|
379
|
+
// array. Both matter -- `?? saved.field` means "flag absent", and --include is a list.
|
|
380
|
+
var values = {};
|
|
381
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
382
|
+
try {
|
|
383
|
+
for(var _iterator1 = Object.entries(table)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
384
|
+
var _step_value1 = _sliced_to_array(_step1.value, 2), name1 = _step_value1[0], flag1 = _step_value1[1];
|
|
385
|
+
var raw = parsed[name1];
|
|
386
|
+
if (flag1.type === 'boolean') values[name1] = raw;
|
|
387
|
+
else if (flag1.multiple) values[name1] = raw === '' ? undefined : Array.isArray(raw) ? raw : [
|
|
388
|
+
raw
|
|
389
|
+
];
|
|
390
|
+
else values[name1] = raw === '' ? undefined : raw;
|
|
391
|
+
}
|
|
392
|
+
} catch (err) {
|
|
393
|
+
_didIteratorError1 = true;
|
|
394
|
+
_iteratorError1 = err;
|
|
395
|
+
} finally{
|
|
396
|
+
try {
|
|
397
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
398
|
+
_iterator1.return();
|
|
399
|
+
}
|
|
400
|
+
} finally{
|
|
401
|
+
if (_didIteratorError1) {
|
|
402
|
+
throw _iteratorError1;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
return {
|
|
407
|
+
values: values,
|
|
408
|
+
positionals: parsed._
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
function parseK(k, usageErrorFn) {
|
|
412
|
+
if (k === undefined) return undefined;
|
|
413
|
+
var parsed = Number(k);
|
|
414
|
+
if (!Number.isInteger(parsed) || parsed <= 0) usageErrorFn('--k expects a positive integer, got "'.concat(k, '"'));
|
|
415
|
+
return parsed;
|
|
186
416
|
}
|
|
187
417
|
function printWarnings(warnings) {
|
|
188
418
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
@@ -206,13 +436,13 @@ function printWarnings(warnings) {
|
|
|
206
436
|
}
|
|
207
437
|
}
|
|
208
438
|
}
|
|
209
|
-
function withDb(ctx, fn) {
|
|
439
|
+
function withDb(ctx, configPath, fn) {
|
|
210
440
|
return _async_to_generator(function() {
|
|
211
441
|
var cfg, _open, db, warnings;
|
|
212
442
|
return _ts_generator(this, function(_state) {
|
|
213
443
|
switch(_state.label){
|
|
214
444
|
case 0:
|
|
215
|
-
cfg = ctx.resolveConfig();
|
|
445
|
+
cfg = ctx.resolveConfig(configPath);
|
|
216
446
|
_open = (0, _dbts.open)(cfg), db = _open.db, warnings = _open.warnings;
|
|
217
447
|
printWarnings(warnings);
|
|
218
448
|
_state.label = 1;
|
|
@@ -249,10 +479,7 @@ function withDb(ctx, fn) {
|
|
|
249
479
|
function runSql(cfg, sql, params, format, label) {
|
|
250
480
|
var _sql_match;
|
|
251
481
|
var placeholderCount = ((_sql_match = sql.match(/\?/g)) !== null && _sql_match !== void 0 ? _sql_match : []).length;
|
|
252
|
-
if (params.length !== placeholderCount)
|
|
253
|
-
console.error("".concat(label, " expects ").concat(placeholderCount, " parameter(s), got ").concat(params.length));
|
|
254
|
-
process.exit(2);
|
|
255
|
-
}
|
|
482
|
+
if (params.length !== placeholderCount) (0, _exitts.usageError)("".concat(label, " expects ").concat(placeholderCount, " parameter(s), got ").concat(params.length));
|
|
256
483
|
var _open = (0, _dbts.open)(cfg), db = _open.db, warnings = _open.warnings;
|
|
257
484
|
printWarnings(warnings);
|
|
258
485
|
var rows;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/shared.ts"],"sourcesContent":["import type { ResolvedConfig } from '../config.ts';\nimport type { OpenResult } from '../db.ts';\nimport { open } from '../db.ts';\nimport type { Row } from '../output.ts';\nimport { printRows } from '../output.ts';\nimport { searchError } from '../search-error.ts';\nimport type { Ctx } from './types.ts';\n\n// --k must be a positive integer: SQLite reads a bound LIMIT of -1 as \"unlimited\" and 0 as\n// \"nothing\", and parseInt would silently truncate \"5.9\" -- all three are caller mistakes\n// worth a usage error, matching the config-level SavedSearch validation.\nexport function parseK(ctx: Ctx): number | undefined {\n if (ctx.values.k === undefined) return undefined;\n const k = Number(ctx.values.k);\n if (!Number.isInteger(k) || k <= 0) ctx.usageError(`--k expects a positive integer, got \"${ctx.values.k}\"`);\n return k;\n}\n\n// Shared open-query-close envelope for commands that touch the tree.\n\nexport function printWarnings(warnings: string[]): void {\n for (const w of warnings) console.warn(w);\n}\n\nexport async function withDb(ctx: Ctx, fn: (db: OpenResult['db'], cfg: ResolvedConfig) => void | Promise<void>): Promise<void> {\n const cfg = ctx.resolveConfig();\n const { db, warnings } = open(cfg);\n printWarnings(warnings);\n try {\n await fn(db, cfg);\n } finally {\n db.close();\n }\n}\n\n// An unbound `?` silently binds NULL, so mismatched param counts fail loudly instead.\nexport function runSql(cfg: ResolvedConfig, sql: string, params: string[], format: 'table' | 'json', label: string): void {\n const placeholderCount = (sql.match(/\\?/g) ?? []).length;\n if (params.length !== placeholderCount) {\n console.error(`${label} expects ${placeholderCount} parameter(s), got ${params.length}`);\n process.exit(2);\n }\n const { db, warnings } = open(cfg);\n printWarnings(warnings);\n let rows: Row[];\n try {\n rows = db.prepare(sql).all(...params) as Row[];\n } catch (err) {\n db.close();\n // A saved query or ad-hoc SQL can carry `content MATCH ?` too, so the same FTS5\n // punctuation trap applies -- the bound parameters are the search terms there. SQL\n // without MATCH gets its error verbatim; search advice on a plain typo would mislead.\n if (/\\bMATCH\\b/i.test(sql)) throw searchError(err as Error, params.join(' '));\n throw err;\n }\n printRows(rows, format);\n db.close();\n}\n"],"names":["parseK","printWarnings","runSql","withDb","ctx","values","k","undefined","Number","isInteger","usageError","warnings","w","console","warn","fn","cfg","open","db","resolveConfig","close","sql","params","format","label","placeholderCount","match","length","error","process","exit","rows","prepare","all","err","test","searchError","join","printRows"],"mappings":";;;;;;;;;;;QAWgBA;eAAAA;;QASAC;eAAAA;;QAgBAC;eAAAA;;QAZMC;eAAAA;;;oBAtBD;wBAEK;6BACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMrB,SAASH,OAAOI,GAAQ;IAC7B,IAAIA,IAAIC,MAAM,CAACC,CAAC,KAAKC,WAAW,OAAOA;IACvC,IAAMD,IAAIE,OAAOJ,IAAIC,MAAM,CAACC,CAAC;IAC7B,IAAI,CAACE,OAAOC,SAAS,CAACH,MAAMA,KAAK,GAAGF,IAAIM,UAAU,CAAC,AAAC,wCAAoD,OAAbN,IAAIC,MAAM,CAACC,CAAC,EAAC;IACxG,OAAOA;AACT;AAIO,SAASL,cAAcU,QAAkB;QACzC,kCAAA,2BAAA;;QAAL,QAAK,YAAWA,6BAAX,SAAA,6BAAA,QAAA,yBAAA;YAAA,IAAMC,IAAN;YAAqBC,QAAQC,IAAI,CAACF;;;QAAlC;QAAA;;;iBAAA,6BAAA;gBAAA;;;gBAAA;sBAAA;;;;AACP;AAEO,SAAeT,OAAOC,GAAQ,EAAEW,EAAuE;;YACtGC,KACmBC,OAAjBC,IAAIP;;;;oBADNK,MAAMZ,IAAIe,aAAa;oBACJF,QAAAA,IAAAA,UAAI,EAACD,MAAtBE,KAAiBD,MAAjBC,IAAIP,WAAaM,MAAbN;oBACZV,cAAcU;;;;;;;;;oBAEZ;;wBAAMI,GAAGG,IAAIF;;;oBAAb;;;;;;oBAEAE,GAAGE,KAAK;;;;;;;;;;IAEZ;;AAGO,SAASlB,OAAOc,GAAmB,EAAEK,GAAW,EAAEC,MAAgB,EAAEC,MAAwB,EAAEC,KAAa;QACtFH;IAA1B,IAAMI,mBAAmB,EAACJ,aAAAA,IAAIK,KAAK,CAAC,oBAAVL,wBAAAA,aAAoB,EAAE,EAAEM,MAAM;IACxD,IAAIL,OAAOK,MAAM,KAAKF,kBAAkB;QACtCZ,QAAQe,KAAK,CAAC,AAAC,GAAmBH,OAAjBD,OAAM,aAAiDF,OAAtCG,kBAAiB,uBAAmC,OAAdH,OAAOK,MAAM;QACrFE,QAAQC,IAAI,CAAC;IACf;IACA,IAAyBb,QAAAA,IAAAA,UAAI,EAACD,MAAtBE,KAAiBD,MAAjBC,IAAIP,WAAaM,MAAbN;IACZV,cAAcU;IACd,IAAIoB;IACJ,IAAI;YACKb;QAAPa,OAAOb,CAAAA,cAAAA,GAAGc,OAAO,CAACX,MAAKY,GAAG,OAAnBf,aAAoB,qBAAGI;IAChC,EAAE,OAAOY,KAAK;QACZhB,GAAGE,KAAK;QACR,gFAAgF;QAChF,mFAAmF;QACnF,sFAAsF;QACtF,IAAI,aAAae,IAAI,CAACd,MAAM,MAAMe,IAAAA,0BAAW,EAACF,KAAcZ,OAAOe,IAAI,CAAC;QACxE,MAAMH;IACR;IACAI,IAAAA,mBAAS,EAACP,MAAMR;IAChBL,GAAGE,KAAK;AACV"}
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/shared.ts"],"sourcesContent":["import getopts from 'getopts-compat';\nimport type { ResolvedConfig } from '../config.ts';\nimport type { OpenResult } from '../db.ts';\nimport { open } from '../db.ts';\nimport type { Row } from '../output.ts';\nimport { printRows } from '../output.ts';\nimport { searchError } from '../search-error.ts';\nimport { ExitError, usageError } from './exit.ts';\nimport type { Ctx } from './types.ts';\n\n// Flag descriptors, spreadable so one flag name keeps one meaning across every command's\n// table. parse() converts them to the getopts call the rest of the CLIs here make directly.\nexport interface Flag {\n type: 'string' | 'boolean';\n default?: string | boolean;\n multiple?: boolean;\n short?: string;\n}\nexport type Flags = Record<string, Flag>;\n\nexport const FORMAT: Flags = { format: { type: 'string', default: 'table' } };\nexport const CONFIG: Flags = { config: { type: 'string' } };\nexport const SEARCH_FLAGS: Flags = {\n where: { type: 'string' },\n k: { type: 'string' },\n preset: { type: 'string' },\n include: { type: 'string', multiple: true },\n lexical: { type: 'boolean', default: false },\n};\n\nexport type Values = Record<string, string | boolean | string[] | undefined>;\n\nexport function formatOf(values: Values): 'table' | 'json' {\n return values.format === 'json' ? 'json' : 'table';\n}\n\n// Per-command parse: strict (a foreign flag exits 2), and every table gets --help for free.\nexport function parse(argv: string[], usage: string, flags: Flags = {}): { values: Values; positionals: string[] } {\n const table: Flags = { ...flags, help: { type: 'boolean', default: false, short: 'h' } };\n const string: string[] = [];\n const boolean: string[] = [];\n const alias: Record<string, string> = {};\n const defaults: Record<string, string | boolean> = {};\n for (const [name, flag] of Object.entries(table)) {\n (flag.type === 'boolean' ? boolean : string).push(name);\n if (flag.default !== undefined) defaults[name] = flag.default;\n if (flag.short !== undefined) alias[name] = flag.short;\n }\n\n // getopts is lenient about undeclared flags -- they land in the result and are silently\n // ignored, which is the bug 0.9.2 fixed. Record the first and fail below; returning false\n // also keeps it out of the result. `--k -1` arrives here as unknown option \"1\", because\n // getopts reads a leading dash as a new option rather than as --k's value; the message is\n // blunter than the old one but it is still a usage error rather than a silent default.\n let unknown: string | undefined;\n const parsed = getopts(argv, {\n string,\n boolean,\n alias,\n default: defaults,\n unknown: (name: string): boolean => {\n if (unknown === undefined) unknown = name;\n return false;\n },\n });\n if (unknown !== undefined) usageError(`unknown option: ${unknown}`, usage);\n if (parsed.help) {\n console.log(usage);\n throw new ExitError(0);\n }\n\n // Two getopts shapes the callers must not see: an unset string flag reads as \"\" rather\n // than undefined, and a flag passed once reads as a string rather than a one-element\n // array. Both matter -- `?? saved.field` means \"flag absent\", and --include is a list.\n const values: Values = {};\n for (const [name, flag] of Object.entries(table)) {\n const raw = parsed[name];\n if (flag.type === 'boolean') values[name] = raw as boolean;\n else if (flag.multiple) values[name] = raw === '' ? undefined : Array.isArray(raw) ? (raw as string[]) : [raw as string];\n else values[name] = raw === '' ? undefined : (raw as string);\n }\n return { values, positionals: parsed._ };\n}\n\n// --k must be a positive integer: SQLite reads a bound LIMIT of -1 as \"unlimited\" and 0 as\n// \"nothing\", and parseInt would silently truncate \"5.9\" -- all three are caller mistakes\n// worth a usage error, matching the config-level SavedSearch validation.\nexport function parseK(k: string | undefined, usageErrorFn: (message: string) => never): number | undefined {\n if (k === undefined) return undefined;\n const parsed = Number(k);\n if (!Number.isInteger(parsed) || parsed <= 0) usageErrorFn(`--k expects a positive integer, got \"${k}\"`);\n return parsed;\n}\n\n// Shared open-query-close envelope for commands that touch the tree.\n\nexport function printWarnings(warnings: string[]): void {\n for (const w of warnings) console.warn(w);\n}\n\nexport async function withDb(ctx: Ctx, configPath: string | undefined, fn: (db: OpenResult['db'], cfg: ResolvedConfig) => void | Promise<void>): Promise<void> {\n const cfg = ctx.resolveConfig(configPath);\n const { db, warnings } = open(cfg);\n printWarnings(warnings);\n try {\n await fn(db, cfg);\n } finally {\n db.close();\n }\n}\n\n// An unbound `?` silently binds NULL, so mismatched param counts fail loudly instead.\nexport function runSql(cfg: ResolvedConfig, sql: string, params: string[], format: 'table' | 'json', label: string): void {\n const placeholderCount = (sql.match(/\\?/g) ?? []).length;\n if (params.length !== placeholderCount) usageError(`${label} expects ${placeholderCount} parameter(s), got ${params.length}`);\n const { db, warnings } = open(cfg);\n printWarnings(warnings);\n let rows: Row[];\n try {\n rows = db.prepare(sql).all(...params) as Row[];\n } catch (err) {\n db.close();\n // A saved query or ad-hoc SQL can carry `content MATCH ?` too, so the same FTS5\n // punctuation trap applies -- the bound parameters are the search terms there. SQL\n // without MATCH gets its error verbatim; search advice on a plain typo would mislead.\n if (/\\bMATCH\\b/i.test(sql)) throw searchError(err as Error, params.join(' '));\n throw err;\n }\n printRows(rows, format);\n db.close();\n}\n"],"names":["CONFIG","FORMAT","SEARCH_FLAGS","formatOf","parse","parseK","printWarnings","runSql","withDb","format","type","default","config","where","k","preset","include","multiple","lexical","values","argv","usage","flags","table","help","short","string","boolean","alias","defaults","Object","entries","name","flag","push","undefined","unknown","parsed","getopts","usageError","console","log","ExitError","raw","Array","isArray","positionals","_","usageErrorFn","Number","isInteger","warnings","w","warn","ctx","configPath","fn","cfg","open","db","resolveConfig","close","sql","params","label","placeholderCount","match","length","rows","prepare","all","err","test","searchError","join","printRows"],"mappings":"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"}
|
package/dist/cjs/cli/status.js
CHANGED
|
@@ -12,6 +12,7 @@ var _commandsts = require("../commands.js");
|
|
|
12
12
|
var _configts = require("../config.js");
|
|
13
13
|
var _dbts = require("../db.js");
|
|
14
14
|
var _outputts = require("../output.js");
|
|
15
|
+
var _indexts = require("./index.js");
|
|
15
16
|
var _sharedts = require("./shared.js");
|
|
16
17
|
function _define_property(obj, key, value) {
|
|
17
18
|
if (key in obj) {
|
|
@@ -53,7 +54,9 @@ function vectorState(db) {
|
|
|
53
54
|
}
|
|
54
55
|
}
|
|
55
56
|
var status = function status(ctx) {
|
|
56
|
-
var
|
|
57
|
+
var values = (0, _sharedts.parse)(ctx.argv, "usage: ".concat(ctx.name, " ").concat(_indexts.USAGE.status), _object_spread({}, _sharedts.FORMAT, _sharedts.CONFIG)).values;
|
|
58
|
+
var format = (0, _sharedts.formatOf)(values);
|
|
59
|
+
var cfg = ctx.resolveConfig(values.config);
|
|
57
60
|
var _open = (0, _dbts.open)(cfg), db = _open.db, dbPath = _open.dbPath, warnings = _open.warnings;
|
|
58
61
|
(0, _sharedts.printWarnings)(warnings);
|
|
59
62
|
var features = (0, _configts.featureStates)(cfg);
|
|
@@ -78,7 +81,7 @@ var status = function status(ctx) {
|
|
|
78
81
|
watcherHeartbeatSecondsAgo: heartbeat ? Math.round((Date.now() - Date.parse(heartbeat)) / 1000) : null,
|
|
79
82
|
busyTimeoutMs: busyTimeoutMs
|
|
80
83
|
};
|
|
81
|
-
if (
|
|
84
|
+
if (format === 'json') {
|
|
82
85
|
console.log(JSON.stringify(result, null, 2));
|
|
83
86
|
} else {
|
|
84
87
|
console.log("db: ".concat(result.db));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/status.ts"],"sourcesContent":["import { presetCoverage } from '../commands.ts';\nimport { embedConfig, featureStates } from '../config.ts';\nimport { docCount, getMeta, open } from '../db.ts';\nimport { featuresLine, presetsLines } from '../output.ts';\nimport { printWarnings } from './shared.ts';\nimport type { Command } from './types.ts';\n\n// Vectors are computed on the first semantic query, not at reconcile, so a tree can have a\n// semantic-on preset with nothing embedded yet -- reported here because a fast `rebuild` on\n// such a tree otherwise reads as \"the feature isn't on\".\nfunction vectorState(db: ReturnType<typeof open>['db']): { embedded: number; pending: number } | null {\n try {\n const row = db.prepare('SELECT COUNT(vector) AS embedded, COUNT(*) - COUNT(vector) AS pending FROM embeddings').get() as { embedded: number; pending: number };\n return row;\n } catch {\n return null;\n }\n}\n\nconst status: Command = (ctx) => {\n const cfg = ctx.resolveConfig();\n const { db, dbPath, warnings } = open(cfg);\n printWarnings(warnings);\n\n const features = featureStates(cfg);\n const e = embedConfig(cfg);\n const vectors = e ? vectorState(db) : null;\n const presets = presetCoverage(db, cfg);\n const heartbeat = getMeta(db, 'watch_heartbeat');\n // Derived at open() (F): 3x the largest reconcile this cache has ever held its write\n // transaction for, floored at 30s -- read back from the connection rather than\n // recomputed here, so this always reports what open() actually set.\n const busyTimeoutMs = (db.prepare('PRAGMA busy_timeout').get() as { timeout: number }).timeout;\n const result = {\n db: dbPath,\n docs: docCount(db),\n features: features.on,\n featuresOff: features.off,\n embed: e ? { type: e.type, model: e.model, ...(vectors ?? {}) } : null,\n presets,\n watcherHeartbeatSecondsAgo: heartbeat ? Math.round((Date.now() - Date.parse(heartbeat)) / 1000) : null,\n busyTimeoutMs,\n };\n\n if (
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/status.ts"],"sourcesContent":["import { presetCoverage } from '../commands.ts';\nimport { embedConfig, featureStates } from '../config.ts';\nimport { docCount, getMeta, open } from '../db.ts';\nimport { featuresLine, presetsLines } from '../output.ts';\nimport { USAGE } from './index.ts';\nimport { CONFIG, FORMAT, formatOf, parse, printWarnings } from './shared.ts';\nimport type { Command } from './types.ts';\n\n// Vectors are computed on the first semantic query, not at reconcile, so a tree can have a\n// semantic-on preset with nothing embedded yet -- reported here because a fast `rebuild` on\n// such a tree otherwise reads as \"the feature isn't on\".\nfunction vectorState(db: ReturnType<typeof open>['db']): { embedded: number; pending: number } | null {\n try {\n const row = db.prepare('SELECT COUNT(vector) AS embedded, COUNT(*) - COUNT(vector) AS pending FROM embeddings').get() as { embedded: number; pending: number };\n return row;\n } catch {\n return null;\n }\n}\n\nconst status: Command = (ctx) => {\n const { values } = parse(ctx.argv, `usage: ${ctx.name} ${USAGE.status}`, { ...FORMAT, ...CONFIG });\n const format = formatOf(values);\n const cfg = ctx.resolveConfig(values.config as string | undefined);\n const { db, dbPath, warnings } = open(cfg);\n printWarnings(warnings);\n\n const features = featureStates(cfg);\n const e = embedConfig(cfg);\n const vectors = e ? vectorState(db) : null;\n const presets = presetCoverage(db, cfg);\n const heartbeat = getMeta(db, 'watch_heartbeat');\n // Derived at open() (F): 3x the largest reconcile this cache has ever held its write\n // transaction for, floored at 30s -- read back from the connection rather than\n // recomputed here, so this always reports what open() actually set.\n const busyTimeoutMs = (db.prepare('PRAGMA busy_timeout').get() as { timeout: number }).timeout;\n const result = {\n db: dbPath,\n docs: docCount(db),\n features: features.on,\n featuresOff: features.off,\n embed: e ? { type: e.type, model: e.model, ...(vectors ?? {}) } : null,\n presets,\n watcherHeartbeatSecondsAgo: heartbeat ? Math.round((Date.now() - Date.parse(heartbeat)) / 1000) : null,\n busyTimeoutMs,\n };\n\n if (format === 'json') {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(`db: ${result.db}`);\n console.log(`docs: ${result.docs}`);\n console.log(featuresLine(features));\n if (e) console.log(`embed: ${e.type} ${e.model}${vectors ? ` (vectors: ${vectors.embedded} embedded, ${vectors.pending} pending — embedded on the first semantic search)` : ''}`);\n for (const line of presetsLines(presets)) console.log(line);\n console.log(result.watcherHeartbeatSecondsAgo === null ? 'watcher: no watcher' : `watcher: last heartbeat ${result.watcherHeartbeatSecondsAgo}s ago`);\n console.log(`busy_timeout: ${result.busyTimeoutMs}ms (derived: 3x the largest reconcile this cache has recorded, floored at 30000ms)`);\n }\n db.close();\n};\nexport default status;\n"],"names":["vectorState","db","row","prepare","get","status","ctx","values","parse","argv","USAGE","name","FORMAT","CONFIG","format","formatOf","cfg","resolveConfig","config","open","dbPath","warnings","printWarnings","features","featureStates","e","embedConfig","vectors","presets","presetCoverage","heartbeat","getMeta","busyTimeoutMs","timeout","result","docs","docCount","on","featuresOff","off","embed","type","model","watcherHeartbeatSecondsAgo","Math","round","Date","now","console","log","JSON","stringify","featuresLine","embedded","pending","presetsLines","line","close"],"mappings":"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"}
|
package/dist/cjs/cli/types.d.cts
CHANGED
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
import type { ResolvedConfig } from '../config.js';
|
|
2
2
|
export interface Ctx {
|
|
3
3
|
name: string;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
values: {
|
|
7
|
-
config?: string;
|
|
8
|
-
where?: string;
|
|
9
|
-
k?: string;
|
|
10
|
-
preset?: string;
|
|
11
|
-
include?: string[];
|
|
12
|
-
force: boolean;
|
|
13
|
-
lexical: boolean;
|
|
14
|
-
};
|
|
15
|
-
resolveConfig(): ResolvedConfig;
|
|
4
|
+
argv: string[];
|
|
5
|
+
resolveConfig(configPath?: string): ResolvedConfig;
|
|
16
6
|
usageError(message: string): never;
|
|
17
7
|
}
|
|
18
8
|
export type Command = (ctx: Ctx) => Promise<void> | void;
|
package/dist/cjs/cli/types.d.ts
CHANGED
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
import type { ResolvedConfig } from '../config.js';
|
|
2
2
|
export interface Ctx {
|
|
3
3
|
name: string;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
values: {
|
|
7
|
-
config?: string;
|
|
8
|
-
where?: string;
|
|
9
|
-
k?: string;
|
|
10
|
-
preset?: string;
|
|
11
|
-
include?: string[];
|
|
12
|
-
force: boolean;
|
|
13
|
-
lexical: boolean;
|
|
14
|
-
};
|
|
15
|
-
resolveConfig(): ResolvedConfig;
|
|
4
|
+
argv: string[];
|
|
5
|
+
resolveConfig(configPath?: string): ResolvedConfig;
|
|
16
6
|
usageError(message: string): never;
|
|
17
7
|
}
|
|
18
8
|
export type Command = (ctx: Ctx) => Promise<void> | void;
|
package/dist/cjs/cli/watch.js
CHANGED
|
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "default", {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
var _watchts = require("../watch.js");
|
|
12
|
+
var _indexts = require("./index.js");
|
|
12
13
|
var _sharedts = require("./shared.js");
|
|
13
14
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
14
15
|
try {
|
|
@@ -39,6 +40,34 @@ function _async_to_generator(fn) {
|
|
|
39
40
|
});
|
|
40
41
|
};
|
|
41
42
|
}
|
|
43
|
+
function _define_property(obj, key, value) {
|
|
44
|
+
if (key in obj) {
|
|
45
|
+
Object.defineProperty(obj, key, {
|
|
46
|
+
value: value,
|
|
47
|
+
enumerable: true,
|
|
48
|
+
configurable: true,
|
|
49
|
+
writable: true
|
|
50
|
+
});
|
|
51
|
+
} else {
|
|
52
|
+
obj[key] = value;
|
|
53
|
+
}
|
|
54
|
+
return obj;
|
|
55
|
+
}
|
|
56
|
+
function _object_spread(target) {
|
|
57
|
+
for(var i = 1; i < arguments.length; i++){
|
|
58
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
59
|
+
var ownKeys = Object.keys(source);
|
|
60
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
61
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
62
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
ownKeys.forEach(function(key) {
|
|
66
|
+
_define_property(target, key, source[key]);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return target;
|
|
70
|
+
}
|
|
42
71
|
function _ts_generator(thisArg, body) {
|
|
43
72
|
var f, y, t, _ = {
|
|
44
73
|
label: 0,
|
|
@@ -140,13 +169,20 @@ function _ts_generator(thisArg, body) {
|
|
|
140
169
|
}
|
|
141
170
|
var watch = function watch(ctx) {
|
|
142
171
|
return _async_to_generator(function() {
|
|
172
|
+
var values;
|
|
143
173
|
return _ts_generator(this, function(_state) {
|
|
144
174
|
switch(_state.label){
|
|
145
175
|
case 0:
|
|
176
|
+
values = (0, _sharedts.parse)(ctx.argv, "usage: ".concat(ctx.name, " ").concat(_indexts.USAGE.watch), _object_spread({
|
|
177
|
+
force: {
|
|
178
|
+
type: 'boolean',
|
|
179
|
+
default: false
|
|
180
|
+
}
|
|
181
|
+
}, _sharedts.CONFIG)).values;
|
|
146
182
|
return [
|
|
147
183
|
4,
|
|
148
|
-
(0, _watchts.runWatch)(ctx.resolveConfig(), {
|
|
149
|
-
force:
|
|
184
|
+
(0, _watchts.runWatch)(ctx.resolveConfig(values.config), {
|
|
185
|
+
force: values.force,
|
|
150
186
|
onEvent: function onEvent(event) {
|
|
151
187
|
if (event.type === 'started') {
|
|
152
188
|
console.log("".concat(ctx.name, " watch: watching ").concat(event.baseDir));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/watch.ts"],"sourcesContent":["import type { WatchEvent } from '../watch.ts';\nimport { runWatch } from '../watch.ts';\nimport { printWarnings } from './shared.ts';\nimport type { Command } from './types.ts';\n\nconst watch: Command = async (ctx) => {\n await runWatch(ctx.resolveConfig(), {\n force:
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/ai/sensemaking/src/cli/watch.ts"],"sourcesContent":["import type { WatchEvent } from '../watch.ts';\nimport { runWatch } from '../watch.ts';\nimport { USAGE } from './index.ts';\nimport { CONFIG, parse, printWarnings } from './shared.ts';\nimport type { Command } from './types.ts';\n\nconst watch: Command = async (ctx) => {\n const { values } = parse(ctx.argv, `usage: ${ctx.name} ${USAGE.watch}`, { force: { type: 'boolean', default: false }, ...CONFIG });\n await runWatch(ctx.resolveConfig(values.config as string | undefined), {\n force: values.force as boolean,\n onEvent: (event: WatchEvent) => {\n if (event.type === 'started') {\n console.log(`${ctx.name} watch: watching ${event.baseDir}`);\n console.log(`${ctx.name} watch: db ${event.dbPath}`);\n } else if (event.type === 'reconciled') {\n printWarnings(event.warnings);\n if (event.parsed > 0) console.log(`${ctx.name} watch: reconciled, ${event.parsed} file(s) reparsed (${event.total} total)`);\n } else {\n console.error(`${ctx.name} watch: reconcile error: ${event.message}`);\n }\n },\n });\n};\nexport default watch;\n"],"names":["watch","ctx","values","parse","argv","USAGE","name","force","type","default","CONFIG","runWatch","resolveConfig","config","onEvent","event","console","log","baseDir","dbPath","printWarnings","warnings","parsed","total","error","message"],"mappings":";;;;+BAuBA;;;eAAA;;;uBAtByB;uBACH;wBACuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAG7C,IAAMA,QAAiB,eAAOC;;YACpBC;;;;oBAAAA,SAAWC,IAAAA,eAAK,EAACF,IAAIG,IAAI,EAAE,AAAC,UAAqBC,OAAZJ,IAAIK,IAAI,EAAC,KAAe,OAAZD,cAAK,CAACL,KAAK,GAAI;wBAAEO,OAAO;4BAAEC,MAAM;4BAAWC,SAAS;wBAAM;uBAAMC,gBAAM,GAAvHR;oBACR;;wBAAMS,IAAAA,iBAAQ,EAACV,IAAIW,aAAa,CAACV,OAAOW,MAAM,GAAyB;4BACrEN,OAAOL,OAAOK,KAAK;4BACnBO,SAAS,SAATA,QAAUC;gCACR,IAAIA,MAAMP,IAAI,KAAK,WAAW;oCAC5BQ,QAAQC,GAAG,CAAC,AAAC,GAA8BF,OAA5Bd,IAAIK,IAAI,EAAC,qBAAiC,OAAdS,MAAMG,OAAO;oCACxDF,QAAQC,GAAG,CAAC,AAAC,GAAwBF,OAAtBd,IAAIK,IAAI,EAAC,eAA0B,OAAbS,MAAMI,MAAM;gCACnD,OAAO,IAAIJ,MAAMP,IAAI,KAAK,cAAc;oCACtCY,IAAAA,uBAAa,EAACL,MAAMM,QAAQ;oCAC5B,IAAIN,MAAMO,MAAM,GAAG,GAAGN,QAAQC,GAAG,CAAC,AAAC,GAAiCF,OAA/Bd,IAAIK,IAAI,EAAC,wBAAwDS,OAAlCA,MAAMO,MAAM,EAAC,uBAAiC,OAAZP,MAAMQ,KAAK,EAAC;gCACpH,OAAO;oCACLP,QAAQQ,KAAK,CAAC,AAAC,GAAsCT,OAApCd,IAAIK,IAAI,EAAC,6BAAyC,OAAdS,MAAMU,OAAO;gCACpE;4BACF;wBACF;;;oBAbA;;;;;;IAcF;;IACA,WAAezB"}
|