sxng-cli 1.2.3 → 1.2.4

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 (82) hide show
  1. package/README.md +89 -15
  2. package/dist/claims/deterministic-checks.d.ts +3 -2
  3. package/dist/claims/deterministic-checks.d.ts.map +1 -1
  4. package/dist/claims/deterministic-checks.js +7 -10
  5. package/dist/claims/deterministic-checks.js.map +1 -1
  6. package/dist/claims/policy.js +5 -5
  7. package/dist/claims/policy.js.map +1 -1
  8. package/dist/claims/types.d.ts +2 -2
  9. package/dist/commands/doc-index.d.ts.map +1 -1
  10. package/dist/commands/doc-index.js +28 -29
  11. package/dist/commands/doc-index.js.map +1 -1
  12. package/dist/commands/doc-search.d.ts.map +1 -1
  13. package/dist/commands/doc-search.js +1 -0
  14. package/dist/commands/doc-search.js.map +1 -1
  15. package/dist/commands/evidence.d.ts.map +1 -1
  16. package/dist/commands/evidence.js +9 -5
  17. package/dist/commands/evidence.js.map +1 -1
  18. package/dist/commands/extract.d.ts.map +1 -1
  19. package/dist/commands/extract.js +9 -21
  20. package/dist/commands/extract.js.map +1 -1
  21. package/dist/commands/graph-add.d.ts.map +1 -1
  22. package/dist/commands/graph-add.js +13 -3
  23. package/dist/commands/graph-add.js.map +1 -1
  24. package/dist/commands/results-add.d.ts +1 -0
  25. package/dist/commands/results-add.d.ts.map +1 -1
  26. package/dist/commands/results-add.js +6 -2
  27. package/dist/commands/results-add.js.map +1 -1
  28. package/dist/commands/review.d.ts.map +1 -1
  29. package/dist/commands/review.js +2 -4
  30. package/dist/commands/review.js.map +1 -1
  31. package/dist/commands/session.d.ts.map +1 -1
  32. package/dist/commands/session.js +5 -0
  33. package/dist/commands/session.js.map +1 -1
  34. package/dist/deep/dedupe.d.ts +9 -4
  35. package/dist/deep/dedupe.d.ts.map +1 -1
  36. package/dist/deep/dedupe.js +54 -11
  37. package/dist/deep/dedupe.js.map +1 -1
  38. package/dist/deep/graph-preprocess.d.ts +5 -0
  39. package/dist/deep/graph-preprocess.d.ts.map +1 -1
  40. package/dist/deep/graph-preprocess.js +6 -0
  41. package/dist/deep/graph-preprocess.js.map +1 -1
  42. package/dist/deep/graph.d.ts +1 -1
  43. package/dist/deep/graph.d.ts.map +1 -1
  44. package/dist/deep/graph.js +8 -4
  45. package/dist/deep/graph.js.map +1 -1
  46. package/dist/deep/index.d.ts +1 -1
  47. package/dist/deep/index.d.ts.map +1 -1
  48. package/dist/deep/index.js +1 -1
  49. package/dist/deep/index.js.map +1 -1
  50. package/dist/deep/iteration-data.d.ts.map +1 -1
  51. package/dist/deep/iteration-data.js +2 -2
  52. package/dist/deep/iteration-data.js.map +1 -1
  53. package/dist/deep/local-doc/indexer.d.ts +16 -1
  54. package/dist/deep/local-doc/indexer.d.ts.map +1 -1
  55. package/dist/deep/local-doc/indexer.js +305 -22
  56. package/dist/deep/local-doc/indexer.js.map +1 -1
  57. package/dist/deep/local-doc/scanner.d.ts +6 -6
  58. package/dist/deep/local-doc/scanner.d.ts.map +1 -1
  59. package/dist/deep/local-doc/scanner.js +123 -128
  60. package/dist/deep/local-doc/scanner.js.map +1 -1
  61. package/dist/deep/local-doc/searcher.d.ts +1 -0
  62. package/dist/deep/local-doc/searcher.d.ts.map +1 -1
  63. package/dist/deep/local-doc/searcher.js +25 -7
  64. package/dist/deep/local-doc/searcher.js.map +1 -1
  65. package/dist/deep/local-doc/types.d.ts +21 -0
  66. package/dist/deep/local-doc/types.d.ts.map +1 -1
  67. package/dist/deep/local-doc/types.js.map +1 -1
  68. package/dist/deep/quality-assess.d.ts +6 -4
  69. package/dist/deep/quality-assess.d.ts.map +1 -1
  70. package/dist/deep/quality-assess.js +37 -29
  71. package/dist/deep/quality-assess.js.map +1 -1
  72. package/dist/deep/session.d.ts +8 -2
  73. package/dist/deep/session.d.ts.map +1 -1
  74. package/dist/deep/session.js +57 -33
  75. package/dist/deep/session.js.map +1 -1
  76. package/dist/runCli.d.ts.map +1 -1
  77. package/dist/runCli.js +47 -17
  78. package/dist/runCli.js.map +1 -1
  79. package/dist/service.d.ts.map +1 -1
  80. package/dist/service.js +3 -35
  81. package/dist/service.js.map +1 -1
  82. package/package.json +1 -1
