cloison-runtime 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 (316) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +313 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +47 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config/index.d.ts +57 -0
  8. package/dist/config/index.d.ts.map +1 -0
  9. package/dist/config/index.js +27 -0
  10. package/dist/config/index.js.map +1 -0
  11. package/dist/credentials/index.d.ts +4 -0
  12. package/dist/credentials/index.d.ts.map +1 -0
  13. package/dist/credentials/index.js +3 -0
  14. package/dist/credentials/index.js.map +1 -0
  15. package/dist/credentials/proxy.d.ts +3 -0
  16. package/dist/credentials/proxy.d.ts.map +1 -0
  17. package/dist/credentials/proxy.js +11 -0
  18. package/dist/credentials/proxy.js.map +1 -0
  19. package/dist/credentials/store.d.ts +7 -0
  20. package/dist/credentials/store.d.ts.map +1 -0
  21. package/dist/credentials/store.js +115 -0
  22. package/dist/credentials/store.js.map +1 -0
  23. package/dist/credentials/types.d.ts +14 -0
  24. package/dist/credentials/types.d.ts.map +1 -0
  25. package/dist/credentials/types.js +2 -0
  26. package/dist/credentials/types.js.map +1 -0
  27. package/dist/hooks/index.d.ts +3 -0
  28. package/dist/hooks/index.d.ts.map +1 -0
  29. package/dist/hooks/index.js +2 -0
  30. package/dist/hooks/index.js.map +1 -0
  31. package/dist/hooks/runner.d.ts +7 -0
  32. package/dist/hooks/runner.d.ts.map +1 -0
  33. package/dist/hooks/runner.js +20 -0
  34. package/dist/hooks/runner.js.map +1 -0
  35. package/dist/hooks/types.d.ts +39 -0
  36. package/dist/hooks/types.d.ts.map +1 -0
  37. package/dist/hooks/types.js +2 -0
  38. package/dist/hooks/types.js.map +1 -0
  39. package/dist/index.d.ts +32 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +58 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/infra/env.d.ts +2 -0
  44. package/dist/infra/env.d.ts.map +1 -0
  45. package/dist/infra/env.js +6 -0
  46. package/dist/infra/env.js.map +1 -0
  47. package/dist/infra/warning-filter.d.ts +8 -0
  48. package/dist/infra/warning-filter.d.ts.map +1 -0
  49. package/dist/infra/warning-filter.js +66 -0
  50. package/dist/infra/warning-filter.js.map +1 -0
  51. package/dist/logging/subsystem.d.ts +29 -0
  52. package/dist/logging/subsystem.d.ts.map +1 -0
  53. package/dist/logging/subsystem.js +322 -0
  54. package/dist/logging/subsystem.js.map +1 -0
  55. package/dist/memory/embedding-batch.d.ts +38 -0
  56. package/dist/memory/embedding-batch.d.ts.map +1 -0
  57. package/dist/memory/embedding-batch.js +253 -0
  58. package/dist/memory/embedding-batch.js.map +1 -0
  59. package/dist/memory/embedding-cache.d.ts +16 -0
  60. package/dist/memory/embedding-cache.d.ts.map +1 -0
  61. package/dist/memory/embedding-cache.js +113 -0
  62. package/dist/memory/embedding-cache.js.map +1 -0
  63. package/dist/memory/embeddings-debug.d.ts +2 -0
  64. package/dist/memory/embeddings-debug.d.ts.map +1 -0
  65. package/dist/memory/embeddings-debug.js +12 -0
  66. package/dist/memory/embeddings-debug.js.map +1 -0
  67. package/dist/memory/embeddings.d.ts +17 -0
  68. package/dist/memory/embeddings.d.ts.map +1 -0
  69. package/dist/memory/embeddings.js +203 -0
  70. package/dist/memory/embeddings.js.map +1 -0
  71. package/dist/memory/file-indexer.d.ts +26 -0
  72. package/dist/memory/file-indexer.d.ts.map +1 -0
  73. package/dist/memory/file-indexer.js +260 -0
  74. package/dist/memory/file-indexer.js.map +1 -0
  75. package/dist/memory/fs-utils.d.ts +12 -0
  76. package/dist/memory/fs-utils.d.ts.map +1 -0
  77. package/dist/memory/fs-utils.js +24 -0
  78. package/dist/memory/fs-utils.js.map +1 -0
  79. package/dist/memory/hybrid.d.ts +46 -0
  80. package/dist/memory/hybrid.d.ts.map +1 -0
  81. package/dist/memory/hybrid.js +85 -0
  82. package/dist/memory/hybrid.js.map +1 -0
  83. package/dist/memory/index.d.ts +17 -0
  84. package/dist/memory/index.d.ts.map +1 -0
  85. package/dist/memory/index.js +15 -0
  86. package/dist/memory/index.js.map +1 -0
  87. package/dist/memory/internal.d.ts +39 -0
  88. package/dist/memory/internal.d.ts.map +1 -0
  89. package/dist/memory/internal.js +292 -0
  90. package/dist/memory/internal.js.map +1 -0
  91. package/dist/memory/manager-search.d.ts +61 -0
  92. package/dist/memory/manager-search.d.ts.map +1 -0
  93. package/dist/memory/manager-search.js +102 -0
  94. package/dist/memory/manager-search.js.map +1 -0
  95. package/dist/memory/mmr.d.ts +63 -0
  96. package/dist/memory/mmr.d.ts.map +1 -0
  97. package/dist/memory/mmr.js +165 -0
  98. package/dist/memory/mmr.js.map +1 -0
  99. package/dist/memory/query-expansion.d.ts +42 -0
  100. package/dist/memory/query-expansion.d.ts.map +1 -0
  101. package/dist/memory/query-expansion.js +776 -0
  102. package/dist/memory/query-expansion.js.map +1 -0
  103. package/dist/memory/session-indexer.d.ts +41 -0
  104. package/dist/memory/session-indexer.d.ts.map +1 -0
  105. package/dist/memory/session-indexer.js +367 -0
  106. package/dist/memory/session-indexer.js.map +1 -0
  107. package/dist/memory/simple-manager.d.ts +29 -0
  108. package/dist/memory/simple-manager.d.ts.map +1 -0
  109. package/dist/memory/simple-manager.js +216 -0
  110. package/dist/memory/simple-manager.js.map +1 -0
  111. package/dist/memory/sqlite.d.ts +2 -0
  112. package/dist/memory/sqlite.d.ts.map +1 -0
  113. package/dist/memory/sqlite.js +16 -0
  114. package/dist/memory/sqlite.js.map +1 -0
  115. package/dist/memory/ssrf.d.ts +18 -0
  116. package/dist/memory/ssrf.d.ts.map +1 -0
  117. package/dist/memory/ssrf.js +396 -0
  118. package/dist/memory/ssrf.js.map +1 -0
  119. package/dist/memory/temporal-decay.d.ts +26 -0
  120. package/dist/memory/temporal-decay.d.ts.map +1 -0
  121. package/dist/memory/temporal-decay.js +120 -0
  122. package/dist/memory/temporal-decay.js.map +1 -0
  123. package/dist/memory/types.d.ts +95 -0
  124. package/dist/memory/types.d.ts.map +1 -0
  125. package/dist/memory/types.js +2 -0
  126. package/dist/memory/types.js.map +1 -0
  127. package/dist/package.json +68 -0
  128. package/dist/platform/index.d.ts +3 -0
  129. package/dist/platform/index.d.ts.map +1 -0
  130. package/dist/platform/index.js +2 -0
  131. package/dist/platform/index.js.map +1 -0
  132. package/dist/platform/platform.d.ts +3 -0
  133. package/dist/platform/platform.d.ts.map +1 -0
  134. package/dist/platform/platform.js +91 -0
  135. package/dist/platform/platform.js.map +1 -0
  136. package/dist/platform/types.d.ts +18 -0
  137. package/dist/platform/types.d.ts.map +1 -0
  138. package/dist/platform/types.js +2 -0
  139. package/dist/platform/types.js.map +1 -0
  140. package/dist/runtime/agent.d.ts +36 -0
  141. package/dist/runtime/agent.d.ts.map +1 -0
  142. package/dist/runtime/agent.js +250 -0
  143. package/dist/runtime/agent.js.map +1 -0
  144. package/dist/runtime/api-key-rotation.d.ts +26 -0
  145. package/dist/runtime/api-key-rotation.d.ts.map +1 -0
  146. package/dist/runtime/api-key-rotation.js +174 -0
  147. package/dist/runtime/api-key-rotation.js.map +1 -0
  148. package/dist/runtime/context-guard.d.ts +32 -0
  149. package/dist/runtime/context-guard.d.ts.map +1 -0
  150. package/dist/runtime/context-guard.js +61 -0
  151. package/dist/runtime/context-guard.js.map +1 -0
  152. package/dist/runtime/failover-error.d.ts +62 -0
  153. package/dist/runtime/failover-error.d.ts.map +1 -0
  154. package/dist/runtime/failover-error.js +733 -0
  155. package/dist/runtime/failover-error.js.map +1 -0
  156. package/dist/runtime/failover-policy.d.ts +5 -0
  157. package/dist/runtime/failover-policy.d.ts.map +1 -0
  158. package/dist/runtime/failover-policy.js +18 -0
  159. package/dist/runtime/failover-policy.js.map +1 -0
  160. package/dist/runtime/index.d.ts +13 -0
  161. package/dist/runtime/index.d.ts.map +1 -0
  162. package/dist/runtime/index.js +13 -0
  163. package/dist/runtime/index.js.map +1 -0
  164. package/dist/runtime/memory-flush.d.ts +24 -0
  165. package/dist/runtime/memory-flush.d.ts.map +1 -0
  166. package/dist/runtime/memory-flush.js +64 -0
  167. package/dist/runtime/memory-flush.js.map +1 -0
  168. package/dist/runtime/memory-tools.d.ts +14 -0
  169. package/dist/runtime/memory-tools.d.ts.map +1 -0
  170. package/dist/runtime/memory-tools.js +58 -0
  171. package/dist/runtime/memory-tools.js.map +1 -0
  172. package/dist/runtime/model-fallback.d.ts +56 -0
  173. package/dist/runtime/model-fallback.d.ts.map +1 -0
  174. package/dist/runtime/model-fallback.js +301 -0
  175. package/dist/runtime/model-fallback.js.map +1 -0
  176. package/dist/runtime/model-fallback.types.d.ts +14 -0
  177. package/dist/runtime/model-fallback.types.d.ts.map +1 -0
  178. package/dist/runtime/model-fallback.types.js +3 -0
  179. package/dist/runtime/model-fallback.types.js.map +1 -0
  180. package/dist/runtime/retry.d.ts +24 -0
  181. package/dist/runtime/retry.d.ts.map +1 -0
  182. package/dist/runtime/retry.js +100 -0
  183. package/dist/runtime/retry.js.map +1 -0
  184. package/dist/runtime/session-pruning.d.ts +22 -0
  185. package/dist/runtime/session-pruning.d.ts.map +1 -0
  186. package/dist/runtime/session-pruning.js +118 -0
  187. package/dist/runtime/session-pruning.js.map +1 -0
  188. package/dist/runtime/stream-adapters.d.ts +11 -0
  189. package/dist/runtime/stream-adapters.d.ts.map +1 -0
  190. package/dist/runtime/stream-adapters.js +46 -0
  191. package/dist/runtime/stream-adapters.js.map +1 -0
  192. package/dist/runtime/subagent.d.ts +83 -0
  193. package/dist/runtime/subagent.d.ts.map +1 -0
  194. package/dist/runtime/subagent.js +190 -0
  195. package/dist/runtime/subagent.js.map +1 -0
  196. package/dist/runtime/tool-result-truncation.d.ts +25 -0
  197. package/dist/runtime/tool-result-truncation.d.ts.map +1 -0
  198. package/dist/runtime/tool-result-truncation.js +115 -0
  199. package/dist/runtime/tool-result-truncation.js.map +1 -0
  200. package/dist/sandbox/cgroup.d.ts +20 -0
  201. package/dist/sandbox/cgroup.d.ts.map +1 -0
  202. package/dist/sandbox/cgroup.js +82 -0
  203. package/dist/sandbox/cgroup.js.map +1 -0
  204. package/dist/sandbox/index.d.ts +12 -0
  205. package/dist/sandbox/index.d.ts.map +1 -0
  206. package/dist/sandbox/index.js +10 -0
  207. package/dist/sandbox/index.js.map +1 -0
  208. package/dist/sandbox/ipc.d.ts +26 -0
  209. package/dist/sandbox/ipc.d.ts.map +1 -0
  210. package/dist/sandbox/ipc.js +154 -0
  211. package/dist/sandbox/ipc.js.map +1 -0
  212. package/dist/sandbox/manager.d.ts +4 -0
  213. package/dist/sandbox/manager.d.ts.map +1 -0
  214. package/dist/sandbox/manager.js +251 -0
  215. package/dist/sandbox/manager.js.map +1 -0
  216. package/dist/sandbox/namespace.d.ts +12 -0
  217. package/dist/sandbox/namespace.d.ts.map +1 -0
  218. package/dist/sandbox/namespace.js +119 -0
  219. package/dist/sandbox/namespace.js.map +1 -0
  220. package/dist/sandbox/proxy-tools.d.ts +14 -0
  221. package/dist/sandbox/proxy-tools.d.ts.map +1 -0
  222. package/dist/sandbox/proxy-tools.js +63 -0
  223. package/dist/sandbox/proxy-tools.js.map +1 -0
  224. package/dist/sandbox/rootfs.d.ts +20 -0
  225. package/dist/sandbox/rootfs.d.ts.map +1 -0
  226. package/dist/sandbox/rootfs.js +247 -0
  227. package/dist/sandbox/rootfs.js.map +1 -0
  228. package/dist/sandbox/seccomp-apply.d.ts +9 -0
  229. package/dist/sandbox/seccomp-apply.d.ts.map +1 -0
  230. package/dist/sandbox/seccomp-apply.js +227 -0
  231. package/dist/sandbox/seccomp-apply.js.map +1 -0
  232. package/dist/sandbox/seccomp.d.ts +13 -0
  233. package/dist/sandbox/seccomp.d.ts.map +1 -0
  234. package/dist/sandbox/seccomp.js +120 -0
  235. package/dist/sandbox/seccomp.js.map +1 -0
  236. package/dist/sandbox/types.d.ts +66 -0
  237. package/dist/sandbox/types.d.ts.map +1 -0
  238. package/dist/sandbox/types.js +8 -0
  239. package/dist/sandbox/types.js.map +1 -0
  240. package/dist/sandbox/worker.d.ts +15 -0
  241. package/dist/sandbox/worker.d.ts.map +1 -0
  242. package/dist/sandbox/worker.js +151 -0
  243. package/dist/sandbox/worker.js.map +1 -0
  244. package/dist/sessions/index.d.ts +3 -0
  245. package/dist/sessions/index.d.ts.map +1 -0
  246. package/dist/sessions/index.js +3 -0
  247. package/dist/sessions/index.js.map +1 -0
  248. package/dist/sessions/store.d.ts +17 -0
  249. package/dist/sessions/store.d.ts.map +1 -0
  250. package/dist/sessions/store.js +70 -0
  251. package/dist/sessions/store.js.map +1 -0
  252. package/dist/sessions/transcript-events.d.ts +11 -0
  253. package/dist/sessions/transcript-events.d.ts.map +1 -0
  254. package/dist/sessions/transcript-events.js +40 -0
  255. package/dist/sessions/transcript-events.js.map +1 -0
  256. package/dist/shared/agent-session.d.ts +10 -0
  257. package/dist/shared/agent-session.d.ts.map +1 -0
  258. package/dist/shared/agent-session.js +33 -0
  259. package/dist/shared/agent-session.js.map +1 -0
  260. package/dist/shared/constants.d.ts +6 -0
  261. package/dist/shared/constants.d.ts.map +1 -0
  262. package/dist/shared/constants.js +17 -0
  263. package/dist/shared/constants.js.map +1 -0
  264. package/dist/shared/fs.d.ts +7 -0
  265. package/dist/shared/fs.d.ts.map +1 -0
  266. package/dist/shared/fs.js +14 -0
  267. package/dist/shared/fs.js.map +1 -0
  268. package/dist/shared/index.d.ts +4 -0
  269. package/dist/shared/index.d.ts.map +1 -0
  270. package/dist/shared/index.js +4 -0
  271. package/dist/shared/index.js.map +1 -0
  272. package/dist/skills/enablement.d.ts +10 -0
  273. package/dist/skills/enablement.d.ts.map +1 -0
  274. package/dist/skills/enablement.js +52 -0
  275. package/dist/skills/enablement.js.map +1 -0
  276. package/dist/skills/index.d.ts +4 -0
  277. package/dist/skills/index.d.ts.map +1 -0
  278. package/dist/skills/index.js +4 -0
  279. package/dist/skills/index.js.map +1 -0
  280. package/dist/skills/loader.d.ts +8 -0
  281. package/dist/skills/loader.d.ts.map +1 -0
  282. package/dist/skills/loader.js +8 -0
  283. package/dist/skills/loader.js.map +1 -0
  284. package/dist/skills/registry.d.ts +19 -0
  285. package/dist/skills/registry.d.ts.map +1 -0
  286. package/dist/skills/registry.js +106 -0
  287. package/dist/skills/registry.js.map +1 -0
  288. package/dist/utils/boolean.d.ts +6 -0
  289. package/dist/utils/boolean.d.ts.map +1 -0
  290. package/dist/utils/boolean.js +28 -0
  291. package/dist/utils/boolean.js.map +1 -0
  292. package/dist/utils/run-with-concurrency.d.ts +12 -0
  293. package/dist/utils/run-with-concurrency.d.ts.map +1 -0
  294. package/dist/utils/run-with-concurrency.js +40 -0
  295. package/dist/utils/run-with-concurrency.js.map +1 -0
  296. package/dist/utils.d.ts +3 -0
  297. package/dist/utils.d.ts.map +1 -0
  298. package/dist/utils.js +38 -0
  299. package/dist/utils.js.map +1 -0
  300. package/dist/workspace/index.d.ts +3 -0
  301. package/dist/workspace/index.d.ts.map +1 -0
  302. package/dist/workspace/index.js +2 -0
  303. package/dist/workspace/index.js.map +1 -0
  304. package/dist/workspace/runner.d.ts +19 -0
  305. package/dist/workspace/runner.d.ts.map +1 -0
  306. package/dist/workspace/runner.js +491 -0
  307. package/dist/workspace/runner.js.map +1 -0
  308. package/dist/workspace/types.d.ts +37 -0
  309. package/dist/workspace/types.d.ts.map +1 -0
  310. package/dist/workspace/types.js +2 -0
  311. package/dist/workspace/types.js.map +1 -0
  312. package/dist/workspace/workspace.d.ts +12 -0
  313. package/dist/workspace/workspace.d.ts.map +1 -0
  314. package/dist/workspace/workspace.js +85 -0
  315. package/dist/workspace/workspace.js.map +1 -0
  316. package/package.json +82 -0
