@interactive-inc/claude-funnel 0.60.1 → 0.64.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.
Files changed (88) hide show
  1. package/README.md +2 -2
  2. package/dist/bin.js +428 -761
  3. package/dist/{channels-2g_BU1N0.d.ts → channels-CRGb6B5_.d.ts} +17 -16
  4. package/dist/claude.d.ts +5 -7
  5. package/dist/claude.js +143 -36
  6. package/dist/{connector-descriptor-6SXJoszo.d.ts → connector-descriptor-BFIhyTfa.d.ts} +49 -10
  7. package/dist/connector-diagnostics-recorder-COtNEmUp.js +42 -0
  8. package/dist/connectors/discord.d.ts +31 -37
  9. package/dist/connectors/discord.js +3 -3
  10. package/dist/connectors/gh.d.ts +37 -33
  11. package/dist/connectors/gh.js +3 -3
  12. package/dist/connectors/schedule.d.ts +9 -57
  13. package/dist/connectors/schedule.js +3 -3
  14. package/dist/connectors/slack.d.ts +106 -132
  15. package/dist/connectors/slack.js +4 -3
  16. package/dist/diagnostics.d.ts +1 -1
  17. package/dist/diagnostics.js +1 -1
  18. package/dist/discord-connector-DIFkYBbi.js +250 -0
  19. package/dist/discord-connector-schema-D-bOVAKt.d.ts +22 -0
  20. package/dist/docs.js +1 -1
  21. package/dist/doctor.d.ts +1 -1
  22. package/dist/doctor.js +1 -1
  23. package/dist/{file-process-guard-C_PLxfUX.d.ts → file-process-guard-tVcgckH6.d.ts} +6 -6
  24. package/dist/{file-system-o51IsM0W.d.ts → file-system-VhwwXZbm.d.ts} +8 -0
  25. package/dist/flume-source-listener-BNyAII7N.d.ts +133 -0
  26. package/dist/{funnel-diagnostics-CSiJmPlZ.js → funnel-diagnostics-Cvk6Sk4x.js} +193 -43
  27. package/dist/{funnel-diagnostics-DpXOsCty.d.ts → funnel-diagnostics-b9ar0Ing.d.ts} +67 -5
  28. package/dist/{funnel-docs-BxXZ9Ksx.js → funnel-docs-C-ge0MuB.js} +42 -6
  29. package/dist/{funnel-doctor-CZf_0Luq.d.ts → funnel-doctor-CnRQi4kM.d.ts} +2 -2
  30. package/dist/{funnel-doctor-DiJCjHsg.js → funnel-doctor-XrI2GBH8.js} +1 -1
  31. package/dist/funnel-error-0t1MK1R6.js +75 -0
  32. package/dist/{funnel-recovery-DnLrdWO9.d.ts → funnel-recovery-CMhY8Jfk.d.ts} +1 -1
  33. package/dist/gateway/daemon.js +167 -527
  34. package/dist/gateway.d.ts +3 -3
  35. package/dist/gateway.js +3 -3
  36. package/dist/gh-connector-BUGCOEWS.js +187 -0
  37. package/dist/{gh-connector-schema-Rzwc1c1N.js → gh-connector-schema-CAqIhzGr.js} +7 -0
  38. package/dist/gh-connector-schema-DWQaB6gX.d.ts +16 -0
  39. package/dist/{index-CgY8NdMz.d.ts → index-Ds6sHhA-.d.ts} +37 -19
  40. package/dist/index.d.ts +182 -22
  41. package/dist/index.js +363 -173
  42. package/dist/{local-config-json-schema-JyLqOQNX.js → local-config-json-schema-DexV8vX3.js} +24 -4
  43. package/dist/local-config.d.ts +39 -2
  44. package/dist/local-config.js +53 -2
  45. package/dist/logger.js +1 -1
  46. package/dist/loopback-fetch-CVNuN3YZ.js +40 -0
  47. package/dist/{local-config-sync-Dh1Croqe.d.ts → memory-token-prompter-BoV8Hf-n.d.ts} +30 -3
  48. package/dist/node-file-system-BOXIHW_Q.js +174 -0
  49. package/dist/{profiles-DSzTeKQw.js → profiles-ZHLONml4.js} +49 -49
  50. package/dist/{profiles-Cy5wXQ0L.d.ts → profiles-cVZQkM69.d.ts} +3 -3
  51. package/dist/profiles.d.ts +1 -1
  52. package/dist/profiles.js +1 -1
  53. package/dist/recovery.d.ts +1 -1
  54. package/dist/recovery.js +1 -1
  55. package/dist/resolve-connector-token-DxDG9mhf.js +22 -0
  56. package/dist/{schedule-connector-L4uzg5M8.js → schedule-connector-9k3gOIgl.js} +54 -55
  57. package/dist/schedule-connector-schema-Z0RXLgPI.d.ts +49 -0
  58. package/dist/settings-reader-BNxjsxCB.d.ts +27 -0
  59. package/dist/{settings-store-CUKSeTXC.js → settings-store-C2QdOH-t.js} +23 -4
  60. package/dist/slack-connector-CxpWagbT.js +388 -0
  61. package/dist/slack-event-processor-BhCf5Wiy.d.ts +95 -0
  62. package/dist/slack-event-processor-xFDG3US0.js +176 -0
  63. package/dist/slot-fields-D-pvMgTK.js +249 -0
  64. package/dist/{memory-diagnostic-log-CI60kNfB.js → sqlite-diagnostic-log-DOTPW-tG.js} +373 -249
  65. package/dist/{yaml-render-93pX7EF7.js → yaml-render--J1_3BSA.js} +25 -21
  66. package/package.json +2 -4
  67. package/dist/discord-connector-BL36yvbL.js +0 -250
  68. package/dist/gateway-base-url-Dy4Ykuoh.js +0 -14
  69. package/dist/gh-connector-DpiixfQZ.js +0 -226
  70. package/dist/http-client-oICicjuO.d.ts +0 -18
  71. package/dist/memory-token-prompter-B4sjyaAq.d.ts +0 -57
  72. package/dist/memory-token-prompter-CZde7e6y.js +0 -61
  73. package/dist/node-file-system-Blr8pAir.js +0 -48
  74. package/dist/settings-reader-BIFB_j2f.d.ts +0 -18
  75. package/dist/slack-connector-DQIFPdBF.js +0 -484
  76. package/dist/slot-fields-CMoRpwuy.js +0 -45
  77. /package/dist/{connector-adapter-DU9Rvyec.js → connector-adapter-Dvs8N7ew.js} +0 -0
  78. /package/dist/{connector-listener-DR3aKOuK.js → connector-listener-mPGZYa8e.js} +0 -0
  79. /package/dist/{diagnostic-sql-reader-C9zR-Csp.js → diagnostic-sql-reader-oXZnWFf_.js} +0 -0
  80. /package/dist/{discord-connector-schema-B_N6IXLz.js → discord-connector-schema-B4YpWpR3.js} +0 -0
  81. /package/dist/{error-message-of-Byi4y0Uf.js → error-message-of-ColuYmAk.js} +0 -0
  82. /package/dist/{funnel-log-sqlite-sink-kqJbx2H7.js → funnel-log-sqlite-sink-DLYkY0pZ.js} +0 -0
  83. /package/dist/{funnel-recovery-BFdPjL6Z.js → funnel-recovery-DKnEutUS.js} +0 -0
  84. /package/dist/{node-http-client-lowp60Oa.js → node-http-client-u00atiKx.js} +0 -0
  85. /package/dist/{schedule-connector-schema-CfyuMCMh.js → schedule-connector-schema-DKEPZnVv.js} +0 -0
  86. /package/dist/{settings-reader-CtQ-Ix8_.js → settings-reader-9FcX3qS1.js} +0 -0
  87. /package/dist/{settings-schema-D1xcOqRu.d.ts → settings-schema-BL_c2Udm.d.ts} +0 -0
  88. /package/dist/{slack-connector-schema-C1zEf4TG.js → slack-connector-schema-Dem8to4P.js} +0 -0
