@memtensor/memos-local-openclaw-plugin 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.
Files changed (162) hide show
  1. package/.env.example +11 -0
  2. package/README.md +251 -0
  3. package/SKILL.md +43 -0
  4. package/dist/capture/index.d.ts +16 -0
  5. package/dist/capture/index.d.ts.map +1 -0
  6. package/dist/capture/index.js +80 -0
  7. package/dist/capture/index.js.map +1 -0
  8. package/dist/config.d.ts +4 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +96 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/embedding/index.d.ts +12 -0
  13. package/dist/embedding/index.d.ts.map +1 -0
  14. package/dist/embedding/index.js +75 -0
  15. package/dist/embedding/index.js.map +1 -0
  16. package/dist/embedding/local.d.ts +3 -0
  17. package/dist/embedding/local.d.ts.map +1 -0
  18. package/dist/embedding/local.js +65 -0
  19. package/dist/embedding/local.js.map +1 -0
  20. package/dist/embedding/providers/cohere.d.ts +4 -0
  21. package/dist/embedding/providers/cohere.d.ts.map +1 -0
  22. package/dist/embedding/providers/cohere.js +57 -0
  23. package/dist/embedding/providers/cohere.js.map +1 -0
  24. package/dist/embedding/providers/gemini.d.ts +3 -0
  25. package/dist/embedding/providers/gemini.d.ts.map +1 -0
  26. package/dist/embedding/providers/gemini.js +31 -0
  27. package/dist/embedding/providers/gemini.js.map +1 -0
  28. package/dist/embedding/providers/mistral.d.ts +3 -0
  29. package/dist/embedding/providers/mistral.d.ts.map +1 -0
  30. package/dist/embedding/providers/mistral.js +25 -0
  31. package/dist/embedding/providers/mistral.js.map +1 -0
  32. package/dist/embedding/providers/openai.d.ts +3 -0
  33. package/dist/embedding/providers/openai.d.ts.map +1 -0
  34. package/dist/embedding/providers/openai.js +35 -0
  35. package/dist/embedding/providers/openai.js.map +1 -0
  36. package/dist/embedding/providers/voyage.d.ts +3 -0
  37. package/dist/embedding/providers/voyage.d.ts.map +1 -0
  38. package/dist/embedding/providers/voyage.js +25 -0
  39. package/dist/embedding/providers/voyage.js.map +1 -0
  40. package/dist/index.d.ts +44 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +75 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/ingest/chunker.d.ts +15 -0
  45. package/dist/ingest/chunker.d.ts.map +1 -0
  46. package/dist/ingest/chunker.js +193 -0
  47. package/dist/ingest/chunker.js.map +1 -0
  48. package/dist/ingest/dedup.d.ts +11 -0
  49. package/dist/ingest/dedup.d.ts.map +1 -0
  50. package/dist/ingest/dedup.js +29 -0
  51. package/dist/ingest/dedup.js.map +1 -0
  52. package/dist/ingest/providers/anthropic.d.ts +3 -0
  53. package/dist/ingest/providers/anthropic.d.ts.map +1 -0
  54. package/dist/ingest/providers/anthropic.js +33 -0
  55. package/dist/ingest/providers/anthropic.js.map +1 -0
  56. package/dist/ingest/providers/bedrock.d.ts +8 -0
  57. package/dist/ingest/providers/bedrock.d.ts.map +1 -0
  58. package/dist/ingest/providers/bedrock.js +41 -0
  59. package/dist/ingest/providers/bedrock.js.map +1 -0
  60. package/dist/ingest/providers/gemini.d.ts +3 -0
  61. package/dist/ingest/providers/gemini.d.ts.map +1 -0
  62. package/dist/ingest/providers/gemini.js +31 -0
  63. package/dist/ingest/providers/gemini.js.map +1 -0
  64. package/dist/ingest/providers/index.d.ts +9 -0
  65. package/dist/ingest/providers/index.d.ts.map +1 -0
  66. package/dist/ingest/providers/index.js +68 -0
  67. package/dist/ingest/providers/index.js.map +1 -0
  68. package/dist/ingest/providers/openai.d.ts +3 -0
  69. package/dist/ingest/providers/openai.d.ts.map +1 -0
  70. package/dist/ingest/providers/openai.js +41 -0
  71. package/dist/ingest/providers/openai.js.map +1 -0
  72. package/dist/ingest/worker.d.ts +21 -0
  73. package/dist/ingest/worker.d.ts.map +1 -0
  74. package/dist/ingest/worker.js +111 -0
  75. package/dist/ingest/worker.js.map +1 -0
  76. package/dist/recall/engine.d.ts +23 -0
  77. package/dist/recall/engine.d.ts.map +1 -0
  78. package/dist/recall/engine.js +153 -0
  79. package/dist/recall/engine.js.map +1 -0
  80. package/dist/recall/mmr.d.ts +17 -0
  81. package/dist/recall/mmr.d.ts.map +1 -0
  82. package/dist/recall/mmr.js +51 -0
  83. package/dist/recall/mmr.js.map +1 -0
  84. package/dist/recall/recency.d.ts +20 -0
  85. package/dist/recall/recency.d.ts.map +1 -0
  86. package/dist/recall/recency.js +26 -0
  87. package/dist/recall/recency.js.map +1 -0
  88. package/dist/recall/rrf.d.ts +16 -0
  89. package/dist/recall/rrf.d.ts.map +1 -0
  90. package/dist/recall/rrf.js +15 -0
  91. package/dist/recall/rrf.js.map +1 -0
  92. package/dist/storage/sqlite.d.ts +34 -0
  93. package/dist/storage/sqlite.d.ts.map +1 -0
  94. package/dist/storage/sqlite.js +274 -0
  95. package/dist/storage/sqlite.js.map +1 -0
  96. package/dist/storage/vector.d.ts +13 -0
  97. package/dist/storage/vector.d.ts.map +1 -0
  98. package/dist/storage/vector.js +33 -0
  99. package/dist/storage/vector.js.map +1 -0
  100. package/dist/tools/index.d.ts +4 -0
  101. package/dist/tools/index.d.ts.map +1 -0
  102. package/dist/tools/index.js +10 -0
  103. package/dist/tools/index.js.map +1 -0
  104. package/dist/tools/memory-get.d.ts +4 -0
  105. package/dist/tools/memory-get.d.ts.map +1 -0
  106. package/dist/tools/memory-get.js +59 -0
  107. package/dist/tools/memory-get.js.map +1 -0
  108. package/dist/tools/memory-search.d.ts +4 -0
  109. package/dist/tools/memory-search.d.ts.map +1 -0
  110. package/dist/tools/memory-search.js +36 -0
  111. package/dist/tools/memory-search.js.map +1 -0
  112. package/dist/tools/memory-timeline.d.ts +4 -0
  113. package/dist/tools/memory-timeline.d.ts.map +1 -0
  114. package/dist/tools/memory-timeline.js +64 -0
  115. package/dist/tools/memory-timeline.js.map +1 -0
  116. package/dist/types.d.ts +158 -0
  117. package/dist/types.d.ts.map +1 -0
  118. package/dist/types.js +25 -0
  119. package/dist/types.js.map +1 -0
  120. package/dist/viewer/html.d.ts +2 -0
  121. package/dist/viewer/html.d.ts.map +1 -0
  122. package/dist/viewer/html.js +686 -0
  123. package/dist/viewer/html.js.map +1 -0
  124. package/dist/viewer/server.d.ts +48 -0
  125. package/dist/viewer/server.d.ts.map +1 -0
  126. package/dist/viewer/server.js +470 -0
  127. package/dist/viewer/server.js.map +1 -0
  128. package/index.ts +357 -0
  129. package/openclaw.plugin.json +57 -0
  130. package/package.json +57 -0
  131. package/src/capture/index.ts +92 -0
  132. package/src/config.ts +67 -0
  133. package/src/embedding/index.ts +76 -0
  134. package/src/embedding/local.ts +35 -0
  135. package/src/embedding/providers/cohere.ts +69 -0
  136. package/src/embedding/providers/gemini.ts +41 -0
  137. package/src/embedding/providers/mistral.ts +32 -0
  138. package/src/embedding/providers/openai.ts +42 -0
  139. package/src/embedding/providers/voyage.ts +32 -0
  140. package/src/index.ts +106 -0
  141. package/src/ingest/chunker.ts +217 -0
  142. package/src/ingest/dedup.ts +37 -0
  143. package/src/ingest/providers/anthropic.ts +41 -0
  144. package/src/ingest/providers/bedrock.ts +50 -0
  145. package/src/ingest/providers/gemini.ts +41 -0
  146. package/src/ingest/providers/index.ts +67 -0
  147. package/src/ingest/providers/openai.ts +48 -0
  148. package/src/ingest/worker.ts +130 -0
  149. package/src/recall/engine.ts +182 -0
  150. package/src/recall/mmr.ts +60 -0
  151. package/src/recall/recency.ts +27 -0
  152. package/src/recall/rrf.ts +31 -0
  153. package/src/storage/sqlite.ts +305 -0
  154. package/src/storage/vector.ts +39 -0
  155. package/src/tools/index.ts +3 -0
  156. package/src/tools/memory-get.ts +68 -0
  157. package/src/tools/memory-search.ts +36 -0
  158. package/src/tools/memory-timeline.ts +73 -0
  159. package/src/types.ts +214 -0
  160. package/src/viewer/html.ts +682 -0
  161. package/src/viewer/server.ts +464 -0
  162. package/www/index.html +606 -0
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.embedLocal = embedLocal;
37
+ const types_1 = require("../types");
38
+ let extractorPromise = null;
39
+ function getExtractor(log) {
40
+ if (extractorPromise)
41
+ return extractorPromise;
42
+ extractorPromise = (async () => {
43
+ log.info("Loading local embedding model (first call may download ~23MB)...");
44
+ const { pipeline } = await Promise.resolve().then(() => __importStar(require("@xenova/transformers")));
45
+ const ext = await pipeline("feature-extraction", types_1.DEFAULTS.localEmbeddingModel, {
46
+ quantized: true,
47
+ });
48
+ log.info("Local embedding model ready");
49
+ return ext;
50
+ })().catch((err) => {
51
+ extractorPromise = null;
52
+ throw err;
53
+ });
54
+ return extractorPromise;
55
+ }
56
+ async function embedLocal(texts, log) {
57
+ const ext = await getExtractor(log);
58
+ const results = [];
59
+ for (const text of texts) {
60
+ const output = await ext(text, { pooling: "mean", normalize: true });
61
+ results.push(Array.from(output.data).slice(0, types_1.DEFAULTS.localEmbeddingDimensions));
62
+ }
63
+ return results;
64
+ }
65
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/embedding/local.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,gCAUC;AAjCD,oCAAoC;AAEpC,IAAI,gBAAgB,GAAwB,IAAI,CAAC;AAEjD,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,gBAAgB;QAAE,OAAO,gBAAgB,CAAC;IAE9C,gBAAgB,GAAG,CAAC,KAAK,IAAI,EAAE;QAC7B,GAAG,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QAC7E,MAAM,EAAE,QAAQ,EAAE,GAAG,wDAAa,sBAAsB,GAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,oBAAoB,EAAE,gBAAQ,CAAC,mBAAmB,EAAE;YAC7E,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACxC,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACjB,gBAAgB,GAAG,IAAI,CAAC;QACxB,MAAM,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,KAAe,EAAE,GAAW;IAC3D,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,OAAO,GAAe,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACpG,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { EmbeddingConfig, Logger } from "../../types";
2
+ export declare function embedCohere(texts: string[], cfg: EmbeddingConfig, log: Logger): Promise<number[][]>;
3
+ export declare function embedCohereQuery(text: string, cfg: EmbeddingConfig, log: Logger): Promise<number[]>;
4
+ //# sourceMappingURL=cohere.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohere.d.ts","sourceRoot":"","sources":["../../../src/embedding/providers/cohere.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE3D,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CA4BrB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BnB"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.embedCohere = embedCohere;
4
+ exports.embedCohereQuery = embedCohereQuery;
5
+ async function embedCohere(texts, cfg, log) {
6
+ const endpoint = cfg.endpoint ?? "https://api.cohere.ai/v1/embed";
7
+ const model = cfg.model ?? "embed-english-v3.0";
8
+ const headers = {
9
+ "Content-Type": "application/json",
10
+ Authorization: `Bearer ${cfg.apiKey}`,
11
+ ...cfg.headers,
12
+ };
13
+ const resp = await fetch(endpoint, {
14
+ method: "POST",
15
+ headers,
16
+ body: JSON.stringify({
17
+ texts,
18
+ model,
19
+ input_type: "search_document",
20
+ truncate: "END",
21
+ }),
22
+ signal: AbortSignal.timeout(cfg.timeoutMs ?? 30_000),
23
+ });
24
+ if (!resp.ok) {
25
+ const body = await resp.text();
26
+ throw new Error(`Cohere embedding failed (${resp.status}): ${body}`);
27
+ }
28
+ const json = (await resp.json());
29
+ return json.embeddings;
30
+ }
31
+ async function embedCohereQuery(text, cfg, log) {
32
+ const endpoint = cfg.endpoint ?? "https://api.cohere.ai/v1/embed";
33
+ const model = cfg.model ?? "embed-english-v3.0";
34
+ const headers = {
35
+ "Content-Type": "application/json",
36
+ Authorization: `Bearer ${cfg.apiKey}`,
37
+ ...cfg.headers,
38
+ };
39
+ const resp = await fetch(endpoint, {
40
+ method: "POST",
41
+ headers,
42
+ body: JSON.stringify({
43
+ texts: [text],
44
+ model,
45
+ input_type: "search_query",
46
+ truncate: "END",
47
+ }),
48
+ signal: AbortSignal.timeout(cfg.timeoutMs ?? 30_000),
49
+ });
50
+ if (!resp.ok) {
51
+ const body = await resp.text();
52
+ throw new Error(`Cohere query embedding failed (${resp.status}): ${body}`);
53
+ }
54
+ const json = (await resp.json());
55
+ return json.embeddings[0];
56
+ }
57
+ //# sourceMappingURL=cohere.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohere.js","sourceRoot":"","sources":["../../../src/embedding/providers/cohere.ts"],"names":[],"mappings":";;AAEA,kCAgCC;AAED,4CAgCC;AAlEM,KAAK,UAAU,WAAW,CAC/B,KAAe,EACf,GAAoB,EACpB,GAAW;IAEX,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,gCAAgC,CAAC;IAClE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,oBAAoB,CAAC;IAChD,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,aAAa,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE;QACrC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACjC,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK;YACL,KAAK;YACL,UAAU,EAAE,iBAAiB;YAC7B,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA+B,CAAC;IAC/D,OAAO,IAAI,CAAC,UAAU,CAAC;AACzB,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,GAAoB,EACpB,GAAW;IAEX,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,gCAAgC,CAAC;IAClE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,oBAAoB,CAAC;IAChD,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,aAAa,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE;QACrC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACjC,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,CAAC,IAAI,CAAC;YACb,KAAK;YACL,UAAU,EAAE,cAAc;YAC1B,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA+B,CAAC;IAC/D,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { EmbeddingConfig, Logger } from "../../types";
2
+ export declare function embedGemini(texts: string[], cfg: EmbeddingConfig, log: Logger): Promise<number[][]>;
3
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/embedding/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE3D,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAkCrB"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.embedGemini = embedGemini;
4
+ async function embedGemini(texts, cfg, log) {
5
+ const model = cfg.model ?? "text-embedding-004";
6
+ const endpoint = cfg.endpoint ??
7
+ `https://generativelanguage.googleapis.com/v1beta/models/${model}:batchEmbedContents`;
8
+ const headers = {
9
+ "Content-Type": "application/json",
10
+ ...cfg.headers,
11
+ };
12
+ const url = `${endpoint}?key=${cfg.apiKey}`;
13
+ const resp = await fetch(url, {
14
+ method: "POST",
15
+ headers,
16
+ body: JSON.stringify({
17
+ requests: texts.map((text) => ({
18
+ model: `models/${model}`,
19
+ content: { parts: [{ text }] },
20
+ })),
21
+ }),
22
+ signal: AbortSignal.timeout(cfg.timeoutMs ?? 30_000),
23
+ });
24
+ if (!resp.ok) {
25
+ const body = await resp.text();
26
+ throw new Error(`Gemini embedding failed (${resp.status}): ${body}`);
27
+ }
28
+ const json = (await resp.json());
29
+ return json.embeddings.map((e) => e.values);
30
+ }
31
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/embedding/providers/gemini.ts"],"names":[],"mappings":";;AAEA,kCAsCC;AAtCM,KAAK,UAAU,WAAW,CAC/B,KAAe,EACf,GAAoB,EACpB,GAAW;IAEX,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,oBAAoB,CAAC;IAChD,MAAM,QAAQ,GACZ,GAAG,CAAC,QAAQ;QACZ,2DAA2D,KAAK,qBAAqB,CAAC;IAExF,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC;IAEF,MAAM,GAAG,GAAG,GAAG,QAAQ,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;IAE5C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC7B,KAAK,EAAE,UAAU,KAAK,EAAE;gBACxB,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;aAC/B,CAAC,CAAC;SACJ,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAE9B,CAAC;IACF,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { EmbeddingConfig, Logger } from "../../types";
2
+ export declare function embedMistral(texts: string[], cfg: EmbeddingConfig, log: Logger): Promise<number[][]>;
3
+ //# sourceMappingURL=mistral.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mistral.d.ts","sourceRoot":"","sources":["../../../src/embedding/providers/mistral.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE3D,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAyBrB"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.embedMistral = embedMistral;
4
+ async function embedMistral(texts, cfg, log) {
5
+ const endpoint = cfg.endpoint ?? "https://api.mistral.ai/v1/embeddings";
6
+ const model = cfg.model ?? "mistral-embed";
7
+ const headers = {
8
+ "Content-Type": "application/json",
9
+ Authorization: `Bearer ${cfg.apiKey}`,
10
+ ...cfg.headers,
11
+ };
12
+ const resp = await fetch(endpoint, {
13
+ method: "POST",
14
+ headers,
15
+ body: JSON.stringify({ input: texts, model, encoding_format: "float" }),
16
+ signal: AbortSignal.timeout(cfg.timeoutMs ?? 30_000),
17
+ });
18
+ if (!resp.ok) {
19
+ const body = await resp.text();
20
+ throw new Error(`Mistral embedding failed (${resp.status}): ${body}`);
21
+ }
22
+ const json = (await resp.json());
23
+ return json.data.map((d) => d.embedding);
24
+ }
25
+ //# sourceMappingURL=mistral.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mistral.js","sourceRoot":"","sources":["../../../src/embedding/providers/mistral.ts"],"names":[],"mappings":";;AAEA,oCA6BC;AA7BM,KAAK,UAAU,YAAY,CAChC,KAAe,EACf,GAAoB,EACpB,GAAW;IAEX,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,sCAAsC,CAAC;IACxE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,eAAe,CAAC;IAC3C,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,aAAa,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE;QACrC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACjC,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;QACvE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAE9B,CAAC;IACF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { EmbeddingConfig, Logger } from "../../types";
2
+ export declare function embedOpenAI(texts: string[], cfg: EmbeddingConfig, log: Logger): Promise<number[][]>;
3
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/embedding/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE3D,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAyBrB"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.embedOpenAI = embedOpenAI;
4
+ async function embedOpenAI(texts, cfg, log) {
5
+ const endpoint = normalizeEmbeddingEndpoint(cfg.endpoint ?? "https://api.openai.com/v1/embeddings");
6
+ const model = cfg.model ?? "text-embedding-3-small";
7
+ const headers = {
8
+ "Content-Type": "application/json",
9
+ Authorization: `Bearer ${cfg.apiKey}`,
10
+ ...cfg.headers,
11
+ };
12
+ const resp = await fetch(endpoint, {
13
+ method: "POST",
14
+ headers,
15
+ body: JSON.stringify({ input: texts, model }),
16
+ signal: AbortSignal.timeout(cfg.timeoutMs ?? 30_000),
17
+ });
18
+ if (!resp.ok) {
19
+ const body = await resp.text();
20
+ throw new Error(`OpenAI embedding failed (${resp.status}): ${body}`);
21
+ }
22
+ const json = (await resp.json());
23
+ return json.data.map((d) => d.embedding);
24
+ }
25
+ /**
26
+ * Normalize endpoint: if user provides a base_url (e.g. https://host/v1)
27
+ * without the /embeddings suffix, append it automatically.
28
+ */
29
+ function normalizeEmbeddingEndpoint(url) {
30
+ const stripped = url.replace(/\/+$/, "");
31
+ if (stripped.endsWith("/embeddings"))
32
+ return stripped;
33
+ return `${stripped}/embeddings`;
34
+ }
35
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/embedding/providers/openai.ts"],"names":[],"mappings":";;AAEA,kCA6BC;AA7BM,KAAK,UAAU,WAAW,CAC/B,KAAe,EACf,GAAoB,EACpB,GAAW;IAEX,MAAM,QAAQ,GAAG,0BAA0B,CAAC,GAAG,CAAC,QAAQ,IAAI,sCAAsC,CAAC,CAAC;IACpG,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,wBAAwB,CAAC;IACpD,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,aAAa,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE;QACrC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACjC,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC7C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAE9B,CAAC;IACF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,SAAS,0BAA0B,CAAC,GAAW;IAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtD,OAAO,GAAG,QAAQ,aAAa,CAAC;AAClC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { EmbeddingConfig, Logger } from "../../types";
2
+ export declare function embedVoyage(texts: string[], cfg: EmbeddingConfig, log: Logger): Promise<number[][]>;
3
+ //# sourceMappingURL=voyage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voyage.d.ts","sourceRoot":"","sources":["../../../src/embedding/providers/voyage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE3D,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAyBrB"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.embedVoyage = embedVoyage;
4
+ async function embedVoyage(texts, cfg, log) {
5
+ const endpoint = cfg.endpoint ?? "https://api.voyageai.com/v1/embeddings";
6
+ const model = cfg.model ?? "voyage-2";
7
+ const headers = {
8
+ "Content-Type": "application/json",
9
+ Authorization: `Bearer ${cfg.apiKey}`,
10
+ ...cfg.headers,
11
+ };
12
+ const resp = await fetch(endpoint, {
13
+ method: "POST",
14
+ headers,
15
+ body: JSON.stringify({ input: texts, model }),
16
+ signal: AbortSignal.timeout(cfg.timeoutMs ?? 30_000),
17
+ });
18
+ if (!resp.ok) {
19
+ const body = await resp.text();
20
+ throw new Error(`Voyage embedding failed (${resp.status}): ${body}`);
21
+ }
22
+ const json = (await resp.json());
23
+ return json.data.map((d) => d.embedding);
24
+ }
25
+ //# sourceMappingURL=voyage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voyage.js","sourceRoot":"","sources":["../../../src/embedding/providers/voyage.ts"],"names":[],"mappings":";;AAEA,kCA6BC;AA7BM,KAAK,UAAU,WAAW,CAC/B,KAAe,EACf,GAAoB,EACpB,GAAW;IAEX,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,wCAAwC,CAAC;IAC1E,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC;IACtC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,aAAa,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE;QACrC,GAAG,GAAG,CAAC,OAAO;KACf,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACjC,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC7C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAE9B,CAAC;IACF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,44 @@
1
+ import type { MemosLocalConfig, ToolDefinition, Logger } from "./types";
2
+ export interface MemosLocalPlugin {
3
+ id: string;
4
+ tools: ToolDefinition[];
5
+ onConversationTurn: (messages: Array<{
6
+ role: string;
7
+ content: string;
8
+ }>, sessionKey?: string) => void;
9
+ /** Wait for all pending ingest operations to complete. */
10
+ flush: () => Promise<void>;
11
+ shutdown: () => void;
12
+ }
13
+ export interface PluginInitOptions {
14
+ stateDir?: string;
15
+ workspaceDir?: string;
16
+ config?: Partial<MemosLocalConfig>;
17
+ log?: Logger;
18
+ }
19
+ /**
20
+ * Initialize the memos-local plugin.
21
+ *
22
+ * Typical usage inside OpenClaw plugin lifecycle:
23
+ *
24
+ * ```ts
25
+ * import { initPlugin } from "@memos/local-openclaw";
26
+ *
27
+ * export default function activate(ctx) {
28
+ * const plugin = initPlugin({
29
+ * stateDir: ctx.stateDir,
30
+ * workspaceDir: ctx.workspaceDir,
31
+ * config: ctx.pluginConfig,
32
+ * log: ctx.log,
33
+ * });
34
+ * ctx.registerTools(plugin.tools);
35
+ * ctx.onConversationTurn((msgs, session) => {
36
+ * plugin.onConversationTurn(msgs, session);
37
+ * });
38
+ * ctx.onDeactivate(() => plugin.shutdown());
39
+ * }
40
+ * ```
41
+ */
42
+ export declare function initPlugin(opts?: PluginInitOptions): MemosLocalPlugin;
43
+ export type { MemosLocalConfig, ToolDefinition, SearchResult, SearchHit, TimelineResult, GetResult } from "./types";
44
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAExE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,kBAAkB,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACtG,0DAA0D;IAC1D,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,UAAU,CAAC,IAAI,GAAE,iBAAsB,GAAG,gBAAgB,CAgDzE;AAQD,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initPlugin = initPlugin;
4
+ const uuid_1 = require("uuid");
5
+ const config_1 = require("./config");
6
+ const sqlite_1 = require("./storage/sqlite");
7
+ const embedding_1 = require("./embedding");
8
+ const worker_1 = require("./ingest/worker");
9
+ const engine_1 = require("./recall/engine");
10
+ const capture_1 = require("./capture");
11
+ const tools_1 = require("./tools");
12
+ /**
13
+ * Initialize the memos-local plugin.
14
+ *
15
+ * Typical usage inside OpenClaw plugin lifecycle:
16
+ *
17
+ * ```ts
18
+ * import { initPlugin } from "@memos/local-openclaw";
19
+ *
20
+ * export default function activate(ctx) {
21
+ * const plugin = initPlugin({
22
+ * stateDir: ctx.stateDir,
23
+ * workspaceDir: ctx.workspaceDir,
24
+ * config: ctx.pluginConfig,
25
+ * log: ctx.log,
26
+ * });
27
+ * ctx.registerTools(plugin.tools);
28
+ * ctx.onConversationTurn((msgs, session) => {
29
+ * plugin.onConversationTurn(msgs, session);
30
+ * });
31
+ * ctx.onDeactivate(() => plugin.shutdown());
32
+ * }
33
+ * ```
34
+ */
35
+ function initPlugin(opts = {}) {
36
+ const stateDir = opts.stateDir ?? defaultStateDir();
37
+ const workspaceDir = opts.workspaceDir ?? process.cwd();
38
+ const ctx = (0, config_1.buildContext)(stateDir, workspaceDir, opts.config, opts.log);
39
+ ctx.log.info("Initializing memos-local plugin...");
40
+ const store = new sqlite_1.SqliteStore(ctx.config.storage.dbPath, ctx.log);
41
+ const embedder = new embedding_1.Embedder(ctx.config.embedding, ctx.log);
42
+ const worker = new worker_1.IngestWorker(store, embedder, ctx);
43
+ const engine = new engine_1.RecallEngine(store, embedder, ctx);
44
+ const tools = [
45
+ (0, tools_1.createMemorySearchTool)(engine),
46
+ (0, tools_1.createMemoryTimelineTool)(store),
47
+ (0, tools_1.createMemoryGetTool)(store),
48
+ ];
49
+ ctx.log.info(`Plugin ready. DB: ${ctx.config.storage.dbPath}, Embedding: ${embedder.provider}`);
50
+ return {
51
+ id: "memos-local",
52
+ tools,
53
+ onConversationTurn(messages, sessionKey) {
54
+ const session = sessionKey ?? "default";
55
+ const turnId = (0, uuid_1.v4)();
56
+ const tag = ctx.config.capture?.evidenceWrapperTag ?? "STORED_MEMORY";
57
+ const captured = (0, capture_1.captureMessages)(messages, session, turnId, tag, ctx.log);
58
+ if (captured.length > 0) {
59
+ worker.enqueue(captured);
60
+ }
61
+ },
62
+ async flush() {
63
+ await worker.flush();
64
+ },
65
+ shutdown() {
66
+ ctx.log.info("Shutting down memos-local plugin...");
67
+ store.close();
68
+ },
69
+ };
70
+ }
71
+ function defaultStateDir() {
72
+ const home = process.env.HOME ?? process.env.USERPROFILE ?? "/tmp";
73
+ return `${home}/.openclaw`;
74
+ }
75
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAiDA,gCAgDC;AAjGD,+BAAkC;AAClC,qCAAwC;AACxC,6CAA+C;AAC/C,2CAAuC;AACvC,4CAA+C;AAC/C,4CAA+C;AAC/C,uCAA4C;AAC5C,mCAAgG;AAmBhG;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAgB,UAAU,CAAC,OAA0B,EAAE;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,eAAe,EAAE,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACxD,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAExE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAG,IAAI,oBAAW,CAAC,GAAG,CAAC,MAAM,CAAC,OAAQ,CAAC,MAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,IAAI,oBAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAEtD,MAAM,KAAK,GAAqB;QAC9B,IAAA,8BAAsB,EAAC,MAAM,CAAC;QAC9B,IAAA,gCAAwB,EAAC,KAAK,CAAC;QAC/B,IAAA,2BAAmB,EAAC,KAAK,CAAC;KAC3B,CAAC;IAEF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,MAAM,CAAC,OAAQ,CAAC,MAAM,gBAAgB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEjG,OAAO;QACL,EAAE,EAAE,aAAa;QAEjB,KAAK;QAEL,kBAAkB,CAChB,QAAkD,EAClD,UAAmB;YAEnB,MAAM,OAAO,GAAG,UAAU,IAAI,SAAS,CAAC;YACxC,MAAM,MAAM,GAAG,IAAA,SAAI,GAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,kBAAkB,IAAI,eAAe,CAAC;YAEtE,MAAM,QAAQ,GAAG,IAAA,yBAAe,EAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,KAAK,CAAC,KAAK;YACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAED,QAAQ;YACN,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACpD,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC;IACnE,OAAO,GAAG,IAAI,YAAY,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ChunkKind } from "../types";
2
+ export interface RawChunk {
3
+ content: string;
4
+ kind: ChunkKind;
5
+ }
6
+ /**
7
+ * Semantic-aware chunking:
8
+ * 1. Extract fenced code blocks as whole units (never split inside)
9
+ * 2. Detect unfenced code regions by brace-matching (functions/classes kept intact)
10
+ * 3. Extract error stacks, list blocks, command lines
11
+ * 4. Split remaining prose at paragraph boundaries (double newline)
12
+ * 5. Merge short adjacent chunks of the same kind
13
+ */
14
+ export declare function chunkText(text: string): RawChunk[];
15
+ //# sourceMappingURL=chunker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../src/ingest/chunker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;CACjB;AAiBD;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAwDlD"}