managed-deepagents 0.4.0-dev.67 → 0.4.0-dev.69

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 (143) hide show
  1. package/README.md +1 -1
  2. package/dist/channels/assistant-text.d.ts +7 -0
  3. package/dist/channels/assistant-text.d.ts.map +1 -0
  4. package/dist/channels/assistant-text.js +28 -0
  5. package/dist/channels/assistant-text.js.map +1 -0
  6. package/dist/channels/binding.d.ts +34 -0
  7. package/dist/channels/binding.d.ts.map +1 -0
  8. package/dist/channels/binding.js +67 -0
  9. package/dist/channels/binding.js.map +1 -0
  10. package/dist/channels/errors.d.ts +11 -0
  11. package/dist/channels/errors.d.ts.map +1 -0
  12. package/dist/channels/errors.js +25 -0
  13. package/dist/channels/errors.js.map +1 -0
  14. package/dist/channels/index.d.ts +19 -0
  15. package/dist/channels/index.d.ts.map +1 -0
  16. package/dist/channels/index.js +14 -0
  17. package/dist/channels/index.js.map +1 -0
  18. package/dist/channels/runtime.d.ts +40 -0
  19. package/dist/channels/runtime.d.ts.map +1 -0
  20. package/dist/channels/runtime.js +76 -0
  21. package/dist/channels/runtime.js.map +1 -0
  22. package/dist/channels/schedule-delivery.d.ts +67 -0
  23. package/dist/channels/schedule-delivery.d.ts.map +1 -0
  24. package/dist/channels/schedule-delivery.js +193 -0
  25. package/dist/channels/schedule-delivery.js.map +1 -0
  26. package/dist/channels/slack/define.d.ts +87 -0
  27. package/dist/channels/slack/define.d.ts.map +1 -0
  28. package/dist/channels/slack/define.js +141 -0
  29. package/dist/channels/slack/define.js.map +1 -0
  30. package/dist/channels/slack/http.d.ts +86 -0
  31. package/dist/channels/slack/http.d.ts.map +1 -0
  32. package/dist/channels/slack/http.js +441 -0
  33. package/dist/channels/slack/http.js.map +1 -0
  34. package/dist/channels/slack/index.d.ts +18 -0
  35. package/dist/channels/slack/index.d.ts.map +1 -0
  36. package/dist/channels/slack/index.js +13 -0
  37. package/dist/channels/slack/index.js.map +1 -0
  38. package/dist/channels/slack/normalize.d.ts +62 -0
  39. package/dist/channels/slack/normalize.d.ts.map +1 -0
  40. package/dist/channels/slack/normalize.js +320 -0
  41. package/dist/channels/slack/normalize.js.map +1 -0
  42. package/dist/channels/slack/source-thread.d.ts +34 -0
  43. package/dist/channels/slack/source-thread.d.ts.map +1 -0
  44. package/dist/channels/slack/source-thread.js +92 -0
  45. package/dist/channels/slack/source-thread.js.map +1 -0
  46. package/dist/channels/slack/transport.d.ts +48 -0
  47. package/dist/channels/slack/transport.d.ts.map +1 -0
  48. package/dist/channels/slack/transport.js +178 -0
  49. package/dist/channels/slack/transport.js.map +1 -0
  50. package/dist/channels/store.d.ts +51 -0
  51. package/dist/channels/store.d.ts.map +1 -0
  52. package/dist/channels/store.js +76 -0
  53. package/dist/channels/store.js.map +1 -0
  54. package/dist/channels/types.d.ts +116 -0
  55. package/dist/channels/types.d.ts.map +1 -0
  56. package/dist/channels/types.js +24 -0
  57. package/dist/channels/types.js.map +1 -0
  58. package/dist/identity/links.d.ts +62 -0
  59. package/dist/identity/links.d.ts.map +1 -0
  60. package/dist/identity/links.js +176 -0
  61. package/dist/identity/links.js.map +1 -0
  62. package/dist/identity/slack-connect-http.d.ts +21 -0
  63. package/dist/identity/slack-connect-http.d.ts.map +1 -0
  64. package/dist/identity/slack-connect-http.js +129 -0
  65. package/dist/identity/slack-connect-http.js.map +1 -0
  66. package/dist/identity/slack-oauth.d.ts +60 -0
  67. package/dist/identity/slack-oauth.d.ts.map +1 -0
  68. package/dist/identity/slack-oauth.js +193 -0
  69. package/dist/identity/slack-oauth.js.map +1 -0
  70. package/dist/index.d.ts +6 -1
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +3 -0
  73. package/dist/index.js.map +1 -1
  74. package/dist/runtime/auth.d.ts +40 -0
  75. package/dist/runtime/auth.d.ts.map +1 -1
  76. package/dist/runtime/auth.js +123 -9
  77. package/dist/runtime/auth.js.map +1 -1
  78. package/dist/runtime/cors.d.ts +28 -0
  79. package/dist/runtime/cors.d.ts.map +1 -0
  80. package/dist/runtime/cors.js +92 -0
  81. package/dist/runtime/cors.js.map +1 -0
  82. package/dist/runtime/identity-http.d.ts +6 -0
  83. package/dist/runtime/identity-http.d.ts.map +1 -1
  84. package/dist/runtime/identity-http.js +90 -2
  85. package/dist/runtime/identity-http.js.map +1 -1
  86. package/dist/runtime/identity-runtime.d.ts +41 -1
  87. package/dist/runtime/identity-runtime.d.ts.map +1 -1
  88. package/dist/runtime/identity-runtime.js +142 -2
  89. package/dist/runtime/identity-runtime.js.map +1 -1
  90. package/dist/runtime/index.d.ts +3 -5
  91. package/dist/runtime/index.d.ts.map +1 -1
  92. package/dist/runtime/index.js +76 -209
  93. package/dist/runtime/index.js.map +1 -1
  94. package/dist/runtime/langsmith-connector.d.ts.map +1 -1
  95. package/dist/runtime/langsmith-connector.js +4 -3
  96. package/dist/runtime/langsmith-connector.js.map +1 -1
  97. package/dist/runtime/managed-tools.d.ts +6 -0
  98. package/dist/runtime/managed-tools.d.ts.map +1 -1
  99. package/dist/runtime/managed-tools.js +10 -0
  100. package/dist/runtime/managed-tools.js.map +1 -1
  101. package/dist/runtime/memory/context-io.d.ts +5 -0
  102. package/dist/runtime/memory/context-io.d.ts.map +1 -0
  103. package/dist/runtime/memory/context-io.js +28 -0
  104. package/dist/runtime/memory/context-io.js.map +1 -0
  105. package/dist/runtime/memory/index.d.ts +8 -0
  106. package/dist/runtime/memory/index.d.ts.map +1 -0
  107. package/dist/runtime/memory/index.js +6 -0
  108. package/dist/runtime/memory/index.js.map +1 -0
  109. package/dist/runtime/memory/mounts.d.ts +38 -0
  110. package/dist/runtime/memory/mounts.d.ts.map +1 -0
  111. package/dist/runtime/memory/mounts.js +185 -0
  112. package/dist/runtime/memory/mounts.js.map +1 -0
  113. package/dist/runtime/memory/paths.d.ts +10 -0
  114. package/dist/runtime/memory/paths.d.ts.map +1 -0
  115. package/dist/runtime/memory/paths.js +50 -0
  116. package/dist/runtime/memory/paths.js.map +1 -0
  117. package/dist/runtime/memory/seed.d.ts +30 -0
  118. package/dist/runtime/memory/seed.d.ts.map +1 -0
  119. package/dist/runtime/memory/seed.js +185 -0
  120. package/dist/runtime/memory/seed.js.map +1 -0
  121. package/dist/runtime/memory/user-repo.d.ts +19 -0
  122. package/dist/runtime/memory/user-repo.d.ts.map +1 -0
  123. package/dist/runtime/memory/user-repo.js +57 -0
  124. package/dist/runtime/memory/user-repo.js.map +1 -0
  125. package/dist/runtime/types.d.ts +11 -2
  126. package/dist/runtime/types.d.ts.map +1 -1
  127. package/dist/schedules.d.ts +6 -3
  128. package/dist/schedules.d.ts.map +1 -1
  129. package/dist/schedules.js +22 -0
  130. package/dist/schedules.js.map +1 -1
  131. package/dist/types.d.ts +5 -12
  132. package/dist/types.d.ts.map +1 -1
  133. package/dist/types.js +1 -1
  134. package/dist/types.js.map +1 -1
  135. package/package.json +15 -10
  136. package/dist/evals-run.d.ts +0 -3
  137. package/dist/evals-run.d.ts.map +0 -1
  138. package/dist/evals-run.js +0 -14
  139. package/dist/evals-run.js.map +0 -1
  140. package/dist/evals.d.ts +0 -238
  141. package/dist/evals.d.ts.map +0 -1
  142. package/dist/evals.js +0 -291
  143. package/dist/evals.js.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { resolveRuntimeChannel } from "../channels/binding.js";