package/dist/index.d.ts CHANGED
@@ -1,17 +1,20 @@
1
- import { a as Settings, c as profileConfigSchema, i as SETTINGS_VERSION, l as settingsSchema, n as ChannelDeliveryMode, o as channelConfigSchema, r as ProfileConfig, s as channelDeliveryModeSchema, t as ChannelConfig } from "./settings-schema-D1xcOqRu.js";
2
- import { n as FunnelClaude, t as FileProcessGuard } from "./file-process-guard-C_PLxfUX.js";
3
- import { n as FunnelIdGenerator, t as FunnelSettingsReader } from "./settings-reader-BIFB_j2f.js";
4
- import { A as FunnelConnectorAdapter, B as FunnelLogger, C as StoredRawEvent, D as FunnelConnectorListener, E as connectorRawEventSchema, F as DetachOptions, I as FunnelProcessRunner, L as ProcessSnapshot, M as BaseConnectorConfig, N as baseConnectorConfigSchema, O as NotifyFn, P as AttachOptions, R as RunOptions, S as StoredProcessedEvent, T as connectorProcessedEventSchema, _ as ConnectorQuery, a as ConnectorOperation, b as ConnectorRawRecord, c as CONNECTOR_CONNECTION_STATUSES, d as ConnectorConnectionRecord, f as ConnectorConnectionStatus, g as ConnectorProcessedRecord, h as ConnectorProcessedQuery, i as ConnectorListenerDeps, j as JsonValue, k as CallInput, l as ConnectorConnectionEvent, m as ConnectorProcessedEvent, n as ConnectorBuildContext, o as ConnectorOperationContext, p as ConnectorDiagnosticLog, r as ConnectorDescriptor, s as ConnectorUpdateContext, t as ConnectorAdapterDeps, u as ConnectorConnectionQuery, v as ConnectorRawEvent, w as connectorConnectionEventSchema, x as StoredConnectionEvent, y as ConnectorRawQuery, z as RunResult } from "./connector-descriptor-6SXJoszo.js";
5
- import { n as FunnelFileSystem, t as FileStat } from "./file-system-o51IsM0W.js";
6
- import { t as FunnelProfiles } from "./profiles-Cy5wXQ0L.js";
7
- import { a as FunnelLocalConfig, i as FunnelTokenPrompter, n as FunnelLocalConfigSync } from "./local-config-sync-Dh1Croqe.js";
8
- import { a as FunnelConnectorRegistry, i as FunnelClock, n as ChannelConnectorView, r as FunnelChannels, t as AddConnectorInput } from "./channels-2g_BU1N0.js";
9
- 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-DpXOsCty.js";
1
+ import { a as Settings, c as profileConfigSchema, i as SETTINGS_VERSION, l as settingsSchema, n as ChannelDeliveryMode, o as channelConfigSchema, r as ProfileConfig, s as channelDeliveryModeSchema, t as ChannelConfig } from "./settings-schema-BL_c2Udm.js";
2
+ import { n as FunnelClaude, t as FunnelFileProcessGuard } from "./file-process-guard-tVcgckH6.js";
3
+ import { n as FunnelIdGenerator, t as FunnelSettingsReader } from "./settings-reader-BNxjsxCB.js";
4
+ import { A as connectorRawEventSchema, B as FunnelProcessRunner, C as ConnectorRawQuery, D as StoredRawEvent, E as StoredProcessedEvent, F as JsonValue, H as RunOptions, I as BaseConnectorConfig, L as baseConnectorConfigSchema, M as NotifyFn, N as CallInput, O as connectorConnectionEventSchema, P as FunnelConnectorAdapter, R as AttachOptions, S as ConnectorRawEvent, T as StoredConnectionEvent, U as RunResult, V as ProcessSnapshot, W as FunnelLogger, _ as ConnectorDiagnosticLog, a as ConnectorOperation, b as ConnectorProcessedRecord, c as FunnelClock, d as HttpResponse, f as CONNECTOR_CONNECTION_STATUSES, g as ConnectorConnectionStatus, h as ConnectorConnectionRecord, i as ConnectorListenerDeps, j as FunnelConnectorListener, k as connectorProcessedEventSchema, l as FunnelHttpClient, m as ConnectorConnectionQuery, n as ConnectorBuildContext, o as ConnectorOperationContext, p as ConnectorConnectionEvent, r as ConnectorDescriptor, s as ConnectorUpdateContext, t as ConnectorAdapterDeps, u as HttpRequest, v as ConnectorProcessedEvent, w as ConnectorRawRecord, x as ConnectorQuery, y as ConnectorProcessedQuery, z as DetachOptions } from "./connector-descriptor-BFIhyTfa.js";
5
+ import { n as FunnelFileSystem, t as FileStat } from "./file-system-VhwwXZbm.js";
6
+ import { t as FunnelProfiles } from "./profiles-cVZQkM69.js";
7
+ 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-b9ar0Ing.js";
10
8
  import { n as FunnelDocs, t as DocsTopicListing } from "./funnel-docs-CNklHvbt.js";
