@interactive-inc/claude-funnel 0.57.0 → 0.58.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/dist/gateway.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { _ as connectorConnectionEventSchema, a as ConnectorConnectionStatus, c as ConnectorProcessedQuery, d as ConnectorRawEvent, f as ConnectorRawQuery, g as StoredRawEvent, h as StoredProcessedEvent, i as ConnectorConnectionRecord, l as ConnectorProcessedRecord, m as StoredConnectionEvent, n as ConnectorConnectionEvent, o as ConnectorDiagnosticLog, p as ConnectorRawRecord, r as ConnectorConnectionQuery, s as ConnectorProcessedEvent, t as CONNECTOR_CONNECTION_STATUSES, u as ConnectorQuery, v as connectorProcessedEventSchema, y as connectorRawEventSchema } from "./diagnostic-log-Bxe7Bbvw.js";
2
- import { $ as FunnelGatewayToken, G as SqliteFunnelEventLog, H as MemoryConnectorDiagnosticLog, J as PublishResponse, K as FunnelChannelPublisher, Q as DEFAULT_GATEWAY_TOKEN_PATH, U as SqliteConnectorDiagnosticLog, W as MemoryFunnelEventLog, X as publishRequestSchema, Y as PublishResult, Z as publishResponseSchema, _t as ReplayableEvent, at as GatewayEventStore, ct as FunnelEventRecord, dt as GatewayEmitInput, et as gatewayLoopbackUrl, ft as GatewayRouteDeps, gt as FunnelBroadcaster, ht as BroadcastSubscriber, it as FunnelGatewayServer, lt as funnelEventSchema, mt as BroadcastEvent, nt as channelWsProtocols, ot as FunnelEvent, pt as FunnelListenerSupervisor, q as PublishRequest, rt as channelWsUrl, st as FunnelEventLog, t as GatewayApp, tt as ChannelWsUrlInput, ut as Env } from "./index-DEeCwhk2.js";
2
+ import { $ as PublishResult, J as MemoryFunnelEventLog, K as MemoryConnectorDiagnosticLog, Q as PublishResponse, X as FunnelChannelPublisher, Y as SqliteFunnelEventLog, Z as PublishRequest, _t as FunnelListenerSupervisor, at as ChannelWsUrlInput, bt as FunnelBroadcaster, ct as FunnelGatewayServer, dt as FunnelEventLog, et as publishRequestSchema, ft as FunnelEventRecord, gt as GatewayRouteDeps, ht as GatewayEmitInput, it as gatewayLoopbackUrl, lt as GatewayEventStore, mt as Env, nt as DEFAULT_GATEWAY_TOKEN_PATH, ot as channelWsProtocols, pt as funnelEventSchema, q as SqliteConnectorDiagnosticLog, rt as FunnelGatewayToken, st as channelWsUrl, t as GatewayApp, tt as publishResponseSchema, ut as FunnelEvent, vt as BroadcastEvent, xt as ReplayableEvent, yt as BroadcastSubscriber } from "./index-tP67P1Sy.js";
3
3
  export { BroadcastEvent, BroadcastSubscriber, CONNECTOR_CONNECTION_STATUSES, ChannelWsUrlInput, ConnectorConnectionEvent, ConnectorConnectionQuery, ConnectorConnectionRecord, ConnectorConnectionStatus, ConnectorDiagnosticLog, ConnectorProcessedEvent, ConnectorProcessedQuery, ConnectorProcessedRecord, ConnectorQuery, ConnectorRawEvent, ConnectorRawQuery, ConnectorRawRecord, DEFAULT_GATEWAY_TOKEN_PATH, FunnelBroadcaster, FunnelChannelPublisher, FunnelEvent, FunnelEventLog, FunnelEventRecord, FunnelGatewayServer, FunnelGatewayToken, FunnelListenerSupervisor, type GatewayApp, type GatewayEmitInput, GatewayEventStore, type GatewayRouteDeps, type Env as GatewayServerEnv, MemoryConnectorDiagnosticLog, MemoryFunnelEventLog, PublishRequest, PublishResponse, PublishResult, ReplayableEvent, SqliteConnectorDiagnosticLog, SqliteFunnelEventLog, StoredConnectionEvent, StoredProcessedEvent, StoredRawEvent, channelWsProtocols, channelWsUrl, connectorConnectionEventSchema, connectorProcessedEventSchema, connectorRawEventSchema, funnelEventSchema, gatewayLoopbackUrl, publishRequestSchema, publishResponseSchema };
package/dist/gateway.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { t as gatewayLoopbackUrl } from "./gateway-base-url-6foMXfFf.js";
2
- import { S as publishResponseSchema, _ as funnelEventSchema, a as connectorConnectionEventSchema, b as FunnelChannelPublisher, c as MemoryFunnelEventLog, d as DEFAULT_GATEWAY_TOKEN_PATH, f as FunnelGatewayToken, g as FunnelEventLog, h as SqliteFunnelEventLog, i as ConnectorDiagnosticLog, l as channelWsProtocols, m as FunnelListenerSupervisor, n as SqliteConnectorDiagnosticLog, o as connectorProcessedEventSchema, p as FunnelGatewayServer, r as CONNECTOR_CONNECTION_STATUSES, s as connectorRawEventSchema, t as MemoryConnectorDiagnosticLog, u as channelWsUrl, v as FunnelBroadcaster, x as publishRequestSchema } from "./memory-diagnostic-log-BbFVqDzz.js";
2
+ import { S as publishResponseSchema, _ as funnelEventSchema, a as connectorConnectionEventSchema, b as FunnelChannelPublisher, c as MemoryFunnelEventLog, d as DEFAULT_GATEWAY_TOKEN_PATH, f as FunnelGatewayToken, g as FunnelEventLog, h as SqliteFunnelEventLog, i as ConnectorDiagnosticLog, l as channelWsProtocols, m as FunnelListenerSupervisor, n as SqliteConnectorDiagnosticLog, o as connectorProcessedEventSchema, p as FunnelGatewayServer, r as CONNECTOR_CONNECTION_STATUSES, s as connectorRawEventSchema, t as MemoryConnectorDiagnosticLog, u as channelWsUrl, v as FunnelBroadcaster, x as publishRequestSchema } from "./memory-diagnostic-log-CvqobDDs.js";
3
3
  export { CONNECTOR_CONNECTION_STATUSES, ConnectorDiagnosticLog, DEFAULT_GATEWAY_TOKEN_PATH, FunnelBroadcaster, FunnelChannelPublisher, FunnelEventLog, FunnelGatewayServer, FunnelGatewayToken, FunnelListenerSupervisor, MemoryConnectorDiagnosticLog, MemoryFunnelEventLog, SqliteConnectorDiagnosticLog, SqliteFunnelEventLog, channelWsProtocols, channelWsUrl, connectorConnectionEventSchema, connectorProcessedEventSchema, connectorRawEventSchema, funnelEventSchema, gatewayLoopbackUrl, publishRequestSchema, publishResponseSchema };
