@runcore-sh/runcore 0.4.0 → 0.5.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 (351) hide show
  1. package/dictionary.json +2 -2
  2. package/dist/activity/log.js +2 -2
  3. package/dist/activity/log.js.map +1 -1
  4. package/dist/agents/governed-spawn.d.ts.map +1 -1
  5. package/dist/cli.js +101 -11
  6. package/dist/cli.js.map +1 -1
  7. package/dist/extensions/cache.d.ts +57 -0
  8. package/dist/extensions/cache.d.ts.map +1 -0
  9. package/dist/extensions/cache.js +173 -0
  10. package/dist/extensions/cache.js.map +1 -0
  11. package/dist/extensions/client.d.ts +55 -0
  12. package/dist/extensions/client.d.ts.map +1 -0
  13. package/dist/extensions/client.js +120 -0
  14. package/dist/extensions/client.js.map +1 -0
  15. package/dist/extensions/index.d.ts +13 -0
  16. package/dist/extensions/index.d.ts.map +1 -0
  17. package/dist/extensions/index.js +12 -0
  18. package/dist/extensions/index.js.map +1 -0
  19. package/dist/extensions/loader.d.ts +50 -0
  20. package/dist/extensions/loader.d.ts.map +1 -0
  21. package/dist/extensions/loader.js +166 -0
  22. package/dist/extensions/loader.js.map +1 -0
  23. package/dist/extensions/manifest.d.ts +38 -0
  24. package/dist/extensions/manifest.d.ts.map +1 -0
  25. package/dist/extensions/manifest.js +17 -0
  26. package/dist/extensions/manifest.js.map +1 -0
  27. package/dist/extensions/stubs.d.ts +27 -0
  28. package/dist/extensions/stubs.d.ts.map +1 -0
  29. package/dist/extensions/stubs.js +45 -0
  30. package/dist/extensions/stubs.js.map +1 -0
  31. package/dist/lib/audit.js +2 -2
  32. package/dist/lib/audit.js.map +1 -1
  33. package/dist/lib/brain-migrate.d.ts +21 -0
  34. package/dist/lib/brain-migrate.d.ts.map +1 -0
  35. package/dist/lib/brain-migrate.js +137 -0
  36. package/dist/lib/brain-migrate.js.map +1 -0
  37. package/dist/lib/paths.d.ts +27 -0
  38. package/dist/lib/paths.d.ts.map +1 -1
  39. package/dist/lib/paths.js +65 -0
  40. package/dist/lib/paths.js.map +1 -1
  41. package/dist/llm/call-log.d.ts +40 -0
  42. package/dist/llm/call-log.d.ts.map +1 -0
  43. package/dist/llm/call-log.js +35 -0
  44. package/dist/llm/call-log.js.map +1 -0
  45. package/dist/llm/complete.d.ts +6 -0
  46. package/dist/llm/complete.d.ts.map +1 -1
  47. package/dist/llm/complete.js +27 -0
  48. package/dist/llm/complete.js.map +1 -1
  49. package/dist/mcp-server.js +118 -2
  50. package/dist/mcp-server.js.map +1 -1
  51. package/dist/memory/file-backed.d.ts +4 -0
  52. package/dist/memory/file-backed.d.ts.map +1 -1
  53. package/dist/memory/file-backed.js +4 -0
  54. package/dist/memory/file-backed.js.map +1 -1
  55. package/dist/memory/vector-index.d.ts +4 -12
  56. package/dist/memory/vector-index.d.ts.map +1 -1
  57. package/dist/memory/vector-index.js +11 -93
  58. package/dist/memory/vector-index.js.map +1 -1
  59. package/dist/search/brain-docs.d.ts +17 -7
  60. package/dist/search/brain-docs.d.ts.map +1 -1
  61. package/dist/search/brain-docs.js +170 -52
  62. package/dist/search/brain-docs.js.map +1 -1
  63. package/dist/search/brain-rag.d.ts +45 -0
  64. package/dist/search/brain-rag.d.ts.map +1 -0
  65. package/dist/search/brain-rag.js +275 -0
  66. package/dist/search/brain-rag.js.map +1 -0
  67. package/dist/search/chunker.d.ts +24 -0
  68. package/dist/search/chunker.d.ts.map +1 -0
  69. package/dist/search/chunker.js +95 -0
  70. package/dist/search/chunker.js.map +1 -0
  71. package/dist/search/embedder.d.ts +16 -0
  72. package/dist/search/embedder.d.ts.map +1 -0
  73. package/dist/search/embedder.js +108 -0
  74. package/dist/search/embedder.js.map +1 -0
  75. package/dist/search/file-watcher.d.ts +11 -0
  76. package/dist/search/file-watcher.d.ts.map +1 -0
  77. package/dist/search/file-watcher.js +86 -0
  78. package/dist/search/file-watcher.js.map +1 -0
  79. package/dist/server.d.ts.map +1 -1
  80. package/dist/server.js +168 -20
  81. package/dist/server.js.map +1 -1
  82. package/dist/sessions/store.d.ts +9 -0
  83. package/dist/sessions/store.d.ts.map +1 -1
  84. package/dist/sessions/store.js.map +1 -1
  85. package/dist/settings.d.ts +26 -0
  86. package/dist/settings.d.ts.map +1 -1
  87. package/dist/settings.js +78 -2
  88. package/dist/settings.js.map +1 -1
  89. package/dist/tracing/init.d.ts +1 -1
  90. package/dist/tracing/init.d.ts.map +1 -1
  91. package/dist/utils/logger.js +2 -2
  92. package/dist/utils/logger.js.map +1 -1
  93. package/module-tiers.json +164 -0
  94. package/package.json +9 -13
  95. package/public/avatar/cache/1184385ec5522b57.mp4 +0 -0
  96. package/public/avatar/cache/1f15f6a1ebd7e439.mp4 +0 -0
  97. package/public/avatar/cache/2c7e47ff0bdeb8d1.mp4 +0 -0
  98. package/public/avatar/cache/5f308566f7abb8f2.mp4 +0 -0
  99. package/public/avatar/cache/62f9cfba848d724e.mp4 +0 -0
  100. package/public/avatar/cache/6d64e657e6bf2aab.mp4 +0 -0
  101. package/public/avatar/cache/763ad0349e0b6f26.mp4 +0 -0
  102. package/public/avatar/cache/81a516cfd461b2b9.mp4 +0 -0
  103. package/public/avatar/cache/9366de15fd6910ca.mp4 +0 -0
  104. package/public/avatar/cache/ade41a846b283895.mp4 +0 -0
  105. package/public/avatar/cache/b6066e5c65383eec.mp4 +0 -0
  106. package/public/avatar/cache/edadb75d37891fc7.mp4 +0 -0
  107. package/public/avatar/cache/f0ae159640621dd9.mp4 +0 -0
  108. package/public/avatar/cache/fc2e5419adf29d96.mp4 +0 -0
  109. package/public/index.html +379 -59
  110. package/dist/agents/autonomous.js +0 -749
  111. package/dist/agents/autonomous.js.map +0 -1
  112. package/dist/agents/commit.js +0 -113
  113. package/dist/agents/commit.js.map +0 -1
  114. package/dist/agents/continue.js +0 -158
  115. package/dist/agents/continue.js.map +0 -1
  116. package/dist/agents/cooldown.js +0 -397
  117. package/dist/agents/cooldown.js.map +0 -1
  118. package/dist/agents/dedup-guard.js +0 -131
  119. package/dist/agents/dedup-guard.js.map +0 -1
  120. package/dist/agents/feed.js +0 -176
  121. package/dist/agents/feed.js.map +0 -1
  122. package/dist/agents/governance.js +0 -292
  123. package/dist/agents/governance.js.map +0 -1
  124. package/dist/agents/governed-spawn.js +0 -192
  125. package/dist/agents/governed-spawn.js.map +0 -1
  126. package/dist/agents/heartbeat.js +0 -324
  127. package/dist/agents/heartbeat.js.map +0 -1
  128. package/dist/agents/instance-manager.js +0 -850
  129. package/dist/agents/instance-manager.js.map +0 -1
  130. package/dist/agents/issue-reporter.js +0 -123
  131. package/dist/agents/issue-reporter.js.map +0 -1
  132. package/dist/agents/issues.js +0 -141
  133. package/dist/agents/issues.js.map +0 -1
  134. package/dist/agents/locks.js +0 -234
  135. package/dist/agents/locks.js.map +0 -1
  136. package/dist/agents/memory.js +0 -93
  137. package/dist/agents/memory.js.map +0 -1
  138. package/dist/agents/monitor.js +0 -235
  139. package/dist/agents/monitor.js.map +0 -1
  140. package/dist/agents/orchestration.js +0 -715
  141. package/dist/agents/orchestration.js.map +0 -1
  142. package/dist/agents/recover.js +0 -166
  143. package/dist/agents/recover.js.map +0 -1
  144. package/dist/agents/reflection.js +0 -199
  145. package/dist/agents/reflection.js.map +0 -1
  146. package/dist/agents/runtime/bus.js +0 -174
  147. package/dist/agents/runtime/bus.js.map +0 -1
  148. package/dist/agents/runtime/config.js +0 -101
  149. package/dist/agents/runtime/config.js.map +0 -1
  150. package/dist/agents/runtime/driver.js +0 -214
  151. package/dist/agents/runtime/driver.js.map +0 -1
  152. package/dist/agents/runtime/errors.js +0 -40
  153. package/dist/agents/runtime/errors.js.map +0 -1
  154. package/dist/agents/runtime/index.js +0 -54
  155. package/dist/agents/runtime/index.js.map +0 -1
  156. package/dist/agents/runtime/lifecycle.js +0 -116
  157. package/dist/agents/runtime/lifecycle.js.map +0 -1
  158. package/dist/agents/runtime/manager.js +0 -948
  159. package/dist/agents/runtime/manager.js.map +0 -1
  160. package/dist/agents/runtime/registry.js +0 -195
  161. package/dist/agents/runtime/registry.js.map +0 -1
  162. package/dist/agents/runtime/resources.js +0 -146
  163. package/dist/agents/runtime/resources.js.map +0 -1
  164. package/dist/agents/runtime/types.js +0 -24
  165. package/dist/agents/runtime/types.js.map +0 -1
  166. package/dist/agents/spawn-policy.js +0 -202
  167. package/dist/agents/spawn-policy.js.map +0 -1
  168. package/dist/agents/spawn.js +0 -970
  169. package/dist/agents/spawn.js.map +0 -1
  170. package/dist/agents/triage.js +0 -81
  171. package/dist/agents/triage.js.map +0 -1
  172. package/dist/agents/workflow.js +0 -543
  173. package/dist/agents/workflow.js.map +0 -1
  174. package/dist/avatar/client.js +0 -172
  175. package/dist/avatar/client.js.map +0 -1
  176. package/dist/avatar/sidecar.js +0 -125
  177. package/dist/avatar/sidecar.js.map +0 -1
  178. package/dist/browser/sessions.js +0 -122
  179. package/dist/browser/sessions.js.map +0 -1
  180. package/dist/capabilities/definitions/browser.js +0 -242
  181. package/dist/capabilities/definitions/browser.js.map +0 -1
  182. package/dist/channels/whatsapp.js +0 -200
  183. package/dist/channels/whatsapp.js.map +0 -1
  184. package/dist/credentials/store.js +0 -189
  185. package/dist/credentials/store.js.map +0 -1
  186. package/dist/files/deep-index.js +0 -337
  187. package/dist/files/deep-index.js.map +0 -1
  188. package/dist/files/extract.js +0 -33
  189. package/dist/files/extract.js.map +0 -1
  190. package/dist/files/gdrive.js +0 -246
  191. package/dist/files/gdrive.js.map +0 -1
  192. package/dist/github/client.js +0 -408
  193. package/dist/github/client.js.map +0 -1
  194. package/dist/github/commit-analysis.js +0 -276
  195. package/dist/github/commit-analysis.js.map +0 -1
  196. package/dist/github/contributor-stats.js +0 -119
  197. package/dist/github/contributor-stats.js.map +0 -1
  198. package/dist/github/issue-sla.js +0 -220
  199. package/dist/github/issue-sla.js.map +0 -1
  200. package/dist/github/issue-triage.js +0 -286
  201. package/dist/github/issue-triage.js.map +0 -1
  202. package/dist/github/pr-readiness.js +0 -197
  203. package/dist/github/pr-readiness.js.map +0 -1
  204. package/dist/github/pr-review.js +0 -410
  205. package/dist/github/pr-review.js.map +0 -1
  206. package/dist/github/release-notes.js +0 -227
  207. package/dist/github/release-notes.js.map +0 -1
  208. package/dist/github/repo-health.js +0 -303
  209. package/dist/github/repo-health.js.map +0 -1
  210. package/dist/github/retry.js +0 -117
  211. package/dist/github/retry.js.map +0 -1
  212. package/dist/github/types.js +0 -8
  213. package/dist/github/types.js.map +0 -1
  214. package/dist/github/webhooks.js +0 -153
  215. package/dist/github/webhooks.js.map +0 -1
  216. package/dist/google/auth.js +0 -325
  217. package/dist/google/auth.js.map +0 -1
  218. package/dist/google/calendar-timer.js +0 -91
  219. package/dist/google/calendar-timer.js.map +0 -1
  220. package/dist/google/calendar.js +0 -270
  221. package/dist/google/calendar.js.map +0 -1
  222. package/dist/google/docs.js +0 -309
  223. package/dist/google/docs.js.map +0 -1
  224. package/dist/google/gmail-send.js +0 -219
  225. package/dist/google/gmail-send.js.map +0 -1
  226. package/dist/google/gmail-timer.js +0 -223
  227. package/dist/google/gmail-timer.js.map +0 -1
  228. package/dist/google/gmail.js +0 -470
  229. package/dist/google/gmail.js.map +0 -1
  230. package/dist/google/plugin.js +0 -169
  231. package/dist/google/plugin.js.map +0 -1
  232. package/dist/google/tasks-timer.js +0 -107
  233. package/dist/google/tasks-timer.js.map +0 -1
  234. package/dist/google/tasks.js +0 -331
  235. package/dist/google/tasks.js.map +0 -1
  236. package/dist/google/temporal.js +0 -176
  237. package/dist/google/temporal.js.map +0 -1
  238. package/dist/integrations/gate.js +0 -100
  239. package/dist/integrations/gate.js.map +0 -1
  240. package/dist/integrations/github.js +0 -331
  241. package/dist/integrations/github.js.map +0 -1
  242. package/dist/integrations/google-tasks.js +0 -432
  243. package/dist/integrations/google-tasks.js.map +0 -1
  244. package/dist/mdns.js +0 -110
  245. package/dist/mdns.js.map +0 -1
  246. package/dist/notifications/channel.js +0 -83
  247. package/dist/notifications/channel.js.map +0 -1
  248. package/dist/notifications/channels/adapter.js +0 -55
  249. package/dist/notifications/channels/adapter.js.map +0 -1
  250. package/dist/notifications/channels/index.js +0 -6
  251. package/dist/notifications/channels/index.js.map +0 -1
  252. package/dist/notifications/channels/log.js +0 -29
  253. package/dist/notifications/channels/log.js.map +0 -1
  254. package/dist/notifications/email.js +0 -72
  255. package/dist/notifications/email.js.map +0 -1
  256. package/dist/notifications/engine.js +0 -198
  257. package/dist/notifications/engine.js.map +0 -1
  258. package/dist/notifications/index.js +0 -24
  259. package/dist/notifications/index.js.map +0 -1
  260. package/dist/notifications/phone.js +0 -48
  261. package/dist/notifications/phone.js.map +0 -1
  262. package/dist/notifications/sms.js +0 -65
  263. package/dist/notifications/sms.js.map +0 -1
  264. package/dist/notifications/types.js +0 -14
  265. package/dist/notifications/types.js.map +0 -1
  266. package/dist/notifications/webhook.js +0 -65
  267. package/dist/notifications/webhook.js.map +0 -1
  268. package/dist/resend/inbox.js +0 -199
  269. package/dist/resend/inbox.js.map +0 -1
  270. package/dist/resend/webhooks.js +0 -244
  271. package/dist/resend/webhooks.js.map +0 -1
  272. package/dist/search/browse.js +0 -225
  273. package/dist/search/browse.js.map +0 -1
  274. package/dist/search/perplexity.js +0 -41
  275. package/dist/search/perplexity.js.map +0 -1
  276. package/dist/slack/channels.js +0 -277
  277. package/dist/slack/channels.js.map +0 -1
  278. package/dist/slack/client.js +0 -468
  279. package/dist/slack/client.js.map +0 -1
  280. package/dist/slack/retry.js +0 -100
  281. package/dist/slack/retry.js.map +0 -1
  282. package/dist/slack/types.js +0 -52
  283. package/dist/slack/types.js.map +0 -1
  284. package/dist/slack/webhooks.js +0 -285
  285. package/dist/slack/webhooks.js.map +0 -1
  286. package/dist/stt/client.js +0 -66
  287. package/dist/stt/client.js.map +0 -1
  288. package/dist/stt/sidecar.js +0 -115
  289. package/dist/stt/sidecar.js.map +0 -1
  290. package/dist/tracing/bridge.js +0 -70
  291. package/dist/tracing/bridge.js.map +0 -1
  292. package/dist/tracing/correlation.js +0 -49
  293. package/dist/tracing/correlation.js.map +0 -1
  294. package/dist/tracing/index.js +0 -18
  295. package/dist/tracing/index.js.map +0 -1
  296. package/dist/tracing/init.js +0 -81
  297. package/dist/tracing/init.js.map +0 -1
  298. package/dist/tracing/instrument.js +0 -145
  299. package/dist/tracing/instrument.js.map +0 -1
  300. package/dist/tracing/middleware.js +0 -69
  301. package/dist/tracing/middleware.js.map +0 -1
  302. package/dist/tracing/tracer.js +0 -327
  303. package/dist/tracing/tracer.js.map +0 -1
  304. package/dist/tts/client.js +0 -48
  305. package/dist/tts/client.js.map +0 -1
  306. package/dist/tts/sidecar.js +0 -148
  307. package/dist/tts/sidecar.js.map +0 -1
  308. package/dist/twilio/call.js +0 -79
  309. package/dist/twilio/call.js.map +0 -1
  310. package/dist/vault/matcher.js +0 -197
  311. package/dist/vault/matcher.js.map +0 -1
  312. package/dist/vault/personal.js +0 -163
  313. package/dist/vault/personal.js.map +0 -1
  314. package/dist/vault/policy.js +0 -159
  315. package/dist/vault/policy.js.map +0 -1
  316. package/dist/vault/store.js +0 -122
  317. package/dist/vault/store.js.map +0 -1
  318. package/dist/vault/transfer.js +0 -188
  319. package/dist/vault/transfer.js.map +0 -1
  320. package/dist/volumes/index.js +0 -2
  321. package/dist/volumes/index.js.map +0 -1
  322. package/dist/volumes/manager.js +0 -462
  323. package/dist/volumes/manager.js.map +0 -1
  324. package/dist/volumes/types.js +0 -8
  325. package/dist/volumes/types.js.map +0 -1
  326. package/dist/webhooks/config.js +0 -214
  327. package/dist/webhooks/config.js.map +0 -1
  328. package/dist/webhooks/event-log.js +0 -132
  329. package/dist/webhooks/event-log.js.map +0 -1
  330. package/dist/webhooks/handler.js +0 -103
  331. package/dist/webhooks/handler.js.map +0 -1
  332. package/dist/webhooks/handlers.js +0 -231
  333. package/dist/webhooks/handlers.js.map +0 -1
  334. package/dist/webhooks/index.js +0 -33
  335. package/dist/webhooks/index.js.map +0 -1
  336. package/dist/webhooks/mount.js +0 -400
  337. package/dist/webhooks/mount.js.map +0 -1
  338. package/dist/webhooks/registry.js +0 -143
  339. package/dist/webhooks/registry.js.map +0 -1
  340. package/dist/webhooks/relay.js +0 -53
  341. package/dist/webhooks/relay.js.map +0 -1
  342. package/dist/webhooks/retry.js +0 -270
  343. package/dist/webhooks/retry.js.map +0 -1
  344. package/dist/webhooks/router.js +0 -290
  345. package/dist/webhooks/router.js.map +0 -1
  346. package/dist/webhooks/twilio.js +0 -129
  347. package/dist/webhooks/twilio.js.map +0 -1
  348. package/dist/webhooks/types.js +0 -8
  349. package/dist/webhooks/types.js.map +0 -1
  350. package/dist/webhooks/verify.js +0 -154
  351. package/dist/webhooks/verify.js.map +0 -1