11
- import { a as RecoveryListenerControl, i as RecoveryGatewayControl, n as RecoveryAction, o as RecoveryResult, r as RecoveryChannelSource, t as FunnelRecovery } from "./funnel-recovery-DnLrdWO9.js";
12
- import { n as DoctorReport, r as FunnelDoctor, t as DoctorFixMode } from "./funnel-doctor-CZf_0Luq.js";
13
- import { n as HttpRequest, r as HttpResponse, t as FunnelHttpClient } from "./http-client-oICicjuO.js";
14
- import { A as FunnelBroadcaster, C as funnelEventSchema, D as FunnelListenerSupervisor, E as GatewayRouteDeps, M as OnFunnelError, O as BroadcastEvent, S as FunnelEventRecord, T as GatewayEmitInput, _ as channelWsUrl, a as SqliteFunnelEventLog, b as FunnelEvent, c as PublishResponse, d as publishResponseSchema, f as DEFAULT_GATEWAY_TOKEN_PATH, g as channelWsProtocols, h as ChannelWsUrlInput, i as MemoryFunnelEventLog, j as ReplayableEvent, k as BroadcastSubscriber, l as PublishResult, m as gatewayLoopbackUrl, n as MemoryConnectorDiagnosticLog, o as FunnelChannelPublisher, p as FunnelGatewayToken, r as SqliteConnectorDiagnosticLog, s as PublishRequest, t as GatewayApp, u as publishRequestSchema, v as FunnelGatewayServer, w as Env$1, x as FunnelEventLog, y as GatewayEventStore } from "./index-CgY8NdMz.js";
9
+ import { a as RecoveryListenerControl, i as RecoveryGatewayControl, n as RecoveryAction, o as RecoveryResult, r as RecoveryChannelSource, t as FunnelRecovery } from "./funnel-recovery-CMhY8Jfk.js";
10
+ import { n as DoctorReport, r as FunnelDoctor, t as DoctorFixMode } from "./funnel-doctor-CnRQi4kM.js";
11
+ import { n as discordConnectorSchema, t as DiscordConnectorConfig } from "./discord-connector-schema-D-bOVAKt.js";
12
+ import { n as ghConnectorSchema, t as GhConnectorConfig } from "./gh-connector-schema-DWQaB6gX.js";
13
+ import { a as scheduleConnectorSchema, i as scheduleCatchupPolicySchema, n as ScheduleConnectorConfig, o as scheduleEntrySchema, r as ScheduleEntry, t as ScheduleCatchupPolicy } from "./schedule-connector-schema-Z0RXLgPI.js";
14
+ import { a as SlackRawEvent, c as SlackMessageEvent, d as slackConnectorSchema, i as SlackProcessedSkip, l as SlackReactionEvent, n as SlackProcessed, o as SlackSkipReason, r as SlackProcessedEmit, s as SlackEvent, t as FunnelSlackEventProcessor, u as SlackConnectorConfig } from "./slack-event-processor-BhCf5Wiy.js";
15
+ import { i as FunnelConnectorRegistry, n as ChannelConnectorView, r as FunnelChannels, t as AddConnectorInput } from "./channels-CRGb6B5_.js";
16
+ import { A as FunnelBroadcaster, C as funnelEventSchema, D as FunnelListenerRegistry, E as GatewayRouteDeps, M as OnFunnelError, O as BroadcastEvent, S as FunnelEventRecord, T as GatewayEmitInput, _ as channelWsUrl, a as SqliteFunnelEventLog, b as FunnelEvent, c as PublishResponse, d as publishResponseSchema, f as DEFAULT_GATEWAY_TOKEN_PATH, g as channelWsProtocols, h as ChannelWsUrlInput, i as MemoryFunnelEventLog, j as ReplayableEvent, k as BroadcastSubscriber, l as PublishResult, m as gatewayLoopbackUrl, n as MemoryConnectorDiagnosticLog, o as FunnelChannelPublisher, p as FunnelGatewayToken, r as SqliteConnectorDiagnosticLog, s as PublishRequest, t as GatewayApp, u as publishRequestSchema, v as FunnelGatewayServer, w as Env$1, x as FunnelEventLog, y as GatewayEventStore } from "./index-Ds6sHhA-.js";
17
+ import { i as FunnelLocalConfigSync, n as NodeFunnelTokenPrompter, o as FunnelTokenPrompter, s as FunnelLocalConfig, t as MemoryFunnelTokenPrompter } from "./memory-token-prompter-BoV8Hf-n.js";
15
18
  import { hc } from "hono/client";
