@alfe.ai/gateway 0.1.2 → 0.1.4

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/dist/health.js CHANGED
@@ -58,6 +58,23 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
58
58
  }) : target, mod));
59
59
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
60
60
  //#endregion
61
+ //#region src/openclaw-version.ts
62
+ /**
63
+ * The OpenClaw runtime version Alfe pins managed agents to — the single source of
64
+ * truth for every install path:
65
+ * - `@alfe.ai/cli` `installRuntime` (fresh `alfe setup`)
66
+ * - the daemon `runtime.update` default (this package)
67
+ * - the managed Docker image (`services/compute/Dockerfile` — build args can't import
68
+ * TypeScript, so it hardcodes this same value; keep them in sync)
69
+ *
70
+ * Pinning (rather than floating `npm install -g openclaw` → `latest`) is deliberate:
71
+ * OpenClaw runs on every managed agent, so a `latest` that changes runtime semantics —
72
+ * e.g. 2026.6.8 made a non-empty `plugins.allow` an exclusive allowlist — becomes a
73
+ * silent fleet outage with no Alfe deploy. Bump deliberately after validating a new
74
+ * OpenClaw, then cut a CLI release so the pin travels with the CLI version.
75
+ */
76
+ const PINNED_OPENCLAW_VERSION = "2026.6.8";
77
+ //#endregion
61
78
  //#region ../../packages-internal/ids/dist/prefixes.js
62
79
  const ID_PREFIXES = {
63
80
  agent: "agt",
@@ -585,6 +602,19 @@ var IntegrationsService = class {
585
602
  });
586
603
  return this.client.request(`/integrations/scoped/${encodeURIComponent(integrationId)}?${params}`, { method: "DELETE" });
587
604
  }
