@polpo-ai/node 0.15.47 → 0.15.48

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.
Files changed (51) hide show
  1. package/dist/adapters/in-process-spawner.d.ts +3 -0
  2. package/dist/adapters/in-process-spawner.d.ts.map +1 -1
  3. package/dist/adapters/in-process-spawner.js.map +1 -1
  4. package/dist/adapters/spawn-helpers.d.ts.map +1 -1
  5. package/dist/adapters/spawn-helpers.js +4 -1
  6. package/dist/adapters/spawn-helpers.js.map +1 -1
  7. package/dist/brain/content-loader.d.ts +54 -0
  8. package/dist/brain/content-loader.d.ts.map +1 -0
  9. package/dist/brain/content-loader.js +411 -0
  10. package/dist/brain/content-loader.js.map +1 -0
  11. package/dist/brain/errors.d.ts +9 -0
  12. package/dist/brain/errors.d.ts.map +1 -0
  13. package/dist/brain/errors.js +27 -0
  14. package/dist/brain/errors.js.map +1 -0
  15. package/dist/brain/file-store.d.ts +28 -0
  16. package/dist/brain/file-store.d.ts.map +1 -0
  17. package/dist/brain/file-store.js +130 -0
  18. package/dist/brain/file-store.js.map +1 -0
  19. package/dist/brain/html-parser.d.ts +6 -0
  20. package/dist/brain/html-parser.d.ts.map +1 -0
  21. package/dist/brain/html-parser.js +136 -0
  22. package/dist/brain/html-parser.js.map +1 -0
  23. package/dist/brain/index.d.ts +12 -0
  24. package/dist/brain/index.d.ts.map +1 -0
  25. package/dist/brain/index.js +7 -0
  26. package/dist/brain/index.js.map +1 -0
  27. package/dist/brain/local-runtime.d.ts +21 -0
  28. package/dist/brain/local-runtime.d.ts.map +1 -0
  29. package/dist/brain/local-runtime.js +55 -0
  30. package/dist/brain/local-runtime.js.map +1 -0
  31. package/dist/brain/local-service.d.ts +41 -0
  32. package/dist/brain/local-service.d.ts.map +1 -0
  33. package/dist/brain/local-service.js +269 -0
  34. package/dist/brain/local-service.js.map +1 -0
  35. package/dist/core/run-lifecycle.d.ts +5 -0
  36. package/dist/core/run-lifecycle.d.ts.map +1 -1
  37. package/dist/core/run-lifecycle.js +27 -0
  38. package/dist/core/run-lifecycle.js.map +1 -1
  39. package/dist/index.d.ts +4 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +3 -1
  42. package/dist/index.js.map +1 -1
  43. package/dist/server/app.d.ts +7 -0
  44. package/dist/server/app.d.ts.map +1 -1
  45. package/dist/server/app.js +47 -2
  46. package/dist/server/app.js.map +1 -1
  47. package/dist/server/index.d.ts +1 -1
  48. package/dist/server/index.d.ts.map +1 -1
  49. package/dist/server/index.js +1 -1
  50. package/dist/server/index.js.map +1 -1
  51. package/package.json +13 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/brain/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GACjC,eAAe,GACf,mBAAmB,GACnB,mBAAmB,GACnB,kBAAkB,GAClB,kBAAkB,GAClB,YAAY,GACZ,oBAAoB,GACpB,cAAc,CAAC;AAEnB,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;gBAGvC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,yBAAyB,EAC/B,OAAO,CAAC,EAAE,YAAY;CAYzB;AAED,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,OAAO,SAAqC,EAAE,OAAO,CAAC,EAAE,YAAY;CAUjF"}