@@ -1,462 +0,0 @@
1
- /**
2
- * VolumeManager — event-driven multi-volume brain storage.
3
- *
4
- * No timers. No polling. Five triggers:
5
- * on-write → queue replication to other volumes
6
- * on-connect → drain pending replications
7
- * on-pressure → migrate cold files to lower tier
8
- * on-access → promote file to sphere
9
- * on-disconnect → ensure sphere has essentials
10
- *
11
- * The append-only JSONL log is the replication queue.
12
- * Any volume that's behind just reads the appends it missed.
13
- */
14
- import { readFile, writeFile, copyFile, mkdir, stat } from "node:fs/promises";
15
- import { statfs } from "node:fs/promises";
16
- import { join, dirname } from "node:path";
17
- import { createLogger } from "../utils/logger.js";
18
- import { logActivity } from "../activity/log.js";
19
- const log = createLogger("volumes");
20
- /** Default pressure threshold: 80% of volume capacity. */
21
- const DEFAULT_PRESSURE_PCT = 0.8;
22
- /** Max cold files to migrate per pressure event. */
23
- const MIGRATE_BATCH_SIZE = 10;
24
- /** Concurrency for replication drain. */
25
- const REPLICATION_CONCURRENCY = 3;
26
- export class VolumeManager {
27
- primaryBrainDir;
28
- volumes = [];
29
- states = new Map();
30
- replicationQueue = [];
31
- configPath;
32
- queuePath;
33
- draining = false;
34
- constructor(primaryBrainDir) {
35
- this.primaryBrainDir = primaryBrainDir;
36
- this.configPath = join(primaryBrainDir, "volumes.yaml");
37
- this.queuePath = join(primaryBrainDir, "volumes", "replication-queue.jsonl");
38
- }
39
- // ── Init ────────────────────────────────────────────────────────────────────
40
- async init() {
41
- await this.loadConfig();
42
- await this.loadQueue();
43
- await this.probeAll();
44
- log.info("Volume manager initialized", {
45
- volumes: this.volumes.length,
46
- online: [...this.states.values()].filter((s) => s.online).length,
47
- pendingReplications: this.replicationQueue.filter((r) => r.status === "pending").length,
48
- });
49
- }
50
- // ── Config ──────────────────────────────────────────────────────────────────
51
- async loadConfig() {
52
- try {
53
- const raw = await readFile(this.configPath, "utf-8");
54
- this.volumes = this.parseVolumesYaml(raw);
55
- }
56
- catch (err) {
57
- if (err.code === "ENOENT") {
58
- // No volumes.yaml — single-volume mode (primary only)
59
- this.volumes = [
60
- { name: "primary", path: this.primaryBrainDir, tier: "sphere" },
61
- ];
62
- log.debug("No volumes.yaml — single-volume mode");
63
- }
64
- else {
65
- log.warn("Failed to parse volumes.yaml", { error: err.message });
66
- this.volumes = [
67
- { name: "primary", path: this.primaryBrainDir, tier: "sphere" },
68
- ];
69
- }
70
- }
71
- // Ensure primary is always present
72
- if (!this.volumes.find((v) => v.path === this.primaryBrainDir)) {
73
- this.volumes.unshift({ name: "primary", path: this.primaryBrainDir, tier: "sphere" });
74
- }
75
- }
76
- parseVolumesYaml(raw) {
77
- const configs = [];
78
- const entries = raw.split(/^(?=\s*- )/m).filter((s) => s.trim());
79
- for (const entry of entries) {
80
- const lines = entry.split("\n").map((l) => l.trim()).filter((l) => l && !l.startsWith("#"));
81
- let name;
82
- let path;
83
- let tier;
84
- let pressureThresholdBytes;
85
- for (const line of lines) {
86
- const cleaned = line.replace(/^-\s*/, "");
87
- const kv = cleaned.match(/^(\w+)\s*:\s*(.+)$/);
88
- if (!kv)
89
- continue;
90
- const [, key, val] = kv;
91
- const unquoted = val.replace(/^["']|["']$/g, "").trim();
92
- if (key === "name")
93
- name = unquoted;
94
- else if (key === "path")
95
- path = unquoted;
96
- else if (key === "tier" && ["sphere", "warm", "archive"].includes(unquoted)) {
97
- tier = unquoted;
98
- }
99
- else if (key === "pressureThresholdBytes")
100
- pressureThresholdBytes = parseInt(unquoted, 10);
101
- }
102
- if (name && path && tier) {
103
- configs.push({ name, path, tier, pressureThresholdBytes });
104
- }
105
- }
106
- return configs;
107
- }
108
- // ── Volume probing ──────────────────────────────────────────────────────────
109
- /** Check which volumes are online and get disk stats. */
110
- async probeAll() {
111
- const results = await Promise.allSettled(this.volumes.map((v) => this.probeVolume(v)));
112
- const states = [];
113
- for (let i = 0; i < results.length; i++) {
114
- const vol = this.volumes[i];
115
- if (results[i].status === "fulfilled") {
116
- const s = results[i].value;
117
- this.states.set(vol.name, s);
118
- states.push(s);
119
- }
120
- else {
121
- const offlineState = {
122
- name: vol.name,
123
- tier: vol.tier,
124
- path: vol.path,
125
- online: false,
126
- totalBytes: 0,
127
- usedBytes: 0,
128
- freeBytes: 0,
129
- pressure: false,
130
- lastSeen: this.states.get(vol.name)?.lastSeen ?? "never",
131
- };
132
- this.states.set(vol.name, offlineState);
133
- states.push(offlineState);
134
- }
135
- }
136
- return states;
137
- }
138
- async probeVolume(config) {
139
- // Check if path is accessible
140
- await stat(config.path);
141
- let totalBytes = 0;
142
- let freeBytes = 0;
143
- try {
144
- const fs = await statfs(config.path);
145
- totalBytes = Number(fs.blocks) * Number(fs.bsize);
146
- freeBytes = Number(fs.bfree) * Number(fs.bsize);
147
- }
148
- catch {
149
- // statfs may not work on all platforms
150
- }
151
- const usedBytes = totalBytes - freeBytes;
152
- const threshold = config.pressureThresholdBytes ?? totalBytes * DEFAULT_PRESSURE_PCT;
153
- const pressure = totalBytes > 0 && usedBytes >= threshold;
154
- return {
155
- name: config.name,
156
- tier: config.tier,
157
- path: config.path,
158
- online: true,
159
- totalBytes,
160
- usedBytes,
161
- freeBytes,
162
- pressure,
163
- lastSeen: new Date().toISOString(),
164
- };
165
- }
166
- // ── Event handlers (the five triggers) ──────────────────────────────────────
167
- /** Process a volume event. This is the only entry point for volume operations. */
168
- async handleEvent(event) {
169
- switch (event.type) {
170
- case "write":
171
- await this.onWrite(event.fileId, event.volume);
172
- break;
173
- case "connect":
174
- await this.onConnect(event.volume);
175
- break;
176
- case "disconnect":
177
- await this.onDisconnect(event.volume);
178
- break;
179
- case "pressure":
180
- await this.onPressure(event.volume);
181
- break;
182
- case "access":
183
- await this.onAccess(event.fileId, event.volume);
184
- break;
185
- }
186
- }
187
- /**
188
- * ON WRITE — a file was stored on a volume. Queue replication to other volumes.
189
- * Every append is a replication event.
190
- */
191
- async onWrite(fileId, sourceVolume) {
192
- const targets = this.volumes.filter((v) => v.name !== sourceVolume && this.states.get(v.name)?.online);
193
- for (const target of targets) {
194
- const entry = {
195
- fileId,
196
- checksum: "",
197
- sourceVolume,
198
- targetVolume: target.name,
199
- queuedAt: new Date().toISOString(),
200
- status: "pending",
201
- };
202
- this.replicationQueue.push(entry);
203
- }
204
- await this.persistQueue();
205
- // If any targets are online, start draining immediately
206
- if (targets.length > 0) {
207
- this.drainQueue().catch((err) => log.warn("Replication drain failed", { error: String(err) }));
208
- }
209
- log.debug("on-write: queued replication", { fileId, targets: targets.map((t) => t.name) });
210
- }
211
- /**
212
- * ON CONNECT — a volume came online. Drain pending replications to it.
213
- * The road opened. Send what's waiting.
214
- */
215
- async onConnect(volumeName) {
216
- const config = this.volumes.find((v) => v.name === volumeName);
217
- if (!config)
218
- return;
219
- // Re-probe the volume
220
- try {
221
- const state = await this.probeVolume(config);
222
- this.states.set(volumeName, state);
223
- }
224
- catch {
225
- return; // Not actually online
226
- }
227
- logActivity({
228
- source: "system",
229
- summary: `Volume connected: ${volumeName} (${config.tier})`,
230
- });
231
- // Replicate registry to this volume
232
- if (config.replicateRegistry !== false) {
233
- await this.replicateRegistry(config);
234
- }
235
- // Drain pending replications targeting this volume
236
- await this.drainQueue(volumeName);
237
- log.info("on-connect: volume online", { volume: volumeName, tier: config.tier });
238
- }
239
- /**
240
- * ON DISCONNECT — volume going away. Ensure sphere has essentials.
241
- * The goodbye is the checkpoint.
242
- */
243
- async onDisconnect(volumeName) {
244
- const state = this.states.get(volumeName);
245
- if (state) {
246
- state.online = false;
247
- state.lastSeen = new Date().toISOString();
248
- }
249
- logActivity({
250
- source: "system",
251
- summary: `Volume disconnected: ${volumeName}`,
252
- });
253
- log.info("on-disconnect", { volume: volumeName });
254
- }
255
- /**
256
- * ON PRESSURE — volume is getting full. Migrate cold files to lower tier.
257
- * Storage pressure is the natural signal. Not a timer.
258
- */
259
- async onPressure(volumeName) {
260
- const sourceConfig = this.volumes.find((v) => v.name === volumeName);
261
- if (!sourceConfig)
262
- return;
263
- // Find a lower tier that's online and has space
264
- const tierOrder = ["sphere", "warm", "archive"];
265
- const sourceTierIdx = tierOrder.indexOf(sourceConfig.tier);
266
- const lowerTiers = this.volumes.filter((v) => {
267
- const idx = tierOrder.indexOf(v.tier);
268
- const state = this.states.get(v.name);
269
- return idx > sourceTierIdx && state?.online && !state.pressure;
270
- });
271
- if (lowerTiers.length === 0) {
272
- log.warn("on-pressure: no lower tier available", { volume: volumeName });
273
- logActivity({
274
- source: "system",
275
- summary: `Storage pressure on ${volumeName} but no lower tier available`,
276
- });
277
- return;
278
- }
279
- const target = lowerTiers[0];
280
- logActivity({
281
- source: "system",
282
- summary: `Storage pressure on ${volumeName} — migrating cold files to ${target.name}`,
283
- });
284
- log.info("on-pressure: migrating cold files", {
285
- from: volumeName,
286
- to: target.name,
287
- batch: MIGRATE_BATCH_SIZE,
288
- });
289
- }
290
- /**
291
- * ON ACCESS — file requested from a non-sphere volume. Promote to sphere.
292
- * Accessing something makes it hot. The ask is the promotion.
293
- */
294
- async onAccess(fileId, currentVolume) {
295
- const currentConfig = this.volumes.find((v) => v.name === currentVolume);
296
- if (!currentConfig || currentConfig.tier === "sphere")
297
- return;
298
- const sphere = this.volumes.find((v) => v.tier === "sphere");
299
- if (!sphere || !this.states.get(sphere.name)?.online)
300
- return;
301
- // Queue a copy to sphere (don't delete from current — append-only)
302
- const entry = {
303
- fileId,
304
- checksum: "",
305
- sourceVolume: currentVolume,
306
- targetVolume: sphere.name,
307
- queuedAt: new Date().toISOString(),
308
- status: "pending",
309
- };
310
- this.replicationQueue.push(entry);
311
- await this.persistQueue();
312
- await this.drainQueue(sphere.name);
313
- log.debug("on-access: promoting to sphere", { fileId, from: currentVolume });
314
- }
315
- // ── Replication queue ───────────────────────────────────────────────────────
316
- async loadQueue() {
317
- try {
318
- const raw = await readFile(this.queuePath, "utf-8");
319
- const lines = raw.split("\n").filter((l) => l.trim());
320
- this.replicationQueue = [];
321
- for (const line of lines) {
322
- try {
323
- const entry = JSON.parse(line);
324
- if (entry.status === "pending" || entry.status === "in-progress") {
325
- this.replicationQueue.push(entry);
326
- }
327
- }
328
- catch {
329
- continue;
330
- }
331
- }
332
- }
333
- catch {
334
- this.replicationQueue = [];
335
- }
336
- }
337
- async persistQueue() {
338
- const pending = this.replicationQueue.filter((r) => r.status === "pending" || r.status === "in-progress");
339
- await mkdir(dirname(this.queuePath), { recursive: true });
340
- const content = pending.map((r) => JSON.stringify(r)).join("\n") + "\n";
341
- await writeFile(this.queuePath, content, "utf-8");
342
- }
343
- /** Drain pending replications, optionally filtered to a specific target. */
344
- async drainQueue(targetVolume) {
345
- if (this.draining)
346
- return;
347
- this.draining = true;
348
- try {
349
- const pending = this.replicationQueue.filter((r) => r.status === "pending" && (!targetVolume || r.targetVolume === targetVolume));
350
- if (pending.length === 0)
351
- return;
352
- log.info("Draining replication queue", { count: pending.length, target: targetVolume ?? "all" });
353
- // Process in batches
354
- for (let i = 0; i < pending.length; i += REPLICATION_CONCURRENCY) {
355
- const batch = pending.slice(i, i + REPLICATION_CONCURRENCY);
356
- await Promise.allSettled(batch.map((entry) => this.replicateFile(entry)));
357
- }
358
- await this.persistQueue();
359
- }
360
- finally {
361
- this.draining = false;
362
- }
363
- }
364
- async replicateFile(entry) {
365
- entry.status = "in-progress";
366
- const source = this.volumes.find((v) => v.name === entry.sourceVolume);
367
- const target = this.volumes.find((v) => v.name === entry.targetVolume);
368
- if (!source || !target) {
369
- entry.status = "failed";
370
- entry.error = "Volume not found";
371
- return;
372
- }
373
- const targetState = this.states.get(target.name);
374
- if (!targetState?.online) {
375
- entry.status = "pending"; // Put it back — volume not ready
376
- return;
377
- }
378
- try {
379
- // For now, replication copies the file to the same relative path on the target volume
380
- // The actual file path resolution will integrate with FileRegistry
381
- entry.status = "done";
382
- log.debug("File replicated", { fileId: entry.fileId, to: target.name });
383
- }
384
- catch (err) {
385
- entry.status = "failed";
386
- entry.error = err instanceof Error ? err.message : String(err);
387
- log.warn("Replication failed", { fileId: entry.fileId, to: target.name, error: entry.error });
388
- }
389
- }
390
- /** Copy the registry JSONL to another volume so it can self-recover. */
391
- async replicateRegistry(target) {
392
- try {
393
- const registrySource = join(this.primaryBrainDir, "files", "registry.jsonl");
394
- const registryTarget = join(target.path, "files", "registry.jsonl");
395
- await mkdir(dirname(registryTarget), { recursive: true });
396
- await copyFile(registrySource, registryTarget);
397
- log.debug("Registry replicated", { to: target.name });
398
- }
399
- catch (err) {
400
- log.warn("Registry replication failed", { to: target.name, error: String(err) });
401
- }
402
- }
403
- // ── Public API ──────────────────────────────────────────────────────────────
404
- /** Get all volume states. */
405
- getStates() {
406
- return [...this.states.values()];
407
- }
408
- /** Get config for all volumes. */
409
- getConfigs() {
410
- return [...this.volumes];
411
- }
412
- /** Get the sphere volume (primary hot storage). */
413
- getSphere() {
414
- return this.volumes.find((v) => v.tier === "sphere");
415
- }
416
- /** Get online volumes of a specific tier. */
417
- getOnlineByTier(tier) {
418
- return this.volumes.filter((v) => {
419
- return v.tier === tier && this.states.get(v.name)?.online;
420
- });
421
- }
422
- /** Get volume by name. */
423
- getVolume(name) {
424
- return this.volumes.find((v) => v.name === name);
425
- }
426
- /** Check if a specific volume is under pressure. */
427
- isUnderPressure(volumeName) {
428
- return this.states.get(volumeName)?.pressure ?? false;
429
- }
430
- /** Get count of pending replications. */
431
- getPendingCount() {
432
- return this.replicationQueue.filter((r) => r.status === "pending").length;
433
- }
434
- /** Resolve the physical path for a file on a given volume. */
435
- resolveFilePath(volume, relativePath) {
436
- const config = this.volumes.find((v) => v.name === volume);
437
- if (!config)
438
- return null;
439
- return join(config.path, relativePath);
440
- }
441
- /** Find which online volume has a file (by checking existence). */
442
- async locateFile(relativePath) {
443
- // Check sphere first (fastest access)
444
- const ordered = [...this.volumes].sort((a, b) => {
445
- const tierOrder = ["sphere", "warm", "archive"];
446
- return tierOrder.indexOf(a.tier) - tierOrder.indexOf(b.tier);
447
- });
448
- for (const vol of ordered) {
449
- if (!this.states.get(vol.name)?.online)
450
- continue;
451
- try {
452
- await stat(join(vol.path, relativePath));
453
- return vol.name;
454
- }
455
- catch {
456
- continue;
457
- }
458
- }
459
- return null;
460
- }
461
- }
462
- //# sourceMappingURL=manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/volumes/manager.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Volume types — multi-volume brain storage with event-driven tiering.
3
- *
4
- * Three tiers: sphere (hot), warm, archive (cold).
5
- * No timers. Triggers are: on-write, on-connect, on-pressure, on-access, on-disconnect.
6
- */
7
- export {};
8
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/volumes/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}