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.
- package/.env.sample +3 -0
- package/CHANGELOG.md +39 -0
- package/LICENSE +21 -0
- package/README.md +120 -0
- package/SECURITY.md +48 -0
- package/dist/cli/codex/transcript-0.153.4.d.ts +20 -0
- package/dist/cli/codex/transcript-0.153.4.d.ts.map +1 -0
- package/dist/cli/codex/transcript-0.153.4.js +78 -0
- package/dist/cli/codex/transcript-0.153.4.js.map +1 -0
- package/dist/cli/codex-config.d.ts +2 -0
- package/dist/cli/codex-config.d.ts.map +1 -0
- package/dist/cli/codex-config.js +5 -0
- package/dist/cli/codex-config.js.map +1 -0
- package/dist/cli/codex-hook.d.ts +18 -0
- package/dist/cli/codex-hook.d.ts.map +1 -0
- package/dist/cli/codex-hook.js +140 -0
- package/dist/cli/codex-hook.js.map +1 -0
- package/dist/cli/codex-session.d.ts +3 -0
- package/dist/cli/codex-session.d.ts.map +1 -0
- package/dist/cli/codex-session.js +3 -0
- package/dist/cli/codex-session.js.map +1 -0
- package/dist/cli/flush-command.d.ts +6 -0
- package/dist/cli/flush-command.d.ts.map +1 -0
- package/dist/cli/flush-command.js +30 -0
- package/dist/cli/flush-command.js.map +1 -0
- package/dist/cli/host-launch.d.ts +28 -0
- package/dist/cli/host-launch.d.ts.map +1 -0
- package/dist/cli/host-launch.js +16 -0
- package/dist/cli/host-launch.js.map +1 -0
- package/dist/cli/host-process.d.ts +3 -0
- package/dist/cli/host-process.d.ts.map +1 -0
- package/dist/cli/host-process.js +35 -0
- package/dist/cli/host-process.js.map +1 -0
- package/dist/cli/host-session.d.ts +22 -0
- package/dist/cli/host-session.d.ts.map +1 -0
- package/dist/cli/host-session.js +204 -0
- package/dist/cli/host-session.js.map +1 -0
- package/dist/cli/import-command.d.ts +20 -0
- package/dist/cli/import-command.d.ts.map +1 -0
- package/dist/cli/import-command.js +98 -0
- package/dist/cli/import-command.js.map +1 -0
- package/dist/cli/interactive-process.d.ts +3 -0
- package/dist/cli/interactive-process.d.ts.map +1 -0
- package/dist/cli/interactive-process.js +15 -0
- package/dist/cli/interactive-process.js.map +1 -0
- package/dist/cli/main.d.ts +3 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +151 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/mcp-config.d.ts +16 -0
- package/dist/cli/mcp-config.d.ts.map +1 -0
- package/dist/cli/mcp-config.js +108 -0
- package/dist/cli/mcp-config.js.map +1 -0
- package/dist/cli/network-test.d.ts +4 -0
- package/dist/cli/network-test.d.ts.map +1 -0
- package/dist/cli/network-test.js +28 -0
- package/dist/cli/network-test.js.map +1 -0
- package/dist/cli/operations.d.ts +26 -0
- package/dist/cli/operations.d.ts.map +1 -0
- package/dist/cli/operations.js +55 -0
- package/dist/cli/operations.js.map +1 -0
- package/dist/cli/session-drain.d.ts +3 -0
- package/dist/cli/session-drain.d.ts.map +1 -0
- package/dist/cli/session-drain.js +34 -0
- package/dist/cli/session-drain.js.map +1 -0
- package/dist/cli/storage-paths.d.ts +4 -0
- package/dist/cli/storage-paths.d.ts.map +1 -0
- package/dist/cli/storage-paths.js +15 -0
- package/dist/cli/storage-paths.js.map +1 -0
- package/dist/cli/tui-integrations.d.ts +4 -0
- package/dist/cli/tui-integrations.d.ts.map +1 -0
- package/dist/cli/tui-integrations.js +143 -0
- package/dist/cli/tui-integrations.js.map +1 -0
- package/dist/cli/tui-prompts.d.ts +22 -0
- package/dist/cli/tui-prompts.d.ts.map +1 -0
- package/dist/cli/tui-prompts.js +64 -0
- package/dist/cli/tui-prompts.js.map +1 -0
- package/dist/cli/tui-settings.d.ts +21 -0
- package/dist/cli/tui-settings.d.ts.map +1 -0
- package/dist/cli/tui-settings.js +198 -0
- package/dist/cli/tui-settings.js.map +1 -0
- package/dist/cli/tui.d.ts +4 -0
- package/dist/cli/tui.d.ts.map +1 -0
- package/dist/cli/tui.js +292 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/cli/work-config.d.ts +24 -0
- package/dist/cli/work-config.d.ts.map +1 -0
- package/dist/cli/work-config.js +147 -0
- package/dist/cli/work-config.js.map +1 -0
- package/dist/config/config.d.ts +41 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +193 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/private-env.d.ts +8 -0
- package/dist/config/private-env.d.ts.map +1 -0
- package/dist/config/private-env.js +38 -0
- package/dist/config/private-env.js.map +1 -0
- package/dist/config/runtime.d.ts +32 -0
- package/dist/config/runtime.d.ts.map +1 -0
- package/dist/config/runtime.js +85 -0
- package/dist/config/runtime.js.map +1 -0
- package/dist/core/contracts/errors.d.ts +10 -0
- package/dist/core/contracts/errors.d.ts.map +1 -0
- package/dist/core/contracts/errors.js +23 -0
- package/dist/core/contracts/errors.js.map +1 -0
- package/dist/core/safety/external-preflight.d.ts +7 -0
- package/dist/core/safety/external-preflight.d.ts.map +1 -0
- package/dist/core/safety/external-preflight.js +47 -0
- package/dist/core/safety/external-preflight.js.map +1 -0
- package/dist/core/safety/redaction.d.ts +2 -0
- package/dist/core/safety/redaction.d.ts.map +1 -0
- package/dist/core/safety/redaction.js +4 -0
- package/dist/core/safety/redaction.js.map +1 -0
- package/dist/core/safety/rules.d.ts +6 -0
- package/dist/core/safety/rules.d.ts.map +1 -0
- package/dist/core/safety/rules.js +14 -0
- package/dist/core/safety/rules.js.map +1 -0
- package/dist/core/safety/scanner.d.ts +11 -0
- package/dist/core/safety/scanner.d.ts.map +1 -0
- package/dist/core/safety/scanner.js +18 -0
- package/dist/core/safety/scanner.js.map +1 -0
- package/dist/core/transaction/fsync.d.ts +6 -0
- package/dist/core/transaction/fsync.d.ts.map +1 -0
- package/dist/core/transaction/fsync.js +41 -0
- package/dist/core/transaction/fsync.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/ingress.d.ts +61 -0
- package/dist/mcp/ingress.d.ts.map +1 -0
- package/dist/mcp/ingress.js +134 -0
- package/dist/mcp/ingress.js.map +1 -0
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +92 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/stdio.d.ts +5 -0
- package/dist/mcp/stdio.d.ts.map +1 -0
- package/dist/mcp/stdio.js +115 -0
- package/dist/mcp/stdio.js.map +1 -0
- package/dist/memory-manager/contracts/diagnostic.d.ts +14 -0
- package/dist/memory-manager/contracts/diagnostic.d.ts.map +1 -0
- package/dist/memory-manager/contracts/diagnostic.js +17 -0
- package/dist/memory-manager/contracts/diagnostic.js.map +1 -0
- package/dist/memory-manager/contracts/disclosure.d.ts +12 -0
- package/dist/memory-manager/contracts/disclosure.d.ts.map +1 -0
- package/dist/memory-manager/contracts/disclosure.js +8 -0
- package/dist/memory-manager/contracts/disclosure.js.map +1 -0
- package/dist/memory-manager/contracts/errors.d.ts +15 -0
- package/dist/memory-manager/contracts/errors.d.ts.map +1 -0
- package/dist/memory-manager/contracts/errors.js +25 -0
- package/dist/memory-manager/contracts/errors.js.map +1 -0
- package/dist/memory-manager/contracts/model-port.d.ts +38 -0
- package/dist/memory-manager/contracts/model-port.d.ts.map +1 -0
- package/dist/memory-manager/contracts/model-port.js +2 -0
- package/dist/memory-manager/contracts/model-port.js.map +1 -0
- package/dist/memory-manager/network/client.d.ts +13 -0
- package/dist/memory-manager/network/client.d.ts.map +1 -0
- package/dist/memory-manager/network/client.js +122 -0
- package/dist/memory-manager/network/client.js.map +1 -0
- package/dist/memory-manager/network/route.d.ts +31 -0
- package/dist/memory-manager/network/route.d.ts.map +1 -0
- package/dist/memory-manager/network/route.js +148 -0
- package/dist/memory-manager/network/route.js.map +1 -0
- package/dist/memory-manager/openai/abort.d.ts +4 -0
- package/dist/memory-manager/openai/abort.d.ts.map +1 -0
- package/dist/memory-manager/openai/abort.js +19 -0
- package/dist/memory-manager/openai/abort.js.map +1 -0
- package/dist/memory-manager/openai/bounded-body.d.ts +2 -0
- package/dist/memory-manager/openai/bounded-body.d.ts.map +1 -0
- package/dist/memory-manager/openai/bounded-body.js +49 -0
- package/dist/memory-manager/openai/bounded-body.js.map +1 -0
- package/dist/memory-manager/openai/openai-chat-adapter.d.ts +16 -0
- package/dist/memory-manager/openai/openai-chat-adapter.d.ts.map +1 -0
- package/dist/memory-manager/openai/openai-chat-adapter.js +51 -0
- package/dist/memory-manager/openai/openai-chat-adapter.js.map +1 -0
- package/dist/memory-manager/openai/openai-responses-adapter.d.ts +15 -0
- package/dist/memory-manager/openai/openai-responses-adapter.d.ts.map +1 -0
- package/dist/memory-manager/openai/openai-responses-adapter.js +14 -0
- package/dist/memory-manager/openai/openai-responses-adapter.js.map +1 -0
- package/dist/memory-manager/openai/options.d.ts +14 -0
- package/dist/memory-manager/openai/options.d.ts.map +1 -0
- package/dist/memory-manager/openai/options.js +29 -0
- package/dist/memory-manager/openai/options.js.map +1 -0
- package/dist/memory-manager/openai/remote-http.d.ts +33 -0
- package/dist/memory-manager/openai/remote-http.d.ts.map +1 -0
- package/dist/memory-manager/openai/remote-http.js +207 -0
- package/dist/memory-manager/openai/remote-http.js.map +1 -0
- package/dist/memory-manager/openai/response-decoder.d.ts +3 -0
- package/dist/memory-manager/openai/response-decoder.d.ts.map +1 -0
- package/dist/memory-manager/openai/response-decoder.js +57 -0
- package/dist/memory-manager/openai/response-decoder.js.map +1 -0
- package/dist/memory-manager/openai/retry.d.ts +8 -0
- package/dist/memory-manager/openai/retry.d.ts.map +1 -0
- package/dist/memory-manager/openai/retry.js +18 -0
- package/dist/memory-manager/openai/retry.js.map +1 -0
- package/dist/pi-extension/extraction-runtime.d.ts +51 -0
- package/dist/pi-extension/extraction-runtime.d.ts.map +1 -0
- package/dist/pi-extension/extraction-runtime.js +87 -0
- package/dist/pi-extension/extraction-runtime.js.map +1 -0
- package/dist/pi-extension/index.d.ts +19 -0
- package/dist/pi-extension/index.d.ts.map +1 -0
- package/dist/pi-extension/index.js +172 -0
- package/dist/pi-extension/index.js.map +1 -0
- package/dist/v2/canonical.d.ts +53 -0
- package/dist/v2/canonical.d.ts.map +1 -0
- package/dist/v2/canonical.js +321 -0
- package/dist/v2/canonical.js.map +1 -0
- package/dist/v2/contract.d.ts +34 -0
- package/dist/v2/contract.d.ts.map +1 -0
- package/dist/v2/contract.js +53 -0
- package/dist/v2/contract.js.map +1 -0
- package/dist/v2/document-import.d.ts +100 -0
- package/dist/v2/document-import.d.ts.map +1 -0
- package/dist/v2/document-import.js +259 -0
- package/dist/v2/document-import.js.map +1 -0
- package/dist/v2/errors.d.ts +6 -0
- package/dist/v2/errors.d.ts.map +1 -0
- package/dist/v2/errors.js +29 -0
- package/dist/v2/errors.js.map +1 -0
- package/dist/v2/import.d.ts +26 -0
- package/dist/v2/import.d.ts.map +1 -0
- package/dist/v2/import.js +48 -0
- package/dist/v2/import.js.map +1 -0
- package/dist/v2/lock.d.ts +3 -0
- package/dist/v2/lock.d.ts.map +1 -0
- package/dist/v2/lock.js +47 -0
- package/dist/v2/lock.js.map +1 -0
- package/dist/v2/memory-maintainer.md +38 -0
- package/dist/v2/read-guidance.d.ts +3 -0
- package/dist/v2/read-guidance.d.ts.map +1 -0
- package/dist/v2/read-guidance.js +3 -0
- package/dist/v2/read-guidance.js.map +1 -0
- package/dist/v2/reader.d.ts +25 -0
- package/dist/v2/reader.d.ts.map +1 -0
- package/dist/v2/reader.js +38 -0
- package/dist/v2/reader.js.map +1 -0
- package/dist/v2/registry.d.ts +14 -0
- package/dist/v2/registry.d.ts.map +1 -0
- package/dist/v2/registry.js +46 -0
- package/dist/v2/registry.js.map +1 -0
- package/dist/v2/runtime.d.ts +133 -0
- package/dist/v2/runtime.d.ts.map +1 -0
- package/dist/v2/runtime.js +326 -0
- package/dist/v2/runtime.js.map +1 -0
- package/dist/v2/session-drain.d.ts +14 -0
- package/dist/v2/session-drain.d.ts.map +1 -0
- package/dist/v2/session-drain.js +16 -0
- package/dist/v2/session-drain.js.map +1 -0
- package/dist/v2/session.d.ts +54 -0
- package/dist/v2/session.d.ts.map +1 -0
- package/dist/v2/session.js +158 -0
- package/dist/v2/session.js.map +1 -0
- package/dist/v2/writer.d.ts +40 -0
- package/dist/v2/writer.d.ts.map +1 -0
- package/dist/v2/writer.js +327 -0
- package/dist/v2/writer.js.map +1 -0
- package/docs/00-index.md +19 -0
- package/docs/03-target-architecture.md +49 -0
- package/docs/init-v0.1-closeout.md +152 -0
- package/docs/init-v0.1-design.md +237 -0
- package/docs/init-v0.1-verification.md +303 -0
- package/docs/outbound-network-design.md +100 -0
- package/docs/outbound-network-verification.json +300 -0
- package/docs/provider-verification.md +94 -0
- package/docs/releasing.md +138 -0
- package/docs/session-integration.md +134 -0
- package/docs/tui-workbench.md +173 -0
- package/docs/usage.md +815 -0
- package/docs/v2-ablation-results.json +12035 -0
- package/docs/v2-ablation.md +117 -0
- package/docs/v2-evaluation-repeat-results.json +7 -0
- package/docs/v2-evaluation-scripted-results.json +67 -0
- package/docs/v2-evaluation.md +35 -0
- package/docs/v2-optimization-plan.md +23 -0
- package/docs/v2-performance-baseline-runtime.js.txt +231 -0
- package/docs/v2-performance-baseline.json +338 -0
- package/docs/v2-performance-behavior-equivalence.json +17 -0
- package/docs/v2-performance-results.json +585 -0
- package/docs/v2-performance.md +88 -0
- package/docs/v2-replacement-test-map.md +14 -0
- package/docs/v2-verification.md +49 -0
- 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 @@
|
|
|
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":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;AAC3D,MAAM,CAAC,MAAM,cAAc,GAAG,uBAAuB,CAAC;AACtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,iBAAiB,EAAE,cAAc,CAAU,CAAC;AASjF,MAAM,UAAU,kBAAkB,CAAC,SAA4E,sBAAsB;IACnI,OAAO,IAAI,gBAAgB,CAAC,eAAe,EAAE,MAAM,KAAK,mBAAmB,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,MAAM,KAAK,kBAAkB,CAAC,CAAC,CAAC,6EAA6E,CAAC,CAAC,CAAC,6BAA6B,EAAE,KAAK,EAAE,EAAC,KAAK,EAAC,gBAAgB,EAAC,MAAM,EAAC,SAAS,EAAC,KAAK,EAAC,CAAC,CAAC;AAC1T,CAAC;AACD,MAAM,OAAO,GAAG,2BAA2B,CAAC;AAC5C,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,kBAAkB,EAAE,CAAC;IAC5F,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC5C,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC;YAAE,MAAM,kBAAkB,EAAE,CAAC;QACvE,OAAO,EAAC,IAAI,EAAC,CAAC,CAAC,IAAI,EAAC,CAAC;IACvB,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAC,QAAQ,EAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC;QAAE,MAAM,kBAAkB,EAAE,CAAC;IACnP,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS;QAAE,WAAW,CAAC,CAAC,CAAC,OAAiB,CAAC,CAAC;IAC9D,OAAO,EAAC,IAAI,EAAC,QAAQ,EAAC,MAAM,EAAC,CAAC,CAAC,MAAM,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,OAAO,EAAC,CAAC,CAAC,OAAiB,EAAC,CAAC,EAAC,CAAC;AAC3G,CAAC;AACD,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IACrG,OAAO,KAAK,CAAC;AACf,CAAC;AACD,+GAA+G;AAC/G,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,GAAuB,EAAE,UAA8B;IACjG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnF,CAAC;AACD,yFAAyF;AACzF,SAAS,KAAK,CAAC,IAAY,EAAE,GAAuB,EAAE,UAA8B;IAClF,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,IAAI,CAAE,CAAC,IAAI,EAAE,CAAC;QAC5D,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAE,CAAC,IAAI,EAAE,CAAC;IAC1F,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,KAA8B,EAAE,GAAuB,EAAE,aAAiC,EAAE;IACzI,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAC,OAAO,EAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,MAAM,kBAAkB,EAAE,CAAC;IAC3E,IAAI,CAAC,KAAK;QAAE,OAAO,EAAC,WAAW,EAAC,EAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,aAAa,EAAC,EAAC,CAAC;IACnF,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAC,WAAW,EAAC,EAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,QAAQ,EAAC,MAAM,EAAC,aAAa,EAAC,EAAC,CAAC;IACtG,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;QACxE,IAAI,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;YAAE,OAAO,EAAC,WAAW,EAAC,EAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,QAAQ,EAAC,MAAM,EAAC,gBAAgB,EAAC,EAAC,CAAC;QACpH,OAAO,EAAC,WAAW,EAAC,EAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,OAAO,EAAC,MAAM,EAAC,cAAc,EAAC,QAAQ,EAAC,QAAQ,CAAC,QAAQ,EAAC,EAAC,QAAQ,EAAC,QAAQ,CAAC,GAAG,EAAC,CAAC;IAC5H,CAAC;IACD,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAC,YAAY,EAAC,WAAW,CAAU,CAAC,CAAC,CAAC,CAAC,YAAY,EAAC,WAAW,CAAU,CAAC;IACvI,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxG,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAC,WAAW,EAAC,EAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAC,QAAQ,EAAC,MAAM,EAAC,qBAAqB,EAAC,EAAC,CAAC;IAC7F,IAAI,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAAE,OAAO,EAAC,WAAW,EAAC,EAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAC,QAAQ,EAAC,MAAM,EAAC,gBAAgB,EAAC,EAAC,CAAC;IAChI,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,EAAC,WAAW,EAAC,EAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAC,OAAO,EAAC,MAAM,EAAC,QAAQ,CAAC,IAAI,EAAC,QAAQ,EAAC,GAAG,CAAC,QAAQ,EAAC,EAAC,QAAQ,EAAC,GAAG,CAAC,GAAG,EAAC,CAAC;AAC9G,CAAC;AACD,SAAS,QAAQ,CAAC,KAAyB;IACzC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,kBAAkB,EAAE,CAAC;IAC1E,IAAI,CAAM,CAAC;IAAC,IAAI,CAAC;QAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,MAAM,kBAAkB,EAAE,CAAC;IAAC,CAAC;IACpF,IAAI,CAAC,CAAC,OAAO,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG;QAAE,MAAM,kBAAkB,EAAE,CAAC;IACzL,IAAI,CAAC;QAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,MAAM,kBAAkB,EAAE,CAAC;IAAC,CAAC;IAC7G,OAAO,EAAC,GAAG,EAAC,CAAC,CAAC,IAAI,EAAC,QAAQ,EAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAC,CAAC;AAC9G,CAAC;AAED,SAAS,IAAI,CAAC,KAAa;IACzB,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI;YAAE,MAAM,kBAAkB,EAAE,CAAC;QAC/G,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACrF,CAAC;IAAC,MAAM,CAAC;QAAC,MAAM,kBAAkB,EAAE,CAAC;IAAC,CAAC;IACvC,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAAE,MAAM,kBAAkB,EAAE,CAAC;IACjJ,OAAO,EAAC,IAAI,EAAC,UAAU,EAAC,EAAE,EAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAC,CAAC;AACrD,CAAC;AACD,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,CAAC;QAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,MAAM,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IAAC,CAAC;AACjG,CAAC;AACD,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACxD,IAAI,KAAK,KAAK,GAAG;YAAE,OAAO,EAAC,IAAI,EAAC,EAAE,EAAC,EAAE,EAAC,KAAK,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC;QACtD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,MAAM,kBAAkB,EAAE,CAAC;QACvD,IAAI,IAAI,GAAG,KAAK,EAAE,IAAwB,CAAC;QAC3C,MAAM,OAAO,GAAG,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE,CAAC;YAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,MAAM,kBAAkB,EAAE,CAAC;YAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;aAC1I,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,IAAI;gBAAE,MAAM,kBAAkB,EAAE,CAAC;YAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;YAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9H,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC;YAAE,MAAM,kBAAkB,EAAE,CAAC;QAChH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,MAAM,kBAAkB,EAAE,CAAC;QACnD,OAAO,EAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC;AACD,MAAM,UAAU,QAAQ,CAAC,QAAa,EAAE,KAAa;IACnD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpH,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5M,CAAC"}
|
|
@@ -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 @@
|
|
|
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"}
|