@@ -0,0 +1,27 @@
1
+ export class BrainContentLoadError extends Error {
2
+ code;
3
+ constructor(message, code, options) {
4
+ super(message);
5
+ this.name = "BrainContentLoadError";
6
+ this.code = code;
7
+ if (options?.cause !== undefined) {
8
+ Object.defineProperty(this, "cause", {
9
+ value: options.cause,
10
+ configurable: true,
11
+ });
12
+ }
13
+ }
14
+ }
15
+ export class FileBrainStoreCorruptionError extends Error {
16
+ constructor(message = "Durable Brain state is corrupted", options) {
17
+ super(message);
18
+ this.name = "FileBrainStoreCorruptionError";
19
+ if (options?.cause !== undefined) {
20
+ Object.defineProperty(this, "cause", {
21
+ value: options.cause,
22
+ configurable: true,
23
+ });
24
+ }
25
+ }
26
+ }
27
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/brain/errors.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,IAAI,CAA4B;IAEzC,YACE,OAAe,EACf,IAA+B,EAC/B,OAAsB;QAEtB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,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;AAED,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACtD,YAAY,OAAO,GAAG,kCAAkC,EAAE,OAAsB;QAC9E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;QAC5C,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,28 @@
1
+ import { InMemoryBrainStore, type BrainEnqueueResult, type BrainIngestionJob, type BrainJobClaimInput, type BrainJobFailureInput, type BrainJobMutationInput, type BrainPublishVersionInput, type BrainReplaceVersionChunksInput, type BrainScope, type BrainSource, type BrainSourceRef, type BrainSourceVersion, type BrainVersionRef, type InMemoryBrainStoreOptions } from "@polpo-ai/core/brain";
2
+ export interface FileBrainStoreOptions extends Omit<InMemoryBrainStoreOptions, "snapshot"> {
3
+ }
4
+ export declare class FileBrainStore extends InMemoryBrainStore {
5
+ readonly path: string;
6
+ constructor(path: string, options?: FileBrainStoreOptions);
7
+ private persist;
8
+ createSource(source: BrainSource): Promise<BrainSource>;
9
+ updateSource(source: BrainSource, options?: {
10
+ readonly expectedUpdatedAt?: string;
11
+ }): Promise<BrainSource>;
12
+ publishVersion(input: BrainPublishVersionInput): Promise<BrainSource>;
13
+ deleteSource(ref: BrainSourceRef): Promise<void>;
14
+ createVersion(scope: BrainScope, version: BrainSourceVersion): Promise<BrainSourceVersion>;
15
+ updateVersion(scope: BrainScope, version: BrainSourceVersion, options?: {
16
+ readonly expectedUpdatedAt?: string;
17
+ }): Promise<BrainSourceVersion>;
18
+ deleteVersion(ref: BrainVersionRef): Promise<void>;
19
+ replaceVersionChunks(input: BrainReplaceVersionChunksInput): Promise<void>;
20
+ deleteVersionChunks(ref: BrainVersionRef): Promise<void>;
21
+ deleteSourceChunks(ref: BrainSourceRef): Promise<void>;
22
+ enqueueJob(job: BrainIngestionJob): Promise<BrainEnqueueResult>;
23
+ claimNextJob(input: BrainJobClaimInput): Promise<BrainIngestionJob | null>;
24
+ completeJob(input: BrainJobMutationInput): Promise<BrainIngestionJob>;
25
+ failJob(input: BrainJobFailureInput): Promise<BrainIngestionJob>;
26
+ cancelJob(input: BrainJobMutationInput): Promise<BrainIngestionJob>;
27
+ }
28
+ //# sourceMappingURL=file-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-store.d.ts","sourceRoot":"","sources":["../../src/brain/file-store.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EAEvB,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC/B,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,qBACf,SAAQ,IAAI,CAAC,yBAAyB,EAAE,UAAU,CAAC;CAAG;AAWxD,qBAAa,cAAe,SAAQ,kBAAkB;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B;IAW7D,OAAO,CAAC,OAAO;IA2BA,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAMvD,YAAY,CACzB,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,GAChD,OAAO,CAAC,WAAW,CAAC;IAMR,cAAc,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC;IAMrE,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,aAAa,CAC1B,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,kBAAkB,CAAC;IAMf,aAAa,CAC1B,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,GAChD,OAAO,CAAC,kBAAkB,CAAC;IAMf,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,oBAAoB,CACjC,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,IAAI,CAAC;IAKD,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxD,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD,UAAU,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAM/D,YAAY,CACzB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAMrB,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAMrE,OAAO,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAMhE,SAAS,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAKnF"}
@@ -0,0 +1,130 @@
1
+ import { chmodSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
2
+ import { dirname, resolve } from "node:path";
3
+ import { InMemoryBrainStore, } from "@polpo-ai/core/brain";
4
+ import { FileBrainStoreCorruptionError } from "./errors.js";
5
+ function loadSnapshot(path) {
6
+ if (!existsSync(path))
7
+ return undefined;
8
+ try {
9
+ return JSON.parse(readFileSync(path, "utf8"));
10
+ }
11
+ catch (error) {
12
+ throw new FileBrainStoreCorruptionError(undefined, { cause: error });
13
+ }
14
+ }
15
+ export class FileBrainStore extends InMemoryBrainStore {
16
+ path;
17
+ constructor(path, options = {}) {
18
+ const resolved = resolve(path);
19
+ const snapshot = loadSnapshot(resolved);
20
+ try {
21
+ super({ ...options, ...(snapshot ? { snapshot } : {}) });
22
+ }
23
+ catch (error) {
24
+ throw new FileBrainStoreCorruptionError(undefined, { cause: error });
25
+ }
26
+ this.path = resolved;
27
+ }
28
+ persist() {
29
+ mkdirSync(dirname(this.path), { recursive: true, mode: 0o700 });
30
+ const temporary = `${this.path}.tmp`;
31
+ let descriptor;
32
+ try {
33
+ writeFileSync(temporary, `${JSON.stringify(this.snapshot(), null, 2)}\n`, {
34
+ encoding: "utf8",
35
+ mode: 0o600,
36
+ });
37
+ chmodSync(temporary, 0o600);
38
+ descriptor = openSync(temporary, "r");
39
+ fsyncSync(descriptor);
40
+ closeSync(descriptor);
41
+ descriptor = undefined;
42
+ renameSync(temporary, this.path);
43
+ const directory = openSync(dirname(this.path), "r");
44
+ try {
45
+ fsyncSync(directory);
46
+ }
47
+ finally {
48
+ closeSync(directory);
49
+ }
50
+ }
51
+ finally {
52
+ if (descriptor !== undefined)
53
+ closeSync(descriptor);
54
+ if (existsSync(temporary))
55
+ unlinkSync(temporary);
56
+ }
57
+ }
58
+ async createSource(source) {
59
+ const result = await super.createSource(source);
60
+ this.persist();
61
+ return result;
62
+ }
63
+ async updateSource(source, options) {
64
+ const result = await super.updateSource(source, options);
65
+ this.persist();
66
+ return result;
67
+ }
68
+ async publishVersion(input) {
69
+ const result = await super.publishVersion(input);
70
+ this.persist();
71
+ return result;
72
+ }
73
+ async deleteSource(ref) {
74
+ await super.deleteSource(ref);
75
+ this.persist();
76
+ }
77
+ async createVersion(scope, version) {
78
+ const result = await super.createVersion(scope, version);
79
+ this.persist();
80
+ return result;
81
+ }
82
+ async updateVersion(scope, version, options) {
83
+ const result = await super.updateVersion(scope, version, options);
84
+ this.persist();
85
+ return result;
86
+ }
87
+ async deleteVersion(ref) {
88
+ await super.deleteVersion(ref);
89
+ this.persist();
90
+ }
91
+ async replaceVersionChunks(input) {
92
+ await super.replaceVersionChunks(input);
93
+ this.persist();
94
+ }
95
+ async deleteVersionChunks(ref) {
96
+ await super.deleteVersionChunks(ref);
97
+ this.persist();
98
+ }
99
+ async deleteSourceChunks(ref) {
100
+ await super.deleteSourceChunks(ref);
101
+ this.persist();
102
+ }
103
+ async enqueueJob(job) {
104
+ const result = await super.enqueueJob(job);
105
+ if (result.created)
106
+ this.persist();
107
+ return result;
108
+ }
109
+ async claimNextJob(input) {
110
+ const result = await super.claimNextJob(input);
111
+ this.persist();
112
+ return result;
113
+ }
114
+ async completeJob(input) {
115
+ const result = await super.completeJob(input);
116
+ this.persist();
117
+ return result;
118
+ }
119
+ async failJob(input) {
120
+ const result = await super.failJob(input);
121
+ this.persist();
122
+ return result;
123
+ }
124
+ async cancelJob(input) {
125
+ const result = await super.cancelJob(input);
126
+ this.persist();
127
+ return result;
128
+ }
129
+ }
130
+ //# sourceMappingURL=file-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-store.js","sourceRoot":"","sources":["../../src/brain/file-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type BrainParser, type BrainParserInput, type BrainParserResult } from "@polpo-ai/core/brain";
2
+ export declare class HtmlBrainParser implements BrainParser {
3
+ supports(contentType: string | undefined): boolean;
4
+ parse(input: BrainParserInput): Promise<BrainParserResult>;
5
+ }
6
+ //# sourceMappingURL=html-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-parser.d.ts","sourceRoot":"","sources":["../../src/brain/html-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAiH9B,qBAAa,eAAgB,YAAW,WAAW;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO;IAK5C,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAkCjE"}
@@ -0,0 +1,136 @@
1
+ import { parse } from "parse5";
2
+ import { BrainStoreValidationError, } from "@polpo-ai/core/brain";
3
+ const IGNORED_ELEMENTS = new Set([
4
+ "script",
5
+ "style",
6
+ "noscript",
7
+ "template",
8
+ "svg",
9
+ "canvas",
10
+ ]);
11
+ const BLOCK_ELEMENTS = new Set([
12
+ "address",
13
+ "article",
14
+ "aside",
15
+ "blockquote",
16
+ "br",
17
+ "div",
18
+ "dl",
19
+ "fieldset",
20
+ "figcaption",
21
+ "figure",
22
+ "footer",
23
+ "form",
24
+ "h1",
25
+ "h2",
26
+ "h3",
27
+ "h4",
28
+ "h5",
29
+ "h6",
30
+ "header",
31
+ "hr",
32
+ "li",
33
+ "main",
34
+ "nav",
35
+ "ol",
36
+ "p",
37
+ "pre",
38
+ "section",
39
+ "table",
40
+ "tr",
41
+ "ul",
42
+ ]);
43
+ function isElement(node) {
44
+ return "tagName" in node && typeof node.tagName === "string";
45
+ }
46
+ function isHidden(element) {
47
+ return element.attrs.some((attribute) => (attribute.name === "hidden"
48
+ || (attribute.name === "aria-hidden"
49
+ && attribute.value.trim().toLowerCase() === "true")));
50
+ }
51
+ function collectText(node, output, options) {
52
+ if (isElement(node)) {
53
+ const tag = node.tagName.toLowerCase();
54
+ if (IGNORED_ELEMENTS.has(tag)
55
+ || isHidden(node)
56
+ || (!options.includeTitle && tag === "title")) {
57
+ return;
58
+ }
59
+ if (BLOCK_ELEMENTS.has(tag))
60
+ output.push("\n");
61
+ for (const child of node.childNodes)
62
+ collectText(child, output, options);
63
+ if (BLOCK_ELEMENTS.has(tag))
64
+ output.push("\n");
65
+ return;
66
+ }
67
+ if ("value" in node && typeof node.value === "string") {
68
+ output.push(node.value);
69
+ return;
70
+ }
71
+ if ("childNodes" in node) {
72
+ for (const child of node.childNodes)
73
+ collectText(child, output, options);
74
+ }
75
+ }
76
+ function normalizedText(parts) {
77
+ return parts
78
+ .join("")
79
+ .replace(/\u00a0/g, " ")
80
+ .replace(/[ \t]+/g, " ")
81
+ .replace(/ *\n */g, "\n")
82
+ .replace(/\n{2,}/g, "\n")
83
+ .trim();
84
+ }
85
+ function findTitle(node) {
86
+ if (isElement(node) && node.tagName.toLowerCase() === "title") {
87
+ const output = [];
88
+ collectText(node, output, { includeTitle: true });
89
+ return normalizedText(output) || undefined;
90
+ }
91
+ if ("childNodes" in node) {
92
+ for (const child of node.childNodes) {
93
+ const title = findTitle(child);
94
+ if (title)
95
+ return title;
96
+ }
97
+ }
98
+ return undefined;
99
+ }
100
+ export class HtmlBrainParser {
101
+ supports(contentType) {
102
+ const normalized = contentType?.split(";", 1)[0]?.trim().toLowerCase();
103
+ return normalized === "text/html" || normalized === "application/xhtml+xml";
104
+ }
105
+ async parse(input) {
106
+ if (!this.supports(input.contentType)) {
107
+ throw new BrainStoreValidationError(`Unsupported HTML content type: ${String(input.contentType)}`);
108
+ }
109
+ let html;
110
+ if (input.body.kind === "text") {
111
+ html = input.body.text;
112
+ }
113
+ else {
114
+ try {
115
+ html = new TextDecoder("utf-8", { fatal: true }).decode(input.body.bytes);
116
+ }
117
+ catch (error) {
118
+ throw new BrainStoreValidationError(`Brain HTML is not valid UTF-8: ${error instanceof Error ? error.message : "decode failed"}`);
119
+ }
120
+ }
121
+ const document = parse(html);
122
+ const output = [];
123
+ collectText(document, output, { includeTitle: false });
124
+ const content = normalizedText(output);
125
+ const title = findTitle(document);
126
+ return Object.freeze({
127
+ sections: content
128
+ ? Object.freeze([Object.freeze({
129
+ content,
130
+ ...(title ? { locator: title } : {}),
131
+ })])
132
+ : Object.freeze([]),
133
+ });
134
+ }
135
+ }
136
+ //# sourceMappingURL=html-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-parser.js","sourceRoot":"","sources":["../../src/brain/html-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export { BrainContentLoadError, FileBrainStoreCorruptionError, } from "./errors.js";
2
+ export type { BrainContentLoadErrorCode } from "./errors.js";
3
+ export { NodeBrainContentLoader } from "./content-loader.js";
4
+ export type { BrainContentInput, BrainDnsAddress, BrainDnsLookup, BrainLoadedContent, BrainSafeFetch, BrainSafeFetchInit, NodeBrainContentLoaderOptions, } from "./content-loader.js";
5
+ export { HtmlBrainParser } from "./html-parser.js";
6
+ export { FileBrainStore } from "./file-store.js";
7
+ export type { FileBrainStoreOptions } from "./file-store.js";
8
+ export { LocalBrainService } from "./local-service.js";
9
+ export type { LocalBrainContentLoader, LocalBrainServiceOptions, } from "./local-service.js";
10
+ export { createLocalBrainRuntime } from "./local-runtime.js";
11
+ export type { CreateLocalBrainRuntimeOptions, LocalBrainContextInput, LocalBrainRuntime, } from "./local-runtime.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/brain/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EACV,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,YAAY,EACV,8BAA8B,EAC9B,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { BrainContentLoadError, FileBrainStoreCorruptionError, } from "./errors.js";
2
+ export { NodeBrainContentLoader } from "./content-loader.js";
3
+ export { HtmlBrainParser } from "./html-parser.js";
4
+ export { FileBrainStore } from "./file-store.js";
5
+ export { LocalBrainService } from "./local-service.js";
6
+ export { createLocalBrainRuntime } from "./local-runtime.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/brain/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAU7D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAKvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { type BrainActorContext, type BrainManagementService, type BrainScope, type BrainServiceContext } from "@polpo-ai/core/brain";
2
+ export interface LocalBrainRuntime {
3
+ readonly scope: BrainScope;
4
+ readonly service: BrainManagementService;
5
+ context(input?: LocalBrainContextInput): BrainServiceContext;
6
+ }
7
+ export interface LocalBrainContextInput {
8
+ readonly actor?: BrainActorContext["actor"];
9
+ readonly actorId?: string;
10
+ readonly agentName?: string;
11
+ readonly externalUserId?: string;
12
+ readonly channelId?: string;
13
+ readonly sessionId?: string;
14
+ }
15
+ export interface CreateLocalBrainRuntimeOptions {
16
+ readonly workDir: string;
17
+ readonly polpoDir: string;
18
+ readonly scopeId?: string;
19
+ }
20
+ export declare function createLocalBrainRuntime(options: CreateLocalBrainRuntimeOptions): LocalBrainRuntime;
21
+ //# sourceMappingURL=local-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-runtime.d.ts","sourceRoot":"","sources":["../../src/brain/local-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAK9B,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,OAAO,CAAC,KAAK,CAAC,EAAE,sBAAsB,GAAG,mBAAmB,CAAC;CAC9D;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,8BAA8B,GACtC,iBAAiB,CAkDnB"}
@@ -0,0 +1,55 @@
1
+ import { basename, join, resolve } from "node:path";
2
+ import { brainScopeKey, normalizeBrainScope, } from "@polpo-ai/core/brain";
3
+ import { FileBrainStore } from "./file-store.js";
4
+ import { LocalBrainService } from "./local-service.js";
5
+ import { NodeBrainContentLoader } from "./content-loader.js";
6
+ export function createLocalBrainRuntime(options) {
7
+ const workDir = resolve(options.workDir);
8
+ const scope = normalizeBrainScope({
9
+ kind: "project",
10
+ subjectId: options.scopeId?.trim() || basename(workDir) || "local-project",
11
+ });
12
+ const store = new FileBrainStore(join(options.polpoDir, "brain.json"));
13
+ const policy = {
14
+ authorize: ({ source, actor }) => ({
15
+ allowed: source.scope.kind === "project"
16
+ && actor.projectId === source.scope.subjectId
17
+ && brainScopeKey(source.scope) === brainScopeKey(scope),
18
+ reason: "local-project-scope",
19
+ matchedScope: scope,
20
+ }),
21
+ };
22
+ const service = new LocalBrainService({
23
+ sourceStore: store,
24
+ versionStore: store,
25
+ chunkStore: store,
26
+ accessPolicy: policy,
27
+ contentLoader: new NodeBrainContentLoader({
28
+ allowedFileRoots: [workDir],
29
+ }),
30
+ });
31
+ return Object.freeze({
32
+ scope,
33
+ service,
34
+ context(input = {}) {
35
+ const actor = Object.freeze({
36
+ actor: input.actor ?? (input.agentName ? "agent" : "user"),
37
+ actorId: input.actorId ?? input.agentName ?? "local-user",
38
+ projectId: scope.subjectId,
39
+ ...(input.agentName ? { agentName: input.agentName } : {}),
40
+ ...(input.externalUserId
41
+ ? { externalUserId: input.externalUserId }
42
+ : {}),
43
+ ...(input.channelId ? { channelId: input.channelId } : {}),
44
+ ...(input.sessionId ? { sessionId: input.sessionId } : {}),
45
+ });
46
+ return Object.freeze({
47
+ actor,
48
+ readScopes: Object.freeze([scope]),
49
+ writeScopes: Object.freeze([scope]),
50
+ defaultWriteScope: scope,
51
+ });
52
+ },
53
+ });
54
+ }
55
+ //# sourceMappingURL=local-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-runtime.js","sourceRoot":"","sources":["../../src/brain/local-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { type BrainAccessPolicy, type BrainChunkStore, type BrainManagementService, type BrainParser, type BrainReadSourceRequest, type BrainReindexSourceRequest, type BrainSearchRequest, type BrainServiceContext, type BrainSource, type BrainSourceListQuery, type BrainSourceListResult, type BrainSourceRef, type BrainSourceStore, type BrainSourceVersion, type BrainUpdateSourceRequest, type BrainVersionStore, type BrainCreateSourceRequest } from "@polpo-ai/core/brain";
2
+ import { type BrainContentInput, type BrainLoadedContent } from "./content-loader.js";
3
+ export interface LocalBrainContentLoader {
4
+ load(input: BrainContentInput): Promise<BrainLoadedContent>;
5
+ }
6
+ export interface LocalBrainServiceOptions {
7
+ readonly sourceStore: BrainSourceStore;
8
+ readonly versionStore: BrainVersionStore;
9
+ readonly chunkStore: BrainChunkStore;
10
+ readonly accessPolicy: BrainAccessPolicy;
11
+ readonly contentLoader?: LocalBrainContentLoader;
12
+ readonly parsers?: readonly BrainParser[];
13
+ readonly now?: () => Date | string;
14
+ readonly createVersionId?: () => string;
15
+ }
16
+ export declare class LocalBrainService implements BrainManagementService {
17
+ private readonly sourceStore;
18
+ private readonly versionStore;
19
+ private readonly chunkStore;
20
+ private readonly accessPolicy;
21
+ private readonly contentLoader;
22
+ private readonly parsers;
23
+ private readonly now?;
24
+ private readonly createVersionId;
25
+ constructor(options: LocalBrainServiceOptions);
26
+ private authorize;
27
+ private assertReadScope;
28
+ private assertWriteScope;
29
+ listSources(context: BrainServiceContext, query?: Omit<BrainSourceListQuery, "scopes"> & {
30
+ readonly scopes?: readonly BrainSourceRef["scope"][];
31
+ }): Promise<BrainSourceListResult>;
32
+ createSource(context: BrainServiceContext, request: BrainCreateSourceRequest): Promise<BrainSource>;
33
+ getSource(context: BrainServiceContext, ref: BrainSourceRef): Promise<BrainSource | null>;
34
+ updateSource(context: BrainServiceContext, ref: BrainSourceRef, request: BrainUpdateSourceRequest): Promise<BrainSource>;
35
+ deleteSource(context: BrainServiceContext, ref: BrainSourceRef): Promise<void>;
36
+ reindexSource(context: BrainServiceContext, ref: BrainSourceRef, request: BrainReindexSourceRequest): Promise<BrainSource>;
37
+ listVersions(context: BrainServiceContext, ref: BrainSourceRef): Promise<readonly BrainSourceVersion[]>;
38
+ search(context: BrainServiceContext, request: BrainSearchRequest): Promise<readonly import("@polpo-ai/core/brain").BrainRetrievalResult[]>;
39
+ readSource(context: BrainServiceContext, request: BrainReadSourceRequest): Promise<import("@polpo-ai/core/brain").ReadBrainSourceResult>;
40
+ }
41
+ //# sourceMappingURL=local-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-service.d.ts","sourceRoot":"","sources":["../../src/brain/local-service.ts"],"names":[],"mappings":"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"}