openclaw-cloudflare-vectorize-memory 0.1.0 → 0.1.1

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 (46) hide show
  1. package/README.md +14 -0
  2. package/dist/cli.js +119 -0
  3. package/dist/cli.js.map +1 -0
  4. package/dist/cloudflare-api.js +24 -0
  5. package/dist/cloudflare-api.js.map +1 -0
  6. package/dist/companion-store.js +43 -0
  7. package/dist/companion-store.js.map +1 -0
  8. package/dist/config.js +290 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/constants.js +15 -0
  11. package/dist/constants.js.map +1 -0
  12. package/dist/doctor.js +40 -0
  13. package/dist/doctor.js.map +1 -0
  14. package/dist/embeddings-client.js +28 -0
  15. package/dist/embeddings-client.js.map +1 -0
  16. package/dist/errors.js +18 -0
  17. package/dist/errors.js.map +1 -0
  18. package/dist/index.js +30 -1403
  19. package/dist/index.js.map +1 -1
  20. package/dist/migration.js +282 -0
  21. package/dist/migration.js.map +1 -0
  22. package/dist/namespace.js +18 -0
  23. package/dist/namespace.js.map +1 -0
  24. package/dist/prompt.js +9 -0
  25. package/dist/prompt.js.map +1 -0
  26. package/dist/public-artifacts.js +31 -0
  27. package/dist/public-artifacts.js.map +1 -0
  28. package/dist/record-mapper.js +98 -0
  29. package/dist/record-mapper.js.map +1 -0
  30. package/dist/runtime.js +39 -0
  31. package/dist/runtime.js.map +1 -0
  32. package/dist/search-manager.js +74 -0
  33. package/dist/search-manager.js.map +1 -0
  34. package/dist/service-factory.js +10 -0
  35. package/dist/service-factory.js.map +1 -0
  36. package/dist/service.js +114 -0
  37. package/dist/service.js.map +1 -0
  38. package/dist/tools.js +158 -0
  39. package/dist/tools.js.map +1 -0
  40. package/dist/vectorize-client.js +68 -0
  41. package/dist/vectorize-client.js.map +1 -0
  42. package/hooks/cloudflare-memory-bootstrap/BOOTSTRAP.md +7 -0
  43. package/hooks/cloudflare-memory-bootstrap/HOOK.md +10 -0
  44. package/hooks/cloudflare-memory-bootstrap/handler.d.ts +3 -0
  45. package/hooks/cloudflare-memory-bootstrap/handler.js +17 -0
  46. package/package.json +5 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","names":[],"sources":["../src/doctor.ts"],"sourcesContent":["import type { CloudflareMemoryService } from \"./service.js\";\nimport type { DoctorCheck, DoctorReport } from \"./types.js\";\n\nexport async function runDoctor(params: { service: CloudflareMemoryService; createIndexIfMissing: boolean }): Promise<DoctorReport> {\n\tconst checks: DoctorCheck[] = [];\n\n\tchecks.push({\n\t\tname: \"credentials\",\n\t\tstatus: \"pass\",\n\t\tmessage: `Using Cloudflare account ${params.service.config.accountId} and Vectorize index ${params.service.config.indexName}.`,\n\t});\n\n\tconst indexResult = await params.service.ensureIndexExists(params.createIndexIfMissing);\n\tchecks.push({\n\t\tname: \"vectorize-index\",\n\t\tstatus: \"pass\",\n\t\tmessage: indexResult.created\n\t\t\t? `Created Vectorize index \"${params.service.config.indexName}\" with ${indexResult.dimensions} dimensions.`\n\t\t\t: `Vectorize index \"${params.service.config.indexName}\" is reachable.`,\n\t});\n\n\tconst embeddingDimensions = await params.service.embeddings.probeDimensions();\n\tchecks.push({\n\t\tname: \"workers-ai-embeddings\",\n\t\tstatus: \"pass\",\n\t\tmessage: `Workers AI model ${params.service.config.model} returned ${embeddingDimensions} dimensions.`,\n\t});\n\n\tif (embeddingDimensions !== indexResult.dimensions) {\n\t\tchecks.push({\n\t\t\tname: \"dimension-match\",\n\t\t\tstatus: \"fail\",\n\t\t\tmessage: `Embedding dimensions (${embeddingDimensions}) do not match the Vectorize index dimensions (${indexResult.dimensions}).`,\n\t\t});\n\t} else {\n\t\tchecks.push({\n\t\t\tname: \"dimension-match\",\n\t\t\tstatus: \"pass\",\n\t\t\tmessage: \"Embedding dimensions match the Vectorize index.\",\n\t\t});\n\t}\n\n\tchecks.push({\n\t\tname: \"metadata-filters\",\n\t\tstatus: params.service.config.metadataIndexedFields.length > 0 ? \"pass\" : \"warn\",\n\t\tmessage:\n\t\t\tparams.service.config.metadataIndexedFields.length > 0\n\t\t\t\t? `Configured metadata-index guidance for: ${params.service.config.metadataIndexedFields.join(\", \")}.`\n\t\t\t\t: \"No metadataIndexedFields configured. Add metadata indexes in Cloudflare before relying on filter-heavy queries.\",\n\t});\n\n\tconst ok = checks.every((check) => check.status !== \"fail\");\n\treturn { ok, checks };\n}\n"],"mappings":";AAGA,eAAsB,EAAU,GAAoG;CACnI,IAAM,IAAwB,EAAE;AAEhC,GAAO,KAAK;EACX,MAAM;EACN,QAAQ;EACR,SAAS,4BAA4B,EAAO,QAAQ,OAAO,UAAU,uBAAuB,EAAO,QAAQ,OAAO,UAAU;EAC5H,CAAC;CAEF,IAAM,IAAc,MAAM,EAAO,QAAQ,kBAAkB,EAAO,qBAAqB;AACvF,GAAO,KAAK;EACX,MAAM;EACN,QAAQ;EACR,SAAS,EAAY,UAClB,4BAA4B,EAAO,QAAQ,OAAO,UAAU,SAAS,EAAY,WAAW,gBAC5F,oBAAoB,EAAO,QAAQ,OAAO,UAAU;EACvD,CAAC;CAEF,IAAM,IAAsB,MAAM,EAAO,QAAQ,WAAW,iBAAiB;AA+B7E,QA9BA,EAAO,KAAK;EACX,MAAM;EACN,QAAQ;EACR,SAAS,oBAAoB,EAAO,QAAQ,OAAO,MAAM,YAAY,EAAoB;EACzF,CAAC,EAEE,MAAwB,EAAY,aAOvC,EAAO,KAAK;EACX,MAAM;EACN,QAAQ;EACR,SAAS;EACT,CAAC,GAVF,EAAO,KAAK;EACX,MAAM;EACN,QAAQ;EACR,SAAS,yBAAyB,EAAoB,iDAAiD,EAAY,WAAW;EAC9H,CAAC,EASH,EAAO,KAAK;EACX,MAAM;EACN,QAAQ,EAAO,QAAQ,OAAO,sBAAsB,SAAS,IAAI,SAAS;EAC1E,SACC,EAAO,QAAQ,OAAO,sBAAsB,SAAS,IAClD,2CAA2C,EAAO,QAAQ,OAAO,sBAAsB,KAAK,KAAK,CAAC,KAClG;EACJ,CAAC,EAGK;EAAE,IADE,EAAO,OAAO,MAAU,EAAM,WAAW,OAAO;EAC9C;EAAQ"}