16
19
  import { z } from "zod";
17
20
  import * as _$hono_factory0 from "hono/factory";
@@ -138,12 +141,12 @@ type Props$4 = {
138
141
  tmpDir?: string;
139
142
  /**
140
143
  * Connector types this funnel handles, passed as descriptors. Core imports no
141
- * connector, so a type's (heavy) listener/adapter code is bundled only when its
144
+ * connector, so a type's listener/adapter code is bundled only when its
142
145
  * descriptor is imported and listed here. Import from the per-type sub-entries:
143
146
  * `import { slackConnector } from "@interactive-inc/claude-funnel/connectors/slack"`.
144
- * Type-specific launch hooks (Slack `onAppCreated`/`preprocessEvent`, Schedule
145
- * `onFired`) are passed to the descriptor factory, e.g. `slackConnector({ onAppCreated })`.
146
- * Defaults to `[]` — no connectors handled.
147
+ * Only `scheduleConnector` currently takes options (`{ onFired }`); the other
148
+ * types build their listeners from the Flume sources directly. Defaults to
149
+ * `[]` — no connectors handled.
147
150
  */
148
151
  connectors?: ConnectorDescriptor[];
149
152
  /**
@@ -169,6 +172,20 @@ type Props$4 = {
169
172
  * Defaults to a TTY-only stdin prompter. Inject MemoryFunnelTokenPrompter in tests.
170
173
  */
171
174
  tokenPrompter?: FunnelTokenPrompter;
175
+ /**
176
+ * HTTP client used by connector adapters and listeners (e.g. Slack
177
+ * auth.test, reactions.add, Web API; Discord REST). Defaults to
178
+ * `NodeFunnelHttpClient` (global `fetch`). Inject `MemoryFunnelHttpClient`
179
+ * in tests to assert request shape and stub responses without network.
180
+ */
181
+ http?: FunnelHttpClient;
182
+ /**
183
+ * Shutdown signal forwarded to every flume-backed listener built by this
184
+ * funnel's connector registry. Wire a single `AbortController` here from a
185
+ * host-level SIGTERM handler so every listener's Flume tears down its
186
+ * WebSocket / fetch loop together when the host shuts down.
187
+ */
188
+ signal?: AbortSignal;
172
189
  };