@@ -0,0 +1,322 @@
1
+ // Ported from OpenClaw src/logging/logger.ts + subsystem.ts + levels.ts
2
+ // Removed: tslog, chalk, external transport system, loggingState global, pino adapter
3
+ // Kept: rolling log files by date, stale pruning, size cap, console styles, level filtering
4
+ import * as fs from "node:fs";
5
+ import * as path from "node:path";
6
+ import * as os from "node:os";
7
+ // --- Levels (from levels.ts) ---
8
+ export const ALLOWED_LOG_LEVELS = [
9
+ "silent", "fatal", "error", "warn", "info", "debug", "trace",
10
+ ];
11
+ export function tryParseLogLevel(level) {
12
+ if (typeof level !== "string")
13
+ return undefined;
14
+ const candidate = level.trim();
15
+ return ALLOWED_LOG_LEVELS.includes(candidate) ? candidate : undefined;
16
+ }
17
+ export function normalizeLogLevel(level, fallback = "info") {
18
+ return tryParseLogLevel(level) ?? fallback;
19
+ }
20
+ export function levelToMinLevel(level) {
21
+ const map = {
22
+ fatal: 0, error: 1, warn: 2, info: 3, debug: 4, trace: 5,
23
+ silent: Number.POSITIVE_INFINITY,
24
+ };
25
+ return map[level];
26
+ }
27
+ // --- Rolling log files (from logger.ts) ---
28
+ const LOG_PREFIX = "cloison-runtime";
29
+ const LOG_SUFFIX = ".log";
30
+ const MAX_LOG_AGE_MS = 24 * 60 * 60 * 1000;
31
+ const DEFAULT_MAX_LOG_FILE_BYTES = 500 * 1024 * 1024;
32
+ function resolveDefaultLogDir() {
33
+ return path.join(os.tmpdir(), "cloison-runtime-logs");
34
+ }
35
+ function formatLocalDate(date) {
36
+ const year = date.getFullYear();
37
+ const month = String(date.getMonth() + 1).padStart(2, "0");
38
+ const day = String(date.getDate()).padStart(2, "0");
39
+ return `${year}-${month}-${day}`;
40
+ }
41
+ function defaultRollingPathForToday() {
42
+ return path.join(resolveDefaultLogDir(), `${LOG_PREFIX}-${formatLocalDate(new Date())}${LOG_SUFFIX}`);
43
+ }
44
+ function isRollingPath(file) {
45
+ const base = path.basename(file);
46
+ return (base.startsWith(`${LOG_PREFIX}-`) &&
47
+ base.endsWith(LOG_SUFFIX) &&
48
+ base.length === `${LOG_PREFIX}-YYYY-MM-DD${LOG_SUFFIX}`.length);
49
+ }
50
+ function pruneOldRollingLogs(dir) {
51
+ try {
52
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
53
+ const cutoff = Date.now() - MAX_LOG_AGE_MS;
54
+ for (const entry of entries) {
55
+ if (!entry.isFile())
56
+ continue;
57
+ if (!entry.name.startsWith(`${LOG_PREFIX}-`) || !entry.name.endsWith(LOG_SUFFIX))
58
+ continue;
59
+ const fullPath = path.join(dir, entry.name);
60
+ try {
61
+ const stat = fs.statSync(fullPath);
62
+ if (stat.mtimeMs < cutoff)
63
+ fs.rmSync(fullPath, { force: true });
64
+ }
65
+ catch { /* ignore */ }
66
+ }
67
+ }
68
+ catch { /* ignore */ }
69
+ }
70
+ // --- Global state ---
71
+ let globalConfig = {};
72
+ let logFd = null;
73
+ let logFilePath = null;
74
+ let currentFileBytes = 0;
75
+ let warnedAboutSizeCap = false;
76
+ export function configureLogger(config) {
77
+ globalConfig = { ...config };
78
+ if (logFd !== null) {
79
+ try {
80
+ fs.closeSync(logFd);
81
+ }
82
+ catch { /* best effort */ }
83
+ logFd = null;
84
+ }
85
+ logFilePath = null;
86
+ currentFileBytes = 0;
87
+ warnedAboutSizeCap = false;
88
+ }
89
+ function getFileLevel() {
90
+ if (globalConfig.level)
91
+ return globalConfig.level;
92
+ const env = process.env["CLOISON_LOG_LEVEL"] ?? process.env["LOG_LEVEL"] ?? "";
93
+ return tryParseLogLevel(env) ?? "info";
94
+ }
95
+ function getConsoleLevel() {
96
+ if (globalConfig.consoleLevel)
97
+ return globalConfig.consoleLevel;
98
+ const env = process.env["CLOISON_CONSOLE_LOG_LEVEL"] ?? "";
99
+ return tryParseLogLevel(env) ?? "warn";
100
+ }
101
+ function getConsoleStyle() {
102
+ return globalConfig.consoleStyle ?? (globalConfig.json ? "json" : "compact");
103
+ }
104
+ function resolveLogFile() {
105
+ return globalConfig.file ?? process.env["CLOISON_LOG_FILE"] ?? defaultRollingPathForToday();
106
+ }
107
+ function getMaxFileBytes() {
108
+ if (typeof globalConfig.maxFileBytes === "number" && globalConfig.maxFileBytes > 0) {
109
+ return Math.floor(globalConfig.maxFileBytes);
110
+ }
111
+ return DEFAULT_MAX_LOG_FILE_BYTES;
112
+ }
113
+ function shouldLogToFile(level) {
114
+ const minLevel = getFileLevel();
115
+ if (minLevel === "silent")
116
+ return false;
117
+ return levelToMinLevel(level) <= levelToMinLevel(minLevel);
118
+ }
119
+ function shouldLogToConsole(level) {
120
+ const minLevel = getConsoleLevel();
121
+ if (minLevel === "silent")
122
+ return false;
123
+ return levelToMinLevel(level) <= levelToMinLevel(minLevel);
124
+ }
125
+ // --- File output ---
126
+ function ensureLogFd() {
127
+ const filePath = resolveLogFile();
128
+ if (logFd !== null && logFilePath === filePath)
129
+ return logFd;
130
+ if (logFd !== null) {
131
+ try {
132
+ fs.closeSync(logFd);
133
+ }
134
+ catch { /* best effort */ }
135
+ }
136
+ try {
137
+ const dir = path.dirname(filePath);
138
+ fs.mkdirSync(dir, { recursive: true });
139
+ if (isRollingPath(filePath))
140
+ pruneOldRollingLogs(dir);
141
+ try {
142
+ currentFileBytes = fs.statSync(filePath).size;
143
+ }
144
+ catch {
145
+ currentFileBytes = 0;
146
+ }
147
+ logFd = fs.openSync(filePath, "a", 0o600);
148
+ logFilePath = filePath;
149
+ warnedAboutSizeCap = false;
150
+ return logFd;
151
+ }
152
+ catch {
153
+ return null;
154
+ }
155
+ }
156
+ function appendToFile(line) {
157
+ const fd = ensureLogFd();
158
+ if (fd === null)
159
+ return;
160
+ const maxBytes = getMaxFileBytes();
161
+ const payload = line + "\n";
162
+ const payloadBytes = Buffer.byteLength(payload);
163
+ const nextBytes = currentFileBytes + payloadBytes;
164
+ if (nextBytes > maxBytes) {
165
+ if (!warnedAboutSizeCap) {
166
+ warnedAboutSizeCap = true;
167
+ const warningLine = JSON.stringify({
168
+ time: new Date().toISOString(),
169
+ level: "warn",
170
+ subsystem: "logging",
171
+ message: `log file size cap reached; suppressing writes file=${logFilePath} maxFileBytes=${maxBytes}`,
172
+ });
173
+ try {
174
+ fs.writeSync(fd, warningLine + "\n");
175
+ }
176
+ catch { /* ignore */ }
177
+ }
178
+ return;
179
+ }
180
+ try {
181
+ fs.writeSync(fd, payload);
182
+ currentFileBytes = nextBytes;
183
+ }
184
+ catch { /* never block on logging failures */ }
185
+ }
186
+ // --- Console formatting (from subsystem.ts) ---
187
+ const SUBSYSTEM_MAX_SEGMENTS = 2;
188
+ function formatSubsystemForConsole(subsystem) {
189
+ const parts = subsystem.split("/").filter(Boolean);
190
+ if (parts.length === 0)
191
+ return subsystem;
192
+ if (parts.length > SUBSYSTEM_MAX_SEGMENTS) {
193
+ return parts.slice(-SUBSYSTEM_MAX_SEGMENTS).join("/");
194
+ }
195
+ return parts.join("/");
196
+ }
197
+ export function stripRedundantSubsystemPrefixForConsole(message, displaySubsystem) {
198
+ if (!displaySubsystem)
199
+ return message;
200
+ if (message.startsWith("[")) {
201
+ const closeIdx = message.indexOf("]");
202
+ if (closeIdx > 1) {
203
+ const bracketTag = message.slice(1, closeIdx);
204
+ if (bracketTag.toLowerCase() === displaySubsystem.toLowerCase()) {
205
+ let i = closeIdx + 1;
206
+ while (message[i] === " ")
207
+ i += 1;
208
+ return message.slice(i);
209
+ }
210
+ }
211
+ }
212
+ const prefix = message.slice(0, displaySubsystem.length);
213
+ if (prefix.toLowerCase() !== displaySubsystem.toLowerCase())
214
+ return message;
215
+ const next = message.slice(displaySubsystem.length, displaySubsystem.length + 1);
216
+ if (next !== ":" && next !== " ")
217
+ return message;
218
+ let i = displaySubsystem.length;
219
+ while (message[i] === " ")
220
+ i += 1;
221
+ if (message[i] === ":")
222
+ i += 1;
223
+ while (message[i] === " ")
224
+ i += 1;
225
+ return message.slice(i);
226
+ }
227
+ function formatConsoleLine(opts) {
228
+ const displaySubsystem = opts.style === "json" ? opts.subsystem : formatSubsystemForConsole(opts.subsystem);
229
+ if (opts.style === "json") {
230
+ return JSON.stringify({
231
+ time: new Date().toISOString(),
232
+ level: opts.level,
233
+ subsystem: displaySubsystem,
234
+ message: opts.message,
235
+ ...opts.meta,
236
+ });
237
+ }
238
+ const time = new Date().toISOString();
239
+ const levelTag = opts.level.toUpperCase().padEnd(5);
240
+ const displayMessage = stripRedundantSubsystemPrefixForConsole(opts.message, displaySubsystem);
241
+ const metaSuffix = opts.meta && Object.keys(opts.meta).length > 0 ? ` ${JSON.stringify(opts.meta)}` : "";
242
+ if (opts.style === "pretty") {
243
+ return `${time} [${levelTag}] [${displaySubsystem}] ${displayMessage}${metaSuffix}`;
244
+ }
245
+ return `[${displaySubsystem}] ${displayMessage}${metaSuffix}`;
246
+ }
247
+ function writeConsoleLine(level, line) {
248
+ if (level === "error" || level === "fatal") {
249
+ console.error(line);
250
+ }
251
+ else if (level === "warn") {
252
+ console.warn(line);
253
+ }
254
+ else {
255
+ console.log(line);
256
+ }
257
+ }
258
+ // --- SubsystemLogger factory ---
259
+ export function createSubsystemLogger(subsystem) {
260
+ const buildEmitter = (level) => {
261
+ return (message, meta) => {
262
+ const fileEnabled = shouldLogToFile(level);
263
+ const consoleEnabled = shouldLogToConsole(level);
264
+ if (!fileEnabled && !consoleEnabled)
265
+ return;
266
+ let consoleMessageOverride;
267
+ let fileMeta = meta;
268
+ if (meta && Object.keys(meta).length > 0) {
269
+ const { consoleMessage, ...rest } = meta;
270
+ if (typeof consoleMessage === "string")
271
+ consoleMessageOverride = consoleMessage;
272
+ fileMeta = Object.keys(rest).length > 0 ? rest : undefined;
273
+ }
274
+ if (fileEnabled) {
275
+ const jsonLine = JSON.stringify({
276
+ time: new Date().toISOString(),
277
+ level,
278
+ subsystem,
279
+ message,
280
+ ...(fileMeta && Object.keys(fileMeta).length > 0 ? fileMeta : {}),
281
+ });
282
+ appendToFile(jsonLine);
283
+ }
284
+ if (consoleEnabled) {
285
+ const consoleMsg = consoleMessageOverride ?? message;
286
+ writeConsoleLine(level, formatConsoleLine({
287
+ level,
288
+ subsystem,
289
+ message: getConsoleStyle() === "json" ? message : consoleMsg,
290
+ style: getConsoleStyle(),
291
+ meta: fileMeta,
292
+ }));
293
+ }
294
+ };
295
+ };
296
+ return {
297
+ subsystem,
298
+ isEnabled(level, target = "any") {
299
+ if (target === "console")
300
+ return shouldLogToConsole(level);
301
+ if (target === "file")
302
+ return shouldLogToFile(level);
303
+ return shouldLogToConsole(level) || shouldLogToFile(level);
304
+ },
305
+ trace: buildEmitter("trace"),
306
+ debug: buildEmitter("debug"),
307
+ info: buildEmitter("info"),
308
+ warn: buildEmitter("warn"),
309
+ error: buildEmitter("error"),
310
+ fatal: buildEmitter("fatal"),
311
+ raw(message) {
312
+ if (shouldLogToFile("info"))
313
+ appendToFile(message);
314
+ if (shouldLogToConsole("info"))
315
+ writeConsoleLine("info", message);
316
+ },
317
+ child(name) {
318
+ return createSubsystemLogger(`${subsystem}/${name}`);
319
+ },
320
+ };
321
+ }
322
+ //# sourceMappingURL=subsystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subsystem.js","sourceRoot":"","sources":["../../src/logging/subsystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { EmbeddingProvider } from "./embeddings.js";
2
+ import type { EmbeddingCache } from "./embedding-cache.js";
3
+ declare const EMBEDDING_BATCH_MAX_TOKENS = 8000;
4
+ declare const EMBEDDING_INDEX_CONCURRENCY = 4;
5
+ export interface BatchEmbeddingOptions {
6
+ provider: EmbeddingProvider;
7
+ cache?: EmbeddingCache;
8
+ providerKey?: string;
9
+ concurrency?: number;
10
+ }
11
+ export interface BatchEmbeddingResult {
12
+ embeddings: Array<number[] | null>;
13
+ cached: number;
14
+ computed: number;
15
+ errors: number;
16
+ }
17
+ export interface BatchFailureState {
18
+ count: number;
19
+ lastError?: string;
20
+ lastProvider?: string;
21
+ enabled: boolean;
22
+ }
23
+ export declare function createBatchFailureState(): BatchFailureState;
24
+ export declare function embedQueryWithTimeout(provider: EmbeddingProvider, text: string): Promise<number[]>;
25
+ export declare function embedBatchWithCacheAndRetry(texts: string[], options: BatchEmbeddingOptions): Promise<BatchEmbeddingResult>;
26
+ export declare function runBatchWithTimeoutRetry<T>(params: {
27
+ provider: string;
28
+ run: () => Promise<T>;
29
+ }): Promise<T>;
30
+ export declare function runBatchWithFallback<T>(params: {
31
+ state: BatchFailureState;
32
+ provider: string;
33
+ run: () => Promise<T>;
34
+ fallback: () => Promise<number[][]>;
35
+ }): Promise<T | number[][]>;
36
+ export declare function enforceEmbeddingMaxInputTokens(provider: EmbeddingProvider, texts: string[], maxBatchTokens?: number): string[];
37
+ export { EMBEDDING_BATCH_MAX_TOKENS, EMBEDDING_INDEX_CONCURRENCY };
38
+ //# sourceMappingURL=embedding-batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-batch.d.ts","sourceRoot":"","sources":["../../src/memory/embedding-batch.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D,QAAA,MAAM,0BAA0B,OAAO,CAAC;AACxC,QAAA,MAAM,2BAA2B,IAAI,CAAC;AAWtC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,uBAAuB,IAAI,iBAAiB,CAE3D;AA0FD,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQxG;AAgED,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAwD/B;AAID,wBAAsB,wBAAwB,CAAC,CAAC,EAAE,MAAM,EAAE;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;CACvB,GAAG,OAAO,CAAC,CAAC,CAAC,CAgBb;AAED,wBAAsB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE;IACpD,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IACtB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;CACrC,GAAG,OAAO,CAAC,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,CAe1B;AAID,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,MAAM,EAAE,EACf,cAAc,GAAE,MAAmC,GAClD,MAAM,EAAE,CAcV;AAED,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,CAAC"}
@@ -0,0 +1,253 @@
1
+ // Ported from OpenClaw extensions/memory-core/src/memory/manager-embedding-ops.ts
2
+ // All constants, retry logic, batch failure tracking, and timeout resolution are identical.
3
+ import { createSubsystemLogger } from "../logging/subsystem.js";
4
+ import { hashContent } from "./embedding-cache.js";
5
+ const log = createSubsystemLogger("embedding-batch");
6
+ // Constants from OpenClaw
7
+ const EMBEDDING_BATCH_MAX_TOKENS = 8000;
8
+ const EMBEDDING_INDEX_CONCURRENCY = 4;
9
+ const EMBEDDING_RETRY_MAX_ATTEMPTS = 3;
10
+ const EMBEDDING_RETRY_BASE_DELAY_MS = 500;
11
+ const EMBEDDING_RETRY_MAX_DELAY_MS = 8000;
12
+ const BATCH_FAILURE_LIMIT = 2;
13
+ const EMBEDDING_QUERY_TIMEOUT_REMOTE_MS = 60_000;
14
+ const EMBEDDING_QUERY_TIMEOUT_LOCAL_MS = 5 * 60_000;
15
+ const EMBEDDING_BATCH_TIMEOUT_REMOTE_MS = 2 * 60_000;
16
+ const EMBEDDING_BATCH_TIMEOUT_LOCAL_MS = 10 * 60_000;
17
+ const APPROX_CHARS_PER_TOKEN = 4;
18
+ export function createBatchFailureState() {
19
+ return { count: 0, enabled: true };
20
+ }
21
+ function recordBatchFailure(state, params) {
22
+ if (!state.enabled)
23
+ return { disabled: true, count: state.count };
24
+ const increment = params.forceDisable ? BATCH_FAILURE_LIMIT : Math.max(1, params.attempts ?? 1);
25
+ state.count += increment;
26
+ state.lastError = params.message;
27
+ state.lastProvider = params.provider;
28
+ const disabled = params.forceDisable || state.count >= BATCH_FAILURE_LIMIT;
29
+ if (disabled)
30
+ state.enabled = false;
31
+ return { disabled, count: state.count };
32
+ }
33
+ function resetBatchFailureCount(state) {
34
+ if (state.count > 0) {
35
+ log.debug("embedding batch recovered; resetting failure count");
36
+ }
37
+ state.count = 0;
38
+ state.lastError = undefined;
39
+ state.lastProvider = undefined;
40
+ }
41
+ // --- Timeout helper (from OpenClaw) ---
42
+ async function withTimeout(promise, timeoutMs, message) {
43
+ if (!Number.isFinite(timeoutMs) || timeoutMs <= 0)
44
+ return await promise;
45
+ let timer = null;
46
+ const timeoutPromise = new Promise((_, reject) => {
47
+ timer = setTimeout(() => reject(new Error(message)), timeoutMs);
48
+ });
49
+ try {
50
+ return (await Promise.race([promise, timeoutPromise]));
51
+ }
52
+ finally {
53
+ if (timer)
54
+ clearTimeout(timer);
55
+ }
56
+ }
57
+ function resolveEmbeddingTimeout(provider, kind) {
58
+ const isLocal = provider.id === "ollama" || provider.id === "local";
59
+ if (kind === "query")
60
+ return isLocal ? EMBEDDING_QUERY_TIMEOUT_LOCAL_MS : EMBEDDING_QUERY_TIMEOUT_REMOTE_MS;
61
+ return isLocal ? EMBEDDING_BATCH_TIMEOUT_LOCAL_MS : EMBEDDING_BATCH_TIMEOUT_REMOTE_MS;
62
+ }
63
+ // --- Retry logic (from OpenClaw) ---
64
+ function isRetryableEmbeddingError(message) {
65
+ return /(rate[_ ]limit|too many requests|429|resource has been exhausted|5\d\d|cloudflare|tokens per day)/i.test(message);
66
+ }
67
+ function isBatchTimeoutError(message) {
68
+ return /timed out|timeout/i.test(message);
69
+ }
70
+ async function waitForEmbeddingRetry(delayMs, action) {
71
+ const waitMs = Math.min(EMBEDDING_RETRY_MAX_DELAY_MS, Math.round(delayMs * (1 + Math.random() * 0.2)));
72
+ log.warn(`memory embeddings rate limited; ${action} in ${waitMs}ms`);
73
+ await new Promise((resolve) => setTimeout(resolve, waitMs));
74
+ }
75
+ async function embedBatchWithRetry(provider, texts) {
76
+ if (texts.length === 0)
77
+ return [];
78
+ let attempt = 0;
79
+ let delayMs = EMBEDDING_RETRY_BASE_DELAY_MS;
80
+ while (true) {
81
+ try {
82
+ const timeoutMs = resolveEmbeddingTimeout(provider, "batch");
83
+ log.debug("embedding batch start", { provider: provider.id, items: texts.length, timeoutMs });
84
+ return await withTimeout(provider.embedBatch(texts), timeoutMs, `memory embeddings batch timed out after ${Math.round(timeoutMs / 1000)}s`);
85
+ }
86
+ catch (err) {
87
+ const message = err instanceof Error ? err.message : String(err);
88
+ if (!isRetryableEmbeddingError(message) || attempt >= EMBEDDING_RETRY_MAX_ATTEMPTS)
89
+ throw err;
90
+ await waitForEmbeddingRetry(delayMs, "retrying");
91
+ delayMs *= 2;
92
+ attempt += 1;
93
+ }
94
+ }
95
+ }
96
+ export async function embedQueryWithTimeout(provider, text) {
97
+ const timeoutMs = resolveEmbeddingTimeout(provider, "query");
98
+ log.debug("embedding query start", { provider: provider.id, timeoutMs });
99
+ return await withTimeout(provider.embedQuery(text), timeoutMs, `memory embeddings query timed out after ${Math.round(timeoutMs / 1000)}s`);
100
+ }
101
+ // --- Batch splitting (from OpenClaw buildEmbeddingBatches) ---
102
+ function estimateTokens(text) {
103
+ return Math.ceil(text.length / APPROX_CHARS_PER_TOKEN);
104
+ }
105
+ function buildEmbeddingBatches(items) {
106
+ const batches = [];
107
+ let current = [];
108
+ let currentTokens = 0;
109
+ for (const item of items) {
110
+ const estimate = estimateTokens(item.text);
111
+ const wouldExceed = current.length > 0 && currentTokens + estimate > EMBEDDING_BATCH_MAX_TOKENS;
112
+ if (wouldExceed) {
113
+ batches.push(current);
114
+ current = [];
115
+ currentTokens = 0;
116
+ }
117
+ if (current.length === 0 && estimate > EMBEDDING_BATCH_MAX_TOKENS) {
118
+ batches.push([item]);
119
+ continue;
120
+ }
121
+ current.push(item);
122
+ currentTokens += estimate;
123
+ }
124
+ if (current.length > 0)
125
+ batches.push(current);
126
+ return batches;
127
+ }
128
+ // --- collectCachedEmbeddings (from OpenClaw) ---
129
+ function collectCachedEmbeddings(items, cache, provider, providerKey) {
130
+ const embeddings = new Array(items.length).fill(null);
131
+ const missing = [];
132
+ if (!cache) {
133
+ return { embeddings, missing: [...items] };
134
+ }
135
+ const cached = cache.loadBatch(provider.id, provider.model, providerKey, items.map((i) => i.hash));
136
+ for (let i = 0; i < items.length; i++) {
137
+ const hit = items[i].hash ? cached.get(items[i].hash) : undefined;
138
+ if (hit && hit.length > 0) {
139
+ embeddings[i] = hit;
140
+ }
141
+ else {
142
+ missing.push(items[i]);
143
+ }
144
+ }
145
+ return { embeddings, missing };
146
+ }
147
+ // --- Main batch embedding function ---
148
+ export async function embedBatchWithCacheAndRetry(texts, options) {
149
+ const { provider, cache, providerKey = "", concurrency = EMBEDDING_INDEX_CONCURRENCY } = options;
150
+ const items = texts.map((text, i) => ({
151
+ originalIndex: i,
152
+ text,
153
+ hash: hashContent(text),
154
+ }));
155
+ const { embeddings: resultEmbeddings, missing } = collectCachedEmbeddings(items, cache, provider, providerKey);
156
+ const results = [...resultEmbeddings];
157
+ let cached = items.length - missing.length;
158
+ let computed = 0;
159
+ let errors = 0;
160
+ if (missing.length === 0) {
161
+ log.debug(`all ${texts.length} embeddings served from cache`);
162
+ return { embeddings: results, cached, computed, errors };
163
+ }
164
+ const batches = buildEmbeddingBatches(missing);
165
+ log.debug(`processing ${missing.length} uncached texts in ${batches.length} batches (${cached} cached)`);
166
+ const toCache = [];
167
+ for (let g = 0; g < batches.length; g += concurrency) {
168
+ const group = batches.slice(g, g + concurrency);
169
+ await Promise.all(group.map(async (batch) => {
170
+ const batchTexts = batch.map((item) => item.text);
171
+ try {
172
+ const batchEmbeddings = await embedBatchWithRetry(provider, batchTexts);
173
+ for (let j = 0; j < batch.length; j++) {
174
+ const embedding = batchEmbeddings[j] ?? [];
175
+ if (embedding.length > 0) {
176
+ results[batch[j].originalIndex] = embedding;
177
+ computed++;
178
+ toCache.push({ hash: batch[j].hash, embedding });
179
+ }
180
+ else {
181
+ errors++;
182
+ }
183
+ }
184
+ }
185
+ catch (err) {
186
+ log.error(`batch embedding failed`, { batchSize: batch.length, error: String(err) });
187
+ errors += batch.length;
188
+ }
189
+ }));
190
+ }
191
+ if (cache && toCache.length > 0) {
192
+ cache.upsertBatch(provider.id, provider.model, providerKey, toCache);
193
+ }
194
+ log.info("batch complete", { total: texts.length, cached, computed, errors });
195
+ return { embeddings: results, cached, computed, errors };
196
+ }
197
+ // --- Batch with fallback (from OpenClaw runBatchWithFallback) ---
198
+ export async function runBatchWithTimeoutRetry(params) {
199
+ try {
200
+ return await params.run();
201
+ }
202
+ catch (err) {
203
+ const message = err instanceof Error ? err.message : String(err);
204
+ if (isBatchTimeoutError(message)) {
205
+ log.warn(`${params.provider} batch timed out; retrying once`);
206
+ try {
207
+ return await params.run();
208
+ }
209
+ catch (retryErr) {
210
+ retryErr.batchAttempts = 2;
211
+ throw retryErr;
212
+ }
213
+ }
214
+ throw err;
215
+ }
216
+ }
217
+ export async function runBatchWithFallback(params) {
218
+ if (!params.state.enabled)
219
+ return await params.fallback();
220
+ try {
221
+ const result = await runBatchWithTimeoutRetry({ provider: params.provider, run: params.run });
222
+ resetBatchFailureCount(params.state);
223
+ return result;
224
+ }
225
+ catch (err) {
226
+ const message = err instanceof Error ? err.message : String(err);
227
+ const attempts = err.batchAttempts ?? 1;
228
+ const forceDisable = /asyncBatchEmbedContent not available/i.test(message);
229
+ const failure = recordBatchFailure(params.state, { provider: params.provider, message, attempts, forceDisable });
230
+ const suffix = failure.disabled ? "disabling batch" : "keeping batch enabled";
231
+ log.warn(`${params.provider} batch failed (${failure.count}/${BATCH_FAILURE_LIMIT}); ${suffix}; falling back: ${message}`);
232
+ return await params.fallback();
233
+ }
234
+ }
235
+ // --- enforceEmbeddingMaxInputTokens (from OpenClaw) ---
236
+ export function enforceEmbeddingMaxInputTokens(provider, texts, maxBatchTokens = EMBEDDING_BATCH_MAX_TOKENS) {
237
+ const maxTokens = provider.maxInputTokens;
238
+ if (!maxTokens || maxTokens <= 0)
239
+ return texts;
240
+ const maxChars = maxTokens * APPROX_CHARS_PER_TOKEN;
241
+ return texts.map((text) => {
242
+ if (text.length <= maxChars)
243
+ return text;
244
+ log.debug("truncating text to fit max input tokens", {
245
+ originalLength: text.length,
246
+ maxChars,
247
+ maxTokens,
248
+ });
249
+ return text.slice(0, maxChars);
250
+ });
251
+ }
252
+ export { EMBEDDING_BATCH_MAX_TOKENS, EMBEDDING_INDEX_CONCURRENCY };
253
+ //# sourceMappingURL=embedding-batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-batch.js","sourceRoot":"","sources":["../../src/memory/embedding-batch.ts"],"names":[],"mappings":"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"}