@@ -1,170 +1,165 @@
1
1
  /**
2
- * Scanner file scanning + structure-aware chunking
3
- *
4
- * Scans a directory for documents, parses YAML frontmatter,
5
- * and splits content into chunks using chunk-smart (markdown)
6
- * or paragraph splitting (plain text).
2
+ * Scanner - file scanning and structure-aware chunking.
7
3
  */
8
4
  import { readFileSync, statSync, readdirSync } from 'fs';
9
- import { resolve, extname, join } from 'path';
5
+ import { resolve, extname, join, relative, isAbsolute, sep } from 'path';
10
6
  import { createHash } from 'crypto';
11
7
  import { chunk } from 'chunk-smart';
12
8
  const DEFAULT_OPTIONS = {
13
9
  extensions: ['md', 'txt'],
14
- maxFileSize: 10 * 1024 * 1024, // 10MB
10
+ maxFileSize: 10 * 1024 * 1024,
15
11
  };
16
12
  function parseFrontmatter(content) {
17
13
  const match = content.match(/^---\n([\s\S]*?)\n---\n/);
18
- if (!match) {
14
+ if (!match)
19
15
  return { title: '', body: content };
20
- }
21
- const fmText = match[1];
22
- const body = content.slice(match[0].length);
23
- // Extract title line from YAML frontmatter (simple, no full YAML parser)
24
- const titleMatch = fmText.match(/^title:\s*(.+)$/m);
25
- const title = titleMatch ? titleMatch[1].trim().replace(/^['"](.*)['"]$/, '$1') : '';
26
- return { title, body };
16
+ const titleMatch = match[1].match(/^title:\s*(.+)$/m);
17
+ return {
18
+ title: titleMatch ? titleMatch[1].trim().replace(/^['"](.*)['"]$/, '$1') : '',
19
+ body: content.slice(match[0].length),
20
+ };
27
21
  }
28
- /**
29
- * Split plain text by paragraph boundaries (double newlines).
30
- * chunk-smart's 'paragraph' mode may return one single chunk;
31
- * this provides a reliable fallback.
32
- */
33
22
  function splitParagraphs(text) {
34
- const parts = text.split(/\n\n+/).map(p => p.trim()).filter(p => p.length > 0);
23
+ const parts = text.split(/\n\n+/).map(part => part.trim()).filter(Boolean);
35
24
  if (parts.length === 0)
36
- return [{ content: text, headings: [] }];
37
- return parts.map(p => ({ content: p, headings: [] }));
25
+ return [];
26
+ return parts.map(content => ({ content, headings: [] }));
38
27
  }
39
- // ── ID generation ─────────────────────────────────────────────────────
40
28
  function makeId(filePath, chunkIndex) {
41
29
  return createHash('sha256').update(`${filePath}\0${chunkIndex}`).digest('hex').slice(0, 16);
42
30
  }
43
- // ── Main scan function ────────────────────────────────────────────────
44
- export function scan(rootPath, options) {
45
- const opts = { ...DEFAULT_OPTIONS, ...options };
31
+ function createScanContext(rootPath, options) {
32
+ const resolvedOptions = { ...DEFAULT_OPTIONS, ...options };
46
33
  const absRoot = resolve(rootPath);
47
- // Verify path exists
48
34
  try {
49
35
  statSync(absRoot);
50
36
  }
51
37
  catch {
52
- throw new Error(`Path not found: ${absRoot}`);
38
+ throw Object.assign(new Error(`Path not found: ${absRoot}`), { code: 'PATH_NOT_FOUND' });
53
39
  }
54
- // Build glob patterns
55
- const patterns = opts.extensions.map(ext => `**/*.${ext.startsWith('.') ? ext.slice(1) : ext}`);
56
- // Build extension set for matching
57
- const extSet = new Set(opts.extensions.map(ext => ext.startsWith('.') ? ext.toLowerCase() : `.${ext.toLowerCase()}`));
58
- // Recursively collect matching files
59
- const files = [];
60
- function walk(dir) {
61
- let entries;
62
- try {
63
- entries = readdirSync(dir);
64
- }
65
- catch {
66
- return;
67
- }
68
- for (const entry of entries) {
69
- const abs = join(dir, entry);
70
- try {
71
- const st = statSync(abs);
72
- if (st.isDirectory()) {
73
- walk(abs);
74
- }
75
- else if (st.isFile() && extSet.has(extname(abs).toLowerCase())) {
76
- files.push(abs);
77
- }
78
- }
79
- catch {
80
- // Skip unreadable entries
81
- }
82
- }
40
+ return {
41
+ absRoot,
42
+ options: resolvedOptions,
43
+ extensions: new Set(resolvedOptions.extensions.map(ext => ext.startsWith('.') ? ext.toLowerCase() : `.${ext.toLowerCase()}`)),
44
+ };
45
+ }
46
+ function* findFiles(dir, extensions) {
47
+ let entries;
48
+ try {
49
+ entries = readdirSync(dir);
83
50
  }
84
- walk(absRoot);
85
- if (files.length === 0) {
86
- return [];
51
+ catch {
52
+ return;
87
53
  }
88
- const chunks = [];
89
- let scannedFiles = 0;
90
- for (const absFile of files) {
91
- const relFile = absFile.startsWith(absRoot) ? absFile.slice(absRoot.length + 1) : absFile;
92
- // File size check
54
+ for (const entry of entries) {
55
+ const absPath = join(dir, entry);
93
56
  try {
94
- const st = statSync(absFile);
95
- if (st.size > opts.maxFileSize) {
96
- console.warn(`[doc-index] Skipping large file (>10MB): ${relFile}`);
97
- continue;
57
+ const stat = statSync(absPath);
58
+ if (stat.isDirectory()) {
59
+ yield* findFiles(absPath, extensions);
60
+ }
61
+ else if (stat.isFile() && extensions.has(extname(absPath).toLowerCase())) {
62
+ yield absPath;
98
63
  }
99
64
  }
100
65
  catch {
101
- continue;
66
+ // Skip entries which disappear or cannot be inspected.
102
67
  }
103
- // Read content
104
- let content;
68
+ }
69
+ }
70
+ function scanFile(absFile, context) {
71
+ const relFile = relative(context.absRoot, absFile).replace(/\\/g, '/');
72
+ try {
73
+ const stat = statSync(absFile);
74
+ if (stat.size > context.options.maxFileSize) {
75
+ console.warn(`[doc-index] Skipping file larger than ${context.options.maxFileSize} bytes: ${relFile}`);
76
+ return null;
77
+ }
78
+ }
79
+ catch {
80
+ return null;
81
+ }
82
+ let content;
83
+ try {
84
+ content = readFileSync(absFile, 'utf-8');
85
+ }
86
+ catch {
87
+ console.warn(`[doc-index] Skipping unreadable file: ${relFile}`);
88
+ return null;
89
+ }
90
+ if (!content.trim())
91
+ return null;
92
+ const { title: frontmatterTitle, body } = parseFrontmatter(content);
93
+ const title = frontmatterTitle || relFile;
94
+ let rawChunks;
95
+ if (extname(absFile).toLowerCase() === '.md') {
105
96
  try {
106
- content = readFileSync(absFile, 'utf-8');
97
+ rawChunks = chunk(body, { mode: 'markdown' }).map((item) => ({
98
+ content: item.content,
99
+ headings: (item.metadata?.headings || []).map((heading) => heading),
100
+ }));
107
101
  }
108
102
  catch {
109
- console.warn(`[doc-index] Skipping unreadable file: ${relFile}`);
110
- continue;
111
- }
112
- if (!content.trim()) {
113
- continue;
114
- }
115
- // Parse frontmatter
116
- const { title: fmTitle, body } = parseFrontmatter(content);
117
- const docTitle = fmTitle || relFile;
118
- // Chunk based on file type
119
- const ext = extname(absFile).toLowerCase();
120
- const isMarkdown = ext === '.md';
121
- let rawChunks;
122
- if (isMarkdown) {
123
- try {
124
- // (chunk-smart types may not include 'mode' — cast as needed)
125
- const mdChunks = chunk(body, { mode: 'markdown' });
126
- rawChunks = mdChunks.map((c) => ({
127
- content: c.content,
128
- headings: (c.metadata?.headings || []).map((h) => h),
129
- }));
130
- }
131
- catch {
132
- // Fallback: treat as plain text
133
- rawChunks = splitParagraphs(body);
134
- }
135
- }
136
- else {
137
103
  rawChunks = splitParagraphs(body);
138
104
  }
139
- if (rawChunks.length === 0) {
105
+ }
106
+ else {
107
+ rawChunks = splitParagraphs(body);
108
+ }
109
+ const chunks = [];
110
+ for (let index = 0; index < rawChunks.length; index++) {
111
+ const rawChunk = rawChunks[index];
112
+ const chunkContent = rawChunk.content.trim();
113
+ if (!chunkContent)
140
114
  continue;
141
- }
142
- scannedFiles++;
143
- for (let i = 0; i < rawChunks.length; i++) {
144
- const rc = rawChunks[i];
145
- const chunkContent = rc.content.trim();
146
- if (!chunkContent)
147
- continue;
148
- // Build headings hierarchy: doc title + chunk headings
149
- const allHeadings = [];
150
- if (docTitle && fmTitle)
151
- allHeadings.push(docTitle);
152
- allHeadings.push(...rc.headings);
153
- const id = makeId(relFile, i);
154
- chunks.push({
155
- id,
156
- filePath: relFile,
157
- title: docTitle,
158
- content: chunkContent,
159
- headings: allHeadings,
160
- chunkIndex: i,
161
- totalChunks: rawChunks.length,
162
- });
163
- }
115
+ chunks.push({
116
+ id: makeId(relFile, index),
117
+ filePath: relFile,
118
+ title,
119
+ content: chunkContent,
120
+ headings: frontmatterTitle ? [title, ...rawChunk.headings] : rawChunk.headings,
121
+ chunkIndex: index,
122
+ totalChunks: rawChunks.length,
123
+ });
164
124
  }
165
- if (chunks.length === 0 && scannedFiles === 0) {
166
- return [];
125
+ return chunks.length > 0 ? {
126
+ filePath: relFile,
127
+ contentHash: createHash('sha256').update(content).digest('hex'),
128
+ chunks,
129
+ } : null;
130
+ }
131
+ function isPathWithinRoot(absPath, absRoot) {
132
+ const pathFromRoot = relative(absRoot, absPath);
133
+ return pathFromRoot !== ''
134
+ && !isAbsolute(pathFromRoot)
135
+ && pathFromRoot !== '..'
136
+ && !pathFromRoot.startsWith(`..${sep}`);
137
+ }
138
+ /** Yield one file at a time, with a hash for incremental change detection. */
139
+ export function* scanFiles(rootPath, options, filePaths) {
140
+ const context = createScanContext(rootPath, options);
141
+ const candidates = filePaths
142
+ ? Array.from(filePaths, filePath => join(context.absRoot, ...filePath.split('/')))
143
+ : findFiles(context.absRoot, context.extensions);
144
+ for (const absFile of candidates) {
145
+ if (!isPathWithinRoot(absFile, context.absRoot)
146
+ || !context.extensions.has(extname(absFile).toLowerCase()))
147
+ continue;
148
+ const scanned = scanFile(absFile, context);
149
+ if (scanned)
150
+ yield scanned;
151
+ }
152
+ }
153
+ /** Yield one file batch at a time so callers can index and release them. */
154
+ export function* scanBatches(rootPath, options) {
155
+ for (const file of scanFiles(rootPath, options)) {
156
+ yield file.chunks;
167
157
  }
158
+ }
159
+ export function scan(rootPath, options) {
160
+ const chunks = [];
161
+ for (const batch of scanBatches(rootPath, options))
162
+ chunks.push(...batch);
168
163
  return chunks;
169
164
  }
170
165
  //# sourceMappingURL=scanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/deep/local-doc/scanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/deep/local-doc/scanner.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ export interface DocSearchResult {
19
19
  path: string;
20
20
  added: number;
21
21
  totalPending: number;
22
+ partial: boolean;
22
23
  results: SessionResult[];
23
24
  }
24
25
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"searcher.d.ts","sourceRoot":"","sources":["../../../src/deep/local-doc/searcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAKL,aAAa,EACd,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED;;;GAGG;AACH,iBAAS,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASvD;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAiHhF;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"searcher.d.ts","sourceRoot":"","sources":["../../../src/deep/local-doc/searcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,OAAO,EAML,aAAa,EACd,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED;;;GAGG;AACH,iBAAS,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASvD;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA0IhF;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -7,10 +7,10 @@
7
7
  */
8
8
  import { resolve } from 'path';
9
9
  import { search as oramaSearch } from '@orama/orama';
10
- import { scan } from './scanner.js';
11
- import { buildIndex, hasIndex, loadIndex } from './indexer.js';
10
+ import { scanFiles } from './scanner.js';
11
+ import { buildIndexFromScannedFiles, getIndexMemoryBudget, getIndexMeta, hasIndex, loadIndex, refreshIndexIfStale, } from './indexer.js';
12
12
  import { DEFAULT_BOOST } from './types.js';
13
- import { appendSessionResults, getPendingResults, initSessionDir, resolveSessionPath, } from '../session.js';
13
+ import { appendSessionResults, getPendingResults, injectApprovedResults, initSessionDir, resolveSessionPath, } from '../session.js';
14
14
  /**
15
15
  * Parse boost string like "title:3,headings:2,content:1"
16
16
  * into an object { title: 3, headings: 2, content: 1 }
@@ -38,12 +38,26 @@ export async function docSearch(opts) {
38
38
  }
39
39
  // Auto-index if needed
40
40
  if (!hasIndex(absPath)) {
41
- const chunks = scan(absPath);
42
- if (chunks.length === 0) {
41
+ const memoryBudgetBytes = getIndexMemoryBudget();
42
+ try {
43
+ await buildIndexFromScannedFiles(absPath, scanFiles(absPath, { maxFileSize: Math.min(10 * 1024 * 1024, Math.floor(memoryBudgetBytes / 8)) }), memoryBudgetBytes);
44
+ }
45
+ catch (err) {
46
+ if (err.code === 'NO_INDEXABLE_FILES') {
47
+ throw Object.assign(new Error(`No indexable files found in ${absPath} (supported: .md, .txt)`), { code: 'NO_INDEXABLE_FILES' });
48
+ }
49
+ if (err.code === 'MEMORY_LIMIT_REACHED') {
50
+ throw Object.assign(new Error('Not enough free memory to index any local documents.'), {
51
+ code: 'MEMORY_LIMIT_REACHED',
52
+ });
53
+ }
54
+ throw err;
55
+ }
56
+ if (!hasIndex(absPath)) {
43
57
  throw Object.assign(new Error(`No indexable files found in ${absPath} (supported: .md, .txt)`), { code: 'NO_INDEXABLE_FILES' });
44
58
  }
45
- await buildIndex(absPath, chunks);
46
59
  }
60
+ await refreshIndexIfStale(absPath);
47
61
  // Load index
48
62
  let db;
49
63
  try {
@@ -74,6 +88,7 @@ export async function docSearch(opts) {
74
88
  path: absPath,
75
89
  added: 0,
76
90
  totalPending: 0,
91
+ partial: getIndexMeta(absPath)?.partial ?? false,
77
92
  results: [],
78
93
  };
79
94
  }
@@ -105,15 +120,17 @@ export async function docSearch(opts) {
105
120
  filePath: doc.filePath,
106
121
  headings: doc.headings || [],
107
122
  chunkIndex: doc.chunkIndex,
123
+ origins: [{ query }],
108
124
  status: undefined, // set to 'pending' by appendSessionResults
109
125
  });
110
126
  }
111
127
  // Inject into session (skip round increment — merged with current web round)
112
128
  const sessionDir = resolveSessionPath(opts.session);
113
129
  initSessionDir(sessionDir); // ensure meta.json exists
114
- const { added, total } = appendSessionResults(sessionDir, results, {
130
+ const { added, total, approvedResults } = appendSessionResults(sessionDir, results, {
115
131
  skipRoundIncrement: true,
116
132
  });
133
+ injectApprovedResults(sessionDir, approvedResults);
117
134
  const pendingCount = getPendingResults(sessionDir).length;
118
135
  return {
119
136
  session: sessionDir,
@@ -121,6 +138,7 @@ export async function docSearch(opts) {
121
138
  path: absPath,
122
139
  added,
123
140
  totalPending: pendingCount,
141
+ partial: getIndexMeta(absPath)?.partial ?? false,
124
142
  results,
125
143
  };
126
144
  }
@@ -1 +1 @@
1
- {"version":3,"file":"searcher.js","sourceRoot":"","sources":["../../../src/deep/local-doc/searcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"searcher.js","sourceRoot":"","sources":["../../../src/deep/local-doc/searcher.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,12 @@ export interface ScannedChunk {
10
10
  chunkIndex: number;
11
11
  totalChunks: number;
12
12
  }
13
+ /** A scanned source file and the chunks derived from its current contents. */
14
+ export interface ScannedFile {
15
+ filePath: string;
16
+ contentHash: string;
17
+ chunks: ScannedChunk[];
18
+ }
13
19
  export interface ScannerOptions {
14
20
  extensions?: string[];
15
21
  maxFileSize?: number;
@@ -21,6 +27,21 @@ export interface IndexLocation {
21
27
  files: number;
22
28
  chunks: number;
23
29
  indexedAt: number;
30
+ partial: boolean;
31
+ memoryBudgetBytes: number;
32
+ tokenizer: string;
33
+ source?: IndexSourceMetadata;
34
+ };
35
+ }
36
+ export interface IndexedFileMetadata {
37
+ contentHash: string;
38
+ chunkIds: string[];
39
+ }
40
+ export interface IndexSourceMetadata {
41
+ files: Record<string, IndexedFileMetadata>;
42
+ extensions: string[];
43
+ git?: {
44
+ head: string;
24
45
  };
25
46
  }
26
47
  export declare const ORAMA_SCHEMA: {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/deep/local-doc/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,eAAO,MAAM,YAAY;;;;;;;;CAQf,CAAC;AAEX,eAAO,MAAM,aAAa;;;;CAIhB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/deep/local-doc/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,8EAA8E;AAC9E,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,mBAAmB,CAAC;KAC9B,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC3C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACxB;AAED,eAAO,MAAM,YAAY;;;;;;;;CAQf,CAAC;AAEX,eAAO,MAAM,aAAa;;;;CAIhB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/deep/local-doc/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2BH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,EAAE,EAAE,QAAQ;IACZ,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,QAAQ;IACpB,WAAW,EAAE,QAAQ;CACb,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/deep/local-doc/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiDH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,EAAE,EAAE,QAAQ;IACZ,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,QAAQ;IACpB,WAAW,EAAE,QAAQ;CACb,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,CAAC;CACF,CAAC"}
@@ -8,12 +8,12 @@
8
8
  * Three indicators (independent thresholds, no weighted sum):
9
9
  * - contentDepth: average extracted content length
10
10
  * - sourceDiversity: number of distinct domains
11
- * - novelty: fraction not similar to existing results (SimHash)
11
+ * - novelty: fraction not similar to earlier approved results (Jaccard)
12
12
  *
13
13
  * Verdict logic:
14
14
  * - good: all pass
15
15
  * - acceptable: 1 fails
16
- * - poor: ≥2 fail
16
+ * - poor: 鈮? fail
17
17
  */
18
18
  import { SessionResult } from './session.js';
19
19
  export interface IndicatorResult {
@@ -36,9 +36,11 @@ export interface QualityThresholds {
36
36
  sourceDiversity: number;
37
37
  novelty: number;
38
38
  }
39
+ /** Assess results from the newest recorded round against earlier approved results. */
40
+ export declare function assessLatestResultQuality(sessionResults: SessionResult[], thresholds?: Partial<QualityThresholds>): QualityScore;
39
41
  /** Assess the quality of results against session context.
40
- * Programmatic pre-filter only Agent makes final quality decision.
41
- * All indicators use independent thresholds no weighted sum.
42
+ * Programmatic pre-filter only 鈥?Agent makes final quality decision.
43
+ * All indicators use independent thresholds 鈥?no weighted sum.
42
44
  */
43
45
  export declare function assessResultQuality(results: SessionResult[], sessionResults: SessionResult[], thresholds?: Partial<QualityThresholds>): QualityScore;
44
46
  //# sourceMappingURL=quality-assess.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"quality-assess.d.ts","sourceRoot":"","sources":["../../src/deep/quality-assess.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC7B,YAAY,EAAE,eAAe,CAAC;IAC9B,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC;IACxC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACnB;AAqFD;;;GAGG;AACH,wBAAgB,mBAAmB,CAC/B,OAAO,EAAE,aAAa,EAAE,EACxB,cAAc,EAAE,aAAa,EAAE,EAC/B,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACxC,YAAY,CAuBd"}
1
+ {"version":3,"file":"quality-assess.d.ts","sourceRoot":"","sources":["../../src/deep/quality-assess.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC7B,YAAY,EAAE,eAAe,CAAC;IAC9B,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC;IACxC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACnB;AA0ED,sFAAsF;AACtF,wBAAgB,yBAAyB,CACrC,cAAc,EAAE,aAAa,EAAE,EAC/B,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACxC,YAAY,CAoBd;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAC/B,OAAO,EAAE,aAAa,EAAE,EACxB,cAAc,EAAE,aAAa,EAAE,EAC/B,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACxC,YAAY,CAEd"}