173
190
  /**
174
191
  * Options for `Funnel.gatewayServer()`. The event store is a union (`dbPath`
@@ -225,12 +242,24 @@ declare class Funnel {
225
242
  private readonly process;
226
243
  private readonly logger;
227
244
  private readonly clock;
245
+ private readonly http;
228
246
  private readonly onError;
229
247
  constructor(props?: Props$4);
230
248
  /**
231
- * Sandboxed Funnel wired with in-memory implementations for every IO boundary.
232
- * Touches no real disk, processes, wall-clock time, or UUIDs — safe for tests
233
- * and ad-hoc experiments. Override individual fields by passing them in `props`.
249
+ * Sandboxed Funnel wired with in-memory implementations for every IO
250
+ * boundary. Touches no real disk, processes, wall-clock time, UUIDs, HTTP,
251
+ * TTY prompts, or diagnostic SQLite safe for tests and ad-hoc
252
+ * experiments. Override individual fields by passing them in `props`.
253
+ *
254
+ * NOT covered by `inMemory()`:
255
+ * - `gatewayServer()` still calls `Bun.serve` and binds a real port; use
256
+ * `port: 0` to let the OS pick one. The WebSocket subscription path
257
+ * also crosses the real socket.
258
+ * - Flume sources opened by listeners (Slack Socket Mode, Discord
259
+ * Gateway, GitHub poll) still open real WebSockets / HTTP. Pass
260
+ * `flumeDeps` to the descriptor's options if a test needs them stubbed.
261
+ * - `funnel.gateway` (daemon process) — `start()` still spawns a child
262
+ * process; only the in-process `gatewayServer()` is sandbox-friendly.
234
263
  */
235
264
  static inMemory(props?: Props$4): Funnel;
236
265
  /**
@@ -244,7 +273,7 @@ declare class Funnel {
244
273
  * Useful for hosts that need to check or manage singleton PID files
245
274
  * independently of FunnelClaude (e.g. checking if a named profile is running).
246
275
  */
247
- createProcessGuard(): FileProcessGuard;
276
+ createProcessGuard(): FunnelFileProcessGuard;
248
277
  /**
249
278
  * Run the gateway daemon in the foreground (tied to this terminal).
250
279
  * For background daemon management, use `funnel.gateway.start()` instead.
@@ -296,6 +325,17 @@ declare class FunnelSettingsStore extends FunnelSettingsReader {
296
325
  */
297
326
  private backfillProfileIds;
298
327
  write(settings: Settings): void;
328
+ /**
329
+ * Run `mutator` against a freshly-read settings object inside an exclusive
330
+ * file lock, then persist the result. Use this instead of bare `read()` +
331
+ * `write()` for any logical edit (add channel, set token, rename profile),
332
+ * so two concurrent CLI invocations or `fnl claude` launches cannot lose
333
+ * each other's updates via a read-modify-write race. The mutator may
334
+ * mutate `settings` in place and/or return a value; the value is returned
335
+ * to the caller. A thrown error from the mutator skips the write but still
336
+ * releases the lock.
337
+ */
338
+ update<T>(mutator: (settings: Settings) => T): T;
299
339
  }
300
340
  //#endregion
301
341
  //#region lib/engine/settings/mock-settings-reader.d.ts
