common-memory-core 0.2.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 (284) hide show
  1. package/.env.sample +3 -0
  2. package/CHANGELOG.md +39 -0
  3. package/LICENSE +21 -0
  4. package/README.md +120 -0
  5. package/SECURITY.md +48 -0
  6. package/dist/cli/codex/transcript-0.153.4.d.ts +20 -0
  7. package/dist/cli/codex/transcript-0.153.4.d.ts.map +1 -0
  8. package/dist/cli/codex/transcript-0.153.4.js +78 -0
  9. package/dist/cli/codex/transcript-0.153.4.js.map +1 -0
  10. package/dist/cli/codex-config.d.ts +2 -0
  11. package/dist/cli/codex-config.d.ts.map +1 -0
  12. package/dist/cli/codex-config.js +5 -0
  13. package/dist/cli/codex-config.js.map +1 -0
  14. package/dist/cli/codex-hook.d.ts +18 -0
  15. package/dist/cli/codex-hook.d.ts.map +1 -0
  16. package/dist/cli/codex-hook.js +140 -0
  17. package/dist/cli/codex-hook.js.map +1 -0
  18. package/dist/cli/codex-session.d.ts +3 -0
  19. package/dist/cli/codex-session.d.ts.map +1 -0
  20. package/dist/cli/codex-session.js +3 -0
  21. package/dist/cli/codex-session.js.map +1 -0
  22. package/dist/cli/flush-command.d.ts +6 -0
  23. package/dist/cli/flush-command.d.ts.map +1 -0
  24. package/dist/cli/flush-command.js +30 -0
  25. package/dist/cli/flush-command.js.map +1 -0
  26. package/dist/cli/host-launch.d.ts +28 -0
  27. package/dist/cli/host-launch.d.ts.map +1 -0
  28. package/dist/cli/host-launch.js +16 -0
  29. package/dist/cli/host-launch.js.map +1 -0
  30. package/dist/cli/host-process.d.ts +3 -0
  31. package/dist/cli/host-process.d.ts.map +1 -0
  32. package/dist/cli/host-process.js +35 -0
  33. package/dist/cli/host-process.js.map +1 -0
  34. package/dist/cli/host-session.d.ts +22 -0
  35. package/dist/cli/host-session.d.ts.map +1 -0
  36. package/dist/cli/host-session.js +204 -0
  37. package/dist/cli/host-session.js.map +1 -0
  38. package/dist/cli/import-command.d.ts +20 -0
  39. package/dist/cli/import-command.d.ts.map +1 -0
  40. package/dist/cli/import-command.js +98 -0
  41. package/dist/cli/import-command.js.map +1 -0
  42. package/dist/cli/interactive-process.d.ts +3 -0
  43. package/dist/cli/interactive-process.d.ts.map +1 -0
  44. package/dist/cli/interactive-process.js +15 -0
  45. package/dist/cli/interactive-process.js.map +1 -0
  46. package/dist/cli/main.d.ts +3 -0
  47. package/dist/cli/main.d.ts.map +1 -0
  48. package/dist/cli/main.js +151 -0
  49. package/dist/cli/main.js.map +1 -0
  50. package/dist/cli/mcp-config.d.ts +16 -0
  51. package/dist/cli/mcp-config.d.ts.map +1 -0
  52. package/dist/cli/mcp-config.js +108 -0
  53. package/dist/cli/mcp-config.js.map +1 -0
  54. package/dist/cli/network-test.d.ts +4 -0
  55. package/dist/cli/network-test.d.ts.map +1 -0
  56. package/dist/cli/network-test.js +28 -0
  57. package/dist/cli/network-test.js.map +1 -0
  58. package/dist/cli/operations.d.ts +26 -0
  59. package/dist/cli/operations.d.ts.map +1 -0
  60. package/dist/cli/operations.js +55 -0
  61. package/dist/cli/operations.js.map +1 -0
  62. package/dist/cli/session-drain.d.ts +3 -0
  63. package/dist/cli/session-drain.d.ts.map +1 -0
  64. package/dist/cli/session-drain.js +34 -0
  65. package/dist/cli/session-drain.js.map +1 -0
  66. package/dist/cli/storage-paths.d.ts +4 -0
  67. package/dist/cli/storage-paths.d.ts.map +1 -0
  68. package/dist/cli/storage-paths.js +15 -0
  69. package/dist/cli/storage-paths.js.map +1 -0
  70. package/dist/cli/tui-integrations.d.ts +4 -0
  71. package/dist/cli/tui-integrations.d.ts.map +1 -0
  72. package/dist/cli/tui-integrations.js +143 -0
  73. package/dist/cli/tui-integrations.js.map +1 -0
  74. package/dist/cli/tui-prompts.d.ts +22 -0
  75. package/dist/cli/tui-prompts.d.ts.map +1 -0
  76. package/dist/cli/tui-prompts.js +64 -0
  77. package/dist/cli/tui-prompts.js.map +1 -0
  78. package/dist/cli/tui-settings.d.ts +21 -0
  79. package/dist/cli/tui-settings.d.ts.map +1 -0
  80. package/dist/cli/tui-settings.js +198 -0
  81. package/dist/cli/tui-settings.js.map +1 -0
  82. package/dist/cli/tui.d.ts +4 -0
  83. package/dist/cli/tui.d.ts.map +1 -0
  84. package/dist/cli/tui.js +292 -0
  85. package/dist/cli/tui.js.map +1 -0
  86. package/dist/cli/work-config.d.ts +24 -0
  87. package/dist/cli/work-config.d.ts.map +1 -0
  88. package/dist/cli/work-config.js +147 -0
  89. package/dist/cli/work-config.js.map +1 -0
  90. package/dist/config/config.d.ts +41 -0
  91. package/dist/config/config.d.ts.map +1 -0
  92. package/dist/config/config.js +193 -0
  93. package/dist/config/config.js.map +1 -0
  94. package/dist/config/private-env.d.ts +8 -0
  95. package/dist/config/private-env.d.ts.map +1 -0
  96. package/dist/config/private-env.js +38 -0
  97. package/dist/config/private-env.js.map +1 -0
  98. package/dist/config/runtime.d.ts +32 -0
  99. package/dist/config/runtime.d.ts.map +1 -0
  100. package/dist/config/runtime.js +85 -0
  101. package/dist/config/runtime.js.map +1 -0
  102. package/dist/core/contracts/errors.d.ts +10 -0
  103. package/dist/core/contracts/errors.d.ts.map +1 -0
  104. package/dist/core/contracts/errors.js +23 -0
  105. package/dist/core/contracts/errors.js.map +1 -0
  106. package/dist/core/safety/external-preflight.d.ts +7 -0
  107. package/dist/core/safety/external-preflight.d.ts.map +1 -0
  108. package/dist/core/safety/external-preflight.js +47 -0
  109. package/dist/core/safety/external-preflight.js.map +1 -0
  110. package/dist/core/safety/redaction.d.ts +2 -0
  111. package/dist/core/safety/redaction.d.ts.map +1 -0
  112. package/dist/core/safety/redaction.js +4 -0
  113. package/dist/core/safety/redaction.js.map +1 -0
  114. package/dist/core/safety/rules.d.ts +6 -0
  115. package/dist/core/safety/rules.d.ts.map +1 -0
  116. package/dist/core/safety/rules.js +14 -0
  117. package/dist/core/safety/rules.js.map +1 -0
  118. package/dist/core/safety/scanner.d.ts +11 -0
  119. package/dist/core/safety/scanner.d.ts.map +1 -0
  120. package/dist/core/safety/scanner.js +18 -0
  121. package/dist/core/safety/scanner.js.map +1 -0
  122. package/dist/core/transaction/fsync.d.ts +6 -0
  123. package/dist/core/transaction/fsync.d.ts.map +1 -0
  124. package/dist/core/transaction/fsync.js +41 -0
  125. package/dist/core/transaction/fsync.js.map +1 -0
  126. package/dist/index.d.ts +16 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +13 -0
  129. package/dist/index.js.map +1 -0
  130. package/dist/mcp/ingress.d.ts +61 -0
  131. package/dist/mcp/ingress.d.ts.map +1 -0
  132. package/dist/mcp/ingress.js +134 -0
  133. package/dist/mcp/ingress.js.map +1 -0
  134. package/dist/mcp/server.d.ts +4 -0
  135. package/dist/mcp/server.d.ts.map +1 -0
  136. package/dist/mcp/server.js +92 -0
  137. package/dist/mcp/server.js.map +1 -0
  138. package/dist/mcp/stdio.d.ts +5 -0
  139. package/dist/mcp/stdio.d.ts.map +1 -0
  140. package/dist/mcp/stdio.js +115 -0
  141. package/dist/mcp/stdio.js.map +1 -0
  142. package/dist/memory-manager/contracts/diagnostic.d.ts +14 -0
  143. package/dist/memory-manager/contracts/diagnostic.d.ts.map +1 -0
  144. package/dist/memory-manager/contracts/diagnostic.js +17 -0
  145. package/dist/memory-manager/contracts/diagnostic.js.map +1 -0
  146. package/dist/memory-manager/contracts/disclosure.d.ts +12 -0
  147. package/dist/memory-manager/contracts/disclosure.d.ts.map +1 -0
  148. package/dist/memory-manager/contracts/disclosure.js +8 -0
  149. package/dist/memory-manager/contracts/disclosure.js.map +1 -0
  150. package/dist/memory-manager/contracts/errors.d.ts +15 -0
  151. package/dist/memory-manager/contracts/errors.d.ts.map +1 -0
  152. package/dist/memory-manager/contracts/errors.js +25 -0
  153. package/dist/memory-manager/contracts/errors.js.map +1 -0
  154. package/dist/memory-manager/contracts/model-port.d.ts +38 -0
  155. package/dist/memory-manager/contracts/model-port.d.ts.map +1 -0
  156. package/dist/memory-manager/contracts/model-port.js +2 -0
  157. package/dist/memory-manager/contracts/model-port.js.map +1 -0
  158. package/dist/memory-manager/network/client.d.ts +13 -0
  159. package/dist/memory-manager/network/client.d.ts.map +1 -0
  160. package/dist/memory-manager/network/client.js +122 -0
  161. package/dist/memory-manager/network/client.js.map +1 -0
  162. package/dist/memory-manager/network/route.d.ts +31 -0
  163. package/dist/memory-manager/network/route.d.ts.map +1 -0
  164. package/dist/memory-manager/network/route.js +148 -0
  165. package/dist/memory-manager/network/route.js.map +1 -0
  166. package/dist/memory-manager/openai/abort.d.ts +4 -0
  167. package/dist/memory-manager/openai/abort.d.ts.map +1 -0
  168. package/dist/memory-manager/openai/abort.js +19 -0
  169. package/dist/memory-manager/openai/abort.js.map +1 -0
  170. package/dist/memory-manager/openai/bounded-body.d.ts +2 -0
  171. package/dist/memory-manager/openai/bounded-body.d.ts.map +1 -0
  172. package/dist/memory-manager/openai/bounded-body.js +49 -0
  173. package/dist/memory-manager/openai/bounded-body.js.map +1 -0
  174. package/dist/memory-manager/openai/openai-chat-adapter.d.ts +16 -0
  175. package/dist/memory-manager/openai/openai-chat-adapter.d.ts.map +1 -0
  176. package/dist/memory-manager/openai/openai-chat-adapter.js +51 -0
  177. package/dist/memory-manager/openai/openai-chat-adapter.js.map +1 -0
  178. package/dist/memory-manager/openai/openai-responses-adapter.d.ts +15 -0
  179. package/dist/memory-manager/openai/openai-responses-adapter.d.ts.map +1 -0
  180. package/dist/memory-manager/openai/openai-responses-adapter.js +14 -0
  181. package/dist/memory-manager/openai/openai-responses-adapter.js.map +1 -0
  182. package/dist/memory-manager/openai/options.d.ts +14 -0
  183. package/dist/memory-manager/openai/options.d.ts.map +1 -0
  184. package/dist/memory-manager/openai/options.js +29 -0
  185. package/dist/memory-manager/openai/options.js.map +1 -0
  186. package/dist/memory-manager/openai/remote-http.d.ts +33 -0
  187. package/dist/memory-manager/openai/remote-http.d.ts.map +1 -0
  188. package/dist/memory-manager/openai/remote-http.js +207 -0
  189. package/dist/memory-manager/openai/remote-http.js.map +1 -0
  190. package/dist/memory-manager/openai/response-decoder.d.ts +3 -0
  191. package/dist/memory-manager/openai/response-decoder.d.ts.map +1 -0
  192. package/dist/memory-manager/openai/response-decoder.js +57 -0
  193. package/dist/memory-manager/openai/response-decoder.js.map +1 -0
  194. package/dist/memory-manager/openai/retry.d.ts +8 -0
  195. package/dist/memory-manager/openai/retry.d.ts.map +1 -0
  196. package/dist/memory-manager/openai/retry.js +18 -0
  197. package/dist/memory-manager/openai/retry.js.map +1 -0
  198. package/dist/pi-extension/extraction-runtime.d.ts +51 -0
  199. package/dist/pi-extension/extraction-runtime.d.ts.map +1 -0
  200. package/dist/pi-extension/extraction-runtime.js +87 -0
  201. package/dist/pi-extension/extraction-runtime.js.map +1 -0
  202. package/dist/pi-extension/index.d.ts +19 -0
  203. package/dist/pi-extension/index.d.ts.map +1 -0
  204. package/dist/pi-extension/index.js +172 -0
  205. package/dist/pi-extension/index.js.map +1 -0
  206. package/dist/v2/canonical.d.ts +53 -0
  207. package/dist/v2/canonical.d.ts.map +1 -0
  208. package/dist/v2/canonical.js +321 -0
  209. package/dist/v2/canonical.js.map +1 -0
  210. package/dist/v2/contract.d.ts +34 -0
  211. package/dist/v2/contract.d.ts.map +1 -0
  212. package/dist/v2/contract.js +53 -0
  213. package/dist/v2/contract.js.map +1 -0
  214. package/dist/v2/document-import.d.ts +100 -0
  215. package/dist/v2/document-import.d.ts.map +1 -0
  216. package/dist/v2/document-import.js +259 -0
  217. package/dist/v2/document-import.js.map +1 -0
  218. package/dist/v2/errors.d.ts +6 -0
  219. package/dist/v2/errors.d.ts.map +1 -0
  220. package/dist/v2/errors.js +29 -0
  221. package/dist/v2/errors.js.map +1 -0
  222. package/dist/v2/import.d.ts +26 -0
  223. package/dist/v2/import.d.ts.map +1 -0
  224. package/dist/v2/import.js +48 -0
  225. package/dist/v2/import.js.map +1 -0
  226. package/dist/v2/lock.d.ts +3 -0
  227. package/dist/v2/lock.d.ts.map +1 -0
  228. package/dist/v2/lock.js +47 -0
  229. package/dist/v2/lock.js.map +1 -0
  230. package/dist/v2/memory-maintainer.md +38 -0
  231. package/dist/v2/read-guidance.d.ts +3 -0
  232. package/dist/v2/read-guidance.d.ts.map +1 -0
  233. package/dist/v2/read-guidance.js +3 -0
  234. package/dist/v2/read-guidance.js.map +1 -0
  235. package/dist/v2/reader.d.ts +25 -0
  236. package/dist/v2/reader.d.ts.map +1 -0
  237. package/dist/v2/reader.js +38 -0
  238. package/dist/v2/reader.js.map +1 -0
  239. package/dist/v2/registry.d.ts +14 -0
  240. package/dist/v2/registry.d.ts.map +1 -0
  241. package/dist/v2/registry.js +46 -0
  242. package/dist/v2/registry.js.map +1 -0
  243. package/dist/v2/runtime.d.ts +133 -0
  244. package/dist/v2/runtime.d.ts.map +1 -0
  245. package/dist/v2/runtime.js +326 -0
  246. package/dist/v2/runtime.js.map +1 -0
  247. package/dist/v2/session-drain.d.ts +14 -0
  248. package/dist/v2/session-drain.d.ts.map +1 -0
  249. package/dist/v2/session-drain.js +16 -0
  250. package/dist/v2/session-drain.js.map +1 -0
  251. package/dist/v2/session.d.ts +54 -0
  252. package/dist/v2/session.d.ts.map +1 -0
  253. package/dist/v2/session.js +158 -0
  254. package/dist/v2/session.js.map +1 -0
  255. package/dist/v2/writer.d.ts +40 -0
  256. package/dist/v2/writer.d.ts.map +1 -0
  257. package/dist/v2/writer.js +327 -0
  258. package/dist/v2/writer.js.map +1 -0
  259. package/docs/00-index.md +19 -0
  260. package/docs/03-target-architecture.md +49 -0
  261. package/docs/init-v0.1-closeout.md +152 -0
  262. package/docs/init-v0.1-design.md +237 -0
  263. package/docs/init-v0.1-verification.md +303 -0
  264. package/docs/outbound-network-design.md +100 -0
  265. package/docs/outbound-network-verification.json +300 -0
  266. package/docs/provider-verification.md +94 -0
  267. package/docs/releasing.md +138 -0
  268. package/docs/session-integration.md +134 -0
  269. package/docs/tui-workbench.md +173 -0
  270. package/docs/usage.md +815 -0
  271. package/docs/v2-ablation-results.json +12035 -0
  272. package/docs/v2-ablation.md +117 -0
  273. package/docs/v2-evaluation-repeat-results.json +7 -0
  274. package/docs/v2-evaluation-scripted-results.json +67 -0
  275. package/docs/v2-evaluation.md +35 -0
  276. package/docs/v2-optimization-plan.md +23 -0
  277. package/docs/v2-performance-baseline-runtime.js.txt +231 -0
  278. package/docs/v2-performance-baseline.json +338 -0
  279. package/docs/v2-performance-behavior-equivalence.json +17 -0
  280. package/docs/v2-performance-results.json +585 -0
  281. package/docs/v2-performance.md +88 -0
  282. package/docs/v2-replacement-test-map.md +14 -0
  283. package/docs/v2-verification.md +49 -0
  284. package/package.json +87 -0
