@alfe.ai/gateway 0.9.13 → 0.9.14

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 (2) hide show
  1. package/dist/health.js +37 -3
  2. package/package.json +3 -3
package/dist/health.js CHANGED
@@ -4533,6 +4533,7 @@ _enum(MOONSHOT_MODELS);
4533
4533
  _enum(QWEN_MODELS);
4534
4534
  string().trim().min(1);
4535
4535
  AnthropicModel.Opus5, AnthropicModel.Opus48, AnthropicModel.Opus47, AnthropicModel.Opus46, AnthropicModel.Sonnet5, AnthropicModel.Sonnet46, AnthropicModel.Haiku45, OpenAIModel.GPT4o, OpenAIModel.GPT4oMini, OpenAIModel.O3, OpenAIModel.GPT41, OpenAIModel.GPT41Mini, OpenAIModel.GPT41Nano, OpenAIModel.GPT54, OpenAIModel.GPT54Mini, OpenAIModel.GPT54Nano, OpenAIModel.GPT54Pro, OpenAIModel.GPT55, OpenAIModel.GPT55Pro, OpenAIModel.GPT56Sol, OpenAIModel.GPT56Terra, OpenAIModel.GPT56Luna, OpenAIModel.O3Mini, OpenAIModel.O4Mini, OpenAIModel.TextEmbedding3Small, OpenAIModel.TextEmbedding3Large, DeepSeekModel.Chat, DeepSeekModel.Reasoner, DeepSeekModel.V4Flash, DeepSeekModel.V4Pro, GoogleModel.Gemini35Flash, GoogleModel.Gemini31Pro, GoogleModel.Gemini31FlashLite, GoogleModel.Gemini25Pro, GoogleModel.Gemini25Flash, GoogleModel.Gemini25FlashLite, GoogleModel.Gemini20Flash, MiniMaxModel.M3, MiniMaxModel.M27, MiniMaxModel.M27HighSpeed, MiniMaxModel.M25, MiniMaxModel.M21, MiniMaxModel.M2, MistralModel.Large, MistralModel.Medium, MistralModel.Small, MistralModel.Codestral, MistralModel.Ministral8b, MistralModel.Ministral3b, MistralModel.MagistralMedium, MistralModel.MagistralSmall, MistralModel.DevstralMedium, XAIModel.Grok45, XAIModel.Grok43, XAIModel.Grok4, XAIModel.Grok41Fast, ZhipuModel.GLM52, ZhipuModel.GLM51, ZhipuModel.GLM46, ZhipuModel.GLM45, ZhipuModel.GLM45Air, MoonshotModel.K3, MoonshotModel.K26, MoonshotModel.K27Code, MoonshotModel.K27CodeHighSpeed, QwenModel.Qwen37Max, QwenModel.Qwen37Plus, QwenModel.Qwen36Flash, QwenModel.Qwen35Flash;
4536
+ ({ Qwen3_8B: "alfe-qwen3-8b" }).Qwen3_8B;
4536
4537
  AnthropicModel.Opus5, AnthropicModel.Opus48, AnthropicModel.Opus47, AnthropicModel.Opus46, AnthropicModel.Sonnet5, AnthropicModel.Sonnet46, AnthropicModel.Haiku45, OpenAIModel.GPT4o, OpenAIModel.GPT4oMini, OpenAIModel.O3, OpenAIModel.GPT41, OpenAIModel.GPT41Mini, OpenAIModel.GPT41Nano, OpenAIModel.GPT54, OpenAIModel.GPT54Mini, OpenAIModel.GPT54Nano, OpenAIModel.GPT54Pro, OpenAIModel.GPT55, OpenAIModel.GPT55Pro, OpenAIModel.GPT56Sol, OpenAIModel.GPT56Terra, OpenAIModel.GPT56Luna, OpenAIModel.O3Mini, OpenAIModel.O4Mini, OpenAIModel.TextEmbedding3Small, OpenAIModel.TextEmbedding3Large, DeepSeekModel.Chat, DeepSeekModel.Reasoner, DeepSeekModel.V4Flash, DeepSeekModel.V4Pro, GoogleModel.Gemini35Flash, GoogleModel.Gemini31Pro, GoogleModel.Gemini31FlashLite, GoogleModel.Gemini25Pro, GoogleModel.Gemini25Flash, GoogleModel.Gemini25FlashLite, GoogleModel.Gemini20Flash, MiniMaxModel.M3, MiniMaxModel.M27, MiniMaxModel.M27HighSpeed, MiniMaxModel.M25, MiniMaxModel.M21, MiniMaxModel.M2, MistralModel.Large, MistralModel.Medium, MistralModel.Small, MistralModel.Codestral, MistralModel.Ministral8b, MistralModel.Ministral3b, MistralModel.MagistralMedium, MistralModel.MagistralSmall, MistralModel.DevstralMedium, XAIModel.Grok45, XAIModel.Grok43, XAIModel.Grok4, XAIModel.Grok41Fast, ZhipuModel.GLM52, ZhipuModel.GLM51, ZhipuModel.GLM46, ZhipuModel.GLM45, ZhipuModel.GLM45Air, MoonshotModel.K3, MoonshotModel.K26, MoonshotModel.K27Code, MoonshotModel.K27CodeHighSpeed, QwenModel.Qwen37Max, QwenModel.Qwen37Plus, QwenModel.Qwen36Flash, QwenModel.Qwen35Flash;