@@ -305,6 +345,7 @@ declare class MockFunnelSettingsReader extends FunnelSettingsReader {
305
345
  constructor(initial?: Partial<Settings>);
306
346
  read(): Settings;
307
347
  write(settings: Settings): void;
348
+ update<T>(mutator: (settings: Settings) => T): T;
308
349
  }
309
350
  //#endregion
310
351
  //#region lib/engine/fs/node-file-system.d.ts
@@ -321,6 +362,7 @@ declare class NodeFunnelFileSystem extends FunnelFileSystem {
321
362
  }): void;
322
363
  readdirSync(path: string): string[];
323
364
  statSync(path: string): FileStat;
365
+ withFileLock<T>(lockPath: string, fn: () => T): T;
324
366
  }
325
367
  //#endregion
326
368
  //#region lib/engine/fs/memory-file-system.d.ts
@@ -349,6 +391,7 @@ declare class MemoryFunnelFileSystem extends FunnelFileSystem {
349
391
  }): void;
350
392
  readdirSync(path: string): string[];
351
393
  statSync(path: string): FileStat;
394
+ withFileLock<T>(_lockPath: string, fn: () => T): T;
352
395
  setMtime(path: string, mtimeMs: number): void;
353
396
  setMode(path: string, mode: number): void;
354
397
  private touch;
@@ -519,6 +562,76 @@ declare class MemoryFunnelHttpClient extends FunnelHttpClient {
519
562
  fetch(request: HttpRequest): Promise<HttpResponse>;
520
563
  }
521
564
  //#endregion
565
+ //#region lib/engine/error/funnel-error.d.ts
566
+ /**
567
+ * Base class every typed funnel error extends. Hosts can branch with
568
+ * `instanceof FunnelError` to distinguish library failures from arbitrary
569
+ * thrown values, then narrow to a specific subclass for action-grade
570
+ * matching. The `code` field is the discriminant for serialisation /
571
+ * cross-process boundaries where prototypes do not survive.
572
+ */
573
+ declare abstract class FunnelError extends Error {
574
+ abstract readonly code: string;
575
+ constructor(message: string, options?: {
576
+ cause?: unknown;
577
+ });
578
+ }
579
+ declare class FunnelChannelNotFoundError extends FunnelError {
580
+ readonly channel: string;
581
+ readonly code = "channel-not-found";
582
+ constructor(channel: string, options?: {
583
+ cause?: unknown;
584
+ });
585
+ }
586
+ declare class FunnelChannelAlreadyExistsError extends FunnelError {
587
+ readonly channel: string;
588
+ readonly code = "channel-already-exists";
589
+ constructor(channel: string, options?: {
590
+ cause?: unknown;
591
+ });
592
+ }
593
+ declare class FunnelConnectorNotFoundError extends FunnelError {
594
+ readonly channel: string;
595
+ readonly connector: string;
596
+ readonly code = "connector-not-found";
597
+ constructor(channel: string, connector: string, options?: {
598
+ cause?: unknown;
599
+ });
600
+ }
601
+ declare class FunnelConnectorTypeMismatchError extends FunnelError {
602
+ readonly connector: string;
603
+ readonly expected: string;
604
+ readonly actual: string;
605
+ readonly code = "connector-type-mismatch";
606
+ constructor(connector: string, expected: string, actual: string, options?: {
607
+ cause?: unknown;
608
+ });
609
+ }
610
+ declare class FunnelAuthFailedError extends FunnelError {
611
+ readonly connector: string;
612
+ readonly detail: string;
613
+ readonly code = "auth-failed";
614
+ constructor(connector: string, detail: string, options?: {
615
+ cause?: unknown;
616
+ });
617
+ }
618
+ declare class FunnelGatewayBindError extends FunnelError {
619
+ readonly host: string;
620
+ readonly port: number;
621
+ readonly detail: string;
622
+ readonly code = "gateway-bind";
623
+ constructor(host: string, port: number, detail: string, options?: {
624
+ cause?: unknown;
625
+ });
626
+ }
627
+ declare class FunnelTokenCollisionError extends FunnelError {
628
+ readonly connector: string;
629
+ readonly code = "token-collision";
630
+ constructor(connector: string, options?: {
631
+ cause?: unknown;
632
+ });
633
+ }
634
+ //#endregion
522
635
  //#region lib/gateway/service-routes.d.ts
