@mono-agent/agent-app 0.6.2 → 0.9.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 (313) hide show
  1. package/README.md +259 -19
  2. package/dist/account-home.d.ts +6 -0
  3. package/dist/account-home.d.ts.map +1 -0
  4. package/dist/account-home.js +9 -0
  5. package/dist/account-home.js.map +1 -0
  6. package/dist/adapter-send-proxy.d.ts +18 -0
  7. package/dist/adapter-send-proxy.d.ts.map +1 -0
  8. package/dist/adapter-send-proxy.js +229 -0
  9. package/dist/adapter-send-proxy.js.map +1 -0
  10. package/dist/adapter-send-tools-main.js +62 -4
  11. package/dist/adapter-send-tools-main.js.map +1 -1
  12. package/dist/adapter-send-tools.d.ts +33 -6
  13. package/dist/adapter-send-tools.d.ts.map +1 -1
  14. package/dist/adapter-send-tools.js +485 -87
  15. package/dist/adapter-send-tools.js.map +1 -1
  16. package/dist/app-config.d.ts +3 -1
  17. package/dist/app-config.d.ts.map +1 -1
  18. package/dist/app-config.js +16 -5
  19. package/dist/app-config.js.map +1 -1
  20. package/dist/app.d.ts +27 -0
  21. package/dist/app.d.ts.map +1 -1
  22. package/dist/app.js +761 -147
  23. package/dist/app.js.map +1 -1
  24. package/dist/background-environment.d.ts +16 -0
  25. package/dist/background-environment.d.ts.map +1 -0
  26. package/dist/background-environment.js +68 -0
  27. package/dist/background-environment.js.map +1 -0
  28. package/dist/background-runtime.d.ts +62 -0
  29. package/dist/background-runtime.d.ts.map +1 -0
  30. package/dist/background-runtime.js +1115 -0
  31. package/dist/background-runtime.js.map +1 -0
  32. package/dist/background-snapshot-key.d.ts +13 -0
  33. package/dist/background-snapshot-key.d.ts.map +1 -0
  34. package/dist/background-snapshot-key.js +194 -0
  35. package/dist/background-snapshot-key.js.map +1 -0
  36. package/dist/background-snapshot.d.ts +96 -0
  37. package/dist/background-snapshot.d.ts.map +1 -0
  38. package/dist/background-snapshot.js +450 -0
  39. package/dist/background-snapshot.js.map +1 -0
  40. package/dist/background-worker-lease.d.ts +39 -0
  41. package/dist/background-worker-lease.d.ts.map +1 -0
  42. package/dist/background-worker-lease.js +356 -0
  43. package/dist/background-worker-lease.js.map +1 -0
  44. package/dist/background.d.ts +74 -2
  45. package/dist/background.d.ts.map +1 -1
  46. package/dist/background.js +815 -73
  47. package/dist/background.js.map +1 -1
  48. package/dist/broadcast-recorder.d.ts.map +1 -1
  49. package/dist/broadcast-recorder.js +24 -2
  50. package/dist/broadcast-recorder.js.map +1 -1
  51. package/dist/channel-plugins.d.ts +2 -0
  52. package/dist/channel-plugins.d.ts.map +1 -1
  53. package/dist/channel-plugins.js +8 -0
  54. package/dist/channel-plugins.js.map +1 -1
  55. package/dist/channels.d.ts +10 -0
  56. package/dist/channels.d.ts.map +1 -1
  57. package/dist/channels.js +87 -9
  58. package/dist/channels.js.map +1 -1
  59. package/dist/cli.d.ts +86 -4
  60. package/dist/cli.d.ts.map +1 -1
  61. package/dist/cli.js +2421 -143
  62. package/dist/cli.js.map +1 -1
  63. package/dist/config-reference.d.ts.map +1 -1
  64. package/dist/config-reference.js +448 -6
  65. package/dist/config-reference.js.map +1 -1
  66. package/dist/configuration-proposal-main.d.ts +3 -0
  67. package/dist/configuration-proposal-main.d.ts.map +1 -0
  68. package/dist/configuration-proposal-main.js +13 -0
  69. package/dist/configuration-proposal-main.js.map +1 -0
  70. package/dist/configuration-proposal-tool.d.ts +33 -0
  71. package/dist/configuration-proposal-tool.d.ts.map +1 -0
  72. package/dist/configuration-proposal-tool.js +188 -0
  73. package/dist/configuration-proposal-tool.js.map +1 -0
  74. package/dist/configured-agent.d.ts +16 -0
  75. package/dist/configured-agent.d.ts.map +1 -1
  76. package/dist/configured-agent.js +165 -18
  77. package/dist/configured-agent.js.map +1 -1
  78. package/dist/consumer-contract.d.ts +3 -0
  79. package/dist/consumer-contract.d.ts.map +1 -1
  80. package/dist/consumer-contract.js +44 -1
  81. package/dist/consumer-contract.js.map +1 -1
  82. package/dist/continuation-command.d.ts +15 -0
  83. package/dist/continuation-command.d.ts.map +1 -0
  84. package/dist/continuation-command.js +170 -0
  85. package/dist/continuation-command.js.map +1 -0
  86. package/dist/continuation-config.d.ts +25 -0
  87. package/dist/continuation-config.d.ts.map +1 -0
  88. package/dist/continuation-config.js +236 -0
  89. package/dist/continuation-config.js.map +1 -0
  90. package/dist/continuation-service.d.ts +99 -0
  91. package/dist/continuation-service.d.ts.map +1 -0
  92. package/dist/continuation-service.js +1313 -0
  93. package/dist/continuation-service.js.map +1 -0
  94. package/dist/continuation-store.d.ts +104 -0
  95. package/dist/continuation-store.d.ts.map +1 -0
  96. package/dist/continuation-store.js +688 -0
  97. package/dist/continuation-store.js.map +1 -0
  98. package/dist/continuations.d.ts +167 -0
  99. package/dist/continuations.d.ts.map +1 -0
  100. package/dist/continuations.js +71 -0
  101. package/dist/continuations.js.map +1 -0
  102. package/dist/doctor.d.ts +29 -5
  103. package/dist/doctor.d.ts.map +1 -1
  104. package/dist/doctor.js +1611 -116
  105. package/dist/doctor.js.map +1 -1
  106. package/dist/first-run-managed-memory.d.ts +39 -0
  107. package/dist/first-run-managed-memory.d.ts.map +1 -0
  108. package/dist/first-run-managed-memory.js +584 -0
  109. package/dist/first-run-managed-memory.js.map +1 -0
  110. package/dist/first-run-readiness.d.ts +111 -0
  111. package/dist/first-run-readiness.d.ts.map +1 -0
  112. package/dist/first-run-readiness.js +728 -0
  113. package/dist/first-run-readiness.js.map +1 -0
  114. package/dist/index.d.ts +17 -3
  115. package/dist/index.d.ts.map +1 -1
  116. package/dist/index.js +8 -1
  117. package/dist/index.js.map +1 -1
  118. package/dist/init.d.ts +95 -3
  119. package/dist/init.d.ts.map +1 -1
  120. package/dist/init.js +1218 -24
  121. package/dist/init.js.map +1 -1
  122. package/dist/interaction-bridge.d.ts +25 -1
  123. package/dist/interaction-bridge.d.ts.map +1 -1
  124. package/dist/interaction-bridge.js +281 -19
  125. package/dist/interaction-bridge.js.map +1 -1
  126. package/dist/launchd.d.ts +16 -6
  127. package/dist/launchd.d.ts.map +1 -1
  128. package/dist/launchd.js +30 -15
  129. package/dist/launchd.js.map +1 -1
  130. package/dist/local-configuration.d.ts +99 -0
  131. package/dist/local-configuration.d.ts.map +1 -0
  132. package/dist/local-configuration.js +1299 -0
  133. package/dist/local-configuration.js.map +1 -0
  134. package/dist/managed-runtime-packages.d.ts +9 -0
  135. package/dist/managed-runtime-packages.d.ts.map +1 -0
  136. package/dist/managed-runtime-packages.js +56 -0
  137. package/dist/managed-runtime-packages.js.map +1 -0
  138. package/dist/memory-command.d.ts +4 -0
  139. package/dist/memory-command.d.ts.map +1 -1
  140. package/dist/memory-command.js +751 -27
  141. package/dist/memory-command.js.map +1 -1
  142. package/dist/memory-embedding-service.d.ts +33 -0
  143. package/dist/memory-embedding-service.d.ts.map +1 -0
  144. package/dist/memory-embedding-service.js +207 -0
  145. package/dist/memory-embedding-service.js.map +1 -0
  146. package/dist/memory-recall.d.ts +43 -14
  147. package/dist/memory-recall.d.ts.map +1 -1
  148. package/dist/memory-recall.js +103 -33
  149. package/dist/memory-recall.js.map +1 -1
  150. package/dist/memory-retrieval.d.ts +66 -0
  151. package/dist/memory-retrieval.d.ts.map +1 -0
  152. package/dist/memory-retrieval.js +332 -0
  153. package/dist/memory-retrieval.js.map +1 -0
  154. package/dist/modules/base.d.ts +6 -5
  155. package/dist/modules/base.d.ts.map +1 -1
  156. package/dist/modules/base.js +11 -7
  157. package/dist/modules/base.js.map +1 -1
  158. package/dist/modules/catalog.d.ts.map +1 -1
  159. package/dist/modules/catalog.js +141 -25
  160. package/dist/modules/catalog.js.map +1 -1
  161. package/dist/modules/index.d.ts +2 -2
  162. package/dist/modules/index.d.ts.map +1 -1
  163. package/dist/modules/index.js +1 -1
  164. package/dist/modules/index.js.map +1 -1
  165. package/dist/modules/known-tools.d.ts +3 -0
  166. package/dist/modules/known-tools.d.ts.map +1 -1
  167. package/dist/modules/known-tools.js +11 -1
  168. package/dist/modules/known-tools.js.map +1 -1
  169. package/dist/modules/types.d.ts +20 -6
  170. package/dist/modules/types.d.ts.map +1 -1
  171. package/dist/modules/types.js.map +1 -1
  172. package/dist/notify-runtime.d.ts +26 -0
  173. package/dist/notify-runtime.d.ts.map +1 -0
  174. package/dist/notify-runtime.js +27 -0
  175. package/dist/notify-runtime.js.map +1 -0
  176. package/dist/notify-tool.d.ts +51 -0
  177. package/dist/notify-tool.d.ts.map +1 -0
  178. package/dist/notify-tool.js +182 -0
  179. package/dist/notify-tool.js.map +1 -0
  180. package/dist/package-version.d.ts +3 -0
  181. package/dist/package-version.d.ts.map +1 -0
  182. package/dist/package-version.js +14 -0
  183. package/dist/package-version.js.map +1 -0
  184. package/dist/pi-auth-store-inspection.d.ts +21 -0
  185. package/dist/pi-auth-store-inspection.d.ts.map +1 -0
  186. package/dist/pi-auth-store-inspection.js +120 -0
  187. package/dist/pi-auth-store-inspection.js.map +1 -0
  188. package/dist/pi-oauth-login-main.d.ts +3 -0
  189. package/dist/pi-oauth-login-main.d.ts.map +1 -0
  190. package/dist/pi-oauth-login-main.js +14 -0
  191. package/dist/pi-oauth-login-main.js.map +1 -0
  192. package/dist/pi-oauth-login.d.ts +22 -0
  193. package/dist/pi-oauth-login.d.ts.map +1 -0
  194. package/dist/pi-oauth-login.js +79 -0
  195. package/dist/pi-oauth-login.js.map +1 -0
  196. package/dist/proactive-notify.d.ts +2 -0
  197. package/dist/proactive-notify.d.ts.map +1 -1
  198. package/dist/proactive-notify.js +1 -0
  199. package/dist/proactive-notify.js.map +1 -1
  200. package/dist/process-incarnation.d.ts +23 -0
  201. package/dist/process-incarnation.d.ts.map +1 -0
  202. package/dist/process-incarnation.js +208 -0
  203. package/dist/process-incarnation.js.map +1 -0
  204. package/dist/project-skills.d.ts +40 -0
  205. package/dist/project-skills.d.ts.map +1 -0
  206. package/dist/project-skills.js +573 -0
  207. package/dist/project-skills.js.map +1 -0
  208. package/dist/provider-setup.d.ts +117 -2
  209. package/dist/provider-setup.d.ts.map +1 -1
  210. package/dist/provider-setup.js +1505 -49
  211. package/dist/provider-setup.js.map +1 -1
  212. package/dist/readiness-probe-worker.d.ts +12 -0
  213. package/dist/readiness-probe-worker.d.ts.map +1 -0
  214. package/dist/readiness-probe-worker.js +276 -0
  215. package/dist/readiness-probe-worker.js.map +1 -0
  216. package/dist/readiness-probe.d.ts +100 -0
  217. package/dist/readiness-probe.d.ts.map +1 -0
  218. package/dist/readiness-probe.js +780 -0
  219. package/dist/readiness-probe.js.map +1 -0
  220. package/dist/recipes/base.d.ts +15 -0
  221. package/dist/recipes/base.d.ts.map +1 -0
  222. package/dist/recipes/base.js +51 -0
  223. package/dist/recipes/base.js.map +1 -0
  224. package/dist/recipes/catalog.d.ts +4 -0
  225. package/dist/recipes/catalog.d.ts.map +1 -0
  226. package/dist/recipes/catalog.js +525 -0
  227. package/dist/recipes/catalog.js.map +1 -0
  228. package/dist/recipes/index.d.ts +11 -0
  229. package/dist/recipes/index.d.ts.map +1 -0
  230. package/dist/recipes/index.js +14 -0
  231. package/dist/recipes/index.js.map +1 -0
  232. package/dist/recipes/types.d.ts +70 -0
  233. package/dist/recipes/types.d.ts.map +1 -0
  234. package/dist/recipes/types.js +15 -0
  235. package/dist/recipes/types.js.map +1 -0
  236. package/dist/request-model-override.d.ts +43 -1
  237. package/dist/request-model-override.d.ts.map +1 -1
  238. package/dist/request-model-override.js +178 -19
  239. package/dist/request-model-override.js.map +1 -1
  240. package/dist/run-history.d.ts +32 -0
  241. package/dist/run-history.d.ts.map +1 -0
  242. package/dist/run-history.js +859 -0
  243. package/dist/run-history.js.map +1 -0
  244. package/dist/runs-health.d.ts.map +1 -1
  245. package/dist/runs-health.js +12 -4
  246. package/dist/runs-health.js.map +1 -1
  247. package/dist/runtime-option-extensions.d.ts +14 -0
  248. package/dist/runtime-option-extensions.d.ts.map +1 -0
  249. package/dist/runtime-option-extensions.js +98 -0
  250. package/dist/runtime-option-extensions.js.map +1 -0
  251. package/dist/runtime-routes.d.ts +9 -0
  252. package/dist/runtime-routes.d.ts.map +1 -0
  253. package/dist/runtime-routes.js +13 -0
  254. package/dist/runtime-routes.js.map +1 -0
  255. package/dist/sandbox-manager.d.ts +86 -0
  256. package/dist/sandbox-manager.d.ts.map +1 -0
  257. package/dist/sandbox-manager.js +1402 -0
  258. package/dist/sandbox-manager.js.map +1 -0
  259. package/dist/setup.d.ts +29 -0
  260. package/dist/setup.d.ts.map +1 -0
  261. package/dist/setup.js +97 -0
  262. package/dist/setup.js.map +1 -0
  263. package/dist/supermemory-plugin.d.ts +56 -0
  264. package/dist/supermemory-plugin.d.ts.map +1 -0
  265. package/dist/supermemory-plugin.js +142 -0
  266. package/dist/supermemory-plugin.js.map +1 -0
  267. package/dist/tui-command.d.ts +56 -0
  268. package/dist/tui-command.d.ts.map +1 -1
  269. package/dist/tui-command.js +305 -31
  270. package/dist/tui-command.js.map +1 -1
  271. package/dist/web-command.d.ts +8 -0
  272. package/dist/web-command.d.ts.map +1 -1
  273. package/dist/web-command.js +174 -17
  274. package/dist/web-command.js.map +1 -1
  275. package/dist/wizard/answers.d.ts +31 -4
  276. package/dist/wizard/answers.d.ts.map +1 -1
  277. package/dist/wizard/answers.js +141 -29
  278. package/dist/wizard/answers.js.map +1 -1
  279. package/dist/wizard/from-flags.d.ts +7 -0
  280. package/dist/wizard/from-flags.d.ts.map +1 -1
  281. package/dist/wizard/from-flags.js +36 -2
  282. package/dist/wizard/from-flags.js.map +1 -1
  283. package/dist/wizard/index.d.ts +4 -4
  284. package/dist/wizard/index.d.ts.map +1 -1
  285. package/dist/wizard/index.js +2 -2
  286. package/dist/wizard/index.js.map +1 -1
  287. package/dist/wizard/model-discovery.d.ts +33 -2
  288. package/dist/wizard/model-discovery.d.ts.map +1 -1
  289. package/dist/wizard/model-discovery.js +826 -108
  290. package/dist/wizard/model-discovery.js.map +1 -1
  291. package/dist/wizard/presets.d.ts +1 -1
  292. package/dist/wizard/presets.d.ts.map +1 -1
  293. package/dist/wizard/presets.js +7 -12
  294. package/dist/wizard/presets.js.map +1 -1
  295. package/dist/wizard/prompts.d.ts +56 -9
  296. package/dist/wizard/prompts.d.ts.map +1 -1
  297. package/dist/wizard/prompts.js +172 -20
  298. package/dist/wizard/prompts.js.map +1 -1
  299. package/dist/wizard/run.d.ts +59 -3
  300. package/dist/wizard/run.d.ts.map +1 -1
  301. package/dist/wizard/run.js +1290 -191
  302. package/dist/wizard/run.js.map +1 -1
  303. package/package.json +21 -16
  304. package/resources/srt/package-lock.json +66 -0
  305. package/resources/srt/package.json +9 -0
  306. package/schema/mono-agent.config.schema.json +587 -20
  307. package/skills/mono-agent-composer/SKILL.md +6 -6
  308. package/skills/mono-agent-composer/references/config-blueprint.md +11 -10
  309. package/skills/mono-agent-composer/references/discovery-questions.md +33 -18
  310. package/skills/mono-agent-composer/references/feature-coverage.md +14 -12
  311. package/skills/mono-agent-composer/references/package-map.md +2 -2
  312. package/skills/mono-agent-composer/references/playbooks.md +8 -7
  313. package/skills/mono-agent-composer/references/validation.md +3 -3
