@fased/fased 0.1.37 → 0.1.39

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 (86) hide show
  1. package/dist/brand.js +1 -1
  2. package/dist/build-info.json +3 -3
  3. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  4. package/dist/cli/daemon-cli/install.js +38 -14
  5. package/dist/cli/daemon-cli/register-service-commands.js +1 -1
  6. package/dist/cli/update-cli/service-target.js +13 -0
  7. package/dist/cli/update-cli/update-command.js +122 -44
  8. package/dist/commands/daemon-install-helpers.js +3 -0
  9. package/dist/daemon/service.js +5 -0
  10. package/dist/daemon/systemd-system.js +237 -0
  11. package/dist/daemon/systemd.js +2 -2
  12. package/dist/infra/update-runner.js +41 -5
  13. package/dist/plugin-sdk/{accounts-C5BjfxoO.js → accounts-COY-15zJ.js} +1 -1
  14. package/dist/plugin-sdk/{audio-preflight-CuABlLDL.js → audio-preflight-DIJQAjNX.js} +1 -1
  15. package/dist/plugin-sdk/{audio-preflight-C8SbY4fV.js → audio-preflight-WolqDIx8.js} +1 -1
  16. package/dist/plugin-sdk/channel-plugin-common.js +2 -2
  17. package/dist/plugin-sdk/{chunk-items-BGbYyNvO.js → chunk-items-j6n1a2yQ.js} +1 -1
  18. package/dist/plugin-sdk/command-status.js +1 -1
  19. package/dist/plugin-sdk/{config-C0qggNKQ.js → config-BxVjLTIv.js} +7 -7
  20. package/dist/plugin-sdk/{config-z0k05dwe.js → config-CZaFbNZU.js} +1 -1
  21. package/dist/plugin-sdk/{config-B6SjJFp-.js → config-DLVjQxOu.js} +1 -1
  22. package/dist/plugin-sdk/{config-g1MG9Bet.js → config-DgD5T-Ui.js} +7 -7
  23. package/dist/plugin-sdk/index.js +12 -2
  24. package/dist/plugin-sdk/{login-CfRfRNc7.js → login-YveoqEvH.js} +2 -2
  25. package/dist/plugin-sdk/{monitor-9X7wapUN.js → monitor-C20pbAuB.js} +3 -3
  26. package/dist/plugin-sdk/{monitor-CTjAST_W.js → monitor-DyW8M8cP.js} +3 -3
  27. package/dist/plugin-sdk/{monitor-B3IfJzKX.js → monitor-JQsKE-Nn.js} +3 -3
  28. package/dist/plugin-sdk/{monitor-tYFfy2u-.js → monitor-jztLTK6V.js} +3 -3
  29. package/dist/plugin-sdk/{openresponses-http-YgMg1jnp.js → openresponses-http-81UzNEsm.js} +1 -1
  30. package/dist/plugin-sdk/{openresponses-http-DEB2fEya.js → openresponses-http-DXTQURTj.js} +1 -1
  31. package/dist/plugin-sdk/{pi-embedded-runner-CUVk8CIj.js → pi-embedded-runner-BXCGeeps.js} +7 -7
  32. package/dist/plugin-sdk/{pi-model-discovery-runtime-LB-5lX5L.js → pi-model-discovery-runtime-BvFEoUSk.js} +1 -1
  33. package/dist/plugin-sdk/{pi-model-discovery-runtime-CKKNoqwk.js → pi-model-discovery-runtime-CQOauapl.js} +1 -1
  34. package/dist/plugin-sdk/{pi-model-discovery-runtime-DyOIGBor.js → pi-model-discovery-runtime-DYfUuqPN.js} +1 -1
  35. package/dist/plugin-sdk/{pi-model-discovery-runtime-C5ssE6EW.js → pi-model-discovery-runtime-DxoFm4Vd.js} +1 -1
  36. package/dist/plugin-sdk/{resolve-utils-EFP1DYqG.js → resolve-utils-4mG32lvJ.js} +1 -1
  37. package/dist/plugin-sdk/{slack-C0WZVJPZ.js → slack-DRSLzWUb.js} +3 -3
  38. package/dist/plugin-sdk/{slack-DtlPw_PN.js → slack-qsR7PUPb.js} +3 -3
  39. package/dist/plugin-sdk/slack.js +2 -2
  40. package/dist/plugin-sdk/src/brand.d.ts +2 -2
  41. package/dist/plugin-sdk/src/daemon/systemd-system.d.ts +28 -0
  42. package/dist/plugin-sdk/{status-CIiBeb9B.js → status-Cl4MeWSg.js} +7 -7
  43. package/dist/plugin-sdk/{sticker-cache-Dwi-XsgB.js → sticker-cache-CcER-WWu.js} +2 -2
  44. package/dist/plugin-sdk/{sticker-cache-9houHChV.js → sticker-cache-DjFhjSZc.js} +2 -2
  45. package/dist/plugin-sdk/{telegram-actions-CRXVO8lG.js → telegram-actions-8Rjfgf8m.js} +2 -2
  46. package/dist/plugin-sdk/{telegram-actions-Bu1edXF2.js → telegram-actions-DfDEOBPg.js} +2 -2
  47. package/dist/plugin-sdk/telegram.js +2 -2
  48. package/dist/plugin-sdk/{web-DCrVQr6y.js → web-BbgvbXQz.js} +1 -1
  49. package/dist/plugin-sdk/{web-Ds6OWw3C.js → web-KBdzfu6K.js} +1 -1
  50. package/dist/plugin-sdk/whatsapp.js +4 -4
  51. package/extensions/acpx/package.json +1 -1
  52. package/extensions/bluebubbles/package.json +1 -1
  53. package/extensions/copilot-proxy/package.json +1 -1
  54. package/extensions/diagnostics-otel/package.json +1 -1
  55. package/extensions/fased-federation/package.json +1 -1
  56. package/extensions/google-gemini-cli-auth/package.json +1 -1
  57. package/extensions/imessage/package.json +1 -1
  58. package/extensions/irc/package.json +1 -1
  59. package/extensions/line/package.json +1 -1
  60. package/extensions/llm-task/package.json +1 -1
  61. package/extensions/lobster/package.json +1 -1
  62. package/extensions/matrix/CHANGELOG.md +6 -0
  63. package/extensions/matrix/package.json +1 -1
  64. package/extensions/mattermost/package.json +1 -1
  65. package/extensions/memory-core/package.json +2 -2
  66. package/extensions/memory-lancedb/package.json +1 -1
  67. package/extensions/minimax-portal-auth/package.json +1 -1
  68. package/extensions/msteams/CHANGELOG.md +6 -0
  69. package/extensions/msteams/package.json +1 -1
  70. package/extensions/nextcloud-talk/package.json +1 -1
  71. package/extensions/nostr/CHANGELOG.md +6 -0
  72. package/extensions/nostr/package.json +1 -1
  73. package/extensions/open-prose/package.json +1 -1
  74. package/extensions/sat-mining/package.json +1 -1
  75. package/extensions/signal/package.json +1 -1
  76. package/extensions/synology-chat/package.json +1 -1
  77. package/extensions/tlon/package.json +1 -1
  78. package/extensions/twitch/CHANGELOG.md +6 -0
  79. package/extensions/twitch/package.json +1 -1
  80. package/extensions/voice-call/CHANGELOG.md +6 -0
  81. package/extensions/voice-call/package.json +1 -1
  82. package/extensions/zalo/CHANGELOG.md +6 -0
  83. package/extensions/zalo/package.json +1 -1
  84. package/extensions/zalouser/CHANGELOG.md +6 -0
  85. package/extensions/zalouser/package.json +1 -1
  86. package/package.json +1 -1
@@ -288,6 +288,26 @@ async function safeRemove(pathname) {
288
288
  force: true
289
289
  }).catch(() => undefined);
290
290
  }
