@interactive-inc/claude-funnel 0.36.0 → 0.37.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/index.d.ts CHANGED
@@ -9,6 +9,7 @@ import * as _$hono_factory0 from "hono/factory";
9
9
  import { Hono } from "hono";
10
10
  import { Server, ServerWebSocket } from "bun";
11
11
  import * as _$hono_utils_http_status0 from "hono/utils/http-status";
12
+ import * as _$hono_utils_types0 from "hono/utils/types";
12
13
  import * as _$hono_hono_base0 from "hono/hono-base";
13
14
 
14
15
  //#region lib/connectors/connector-config-schema.d.ts
@@ -1324,6 +1325,34 @@ declare class FunnelListenersClient {
1324
1325
  private call;
1325
1326
  }
1326
1327
  //#endregion
1328
+ //#region lib/gateway/funnel-debug.d.ts
1329
+ type FunnelDebugReport = {
1330
+ gateway: {
1331
+ running: boolean;
1332
+ pid: number | null;
1333
+ port: number | null;
1334
+ uptimeMs: number | null;
1335
+ };
1336
+ channels: Array<{
1337
+ name: string;
1338
+ connectors: string[];
1339
+ listener: {
1340
+ alive: boolean;
1341
+ events: number;
1342
+ errors: number;
1343
+ lastEventAt: string | null;
1344
+ } | null;
1345
+ claudeConnected: boolean;
1346
+ claudeClientCount: number;
1347
+ }>;
1348
+ recentEvents: Array<{
1349
+ ts: number;
1350
+ outcome: string;
1351
+ payload: string | null;
1352
+ preview: string | null;
1353
+ }> | null;
1354
+ };
1355
+ //#endregion
1327
1356
  //#region lib/funnel.d.ts
1328
1357
  type Props$8 = {
1329
1358
  /** Settings persistence (channels with nested connectors / profiles). Defaults to a FunnelSettingsStore rooted at `dir`. */store?: FunnelSettingsReader; /** Filesystem boundary. Replace with MemoryFunnelFileSystem to sandbox all disk I/O. */
@@ -1466,6 +1495,7 @@ declare class Funnel {
1466
1495
  */
1467
1496
  extraRoutes?: Hono<Env$1>;
1468
1497
  }): FunnelGatewayServer;
1498
+ debug(channelName?: string): Promise<FunnelDebugReport>;
1469
1499
  }
1470
1500
  //#endregion
1471
1501
  //#region lib/engine/mcp/channel-server.d.ts
@@ -1931,7 +1961,7 @@ declare class ConnectorDiagnosticSqlReader {
1931
1961
  * than throwing) for a non-SELECT statement or a SQL error, so the caller
1932
1962
  * can surface the message without a stack trace.
1933
1963
  */
1934
- query(sql: string): Row[] | Error;
1964
+ query(sql: string, params?: (string | number | null)[]): Row[] | Error;
1935
1965
  close(): void;
1936
1966
  }
1937
1967
  //#endregion
@@ -1994,11 +2024,31 @@ declare const createCliApp: (funnel: Funnel) => _$hono_hono_base0.HonoBase<Env,
1994
2024
  "/channels": {
1995
2025
  $get: {
1996
2026
  input: {
1997
- query: Record<string, never>;
2027
+ query: {
2028
+ json?: "" | "true" | "false" | undefined;
2029
+ };
1998
2030
  };
1999
2031
  output: string;
2000
2032
  outputFormat: "text";
2001
2033
  status: _$hono_utils_http_status0.ContentfulStatusCode;
2034
+ } | {
2035
+ input: {
2036
+ query: {
2037
+ json?: "" | "true" | "false" | undefined;
2038
+ };
2039
+ };
2040
+ output: {
2041
+ id: string;
2042
+ name: string;
2043
+ delivery: "fanout" | "exclusive";
2044
+ connectors: {
2045
+ id: string;
2046
+ name: string;
2047
+ type: "discord" | "slack" | "schedule" | "gh";
2048
+ }[];
2049
+ }[];
2050
+ outputFormat: "json";
2051
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
2002
2052
  };
2003
2053
  };
2004
2054
  } & {
@@ -2220,6 +2270,53 @@ declare const createCliApp: (funnel: Funnel) => _$hono_hono_base0.HonoBase<Env,
2220
2270
  status: _$hono_utils_http_status0.ContentfulStatusCode;
2221
2271
  };
2222
2272
  };
