@oscharko-dev/keiko-local-knowledge 0.2.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/dist/.tsbuildinfo +1 -0
- package/dist/bounded-document-extraction.d.ts +27 -0
- package/dist/bounded-document-extraction.d.ts.map +1 -0
- package/dist/bounded-document-extraction.js +214 -0
- package/dist/capsule-lifecycle.d.ts +33 -0
- package/dist/capsule-lifecycle.d.ts.map +1 -0
- package/dist/capsule-lifecycle.js +292 -0
- package/dist/capsule-set-lifecycle.d.ts +15 -0
- package/dist/capsule-set-lifecycle.d.ts.map +1 -0
- package/dist/capsule-set-lifecycle.js +158 -0
- package/dist/chunking/chunker-persist.d.ts +36 -0
- package/dist/chunking/chunker-persist.d.ts.map +1 -0
- package/dist/chunking/chunker-persist.js +74 -0
- package/dist/chunking/chunker-runner.d.ts +9 -0
- package/dist/chunking/chunker-runner.d.ts.map +1 -0
- package/dist/chunking/chunker-runner.js +218 -0
- package/dist/chunking/chunker.d.ts +7 -0
- package/dist/chunking/chunker.d.ts.map +1 -0
- package/dist/chunking/chunker.js +139 -0
- package/dist/chunking/citation-mapper.d.ts +4 -0
- package/dist/chunking/citation-mapper.d.ts.map +1 -0
- package/dist/chunking/citation-mapper.js +180 -0
- package/dist/chunking/index.d.ts +6 -0
- package/dist/chunking/index.d.ts.map +1 -0
- package/dist/chunking/index.js +8 -0
- package/dist/chunking/token-estimator.d.ts +3 -0
- package/dist/chunking/token-estimator.d.ts.map +1 -0
- package/dist/chunking/token-estimator.js +26 -0
- package/dist/chunking/types.d.ts +49 -0
- package/dist/chunking/types.d.ts.map +1 -0
- package/dist/chunking/types.js +26 -0
- package/dist/composition.d.ts +57 -0
- package/dist/composition.d.ts.map +1 -0
- package/dist/composition.js +310 -0
- package/dist/conversation/citation-attacher.d.ts +8 -0
- package/dist/conversation/citation-attacher.d.ts.map +1 -0
- package/dist/conversation/citation-attacher.js +55 -0
- package/dist/conversation/citation-excerpts.d.ts +4 -0
- package/dist/conversation/citation-excerpts.d.ts.map +1 -0
- package/dist/conversation/citation-excerpts.js +41 -0
- package/dist/conversation/grounded-answer-runner.d.ts +9 -0
- package/dist/conversation/grounded-answer-runner.d.ts.map +1 -0
- package/dist/conversation/grounded-answer-runner.js +61 -0
- package/dist/conversation/index.d.ts +5 -0
- package/dist/conversation/index.d.ts.map +1 -0
- package/dist/conversation/index.js +7 -0
- package/dist/conversation/model-gateway-answer-generator.d.ts +28 -0
- package/dist/conversation/model-gateway-answer-generator.d.ts.map +1 -0
- package/dist/conversation/model-gateway-answer-generator.js +105 -0
- package/dist/conversation/types.d.ts +35 -0
- package/dist/conversation/types.d.ts.map +1 -0
- package/dist/conversation/types.js +24 -0
- package/dist/discovery/discovery-runner.d.ts +23 -0
- package/dist/discovery/discovery-runner.d.ts.map +1 -0
- package/dist/discovery/discovery-runner.js +109 -0
- package/dist/discovery/extract-progressive.d.ts +17 -0
- package/dist/discovery/extract-progressive.d.ts.map +1 -0
- package/dist/discovery/extract-progressive.js +522 -0
- package/dist/discovery/extract.d.ts +26 -0
- package/dist/discovery/extract.d.ts.map +1 -0
- package/dist/discovery/extract.js +906 -0
- package/dist/discovery/glob.d.ts +10 -0
- package/dist/discovery/glob.d.ts.map +1 -0
- package/dist/discovery/glob.js +72 -0
- package/dist/discovery/index.d.ts +6 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +8 -0
- package/dist/discovery/media-type.d.ts +4 -0
- package/dist/discovery/media-type.d.ts.map +1 -0
- package/dist/discovery/media-type.js +62 -0
- package/dist/discovery/persist.d.ts +63 -0
- package/dist/discovery/persist.d.ts.map +1 -0
- package/dist/discovery/persist.js +345 -0
- package/dist/discovery/test-support.d.ts +16 -0
- package/dist/discovery/test-support.d.ts.map +1 -0
- package/dist/discovery/test-support.js +127 -0
- package/dist/discovery/types.d.ts +63 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/discovery/types.js +28 -0
- package/dist/discovery/walk.d.ts +12 -0
- package/dist/discovery/walk.d.ts.map +1 -0
- package/dist/discovery/walk.js +302 -0
- package/dist/errors.d.ts +13 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +22 -0
- package/dist/evaluations/dimensions.d.ts +14 -0
- package/dist/evaluations/dimensions.d.ts.map +1 -0
- package/dist/evaluations/dimensions.js +191 -0
- package/dist/evaluations/fixtures.d.ts +18 -0
- package/dist/evaluations/fixtures.d.ts.map +1 -0
- package/dist/evaluations/fixtures.js +858 -0
- package/dist/evaluations/index.d.ts +7 -0
- package/dist/evaluations/index.d.ts.map +1 -0
- package/dist/evaluations/index.js +10 -0
- package/dist/evaluations/report.d.ts +3 -0
- package/dist/evaluations/report.d.ts.map +1 -0
- package/dist/evaluations/report.js +31 -0
- package/dist/evaluations/runner-seed.d.ts +12 -0
- package/dist/evaluations/runner-seed.d.ts.map +1 -0
- package/dist/evaluations/runner-seed.js +175 -0
- package/dist/evaluations/runner.d.ts +8 -0
- package/dist/evaluations/runner.d.ts.map +1 -0
- package/dist/evaluations/runner.js +205 -0
- package/dist/evaluations/scripted-embedding-adapter.d.ts +13 -0
- package/dist/evaluations/scripted-embedding-adapter.d.ts.map +1 -0
- package/dist/evaluations/scripted-embedding-adapter.js +163 -0
- package/dist/evaluations/types.d.ts +116 -0
- package/dist/evaluations/types.d.ts.map +1 -0
- package/dist/evaluations/types.js +27 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/indexing/bounded-indexing.d.ts +41 -0
- package/dist/indexing/bounded-indexing.d.ts.map +1 -0
- package/dist/indexing/bounded-indexing.js +240 -0
- package/dist/indexing/checkpoint-persist.d.ts +8 -0
- package/dist/indexing/checkpoint-persist.d.ts.map +1 -0
- package/dist/indexing/checkpoint-persist.js +135 -0
- package/dist/indexing/checkpoint-resume.d.ts +20 -0
- package/dist/indexing/checkpoint-resume.d.ts.map +1 -0
- package/dist/indexing/checkpoint-resume.js +50 -0
- package/dist/indexing/embedding-batcher.d.ts +3 -0
- package/dist/indexing/embedding-batcher.d.ts.map +1 -0
- package/dist/indexing/embedding-batcher.js +390 -0
- package/dist/indexing/index.d.ts +7 -0
- package/dist/indexing/index.d.ts.map +1 -0
- package/dist/indexing/index.js +11 -0
- package/dist/indexing/job-persist.d.ts +46 -0
- package/dist/indexing/job-persist.d.ts.map +1 -0
- package/dist/indexing/job-persist.js +157 -0
- package/dist/indexing/job-resume.d.ts +4 -0
- package/dist/indexing/job-resume.d.ts.map +1 -0
- package/dist/indexing/job-resume.js +14 -0
- package/dist/indexing/orchestrator.d.ts +3 -0
- package/dist/indexing/orchestrator.d.ts.map +1 -0
- package/dist/indexing/orchestrator.js +1151 -0
- package/dist/indexing/types.d.ts +156 -0
- package/dist/indexing/types.d.ts.map +1 -0
- package/dist/indexing/types.js +30 -0
- package/dist/indexing/vector-persist.d.ts +32 -0
- package/dist/indexing/vector-persist.d.ts.map +1 -0
- package/dist/indexing/vector-persist.js +105 -0
- package/dist/parsers/_internal.d.ts +20 -0
- package/dist/parsers/_internal.d.ts.map +1 -0
- package/dist/parsers/_internal.js +122 -0
- package/dist/parsers/csv-parser.d.ts +3 -0
- package/dist/parsers/csv-parser.d.ts.map +1 -0
- package/dist/parsers/csv-parser.js +202 -0
- package/dist/parsers/docx-parser.d.ts +3 -0
- package/dist/parsers/docx-parser.d.ts.map +1 -0
- package/dist/parsers/docx-parser.js +390 -0
- package/dist/parsers/html-parser.d.ts +3 -0
- package/dist/parsers/html-parser.d.ts.map +1 -0
- package/dist/parsers/html-parser.js +310 -0
- package/dist/parsers/index.d.ts +15 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +41 -0
- package/dist/parsers/json-parser.d.ts +3 -0
- package/dist/parsers/json-parser.d.ts.map +1 -0
- package/dist/parsers/json-parser.js +192 -0
- package/dist/parsers/large-document/capability-discovery.d.ts +27 -0
- package/dist/parsers/large-document/capability-discovery.d.ts.map +1 -0
- package/dist/parsers/large-document/capability-discovery.js +76 -0
- package/dist/parsers/large-document/diagnostics.d.ts +3 -0
- package/dist/parsers/large-document/diagnostics.d.ts.map +1 -0
- package/dist/parsers/large-document/diagnostics.js +11 -0
- package/dist/parsers/large-document/index.d.ts +15 -0
- package/dist/parsers/large-document/index.d.ts.map +1 -0
- package/dist/parsers/large-document/index.js +10 -0
- package/dist/parsers/large-document/legacy-format.d.ts +5 -0
- package/dist/parsers/large-document/legacy-format.d.ts.map +1 -0
- package/dist/parsers/large-document/legacy-format.js +25 -0
- package/dist/parsers/large-document/preflight.d.ts +9 -0
- package/dist/parsers/large-document/preflight.d.ts.map +1 -0
- package/dist/parsers/large-document/preflight.js +43 -0
- package/dist/parsers/large-document/progressive-extraction.d.ts +55 -0
- package/dist/parsers/large-document/progressive-extraction.d.ts.map +1 -0
- package/dist/parsers/large-document/progressive-extraction.js +123 -0
- package/dist/parsers/large-document/progressive-pdf.d.ts +20 -0
- package/dist/parsers/large-document/progressive-pdf.d.ts.map +1 -0
- package/dist/parsers/large-document/progressive-pdf.js +145 -0
- package/dist/parsers/large-document/synthetic-source.d.ts +9 -0
- package/dist/parsers/large-document/synthetic-source.d.ts.map +1 -0
- package/dist/parsers/large-document/synthetic-source.js +101 -0
- package/dist/parsers/large-document/window-builder.d.ts +24 -0
- package/dist/parsers/large-document/window-builder.d.ts.map +1 -0
- package/dist/parsers/large-document/window-builder.js +75 -0
- package/dist/parsers/ocr/index.d.ts +4 -0
- package/dist/parsers/ocr/index.d.ts.map +1 -0
- package/dist/parsers/ocr/index.js +4 -0
- package/dist/parsers/ocr/null-ocr-adapter.d.ts +3 -0
- package/dist/parsers/ocr/null-ocr-adapter.d.ts.map +1 -0
- package/dist/parsers/ocr/null-ocr-adapter.js +14 -0
- package/dist/parsers/ocr/ocr-pipeline-parser.d.ts +8 -0
- package/dist/parsers/ocr/ocr-pipeline-parser.d.ts.map +1 -0
- package/dist/parsers/ocr/ocr-pipeline-parser.js +147 -0
- package/dist/parsers/ocr/types.d.ts +16 -0
- package/dist/parsers/ocr/types.d.ts.map +1 -0
- package/dist/parsers/ocr/types.js +4 -0
- package/dist/parsers/parser-test-fixtures.d.ts +28 -0
- package/dist/parsers/parser-test-fixtures.d.ts.map +1 -0
- package/dist/parsers/parser-test-fixtures.js +139 -0
- package/dist/parsers/pdf-parser.d.ts +43 -0
- package/dist/parsers/pdf-parser.d.ts.map +1 -0
- package/dist/parsers/pdf-parser.js +388 -0
- package/dist/parsers/registry.d.ts +8 -0
- package/dist/parsers/registry.d.ts.map +1 -0
- package/dist/parsers/registry.js +57 -0
- package/dist/parsers/text-parser.d.ts +3 -0
- package/dist/parsers/text-parser.d.ts.map +1 -0
- package/dist/parsers/text-parser.js +214 -0
- package/dist/parsers/types.d.ts +53 -0
- package/dist/parsers/types.d.ts.map +1 -0
- package/dist/parsers/types.js +21 -0
- package/dist/parsers/unsupported-parser.d.ts +4 -0
- package/dist/parsers/unsupported-parser.d.ts.map +1 -0
- package/dist/parsers/unsupported-parser.js +97 -0
- package/dist/parsers/xlsx-parser.d.ts +3 -0
- package/dist/parsers/xlsx-parser.d.ts.map +1 -0
- package/dist/parsers/xlsx-parser.js +425 -0
- package/dist/privacy/audit-emitter.d.ts +5 -0
- package/dist/privacy/audit-emitter.d.ts.map +1 -0
- package/dist/privacy/audit-emitter.js +93 -0
- package/dist/privacy/diagnostic-redactor.d.ts +2 -0
- package/dist/privacy/diagnostic-redactor.d.ts.map +1 -0
- package/dist/privacy/diagnostic-redactor.js +153 -0
- package/dist/privacy/index.d.ts +5 -0
- package/dist/privacy/index.d.ts.map +1 -0
- package/dist/privacy/index.js +6 -0
- package/dist/privacy/retention-applier.d.ts +5 -0
- package/dist/privacy/retention-applier.d.ts.map +1 -0
- package/dist/privacy/retention-applier.js +88 -0
- package/dist/privacy/types.d.ts +98 -0
- package/dist/privacy/types.d.ts.map +1 -0
- package/dist/privacy/types.js +12 -0
- package/dist/qualityIntelligence/capsuleCorpus.d.ts +27 -0
- package/dist/qualityIntelligence/capsuleCorpus.d.ts.map +1 -0
- package/dist/qualityIntelligence/capsuleCorpus.js +58 -0
- package/dist/qualityIntelligence/index.d.ts +3 -0
- package/dist/qualityIntelligence/index.d.ts.map +1 -0
- package/dist/qualityIntelligence/index.js +5 -0
- package/dist/qualityIntelligence/qiHandoff.d.ts +36 -0
- package/dist/qualityIntelligence/qiHandoff.d.ts.map +1 -0
- package/dist/qualityIntelligence/qiHandoff.js +82 -0
- package/dist/retrieval/answer-grounding.d.ts +9 -0
- package/dist/retrieval/answer-grounding.d.ts.map +1 -0
- package/dist/retrieval/answer-grounding.js +31 -0
- package/dist/retrieval/context-pack-assembler.d.ts +24 -0
- package/dist/retrieval/context-pack-assembler.d.ts.map +1 -0
- package/dist/retrieval/context-pack-assembler.js +50 -0
- package/dist/retrieval/index.d.ts +6 -0
- package/dist/retrieval/index.d.ts.map +1 -0
- package/dist/retrieval/index.js +9 -0
- package/dist/retrieval/retrieval-runner.d.ts +10 -0
- package/dist/retrieval/retrieval-runner.d.ts.map +1 -0
- package/dist/retrieval/retrieval-runner.js +163 -0
- package/dist/retrieval/scoped-vector-search.d.ts +24 -0
- package/dist/retrieval/scoped-vector-search.d.ts.map +1 -0
- package/dist/retrieval/scoped-vector-search.js +864 -0
- package/dist/retrieval/types.d.ts +28 -0
- package/dist/retrieval/types.d.ts.map +1 -0
- package/dist/retrieval/types.js +33 -0
- package/dist/section-path-hash.d.ts +3 -0
- package/dist/section-path-hash.d.ts.map +1 -0
- package/dist/section-path-hash.js +9 -0
- package/dist/source-lifecycle.d.ts +14 -0
- package/dist/source-lifecycle.d.ts.map +1 -0
- package/dist/source-lifecycle.js +155 -0
- package/dist/source-routing-validation.d.ts +11 -0
- package/dist/source-routing-validation.d.ts.map +1 -0
- package/dist/source-routing-validation.js +140 -0
- package/dist/store-content-cipher.d.ts +11 -0
- package/dist/store-content-cipher.d.ts.map +1 -0
- package/dist/store-content-cipher.js +67 -0
- package/dist/store-content-encryption.d.ts +12 -0
- package/dist/store-content-encryption.d.ts.map +1 -0
- package/dist/store-content-encryption.js +275 -0
- package/dist/store-paths.d.ts +6 -0
- package/dist/store-paths.d.ts.map +1 -0
- package/dist/store-paths.js +61 -0
- package/dist/store.d.ts +30 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +219 -0
- package/dist/testing.d.ts +47 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +170 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +4 -0
- package/package.json +43 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { IndexingJobError, IndexingJobRecord, IndexingJobStatus, KnowledgeCapsuleId, KnowledgeSourceId } from "@oscharko-dev/keiko-contracts";
|
|
2
|
+
import type { DatabaseSync } from "node:sqlite";
|
|
3
|
+
export interface IndexingJobRow {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly capsule_id: string;
|
|
6
|
+
readonly source_ids_json: string;
|
|
7
|
+
readonly started_at: number;
|
|
8
|
+
readonly finished_at: number | null;
|
|
9
|
+
readonly status: string;
|
|
10
|
+
readonly total_documents: number;
|
|
11
|
+
readonly processed_documents: number;
|
|
12
|
+
readonly failed_documents: number;
|
|
13
|
+
readonly skipped_documents: number;
|
|
14
|
+
readonly last_error_code: string | null;
|
|
15
|
+
readonly last_error_message: string | null;
|
|
16
|
+
readonly resume_token: string | null;
|
|
17
|
+
readonly cancellation_requested: number;
|
|
18
|
+
}
|
|
19
|
+
export interface InsertJobInput {
|
|
20
|
+
readonly id: string;
|
|
21
|
+
readonly capsuleId: KnowledgeCapsuleId;
|
|
22
|
+
readonly sourceIds: readonly KnowledgeSourceId[];
|
|
23
|
+
readonly startedAt: number;
|
|
24
|
+
}
|
|
25
|
+
export declare function insertJobRow(db: DatabaseSync, input: InsertJobInput): void;
|
|
26
|
+
export interface JobCounters {
|
|
27
|
+
readonly total: number;
|
|
28
|
+
readonly processed: number;
|
|
29
|
+
readonly failed: number;
|
|
30
|
+
readonly skipped: number;
|
|
31
|
+
readonly resumeToken: string | null;
|
|
32
|
+
}
|
|
33
|
+
export declare function updateJobCounters(db: DatabaseSync, id: string, counters: JobCounters): void;
|
|
34
|
+
export interface FinalizeJobInput {
|
|
35
|
+
readonly id: string;
|
|
36
|
+
readonly status: IndexingJobStatus;
|
|
37
|
+
readonly finishedAt: number;
|
|
38
|
+
readonly counters: JobCounters;
|
|
39
|
+
readonly lastError?: IndexingJobError;
|
|
40
|
+
}
|
|
41
|
+
export declare function finalizeJobRow(db: DatabaseSync, input: FinalizeJobInput): void;
|
|
42
|
+
export declare function selectRunningJobByCapsule(db: DatabaseSync, capsuleId: KnowledgeCapsuleId): IndexingJobRow | undefined;
|
|
43
|
+
export declare function selectJobById(db: DatabaseSync, id: string): IndexingJobRow | undefined;
|
|
44
|
+
export declare function isJobCancellationRequested(db: DatabaseSync, id: string): boolean;
|
|
45
|
+
export declare function rowToIndexingJobRecord(row: IndexingJobRow): IndexingJobRecord;
|
|
46
|
+
//# sourceMappingURL=job-persist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-persist.d.ts","sourceRoot":"","sources":["../../src/indexing/job-persist.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAyDhD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAQ1E;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,CAS3F;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;CACvC;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAa9E;AAED,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,YAAY,EAChB,SAAS,EAAE,kBAAkB,GAC5B,cAAc,GAAG,SAAS,CAG5B;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAGtF;AAED,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAKhF;AA4CD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,cAAc,GAAG,iBAAiB,CAa7E"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// Prepared-statement helpers for the `indexing_jobs` table (Epic #189, Issue #196). The
|
|
2
|
+
// orchestrator writes one row per run and updates it through the lifecycle:
|
|
3
|
+
//
|
|
4
|
+
// started → progress (per document) → succeeded | failed | cancelled
|
|
5
|
+
//
|
|
6
|
+
// The schema reserves `cancellation_requested` (INTEGER 0/1) for a future external-cancel
|
|
7
|
+
// surface; this layer writes it but does not poll it (the orchestrator drives cancellation
|
|
8
|
+
// purely via AbortSignal).
|
|
9
|
+
//
|
|
10
|
+
// `resume_token` is set to the lexicographically-greatest `chunk_id` embedded so far so a
|
|
11
|
+
// subsequent resume can continue past it. The orchestrator's incremental skip still scopes
|
|
12
|
+
// to documents — the token is purely diagnostic for now and is consumed by #198 UI later.
|
|
13
|
+
const INSERT_JOB_SQL = [
|
|
14
|
+
"INSERT INTO indexing_jobs (",
|
|
15
|
+
" id, capsule_id, source_ids_json, started_at, finished_at, status,",
|
|
16
|
+
" total_documents, processed_documents, failed_documents, skipped_documents,",
|
|
17
|
+
" last_error_code, last_error_message, resume_token, cancellation_requested",
|
|
18
|
+
") VALUES (",
|
|
19
|
+
" :id, :capsule_id, :source_ids_json, :started_at, NULL, :status,",
|
|
20
|
+
" 0, 0, 0, 0, NULL, NULL, NULL, 0",
|
|
21
|
+
")",
|
|
22
|
+
].join(" ");
|
|
23
|
+
const UPDATE_COUNTERS_SQL = [
|
|
24
|
+
"UPDATE indexing_jobs SET",
|
|
25
|
+
" total_documents = :total,",
|
|
26
|
+
" processed_documents = :processed,",
|
|
27
|
+
" failed_documents = :failed,",
|
|
28
|
+
" skipped_documents = :skipped,",
|
|
29
|
+
" resume_token = :resume",
|
|
30
|
+
"WHERE id = :id",
|
|
31
|
+
].join(" ");
|
|
32
|
+
const FINALIZE_JOB_SQL = [
|
|
33
|
+
"UPDATE indexing_jobs SET",
|
|
34
|
+
" status = :status,",
|
|
35
|
+
" finished_at = :finished_at,",
|
|
36
|
+
" total_documents = :total,",
|
|
37
|
+
" processed_documents = :processed,",
|
|
38
|
+
" failed_documents = :failed,",
|
|
39
|
+
" skipped_documents = :skipped,",
|
|
40
|
+
" last_error_code = :error_code,",
|
|
41
|
+
" last_error_message = :error_message,",
|
|
42
|
+
" resume_token = :resume",
|
|
43
|
+
"WHERE id = :id",
|
|
44
|
+
].join(" ");
|
|
45
|
+
const SELECT_RUNNING_BY_CAPSULE_SQL = [
|
|
46
|
+
"SELECT id, capsule_id, source_ids_json, started_at, finished_at, status,",
|
|
47
|
+
" total_documents, processed_documents, failed_documents, skipped_documents,",
|
|
48
|
+
" last_error_code, last_error_message, resume_token, cancellation_requested",
|
|
49
|
+
"FROM indexing_jobs",
|
|
50
|
+
"WHERE capsule_id = :c AND status = 'running'",
|
|
51
|
+
// started_at DESC so the most recent abandoned run wins. Ties broken by id ASC for
|
|
52
|
+
// deterministic resume behaviour across clocks that issue duplicate ms timestamps.
|
|
53
|
+
"ORDER BY started_at DESC, id ASC",
|
|
54
|
+
"LIMIT 1",
|
|
55
|
+
].join(" ");
|
|
56
|
+
const SELECT_BY_ID_SQL = [
|
|
57
|
+
"SELECT id, capsule_id, source_ids_json, started_at, finished_at, status,",
|
|
58
|
+
" total_documents, processed_documents, failed_documents, skipped_documents,",
|
|
59
|
+
" last_error_code, last_error_message, resume_token, cancellation_requested",
|
|
60
|
+
"FROM indexing_jobs",
|
|
61
|
+
"WHERE id = :id",
|
|
62
|
+
].join(" ");
|
|
63
|
+
export function insertJobRow(db, input) {
|
|
64
|
+
db.prepare(INSERT_JOB_SQL).run({
|
|
65
|
+
id: input.id,
|
|
66
|
+
capsule_id: String(input.capsuleId),
|
|
67
|
+
source_ids_json: JSON.stringify(input.sourceIds.map((s) => String(s))),
|
|
68
|
+
started_at: input.startedAt,
|
|
69
|
+
status: "running",
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
export function updateJobCounters(db, id, counters) {
|
|
73
|
+
db.prepare(UPDATE_COUNTERS_SQL).run({
|
|
74
|
+
id,
|
|
75
|
+
total: counters.total,
|
|
76
|
+
processed: counters.processed,
|
|
77
|
+
failed: counters.failed,
|
|
78
|
+
skipped: counters.skipped,
|
|
79
|
+
resume: counters.resumeToken,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
export function finalizeJobRow(db, input) {
|
|
83
|
+
db.prepare(FINALIZE_JOB_SQL).run({
|
|
84
|
+
id: input.id,
|
|
85
|
+
status: input.status,
|
|
86
|
+
finished_at: input.finishedAt,
|
|
87
|
+
total: input.counters.total,
|
|
88
|
+
processed: input.counters.processed,
|
|
89
|
+
failed: input.counters.failed,
|
|
90
|
+
skipped: input.counters.skipped,
|
|
91
|
+
error_code: input.lastError?.code ?? null,
|
|
92
|
+
error_message: input.lastError?.message ?? null,
|
|
93
|
+
resume: input.counters.resumeToken,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
export function selectRunningJobByCapsule(db, capsuleId) {
|
|
97
|
+
const row = db.prepare(SELECT_RUNNING_BY_CAPSULE_SQL).get({ c: String(capsuleId) });
|
|
98
|
+
return row === undefined ? undefined : row;
|
|
99
|
+
}
|
|
100
|
+
export function selectJobById(db, id) {
|
|
101
|
+
const row = db.prepare(SELECT_BY_ID_SQL).get({ id });
|
|
102
|
+
return row === undefined ? undefined : row;
|
|
103
|
+
}
|
|
104
|
+
export function isJobCancellationRequested(db, id) {
|
|
105
|
+
const row = db
|
|
106
|
+
.prepare("SELECT cancellation_requested FROM indexing_jobs WHERE id = :id")
|
|
107
|
+
.get({ id });
|
|
108
|
+
return row?.cancellation_requested === 1;
|
|
109
|
+
}
|
|
110
|
+
// ─── Row → IndexingJobRecord ──────────────────────────────────────────────────
|
|
111
|
+
function parseSourceIds(json) {
|
|
112
|
+
const parsed = JSON.parse(json);
|
|
113
|
+
if (!Array.isArray(parsed))
|
|
114
|
+
return [];
|
|
115
|
+
return parsed
|
|
116
|
+
.filter((entry) => typeof entry === "string")
|
|
117
|
+
.map((entry) => entry);
|
|
118
|
+
}
|
|
119
|
+
const VALID_STATUSES = new Set([
|
|
120
|
+
"queued",
|
|
121
|
+
"running",
|
|
122
|
+
"succeeded",
|
|
123
|
+
"failed",
|
|
124
|
+
"cancelled",
|
|
125
|
+
]);
|
|
126
|
+
function parseStatus(raw) {
|
|
127
|
+
// The schema does not CHECK status, so a corrupt row could carry an unexpected string.
|
|
128
|
+
// Default to "failed" so consumers do not silently accept a row that violates the closed
|
|
129
|
+
// union — the row remains visible (operators can recover it manually).
|
|
130
|
+
return VALID_STATUSES.has(raw) ? raw : "failed";
|
|
131
|
+
}
|
|
132
|
+
function buildLastError(row) {
|
|
133
|
+
if (row.last_error_code === null || row.last_error_message === null)
|
|
134
|
+
return undefined;
|
|
135
|
+
return { code: row.last_error_code, message: row.last_error_message };
|
|
136
|
+
}
|
|
137
|
+
function optionalJobFields(row) {
|
|
138
|
+
const lastError = buildLastError(row);
|
|
139
|
+
return {
|
|
140
|
+
...(row.finished_at !== null ? { finishedAt: row.finished_at } : {}),
|
|
141
|
+
...(lastError !== undefined ? { lastError } : {}),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
export function rowToIndexingJobRecord(row) {
|
|
145
|
+
return {
|
|
146
|
+
id: row.id,
|
|
147
|
+
capsuleId: row.capsule_id,
|
|
148
|
+
sourceIds: parseSourceIds(row.source_ids_json),
|
|
149
|
+
startedAt: row.started_at,
|
|
150
|
+
status: parseStatus(row.status),
|
|
151
|
+
totalDocuments: row.total_documents,
|
|
152
|
+
processedDocuments: row.processed_documents,
|
|
153
|
+
failedDocuments: row.failed_documents,
|
|
154
|
+
skippedDocuments: row.skipped_documents,
|
|
155
|
+
...optionalJobFields(row),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IndexingJobRecord, KnowledgeCapsuleId } from "@oscharko-dev/keiko-contracts";
|
|
2
|
+
import type { KnowledgeStore } from "../store.js";
|
|
3
|
+
export declare function findResumableJob(store: KnowledgeStore, capsuleId: KnowledgeCapsuleId): IndexingJobRecord | undefined;
|
|
4
|
+
//# sourceMappingURL=job-resume.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-resume.d.ts","sourceRoot":"","sources":["../../src/indexing/job-resume.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAG3F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,kBAAkB,GAC5B,iBAAiB,GAAG,SAAS,CAG/B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Resume helpers for the indexing orchestrator (Epic #189, Issue #196). The orchestrator
|
|
2
|
+
// writes `indexing_jobs.status = 'running'` at job-started and transitions to a terminal
|
|
3
|
+
// status at finalize. A run that crashes between those two writes leaves an orphaned row
|
|
4
|
+
// in `running` state — `findResumableJob` is how a follow-up process notices that row.
|
|
5
|
+
//
|
|
6
|
+
// The function is read-only on purpose: we do NOT auto-resume here. Callers (UI surfaces,
|
|
7
|
+
// the eventual `keiko index --resume` CLI) decide whether to re-run, abandon, or alert.
|
|
8
|
+
// The returned `IndexingJobRecord` carries `resume_token` (the lexicographically-greatest
|
|
9
|
+
// embedded `chunk_id` from the prior run) so a resumed run can elect to skip past it.
|
|
10
|
+
import { rowToIndexingJobRecord, selectRunningJobByCapsule } from "./job-persist.js";
|
|
11
|
+
export function findResumableJob(store, capsuleId) {
|
|
12
|
+
const row = selectRunningJobByCapsule(store._internal.db, capsuleId);
|
|
13
|
+
return row === undefined ? undefined : rowToIndexingJobRecord(row);
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/indexing/orchestrator.ts"],"names":[],"mappings":"AA0FA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,eAAe,EAErB,MAAM,YAAY,CAAC;AAm/CpB,wBAAuB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,CAAC,aAAa,CAAC,CA2B5F"}
|