291
+ async function finalizeUpdateTransaction(transaction) {
292
+ if (!transaction) {
293
+ return;
294
+ }
295
+ await safeRemove(transaction.backupRoot);
296
+ }
297
+ async function rollbackUpdateTransaction(transaction) {
298
+ if (!transaction) {
299
+ return;
300
+ }
301
+ const failedRoot = `${transaction.packageRoot}.failed-${Date.now()}`;
302
+ await fs.rename(transaction.packageRoot, failedRoot);
303
+ try {
304
+ await fs.rename(transaction.backupRoot, transaction.packageRoot);
305
+ } catch (error) {
306
+ await fs.rename(failedRoot, transaction.packageRoot).catch(() => undefined);
307
+ throw error;
308
+ }
309
+ await safeRemove(failedRoot);
310
+ }
291
311
  async function swapPackageRoot(params) {
292
312
  const packageParent = path.dirname(params.pkgRoot);
293
313
  const backupRoot = path.join(packageParent, `.fased-backup-${Date.now()}-${path.basename(params.pkgRoot)}`);
@@ -305,6 +325,7 @@ async function runHostedArtifactUpdate(params) {
305
325
  const tempRoot = await fs.mkdtemp(path.join(packageParent, ".fased-artifact-update-"));
306
326
  const steps = [];
307
327
  let backupRoot = null;
328
+ let retainBackup = false;
308
329
  try {
309
330
  const spec = `${params.packageName}@${params.expectedVersion}`;
310
331
  const packStep = await runStep({
@@ -450,13 +471,19 @@ async function runHostedArtifactUpdate(params) {
450
471
  };
451
472
  }
452
473
  const afterVersion = await readPackageVersion(params.pkgRoot);
474
+ retainBackup = true;
453
475
  return {
454
476
  kind: "updated",
455
477
  steps,
456
- afterVersion
478
+ afterVersion,
479
+ transaction: {
480
+ kind: "package-root-swap",
481
+ packageRoot: params.pkgRoot,
482
+ backupRoot
483
+ }
457
484
  };
458
485
  } finally {
459
- if (backupRoot) {
486
+ if (backupRoot && !retainBackup) {
460
487
  await safeRemove(backupRoot);
461
488
  }
462
489
  await safeRemove(tempRoot);
@@ -475,6 +502,7 @@ async function runHostedReleaseArtifactUpdate(params) {
475
502
  const tempRoot = await fs.mkdtemp(path.join(packageParent, ".fased-release-update-"));
476
503
  const steps = [];
477
504
  let backupRoot = null;
505
+ let retainBackup = false;
478
506
  let progressIndex = 0;
479
507
  const totalSteps = 4;
480
508
  const startProgress = (name, command, cwd) => {
@@ -651,13 +679,19 @@ async function runHostedReleaseArtifactUpdate(params) {
651
679
  afterVersion: await readPackageVersion(params.pkgRoot)
652
680
  };
653
681
  }
682
+ retainBackup = true;
654
683
  return {
655
684
  kind: "updated",
656
685
  steps,
657
- afterVersion: await readPackageVersion(params.pkgRoot)
686
+ afterVersion: await readPackageVersion(params.pkgRoot),
687
+ transaction: {
688
+ kind: "package-root-swap",
689
+ packageRoot: params.pkgRoot,
690
+ backupRoot
691
+ }
658
692
  };
659
693
  } finally {
660
- if (backupRoot) {
694
+ if (backupRoot && !retainBackup) {
661
695
  await safeRemove(backupRoot);
662
696
  }
663
697
  await safeRemove(tempRoot);
@@ -1374,6 +1408,7 @@ async function runGatewayUpdate(opts = {}) {
1374
1408
  root: pkgRoot,
1375
1409
  before: { version: beforeVersion },
1376
1410
  after: { version: releaseResult.afterVersion },
1411
+ transaction: releaseResult.transaction,
1377
1412
  steps,
1378
1413
  durationMs: Date.now() - startedAt
1379
1414
  };
@@ -1418,6 +1453,7 @@ async function runGatewayUpdate(opts = {}) {
1418
1453
  root: pkgRoot,
1419
1454
  before: { version: beforeVersion },
1420
1455
  after: { version: artifactResult.afterVersion },
1456
+ transaction: artifactResult.transaction,
1421
1457
  steps,
1422
1458
  durationMs: Date.now() - startedAt
1423
1459
  };
@@ -1518,4 +1554,4 @@ async function runGatewayUpdate(opts = {}) {
1518
1554
  }
1519
1555
 
1520
1556
  //#endregion
1521
- export { runGatewayUpdate };
1557
+ export { finalizeUpdateTransaction, rollbackUpdateTransaction, runGatewayUpdate };
@@ -1,4 +1,4 @@
1
- import { A as info, E as resolveUserPath, I as expandHomePrefix, L as resolveRequiredHomeDir, M as getChildLogger, O as defaultRuntime, P as resolveOAuthDir, j as success, v as DEFAULT_ACCOUNT_ID, y as normalizeAccountId } from "./config-g1MG9Bet.js";
1
+ import { A as info, E as resolveUserPath, I as expandHomePrefix, L as resolveRequiredHomeDir, M as getChildLogger, O as defaultRuntime, P as resolveOAuthDir, j as success, v as DEFAULT_ACCOUNT_ID, y as normalizeAccountId } from "./config-DgD5T-Ui.js";
2
2
  import path from "node:path";
3
3
  import fs from "node:fs";
4
4
  import os from "node:os";
@@ -14,7 +14,7 @@ import "./accounts-BwkH5bTD.js";
14
14
  import "./tokens-BK5rrwBB.js";
15
15
  import "./allow-list-CBtbuDI8.js";
16
16
  import "./paths-DTurNPnO.js";
17
- import { ct as buildProviderRegistry, ft as resolveMediaAttachmentLocalRoots, lt as createMediaAttachmentCache, mt as isAudioAttachment, pt as runCapability, ut as normalizeMediaAttachments } from "./status-CIiBeb9B.js";
17
+ import { ct as buildProviderRegistry, ft as resolveMediaAttachmentLocalRoots, lt as createMediaAttachmentCache, mt as isAudioAttachment, pt as runCapability, ut as normalizeMediaAttachments } from "./status-Cl4MeWSg.js";
18
18
  import "./runtime-dependency-B-1u41Ph.js";
19
19
  import "./ssrf-Cce6LubA.js";
20
20
  import "./skill-commands-hyZA0LE3.js";
@@ -1,4 +1,4 @@
1
- import { At as resolveMediaAttachmentLocalRoots, Dt as createMediaAttachmentCache, Et as buildProviderRegistry, Mt as isAudioAttachment, Ot as normalizeMediaAttachments, jt as runCapability } from "./pi-embedded-runner-CUVk8CIj.js";
1
+ import { At as resolveMediaAttachmentLocalRoots, Dt as createMediaAttachmentCache, Et as buildProviderRegistry, Mt as isAudioAttachment, Ot as normalizeMediaAttachments, jt as runCapability } from "./pi-embedded-runner-BXCGeeps.js";
2
2
  import "./runtime-BPyuAmka.js";
3
3
  import "./subsystem-DBPNbQDQ.js";
4
4
  import { i as logVerbose, s as shouldLogVerbose } from "./globals-B_jjtAje.js";
@@ -1,4 +1,4 @@
1
- import { a as resolveImplicitProviders, c as resolveProcessScopedMap, d as expandHomePrefix, f as resolveRequiredHomeDir, h as normalizeAccountId, i as resolveImplicitCopilotProvider, l as isRecord, m as DEFAULT_ACCOUNT_ID, p as formatCliCommand, r as normalizeProviders, s as resolveFasedAgentDir, t as loadConfig, u as createSubsystemLogger } from "./config-C0qggNKQ.js";
1
+ import { a as resolveImplicitProviders, c as resolveProcessScopedMap, d as expandHomePrefix, f as resolveRequiredHomeDir, h as normalizeAccountId, i as resolveImplicitCopilotProvider, l as isRecord, m as DEFAULT_ACCOUNT_ID, p as formatCliCommand, r as normalizeProviders, s as resolveFasedAgentDir, t as loadConfig, u as createSubsystemLogger } from "./config-BxVjLTIv.js";
2
2
  import fs from "node:fs";
3
3
  import path from "node:path";
4
4
  import os from "node:os";
@@ -856,7 +856,7 @@ async function loadContextCache() {
856
856
  await ensureFasedModelsJson(cfg);
857
857
  } catch {}
858
858
  try {
859
- const { discoverAuthStorage, discoverModels } = await import("./pi-model-discovery-runtime-C5ssE6EW.js");
859
+ const { discoverAuthStorage, discoverModels } = await import("./pi-model-discovery-runtime-DxoFm4Vd.js");
860
860
  const agentDir = resolveFasedAgentDir();
861
861
  const modelRegistry = discoverModels(discoverAuthStorage(agentDir), agentDir);
862
862
  applyDiscoveredContextWindows({
@@ -1,4 +1,4 @@
1
- import { gt as wrapExternalContent } from "./pi-embedded-runner-CUVk8CIj.js";
1
+ import { gt as wrapExternalContent } from "./pi-embedded-runner-BXCGeeps.js";
2
2
 
3
3
  //#region src/security/channel-metadata.ts
4
4
  const DEFAULT_MAX_CHARS = 800;
@@ -14,7 +14,7 @@ import "./accounts-BwkH5bTD.js";
14
14
  import "./tokens-BK5rrwBB.js";
15
15
  import "./allow-list-CBtbuDI8.js";
16
16
  import "./paths-DTurNPnO.js";
17
- import { n as buildCommandsMessagePaginated, r as buildHelpMessage, t as buildCommandsMessage } from "./status-CIiBeb9B.js";
17
+ import { n as buildCommandsMessagePaginated, r as buildHelpMessage, t as buildCommandsMessage } from "./status-Cl4MeWSg.js";
18
18
  import "./runtime-dependency-B-1u41Ph.js";
19
19
  import "./ssrf-Cce6LubA.js";
20
20
  import "./skill-commands-hyZA0LE3.js";
@@ -4,7 +4,7 @@ import path from "node:path";
4
4
  import chalk, { Chalk } from "chalk";
5
5
  import { Logger } from "tslog";
6
6
  import os from "node:os";
7
- import JSON5 from "json5";
7
+ import json5 from "json5";
8
8
  import { isDeepStrictEqual, promisify } from "node:util";
9
9
  import fs$1 from "node:fs/promises";
10
10
  import { execFile, execFileSync } from "node:child_process";
@@ -433,7 +433,7 @@ function readLoggingConfig() {
433
433
  try {
434
434
  if (!fs.existsSync(configPath)) return;
435
435
  const raw = fs.readFileSync(configPath, "utf-8");
436
- const logging = JSON5.parse(raw)?.logging;
436
+ const logging = json5.parse(raw)?.logging;
437
437
  if (!logging || typeof logging !== "object" || Array.isArray(logging)) return;
438
438
  return logging;
439
439
  } catch {
@@ -2795,7 +2795,7 @@ function loadPluginManifest(rootDir) {
2795
2795
  }
2796
2796
  let raw;
2797
2797
  try {
2798
- raw = JSON5.parse(fs.readFileSync(opened.fd, "utf-8"));
2798
+ raw = json5.parse(fs.readFileSync(opened.fd, "utf-8"));
2799
2799
  } catch (err) {
2800
2800
  return {
2801
2801
  ok: false,
@@ -13235,7 +13235,7 @@ const defaultResolver = {
13235
13235
  resolvedPath,
13236
13236
  rootRealDir
13237
13237
  }),
13238
- parseJson: (raw) => JSON5.parse(raw)
13238
+ parseJson: (raw) => json5.parse(raw)
13239
13239
  };
13240
13240
  /**
13241
13241
  * Resolves all $include directives in a parsed config object.
@@ -19848,7 +19848,7 @@ function resolveConfigPathForDeps(deps) {
19848
19848
  function normalizeDeps(overrides = {}) {
19849
19849
  return {
19850
19850
  fs: overrides.fs ?? fs,
19851
- json5: overrides.json5 ?? JSON5,
19851
+ json5: overrides.json5 ?? json5,
19852
19852
  env: overrides.env ?? process.env,
19853
19853
  homedir: overrides.homedir ?? (() => resolveRequiredHomeDir(overrides.env ?? process.env, os.homedir)),
19854
19854
  configPath: overrides.configPath ?? "",
@@ -19859,11 +19859,11 @@ function maybeLoadDotEnvForConfig(env) {
19859
19859
  if (env !== process.env) return;
19860
19860
  loadDotEnv({ quiet: true });
19861
19861
  }
19862
- function parseConfigJson5(raw, json5 = JSON5) {
19862
+ function parseConfigJson5(raw, json5$1 = json5) {
19863
19863
  try {
19864
19864
  return {
19865
19865
  ok: true,
19866
- parsed: json5.parse(raw)
19866
+ parsed: json5$1.parse(raw)
19867
19867
  };
19868
19868
  } catch (err) {
19869
19869
  return {
@@ -20432,4 +20432,4 @@ function loadConfig() {
20432
20432
  }
20433
20433
 
20434
20434
  //#endregion
20435
- export { resolveRequiredHomeDir as C, expandHomePrefix as S, isRecord$2 as _, resolveImplicitCopilotProvider as a, createSubsystemLogger as b, resolveFasedAgentDir as c, resolveDefaultAgentId as d, isTruthyEnvValue as f, formatTerminalLink as g, normalizeAccountId as h, normalizeProviders as i, resolveProcessScopedMap as l, DEFAULT_ACCOUNT_ID as m, SlackConfigSchema as n, resolveImplicitProviders as o, normalizeAgentId as p, normalizeProviderId as r, ensureAuthProfileStore as s, loadConfig as t, formatCliCommand as u, normalizeE164 as v, normalizeChatChannelId as w, resolveOAuthDir as x, resolveUserPath as y };
20435
+ export { resolveRequiredHomeDir as C, expandHomePrefix as S, isRecord$2 as _, resolveImplicitCopilotProvider as a, createSubsystemLogger as b, resolveFasedAgentDir as c, resolveDefaultAgentId as d, isTruthyEnvValue as f, formatTerminalLink as g, normalizeAccountId as h, normalizeProviders as i, resolveProcessScopedMap as l, DEFAULT_ACCOUNT_ID as m, TelegramConfigSchema as n, resolveImplicitProviders as o, normalizeAgentId as p, normalizeProviderId as r, ensureAuthProfileStore as s, loadConfig as t, formatCliCommand as u, normalizeE164 as v, normalizeChatChannelId as w, resolveOAuthDir as x, resolveUserPath as y };
@@ -20432,4 +20432,4 @@ function loadConfig() {
20432
20432
  }
20433
20433
 
20434
20434
  //#endregion
20435
- export { resolveRequiredHomeDir as C, expandHomePrefix as S, isRecord$2 as _, resolveImplicitCopilotProvider as a, createSubsystemLogger as b, resolveFasedAgentDir as c, resolveDefaultAgentId as d, isTruthyEnvValue as f, formatTerminalLink as g, normalizeAccountId as h, normalizeProviders as i, resolveProcessScopedMap as l, DEFAULT_ACCOUNT_ID as m, TelegramConfigSchema as n, resolveImplicitProviders as o, normalizeAgentId as p, normalizeProviderId as r, ensureAuthProfileStore as s, loadConfig as t, formatCliCommand as u, normalizeE164 as v, normalizeChatChannelId as w, resolveOAuthDir as x, resolveUserPath as y };
20435
+ export { resolveRequiredHomeDir as C, expandHomePrefix as S, isRecord$2 as _, resolveImplicitCopilotProvider as a, createSubsystemLogger as b, resolveFasedAgentDir as c, resolveDefaultAgentId as d, isTruthyEnvValue as f, formatTerminalLink as g, normalizeAccountId as h, normalizeProviders as i, resolveProcessScopedMap as l, DEFAULT_ACCOUNT_ID as m, SlackConfigSchema as n, resolveImplicitProviders as o, normalizeAgentId as p, normalizeProviderId as r, ensureAuthProfileStore as s, loadConfig as t, formatCliCommand as u, normalizeE164 as v, normalizeChatChannelId as w, resolveOAuthDir as x, resolveUserPath as y };
@@ -4,7 +4,7 @@ import chalk, { Chalk } from "chalk";
4
4
  import fs, { constants } from "node:fs";
5
5
  import { Logger } from "tslog";
6
6
  import os from "node:os";
7
- import json5 from "json5";
7
+ import JSON5 from "json5";
8
8
  import util, { isDeepStrictEqual, promisify } from "node:util";
9
9
  import fs$1 from "node:fs/promises";
10
10
  import { execFile, execFileSync } from "node:child_process";
@@ -325,7 +325,7 @@ function readLoggingConfig() {
325
325
  try {
326
326
  if (!fs.existsSync(configPath)) return;
327
327
  const raw = fs.readFileSync(configPath, "utf-8");
328
- const logging = json5.parse(raw)?.logging;
328
+ const logging = JSON5.parse(raw)?.logging;
329
329
  if (!logging || typeof logging !== "object" || Array.isArray(logging)) return;
330
330
  return logging;
331
331
  } catch {
@@ -3028,7 +3028,7 @@ function loadPluginManifest(rootDir) {
3028
3028
  }
3029
3029
  let raw;
3030
3030
  try {
3031
- raw = json5.parse(fs.readFileSync(opened.fd, "utf-8"));
3031
+ raw = JSON5.parse(fs.readFileSync(opened.fd, "utf-8"));
3032
3032
  } catch (err) {
3033
3033
  return {
3034
3034
  ok: false,
@@ -13468,7 +13468,7 @@ const defaultResolver = {
13468
13468
  resolvedPath,
13469
13469
  rootRealDir
13470
13470
  }),
13471
- parseJson: (raw) => json5.parse(raw)
13471
+ parseJson: (raw) => JSON5.parse(raw)
13472
13472
  };
13473
13473
  /**
13474
13474
  * Resolves all $include directives in a parsed config object.
@@ -20081,7 +20081,7 @@ function resolveConfigPathForDeps(deps) {
20081
20081
  function normalizeDeps(overrides = {}) {
20082
20082
  return {
20083
20083
  fs: overrides.fs ?? fs,
20084
- json5: overrides.json5 ?? json5,
20084
+ json5: overrides.json5 ?? JSON5,
20085
20085
  env: overrides.env ?? process.env,
20086
20086
  homedir: overrides.homedir ?? (() => resolveRequiredHomeDir(overrides.env ?? process.env, os.homedir)),
20087
20087
  configPath: overrides.configPath ?? "",
@@ -20092,11 +20092,11 @@ function maybeLoadDotEnvForConfig(env) {
20092
20092
  if (env !== process.env) return;
20093
20093
  loadDotEnv({ quiet: true });
20094
20094
  }
20095
- function parseConfigJson5(raw, json5$1 = json5) {
20095
+ function parseConfigJson5(raw, json5 = JSON5) {
20096
20096
  try {
20097
20097
  return {
20098
20098
  ok: true,
20099
- parsed: json5$1.parse(raw)
20099
+ parsed: json5.parse(raw)
20100
20100
  };
20101
20101
  } catch (err) {
20102
20102
  return {
@@ -1,4 +1,4 @@
1
- import { $t as resolveToolDisplay, A as clearHistoryEntriesIfEnabled, An as DEFAULT_FEDERATION_BASE_URL, Bn as validatePushTestParams, Cn as readRequestBodyWithLimit, Cr as assertOkOrThrowHttpError, Dn as runFederationAutoConnectOnce, Dr as BLUEBUBBLES_GROUP_ACTIONS, E as DEFAULT_GROUP_HISTORY_LIMIT, En as resolveChannelMediaMaxBytes, Er as BLUEBUBBLES_ACTION_NAMES, F as recordInboundSession, G as formatInboundFromLabel, Hn as errorShape, I as removeAckReactionAfterReply, Jn as processLineMessage, Kn as resolveModel, L as shouldAckReaction, Ln as loadOrCreateDeviceIdentity, M as recordPendingHistoryEntry, Mn as resolveAgentPublicOrigin, N as recordPendingHistoryEntryIfEnabled, Nn as resolveFederationBaseUrl, O as buildPendingHistoryContextFromMap, On as startFederationAutoConnect, Or as CHANNEL_MESSAGE_ACTION_NAMES, P as formatDocsLink, Pn as resolveFederationHandle, R as shouldAckReactionForWhatsApp, Rn as publicKeyRawBase64UrlFromPem, S as detectBinary, Sn as readJsonBodyWithLimit, Sr as warnMissingProviderGroupPolicyFallbackOnce, Tr as BLUEBUBBLES_ACTIONS, Ut as optionalStringEnum, Vn as ErrorCodes, Wt as stringEnum, Xn as createReceiptCard, Yn as stripMarkdown, Zn as attachFooterText, _ as resolveDefaultLineAccountId, _n as DEFAULT_WEBHOOK_BODY_TIMEOUT_MS, _r as resolveControlCommandGate, _t as getChannelAgentToolMeta, an as getAcpSessionManager, ar as listDevicePairing, b as logInboundDrop, bn as installRequestBodyLimitGuard, br as resolveDefaultGroupPolicy, c as loadModelCatalog, cn as unregisterAcpRuntimeBackend, d as issuePairingChallenge, dr as DM_GROUP_ACCESS_REASON, er as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, f as createTypingCallbacks, fr as readStoreAllowFromForDmPolicy, g as normalizeAccountId$1, h as listLineAccountIds, hr as resolveEffectiveAllowFromLists, ir as approveDevicePairing, j as evictOldHistoryKeys, jn as normalizeHandle, k as clearHistoryEntries, ln as resolveRuntimeOptionsFromMeta, lr as extractToolSend, m as resolveMentionGatingWithBypass, mr as resolveDmGroupAccessWithLists, nr as resolveHeartbeatPrompt, o as resolveStrictAgenticRuntimeMode, on as getAcpRuntimeBackend, or as rejectDevicePairing, ot as createFasedAgentCodingTools, p as resolveMentionGating, pr as resolveDmGroupAccessWithCommandGate, qn as hasMarkdownToConvert, rr as waitForAbortSignal, sn as registerAcpRuntimeBackend, sr as createDedupeCache, st as resolveEffectiveToolPolicy, t as runEmbeddedPiAgent, tr as DEFAULT_HEARTBEAT_EVERY, u as deriveModelMetadata, un as AcpRuntimeError, ur as withTempDownloadPath, v as resolveLineAccount, vn as DEFAULT_WEBHOOK_MAX_BODY_BYTES, vr as GROUP_POLICY_BLOCKED_LABEL, vt as getPluginToolMeta, wn as requestBodyErrorToText, wr as registerPluginHttpRoute, wt as peekSystemEvents, x as logTypingFailure, xn as isRequestBodyLimitError, xr as resolveOpenProviderRuntimeGroupPolicy, y as logAckFailure, yn as RequestBodyLimitError, yr as resolveAllowlistProviderRuntimeGroupPolicy, yt as buildChannelSummary, zn as formatValidationErrors } from "./pi-embedded-runner-CUVk8CIj.js";
1
+ import { $t as resolveToolDisplay, A as clearHistoryEntriesIfEnabled, An as DEFAULT_FEDERATION_BASE_URL, Bn as validatePushTestParams, Cn as readRequestBodyWithLimit, Cr as assertOkOrThrowHttpError, Dn as runFederationAutoConnectOnce, Dr as BLUEBUBBLES_GROUP_ACTIONS, E as DEFAULT_GROUP_HISTORY_LIMIT, En as resolveChannelMediaMaxBytes, Er as BLUEBUBBLES_ACTION_NAMES, F as recordInboundSession, G as formatInboundFromLabel, Hn as errorShape, I as removeAckReactionAfterReply, Jn as processLineMessage, Kn as resolveModel, L as shouldAckReaction, Ln as loadOrCreateDeviceIdentity, M as recordPendingHistoryEntry, Mn as resolveAgentPublicOrigin, N as recordPendingHistoryEntryIfEnabled, Nn as resolveFederationBaseUrl, O as buildPendingHistoryContextFromMap, On as startFederationAutoConnect, Or as CHANNEL_MESSAGE_ACTION_NAMES, P as formatDocsLink, Pn as resolveFederationHandle, R as shouldAckReactionForWhatsApp, Rn as publicKeyRawBase64UrlFromPem, S as detectBinary, Sn as readJsonBodyWithLimit, Sr as warnMissingProviderGroupPolicyFallbackOnce, Tr as BLUEBUBBLES_ACTIONS, Ut as optionalStringEnum, Vn as ErrorCodes, Wt as stringEnum, Xn as createReceiptCard, Yn as stripMarkdown, Zn as attachFooterText, _ as resolveDefaultLineAccountId, _n as DEFAULT_WEBHOOK_BODY_TIMEOUT_MS, _r as resolveControlCommandGate, _t as getChannelAgentToolMeta, an as getAcpSessionManager, ar as listDevicePairing, b as logInboundDrop, bn as installRequestBodyLimitGuard, br as resolveDefaultGroupPolicy, c as loadModelCatalog, cn as unregisterAcpRuntimeBackend, d as issuePairingChallenge, dr as DM_GROUP_ACCESS_REASON, er as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, f as createTypingCallbacks, fr as readStoreAllowFromForDmPolicy, g as normalizeAccountId$1, h as listLineAccountIds, hr as resolveEffectiveAllowFromLists, ir as approveDevicePairing, j as evictOldHistoryKeys, jn as normalizeHandle, k as clearHistoryEntries, ln as resolveRuntimeOptionsFromMeta, lr as extractToolSend, m as resolveMentionGatingWithBypass, mr as resolveDmGroupAccessWithLists, nr as resolveHeartbeatPrompt, o as resolveStrictAgenticRuntimeMode, on as getAcpRuntimeBackend, or as rejectDevicePairing, ot as createFasedAgentCodingTools, p as resolveMentionGating, pr as resolveDmGroupAccessWithCommandGate, qn as hasMarkdownToConvert, rr as waitForAbortSignal, sn as registerAcpRuntimeBackend, sr as createDedupeCache, st as resolveEffectiveToolPolicy, t as runEmbeddedPiAgent, tr as DEFAULT_HEARTBEAT_EVERY, u as deriveModelMetadata, un as AcpRuntimeError, ur as withTempDownloadPath, v as resolveLineAccount, vn as DEFAULT_WEBHOOK_MAX_BODY_BYTES, vr as GROUP_POLICY_BLOCKED_LABEL, vt as getPluginToolMeta, wn as requestBodyErrorToText, wr as registerPluginHttpRoute, wt as peekSystemEvents, x as logTypingFailure, xn as isRequestBodyLimitError, xr as resolveOpenProviderRuntimeGroupPolicy, y as logAckFailure, yn as RequestBodyLimitError, yr as resolveAllowlistProviderRuntimeGroupPolicy, yt as buildChannelSummary, zn as formatValidationErrors } from "./pi-embedded-runner-BXCGeeps.js";
2
2
  import { Ct as resolveIMessageGroupToolPolicy, Ft as listIMessageAccountIds, It as resolveDefaultIMessageAccountId, Lt as resolveIMessageAccount, Mt as listSignalAccountIds, Nt as resolveDefaultSignalAccountId, Pt as resolveSignalAccount, St as resolveIMessageGroupRequireMention, Vt as resolveToolsBySender, _t as normalizeSignalMessagingTarget, an as logMutatingAdminRpcAudit, at as resolveMainSessionKey, bt as resolveGoogleChatGroupRequireMention, c as listAgentsForGateway, ct as listChannelPlugins, et as resolveFreshSessionTotalTokens, f as resolveContextTokensForModel, ft as looksLikeHandleOrPhoneTarget, gt as looksLikeSignalTargetId, ln as authorizeOperatorScopesForMethod, mn as listPluginCommands, on as consumeMutatingAdminRpcBudget, pn as getPluginCommandSpecs, pt as trimMessagingTarget, s as classifySessionKey, t as getActivePluginRegistry, tn as getChatChannelMeta, u as resolveSessionModelRef, vn as normalizePluginHttpPath, vt as resolveBlueBubblesGroupRequireMention, x as loadSessionStore, xt as resolveGoogleChatGroupToolPolicy, yt as resolveBlueBubblesGroupToolPolicy } from "./runtime-BPyuAmka.js";
3
3
  import { n as stripAnsi, t as createSubsystemLogger } from "./subsystem-DBPNbQDQ.js";
4
4
  import { g as registerLogTransport, w as resolvePreferredFasedAgentTmpDir } from "./globals-B_jjtAje.js";
@@ -54,11 +54,12 @@ import "./tables-CJE8kB35.js";
54
54
  import { t as buildMediaPayload } from "./media-payload-CcW51vQj.js";
55
55
  import path from "node:path";
56
56
  import chalk from "chalk";
57
- import fs, { createWriteStream } from "node:fs";
57
+ import fs, { createWriteStream, existsSync } from "node:fs";
58
58
  import os from "node:os";
59
59
  import JSON5 from "json5";
60
60
  import { format } from "node:util";
61
61
  import fs$1 from "node:fs/promises";
62
+ import { spawn } from "node:child_process";
62
63
  import { createHash, createPrivateKey, randomUUID, sign } from "node:crypto";
63
64
  import { pipeline } from "node:stream/promises";
64
65
  import { z } from "zod";
@@ -2258,6 +2259,15 @@ function resolveBrewExecutable(opts) {
2258
2259
  //#region src/agents/skills/bundled-context.ts
2259
2260
  const skillsLogger = createSubsystemLogger("skills");
2260
2261
 
2262
+ //#endregion
2263
+ //#region src/daemon/systemd-system.ts
2264
+ const SERVICE_NAME = "fased-gateway";
2265
+ const SYSTEM_UNIT_CANDIDATES = [
2266
+ `/etc/systemd/system/${SERVICE_NAME}.service`,
2267
+ `/usr/lib/systemd/system/${SERVICE_NAME}.service`,
2268
+ `/lib/systemd/system/${SERVICE_NAME}.service`
2269
+ ];
2270
+
2261
2271
  //#endregion
2262
2272
  //#region src/commands/status.acpx-bridge.ts
2263
2273
  const ACPX_PUSH_TEST_TOOL_NAME = "fased_push_test_request";
@@ -1,5 +1,5 @@
1
- import { A as info, E as resolveUserPath, M as getChildLogger, N as toPinoLikeLogger, O as defaultRuntime, b as ensureDir, d as redactSensitiveText, f as formatCliCommand, j as success, k as danger, m as logInfo, t as loadConfig, u as VERSION } from "./config-g1MG9Bet.js";
2
- import { a as logoutWeb, c as resolveDefaultWebAuthDir, l as resolveWebCredsBackupPath, o as maybeRestoreCredsFromBackup, r as resolveWhatsAppAccount, s as readCredsJsonRaw, u as resolveWebCredsPath } from "./accounts-C5BjfxoO.js";
1
+ import { A as info, E as resolveUserPath, M as getChildLogger, N as toPinoLikeLogger, O as defaultRuntime, b as ensureDir, d as redactSensitiveText, f as formatCliCommand, j as success, k as danger, m as logInfo, t as loadConfig, u as VERSION } from "./config-DgD5T-Ui.js";
2
+ import { a as logoutWeb, c as resolveDefaultWebAuthDir, l as resolveWebCredsBackupPath, o as maybeRestoreCredsFromBackup, r as resolveWhatsAppAccount, s as readCredsJsonRaw, u as resolveWebCredsPath } from "./accounts-COY-15zJ.js";
3
3
  import fs from "node:fs";
4
4
  import { DisconnectReason, fetchLatestBaileysVersion, makeCacheableSignalKeyStore, makeWASocket, useMultiFileAuthState } from "@whiskeysockets/baileys";
5
5
  import qrcode from "qrcode-terminal";
@@ -1,4 +1,4 @@
1
- import { A as clearHistoryEntriesIfEnabled, B as dispatchReplyWithDispatcher, C as buildPairingReply, Ct as enqueueSystemEvent, Dt as createMediaAttachmentCache, Et as buildProviderRegistry, F as recordInboundSession, Fn as buildGatewayConnectionDetails, Gn as parseTtsDirectives, Gt as hasControlCommand, H as createInboundDebouncer, In as GatewayClient, J as createReplyDispatcherWithTyping, Jt as buildMentionRegexes, K as resolveEnvelopeFormatOptions, L as shouldAckReaction, N as recordPendingHistoryEntryIfEnabled, O as buildPendingHistoryContextFromMap, Ot as normalizeMediaAttachments, Q as buildModelsProviderData, Sr as warnMissingProviderGroupPolicyFallbackOnce, St as formatDurationSeconds, U as resolveInboundDebounceMs, Un as resolveTtsConfig, W as formatInboundEnvelope, Wn as textToSpeech, Y as EmbeddedBlockChunker, Yt as matchesMentionWithExplicit, Z as resolveStoredModelOverride, _r as resolveControlCommandGate, a as agentCommand, b as logInboundDrop, br as resolveDefaultGroupPolicy, en as stripReasoningTagsFromText, f as createTypingCallbacks, fr as readStoreAllowFromForDmPolicy, gr as resolveCommandAuthorizedFromAuthorizers, jt as runCapability, kn as resolveAgentAvatar, m as resolveMentionGatingWithBypass, mr as resolveDmGroupAccessWithLists, q as dispatchInboundMessage, vr as GROUP_POLICY_BLOCKED_LABEL, x as logTypingFailure, xr as resolveOpenProviderRuntimeGroupPolicy, y as logAckFailure, z as dispatchReplyWithBufferedBlockDispatcher } from "./pi-embedded-runner-CUVk8CIj.js";
1
+ import { A as clearHistoryEntriesIfEnabled, B as dispatchReplyWithDispatcher, C as buildPairingReply, Ct as enqueueSystemEvent, Dt as createMediaAttachmentCache, Et as buildProviderRegistry, F as recordInboundSession, Fn as buildGatewayConnectionDetails, Gn as parseTtsDirectives, Gt as hasControlCommand, H as createInboundDebouncer, In as GatewayClient, J as createReplyDispatcherWithTyping, Jt as buildMentionRegexes, K as resolveEnvelopeFormatOptions, L as shouldAckReaction, N as recordPendingHistoryEntryIfEnabled, O as buildPendingHistoryContextFromMap, Ot as normalizeMediaAttachments, Q as buildModelsProviderData, Sr as warnMissingProviderGroupPolicyFallbackOnce, St as formatDurationSeconds, U as resolveInboundDebounceMs, Un as resolveTtsConfig, W as formatInboundEnvelope, Wn as textToSpeech, Y as EmbeddedBlockChunker, Yt as matchesMentionWithExplicit, Z as resolveStoredModelOverride, _r as resolveControlCommandGate, a as agentCommand, b as logInboundDrop, br as resolveDefaultGroupPolicy, en as stripReasoningTagsFromText, f as createTypingCallbacks, fr as readStoreAllowFromForDmPolicy, gr as resolveCommandAuthorizedFromAuthorizers, jt as runCapability, kn as resolveAgentAvatar, m as resolveMentionGatingWithBypass, mr as resolveDmGroupAccessWithLists, q as dispatchInboundMessage, vr as GROUP_POLICY_BLOCKED_LABEL, x as logTypingFailure, xr as resolveOpenProviderRuntimeGroupPolicy, y as logAckFailure, z as dispatchReplyWithBufferedBlockDispatcher } from "./pi-embedded-runner-BXCGeeps.js";
2
2
  import { $t as GATEWAY_CLIENT_MODES, S as readSessionUpdatedAt, Yt as normalizeMessageChannel, en as GATEWAY_CLIENT_NAMES, ut as getChannelDock, x as loadSessionStore } from "./runtime-BPyuAmka.js";
3
3
  import { r as createNonExitingRuntime, t as createSubsystemLogger } from "./subsystem-DBPNbQDQ.js";
4
4
  import { i as logVerbose, l as warn, p as getChildLogger, s as shouldLogVerbose, t as danger, w as resolvePreferredFasedAgentTmpDir } from "./globals-B_jjtAje.js";
@@ -59,7 +59,7 @@ import { C as editMessageDiscord, Q as stripUndefinedFields, a as removeReaction
59
59
  import { i as createThreadBindingManager, r as createNoopThreadBindingManager, t as reconcileAcpThreadBindingsOnStartup } from "./thread-bindings.lifecycle-gmHv3hc7.js";
60
60
  import { t as createReplyReferencePlanner } from "./reply-reference-DxIu2vr0.js";
61
61
  import { i as createStatusReactionController, r as DEFAULT_TIMING, t as createFinalizableDraftLifecycle } from "./draft-stream-controls-v_5gdUYG.js";
62
- import { n as buildUntrustedChannelMetadata, t as chunkItems } from "./chunk-items-BGbYyNvO.js";
62
+ import { n as buildUntrustedChannelMetadata, t as chunkItems } from "./chunk-items-j6n1a2yQ.js";
63
63
  import { t as fetchDiscordApplicationId } from "./probe-Dqx0N4uk.js";
64
64
  import { t as DiscordUiContainer } from "./ui-7sxJ-x37.js";
65
65
  import "./guilds-DmzO7n0X.js";
@@ -1390,7 +1390,7 @@ async function preflightDiscordMessage(params) {
1390
1390
  let preflightTranscript;
1391
1391
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
1392
1392
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
1393
- const { transcribeFirstAudio } = await import("./audio-preflight-C8SbY4fV.js");
1393
+ const { transcribeFirstAudio } = await import("./audio-preflight-WolqDIx8.js");
1394
1394
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
1395
1395
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
1396
1396
  ctx: {
@@ -16,9 +16,9 @@ import "./accounts-BRbbLNW_.js";
16
16
  import "./accounts-BwkH5bTD.js";
17
17
  import "./tokens-BK5rrwBB.js";
18
18
  import { a as resolveDiscordAllowListMatch, c as resolveDiscordMemberAccessState, d as resolveGroupDmAllow, f as shouldEmitDiscordReactionNotification, g as resolveTimestampMs, h as resolveDiscordSystemLocation, i as normalizeDiscordSlug, l as resolveDiscordOwnerAllowFrom, m as formatDiscordUserTag, n as isDiscordGroupAllowedByPolicy, o as resolveDiscordChannelConfigWithFallback, p as formatDiscordReactionEmoji, r as normalizeDiscordAllowList, s as resolveDiscordGuildEntry, t as allowListMatches, u as resolveDiscordShouldRequireMention } from "./allow-list-CBtbuDI8.js";
19
- import { a as patchAllowlistUsersInConfigEntries, c as buildUntrustedChannelMetadata, l as isDangerousNameMatchingEnabled, n as buildAllowlistResolutionSummary, o as summarizeMapping, r as canonicalizeAllowlistWithResolvedIds, s as chunkItems, t as addAllowlistUserEntriesFromConfigEntry, u as formatAllowlistMatchMeta } from "./resolve-utils-EFP1DYqG.js";
19
+ import { a as patchAllowlistUsersInConfigEntries, c as buildUntrustedChannelMetadata, l as isDangerousNameMatchingEnabled, n as buildAllowlistResolutionSummary, o as summarizeMapping, r as canonicalizeAllowlistWithResolvedIds, s as chunkItems, t as addAllowlistUserEntriesFromConfigEntry, u as formatAllowlistMatchMeta } from "./resolve-utils-4mG32lvJ.js";
20
20
  import { l as resolveStorePath } from "./paths-DTurNPnO.js";
21
- import { $ as buildModelsProviderData, $t as parseTtsDirectives, At as EmbeddedBlockChunker, B as dispatchReplyWithBufferedBlockDispatcher, D as resolveOpenProviderRuntimeGroupPolicy, Dt as buildMentionRegexes, E as resolveDefaultGroupPolicy, F as resolveCommandAuthorizedFromAuthorizers, G as formatInboundEnvelope, Gt as stripReasoningTagsFromText, I as resolveControlCommandGate, J as createReplyDispatcherWithTyping, K as resolveEnvelopeFormatOptions, M as clearHistoryEntriesIfEnabled, N as recordPendingHistoryEntryIfEnabled, O as warnMissingProviderGroupPolicyFallbackOnce, Ot as matchesMentionWithExplicit, P as recordInboundSession, Q as resolveStoredModelOverride, Qt as textToSpeech, R as shouldAckReaction, S as buildPairingReply, T as GROUP_POLICY_BLOCKED_LABEL, U as createInboundDebouncer, V as dispatchReplyWithDispatcher, W as resolveInboundDebounceMs, Xt as enqueueSystemEvent, Yt as formatDurationSeconds, Zt as resolveTtsConfig, b as logInboundDrop, ct as buildProviderRegistry, dn as resolveAgentAvatar, f as createTypingCallbacks, fn as buildGatewayConnectionDetails, g as readStoreAllowFromForDmPolicy, j as buildPendingHistoryContextFromMap, lt as createMediaAttachmentCache, m as resolveMentionGatingWithBypass, pn as GatewayClient, pt as runCapability, q as dispatchInboundMessage, s as agentCommand, ut as normalizeMediaAttachments, v as resolveDmGroupAccessWithLists, wt as hasControlCommand, x as logTypingFailure, y as logAckFailure } from "./status-CIiBeb9B.js";
21
+ import { $ as buildModelsProviderData, $t as parseTtsDirectives, At as EmbeddedBlockChunker, B as dispatchReplyWithBufferedBlockDispatcher, D as resolveOpenProviderRuntimeGroupPolicy, Dt as buildMentionRegexes, E as resolveDefaultGroupPolicy, F as resolveCommandAuthorizedFromAuthorizers, G as formatInboundEnvelope, Gt as stripReasoningTagsFromText, I as resolveControlCommandGate, J as createReplyDispatcherWithTyping, K as resolveEnvelopeFormatOptions, M as clearHistoryEntriesIfEnabled, N as recordPendingHistoryEntryIfEnabled, O as warnMissingProviderGroupPolicyFallbackOnce, Ot as matchesMentionWithExplicit, P as recordInboundSession, Q as resolveStoredModelOverride, Qt as textToSpeech, R as shouldAckReaction, S as buildPairingReply, T as GROUP_POLICY_BLOCKED_LABEL, U as createInboundDebouncer, V as dispatchReplyWithDispatcher, W as resolveInboundDebounceMs, Xt as enqueueSystemEvent, Yt as formatDurationSeconds, Zt as resolveTtsConfig, b as logInboundDrop, ct as buildProviderRegistry, dn as resolveAgentAvatar, f as createTypingCallbacks, fn as buildGatewayConnectionDetails, g as readStoreAllowFromForDmPolicy, j as buildPendingHistoryContextFromMap, lt as createMediaAttachmentCache, m as resolveMentionGatingWithBypass, pn as GatewayClient, pt as runCapability, q as dispatchInboundMessage, s as agentCommand, ut as normalizeMediaAttachments, v as resolveDmGroupAccessWithLists, wt as hasControlCommand, x as logTypingFailure, y as logAckFailure } from "./status-Cl4MeWSg.js";
22
22
  import "./runtime-dependency-B-1u41Ph.js";
23
23
  import "./ssrf-Cce6LubA.js";
24
24
  import { n as listSkillCommandsForAgents } from "./skill-commands-hyZA0LE3.js";
@@ -1405,7 +1405,7 @@ async function preflightDiscordMessage(params) {
1405
1405
  let preflightTranscript;
1406
1406
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
1407
1407
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
1408
- const { transcribeFirstAudio } = await import("./audio-preflight-CuABlLDL.js");
1408
+ const { transcribeFirstAudio } = await import("./audio-preflight-DIJQAjNX.js");
1409
1409
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
1410
1410
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
1411
1411
  ctx: {
@@ -15,7 +15,7 @@ import "./accounts-BwkH5bTD.js";
15
15
  import "./tokens-BK5rrwBB.js";
16
16
  import "./allow-list-CBtbuDI8.js";
17
17
  import { l as resolveStorePath } from "./paths-DTurNPnO.js";
18
- import { $ as buildModelsProviderData, B as dispatchReplyWithBufferedBlockDispatcher, C as computeBackoff, D as resolveOpenProviderRuntimeGroupPolicy, Dt as buildMentionRegexes, Et as isAbortRequestText, F as resolveCommandAuthorizedFromAuthorizers, G as formatInboundEnvelope, Gt as stripReasoningTagsFromText, I as resolveControlCommandGate, Jt as formatDurationPrecise, K as resolveEnvelopeFormatOptions, Kt as findCodeRegions, L as removeAckReactionAfterReply, M as clearHistoryEntriesIfEnabled, N as recordPendingHistoryEntryIfEnabled, Ot as matchesMentionWithExplicit, P as recordInboundSession, Q as resolveStoredModelOverride, R as shouldAckReaction, S as buildPairingReply, U as createInboundDebouncer, W as resolveInboundDebounceMs, Wt as formatReasoningMessage, Xt as enqueueSystemEvent, Y as createDedupeCache, at as parseModelCallbackData, b as logInboundDrop, c as findModelInCatalog, et as formatModelsAvailableHeader, f as createTypingCallbacks, h as waitForAbortSignal, it as getModelsPageSize, j as buildPendingHistoryContextFromMap, jt as registerUnhandledRejectionHandler, k as DEFAULT_GROUP_HISTORY_LIMIT, l as loadModelCatalog, ln as readJsonBodyWithLimit, m as resolveMentionGatingWithBypass, n as buildCommandsMessagePaginated, nt as buildProviderKeyboard, ot as buildCommandsPaginationKeyboard, qt as isInsideCode, rt as calculateTotalPages, st as resolveChannelConfigWrites, tn as resolveTelegramInlineButtonsScope, tt as buildModelsKeyboard, u as modelSupportsVision, w as sleepWithAbort, wt as hasControlCommand, x as logTypingFailure, y as logAckFailure } from "./status-CIiBeb9B.js";
18
+ import { $ as buildModelsProviderData, B as dispatchReplyWithBufferedBlockDispatcher, C as computeBackoff, D as resolveOpenProviderRuntimeGroupPolicy, Dt as buildMentionRegexes, Et as isAbortRequestText, F as resolveCommandAuthorizedFromAuthorizers, G as formatInboundEnvelope, Gt as stripReasoningTagsFromText, I as resolveControlCommandGate, Jt as formatDurationPrecise, K as resolveEnvelopeFormatOptions, Kt as findCodeRegions, L as removeAckReactionAfterReply, M as clearHistoryEntriesIfEnabled, N as recordPendingHistoryEntryIfEnabled, Ot as matchesMentionWithExplicit, P as recordInboundSession, Q as resolveStoredModelOverride, R as shouldAckReaction, S as buildPairingReply, U as createInboundDebouncer, W as resolveInboundDebounceMs, Wt as formatReasoningMessage, Xt as enqueueSystemEvent, Y as createDedupeCache, at as parseModelCallbackData, b as logInboundDrop, c as findModelInCatalog, et as formatModelsAvailableHeader, f as createTypingCallbacks, h as waitForAbortSignal, it as getModelsPageSize, j as buildPendingHistoryContextFromMap, jt as registerUnhandledRejectionHandler, k as DEFAULT_GROUP_HISTORY_LIMIT, l as loadModelCatalog, ln as readJsonBodyWithLimit, m as resolveMentionGatingWithBypass, n as buildCommandsMessagePaginated, nt as buildProviderKeyboard, ot as buildCommandsPaginationKeyboard, qt as isInsideCode, rt as calculateTotalPages, st as resolveChannelConfigWrites, tn as resolveTelegramInlineButtonsScope, tt as buildModelsKeyboard, u as modelSupportsVision, w as sleepWithAbort, wt as hasControlCommand, x as logTypingFailure, y as logAckFailure } from "./status-Cl4MeWSg.js";
19
19
  import "./runtime-dependency-B-1u41Ph.js";
20
20
  import "./ssrf-Cce6LubA.js";
21
21
  import { n as listSkillCommandsForAgents } from "./skill-commands-hyZA0LE3.js";
@@ -51,7 +51,7 @@ import { n as recordChannelActivity } from "./channel-activity-Cf5sKkfd.js";
51
51
  import { _ as splitTelegramCaption, d as isRecoverableTelegramNetworkError, f as markdownToTelegramChunks, g as resolveTelegramFetch, h as wrapFileReferencesInHtml, i as editMessageTelegram, l as resolveTelegramVoiceSend, m as renderTelegramHtmlText, p as markdownToTelegramHtml, t as buildInlineKeyboard, u as wasSentByBot, v as withTelegramApiErrorLogging } from "./send-B09HRfHN.js";
52
52
  import "./retry-policy-BLYEgIwP.js";
53
53
  import { t as makeProxyFetch } from "./proxy-CV9uL4Wi.js";
54
- import { i as getCachedSticker, n as describeStickerImage, t as cacheSticker } from "./sticker-cache-9houHChV.js";
54
+ import { i as getCachedSticker, n as describeStickerImage, t as cacheSticker } from "./sticker-cache-DjFhjSZc.js";
55
55
  import { i as createStatusReactionController, n as DEFAULT_EMOJIS, t as createFinalizableDraftLifecycle } from "./draft-stream-controls-Bfbhumzv.js";
56
56
  import crypto from "node:crypto";
57
57
  import os from "node:os";
@@ -2035,7 +2035,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, replyMedia =
2035
2035
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
2036
2036
  let preflightTranscript;
2037
2037
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
2038
- const { transcribeFirstAudio } = await import("./audio-preflight-CuABlLDL.js");
2038
+ const { transcribeFirstAudio } = await import("./audio-preflight-DIJQAjNX.js");
2039
2039
  preflightTranscript = await transcribeFirstAudio({
2040
2040
  ctx: {
2041
2041
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -1,4 +1,4 @@
1
- import { $ as formatModelsAvailableHeader, $n as resolveTelegramInlineButtonsScope, A as clearHistoryEntriesIfEnabled, C as buildPairingReply, Ct as enqueueSystemEvent, E as DEFAULT_GROUP_HISTORY_LIMIT, F as recordInboundSession, Gt as hasControlCommand, H as createInboundDebouncer, I as removeAckReactionAfterReply, Jt as buildMentionRegexes, K as resolveEnvelopeFormatOptions, L as shouldAckReaction, N as recordPendingHistoryEntryIfEnabled, Nt as registerUnhandledRejectionHandler, O as buildPendingHistoryContextFromMap, Q as buildModelsProviderData, Qt as formatReasoningMessage, Sn as readJsonBodyWithLimit, T as sleepWithAbort, Tt as resolveChannelConfigWrites, U as resolveInboundDebounceMs, W as formatInboundEnvelope, Yt as matchesMentionWithExplicit, Z as resolveStoredModelOverride, _r as resolveControlCommandGate, at as buildCommandsPaginationKeyboard, b as logInboundDrop, bt as buildCommandsMessagePaginated, c as loadModelCatalog, en as stripReasoningTagsFromText, et as buildModelsKeyboard, f as createTypingCallbacks, gr as resolveCommandAuthorizedFromAuthorizers, it as parseModelCallbackData, l as modelSupportsVision, m as resolveMentionGatingWithBypass, nn as isInsideCode, nt as calculateTotalPages, qt as isAbortRequestText, rr as waitForAbortSignal, rt as getModelsPageSize, s as findModelInCatalog, sr as createDedupeCache, tn as findCodeRegions, tt as buildProviderKeyboard, w as computeBackoff, x as logTypingFailure, xr as resolveOpenProviderRuntimeGroupPolicy, xt as formatDurationPrecise, y as logAckFailure, z as dispatchReplyWithBufferedBlockDispatcher } from "./pi-embedded-runner-CUVk8CIj.js";
1
+ import { $ as formatModelsAvailableHeader, $n as resolveTelegramInlineButtonsScope, A as clearHistoryEntriesIfEnabled, C as buildPairingReply, Ct as enqueueSystemEvent, E as DEFAULT_GROUP_HISTORY_LIMIT, F as recordInboundSession, Gt as hasControlCommand, H as createInboundDebouncer, I as removeAckReactionAfterReply, Jt as buildMentionRegexes, K as resolveEnvelopeFormatOptions, L as shouldAckReaction, N as recordPendingHistoryEntryIfEnabled, Nt as registerUnhandledRejectionHandler, O as buildPendingHistoryContextFromMap, Q as buildModelsProviderData, Qt as formatReasoningMessage, Sn as readJsonBodyWithLimit, T as sleepWithAbort, Tt as resolveChannelConfigWrites, U as resolveInboundDebounceMs, W as formatInboundEnvelope, Yt as matchesMentionWithExplicit, Z as resolveStoredModelOverride, _r as resolveControlCommandGate, at as buildCommandsPaginationKeyboard, b as logInboundDrop, bt as buildCommandsMessagePaginated, c as loadModelCatalog, en as stripReasoningTagsFromText, et as buildModelsKeyboard, f as createTypingCallbacks, gr as resolveCommandAuthorizedFromAuthorizers, it as parseModelCallbackData, l as modelSupportsVision, m as resolveMentionGatingWithBypass, nn as isInsideCode, nt as calculateTotalPages, qt as isAbortRequestText, rr as waitForAbortSignal, rt as getModelsPageSize, s as findModelInCatalog, sr as createDedupeCache, tn as findCodeRegions, tt as buildProviderKeyboard, w as computeBackoff, x as logTypingFailure, xr as resolveOpenProviderRuntimeGroupPolicy, xt as formatDurationPrecise, y as logAckFailure, z as dispatchReplyWithBufferedBlockDispatcher } from "./pi-embedded-runner-BXCGeeps.js";
2
2
  import { C as recordSessionMetaFromInbound, Dt as resolveTelegramAccount, Rt as resolveChannelGroupPolicy, S as readSessionUpdatedAt, fn as executePluginCommand, hn as matchPluginCommand, pn as getPluginCommandSpecs, x as loadSessionStore, zt as resolveChannelGroupRequireMention } from "./runtime-BPyuAmka.js";
3
3
  import { i as defaultRuntime, r as createNonExitingRuntime, t as createSubsystemLogger } from "./subsystem-DBPNbQDQ.js";
4
4
  import { i as logVerbose, l as warn, p as getChildLogger, s as shouldLogVerbose, t as danger } from "./globals-B_jjtAje.js";
@@ -51,7 +51,7 @@ import { n as recordChannelActivity } from "./channel-activity-Cf5sKkfd.js";
51
51
  import { _ as splitTelegramCaption, d as isRecoverableTelegramNetworkError, f as markdownToTelegramChunks, g as resolveTelegramFetch, h as wrapFileReferencesInHtml, i as editMessageTelegram, l as resolveTelegramVoiceSend, m as renderTelegramHtmlText, p as markdownToTelegramHtml, t as buildInlineKeyboard, u as wasSentByBot, v as withTelegramApiErrorLogging } from "./send-BzFdvD_i.js";
52
52
  import "./retry-policy-sM01QZT2.js";
53
53
  import { t as makeProxyFetch } from "./proxy-CKQOQYAl.js";
54
- import { i as getCachedSticker, n as describeStickerImage, t as cacheSticker } from "./sticker-cache-Dwi-XsgB.js";
54
+ import { i as getCachedSticker, n as describeStickerImage, t as cacheSticker } from "./sticker-cache-CcER-WWu.js";
55
55
  import { i as createStatusReactionController, n as DEFAULT_EMOJIS, t as createFinalizableDraftLifecycle } from "./draft-stream-controls-v_5gdUYG.js";
56
56
  import path from "node:path";
57
57
  import os from "node:os";
@@ -2035,7 +2035,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, replyMedia =
2035
2035
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
2036
2036
  let preflightTranscript;
2037
2037
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
2038
- const { transcribeFirstAudio } = await import("./audio-preflight-C8SbY4fV.js");
2038
+ const { transcribeFirstAudio } = await import("./audio-preflight-WolqDIx8.js");
2039
2039
  preflightTranscript = await transcribeFirstAudio({
2040
2040
  ctx: {
2041
2041
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -14,7 +14,7 @@ import "./accounts-BwkH5bTD.js";
14
14
  import "./tokens-BK5rrwBB.js";
15
15
  import "./allow-list-CBtbuDI8.js";
16
16
  import "./paths-DTurNPnO.js";
17
- import { Nt as emitAgentEvent, Pt as onAgentEvent, St as resolveInputFileLimits, _t as DEFAULT_INPUT_MAX_REDIRECTS, a as buildAgentMessageFromConversationEntries, an as sendJson, bt as extractImageContentFromSource, gt as DEFAULT_INPUT_IMAGE_MIMES, ht as DEFAULT_INPUT_IMAGE_MAX_BYTES, i as handleGatewayPostJsonEndpoint, in as resolveSessionKey, nn as createDefaultDeps, o as resolveAssistantStreamDeltaText, on as setSseHeaders, rn as resolveAgentIdForRequest, s as agentCommand, sn as writeDone, vt as DEFAULT_INPUT_TIMEOUT_MS, xt as normalizeMimeList, yt as extractFileContentFromSource } from "./status-CIiBeb9B.js";
17
+ import { Nt as emitAgentEvent, Pt as onAgentEvent, St as resolveInputFileLimits, _t as DEFAULT_INPUT_MAX_REDIRECTS, a as buildAgentMessageFromConversationEntries, an as sendJson, bt as extractImageContentFromSource, gt as DEFAULT_INPUT_IMAGE_MIMES, ht as DEFAULT_INPUT_IMAGE_MAX_BYTES, i as handleGatewayPostJsonEndpoint, in as resolveSessionKey, nn as createDefaultDeps, o as resolveAssistantStreamDeltaText, on as setSseHeaders, rn as resolveAgentIdForRequest, s as agentCommand, sn as writeDone, vt as DEFAULT_INPUT_TIMEOUT_MS, xt as normalizeMimeList, yt as extractFileContentFromSource } from "./status-Cl4MeWSg.js";
18
18
  import "./runtime-dependency-B-1u41Ph.js";
19
19
  import "./ssrf-Cce6LubA.js";
20
20
  import "./skill-commands-hyZA0LE3.js";
@@ -1,4 +1,4 @@
1
- import { Bt as normalizeMimeList, Ft as DEFAULT_INPUT_IMAGE_MIMES, It as DEFAULT_INPUT_MAX_REDIRECTS, Lt as DEFAULT_INPUT_TIMEOUT_MS, Pt as DEFAULT_INPUT_IMAGE_MAX_BYTES, Rt as extractFileContentFromSource, Vt as resolveInputFileLimits, a as agentCommand, dn as createDefaultDeps, fn as resolveAgentIdForRequest, gn as writeDone, hn as setSseHeaders, i as resolveAssistantStreamDeltaText, in as onAgentEvent, mn as sendJson, n as handleGatewayPostJsonEndpoint, pn as resolveSessionKey, r as buildAgentMessageFromConversationEntries, rn as emitAgentEvent, zt as extractImageContentFromSource } from "./pi-embedded-runner-CUVk8CIj.js";
1
+ import { Bt as normalizeMimeList, Ft as DEFAULT_INPUT_IMAGE_MIMES, It as DEFAULT_INPUT_MAX_REDIRECTS, Lt as DEFAULT_INPUT_TIMEOUT_MS, Pt as DEFAULT_INPUT_IMAGE_MAX_BYTES, Rt as extractFileContentFromSource, Vt as resolveInputFileLimits, a as agentCommand, dn as createDefaultDeps, fn as resolveAgentIdForRequest, gn as writeDone, hn as setSseHeaders, i as resolveAssistantStreamDeltaText, in as onAgentEvent, mn as sendJson, n as handleGatewayPostJsonEndpoint, pn as resolveSessionKey, r as buildAgentMessageFromConversationEntries, rn as emitAgentEvent, zt as extractImageContentFromSource } from "./pi-embedded-runner-BXCGeeps.js";
2
2
  import "./runtime-BPyuAmka.js";
3
3
  import { i as defaultRuntime } from "./subsystem-DBPNbQDQ.js";
4
4
  import "./globals-B_jjtAje.js";
@@ -20339,7 +20339,7 @@ function createOutboundSendDepsFromCliSource(deps) {
20339
20339
  function createDefaultDeps() {
20340
20340
  return {
20341
20341
  sendMessageWhatsApp: async (...args) => {
20342
- const { sendMessageWhatsApp } = await import("./web-DCrVQr6y.js");
20342
+ const { sendMessageWhatsApp } = await import("./web-BbgvbXQz.js");
20343
20343
  return await sendMessageWhatsApp(...args);
20344
20344
  },
20345
20345
  sendMessageTelegram: async (...args) => {
@@ -84721,7 +84721,7 @@ const signalMessageActions = {
84721
84721
  //#region src/channels/plugins/actions/telegram.ts
84722
84722
  const providerId = "telegram";
84723
84723
  async function loadTelegramActionHandler() {
84724
- const { handleTelegramAction } = await import("./telegram-actions-CRXVO8lG.js");
84724
+ const { handleTelegramAction } = await import("./telegram-actions-8Rjfgf8m.js");
84725
84725
  return handleTelegramAction;
84726
84726
  }
84727
84727
  function readTelegramSendParams(params) {
@@ -87178,7 +87178,7 @@ function buildPairingReply(params) {
87178
87178
 
87179
87179
  //#endregion
87180
87180
  //#region src/brand.ts
87181
- const FASED_PRODUCT_VERSION = "0.1.37";
87181
+ const FASED_PRODUCT_VERSION = "0.1.39";
87182
87182
  const FASED_DISPLAY_VERSION = `v${FASED_PRODUCT_VERSION}`;
87183
87183
 
87184
87184
  //#endregion
@@ -91089,7 +91089,7 @@ const sendPollDiscordLazy = async (...args) => {
91089
91089
  return sendPollDiscord(...args);
91090
91090
  };
91091
91091
  const monitorDiscordProviderLazy = async (...args) => {
91092
- const { monitorDiscordProvider } = await import("./monitor-9X7wapUN.js");
91092
+ const { monitorDiscordProvider } = await import("./monitor-C20pbAuB.js");
91093
91093
  return monitorDiscordProvider(...args);
91094
91094
  };
91095
91095
  const listSlackDirectoryGroupsLiveLazy = async (...args) => {
@@ -91117,7 +91117,7 @@ const sendMessageSlackLazy = async (...args) => {
91117
91117
  return sendMessageSlack(...args);
91118
91118
  };
91119
91119
  const monitorSlackProviderLazy = async (...args) => {
91120
- const { monitorSlackProvider } = await import("./slack-C0WZVJPZ.js");
91120
+ const { monitorSlackProvider } = await import("./slack-DRSLzWUb.js");
91121
91121
  return monitorSlackProvider(...args);
91122
91122
  };
91123
91123
  const handleSlackActionLazy = async (...args) => {
@@ -91137,7 +91137,7 @@ const sendPollTelegramLazy = async (...args) => {
91137
91137
  return sendPollTelegram(...args);
91138
91138
  };
91139
91139
  const monitorTelegramProviderLazy = async (...args) => {
91140
- const { monitorTelegramProvider } = await import("./monitor-tYFfy2u-.js");
91140
+ const { monitorTelegramProvider } = await import("./monitor-jztLTK6V.js");
91141
91141
  return monitorTelegramProvider(...args);
91142
91142
  };
91143
91143
  let webOutboundPromise = null;
@@ -91158,7 +91158,7 @@ function loadWebLoginQr() {
91158
91158
  return webLoginQrPromise;
91159
91159
  }
91160
91160
  function loadWebChannel() {
91161
- webChannelPromise ??= import("./web-DCrVQr6y.js");
91161
+ webChannelPromise ??= import("./web-BbgvbXQz.js");
91162
91162
  return webChannelPromise;
91163
91163
  }
91164
91164
  function loadWhatsAppActions() {
@@ -1,4 +1,4 @@
1
- import { r as normalizeProviderId, s as ensureAuthProfileStore } from "./config-g1MG9Bet.js";
1
+ import { r as normalizeProviderId, s as ensureAuthProfileStore } from "./config-CZaFbNZU.js";
2
2
  import path from "node:path";
3
3
  import fs from "node:fs";
4
4
  import * as PiCodingAgent from "@mariozechner/pi-coding-agent";
@@ -1,4 +1,4 @@
1
- import { r as normalizeProviderId, s as ensureAuthProfileStore } from "./config-z0k05dwe.js";
1
+ import { r as normalizeProviderId, s as ensureAuthProfileStore } from "./config-DgD5T-Ui.js";
2
2
  import path from "node:path";
3
3
  import fs from "node:fs";
4
4
  import * as PiCodingAgent from "@mariozechner/pi-coding-agent";
@@ -1,4 +1,4 @@
1
- import { r as normalizeProviderId, s as ensureAuthProfileStore } from "./config-B6SjJFp-.js";
1
+ import { r as normalizeProviderId, s as ensureAuthProfileStore } from "./config-DLVjQxOu.js";
2
2
  import path from "node:path";
3
3
  import fs from "node:fs";
4
4
  import * as PiCodingAgent from "@mariozechner/pi-coding-agent";
@@ -1,4 +1,4 @@
1
- import { n as normalizeProviderId, o as ensureAuthProfileStore } from "./config-C0qggNKQ.js";
1
+ import { n as normalizeProviderId, o as ensureAuthProfileStore } from "./config-BxVjLTIv.js";
2
2
  import fs from "node:fs";
3
3
  import path from "node:path";
4
4
  import * as PiCodingAgent from "@mariozechner/pi-coding-agent";
@@ -1,4 +1,4 @@
1
- import { Ut as wrapExternalContent } from "./status-CIiBeb9B.js";
1
+ import { Ut as wrapExternalContent } from "./status-Cl4MeWSg.js";
2
2
 
3
3
  //#region src/channels/allowlist-match.ts
4
4
  function formatAllowlistMatchMeta(match) {