@@ -0,0 +1,584 @@
1
+ import { link, lstat, mkdir, mkdtemp, open, readdir, realpath, rmdir, unlink } from "node:fs/promises";
2
+ import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
3
+ import { probeMemoryEmbeddingSelection } from "./memory-embedding-service.js";
4
+ const DEFAULT_MANAGED_MEMORY_DIMENSION = 768;
5
+ const FIRST_RUN_EMBEDDING_PROBE_TIMEOUT_MS = 5_000;
6
+ const FIRST_RUN_OPENAI_PROBE_TEXT = "mono-agent managed-memory first-run embedding readiness probe";
7
+ export const FIRST_RUN_MEMORY_INITIALIZING_MARKER = ".first-run-memory-initializing";
8
+ const FIRST_RUN_MANAGED_MEMORY_OVERRIDE_KEYS = [
9
+ "MONO_AGENT_MEMORY_BACKEND",
10
+ "MONO_AGENT_MEMORY_MODE",
11
+ "MONO_AGENT_MEMORY_PATH",
12
+ "MONO_AGENT_MEMORY_EMBEDDINGS_PROVIDER",
13
+ "MONO_AGENT_MEMORY_EMBEDDINGS_MODEL",
14
+ "MONO_AGENT_MEMORY_EMBEDDINGS_DIM",
15
+ ];
16
+ function escapesRoot(pathRelative) {
17
+ return pathRelative === ".." || pathRelative.startsWith(`..${sep}`) || isAbsolute(pathRelative);
18
+ }
19
+ function pathSegments(pathRelative) {
20
+ return pathRelative.length === 0 ? [] : pathRelative.split(sep).filter((part) => part.length > 0);
21
+ }
22
+ function throwIfAborted(signal) {
23
+ signal?.throwIfAborted();
24
+ }
25
+ async function optionalLstat(path) {
26
+ try {
27
+ return await lstat(path);
28
+ }
29
+ catch (error) {
30
+ if (error.code === "ENOENT")
31
+ return undefined;
32
+ throw error;
33
+ }
34
+ }
35
+ async function canonicalAgentRoot(path) {
36
+ const absolute = resolve(path);
37
+ const pathStat = await lstat(absolute);
38
+ if (pathStat.isSymbolicLink() || !pathStat.isDirectory()) {
39
+ throw new Error(`Refusing first-run managed memory because the agent root is not a real directory: ${absolute}`);
40
+ }
41
+ return await realpath(absolute);
42
+ }
43
+ async function pinRealDirectoryChain(root, target) {
44
+ const pathRelative = relative(root, target);
45
+ if (escapesRoot(pathRelative)) {
46
+ throw new Error("Refusing first-run managed memory outside the agent folder.");
47
+ }
48
+ const rootStat = await lstat(root);
49
+ if (rootStat.isSymbolicLink() || !rootStat.isDirectory()) {
50
+ throw new Error(`Refusing first-run managed memory through a symbolic-link or non-directory parent: ${root}`);
51
+ }
52
+ const pinned = [{ path: root, dev: rootStat.dev, ino: rootStat.ino }];
53
+ let current = root;
54
+ for (const segment of pathSegments(pathRelative)) {
55
+ current = resolve(current, segment);
56
+ const pathStat = await lstat(current);
57
+ if (pathStat.isSymbolicLink() || !pathStat.isDirectory()) {
58
+ throw new Error(`Refusing first-run managed memory through a symbolic-link or non-directory parent: ${current}`);
59
+ }
60
+ pinned.push({ path: current, dev: pathStat.dev, ino: pathStat.ino });
61
+ }
62
+ const canonicalTarget = await realpath(target);
63
+ if (escapesRoot(relative(root, canonicalTarget))) {
64
+ throw new Error("Refusing first-run managed memory through a parent outside the agent folder.");
65
+ }
66
+ return pinned;
67
+ }
68
+ async function assertPinnedDirectoryChain(pinned) {
69
+ for (const expected of pinned) {
70
+ const current = await lstat(expected.path);
71
+ if (current.isSymbolicLink() || !current.isDirectory() || !sameIdentity(current, expected)) {
72
+ throw new Error("Refusing first-run managed memory because a pinned parent directory changed identity.");
73
+ }
74
+ }
75
+ }
76
+ async function assertExistingParentChainSafe(root, target) {
77
+ const pathRelative = relative(root, target);
78
+ if (escapesRoot(pathRelative)) {
79
+ throw new Error("Refusing first-run managed memory outside the agent folder.");
80
+ }
81
+ let current = root;
82
+ for (const segment of pathSegments(pathRelative)) {
83
+ current = resolve(current, segment);
84
+ const pathStat = await optionalLstat(current);
85
+ if (pathStat === undefined)
86
+ return;
87
+ if (pathStat.isSymbolicLink() || !pathStat.isDirectory()) {
88
+ throw new Error(`Refusing first-run managed memory through a symbolic-link or non-directory parent: ${current}`);
89
+ }
90
+ }
91
+ }
92
+ function sameIdentity(pathStat, expected) {
93
+ return pathStat.dev === expected.dev && pathStat.ino === expected.ino;
94
+ }
95
+ async function assertClaimedRoot(root, expected) {
96
+ const current = await lstat(root);
97
+ if (current.isSymbolicLink() || !current.isDirectory() || !sameIdentity(current, expected)) {
98
+ throw new Error("Refusing first-run managed memory because the claimed root changed identity.");
99
+ }
100
+ }
101
+ async function cleanupEmptyClaimedRoot(root, expected) {
102
+ const current = await optionalLstat(root);
103
+ if (current === undefined || current.isSymbolicLink() || !current.isDirectory()
104
+ || !sameIdentity(current, expected)) {
105
+ return;
106
+ }
107
+ // Never recursively remove a directory merely because this helper created
108
+ // its inode: another same-user process may have added content after claim.
109
+ // rmdir is the final atomic emptiness check and preserves every raced file.
110
+ try {
111
+ await rmdir(root);
112
+ }
113
+ catch (error) {
114
+ if (["ENOENT", "ENOTEMPTY", "EEXIST"].includes(error.code ?? ""))
115
+ return;
116
+ throw error;
117
+ }
118
+ }
119
+ async function createDurableMarker(path) {
120
+ const handle = await open(path, "wx", 0o600);
121
+ try {
122
+ await handle.writeFile("initializing\n", "utf8");
123
+ await handle.sync();
124
+ const pathStat = await handle.stat();
125
+ return { dev: pathStat.dev, ino: pathStat.ino };
126
+ }
127
+ finally {
128
+ await handle.close();
129
+ }
130
+ }
131
+ async function fsyncPath(path) {
132
+ const handle = await open(path, "r");
133
+ try {
134
+ await handle.sync();
135
+ }
136
+ finally {
137
+ await handle.close();
138
+ }
139
+ }
140
+ async function removeOwnedMarker(root, rootIdentity, markerPath, markerIdentity) {
141
+ const rootStat = await optionalLstat(root);
142
+ const markerStat = await optionalLstat(markerPath);
143
+ if (rootStat === undefined || rootStat.isSymbolicLink() || !rootStat.isDirectory()
144
+ || !sameIdentity(rootStat, rootIdentity)
145
+ || markerStat === undefined || markerStat.isSymbolicLink() || !markerStat.isFile()
146
+ || !sameIdentity(markerStat, markerIdentity))
147
+ return false;
148
+ await unlink(markerPath);
149
+ return await optionalLstat(markerPath) === undefined;
150
+ }
151
+ function treeIdentity(pathStat) {
152
+ if (pathStat.isSymbolicLink())
153
+ throw new Error("Refusing first-run managed memory through a staged symlink.");
154
+ if (!pathStat.isDirectory() && !pathStat.isFile()) {
155
+ throw new Error("Refusing first-run managed memory with a non-regular staged entry.");
156
+ }
157
+ return {
158
+ kind: pathStat.isDirectory() ? "directory" : "file",
159
+ dev: pathStat.dev,
160
+ ino: pathStat.ino,
161
+ size: pathStat.size,
162
+ mtimeMs: pathStat.mtimeMs,
163
+ mode: pathStat.mode & 0o777,
164
+ };
165
+ }
166
+ async function snapshotTree(root) {
167
+ const entries = [];
168
+ const walk = async (directory, relativeDirectory) => {
169
+ for (const name of (await readdir(directory)).sort()) {
170
+ const path = join(directory, name);
171
+ const pathRelative = relativeDirectory.length === 0 ? name : join(relativeDirectory, name);
172
+ const identity = treeIdentity(await lstat(path));
173
+ entries.push({ pathRelative, ...identity });
174
+ if (identity.kind === "directory")
175
+ await walk(path, pathRelative);
176
+ }
177
+ };
178
+ await walk(root, "");
179
+ return entries;
180
+ }
181
+ function treeSignature(entries) {
182
+ return JSON.stringify(entries.map((entry) => ({
183
+ path: entry.pathRelative,
184
+ kind: entry.kind,
185
+ dev: entry.dev,
186
+ ino: entry.ino,
187
+ size: entry.size,
188
+ mtimeMs: entry.mtimeMs,
189
+ mode: entry.mode,
190
+ })));
191
+ }
192
+ async function assertTreeEntry(path, expected) {
193
+ const actual = treeIdentity(await lstat(path));
194
+ if (actual.kind !== expected.kind || actual.dev !== expected.dev || actual.ino !== expected.ino
195
+ || actual.size !== expected.size || actual.mtimeMs !== expected.mtimeMs || actual.mode !== expected.mode) {
196
+ throw new Error("Refusing first-run managed memory because the staged index changed concurrently.");
197
+ }
198
+ }
199
+ async function linkStagedFile(source, destination, expected, hooks = {}) {
200
+ await assertTreeEntry(source, expected);
201
+ await hooks.assertDestination?.();
202
+ try {
203
+ await link(source, destination);
204
+ }
205
+ catch (error) {
206
+ if (error.code === "EEXIST") {
207
+ throw new Error(`Refusing to publish managed memory over an existing path: ${destination}`);
208
+ }
209
+ throw error;
210
+ }
211
+ // Creating the destination name is the authority commit point for the
212
+ // manifest. Record it before any later identity/fsync/source-cleanup step can
213
+ // fail, so outer recovery keeps the fail-closed marker once authority exists.
214
+ hooks.onLinkCreated?.();
215
+ const destinationStat = await lstat(destination);
216
+ if (destinationStat.isSymbolicLink() || !destinationStat.isFile() || !sameIdentity(destinationStat, expected)) {
217
+ throw new Error("First-run managed memory linked an unexpected staged file identity.");
218
+ }
219
+ await hooks.assertDestination?.();
220
+ await hooks.afterLinkVerified?.();
221
+ await fsyncPath(destination);
222
+ await assertTreeEntry(source, expected);
223
+ await unlink(source);
224
+ }
225
+ async function promoteManagedIndex(options) {
226
+ const sourceIndex = join(options.stagingRoot, ".index");
227
+ const finalIndex = join(options.finalRoot, ".index");
228
+ const manifest = options.snapshot.find((entry) => entry.pathRelative === "manifest.json");
229
+ if (manifest?.kind !== "file") {
230
+ throw new Error("First-run managed memory staged index has no regular manifest.");
231
+ }
232
+ await options.assertDestination();
233
+ try {
234
+ await mkdir(finalIndex, { mode: 0o700 });
235
+ }
236
+ catch (error) {
237
+ if (error.code === "EEXIST") {
238
+ throw new Error(`Refusing to publish managed memory over an existing path: ${finalIndex}`);
239
+ }
240
+ throw error;
241
+ }
242
+ const finalIndexStat = await lstat(finalIndex);
243
+ if (finalIndexStat.isSymbolicLink() || !finalIndexStat.isDirectory()) {
244
+ throw new Error("Refusing first-run managed memory because the published index root is unsafe.");
245
+ }
246
+ const finalIndexIdentity = { dev: finalIndexStat.dev, ino: finalIndexStat.ino };
247
+ const publishedDirectories = new Map([["", finalIndexIdentity]]);
248
+ const assertPublishedTree = async () => {
249
+ await options.assertDestination();
250
+ for (const [pathRelative, identity] of publishedDirectories) {
251
+ await assertClaimedRoot(pathRelative.length === 0 ? finalIndex : join(finalIndex, pathRelative), identity);
252
+ }
253
+ };
254
+ const directories = options.snapshot
255
+ .filter((entry) => entry.kind === "directory")
256
+ .sort((left, right) => left.pathRelative.split(sep).length - right.pathRelative.split(sep).length);
257
+ for (const entry of directories) {
258
+ await assertPublishedTree();
259
+ await assertTreeEntry(join(sourceIndex, entry.pathRelative), entry);
260
+ const destination = join(finalIndex, entry.pathRelative);
261
+ try {
262
+ await mkdir(destination, { mode: entry.mode });
263
+ }
264
+ catch (error) {
265
+ if (error.code === "EEXIST") {
266
+ throw new Error(`Refusing to publish managed memory over an existing path: ${destination}`);
267
+ }
268
+ throw error;
269
+ }
270
+ const created = await lstat(destination);
271
+ if (created.isSymbolicLink() || !created.isDirectory()) {
272
+ throw new Error("Refusing first-run managed memory because a published index directory is unsafe.");
273
+ }
274
+ publishedDirectories.set(entry.pathRelative, { dev: created.dev, ino: created.ino });
275
+ }
276
+ const ordinaryFiles = options.snapshot.filter((entry) => entry.kind === "file" && entry.pathRelative !== "manifest.json");
277
+ for (const entry of ordinaryFiles) {
278
+ await linkStagedFile(join(sourceIndex, entry.pathRelative), join(finalIndex, entry.pathRelative), entry, { assertDestination: assertPublishedTree });
279
+ }
280
+ for (const entry of [...directories].reverse()) {
281
+ await assertPublishedTree();
282
+ await fsyncPath(join(finalIndex, entry.pathRelative));
283
+ }
284
+ await assertPublishedTree();
285
+ await fsyncPath(finalIndex);
286
+ await fsyncPath(options.finalRoot);
287
+ // The manifest is the authority switch. Hard-linking it is atomic and
288
+ // no-replace on every supported filesystem, unlike rename(directory), which
289
+ // can silently replace an empty winner on macOS.
290
+ await linkStagedFile(join(sourceIndex, manifest.pathRelative), join(finalIndex, manifest.pathRelative), manifest, {
291
+ onLinkCreated: options.onManifestPublished,
292
+ assertDestination: assertPublishedTree,
293
+ ...(options.afterManifestLinked === undefined
294
+ ? {}
295
+ : { afterLinkVerified: async () => await options.afterManifestLinked?.(options.finalRoot) }),
296
+ });
297
+ await assertPublishedTree();
298
+ await fsyncPath(finalIndex);
299
+ await fsyncPath(options.finalRoot);
300
+ await fsyncPath(dirname(options.finalRoot));
301
+ // Remove only exact helper-owned source paths. Rmdir is intentionally
302
+ // non-recursive, so raced content remains untouched in the private staging
303
+ // tree rather than being deleted as collateral cleanup.
304
+ for (const entry of [...directories].reverse()) {
305
+ try {
306
+ await rmdir(join(sourceIndex, entry.pathRelative));
307
+ }
308
+ catch { /* raced content remains fail-closed */ }
309
+ }
310
+ try {
311
+ await rmdir(sourceIndex);
312
+ }
313
+ catch { /* raced content remains */ }
314
+ try {
315
+ await rmdir(options.stagingRoot);
316
+ }
317
+ catch { /* raced content remains */ }
318
+ }
319
+ function managedMemoryConfiguration(plan) {
320
+ const memory = plan.configJson.memory;
321
+ if (memory === undefined || (memory.backend ?? "bujo") !== "bujo")
322
+ return undefined;
323
+ if (memory.mode !== "journal" && memory.mode !== "bujo")
324
+ return undefined;
325
+ if (!plan.selectedModules.some((module) => module.id === `memory:${memory.mode}`)) {
326
+ throw new Error(`Refusing to initialize ${memory.mode} memory from a plan that did not select its built-in module.`);
327
+ }
328
+ if (typeof memory.path !== "string" || memory.path.trim().length === 0) {
329
+ throw new Error(`First-run ${memory.mode} memory requires a configured path.`);
330
+ }
331
+ const provider = memory.embeddings?.provider;
332
+ const model = memory.embeddings?.model;
333
+ if ((provider !== "ollama" && provider !== "lmstudio" && provider !== "openai")
334
+ || typeof model !== "string" || model.length === 0) {
335
+ throw new Error(`First-run ${memory.mode} memory requires a configured embedding provider and model.`);
336
+ }
337
+ const dimension = memory.embeddings?.dim ?? DEFAULT_MANAGED_MEMORY_DIMENSION;
338
+ if (!Number.isInteger(dimension) || dimension <= 0) {
339
+ throw new Error(`First-run ${memory.mode} memory requires a positive integer embedding dimension.`);
340
+ }
341
+ const endpoint = memory.embeddings?.endpoint?.trim();
342
+ const apiKeyEnv = memory.embeddings?.apiKeyEnv?.trim();
343
+ return {
344
+ mode: memory.mode,
345
+ path: memory.path,
346
+ provider,
347
+ model,
348
+ ...(endpoint === undefined || endpoint.length === 0 ? {} : { endpoint }),
349
+ ...(apiKeyEnv === undefined || apiKeyEnv.length === 0 ? {} : { apiKeyEnv }),
350
+ embeddingId: `${provider}:${model}`,
351
+ dimension,
352
+ };
353
+ }
354
+ function firstRunEmbeddingApiKey(configured, env) {
355
+ if (configured.apiKeyEnv === undefined)
356
+ return undefined;
357
+ const apiKey = env?.[configured.apiKeyEnv]?.trim();
358
+ if (apiKey === undefined || apiKey.length === 0) {
359
+ throw new Error(`First-run ${configured.mode} memory declares apiKeyEnv ${configured.apiKeyEnv}, but the supplied effective ` +
360
+ `environment has no non-empty value. Set ${configured.apiKeyEnv} and retry.`);
361
+ }
362
+ return apiKey;
363
+ }
364
+ async function proveFirstRunEmbeddingSelection(configured, env) {
365
+ const apiKey = firstRunEmbeddingApiKey(configured, env);
366
+ try {
367
+ if (configured.provider === "ollama" || configured.provider === "lmstudio") {
368
+ await probeMemoryEmbeddingSelection({
369
+ provider: configured.provider,
370
+ model: configured.model,
371
+ expectedDimension: configured.dimension,
372
+ timeoutMs: FIRST_RUN_EMBEDDING_PROBE_TIMEOUT_MS,
373
+ ...(configured.endpoint === undefined ? {} : { endpoint: configured.endpoint }),
374
+ ...(apiKey === undefined ? {} : { apiKey }),
375
+ });
376
+ return;
377
+ }
378
+ if (apiKey === undefined) {
379
+ throw new Error("OpenAI embeddings require apiKeyEnv pointing at a value in the supplied effective environment.");
380
+ }
381
+ const { createEmbeddingProvider } = await import("@mono-agent/memory/search");
382
+ const provider = createEmbeddingProvider({
383
+ provider: "openai",
384
+ model: configured.model,
385
+ apiKey,
386
+ timeoutMs: FIRST_RUN_EMBEDDING_PROBE_TIMEOUT_MS,
387
+ ...(configured.endpoint === undefined ? {} : { endpoint: configured.endpoint }),
388
+ });
389
+ const vectors = await provider.embed([FIRST_RUN_OPENAI_PROBE_TEXT]);
390
+ if (vectors.length !== 1 || vectors[0]?.length !== configured.dimension) {
391
+ throw new Error(`OpenAI returned dimension ${vectors[0]?.length ?? "unknown"} for ${configured.model}; ` +
392
+ `configured dimension is ${configured.dimension}.`);
393
+ }
394
+ }
395
+ catch (error) {
396
+ throw new Error(`First-run ${configured.mode} memory embedding readiness failed for ${configured.embeddingId}: ` +
397
+ `${error instanceof Error ? error.message : String(error)}`);
398
+ }
399
+ }
400
+ function assertNoManagedMemoryIdentityOverrides(plan, env) {
401
+ if (plan.configJson.memory === undefined || env === undefined)
402
+ return;
403
+ const override = FIRST_RUN_MANAGED_MEMORY_OVERRIDE_KEYS.find((key) => (env[key] ?? "").trim().length > 0);
404
+ if (override !== undefined) {
405
+ throw new Error(`Fresh managed memory init refuses ${override}; put the intended memory identity in the generated config.`);
406
+ }
407
+ }
408
+ async function resolveFirstRunManagedMemoryTarget(options) {
409
+ assertNoManagedMemoryIdentityOverrides(options.plan, options.env);
410
+ const configured = managedMemoryConfiguration(options.plan);
411
+ if (configured === undefined)
412
+ return undefined;
413
+ const agentRoot = await canonicalAgentRoot(options.agentRoot);
414
+ if (isAbsolute(configured.path)) {
415
+ throw new Error("Refusing first-run managed memory with an absolute path.");
416
+ }
417
+ const root = resolve(agentRoot, configured.path);
418
+ const rootRelative = relative(agentRoot, root);
419
+ if (rootRelative.length === 0 || escapesRoot(rootRelative)) {
420
+ throw new Error("Refusing first-run managed memory outside the agent folder.");
421
+ }
422
+ await assertExistingParentChainSafe(agentRoot, dirname(root));
423
+ return { configured, agentRoot, root };
424
+ }
425
+ /** Read-only refusal gate used before init writes any scaffold file. */
426
+ export async function preflightFirstRunManagedMemory(options) {
427
+ const target = await resolveFirstRunManagedMemoryTarget(options);
428
+ if (target === undefined)
429
+ return { initialized: false };
430
+ if (await optionalLstat(target.root) !== undefined) {
431
+ throw new Error(`Refusing to initialize managed memory because its root already exists: ${target.root}`);
432
+ }
433
+ return { initialized: false, root: target.root };
434
+ }
435
+ /**
436
+ * Create the initial managed Journal/BuJo generation for a newly generated
437
+ * init plan. This deliberately refuses every pre-existing memory root, claims
438
+ * the final root exclusively with a fail-closed marker, builds in a private
439
+ * same-parent directory, and publishes the manifest last with an atomic
440
+ * no-replace hard link. The native memory implementation is dynamically loaded
441
+ * only after confinement and the final root claim have been proven.
442
+ */
443
+ export async function initializeFirstRunManagedMemory(options) {
444
+ const target = await resolveFirstRunManagedMemoryTarget(options);
445
+ if (target === undefined)
446
+ return { initialized: false };
447
+ const { configured, agentRoot, root } = target;
448
+ throwIfAborted(options.abortSignal);
449
+ if (await optionalLstat(root) !== undefined) {
450
+ throw new Error(`Refusing to initialize managed memory because its root already exists: ${root}`);
451
+ }
452
+ await proveFirstRunEmbeddingSelection(configured, options.env);
453
+ throwIfAborted(options.abortSignal);
454
+ const pinnedParents = await pinRealDirectoryChain(agentRoot, dirname(root));
455
+ throwIfAborted(options.abortSignal);
456
+ await options.hooks?.beforeRootClaim?.(root);
457
+ throwIfAborted(options.abortSignal);
458
+ if (await optionalLstat(root) !== undefined) {
459
+ throw new Error(`Refusing to initialize managed memory because another creator won its root: ${root}`);
460
+ }
461
+ const stagingPrefix = join(dirname(root), `.${basename(root)}.first-run-`);
462
+ let stagingRoot;
463
+ let stagingIdentity;
464
+ let rootIdentity;
465
+ let markerIdentity;
466
+ const markerPath = join(root, FIRST_RUN_MEMORY_INITIALIZING_MARKER);
467
+ let published = false;
468
+ try {
469
+ await assertPinnedDirectoryChain(pinnedParents);
470
+ try {
471
+ await mkdir(root, { mode: 0o700 });
472
+ }
473
+ catch (error) {
474
+ if (error.code === "EEXIST") {
475
+ throw new Error(`Refusing to initialize managed memory because another creator won its root: ${root}`);
476
+ }
477
+ throw error;
478
+ }
479
+ const claimedRoot = await lstat(root);
480
+ if (claimedRoot.isSymbolicLink() || !claimedRoot.isDirectory()) {
481
+ throw new Error("Refusing first-run managed memory because the claimed root is not a real directory.");
482
+ }
483
+ rootIdentity = { dev: claimedRoot.dev, ino: claimedRoot.ino };
484
+ const assertDestination = async () => {
485
+ await assertPinnedDirectoryChain(pinnedParents);
486
+ await assertClaimedRoot(root, rootIdentity);
487
+ };
488
+ await assertDestination();
489
+ markerIdentity = await createDurableMarker(markerPath);
490
+ await assertDestination();
491
+ await fsyncPath(root);
492
+ await fsyncPath(dirname(root));
493
+ await options.hooks?.afterRootClaim?.(root);
494
+ throwIfAborted(options.abortSignal);
495
+ await assertDestination();
496
+ await assertPinnedDirectoryChain(pinnedParents);
497
+ stagingRoot = await mkdtemp(stagingPrefix);
498
+ const claimedStat = await lstat(stagingRoot);
499
+ if (claimedStat.isSymbolicLink() || !claimedStat.isDirectory()) {
500
+ throw new Error("Refusing first-run managed memory because the private staging root is not a real directory.");
501
+ }
502
+ stagingIdentity = { dev: claimedStat.dev, ino: claimedStat.ino };
503
+ // Keep native SQLite and the memory package out of dry/default init paths.
504
+ // The import happens only after the target has been confined and claimed.
505
+ const { safeRebuildMemoryIndex } = await import("@mono-agent/memory/bujo");
506
+ await options.hooks?.beforeRebuild?.(stagingRoot);
507
+ throwIfAborted(options.abortSignal);
508
+ await assertDestination();
509
+ await assertClaimedRoot(stagingRoot, stagingIdentity);
510
+ if ((await readdir(stagingRoot)).length > 0) {
511
+ throw new Error("Refusing first-run managed memory because the private staging root is no longer empty.");
512
+ }
513
+ let embedCalls = 0;
514
+ await safeRebuildMemoryIndex({
515
+ root: stagingRoot,
516
+ tier: configured.mode,
517
+ dim: configured.dimension,
518
+ embeddings: {
519
+ id: configured.embeddingId,
520
+ embed: async () => {
521
+ embedCalls += 1;
522
+ throw new Error("First-run managed memory attempted to embed an empty source.");
523
+ },
524
+ },
525
+ });
526
+ if (embedCalls !== 0) {
527
+ throw new Error("First-run managed memory invoked its no-call embedding provider.");
528
+ }
529
+ const sourceIndex = join(stagingRoot, ".index");
530
+ const stagedSnapshot = await snapshotTree(sourceIndex);
531
+ await options.hooks?.beforePromotion?.(stagingRoot, root);
532
+ throwIfAborted(options.abortSignal);
533
+ await assertDestination();
534
+ await assertClaimedRoot(stagingRoot, stagingIdentity);
535
+ if (treeSignature(await snapshotTree(sourceIndex)) !== treeSignature(stagedSnapshot)) {
536
+ throw new Error("Refusing first-run managed memory because the staged index changed concurrently.");
537
+ }
538
+ const finalEntries = (await readdir(root)).sort();
539
+ if (finalEntries.length !== 1 || finalEntries[0] !== FIRST_RUN_MEMORY_INITIALIZING_MARKER) {
540
+ throw new Error("Refusing first-run managed memory because the claimed root changed before publication.");
541
+ }
542
+ await promoteManagedIndex({
543
+ stagingRoot,
544
+ finalRoot: root,
545
+ snapshot: stagedSnapshot,
546
+ onManifestPublished: () => { published = true; },
547
+ assertDestination,
548
+ ...(options.hooks?.afterManifestLinked === undefined
549
+ ? {}
550
+ : { afterManifestLinked: options.hooks.afterManifestLinked }),
551
+ });
552
+ await assertDestination();
553
+ if (!await removeOwnedMarker(root, rootIdentity, markerPath, markerIdentity)) {
554
+ throw new Error("First-run managed memory could not remove its exact initialization marker.");
555
+ }
556
+ await assertDestination();
557
+ await fsyncPath(root);
558
+ await fsyncPath(dirname(root));
559
+ return { initialized: true, root };
560
+ }
561
+ catch (error) {
562
+ let parentsStable = false;
563
+ try {
564
+ await assertPinnedDirectoryChain(pinnedParents);
565
+ parentsStable = true;
566
+ }
567
+ catch {
568
+ // Never follow a replaced parent for cleanup.
569
+ }
570
+ if (parentsStable) {
571
+ if (!published && rootIdentity !== undefined && markerIdentity !== undefined) {
572
+ await removeOwnedMarker(root, rootIdentity, markerPath, markerIdentity);
573
+ }
574
+ if (stagingRoot !== undefined && stagingIdentity !== undefined) {
575
+ await cleanupEmptyClaimedRoot(stagingRoot, stagingIdentity);
576
+ }
577
+ if (!published && rootIdentity !== undefined) {
578
+ await cleanupEmptyClaimedRoot(root, rootIdentity);
579
+ }
580
+ }
581
+ throw error;
582
+ }
583
+ }
584
+ //# sourceMappingURL=first-run-managed-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"first-run-managed-memory.js","sourceRoot":"","sources":["../src/first-run-managed-memory.ts"],"names":[],"mappings":"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"}