2273
+ } & {
2274
+ "/channels/:channel/validate": {
2275
+ $get: {
2276
+ input: {
2277
+ param: {
2278
+ channel: string;
2279
+ };
2280
+ } & {
2281
+ query: {
2282
+ json?: "" | "true" | "false" | undefined;
2283
+ };
2284
+ };
2285
+ output: string;
2286
+ outputFormat: "text";
2287
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
2288
+ } | {
2289
+ input: {
2290
+ param: {
2291
+ channel: string;
2292
+ };
2293
+ } & {
2294
+ query: {
2295
+ json?: "" | "true" | "false" | undefined;
2296
+ };
2297
+ };
2298
+ output: {
2299
+ channel: string;
2300
+ valid: boolean;
2301
+ issues: {
2302
+ connector: string;
2303
+ field: string;
2304
+ message: string;
2305
+ }[];
2306
+ };
2307
+ outputFormat: "json";
2308
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
2309
+ };
2310
+ };
2311
+ } & {
2312
+ "/channels/validate": {
2313
+ $get: {
2314
+ input: {};
2315
+ output: string;
2316
+ outputFormat: "text";
2317
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
2318
+ };
2319
+ };
2223
2320
  } & {
2224
2321
  "/channels/:channel": {
2225
2322
  $get: {
@@ -3037,42 +3134,30 @@ declare const createCliApp: (funnel: Funnel) => _$hono_hono_base0.HonoBase<Env,
3037
3134
  output: string;
3038
3135
  outputFormat: "text";
3039
3136
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3040
- } | {
3041
- input: {};
3042
- output: "funnel gateway: running (pid null) — health check failed" | `funnel gateway: running (pid ${number}) \u2014 health check failed`;
3043
- outputFormat: "text";
3044
- status: _$hono_utils_http_status0.ContentfulStatusCode;
3045
- } | {
3046
- input: {};
3047
- output: `funnel gateway: running (pid null)
3048
- port: ${number}
3049
- clients: ${string}` | `funnel gateway: running (pid ${number})
3050
- port: ${number}
3051
- clients: ${string}`;
3052
- outputFormat: "text";
3053
- status: _$hono_utils_http_status0.ContentfulStatusCode;
3054
3137
  };
3055
3138
  };
3056
3139
  } & {
3057
3140
  "/gateway/status": {
3058
3141
  $get: {
3059
- input: {};
3142
+ input: {
3143
+ query: {
3144
+ json?: "" | "true" | "false" | undefined;
3145
+ };
3146
+ };
3060
3147
  output: string;
3061
3148
  outputFormat: "text";
3062
3149
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3063
3150
  } | {
3064
- input: {};
3065
- output: "funnel gateway: running (pid null) — health check failed" | `funnel gateway: running (pid ${number}) \u2014 health check failed`;
3066
- outputFormat: "text";
3067
- status: _$hono_utils_http_status0.ContentfulStatusCode;
3068
- } | {
3069
- input: {};
3070
- output: `funnel gateway: running (pid null)
3071
- port: ${number}
3072
- clients: ${string}` | `funnel gateway: running (pid ${number})
3073
- port: ${number}
3074
- clients: ${string}`;
3075
- outputFormat: "text";
3151
+ input: {
3152
+ query: {
3153
+ json?: "" | "true" | "false" | undefined;
3154
+ };
3155
+ };
3156
+ output: {
3157
+ running: true;
3158
+ port: number;
3159
+ };
3160
+ outputFormat: "json";
3076
3161
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3077
3162
  };
3078
3163
  };
@@ -3173,6 +3258,7 @@ declare const createCliApp: (funnel: Funnel) => _$hono_hono_base0.HonoBase<Env,
3173
3258
  input: {
3174
3259
  query: {
3175
3260
  n?: string | undefined;
3261
+ format?: "json" | "plain" | undefined;
3176
3262
  };
3177
3263
  };
3178
3264
  output: string;
@@ -3182,6 +3268,7 @@ declare const createCliApp: (funnel: Funnel) => _$hono_hono_base0.HonoBase<Env,
3182
3268
  input: {
3183
3269
  query: {
3184
3270
  n?: string | undefined;
3271
+ format?: "json" | "plain" | undefined;
3185
3272
  };
3186
3273
  };
3187
3274
  output: "no logs";
@@ -3195,6 +3282,9 @@ declare const createCliApp: (funnel: Funnel) => _$hono_hono_base0.HonoBase<Env,
3195
3282
  input: {
3196
3283
  query: {
3197
3284
  query?: string | undefined;
3285
+ preset?: string | undefined;
3286
+ channel?: string | undefined;
3287
+ limit?: string | undefined;
3198
3288
  };
3199
3289
  };
3200
3290
  output: string;
@@ -3229,211 +3319,735 @@ ${string}`;
3229
3319
  };
3230
3320
  };
3231
3321
  } & {
3232
- "/schema": {
3322
+ "/debug": {
3233
3323
  $get: {
3234
3324
  input: {
3235
- query: Record<string, never>;
3325
+ query: {
3326
+ channel?: string | undefined;
3327
+ all?: "" | "true" | "false" | undefined;
3328
+ json?: "" | "true" | "false" | undefined;
3329
+ limit?: string | undefined;
3330
+ };
3236
3331
  };
3237
3332
  output: string;
3238
3333
  outputFormat: "text";
3239
3334
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3240
3335
  } | {
3241
3336
  input: {
3242
- query: Record<string, never>;
3337
+ query: {
3338
+ channel?: string | undefined;
3339
+ all?: "" | "true" | "false" | undefined;
3340
+ json?: "" | "true" | "false" | undefined;
3341
+ limit?: string | undefined;
3342
+ };
3243
3343
  };
3244
- output: `${string}
3245
- `;
3246
- outputFormat: "text";
3247
- status: _$hono_utils_http_status0.ContentfulStatusCode;
3248
- };
3249
- };
3250
- } & {
3251
- "/status": {
3252
- $get: {
3253
- input: {
3254
- query: Record<string, never>;
3344
+ output: {
3345
+ error: string;
3346
+ nextAction: string;
3255
3347
  };
3256
- output: string;
3257
- outputFormat: "text";
3348
+ outputFormat: "json";
3258
3349
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3259
- };
3260
- };
3261
- } & {
3262
- "/update": {
3263
- $get: {
3350
+ } | {
3264
3351
  input: {
3265
- query: Record<string, never>;
3352
+ query: {
3353
+ channel?: string | undefined;
3354
+ all?: "" | "true" | "false" | undefined;
3355
+ json?: "" | "true" | "false" | undefined;
3356
+ limit?: string | undefined;
3357
+ };
3358
+ };
3359
+ output: {
3360
+ summary: {
3361
+ total: number;
3362
+ ok: number;
3363
+ warn: number;
3364
+ error: number;
3365
+ criticalChannels: string[];
3366
+ warnChannels: string[];
3367
+ suggestedActions: string[];
3368
+ };
3369
+ channels: {
3370
+ channel: string;
3371
+ gateway: {
3372
+ running: boolean;
3373
+ pid: number | null;
3374
+ port: number | null;
3375
+ uptimeMs: number | null;
3376
+ };
3377
+ listeners: {
3378
+ name: string;
3379
+ type: string;
3380
+ alive: boolean;
3381
+ events: number;
3382
+ errors: number;
3383
+ lastEventAt: string | null;
3384
+ }[];
3385
+ claudeClients: number;
3386
+ channelId: string;
3387
+ recentEvents: {
3388
+ seq: number | null;
3389
+ ts: number | null;
3390
+ type: string;
3391
+ outcome: string;
3392
+ payload: string | null;
3393
+ payloadParsed: {
3394
+ [x: string]: _$hono_utils_types0.JSONValue;
3395
+ } | null;
3396
+ preview: string | null;
3397
+ }[];
3398
+ connectionErrors: {
3399
+ ts: number | null;
3400
+ type: string;
3401
+ status: string;
3402
+ detail: string | null;
3403
+ }[];
3404
+ diagnosis: {
3405
+ status: "ok" | "warn" | "error";
3406
+ message: string;
3407
+ nextActions: string[];
3408
+ rootCause: string | null;
3409
+ };
3410
+ }[];
3266
3411
  };
3267
- output: string;
3268
- outputFormat: "text";
3412
+ outputFormat: "json";
3269
3413
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3270
3414
  } | {
3271
3415
  input: {
3272
- query: Record<string, never>;
3416
+ query: {
3417
+ channel?: string | undefined;
3418
+ all?: "" | "true" | "false" | undefined;
3419
+ json?: "" | "true" | "false" | undefined;
3420
+ limit?: string | undefined;
3421
+ };
3273
3422
  };
3274
- output: "updated @interactive-inc/claude-funnel";
3275
- outputFormat: "text";
3423
+ output: {
3424
+ error: string;
3425
+ availableChannels: string[];
3426
+ };
3427
+ outputFormat: "json";
3276
3428
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3277
- };
3278
- };
3279
- }, "/", "/update">;
3280
- /** CLI Hono app wired to a default `new Funnel()`. For embedding with a custom Funnel use `createCliApp`. */
3281
- declare const app: _$hono_hono_base0.HonoBase<Env, {
3282
- "/claude": {
3283
- $get: {
3429
+ } | {
3284
3430
  input: {
3285
3431
  query: {
3286
- [x: string]: string | string[];
3287
- profile?: string | undefined;
3288
3432
  channel?: string | undefined;
3433
+ all?: "" | "true" | "false" | undefined;
3434
+ json?: "" | "true" | "false" | undefined;
3435
+ limit?: string | undefined;
3289
3436
  };
3290
3437
  };
3291
- output: string;
3292
- outputFormat: "text";
3438
+ output: {
3439
+ error: string;
3440
+ channels: string[];
3441
+ hint: string;
3442
+ };
3443
+ outputFormat: "json";
3293
3444
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3294
3445
  } | {
3295
3446
  input: {
3296
3447
  query: {
3297
- [x: string]: string | string[];
3298
- profile?: string | undefined;
3299
3448
  channel?: string | undefined;
3449
+ all?: "" | "true" | "false" | undefined;
3450
+ json?: "" | "true" | "false" | undefined;
3451
+ limit?: string | undefined;
3452
+ };
3453
+ };
3454
+ output: {
3455
+ channel: string;
3456
+ gateway: {
3457
+ running: boolean;
3458
+ pid: number | null;
3459
+ port: number | null;
3460
+ uptimeMs: number | null;
3461
+ };
3462
+ listeners: {
3463
+ name: string;
3464
+ type: string;
3465
+ alive: boolean;
3466
+ events: number;
3467
+ errors: number;
3468
+ lastEventAt: string | null;
3469
+ }[];
3470
+ claudeClients: number;
3471
+ channelId: string;
3472
+ recentEvents: {
3473
+ seq: number | null;
3474
+ ts: number | null;
3475
+ type: string;
3476
+ outcome: string;
3477
+ payload: string | null;
3478
+ payloadParsed: {
3479
+ [x: string]: _$hono_utils_types0.JSONValue;
3480
+ } | null;
3481
+ preview: string | null;
3482
+ }[];
3483
+ connectionErrors: {
3484
+ ts: number | null;
3485
+ type: string;
3486
+ status: string;
3487
+ detail: string | null;
3488
+ }[];
3489
+ diagnosis: {
3490
+ status: "ok" | "warn" | "error";
3491
+ message: string;
3492
+ nextActions: string[];
3493
+ rootCause: string | null;
3300
3494
  };
3301
3495
  };
3302
- output: "funnel claude — launch Claude Code\n\nusage:\n funnel claude launch the first channel from funnel.json, or the default profile\n funnel claude --channel <name> with funnel.json: select that channel; without: raw launch\n funnel claude -p <name> launch a named profile\n funnel claude --profile <name> (long form)\n funnel claude [...] any other argument is forwarded to the claude CLI\n\nresolution order:\n 1. --help print this help\n 2. --profile <name> named profile (ignores funnel.json)\n 3. ./funnel.json in the current directory + --channel selects (or first wins)\n 4. --channel <name> with no funnel.json → raw launch using an existing settings.json channel\n 5. the default profile (first entry in fnl profiles)\n\nfunnel-specific options (everything else passes through to claude verbatim):\n -p, --profile profile name to launch\n --channel channel name (selects from funnel.json, or raw-launches if no funnel.json)\n -h, --help show this help\n\nPositional args, unknown short flags (e.g. -c, -r), and claude's own flags\n(--agent, --resume, --model, --print, --output-format ...) are all forwarded.\nOn launch the FUNNEL_CHANNEL_ID env var is set and MCP connects to the gateway.";
3303
- outputFormat: "text";
3496
+ outputFormat: "json";
3304
3497
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3305
3498
  };
3306
3499
  };
3307
3500
  } & {
3308
- "/channels": {
3501
+ "/debug/events": {
3309
3502
  $get: {
3310
3503
  input: {
3311
- query: Record<string, never>;
3504
+ query: {
3505
+ channel?: string | undefined;
3506
+ limit?: string | undefined;
3507
+ json?: "" | "true" | "false" | undefined;
3508
+ };
3312
3509
  };
3313
3510
  output: string;
3314
3511
  outputFormat: "text";
3315
3512
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3316
- };
3317
- };
3318
- } & {
3319
- "/channels/add": {
3320
- $post: {
3321
- input: {};
3322
- output: string;
3323
- outputFormat: "text";
3324
- status: _$hono_utils_http_status0.ContentfulStatusCode;
3325
- };
3326
- };
3327
- } & {
3328
- "/channels/add/:channel": {
3329
- $post: {
3513
+ } | {
3330
3514
  input: {
3331
- param: {
3332
- channel: string;
3333
- };
3334
- } & {
3335
3515
  query: {
3336
- delivery?: "fanout" | "exclusive" | undefined;
3516
+ channel?: string | undefined;
3517
+ limit?: string | undefined;
3518
+ json?: "" | "true" | "false" | undefined;
3337
3519
  };
3338
3520
  };
3339
- output: string;
3340
- outputFormat: "text";
3521
+ output: {
3522
+ error: string;
3523
+ availableChannels: string[];
3524
+ };
3525
+ outputFormat: "json";
3341
3526
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3342
3527
  } | {
3343
3528
  input: {
3344
- param: {
3345
- channel: string;
3346
- };
3347
- } & {
3348
3529
  query: {
3349
- delivery?: "fanout" | "exclusive" | undefined;
3530
+ channel?: string | undefined;
3531
+ limit?: string | undefined;
3532
+ json?: "" | "true" | "false" | undefined;
3350
3533
  };
3351
3534
  };
3352
- output: `added channel "${string}" (id: ${string})`;
3353
- outputFormat: "text";
3535
+ output: {
3536
+ error: string;
3537
+ channels: string[];
3538
+ };
3539
+ outputFormat: "json";
3354
3540
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3355
- };
3356
- };
3357
- } & {
3358
- "/channels/remove": {
3359
- $post: {
3360
- input: {};
3361
- output: string;
3362
- outputFormat: "text";
3541
+ } | {
3542
+ input: {
3543
+ query: {
3544
+ channel?: string | undefined;
3545
+ limit?: string | undefined;
3546
+ json?: "" | "true" | "false" | undefined;
3547
+ };
3548
+ };
3549
+ output: {
3550
+ seq: number | null;
3551
+ ts: number | null;
3552
+ type: string;
3553
+ outcome: string;
3554
+ payload: string | null;
3555
+ payloadParsed: {
3556
+ [x: string]: _$hono_utils_types0.JSONValue;
3557
+ } | null;
3558
+ preview: string | null;
3559
+ }[];
3560
+ outputFormat: "json";
3363
3561
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3364
3562
  };
3365
3563
  };
3366
3564
  } & {
3367
- "/channels/remove/:channel": {
3368
- $post: {
3565
+ "/debug/dropped": {
3566
+ $get: {
3369
3567
  input: {
3370
- param: {
3371
- channel: string;
3568
+ query: {
3569
+ channel?: string | undefined;
3570
+ limit?: string | undefined;
3571
+ json?: "" | "true" | "false" | undefined;
3372
3572
  };
3373
- } & {
3374
- query: Record<string, never>;
3375
3573
  };
3376
3574
  output: string;
3377
3575
  outputFormat: "text";
3378
3576
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3379
3577
  } | {
3380
3578
  input: {
3381
- param: {
3382
- channel: string;
3579
+ query: {
3580
+ channel?: string | undefined;
3581
+ limit?: string | undefined;
3582
+ json?: "" | "true" | "false" | undefined;
3383
3583
  };
3384
- } & {
3385
- query: Record<string, never>;
3386
3584
  };
3387
- output: `removed channel "${string}"`;
3388
- outputFormat: "text";
3585
+ output: {
3586
+ error: string;
3587
+ availableChannels: string[];
3588
+ };
3589
+ outputFormat: "json";
3389
3590
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3390
- };
3391
- };
3392
- } & {
3393
- "/channels/rename/:channel/:newName": {
3394
- $post: {
3591
+ } | {
3395
3592
  input: {
3396
- param: {
3397
- channel: string;
3398
- newName: string;
3593
+ query: {
3594
+ channel?: string | undefined;
3595
+ limit?: string | undefined;
3596
+ json?: "" | "true" | "false" | undefined;
3399
3597
  };
3400
- } & {
3401
- query: Record<string, never>;
3402
3598
  };
3403
- output: string;
3404
- outputFormat: "text";
3599
+ output: {
3600
+ error: string;
3601
+ channels: string[];
3602
+ };
3603
+ outputFormat: "json";
3405
3604
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3406
3605
  } | {
3407
3606
  input: {
3408
- param: {
3409
- channel: string;
3410
- newName: string;
3411
- };
3412
- } & {
3413
- query: Record<string, never>;
3414
- };
3415
- output: `renamed channel "${string}" to "${string}"`;
3416
- outputFormat: "text";
3607
+ query: {
3608
+ channel?: string | undefined;
3609
+ limit?: string | undefined;
3610
+ json?: "" | "true" | "false" | undefined;
3611
+ };
3612
+ };
3613
+ output: {
3614
+ seq: number | null;
3615
+ ts: number | null;
3616
+ type: string;
3617
+ outcome: string;
3618
+ event_id: string | null;
3619
+ payload: string | null;
3620
+ payloadParsed: {
3621
+ [x: string]: _$hono_utils_types0.JSONValue;
3622
+ } | null;
3623
+ preview: string | null;
3624
+ }[];
3625
+ outputFormat: "json";
3417
3626
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3418
3627
  };
3419
3628
  };
3420
3629
  } & {
3421
- "/channels/:channel/rename/:newName": {
3422
- $post: {
3630
+ "/debug/errors": {
3631
+ $get: {
3423
3632
  input: {
3424
- param: {
3425
- channel: string;
3426
- newName: string;
3633
+ query: {
3634
+ channel?: string | undefined;
3635
+ limit?: string | undefined;
3636
+ json?: "" | "true" | "false" | undefined;
3427
3637
  };
3428
- } & {
3429
- query: Record<string, never>;
3430
3638
  };
3431
3639
  output: string;
3432
3640
  outputFormat: "text";
3433
3641
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3434
3642
  } | {
3435
3643
  input: {
3436
- param: {
3644
+ query: {
3645
+ channel?: string | undefined;
3646
+ limit?: string | undefined;
3647
+ json?: "" | "true" | "false" | undefined;
3648
+ };
3649
+ };
3650
+ output: {
3651
+ error: string;
3652
+ availableChannels: string[];
3653
+ };
3654
+ outputFormat: "json";
3655
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3656
+ } | {
3657
+ input: {
3658
+ query: {
3659
+ channel?: string | undefined;
3660
+ limit?: string | undefined;
3661
+ json?: "" | "true" | "false" | undefined;
3662
+ };
3663
+ };
3664
+ output: {
3665
+ error: string;
3666
+ channels: string[];
3667
+ };
3668
+ outputFormat: "json";
3669
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3670
+ } | {
3671
+ input: {
3672
+ query: {
3673
+ channel?: string | undefined;
3674
+ limit?: string | undefined;
3675
+ json?: "" | "true" | "false" | undefined;
3676
+ };
3677
+ };
3678
+ output: {
3679
+ seq: number | null;
3680
+ ts: number | null;
3681
+ type: string;
3682
+ status: string;
3683
+ detail: string | null;
3684
+ }[];
3685
+ outputFormat: "json";
3686
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3687
+ };
3688
+ };
3689
+ } & {
3690
+ "/debug/replay": {
3691
+ $get: {
3692
+ input: {
3693
+ query: {
3694
+ channel?: string | undefined;
3695
+ seq?: string | undefined;
3696
+ json?: "" | "true" | "false" | undefined;
3697
+ };
3698
+ };
3699
+ output: string;
3700
+ outputFormat: "text";
3701
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3702
+ } | {
3703
+ input: {
3704
+ query: {
3705
+ channel?: string | undefined;
3706
+ seq?: string | undefined;
3707
+ json?: "" | "true" | "false" | undefined;
3708
+ };
3709
+ };
3710
+ output: `error: ${string}`;
3711
+ outputFormat: "text";
3712
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3713
+ } | {
3714
+ input: {
3715
+ query: {
3716
+ channel?: string | undefined;
3717
+ seq?: string | undefined;
3718
+ json?: "" | "true" | "false" | undefined;
3719
+ };
3720
+ };
3721
+ output: `channel not found: ${string}`;
3722
+ outputFormat: "text";
3723
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3724
+ } | {
3725
+ input: {
3726
+ query: {
3727
+ channel?: string | undefined;
3728
+ seq?: string | undefined;
3729
+ json?: "" | "true" | "false" | undefined;
3730
+ };
3731
+ };
3732
+ output: "no diagnostic store yet (start the gateway first)";
3733
+ outputFormat: "text";
3734
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3735
+ } | {
3736
+ input: {
3737
+ query: {
3738
+ channel?: string | undefined;
3739
+ seq?: string | undefined;
3740
+ json?: "" | "true" | "false" | undefined;
3741
+ };
3742
+ };
3743
+ output: `multiple channels \u2014 specify one with --channel:
3744
+ ${string}`;
3745
+ outputFormat: "text";
3746
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3747
+ } | {
3748
+ input: {
3749
+ query: {
3750
+ channel?: string | undefined;
3751
+ seq?: string | undefined;
3752
+ json?: "" | "true" | "false" | undefined;
3753
+ };
3754
+ };
3755
+ output: "no channels configured";
3756
+ outputFormat: "text";
3757
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3758
+ } | {
3759
+ input: {
3760
+ query: {
3761
+ channel?: string | undefined;
3762
+ seq?: string | undefined;
3763
+ json?: "" | "true" | "false" | undefined;
3764
+ };
3765
+ };
3766
+ output: {
3767
+ error: string;
3768
+ };
3769
+ outputFormat: "json";
3770
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3771
+ } | {
3772
+ input: {
3773
+ query: {
3774
+ channel?: string | undefined;
3775
+ seq?: string | undefined;
3776
+ json?: "" | "true" | "false" | undefined;
3777
+ };
3778
+ };
3779
+ output: "no matching event found";
3780
+ outputFormat: "text";
3781
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3782
+ } | {
3783
+ input: {
3784
+ query: {
3785
+ channel?: string | undefined;
3786
+ seq?: string | undefined;
3787
+ json?: "" | "true" | "false" | undefined;
3788
+ };
3789
+ };
3790
+ output: "event has no payload to replay";
3791
+ outputFormat: "text";
3792
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3793
+ } | {
3794
+ input: {
3795
+ query: {
3796
+ channel?: string | undefined;
3797
+ seq?: string | undefined;
3798
+ json?: "" | "true" | "false" | undefined;
3799
+ };
3800
+ };
3801
+ output: {
3802
+ replayed: true;
3803
+ seq: number | null;
3804
+ offset: number;
3805
+ preview: string | null;
3806
+ };
3807
+ outputFormat: "json";
3808
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3809
+ } | {
3810
+ input: {
3811
+ query: {
3812
+ channel?: string | undefined;
3813
+ seq?: string | undefined;
3814
+ json?: "" | "true" | "false" | undefined;
3815
+ };
3816
+ };
3817
+ output: `replayed seq=${number} \u2192 offset=${number}${string}` | `replayed seq=? \u2192 offset=${number}${string}`;
3818
+ outputFormat: "text";
3819
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3820
+ };
3821
+ };
3822
+ } & {
3823
+ "/schema": {
3824
+ $get: {
3825
+ input: {
3826
+ query: Record<string, never>;
3827
+ };
3828
+ output: string;
3829
+ outputFormat: "text";
3830
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3831
+ } | {
3832
+ input: {
3833
+ query: Record<string, never>;
3834
+ };
3835
+ output: `${string}
3836
+ `;
3837
+ outputFormat: "text";
3838
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3839
+ };
3840
+ };
3841
+ } & {
3842
+ "/status": {
3843
+ $get: {
3844
+ input: {
3845
+ query: {
3846
+ watch?: "" | "true" | "false" | undefined;
3847
+ interval?: string | undefined;
3848
+ };
3849
+ };
3850
+ output: string;
3851
+ outputFormat: "text";
3852
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3853
+ };
3854
+ };
3855
+ } & {
3856
+ "/update": {
3857
+ $get: {
3858
+ input: {
3859
+ query: Record<string, never>;
3860
+ };
3861
+ output: string;
3862
+ outputFormat: "text";
3863
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3864
+ } | {
3865
+ input: {
3866
+ query: Record<string, never>;
3867
+ };
3868
+ output: "updated @interactive-inc/claude-funnel";
3869
+ outputFormat: "text";
3870
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3871
+ };
3872
+ };
3873
+ }, "/", "/update">;
3874
+ /** CLI Hono app wired to a default `new Funnel()`. For embedding with a custom Funnel use `createCliApp`. */
3875
+ declare const app: _$hono_hono_base0.HonoBase<Env, {
3876
+ "/claude": {
3877
+ $get: {
3878
+ input: {
3879
+ query: {
3880
+ [x: string]: string | string[];
3881
+ profile?: string | undefined;
3882
+ channel?: string | undefined;
3883
+ };
3884
+ };
3885
+ output: string;
3886
+ outputFormat: "text";
3887
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3888
+ } | {
3889
+ input: {
3890
+ query: {
3891
+ [x: string]: string | string[];
3892
+ profile?: string | undefined;
3893
+ channel?: string | undefined;
3894
+ };
3895
+ };
3896
+ output: "funnel claude — launch Claude Code\n\nusage:\n funnel claude launch the first channel from funnel.json, or the default profile\n funnel claude --channel <name> with funnel.json: select that channel; without: raw launch\n funnel claude -p <name> launch a named profile\n funnel claude --profile <name> (long form)\n funnel claude [...] any other argument is forwarded to the claude CLI\n\nresolution order:\n 1. --help print this help\n 2. --profile <name> named profile (ignores funnel.json)\n 3. ./funnel.json in the current directory + --channel selects (or first wins)\n 4. --channel <name> with no funnel.json → raw launch using an existing settings.json channel\n 5. the default profile (first entry in fnl profiles)\n\nfunnel-specific options (everything else passes through to claude verbatim):\n -p, --profile profile name to launch\n --channel channel name (selects from funnel.json, or raw-launches if no funnel.json)\n -h, --help show this help\n\nPositional args, unknown short flags (e.g. -c, -r), and claude's own flags\n(--agent, --resume, --model, --print, --output-format ...) are all forwarded.\nOn launch the FUNNEL_CHANNEL_ID env var is set and MCP connects to the gateway.";
3897
+ outputFormat: "text";
3898
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3899
+ };
3900
+ };
3901
+ } & {
3902
+ "/channels": {
3903
+ $get: {
3904
+ input: {
3905
+ query: {
3906
+ json?: "" | "true" | "false" | undefined;
3907
+ };
3908
+ };
3909
+ output: string;
3910
+ outputFormat: "text";
3911
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3912
+ } | {
3913
+ input: {
3914
+ query: {
3915
+ json?: "" | "true" | "false" | undefined;
3916
+ };
3917
+ };
3918
+ output: {
3919
+ id: string;
3920
+ name: string;
3921
+ delivery: "fanout" | "exclusive";
3922
+ connectors: {
3923
+ id: string;
3924
+ name: string;
3925
+ type: "discord" | "slack" | "schedule" | "gh";
3926
+ }[];
3927
+ }[];
3928
+ outputFormat: "json";
3929
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3930
+ };
3931
+ };
3932
+ } & {
3933
+ "/channels/add": {
3934
+ $post: {
3935
+ input: {};
3936
+ output: string;
3937
+ outputFormat: "text";
3938
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3939
+ };
3940
+ };
3941
+ } & {
3942
+ "/channels/add/:channel": {
3943
+ $post: {
3944
+ input: {
3945
+ param: {
3946
+ channel: string;
3947
+ };
3948
+ } & {
3949
+ query: {
3950
+ delivery?: "fanout" | "exclusive" | undefined;
3951
+ };
3952
+ };
3953
+ output: string;
3954
+ outputFormat: "text";
3955
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3956
+ } | {
3957
+ input: {
3958
+ param: {
3959
+ channel: string;
3960
+ };
3961
+ } & {
3962
+ query: {
3963
+ delivery?: "fanout" | "exclusive" | undefined;
3964
+ };
3965
+ };
3966
+ output: `added channel "${string}" (id: ${string})`;
3967
+ outputFormat: "text";
3968
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3969
+ };
3970
+ };
3971
+ } & {
3972
+ "/channels/remove": {
3973
+ $post: {
3974
+ input: {};
3975
+ output: string;
3976
+ outputFormat: "text";
3977
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3978
+ };
3979
+ };
3980
+ } & {
3981
+ "/channels/remove/:channel": {
3982
+ $post: {
3983
+ input: {
3984
+ param: {
3985
+ channel: string;
3986
+ };
3987
+ } & {
3988
+ query: Record<string, never>;
3989
+ };
3990
+ output: string;
3991
+ outputFormat: "text";
3992
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
3993
+ } | {
3994
+ input: {
3995
+ param: {
3996
+ channel: string;
3997
+ };
3998
+ } & {
3999
+ query: Record<string, never>;
4000
+ };
4001
+ output: `removed channel "${string}"`;
4002
+ outputFormat: "text";
4003
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
4004
+ };
4005
+ };
4006
+ } & {
4007
+ "/channels/rename/:channel/:newName": {
4008
+ $post: {
4009
+ input: {
4010
+ param: {
4011
+ channel: string;
4012
+ newName: string;
4013
+ };
4014
+ } & {
4015
+ query: Record<string, never>;
4016
+ };
4017
+ output: string;
4018
+ outputFormat: "text";
4019
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
4020
+ } | {
4021
+ input: {
4022
+ param: {
4023
+ channel: string;
4024
+ newName: string;
4025
+ };
4026
+ } & {
4027
+ query: Record<string, never>;
4028
+ };
4029
+ output: `renamed channel "${string}" to "${string}"`;
4030
+ outputFormat: "text";
4031
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
4032
+ };
4033
+ };
4034
+ } & {
4035
+ "/channels/:channel/rename/:newName": {
4036
+ $post: {
4037
+ input: {
4038
+ param: {
4039
+ channel: string;
4040
+ newName: string;
4041
+ };
4042
+ } & {
4043
+ query: Record<string, never>;
4044
+ };
4045
+ output: string;
4046
+ outputFormat: "text";
4047
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
4048
+ } | {
4049
+ input: {
4050
+ param: {
3437
4051
  channel: string;
3438
4052
  newName: string;
3439
4053
  };
@@ -3524,12 +4138,59 @@ declare const app: _$hono_hono_base0.HonoBase<Env, {
3524
4138
  };
3525
4139
  } & {
3526
4140
  query: {
3527
- [x: string]: string | string[];
3528
- content: string | string[];
3529
- connector?: string | undefined;
4141
+ [x: string]: string | string[];
4142
+ content: string | string[];
4143
+ connector?: string | undefined;
4144
+ };
4145
+ };
4146
+ output: `published (offset=${number})`;
4147
+ outputFormat: "text";
4148
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
4149
+ };
4150
+ };
4151
+ } & {
4152
+ "/channels/:channel/validate": {
4153
+ $get: {
4154
+ input: {
4155
+ param: {
4156
+ channel: string;
4157
+ };
4158
+ } & {
4159
+ query: {
4160
+ json?: "" | "true" | "false" | undefined;
4161
+ };
4162
+ };
4163
+ output: string;
4164
+ outputFormat: "text";
4165
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
4166
+ } | {
4167
+ input: {
4168
+ param: {
4169
+ channel: string;
4170
+ };
4171
+ } & {
4172
+ query: {
4173
+ json?: "" | "true" | "false" | undefined;
3530
4174
  };
3531
4175
  };
3532
- output: `published (offset=${number})`;
4176
+ output: {
4177
+ channel: string;
4178
+ valid: boolean;
4179
+ issues: {
4180
+ connector: string;
4181
+ field: string;
4182
+ message: string;
4183
+ }[];
4184
+ };
4185
+ outputFormat: "json";
4186
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
4187
+ };
4188
+ };
4189
+ } & {
4190
+ "/channels/validate": {
4191
+ $get: {
4192
+ input: {};
4193
+ output: string;
3533
4194
  outputFormat: "text";
3534
4195
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3535
4196
  };
@@ -4259,13 +4920,260 @@ declare const app: _$hono_hono_base0.HonoBase<Env, {
4259
4920
  };
4260
4921
  };
4261
4922
  } & {
4262
- "/profiles/:profile/as-default": {
4263
- $post: {
4923
+ "/profiles/:profile/as-default": {
4924
+ $post: {
4925
+ input: {
4926
+ param: {
4927
+ profile: string;
4928
+ };
4929
+ } & {
4930
+ query: Record<string, never>;
4931
+ };
4932
+ output: string;
4933
+ outputFormat: "text";
4934
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
4935
+ } | {
4936
+ input: {
4937
+ param: {
4938
+ profile: string;
4939
+ };
4940
+ } & {
4941
+ query: Record<string, never>;
4942
+ };
4943
+ output: `profile "${string}" is now the default`;
4944
+ outputFormat: "text";
4945
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
4946
+ };
4947
+ };
4948
+ } & {
4949
+ "/profiles/:profile/run": {
4950
+ $get: {
4951
+ input: {
4952
+ param: {
4953
+ profile: string;
4954
+ };
4955
+ } & {
4956
+ query: {
4957
+ [x: string]: string | string[];
4958
+ };
4959
+ };
4960
+ output: string;
4961
+ outputFormat: "text";
4962
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
4963
+ } | {
4964
+ input: {
4965
+ param: {
4966
+ profile: string;
4967
+ };
4968
+ } & {
4969
+ query: {
4970
+ [x: string]: string | string[];
4971
+ };
4972
+ };
4973
+ output: Promise<never>;
4974
+ outputFormat: "json";
4975
+ status: _$hono_utils_http_status0.StatusCode;
4976
+ };
4977
+ };
4978
+ } & {
4979
+ "/profiles/:profile": {
4980
+ $get: {
4981
+ input: {
4982
+ param: {
4983
+ profile: string;
4984
+ };
4985
+ } & {
4986
+ query: {
4987
+ [x: string]: string | string[];
4988
+ };
4989
+ };
4990
+ output: string;
4991
+ outputFormat: "text";
4992
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
4993
+ } | {
4994
+ input: {
4995
+ param: {
4996
+ profile: string;
4997
+ };
4998
+ } & {
4999
+ query: {
5000
+ [x: string]: string | string[];
5001
+ };
5002
+ };
5003
+ output: Promise<never>;
5004
+ outputFormat: "json";
5005
+ status: _$hono_utils_http_status0.StatusCode;
5006
+ };
5007
+ };
5008
+ } & {
5009
+ "/gateway": {
5010
+ $get: {
5011
+ input: {};
5012
+ output: string;
5013
+ outputFormat: "text";
5014
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5015
+ };
5016
+ };
5017
+ } & {
5018
+ "/gateway/status": {
5019
+ $get: {
5020
+ input: {
5021
+ query: {
5022
+ json?: "" | "true" | "false" | undefined;
5023
+ };
5024
+ };
5025
+ output: string;
5026
+ outputFormat: "text";
5027
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5028
+ } | {
5029
+ input: {
5030
+ query: {
5031
+ json?: "" | "true" | "false" | undefined;
5032
+ };
5033
+ };
5034
+ output: {
5035
+ running: true;
5036
+ port: number;
5037
+ };
5038
+ outputFormat: "json";
5039
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5040
+ };
5041
+ };
5042
+ } & {
5043
+ "/gateway/start": {
5044
+ $get: {
5045
+ input: {
5046
+ query: {
5047
+ "no-caffeine"?: string | undefined;
5048
+ };
5049
+ };
5050
+ output: string;
5051
+ outputFormat: "text";
5052
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5053
+ } | {
5054
+ input: {
5055
+ query: {
5056
+ "no-caffeine"?: string | undefined;
5057
+ };
5058
+ };
5059
+ output: "funnel gateway: already running (pid null)" | `funnel gateway: already running (pid ${number})`;
5060
+ outputFormat: "text";
5061
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5062
+ } | {
5063
+ input: {
5064
+ query: {
5065
+ "no-caffeine"?: string | undefined;
5066
+ };
5067
+ };
5068
+ output: "funnel gateway: started";
5069
+ outputFormat: "text";
5070
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5071
+ };
5072
+ };
5073
+ } & {
5074
+ "/gateway/stop": {
5075
+ $get: {
5076
+ input: {
5077
+ query: Record<string, never>;
5078
+ };
5079
+ output: string;
5080
+ outputFormat: "text";
5081
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5082
+ } | {
5083
+ input: {
5084
+ query: Record<string, never>;
5085
+ };
5086
+ output: "funnel gateway: no running process";
5087
+ outputFormat: "text";
5088
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5089
+ } | {
5090
+ input: {
5091
+ query: Record<string, never>;
5092
+ };
5093
+ output: "funnel gateway: stopped";
5094
+ outputFormat: "text";
5095
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5096
+ };
5097
+ };
5098
+ } & {
5099
+ "/gateway/restart": {
5100
+ $get: {
5101
+ input: {
5102
+ query: {
5103
+ "no-caffeine"?: string | undefined;
5104
+ };
5105
+ };
5106
+ output: string;
5107
+ outputFormat: "text";
5108
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5109
+ };
5110
+ };
5111
+ } & {
5112
+ "/gateway/run": {
5113
+ $get: {
5114
+ input: {
5115
+ query: {
5116
+ "no-caffeine"?: string | undefined;
5117
+ };
5118
+ };
5119
+ output: string;
5120
+ outputFormat: "text";
5121
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5122
+ } | {
5123
+ input: {
5124
+ query: {
5125
+ "no-caffeine"?: string | undefined;
5126
+ };
5127
+ };
5128
+ output: Promise<never>;
5129
+ outputFormat: "json";
5130
+ status: _$hono_utils_http_status0.StatusCode;
5131
+ };
5132
+ };
5133
+ } & {
5134
+ "/gateway/logs": {
5135
+ $get: {
5136
+ input: {
5137
+ query: {
5138
+ n?: string | undefined;
5139
+ format?: "json" | "plain" | undefined;
5140
+ };
5141
+ };
5142
+ output: string;
5143
+ outputFormat: "text";
5144
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5145
+ } | {
5146
+ input: {
5147
+ query: {
5148
+ n?: string | undefined;
5149
+ format?: "json" | "plain" | undefined;
5150
+ };
5151
+ };
5152
+ output: "no logs";
5153
+ outputFormat: "text";
5154
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5155
+ };
5156
+ };
5157
+ } & {
5158
+ "/gateway/sql": {
5159
+ $get: {
5160
+ input: {
5161
+ query: {
5162
+ query?: string | undefined;
5163
+ preset?: string | undefined;
5164
+ channel?: string | undefined;
5165
+ limit?: string | undefined;
5166
+ };
5167
+ };
5168
+ output: string;
5169
+ outputFormat: "text";
5170
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5171
+ };
5172
+ };
5173
+ } & {
5174
+ "/gateway/listeners": {
5175
+ $get: {
4264
5176
  input: {
4265
- param: {
4266
- profile: string;
4267
- };
4268
- } & {
4269
5177
  query: Record<string, never>;
4270
5178
  };
4271
5179
  output: string;
@@ -4273,27 +5181,30 @@ declare const app: _$hono_hono_base0.HonoBase<Env, {
4273
5181
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4274
5182
  } | {
4275
5183
  input: {
4276
- param: {
4277
- profile: string;
4278
- };
4279
- } & {
4280
5184
  query: Record<string, never>;
4281
5185
  };
4282
- output: `profile "${string}" is now the default`;
5186
+ output: "funnel gateway: no running listeners";
5187
+ outputFormat: "text";
5188
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5189
+ } | {
5190
+ input: {
5191
+ query: Record<string, never>;
5192
+ };
5193
+ output: `funnel gateway: running listeners
5194
+ ${string}`;
4283
5195
  outputFormat: "text";
4284
5196
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4285
5197
  };
4286
5198
  };
4287
5199
  } & {
4288
- "/profiles/:profile/run": {
5200
+ "/debug": {
4289
5201
  $get: {
4290
5202
  input: {
4291
- param: {
4292
- profile: string;
4293
- };
4294
- } & {
4295
5203
  query: {
4296
- [x: string]: string | string[];
5204
+ channel?: string | undefined;
5205
+ all?: "" | "true" | "false" | undefined;
5206
+ json?: "" | "true" | "false" | undefined;
5207
+ limit?: string | undefined;
4297
5208
  };
4298
5209
  };
4299
5210
  output: string;
@@ -4301,101 +5212,241 @@ declare const app: _$hono_hono_base0.HonoBase<Env, {
4301
5212
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4302
5213
  } | {
4303
5214
  input: {
4304
- param: {
4305
- profile: string;
4306
- };
4307
- } & {
4308
5215
  query: {
4309
- [x: string]: string | string[];
5216
+ channel?: string | undefined;
5217
+ all?: "" | "true" | "false" | undefined;
5218
+ json?: "" | "true" | "false" | undefined;
5219
+ limit?: string | undefined;
4310
5220
  };
4311
5221
  };
4312
- output: Promise<never>;
5222
+ output: {
5223
+ error: string;
5224
+ nextAction: string;
5225
+ };
4313
5226
  outputFormat: "json";
4314
- status: _$hono_utils_http_status0.StatusCode;
4315
- };
4316
- };
4317
- } & {
4318
- "/profiles/:profile": {
4319
- $get: {
5227
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5228
+ } | {
4320
5229
  input: {
4321
- param: {
4322
- profile: string;
4323
- };
4324
- } & {
4325
5230
  query: {
4326
- [x: string]: string | string[];
4327
- };
5231
+ channel?: string | undefined;
5232
+ all?: "" | "true" | "false" | undefined;
5233
+ json?: "" | "true" | "false" | undefined;
5234
+ limit?: string | undefined;
5235
+ };
5236
+ };
5237
+ output: {
5238
+ summary: {
5239
+ total: number;
5240
+ ok: number;
5241
+ warn: number;
5242
+ error: number;
5243
+ criticalChannels: string[];
5244
+ warnChannels: string[];
5245
+ suggestedActions: string[];
5246
+ };
5247
+ channels: {
5248
+ channel: string;
5249
+ gateway: {
5250
+ running: boolean;
5251
+ pid: number | null;
5252
+ port: number | null;
5253
+ uptimeMs: number | null;
5254
+ };
5255
+ listeners: {
5256
+ name: string;
5257
+ type: string;
5258
+ alive: boolean;
5259
+ events: number;
5260
+ errors: number;
5261
+ lastEventAt: string | null;
5262
+ }[];
5263
+ claudeClients: number;
5264
+ channelId: string;
5265
+ recentEvents: {
5266
+ seq: number | null;
5267
+ ts: number | null;
5268
+ type: string;
5269
+ outcome: string;
5270
+ payload: string | null;
5271
+ payloadParsed: {
5272
+ [x: string]: _$hono_utils_types0.JSONValue;
5273
+ } | null;
5274
+ preview: string | null;
5275
+ }[];
5276
+ connectionErrors: {
5277
+ ts: number | null;
5278
+ type: string;
5279
+ status: string;
5280
+ detail: string | null;
5281
+ }[];
5282
+ diagnosis: {
5283
+ status: "ok" | "warn" | "error";
5284
+ message: string;
5285
+ nextActions: string[];
5286
+ rootCause: string | null;
5287
+ };
5288
+ }[];
4328
5289
  };
4329
- output: string;
4330
- outputFormat: "text";
5290
+ outputFormat: "json";
4331
5291
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4332
5292
  } | {
4333
5293
  input: {
4334
- param: {
4335
- profile: string;
4336
- };
4337
- } & {
4338
5294
  query: {
4339
- [x: string]: string | string[];
5295
+ channel?: string | undefined;
5296
+ all?: "" | "true" | "false" | undefined;
5297
+ json?: "" | "true" | "false" | undefined;
5298
+ limit?: string | undefined;
4340
5299
  };
4341
5300
  };
4342
- output: Promise<never>;
5301
+ output: {
5302
+ error: string;
5303
+ availableChannels: string[];
5304
+ };
4343
5305
  outputFormat: "json";
4344
- status: _$hono_utils_http_status0.StatusCode;
4345
- };
4346
- };
4347
- } & {
4348
- "/gateway": {
4349
- $get: {
4350
- input: {};
4351
- output: string;
4352
- outputFormat: "text";
4353
5306
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4354
5307
  } | {
4355
- input: {};
4356
- output: "funnel gateway: running (pid null) — health check failed" | `funnel gateway: running (pid ${number}) \u2014 health check failed`;
4357
- outputFormat: "text";
5308
+ input: {
5309
+ query: {
5310
+ channel?: string | undefined;
5311
+ all?: "" | "true" | "false" | undefined;
5312
+ json?: "" | "true" | "false" | undefined;
5313
+ limit?: string | undefined;
5314
+ };
5315
+ };
5316
+ output: {
5317
+ error: string;
5318
+ channels: string[];
5319
+ hint: string;
5320
+ };
5321
+ outputFormat: "json";
4358
5322
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4359
5323
  } | {
4360
- input: {};
4361
- output: `funnel gateway: running (pid null)
4362
- port: ${number}
4363
- clients: ${string}` | `funnel gateway: running (pid ${number})
4364
- port: ${number}
4365
- clients: ${string}`;
4366
- outputFormat: "text";
5324
+ input: {
5325
+ query: {
5326
+ channel?: string | undefined;
5327
+ all?: "" | "true" | "false" | undefined;
5328
+ json?: "" | "true" | "false" | undefined;
5329
+ limit?: string | undefined;
5330
+ };
5331
+ };
5332
+ output: {
5333
+ channel: string;
5334
+ gateway: {
5335
+ running: boolean;
5336
+ pid: number | null;
5337
+ port: number | null;
5338
+ uptimeMs: number | null;
5339
+ };
5340
+ listeners: {
5341
+ name: string;
5342
+ type: string;
5343
+ alive: boolean;
5344
+ events: number;
5345
+ errors: number;
5346
+ lastEventAt: string | null;
5347
+ }[];
5348
+ claudeClients: number;
5349
+ channelId: string;
5350
+ recentEvents: {
5351
+ seq: number | null;
5352
+ ts: number | null;
5353
+ type: string;
5354
+ outcome: string;
5355
+ payload: string | null;
5356
+ payloadParsed: {
5357
+ [x: string]: _$hono_utils_types0.JSONValue;
5358
+ } | null;
5359
+ preview: string | null;
5360
+ }[];
5361
+ connectionErrors: {
5362
+ ts: number | null;
5363
+ type: string;
5364
+ status: string;
5365
+ detail: string | null;
5366
+ }[];
5367
+ diagnosis: {
5368
+ status: "ok" | "warn" | "error";
5369
+ message: string;
5370
+ nextActions: string[];
5371
+ rootCause: string | null;
5372
+ };
5373
+ };
5374
+ outputFormat: "json";
4367
5375
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4368
5376
  };
4369
5377
  };
4370
5378
  } & {
4371
- "/gateway/status": {
5379
+ "/debug/events": {
4372
5380
  $get: {
4373
- input: {};
5381
+ input: {
5382
+ query: {
5383
+ channel?: string | undefined;
5384
+ limit?: string | undefined;
5385
+ json?: "" | "true" | "false" | undefined;
5386
+ };
5387
+ };
4374
5388
  output: string;
4375
5389
  outputFormat: "text";
4376
5390
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4377
5391
  } | {
4378
- input: {};
4379
- output: "funnel gateway: running (pid null) — health check failed" | `funnel gateway: running (pid ${number}) \u2014 health check failed`;
4380
- outputFormat: "text";
5392
+ input: {
5393
+ query: {
5394
+ channel?: string | undefined;
5395
+ limit?: string | undefined;
5396
+ json?: "" | "true" | "false" | undefined;
5397
+ };
5398
+ };
5399
+ output: {
5400
+ error: string;
5401
+ availableChannels: string[];
5402
+ };
5403
+ outputFormat: "json";
4381
5404
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4382
5405
  } | {
4383
- input: {};
4384
- output: `funnel gateway: running (pid null)
4385
- port: ${number}
4386
- clients: ${string}` | `funnel gateway: running (pid ${number})
4387
- port: ${number}
4388
- clients: ${string}`;
4389
- outputFormat: "text";
5406
+ input: {
5407
+ query: {
5408
+ channel?: string | undefined;
5409
+ limit?: string | undefined;
5410
+ json?: "" | "true" | "false" | undefined;
5411
+ };
5412
+ };
5413
+ output: {
5414
+ error: string;
5415
+ channels: string[];
5416
+ };
5417
+ outputFormat: "json";
5418
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5419
+ } | {
5420
+ input: {
5421
+ query: {
5422
+ channel?: string | undefined;
5423
+ limit?: string | undefined;
5424
+ json?: "" | "true" | "false" | undefined;
5425
+ };
5426
+ };
5427
+ output: {
5428
+ seq: number | null;
5429
+ ts: number | null;
5430
+ type: string;
5431
+ outcome: string;
5432
+ payload: string | null;
5433
+ payloadParsed: {
5434
+ [x: string]: _$hono_utils_types0.JSONValue;
5435
+ } | null;
5436
+ preview: string | null;
5437
+ }[];
5438
+ outputFormat: "json";
4390
5439
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4391
5440
  };
4392
5441
  };
4393
5442
  } & {
4394
- "/gateway/start": {
5443
+ "/debug/dropped": {
4395
5444
  $get: {
4396
5445
  input: {
4397
5446
  query: {
4398
- "no-caffeine"?: string | undefined;
5447
+ channel?: string | undefined;
5448
+ limit?: string | undefined;
5449
+ json?: "" | "true" | "false" | undefined;
4399
5450
  };
4400
5451
  };
4401
5452
  output: string;
@@ -4404,140 +5455,244 @@ declare const app: _$hono_hono_base0.HonoBase<Env, {
4404
5455
  } | {
4405
5456
  input: {
4406
5457
  query: {
4407
- "no-caffeine"?: string | undefined;
5458
+ channel?: string | undefined;
5459
+ limit?: string | undefined;
5460
+ json?: "" | "true" | "false" | undefined;
4408
5461
  };
4409
5462
  };
4410
- output: "funnel gateway: already running (pid null)" | `funnel gateway: already running (pid ${number})`;
4411
- outputFormat: "text";
5463
+ output: {
5464
+ error: string;
5465
+ availableChannels: string[];
5466
+ };
5467
+ outputFormat: "json";
4412
5468
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4413
5469
  } | {
4414
5470
  input: {
4415
5471
  query: {
4416
- "no-caffeine"?: string | undefined;
5472
+ channel?: string | undefined;
5473
+ limit?: string | undefined;
5474
+ json?: "" | "true" | "false" | undefined;
4417
5475
  };
4418
5476
  };
4419
- output: "funnel gateway: started";
4420
- outputFormat: "text";
5477
+ output: {
5478
+ error: string;
5479
+ channels: string[];
5480
+ };
5481
+ outputFormat: "json";
5482
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5483
+ } | {
5484
+ input: {
5485
+ query: {
5486
+ channel?: string | undefined;
5487
+ limit?: string | undefined;
5488
+ json?: "" | "true" | "false" | undefined;
5489
+ };
5490
+ };
5491
+ output: {
5492
+ seq: number | null;
5493
+ ts: number | null;
5494
+ type: string;
5495
+ outcome: string;
5496
+ event_id: string | null;
5497
+ payload: string | null;
5498
+ payloadParsed: {
5499
+ [x: string]: _$hono_utils_types0.JSONValue;
5500
+ } | null;
5501
+ preview: string | null;
5502
+ }[];
5503
+ outputFormat: "json";
4421
5504
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4422
5505
  };
4423
5506
  };
4424
5507
  } & {
4425
- "/gateway/stop": {
5508
+ "/debug/errors": {
4426
5509
  $get: {
4427
5510
  input: {
4428
- query: Record<string, never>;
5511
+ query: {
5512
+ channel?: string | undefined;
5513
+ limit?: string | undefined;
5514
+ json?: "" | "true" | "false" | undefined;
5515
+ };
4429
5516
  };
4430
5517
  output: string;
4431
5518
  outputFormat: "text";
4432
5519
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4433
5520
  } | {
4434
5521
  input: {
4435
- query: Record<string, never>;
5522
+ query: {
5523
+ channel?: string | undefined;
5524
+ limit?: string | undefined;
5525
+ json?: "" | "true" | "false" | undefined;
5526
+ };
4436
5527
  };
4437
- output: "funnel gateway: no running process";
4438
- outputFormat: "text";
5528
+ output: {
5529
+ error: string;
5530
+ availableChannels: string[];
5531
+ };
5532
+ outputFormat: "json";
4439
5533
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4440
5534
  } | {
4441
5535
  input: {
4442
- query: Record<string, never>;
5536
+ query: {
5537
+ channel?: string | undefined;
5538
+ limit?: string | undefined;
5539
+ json?: "" | "true" | "false" | undefined;
5540
+ };
4443
5541
  };
4444
- output: "funnel gateway: stopped";
4445
- outputFormat: "text";
5542
+ output: {
5543
+ error: string;
5544
+ channels: string[];
5545
+ };
5546
+ outputFormat: "json";
5547
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5548
+ } | {
5549
+ input: {
5550
+ query: {
5551
+ channel?: string | undefined;
5552
+ limit?: string | undefined;
5553
+ json?: "" | "true" | "false" | undefined;
5554
+ };
5555
+ };
5556
+ output: {
5557
+ seq: number | null;
5558
+ ts: number | null;
5559
+ type: string;
5560
+ status: string;
5561
+ detail: string | null;
5562
+ }[];
5563
+ outputFormat: "json";
4446
5564
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4447
5565
  };
4448
5566
  };
4449
5567
  } & {
4450
- "/gateway/restart": {
5568
+ "/debug/replay": {
4451
5569
  $get: {
4452
5570
  input: {
4453
5571
  query: {
4454
- "no-caffeine"?: string | undefined;
5572
+ channel?: string | undefined;
5573
+ seq?: string | undefined;
5574
+ json?: "" | "true" | "false" | undefined;
4455
5575
  };
4456
5576
  };
4457
5577
  output: string;
4458
5578
  outputFormat: "text";
4459
5579
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4460
- };
4461
- };
4462
- } & {
4463
- "/gateway/run": {
4464
- $get: {
5580
+ } | {
4465
5581
  input: {
4466
5582
  query: {
4467
- "no-caffeine"?: string | undefined;
5583
+ channel?: string | undefined;
5584
+ seq?: string | undefined;
5585
+ json?: "" | "true" | "false" | undefined;
4468
5586
  };
4469
5587
  };
4470
- output: string;
5588
+ output: `error: ${string}`;
4471
5589
  outputFormat: "text";
4472
5590
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4473
5591
  } | {
4474
5592
  input: {
4475
5593
  query: {
4476
- "no-caffeine"?: string | undefined;
5594
+ channel?: string | undefined;
5595
+ seq?: string | undefined;
5596
+ json?: "" | "true" | "false" | undefined;
4477
5597
  };
4478
5598
  };
4479
- output: Promise<never>;
4480
- outputFormat: "json";
4481
- status: _$hono_utils_http_status0.StatusCode;
4482
- };
4483
- };
4484
- } & {
4485
- "/gateway/logs": {
4486
- $get: {
5599
+ output: `channel not found: ${string}`;
5600
+ outputFormat: "text";
5601
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5602
+ } | {
4487
5603
  input: {
4488
5604
  query: {
4489
- n?: string | undefined;
5605
+ channel?: string | undefined;
5606
+ seq?: string | undefined;
5607
+ json?: "" | "true" | "false" | undefined;
4490
5608
  };
4491
5609
  };
4492
- output: string;
5610
+ output: "no diagnostic store yet (start the gateway first)";
4493
5611
  outputFormat: "text";
4494
5612
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4495
5613
  } | {
4496
5614
  input: {
4497
5615
  query: {
4498
- n?: string | undefined;
5616
+ channel?: string | undefined;
5617
+ seq?: string | undefined;
5618
+ json?: "" | "true" | "false" | undefined;
4499
5619
  };
4500
5620
  };
4501
- output: "no logs";
5621
+ output: `multiple channels \u2014 specify one with --channel:
5622
+ ${string}`;
4502
5623
  outputFormat: "text";
4503
5624
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4504
- };
4505
- };
4506
- } & {
4507
- "/gateway/sql": {
4508
- $get: {
5625
+ } | {
4509
5626
  input: {
4510
5627
  query: {
4511
- query?: string | undefined;
5628
+ channel?: string | undefined;
5629
+ seq?: string | undefined;
5630
+ json?: "" | "true" | "false" | undefined;
4512
5631
  };
4513
5632
  };
4514
- output: string;
5633
+ output: "no channels configured";
4515
5634
  outputFormat: "text";
4516
5635
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4517
- };
4518
- };
4519
- } & {
4520
- "/gateway/listeners": {
4521
- $get: {
5636
+ } | {
4522
5637
  input: {
4523
- query: Record<string, never>;
5638
+ query: {
5639
+ channel?: string | undefined;
5640
+ seq?: string | undefined;
5641
+ json?: "" | "true" | "false" | undefined;
5642
+ };
4524
5643
  };
4525
- output: string;
5644
+ output: {
5645
+ error: string;
5646
+ };
5647
+ outputFormat: "json";
5648
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5649
+ } | {
5650
+ input: {
5651
+ query: {
5652
+ channel?: string | undefined;
5653
+ seq?: string | undefined;
5654
+ json?: "" | "true" | "false" | undefined;
5655
+ };
5656
+ };
5657
+ output: "no matching event found";
4526
5658
  outputFormat: "text";
4527
5659
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4528
5660
  } | {
4529
5661
  input: {
4530
- query: Record<string, never>;
5662
+ query: {
5663
+ channel?: string | undefined;
5664
+ seq?: string | undefined;
5665
+ json?: "" | "true" | "false" | undefined;
5666
+ };
4531
5667
  };
4532
- output: "funnel gateway: no running listeners";
5668
+ output: "event has no payload to replay";
4533
5669
  outputFormat: "text";
4534
5670
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4535
5671
  } | {
4536
5672
  input: {
4537
- query: Record<string, never>;
5673
+ query: {
5674
+ channel?: string | undefined;
5675
+ seq?: string | undefined;
5676
+ json?: "" | "true" | "false" | undefined;
5677
+ };
4538
5678
  };
4539
- output: `funnel gateway: running listeners
4540
- ${string}`;
5679
+ output: {
5680
+ replayed: true;
5681
+ seq: number | null;
5682
+ offset: number;
5683
+ preview: string | null;
5684
+ };
5685
+ outputFormat: "json";
5686
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5687
+ } | {
5688
+ input: {
5689
+ query: {
5690
+ channel?: string | undefined;
5691
+ seq?: string | undefined;
5692
+ json?: "" | "true" | "false" | undefined;
5693
+ };
5694
+ };
5695
+ output: `replayed seq=${number} \u2192 offset=${number}${string}` | `replayed seq=? \u2192 offset=${number}${string}`;
4541
5696
  outputFormat: "text";
4542
5697
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4543
5698
  };
@@ -4565,7 +5720,10 @@ ${string}`;
4565
5720
  "/status": {
4566
5721
  $get: {
4567
5722
  input: {
4568
- query: Record<string, never>;
5723
+ query: {
5724
+ watch?: "" | "true" | "false" | undefined;
5725
+ interval?: string | undefined;
5726
+ };
4569
5727
  };
4570
5728
  output: string;
4571
5729
  outputFormat: "text";
@@ -4592,4 +5750,4 @@ ${string}`;
4592
5750
  };
4593
5751
  }, "/", "/update">;
4594
5752
  //#endregion
4595
- export { AliveStub, AttachOptions, BroadcastEvent, BroadcastSubscriber, CONNECTOR_CONNECTION_STATUSES, ChannelConfig, ChannelConnectorView, ChannelDeliveryMode, ChannelServerOptions, ChannelSpec, ConnectorConfig, ConnectorConnectionEvent, ConnectorConnectionQuery, ConnectorConnectionRecord, ConnectorConnectionStatus, ConnectorDiagnosticLog, ConnectorDiagnosticSqlReader, ConnectorProcessedEvent, ConnectorProcessedQuery, ConnectorProcessedRecord, ConnectorQuery, ConnectorRawEvent, ConnectorRawQuery, ConnectorRawRecord, ConnectorSpec, ConnectorSyncOutcome, ConnectorType, DEFAULT_GATEWAY_PORT, DEFAULT_GATEWAY_TOKEN_PATH, DetachOptions, DiscordConnectorConfig, Env, FUNNEL_DIR, FUNNEL_MCP_ARGS, FUNNEL_MCP_COMMAND, FUNNEL_MCP_NAME, FileStat, Funnel, FunnelBroadcaster, FunnelChannelPublisher, FunnelChannels, FunnelClaude, FunnelClock, FunnelConnectorFactory, FunnelConnectorListener, FunnelEvent, FunnelEventLog, FunnelEventRecord, FunnelFileSystem, FunnelGateway, FunnelGatewayServer, FunnelGatewayToken, FunnelIdGenerator, FunnelListenerSupervisor, FunnelListenersClient, FunnelLocalConfig, FunnelLocalConfigSync, FunnelLocalConfigWriter, FunnelLogger, FunnelMcp, FunnelProcessRunner, FunnelProfiles, FunnelSettingsReader, FunnelSettingsStore, FunnelSlackEventProcessor, FunnelTokenPrompter, type GatewayEmitInput, type GatewayRouteDeps, type Env$1 as GatewayServerEnv, GhConnectorConfig, LOCAL_CONFIG_FILENAME, LaunchOptions, ListListenersResult, ListenerEntry, ListenerOpResult, LocalConfig, LocalConfigSyncResult, LogEntry, MemoryConnectorDiagnosticLog, MemoryFunnelClock, MemoryFunnelEventLog, MemoryFunnelFileSystem, MemoryFunnelIdGenerator, MemoryFunnelLogger, MemoryFunnelProcessRunner, MemoryFunnelTokenPrompter, MemoryProcessCall, MemoryProcessHandler, MemoryProcessResponse, MemoryProcessSyncHandler, MockFunnelSettingsReader, NodeFunnelClock, NodeFunnelFileSystem, NodeFunnelIdGenerator, NodeFunnelLogger, NodeFunnelProcessRunner, NodeFunnelTokenPrompter, NoopFunnelLogger, NotifyFn, OnFunnelError, ProcessListStub, ProcessSnapshot, ProfileConfig, ProfileSpec, PublishRequest, PublishResponse, PublishResult, ReplayableEvent, RunOptions, RunResult, SETTINGS_PATH, SETTINGS_VERSION, ScheduleCatchupPolicy, ScheduleConnectorConfig, ScheduleEntry, ScheduleListenerOptions, Settings, SlackConnectorConfig, SlackListenerOptions, SlackProcessed, SlackProcessedEmit, SlackProcessedSkip, SlackRawEvent, SlackSkipReason, SqliteConnectorDiagnosticLog, SqliteFunnelEventLog, StoredConnectionEvent, StoredProcessedEvent, StoredRawEvent, channelConfigSchema, channelDeliveryModeSchema, channelSpecSchema, app as cliApp, connectorConfigSchema, connectorConnectionEventSchema, connectorProcessedEventSchema, connectorRawEventSchema, connectorSpecSchema, createCliApp, createSettings, discordConnectorSchema, factory, funnelEventSchema, funnelJsonSchema, ghConnectorSchema, localConfigSchema, profileConfigSchema, profileSpecSchema, publishRequestSchema, publishResponseSchema, queryToCliArgs, resolveFunnelDir, resolveFunnelPort, scheduleCatchupPolicySchema, scheduleConnectorSchema, scheduleEntrySchema, settingsSchema, slackConnectorSchema, startChannelServer, toRequest };
5753
+ export { AliveStub, AttachOptions, BroadcastEvent, BroadcastSubscriber, CONNECTOR_CONNECTION_STATUSES, ChannelConfig, ChannelConnectorView, ChannelDeliveryMode, ChannelServerOptions, ChannelSpec, ConnectorConfig, ConnectorConnectionEvent, ConnectorConnectionQuery, ConnectorConnectionRecord, ConnectorConnectionStatus, ConnectorDiagnosticLog, ConnectorDiagnosticSqlReader, ConnectorProcessedEvent, ConnectorProcessedQuery, ConnectorProcessedRecord, ConnectorQuery, ConnectorRawEvent, ConnectorRawQuery, ConnectorRawRecord, ConnectorSpec, ConnectorSyncOutcome, ConnectorType, DEFAULT_GATEWAY_PORT, DEFAULT_GATEWAY_TOKEN_PATH, DetachOptions, DiscordConnectorConfig, Env, FUNNEL_DIR, FUNNEL_MCP_ARGS, FUNNEL_MCP_COMMAND, FUNNEL_MCP_NAME, FileStat, Funnel, FunnelBroadcaster, FunnelChannelPublisher, FunnelChannels, FunnelClaude, FunnelClock, FunnelConnectorFactory, FunnelConnectorListener, type FunnelDebugReport, FunnelEvent, FunnelEventLog, FunnelEventRecord, FunnelFileSystem, FunnelGateway, FunnelGatewayServer, FunnelGatewayToken, FunnelIdGenerator, FunnelListenerSupervisor, FunnelListenersClient, FunnelLocalConfig, FunnelLocalConfigSync, FunnelLocalConfigWriter, FunnelLogger, FunnelMcp, FunnelProcessRunner, FunnelProfiles, FunnelSettingsReader, FunnelSettingsStore, FunnelSlackEventProcessor, FunnelTokenPrompter, type GatewayEmitInput, type GatewayRouteDeps, type Env$1 as GatewayServerEnv, GhConnectorConfig, LOCAL_CONFIG_FILENAME, LaunchOptions, ListListenersResult, ListenerEntry, ListenerOpResult, LocalConfig, LocalConfigSyncResult, LogEntry, MemoryConnectorDiagnosticLog, MemoryFunnelClock, MemoryFunnelEventLog, MemoryFunnelFileSystem, MemoryFunnelIdGenerator, MemoryFunnelLogger, MemoryFunnelProcessRunner, MemoryFunnelTokenPrompter, MemoryProcessCall, MemoryProcessHandler, MemoryProcessResponse, MemoryProcessSyncHandler, MockFunnelSettingsReader, NodeFunnelClock, NodeFunnelFileSystem, NodeFunnelIdGenerator, NodeFunnelLogger, NodeFunnelProcessRunner, NodeFunnelTokenPrompter, NoopFunnelLogger, NotifyFn, OnFunnelError, ProcessListStub, ProcessSnapshot, ProfileConfig, ProfileSpec, PublishRequest, PublishResponse, PublishResult, ReplayableEvent, RunOptions, RunResult, SETTINGS_PATH, SETTINGS_VERSION, ScheduleCatchupPolicy, ScheduleConnectorConfig, ScheduleEntry, ScheduleListenerOptions, Settings, SlackConnectorConfig, SlackListenerOptions, SlackProcessed, SlackProcessedEmit, SlackProcessedSkip, SlackRawEvent, SlackSkipReason, SqliteConnectorDiagnosticLog, SqliteFunnelEventLog, StoredConnectionEvent, StoredProcessedEvent, StoredRawEvent, channelConfigSchema, channelDeliveryModeSchema, channelSpecSchema, app as cliApp, connectorConfigSchema, connectorConnectionEventSchema, connectorProcessedEventSchema, connectorRawEventSchema, connectorSpecSchema, createCliApp, createSettings, discordConnectorSchema, factory, funnelEventSchema, funnelJsonSchema, ghConnectorSchema, localConfigSchema, profileConfigSchema, profileSpecSchema, publishRequestSchema, publishResponseSchema, queryToCliArgs, resolveFunnelDir, resolveFunnelPort, scheduleCatchupPolicySchema, scheduleConnectorSchema, scheduleEntrySchema, settingsSchema, slackConnectorSchema, startChannelServer, toRequest };