@interactive-inc/claude-funnel 0.35.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
@@ -395,7 +396,8 @@ type GatewayController = {
395
396
  };
396
397
  //#endregion
397
398
  //#region lib/engine/mcp/mcp.d.ts
398
- declare const FUNNEL_MCP_COMMAND = "funnel";
399
+ declare const FUNNEL_MCP_COMMAND = "bun";
400
+ declare const FUNNEL_MCP_ARGS: string[];
399
401
  declare const FUNNEL_MCP_NAME = "funnel";
400
402
  type Deps$13 = {
401
403
  fs?: FunnelFileSystem;
@@ -412,6 +414,7 @@ declare class FunnelMcp {
412
414
  uninstall(repoPath: string): void;
413
415
  findInstalledName(cwd: string): string | null;
414
416
  private findServerName;
417
+ private isFunnelEntry;
415
418
  private readConfig;
416
419
  private writeConfig;
417
420
  }
@@ -550,9 +553,10 @@ declare class FunnelClaude {
550
553
  /**
551
554
  * Mirrors claude's session storage path
552
555
  * (`<config-dir>/projects/<cwd-with-slashes-as-dashes>/<id>.jsonl`) to check
553
- * whether a recorded session still exists. Reads the same `CLAUDE_CONFIG_DIR`
554
- * the child will run under so the check matches reality; a wrong guess can
555
- * only ever produce a false negative (start fresh), never a bad resume.
556
+ * whether a recorded session still exists AND is non-empty. Reads the same
557
+ * `CLAUDE_CONFIG_DIR` the child will run under so the check matches reality; a
558
+ * wrong guess can only ever produce a false negative (start fresh), never a
559
+ * bad resume.
556
560
  */
557
561
  private sessionFileExists;
558
562
  private buildEnv;
@@ -1321,6 +1325,34 @@ declare class FunnelListenersClient {
1321
1325
  private call;
1322
1326
  }
1323
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
1324
1356
  //#region lib/funnel.d.ts
1325
1357
  type Props$8 = {
1326
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. */
@@ -1463,11 +1495,12 @@ declare class Funnel {
1463
1495
  */
1464
1496
  extraRoutes?: Hono<Env$1>;
1465
1497
  }): FunnelGatewayServer;
1498
+ debug(channelName?: string): Promise<FunnelDebugReport>;
1466
1499
  }
1467
1500
  //#endregion
1468
1501
  //#region lib/engine/mcp/channel-server.d.ts
1469
1502
  type ChannelServerOptions = {
1470
- /** Funnel home directory (settings.json + gateway.token). Defaults to ~/.funnel. */dir?: string; /** Gateway base URL. Defaults to `$FUNNEL_GATEWAY_URL` or `http://localhost:9742`. */
1503
+ /** Funnel home directory (settings.json + gateway.token). Defaults to ~/.funnel. */dir?: string; /** Gateway base URL. Defaults to `$FUNNEL_GATEWAY_URL` or `http://127.0.0.1:<port>`. */
1471
1504
  gatewayUrl?: string; /** Channel id to subscribe to. Defaults to `$FUNNEL_CHANNEL_ID`. */
1472
1505
  channelId?: string; /** Auth token. Defaults to `$FUNNEL_GATEWAY_TOKEN` then `<dir>/gateway.token`. */
1473
1506
  token?: string;
@@ -1928,7 +1961,7 @@ declare class ConnectorDiagnosticSqlReader {
1928
1961
  * than throwing) for a non-SELECT statement or a SQL error, so the caller
1929
1962
  * can surface the message without a stack trace.
1930
1963
  */
1931
- query(sql: string): Row[] | Error;
1964
+ query(sql: string, params?: (string | number | null)[]): Row[] | Error;
1932
1965
  close(): void;
1933
1966
  }
1934
1967
  //#endregion
@@ -1991,11 +2024,31 @@ declare const createCliApp: (funnel: Funnel) => _$hono_hono_base0.HonoBase<Env,
1991
2024
  "/channels": {
1992
2025
  $get: {
1993
2026
  input: {
1994
- query: Record<string, never>;
2027
+ query: {
2028
+ json?: "" | "true" | "false" | undefined;
2029
+ };
1995
2030
  };
1996
2031
  output: string;
1997
2032
  outputFormat: "text";
1998
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;
1999
2052
  };
2000
2053
  };
2001
2054
  } & {
@@ -2217,6 +2270,53 @@ declare const createCliApp: (funnel: Funnel) => _$hono_hono_base0.HonoBase<Env,
2217
2270
  status: _$hono_utils_http_status0.ContentfulStatusCode;
2218
2271
  };