605
+ /**
606
+ * Reinstall (re-apply latest) a scope-level install. Agent scope is rejected
607
+ * by the route — use {@link reinstallIntegration} for agent-scoped reinstall.
608
+ */
609
+ reinstallScoped(integrationId, scope, scopeId) {
610
+ return this.client.request(`/integrations/scoped/${encodeURIComponent(integrationId)}/reinstall`, {
611
+ method: "POST",
612
+ body: JSON.stringify({
613
+ scope,
614
+ scopeId
615
+ })
616
+ });
617
+ }
588
618
  listIntegrations(agentId, options) {
589
619
  const qs = options?.includeInherited ? "?includeInherited=true" : "";
590
620
  return this.client.request(`/integrations/agents/${agentId}${qs}`);
@@ -4371,6 +4401,8 @@ enumValues({
4371
4401
  enumValues({
4372
4402
  Free: "free",
4373
4403
  Personal: "personal",
4404
+ PersonalPlus: "personal_plus",
4405
+ PersonalPro: "personal_pro",
4374
4406
  Tier1: "tier_1",
4375
4407
  Tier2: "tier_2"
4376
4408
  });
@@ -4437,6 +4469,7 @@ enumValues({
4437
4469
  });
4438
4470
  enumValues({
4439
4471
  Usage: "usage",
4472
+ SubscriptionUsage: "subscription_usage",
4440
4473
  TopUp: "top_up",
4441
4474
  SubscriptionCredit: "subscription_credit",
4442
4475
  AutoRecharge: "auto_recharge",
@@ -4534,6 +4567,8 @@ enumValues({
4534
4567
  //#endregion
4535
4568
  //#region ../../packages-internal/types/dist/models.js
4536
4569
  const AnthropicModel = {
4570
+ Opus48: "claude-opus-4-8",
4571
+ Opus47: "claude-opus-4-7",
4537
4572
  Opus: "claude-opus-4-6",
4538
4573
  Sonnet: "claude-sonnet-4-6",
4539
4574
  Haiku: "claude-haiku-4-5"
@@ -4564,6 +4599,9 @@ const DeepSeekModel = {
4564
4599
  };
4565
4600
  const DEEPSEEK_MODELS = enumValues(DeepSeekModel);
4566
4601
  const GoogleModel = {
4602
+ Gemini35Flash: "gemini-3.5-flash",
4603
+ Gemini31Pro: "gemini-3.1-pro-preview",
4604
+ Gemini31FlashLite: "gemini-3.1-flash-lite",
4567
4605
  Gemini25Pro: "gemini-2.5-pro",
4568
4606
  Gemini25Flash: "gemini-2.5-flash",
4569
4607
  Gemini25FlashLite: "gemini-2.5-flash-lite",
@@ -4571,6 +4609,7 @@ const GoogleModel = {
4571
4609
  };
4572
4610
  const GOOGLE_MODELS = enumValues(GoogleModel);
4573
4611
  const MiniMaxModel = {
4612
+ M3: "MiniMax-M3",
4574
4613
  M27: "MiniMax-M2.7",
4575
4614
  M27HighSpeed: "MiniMax-M2.7-highspeed",
4576
4615
  M25: "MiniMax-M2.5"
@@ -4583,16 +4622,18 @@ const MistralModel = {
4583
4622
  };
4584
4623
  const MISTRAL_MODELS = enumValues(MistralModel);
4585
4624
  const XAIModel = {
4625
+ Grok43: "grok-4.3",
4586
4626
  Grok4: "grok-4",
4587
4627
  Grok41Fast: "grok-4.1-fast"
4588
4628
  };
4589
4629
  const XAI_MODELS = enumValues(XAIModel);
4590
4630
  const ZhipuModel = {
4591
- GLM51: "glm-5-1",
4592
- GLM51Air: "glm-5-1-air"
4631
+ GLM52: "glm-5.2",
4632
+ GLM51: "glm-5.1",
4633
+ GLM51Air: "glm-5.1-air"
4593
4634
  };
4594
4635
  const ZHIPU_MODELS = enumValues(ZhipuModel);
4595
- AnthropicModel.Sonnet;
4636
+ AnthropicModel.Opus48;
4596
4637
  [
4597
4638
  ...ANTHROPIC_MODELS,
4598
4639
  ...OPENAI_MODELS,
@@ -4612,8 +4653,8 @@ _enum(MISTRAL_MODELS);
4612
4653
  _enum(XAI_MODELS);
4613
4654
  _enum(ZHIPU_MODELS);
4614
4655
  string().min(1);
4615
- AnthropicModel.Opus, AnthropicModel.Sonnet, AnthropicModel.Haiku, OpenAIModel.GPT4o, OpenAIModel.GPT4oMini, OpenAIModel.O3, OpenAIModel.GPT41, OpenAIModel.GPT41Mini, OpenAIModel.GPT41Nano, OpenAIModel.GPT54, OpenAIModel.GPT54Mini, OpenAIModel.GPT54Nano, OpenAIModel.GPT54Pro, OpenAIModel.GPT55, OpenAIModel.O3Mini, OpenAIModel.O4Mini, OpenAIModel.TextEmbedding3Small, DeepSeekModel.Chat, DeepSeekModel.Reasoner, DeepSeekModel.V4Flash, DeepSeekModel.V4Pro, GoogleModel.Gemini25Pro, GoogleModel.Gemini25Flash, GoogleModel.Gemini25FlashLite, GoogleModel.Gemini20Flash, MiniMaxModel.M27, MiniMaxModel.M27HighSpeed, MiniMaxModel.M25, MistralModel.Large, MistralModel.Small, MistralModel.Codestral, XAIModel.Grok4, XAIModel.Grok41Fast, ZhipuModel.GLM51, ZhipuModel.GLM51Air;
4616
- AnthropicModel.Opus, AnthropicModel.Sonnet, AnthropicModel.Haiku, OpenAIModel.GPT4o, OpenAIModel.GPT4oMini, OpenAIModel.O3, OpenAIModel.GPT41, OpenAIModel.GPT41Mini, OpenAIModel.GPT41Nano, OpenAIModel.GPT54, OpenAIModel.GPT54Mini, OpenAIModel.GPT54Nano, OpenAIModel.GPT54Pro, OpenAIModel.GPT55, OpenAIModel.O3Mini, OpenAIModel.O4Mini, OpenAIModel.TextEmbedding3Small, DeepSeekModel.Chat, DeepSeekModel.Reasoner, DeepSeekModel.V4Flash, DeepSeekModel.V4Pro, GoogleModel.Gemini25Pro, GoogleModel.Gemini25Flash, GoogleModel.Gemini25FlashLite, GoogleModel.Gemini20Flash, MiniMaxModel.M27, MiniMaxModel.M27HighSpeed, MiniMaxModel.M25, MistralModel.Large, MistralModel.Small, MistralModel.Codestral, XAIModel.Grok4, XAIModel.Grok41Fast, ZhipuModel.GLM51, ZhipuModel.GLM51Air;
4656
+ AnthropicModel.Opus48, AnthropicModel.Opus47, AnthropicModel.Opus, AnthropicModel.Sonnet, AnthropicModel.Haiku, OpenAIModel.GPT4o, OpenAIModel.GPT4oMini, OpenAIModel.O3, OpenAIModel.GPT41, OpenAIModel.GPT41Mini, OpenAIModel.GPT41Nano, OpenAIModel.GPT54, OpenAIModel.GPT54Mini, OpenAIModel.GPT54Nano, OpenAIModel.GPT54Pro, OpenAIModel.GPT55, OpenAIModel.O3Mini, OpenAIModel.O4Mini, OpenAIModel.TextEmbedding3Small, 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, MistralModel.Large, MistralModel.Small, MistralModel.Codestral, XAIModel.Grok43, XAIModel.Grok4, XAIModel.Grok41Fast, ZhipuModel.GLM52, ZhipuModel.GLM51, ZhipuModel.GLM51Air;
4657
+ AnthropicModel.Opus48, AnthropicModel.Opus47, AnthropicModel.Opus, AnthropicModel.Sonnet, AnthropicModel.Haiku, OpenAIModel.GPT4o, OpenAIModel.GPT4oMini, OpenAIModel.O3, OpenAIModel.GPT41, OpenAIModel.GPT41Mini, OpenAIModel.GPT41Nano, OpenAIModel.GPT54, OpenAIModel.GPT54Mini, OpenAIModel.GPT54Nano, OpenAIModel.GPT54Pro, OpenAIModel.GPT55, OpenAIModel.O3Mini, OpenAIModel.O4Mini, OpenAIModel.TextEmbedding3Small, 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, MistralModel.Large, MistralModel.Small, MistralModel.Codestral, XAIModel.Grok43, XAIModel.Grok4, XAIModel.Grok41Fast, ZhipuModel.GLM52, ZhipuModel.GLM51, ZhipuModel.GLM51Air;
4617
4658
  enumValues({
4618
4659
  PendingChallenge: "pending_challenge",
4619
4660
  Creating: "creating",
@@ -5167,7 +5208,7 @@ var ReconciliationEngine = class {
5167
5208
  try {
5168
5209
  if (!local) {
5169
5210
  log$2.info(`Installing ${id}@${desired.version}`);
5170
- await this.manager.install(id, desired.version, desired.config);
5211
+ await this.manager.install(id, desired.version, desired.config, desired.customSource);
5171
5212
  report.installed.push(id);
5172
5213
  log$2.info(`Activating ${id}`);
5173
5214
  if ((await this.manager.activate(id)).configApplied) report.configApplied = true;
@@ -5181,7 +5222,7 @@ var ReconciliationEngine = class {
5181
5222
  }
5182
5223
  if (local.version !== desired.version && desired.version !== "" && local.version !== "unknown") {
5183
5224
  log$2.info(`Upgrading ${id}: ${local.version} → ${desired.version}`);
5184
- if ((await this.manager.reinstall(id, desired.version, desired.config)).configApplied) report.configApplied = true;
5225
+ if ((await this.manager.reinstall(id, desired.version, desired.config, desired.customSource)).configApplied) report.configApplied = true;
5185
5226
  report.installed.push(id);
5186
5227
  report.activated.push(id);
5187
5228
  report.results.push({
@@ -5195,7 +5236,7 @@ var ReconciliationEngine = class {
5195
5236
  if (desired.reinstallRequestedAt && local.installedAt && desired.reinstallRequestedAt > local.installedAt) {
5196
5237
  log$2.info(`Reinstalling ${id} from error state (requested: ${desired.reinstallRequestedAt}, installed: ${local.installedAt})`);
5197
5238
  this.manager.resetReinstallAttempts(id);
5198
- if ((await this.manager.reinstall(id, desired.version, desired.config)).configApplied) report.configApplied = true;
5239
+ if ((await this.manager.reinstall(id, desired.version, desired.config, desired.customSource)).configApplied) report.configApplied = true;
5199
5240
  report.installed.push(id);
5200
5241
  report.activated.push(id);
5201
5242
  report.results.push({
@@ -5224,7 +5265,7 @@ var ReconciliationEngine = class {
5224
5265
  log$2.info(`Auto-reinstalling ${id} — install directory is corrupted or missing (attempt ${String(attempts + 1)}/3)`);
5225
5266
  this.manager.incrementReinstallAttempts(id);
5226
5267
  try {
5227
- if ((await this.manager.reinstall(id, desired.version, desired.config)).configApplied) report.configApplied = true;
5268
+ if ((await this.manager.reinstall(id, desired.version, desired.config, desired.customSource)).configApplied) report.configApplied = true;
5228
5269
  this.manager.resetReinstallAttempts(id);
5229
5270
  report.installed.push(id);
5230
5271
  report.activated.push(id);
@@ -5276,7 +5317,7 @@ var ReconciliationEngine = class {
5276
5317
  if (desired.reinstallRequestedAt && local.installedAt && desired.reinstallRequestedAt > local.installedAt) {
5277
5318
  log$2.info(`Reinstall requested for ${id} (requested: ${desired.reinstallRequestedAt}, installed: ${local.installedAt})`);
5278
5319
  this.manager.resetReinstallAttempts(id);
5279
- if ((await this.manager.reinstall(id, desired.version, desired.config)).configApplied) report.configApplied = true;
5320
+ if ((await this.manager.reinstall(id, desired.version, desired.config, desired.customSource)).configApplied) report.configApplied = true;
5280
5321
  report.installed.push(id);
5281
5322
  report.activated.push(id);
5282
5323
  report.results.push({
@@ -22092,7 +22133,28 @@ let stopPairingApprovalPoller = null;
22092
22133
  * `undefined` for unknown providers and on 404/network error so the
22093
22134
  * applier can skip registration silently (its documented contract).
22094
22135
  */
22095
- async function fetchProviderCredentials(agentApi, provider) {
22136
+ async function fetchProviderCredentials(agentApi, provider, connectionId) {
22137
+ if (connectionId) try {
22138
+ const raw = await agentApi.getConnectionCredentials(connectionId);
22139
+ const fields = { ...raw.providerMetadata ?? {} };
22140
+ if (typeof raw.accessToken === "string" && raw.accessToken.length > 0) try {
22141
+ const bundle = JSON.parse(raw.accessToken);
22142
+ if (bundle && typeof bundle === "object" && !Array.isArray(bundle)) Object.assign(fields, bundle);
22143
+ } catch (err) {
22144
+ logger$1.warn({
22145
+ connectionId,
22146
+ err: err instanceof Error ? err.message : String(err)
22147
+ }, "Custom connection accessToken is not a JSON bundle — exposing as accessToken field");
22148
+ fields.accessToken = raw.accessToken;
22149
+ }
22150
+ return fields;
22151
+ } catch (err) {
22152
+ logger$1.warn({
22153
+ connectionId,
22154
+ err: err instanceof Error ? err.message : String(err)
22155
+ }, "Failed to resolve connection-scoped credentials — MCP server will be skipped");
22156
+ return;
22157
+ }
22096
22158
  const key = provider.toLowerCase();
22097
22159
  try {
22098
22160
  switch (key) {
@@ -22360,7 +22422,7 @@ async function startDaemon() {
22360
22422
  runtimeAppliers,
22361
22423
  mcpApplier: new McpApplier({
22362
22424
  manager: mcpManager,
22363
- credentials: { getCredentials: (provider) => fetchProviderCredentials(agentApi, provider) },
22425
+ credentials: { getCredentials: (provider, opts) => fetchProviderCredentials(agentApi, provider, opts?.connectionId) },
22364
22426
  platform: { apiUrl: config.apiEndpoint }
22365
22427
  }),
22366
22428
  registryFetcher: async () => {
@@ -22499,6 +22561,18 @@ async function handleCloudCommand(command) {
22499
22561
  }
22500
22562
  };
22501
22563
  }
22564
+ if (command.command === "daemon.restart") {
22565
+ logger$1.info("Restart requested — exiting for systemd restart");
22566
+ setTimeout(() => {
22567
+ process.exit(0);
22568
+ }, 500);
22569
+ return {
22570
+ type: "COMMAND_ACK",
22571
+ commandId: command.commandId,
22572
+ status: "ok",
22573
+ result: { restarting: true }
22574
+ };
22575
+ }
22502
22576
  if (command.command === "runtime.update") {
22503
22577
  if (upgradingRuntime) return {
22504
22578
  type: "COMMAND_ACK",
@@ -22509,7 +22583,7 @@ async function handleCloudCommand(command) {
22509
22583
  message: "Runtime upgrade already in progress"
22510
22584
  }
22511
22585
  };
22512
- const version = command.payload?.version ?? "latest";
22586
+ const version = command.payload?.version ?? "2026.6.8";
22513
22587
  upgradingRuntime = true;
22514
22588
  setTimeout(() => {
22515
22589
  (async () => {
@@ -23126,4 +23200,4 @@ function formatDuration(ms) {
23126
23200
  return `${String(Math.round(seconds / 3600))}h`;
23127
23201
  }
23128
23202
  //#endregion
23129
- export { installService as a, uninstallService as c, PID_PATH as d, SOCKET_PATH as f, resolveAgentIdentity as h, checkExistingDaemon as i, PROTOCOL_VERSION as l, loadDaemonConfig as m, queryDaemonHealth as n, startService as o, fetchAgentConfig as p, startDaemon as r, stopExistingDaemon as s, formatHealthReport as t, ALFE_DIR as u };
23203
+ export { installService as a, uninstallService as c, PID_PATH as d, SOCKET_PATH as f, PINNED_OPENCLAW_VERSION as g, resolveAgentIdentity as h, checkExistingDaemon as i, PROTOCOL_VERSION as l, loadDaemonConfig as m, queryDaemonHealth as n, startService as o, fetchAgentConfig as p, startDaemon as r, stopExistingDaemon as s, formatHealthReport as t, ALFE_DIR as u };
@@ -29,6 +29,23 @@ declare const PROTOCOL_VERSION = 1;
29
29
 
30
30
  declare function startDaemon(): Promise<void>;
31
31
  //#endregion
32
+ //#region src/openclaw-version.d.ts
33
+ /**
34
+ * The OpenClaw runtime version Alfe pins managed agents to — the single source of
35
+ * truth for every install path:
36
+ * - `@alfe.ai/cli` `installRuntime` (fresh `alfe setup`)
37
+ * - the daemon `runtime.update` default (this package)
38
+ * - the managed Docker image (`services/compute/Dockerfile` — build args can't import
39
+ * TypeScript, so it hardcodes this same value; keep them in sync)
40
+ *
41
+ * Pinning (rather than floating `npm install -g openclaw` → `latest`) is deliberate:
42
+ * OpenClaw runs on every managed agent, so a `latest` that changes runtime semantics —
43
+ * e.g. 2026.6.8 made a non-empty `plugins.allow` an exclusive allowlist — becomes a
44
+ * silent fleet outage with no Alfe deploy. Bump deliberately after validating a new
45
+ * OpenClaw, then cut a CLI release so the pin travels with the CLI version.
46
+ */
47
+ declare const PINNED_OPENCLAW_VERSION = "2026.6.8";
48
+ //#endregion
32
49
  //#region src/config.d.ts
33
50
  /**
34
51
  * Daemon configuration — reads ~/.alfe/config.toml and resolves agent identity.
@@ -189,4 +206,4 @@ declare function checkExistingDaemon(): Promise<number | null>;
189
206
  */
190
207
  declare function stopExistingDaemon(): Promise<boolean>;
191
208
  //#endregion
192
- export { ALFE_DIR, type AgentIdentity, type AgentWorkspaceConfig, type DaemonConfig, type DaemonHealth, type IPCEvent, type IPCRequest, type IPCResponse, PID_PATH, PROTOCOL_VERSION, SOCKET_PATH, checkExistingDaemon, fetchAgentConfig, formatHealthReport, installService, loadDaemonConfig, logger, queryDaemonHealth, resolveAgentIdentity, startDaemon, startService, stopExistingDaemon, uninstallService };
209
+ export { ALFE_DIR, type AgentIdentity, type AgentWorkspaceConfig, type DaemonConfig, type DaemonHealth, type IPCEvent, type IPCRequest, type IPCResponse, PID_PATH, PINNED_OPENCLAW_VERSION, PROTOCOL_VERSION, SOCKET_PATH, checkExistingDaemon, fetchAgentConfig, formatHealthReport, installService, loadDaemonConfig, logger, queryDaemonHealth, resolveAgentIdentity, startDaemon, startService, stopExistingDaemon, uninstallService };
package/dist/src/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import { a as installService, c as uninstallService, d as PID_PATH, f as SOCKET_PATH, h as resolveAgentIdentity, i as checkExistingDaemon, l as PROTOCOL_VERSION, m as loadDaemonConfig, n as queryDaemonHealth, o as startService, p as fetchAgentConfig, r as startDaemon, s as stopExistingDaemon, t as formatHealthReport, u as ALFE_DIR } from "../health.js";
1
+ import { a as installService, c as uninstallService, d as PID_PATH, f as SOCKET_PATH, g as PINNED_OPENCLAW_VERSION, h as resolveAgentIdentity, i as checkExistingDaemon, l as PROTOCOL_VERSION, m as loadDaemonConfig, n as queryDaemonHealth, o as startService, p as fetchAgentConfig, r as startDaemon, s as stopExistingDaemon, t as formatHealthReport, u as ALFE_DIR } from "../health.js";
2
2
  import { n as logger } from "../logger.js";
3
- export { ALFE_DIR, PID_PATH, PROTOCOL_VERSION, SOCKET_PATH, checkExistingDaemon, fetchAgentConfig, formatHealthReport, installService, loadDaemonConfig, logger, queryDaemonHealth, resolveAgentIdentity, startDaemon, startService, stopExistingDaemon, uninstallService };
3
+ export { ALFE_DIR, PID_PATH, PINNED_OPENCLAW_VERSION, PROTOCOL_VERSION, SOCKET_PATH, checkExistingDaemon, fetchAgentConfig, formatHealthReport, installService, loadDaemonConfig, logger, queryDaemonHealth, resolveAgentIdentity, startDaemon, startService, stopExistingDaemon, uninstallService };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfe.ai/gateway",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Alfe local gateway daemon — persistent control plane for agent integrations",
5
5
  "type": "module",
6
6
  "bin": {
@@ -22,12 +22,12 @@
22
22
  "pino-roll": "^1.2.0",
23
23
  "smol-toml": ">=1.6.1",
24
24
  "ws": "^8.18.0",
25
- "@alfe.ai/agent-api-client": "^0.2.0",
25
+ "@alfe.ai/agent-api-client": "^0.2.2",
26
26
  "@alfe.ai/ai-proxy-local": "^0.0.10",
27
27
  "@alfe.ai/config": "^0.0.9",
28
- "@alfe.ai/integration-manifest": "^0.2.0",
29
- "@alfe.ai/integrations": "^0.1.2",
30
- "@alfe.ai/mcp-bundler": "^0.2.0"
28
+ "@alfe.ai/integration-manifest": "^0.2.1",
29
+ "@alfe.ai/integrations": "^0.1.5",
30
+ "@alfe.ai/mcp-bundler": "^0.2.1"
31
31
  },
32
32
  "license": "UNLICENSED",
33
33
  "scripts": {