523
636
  type Deps = {
524
637
  diagnostics: FunnelDiagnostics;
@@ -1433,6 +1546,7 @@ declare const routes: _$hono_hono_base0.HonoBase<Env, {
1433
1546
  input: {
1434
1547
  query: {
1435
1548
  channel?: string | undefined;
1549
+ connector?: string | undefined;
1436
1550
  limit?: string | undefined;
1437
1551
  };
1438
1552
  };
@@ -1447,6 +1561,7 @@ declare const routes: _$hono_hono_base0.HonoBase<Env, {
1447
1561
  input: {
1448
1562
  query: {
1449
1563
  channel?: string | undefined;
1564
+ connector?: string | undefined;
1450
1565
  limit?: string | undefined;
1451
1566
  };
1452
1567
  };
@@ -1461,6 +1576,7 @@ declare const routes: _$hono_hono_base0.HonoBase<Env, {
1461
1576
  input: {
1462
1577
  query: {
1463
1578
  channel?: string | undefined;
1579
+ connector?: string | undefined;
1464
1580
  limit?: string | undefined;
1465
1581
  };
1466
1582
  };
@@ -1483,6 +1599,50 @@ declare const routes: _$hono_hono_base0.HonoBase<Env, {
1483
1599
  status: _$hono_utils_http_status0.ContentfulStatusCode;
1484
1600
  };
1485
1601
  };
1602
+ } & {
1603
+ "/debug/raw": {
1604
+ $get: {
1605
+ input: {
1606
+ query: {
1607
+ channel?: string | undefined;
1608
+ connector?: string | undefined;
1609
+ limit?: string | undefined;
1610
+ };
1611
+ };
1612
+ output: string;
1613
+ outputFormat: "text";
1614
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
1615
+ };
1616
+ };
1617
+ } & {
1618
+ "/debug/connection": {
1619
+ $get: {
1620
+ input: {
1621
+ query: {
1622
+ channel?: string | undefined;
1623
+ connector?: string | undefined;
1624
+ limit?: string | undefined;
1625
+ };
1626
+ };
1627
+ output: string;
1628
+ outputFormat: "text";
1629
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
1630
+ };
1631
+ };
1632
+ } & {
1633
+ "/debug/logs": {
1634
+ $get: {
1635
+ input: {
1636
+ query: {
1637
+ grep?: string | undefined;
1638
+ limit?: string | undefined;
1639
+ };
1640
+ };
1641
+ output: string;
1642
+ outputFormat: "text";
1643
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
1644
+ };
1645
+ };
1486
1646
  } & {
1487
1647
  "/docs": {
1488
1648
  $get: {
@@ -1555,4 +1715,4 @@ declare const routes: _$hono_hono_base0.HonoBase<Env, {
1555
1715
  }, "/", "/update">;
1556
1716
  type CliApp = typeof routes;
1557
1717
  //#endregion
1558
- export { AddConnectorInput, AliveStub, AttachOptions, BaseConnectorConfig, BroadcastEvent, BroadcastSubscriber, CONNECTOR_CONNECTION_STATUSES, CallInput, ChannelConfig, ChannelConnectorView, ChannelDeliveryMode, ChannelDiagnosis, ChannelWsUrlInput, type CliApp, ConnectorAdapterDeps, ConnectorBuildContext, ConnectorConnectionEvent, ConnectorConnectionQuery, ConnectorConnectionRecord, ConnectorConnectionStatus, ConnectorDescriptor, ConnectorDiagnosticLog, ConnectorDiagnosticSqlReader, ConnectorListenerDeps, ConnectorOperation, ConnectorOperationContext, ConnectorProcessedEvent, ConnectorProcessedQuery, ConnectorProcessedRecord, ConnectorQuery, ConnectorRawEvent, ConnectorRawQuery, ConnectorRawRecord, ConnectorUpdateContext, DEFAULT_GATEWAY_PORT, DEFAULT_GATEWAY_TOKEN_PATH, DetachOptions, DiagnoseAllReport, DiagnosisStatus, DiagnosticConnectionError, DiagnosticEvent, DiagnosticsChannelSource, DiagnosticsGatewayProbe, DiagnosticsPublisher, DiagnosticsTokenReader, DocsTopicListing, DoctorFixMode, DoctorReport, Env, FUNNEL_DIR, FileStat, Funnel, FunnelBroadcaster, FunnelChannelPublisher, FunnelChannels, FunnelClock, FunnelConnectorAdapter, FunnelConnectorListener, FunnelConnectorRegistry, FunnelDiagnostics, FunnelDocs, FunnelDoctor, FunnelEvent, FunnelEventLog, FunnelEventRecord, FunnelFileSystem, FunnelGateway, FunnelGatewayServer, FunnelGatewayToken, FunnelHttpClient, FunnelIdGenerator, FunnelListenerSupervisor, FunnelListenersClient, FunnelLogger, FunnelProcessRunner, FunnelRecovery, FunnelSettingsReader, FunnelSettingsStore, type GatewayApp, type GatewayEmitInput, GatewayEventStore, type GatewayRouteDeps, type Env$1 as GatewayServerEnv, GatewayServerOptions, 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, Settings, SqliteConnectorDiagnosticLog, SqliteFunnelEventLog, StartTimeStub, StoredConnectionEvent, StoredProcessedEvent, StoredRawEvent, baseConnectorConfigSchema, buildServiceRoutes, channelConfigSchema, channelDeliveryModeSchema, channelWsProtocols, channelWsUrl, routes as cliRoutes, connectorConnectionEventSchema, connectorProcessedEventSchema, connectorRawEventSchema, createSettings, factory, funnelEventSchema, gatewayLoopbackUrl, previewOf, profileConfigSchema, publishRequestSchema, publishResponseSchema, queryRows, queryToCliArgs, resolveFunnelDir, resolveFunnelPort, settingsSchema, toDiagnosticConnectionError, toDiagnosticEvent, toRequest };
1718
+ export { AddConnectorInput, AliveStub, AttachOptions, BaseConnectorConfig, BroadcastEvent, BroadcastSubscriber, CONNECTOR_CONNECTION_STATUSES, CallInput, ChannelConfig, ChannelConnectorView, ChannelDeliveryMode, ChannelDiagnosis, ChannelWsUrlInput, type CliApp, ConnectorAdapterDeps, ConnectorBuildContext, ConnectorConnectionEvent, ConnectorConnectionQuery, ConnectorConnectionRecord, ConnectorConnectionStatus, ConnectorDescriptor, ConnectorDiagnosticLog, ConnectorDiagnosticSqlReader, ConnectorListenerDeps, ConnectorOperation, ConnectorOperationContext, ConnectorProcessedEvent, ConnectorProcessedQuery, ConnectorProcessedRecord, ConnectorQuery, ConnectorRawEvent, ConnectorRawQuery, ConnectorRawRecord, ConnectorUpdateContext, 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, FunnelAuthFailedError, FunnelBroadcaster, FunnelChannelAlreadyExistsError, FunnelChannelNotFoundError, FunnelChannelPublisher, FunnelChannels, FunnelClock, FunnelConnectorAdapter, FunnelConnectorListener, FunnelConnectorNotFoundError, FunnelConnectorRegistry, FunnelConnectorTypeMismatchError, FunnelDiagnostics, FunnelDocs, FunnelDoctor, FunnelError, FunnelEvent, FunnelEventLog, FunnelEventRecord, FunnelFileSystem, FunnelGateway, FunnelGatewayBindError, FunnelGatewayServer, FunnelGatewayToken, FunnelHttpClient, FunnelIdGenerator, FunnelListenerRegistry, FunnelListenersClient, FunnelLogger, FunnelProcessRunner, FunnelRecovery, FunnelSettingsReader, FunnelSettingsStore, FunnelSlackEventProcessor, FunnelTokenCollisionError, FunnelTokenPrompter, type GatewayApp, type GatewayEmitInput, GatewayEventStore, type GatewayRouteDeps, type Env$1 as GatewayServerEnv, GatewayServerOptions, GhConnectorConfig, HttpRequest, HttpResponse, JsonValue, ListListenersResult, ListenerEntry, ListenerOpResult, LogEntry, MemoryConnectorDiagnosticLog, MemoryFunnelClock, MemoryFunnelEventLog, MemoryFunnelFileSystem, MemoryFunnelHttpClient, MemoryFunnelIdGenerator, MemoryFunnelLogger, MemoryFunnelProcessRunner, MemoryFunnelTokenPrompter, MemoryHttpHandler, MemoryHttpResponse, MemoryProcessCall, MemoryProcessHandler, MemoryProcessResponse, MemoryProcessSyncHandler, MockFunnelSettingsReader, NodeFunnelClock, NodeFunnelFileSystem, NodeFunnelHttpClient, NodeFunnelIdGenerator, NodeFunnelLogger, NodeFunnelProcessRunner, NodeFunnelTokenPrompter, 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, Settings, SlackConnectorConfig, SlackEvent, SlackMessageEvent, SlackProcessed, SlackProcessedEmit, SlackProcessedSkip, SlackRawEvent, SlackReactionEvent, SlackSkipReason, SqliteConnectorDiagnosticLog, SqliteFunnelEventLog, StartTimeStub, StoredConnectionEvent, StoredProcessedEvent, StoredRawEvent, baseConnectorConfigSchema, buildServiceRoutes, channelConfigSchema, channelDeliveryModeSchema, channelWsProtocols, channelWsUrl, routes as cliRoutes, 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 };