@@ -5,11 +5,12 @@ import { S as FunnelLogger, b as FunnelConnectorListener, c as ConnectorProcesse
5
5
  import { a as RunOptions, i as ProcessSnapshot, n as DetachOptions, o as RunResult, r as FunnelProcessRunner, t as AttachOptions } from "./process-runner-D5I_jhYQ.js";
6
6
  import { n as FunnelFileSystem, t as FileStat } from "./file-system-Wub9Nto4.js";
7
7
  import { t as FunnelProfiles } from "./profiles-EHTeCOqB.js";
8
- import { a as ChannelConnectorView, d as ConnectorConfig, i as FunnelTokenPrompter, l as ScheduleListenerOptions, m as FunnelLocalConfig, n as FunnelLocalConfigSync, o as FunnelChannels, s as FunnelClock, u as SlackListenerOptions } from "./local-config-sync-E_t5_fjw.js";
8
+ import { a as ChannelConnectorView, d as ConnectorConfig, i as FunnelTokenPrompter, l as ScheduleListenerOptions, m as FunnelLocalConfig, n as FunnelLocalConfigSync, o as FunnelChannels, s as FunnelClock, u as SlackListenerOptions } from "./local-config-sync-BY20ixEV.js";
9
9
  import { c as FunnelDiagnostics } from "./funnel-diagnostics-qWy5tPSq.js";
10
10
  import { n as FunnelDocs } from "./funnel-docs-dXPokzr5.js";
11
11
  import { t as FunnelRecovery } from "./funnel-recovery-BUBsu7WX.js";
12
12
  import { r as FunnelDoctor } from "./funnel-doctor-BF3Rdgk0.js";
13
+ import { a as HttpResponse, i as HttpRequest, r as FunnelHttpClient } from "./discord-connector-schema-CWHVNIcB.js";
13
14
  import { hc } from "hono/client";
14
15
  import { z } from "zod";
15
16
  import * as _$hono_factory0 from "hono/factory";
@@ -170,6 +171,10 @@ type Deps$7 = {
170
171
  onError?: OnFunnelError;
171
172
  healthCheckIntervalMs?: number;
172
173
  maxBackoffMs?: number;
174
+ /** Per-listener timeout for `start()`. A listener that hangs beyond this is
175
+ * treated as a startup failure — it won't block other listeners or the
176
+ * health-check loop. Defaults to 30 seconds. */
177
+ startTimeoutMs?: number;
173
178
  sleep?: (ms: number) => Promise<void>;
174
179
  now?: () => number;
175
180
  };
@@ -206,10 +211,13 @@ declare class FunnelListenerSupervisor {
206
211
  private readonly stats;
207
212
  private readonly healthCheckIntervalMs;
208
213
  private readonly maxBackoffMs;
214
+ private readonly startTimeoutMs;
209
215
  private readonly sleep;
210
216
  private readonly now;
211
217
  private healthCheckTimer;
212
218
  private healthCheckInFlight;
219
+ /** Connectors that failed initial start — retried by the health check. */
220
+ private readonly pendingRetry;
213
221
  constructor(deps: Deps$7);
214
222
  static keyOf(channelName: string, connectorName: string): string;
215
223
  isRunning(channelName: string, connectorName: string): boolean;
@@ -233,6 +241,8 @@ declare class FunnelListenerSupervisor {
233
241
  private recordError;
234
242
  private startHealthCheck;
235
243
  private stopHealthCheck;
244
+ /** Run one health-check pass synchronously. Test-only seam. */
245
+ runHealthCheckForTest(): Promise<void>;
236
246
  private runHealthCheck;
237
247
  private recoverDead;
238
248
  }
@@ -246,6 +256,9 @@ type GatewayEmitInput = {
246
256
  };
247
257
  type GatewayRouteDeps = {
248
258
  selfPid: number;
259
+ /** Funnel home dir this daemon is rooted at. Lets a probe tell whether the
260
+ * daemon answering on a shared port belongs to the expected repo/scope. */
261
+ dir: string;
249
262
  broadcaster: FunnelBroadcaster;
250
263
  supervisor: FunnelListenerSupervisor;
251
264
  channels: FunnelChannels;
@@ -426,6 +439,7 @@ declare class FunnelGatewayServer {
426
439
  */
427
440
  private tokenMatchesUpgrade;
428
441
  private resolveChannel;
442
+ private killCompetingSlackIfNeeded;
429
443
  private bootListeners;
430
444
  /**
431
445
  * Broadcast `content` to subscribers of `channel`, persisting the event in
@@ -668,7 +682,7 @@ type Props$5 = {
668
682
  logger?: FunnelLogger;
669
683
  };
670
684
  /**
671
- * Default `ConnectorDiagnosticLog`: three independent `LeucoLoggerSqliteSink`s, one
685
+ * Default `ConnectorDiagnosticLog`: three independent `FunnelLogSqliteSink`s, one
672
686
  * per table (raw / processed / connection), in separate files. Each sink
673
687
  * indexes the columns its queries filter on — `event_id` / `connector_id` /
674
688
  * `channel_id` for raw, plus `outcome` for processed and `status` for
@@ -1199,6 +1213,25 @@ declare class MemoryFunnelIdGenerator extends FunnelIdGenerator {
1199
1213
  generate(): string;
1200
1214
  }
1201
1215
  //#endregion
1216
+ //#region lib/engine/http/node-http-client.d.ts
1217
+ declare class NodeFunnelHttpClient extends FunnelHttpClient {
1218
+ constructor();
1219
+ fetch(request: HttpRequest): Promise<HttpResponse>;
1220
+ }
1221
+ //#endregion
1222
+ //#region lib/engine/http/memory-http-client.d.ts
1223
+ type MemoryHttpResponse = {
1224
+ status?: number;
1225
+ body?: string;
1226
+ };
1227
+ type MemoryHttpHandler = (request: HttpRequest) => MemoryHttpResponse | Promise<MemoryHttpResponse>;
1228
+ declare class MemoryFunnelHttpClient extends FunnelHttpClient {
1229
+ readonly calls: HttpRequest[];
1230
+ private handler;
1231
+ on(handler: MemoryHttpHandler): this;
1232
+ fetch(request: HttpRequest): Promise<HttpResponse>;
1233
+ }
1234
+ //#endregion
1202
1235
  //#region lib/gateway/service-routes.d.ts
1203
1236
  type Deps = {
1204
1237
  diagnostics: FunnelDiagnostics;
@@ -2669,6 +2702,7 @@ declare function buildGatewayRoutes(): _$hono_hono_base0.HonoBase<Env$1, {
2669
2702
  output: {
2670
2703
  ok: true;
2671
2704
  pid: number;
2705
+ funnelDir: string;
2672
2706
  clients: number;
2673
2707
  listeners: {
2674
2708
  channelName: string;
@@ -2693,6 +2727,7 @@ declare function buildGatewayRoutes(): _$hono_hono_base0.HonoBase<Env$1, {
2693
2727
  output: {
2694
2728
  ok: true;
2695
2729
  pid: number;
2730
+ funnelDir: string;
2696
2731
  uptimeMs: number;
2697
2732
  clients: {
2698
2733
  channel: string;
@@ -2975,4 +3010,4 @@ declare function buildGatewayRoutes(): _$hono_hono_base0.HonoBase<Env$1, {
2975
3010
  };
2976
3011
  }, "/", "/channels/:channel/publish">;
2977
3012
  //#endregion
2978
- export { FunnelGatewayToken as $, FUNNEL_DIR as A, ListenerOpResult as B, ProcessListStub as C, MockFunnelSettingsReader as D, NodeFunnelFileSystem as E, Funnel as F, SqliteFunnelEventLog as G, MemoryConnectorDiagnosticLog as H, GatewayServerOptions as I, PublishResponse as J, FunnelChannelPublisher as K, FunnelListenersClient as L, SETTINGS_PATH as M, resolveFunnelDir as N, createSettings as O, resolveFunnelPort as P, DEFAULT_GATEWAY_TOKEN_PATH as Q, ListListenersResult as R, MemoryProcessSyncHandler as S, MemoryFunnelFileSystem as T, SqliteConnectorDiagnosticLog as U, FunnelGateway as V, MemoryFunnelEventLog as W, publishRequestSchema as X, PublishResult as Y, publishResponseSchema as Z, AliveStub as _, ReplayableEvent as _t, toRequest as a, GatewayEventStore as at, MemoryProcessHandler as b, buildServiceRoutes as c, FunnelEventRecord as ct, MemoryFunnelClock as d, GatewayEmitInput as dt, gatewayLoopbackUrl as et, NodeFunnelClock as f, GatewayRouteDeps as ft, NodeFunnelLogger as g, FunnelBroadcaster as gt, MemoryFunnelLogger as h, BroadcastSubscriber as ht, queryToCliArgs as i, FunnelGatewayServer as it, FunnelSettingsStore as j, DEFAULT_GATEWAY_PORT as k, MemoryFunnelIdGenerator as l, funnelEventSchema as lt, LogEntry as m, BroadcastEvent as mt, CliApp as n, channelWsProtocols as nt, Env as o, FunnelEvent as ot, NoopFunnelLogger as p, FunnelListenerSupervisor as pt, PublishRequest as q, routes as r, channelWsUrl as rt, factory as s, FunnelEventLog as st, GatewayApp as t, ChannelWsUrlInput as tt, NodeFunnelIdGenerator as u, Env$1 as ut, MemoryFunnelProcessRunner as v, OnFunnelError as vt, NodeFunnelProcessRunner as w, MemoryProcessResponse as x, MemoryProcessCall as y, ListenerEntry as z };
3013
+ export { PublishResult as $, NodeFunnelFileSystem as A, GatewayServerOptions as B, MemoryProcessCall as C, ProcessListStub as D, MemoryProcessSyncHandler as E, FunnelSettingsStore as F, FunnelGateway as G, ListListenersResult as H, SETTINGS_PATH as I, MemoryFunnelEventLog as J, MemoryConnectorDiagnosticLog as K, resolveFunnelDir as L, createSettings as M, DEFAULT_GATEWAY_PORT as N, NodeFunnelProcessRunner as O, FUNNEL_DIR as P, PublishResponse as Q, resolveFunnelPort as R, MemoryFunnelProcessRunner as S, OnFunnelError as St, MemoryProcessResponse as T, ListenerEntry as U, FunnelListenersClient as V, ListenerOpResult as W, FunnelChannelPublisher as X, SqliteFunnelEventLog as Y, PublishRequest as Z, NoopFunnelLogger as _, FunnelListenerSupervisor as _t, toRequest as a, ChannelWsUrlInput as at, NodeFunnelLogger as b, FunnelBroadcaster as bt, buildServiceRoutes as c, FunnelGatewayServer as ct, MemoryHttpResponse as d, FunnelEventLog as dt, publishRequestSchema as et, NodeFunnelHttpClient as f, FunnelEventRecord as ft, NodeFunnelClock as g, GatewayRouteDeps as gt, MemoryFunnelClock as h, GatewayEmitInput as ht, queryToCliArgs as i, gatewayLoopbackUrl as it, MockFunnelSettingsReader as j, MemoryFunnelFileSystem as k, MemoryFunnelHttpClient as l, GatewayEventStore as lt, NodeFunnelIdGenerator as m, Env$1 as mt, CliApp as n, DEFAULT_GATEWAY_TOKEN_PATH as nt, Env as o, channelWsProtocols as ot, MemoryFunnelIdGenerator as p, funnelEventSchema as pt, SqliteConnectorDiagnosticLog as q, routes as r, FunnelGatewayToken as rt, factory as s, channelWsUrl as st, GatewayApp as t, publishResponseSchema as tt, MemoryHttpHandler as u, FunnelEvent as ut, LogEntry as v, BroadcastEvent as vt, MemoryProcessHandler as w, AliveStub as x, ReplayableEvent as xt, MemoryFunnelLogger as y, BroadcastSubscriber as yt, Funnel as z };
package/dist/index.d.ts CHANGED
@@ -3,14 +3,15 @@ import { n as FunnelIdGenerator, t as FunnelSettingsReader } from "./settings-re
3
3
  import { S as FunnelLogger, _ as connectorConnectionEventSchema, a as ConnectorConnectionStatus, b as FunnelConnectorListener, c as ConnectorProcessedQuery, d as ConnectorRawEvent, f as ConnectorRawQuery, g as StoredRawEvent, h as StoredProcessedEvent, i as ConnectorConnectionRecord, l as ConnectorProcessedRecord, m as StoredConnectionEvent, n as ConnectorConnectionEvent, o as ConnectorDiagnosticLog, p as ConnectorRawRecord, r as ConnectorConnectionQuery, s as ConnectorProcessedEvent, t as CONNECTOR_CONNECTION_STATUSES, u as ConnectorQuery, v as connectorProcessedEventSchema, x as NotifyFn, y as connectorRawEventSchema } from "./diagnostic-log-Bxe7Bbvw.js";
4
4
  import { a as RunOptions, i as ProcessSnapshot, n as DetachOptions, o as RunResult, r as FunnelProcessRunner, t as AttachOptions } from "./process-runner-D5I_jhYQ.js";
5
5
  import { n as FunnelFileSystem, t as FileStat } from "./file-system-Wub9Nto4.js";
6
- import { a as ChannelConnectorView, c as FunnelConnectorFactory, d as ConnectorConfig, f as ConnectorType, l as ScheduleListenerOptions, o as FunnelChannels, p as connectorConfigSchema, s as FunnelClock, u as SlackListenerOptions } from "./local-config-sync-E_t5_fjw.js";
6
+ import { a as ChannelConnectorView, c as FunnelConnectorFactory, d as ConnectorConfig, f as ConnectorType, l as ScheduleListenerOptions, o as FunnelChannels, p as connectorConfigSchema, s as FunnelClock, u as SlackListenerOptions } from "./local-config-sync-BY20ixEV.js";
7
+ import { n as FunnelConnectorAdapter, r as JsonValue, t as CallInput } from "./connector-adapter-BkYC6qiK.js";
7
8
  import { a as ScheduleEntry, c as scheduleEntrySchema, i as ScheduleConnectorConfig, o as scheduleCatchupPolicySchema, r as ScheduleCatchupPolicy, s as scheduleConnectorSchema } from "./schedule-listener-DKh0hnkK.js";
8
- import { a as slackConnectorSchema, c as SlackProcessedEmit, d as SlackSkipReason, i as SlackConnectorConfig, l as SlackProcessedSkip, o as FunnelSlackEventProcessor, s as SlackProcessed, u as SlackRawEvent } from "./slack-listener-DFlAzMc7.js";
9
+ import { a as slackConnectorSchema, c as SlackProcessedEmit, d as SlackSkipReason, i as SlackConnectorConfig, l as SlackProcessedSkip, o as FunnelSlackEventProcessor, s as SlackProcessed, u as SlackRawEvent } from "./slack-listener-DFW9vck4.js";
9
10
  import { a as DiagnosticsGatewayProbe, c as FunnelDiagnostics, d as DiagnosticEvent, f as previewOf, g as ConnectorDiagnosticSqlReader, h as toDiagnosticEvent, i as DiagnosticsChannelSource, l as ReplayResult, m as toDiagnosticConnectionError, n as DiagnoseAllReport, o as DiagnosticsPublisher, p as queryRows, r as DiagnosisStatus, s as DiagnosticsTokenReader, t as ChannelDiagnosis, u as DiagnosticConnectionError } from "./funnel-diagnostics-qWy5tPSq.js";
10
11
  import { n as FunnelDocs, t as DocsTopicListing } from "./funnel-docs-dXPokzr5.js";
11
12
  import { a as RecoveryListenerControl, i as RecoveryGatewayControl, n as RecoveryAction, o as RecoveryResult, r as RecoveryChannelSource, t as FunnelRecovery } from "./funnel-recovery-BUBsu7WX.js";
12
13
  import { n as DoctorReport, r as FunnelDoctor, t as DoctorFixMode } from "./funnel-doctor-BF3Rdgk0.js";
13
- import { n as discordConnectorSchema, t as DiscordConnectorConfig } from "./discord-connector-schema-CPgcZkXh.js";
14
+ import { a as HttpResponse, i as HttpRequest, n as discordConnectorSchema, r as FunnelHttpClient, t as DiscordConnectorConfig } from "./discord-connector-schema-CWHVNIcB.js";
14
15
  import { n as ghConnectorSchema, t as GhConnectorConfig } from "./gh-connector-schema-CU1ojfIF.js";
15
- import { $ as FunnelGatewayToken, A as FUNNEL_DIR, B as ListenerOpResult, C as ProcessListStub, D as MockFunnelSettingsReader, E as NodeFunnelFileSystem, F as Funnel, G as SqliteFunnelEventLog, H as MemoryConnectorDiagnosticLog, I as GatewayServerOptions, J as PublishResponse, K as FunnelChannelPublisher, L as FunnelListenersClient, M as SETTINGS_PATH, N as resolveFunnelDir, O as createSettings, P as resolveFunnelPort, Q as DEFAULT_GATEWAY_TOKEN_PATH, R as ListListenersResult, S as MemoryProcessSyncHandler, T as MemoryFunnelFileSystem, U as SqliteConnectorDiagnosticLog, V as FunnelGateway, W as MemoryFunnelEventLog, X as publishRequestSchema, Y as PublishResult, Z as publishResponseSchema, _ as AliveStub, _t as ReplayableEvent, a as toRequest, at as GatewayEventStore, b as MemoryProcessHandler, c as buildServiceRoutes, ct as FunnelEventRecord, d as MemoryFunnelClock, dt as GatewayEmitInput, et as gatewayLoopbackUrl, f as NodeFunnelClock, ft as GatewayRouteDeps, g as NodeFunnelLogger, gt as FunnelBroadcaster, h as MemoryFunnelLogger, ht as BroadcastSubscriber, i as queryToCliArgs, it as FunnelGatewayServer, j as FunnelSettingsStore, k as DEFAULT_GATEWAY_PORT, l as MemoryFunnelIdGenerator, lt as funnelEventSchema, m as LogEntry, mt as BroadcastEvent, n as CliApp, nt as channelWsProtocols, o as Env, ot as FunnelEvent, p as NoopFunnelLogger, pt as FunnelListenerSupervisor, q as PublishRequest, r as routes, rt as channelWsUrl, s as factory, st as FunnelEventLog, t as GatewayApp, tt as ChannelWsUrlInput, u as NodeFunnelIdGenerator, ut as Env$1, v as MemoryFunnelProcessRunner, vt as OnFunnelError, w as NodeFunnelProcessRunner, x as MemoryProcessResponse, y as MemoryProcessCall, z as ListenerEntry } from "./index-DEeCwhk2.js";
16
- export { AliveStub, AttachOptions, BroadcastEvent, BroadcastSubscriber, CONNECTOR_CONNECTION_STATUSES, ChannelConfig, ChannelConnectorView, ChannelDeliveryMode, ChannelDiagnosis, ChannelWsUrlInput, CliApp, ConnectorConfig, ConnectorConnectionEvent, ConnectorConnectionQuery, ConnectorConnectionRecord, ConnectorConnectionStatus, ConnectorDiagnosticLog, ConnectorDiagnosticSqlReader, ConnectorProcessedEvent, ConnectorProcessedQuery, ConnectorProcessedRecord, ConnectorQuery, ConnectorRawEvent, ConnectorRawQuery, ConnectorRawRecord, ConnectorType, DEFAULT_GATEWAY_PORT, DEFAULT_GATEWAY_TOKEN_PATH, DetachOptions, DiagnoseAllReport, DiagnosisStatus, DiagnosticConnectionError, DiagnosticEvent, DiagnosticsChannelSource, DiagnosticsGatewayProbe, DiagnosticsPublisher, DiagnosticsTokenReader, DiscordConnectorConfig, DocsTopicListing, DoctorFixMode, DoctorReport, Env, FUNNEL_DIR, FileStat, Funnel, FunnelBroadcaster, FunnelChannelPublisher, FunnelChannels, FunnelClock, FunnelConnectorFactory, FunnelConnectorListener, FunnelDiagnostics, FunnelDocs, FunnelDoctor, FunnelEvent, FunnelEventLog, FunnelEventRecord, FunnelFileSystem, FunnelGateway, FunnelGatewayServer, FunnelGatewayToken, FunnelIdGenerator, FunnelListenerSupervisor, FunnelListenersClient, FunnelLogger, FunnelProcessRunner, FunnelRecovery, FunnelSettingsReader, FunnelSettingsStore, FunnelSlackEventProcessor, GatewayApp, GatewayEmitInput, GatewayEventStore, GatewayRouteDeps, Env$1 as GatewayServerEnv, GatewayServerOptions, GhConnectorConfig, ListListenersResult, ListenerEntry, ListenerOpResult, LogEntry, MemoryConnectorDiagnosticLog, MemoryFunnelClock, MemoryFunnelEventLog, MemoryFunnelFileSystem, MemoryFunnelIdGenerator, MemoryFunnelLogger, MemoryFunnelProcessRunner, MemoryProcessCall, MemoryProcessHandler, MemoryProcessResponse, MemoryProcessSyncHandler, MockFunnelSettingsReader, NodeFunnelClock, NodeFunnelFileSystem, NodeFunnelIdGenerator, NodeFunnelLogger, NodeFunnelProcessRunner, NoopFunnelLogger, NotifyFn, OnFunnelError, ProcessListStub, ProcessSnapshot, ProfileConfig, PublishRequest, PublishResponse, PublishResult, RecoveryAction, RecoveryChannelSource, RecoveryGatewayControl, RecoveryListenerControl, RecoveryResult, ReplayResult, ReplayableEvent, RunOptions, RunResult, SETTINGS_PATH, SETTINGS_VERSION, ScheduleCatchupPolicy, ScheduleConnectorConfig, ScheduleEntry, ScheduleListenerOptions, Settings, SlackConnectorConfig, SlackListenerOptions, SlackProcessed, SlackProcessedEmit, SlackProcessedSkip, SlackRawEvent, SlackSkipReason, SqliteConnectorDiagnosticLog, SqliteFunnelEventLog, StoredConnectionEvent, StoredProcessedEvent, StoredRawEvent, buildServiceRoutes, channelConfigSchema, channelDeliveryModeSchema, channelWsProtocols, channelWsUrl, routes as cliRoutes, connectorConfigSchema, connectorConnectionEventSchema, connectorProcessedEventSchema, connectorRawEventSchema, createSettings, discordConnectorSchema, factory, funnelEventSchema, gatewayLoopbackUrl, ghConnectorSchema, previewOf, profileConfigSchema, publishRequestSchema, publishResponseSchema, queryRows, queryToCliArgs, resolveFunnelDir, resolveFunnelPort, scheduleCatchupPolicySchema, scheduleConnectorSchema, scheduleEntrySchema, settingsSchema, slackConnectorSchema, toDiagnosticConnectionError, toDiagnosticEvent, toRequest };
16
+ import { $ as PublishResult, A as NodeFunnelFileSystem, B as GatewayServerOptions, C as MemoryProcessCall, D as ProcessListStub, E as MemoryProcessSyncHandler, F as FunnelSettingsStore, G as FunnelGateway, H as ListListenersResult, I as SETTINGS_PATH, J as MemoryFunnelEventLog, K as MemoryConnectorDiagnosticLog, L as resolveFunnelDir, M as createSettings, N as DEFAULT_GATEWAY_PORT, O as NodeFunnelProcessRunner, P as FUNNEL_DIR, Q as PublishResponse, R as resolveFunnelPort, S as MemoryFunnelProcessRunner, St as OnFunnelError, T as MemoryProcessResponse, U as ListenerEntry, V as FunnelListenersClient, W as ListenerOpResult, X as FunnelChannelPublisher, Y as SqliteFunnelEventLog, Z as PublishRequest, _ as NoopFunnelLogger, _t as FunnelListenerSupervisor, a as toRequest, at as ChannelWsUrlInput, b as NodeFunnelLogger, bt as FunnelBroadcaster, c as buildServiceRoutes, ct as FunnelGatewayServer, d as MemoryHttpResponse, dt as FunnelEventLog, et as publishRequestSchema, f as NodeFunnelHttpClient, ft as FunnelEventRecord, g as NodeFunnelClock, gt as GatewayRouteDeps, h as MemoryFunnelClock, ht as GatewayEmitInput, i as queryToCliArgs, it as gatewayLoopbackUrl, j as MockFunnelSettingsReader, k as MemoryFunnelFileSystem, l as MemoryFunnelHttpClient, lt as GatewayEventStore, m as NodeFunnelIdGenerator, mt as Env$1, n as CliApp, nt as DEFAULT_GATEWAY_TOKEN_PATH, o as Env, ot as channelWsProtocols, p as MemoryFunnelIdGenerator, pt as funnelEventSchema, q as SqliteConnectorDiagnosticLog, r as routes, rt as FunnelGatewayToken, s as factory, st as channelWsUrl, t as GatewayApp, tt as publishResponseSchema, u as MemoryHttpHandler, ut as FunnelEvent, v as LogEntry, vt as BroadcastEvent, w as MemoryProcessHandler, x as AliveStub, xt as ReplayableEvent, y as MemoryFunnelLogger, yt as BroadcastSubscriber, z as Funnel } from "./index-tP67P1Sy.js";
17
+ export { AliveStub, AttachOptions, BroadcastEvent, BroadcastSubscriber, CONNECTOR_CONNECTION_STATUSES, CallInput, ChannelConfig, ChannelConnectorView, ChannelDeliveryMode, ChannelDiagnosis, ChannelWsUrlInput, CliApp, ConnectorConfig, ConnectorConnectionEvent, ConnectorConnectionQuery, ConnectorConnectionRecord, ConnectorConnectionStatus, ConnectorDiagnosticLog, ConnectorDiagnosticSqlReader, ConnectorProcessedEvent, ConnectorProcessedQuery, ConnectorProcessedRecord, ConnectorQuery, ConnectorRawEvent, ConnectorRawQuery, ConnectorRawRecord, ConnectorType, DEFAULT_GATEWAY_PORT, DEFAULT_GATEWAY_TOKEN_PATH, DetachOptions, DiagnoseAllReport, DiagnosisStatus, DiagnosticConnectionError, DiagnosticEvent, DiagnosticsChannelSource, DiagnosticsGatewayProbe, DiagnosticsPublisher, DiagnosticsTokenReader, DiscordConnectorConfig, DocsTopicListing, DoctorFixMode, DoctorReport, Env, FUNNEL_DIR, FileStat, Funnel, FunnelBroadcaster, FunnelChannelPublisher, FunnelChannels, FunnelClock, FunnelConnectorAdapter, FunnelConnectorFactory, FunnelConnectorListener, FunnelDiagnostics, FunnelDocs, FunnelDoctor, FunnelEvent, FunnelEventLog, FunnelEventRecord, FunnelFileSystem, FunnelGateway, FunnelGatewayServer, FunnelGatewayToken, FunnelHttpClient, FunnelIdGenerator, FunnelListenerSupervisor, FunnelListenersClient, FunnelLogger, FunnelProcessRunner, FunnelRecovery, FunnelSettingsReader, FunnelSettingsStore, FunnelSlackEventProcessor, GatewayApp, GatewayEmitInput, GatewayEventStore, GatewayRouteDeps, Env$1 as GatewayServerEnv, GatewayServerOptions, GhConnectorConfig, HttpRequest, HttpResponse, JsonValue, ListListenersResult, ListenerEntry, ListenerOpResult, LogEntry, MemoryConnectorDiagnosticLog, MemoryFunnelClock, MemoryFunnelEventLog, MemoryFunnelFileSystem, MemoryFunnelHttpClient, MemoryFunnelIdGenerator, MemoryFunnelLogger, MemoryFunnelProcessRunner, MemoryHttpHandler, MemoryHttpResponse, MemoryProcessCall, MemoryProcessHandler, MemoryProcessResponse, MemoryProcessSyncHandler, MockFunnelSettingsReader, NodeFunnelClock, NodeFunnelFileSystem, NodeFunnelHttpClient, NodeFunnelIdGenerator, NodeFunnelLogger, NodeFunnelProcessRunner, NoopFunnelLogger, NotifyFn, OnFunnelError, ProcessListStub, ProcessSnapshot, ProfileConfig, PublishRequest, PublishResponse, PublishResult, RecoveryAction, RecoveryChannelSource, RecoveryGatewayControl, RecoveryListenerControl, RecoveryResult, ReplayResult, ReplayableEvent, RunOptions, RunResult, SETTINGS_PATH, SETTINGS_VERSION, ScheduleCatchupPolicy, ScheduleConnectorConfig, ScheduleEntry, ScheduleListenerOptions, Settings, SlackConnectorConfig, SlackListenerOptions, SlackProcessed, SlackProcessedEmit, SlackProcessedSkip, SlackRawEvent, SlackSkipReason, SqliteConnectorDiagnosticLog, SqliteFunnelEventLog, StoredConnectionEvent, StoredProcessedEvent, StoredRawEvent, buildServiceRoutes, channelConfigSchema, channelDeliveryModeSchema, channelWsProtocols, channelWsUrl, routes as cliRoutes, connectorConfigSchema, connectorConnectionEventSchema, connectorProcessedEventSchema, connectorRawEventSchema, createSettings, discordConnectorSchema, factory, funnelEventSchema, gatewayLoopbackUrl, ghConnectorSchema, previewOf, profileConfigSchema, publishRequestSchema, publishResponseSchema, queryRows, queryToCliArgs, resolveFunnelDir, resolveFunnelPort, scheduleCatchupPolicySchema, scheduleConnectorSchema, scheduleEntrySchema, settingsSchema, slackConnectorSchema, toDiagnosticConnectionError, toDiagnosticEvent, toRequest };
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
- import { r as FunnelDiscordAdapter, t as FunnelDiscordListener } from "./discord-listener-C0MoKdQO.js";
1
+ import { t as FunnelConnectorAdapter } from "./connector-adapter-qwXLjQId.js";
2
+ import { a as FunnelHttpClient, i as NodeFunnelHttpClient, r as FunnelDiscordAdapter, t as FunnelDiscordListener } from "./discord-listener-CKsZGTnH.js";
2
3
  import { t as FunnelConnectorListener } from "./connector-listener-CpHBecCj.js";
3
4
  import { t as FunnelLogger } from "./logger-BP6SisKt.js";
4
5
  import { n as NodeFunnelProcessRunner, r as FunnelProcessRunner, t as ghConnectorSchema } from "./gh-connector-schema-DUcZgN2Q.js";
@@ -6,13 +7,13 @@ import { n as FunnelGhAdapter, t as FunnelGhListener } from "./gh-listener-Dsx6A
6
7
  import { n as ScheduleStateStore, t as FunnelScheduleListener } from "./schedule-listener-DP9Jhc6U.js";
7
8
  import { t as FunnelFileSystem } from "./file-system-PWKKU7lA.js";
8
9
  import { t as NodeFunnelFileSystem } from "./node-file-system-BcrmWN9I.js";
9
- import { n as FunnelSlackEventProcessor, r as FunnelSlackAdapter, t as FunnelSlackListener } from "./slack-listener-BDyBqatt.js";
10
+ import { n as FunnelSlackEventProcessor, r as FunnelSlackAdapter, t as FunnelSlackListener } from "./slack-listener-C4wlZaOq.js";
10
11
  import { n as FunnelIdGenerator, t as FunnelSettingsReader } from "./settings-reader-DPqrpV7s.js";
11
12
  import { a as SETTINGS_PATH, c as SETTINGS_VERSION, d as profileConfigSchema, f as settingsSchema, i as FunnelSettingsStore, l as channelConfigSchema, m as NodeFunnelIdGenerator, n as DEFAULT_GATEWAY_PORT, o as resolveFunnelDir, p as connectorConfigSchema, r as FUNNEL_DIR, s as resolveFunnelPort, t as gatewayLoopbackUrl, u as channelDeliveryModeSchema } from "./gateway-base-url-6foMXfFf.js";
12
13
  import { t as discordConnectorSchema } from "./discord-connector-schema-B_N6IXLz.js";
13
14
  import { n as scheduleConnectorSchema, r as scheduleEntrySchema, t as scheduleCatchupPolicySchema } from "./schedule-connector-schema-B_xO5z5B.js";
14
15
  import { t as slackConnectorSchema } from "./slack-connector-schema-C1zEf4TG.js";
15
- import { a as FunnelMcp, o as FileProcessGuard, s as FunnelClaude, t as renderYaml } from "./yaml-render-OhUN-qkS.js";
16
+ import { a as FunnelMcp, o as FileProcessGuard, s as FunnelClaude, t as renderYaml } from "./yaml-render-C9Hhjk-0.js";
16
17
  import { a as toDiagnosticEvent, i as toDiagnosticConnectionError, n as previewOf, r as queryRows, t as FunnelDiagnostics } from "./funnel-diagnostics-BpKYrMSu.js";
17
18
  import { t as ConnectorDiagnosticSqlReader } from "./diagnostic-sql-reader-CzYgZpq2.js";
18
19
  import { t as FunnelDoctor } from "./funnel-doctor-CApCezTq.js";
@@ -20,7 +21,7 @@ import { t as FunnelDocs } from "./funnel-docs-ng5K8w4j.js";
20
21
  import { a as FunnelLocalConfig, n as NodeFunnelTokenPrompter, r as FunnelLocalConfigSync, t as funnelJsonSchema } from "./local-config-json-schema-DE1zkMcb.js";
21
22
  import { t as FunnelProfiles } from "./profiles-MnXvYfZF.js";
22
23
  import { t as FunnelRecovery } from "./funnel-recovery-D9CxD5Zs.js";
23
- import { C as funnelTmpDir, S as publishResponseSchema, _ as funnelEventSchema, a as connectorConnectionEventSchema, b as FunnelChannelPublisher, c as MemoryFunnelEventLog, d as DEFAULT_GATEWAY_TOKEN_PATH, f as FunnelGatewayToken, g as FunnelEventLog, h as SqliteFunnelEventLog, i as ConnectorDiagnosticLog, l as channelWsProtocols, m as FunnelListenerSupervisor, n as SqliteConnectorDiagnosticLog, o as connectorProcessedEventSchema, p as FunnelGatewayServer, r as CONNECTOR_CONNECTION_STATUSES, s as connectorRawEventSchema, t as MemoryConnectorDiagnosticLog, u as channelWsUrl, v as FunnelBroadcaster, x as publishRequestSchema, y as requireBearerToken } from "./memory-diagnostic-log-BbFVqDzz.js";
24
+ import { C as funnelTmpDir, S as publishResponseSchema, _ as funnelEventSchema, a as connectorConnectionEventSchema, b as FunnelChannelPublisher, c as MemoryFunnelEventLog, d as DEFAULT_GATEWAY_TOKEN_PATH, f as FunnelGatewayToken, g as FunnelEventLog, h as SqliteFunnelEventLog, i as ConnectorDiagnosticLog, l as channelWsProtocols, m as FunnelListenerSupervisor, n as SqliteConnectorDiagnosticLog, o as connectorProcessedEventSchema, p as FunnelGatewayServer, r as CONNECTOR_CONNECTION_STATUSES, s as connectorRawEventSchema, t as MemoryConnectorDiagnosticLog, u as channelWsUrl, v as FunnelBroadcaster, x as publishRequestSchema, y as requireBearerToken } from "./memory-diagnostic-log-CvqobDDs.js";
24
25
  import { dirname, join, resolve } from "node:path";
25
26
  import { hc } from "hono/client";
26
27
  import { appendFileSync, existsSync, mkdirSync } from "node:fs";
@@ -1256,6 +1257,31 @@ var NoopFunnelLogger = class extends FunnelLogger {
1256
1257
  error() {}
1257
1258
  };
1258
1259
  //#endregion
1260
+ //#region lib/engine/http/memory-http-client.ts
1261
+ var MemoryFunnelHttpClient = class extends FunnelHttpClient {
1262
+ calls = [];
1263
+ handler = () => ({
1264
+ status: 200,
1265
+ body: ""
1266
+ });
1267
+ on(handler) {
1268
+ this.handler = handler;
1269
+ return this;
1270
+ }
1271
+ async fetch(request) {
1272
+ this.calls.push(request);
1273
+ const response = await this.handler(request);
1274
+ const status = response.status ?? 200;
1275
+ const body = response.body ?? "";
1276
+ return {
1277
+ status,
1278
+ ok: status >= 200 && status < 300,
1279
+ text: async () => body,
1280
+ json: async () => JSON.parse(body)
1281
+ };
1282
+ }
1283
+ };
1284
+ //#endregion
1259
1285
  //#region lib/gateway/service-routes.ts
1260
1286
  /**
1261
1287
  * Mountable Hono app that exposes the service layer (`FunnelDiagnostics` +
@@ -1466,9 +1492,22 @@ const channelsAddHandler = factory.createHandlers(zValidator$1("param", z.object
1466
1492
  });
1467
1493
  return c.text(`added channel "${created.name}" (id: ${created.id})`);
1468
1494
  });
1469
- const channelsConnectorsGroupHandler = factory.createHandlers(zValidator$1("param", z.object({ channel: z.string() })), zValidator$1("query", z.object({}), `funnel channels <channel> connectors — list connectors in a channel
1495
+ const channelsConnectorsGroupHandler = factory.createHandlers(zValidator$1("param", z.object({ channel: z.string() })), zValidator$1("query", z.object({}), `funnel channels <channel> connectors — manage connectors in a channel
1496
+
1497
+ usage: funnel channels <channel> connectors [subcommand]
1470
1498
 
1471
- usage: funnel channels <channel> connectors`), (c) => {
1499
+ subcommands:
1500
+ (none) / list connectors
1501
+ add <c> --type=... / add a connector
1502
+ remove <c> / remove a connector
1503
+ set <c> [--bot-token=...] / update connector fields
1504
+ rename <c> <new> / rename a connector
1505
+ <c> / show one connector
1506
+ <c> rename <new> / rename (alternative form)
1507
+ <c> request --method=... / call connector outbound API
1508
+ <c> schedules / list schedule entries (schedule type only)
1509
+ <c> schedules add <id> --cron=... --prompt=... / add a schedule entry
1510
+ <c> schedules remove <id> / remove a schedule entry`), (c) => {
1472
1511
  const param = c.req.valid("param");
1473
1512
  const channel = c.env.funnel.channels.get(param.channel);
1474
1513
  if (!channel) throw new HTTPException(404, { message: `channel "${param.channel}" not found` });
@@ -1607,9 +1646,12 @@ const channelsConnectorsSetHandler = factory.createHandlers(zValidator$1("param"
1607
1646
  const channelsConnectorsShowHandler = factory.createHandlers(zValidator$1("param", z.object({
1608
1647
  channel: z.string(),
1609
1648
  connector: z.string()
1610
- })), zValidator$1("query", z.object({}), `funnel channels <channel> connectors show <connector> / show connector config
1649
+ })), zValidator$1("query", z.object({}), `funnel channels <channel> connectors <connector> / show connector config
1611
1650
 
1612
- usage / funnel channels <channel> connectors show <connector>
1651
+ subcommands:
1652
+ rename <new> / rename this connector
1653
+ request --method=... / call outbound API
1654
+ schedules / manage schedule entries (schedule type only)
1613
1655
 
1614
1656
  output / valid YAML`), (c) => {
1615
1657
  const param = c.req.valid("param");
@@ -1676,9 +1718,14 @@ output / valid YAML (or raw text when the adapter returns text)`), async (c) =>
1676
1718
  const channelsConnectorsSchedulesGroupHandler = factory.createHandlers(zValidator$1("param", z.object({
1677
1719
  channel: z.string(),
1678
1720
  connector: z.string()
1679
- })), zValidator$1("query", z.object({}), `funnel channels <ch> connectors <conn> schedules — list schedule entries
1721
+ })), zValidator$1("query", z.object({}), `funnel channels <ch> connectors <conn> schedules — manage schedule entries
1680
1722
 
1681
- usage: funnel channels <ch> connectors <conn> schedules`), (c) => {
1723
+ usage: funnel channels <ch> connectors <conn> schedules [subcommand]
1724
+
1725
+ subcommands:
1726
+ (none) / list schedule entries
1727
+ add <id> --cron=... --prompt=... [--enabled=true] [--catchup-policy=latest|all|skip] / add entry
1728
+ remove <id> / remove entry`), (c) => {
1682
1729
  const param = c.req.valid("param");
1683
1730
  const entries = c.env.funnel.channels.listScheduleEntries(param.channel, param.connector);
1684
1731
  if (entries.length === 0) return c.text("no schedule entries");
@@ -1823,6 +1870,13 @@ modes:
1823
1870
  });
1824
1871
  const channelsShowHandler = factory.createHandlers(zValidator$1("param", z.object({ channel: z.string() })), zValidator$1("query", z.object({}), `funnel channels <name> / show channel details
1825
1872
 
1873
+ subcommands:
1874
+ set delivery fanout|exclusive / change routing mode
1875
+ publish --content=... / push content into the channel
1876
+ validate / check connector configuration
1877
+ rename <new> / rename this channel
1878
+ connectors / manage connectors (add, remove, set, rename, request, schedules)
1879
+
1826
1880
  output / valid YAML`), (c) => {
1827
1881
  const param = c.req.valid("param");
1828
1882
  const channel = c.env.funnel.channels.get(param.channel);
@@ -1846,9 +1900,20 @@ subcommands:
1846
1900
  (none) / list every channel with its connectors
1847
1901
  add <name> / create a channel
1848
1902
  remove <name> / delete a channel
1903
+ rename <old> <new> / rename a channel
1849
1904
  <name> / show one channel
1905
+ <name> set delivery fanout|exclusive / change routing mode
1906
+ <name> publish --content=... / push content into a channel
1907
+ <name> validate / check connector configuration
1850
1908
  <name> connectors / list connectors
1851
1909
  <name> connectors add <c> --type=... / add a connector
1910
+ <name> connectors remove <c> / remove a connector
1911
+ <name> connectors set <c> [--bot-token=...] / update connector fields
1912
+ <name> connectors rename <c> <new> / rename a connector
1913
+ <name> connectors <c> request --method=... / call outbound API
1914
+ <name> connectors <c> schedules / list schedule entries
1915
+ <name> connectors <c> schedules add <id> / add a schedule entry
1916
+ <name> connectors <c> schedules remove <id> / remove a schedule entry
1852
1917
 
1853
1918
  output / valid YAML
1854
1919
 
@@ -3052,4 +3117,4 @@ const routes = factory.createApp().onError((error, c) => {
3052
3117
  return c.text(`error: ${error instanceof Error ? error.message : String(error)}`, 400);
3053
3118
  }).get("/claude", ...claudeHandler).get("/channels", ...channelsGroupHandler).post("/channels/add", ...channelsAddHelpHandler).post("/channels/add/:channel", ...channelsAddHandler).post("/channels/remove", ...channelsRemoveHelpHandler).post("/channels/remove/:channel", ...channelsRemoveHandler).post("/channels/rename/:channel/:newName", ...channelsRenameHandler).post("/channels/:channel/rename/:newName", ...channelsRenameHandler).post("/channels/rename", ...channelsRenameHelpHandler).post("/channels/:channel/rename", ...channelsChannelRenameHelpHandler).post("/channels/:channel/set/delivery/:mode", ...channelsSetDeliveryHandler).post("/channels/publish", ...channelsPublishHelpHandler).post("/channels/:channel/publish", ...channelsPublishHandler).get("/channels/:channel/validate", ...channelsValidateHandler).get("/channels/validate", ...channelsValidateHelpHandler).get("/channels/:channel", ...channelsShowHandler).get("/channels/:channel/connectors", ...channelsConnectorsGroupHandler).post("/channels/:channel/connectors/add", ...channelsConnectorsAddHelpHandler).post("/channels/:channel/connectors/add/:connector", ...channelsConnectorsAddHandler).post("/channels/:channel/connectors/remove", ...channelsConnectorsRemoveHelpHandler).post("/channels/:channel/connectors/remove/:connector", ...channelsConnectorsRemoveHandler).post("/channels/:channel/connectors/set", ...channelsConnectorsSetHelpHandler).post("/channels/:channel/connectors/set/:connector", ...channelsConnectorsSetHandler).post("/channels/:channel/connectors/rename/:connector/:newName", ...channelsConnectorsRenameHandler).post("/channels/:channel/connectors/:connector/rename/:newName", ...channelsConnectorsRenameHandler).post("/channels/:channel/connectors/rename", ...channelsConnectorsRenameHelpHandler).post("/channels/:channel/connectors/:connector/rename", ...channelsConnectorRenameHelpHandler).post("/channels/:channel/connectors/:connector/request", ...channelsConnectorsRequestHandler).get("/channels/:channel/connectors/:connector", ...channelsConnectorsShowHandler).get("/channels/:channel/connectors/:connector/schedules", ...channelsConnectorsSchedulesGroupHandler).post("/channels/:channel/connectors/:connector/schedules/add", ...channelsConnectorSchedulesAddHelpHandler).post("/channels/:channel/connectors/:connector/schedules/add/:id", ...channelsConnectorsSchedulesAddHandler).post("/channels/:channel/connectors/:connector/schedules/remove", ...channelsConnectorSchedulesRemoveHelpHandler).post("/channels/:channel/connectors/:connector/schedules/remove/:id", ...channelsConnectorsSchedulesRemoveHandler).get("/profiles", ...profilesGroupHandler).post("/profiles/add", ...profilesAddHelpHandler).post("/profiles/add/:profile", ...profilesAddHandler).post("/profiles/set", ...profilesSetHelpHandler).post("/profiles/set/:profile", ...profilesSetHandler).post("/profiles/remove", ...profilesRemoveHelpHandler).post("/profiles/remove/:profile", ...profilesRemoveHandler).post("/profiles/rename/:profile/:newName", ...profilesRenameHandler).post("/profiles/:profile/rename/:newName", ...profilesRenameHandler).post("/profiles/rename", ...profilesRenameHelpHandler).post("/profiles/:profile/rename", ...profilesProfileRenameHelpHandler).post("/profiles/:profile/as-default", ...profilesAsDefaultHandler).get("/profiles/:profile/run", ...profilesLaunchHandler).get("/profiles/:profile", ...profilesLaunchHandler).get("/gateway", ...gatewayGroupHandler).get("/gateway/status", ...gatewayStatusHandler).get("/gateway/start", ...gatewayStartHandler).get("/gateway/stop", ...gatewayStopHandler).get("/gateway/restart", ...gatewayRestartHandler).get("/gateway/run", ...gatewayRunHandler).get("/gateway/logs", ...gatewayLogsHandler).get("/gateway/sql", ...gatewaySqlHandler).get("/gateway/listeners", ...gatewayListenersHandler).get("/debug", ...debugHandler).get("/debug/events", ...debugEventsHandler).get("/debug/dropped", ...debugDroppedHandler).get("/debug/errors", ...debugErrorsHandler).get("/debug/replay", ...debugReplayHandler).get("/docs", ...docsIndexHandler).get("/docs/:topic", ...docsTopicHandler).get("/doctor", ...doctorHandler).get("/schema", ...schemaHandler).get("/status", ...statusHandler).get("/update", ...updateHandler);
3054
3119
  //#endregion
3055
- export { CONNECTOR_CONNECTION_STATUSES, ConnectorDiagnosticLog, ConnectorDiagnosticSqlReader, DEFAULT_GATEWAY_PORT, DEFAULT_GATEWAY_TOKEN_PATH, FUNNEL_DIR, Funnel, FunnelBroadcaster, FunnelChannelPublisher, FunnelChannels, FunnelClock, FunnelConnectorFactory, FunnelConnectorListener, FunnelDiagnostics, FunnelDocs, FunnelDoctor, FunnelEventLog, FunnelFileSystem, FunnelGateway, FunnelGatewayServer, FunnelGatewayToken, FunnelIdGenerator, FunnelListenerSupervisor, FunnelListenersClient, FunnelLogger, FunnelProcessRunner, FunnelRecovery, FunnelSettingsReader, FunnelSettingsStore, FunnelSlackEventProcessor, MemoryConnectorDiagnosticLog, MemoryFunnelClock, MemoryFunnelEventLog, MemoryFunnelFileSystem, MemoryFunnelIdGenerator, MemoryFunnelLogger, MemoryFunnelProcessRunner, MockFunnelSettingsReader, NodeFunnelClock, NodeFunnelFileSystem, NodeFunnelIdGenerator, NodeFunnelLogger, NodeFunnelProcessRunner, NoopFunnelLogger, SETTINGS_PATH, SETTINGS_VERSION, SqliteConnectorDiagnosticLog, SqliteFunnelEventLog, buildServiceRoutes, channelConfigSchema, channelDeliveryModeSchema, channelWsProtocols, channelWsUrl, routes as cliRoutes, connectorConfigSchema, connectorConnectionEventSchema, connectorProcessedEventSchema, connectorRawEventSchema, createSettings, discordConnectorSchema, factory, funnelEventSchema, gatewayLoopbackUrl, ghConnectorSchema, previewOf, profileConfigSchema, publishRequestSchema, publishResponseSchema, queryRows, queryToCliArgs, resolveFunnelDir, resolveFunnelPort, scheduleCatchupPolicySchema, scheduleConnectorSchema, scheduleEntrySchema, settingsSchema, slackConnectorSchema, toDiagnosticConnectionError, toDiagnosticEvent, toRequest };
3120
+ export { CONNECTOR_CONNECTION_STATUSES, ConnectorDiagnosticLog, ConnectorDiagnosticSqlReader, DEFAULT_GATEWAY_PORT, DEFAULT_GATEWAY_TOKEN_PATH, FUNNEL_DIR, Funnel, FunnelBroadcaster, FunnelChannelPublisher, FunnelChannels, FunnelClock, FunnelConnectorAdapter, FunnelConnectorFactory, FunnelConnectorListener, FunnelDiagnostics, FunnelDocs, FunnelDoctor, FunnelEventLog, FunnelFileSystem, FunnelGateway, FunnelGatewayServer, FunnelGatewayToken, FunnelHttpClient, FunnelIdGenerator, FunnelListenerSupervisor, FunnelListenersClient, FunnelLogger, FunnelProcessRunner, FunnelRecovery, FunnelSettingsReader, FunnelSettingsStore, FunnelSlackEventProcessor, MemoryConnectorDiagnosticLog, MemoryFunnelClock, MemoryFunnelEventLog, MemoryFunnelFileSystem, MemoryFunnelHttpClient, MemoryFunnelIdGenerator, MemoryFunnelLogger, MemoryFunnelProcessRunner, MockFunnelSettingsReader, NodeFunnelClock, NodeFunnelFileSystem, NodeFunnelHttpClient, NodeFunnelIdGenerator, NodeFunnelLogger, NodeFunnelProcessRunner, NoopFunnelLogger, SETTINGS_PATH, SETTINGS_VERSION, SqliteConnectorDiagnosticLog, SqliteFunnelEventLog, buildServiceRoutes, channelConfigSchema, channelDeliveryModeSchema, channelWsProtocols, channelWsUrl, routes as cliRoutes, connectorConfigSchema, connectorConnectionEventSchema, connectorProcessedEventSchema, connectorRawEventSchema, createSettings, discordConnectorSchema, factory, funnelEventSchema, gatewayLoopbackUrl, ghConnectorSchema, previewOf, profileConfigSchema, publishRequestSchema, publishResponseSchema, queryRows, queryToCliArgs, resolveFunnelDir, resolveFunnelPort, scheduleCatchupPolicySchema, scheduleConnectorSchema, scheduleEntrySchema, settingsSchema, slackConnectorSchema, toDiagnosticConnectionError, toDiagnosticEvent, toRequest };
@@ -3,9 +3,9 @@ import { n as FunnelIdGenerator, t as FunnelSettingsReader } from "./settings-re
3
3
  import { S as FunnelLogger, b as FunnelConnectorListener, o as ConnectorDiagnosticLog } from "./diagnostic-log-Bxe7Bbvw.js";
4
4
  import { r as FunnelProcessRunner } from "./process-runner-D5I_jhYQ.js";
5
5
  import { n as FunnelFileSystem } from "./file-system-Wub9Nto4.js";
6
- import { n as FunnelConnectorAdapter, t as CallInput } from "./connector-adapter-1PxjN-Uk.js";
6
+ import { n as FunnelConnectorAdapter, t as CallInput } from "./connector-adapter-BkYC6qiK.js";
7
7
  import { a as ScheduleEntry, n as ScheduleOnFired } from "./schedule-listener-DKh0hnkK.js";
8
- import { n as SlackOnAppCreated, r as SlackPreprocessEvent } from "./slack-listener-DFlAzMc7.js";
8
+ import { n as SlackOnAppCreated, r as SlackPreprocessEvent } from "./slack-listener-DFW9vck4.js";
9
9
  import { z } from "zod";
10
10
 
11
11
  //#region lib/services/local-config/local-config-schema.d.ts
@@ -1,3 +1,3 @@
1
- import { C as profileSpecSchema, S as localConfigSchema, _ as LOCAL_CONFIG_FILENAME, b as channelSpecSchema, g as ConnectorSpec, h as ChannelSpec, i as FunnelTokenPrompter, m as FunnelLocalConfig, n as FunnelLocalConfigSync, r as LocalConfigSyncResult, t as ConnectorSyncOutcome, v as LocalConfig, x as connectorSpecSchema, y as ProfileSpec } from "./local-config-sync-E_t5_fjw.js";
2
- import { i as funnelJsonSchema, n as NodeFunnelTokenPrompter, r as FunnelLocalConfigWriter, t as MemoryFunnelTokenPrompter } from "./memory-token-prompter-DpCC1_Dn.js";
1
+ import { C as profileSpecSchema, S as localConfigSchema, _ as LOCAL_CONFIG_FILENAME, b as channelSpecSchema, g as ConnectorSpec, h as ChannelSpec, i as FunnelTokenPrompter, m as FunnelLocalConfig, n as FunnelLocalConfigSync, r as LocalConfigSyncResult, t as ConnectorSyncOutcome, v as LocalConfig, x as connectorSpecSchema, y as ProfileSpec } from "./local-config-sync-BY20ixEV.js";
2
+ import { i as funnelJsonSchema, n as NodeFunnelTokenPrompter, r as FunnelLocalConfigWriter, t as MemoryFunnelTokenPrompter } from "./memory-token-prompter-DOgptiIb.js";
3
3
  export { ChannelSpec, ConnectorSpec, ConnectorSyncOutcome, FunnelLocalConfig, FunnelLocalConfigSync, FunnelLocalConfigWriter, FunnelTokenPrompter, LOCAL_CONFIG_FILENAME, LocalConfig, LocalConfigSyncResult, MemoryFunnelTokenPrompter, NodeFunnelTokenPrompter, ProfileSpec, channelSpecSchema, connectorSpecSchema, funnelJsonSchema, localConfigSchema, profileSpecSchema };