@@ -0,0 +1,12 @@
1
+ type ProvenanceType = "user_explicit" | "agent_observation" | "document_import" | "conversation_context";
2
+ export interface RemoteDisclosurePolicy {
3
+ enabled: true;
4
+ allowedScopes: readonly string[];
5
+ allowedProvenance: readonly ProvenanceType[];
6
+ maxExcerptBytes: number;
7
+ maxCandidateBytes: number;
8
+ maxTotalBytes: number;
9
+ }
10
+ export declare function validateDisclosurePolicy(value: RemoteDisclosurePolicy): void;
11
+ export {};
12
+ //# sourceMappingURL=disclosure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disclosure.d.ts","sourceRoot":"","sources":["../../../src/memory-manager/contracts/disclosure.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,GAAG,eAAe,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,sBAAsB,CAAC;AACzG,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,IAAI,CAAC;IACd,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,iBAAiB,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AACD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAG5E"}
@@ -0,0 +1,8 @@
1
+ export function validateDisclosurePolicy(value) {
2
+ if (value?.enabled !== true || !Array.isArray(value.allowedScopes) || !Array.isArray(value.allowedProvenance))
3
+ throw new TypeError("Remote disclosure must be explicitly enabled");
4
+ for (const cap of [value.maxExcerptBytes, value.maxCandidateBytes, value.maxTotalBytes])
5
+ if (!Number.isSafeInteger(cap) || cap <= 0)
6
+ throw new TypeError("Remote disclosure byte caps must be positive integers");
7
+ }
8
+ //# sourceMappingURL=disclosure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disclosure.js","sourceRoot":"","sources":["../../../src/memory-manager/contracts/disclosure.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,wBAAwB,CAAC,KAA6B;IACpE,IAAI,KAAK,EAAE,OAAO,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;IACnL,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,uDAAuD,CAAC,CAAC;AACpN,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type FailureDiagnostic } from "./diagnostic.js";
2
+ export declare const MEMORY_MODEL_ERROR_CODES: readonly ["CONFIGURATION", "PROXY_AUTHENTICATION", "TIMEOUT", "CANCELLED", "RATE_LIMITED", "UNAVAILABLE", "AUTHENTICATION", "INVALID_RESPONSE"];
3
+ export type MemoryModelErrorCode = typeof MEMORY_MODEL_ERROR_CODES[number];
4
+ export declare class MemoryModelError extends Error {
5
+ readonly code: MemoryModelErrorCode;
6
+ readonly retryable: boolean;
7
+ readonly diagnostic: FailureDiagnostic | null;
8
+ constructor(code: MemoryModelErrorCode, message: string, retryable?: boolean, diagnostic?: FailureDiagnostic);
9
+ }
10
+ export declare class MemoryManagerError extends Error {
11
+ readonly code: "REMOTE_DISABLED" | "DISCLOSURE_BLOCKED" | "INVALID_ANALYSIS" | "DEFERRED";
12
+ readonly details: Readonly<Record<string, unknown>>;
13
+ constructor(code: "REMOTE_DISABLED" | "DISCLOSURE_BLOCKED" | "INVALID_ANALYSIS" | "DEFERRED", message: string, details?: Readonly<Record<string, unknown>>);
14
+ }
15
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/memory-manager/contracts/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,eAAO,MAAM,wBAAwB,iJAAkJ,CAAC;AACxL,MAAM,MAAM,oBAAoB,GAAG,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAC3E,qBAAa,gBAAiB,SAAQ,KAAK;IAE7B,QAAQ,CAAC,IAAI,EAAE,oBAAoB;IAAmB,QAAQ,CAAC,SAAS;IADpF,QAAQ,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC;gBACzB,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,EAAW,SAAS,UAAQ,EAAE,UAAU,CAAC,EAAE,iBAAiB;CAC7H;AACD,qBAAa,kBAAmB,SAAQ,KAAK;IAC/B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,kBAAkB,GAAG,UAAU;IAAmB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAAtJ,IAAI,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,kBAAkB,GAAG,UAAU,EAAE,OAAO,EAAE,MAAM,EAAW,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;CACjL"}
@@ -0,0 +1,25 @@
1
+ import { sanitizeDiagnostic } from "./diagnostic.js";
2
+ export const MEMORY_MODEL_ERROR_CODES = ["CONFIGURATION", "PROXY_AUTHENTICATION", "TIMEOUT", "CANCELLED", "RATE_LIMITED", "UNAVAILABLE", "AUTHENTICATION", "INVALID_RESPONSE"];
3
+ export class MemoryModelError extends Error {
4
+ code;
5
+ retryable;
6
+ diagnostic;
7
+ constructor(code, message, retryable = false, diagnostic) {
8
+ super(message);
9
+ this.code = code;
10
+ this.retryable = retryable;
11
+ this.name = "MemoryModelError";
12
+ this.diagnostic = sanitizeDiagnostic(diagnostic);
13
+ }
14
+ }
15
+ export class MemoryManagerError extends Error {
16
+ code;
17
+ details;
18
+ constructor(code, message, details = {}) {
19
+ super(message);
20
+ this.code = code;
21
+ this.details = details;
22
+ this.name = "MemoryManagerError";
23
+ }
24
+ }
25
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/memory-manager/contracts/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA0B,MAAM,iBAAiB,CAAC;AAC7E,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,eAAe,EAAE,sBAAsB,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,CAAU,CAAC;AAExL,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAEpB;IAAsD;IADlE,UAAU,CAA2B;IAC9C,YAAqB,IAA0B,EAAE,OAAe,EAAW,YAAY,KAAK,EAAE,UAA8B;QAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAA1H,SAAI,GAAJ,IAAI,CAAsB;QAA4B,cAAS,GAAT,SAAS,CAAQ;QAAoD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAAC,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAAC,CAAC;CACpO;AACD,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IACtB;IAA4G;IAAjI,YAAqB,IAAgF,EAAE,OAAe,EAAW,UAA6C,EAAE;QAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAA9K,SAAI,GAAJ,IAAI,CAA4E;QAA4B,YAAO,GAAP,OAAO,CAAwC;QAAoB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IAAC,CAAC;CACxO"}
@@ -0,0 +1,38 @@
1
+ import type { DiagnosticStage } from "./diagnostic.js";
2
+ export interface ModelUsage {
3
+ inputTokens?: number;
4
+ outputTokens?: number;
5
+ totalTokens?: number;
6
+ }
7
+ export interface ApprovedModelRequest {
8
+ prompt: string;
9
+ projection: Readonly<Record<string, unknown>>;
10
+ schema: Readonly<Record<string, unknown>>;
11
+ schemaName?: string;
12
+ }
13
+ export type MemoryModelResult = {
14
+ kind: "output";
15
+ body: unknown;
16
+ usage: ModelUsage;
17
+ } | {
18
+ kind: "refusal";
19
+ category: "provider_refusal";
20
+ fingerprint: string;
21
+ usage: ModelUsage;
22
+ };
23
+ /** Bounded progress facts let the caller retain HTTP context when it must fence a stalled model. */
24
+ export interface ModelDiagnosticContext {
25
+ stage: DiagnosticStage;
26
+ httpStatus?: number;
27
+ }
28
+ export interface AnalyzeOptions {
29
+ onDiagnosticContext?: (context: ModelDiagnosticContext) => void;
30
+ requestId: string;
31
+ signal?: AbortSignal;
32
+ deadlineMs: number;
33
+ }
34
+ export interface MemoryModelPort {
35
+ serializedRequestBytes?(request: ApprovedModelRequest): number;
36
+ analyze(request: ApprovedModelRequest, options: AnalyzeOptions): Promise<MemoryModelResult>;
37
+ }
38
+ //# sourceMappingURL=model-port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-port.d.ts","sourceRoot":"","sources":["../../../src/memory-manager/contracts/model-port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,MAAM,WAAW,UAAU;IAAG,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE;AACjG,MAAM,WAAW,oBAAoB;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE;AACvK,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAC9F,oGAAoG;AACpG,MAAM,WAAW,sBAAsB;IAAG,KAAK,EAAE,eAAe,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE;AACvF,MAAM,WAAW,cAAc;IAAG,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AAChK,MAAM,WAAW,eAAe;IAAG,sBAAsB,CAAC,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAAC;IAAC,OAAO,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;CAAE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=model-port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-port.js","sourceRoot":"","sources":["../../../src/memory-manager/contracts/model-port.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { MemoryModelError } from '../contracts/errors.js';
2
+ import { type ResolvedRoute } from './route.js';
3
+ /** One fixed origin and route, owned by one model client. No global dispatcher mutation. */
4
+ export declare class NetworkClient {
5
+ #private;
6
+ constructor(endpoint: string, route: ResolvedRoute, caFile?: string);
7
+ get route(): ResolvedRoute['description'];
8
+ readonly fetch: typeof fetch;
9
+ close(): Promise<void>;
10
+ }
11
+ /** Inspect only bounded, allowlisted transport codes; never persist exception text or URLs. */
12
+ export declare function networkFailure(error: unknown, proxied: boolean): MemoryModelError;
13
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/memory-manager/network/client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEpE,4FAA4F;AAC5F,qBAAa,aAAa;;gBAMZ,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,MAAM;IAWnE,IAAI,KAAK,IAAI,aAAa,CAAC,aAAa,CAAC,CAA6B;IACtE,QAAQ,CAAC,KAAK,EAAE,OAAO,KAAK,CAY1B;IACF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAIvB;AAqBD,+FAA+F;AAC/F,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAwBjF"}
@@ -0,0 +1,122 @@
1
+ import { openSync, constants, fstatSync, readSync, closeSync } from 'node:fs';
2
+ import { X509Certificate } from 'node:crypto';
3
+ import { getCACertificates } from 'node:tls';
4
+ import { Agent, ProxyAgent, fetch as undiciFetch } from 'undici';
5
+ import { MemoryModelError } from '../contracts/errors.js';
6
+ import { networkConfigError } from './route.js';
7
+ /** One fixed origin and route, owned by one model client. No global dispatcher mutation. */
8
+ export class NetworkClient {
9
+ #borrowedFetch;
10
+ #dispatcher;
11
+ #origin;
12
+ #route;
13
+ #closing;
14
+ constructor(endpoint, route, caFile) {
15
+ this.#origin = new URL(endpoint).origin;
16
+ this.#route = Object.freeze({ ...route.description });
17
+ if (route.description.mode === 'legacy') {
18
+ this.#borrowedFetch = globalThis.fetch;
19
+ return;
20
+ }
21
+ const tls = { rejectUnauthorized: true, ...(caFile === undefined ? {} : { ca: readCertificates(caFile) }) };
22
+ try {
23
+ this.#dispatcher = route.proxyUrl
24
+ ? new ProxyAgent({ uri: route.proxyUrl, requestTls: tls, ...(route.description.protocol === "https" ? { proxyTls: tls } : {}) })
25
+ : new Agent({ connect: tls });
26
+ }
27
+ catch {
28
+ throw networkConfigError();
29
+ }
30
+ }
31
+ get route() { return { ...this.#route }; }
32
+ fetch = async (input, init) => {
33
+ if (this.#closing)
34
+ throw new MemoryModelError('CANCELLED', 'Network client is closed');
35
+ const url = new URL(typeof input === 'string' ? input : input instanceof URL ? input.href : input.url);
36
+ if (url.origin !== this.#origin)
37
+ throw networkConfigError();
38
+ // Legacy deliberately borrows the host route, including its historic redirect behavior.
39
+ if (!this.#dispatcher)
40
+ return this.#borrowedFetch(input, init);
41
+ try {
42
+ return await undiciFetch(url, { ...init, redirect: 'error', dispatcher: this.#dispatcher });
43
+ }
44
+ catch (error) {
45
+ if (init?.signal?.aborted)
46
+ throw error;
47
+ throw networkFailure(error, this.#route.route === 'proxy');
48
+ }
49
+ };
50
+ close() {
51
+ // destroy aborts active connections and releases idle sockets; never touches borrowed resources.
52
+ return this.#closing ??= this.#dispatcher?.destroy() ?? Promise.resolve();
53
+ }
54
+ }
55
+ function readCertificates(path) {
56
+ let fd;
57
+ try {
58
+ if (!path.trim())
59
+ throw new Error();
60
+ fd = openSync(path, constants.O_RDONLY | constants.O_NONBLOCK);
61
+ const stat = fstatSync(fd);
62
+ if (!stat.isFile() || stat.size <= 0 || stat.size > 1_048_576)
63
+ throw new Error();
64
+ const buffer = Buffer.alloc(1_048_577);
65
+ let size = 0, count;
66
+ while (size < buffer.length && (count = readSync(fd, buffer, size, buffer.length - size, null)) > 0)
67
+ size += count;
68
+ if (size > 1_048_576)
69
+ throw new Error();
70
+ const pem = buffer.subarray(0, size).toString('utf8');
71
+ const certs = pem.match(/-----BEGIN CERTIFICATE-----[\s\S]*?-----END CERTIFICATE-----/gu);
72
+ if (!certs?.length || pem.replace(/-----BEGIN CERTIFICATE-----[\s\S]*?-----END CERTIFICATE-----/gu, '').trim())
73
+ throw new Error();
74
+ for (const cert of certs)
75
+ new X509Certificate(cert);
76
+ return [...getCACertificates('default'), ...certs];
77
+ }
78
+ catch {
79
+ throw networkConfigError('ca_config_invalid');
80
+ }
81
+ finally {
82
+ if (fd !== undefined)
83
+ closeSync(fd);
84
+ }
85
+ }
86
+ /** Inspect only bounded, allowlisted transport codes; never persist exception text or URLs. */
87
+ export function networkFailure(error, proxied) {
88
+ const chain = [];
89
+ for (let item = error, depth = 0; item && typeof item === 'object' && depth < 8; depth++) {
90
+ chain.push(item);
91
+ item = item.cause;
92
+ }
93
+ let proxyStatus;
94
+ if (proxied)
95
+ for (const item of chain) {
96
+ if (item.code === 'UND_ERR_INVALID_ARG' && item.message === 'Proxy Authentication Required (407)')
97
+ proxyStatus = 407;
98
+ if (item.code === 'UND_ERR_ABORTED' && typeof item.message === 'string') {
99
+ const match = /^Proxy response \((\d{3})\) !== 200 when HTTP Tunneling$/u.exec(item.message);
100
+ if (match)
101
+ proxyStatus = Number(match[1]);
102
+ }
103
+ }
104
+ const has = (...codes) => chain.some(item => typeof item.code === 'string' && codes.includes(item.code));
105
+ let reason = 'network_error';
106
+ if (proxyStatus === 407 || has('UND_ERR_SOCKS5_AUTH_FAILED', 'UND_ERR_SOCKS5_AUTH_REJECTED'))
107
+ reason = 'proxy_authentication';
108
+ else if (has('ERR_TLS_CERT_ALTNAME_INVALID', 'CERT_HAS_EXPIRED', 'CERT_NOT_YET_VALID', 'DEPTH_ZERO_SELF_SIGNED_CERT', 'SELF_SIGNED_CERT_IN_CHAIN', 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY', 'CERT_SIGNATURE_FAILURE', 'UND_ERR_PRX_TLS'))
109
+ reason = 'tls_verification_failed';
110
+ else if (proxyStatus !== undefined)
111
+ reason = 'proxy_http_error';
112
+ else if (has('ENOTFOUND', 'EAI_AGAIN'))
113
+ reason = proxied ? 'proxy_dns_error' : 'dns_error';
114
+ else if (proxied && has('ECONNREFUSED', 'ETIMEDOUT', 'EHOSTUNREACH', 'ENETUNREACH', 'UND_ERR_CONNECT_TIMEOUT', 'UND_ERR_PRX_CONN'))
115
+ reason = 'proxy_unavailable';
116
+ else if (has('ECONNREFUSED'))
117
+ reason = 'connection_refused';
118
+ const retryable = !['proxy_authentication', 'tls_verification_failed'].includes(reason) && (proxyStatus === undefined || proxyStatus >= 500);
119
+ const diagnostic = { stage: 'network', reason, retryable, ...(proxyStatus === undefined ? {} : { proxyStatus }) };
120
+ return new MemoryModelError(reason === 'proxy_authentication' ? 'PROXY_AUTHENTICATION' : 'UNAVAILABLE', `Network failure: ${reason}`, retryable, diagnostic);
121
+ }
122
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/memory-manager/network/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { MemoryModelError } from '../contracts/errors.js';
2
+ export type ProxyConfig = {
3
+ mode: 'direct' | 'env';
4
+ } | {
5
+ mode: 'custom';
6
+ urlEnv: string;
7
+ noProxy?: string;
8
+ };
9
+ export type NetworkEnvironment = Readonly<Record<string, string | undefined>>;
10
+ export declare const PRIVATE_PROXY_KEY = "COMMON_MEMORY_PROXY_URL";
11
+ export declare const PRIVATE_CA_KEY = "COMMON_MEMORY_CA_FILE";
12
+ export declare const PRIVATE_NETWORK_KEYS: readonly ["COMMON_MEMORY_PROXY_URL", "COMMON_MEMORY_CA_FILE"];
13
+ export interface RouteDescription {
14
+ mode: 'legacy' | ProxyConfig['mode'];
15
+ route: 'host' | 'direct' | 'proxy';
16
+ reason: 'legacy_host' | 'direct_mode' | 'no_proxy_configured' | 'no_proxy_match' | 'custom_proxy' | 'https_proxy' | 'http_proxy' | 'all_proxy';
17
+ protocol?: 'http' | 'https' | 'socks5';
18
+ }
19
+ /** A private URL must never be included in status, errors or persisted diagnostics. */
20
+ export type ResolvedRoute = {
21
+ description: RouteDescription;
22
+ proxyUrl?: string;
23
+ };
24
+ export declare function networkConfigError(reason?: 'proxy_config_invalid' | 'ca_config_invalid' | 'no_proxy_invalid'): MemoryModelError;
25
+ export declare function validateProxyConfig(value: unknown): ProxyConfig;
26
+ export declare function validateCaEnv(value: unknown): string;
27
+ /** Other custom names are deliberately external-env-only: legacy loaders cannot export new private secrets. */
28
+ export declare function networkSecret(name: string, env: NetworkEnvironment, privateEnv: NetworkEnvironment): string | undefined;
29
+ export declare function resolveRoute(endpoint: string, proxy: ProxyConfig | undefined, env: NetworkEnvironment, privateEnv?: NetworkEnvironment): ResolvedRoute;
30
+ export declare function bypasses(endpoint: URL, value: string): boolean;
31
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/memory-manager/network/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC5G,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAC9E,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAC3D,eAAO,MAAM,cAAc,0BAA0B,CAAC;AACtD,eAAO,MAAM,oBAAoB,+DAA+C,CAAC;AACjF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,MAAM,EAAE,aAAa,GAAG,aAAa,GAAG,qBAAqB,GAAG,gBAAgB,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,WAAW,CAAC;IAC/I,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;CACxC;AACD,uFAAuF;AACvF,MAAM,MAAM,aAAa,GAAG;IAAE,WAAW,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACjF,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,sBAAsB,GAAG,mBAAmB,GAAG,kBAA2C,GAAG,gBAAgB,CAEvJ;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAU/D;AACD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGpD;AACD,+GAA+G;AAC/G,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,GAAG,MAAM,GAAG,SAAS,CAGvH;AASD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,SAAS,EAAE,GAAG,EAAE,kBAAkB,EAAE,UAAU,GAAE,kBAAuB,GAAG,aAAa,CAgB1J;AAuCD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAG9D"}
@@ -0,0 +1,148 @@
1
+ import { isIP } from 'node:net';
2
+ import { MemoryModelError } from '../contracts/errors.js';
3
+ export const PRIVATE_PROXY_KEY = 'COMMON_MEMORY_PROXY_URL';
4
+ export const PRIVATE_CA_KEY = 'COMMON_MEMORY_CA_FILE';
5
+ export const PRIVATE_NETWORK_KEYS = [PRIVATE_PROXY_KEY, PRIVATE_CA_KEY];
6
+ export function networkConfigError(reason = 'proxy_config_invalid') {
7
+ return new MemoryModelError('CONFIGURATION', reason === 'ca_config_invalid' ? 'Invalid local CA configuration' : reason === 'no_proxy_invalid' ? 'Invalid NO_PROXY list; CIDR and arbitrary wildcard patterns are unsupported' : 'Invalid proxy configuration', false, { stage: 'network_config', reason, retryable: false });
8
+ }
9
+ const envName = /^[A-Za-z_][A-Za-z0-9_]*$/u;
10
+ export function validateProxyConfig(value) {
11
+ if (!value || typeof value !== 'object' || Array.isArray(value))
12
+ throw networkConfigError();
13
+ const p = value;
14
+ if (p.mode === 'direct' || p.mode === 'env') {
15
+ if (Object.keys(p).some(k => k !== 'mode'))
16
+ throw networkConfigError();
17
+ return { mode: p.mode };
18
+ }
19
+ if (p.mode !== 'custom' || Object.keys(p).some(k => !['mode', 'urlEnv', 'noProxy'].includes(k)) || typeof p.urlEnv !== 'string' || !envName.test(p.urlEnv) || (p.noProxy !== undefined && typeof p.noProxy !== 'string'))
20
+ throw networkConfigError();
21
+ if (p.noProxy !== undefined)
22
+ parseBypass(p.noProxy);
23
+ return { mode: 'custom', urlEnv: p.urlEnv, ...(p.noProxy === undefined ? {} : { noProxy: p.noProxy }) };
24
+ }
25
+ export function validateCaEnv(value) {
26
+ if (typeof value !== 'string' || !envName.test(value))
27
+ throw networkConfigError('ca_config_invalid');
28
+ return value;
29
+ }
30
+ /** Other custom names are deliberately external-env-only: legacy loaders cannot export new private secrets. */
31
+ export function networkSecret(name, env, privateEnv) {
32
+ if (env[name] !== undefined)
33
+ return env[name];
34
+ return PRIVATE_NETWORK_KEYS.some(k => k === name) ? privateEnv[name] : undefined;
35
+ }
36
+ /** Source priority applies to the whole semantic group before spelling/case priority. */
37
+ function group(name, env, privateEnv) {
38
+ for (const source of [env, privateEnv]) {
39
+ if (source[name] !== undefined)
40
+ return source[name].trim();
41
+ if (source[name.toUpperCase()] !== undefined)
42
+ return source[name.toUpperCase()].trim();
43
+ }
44
+ return '';
45
+ }
46
+ export function resolveRoute(endpoint, proxy, env, privateEnv = {}) {
47
+ const url = new URL(endpoint);
48
+ if (!['http:', 'https:'].includes(url.protocol))
49
+ throw networkConfigError();
50
+ if (!proxy)
51
+ return { description: { mode: 'legacy', route: 'host', reason: 'legacy_host' } };
52
+ if (proxy.mode === 'direct')
53
+ return { description: { mode: 'direct', route: 'direct', reason: 'direct_mode' } };
54
+ if (proxy.mode === 'custom') {
55
+ const selected = proxyUri(networkSecret(proxy.urlEnv, env, privateEnv));
56
+ if (bypasses(url, proxy.noProxy ?? ''))
57
+ return { description: { mode: 'custom', route: 'direct', reason: 'no_proxy_match' } };
58
+ return { description: { mode: 'custom', route: 'proxy', reason: 'custom_proxy', protocol: selected.protocol }, proxyUrl: selected.url };
59
+ }
60
+ const candidates = url.protocol === 'https:' ? ['https_proxy', 'http_proxy', 'all_proxy'] : ['http_proxy', 'all_proxy'];
61
+ const selected = candidates.map(name => ({ name, value: group(name, env, privateEnv) })).find(p => p.value);
62
+ if (!selected)
63
+ return { description: { mode: 'env', route: 'direct', reason: 'no_proxy_configured' } };
64
+ if (bypasses(url, group('no_proxy', env, privateEnv)))
65
+ return { description: { mode: 'env', route: 'direct', reason: 'no_proxy_match' } };
66
+ const uri = proxyUri(selected.value);
67
+ return { description: { mode: 'env', route: 'proxy', reason: selected.name, protocol: uri.protocol }, proxyUrl: uri.url };
68
+ }
69
+ function proxyUri(value) {
70
+ if (!value?.trim() || /[\r\n\0]/u.test(value))
71
+ throw networkConfigError();
72
+ let u;
73
+ try {
74
+ u = new URL(value.trim());
75
+ }
76
+ catch {
77
+ throw networkConfigError();
78
+ }
79
+ if (!['http:', 'https:', 'socks5:', 'socks:'].includes(u.protocol) || !u.hostname || u.search || u.hash || (u.pathname && u.pathname !== '/') || u.port === '0')
80
+ throw networkConfigError();
81
+ try {
82
+ decodeURIComponent(u.username);
83
+ decodeURIComponent(u.password);
84
+ }
85
+ catch {
86
+ throw networkConfigError();
87
+ }
88
+ return { url: u.href, protocol: u.protocol === 'http:' ? 'http' : u.protocol === 'https:' ? 'https' : 'socks5' };
89
+ }
90
+ function host(value) {
91
+ let normalized;
92
+ try {
93
+ const literal = value.replace(/^\[|\]$/gu, '');
94
+ const u = new URL(`http://${isIP(literal) === 6 ? `[${literal}]` : value}`);
95
+ if (u.username || u.password || u.port || u.pathname !== '/' || u.search || u.hash)
96
+ throw networkConfigError();
97
+ normalized = u.hostname.replace(/^\[|\]$/gu, '').replace(/\.$/u, '').toLowerCase();
98
+ }
99
+ catch {
100
+ throw networkConfigError();
101
+ }
102
+ if (!normalized || normalized === '.' || (!isIP(normalized) && !/^[a-z0-9_-]+(?:\.[a-z0-9_-]+)*$/u.test(normalized)))
103
+ throw networkConfigError();
104
+ return { host: normalized, ip: isIP(normalized) !== 0 };
105
+ }
106
+ function parseBypass(value) {
107
+ try {
108
+ return parseBypassRules(value);
109
+ }
110
+ catch {
111
+ throw networkConfigError('no_proxy_invalid');
112
+ }
113
+ }
114
+ function parseBypassRules(value) {
115
+ return value.split(/[,\s]+/u).filter(Boolean).map(token => {
116
+ if (token === '*')
117
+ return { host: '', ip: false, all: true };
118
+ if (/[\/@?#]/u.test(token))
119
+ throw networkConfigError();
120
+ let name = token, port;
121
+ const bracket = /^\[([^\]]+)\](?::(\d+))?$/u.exec(token);
122
+ if (bracket) {
123
+ name = bracket[1];
124
+ if (isIP(name) !== 6)
125
+ throw networkConfigError();
126
+ if (bracket[2] !== undefined)
127
+ port = Number(bracket[2]);
128
+ }
129
+ else if (!isIP(token) && token.includes(':')) {
130
+ const pair = /^([^:]+):(\d+)$/u.exec(token);
131
+ if (!pair)
132
+ throw networkConfigError();
133
+ name = pair[1];
134
+ port = Number(pair[2]);
135
+ }
136
+ if (port !== undefined && (!Number.isSafeInteger(port) || port < 1 || port > 65535))
137
+ throw networkConfigError();
138
+ name = name.replace(/^\*?\./u, '');
139
+ if (name.includes('*'))
140
+ throw networkConfigError();
141
+ return { ...host(name), ...(port === undefined ? {} : { port }) };
142
+ });
143
+ }
144
+ export function bypasses(endpoint, value) {
145
+ const target = host(endpoint.hostname), port = Number(endpoint.port || (endpoint.protocol === 'https:' ? 443 : 80));
146
+ return parseBypass(value).some(rule => rule.all || ((rule.port === undefined || rule.port === port) && (target.host === rule.host || (!target.ip && !rule.ip && target.host.endsWith(`.${rule.host}`)))));
147
+ }
148
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/memory-manager/network/route.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** Fence even injected transports/streams that ignore AbortSignal. Late results are consumed. */
2
+ export declare function abortable<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T>;
3
+ export declare function cancelBody(body: ReadableStream<Uint8Array> | null): void;
4
+ //# sourceMappingURL=abort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort.d.ts","sourceRoot":"","sources":["../../../src/memory-manager/openai/abort.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAQlF;AACD,wBAAgB,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,IAAI,CAExE"}
@@ -0,0 +1,19 @@
1
+ /** Fence even injected transports/streams that ignore AbortSignal. Late results are consumed. */
2
+ export function abortable(promise, signal) {
3
+ if (!signal)
4
+ return promise;
5
+ return new Promise((resolve, reject) => {
6
+ const abort = () => reject(signal.reason);
7
+ signal.addEventListener('abort', abort, { once: true });
8
+ if (signal.aborted)
9
+ abort();
10
+ promise.then(resolve, reject).finally(() => signal.removeEventListener('abort', abort));
11
+ });
12
+ }
13
+ export function cancelBody(body) {
14
+ try {
15
+ void body?.cancel().catch(() => { });
16
+ }
17
+ catch { /* Cancellation must not delay a bounded failure. */ }
18
+ }
19
+ //# sourceMappingURL=abort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort.js","sourceRoot":"","sources":["../../../src/memory-manager/openai/abort.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,MAAM,UAAU,SAAS,CAAI,OAAmB,EAAE,MAAoB;IACpE,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,OAAO;YAAE,KAAK,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;AACL,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,IAAuC;IAChE,IAAI,CAAC;QAAC,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,oDAAoD,CAAC,CAAC;AAC7G,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function readBoundedBody(response: Response, maxBytes: number, signal?: AbortSignal): Promise<string>;
2
+ //# sourceMappingURL=bounded-body.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounded-body.d.ts","sourceRoot":"","sources":["../../../src/memory-manager/openai/bounded-body.ts"],"names":[],"mappings":"AAEA,wBAAsB,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAYjH"}
@@ -0,0 +1,49 @@
1
+ import { MemoryModelError } from "../contracts/errors.js";
2
+ import { abortable, cancelBody } from './abort.js';
3
+ export async function readBoundedBody(response, maxBytes, signal) {
4
+ const overflow = () => new MemoryModelError('INVALID_RESPONSE', 'Provider response exceeded the configured limit', false, { stage: 'response_body', reason: 'body_too_large', retryable: false });
5
+ const declared = Number(response.headers.get("content-length"));
6
+ if (Number.isFinite(declared) && declared > maxBytes) {
7
+ cancelBody(response.body);
8
+ throw overflow();
9
+ }
10
+ if (!response.body)
11
+ return "";
12
+ const reader = response.body.getReader();
13
+ const chunks = [];
14
+ let total = 0;
15
+ try {
16
+ for (;;) {
17
+ const { done, value } = await abortable(reader.read(), signal);
18
+ if (done)
19
+ break;
20
+ if (!value)
21
+ continue;
22
+ total += value.byteLength;
23
+ if (total > maxBytes)
24
+ throw overflow();
25
+ chunks.push(value);
26
+ }
27
+ }
28
+ catch (error) {
29
+ try {
30
+ void reader.cancel().catch(() => { });
31
+ }
32
+ catch { /* Preserve the read/limit failure. */ }
33
+ throw error;
34
+ }
35
+ finally {
36
+ try {
37
+ reader.releaseLock();
38
+ }
39
+ catch { /* A non-cooperative reader can still be pending. */ }
40
+ }
41
+ const combined = new Uint8Array(total);
42
+ let offset = 0;
43
+ for (const chunk of chunks) {
44
+ combined.set(chunk, offset);
45
+ offset += chunk.byteLength;
46
+ }
47
+ return new TextDecoder("utf-8", { fatal: true }).decode(combined);
48
+ }
49
+ //# sourceMappingURL=bounded-body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounded-body.js","sourceRoot":"","sources":["../../../src/memory-manager/openai/bounded-body.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACnD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAkB,EAAE,QAAgB,EAAE,MAAoB;IAC9F,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,iDAAiD,EAAE,KAAK,EAAE,EAAC,KAAK,EAAC,eAAe,EAAC,MAAM,EAAC,gBAAgB,EAAC,SAAS,EAAC,KAAK,EAAC,CAAC,CAAC;IAC3L,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC;QAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAC,MAAM,QAAQ,EAAE,CAAC;IAAC,CAAC;IACtG,IAAI,CAAC,QAAQ,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAAC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAAC,IAAI,KAAK,GAAG,CAAC,CAAC;IACzF,IAAI,CAAC;QACH,SAAS,CAAC;YAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;YAAC,IAAI,IAAI;gBAAE,MAAM;YAAC,IAAI,CAAC,KAAK;gBAAE,SAAS;YAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC;YAAC,IAAI,KAAK,GAAG,QAAQ;gBAAE,MAAM,QAAQ,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IAC5M,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,IAAI,CAAC;YAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,sCAAsC,CAAC,CAAC;QAAC,MAAM,KAAK,CAAC;IAAC,CAAC;YACvH,CAAC;QAAC,IAAI,CAAC;YAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,oDAAoD,CAAC,CAAC;IAAC,CAAC;IACxG,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAAC,IAAI,MAAM,GAAG,CAAC,CAAC;IAAC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;IAAC,CAAC;IAChJ,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ApprovedModelRequest, MemoryModelResult } from '../contracts/model-port.js';
2
+ import { RemoteHttpMemoryModel, type RemoteHttpOptions } from './remote-http.js';
3
+ export interface OpenAIChatMemoryModelOptions extends RemoteHttpOptions {
4
+ thinking?: {
5
+ type: 'enabled' | 'disabled';
6
+ };
7
+ enableThinking?: boolean;
8
+ }
9
+ export declare class OpenAIChatMemoryModel extends RemoteHttpMemoryModel {
10
+ #private;
11
+ constructor(options: OpenAIChatMemoryModelOptions);
12
+ protected serialize(request: ApprovedModelRequest): string;
13
+ protected decode(envelope: unknown, fingerprintKey: string): MemoryModelResult;
14
+ }
15
+ export declare function decodeChatEnvelope(value: unknown, fingerprintKey: string): MemoryModelResult;
16
+ //# sourceMappingURL=openai-chat-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-chat-adapter.d.ts","sourceRoot":"","sources":["../../../src/memory-manager/openai/openai-chat-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAG1F,OAAO,EAAE,qBAAqB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEjF,MAAM,WAAW,4BAA6B,SAAQ,iBAAiB;IAAG,QAAQ,CAAC,EAAE;QAAC,IAAI,EAAC,SAAS,GAAG,UAAU,CAAA;KAAC,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE;AAC9I,qBAAa,qBAAsB,SAAQ,qBAAqB;;gBAElD,OAAO,EAAE,4BAA4B;IACjD,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM;IAM1D,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,iBAAiB;CAC/E;AACD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,iBAAiB,CAgB5F"}