Skip to content

Commit 957b76b

Browse files
author
StackMemory Bot (CLI)
committed
fix(provenant): address warning-level code quality issues
- Add console.warn to silent catch blocks in ingest.ts and engine.ts - Sanitize error messages in query fallback to prevent API key leakage - Fix reasoning_resolved type from boolean to 0|1 to match SQLite storage - Remove unnecessary Promise.resolve wrapper in keywordSearch
1 parent 9e3994a commit 957b76b

4 files changed

Lines changed: 30 additions & 19 deletions

File tree

packages/provenant/src/pipeline/ingest.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,11 @@ export async function ingest(
113113
let dedupResult: DedupResult;
114114
try {
115115
dedupResult = await checkDedup(db, embedder, record, cfg);
116-
} catch {
117-
// Embedding failed — skip dedup, treat as independent
116+
} catch (err) {
117+
console.warn(
118+
'[provenant] dedup check failed, treating as independent:',
119+
err
120+
);
118121
dedupResult = { outcome: 'independent' };
119122
}
120123
if (dedupResult.outcome === 'merged') {
@@ -152,8 +155,11 @@ export async function ingest(
152155
embedding = embeddingToBuffer(
153156
(await embedder.embed(record.content)).embedding
154157
);
155-
} catch {
156-
// Embedding failed — write node without embedding
158+
} catch (err) {
159+
console.warn(
160+
'[provenant] embedding failed, writing node without embedding:',
161+
err
162+
);
157163
}
158164
}
159165

packages/provenant/src/query/engine.ts

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,12 @@ export async function query(
9292
answer = await askClaude(question, context, config);
9393
} catch (err) {
9494
// LLM unavailable — return raw context as the answer
95-
const msg = err instanceof Error ? err.message : String(err);
96-
answer = `[Claude unavailable: ${msg}]\n\nRaw context:\n${context}`;
95+
const msg = err instanceof Error ? err.message : 'unknown error';
96+
// Sanitize error message to avoid leaking API keys in auth errors
97+
const safeMsg = msg
98+
.replace(/sk-[a-zA-Z0-9-_]+/g, '[REDACTED]')
99+
.replace(/key[_-]?[a-zA-Z0-9]{16,}/gi, '[REDACTED]');
100+
answer = `[Claude unavailable: ${safeMsg}]\n\nRaw context:\n${context}`;
97101
}
98102

99103
return {
@@ -118,8 +122,11 @@ async function findRelevantNodes(
118122
if (embedder) {
119123
try {
120124
return await semanticSearch(db, embedder, question, maxNodes, config);
121-
} catch {
122-
// Embedding failed (bad key, network, etc.) — fall back to keywords
125+
} catch (err) {
126+
console.warn(
127+
'[provenant] semantic search failed, falling back to keywords:',
128+
err
129+
);
123130
}
124131
}
125132
return keywordSearch(db, question, maxNodes, config);
@@ -152,7 +159,7 @@ function keywordSearch(
152159
question: string,
153160
maxNodes: number,
154161
config: QueryConfig
155-
): Promise<Citation[]> {
162+
): Citation[] {
156163
// Extract keywords (strip common words)
157164
const stopwords = new Set([
158165
'the',
@@ -197,14 +204,12 @@ function keywordSearch(
197204
config.since
198205
);
199206

200-
return Promise.resolve(
201-
nodes.map((node) => ({
202-
node,
203-
sources: [],
204-
edges: [],
205-
relevance: 0.5, // unknown relevance without embeddings
206-
}))
207-
);
207+
return nodes.map((node) => ({
208+
node,
209+
sources: [],
210+
edges: [],
211+
relevance: 0.5, // unknown relevance without embeddings
212+
}));
208213
}
209214

210215
// --- Context building ---

packages/provenant/src/schema/database.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ export class Database {
352352
suggestion_node: params.suggestion_node,
353353
override_node: params.override_node ?? null,
354354
reasoning: params.reasoning ?? null,
355-
reasoning_resolved: params.reasoning != null,
355+
reasoning_resolved: params.reasoning != null ? 1 : 0,
356356
actor: params.actor ?? null,
357357
created_at: Date.now(),
358358
};

packages/provenant/src/schema/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export interface RejectionLogEntry {
6767
suggestion_node: string;
6868
override_node: string | null;
6969
reasoning: string | null;
70-
reasoning_resolved: boolean;
70+
reasoning_resolved: 0 | 1;
7171
actor: string | null;
7272
created_at: number;
7373
}

0 commit comments

Comments
 (0)