@alextis59/athena 1.1.0 → 1.3.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.
package/README.md CHANGED
@@ -53,7 +53,7 @@ Common options:
53
53
  --port <port> Server port
54
54
  --agent-provider <opencode|codex>
55
55
  External agent provider for MCP
56
- --debug Enable debug logs
56
+ --debug Enable debug logs and write index traces to /tmp/athena-traces
57
57
  --json Emit machine-readable output where supported
58
58
  ```
59
59
 
@@ -133,10 +133,11 @@ available. Low-confidence PDF regions are surfaced as uncertain in the UI.
133
133
  - `listDocs`
134
134
  - `relatedChunks`
135
135
 
136
- See [docs/mcp-integration.md](docs/mcp-integration.md) for OpenCode, Codex, and
137
- generic MCP setup examples. OpenCode is the default external-agent provider;
138
- pass `athena mcp --agent-provider codex` or set `agent.provider: "codex"` when
139
- configuring Athena for Codex.
136
+ See the
137
+ [MCP integration guide](https://github.com/alextis59/athena/blob/main/docs/mcp-integration.md)
138
+ for OpenCode, Codex, and generic MCP setup examples. OpenCode is the default
139
+ external-agent provider; pass `athena mcp --agent-provider codex` or set
140
+ `agent.provider: "codex"` when configuring Athena for Codex.
140
141
 
141
142
  ## Development
142
143
 
package/dist/cli/help.js CHANGED
@@ -21,7 +21,7 @@ Options:
21
21
  --port <port> Server port (default: 4317)
22
22
  --agent-provider <opencode|codex>
23
23
  External agent provider for MCP (default: opencode)
24
- --debug Enable debug logs
24
+ --debug Enable debug logs and write index traces to /tmp/athena-traces
25
25
  --json Emit machine-readable output where supported
26
26
  --build Build the index before serving
27
27
  -h, --help Show help
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkC,MAAM,cAAc,CAAC;AAexE,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMvE,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAC3C,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;CAC5C;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,SAAS,CAAC,CAqBpB"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAkC,MAAM,cAAc,CAAC;AAexE,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAOvE,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAC3C,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;CAC5C;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,SAAS,CAAC,CAqBpB"}
package/dist/cli/run.js CHANGED
@@ -1,3 +1,7 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { appendFile, mkdir, writeFile } from "node:fs/promises";
3
+ import { tmpdir } from "node:os";
4
+ import path from "node:path";
1
5
  import { ExitCode, toAthenaError, UserFacingError } from "../errors.js";
2
6
  import { askQuestion, renderTerminalCitations } from "../agent/index.js";
3
7
  import { loadConfig } from "../config/index.js";
@@ -73,12 +77,121 @@ async function runServeCommand(parsed, streams, environment, logger) {
73
77
  });
74
78
  }
75
79
  async function runIndexCommand(parsed, streams, logger) {
76
- const result = await indexFromCliOptions(parsed.options, parsed.options.json
77
- ? undefined
78
- : (event) => {
79
- logger.info(renderIndexProgress(event));
80
- });
81
- streams.stdout.write(renderIndexResult(result, parsed.options.json));
80
+ const trace = parsed.options.debug
81
+ ? await createIndexDebugTrace(logger)
82
+ : undefined;
83
+ if (trace !== undefined) {
84
+ logger.debug(`Index debug trace: ${trace.path}`);
85
+ }
86
+ try {
87
+ const result = await indexFromCliOptions(parsed.options, parsed.options.json
88
+ ? undefined
89
+ : (event) => {
90
+ logger.info(renderIndexProgress(event));
91
+ }, trace === undefined ? undefined : (event) => trace.record(event));
92
+ const outputResult = trace === undefined ? result : { ...result, debugTracePath: trace.path };
93
+ if (trace !== undefined) {
94
+ logger.debug(`Index debug trace written: ${trace.path}`);
95
+ }
96
+ streams.stdout.write(renderIndexResult(outputResult, parsed.options.json));
97
+ }
98
+ catch (error) {
99
+ if (trace !== undefined) {
100
+ logger.debug(`Index debug trace written: ${trace.path}`);
101
+ }
102
+ throw error;
103
+ }
104
+ }
105
+ async function createIndexDebugTrace(logger) {
106
+ const directory = path.join(tmpdir(), "athena-traces");
107
+ const tracePath = path.join(directory, `index-${new Date().toISOString().replace(/[:.]/gu, "-")}-${randomUUID()}.ndjson`);
108
+ await mkdir(directory, { recursive: true });
109
+ await writeFile(tracePath, "", "utf8");
110
+ return {
111
+ path: tracePath,
112
+ async record(event) {
113
+ logger.debug(renderIndexTraceEvent(event));
114
+ try {
115
+ await appendFile(tracePath, `${JSON.stringify(event)}\n`, "utf8");
116
+ }
117
+ catch (error) {
118
+ logger.error(`Could not write index debug trace: ${String(error)}`);
119
+ }
120
+ }
121
+ };
122
+ }
123
+ function renderIndexTraceEvent(event) {
124
+ switch (event.type) {
125
+ case "index_start":
126
+ return `Indexing ${readTraceString(event, "root") ?? "root"} into ${readTraceString(event, "databasePath") ?? "database"}`;
127
+ case "discovery_complete":
128
+ return `Discovered ${String(readTraceNumber(event, "discovered") ?? 0)} source(s)`;
129
+ case "source_state":
130
+ return [
131
+ `Source ${readTracePath(event)}:`,
132
+ `kind=${readTraceString(event, "kind") ?? "unknown"}`,
133
+ `size=${String(readTraceNumber(event, "sizeBytes") ?? 0)} bytes`,
134
+ `hash=${readTraceString(event, "contentHash") ?? "unknown"}`,
135
+ `parser=${readTraceString(event, "parserName") ?? "unknown"}@${readTraceString(event, "parserVersion") ?? "unknown"}`,
136
+ `options=${readTraceString(event, "parserOptionsHash") ?? "unknown"}`
137
+ ].join(" ");
138
+ case "source_skipped":
139
+ return `Skipped ${readTracePath(event)} (unchanged: content hash, parser, version, and parser options match the existing index)`;
140
+ case "source_parse_start":
141
+ return `Parsing ${readTracePath(event)} with ${readTraceString(event, "parserName") ?? "parser"}`;
142
+ case "source_parse_success":
143
+ return [
144
+ `Parsed ${readTracePath(event)}`,
145
+ `(${String(readTraceNumber(event, "blocks") ?? 0)} blocks,`,
146
+ `${String(readTraceArrayLength(event, "warnings"))} warnings,`,
147
+ `${String(readTraceArrayLength(event, "artifacts"))} artifacts)`
148
+ ].join(" ");
149
+ case "source_parse_skipped":
150
+ return `Skipped parsing ${readTracePath(event)} (${readTraceString(event, "reason") ?? "no parser result"})`;
151
+ case "source_parse_failed":
152
+ return `Failed parsing ${readTracePath(event)}: ${renderTraceError(event.error)}`;
153
+ case "source_deleted":
154
+ return `Deleted ${readTracePath(event)} from the index (${readTraceString(event, "reason") ?? "not discovered"})`;
155
+ case "embedding_sync_start":
156
+ return "Synchronizing embeddings";
157
+ case "embedding_sync_complete":
158
+ return `Synchronized embeddings: ${String(readTraceNumber(event, "embedded") ?? 0)} new vector(s)`;
159
+ case "index_success":
160
+ return `Index run ${readTraceString(event, "runId") ?? "completed"} succeeded`;
161
+ case "index_failed":
162
+ return `Index run ${readTraceString(event, "runId") ?? "failed"} failed: ${renderTraceError(event.error)}`;
163
+ default:
164
+ return `Index trace event: ${event.type}`;
165
+ }
166
+ }
167
+ function readTracePath(event) {
168
+ return readTraceString(event, "path") ?? "<unknown>";
169
+ }
170
+ function readTraceString(event, key) {
171
+ const value = event[key];
172
+ return typeof value === "string" ? value : undefined;
173
+ }
174
+ function readTraceNumber(event, key) {
175
+ const value = event[key];
176
+ return typeof value === "number" && Number.isFinite(value)
177
+ ? value
178
+ : undefined;
179
+ }
180
+ function readTraceArrayLength(event, key) {
181
+ const value = event[key];
182
+ return Array.isArray(value) ? value.length : 0;
183
+ }
184
+ function renderTraceError(error) {
185
+ if (typeof error !== "object" || error === null) {
186
+ return String(error);
187
+ }
188
+ const record = error;
189
+ const message = typeof record.message === "string" ? record.message : "Unknown trace error";
190
+ const cause = record.cause;
191
+ if (cause === undefined) {
192
+ return message;
193
+ }
194
+ return `${message}; caused by ${renderTraceError(cause)}`;
82
195
  }
83
196
  function assertIndexReady(parsed) {
84
197
  const database = inspectDatabase(parsed.options.root, parsed.options.db);
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,5 @@ export { hashFile, hashString } from "./hash.js";
3
3
  export { classifySourceKind, isSupportedSourceKind } from "./kinds.js";
4
4
  export { indexFromCliOptions, indexRoot, renderIndexProgress, renderIndexResult } from "./run.js";
5
5
  export type { DiscoveredSource } from "./discovery.js";
6
- export type { IndexCounts, IndexProgressEvent, IndexProgressReporter, IndexResult, IndexRootOptions } from "./run.js";
6
+ export type { IndexCounts, IndexProgressEvent, IndexProgressReporter, IndexResult, IndexRootOptions, IndexTraceEvent, IndexTraceReporter, SerializedTraceError } from "./run.js";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/indexer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EACjB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/indexer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,UAAU,CAAC"}
@@ -15,6 +15,7 @@ export interface IndexResult {
15
15
  databasePath: string;
16
16
  runId: string;
17
17
  counts: IndexCounts;
18
+ debugTracePath?: string;
18
19
  }
19
20
  export interface IndexProgressEvent {
20
21
  type: "embedding_batch";
@@ -28,15 +29,29 @@ export interface IndexProgressEvent {
28
29
  model: string;
29
30
  }
30
31
  export type IndexProgressReporter = (event: IndexProgressEvent) => void;
31
- export declare function indexFromCliOptions(options: CliOptions, onProgress?: IndexProgressReporter): Promise<IndexResult>;
32
+ export interface SerializedTraceError {
33
+ name: string;
34
+ message: string;
35
+ stack?: string;
36
+ cause?: SerializedTraceError;
37
+ }
38
+ export interface IndexTraceEvent {
39
+ type: string;
40
+ timestamp: string;
41
+ [key: string]: unknown;
42
+ }
43
+ export type IndexTraceReporter = (event: IndexTraceEvent) => void | Promise<void>;
44
+ export declare function indexFromCliOptions(options: CliOptions, onProgress?: IndexProgressReporter, onTrace?: IndexTraceReporter): Promise<IndexResult>;
32
45
  export interface IndexRootOptions {
33
46
  root: string;
34
47
  dbPath?: string;
35
48
  loadedConfig?: LoadedConfig;
36
49
  onProgress?: IndexProgressReporter;
50
+ onTrace?: IndexTraceReporter;
37
51
  pdfConverter?: Pdf2LlmConverter;
38
52
  }
39
53
  export declare function indexRoot(options: IndexRootOptions): Promise<IndexResult>;
40
54
  export declare function renderIndexResult(result: IndexResult, json: boolean): string;
41
55
  export declare function renderIndexProgress(event: IndexProgressEvent): string;
56
+ export declare function serializeTraceError(error: unknown): SerializedTraceError;
42
57
  //# sourceMappingURL=run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/indexer/run.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,oBAAoB,CAAC;AAWlE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAK5D,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,iBAAiB,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;AA+DxE,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,UAAU,EACnB,UAAU,CAAC,EAAE,qBAAqB,GACjC,OAAO,CAAC,WAAW,CAAC,CAuBtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,WAAW,CAAC,CA+JtB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAkB5E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAUrE"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/indexer/run.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,oBAAoB,CAAC;AAWlE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAK5D,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,iBAAiB,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAExE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAC/B,KAAK,EAAE,eAAe,KACnB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AA+D1B,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,UAAU,EACnB,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC,CA2BtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,WAAW,CAAC,CAuQtB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAkB5E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAUrE;AA2DD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAsBxE"}
@@ -12,7 +12,7 @@ const parserOptionsHash = hashString(JSON.stringify({
12
12
  parser: "text-line-parser-v1",
13
13
  chunking: defaultChunkingOptions
14
14
  }));
15
- export async function indexFromCliOptions(options, onProgress) {
15
+ export async function indexFromCliOptions(options, onProgress, onTrace) {
16
16
  const loadedConfig = await loadConfig(options.config === undefined
17
17
  ? { root: options.root }
18
18
  : { root: options.root, configPath: options.config });
@@ -29,6 +29,9 @@ export async function indexFromCliOptions(options, onProgress) {
29
29
  if (onProgress !== undefined) {
30
30
  indexOptions.onProgress = onProgress;
31
31
  }
32
+ if (onTrace !== undefined) {
33
+ indexOptions.onTrace = onTrace;
34
+ }
32
35
  return await indexRoot(indexOptions);
33
36
  }
34
37
  export async function indexRoot(options) {
@@ -39,8 +42,30 @@ export async function indexRoot(options) {
39
42
  const startedAt = new Date().toISOString();
40
43
  const counts = createEmptyCounts();
41
44
  try {
45
+ await emitTrace(options.onTrace, {
46
+ type: "index_start",
47
+ root: initialized.paths.root,
48
+ databasePath: initialized.paths.databasePath,
49
+ runId,
50
+ configPath: loadedConfig.configPath,
51
+ index: {
52
+ include: loadedConfig.config.index.include,
53
+ exclude: loadedConfig.config.index.exclude
54
+ },
55
+ pdf: loadedConfig.config.pdf,
56
+ embeddings: loadedConfig.config.embeddings
57
+ });
42
58
  const embeddingProvider = createEmbeddingProvider(loadedConfig.config.embeddings);
43
59
  const discovered = await discoverSources(initialized.paths.root, loadedConfig.config);
60
+ await emitTrace(options.onTrace, {
61
+ type: "discovery_complete",
62
+ root: initialized.paths.root,
63
+ discovered: discovered.length,
64
+ sources: discovered.map((source) => ({
65
+ path: source.relativePath,
66
+ kind: source.kind
67
+ }))
68
+ });
44
69
  const sourceStates = await Promise.all(discovered.map((source) => collectSourceState(initialized.paths.root, source, loadedConfig.config.pdf)));
45
70
  const existingSources = listExistingSources(database, initialized.paths.root);
46
71
  const discoveredPaths = new Set(sourceStates.map((source) => source.relative_path));
@@ -48,11 +73,28 @@ export async function indexRoot(options) {
48
73
  counts.discovered = discovered.length;
49
74
  for (const sourceState of sourceStates) {
50
75
  const existing = existingSources.get(sourceState.relative_path);
51
- if (isUnchanged(existing, sourceState)) {
76
+ await emitTrace(options.onTrace, {
77
+ type: "source_state",
78
+ ...sourceTraceDetails(sourceState),
79
+ existing: existing === undefined ? null : sourceRowTraceDetails(existing)
80
+ });
81
+ if (existing !== undefined && isUnchanged(existing, sourceState)) {
52
82
  counts.skipped += 1;
83
+ await emitTrace(options.onTrace, {
84
+ type: "source_skipped",
85
+ reason: "unchanged",
86
+ explanation: "content hash, parser, parser version, and parser options match the existing index row",
87
+ ...sourceTraceDetails(sourceState),
88
+ existingSourceId: existing.id
89
+ });
53
90
  continue;
54
91
  }
55
92
  try {
93
+ await emitTrace(options.onTrace, {
94
+ type: "source_parse_start",
95
+ ...sourceTraceDetails(sourceState),
96
+ existingSourceId: existing?.id ?? null
97
+ });
56
98
  const parsedDocument = await parseSourceFile(sourceState.absolute_path, sourceState.kind, {
57
99
  pdf: loadedConfig.config.pdf,
58
100
  ...(options.pdfConverter === undefined
@@ -64,6 +106,27 @@ export async function indexRoot(options) {
64
106
  : await materializeParserArtifacts(initialized.paths, sourceState, parsedDocument);
65
107
  if (materializedDocument !== null) {
66
108
  counts.parsed += 1;
109
+ await emitTrace(options.onTrace, {
110
+ type: "source_parse_success",
111
+ ...sourceTraceDetails(sourceState),
112
+ blocks: materializedDocument.document.blocks.length,
113
+ warnings: materializedDocument.document.warnings.map((warning) => ({
114
+ code: warning.code,
115
+ message: warning.message
116
+ })),
117
+ artifacts: materializedDocument.document.artifacts?.map((artifact) => ({
118
+ kind: artifact.kind
119
+ })) ?? [],
120
+ textLength: materializedDocument.document.text.length,
121
+ normalizedTextLength: materializedDocument.document.normalizedText.length
122
+ });
123
+ }
124
+ else {
125
+ await emitTrace(options.onTrace, {
126
+ type: "source_parse_skipped",
127
+ reason: "unsupported_source_kind",
128
+ ...sourceTraceDetails(sourceState)
129
+ });
67
130
  }
68
131
  updates.push({
69
132
  source: sourceState,
@@ -77,10 +140,16 @@ export async function indexRoot(options) {
77
140
  }
78
141
  catch (error) {
79
142
  counts.failed += 1;
143
+ await emitTrace(options.onTrace, {
144
+ type: "source_parse_failed",
145
+ ...sourceTraceDetails(sourceState),
146
+ error: serializeTraceError(error)
147
+ });
80
148
  throw error;
81
149
  }
82
150
  }
83
151
  const deletedSourceIds = [];
152
+ const deletedSources = [];
84
153
  withTransaction(database, () => {
85
154
  for (const update of updates) {
86
155
  upsertSource(database, initialized.paths.root, update.source, update.parsedDocument, update.existingSourceId);
@@ -90,9 +159,17 @@ export async function indexRoot(options) {
90
159
  deleteSource(database, existing.id);
91
160
  counts.deleted += 1;
92
161
  deletedSourceIds.push(existing.id);
162
+ deletedSources.push(existing);
93
163
  }
94
164
  }
95
165
  });
166
+ for (const deletedSource of deletedSources) {
167
+ await emitTrace(options.onTrace, {
168
+ type: "source_deleted",
169
+ reason: "not_discovered",
170
+ ...sourceRowTraceDetails(deletedSource)
171
+ });
172
+ }
96
173
  await Promise.all([
97
174
  ...deletedSourceIds.map((sourceId) => removeSourceBlobs(initialized.paths, sourceId)),
98
175
  ...updates
@@ -100,7 +177,15 @@ export async function indexRoot(options) {
100
177
  .filter((stagedBlobs) => stagedBlobs !== undefined)
101
178
  .map((stagedBlobs) => commitSourceBlobs(stagedBlobs))
102
179
  ]);
180
+ await emitTrace(options.onTrace, {
181
+ type: "embedding_sync_start",
182
+ provider: embeddingProvider?.metadata ?? null
183
+ });
103
184
  counts.embedded = await syncEmbeddings(database, initialized.paths.root, embeddingProvider, options.onProgress);
185
+ await emitTrace(options.onTrace, {
186
+ type: "embedding_sync_complete",
187
+ embedded: counts.embedded
188
+ });
104
189
  withTransaction(database, () => {
105
190
  insertRun(database, {
106
191
  id: runId,
@@ -112,6 +197,13 @@ export async function indexRoot(options) {
112
197
  errorMessage: null
113
198
  });
114
199
  });
200
+ await emitTrace(options.onTrace, {
201
+ type: "index_success",
202
+ root: initialized.paths.root,
203
+ databasePath: initialized.paths.databasePath,
204
+ runId,
205
+ counts
206
+ });
115
207
  return {
116
208
  root: initialized.paths.root,
117
209
  databasePath: initialized.paths.databasePath,
@@ -120,6 +212,14 @@ export async function indexRoot(options) {
120
212
  };
121
213
  }
122
214
  catch (error) {
215
+ await emitTrace(options.onTrace, {
216
+ type: "index_failed",
217
+ root: initialized.paths.root,
218
+ databasePath: initialized.paths.databasePath,
219
+ runId,
220
+ counts,
221
+ error: serializeTraceError(error)
222
+ });
123
223
  withTransaction(database, () => {
124
224
  insertRun(database, {
125
225
  id: runId,
@@ -177,6 +277,64 @@ function createEmptyCounts() {
177
277
  deleted: 0
178
278
  };
179
279
  }
280
+ async function emitTrace(reporter, event) {
281
+ if (reporter === undefined) {
282
+ return;
283
+ }
284
+ try {
285
+ await reporter({
286
+ timestamp: new Date().toISOString(),
287
+ ...event
288
+ });
289
+ }
290
+ catch {
291
+ // Debug tracing must not change indexing behavior.
292
+ }
293
+ }
294
+ function sourceTraceDetails(source) {
295
+ return {
296
+ path: source.relative_path,
297
+ absolutePath: source.absolute_path,
298
+ sourceId: source.id,
299
+ kind: source.kind,
300
+ sizeBytes: source.size_bytes,
301
+ modifiedTimeMs: source.modified_time_ms,
302
+ contentHash: source.content_hash,
303
+ parserName: source.parser_name,
304
+ parserVersion: source.parser_version,
305
+ parserOptionsHash: source.parser_options_hash
306
+ };
307
+ }
308
+ function sourceRowTraceDetails(source) {
309
+ return {
310
+ path: source.relative_path,
311
+ sourceId: source.id,
312
+ kind: source.kind,
313
+ contentHash: source.content_hash,
314
+ parserName: source.parser_name,
315
+ parserVersion: source.parser_version,
316
+ parserOptionsHash: source.parser_options_hash
317
+ };
318
+ }
319
+ export function serializeTraceError(error) {
320
+ if (error instanceof Error) {
321
+ const serialized = {
322
+ name: error.name,
323
+ message: error.message
324
+ };
325
+ if (error.stack !== undefined) {
326
+ serialized.stack = error.stack;
327
+ }
328
+ if (error.cause !== undefined) {
329
+ serialized.cause = serializeTraceError(error.cause);
330
+ }
331
+ return serialized;
332
+ }
333
+ return {
334
+ name: typeof error,
335
+ message: String(error)
336
+ };
337
+ }
180
338
  function isUnchanged(existing, next) {
181
339
  return (existing !== undefined &&
182
340
  existing.id === next.id &&