1
2
  import { createCredentialsProvider, } from "./credentials.js";
2
3
  import { buildRuntimeIdentity, resolveRuntimeConfigurable, sanitizeConfigurable, } from "./identity-runtime.js";
3
4
  /**
@@ -14,6 +15,15 @@ export function managedRuntimeOverrides(runtime, cfg) {
14
15
  if (identity) {
15
16
  overrides.identity = identity;
16
17
  }
18
+ if (runtime?.channel) {
19
+ overrides.channel = runtime.channel;
20
+ }
21
+ else {
22
+ const fromBinding = resolveRuntimeChannel(configurable);
23
+ if (fromBinding) {
24
+ overrides.channel = fromBinding;
25
+ }
26
+ }
17
27
  if (cfg) {
18
28
  const credentials = createCredentialsProvider(cfg, identity);
19
29
  if (credentials) {
@@ -1 +1 @@
1
- {"version":3,"file":"managed-tools.js","sourceRoot":"","sources":["../../src/runtime/managed-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"managed-tools.js","sourceRoot":"","sources":["../../src/runtime/managed-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { BackendProtocolV2 } from "deepagents";
2
+ export declare function pathExists(path: string): Promise<boolean>;
3
+ export declare function downloadContextFile(backend: BackendProtocolV2, path: string): Promise<string | undefined>;
4
+ export declare function asText(content: string | Uint8Array): string;
5
+ //# sourceMappingURL=context-io.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-io.d.ts","sourceRoot":"","sources":["../../../src/runtime/memory/context-io.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU7B;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAK3D"}
@@ -0,0 +1,28 @@
1
+ import { access } from "node:fs/promises";
2
+ export async function pathExists(path) {
3
+ try {
4
+ await access(path);
5
+ return true;
6
+ }
7
+ catch {
8
+ return false;
9
+ }
10
+ }
11
+ export async function downloadContextFile(backend, path) {
12
+ if (typeof backend.downloadFiles !== "function") {
13
+ return undefined;
14
+ }
15
+ const responses = await backend.downloadFiles([path]);
16
+ const response = responses?.[0];
17
+ if (!response || response.error || response.content == null) {
18
+ return undefined;
19
+ }
20
+ return asText(response.content);
21
+ }
22
+ export function asText(content) {
23
+ if (typeof content === "string") {
24
+ return content;
25
+ }
26
+ return new TextDecoder().decode(content);
27
+ }
28
+ //# sourceMappingURL=context-io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-io.js","sourceRoot":"","sources":["../../../src/runtime/memory/context-io.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG1C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA0B,EAC1B,IAAY;IAEZ,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,OAA4B;IACjD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { asText, downloadContextFile, pathExists } from "./context-io.js";
2
+ export { managedContextBackend, managedContextPermissions, managedContextRoutes, MountedPathBackend, } from "./mounts.js";
3
+ export type { MemoryUserMount } from "./mounts.js";
4
+ export { ensureAbsolute, localMemoryHotPath, stripTrailingSlash, trimSlashes, } from "./paths.js";
5
+ export { ensureIdentityMemorySlice, ensureLocalMemorySlice, ensureUserMemorySeed, LOCAL_MEMORY_SEED, } from "./seed.js";
6
+ export { hasOrgMemory, openUserMemoryBackend, resolveMemoryRepoPrefix, resolveRunMemoryRepoHandle, } from "./user-repo.js";
7
+ export type { UserMemoryBackend } from "./user-repo.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { asText, downloadContextFile, pathExists } from "./context-io.js";
2
+ export { managedContextBackend, managedContextPermissions, managedContextRoutes, MountedPathBackend, } from "./mounts.js";
3
+ export { ensureAbsolute, localMemoryHotPath, stripTrailingSlash, trimSlashes, } from "./paths.js";
4
+ export { ensureIdentityMemorySlice, ensureLocalMemorySlice, ensureUserMemorySeed, LOCAL_MEMORY_SEED, } from "./seed.js";
5
+ export { hasOrgMemory, openUserMemoryBackend, resolveMemoryRepoPrefix, resolveRunMemoryRepoHandle, } from "./user-repo.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { CompositeBackend } from "deepagents";
2
+ import type { BackendProtocolV2 } from "deepagents";
3
+ /** How `/memories/user` is backed: a path in the deploy hub, or a whole user repo. */
4
+ export type MemoryUserMount = {
5
+ kind: "path";
6
+ repoPrefix: string;
7
+ } | {
8
+ kind: "repo";
9
+ backend: BackendProtocolV2;
10
+ } | null;
11
+ export declare function managedContextBackend(contextBackend: BackendProtocolV2, sandboxBackend: unknown | undefined, memoryUser: MemoryUserMount, mountOrgMemory: boolean): CompositeBackend;
12
+ export declare class MountedPathBackend {
13
+ private readonly backend;
14
+ private readonly target;
15
+ private constructor();
16
+ static directory(backend: BackendProtocolV2, repoPrefix: string, visiblePrefix: string): MountedPathBackend;
17
+ static file(backend: BackendProtocolV2, repoFile: string, visibleFile: string): MountedPathBackend;
18
+ ls(path?: string): Promise<import("deepagents").LsResult>;
19
+ read(filePath: string, offset?: number, limit?: number): Promise<import("deepagents").ReadResult>;
20
+ readRaw(filePath: string): Promise<import("deepagents").ReadRawResult>;
21
+ grep(pattern: string, path?: string | null, glob?: string | null): Promise<import("deepagents").GrepResult>;
22
+ glob(pattern: string, path?: string): Promise<import("deepagents").GlobResult>;
23
+ write(filePath: string, content: string): Promise<import("deepagents").WriteResult>;
24
+ edit(filePath: string, oldString: string, newString: string, replaceAll?: boolean): Promise<import("deepagents").EditResult>;
25
+ uploadFiles(files: Array<[string, Uint8Array]>): Promise<import("deepagents").FileUploadResponse[]>;
26
+ downloadFiles(paths: string[]): Promise<import("deepagents").FileDownloadResponse[]>;
27
+ private optional;
28
+ private toRepoPath;
29
+ private toRepoGlob;
30
+ private remapPathCollections;
31
+ private withVisiblePath;
32
+ private fromRepoPath;
33
+ private toVisiblePath;
34
+ private assertFileRootPath;
35
+ }
36
+ export declare function managedContextRoutes(contextBackend: BackendProtocolV2, memoryUser: MemoryUserMount, mountOrgMemory: boolean): Record<string, MountedPathBackend>;
37
+ export declare function managedContextPermissions(existing: unknown, mountOrgMemory: boolean): unknown[];
38
+ //# sourceMappingURL=mounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mounts.d.ts","sourceRoot":"","sources":["../../../src/runtime/memory/mounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAgB,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAsB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMxE,sFAAsF;AACtF,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC5C,IAAI,CAAC;AAET,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,iBAAiB,EACjC,cAAc,EAAE,OAAO,GAAG,SAAS,EACnC,UAAU,EAAE,eAAe,EAC3B,cAAc,EAAE,OAAO,oBAUxB;AAED,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFzB,OAAO;IAOP,MAAM,CAAC,SAAS,CACd,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM;IAQvB,MAAM,CAAC,IAAI,CACT,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM;IAQf,EAAE,CAAC,IAAI,SAAM;IAKb,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAItD,OAAO,CAAC,QAAQ,EAAE,MAAM;IAIxB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAShE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,SAAM;IAQhC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAKvC,IAAI,CACR,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,UAAQ;IAWd,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAa9C,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE;IAQnC,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,kBAAkB;CAU3B;AAED,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,iBAAiB,EACjC,UAAU,EAAE,eAAe,EAC3B,cAAc,EAAE,OAAO,sCAqCxB;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,OAAO,EACjB,cAAc,EAAE,OAAO,GACtB,OAAO,EAAE,CAaX"}
@@ -0,0 +1,185 @@
1
+ import { CompositeBackend, StateBackend } from "deepagents";
2
+ import { ensureAbsolute, stripTrailingSlash, trimSlashes } from "./paths.js";
3
+ export function managedContextBackend(contextBackend, sandboxBackend, memoryUser, mountOrgMemory) {
4
+ const routes = managedContextRoutes(contextBackend, memoryUser, mountOrgMemory);
5
+ const defaultBackend = (sandboxBackend ??
6
+ new StateBackend());
7
+ return new CompositeBackend(defaultBackend, routes);
8
+ }
9
+ export class MountedPathBackend {
10
+ backend;
11
+ target;
12
+ constructor(backend, target) {
13
+ this.backend = backend;
14
+ this.target = target;
15
+ }
16
+ static directory(backend, repoPrefix, visiblePrefix) {
17
+ return new MountedPathBackend(backend, {
18
+ repoPrefix: trimSlashes(repoPrefix),
19
+ visiblePrefix: stripTrailingSlash(ensureAbsolute(visiblePrefix)),
20
+ });
21
+ }
22
+ static file(backend, repoFile, visibleFile) {
23
+ return new MountedPathBackend(backend, {
24
+ repoFile: trimSlashes(repoFile),
25
+ visibleFile: ensureAbsolute(visibleFile),
26
+ });
27
+ }
28
+ async ls(path = "/") {
29
+ const result = await this.backend.ls(this.toRepoPath(path));
30
+ return this.remapPathCollections(result, "files");
31
+ }
32
+ async read(filePath, offset, limit) {
33
+ return this.backend.read(this.toRepoPath(filePath), offset, limit);
34
+ }
35
+ async readRaw(filePath) {
36
+ return this.backend.readRaw(this.toRepoPath(filePath));
37
+ }
38
+ async grep(pattern, path, glob) {
39
+ const result = await this.backend.grep(pattern, path === undefined || path === null ? path : this.toRepoPath(path), glob ? this.toRepoGlob(glob) : glob);
40
+ return this.remapPathCollections(result, "matches");
41
+ }
42
+ async glob(pattern, path = "/") {
43
+ const result = await this.backend.glob(this.toRepoGlob(pattern), this.toRepoPath(path));
44
+ return this.remapPathCollections(result, "files");
45
+ }
46
+ async write(filePath, content) {
47
+ const result = await this.backend.write(this.toRepoPath(filePath), content);
48
+ return this.withVisiblePath(result, filePath);
49
+ }
50
+ async edit(filePath, oldString, newString, replaceAll = false) {
51
+ const result = await this.backend.edit(this.toRepoPath(filePath), oldString, newString, replaceAll);
52
+ return this.withVisiblePath(result, filePath);
53
+ }
54
+ async uploadFiles(files) {
55
+ const upload = this.optional("uploadFiles");
56
+ const result = await upload(files.map(([path, content]) => [this.toRepoPath(path), content]));
57
+ return result.map((entry, index) => this.withVisiblePath(entry, files[index]?.[0] ?? "/"));
58
+ }
59
+ async downloadFiles(paths) {
60
+ const download = this.optional("downloadFiles");
61
+ const result = await download(paths.map((path) => this.toRepoPath(path)));
62
+ return result.map((entry, index) => this.withVisiblePath(entry, paths[index] ?? "/"));
63
+ }
64
+ optional(method) {
65
+ const fn = this.backend[method];
66
+ if (typeof fn !== "function") {
67
+ throw new Error(`Context Hub backend does not support ${method}`);
68
+ }
69
+ return fn.bind(this.backend);
70
+ }
71
+ toRepoPath(path) {
72
+ if ("repoFile" in this.target) {
73
+ this.assertFileRootPath(path);
74
+ return ensureAbsolute(this.target.repoFile);
75
+ }
76
+ const suffix = trimSlashes(path);
77
+ // Empty repoPrefix = mount the backend root (per-user Hub repos).
78
+ if (!this.target.repoPrefix) {
79
+ return ensureAbsolute(suffix);
80
+ }
81
+ const joined = suffix
82
+ ? `${this.target.repoPrefix}/${suffix}`
83
+ : this.target.repoPrefix;
84
+ return ensureAbsolute(joined);
85
+ }
86
+ toRepoGlob(pattern) {
87
+ if ("repoFile" in this.target) {
88
+ return pattern;
89
+ }
90
+ const suffix = trimSlashes(pattern);
91
+ if (!this.target.repoPrefix) {
92
+ return suffix;
93
+ }
94
+ return suffix
95
+ ? `${this.target.repoPrefix}/${suffix}`
96
+ : this.target.repoPrefix;
97
+ }
98
+ remapPathCollections(result, key) {
99
+ const value = result[key];
100
+ if (!value) {
101
+ return result;
102
+ }
103
+ return {
104
+ ...result,
105
+ [key]: value.map((entry) => ({
106
+ ...entry,
107
+ path: this.fromRepoPath(entry.path),
108
+ })),
109
+ };
110
+ }
111
+ withVisiblePath(result, backendPath) {
112
+ if (!("path" in result)) {
113
+ return result;
114
+ }
115
+ return { ...result, path: this.toVisiblePath(backendPath) };
116
+ }
117
+ fromRepoPath(path) {
118
+ const normalized = ensureAbsolute(path);
119
+ if ("repoFile" in this.target) {
120
+ return normalized === ensureAbsolute(this.target.repoFile)
121
+ ? "/"
122
+ : normalized;
123
+ }
124
+ if (!this.target.repoPrefix) {
125
+ return normalized;
126
+ }
127
+ const prefix = ensureAbsolute(this.target.repoPrefix);
128
+ if (normalized === prefix) {
129
+ return "/";
130
+ }
131
+ if (normalized.startsWith(`${prefix}/`)) {
132
+ return ensureAbsolute(normalized.slice(prefix.length));
133
+ }
134
+ return normalized;
135
+ }
136
+ toVisiblePath(path) {
137
+ if ("visibleFile" in this.target) {
138
+ return this.target.visibleFile;
139
+ }
140
+ const suffix = trimSlashes(path);
141
+ return suffix
142
+ ? `${this.target.visiblePrefix}/${suffix}`
143
+ : this.target.visiblePrefix;
144
+ }
145
+ assertFileRootPath(path) {
146
+ const normalized = ensureAbsolute(path);
147
+ if (normalized !== "/") {
148
+ const visible = "visibleFile" in this.target ? this.target.visibleFile : "/";
149
+ throw new Error(`Context Hub file mount ${visible} does not contain ${normalized}`);
150
+ }
151
+ }
152
+ }
153
+ export function managedContextRoutes(contextBackend, memoryUser, mountOrgMemory) {
154
+ const routes = {
155
+ "/instructions.md": MountedPathBackend.file(contextBackend, "instructions.md", "/instructions.md"),
156
+ "/skills/": MountedPathBackend.directory(contextBackend, "skills", "/skills"),
157
+ };
158
+ if (memoryUser?.kind === "path") {
159
+ // Shared agent (or legacy flat) slice inside the deployment Hub repo.
160
+ routes["/memories/user/"] = MountedPathBackend.directory(contextBackend, memoryUser.repoPrefix, "/memories/user");
161
+ }
162
+ else if (memoryUser?.kind === "repo") {
163
+ // Dedicated per-user Hub repo mounted at its root.
164
+ routes["/memories/user/"] = MountedPathBackend.directory(memoryUser.backend, "", "/memories/user");
165
+ }
166
+ if (mountOrgMemory) {
167
+ routes["/memories/org/"] = MountedPathBackend.directory(contextBackend, "org-memory", "/memories/org");
168
+ }
169
+ return routes;
170
+ }
171
+ export function managedContextPermissions(existing, mountOrgMemory) {
172
+ const deniedPaths = ["/instructions.md", "/skills/**"];
173
+ if (mountOrgMemory) {
174
+ deniedPaths.push("/memories/org/**");
175
+ }
176
+ const managed = [
177
+ {
178
+ operations: ["write"],
179
+ paths: deniedPaths,
180
+ mode: "deny",
181
+ },
182
+ ];
183
+ return Array.isArray(existing) ? [...managed, ...existing] : managed;
184
+ }
185
+ //# sourceMappingURL=mounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mounts.js","sourceRoot":"","sources":["../../../src/runtime/memory/mounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /** Trim leading/trailing `/` without regex (avoids CodeQL poly-ReDoS alerts). */
2
+ export declare function trimSlashes(path: string): string;
3
+ export declare function ensureAbsolute(path: string): string;
4
+ export declare function stripTrailingSlash(path: string): string;
5
+ /**
6
+ * Resolve ``memoryRepoPrefix/AGENTS.md`` under ``rootDir``, rejecting ``..``
7
+ * segments so a malicious actor id cannot escape the Context Hub mock root.
8
+ */
9
+ export declare function localMemoryHotPath(rootDir: string, memoryRepoPrefix: string): string;
10
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/runtime/memory/paths.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUhD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASvD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAsBR"}
@@ -0,0 +1,50 @@
1
+ import { resolve, sep } from "node:path";
2
+ /** Trim leading/trailing `/` without regex (avoids CodeQL poly-ReDoS alerts). */
3
+ export function trimSlashes(path) {
4
+ let start = 0;
5
+ let end = path.length;
6
+ while (start < end && path.charCodeAt(start) === 47) {
7
+ start += 1;
8
+ }
9
+ while (end > start && path.charCodeAt(end - 1) === 47) {
10
+ end -= 1;
11
+ }
12
+ return path.slice(start, end);
13
+ }
14
+ export function ensureAbsolute(path) {
15
+ return `/${trimSlashes(path)}`;
16
+ }
17
+ export function stripTrailingSlash(path) {
18
+ if (path.length <= 1) {
19
+ return path;
20
+ }
21
+ let end = path.length;
22
+ while (end > 1 && path.charCodeAt(end - 1) === 47) {
23
+ end -= 1;
24
+ }
25
+ return path.slice(0, end);
26
+ }
27
+ /**
28
+ * Resolve ``memoryRepoPrefix/AGENTS.md`` under ``rootDir``, rejecting ``..``
29
+ * segments so a malicious actor id cannot escape the Context Hub mock root.
30
+ */
31
+ export function localMemoryHotPath(rootDir, memoryRepoPrefix) {
32
+ const segments = memoryRepoPrefix
33
+ .split("/")
34
+ .filter((part) => part.length > 0);
35
+ for (const segment of segments) {
36
+ if (segment === "." || segment === "..") {
37
+ throw new Error(`invalid memory path segment in prefix: ${memoryRepoPrefix}`);
38
+ }
39
+ }
40
+ const rootResolved = resolve(rootDir);
41
+ const hotPath = resolve(rootResolved, ...segments, "AGENTS.md");
42
+ const rootPrefix = rootResolved.endsWith(sep)
43
+ ? rootResolved
44
+ : `${rootResolved}${sep}`;
45
+ if (!hotPath.startsWith(rootPrefix)) {
46
+ throw new Error(`memory slice path escapes context root: ${memoryRepoPrefix}`);
47
+ }
48
+ return hotPath;
49
+ }
50
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/runtime/memory/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEzC,iFAAiF;AACjF,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,OAAO,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QACpD,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACtD,GAAG,IAAI,CAAC,CAAC;IACX,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAClD,GAAG,IAAI,CAAC,CAAC;IACX,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,gBAAwB;IAExB,MAAM,QAAQ,GAAG,gBAAgB;SAC9B,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,0CAA0C,gBAAgB,EAAE,CAC7D,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,QAAQ,EAAE,WAAW,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC3C,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,GAAG,YAAY,GAAG,GAAG,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,2CAA2C,gBAAgB,EAAE,CAC9D,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { BackendProtocolV2 } from "deepagents";
2
+ /** Fallback hot-memory seed when the hub has no agent/flat AGENTS.md. */
3
+ export declare const LOCAL_MEMORY_SEED = "<!-- MANAGED-DEEPAGENTS MEMORY INSTRUCTIONS: DO NOT DELETE -->\n# Memory Instructions\n\nManaged Deep Agents mounts durable memory under `/memories/`:\n\n- `/memories/user/` \u2014 this run's private slice (read/write)\n- `/memories/org/` \u2014 optional org facts (read-only)\n\n## Hot memory \u2014 `/memories/user/AGENTS.md` (always loaded)\n\nUse this file for compact, high-value state that should be available every turn.\n\nRules:\n\n- Keep this file small. Prefer bullet points over long prose.\n- When adding new hot entries, remove or compress stale ones in the same edit.\n- Use only `read_file` / `edit_file` on `/memories/user/AGENTS.md` (not shell paths).\n- Cold files go under `/memories/user/` (for example `archive/`).\n- Do not write under `/memories/org/**`.\n- Do not store secrets, API keys, OAuth tokens, or passwords in any memory file.\n\n<!-- END MANAGED-DEEPAGENTS MEMORY INSTRUCTIONS: DO NOT DELETE -->\n";
4
+ /**
5
+ * Seed `/AGENTS.md` in a per-user memory repo from the deploy agent template.
6
+ * First write creates the Hub repo via LangSmith `pushAgent`.
7
+ */
8
+ export declare function ensureUserMemorySeed(options: {
9
+ userBackend: BackendProtocolV2;
10
+ deployBackend: BackendProtocolV2;
11
+ localRoot?: string;
12
+ deployRoot?: string;
13
+ }): Promise<void>;
14
+ /**
15
+ * Seed a missing identity memory slice (`memories/<actor|tenant>/AGENTS.md`).
16
+ *
17
+ * Copies the agent (or legacy flat) hot-memory seed when present; otherwise
18
+ * writes {@link LOCAL_MEMORY_SEED}. Local ``contextRoot`` mocks use the
19
+ * filesystem; remote Hub uses the Context Hub backend write API.
20
+ */
21
+ export declare function ensureIdentityMemorySlice(options: {
22
+ backend: BackendProtocolV2;
23
+ rootDir?: string;
24
+ memoryRepoPrefix: string;
25
+ }): Promise<void>;
26
+ /**
27
+ * Seed a missing identity memory slice under the local Context Hub mock.
28
+ */
29
+ export declare function ensureLocalMemorySlice(rootDir: string, memoryRepoPrefix: string): Promise<void>;
30
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../../src/runtime/memory/seed.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAmDpD,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,y6BAsB7B,CAAC;AAsBF;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,WAAW,EAAE,iBAAiB,CAAC;IAC/B,aAAa,EAAE,iBAAiB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDhB;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,EAAE;IACvD,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC,CAmBf"}
@@ -0,0 +1,185 @@
1
+ import { copyFile, mkdir, open, readFile, writeFile } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { downloadContextFile, pathExists } from "./context-io.js";
4
+ import { localMemoryHotPath, trimSlashes } from "./paths.js";
5
+ /**
6
+ * True when hot memory has inject-able body text.
7
+ *
8
+ * deepagents' Python MemoryMiddleware drops `<!-- ... -->` before injection, so
9
+ * blank or comment-only files surface as "(No memory loaded)". Uses a linear
10
+ * scan (no regex) so CodeQL does not flag sanitization / ReDoS patterns.
11
+ */
12
+ function hotMemoryHasBody(content) {
13
+ if (content === undefined) {
14
+ return false;
15
+ }
16
+ return nonCommentBodyLength(content) > 0;
17
+ }
18
+ /** Count non-whitespace characters outside HTML comments. */
19
+ function nonCommentBodyLength(content) {
20
+ let i = 0;
21
+ let count = 0;
22
+ const n = content.length;
23
+ while (i < n) {
24
+ if (content.startsWith("<!--", i)) {
25
+ const end = content.indexOf("-->", i + 4);
26
+ if (end === -1) {
27
+ // Unclosed comment: ignore the remainder (no inject-able body).
28
+ break;
29
+ }
30
+ i = end + 3;
31
+ continue;
32
+ }
33
+ const code = content.charCodeAt(i);
34
+ // Whitespace: space, tab, LF, CR, FF, VT
35
+ if (code !== 32 &&
36
+ code !== 9 &&
37
+ code !== 10 &&
38
+ code !== 13 &&
39
+ code !== 12 &&
40
+ code !== 11) {
41
+ count += 1;
42
+ }
43
+ i += 1;
44
+ }
45
+ return count;
46
+ }
47
+ /** Fallback hot-memory seed when the hub has no agent/flat AGENTS.md. */
48
+ export const LOCAL_MEMORY_SEED = `<!-- MANAGED-DEEPAGENTS MEMORY INSTRUCTIONS: DO NOT DELETE -->
49
+ # Memory Instructions
50
+
51
+ Managed Deep Agents mounts durable memory under \`/memories/\`:
52
+
53
+ - \`/memories/user/\` — this run's private slice (read/write)
54
+ - \`/memories/org/\` — optional org facts (read-only)
55
+
56
+ ## Hot memory — \`/memories/user/AGENTS.md\` (always loaded)
57
+
58
+ Use this file for compact, high-value state that should be available every turn.
59
+
60
+ Rules:
61
+
62
+ - Keep this file small. Prefer bullet points over long prose.
63
+ - When adding new hot entries, remove or compress stale ones in the same edit.
64
+ - Use only \`read_file\` / \`edit_file\` on \`/memories/user/AGENTS.md\` (not shell paths).
65
+ - Cold files go under \`/memories/user/\` (for example \`archive/\`).
66
+ - Do not write under \`/memories/org/**\`.
67
+ - Do not store secrets, API keys, OAuth tokens, or passwords in any memory file.
68
+
69
+ <!-- END MANAGED-DEEPAGENTS MEMORY INSTRUCTIONS: DO NOT DELETE -->
70
+ `;
71
+ async function writeSeedFileExclusive(path, content) {
72
+ let handle;
73
+ try {
74
+ handle = await open(path, "wx", 0o600);
75
+ }
76
+ catch (err) {
77
+ if (err.code === "EEXIST") {
78
+ return;
79
+ }
80
+ throw err;
81
+ }
82
+ try {
83
+ await handle.writeFile(content, "utf8");
84
+ }
85
+ finally {
86
+ await handle.close();
87
+ }
88
+ }
89
+ /**
90
+ * Seed `/AGENTS.md` in a per-user memory repo from the deploy agent template.
91
+ * First write creates the Hub repo via LangSmith `pushAgent`.
92
+ */
93
+ export async function ensureUserMemorySeed(options) {
94
+ const { userBackend, deployBackend, localRoot, deployRoot } = options;
95
+ if (localRoot !== undefined) {
96
+ const hotPath = join(localRoot, "AGENTS.md");
97
+ if (await pathExists(hotPath)) {
98
+ const existing = await readFile(hotPath, "utf8");
99
+ if (hotMemoryHasBody(existing)) {
100
+ return;
101
+ }
102
+ }
103
+ await mkdir(dirname(hotPath), { recursive: true, mode: 0o700 });
104
+ let seed = LOCAL_MEMORY_SEED;
105
+ if (deployRoot !== undefined) {
106
+ const agentHot = join(deployRoot, "memories", "agent", "AGENTS.md");
107
+ const flatHot = join(deployRoot, "memories", "AGENTS.md");
108
+ if (await pathExists(agentHot)) {
109
+ seed = await readFile(agentHot, "utf8");
110
+ }
111
+ else if (await pathExists(flatHot)) {
112
+ seed = await readFile(flatHot, "utf8");
113
+ }
114
+ }
115
+ if (await pathExists(hotPath)) {
116
+ // Blank / comment-only leftovers: overwrite (exclusive create would no-op).
117
+ await writeFile(hotPath, seed, "utf8");
118
+ return;
119
+ }
120
+ await writeSeedFileExclusive(hotPath, seed);
121
+ return;
122
+ }
123
+ if (hotMemoryHasBody(await downloadContextFile(userBackend, "/AGENTS.md"))) {
124
+ return;
125
+ }
126
+ const agentHot = await downloadContextFile(deployBackend, "/memories/agent/AGENTS.md");
127
+ const flatHot = await downloadContextFile(deployBackend, "/memories/AGENTS.md");
128
+ const content = agentHot !== undefined && hotMemoryHasBody(agentHot)
129
+ ? agentHot
130
+ : flatHot !== undefined && hotMemoryHasBody(flatHot)
131
+ ? flatHot
132
+ : LOCAL_MEMORY_SEED;
133
+ const result = await userBackend.write("/AGENTS.md", content);
134
+ const error = result && typeof result === "object" && "error" in result
135
+ ? result.error
136
+ : undefined;
137
+ if (error != null && error !== "") {
138
+ throw new Error(`failed to seed user hot memory: ${String(error)}`);
139
+ }
140
+ }
141
+ /**
142
+ * Seed a missing identity memory slice (`memories/<actor|tenant>/AGENTS.md`).
143
+ *
144
+ * Copies the agent (or legacy flat) hot-memory seed when present; otherwise
145
+ * writes {@link LOCAL_MEMORY_SEED}. Local ``contextRoot`` mocks use the
146
+ * filesystem; remote Hub uses the Context Hub backend write API.
147
+ */
148
+ export async function ensureIdentityMemorySlice(options) {
149
+ const { backend, rootDir, memoryRepoPrefix } = options;
150
+ if (rootDir !== undefined) {
151
+ await ensureLocalMemorySlice(rootDir, memoryRepoPrefix);
152
+ return;
153
+ }
154
+ const hotPath = `/${trimSlashes(memoryRepoPrefix)}/AGENTS.md`;
155
+ if ((await downloadContextFile(backend, hotPath)) !== undefined) {
156
+ return;
157
+ }
158
+ const agentHot = await downloadContextFile(backend, "/memories/agent/AGENTS.md");
159
+ const flatHot = await downloadContextFile(backend, "/memories/AGENTS.md");
160
+ await backend.write(hotPath, agentHot ?? flatHot ?? LOCAL_MEMORY_SEED);
161
+ }
162
+ /**
163
+ * Seed a missing identity memory slice under the local Context Hub mock.
164
+ */
165
+ export async function ensureLocalMemorySlice(rootDir, memoryRepoPrefix) {
166
+ const hotPath = localMemoryHotPath(rootDir, memoryRepoPrefix);
167
+ if (await pathExists(hotPath)) {
168
+ return;
169
+ }
170
+ await mkdir(dirname(hotPath), { recursive: true, mode: 0o700 });
171
+ const agentHot = join(rootDir, "memories", "agent", "AGENTS.md");
172
+ const flatHot = join(rootDir, "memories", "AGENTS.md");
173
+ if (await pathExists(agentHot)) {
174
+ await copyFile(agentHot, hotPath);
175
+ return;
176
+ }
177
+ if (await pathExists(flatHot)) {
178
+ await copyFile(flatHot, hotPath);
179
+ return;
180
+ }
181
+ // Exclusive create (wx) + 0600: avoids TOCTOU / symlink races under shared
182
+ // temp dirs (CodeQL js/insecure-temporary-file).
183
+ await writeSeedFileExclusive(hotPath, LOCAL_MEMORY_SEED);
184
+ }
185
+ //# sourceMappingURL=seed.js.map