@pegma/knowledge-base-application 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +140 -2
- package/dist/articles.d.ts +10 -0
- package/dist/articles.d.ts.map +1 -0
- package/dist/articles.js +454 -0
- package/dist/articles.js.map +1 -0
- package/dist/errors.d.ts +18 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +34 -0
- package/dist/errors.js.map +1 -0
- package/dist/governance.d.ts +14 -0
- package/dist/governance.d.ts.map +1 -0
- package/dist/governance.js +364 -0
- package/dist/governance.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/lexical.d.ts +13 -0
- package/dist/lexical.d.ts.map +1 -0
- package/dist/lexical.js +105 -0
- package/dist/lexical.js.map +1 -0
- package/dist/publication.d.ts +42 -0
- package/dist/publication.d.ts.map +1 -0
- package/dist/publication.js +258 -0
- package/dist/publication.js.map +1 -0
- package/dist/reads.d.ts +5 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +228 -0
- package/dist/reads.js.map +1 -0
- package/dist/records.d.ts +40 -0
- package/dist/records.d.ts.map +1 -0
- package/dist/records.js +122 -0
- package/dist/records.js.map +1 -0
- package/dist/repository.d.ts +74 -0
- package/dist/repository.d.ts.map +1 -0
- package/dist/repository.js +738 -0
- package/dist/repository.js.map +1 -0
- package/dist/retrieval-budget.d.ts +37 -0
- package/dist/retrieval-budget.d.ts.map +1 -0
- package/dist/retrieval-budget.js +111 -0
- package/dist/retrieval-budget.js.map +1 -0
- package/dist/retrieval-limits.d.ts +4 -0
- package/dist/retrieval-limits.d.ts.map +1 -0
- package/dist/retrieval-limits.js +21 -0
- package/dist/retrieval-limits.js.map +1 -0
- package/dist/retrieval-maintenance.d.ts +19 -0
- package/dist/retrieval-maintenance.d.ts.map +1 -0
- package/dist/retrieval-maintenance.js +359 -0
- package/dist/retrieval-maintenance.js.map +1 -0
- package/dist/retrieval-records.d.ts +55 -0
- package/dist/retrieval-records.d.ts.map +1 -0
- package/dist/retrieval-records.js +140 -0
- package/dist/retrieval-records.js.map +1 -0
- package/dist/retrieval-repository.d.ts +32 -0
- package/dist/retrieval-repository.d.ts.map +1 -0
- package/dist/retrieval-repository.js +750 -0
- package/dist/retrieval-repository.js.map +1 -0
- package/dist/retrieval-types.d.ts +185 -0
- package/dist/retrieval-types.d.ts.map +1 -0
- package/dist/retrieval-types.js +24 -0
- package/dist/retrieval-types.js.map +1 -0
- package/dist/retrieval.d.ts +12 -0
- package/dist/retrieval.d.ts.map +1 -0
- package/dist/retrieval.js +541 -0
- package/dist/retrieval.js.map +1 -0
- package/dist/storage-helpers.d.ts +23 -0
- package/dist/storage-helpers.d.ts.map +1 -0
- package/dist/storage-helpers.js +138 -0
- package/dist/storage-helpers.js.map +1 -0
- package/dist/types.d.ts +280 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +42 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Store } from "@pegma/storage-core";
|
|
2
|
+
/** Internal diagnostic/control flow; public retrieval stays content-free. */
|
|
3
|
+
export declare class RetrievalBudgetError extends Error {
|
|
4
|
+
readonly reason: "work" | "operation";
|
|
5
|
+
constructor(reason?: "work" | "operation");
|
|
6
|
+
}
|
|
7
|
+
export interface RequestReadLimits {
|
|
8
|
+
readonly maxPhysicalReads: number;
|
|
9
|
+
readonly maxIndexReads: number;
|
|
10
|
+
readonly maxPostingEntries: number;
|
|
11
|
+
readonly maxCandidateHeads: number;
|
|
12
|
+
readonly maxConfirmations: number;
|
|
13
|
+
readonly indexCollectionName: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ExternalRetrievalWork {
|
|
16
|
+
readonly keyedReads: number;
|
|
17
|
+
readonly physicalRows: number;
|
|
18
|
+
readonly postingEntries: number;
|
|
19
|
+
readonly pagesRead?: number;
|
|
20
|
+
}
|
|
21
|
+
export interface RetrievalReadBudget {
|
|
22
|
+
readonly store: Store;
|
|
23
|
+
remainingCandidateWork(): Required<ExternalRetrievalWork>;
|
|
24
|
+
indexEntries(count: number): void;
|
|
25
|
+
candidateHead(): void;
|
|
26
|
+
confirmation(): void;
|
|
27
|
+
accountExternal(work: ExternalRetrievalWork): void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A fresh wrapper belongs to exactly one request. Each scoped Store keyed read
|
|
31
|
+
* reserves its allowance before awaiting the backing Store, including misses.
|
|
32
|
+
* External candidate calls are sequential: check allowance before dispatch,
|
|
33
|
+
* then charge their reported work with accountExternal after return. The
|
|
34
|
+
* wrapper never owns or caches persistence.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createRetrievalReadBudget(backing: Store, limits: RequestReadLimits): RetrievalReadBudget;
|
|
37
|
+
//# sourceMappingURL=retrieval-budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval-budget.d.ts","sourceRoot":"","sources":["../src/retrieval-budget.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,KAAK,EACN,MAAM,qBAAqB,CAAC;AAE7B,6EAA6E;AAC7E,qBAAa,oBAAqB,SAAQ,KAAK;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW;IAAjD,YAAqB,MAAM,GAAE,MAAM,GAAG,WAAoB,EAOzD;CACF;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,sBAAsB,IAAI,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAC1D,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,IAAI,IAAI,CAAC;IACtB,YAAY,IAAI,IAAI,CAAC;IACrB,eAAe,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAAC;CACpD;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,KAAK,EACd,MAAM,EAAE,iBAAiB,GACxB,mBAAmB,CAwGrB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/** Internal diagnostic/control flow; public retrieval stays content-free. */
|
|
2
|
+
export class RetrievalBudgetError extends Error {
|
|
3
|
+
reason;
|
|
4
|
+
constructor(reason = "work") {
|
|
5
|
+
super(reason === "operation"
|
|
6
|
+
? "Knowledge retrieval cannot enumerate or mutate its request Store"
|
|
7
|
+
: "Knowledge retrieval exhausted its bounded work allowance");
|
|
8
|
+
this.reason = reason;
|
|
9
|
+
this.name = "RetrievalBudgetError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* A fresh wrapper belongs to exactly one request. Each scoped Store keyed read
|
|
14
|
+
* reserves its allowance before awaiting the backing Store, including misses.
|
|
15
|
+
* External candidate calls are sequential: check allowance before dispatch,
|
|
16
|
+
* then charge their reported work with accountExternal after return. The
|
|
17
|
+
* wrapper never owns or caches persistence.
|
|
18
|
+
*/
|
|
19
|
+
export function createRetrievalReadBudget(backing, limits) {
|
|
20
|
+
const captured = Object.freeze({ ...limits });
|
|
21
|
+
for (const bound of [
|
|
22
|
+
captured.maxPhysicalReads,
|
|
23
|
+
captured.maxIndexReads,
|
|
24
|
+
captured.maxPostingEntries,
|
|
25
|
+
captured.maxCandidateHeads,
|
|
26
|
+
captured.maxConfirmations,
|
|
27
|
+
]) {
|
|
28
|
+
if (!Number.isSafeInteger(bound) || bound < 1)
|
|
29
|
+
throw new TypeError("Retrieval read bounds must be positive integers");
|
|
30
|
+
}
|
|
31
|
+
let physicalReads = 0;
|
|
32
|
+
let indexReads = 0;
|
|
33
|
+
let entries = 0;
|
|
34
|
+
let candidateHeads = 0;
|
|
35
|
+
let confirmations = 0;
|
|
36
|
+
const count = (value) => {
|
|
37
|
+
if (!Number.isSafeInteger(value) || value < 0)
|
|
38
|
+
throw new RetrievalBudgetError();
|
|
39
|
+
return value;
|
|
40
|
+
};
|
|
41
|
+
const reserve = (collection) => {
|
|
42
|
+
if (physicalReads >= captured.maxPhysicalReads ||
|
|
43
|
+
(collection === captured.indexCollectionName &&
|
|
44
|
+
indexReads >= captured.maxIndexReads))
|
|
45
|
+
throw new RetrievalBudgetError();
|
|
46
|
+
physicalReads += 1;
|
|
47
|
+
if (collection === captured.indexCollectionName)
|
|
48
|
+
indexReads += 1;
|
|
49
|
+
};
|
|
50
|
+
const store = Object.freeze({
|
|
51
|
+
collection(definition) {
|
|
52
|
+
const target = backing.collection(definition);
|
|
53
|
+
return new Proxy(target, {
|
|
54
|
+
get(object, property) {
|
|
55
|
+
if (property === "get")
|
|
56
|
+
return async (key) => {
|
|
57
|
+
reserve(definition.name);
|
|
58
|
+
return object.get(key);
|
|
59
|
+
};
|
|
60
|
+
if (property === "getVersioned")
|
|
61
|
+
return async (key) => {
|
|
62
|
+
reserve(definition.name);
|
|
63
|
+
return object.getVersioned(key);
|
|
64
|
+
};
|
|
65
|
+
// Retrieval must neither scan a corpus nor mutate its authority/hints.
|
|
66
|
+
throw new RetrievalBudgetError("operation");
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
return Object.freeze({
|
|
72
|
+
store,
|
|
73
|
+
remainingCandidateWork() {
|
|
74
|
+
const reads = Math.max(0, Math.min(captured.maxPhysicalReads - physicalReads, captured.maxIndexReads - indexReads));
|
|
75
|
+
return Object.freeze({
|
|
76
|
+
keyedReads: reads,
|
|
77
|
+
physicalRows: reads,
|
|
78
|
+
pagesRead: reads,
|
|
79
|
+
postingEntries: Math.max(0, captured.maxPostingEntries - entries),
|
|
80
|
+
});
|
|
81
|
+
},
|
|
82
|
+
indexEntries(value) {
|
|
83
|
+
entries += count(value);
|
|
84
|
+
if (entries > captured.maxPostingEntries)
|
|
85
|
+
throw new RetrievalBudgetError();
|
|
86
|
+
},
|
|
87
|
+
candidateHead() {
|
|
88
|
+
candidateHeads += 1;
|
|
89
|
+
if (candidateHeads > captured.maxCandidateHeads)
|
|
90
|
+
throw new RetrievalBudgetError();
|
|
91
|
+
},
|
|
92
|
+
confirmation() {
|
|
93
|
+
confirmations += 1;
|
|
94
|
+
if (confirmations > captured.maxConfirmations)
|
|
95
|
+
throw new RetrievalBudgetError();
|
|
96
|
+
},
|
|
97
|
+
accountExternal(work) {
|
|
98
|
+
// Adapter accounting is host-supplied. Validate it and count work before
|
|
99
|
+
// consuming any hint; declared work cannot grant more authority or budget.
|
|
100
|
+
const reads = Math.max(count(work.keyedReads), count(work.physicalRows), count(work.pagesRead ?? 0));
|
|
101
|
+
physicalReads += reads;
|
|
102
|
+
indexReads += reads;
|
|
103
|
+
entries += count(work.postingEntries);
|
|
104
|
+
if (physicalReads > captured.maxPhysicalReads ||
|
|
105
|
+
indexReads > captured.maxIndexReads ||
|
|
106
|
+
entries > captured.maxPostingEntries)
|
|
107
|
+
throw new RetrievalBudgetError();
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=retrieval-budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval-budget.js","sourceRoot":"","sources":["../src/retrieval-budget.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type KnowledgeRetrievalLimits } from "./retrieval-types.js";
|
|
2
|
+
/** Instance admission settings can reduce the initial fixed component ceilings. */
|
|
3
|
+
export declare function resolveRetrievalLimits(overrides?: Partial<KnowledgeRetrievalLimits>): KnowledgeRetrievalLimits;
|
|
4
|
+
//# sourceMappingURL=retrieval-limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval-limits.d.ts","sourceRoot":"","sources":["../src/retrieval-limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAE9B,mFAAmF;AACnF,wBAAgB,sBAAsB,CACpC,SAAS,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAChD,wBAAwB,CAuB1B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defaultKnowledgeRetrievalLimits, } from "./retrieval-types.js";
|
|
2
|
+
/** Instance admission settings can reduce the initial fixed component ceilings. */
|
|
3
|
+
export function resolveRetrievalLimits(overrides = {}) {
|
|
4
|
+
if (overrides === null ||
|
|
5
|
+
typeof overrides !== "object" ||
|
|
6
|
+
Array.isArray(overrides))
|
|
7
|
+
throw new TypeError("Retrieval limits must be an object");
|
|
8
|
+
const names = Object.keys(defaultKnowledgeRetrievalLimits);
|
|
9
|
+
if (Object.keys(overrides).some((name) => !names.includes(name)))
|
|
10
|
+
throw new TypeError("Unknown knowledge retrieval limit");
|
|
11
|
+
const resolved = { ...defaultKnowledgeRetrievalLimits, ...overrides };
|
|
12
|
+
for (const name of names) {
|
|
13
|
+
const value = resolved[name];
|
|
14
|
+
if (!Number.isSafeInteger(value) ||
|
|
15
|
+
value < 1 ||
|
|
16
|
+
value > defaultKnowledgeRetrievalLimits[name])
|
|
17
|
+
throw new TypeError("Knowledge retrieval limits must be positive integers within their ceilings");
|
|
18
|
+
}
|
|
19
|
+
return Object.freeze(resolved);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=retrieval-limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval-limits.js","sourceRoot":"","sources":["../src/retrieval-limits.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,GAEhC,MAAM,sBAAsB,CAAC;AAE9B,mFAAmF;AACnF,MAAM,UAAU,sBAAsB,CACpC,SAAS,GAAsC,EAAE;IAEjD,IACE,SAAS,KAAK,IAAI;QAClB,OAAO,SAAS,KAAK,QAAQ;QAC7B,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAExB,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,EAAE,GAAG,+BAA+B,EAAE,GAAG,SAAS,EAAE,CAAC;IACtE,KAAK,MAAM,IAAI,IAAI,KAA2C,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;YAC5B,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC;YAE7C,MAAM,IAAI,SAAS,CACjB,4EAA4E,CAC7E,CAAC;IACN,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Store } from "@pegma/storage-core";
|
|
2
|
+
import type { createPublicationChecker } from "./publication.js";
|
|
3
|
+
import type { KnowledgeRepository } from "./repository.js";
|
|
4
|
+
import type { createRetrievalRepository } from "./retrieval-repository.js";
|
|
5
|
+
import type { KnowledgeRetrievalApplication, KnowledgeRetrievalLimits } from "./retrieval-types.js";
|
|
6
|
+
type PublicationChecker = ReturnType<typeof createPublicationChecker>;
|
|
7
|
+
type RetrievalRepository = ReturnType<typeof createRetrievalRepository>;
|
|
8
|
+
type MaintenanceMethods = Pick<KnowledgeRetrievalApplication, "repairArticleIndex" | "repairRetrievalPage" | "getArticleIndexStatus">;
|
|
9
|
+
interface MaintenanceOptions {
|
|
10
|
+
readonly store: Store;
|
|
11
|
+
readonly retrievalLimits: KnowledgeRetrievalLimits;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Orchestrates the one derived repository. It neither owns another index nor
|
|
15
|
+
* mutates authoritative records/jobs. Hosts persist the returned scan cursor.
|
|
16
|
+
*/
|
|
17
|
+
export declare function createRetrievalMaintenanceServices(repository: KnowledgeRepository, retrieval: RetrievalRepository, checker: PublicationChecker, options: MaintenanceOptions): MaintenanceMethods;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=retrieval-maintenance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval-maintenance.d.ts","sourceRoot":"","sources":["../src/retrieval-maintenance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAIjD,OAAO,KAAK,EAEV,wBAAwB,EACzB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAM3D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,KAAK,EAGV,6BAA6B,EAC7B,wBAAwB,EAEzB,MAAM,sBAAsB,CAAC;AAY9B,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;AACtE,KAAK,mBAAmB,GAAG,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;AACxE,KAAK,kBAAkB,GAAG,IAAI,CAC5B,6BAA6B,EAC7B,oBAAoB,GAAG,qBAAqB,GAAG,uBAAuB,CACvE,CAAC;AAEF,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,eAAe,EAAE,wBAAwB,CAAC;CACpD;AAgCD;;;GAGG;AACH,wBAAgB,kCAAkC,CAChD,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE,mBAAmB,EAC9B,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,kBAAkB,GAC1B,kBAAkB,CA8dpB"}
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { knowledgePermissions } from "@pegma/knowledge-base-contracts";
|
|
2
|
+
import { KnowledgeBaseNotFoundError, requirePermission } from "./errors.js";
|
|
3
|
+
import { indexArticleTerms } from "./lexical.js";
|
|
4
|
+
import { knowledgeRecords } from "./records.js";
|
|
5
|
+
import { canonicalJson, fingerprint, RepositoryCapacityError, RepositoryConflictError, RepositoryIntegrityError, requireGeneration, requireIdentifier, snapshotData, } from "./storage-helpers.js";
|
|
6
|
+
function objectInput(value, fields) {
|
|
7
|
+
const input = snapshotData(value);
|
|
8
|
+
if (input === null ||
|
|
9
|
+
typeof input !== "object" ||
|
|
10
|
+
Array.isArray(input) ||
|
|
11
|
+
Object.keys(input).some((field) => !fields.includes(field)))
|
|
12
|
+
throw new TypeError("Maintenance input contains unsupported fields");
|
|
13
|
+
return input;
|
|
14
|
+
}
|
|
15
|
+
function articleInput(value) {
|
|
16
|
+
const input = objectInput(value, ["articleId"]);
|
|
17
|
+
requireIdentifier(input.articleId, "articleId");
|
|
18
|
+
return input;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Orchestrates the one derived repository. It neither owns another index nor
|
|
22
|
+
* mutates authoritative records/jobs. Hosts persist the returned scan cursor.
|
|
23
|
+
*/
|
|
24
|
+
export function createRetrievalMaintenanceServices(repository, retrieval, checker, options) {
|
|
25
|
+
const limits = snapshotData(options.retrievalLimits);
|
|
26
|
+
for (const [bound, ceiling] of [
|
|
27
|
+
[limits.maxMaintenanceBatches, 32],
|
|
28
|
+
[limits.maxRepairScanRows, 100],
|
|
29
|
+
[limits.maxTermsPerArticle, 256],
|
|
30
|
+
]) {
|
|
31
|
+
if (!Number.isSafeInteger(bound) || bound < 1 || bound > ceiling)
|
|
32
|
+
throw new TypeError("Maintenance bounds exceed their supported ceiling");
|
|
33
|
+
}
|
|
34
|
+
const records = options.store.collection(knowledgeRecords);
|
|
35
|
+
function caller(access) {
|
|
36
|
+
const current = snapshotData(access);
|
|
37
|
+
requirePermission(current, knowledgePermissions.indexManage);
|
|
38
|
+
return current;
|
|
39
|
+
}
|
|
40
|
+
async function desired(access, articleId) {
|
|
41
|
+
const before = await repository.readResourceGeneration("article", articleId);
|
|
42
|
+
let checked;
|
|
43
|
+
try {
|
|
44
|
+
checked = await checker.check({ articleId, purpose: "index", access });
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
if (!(error instanceof KnowledgeBaseNotFoundError))
|
|
48
|
+
throw error;
|
|
49
|
+
// An old negative observation cannot withdraw a newly published revision.
|
|
50
|
+
const after = await repository.readResourceGeneration("article", articleId);
|
|
51
|
+
if (after !== before)
|
|
52
|
+
throw new RepositoryConflictError();
|
|
53
|
+
return { articleGeneration: after, targets: [], capacity: false };
|
|
54
|
+
}
|
|
55
|
+
let terms;
|
|
56
|
+
try {
|
|
57
|
+
terms = indexArticleTerms(checked.article, limits.maxTermsPerArticle);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
if (!(error instanceof TypeError) &&
|
|
61
|
+
!(error instanceof RepositoryCapacityError))
|
|
62
|
+
throw error;
|
|
63
|
+
return {
|
|
64
|
+
articleGeneration: checked.binding.articleGeneration,
|
|
65
|
+
checked,
|
|
66
|
+
targets: [],
|
|
67
|
+
capacity: true,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (terms.length > limits.maxTermsPerArticle)
|
|
71
|
+
return {
|
|
72
|
+
articleGeneration: checked.binding.articleGeneration,
|
|
73
|
+
checked,
|
|
74
|
+
targets: [],
|
|
75
|
+
capacity: true,
|
|
76
|
+
};
|
|
77
|
+
const bindingHash = await fingerprint(checked.binding);
|
|
78
|
+
return {
|
|
79
|
+
articleGeneration: checked.binding.articleGeneration,
|
|
80
|
+
checked,
|
|
81
|
+
capacity: false,
|
|
82
|
+
targets: checked.enabledUses.map((use) => {
|
|
83
|
+
const scope = {
|
|
84
|
+
collectionId: checked.binding.collectionId,
|
|
85
|
+
policyVersion: checked.binding.collectionPolicyVersion,
|
|
86
|
+
use,
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
scope,
|
|
90
|
+
hint: {
|
|
91
|
+
...scope,
|
|
92
|
+
articleId,
|
|
93
|
+
articleRevision: checked.binding.revision,
|
|
94
|
+
contentHash: checked.binding.contentHash,
|
|
95
|
+
generation: checked.binding.articleGeneration,
|
|
96
|
+
sourceGeneration: checked.binding.sourceGeneration,
|
|
97
|
+
bindingHash,
|
|
98
|
+
},
|
|
99
|
+
terms,
|
|
100
|
+
};
|
|
101
|
+
}),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
async function recheckDesired(articleId, plan) {
|
|
105
|
+
if (plan.checked !== undefined) {
|
|
106
|
+
// Preserve the original object: the checker owns its private confirmation.
|
|
107
|
+
await checker.recheck(plan.checked);
|
|
108
|
+
}
|
|
109
|
+
else if ((await repository.readResourceGeneration("article", articleId)) !==
|
|
110
|
+
plan.articleGeneration)
|
|
111
|
+
throw new RepositoryConflictError();
|
|
112
|
+
}
|
|
113
|
+
function status(articleId, articleGeneration, state, value, indexed = false, reason) {
|
|
114
|
+
return {
|
|
115
|
+
articleId,
|
|
116
|
+
status: value,
|
|
117
|
+
indexed,
|
|
118
|
+
articleGeneration,
|
|
119
|
+
projectionGeneration: state?.generation ?? null,
|
|
120
|
+
...(reason === undefined ? {} : { reason }),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function sameTargets(state, plan) {
|
|
124
|
+
const targetKey = (value) => canonicalJson({ scope: value.scope, hint: value.hint });
|
|
125
|
+
return (state.targets.length === plan.targets.length &&
|
|
126
|
+
canonicalJson(state.targets.map(targetKey).sort()) ===
|
|
127
|
+
canonicalJson(plan.targets.map(targetKey).sort()));
|
|
128
|
+
}
|
|
129
|
+
async function currentStatus(access, articleId) {
|
|
130
|
+
const state = await retrieval.readArticleProjection(articleId);
|
|
131
|
+
let plan;
|
|
132
|
+
try {
|
|
133
|
+
plan = await desired(access, articleId);
|
|
134
|
+
await recheckDesired(articleId, plan);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
if (error instanceof RepositoryCapacityError)
|
|
138
|
+
return status(articleId, null, state, "blocked", false, "capacity");
|
|
139
|
+
if (!(error instanceof RepositoryConflictError) &&
|
|
140
|
+
!(error instanceof KnowledgeBaseNotFoundError))
|
|
141
|
+
throw error;
|
|
142
|
+
const generation = await repository.readResourceGeneration("article", articleId);
|
|
143
|
+
return status(articleId, generation, state, "pending", false, "conflict");
|
|
144
|
+
}
|
|
145
|
+
if (plan.capacity)
|
|
146
|
+
return status(articleId, plan.articleGeneration, state, "blocked", false, "capacity");
|
|
147
|
+
if (state === null)
|
|
148
|
+
return status(articleId, plan.articleGeneration, null, plan.articleGeneration === null ? "ready" : "pending");
|
|
149
|
+
const sourceGeneration = plan.articleGeneration ?? state.sourceGeneration;
|
|
150
|
+
if (state.sourceGeneration !== sourceGeneration)
|
|
151
|
+
return status(articleId, plan.articleGeneration, state, "pending", false, "conflict");
|
|
152
|
+
// Initial admission failures intentionally retain only a minimal marker.
|
|
153
|
+
// It remains useful only while a positive plan still needs admission;
|
|
154
|
+
// withdrawn or otherwise changed plans need cleanup instead of an old hold.
|
|
155
|
+
const same = sameTargets(state, plan);
|
|
156
|
+
const positiveAdmissionMarker = state.status === "blocked" &&
|
|
157
|
+
state.reason === "capacity" &&
|
|
158
|
+
state.targets.length === 0 &&
|
|
159
|
+
state.knownScopes.length === 0 &&
|
|
160
|
+
state.pendingScopes.length === 0 &&
|
|
161
|
+
plan.targets.length > 0;
|
|
162
|
+
if ((!same && !positiveAdmissionMarker) ||
|
|
163
|
+
(state.status === "blocked" && plan.targets.length === 0))
|
|
164
|
+
return status(articleId, plan.articleGeneration, state, "pending", false, plan.targets.length === 0 ? "source-unavailable" : "conflict");
|
|
165
|
+
if (state.status === "blocked")
|
|
166
|
+
return status(articleId, plan.articleGeneration, state, "blocked", false, state.reason);
|
|
167
|
+
return status(articleId, plan.articleGeneration, state, state.status, state.status === "ready" && plan.targets.length > 0);
|
|
168
|
+
}
|
|
169
|
+
async function markBlocked(articleId, state, reason, sourceGeneration) {
|
|
170
|
+
if (state === null && sourceGeneration === undefined)
|
|
171
|
+
return null;
|
|
172
|
+
try {
|
|
173
|
+
return await retrieval.markArticleProjectionBlocked(articleId, state?.generation ?? 1, reason, state === null ? sourceGeneration : undefined);
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
if (!(error instanceof RepositoryConflictError))
|
|
177
|
+
throw error;
|
|
178
|
+
// A stale worker must not attach its failure to a newer plan.
|
|
179
|
+
return retrieval.readArticleProjection(articleId);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async function repair(access, articleId, budget) {
|
|
183
|
+
for (let attempt = 0; attempt < repository.limits.maxConflictAttempts; attempt += 1) {
|
|
184
|
+
if (budget.remaining === 0)
|
|
185
|
+
return currentStatus(access, articleId);
|
|
186
|
+
let state = await retrieval.readArticleProjection(articleId);
|
|
187
|
+
let plan;
|
|
188
|
+
try {
|
|
189
|
+
plan = await desired(access, articleId);
|
|
190
|
+
if (plan.articleGeneration === null && state === null)
|
|
191
|
+
return status(articleId, null, null, "ready");
|
|
192
|
+
await recheckDesired(articleId, plan);
|
|
193
|
+
const generation = (state?.generation ?? 0) + 1;
|
|
194
|
+
requireGeneration(generation, 1);
|
|
195
|
+
state = await retrieval.beginArticleProjection({
|
|
196
|
+
articleId,
|
|
197
|
+
generation,
|
|
198
|
+
sourceGeneration: plan.articleGeneration ?? state.sourceGeneration,
|
|
199
|
+
targets: plan.targets,
|
|
200
|
+
});
|
|
201
|
+
await recheckDesired(articleId, plan);
|
|
202
|
+
while (state.status === "pending" && budget.remaining > 0) {
|
|
203
|
+
await recheckDesired(articleId, plan);
|
|
204
|
+
budget.remaining -= 1;
|
|
205
|
+
const advanced = await retrieval.advanceArticleProjection(articleId, state.generation);
|
|
206
|
+
state = advanced.state;
|
|
207
|
+
await recheckDesired(articleId, plan);
|
|
208
|
+
if (advanced.complete)
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
if (plan.capacity) {
|
|
212
|
+
state = await markBlocked(articleId, state, "capacity");
|
|
213
|
+
return status(articleId, plan.articleGeneration, state, "blocked", false, "capacity");
|
|
214
|
+
}
|
|
215
|
+
return status(articleId, plan.articleGeneration, state, state.status, state.status === "ready" && plan.targets.length > 0, state.status === "blocked" ? state.reason : undefined);
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
if (error instanceof RepositoryCapacityError) {
|
|
219
|
+
state = await markBlocked(articleId, state, "capacity", plan?.articleGeneration ?? undefined);
|
|
220
|
+
return status(articleId, plan?.articleGeneration ?? null, state, "blocked", false, "capacity");
|
|
221
|
+
}
|
|
222
|
+
if (error instanceof RepositoryConflictError) {
|
|
223
|
+
// Contention is not a durable hold. A same-plan winner may still be
|
|
224
|
+
// advancing this exact generation; blocking it would stall recovery.
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
if (error instanceof KnowledgeBaseNotFoundError) {
|
|
228
|
+
await markBlocked(articleId, state, "source-unavailable");
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
throw error;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return currentStatus(access, articleId);
|
|
235
|
+
}
|
|
236
|
+
async function repairCollectionDirectory(collectionId) {
|
|
237
|
+
for (let attempt = 0; attempt < repository.limits.maxConflictAttempts; attempt += 1) {
|
|
238
|
+
try {
|
|
239
|
+
const current = await repository.readCollectionVersioned(collectionId);
|
|
240
|
+
if (current === null)
|
|
241
|
+
return "ready";
|
|
242
|
+
// Only the opaque ID is derived. Request readers re-authorize policy.
|
|
243
|
+
await retrieval.registerCollection(collectionId);
|
|
244
|
+
const latest = await repository.readResourceGeneration("collection", collectionId);
|
|
245
|
+
if (latest === current.value.generation)
|
|
246
|
+
return "ready";
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
if (error instanceof RepositoryCapacityError)
|
|
250
|
+
return "blocked";
|
|
251
|
+
if (!(error instanceof RepositoryConflictError))
|
|
252
|
+
throw error;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return "pending";
|
|
256
|
+
}
|
|
257
|
+
return {
|
|
258
|
+
async repairArticleIndex(access, request) {
|
|
259
|
+
access = caller(access);
|
|
260
|
+
const input = articleInput(request);
|
|
261
|
+
const result = await repair(access, input.articleId, {
|
|
262
|
+
remaining: limits.maxMaintenanceBatches,
|
|
263
|
+
});
|
|
264
|
+
requirePermission(access, knowledgePermissions.indexManage);
|
|
265
|
+
return result;
|
|
266
|
+
},
|
|
267
|
+
async getArticleIndexStatus(access, request) {
|
|
268
|
+
access = caller(access);
|
|
269
|
+
const input = articleInput(request);
|
|
270
|
+
const result = await currentStatus(access, input.articleId);
|
|
271
|
+
requirePermission(access, knowledgePermissions.indexManage);
|
|
272
|
+
return result;
|
|
273
|
+
},
|
|
274
|
+
async repairRetrievalPage(access, request) {
|
|
275
|
+
access = caller(access);
|
|
276
|
+
const input = objectInput(request, [
|
|
277
|
+
"cursor",
|
|
278
|
+
"limit",
|
|
279
|
+
]);
|
|
280
|
+
const requestedLimit = input.limit ?? limits.maxRepairScanRows;
|
|
281
|
+
if (!Number.isSafeInteger(requestedLimit) ||
|
|
282
|
+
requestedLimit < 1 ||
|
|
283
|
+
requestedLimit > limits.maxRepairScanRows)
|
|
284
|
+
throw new TypeError("Repair page size exceeds the physical scan bound");
|
|
285
|
+
// Each candidate receives one advancement, even when early articles block.
|
|
286
|
+
// The requested page size is an upper bound, not an obligation to scan it.
|
|
287
|
+
const limit = Math.min(requestedLimit, limits.maxMaintenanceBatches);
|
|
288
|
+
if (input.cursor !== undefined &&
|
|
289
|
+
(typeof input.cursor !== "string" ||
|
|
290
|
+
input.cursor.length === 0 ||
|
|
291
|
+
input.cursor.length > 16_384))
|
|
292
|
+
throw new TypeError("Expected a bounded opaque repair continuation");
|
|
293
|
+
const page = await records.scan({
|
|
294
|
+
limit,
|
|
295
|
+
...(input.cursor === undefined ? {} : { cursor: input.cursor }),
|
|
296
|
+
});
|
|
297
|
+
if (!Array.isArray(page.records) || page.records.length > limit)
|
|
298
|
+
throw new RepositoryIntegrityError();
|
|
299
|
+
if (page.nextCursor !== null && typeof page.nextCursor !== "string")
|
|
300
|
+
throw new RepositoryIntegrityError();
|
|
301
|
+
const candidates = new Map();
|
|
302
|
+
for (const row of page.records) {
|
|
303
|
+
if (row.key.partition !== row.value.partition ||
|
|
304
|
+
row.key.id !== row.value.id)
|
|
305
|
+
throw new RepositoryIntegrityError();
|
|
306
|
+
const value = row.value;
|
|
307
|
+
if (value.resourceKind !== "article" &&
|
|
308
|
+
value.resourceKind !== "collection")
|
|
309
|
+
continue;
|
|
310
|
+
if (value.kind !== "head" && value.kind !== "job")
|
|
311
|
+
continue;
|
|
312
|
+
if (value.partition !==
|
|
313
|
+
value.resourceKind +
|
|
314
|
+
":" +
|
|
315
|
+
(await fingerprint([value.resourceKind, value.resourceId])) ||
|
|
316
|
+
(value.kind === "head" && value.id !== "head") ||
|
|
317
|
+
(value.kind === "job" && !value.id.startsWith("job:")))
|
|
318
|
+
throw new RepositoryIntegrityError();
|
|
319
|
+
// Jobs are hints only. Never index their old payload or generation.
|
|
320
|
+
if (value.kind === "job") {
|
|
321
|
+
const data = value.data;
|
|
322
|
+
if (data.task !==
|
|
323
|
+
(value.resourceKind === "article"
|
|
324
|
+
? "article_changed"
|
|
325
|
+
: "collection_changed"))
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
candidates.set(canonicalJson([value.resourceKind, value.resourceId]), {
|
|
329
|
+
kind: value.resourceKind,
|
|
330
|
+
id: value.resourceId,
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
let repaired = 0;
|
|
334
|
+
let pending = 0;
|
|
335
|
+
let blocked = 0;
|
|
336
|
+
for (const candidate of candidates.values()) {
|
|
337
|
+
const state = candidate.kind === "article"
|
|
338
|
+
? (await repair(access, candidate.id, { remaining: 1 })).status
|
|
339
|
+
: await repairCollectionDirectory(candidate.id);
|
|
340
|
+
if (state === "ready")
|
|
341
|
+
repaired += 1;
|
|
342
|
+
else if (state === "blocked")
|
|
343
|
+
blocked += 1;
|
|
344
|
+
else
|
|
345
|
+
pending += 1;
|
|
346
|
+
}
|
|
347
|
+
requirePermission(access, knowledgePermissions.indexManage);
|
|
348
|
+
return {
|
|
349
|
+
physicalRows: page.records.length,
|
|
350
|
+
candidates: candidates.size,
|
|
351
|
+
repaired,
|
|
352
|
+
pending,
|
|
353
|
+
blocked,
|
|
354
|
+
nextCursor: page.nextCursor,
|
|
355
|
+
};
|
|
356
|
+
},
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=retrieval-maintenance.js.map
|