4537
4538
  enumValues({
4538
4539
  Standard: "standard",
@@ -5397,6 +5398,24 @@ function deriveGatewayWsUrl(apiEndpoint) {
5397
5398
  return "wss://gateway.alfe.ai/ws";
5398
5399
  }
5399
5400
  }
5401
+ function validatePrivateManagedWsUrl(value, service) {
5402
+ let url;
5403
+ try {
5404
+ url = new URL(value);
5405
+ } catch {
5406
+ throw new Error(`${service} WebSocket URL must be a valid regional service URL`);
5407
+ }
5408
+ if (url.protocol !== "ws:" || !url.hostname.endsWith(".local") && !url.hostname.endsWith(".sst") || url.pathname !== "/ws" || url.username !== "" || url.password !== "" || url.search !== "" || url.hash !== "") throw new Error(`${service} WebSocket URL must be a canonical VPC-local regional service URL`);
5409
+ return url.toString();
5410
+ }
5411
+ function _resolveManagedGatewayWsUrl(apiEndpoint) {
5412
+ const override = process.env.ALFE_GATEWAY_WS_URL?.trim();
5413
+ if (process.env.ALFE_PRIVATE_DATA_PLANE === "true") {
5414
+ if (!override) throw new Error("ALFE_GATEWAY_WS_URL is required in AWS-private managed mode");
5415
+ return validatePrivateManagedWsUrl(override, "Gateway");
5416
+ }
5417
+ return override && override.length > 0 ? override : deriveGatewayWsUrl(apiEndpoint);
5418
+ }
5400
5419
  /**
5401
5420
  * Parse [runtimes.*] sections from config.toml.
5402
5421
  * Returns a map of runtime name → RuntimeConfig.
@@ -5471,7 +5490,7 @@ async function loadManagedConfig() {
5471
5490
  const apiEndpoint = process.env.ALFE_API_ENDPOINT ?? getEndpointFromToken(apiKey);
5472
5491
  logger$1.debug({ apiEndpoint }, "Environment loaded, resolving identity...");
5473
5492
  const identity = await resolveAgentIdentity(apiKey, apiEndpoint);
5474
- const gatewayWsUrl = deriveGatewayWsUrl(apiEndpoint);
5493
+ const gatewayWsUrl = _resolveManagedGatewayWsUrl(apiEndpoint);
5475
5494
  logger$1.debug({
5476
5495
  agentId: identity.agentId,
5477
5496
  orgId: identity.orgId,
@@ -6950,6 +6969,15 @@ const SYSTEMD_SERVICE = "alfe-gateway";
6950
6969
  const MANAGED_ENV_VARS = [
6951
6970
  "ALFE_MANAGED",
6952
6971
  "ALFE_API_KEY",
6972
+ "ALFE_API_ENDPOINT",
6973
+ "ALFE_API_URL",
6974
+ "ALFE_AI_PROXY_URL",
6975
+ "ALFE_CHAT_WS_URL",
6976
+ "ALFE_GATEWAY_WS_URL",
6977
+ "ALFE_SYNC_RELAY_WS_URL",
6978
+ "ALFE_PRIVATE_DATA_PLANE",
6979
+ "ALFE_PRIVATE_DATA_PLANE_REGION",
6980
+ "ALFE_PRIVATE_DATA_PLANE_RELEASE",
6953
6981
  "LOG_LEVEL",
6954
6982
  "ALFE_CLI_VERSION"
6955
6983
  ];
@@ -7992,12 +8020,18 @@ async function startAiProxy(apiKey) {
7992
8020
  try {
7993
8021
  const { createProxyServer, DEFAULT_AI_PROXY_PORT } = await import("@alfe.ai/ai-proxy-local");
7994
8022
  const { getAiServiceUrlFromToken } = await import("@alfe.ai/config");
7995
- const proxyUrl = getAiServiceUrlFromToken(apiKey);
8023
+ const privateDataPlane = process.env.ALFE_PRIVATE_DATA_PLANE === "true";
8024
+ const proxyUrlOverride = process.env.ALFE_AI_PROXY_URL?.trim();
8025
+ const configuredProxyUrl = proxyUrlOverride && proxyUrlOverride.length > 0 ? proxyUrlOverride : void 0;
8026
+ if (privateDataPlane && configuredProxyUrl === void 0) throw new Error("AWS-private AI proxy target is not configured");
8027
+ const proxyUrl = configuredProxyUrl ?? getAiServiceUrlFromToken(apiKey);
7996
8028
  const port = DEFAULT_AI_PROXY_PORT ?? 18193;
7997
8029
  handle.server = createProxyServer({
7998
8030
  port,
7999
8031
  apiKey,
8000
- proxyUrl
8032
+ proxyUrl,
8033
+ allowPrivateAwsTarget: privateDataPlane,
8034
+ requirePrivateAwsTarget: privateDataPlane
8001
8035
  });
8002
8036
  const server = handle.server;
8003
8037
  await new Promise((resolve, reject) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfe.ai/gateway",
3
- "version": "0.9.13",
3
+ "version": "0.9.14",
4
4
  "description": "Alfe local gateway daemon — persistent control plane for agent integrations",
5
5
  "type": "module",
6
6
  "bin": {
@@ -23,8 +23,8 @@
23
23
  "pino-roll": "^1.2.0",
24
24
  "smol-toml": ">=1.6.1",
25
25
  "ws": "^8.18.0",
26
- "@alfe.ai/agent-api-client": "^0.17.0",
27
- "@alfe.ai/ai-proxy-local": "^0.0.16",
26
+ "@alfe.ai/agent-api-client": "^0.17.1",
27
+ "@alfe.ai/ai-proxy-local": "^0.0.17",
28
28
  "@alfe.ai/config": "^0.4.1",
29
29
  "@alfe.ai/integration-manifest": "^0.4.0",
30
30
  "@alfe.ai/integrations": "^0.6.4",