2219
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
+ };
2220
2320
  } & {
2221
2321
  "/channels/:channel": {
2222
2322
  $get: {
@@ -3034,42 +3134,30 @@ declare const createCliApp: (funnel: Funnel) => _$hono_hono_base0.HonoBase<Env,
3034
3134
  output: string;
3035
3135
  outputFormat: "text";
3036
3136
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3037
- } | {
3038
- input: {};
3039
- output: "funnel gateway: running (pid null) — health check failed" | `funnel gateway: running (pid ${number}) \u2014 health check failed`;
3040
- outputFormat: "text";
3041
- status: _$hono_utils_http_status0.ContentfulStatusCode;
3042
- } | {
3043
- input: {};
3044
- output: `funnel gateway: running (pid null)
3045
- port: ${number}
3046
- clients: ${string}` | `funnel gateway: running (pid ${number})
3047
- port: ${number}
3048
- clients: ${string}`;
3049
- outputFormat: "text";
3050
- status: _$hono_utils_http_status0.ContentfulStatusCode;
3051
3137
  };
3052
3138
  };
3053
3139
  } & {
3054
3140
  "/gateway/status": {
3055
3141
  $get: {
3056
- input: {};
3142
+ input: {
3143
+ query: {
3144
+ json?: "" | "true" | "false" | undefined;
3145
+ };
3146
+ };
3057
3147
  output: string;
3058
3148
  outputFormat: "text";
3059
3149
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3060
3150
  } | {
3061
- input: {};
3062
- output: "funnel gateway: running (pid null) — health check failed" | `funnel gateway: running (pid ${number}) \u2014 health check failed`;
3063
- outputFormat: "text";
3064
- status: _$hono_utils_http_status0.ContentfulStatusCode;
3065
- } | {
3066
- input: {};
3067
- output: `funnel gateway: running (pid null)
3068
- port: ${number}
3069
- clients: ${string}` | `funnel gateway: running (pid ${number})
3070
- port: ${number}
3071
- clients: ${string}`;
3072
- 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";
3073
3161
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3074
3162
  };
3075
3163
  };
@@ -3170,6 +3258,7 @@ declare const createCliApp: (funnel: Funnel) => _$hono_hono_base0.HonoBase<Env,
3170
3258
  input: {
3171
3259
  query: {
3172
3260
  n?: string | undefined;
3261
+ format?: "json" | "plain" | undefined;
3173
3262
  };
3174
3263
  };
3175
3264
  output: string;
@@ -3179,6 +3268,7 @@ declare const createCliApp: (funnel: Funnel) => _$hono_hono_base0.HonoBase<Env,
3179
3268
  input: {
3180
3269
  query: {
3181
3270
  n?: string | undefined;
3271
+ format?: "json" | "plain" | undefined;
3182
3272
  };
3183
3273
  };
3184
3274
  output: "no logs";
@@ -3192,6 +3282,9 @@ declare const createCliApp: (funnel: Funnel) => _$hono_hono_base0.HonoBase<Env,
3192
3282
  input: {
3193
3283
  query: {
3194
3284
  query?: string | undefined;
3285
+ preset?: string | undefined;
3286
+ channel?: string | undefined;
3287
+ limit?: string | undefined;
3195
3288
  };
3196
3289
  };
3197
3290
  output: string;
@@ -3226,211 +3319,735 @@ ${string}`;
3226
3319
  };
3227
3320
  };
3228
3321
  } & {
3229
- "/schema": {
3322
+ "/debug": {
3230
3323
  $get: {
3231
3324
  input: {
3232
- 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
+ };
3233
3331
  };
3234
3332
  output: string;
3235
3333
  outputFormat: "text";
3236
3334
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3237
3335
  } | {
3238
3336
  input: {
3239
- 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
+ };
3240
3343
  };
3241
- output: `${string}
3242
- `;
3243
- outputFormat: "text";
3244
- status: _$hono_utils_http_status0.ContentfulStatusCode;
3245
- };
3246
- };
3247
- } & {
3248
- "/status": {
3249
- $get: {
3250
- input: {
3251
- query: Record<string, never>;
3344
+ output: {
3345
+ error: string;
3346
+ nextAction: string;
3252
3347
  };
3253
- output: string;
3254
- outputFormat: "text";
3348
+ outputFormat: "json";
3255
3349
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3256
- };
3257
- };
3258
- } & {
3259
- "/update": {
3260
- $get: {
3350
+ } | {
3261
3351
  input: {
3262
- 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
+ }[];
3263
3411
  };
3264
- output: string;
3265
- outputFormat: "text";
3412
+ outputFormat: "json";
3266
3413
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3267
3414
  } | {
3268
3415
  input: {
3269
- 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
+ };
3270
3422
  };
3271
- output: "updated @interactive-inc/claude-funnel";
3272
- outputFormat: "text";
3423
+ output: {
3424
+ error: string;
3425
+ availableChannels: string[];
3426
+ };
3427
+ outputFormat: "json";
3273
3428
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3274
- };
3275
- };
3276
- }, "/", "/update">;
3277
- /** CLI Hono app wired to a default `new Funnel()`. For embedding with a custom Funnel use `createCliApp`. */
3278
- declare const app: _$hono_hono_base0.HonoBase<Env, {
3279
- "/claude": {
3280
- $get: {
3429
+ } | {
3281
3430
  input: {
3282
3431
  query: {
3283
- [x: string]: string | string[];
3284
- profile?: string | undefined;
3285
3432
  channel?: string | undefined;
3433
+ all?: "" | "true" | "false" | undefined;
3434
+ json?: "" | "true" | "false" | undefined;
3435
+ limit?: string | undefined;
3286
3436
  };
3287
3437
  };
3288
- output: string;
3289
- outputFormat: "text";
3438
+ output: {
3439
+ error: string;
3440
+ channels: string[];
3441
+ hint: string;
3442
+ };
3443
+ outputFormat: "json";
3290
3444
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3291
3445
  } | {
3292
3446
  input: {
3293
3447
  query: {
3294
- [x: string]: string | string[];
3295
- profile?: string | undefined;
3296
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;
3297
3494
  };
3298
3495
  };
3299
- 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.";
3300
- outputFormat: "text";
3496
+ outputFormat: "json";
3301
3497
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3302
3498
  };
3303
3499
  };
3304
3500
  } & {
3305
- "/channels": {
3501
+ "/debug/events": {
3306
3502
  $get: {
3307
3503
  input: {
3308
- query: Record<string, never>;
3504
+ query: {
3505
+ channel?: string | undefined;
3506
+ limit?: string | undefined;
3507
+ json?: "" | "true" | "false" | undefined;
3508
+ };
3309
3509
  };
3310
3510
  output: string;
3311
3511
  outputFormat: "text";
3312
3512
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3313
- };
3314
- };
3315
- } & {
3316
- "/channels/add": {
3317
- $post: {
3318
- input: {};
3319
- output: string;
3320
- outputFormat: "text";
3321
- status: _$hono_utils_http_status0.ContentfulStatusCode;
3322
- };
3323
- };
3324
- } & {
3325
- "/channels/add/:channel": {
3326
- $post: {
3513
+ } | {
3327
3514
  input: {
3328
- param: {
3329
- channel: string;
3330
- };
3331
- } & {
3332
3515
  query: {
3333
- delivery?: "fanout" | "exclusive" | undefined;
3516
+ channel?: string | undefined;
3517
+ limit?: string | undefined;
3518
+ json?: "" | "true" | "false" | undefined;
3334
3519
  };
3335
3520
  };
3336
- output: string;
3337
- outputFormat: "text";
3521
+ output: {
3522
+ error: string;
3523
+ availableChannels: string[];
3524
+ };
3525
+ outputFormat: "json";
3338
3526
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3339
3527
  } | {
3340
3528
  input: {
3341
- param: {
3342
- channel: string;
3343
- };
3344
- } & {
3345
3529
  query: {
3346
- delivery?: "fanout" | "exclusive" | undefined;
3530
+ channel?: string | undefined;
3531
+ limit?: string | undefined;
3532
+ json?: "" | "true" | "false" | undefined;
3347
3533
  };
3348
3534
  };
3349
- output: `added channel "${string}" (id: ${string})`;
3350
- outputFormat: "text";
3535
+ output: {
3536
+ error: string;
3537
+ channels: string[];
3538
+ };
3539
+ outputFormat: "json";
3351
3540
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3352
- };
3353
- };
3354
- } & {
3355
- "/channels/remove": {
3356
- $post: {
3357
- input: {};
3358
- output: string;
3359
- 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";
3360
3561
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3361
3562
  };
3362
3563
  };
3363
3564
  } & {
3364
- "/channels/remove/:channel": {
3365
- $post: {
3565
+ "/debug/dropped": {
3566
+ $get: {
3366
3567
  input: {
3367
- param: {
3368
- channel: string;
3568
+ query: {
3569
+ channel?: string | undefined;
3570
+ limit?: string | undefined;
3571
+ json?: "" | "true" | "false" | undefined;
3369
3572
  };
3370
- } & {
3371
- query: Record<string, never>;
3372
3573
  };
3373
3574
  output: string;
3374
3575
  outputFormat: "text";
3375
3576
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3376
3577
  } | {
3377
3578
  input: {
3378
- param: {
3379
- channel: string;
3579
+ query: {
3580
+ channel?: string | undefined;
3581
+ limit?: string | undefined;
3582
+ json?: "" | "true" | "false" | undefined;
3380
3583
  };
3381
- } & {
3382
- query: Record<string, never>;
3383
3584
  };
3384
- output: `removed channel "${string}"`;
3385
- outputFormat: "text";
3585
+ output: {
3586
+ error: string;
3587
+ availableChannels: string[];
3588
+ };
3589
+ outputFormat: "json";
3386
3590
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3387
- };
3388
- };
3389
- } & {
3390
- "/channels/rename/:channel/:newName": {
3391
- $post: {
3591
+ } | {
3392
3592
  input: {
3393
- param: {
3394
- channel: string;
3395
- newName: string;
3593
+ query: {
3594
+ channel?: string | undefined;
3595
+ limit?: string | undefined;
3596
+ json?: "" | "true" | "false" | undefined;
3396
3597
  };
3397
- } & {
3398
- query: Record<string, never>;
3399
3598
  };
3400
- output: string;
3401
- outputFormat: "text";
3599
+ output: {
3600
+ error: string;
3601
+ channels: string[];
3602
+ };
3603
+ outputFormat: "json";
3402
3604
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3403
3605
  } | {
3404
3606
  input: {
3405
- param: {
3406
- channel: string;
3407
- newName: string;
3408
- };
3409
- } & {
3410
- query: Record<string, never>;
3411
- };
3412
- output: `renamed channel "${string}" to "${string}"`;
3413
- 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";
3414
3626
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3415
3627
  };
3416
3628
  };
3417
3629
  } & {
3418
- "/channels/:channel/rename/:newName": {
3419
- $post: {
3630
+ "/debug/errors": {
3631
+ $get: {
3420
3632
  input: {
3421
- param: {
3422
- channel: string;
3423
- newName: string;
3633
+ query: {
3634
+ channel?: string | undefined;
3635
+ limit?: string | undefined;
3636
+ json?: "" | "true" | "false" | undefined;
3424
3637
  };
3425
- } & {
3426
- query: Record<string, never>;
3427
3638
  };
3428
3639
  output: string;
3429
3640
  outputFormat: "text";
3430
3641
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3431
3642
  } | {
3432
3643
  input: {
3433
- 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: {
3434
4051
  channel: string;
3435
4052
  newName: string;
3436
4053
  };
@@ -3521,12 +4138,59 @@ declare const app: _$hono_hono_base0.HonoBase<Env, {
3521
4138
  };
3522
4139
  } & {
3523
4140
  query: {
3524
- [x: string]: string | string[];
3525
- content: string | string[];
3526
- 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;
3527
4174
  };
3528
4175
  };
3529
- 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;
3530
4194
  outputFormat: "text";
3531
4195
  status: _$hono_utils_http_status0.ContentfulStatusCode;
3532
4196
  };
@@ -4256,13 +4920,260 @@ declare const app: _$hono_hono_base0.HonoBase<Env, {
4256
4920
  };
4257
4921
  };
4258
4922
  } & {
4259
- "/profiles/:profile/as-default": {
4260
- $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: {
4261
5176
  input: {
4262
- param: {
4263
- profile: string;
4264
- };
4265
- } & {
4266
5177
  query: Record<string, never>;
4267
5178
  };
4268
5179
  output: string;
@@ -4270,27 +5181,30 @@ declare const app: _$hono_hono_base0.HonoBase<Env, {
4270
5181
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4271
5182
  } | {
4272
5183
  input: {
4273
- param: {
4274
- profile: string;
4275
- };
4276
- } & {
4277
5184
  query: Record<string, never>;
4278
5185
  };
4279
- 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}`;
4280
5195
  outputFormat: "text";
4281
5196
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4282
5197
  };
