mirror of
https://github.com/Kaelio/ktx.git
synced 2026-06-22 08:38:08 +02:00
* feat(cli): share public ingest progress adapter * feat(cli): stream plain public ingest progress * test(cli): update plain ingest progress assertions * chore(cli): satisfy plain ingest progress checks * fix(artifacts): expect plain ingest stderr progress in installed-CLI smoke * ci(coverage): make Codecov upload non-fatal and fix repo slug The Coverage job failed because the Codecov upload returned 'Repository not found' while fail_ci_if_error was true, turning a Codecov-side issue into a hard CI failure even though all tests pass. - Set fail_ci_if_error: false on both uploads so Codecov outages or an unlinked repo no longer break CI (upload stays best-effort). - Correct the stale slug Kaelio/ktx -> Kaelio/ktx-ai-data-agents-context to match the actual GitHub repo (aligns with main). * fix(cli): isolate query-history failure capture from scan output The plain public-ingest progress path passes one captured IO as the target-level `io`. With progress deps set, both the schema scan and the query-history ingest resolved their capture to that same shared buffer, so a non-actionable query-history failure surfaced leftover scan report text (e.g. "Mode: enriched") as the skipped-facet detail instead of the real query-history message. Give the query-history ingest a phase-local capture while preserving the flow-to-io branch the foreground context-build view relies on. --------- Co-authored-by: Andrey Avtomonov <7889985+andreybavt@users.noreply.github.com>
29 lines
1.1 KiB
TypeScript
29 lines
1.1 KiB
TypeScript
import type { KtxProgressPort, KtxProgressUpdateOptions } from './context/scan/types.js';
|
|
import type { KtxIngestProgressUpdate } from './ingest.js';
|
|
|
|
export interface AggregateProgressState {
|
|
progress: number;
|
|
}
|
|
|
|
export function createAggregateProgressPort(
|
|
onProgress: (update: KtxIngestProgressUpdate) => void,
|
|
state: AggregateProgressState = { progress: 0 },
|
|
start = 0,
|
|
weight = 1,
|
|
): KtxProgressPort {
|
|
return {
|
|
async update(value: number, message?: string, options?: KtxProgressUpdateOptions): Promise<void> {
|
|
const absoluteValue = start + Math.max(0, Math.min(1, value)) * weight;
|
|
state.progress = Math.max(state.progress, Math.min(1, absoluteValue));
|
|
if (!message) return;
|
|
onProgress({
|
|
percent: Math.max(0, Math.min(100, Math.round(state.progress * 100))),
|
|
message,
|
|
...(options?.transient !== undefined ? { transient: options.transient } : {}),
|
|
});
|
|
},
|
|
startPhase(phaseWeight: number): KtxProgressPort {
|
|
return createAggregateProgressPort(onProgress, state, state.progress, weight * phaseWeight);
|
|
},
|
|
};
|
|
}
|