@polpo-ai/core 0.15.47 → 0.15.49
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/__tests__/brain-contracts.test.d.ts +2 -0
- package/dist/__tests__/brain-contracts.test.d.ts.map +1 -0
- package/dist/__tests__/brain-contracts.test.js +366 -0
- package/dist/__tests__/brain-contracts.test.js.map +1 -0
- package/dist/__tests__/brain-local.test.d.ts +2 -0
- package/dist/__tests__/brain-local.test.d.ts.map +1 -0
- package/dist/__tests__/brain-local.test.js +627 -0
- package/dist/__tests__/brain-local.test.js.map +1 -0
- package/dist/__tests__/brain-service.test.d.ts +2 -0
- package/dist/__tests__/brain-service.test.d.ts.map +1 -0
- package/dist/__tests__/brain-service.test.js +193 -0
- package/dist/__tests__/brain-service.test.js.map +1 -0
- package/dist/adapter.d.ts +5 -0
- package/dist/adapter.d.ts.map +1 -1
- package/dist/brain/chunking.d.ts +13 -0
- package/dist/brain/chunking.d.ts.map +1 -0
- package/dist/brain/chunking.js +99 -0
- package/dist/brain/chunking.js.map +1 -0
- package/dist/brain/contracts.d.ts +15 -0
- package/dist/brain/contracts.d.ts.map +1 -0
- package/dist/brain/contracts.js +361 -0
- package/dist/brain/contracts.js.map +1 -0
- package/dist/brain/errors.d.ts +7 -0
- package/dist/brain/errors.d.ts.map +1 -0
- package/dist/brain/errors.js +11 -0
- package/dist/brain/errors.js.map +1 -0
- package/dist/brain/in-memory-store.d.ts +59 -0
- package/dist/brain/in-memory-store.d.ts.map +1 -0
- package/dist/brain/in-memory-store.js +797 -0
- package/dist/brain/in-memory-store.js.map +1 -0
- package/dist/brain/index.d.ts +24 -0
- package/dist/brain/index.d.ts.map +1 -0
- package/dist/brain/index.js +14 -0
- package/dist/brain/index.js.map +1 -0
- package/dist/brain/ingestion.d.ts +23 -0
- package/dist/brain/ingestion.d.ts.map +1 -0
- package/dist/brain/ingestion.js +161 -0
- package/dist/brain/ingestion.js.map +1 -0
- package/dist/brain/lifecycle.d.ts +6 -0
- package/dist/brain/lifecycle.d.ts.map +1 -0
- package/dist/brain/lifecycle.js +50 -0
- package/dist/brain/lifecycle.js.map +1 -0
- package/dist/brain/parsers.d.ts +7 -0
- package/dist/brain/parsers.d.ts.map +1 -0
- package/dist/brain/parsers.js +47 -0
- package/dist/brain/parsers.js.map +1 -0
- package/dist/brain/ports.d.ts +18 -0
- package/dist/brain/ports.d.ts.map +1 -0
- package/dist/brain/ports.js +2 -0
- package/dist/brain/ports.js.map +1 -0
- package/dist/brain/reading.d.ts +25 -0
- package/dist/brain/reading.d.ts.map +1 -0
- package/dist/brain/reading.js +96 -0
- package/dist/brain/reading.js.map +1 -0
- package/dist/brain/retrieval.d.ts +19 -0
- package/dist/brain/retrieval.d.ts.map +1 -0
- package/dist/brain/retrieval.js +134 -0
- package/dist/brain/retrieval.js.map +1 -0
- package/dist/brain/scope.d.ts +5 -0
- package/dist/brain/scope.d.ts.map +1 -0
- package/dist/brain/scope.js +26 -0
- package/dist/brain/scope.js.map +1 -0
- package/dist/brain/service.d.ts +68 -0
- package/dist/brain/service.d.ts.map +1 -0
- package/dist/brain/service.js +2 -0
- package/dist/brain/service.js.map +1 -0
- package/dist/brain/store-errors.d.ts +17 -0
- package/dist/brain/store-errors.d.ts.map +1 -0
- package/dist/brain/store-errors.js +39 -0
- package/dist/brain/store-errors.js.map +1 -0
- package/dist/brain/stores.d.ts +44 -0
- package/dist/brain/stores.d.ts.map +1 -0
- package/dist/brain/stores.js +2 -0
- package/dist/brain/stores.js.map +1 -0
- package/dist/brain/types.d.ts +300 -0
- package/dist/brain/types.d.ts.map +1 -0
- package/dist/brain/types.js +43 -0
- package/dist/brain/types.js.map +1 -0
- package/dist/brain/validation.d.ts +12 -0
- package/dist/brain/validation.d.ts.map +1 -0
- package/dist/brain/validation.js +129 -0
- package/dist/brain/validation.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { normalizeBrainAccessDecision } from "./contracts.js";
|
|
2
|
+
import { normalizeBrainScope } from "./scope.js";
|
|
3
|
+
import { BrainIngestionError, BrainStoreValidationError, } from "./store-errors.js";
|
|
4
|
+
function boundedInteger(value, fallback, name, min, max) {
|
|
5
|
+
if (value === undefined)
|
|
6
|
+
return fallback;
|
|
7
|
+
if (!Number.isSafeInteger(value) || value < min || value > max) {
|
|
8
|
+
throw new BrainStoreValidationError(`${name} must be an integer between ${min} and ${max}`);
|
|
9
|
+
}
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
async function authorizeRead(source, actor, policy) {
|
|
13
|
+
try {
|
|
14
|
+
const decision = normalizeBrainAccessDecision(await policy.authorize({
|
|
15
|
+
action: "read",
|
|
16
|
+
source,
|
|
17
|
+
actor,
|
|
18
|
+
}));
|
|
19
|
+
if (decision.allowed)
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// Policy failures deny access. The caller never receives policy internals.
|
|
24
|
+
}
|
|
25
|
+
throw new BrainIngestionError("Brain source read is not authorized", "access_denied");
|
|
26
|
+
}
|
|
27
|
+
function chunkTokens(chunk) {
|
|
28
|
+
return chunk.tokenCount
|
|
29
|
+
?? Math.max(1, Math.ceil(chunk.content.length / 4));
|
|
30
|
+
}
|
|
31
|
+
export async function readBrainSource(input, deps) {
|
|
32
|
+
const scope = normalizeBrainScope(input.ref.scope);
|
|
33
|
+
const sourceId = typeof input.ref.sourceId === "string"
|
|
34
|
+
? input.ref.sourceId.trim()
|
|
35
|
+
: "";
|
|
36
|
+
if (!sourceId) {
|
|
37
|
+
throw new BrainStoreValidationError("sourceId is required");
|
|
38
|
+
}
|
|
39
|
+
const offset = boundedInteger(input.offset, 0, "offset", 0, 1_000_000);
|
|
40
|
+
const limit = boundedInteger(input.limit, 20, "limit", 1, 1_000);
|
|
41
|
+
const tokenBudget = boundedInteger(input.tokenBudget, 8_000, "tokenBudget", 0, 1_000_000);
|
|
42
|
+
const ref = { scope, sourceId };
|
|
43
|
+
const initialSource = await deps.sourceStore.getSource(ref);
|
|
44
|
+
if (!initialSource || initialSource.status === "deleted") {
|
|
45
|
+
throw new BrainIngestionError("Brain source was not found", "source_not_found");
|
|
46
|
+
}
|
|
47
|
+
await authorizeRead(initialSource, input.actor, deps.accessPolicy);
|
|
48
|
+
const versionName = input.version?.trim() || initialSource.currentVersion;
|
|
49
|
+
if (!versionName) {
|
|
50
|
+
throw new BrainIngestionError("Brain source has no readable version", "version_not_found");
|
|
51
|
+
}
|
|
52
|
+
const versionRef = { ...ref, version: versionName };
|
|
53
|
+
const initialVersion = await deps.versionStore.getVersion(versionRef);
|
|
54
|
+
if (!initialVersion
|
|
55
|
+
|| initialVersion.status === "deleted"
|
|
56
|
+
|| initialVersion.status === "failed"
|
|
57
|
+
|| initialVersion.status === "pending"
|
|
58
|
+
|| initialVersion.status === "indexing") {
|
|
59
|
+
throw new BrainIngestionError("Brain source version was not found", "version_not_found");
|
|
60
|
+
}
|
|
61
|
+
const allChunks = [...await deps.chunkStore.listVersionChunks(versionRef)]
|
|
62
|
+
.sort((left, right) => left.index - right.index);
|
|
63
|
+
const selected = [];
|
|
64
|
+
let consumed = 0;
|
|
65
|
+
let cursor = offset;
|
|
66
|
+
while (cursor < allChunks.length && selected.length < limit) {
|
|
67
|
+
const chunk = allChunks[cursor];
|
|
68
|
+
const tokens = chunkTokens(chunk);
|
|
69
|
+
if (tokens <= tokenBudget - consumed) {
|
|
70
|
+
selected.push(chunk);
|
|
71
|
+
consumed += tokens;
|
|
72
|
+
}
|
|
73
|
+
cursor += 1;
|
|
74
|
+
}
|
|
75
|
+
// Re-read after policy evaluation and chunk loading. Deletion, replacement,
|
|
76
|
+
// or a concurrent version mutation must not leak a stale result.
|
|
77
|
+
const finalSource = await deps.sourceStore.getSource(ref);
|
|
78
|
+
const finalVersion = await deps.versionStore.getVersion(versionRef);
|
|
79
|
+
if (!finalSource
|
|
80
|
+
|| finalSource.status === "deleted"
|
|
81
|
+
|| !finalVersion
|
|
82
|
+
|| finalVersion.status !== initialVersion.status
|
|
83
|
+
|| finalVersion.updatedAt !== initialVersion.updatedAt
|
|
84
|
+
|| (input.version === undefined
|
|
85
|
+
&& finalSource.currentVersion !== versionName)) {
|
|
86
|
+
throw new BrainIngestionError("Brain source changed while it was being read", "source_not_found");
|
|
87
|
+
}
|
|
88
|
+
await authorizeRead(finalSource, input.actor, deps.accessPolicy);
|
|
89
|
+
return Object.freeze({
|
|
90
|
+
source: finalSource,
|
|
91
|
+
version: finalVersion,
|
|
92
|
+
chunks: Object.freeze(selected),
|
|
93
|
+
...(cursor < allChunks.length ? { nextOffset: cursor } : {}),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=reading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reading.js","sourceRoot":"","sources":["../../src/brain/reading.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { BrainAccessPolicy, BrainReranker } from "./ports.js";
|
|
2
|
+
import type { BrainChunkStore, BrainSourceStore } from "./stores.js";
|
|
3
|
+
import type { BrainActorContext, BrainRetrievalResult, BrainScope } from "./types.js";
|
|
4
|
+
export interface RetrieveBrainInput {
|
|
5
|
+
readonly query: string;
|
|
6
|
+
readonly scopes: readonly BrainScope[];
|
|
7
|
+
readonly actor: BrainActorContext;
|
|
8
|
+
readonly limit?: number;
|
|
9
|
+
readonly tokenBudget?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface RetrieveBrainDeps {
|
|
12
|
+
readonly sourceStore: BrainSourceStore;
|
|
13
|
+
readonly chunkStore: BrainChunkStore;
|
|
14
|
+
readonly accessPolicy: BrainAccessPolicy;
|
|
15
|
+
readonly reranker?: BrainReranker;
|
|
16
|
+
readonly failureMode?: "fallback" | "strict";
|
|
17
|
+
}
|
|
18
|
+
export declare function retrieveBrain(input: RetrieveBrainInput, deps: RetrieveBrainDeps): Promise<readonly BrainRetrievalResult[]>;
|
|
19
|
+
//# sourceMappingURL=retrieval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval.d.ts","sourceRoot":"","sources":["../../src/brain/retrieval.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,EAEX,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;CAC9C;AA2FD,wBAAsB,aAAa,CACjC,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC,CA4E1C"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { normalizeBrainAccessDecision } from "./contracts.js";
|
|
2
|
+
import { isBrainSourceRetrievable } from "./lifecycle.js";
|
|
3
|
+
import { normalizeBrainScope } from "./scope.js";
|
|
4
|
+
import { BrainStoreValidationError } from "./store-errors.js";
|
|
5
|
+
function boundedInteger(value, fallback, name, min, max) {
|
|
6
|
+
if (value === undefined)
|
|
7
|
+
return fallback;
|
|
8
|
+
if (!Number.isSafeInteger(value) || value < min || value > max) {
|
|
9
|
+
throw new BrainStoreValidationError(`${name} must be an integer between ${min} and ${max}`);
|
|
10
|
+
}
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
async function isAuthorized(source, actor, policy) {
|
|
14
|
+
try {
|
|
15
|
+
return normalizeBrainAccessDecision(await policy.authorize({
|
|
16
|
+
action: "search",
|
|
17
|
+
source,
|
|
18
|
+
actor,
|
|
19
|
+
})).allowed;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function resultIdentity(result) {
|
|
26
|
+
return JSON.stringify([
|
|
27
|
+
result.scope.kind,
|
|
28
|
+
result.scope.subjectId,
|
|
29
|
+
result.chunk.id,
|
|
30
|
+
result.chunk.sourceId,
|
|
31
|
+
result.chunk.version,
|
|
32
|
+
result.chunk.citation.sourceId,
|
|
33
|
+
result.chunk.citation.version,
|
|
34
|
+
result.chunk.citation.chunkId,
|
|
35
|
+
]);
|
|
36
|
+
}
|
|
37
|
+
function validateReranked(original, candidate) {
|
|
38
|
+
if (!Array.isArray(candidate)) {
|
|
39
|
+
throw new BrainStoreValidationError("Brain reranker returned an invalid result");
|
|
40
|
+
}
|
|
41
|
+
const allowed = new Set(original.map(resultIdentity));
|
|
42
|
+
const seen = new Set();
|
|
43
|
+
for (const result of candidate) {
|
|
44
|
+
const identity = resultIdentity(result);
|
|
45
|
+
if (!allowed.has(identity)
|
|
46
|
+
|| seen.has(identity)
|
|
47
|
+
|| !Number.isFinite(result.score)) {
|
|
48
|
+
throw new BrainStoreValidationError("Brain reranker changed result or citation identity");
|
|
49
|
+
}
|
|
50
|
+
seen.add(identity);
|
|
51
|
+
}
|
|
52
|
+
return candidate;
|
|
53
|
+
}
|
|
54
|
+
async function listAllSources(sourceStore, scopes) {
|
|
55
|
+
const sources = [];
|
|
56
|
+
let cursor;
|
|
57
|
+
do {
|
|
58
|
+
const page = await sourceStore.listSources({
|
|
59
|
+
scopes,
|
|
60
|
+
statuses: ["indexed", "indexing", "failed"],
|
|
61
|
+
limit: 1_000,
|
|
62
|
+
...(cursor ? { cursor } : {}),
|
|
63
|
+
});
|
|
64
|
+
sources.push(...page.sources);
|
|
65
|
+
cursor = page.cursor;
|
|
66
|
+
} while (cursor);
|
|
67
|
+
return sources;
|
|
68
|
+
}
|
|
69
|
+
export async function retrieveBrain(input, deps) {
|
|
70
|
+
if (!Array.isArray(input.scopes) || input.scopes.length === 0) {
|
|
71
|
+
throw new BrainStoreValidationError("At least one explicit Brain scope is required");
|
|
72
|
+
}
|
|
73
|
+
const scopes = [...new Map(input.scopes.map((scope) => {
|
|
74
|
+
const normalized = normalizeBrainScope(scope);
|
|
75
|
+
return [`${normalized.kind}:${normalized.subjectId}`, normalized];
|
|
76
|
+
})).values()];
|
|
77
|
+
const query = typeof input.query === "string" ? input.query.trim() : "";
|
|
78
|
+
const limit = boundedInteger(input.limit, 10, "limit", 1, 1_000);
|
|
79
|
+
const tokenBudget = boundedInteger(input.tokenBudget, 4_000, "tokenBudget", 0, 1_000_000);
|
|
80
|
+
if (!query || tokenBudget === 0)
|
|
81
|
+
return Object.freeze([]);
|
|
82
|
+
const authorized = [];
|
|
83
|
+
for (const source of await listAllSources(deps.sourceStore, scopes)) {
|
|
84
|
+
if (source.currentVersion
|
|
85
|
+
&& await isAuthorized(source, input.actor, deps.accessPolicy)) {
|
|
86
|
+
authorized.push(source);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (authorized.length === 0)
|
|
90
|
+
return Object.freeze([]);
|
|
91
|
+
const candidates = await deps.chunkStore.searchCandidates({
|
|
92
|
+
sources: authorized.map((source) => ({
|
|
93
|
+
scope: source.scope,
|
|
94
|
+
sourceId: source.id,
|
|
95
|
+
})),
|
|
96
|
+
query,
|
|
97
|
+
limit: Math.min(1_000, Math.max(limit * 4, limit)),
|
|
98
|
+
});
|
|
99
|
+
let ranked = candidates;
|
|
100
|
+
if (deps.reranker && candidates.length > 0) {
|
|
101
|
+
try {
|
|
102
|
+
ranked = validateReranked(candidates, await deps.reranker.rerank({ query, results: candidates, limit }));
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if ((deps.failureMode ?? "fallback") === "strict")
|
|
106
|
+
throw error;
|
|
107
|
+
ranked = candidates;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const final = [];
|
|
111
|
+
let usedTokens = 0;
|
|
112
|
+
for (const result of ranked) {
|
|
113
|
+
if (final.length >= limit)
|
|
114
|
+
break;
|
|
115
|
+
const source = await deps.sourceStore.getSource({
|
|
116
|
+
scope: result.scope,
|
|
117
|
+
sourceId: result.chunk.sourceId,
|
|
118
|
+
});
|
|
119
|
+
const visible = Boolean(source
|
|
120
|
+
&& isBrainSourceRetrievable(source)
|
|
121
|
+
&& source.currentVersion === result.chunk.version
|
|
122
|
+
&& await isAuthorized(source, input.actor, deps.accessPolicy));
|
|
123
|
+
if (!visible)
|
|
124
|
+
continue;
|
|
125
|
+
const tokens = result.chunk.tokenCount
|
|
126
|
+
?? Math.max(1, Math.ceil(result.chunk.content.length / 4));
|
|
127
|
+
if (tokens > tokenBudget - usedTokens)
|
|
128
|
+
continue;
|
|
129
|
+
final.push(result);
|
|
130
|
+
usedTokens += tokens;
|
|
131
|
+
}
|
|
132
|
+
return Object.freeze(final);
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=retrieval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval.js","sourceRoot":"","sources":["../../src/brain/retrieval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type BrainScope, type BrainScopeAccess } from "./types.js";
|
|
2
|
+
export declare function normalizeBrainScope(value: unknown): BrainScope;
|
|
3
|
+
export declare function brainScopeKey(scope: BrainScope): string;
|
|
4
|
+
export declare function canAccessBrainScope(scope: BrainScope, access: BrainScopeAccess): boolean;
|
|
5
|
+
//# sourceMappingURL=scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/brain/scope.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,gBAAgB,EAEtB,MAAM,YAAY,CAAC;AAKpB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAyB9D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAGvD;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAKT"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BrainContractError } from "./errors.js";
|
|
2
|
+
import { BRAIN_SCOPE_KINDS, } from "./types.js";
|
|
3
|
+
import { requiredText } from "./validation.js";
|
|
4
|
+
const scopeKinds = new Set(BRAIN_SCOPE_KINDS);
|
|
5
|
+
export function normalizeBrainScope(value) {
|
|
6
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
7
|
+
throw new BrainContractError("Brain scope must be an object", "invalid_scope", "scope");
|
|
8
|
+
}
|
|
9
|
+
const candidate = value;
|
|
10
|
+
if (typeof candidate.kind !== "string" || !scopeKinds.has(candidate.kind)) {
|
|
11
|
+
throw new BrainContractError(`Unknown Brain scope kind: ${String(candidate.kind)}`, "invalid_scope", "scope.kind");
|
|
12
|
+
}
|
|
13
|
+
return Object.freeze({
|
|
14
|
+
kind: candidate.kind,
|
|
15
|
+
subjectId: requiredText(candidate.subjectId, "scope.subjectId", 512, "invalid_scope"),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export function brainScopeKey(scope) {
|
|
19
|
+
const normalized = normalizeBrainScope(scope);
|
|
20
|
+
return JSON.stringify([normalized.kind, normalized.subjectId]);
|
|
21
|
+
}
|
|
22
|
+
export function canAccessBrainScope(scope, access) {
|
|
23
|
+
const normalized = normalizeBrainScope(scope);
|
|
24
|
+
return normalized.subjectId === (normalized.kind === "org" ? access.orgId : access.projectId);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/brain/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,iBAAiB,GAIlB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,iBAAiB,CAAC,CAAC;AAEtD,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,kBAAkB,CAC1B,+BAA+B,EAC/B,eAAe,EACf,OAAO,CACR,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,kBAAkB,CAC1B,6BAA6B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EACrD,eAAe,EACf,YAAY,CACb,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,SAAS,CAAC,IAAsB;QACtC,SAAS,EAAE,YAAY,CACrB,SAAS,CAAC,SAAS,EACnB,iBAAiB,EACjB,GAAG,EACH,eAAe,CAChB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAiB,EACjB,MAAwB;IAExB,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,UAAU,CAAC,SAAS,KAAK,CAC9B,UAAU,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAC5D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { BrainActorContext, BrainRetrievalResult, BrainScope, BrainSource, BrainSourceListQuery, BrainSourceListResult, BrainSourceRef, BrainSourceVersion, BrainTrustLevel } from "./types.js";
|
|
2
|
+
import type { ReadBrainSourceResult } from "./reading.js";
|
|
3
|
+
export type BrainSourceContentInput = {
|
|
4
|
+
readonly kind: "paste";
|
|
5
|
+
readonly text: string;
|
|
6
|
+
readonly contentType?: string;
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: "file";
|
|
9
|
+
readonly path: string;
|
|
10
|
+
} | {
|
|
11
|
+
readonly kind: "url";
|
|
12
|
+
readonly url: string;
|
|
13
|
+
} | {
|
|
14
|
+
readonly kind: "connection";
|
|
15
|
+
readonly connectionId: string;
|
|
16
|
+
readonly locator?: string;
|
|
17
|
+
};
|
|
18
|
+
export interface BrainServiceContext {
|
|
19
|
+
readonly actor: BrainActorContext;
|
|
20
|
+
readonly readScopes: readonly BrainScope[];
|
|
21
|
+
readonly writeScopes: readonly BrainScope[];
|
|
22
|
+
readonly defaultWriteScope?: BrainScope;
|
|
23
|
+
}
|
|
24
|
+
export interface BrainCreateSourceRequest {
|
|
25
|
+
readonly scope: BrainScope;
|
|
26
|
+
readonly id?: string;
|
|
27
|
+
readonly label: string;
|
|
28
|
+
readonly trust: BrainTrustLevel;
|
|
29
|
+
readonly metadata?: Record<string, unknown>;
|
|
30
|
+
readonly content: BrainSourceContentInput;
|
|
31
|
+
}
|
|
32
|
+
export interface BrainUpdateSourceRequest {
|
|
33
|
+
readonly label?: string;
|
|
34
|
+
readonly trust?: BrainTrustLevel;
|
|
35
|
+
readonly metadata?: Record<string, unknown>;
|
|
36
|
+
}
|
|
37
|
+
export interface BrainReindexSourceRequest {
|
|
38
|
+
readonly content: BrainSourceContentInput;
|
|
39
|
+
}
|
|
40
|
+
export interface BrainSearchRequest {
|
|
41
|
+
readonly query: string;
|
|
42
|
+
readonly scopes?: readonly BrainScope[];
|
|
43
|
+
readonly limit?: number;
|
|
44
|
+
readonly tokenBudget?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface BrainReadSourceRequest {
|
|
47
|
+
readonly ref: BrainSourceRef;
|
|
48
|
+
readonly version?: string;
|
|
49
|
+
readonly offset?: number;
|
|
50
|
+
readonly limit?: number;
|
|
51
|
+
readonly tokenBudget?: number;
|
|
52
|
+
}
|
|
53
|
+
export interface BrainReadService {
|
|
54
|
+
search(context: BrainServiceContext, request: BrainSearchRequest): Promise<readonly BrainRetrievalResult[]>;
|
|
55
|
+
readSource(context: BrainServiceContext, request: BrainReadSourceRequest): Promise<ReadBrainSourceResult>;
|
|
56
|
+
}
|
|
57
|
+
export interface BrainManagementService extends BrainReadService {
|
|
58
|
+
listSources(context: BrainServiceContext, query?: Omit<BrainSourceListQuery, "scopes"> & {
|
|
59
|
+
readonly scopes?: readonly BrainScope[];
|
|
60
|
+
}): Promise<BrainSourceListResult>;
|
|
61
|
+
createSource(context: BrainServiceContext, request: BrainCreateSourceRequest): Promise<BrainSource>;
|
|
62
|
+
getSource(context: BrainServiceContext, ref: BrainSourceRef): Promise<BrainSource | null>;
|
|
63
|
+
updateSource(context: BrainServiceContext, ref: BrainSourceRef, request: BrainUpdateSourceRequest): Promise<BrainSource>;
|
|
64
|
+
deleteSource(context: BrainServiceContext, ref: BrainSourceRef): Promise<void>;
|
|
65
|
+
reindexSource(context: BrainServiceContext, ref: BrainSourceRef, request: BrainReindexSourceRequest): Promise<BrainSource>;
|
|
66
|
+
listVersions(context: BrainServiceContext, ref: BrainSourceRef): Promise<readonly BrainSourceVersion[]>;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/brain/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/brain/service.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare class BrainStoreError extends Error {
|
|
2
|
+
constructor(message: string);
|
|
3
|
+
}
|
|
4
|
+
export declare class BrainStoreValidationError extends BrainStoreError {
|
|
5
|
+
constructor(message: string);
|
|
6
|
+
}
|
|
7
|
+
export declare class BrainStoreConflictError extends BrainStoreError {
|
|
8
|
+
constructor(message: string);
|
|
9
|
+
}
|
|
10
|
+
export declare class BrainStoreAuthorizationError extends BrainStoreError {
|
|
11
|
+
constructor(message?: string);
|
|
12
|
+
}
|
|
13
|
+
export declare class BrainIngestionError extends BrainStoreError {
|
|
14
|
+
readonly code: "access_denied" | "source_not_found" | "version_not_found" | "parser_not_found" | "empty_content" | "ingestion_failed";
|
|
15
|
+
constructor(message: string, code?: BrainIngestionError["code"], options?: ErrorOptions);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=store-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-errors.d.ts","sourceRoot":"","sources":["../../src/brain/store-errors.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,yBAA0B,SAAQ,eAAe;gBAChD,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,uBAAwB,SAAQ,eAAe;gBAC9C,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,4BAA6B,SAAQ,eAAe;gBACnD,OAAO,SAAwB;CAI5C;AAED,qBAAa,mBAAoB,SAAQ,eAAe;IACtD,QAAQ,CAAC,IAAI,EACT,eAAe,GACf,kBAAkB,GAClB,mBAAmB,GACnB,kBAAkB,GAClB,eAAe,GACf,kBAAkB,CAAC;gBAGrB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,mBAAmB,CAAC,MAAM,CAAsB,EACtD,OAAO,CAAC,EAAE,YAAY;CAYzB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export class BrainStoreError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = "BrainStoreError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class BrainStoreValidationError extends BrainStoreError {
|
|
8
|
+
constructor(message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = "BrainStoreValidationError";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class BrainStoreConflictError extends BrainStoreError {
|
|
14
|
+
constructor(message) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.name = "BrainStoreConflictError";
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class BrainStoreAuthorizationError extends BrainStoreError {
|
|
20
|
+
constructor(message = "Brain access denied") {
|
|
21
|
+
super(message);
|
|
22
|
+
this.name = "BrainStoreAuthorizationError";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class BrainIngestionError extends BrainStoreError {
|
|
26
|
+
code;
|
|
27
|
+
constructor(message, code = "ingestion_failed", options) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.name = "BrainIngestionError";
|
|
30
|
+
this.code = code;
|
|
31
|
+
if (options?.cause !== undefined) {
|
|
32
|
+
Object.defineProperty(this, "cause", {
|
|
33
|
+
value: options.cause,
|
|
34
|
+
configurable: true,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=store-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-errors.js","sourceRoot":"","sources":["../../src/brain/store-errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,eAAe;IAC5D,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,eAAe;IAC1D,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,eAAe;IAC/D,YAAY,OAAO,GAAG,qBAAqB;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IAC7C,IAAI,CAMU;IAEvB,YACE,OAAe,EACf,OAAoC,kBAAkB,EACtD,OAAsB;QAEtB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE;gBACnC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { BrainCandidateSearchQuery, BrainChunk, BrainEnqueueResult, BrainIngestionJob, BrainJobClaimInput, BrainJobFailureInput, BrainJobMutationInput, BrainPublishVersionInput, BrainReplaceVersionChunksInput, BrainRetrievalResult, BrainSource, BrainSourceListQuery, BrainSourceListResult, BrainSourceRef, BrainSourceVersion, BrainScope, BrainVersionRef } from "./types.js";
|
|
2
|
+
export interface BrainSourceStore {
|
|
3
|
+
createSource(source: BrainSource): Promise<BrainSource>;
|
|
4
|
+
getSource(ref: BrainSourceRef): Promise<BrainSource | null>;
|
|
5
|
+
listSources(query: BrainSourceListQuery): Promise<BrainSourceListResult>;
|
|
6
|
+
updateSource(source: BrainSource, options?: {
|
|
7
|
+
readonly expectedUpdatedAt?: string;
|
|
8
|
+
}): Promise<BrainSource>;
|
|
9
|
+
publishVersion(input: BrainPublishVersionInput): Promise<BrainSource>;
|
|
10
|
+
deleteSource(ref: BrainSourceRef): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export interface BrainVersionStore {
|
|
13
|
+
createVersion(scope: BrainSourceRef["scope"], version: BrainSourceVersion): Promise<BrainSourceVersion>;
|
|
14
|
+
getVersion(ref: BrainVersionRef): Promise<BrainSourceVersion | null>;
|
|
15
|
+
listVersions(ref: BrainSourceRef): Promise<readonly BrainSourceVersion[]>;
|
|
16
|
+
updateVersion(scope: BrainSourceRef["scope"], version: BrainSourceVersion, options?: {
|
|
17
|
+
readonly expectedUpdatedAt?: string;
|
|
18
|
+
}): Promise<BrainSourceVersion>;
|
|
19
|
+
deleteVersion(ref: BrainVersionRef): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
export interface BrainChunkStore {
|
|
22
|
+
/**
|
|
23
|
+
* Atomically replaces all chunks for one unpublished source version.
|
|
24
|
+
* Implementations must expose either the complete new set or the prior set.
|
|
25
|
+
*/
|
|
26
|
+
replaceVersionChunks(input: BrainReplaceVersionChunksInput): Promise<void>;
|
|
27
|
+
listVersionChunks(ref: BrainVersionRef): Promise<readonly BrainChunk[]>;
|
|
28
|
+
searchCandidates(query: BrainCandidateSearchQuery): Promise<readonly BrainRetrievalResult[]>;
|
|
29
|
+
deleteVersionChunks(ref: BrainVersionRef): Promise<void>;
|
|
30
|
+
deleteSourceChunks(ref: BrainSourceRef): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
export interface BrainIngestionJobStore {
|
|
33
|
+
/** Enqueues by dedupeKey and reports whether a new job was created. */
|
|
34
|
+
enqueueJob(job: BrainIngestionJob): Promise<BrainEnqueueResult>;
|
|
35
|
+
getJob(ref: {
|
|
36
|
+
readonly scope: BrainScope;
|
|
37
|
+
readonly jobId: string;
|
|
38
|
+
}): Promise<BrainIngestionJob | null>;
|
|
39
|
+
claimNextJob(input: BrainJobClaimInput): Promise<BrainIngestionJob | null>;
|
|
40
|
+
completeJob(input: BrainJobMutationInput): Promise<BrainIngestionJob>;
|
|
41
|
+
failJob(input: BrainJobFailureInput): Promise<BrainIngestionJob>;
|
|
42
|
+
cancelJob(input: BrainJobMutationInput): Promise<BrainIngestionJob>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=stores.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stores.d.ts","sourceRoot":"","sources":["../../src/brain/stores.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stores.js","sourceRoot":"","sources":["../../src/brain/stores.ts"],"names":[],"mappings":""}
|