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