greprag 5.18.0 → 5.19.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 (56) hide show
  1. package/dist/commands/corpus/client.d.ts +58 -0
  2. package/dist/commands/corpus/client.js +182 -0
  3. package/dist/commands/corpus/client.js.map +1 -0
  4. package/dist/commands/corpus/index.d.ts +23 -0
  5. package/dist/commands/corpus/index.js +109 -0
  6. package/dist/commands/corpus/index.js.map +1 -0
  7. package/dist/commands/corpus/manage.d.ts +6 -0
  8. package/dist/commands/corpus/manage.js +49 -0
  9. package/dist/commands/corpus/manage.js.map +1 -0
  10. package/dist/commands/corpus/refresh.d.ts +11 -0
  11. package/dist/commands/corpus/refresh.js +117 -0
  12. package/dist/commands/corpus/refresh.js.map +1 -0
  13. package/dist/commands/corpus/search.d.ts +6 -0
  14. package/dist/commands/corpus/search.js +110 -0
  15. package/dist/commands/corpus/search.js.map +1 -0
  16. package/dist/commands/corpus/section.d.ts +5 -0
  17. package/dist/commands/corpus/section.js +35 -0
  18. package/dist/commands/corpus/section.js.map +1 -0
  19. package/dist/commands/corpus/source.d.ts +15 -0
  20. package/dist/commands/corpus/source.js +119 -0
  21. package/dist/commands/corpus/source.js.map +1 -0
  22. package/dist/commands/corpus/status.d.ts +5 -0
  23. package/dist/commands/corpus/status.js +47 -0
  24. package/dist/commands/corpus/status.js.map +1 -0
  25. package/dist/commands/corpus/upload.d.ts +7 -0
  26. package/dist/commands/corpus/upload.js +101 -0
  27. package/dist/commands/corpus/upload.js.map +1 -0
  28. package/dist/commands/corpus/walk.d.ts +5 -0
  29. package/dist/commands/corpus/walk.js +41 -0
  30. package/dist/commands/corpus/walk.js.map +1 -0
  31. package/dist/commands/session.d.ts +8 -0
  32. package/dist/commands/session.js +132 -0
  33. package/dist/commands/session.js.map +1 -0
  34. package/dist/hook.js +9 -2
  35. package/dist/hook.js.map +1 -1
  36. package/dist/index.js +8 -3
  37. package/dist/index.js.map +1 -1
  38. package/package.json +1 -1
  39. package/dist/commands/corpus.d.ts +0 -18
  40. package/dist/commands/corpus.js +0 -617
  41. package/dist/commands/corpus.js.map +0 -1
  42. package/dist/commands/fact.d.ts +0 -22
  43. package/dist/commands/fact.js +0 -337
  44. package/dist/commands/fact.js.map +0 -1
  45. package/dist/commands/inbox-watch-supervisor.d.ts +0 -31
  46. package/dist/commands/inbox-watch-supervisor.js +0 -173
  47. package/dist/commands/inbox-watch-supervisor.js.map +0 -1
  48. package/dist/commands/inbox-watch-util.d.ts +0 -5
  49. package/dist/commands/inbox-watch-util.js +0 -13
  50. package/dist/commands/inbox-watch-util.js.map +0 -1
  51. package/dist/commands/odyssey.d.ts +0 -27
  52. package/dist/commands/odyssey.js +0 -394
  53. package/dist/commands/odyssey.js.map +0 -1
  54. package/dist/inbox-notify.d.ts +0 -60
  55. package/dist/inbox-notify.js +0 -229
  56. package/dist/inbox-notify.js.map +0 -1
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ /** greprag corpus search — single-store and multistore lexical retrieval.
3
+ *
4
+ * Single-store: positional <store> + query. Multistore (--all / --store / --kind):
5
+ * RRF-fused via /v1/search, hits labeled by store. The agent owns query
6
+ * formulation (websearch_to_tsquery syntax); no server-side LLM. */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.searchCmd = searchCmd;
9
+ const client_1 = require("./client");
10
+ const SEARCH_VALUE_FLAGS = new Set(['--limit', '--section', '--shape', '--store', '--kind']);
11
+ async function searchCmd(args) {
12
+ const cfg = (0, client_1.getConfig)();
13
+ if (!cfg.apiKey)
14
+ (0, client_1.abortNotConfigured)();
15
+ const all = args.includes('--all');
16
+ const storeFlags = (0, client_1.getFlags)(args, '--store');
17
+ const kind = (0, client_1.getFlag)(args, '--kind');
18
+ const multistore = all || storeFlags.length > 0 || !!kind;
19
+ const limit = parseInt((0, client_1.getFlag)(args, '--limit') || (multistore ? '8' : '5'), 10);
20
+ const section = (0, client_1.getFlag)(args, '--section');
21
+ const shape = (0, client_1.getFlag)(args, '--shape');
22
+ const positionals = (0, client_1.extractPositionals)(args, SEARCH_VALUE_FLAGS);
23
+ // Multistore: --all (every tenant store) or one/more --store <ref>. The lone
24
+ // positional is the query (no positional store in this mode).
25
+ if (multistore) {
26
+ const queryText = positionals[0];
27
+ if (!queryText) {
28
+ console.error('Usage: greprag corpus search "<lexical query>" (--all | --store <ref> [--store <ref>]...) [--kind K] [--limit 8] [--section "<heading>"]');
29
+ process.exit(1);
30
+ }
31
+ let storeIds;
32
+ if (storeFlags.length > 0) {
33
+ storeIds = [];
34
+ for (const ref of storeFlags)
35
+ storeIds.push((await (0, client_1.resolveStore)(ref, cfg.apiUrl, cfg.apiKey)).id);
36
+ }
37
+ else if (kind) {
38
+ const list = await (0, client_1.apiGet)(`${cfg.apiUrl}/v1/stores?kind=${encodeURIComponent(kind)}`, cfg.apiKey);
39
+ storeIds = list.stores.map(s => s.id);
40
+ if (storeIds.length === 0) {
41
+ console.error(`No stores with kind="${kind}".`);
42
+ process.exit(1);
43
+ }
44
+ }
45
+ // else: storeIds undefined → search every store under the tenant.
46
+ await runMultiSearch(cfg, queryText, storeIds, limit, section);
47
+ return;
48
+ }
49
+ // Single-store: positional store + query.
50
+ const storeRef = positionals[0];
51
+ const queryText = positionals[1];
52
+ if (!storeRef || !queryText) {
53
+ console.error('Usage: greprag corpus search <storeIdOrName> "<lexical query>" [--limit 5] [--section "<heading>"] [--shape dialogue]\n or: greprag corpus search "<query>" --all | --store <ref>... (multistore)');
54
+ process.exit(1);
55
+ }
56
+ const store = await (0, client_1.resolveStore)(storeRef, cfg.apiUrl, cfg.apiKey);
57
+ const filters = {};
58
+ if (section)
59
+ filters.section = section;
60
+ if (shape)
61
+ filters.shape = shape;
62
+ const t0 = Date.now();
63
+ const result = await (0, client_1.apiCall)(`${cfg.apiUrl}/v1/stores/${store.id}/query`, cfg.apiKey, {
64
+ query: queryText, limit,
65
+ ...(Object.keys(filters).length > 0 ? { filters } : {}),
66
+ });
67
+ if (!result.ok || !result.nodes)
68
+ throw new Error(result.error || 'query failed');
69
+ const ms = Date.now() - t0;
70
+ console.log(`\n${store.name} (${store.kind}, ${store.nodeCount} nodes) ← "${queryText}"`);
71
+ console.log(` ${result.nodes.length} hits in ${ms}ms (server ${result.latencyMs ?? '?'}ms)\n`);
72
+ for (const n of result.nodes) {
73
+ const heading = n.headingPath?.length ? ` · ${n.headingPath.join(' / ')}` : '';
74
+ const snippet = n.content.length > 280 ? n.content.slice(0, 277) + '...' : n.content;
75
+ console.log(` [${n.nodeId}] score=${n.score.toFixed(3)} pos=${n.position}${heading}`);
76
+ console.log(` ${snippet.replace(/\n/g, ' ')}\n`);
77
+ }
78
+ if (result.nodes[0]) {
79
+ console.log(`Walk: greprag corpus walk ${JSON.stringify(store.name)} ${result.nodes[0].nodeId}`);
80
+ }
81
+ }
82
+ /** Cross-store search via POST /v1/search. storeIds omitted = all tenant stores;
83
+ * RRF fuses across (store × query). Hits are labeled with their store name. */
84
+ async function runMultiSearch(cfg, queryText, storeIds, limit, section) {
85
+ const list = await (0, client_1.apiGet)(`${cfg.apiUrl}/v1/stores`, cfg.apiKey);
86
+ const nameById = new Map(list.stores.map(s => [s.id, s.name]));
87
+ const body = {
88
+ queries: [queryText], limit, adjacencyWindow: 3, adjacencyAlpha: 0.3,
89
+ };
90
+ if (storeIds)
91
+ body.storeIds = storeIds;
92
+ if (section)
93
+ body.filters = { section };
94
+ const t0 = Date.now();
95
+ const result = await (0, client_1.apiCall)(`${cfg.apiUrl}/v1/search`, cfg.apiKey, body);
96
+ if (!result.ok || !result.nodes)
97
+ throw new Error(result.error || 'search failed');
98
+ const ms = Date.now() - t0;
99
+ const scope = storeIds ? `${storeIds.length} store${storeIds.length === 1 ? '' : 's'}` : 'all stores';
100
+ console.log(`\nMultistore search (${scope}) ← "${queryText}"`);
101
+ console.log(` ${result.nodes.length} hits in ${ms}ms\n`);
102
+ for (const n of result.nodes) {
103
+ const store = nameById.get(n.storeId) || n.storeId.slice(0, 8);
104
+ const heading = n.headingPath?.length ? ` · ${n.headingPath.join(' / ')}` : '';
105
+ const snippet = n.content.length > 240 ? n.content.slice(0, 237) + '...' : n.content;
106
+ console.log(` [${store} · ${n.nodeId}] score=${n.score.toFixed(3)}${heading}`);
107
+ console.log(` ${snippet.replace(/\n/g, ' ')}\n`);
108
+ }
109
+ }
110
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/corpus/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** greprag corpus section — every node under a heading prefix.
2
+ *
3
+ * Forgiving match: any depth, case-/dash-insensitive, leaf prefix. Resolved
4
+ * server-side against the heading path stored on each node. */
5
+ export declare function sectionCmd(args: string[]): Promise<void>;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ /** greprag corpus section — every node under a heading prefix.
3
+ *
4
+ * Forgiving match: any depth, case-/dash-insensitive, leaf prefix. Resolved
5
+ * server-side against the heading path stored on each node. */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.sectionCmd = sectionCmd;
8
+ const client_1 = require("./client");
9
+ async function sectionCmd(args) {
10
+ const cfg = (0, client_1.getConfig)();
11
+ if (!cfg.apiKey)
12
+ (0, client_1.abortNotConfigured)();
13
+ const storeRef = args[0];
14
+ const headingPath = args[1];
15
+ if (!storeRef || !headingPath) {
16
+ console.error('Usage: greprag corpus section <storeIdOrName> "<heading>"\n e.g. greprag corpus section "Scientific Advertising" "Chapter 7"\n Forgiving match: any depth, case-/dash-insensitive, leaf prefix.');
17
+ process.exit(1);
18
+ }
19
+ const store = await (0, client_1.resolveStore)(storeRef, cfg.apiUrl, cfg.apiKey);
20
+ const url = `${cfg.apiUrl}/v1/stores/${store.id}/section?path=${encodeURIComponent(headingPath)}`;
21
+ const res = await (0, client_1.apiGet)(url, cfg.apiKey);
22
+ if (!res.ok || !res.nodes)
23
+ throw new Error(res.error || 'section failed');
24
+ console.log(`\n${store.name} · section "${headingPath}" — ${res.nodes.length} node${res.nodes.length === 1 ? '' : 's'}\n`);
25
+ for (const n of res.nodes) {
26
+ const heading = n.headingPath?.length ? ` · ${n.headingPath.join(' / ')}` : '';
27
+ const snippet = n.content.length > 200 ? n.content.slice(0, 197) + '...' : n.content;
28
+ console.log(` [${n.nodeId}] pos=${n.position}${heading}`);
29
+ console.log(` ${snippet.replace(/\n/g, ' ')}\n`);
30
+ }
31
+ if (res.nodes.length === 0) {
32
+ console.log('No nodes under that heading. Check a hit\'s headingPath from `corpus search`, or broaden the heading.');
33
+ }
34
+ }
35
+ //# sourceMappingURL=section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section.js","sourceRoot":"","sources":["../../../src/commands/corpus/section.ts"],"names":[],"mappings":";AAAA;;;gEAGgE;;AAOhE,gCA0BC;AA/BD,qCAGkB;AAEX,KAAK,UAAU,UAAU,CAAC,IAAc;IAC7C,MAAM,GAAG,GAAG,IAAA,kBAAS,GAAE,CAAC;IACxB,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,IAAA,2BAAkB,GAAE,CAAC;IAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,mMAAmM,CAAC,CAAC;QACnN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,IAAA,qBAAY,EAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAEnE,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,cAAc,KAAK,CAAC,EAAE,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;IAClG,MAAM,GAAG,GAAG,MAAM,IAAA,eAAM,EAAgF,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzH,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,gBAAgB,CAAC,CAAC;IAE1E,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,eAAe,WAAW,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3H,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC,QAAQ,GAAG,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,uGAAuG,CAAC,CAAC;IACvH,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ /** greprag corpus — source loading + format routing.
2
+ *
3
+ * Decides whether a file/URL passes through as Markdown/text or ships raw bytes
4
+ * for the Worker to convert server-side. The extension sets here MIRROR
5
+ * packages/api/src/lib/convert.ts — keep the three sets in sync. */
6
+ export interface LoadedSource {
7
+ mode: 'markdown' | 'convert';
8
+ text?: string;
9
+ base64?: string;
10
+ format: string;
11
+ filename: string;
12
+ defaultName: string;
13
+ byteLength: number;
14
+ }
15
+ export declare function readSource(source: string): Promise<LoadedSource>;
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ /** greprag corpus — source loading + format routing.
3
+ *
4
+ * Decides whether a file/URL passes through as Markdown/text or ships raw bytes
5
+ * for the Worker to convert server-side. The extension sets here MIRROR
6
+ * packages/api/src/lib/convert.ts — keep the three sets in sync. */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.readSource = readSource;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const client_1 = require("./client");
45
+ // Formats the Worker converts server-side (sent as base64 bytes). Everything
46
+ // else — markdown, plain text, source code, unknown/extensionless — ships as
47
+ // UTF-8 text and passes through unchanged. Deferred formats fail loud here.
48
+ // MIRRORS packages/api/src/lib/convert.ts — keep the three sets in sync.
49
+ const CONVERT_EXT = new Set([
50
+ 'html', 'htm', 'pdf', 'docx', 'xlsx', 'xls', 'xlsm', 'xlsb', 'csv', 'ods', 'odt',
51
+ ]);
52
+ // pptx / ppt / odp convert server-side via officeparser (## Slide N + notes).
53
+ const OFFICEPARSER_EXT = new Set(['pptx', 'ppt', 'odp']);
54
+ const DEFERRED_EXT = new Set(['png', 'jpg', 'jpeg', 'webp', 'svg', 'gif']);
55
+ const MIME_TO_EXT = {
56
+ 'text/html': 'html',
57
+ 'text/csv': 'csv',
58
+ 'text/plain': 'txt',
59
+ 'text/markdown': 'md',
60
+ 'application/pdf': 'pdf',
61
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',
62
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'xlsx',
63
+ 'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'pptx',
64
+ 'application/vnd.oasis.opendocument.presentation': 'odp',
65
+ };
66
+ function extOf(name) {
67
+ const m = name.toLowerCase().match(/\.([a-z0-9]+)$/);
68
+ return m ? m[1] : '';
69
+ }
70
+ async function readSource(source) {
71
+ let bytes;
72
+ let filename;
73
+ let ext;
74
+ if ((0, client_1.isUrl)(source)) {
75
+ const res = await fetch(source);
76
+ if (!res.ok)
77
+ throw new Error(`fetch ${source}: HTTP ${res.status}`);
78
+ bytes = new Uint8Array(await res.arrayBuffer());
79
+ const u = new URL(source);
80
+ filename = path.basename(u.pathname) || u.hostname;
81
+ ext = extOf(u.pathname)
82
+ || MIME_TO_EXT[(res.headers.get('content-type') || '').split(';')[0].trim()]
83
+ || 'html';
84
+ }
85
+ else {
86
+ const abs = path.resolve(source);
87
+ if (!fs.existsSync(abs))
88
+ throw new Error(`file not found: ${abs}`);
89
+ bytes = new Uint8Array(fs.readFileSync(abs));
90
+ filename = path.basename(abs);
91
+ ext = extOf(abs);
92
+ }
93
+ const defaultName = filename.replace(/\.[a-z0-9]+$/i, '') || filename;
94
+ if (DEFERRED_EXT.has(ext)) {
95
+ throw new Error(`"${ext}" files aren't supported yet. Supported: text / markdown / code, and ` +
96
+ `${[...CONVERT_EXT, ...OFFICEPARSER_EXT].sort().join(', ')}. ` +
97
+ `Images need OCR (gated) — see docs/corpus-converter-completion.md.`);
98
+ }
99
+ if (CONVERT_EXT.has(ext) || OFFICEPARSER_EXT.has(ext)) {
100
+ return {
101
+ mode: 'convert',
102
+ base64: Buffer.from(bytes).toString('base64'),
103
+ format: ext,
104
+ filename: extOf(filename) ? filename : `${filename}.${ext}`,
105
+ defaultName,
106
+ byteLength: bytes.length,
107
+ };
108
+ }
109
+ // Passthrough: markdown, plain text, source code, unknown/extensionless.
110
+ return {
111
+ mode: 'markdown',
112
+ text: new TextDecoder().decode(bytes),
113
+ format: ext || 'txt',
114
+ filename,
115
+ defaultName,
116
+ byteLength: bytes.length,
117
+ };
118
+ }
119
+ //# sourceMappingURL=source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/commands/corpus/source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** greprag corpus status — write-side enrichment progress for a store.
2
+ *
3
+ * Renders the per-node vocabulary-bridge drainer state (completed / pending /
4
+ * in-progress / failed) as a progress bar. The drainer runs every 2 minutes. */
5
+ export declare function statusCmd(args: string[]): Promise<void>;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ /** greprag corpus status — write-side enrichment progress for a store.
3
+ *
4
+ * Renders the per-node vocabulary-bridge drainer state (completed / pending /
5
+ * in-progress / failed) as a progress bar. The drainer runs every 2 minutes. */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.statusCmd = statusCmd;
8
+ const client_1 = require("./client");
9
+ async function statusCmd(args) {
10
+ const cfg = (0, client_1.getConfig)();
11
+ if (!cfg.apiKey)
12
+ (0, client_1.abortNotConfigured)();
13
+ const ref = args[0];
14
+ if (!ref) {
15
+ console.error('Usage: greprag corpus status <storeIdOrName>');
16
+ process.exit(1);
17
+ }
18
+ const store = await (0, client_1.resolveStore)(ref, cfg.apiUrl, cfg.apiKey);
19
+ const res = await (0, client_1.apiGet)(`${cfg.apiUrl}/v1/stores/${store.id}/enrichment`, cfg.apiKey);
20
+ if (!res.ok || !res.status)
21
+ throw new Error(res.error || 'status failed');
22
+ const s = res.status;
23
+ const pct = s.total > 0 ? Math.round((s.completed / s.total) * 100) : 0;
24
+ const barWidth = 30;
25
+ const filled = Math.round((pct / 100) * barWidth);
26
+ const bar = '█'.repeat(filled) + '░'.repeat(barWidth - filled);
27
+ console.log(`\n${store.name} · ${store.nodeCount} nodes · ${store.kind}`);
28
+ console.log(`\n Enrichment: [${bar}] ${pct}%`);
29
+ console.log(` Completed: ${s.completed.toLocaleString().padStart(6)} / ${s.total.toLocaleString()}`);
30
+ if (s.pending > 0)
31
+ console.log(` Pending: ${s.pending.toLocaleString().padStart(6)}`);
32
+ if (s.in_progress > 0)
33
+ console.log(` In progress: ${s.in_progress.toLocaleString().padStart(6)}`);
34
+ if (s.failed > 0)
35
+ console.log(` Failed: ${s.failed.toLocaleString().padStart(6)} (after ${5} attempts — won't retry)`);
36
+ if (res.enrichmentNotifiedAt) {
37
+ console.log(` Last notify: ${res.enrichmentNotifiedAt}`);
38
+ }
39
+ console.log('');
40
+ if (s.pending > 0 || s.in_progress > 0) {
41
+ console.log('Drainer runs every 2 minutes. Re-run this command to watch progress.\n');
42
+ }
43
+ else if (s.completed > 0) {
44
+ console.log(`Ready. Try: greprag corpus search ${JSON.stringify(store.name)} "<your question>"\n`);
45
+ }
46
+ }
47
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/corpus/status.ts"],"names":[],"mappings":";AAAA;;;iFAGiF;;AAMjF,8BAwCC;AA5CD,qCAEkB;AAEX,KAAK,UAAU,SAAS,CAAC,IAAc;IAC5C,MAAM,GAAG,GAAG,IAAA,kBAAS,GAAE,CAAC;IACxB,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,IAAA,2BAAkB,GAAE,CAAC;IAEtC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,IAAA,qBAAY,EAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAE9D,MAAM,GAAG,GAAG,MAAM,IAAA,eAAM,EAKrB,GAAG,GAAG,CAAC,MAAM,cAAc,KAAK,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC;IAE1E,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IACrB,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;IAE/D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,SAAS,YAAY,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACxG,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC;QAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/F,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACnG,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;QAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;IACnI,IAAI,GAAG,CAAC,oBAAoB,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACxF,CAAC;SAAM,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,qCAAqC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACrG,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** greprag corpus upload — create a store and ingest a source.
2
+ *
3
+ * Text/markdown/code pass through; html/pdf/docx/xlsx/csv/pptx convert
4
+ * server-side. A source URL can register for the freshness loop via --refresh;
5
+ * the server persists the StoreRefreshState and the cron / `corpus refresh`
6
+ * re-fetch it. Local files are not refreshable. */
7
+ export declare function uploadCmd(args: string[]): Promise<void>;
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ /** greprag corpus upload — create a store and ingest a source.
3
+ *
4
+ * Text/markdown/code pass through; html/pdf/docx/xlsx/csv/pptx convert
5
+ * server-side. A source URL can register for the freshness loop via --refresh;
6
+ * the server persists the StoreRefreshState and the cron / `corpus refresh`
7
+ * re-fetch it. Local files are not refreshable. */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.uploadCmd = uploadCmd;
10
+ const client_1 = require("./client");
11
+ const source_1 = require("./source");
12
+ // Valid --refresh values. MIRRORS REFRESH_POLICIES / DEFAULT_REFRESH_POLICY in
13
+ // packages/core/src/corpus-refresh.ts — the CLI ships zero runtime deps so it
14
+ // can't import the constant; keep in sync. 'manual' = only on explicit
15
+ // `corpus refresh`; 'off' (default) = a one-shot ingest, no background work.
16
+ const REFRESH_POLICIES = ['hourly', 'daily', 'manual', 'off'];
17
+ const DEFAULT_REFRESH_POLICY = 'off';
18
+ async function uploadCmd(args) {
19
+ const cfg = (0, client_1.getConfig)();
20
+ if (!cfg.apiKey)
21
+ (0, client_1.abortNotConfigured)();
22
+ const source = args[0];
23
+ if (!source) {
24
+ console.error('Usage: greprag corpus upload <file|url> (--enriched | --raw) [--name N] [--kind K] [--refresh hourly|daily|manual|off]\n Formats: text / markdown / code pass through; html, pdf, docx, xlsx, csv, pptx convert server-side.');
25
+ process.exit(1);
26
+ }
27
+ const kindFlag = ((0, client_1.getFlag)(args, '--kind') || 'book');
28
+ if (!client_1.VALID_KINDS.includes(kindFlag)) {
29
+ console.error(`--kind must be one of: ${client_1.VALID_KINDS.join(', ')}`);
30
+ process.exit(1);
31
+ }
32
+ // Required, no default: the caller must declare the processing mode.
33
+ // Enrichment (per-node LLM vocabulary bridge) earns its cost only when
34
+ // there's a semantic gap between how someone asks and how the text is
35
+ // written — a judgment about the content that can't be inferred. Force it.
36
+ const wantsEnriched = args.includes('--enriched');
37
+ const wantsRaw = args.includes('--raw');
38
+ if (wantsEnriched === wantsRaw) { // neither, or both
39
+ console.error('Specify exactly one mode:\n' +
40
+ ' --enriched per-node LLM vocabulary bridge — prose, voice, memory (query wording differs from the text)\n' +
41
+ ' --raw chunk + lexical index only — docs, code, references (search terms already match the text)');
42
+ process.exit(1);
43
+ }
44
+ const enriched = wantsEnriched;
45
+ // Freshness registration (B7). --refresh validates against the policy set; the
46
+ // server persists where to re-fetch + how often. Only URLs are refreshable —
47
+ // a local file has no canonical source to poll, so warn and skip.
48
+ const refreshFlag = (0, client_1.getFlag)(args, '--refresh');
49
+ if (refreshFlag !== undefined && !REFRESH_POLICIES.includes(refreshFlag)) {
50
+ console.error(`--refresh must be one of: ${REFRESH_POLICIES.join(', ')}`);
51
+ process.exit(1);
52
+ }
53
+ const sourceIsUrl = (0, client_1.isUrl)(source);
54
+ if (refreshFlag !== undefined && !sourceIsUrl) {
55
+ console.warn(`Note: --refresh only applies to URLs — "${source}" is a local file, ingesting once (no refresh tracking).`);
56
+ }
57
+ const refreshPolicy = refreshFlag ?? DEFAULT_REFRESH_POLICY;
58
+ const loaded = await (0, source_1.readSource)(source);
59
+ const name = (0, client_1.getFlag)(args, '--name') || loaded.defaultName;
60
+ const sizeBit = loaded.mode === 'convert'
61
+ ? `${loaded.format}, ${(loaded.byteLength / 1024).toFixed(1)} KB → converting server-side`
62
+ : `${loaded.text.trim().split(/\s+/).length.toLocaleString()} words`;
63
+ console.log(`Uploading "${name}" (${kindFlag}, ${enriched ? 'enriched' : 'raw'}, ${sizeBit})...`);
64
+ // A URL source registers for refresh (policy defaults to 'off' = source
65
+ // recorded but not auto-refreshed). Local files don't.
66
+ const createBody = { name, kind: kindFlag, enriched, metadata: { source } };
67
+ if (sourceIsUrl)
68
+ createBody.refresh = { url: source, policy: refreshPolicy };
69
+ const create = await (0, client_1.apiCall)(`${cfg.apiUrl}/v1/stores`, cfg.apiKey, createBody);
70
+ if (!create.ok || !create.store)
71
+ throw new Error(create.error || 'create failed');
72
+ const store = create.store;
73
+ // Markdown/text passes through; convertible formats ship raw bytes for the
74
+ // Worker to turn into clean Markdown via env.AI.toMarkdown().
75
+ const ingestBody = loaded.mode === 'convert'
76
+ ? { source: { data: loaded.base64, format: loaded.format, filename: loaded.filename } }
77
+ : { markdown: loaded.text };
78
+ const ingest = await (0, client_1.apiCall)(`${cfg.apiUrl}/v1/stores/${store.id}/nodes`, cfg.apiKey, ingestBody);
79
+ if (!ingest.ok)
80
+ throw new Error(ingest.error || 'ingest failed');
81
+ console.log(`\n Store ID: ${store.id}`);
82
+ console.log(` Name: ${store.name}`);
83
+ console.log(` Kind: ${store.kind}`);
84
+ const insBits = [`${ingest.inserted ?? 0} nodes`];
85
+ if (ingest.fresh)
86
+ insBits.push(`${ingest.fresh} fresh`);
87
+ if (ingest.preserved)
88
+ insBits.push(`${ingest.preserved} preserved`);
89
+ if (ingest.removed?.length)
90
+ insBits.push(`${ingest.removed.length} removed`);
91
+ console.log(` Ingested: ${insBits.join(', ')}`);
92
+ console.log(` Words: ${ingest.totalWords?.toLocaleString() ?? '?'}`);
93
+ if (ingest.enrichmentQueued) {
94
+ console.log(` Enrich: ${ingest.enrichmentQueued} queued (GR5 phrase-aware)`);
95
+ }
96
+ if (sourceIsUrl && refreshPolicy !== 'off') {
97
+ console.log(` Refresh: ${refreshPolicy} — source tracked; check state with 'greprag corpus sources ${JSON.stringify(store.name)}'`);
98
+ }
99
+ console.log(`\nTry: greprag corpus search ${JSON.stringify(store.name)} "<lexical query>"`);
100
+ }
101
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/commands/corpus/upload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** greprag corpus walk — show a node and its positional neighbors.
2
+ *
3
+ * Two hops: resolve the anchor node by stable ID to learn its position, then
4
+ * expand a window around that position. The anchor is marked with a star. */
5
+ export declare function walkCmd(args: string[]): Promise<void>;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ /** greprag corpus walk — show a node and its positional neighbors.
3
+ *
4
+ * Two hops: resolve the anchor node by stable ID to learn its position, then
5
+ * expand a window around that position. The anchor is marked with a star. */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.walkCmd = walkCmd;
8
+ const client_1 = require("./client");
9
+ async function walkCmd(args) {
10
+ const cfg = (0, client_1.getConfig)();
11
+ if (!cfg.apiKey)
12
+ (0, client_1.abortNotConfigured)();
13
+ const storeRef = args[0];
14
+ const nodeId = args[1];
15
+ if (!storeRef || !nodeId) {
16
+ console.error('Usage: greprag corpus walk <storeIdOrName> <nodeId> [--before 2 --after 2]');
17
+ process.exit(1);
18
+ }
19
+ const before = parseInt((0, client_1.getFlag)(args, '--before') || '2', 10);
20
+ const after = parseInt((0, client_1.getFlag)(args, '--after') || '2', 10);
21
+ const store = await (0, client_1.resolveStore)(storeRef, cfg.apiUrl, cfg.apiKey);
22
+ // Step 1: fetch the anchor node to learn its position.
23
+ const anchorRes = await (0, client_1.apiGet)(`${cfg.apiUrl}/v1/stores/${store.id}/by-node-id/${nodeId}`, cfg.apiKey);
24
+ if (!anchorRes.ok || !anchorRes.node)
25
+ throw new Error(anchorRes.error || 'node not found');
26
+ const anchor = anchorRes.node;
27
+ // Step 2: expand around its position.
28
+ const win = await (0, client_1.apiGet)(`${cfg.apiUrl}/v1/stores/${store.id}/expand?center=${anchor.position}&before=${before}&after=${after}`, cfg.apiKey);
29
+ if (!win.ok || !win.nodes)
30
+ throw new Error(win.error || 'expand failed');
31
+ console.log(`\n${store.name} · walking ${nodeId} (pos ${anchor.position}, ±${before}/${after}):\n`);
32
+ for (const n of win.nodes) {
33
+ const isAnchor = n.nodeId === nodeId;
34
+ const marker = isAnchor ? '★' : ' ';
35
+ const heading = n.headingPath?.length ? ` · ${n.headingPath.join(' / ')}` : '';
36
+ const snippet = n.content.length > 320 ? n.content.slice(0, 317) + '...' : n.content;
37
+ console.log(` ${marker} [${n.nodeId}] pos=${n.position}${heading}`);
38
+ console.log(` ${snippet.replace(/\n/g, ' ')}\n`);
39
+ }
40
+ }
41
+ //# sourceMappingURL=walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../../src/commands/corpus/walk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /** greprag session — session registry operations.
2
+ *
3
+ * retitle <session-8hex> "<title>" — force-set a session's registry title,
4
+ * overriding the gpt-5.4-nano auto-title. Used by the multi-chip /chip-leader
5
+ * convention: a chip stamps its own label-aligned title ("Chip A — …") in
6
+ * Block 1 so the FleetView watcher list / Discord /switch line up with the
7
+ * leader's chip labels. Thin HTTP client over POST /v1/memory/title. */
8
+ export declare function runSession(args: string[]): Promise<void>;