@@ -0,0 +1,28 @@
1
+ import { requestCloudflare as e } from "./cloudflare-api.js";
2
+ //#region src/embeddings-client.ts
3
+ var t = class {
4
+ constructor(e) {
5
+ this.config = e;
6
+ }
7
+ async embedQuery(e) {
8
+ let [t] = await this.embedBatch([e]);
9
+ return t;
10
+ }
11
+ async embedBatch(t) {
12
+ return t.length === 0 ? [] : [...(await e({
13
+ url: `${this.config.workersAiBaseUrl}/embeddings`,
14
+ apiToken: this.config.apiToken,
15
+ body: JSON.stringify({
16
+ model: this.config.model,
17
+ input: t
18
+ })
19
+ })).data].sort((e, t) => e.index - t.index).map((e) => e.embedding);
20
+ }
21
+ async probeDimensions() {
22
+ return (await this.embedQuery("openclaw-memory-dimension-probe")).length;
23
+ }
24
+ };
25
+ //#endregion
26
+ export { t as WorkersAiEmbeddingsClient };
27
+
28
+ //# sourceMappingURL=embeddings-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings-client.js","names":[],"sources":["../src/embeddings-client.ts"],"sourcesContent":["import { requestCloudflare } from \"./cloudflare-api.js\";\nimport type { ResolvedPluginConfig } from \"./types.js\";\n\ntype OpenAiEmbeddingResponse = {\n\tdata: Array<{\n\t\tembedding: number[];\n\t\tindex: number;\n\t}>;\n};\n\nexport class WorkersAiEmbeddingsClient {\n\tconstructor(private readonly config: ResolvedPluginConfig) {}\n\n\tasync embedQuery(text: string): Promise<number[]> {\n\t\tconst [embedding] = await this.embedBatch([text]);\n\t\treturn embedding;\n\t}\n\n\tasync embedBatch(texts: string[]): Promise<number[][]> {\n\t\tif (texts.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\tconst response = await requestCloudflare<OpenAiEmbeddingResponse>({\n\t\t\turl: `${this.config.workersAiBaseUrl}/embeddings`,\n\t\t\tapiToken: this.config.apiToken,\n\t\t\tbody: JSON.stringify({\n\t\t\t\tmodel: this.config.model,\n\t\t\t\tinput: texts,\n\t\t\t}),\n\t\t});\n\n\t\treturn [...response.data].sort((left, right) => left.index - right.index).map((entry) => entry.embedding);\n\t}\n\n\tasync probeDimensions(): Promise<number> {\n\t\tconst embedding = await this.embedQuery(\"openclaw-memory-dimension-probe\");\n\t\treturn embedding.length;\n\t}\n}\n"],"mappings":";;AAUA,IAAa,IAAb,MAAuC;CACtC,YAAY,GAA+C;AAA9B,OAAA,SAAA;;CAE7B,MAAM,WAAW,GAAiC;EACjD,IAAM,CAAC,KAAa,MAAM,KAAK,WAAW,CAAC,EAAK,CAAC;AACjD,SAAO;;CAGR,MAAM,WAAW,GAAsC;AAatD,SAZI,EAAM,WAAW,IACb,EAAE,GAWH,CAAC,IATS,MAAM,EAA2C;GACjE,KAAK,GAAG,KAAK,OAAO,iBAAiB;GACrC,UAAU,KAAK,OAAO;GACtB,MAAM,KAAK,UAAU;IACpB,OAAO,KAAK,OAAO;IACnB,OAAO;IACP,CAAC;GACF,CAAC,EAEkB,KAAK,CAAC,MAAM,GAAM,MAAU,EAAK,QAAQ,EAAM,MAAM,CAAC,KAAK,MAAU,EAAM,UAAU;;CAG1G,MAAM,kBAAmC;AAExC,UADkB,MAAM,KAAK,WAAW,kCAAkC,EACzD"}
package/dist/errors.js ADDED
@@ -0,0 +1,18 @@
1
+ //#region src/errors.ts
2
+ var e = class extends Error {
3
+ constructor(e) {
4
+ super(e), this.name = "ConfigurationError";
5
+ }
6
+ }, t = class extends Error {
7
+ constructor(e, t, n) {
8
+ super(e), this.status = t, this.details = n, this.name = "CloudflareApiError";
9
+ }
10
+ }, n = class extends Error {
11
+ constructor(e) {
12
+ super(e), this.name = "RecordSizeError";
13
+ }
14
+ };
15
+ //#endregion
16
+ export { t as CloudflareApiError, e as ConfigurationError, n as RecordSizeError };
17
+
18
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["export class ConfigurationError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"ConfigurationError\";\n\t}\n}\n\nexport class CloudflareApiError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\treadonly status?: number,\n\t\treadonly details?: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"CloudflareApiError\";\n\t}\n}\n\nexport class RecordSizeError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"RecordSizeError\";\n\t}\n}\n"],"mappings":";AAAA,IAAa,IAAb,cAAwC,MAAM;CAC7C,YAAY,GAAiB;AAE5B,EADA,MAAM,EAAQ,EACd,KAAK,OAAO;;GAID,IAAb,cAAwC,MAAM;CAC7C,YACC,GACA,GACA,GACC;AAED,EADA,MAAM,EAAQ,EAHL,KAAA,SAAA,GACA,KAAA,UAAA,GAGT,KAAK,OAAO;;GAID,IAAb,cAAqC,MAAM;CAC1C,YAAY,GAAiB;AAE5B,EADA,MAAM,EAAQ,EACd,KAAK,OAAO"}