4283
5198
  };
4284
5199
  } & {
4285
- "/profiles/:profile/run": {
5200
+ "/debug": {
4286
5201
  $get: {
4287
5202
  input: {
4288
- param: {
4289
- profile: string;
4290
- };
4291
- } & {
4292
5203
  query: {
4293
- [x: string]: string | string[];
5204
+ channel?: string | undefined;
5205
+ all?: "" | "true" | "false" | undefined;
5206
+ json?: "" | "true" | "false" | undefined;
5207
+ limit?: string | undefined;
4294
5208
  };
4295
5209
  };
4296
5210
  output: string;
@@ -4298,101 +5212,241 @@ declare const app: _$hono_hono_base0.HonoBase<Env, {
4298
5212
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4299
5213
  } | {
4300
5214
  input: {
4301
- param: {
4302
- profile: string;
4303
- };
4304
- } & {
4305
5215
  query: {
4306
- [x: string]: string | string[];
5216
+ channel?: string | undefined;
5217
+ all?: "" | "true" | "false" | undefined;
5218
+ json?: "" | "true" | "false" | undefined;
5219
+ limit?: string | undefined;
4307
5220
  };
4308
5221
  };
4309
- output: Promise<never>;
5222
+ output: {
5223
+ error: string;
5224
+ nextAction: string;
5225
+ };
4310
5226
  outputFormat: "json";
4311
- status: _$hono_utils_http_status0.StatusCode;
4312
- };
4313
- };
4314
- } & {
4315
- "/profiles/:profile": {
4316
- $get: {
5227
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5228
+ } | {
4317
5229
  input: {
4318
- param: {
4319
- profile: string;
4320
- };
4321
- } & {
4322
5230
  query: {
4323
- [x: string]: string | string[];
4324
- };
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
+ }[];
4325
5289
  };
4326
- output: string;
4327
- outputFormat: "text";
5290
+ outputFormat: "json";
4328
5291
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4329
5292
  } | {
4330
5293
  input: {
4331
- param: {
4332
- profile: string;
4333
- };
4334
- } & {
4335
5294
  query: {
4336
- [x: string]: string | string[];
5295
+ channel?: string | undefined;
5296
+ all?: "" | "true" | "false" | undefined;
5297
+ json?: "" | "true" | "false" | undefined;
5298
+ limit?: string | undefined;
4337
5299
  };
4338
5300
  };
4339
- output: Promise<never>;
5301
+ output: {
5302
+ error: string;
5303
+ availableChannels: string[];
5304
+ };
4340
5305
  outputFormat: "json";
4341
- status: _$hono_utils_http_status0.StatusCode;
4342
- };
4343
- };
4344
- } & {
4345
- "/gateway": {
4346
- $get: {
4347
- input: {};
4348
- output: string;
4349
- outputFormat: "text";
4350
5306
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4351
5307
  } | {
4352
- input: {};
4353
- output: "funnel gateway: running (pid null) — health check failed" | `funnel gateway: running (pid ${number}) \u2014 health check failed`;
4354
- 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";
4355
5322
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4356
5323
  } | {
4357
- input: {};
4358
- output: `funnel gateway: running (pid null)
4359
- port: ${number}
4360
- clients: ${string}` | `funnel gateway: running (pid ${number})
4361
- port: ${number}
4362
- clients: ${string}`;
4363
- 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";
4364
5375
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4365
5376
  };
4366
5377
  };
4367
5378
  } & {
4368
- "/gateway/status": {
5379
+ "/debug/events": {
4369
5380
  $get: {
4370
- input: {};
5381
+ input: {
5382
+ query: {
5383
+ channel?: string | undefined;
5384
+ limit?: string | undefined;
5385
+ json?: "" | "true" | "false" | undefined;
5386
+ };
5387
+ };
4371
5388
  output: string;
4372
5389
  outputFormat: "text";
4373
5390
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4374
5391
  } | {
4375
- input: {};
4376
- output: "funnel gateway: running (pid null) — health check failed" | `funnel gateway: running (pid ${number}) \u2014 health check failed`;
4377
- 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";
4378
5404
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4379
5405
  } | {
4380
- input: {};
4381
- output: `funnel gateway: running (pid null)
4382
- port: ${number}
4383
- clients: ${string}` | `funnel gateway: running (pid ${number})
4384
- port: ${number}
4385
- clients: ${string}`;
4386
- 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";
4387
5439
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4388
5440
  };
4389
5441
  };
4390
5442
  } & {
4391
- "/gateway/start": {
5443
+ "/debug/dropped": {
4392
5444
  $get: {
4393
5445
  input: {
4394
5446
  query: {
4395
- "no-caffeine"?: string | undefined;
5447
+ channel?: string | undefined;
5448
+ limit?: string | undefined;
5449
+ json?: "" | "true" | "false" | undefined;
4396
5450
  };
4397
5451
  };
4398
5452
  output: string;
@@ -4401,140 +5455,244 @@ declare const app: _$hono_hono_base0.HonoBase<Env, {
4401
5455
  } | {
4402
5456
  input: {
4403
5457
  query: {
4404
- "no-caffeine"?: string | undefined;
5458
+ channel?: string | undefined;
5459
+ limit?: string | undefined;
5460
+ json?: "" | "true" | "false" | undefined;
4405
5461
  };
4406
5462
  };
4407
- output: "funnel gateway: already running (pid null)" | `funnel gateway: already running (pid ${number})`;
4408
- outputFormat: "text";
5463
+ output: {
5464
+ error: string;
5465
+ availableChannels: string[];
5466
+ };
5467
+ outputFormat: "json";
4409
5468
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4410
5469
  } | {
4411
5470
  input: {
4412
5471
  query: {
4413
- "no-caffeine"?: string | undefined;
5472
+ channel?: string | undefined;
5473
+ limit?: string | undefined;
5474
+ json?: "" | "true" | "false" | undefined;
4414
5475
  };
4415
5476
  };
4416
- output: "funnel gateway: started";
4417
- 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";
4418
5504
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4419
5505
  };
4420
5506
  };
4421
5507
  } & {
4422
- "/gateway/stop": {
5508
+ "/debug/errors": {
4423
5509
  $get: {
4424
5510
  input: {
4425
- query: Record<string, never>;
5511
+ query: {
5512
+ channel?: string | undefined;
5513
+ limit?: string | undefined;
5514
+ json?: "" | "true" | "false" | undefined;
5515
+ };
4426
5516
  };
4427
5517
  output: string;
4428
5518
  outputFormat: "text";
4429
5519
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4430
5520
  } | {
4431
5521
  input: {
4432
- query: Record<string, never>;
5522
+ query: {
5523
+ channel?: string | undefined;
5524
+ limit?: string | undefined;
5525
+ json?: "" | "true" | "false" | undefined;
5526
+ };
4433
5527
  };
4434
- output: "funnel gateway: no running process";
4435
- outputFormat: "text";
5528
+ output: {
5529
+ error: string;
5530
+ availableChannels: string[];
5531
+ };
5532
+ outputFormat: "json";
4436
5533
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4437
5534
  } | {
4438
5535
  input: {
4439
- query: Record<string, never>;
5536
+ query: {
5537
+ channel?: string | undefined;
5538
+ limit?: string | undefined;
5539
+ json?: "" | "true" | "false" | undefined;
5540
+ };
4440
5541
  };
4441
- output: "funnel gateway: stopped";
4442
- 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";
4443
5564
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4444
5565
  };
4445
5566
  };
4446
5567
  } & {
4447
- "/gateway/restart": {
5568
+ "/debug/replay": {
4448
5569
  $get: {
4449
5570
  input: {
4450
5571
  query: {
4451
- "no-caffeine"?: string | undefined;
5572
+ channel?: string | undefined;
5573
+ seq?: string | undefined;
5574
+ json?: "" | "true" | "false" | undefined;
4452
5575
  };
4453
5576
  };
4454
5577
  output: string;
4455
5578
  outputFormat: "text";
4456
5579
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4457
- };
4458
- };
4459
- } & {
4460
- "/gateway/run": {
4461
- $get: {
5580
+ } | {
4462
5581
  input: {
4463
5582
  query: {
4464
- "no-caffeine"?: string | undefined;
5583
+ channel?: string | undefined;
5584
+ seq?: string | undefined;
5585
+ json?: "" | "true" | "false" | undefined;
4465
5586
  };
4466
5587
  };
4467
- output: string;
5588
+ output: `error: ${string}`;
4468
5589
  outputFormat: "text";
4469
5590
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4470
5591
  } | {
4471
5592
  input: {
4472
5593
  query: {
4473
- "no-caffeine"?: string | undefined;
5594
+ channel?: string | undefined;
5595
+ seq?: string | undefined;
5596
+ json?: "" | "true" | "false" | undefined;
4474
5597
  };
4475
5598
  };
4476
- output: Promise<never>;
4477
- outputFormat: "json";
4478
- status: _$hono_utils_http_status0.StatusCode;
4479
- };
4480
- };
4481
- } & {
4482
- "/gateway/logs": {
4483
- $get: {
5599
+ output: `channel not found: ${string}`;
5600
+ outputFormat: "text";
5601
+ status: _$hono_utils_http_status0.ContentfulStatusCode;
5602
+ } | {
4484
5603
  input: {
4485
5604
  query: {
4486
- n?: string | undefined;
5605
+ channel?: string | undefined;
5606
+ seq?: string | undefined;
5607
+ json?: "" | "true" | "false" | undefined;
4487
5608
  };
4488
5609
  };
4489
- output: string;
5610
+ output: "no diagnostic store yet (start the gateway first)";
4490
5611
  outputFormat: "text";
4491
5612
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4492
5613
  } | {
4493
5614
  input: {
4494
5615
  query: {
4495
- n?: string | undefined;
5616
+ channel?: string | undefined;
5617
+ seq?: string | undefined;
5618
+ json?: "" | "true" | "false" | undefined;
4496
5619
  };
4497
5620
  };
4498
- output: "no logs";
5621
+ output: `multiple channels \u2014 specify one with --channel:
5622
+ ${string}`;
4499
5623
  outputFormat: "text";
4500
5624
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4501
- };
4502
- };
4503
- } & {
4504
- "/gateway/sql": {
4505
- $get: {
5625
+ } | {
4506
5626
  input: {
4507
5627
  query: {
4508
- query?: string | undefined;
5628
+ channel?: string | undefined;
5629
+ seq?: string | undefined;
5630
+ json?: "" | "true" | "false" | undefined;
4509
5631
  };
4510
5632
  };
4511
- output: string;
5633
+ output: "no channels configured";
4512
5634
  outputFormat: "text";
4513
5635
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4514
- };
4515
- };
4516
- } & {
4517
- "/gateway/listeners": {
4518
- $get: {
5636
+ } | {
4519
5637
  input: {
4520
- query: Record<string, never>;
5638
+ query: {
5639
+ channel?: string | undefined;
5640
+ seq?: string | undefined;
5641
+ json?: "" | "true" | "false" | undefined;
5642
+ };
4521
5643
  };
4522
- 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";
4523
5658
  outputFormat: "text";
4524
5659
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4525
5660
  } | {
4526
5661
  input: {
4527
- query: Record<string, never>;
5662
+ query: {
5663
+ channel?: string | undefined;
5664
+ seq?: string | undefined;
5665
+ json?: "" | "true" | "false" | undefined;
5666
+ };
4528
5667
  };
4529
- output: "funnel gateway: no running listeners";
5668
+ output: "event has no payload to replay";
4530
5669
  outputFormat: "text";
4531
5670
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4532
5671
  } | {
4533
5672
  input: {
4534
- query: Record<string, never>;
5673
+ query: {
5674
+ channel?: string | undefined;
5675
+ seq?: string | undefined;
5676
+ json?: "" | "true" | "false" | undefined;
5677
+ };
4535
5678
  };
4536
- output: `funnel gateway: running listeners
4537
- ${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}`;
4538
5696
  outputFormat: "text";
4539
5697
  status: _$hono_utils_http_status0.ContentfulStatusCode;
4540
5698
  };
@@ -4562,7 +5720,10 @@ ${string}`;
4562
5720
  "/status": {
4563
5721
  $get: {
4564
5722
  input: {
4565
- query: Record<string, never>;
5723
+ query: {
5724
+ watch?: "" | "true" | "false" | undefined;
5725
+ interval?: string | undefined;
5726
+ };
4566
5727
  };
4567
5728
  output: string;
4568
5729
  outputFormat: "text";
@@ -4589,4 +5750,4 @@ ${string}`;
4589
5750
  };
4590
5751
  }, "/", "/update">;
4591
5752
  //#endregion
4592
- 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_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 };