@interactive-inc/claude-funnel 0.59.1 → 0.60.1
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/README.md +9 -3
- package/dist/bin.js +549 -487
- package/dist/channels-2g_BU1N0.d.ts +174 -0
- package/dist/claude.d.ts +9 -5
- package/dist/claude.js +54 -17
- package/dist/{diagnostic-log-Cb3v8P7p.d.ts → connector-descriptor-6SXJoszo.d.ts} +158 -2
- package/dist/connectors/discord.d.ts +30 -4
- package/dist/connectors/discord.js +2 -2
- package/dist/connectors/gh.d.ts +21 -5
- package/dist/connectors/gh.js +3 -3
- package/dist/connectors/schedule.d.ts +124 -2
- package/dist/connectors/schedule.js +3 -3
- package/dist/connectors/slack.d.ts +149 -5
- package/dist/connectors/slack.js +2 -2
- package/dist/{diagnostic-sql-reader-CzYgZpq2.js → diagnostic-sql-reader-C9zR-Csp.js} +5 -5
- package/dist/diagnostics.d.ts +1 -1
- package/dist/diagnostics.js +1 -1
- package/dist/{discord-listener-CKsZGTnH.js → discord-connector-BL36yvbL.js} +60 -37
- package/dist/docs.d.ts +1 -1
- package/dist/docs.js +1 -1
- package/dist/doctor.d.ts +1 -1
- package/dist/doctor.js +1 -1
- package/dist/error-message-of-Byi4y0Uf.js +9 -0
- package/dist/{file-process-guard-JhFpmHYo.d.ts → file-process-guard-C_PLxfUX.d.ts} +6 -5
- package/dist/{funnel-diagnostics-BpKYrMSu.js → funnel-diagnostics-CSiJmPlZ.js} +19 -2
- package/dist/{funnel-diagnostics-K-wON25Y.d.ts → funnel-diagnostics-DpXOsCty.d.ts} +3 -3
- package/dist/{funnel-docs-ng5K8w4j.js → funnel-docs-BxXZ9Ksx.js} +76 -3
- package/dist/{funnel-docs-DYBs1-H_.d.ts → funnel-docs-CNklHvbt.d.ts} +1 -1
- package/dist/{funnel-doctor-vxO96TCA.d.ts → funnel-doctor-CZf_0Luq.d.ts} +2 -2
- package/dist/{funnel-recovery-COExL9MD.d.ts → funnel-recovery-DnLrdWO9.d.ts} +1 -1
- package/dist/gateway/daemon.js +326 -266
- package/dist/gateway-base-url-Dy4Ykuoh.js +14 -0
- package/dist/gateway.d.ts +2 -2
- package/dist/gateway.js +2 -2
- package/dist/{gh-listener-B2I4s8qh.js → gh-connector-DpiixfQZ.js} +53 -5
- package/dist/gh-connector-schema-Rzwc1c1N.js +12 -0
- package/dist/http-client-oICicjuO.d.ts +18 -0
- package/dist/index-CgY8NdMz.d.ts +1057 -0
- package/dist/index.d.ts +1558 -17
- package/dist/index.js +376 -343
- package/dist/{local-config-json-schema-DE1zkMcb.js → local-config-json-schema-JyLqOQNX.js} +9 -5
- package/dist/local-config-sync-Dh1Croqe.d.ts +169 -0
- package/dist/local-config.d.ts +2 -2
- package/dist/local-config.js +2 -2
- package/dist/logger.js +1 -1
- package/dist/{memory-diagnostic-log-B9Us7X05.js → memory-diagnostic-log-CI60kNfB.js} +33 -18
- package/dist/{memory-token-prompter-CcShtF8B.d.ts → memory-token-prompter-B4sjyaAq.d.ts} +2 -2
- package/dist/{memory-token-prompter-C7vREzCL.js → memory-token-prompter-CZde7e6y.js} +1 -1
- package/dist/{node-file-system-BcrmWN9I.js → node-file-system-Blr8pAir.js} +1 -1
- package/dist/node-http-client-lowp60Oa.js +25 -0
- package/dist/{gh-connector-schema-ClPLSYD9.js → node-process-runner-DxTvycoK.js} +1 -12
- package/dist/{profiles-g2qGVOWv.d.ts → profiles-Cy5wXQ0L.d.ts} +3 -3
- package/dist/{profiles-MnXvYfZF.js → profiles-DSzTeKQw.js} +1 -1
- package/dist/profiles.d.ts +1 -1
- package/dist/profiles.js +1 -1
- package/dist/recovery.d.ts +1 -1
- package/dist/recovery.js +1 -1
- package/dist/{schedule-listener-DP9Jhc6U.js → schedule-connector-L4uzg5M8.js} +109 -9
- package/dist/{settings-reader-DPwqOVUm.d.ts → settings-reader-BIFB_j2f.d.ts} +1 -1
- package/dist/settings-schema-D1xcOqRu.d.ts +78 -0
- package/dist/{gateway-base-url-DxVjjDoW.js → settings-store-CUKSeTXC.js} +27 -29
- package/dist/{slack-listener-C4wlZaOq.js → slack-connector-DQIFPdBF.js} +67 -12
- package/dist/slot-fields-CMoRpwuy.js +45 -0
- package/dist/{yaml-render-cZu6CxkE.js → yaml-render-93pX7EF7.js} +7 -4
- package/package.json +1 -1
- package/dist/connector-adapter-DGacCppE.d.ts +0 -25
- package/dist/discord-connector-schema-CQyfDkLD.d.ts +0 -39
- package/dist/gh-connector-schema-CZzwzvqY.d.ts +0 -14
- package/dist/index-D7mjirUL.d.ts +0 -3602
- package/dist/local-config-sync-BGPAS9Be.d.ts +0 -401
- package/dist/process-runner-DIm1cy95.d.ts +0 -52
- package/dist/resolve-connector-token-CczqG_Ig.js +0 -22
- package/dist/schedule-listener-DoMPjHZj.d.ts +0 -112
- package/dist/settings-schema-1hh11jnN.d.ts +0 -152
- package/dist/slack-listener-Dj9NFbAJ.d.ts +0 -136
- /package/dist/{connector-adapter-qwXLjQId.js → connector-adapter-DU9Rvyec.js} +0 -0
- /package/dist/{connector-listener-CpHBecCj.js → connector-listener-DR3aKOuK.js} +0 -0
- /package/dist/{file-system-PWKKU7lA.js → file-system-Wvzc2ePY.js} +0 -0
- /package/dist/{file-system-DxpnnUVb.d.ts → file-system-o51IsM0W.d.ts} +0 -0
- /package/dist/{funnel-doctor-CApCezTq.js → funnel-doctor-DiJCjHsg.js} +0 -0
- /package/dist/{funnel-log-sqlite-sink-B_5_4ybn.js → funnel-log-sqlite-sink-kqJbx2H7.js} +0 -0
- /package/dist/{funnel-recovery-D9CxD5Zs.js → funnel-recovery-BFdPjL6Z.js} +0 -0
- /package/dist/{logger-BP6SisKt.js → logger-B6iyNbxM.js} +0 -0
- /package/dist/{schedule-connector-schema-B_xO5z5B.js → schedule-connector-schema-CfyuMCMh.js} +0 -0
- /package/dist/{settings-reader-DPqrpV7s.js → settings-reader-CtQ-Ix8_.js} +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,17 +1,1558 @@
|
|
|
1
|
-
import { a as Settings, c as profileConfigSchema, i as SETTINGS_VERSION, l as settingsSchema, n as ChannelDeliveryMode, o as channelConfigSchema, r as ProfileConfig, s as channelDeliveryModeSchema, t as ChannelConfig } from "./settings-schema-
|
|
2
|
-
import { n as
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { n as FunnelFileSystem, t as FileStat } from "./file-system-
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { a as
|
|
9
|
-
import { a as
|
|
10
|
-
import {
|
|
11
|
-
import { n as
|
|
12
|
-
import {
|
|
13
|
-
import { n as
|
|
14
|
-
import { a as
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
|
|
1
|
+
import { a as Settings, c as profileConfigSchema, i as SETTINGS_VERSION, l as settingsSchema, n as ChannelDeliveryMode, o as channelConfigSchema, r as ProfileConfig, s as channelDeliveryModeSchema, t as ChannelConfig } from "./settings-schema-D1xcOqRu.js";
|
|
2
|
+
import { n as FunnelClaude, t as FileProcessGuard } from "./file-process-guard-C_PLxfUX.js";
|
|
3
|
+
import { n as FunnelIdGenerator, t as FunnelSettingsReader } from "./settings-reader-BIFB_j2f.js";
|
|
4
|
+
import { A as FunnelConnectorAdapter, B as FunnelLogger, C as StoredRawEvent, D as FunnelConnectorListener, E as connectorRawEventSchema, F as DetachOptions, I as FunnelProcessRunner, L as ProcessSnapshot, M as BaseConnectorConfig, N as baseConnectorConfigSchema, O as NotifyFn, P as AttachOptions, R as RunOptions, S as StoredProcessedEvent, T as connectorProcessedEventSchema, _ as ConnectorQuery, a as ConnectorOperation, b as ConnectorRawRecord, c as CONNECTOR_CONNECTION_STATUSES, d as ConnectorConnectionRecord, f as ConnectorConnectionStatus, g as ConnectorProcessedRecord, h as ConnectorProcessedQuery, i as ConnectorListenerDeps, j as JsonValue, k as CallInput, l as ConnectorConnectionEvent, m as ConnectorProcessedEvent, n as ConnectorBuildContext, o as ConnectorOperationContext, p as ConnectorDiagnosticLog, r as ConnectorDescriptor, s as ConnectorUpdateContext, t as ConnectorAdapterDeps, u as ConnectorConnectionQuery, v as ConnectorRawEvent, w as connectorConnectionEventSchema, x as StoredConnectionEvent, y as ConnectorRawQuery, z as RunResult } from "./connector-descriptor-6SXJoszo.js";
|
|
5
|
+
import { n as FunnelFileSystem, t as FileStat } from "./file-system-o51IsM0W.js";
|
|
6
|
+
import { t as FunnelProfiles } from "./profiles-Cy5wXQ0L.js";
|
|
7
|
+
import { a as FunnelLocalConfig, i as FunnelTokenPrompter, n as FunnelLocalConfigSync } from "./local-config-sync-Dh1Croqe.js";
|
|
8
|
+
import { a as FunnelConnectorRegistry, i as FunnelClock, n as ChannelConnectorView, r as FunnelChannels, t as AddConnectorInput } from "./channels-2g_BU1N0.js";
|
|
9
|
+
import { a as DiagnosticsGatewayProbe, c as FunnelDiagnostics, d as DiagnosticEvent, f as previewOf, g as ConnectorDiagnosticSqlReader, h as toDiagnosticEvent, i as DiagnosticsChannelSource, l as ReplayResult, m as toDiagnosticConnectionError, n as DiagnoseAllReport, o as DiagnosticsPublisher, p as queryRows, r as DiagnosisStatus, s as DiagnosticsTokenReader, t as ChannelDiagnosis, u as DiagnosticConnectionError } from "./funnel-diagnostics-DpXOsCty.js";
|
|
10
|
+
import { n as FunnelDocs, t as DocsTopicListing } from "./funnel-docs-CNklHvbt.js";
|
|
11
|
+
import { a as RecoveryListenerControl, i as RecoveryGatewayControl, n as RecoveryAction, o as RecoveryResult, r as RecoveryChannelSource, t as FunnelRecovery } from "./funnel-recovery-DnLrdWO9.js";
|
|
12
|
+
import { n as DoctorReport, r as FunnelDoctor, t as DoctorFixMode } from "./funnel-doctor-CZf_0Luq.js";
|
|
13
|
+
import { n as HttpRequest, r as HttpResponse, t as FunnelHttpClient } from "./http-client-oICicjuO.js";
|
|
14
|
+
import { A as FunnelBroadcaster, C as funnelEventSchema, D as FunnelListenerSupervisor, E as GatewayRouteDeps, M as OnFunnelError, O as BroadcastEvent, S as FunnelEventRecord, T as GatewayEmitInput, _ as channelWsUrl, a as SqliteFunnelEventLog, b as FunnelEvent, c as PublishResponse, d as publishResponseSchema, f as DEFAULT_GATEWAY_TOKEN_PATH, g as channelWsProtocols, h as ChannelWsUrlInput, i as MemoryFunnelEventLog, j as ReplayableEvent, k as BroadcastSubscriber, l as PublishResult, m as gatewayLoopbackUrl, n as MemoryConnectorDiagnosticLog, o as FunnelChannelPublisher, p as FunnelGatewayToken, r as SqliteConnectorDiagnosticLog, s as PublishRequest, t as GatewayApp, u as publishRequestSchema, v as FunnelGatewayServer, w as Env$1, x as FunnelEventLog, y as GatewayEventStore } from "./index-CgY8NdMz.js";
|
|
15
|
+
import { hc } from "hono/client";
|
|
16
|
+
import { z } from "zod";
|
|
17
|
+
import * as _$hono_factory0 from "hono/factory";
|
|
18
|
+
import { Hono } from "hono";
|
|
19
|
+
import * as _$hono_utils_http_status0 from "hono/utils/http-status";
|
|
20
|
+
import * as _$hono_hono_base0 from "hono/hono-base";
|
|
21
|
+
|
|
22
|
+
//#region lib/gateway/gateway.d.ts
|
|
23
|
+
type Deps$3 = {
|
|
24
|
+
process?: FunnelProcessRunner;
|
|
25
|
+
fs?: FunnelFileSystem;
|
|
26
|
+
clock?: FunnelClock;
|
|
27
|
+
dir?: string;
|
|
28
|
+
tmpDir?: string;
|
|
29
|
+
port?: number;
|
|
30
|
+
sleep?: (ms: number) => Promise<void>;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Manages the gateway daemon as a separate process via PID file.
|
|
34
|
+
* Use `start()` to spawn `bun daemon.ts` in the background and `stop()` to
|
|
35
|
+
* terminate it. For an in-process gateway, use `Funnel.gatewayServer` instead.
|
|
36
|
+
*/
|
|
37
|
+
declare class FunnelGateway {
|
|
38
|
+
private readonly process;
|
|
39
|
+
private readonly fs;
|
|
40
|
+
private readonly clock;
|
|
41
|
+
private readonly dir;
|
|
42
|
+
private readonly pidFile;
|
|
43
|
+
private readonly gatewayLog;
|
|
44
|
+
private readonly tmpDir;
|
|
45
|
+
private readonly port;
|
|
46
|
+
private readonly sleep;
|
|
47
|
+
constructor(deps?: Deps$3);
|
|
48
|
+
isRunning(): boolean;
|
|
49
|
+
getStatus(): {
|
|
50
|
+
running: boolean;
|
|
51
|
+
pid: number | null;
|
|
52
|
+
port: number;
|
|
53
|
+
};
|
|
54
|
+
start(options?: {
|
|
55
|
+
caffeinate?: boolean;
|
|
56
|
+
}): Promise<boolean>;
|
|
57
|
+
buildStartCommand(gatewayScript: string, options?: {
|
|
58
|
+
caffeinate?: boolean;
|
|
59
|
+
}): string[];
|
|
60
|
+
stop(): Promise<boolean>;
|
|
61
|
+
restart(options?: {
|
|
62
|
+
onlyIfRunning?: boolean;
|
|
63
|
+
caffeinate?: boolean;
|
|
64
|
+
}): Promise<{
|
|
65
|
+
ok: boolean;
|
|
66
|
+
wasRunning: boolean;
|
|
67
|
+
stopped: boolean;
|
|
68
|
+
started: boolean;
|
|
69
|
+
}>;
|
|
70
|
+
getGatewayLog(): string;
|
|
71
|
+
getPort(): number;
|
|
72
|
+
private readPid;
|
|
73
|
+
private removePid;
|
|
74
|
+
private isProcessAlive;
|
|
75
|
+
}
|
|
76
|
+
//#endregion
|
|
77
|
+
//#region lib/gateway/listeners-client.d.ts
|
|
78
|
+
type Deps$2 = {
|
|
79
|
+
port: number;
|
|
80
|
+
isDaemonRunning: () => boolean; /** Returns the daemon's gateway token, or null if unavailable. Sent as `Authorization: Bearer`. */
|
|
81
|
+
getToken?: () => string | null;
|
|
82
|
+
};
|
|
83
|
+
declare const listenerEntrySchema: z.ZodObject<{
|
|
84
|
+
channelName: z.ZodString;
|
|
85
|
+
channelId: z.ZodString;
|
|
86
|
+
name: z.ZodString;
|
|
87
|
+
type: z.ZodString;
|
|
88
|
+
alive: z.ZodBoolean;
|
|
89
|
+
}, z.core.$strip>;
|
|
90
|
+
type ListenerEntry = z.infer<typeof listenerEntrySchema>;
|
|
91
|
+
type ListenerOpResult = {
|
|
92
|
+
state: "ok";
|
|
93
|
+
} | {
|
|
94
|
+
state: "offline";
|
|
95
|
+
} | {
|
|
96
|
+
state: "error";
|
|
97
|
+
reason: string;
|
|
98
|
+
};
|
|
99
|
+
type ListListenersResult = {
|
|
100
|
+
state: "ok";
|
|
101
|
+
listeners: ListenerEntry[];
|
|
102
|
+
} | {
|
|
103
|
+
state: "offline";
|
|
104
|
+
} | {
|
|
105
|
+
state: "error";
|
|
106
|
+
reason: string;
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* HTTP client for listener operations on a running gateway daemon.
|
|
110
|
+
*
|
|
111
|
+
* Returns `{ state: "offline" }` when the daemon isn't running so callers
|
|
112
|
+
* (CLI hot-reload paths) can treat that as a no-op without parsing strings.
|
|
113
|
+
* Pair this with `FunnelGateway` (process control) for the full picture.
|
|
114
|
+
*/
|
|
115
|
+
declare class FunnelListenersClient {
|
|
116
|
+
private readonly port;
|
|
117
|
+
private readonly isDaemonRunning;
|
|
118
|
+
private readonly getToken;
|
|
119
|
+
constructor(deps: Deps$2);
|
|
120
|
+
list(): Promise<ListListenersResult>;
|
|
121
|
+
start(channelName: string, connectorName: string): Promise<ListenerOpResult>;
|
|
122
|
+
stop(channelName: string, connectorName: string): Promise<ListenerOpResult>;
|
|
123
|
+
restart(channelName: string, connectorName: string): Promise<ListenerOpResult>;
|
|
124
|
+
private path;
|
|
125
|
+
private authHeaders;
|
|
126
|
+
private call;
|
|
127
|
+
}
|
|
128
|
+
//#endregion
|
|
129
|
+
//#region lib/funnel.d.ts
|
|
130
|
+
type Props$4 = {
|
|
131
|
+
/** 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. */
|
|
132
|
+
fs?: FunnelFileSystem; /** Process runner used by gateway / claude / gh listener. Replace with MemoryFunnelProcessRunner for tests. */
|
|
133
|
+
process?: FunnelProcessRunner; /** Logger flowed into every facet. Replace with MemoryFunnelLogger or NoopFunnelLogger to silence/inspect. */
|
|
134
|
+
logger?: FunnelLogger; /** Clock used by schedule listener, gh poll watermarks, and gateway timeouts. */
|
|
135
|
+
clock?: FunnelClock; /** ID generator for channel and connector ids. Use MemoryFunnelIdGenerator for deterministic tests. */
|
|
136
|
+
idGenerator?: FunnelIdGenerator; /** Funnel home directory (settings.json + per-channel/per-connector dirs). Defaults to ~/.funnel. */
|
|
137
|
+
dir?: string; /** Temp / runtime directory (gateway logs and PID adjacent files). Defaults to `<os.tmpdir()>/funnel`. */
|
|
138
|
+
tmpDir?: string;
|
|
139
|
+
/**
|
|
140
|
+
* Connector types this funnel handles, passed as descriptors. Core imports no
|
|
141
|
+
* connector, so a type's (heavy) listener/adapter code is bundled only when its
|
|
142
|
+
* descriptor is imported and listed here. Import from the per-type sub-entries:
|
|
143
|
+
* `import { slackConnector } from "@interactive-inc/claude-funnel/connectors/slack"`.
|
|
144
|
+
* Type-specific launch hooks (Slack `onAppCreated`/`preprocessEvent`, Schedule
|
|
145
|
+
* `onFired`) are passed to the descriptor factory, e.g. `slackConnector({ onAppCreated })`.
|
|
146
|
+
* Defaults to `[]` — no connectors handled.
|
|
147
|
+
*/
|
|
148
|
+
connectors?: ConnectorDescriptor[];
|
|
149
|
+
/**
|
|
150
|
+
* Diagnostic log of inbound connector traffic (raw events before filtering
|
|
151
|
+
* and the processor's verdict after). Threaded into listeners that record
|
|
152
|
+
* it. Only the gateway daemon injects a `SqliteConnectorDiagnosticLog`; everywhere
|
|
153
|
+
* else this stays absent and recording is a no-op.
|
|
154
|
+
*/
|
|
155
|
+
diagnosticLog?: ConnectorDiagnosticLog;
|
|
156
|
+
/**
|
|
157
|
+
* Called when Funnel catches an exception that would otherwise be silently
|
|
158
|
+
* swallowed (subscriber throw, listener start/stop failure, etc.). Pass
|
|
159
|
+
* `Sentry.captureException` from the host to surface these. Defaults to no-op.
|
|
160
|
+
*/
|
|
161
|
+
onError?: OnFunnelError;
|
|
162
|
+
/**
|
|
163
|
+
* Gateway daemon port. Passed directly to FunnelGateway so hosts can override
|
|
164
|
+
* the default (9742) without setting FUNNEL_PORT in the environment.
|
|
165
|
+
*/
|
|
166
|
+
port?: number;
|
|
167
|
+
/**
|
|
168
|
+
* Token prompter used by FunnelLocalConfigSync when funnel.json omits a token.
|
|
169
|
+
* Defaults to a TTY-only stdin prompter. Inject MemoryFunnelTokenPrompter in tests.
|
|
170
|
+
*/
|
|
171
|
+
tokenPrompter?: FunnelTokenPrompter;
|
|
172
|
+
};
|
|
173
|
+
/**
|
|
174
|
+
* Options for `Funnel.gatewayServer()`. The event store is a union (`dbPath`
|
|
175
|
+
* xor `eventLog`) so the two storage modes can't be mixed.
|
|
176
|
+
*/
|
|
177
|
+
type GatewayServerOptions = GatewayEventStore & {
|
|
178
|
+
port?: number;
|
|
179
|
+
hostname?: string;
|
|
180
|
+
killCompetingSlack?: boolean;
|
|
181
|
+
token?: string; /** Permit a non-loopback `hostname` without a token. See FunnelGatewayServer. */
|
|
182
|
+
allowInsecureHost?: boolean;
|
|
183
|
+
extraRoutes?: Hono<Env$1>;
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* Facade that wires every funnel facet together and exposes the public surface.
|
|
187
|
+
*
|
|
188
|
+
* All side-effecting boundaries (filesystem, process, logger, clock, id, paths)
|
|
189
|
+
* are injected via Props — passing memory implementations gives a fully sandboxed
|
|
190
|
+
* Funnel that touches no real disk, processes, or wall-clock time.
|
|
191
|
+
*
|
|
192
|
+
* Fully immutable: all fields are resolved in the constructor and frozen.
|
|
193
|
+
* No lazy initialisation — every dependency is wired at construction time.
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* ```ts
|
|
197
|
+
* import { slackConnector } from "@interactive-inc/claude-funnel/connectors/slack"
|
|
198
|
+
*
|
|
199
|
+
* const funnel = new Funnel({ connectors: [slackConnector()] })
|
|
200
|
+
* const channel = funnel.channels.add({ name: "inbox" })
|
|
201
|
+
* funnel.channels.addConnector("inbox", { type: "slack", name: "ops", botToken, appToken })
|
|
202
|
+
* await funnel.gatewayServer({ port: 9742 }).start()
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
declare class Funnel {
|
|
206
|
+
readonly paths: {
|
|
207
|
+
dir: string;
|
|
208
|
+
tmpDir: string;
|
|
209
|
+
settings: string;
|
|
210
|
+
};
|
|
211
|
+
readonly channels: FunnelChannels;
|
|
212
|
+
readonly gateway: FunnelGateway;
|
|
213
|
+
readonly gatewayToken: FunnelGatewayToken;
|
|
214
|
+
readonly publisher: FunnelChannelPublisher;
|
|
215
|
+
readonly listeners: FunnelListenersClient;
|
|
216
|
+
readonly claude: FunnelClaude;
|
|
217
|
+
readonly profiles: FunnelProfiles;
|
|
218
|
+
readonly localConfig: FunnelLocalConfig;
|
|
219
|
+
readonly localConfigSync: FunnelLocalConfigSync;
|
|
220
|
+
readonly diagnostics: FunnelDiagnostics;
|
|
221
|
+
readonly recovery: FunnelRecovery;
|
|
222
|
+
readonly doctor: FunnelDoctor;
|
|
223
|
+
readonly docs: FunnelDocs;
|
|
224
|
+
private readonly fs;
|
|
225
|
+
private readonly process;
|
|
226
|
+
private readonly logger;
|
|
227
|
+
private readonly clock;
|
|
228
|
+
private readonly onError;
|
|
229
|
+
constructor(props?: Props$4);
|
|
230
|
+
/**
|
|
231
|
+
* Sandboxed Funnel wired with in-memory implementations for every IO boundary.
|
|
232
|
+
* Touches no real disk, processes, wall-clock time, or UUIDs — safe for tests
|
|
233
|
+
* and ad-hoc experiments. Override individual fields by passing them in `props`.
|
|
234
|
+
*/
|
|
235
|
+
static inMemory(props?: Props$4): Funnel;
|
|
236
|
+
/**
|
|
237
|
+
* In-process gateway server. Unlike `gateway.start()` (which spawns a daemon),
|
|
238
|
+
* this returns a class that runs `Bun.serve` + listeners inside the current process —
|
|
239
|
+
* useful for tests, embedding, or custom hosts.
|
|
240
|
+
*/
|
|
241
|
+
gatewayServer(options?: GatewayServerOptions): FunnelGatewayServer;
|
|
242
|
+
/**
|
|
243
|
+
* Create a ProcessGuard scoped to this Funnel's home directory.
|
|
244
|
+
* Useful for hosts that need to check or manage singleton PID files
|
|
245
|
+
* independently of FunnelClaude (e.g. checking if a named profile is running).
|
|
246
|
+
*/
|
|
247
|
+
createProcessGuard(): FileProcessGuard;
|
|
248
|
+
/**
|
|
249
|
+
* Run the gateway daemon in the foreground (tied to this terminal).
|
|
250
|
+
* For background daemon management, use `funnel.gateway.start()` instead.
|
|
251
|
+
*/
|
|
252
|
+
runGatewayForeground(options?: {
|
|
253
|
+
caffeinate?: boolean;
|
|
254
|
+
}): Promise<number>;
|
|
255
|
+
gatewayClient(): ReturnType<typeof hc<GatewayApp>>;
|
|
256
|
+
}
|
|
257
|
+
//#endregion
|
|
258
|
+
//#region lib/engine/settings/settings-store.d.ts
|
|
259
|
+
/**
|
|
260
|
+
* Resolves the funnel home dir. Defaults to `~/.funnel`, overridable via
|
|
261
|
+
* `FUNNEL_DIR` so a funnel.json-scoped launch can point everything (settings,
|
|
262
|
+
* gateway pid/token, claude pids) at a repo-local `<repo>/.funnel` and never
|
|
263
|
+
* touch the global home. Read at call time, not module load, so a daemon
|
|
264
|
+
* spawned with the env set resolves the override.
|
|
265
|
+
*/
|
|
266
|
+
declare function resolveFunnelDir(): string;
|
|
267
|
+
declare const DEFAULT_GATEWAY_PORT = 9742;
|
|
268
|
+
/**
|
|
269
|
+
* Resolves the gateway port. Defaults to 9742 — the port a programmatically
|
|
270
|
+
* hosted gateway (`new Funnel().gatewayServer()`) uses. The `funnel` CLI entry
|
|
271
|
+
* sets `FUNNEL_PORT` to a distinct default so a CLI launch never collides with
|
|
272
|
+
* an embedding app's gateway on 9742. Read at call time so a daemon spawned
|
|
273
|
+
* with the env set resolves the override.
|
|
274
|
+
*/
|
|
275
|
+
declare function resolveFunnelPort(): number;
|
|
276
|
+
declare const FUNNEL_DIR: string;
|
|
277
|
+
declare const SETTINGS_PATH: string;
|
|
278
|
+
type Deps$1 = {
|
|
279
|
+
path?: string;
|
|
280
|
+
fs?: FunnelFileSystem;
|
|
281
|
+
idGenerator?: FunnelIdGenerator;
|
|
282
|
+
};
|
|
283
|
+
declare class FunnelSettingsStore extends FunnelSettingsReader {
|
|
284
|
+
private readonly path;
|
|
285
|
+
private readonly fs;
|
|
286
|
+
private readonly idGenerator;
|
|
287
|
+
constructor(deps?: Deps$1);
|
|
288
|
+
read(): Settings;
|
|
289
|
+
private looksLikeLegacy;
|
|
290
|
+
/**
|
|
291
|
+
* Non-destructive migration for profiles written before `id` existed. Mints a
|
|
292
|
+
* uuid for each profile lacking one and returns whether anything was minted, so
|
|
293
|
+
* `read` can persist it immediately — a profile id must be STABLE across reads,
|
|
294
|
+
* otherwise `setSessionId` (a second read) sees a different id and can't match
|
|
295
|
+
* the one the launch used. Mutates `parsed` in place (freshly JSON-parsed).
|
|
296
|
+
*/
|
|
297
|
+
private backfillProfileIds;
|
|
298
|
+
write(settings: Settings): void;
|
|
299
|
+
}
|
|
300
|
+
//#endregion
|
|
301
|
+
//#region lib/engine/settings/mock-settings-reader.d.ts
|
|
302
|
+
declare const createSettings: (partial?: Partial<Settings>) => Settings;
|
|
303
|
+
declare class MockFunnelSettingsReader extends FunnelSettingsReader {
|
|
304
|
+
private state;
|
|
305
|
+
constructor(initial?: Partial<Settings>);
|
|
306
|
+
read(): Settings;
|
|
307
|
+
write(settings: Settings): void;
|
|
308
|
+
}
|
|
309
|
+
//#endregion
|
|
310
|
+
//#region lib/engine/fs/node-file-system.d.ts
|
|
311
|
+
declare class NodeFunnelFileSystem extends FunnelFileSystem {
|
|
312
|
+
constructor();
|
|
313
|
+
existsSync(path: string): boolean;
|
|
314
|
+
readFileSync(path: string): string;
|
|
315
|
+
writeFileSync(path: string, data: string): void;
|
|
316
|
+
writeSecretFileSync(path: string, data: string): void;
|
|
317
|
+
appendFileSync(path: string, data: string): void;
|
|
318
|
+
unlink(path: string): void;
|
|
319
|
+
mkdirSync(path: string, options?: {
|
|
320
|
+
recursive?: boolean;
|
|
321
|
+
}): void;
|
|
322
|
+
readdirSync(path: string): string[];
|
|
323
|
+
statSync(path: string): FileStat;
|
|
324
|
+
}
|
|
325
|
+
//#endregion
|
|
326
|
+
//#region lib/engine/fs/memory-file-system.d.ts
|
|
327
|
+
type Props$3 = {
|
|
328
|
+
dirs?: string[];
|
|
329
|
+
files?: Record<string, string>;
|
|
330
|
+
mtimes?: Record<string, number>;
|
|
331
|
+
modes?: Record<string, number>;
|
|
332
|
+
now?: () => number;
|
|
333
|
+
};
|
|
334
|
+
declare class MemoryFunnelFileSystem extends FunnelFileSystem {
|
|
335
|
+
private readonly dirs;
|
|
336
|
+
private readonly files;
|
|
337
|
+
private readonly mtimes;
|
|
338
|
+
private readonly modes;
|
|
339
|
+
private readonly now;
|
|
340
|
+
constructor(props?: Props$3);
|
|
341
|
+
existsSync(path: string): boolean;
|
|
342
|
+
readFileSync(path: string): string;
|
|
343
|
+
writeFileSync(path: string, data: string): void;
|
|
344
|
+
writeSecretFileSync(path: string, data: string): void;
|
|
345
|
+
appendFileSync(path: string, data: string): void;
|
|
346
|
+
unlink(path: string): void;
|
|
347
|
+
mkdirSync(path: string, options?: {
|
|
348
|
+
recursive?: boolean;
|
|
349
|
+
}): void;
|
|
350
|
+
readdirSync(path: string): string[];
|
|
351
|
+
statSync(path: string): FileStat;
|
|
352
|
+
setMtime(path: string, mtimeMs: number): void;
|
|
353
|
+
setMode(path: string, mode: number): void;
|
|
354
|
+
private touch;
|
|
355
|
+
}
|
|
356
|
+
//#endregion
|
|
357
|
+
//#region lib/engine/process/node-process-runner.d.ts
|
|
358
|
+
declare class NodeFunnelProcessRunner extends FunnelProcessRunner {
|
|
359
|
+
constructor();
|
|
360
|
+
runSync(command: string[]): RunResult;
|
|
361
|
+
run(command: string[], options?: RunOptions): Promise<RunResult>;
|
|
362
|
+
attach(command: string[], options?: AttachOptions): Promise<number>;
|
|
363
|
+
detach(command: string[], options?: DetachOptions): void;
|
|
364
|
+
kill(pid: number, signal?: string): void;
|
|
365
|
+
isAlive(pid: number): boolean;
|
|
366
|
+
listProcessesContaining(marker: string): ProcessSnapshot[];
|
|
367
|
+
getStartTime(pid: number): string | null;
|
|
368
|
+
private isAlivePosix;
|
|
369
|
+
private isAliveWindows;
|
|
370
|
+
private listProcessesContainingPosix;
|
|
371
|
+
private getStartTimePosix;
|
|
372
|
+
private getStartTimeWindows;
|
|
373
|
+
private listProcessesContainingWindows;
|
|
374
|
+
}
|
|
375
|
+
//#endregion
|
|
376
|
+
//#region lib/engine/process/memory-process-runner.d.ts
|
|
377
|
+
type MemoryProcessResponse = {
|
|
378
|
+
exitCode?: number;
|
|
379
|
+
stdout?: string;
|
|
380
|
+
stderr?: string;
|
|
381
|
+
};
|
|
382
|
+
type MemoryProcessHandler = (command: string[]) => MemoryProcessResponse | Promise<MemoryProcessResponse>;
|
|
383
|
+
type MemoryProcessSyncHandler = (command: string[]) => MemoryProcessResponse;
|
|
384
|
+
type MemoryProcessCall = {
|
|
385
|
+
kind: "run";
|
|
386
|
+
command: string[];
|
|
387
|
+
options: RunOptions;
|
|
388
|
+
} | {
|
|
389
|
+
kind: "runSync";
|
|
390
|
+
command: string[];
|
|
391
|
+
} | {
|
|
392
|
+
kind: "attach";
|
|
393
|
+
command: string[];
|
|
394
|
+
options: AttachOptions;
|
|
395
|
+
} | {
|
|
396
|
+
kind: "detach";
|
|
397
|
+
command: string[];
|
|
398
|
+
options: DetachOptions;
|
|
399
|
+
} | {
|
|
400
|
+
kind: "kill";
|
|
401
|
+
command: string[];
|
|
402
|
+
};
|
|
403
|
+
type AliveStub = (pid: number) => boolean;
|
|
404
|
+
type ProcessListStub = (marker: string) => ProcessSnapshot[];
|
|
405
|
+
type StartTimeStub = (pid: number) => string | null;
|
|
406
|
+
declare class MemoryFunnelProcessRunner extends FunnelProcessRunner {
|
|
407
|
+
readonly calls: MemoryProcessCall[];
|
|
408
|
+
readonly killed: {
|
|
409
|
+
pid: number;
|
|
410
|
+
signal: string;
|
|
411
|
+
}[];
|
|
412
|
+
private handler;
|
|
413
|
+
private syncHandler;
|
|
414
|
+
private aliveStub;
|
|
415
|
+
private listStub;
|
|
416
|
+
private startTimeStub;
|
|
417
|
+
on(handler: MemoryProcessHandler): this;
|
|
418
|
+
onSync(handler: MemoryProcessSyncHandler): this;
|
|
419
|
+
onIsAlive(stub: AliveStub): this;
|
|
420
|
+
onListProcessesContaining(stub: ProcessListStub): this;
|
|
421
|
+
onGetStartTime(stub: StartTimeStub): this;
|
|
422
|
+
run(command: string[], options?: RunOptions): Promise<RunResult>;
|
|
423
|
+
runSync(command: string[]): RunResult;
|
|
424
|
+
attach(command: string[], options?: AttachOptions): Promise<number>;
|
|
425
|
+
detach(command: string[], options?: DetachOptions): void;
|
|
426
|
+
kill(pid: number, signal?: string): void;
|
|
427
|
+
isAlive(pid: number): boolean;
|
|
428
|
+
listProcessesContaining(marker: string): ProcessSnapshot[];
|
|
429
|
+
getStartTime(pid: number): string | null;
|
|
430
|
+
}
|
|
431
|
+
//#endregion
|
|
432
|
+
//#region lib/engine/logger/node-logger.d.ts
|
|
433
|
+
type Props$2 = {
|
|
434
|
+
file?: string;
|
|
435
|
+
now?: () => Date;
|
|
436
|
+
};
|
|
437
|
+
declare class NodeFunnelLogger extends FunnelLogger {
|
|
438
|
+
readonly file: string;
|
|
439
|
+
private readonly now;
|
|
440
|
+
constructor(props?: Props$2);
|
|
441
|
+
info(message: string, meta?: Record<string, unknown>): void;
|
|
442
|
+
warn(message: string, meta?: Record<string, unknown>): void;
|
|
443
|
+
error(message: string, meta?: Record<string, unknown>): void;
|
|
444
|
+
private write;
|
|
445
|
+
}
|
|
446
|
+
//#endregion
|
|
447
|
+
//#region lib/engine/logger/memory-logger.d.ts
|
|
448
|
+
type LogEntry = {
|
|
449
|
+
level: "info" | "warn" | "error";
|
|
450
|
+
message: string;
|
|
451
|
+
meta?: Record<string, unknown>;
|
|
452
|
+
};
|
|
453
|
+
declare class MemoryFunnelLogger extends FunnelLogger {
|
|
454
|
+
readonly file: null;
|
|
455
|
+
readonly entries: LogEntry[];
|
|
456
|
+
info(message: string, meta?: Record<string, unknown>): void;
|
|
457
|
+
warn(message: string, meta?: Record<string, unknown>): void;
|
|
458
|
+
error(message: string, meta?: Record<string, unknown>): void;
|
|
459
|
+
clear(): void;
|
|
460
|
+
}
|
|
461
|
+
//#endregion
|
|
462
|
+
//#region lib/engine/logger/noop-logger.d.ts
|
|
463
|
+
declare class NoopFunnelLogger extends FunnelLogger {
|
|
464
|
+
readonly file: null;
|
|
465
|
+
info(): void;
|
|
466
|
+
warn(): void;
|
|
467
|
+
error(): void;
|
|
468
|
+
}
|
|
469
|
+
//#endregion
|
|
470
|
+
//#region lib/engine/time/node-clock.d.ts
|
|
471
|
+
declare class NodeFunnelClock extends FunnelClock {
|
|
472
|
+
now(): Date;
|
|
473
|
+
}
|
|
474
|
+
//#endregion
|
|
475
|
+
//#region lib/engine/time/memory-clock.d.ts
|
|
476
|
+
type Props$1 = {
|
|
477
|
+
start?: Date;
|
|
478
|
+
};
|
|
479
|
+
declare class MemoryFunnelClock extends FunnelClock {
|
|
480
|
+
private current;
|
|
481
|
+
constructor(props?: Props$1);
|
|
482
|
+
now(): Date;
|
|
483
|
+
set(date: Date): void;
|
|
484
|
+
advance(ms: number): void;
|
|
485
|
+
}
|
|
486
|
+
//#endregion
|
|
487
|
+
//#region lib/engine/id/node-id-generator.d.ts
|
|
488
|
+
declare class NodeFunnelIdGenerator extends FunnelIdGenerator {
|
|
489
|
+
generate(): string;
|
|
490
|
+
}
|
|
491
|
+
//#endregion
|
|
492
|
+
//#region lib/engine/id/memory-id-generator.d.ts
|
|
493
|
+
type Props = {
|
|
494
|
+
prefix?: string;
|
|
495
|
+
};
|
|
496
|
+
declare class MemoryFunnelIdGenerator extends FunnelIdGenerator {
|
|
497
|
+
private counter;
|
|
498
|
+
private readonly prefix;
|
|
499
|
+
constructor(props?: Props);
|
|
500
|
+
generate(): string;
|
|
501
|
+
}
|
|
502
|
+
//#endregion
|
|
503
|
+
//#region lib/engine/http/node-http-client.d.ts
|
|
504
|
+
declare class NodeFunnelHttpClient extends FunnelHttpClient {
|
|
505
|
+
constructor();
|
|
506
|
+
fetch(request: HttpRequest): Promise<HttpResponse>;
|
|
507
|
+
}
|
|
508
|
+
//#endregion
|
|
509
|
+
//#region lib/engine/http/memory-http-client.d.ts
|
|
510
|
+
type MemoryHttpResponse = {
|
|
511
|
+
status?: number;
|
|
512
|
+
body?: string;
|
|
513
|
+
};
|
|
514
|
+
type MemoryHttpHandler = (request: HttpRequest) => MemoryHttpResponse | Promise<MemoryHttpResponse>;
|
|
515
|
+
declare class MemoryFunnelHttpClient extends FunnelHttpClient {
|
|
516
|
+
readonly calls: HttpRequest[];
|
|
517
|
+
private handler;
|
|
518
|
+
on(handler: MemoryHttpHandler): this;
|
|
519
|
+
fetch(request: HttpRequest): Promise<HttpResponse>;
|
|
520
|
+
}
|
|
521
|
+
//#endregion
|
|
522
|
+
//#region lib/gateway/service-routes.d.ts
|
|
523
|
+
type Deps = {
|
|
524
|
+
diagnostics: FunnelDiagnostics;
|
|
525
|
+
doctor: FunnelDoctor; /** Bearer token to gate every endpoint. Empty string disables auth (tests only). */
|
|
526
|
+
token: string;
|
|
527
|
+
};
|
|
528
|
+
/**
|
|
529
|
+
* Mountable Hono app that exposes the service layer (`FunnelDiagnostics` +
|
|
530
|
+
* `FunnelDoctor`) over loopback HTTP. The MCP server, which lives in a
|
|
531
|
+
* different process, calls these endpoints to drive the autonomous
|
|
532
|
+
* troubleshooting loop. The CLI bypasses HTTP and calls the same services
|
|
533
|
+
* directly through the in-process funnel facade, so CLI and MCP share one
|
|
534
|
+
* code path.
|
|
535
|
+
*/
|
|
536
|
+
declare const buildServiceRoutes: (deps: Deps) => Hono<Env$1>;
|
|
537
|
+
//#endregion
|
|
538
|
+
//#region lib/cli/factory.d.ts
|
|
539
|
+
type Env = {
|
|
540
|
+
Bindings: {
|
|
541
|
+
funnel: Funnel;
|
|
542
|
+
claude: FunnelClaude;
|
|
543
|
+
profiles: FunnelProfiles;
|
|
544
|
+
localConfig: FunnelLocalConfig;
|
|
545
|
+
localConfigSync: FunnelLocalConfigSync;
|
|
546
|
+
};
|
|
547
|
+
};
|
|
548
|
+
declare const factory: _$hono_factory0.Factory<Env, string>;
|
|
549
|
+
//#endregion
|
|
550
|
+
//#region lib/cli/router/to-request.d.ts
|
|
551
|
+
declare const toRequest: (args: string[]) => {
|
|
552
|
+
method: string;
|
|
553
|
+
path: string;
|
|
554
|
+
url: string;
|
|
555
|
+
};
|
|
556
|
+
//#endregion
|
|
557
|
+
//#region lib/cli/router/query-to-cli-args.d.ts
|
|
558
|
+
declare const queryToCliArgs: (url: string, reservedKeys?: string[]) => string[];
|
|
559
|
+
//#endregion
|
|
560
|
+
//#region lib/cli/routes/index.d.ts
|
|
561
|
+
declare const routes: _$hono_hono_base0.HonoBase<Env, {
|
|
562
|
+
"/claude": {
|
|
563
|
+
$get: {
|
|
564
|
+
input: {
|
|
565
|
+
query: {
|
|
566
|
+
[x: string]: string | string[];
|
|
567
|
+
profile?: string | undefined;
|
|
568
|
+
channel?: string | undefined;
|
|
569
|
+
};
|
|
570
|
+
};
|
|
571
|
+
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.\n\nsee also:\n fnl docs claude full resolution order, side effects, double-launch guard\n fnl docs mcp what the MCP server exposes once Claude is up\n fnl docs debugging the diagnose → recover → verify loop\n\nprogrammable: funnel.claude.launch({ profileId | channelId, options, env, resume })";
|
|
572
|
+
outputFormat: "text";
|
|
573
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
574
|
+
};
|
|
575
|
+
};
|
|
576
|
+
} & {
|
|
577
|
+
"/channels": {
|
|
578
|
+
$get: {
|
|
579
|
+
input: {};
|
|
580
|
+
output: string;
|
|
581
|
+
outputFormat: "text";
|
|
582
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
583
|
+
};
|
|
584
|
+
};
|
|
585
|
+
} & {
|
|
586
|
+
"/channels/add": {
|
|
587
|
+
$post: {
|
|
588
|
+
input: {};
|
|
589
|
+
output: "funnel channels add — add a channel\n\nusage: funnel channels add <name> [--delivery fanout|exclusive]\n\noptions:\n --delivery routing mode (default fanout):\n fanout every connected client receives every event\n exclusive each event delivered to exactly one client (round-robin)\n\nA channel is a named event stream. After creating it, add connectors\n(Slack, Discord, GitHub, schedule) to feed events into it, then connect\nClaude Code clients to consume them.\n\nexamples:\n funnel channels add production\n funnel channels add ci-events --delivery exclusive\n\nsee also: funnel channels, funnel channels <name> connectors add";
|
|
590
|
+
outputFormat: "text";
|
|
591
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
592
|
+
};
|
|
593
|
+
};
|
|
594
|
+
} & {
|
|
595
|
+
"/channels/add/:channel": {
|
|
596
|
+
$post: {
|
|
597
|
+
input: {
|
|
598
|
+
param: {
|
|
599
|
+
channel: string;
|
|
600
|
+
};
|
|
601
|
+
} & {
|
|
602
|
+
query: {
|
|
603
|
+
delivery?: "fanout" | "exclusive" | undefined;
|
|
604
|
+
};
|
|
605
|
+
};
|
|
606
|
+
output: `added channel "${string}" (id: ${string})`;
|
|
607
|
+
outputFormat: "text";
|
|
608
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
609
|
+
};
|
|
610
|
+
};
|
|
611
|
+
} & {
|
|
612
|
+
"/channels/remove": {
|
|
613
|
+
$post: {
|
|
614
|
+
input: {};
|
|
615
|
+
output: "funnel channels remove — remove a channel and all its connectors\n\nusage: funnel channels remove <name>\n\nThe channel, its connectors, and their schedules are deleted from the\nconfiguration file. The gateway drops the channel on the next reload.\nNo external resources (Slack apps, Discord bots, etc.) are touched.\n\nexamples:\n funnel channels remove staging\n\nsee also: funnel channels, funnel channels add";
|
|
616
|
+
outputFormat: "text";
|
|
617
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
618
|
+
};
|
|
619
|
+
};
|
|
620
|
+
} & {
|
|
621
|
+
"/channels/remove/:channel": {
|
|
622
|
+
$post: {
|
|
623
|
+
input: {
|
|
624
|
+
param: {
|
|
625
|
+
channel: string;
|
|
626
|
+
};
|
|
627
|
+
} & {
|
|
628
|
+
query: Record<string, never>;
|
|
629
|
+
};
|
|
630
|
+
output: `removed channel "${string}"`;
|
|
631
|
+
outputFormat: "text";
|
|
632
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
633
|
+
};
|
|
634
|
+
};
|
|
635
|
+
} & {
|
|
636
|
+
"/channels/rename/:channel/:newName": {
|
|
637
|
+
$post: {
|
|
638
|
+
input: {
|
|
639
|
+
param: {
|
|
640
|
+
channel: string;
|
|
641
|
+
newName: string;
|
|
642
|
+
};
|
|
643
|
+
} & {
|
|
644
|
+
query: Record<string, never>;
|
|
645
|
+
};
|
|
646
|
+
output: `renamed channel "${string}" to "${string}"`;
|
|
647
|
+
outputFormat: "text";
|
|
648
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
649
|
+
};
|
|
650
|
+
};
|
|
651
|
+
} & {
|
|
652
|
+
"/channels/:channel/rename/:newName": {
|
|
653
|
+
$post: {
|
|
654
|
+
input: {
|
|
655
|
+
param: {
|
|
656
|
+
channel: string;
|
|
657
|
+
newName: string;
|
|
658
|
+
};
|
|
659
|
+
} & {
|
|
660
|
+
query: Record<string, never>;
|
|
661
|
+
};
|
|
662
|
+
output: `renamed channel "${string}" to "${string}"`;
|
|
663
|
+
outputFormat: "text";
|
|
664
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
665
|
+
};
|
|
666
|
+
};
|
|
667
|
+
} & {
|
|
668
|
+
"/channels/rename": {
|
|
669
|
+
$post: {
|
|
670
|
+
input: {};
|
|
671
|
+
output: "funnel channels rename — rename a channel\n\nusage:\n funnel channels rename <old-channel-name> <new-channel-name>\n funnel channels <old-channel-name> rename <new-channel-name>\n\nRenames the channel in the configuration file. Connectors, schedules,\nand delivery mode are preserved. The gateway picks up the new name on\nthe next reload.\n\nexamples:\n funnel channels rename staging production\n funnel channels staging rename production\n\nsee also: funnel channels, funnel channels <name>";
|
|
672
|
+
outputFormat: "text";
|
|
673
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
674
|
+
};
|
|
675
|
+
};
|
|
676
|
+
} & {
|
|
677
|
+
"/channels/:channel/rename": {
|
|
678
|
+
$post: {
|
|
679
|
+
input: {
|
|
680
|
+
param: {
|
|
681
|
+
channel: string;
|
|
682
|
+
};
|
|
683
|
+
};
|
|
684
|
+
output: "funnel channels rename — rename a channel\n\nusage:\n funnel channels rename <old-channel-name> <new-channel-name>\n funnel channels <old-channel-name> rename <new-channel-name>\n\nRenames the channel in the configuration file. Connectors, schedules,\nand delivery mode are preserved. The gateway picks up the new name on\nthe next reload.\n\nexamples:\n funnel channels rename staging production\n funnel channels staging rename production\n\nsee also: funnel channels, funnel channels <name>";
|
|
685
|
+
outputFormat: "text";
|
|
686
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
687
|
+
};
|
|
688
|
+
};
|
|
689
|
+
} & {
|
|
690
|
+
"/channels/:channel/set/delivery/:mode": {
|
|
691
|
+
$post: {
|
|
692
|
+
input: {
|
|
693
|
+
param: {
|
|
694
|
+
channel: string;
|
|
695
|
+
mode: "fanout" | "exclusive";
|
|
696
|
+
};
|
|
697
|
+
};
|
|
698
|
+
output: `channel "${string}" delivery set to fanout` | `channel "${string}" delivery set to exclusive`;
|
|
699
|
+
outputFormat: "text";
|
|
700
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
701
|
+
};
|
|
702
|
+
};
|
|
703
|
+
} & {
|
|
704
|
+
"/channels/publish": {
|
|
705
|
+
$post: {
|
|
706
|
+
input: {};
|
|
707
|
+
output: "funnel channels <channel> publish — push arbitrary content into a channel\n\nusage: funnel channels <channel> publish --content=\"<text>\" [--connector=<name>] [--meta-<key>=<value> ...]\n\noptions:\n --content Required. The event body delivered to subscribers.\n --connector Optional. Stamp the event with a connector name (resolved to id when found).\n --meta-<key> Optional. Repeatable. Added to meta. Example: --meta-source=cron";
|
|
708
|
+
outputFormat: "text";
|
|
709
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
710
|
+
};
|
|
711
|
+
};
|
|
712
|
+
} & {
|
|
713
|
+
"/channels/:channel/publish": {
|
|
714
|
+
$post: {
|
|
715
|
+
input: {
|
|
716
|
+
param: {
|
|
717
|
+
channel: string;
|
|
718
|
+
};
|
|
719
|
+
} & {
|
|
720
|
+
query: {
|
|
721
|
+
[x: string]: string | string[];
|
|
722
|
+
content: string | string[];
|
|
723
|
+
connector?: string | undefined;
|
|
724
|
+
};
|
|
725
|
+
};
|
|
726
|
+
output: `published (offset=${number})`;
|
|
727
|
+
outputFormat: "text";
|
|
728
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
729
|
+
};
|
|
730
|
+
};
|
|
731
|
+
} & {
|
|
732
|
+
"/channels/:channel/validate": {
|
|
733
|
+
$get: {
|
|
734
|
+
input: {
|
|
735
|
+
param: {
|
|
736
|
+
channel: string;
|
|
737
|
+
};
|
|
738
|
+
} & {
|
|
739
|
+
query: Record<string, never>;
|
|
740
|
+
};
|
|
741
|
+
output: string;
|
|
742
|
+
outputFormat: "text";
|
|
743
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
744
|
+
};
|
|
745
|
+
};
|
|
746
|
+
} & {
|
|
747
|
+
"/channels/validate": {
|
|
748
|
+
$get: {
|
|
749
|
+
input: {};
|
|
750
|
+
output: "funnel channels <channel> validate — check connector configuration\n\nusage: funnel channels <channel> validate [--json]\n\noptions:\n --json output as JSON\n\nChecks that each connector has the required tokens and fields set.\nDoes not make any network calls — static config check only.\n\nexamples:\n funnel channels open-karte validate\n funnel channels open-karte validate --json";
|
|
751
|
+
outputFormat: "text";
|
|
752
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
753
|
+
};
|
|
754
|
+
};
|
|
755
|
+
} & {
|
|
756
|
+
"/channels/:channel": {
|
|
757
|
+
$get: {
|
|
758
|
+
input: {
|
|
759
|
+
param: {
|
|
760
|
+
channel: string;
|
|
761
|
+
};
|
|
762
|
+
};
|
|
763
|
+
output: string;
|
|
764
|
+
outputFormat: "text";
|
|
765
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
766
|
+
};
|
|
767
|
+
};
|
|
768
|
+
} & {
|
|
769
|
+
"/channels/:channel/connectors": {
|
|
770
|
+
$get: {
|
|
771
|
+
input: {
|
|
772
|
+
param: {
|
|
773
|
+
channel: string;
|
|
774
|
+
};
|
|
775
|
+
};
|
|
776
|
+
output: string;
|
|
777
|
+
outputFormat: "text";
|
|
778
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
779
|
+
};
|
|
780
|
+
};
|
|
781
|
+
} & {
|
|
782
|
+
"/channels/:channel/connectors/add": {
|
|
783
|
+
$post: {
|
|
784
|
+
input: {
|
|
785
|
+
param: {
|
|
786
|
+
channel: string;
|
|
787
|
+
};
|
|
788
|
+
};
|
|
789
|
+
output: "funnel channels <channel> connectors add <name> — add a connector to a channel\n\nusage:\n funnel channels <channel> connectors add <name> --type=slack --bot-token=xoxb-... --app-token=xapp-...\n funnel channels <channel> connectors add <name> --type=gh [--poll-interval=60]\n funnel channels <channel> connectors add <name> --type=discord --bot-token=...\n funnel channels <channel> connectors add <name> --type=schedule\n\nconnector types:\n slack Slack Socket Mode (requires bot-token + app-token)\n gh GitHub webhook polling\n discord Discord bot gateway\n schedule cron / one-shot timer (no external service)\n\nToken uniqueness is enforced across all channels — the same bot-token\ncannot appear in two connectors.\n\nexamples:\n funnel channels prod connectors add main-slack --type=slack --bot-token=xoxb-... --app-token=xapp-...\n funnel channels ci connectors add gh-events --type=gh --poll-interval=30\n funnel channels alerts connectors add daily --type=schedule\n\nsee also: funnel channels <channel> connectors, funnel channels <channel> connectors remove";
|
|
790
|
+
outputFormat: "text";
|
|
791
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
792
|
+
};
|
|
793
|
+
};
|
|
794
|
+
} & {
|
|
795
|
+
"/channels/:channel/connectors/add/:connector": {
|
|
796
|
+
$post: {
|
|
797
|
+
input: {
|
|
798
|
+
param: {
|
|
799
|
+
channel: string;
|
|
800
|
+
connector: string;
|
|
801
|
+
};
|
|
802
|
+
} & {
|
|
803
|
+
query: {
|
|
804
|
+
type: string | string[];
|
|
805
|
+
"bot-token": string | string[];
|
|
806
|
+
"app-token": string | string[];
|
|
807
|
+
} | {
|
|
808
|
+
type: string | string[];
|
|
809
|
+
"poll-interval"?: string | string[] | undefined;
|
|
810
|
+
} | {
|
|
811
|
+
type: string | string[];
|
|
812
|
+
"bot-token": string | string[];
|
|
813
|
+
} | {
|
|
814
|
+
type: string | string[];
|
|
815
|
+
};
|
|
816
|
+
};
|
|
817
|
+
output: `added slack connector "${string}" to channel "${string}"`;
|
|
818
|
+
outputFormat: "text";
|
|
819
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
820
|
+
} | {
|
|
821
|
+
input: {
|
|
822
|
+
param: {
|
|
823
|
+
channel: string;
|
|
824
|
+
connector: string;
|
|
825
|
+
};
|
|
826
|
+
} & {
|
|
827
|
+
query: {
|
|
828
|
+
type: string | string[];
|
|
829
|
+
"bot-token": string | string[];
|
|
830
|
+
"app-token": string | string[];
|
|
831
|
+
} | {
|
|
832
|
+
type: string | string[];
|
|
833
|
+
"poll-interval"?: string | string[] | undefined;
|
|
834
|
+
} | {
|
|
835
|
+
type: string | string[];
|
|
836
|
+
"bot-token": string | string[];
|
|
837
|
+
} | {
|
|
838
|
+
type: string | string[];
|
|
839
|
+
};
|
|
840
|
+
};
|
|
841
|
+
output: `added gh connector "${string}" to channel "${string}"`;
|
|
842
|
+
outputFormat: "text";
|
|
843
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
844
|
+
} | {
|
|
845
|
+
input: {
|
|
846
|
+
param: {
|
|
847
|
+
channel: string;
|
|
848
|
+
connector: string;
|
|
849
|
+
};
|
|
850
|
+
} & {
|
|
851
|
+
query: {
|
|
852
|
+
type: string | string[];
|
|
853
|
+
"bot-token": string | string[];
|
|
854
|
+
"app-token": string | string[];
|
|
855
|
+
} | {
|
|
856
|
+
type: string | string[];
|
|
857
|
+
"poll-interval"?: string | string[] | undefined;
|
|
858
|
+
} | {
|
|
859
|
+
type: string | string[];
|
|
860
|
+
"bot-token": string | string[];
|
|
861
|
+
} | {
|
|
862
|
+
type: string | string[];
|
|
863
|
+
};
|
|
864
|
+
};
|
|
865
|
+
output: `added discord connector "${string}" to channel "${string}"`;
|
|
866
|
+
outputFormat: "text";
|
|
867
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
868
|
+
} | {
|
|
869
|
+
input: {
|
|
870
|
+
param: {
|
|
871
|
+
channel: string;
|
|
872
|
+
connector: string;
|
|
873
|
+
};
|
|
874
|
+
} & {
|
|
875
|
+
query: {
|
|
876
|
+
type: string | string[];
|
|
877
|
+
"bot-token": string | string[];
|
|
878
|
+
"app-token": string | string[];
|
|
879
|
+
} | {
|
|
880
|
+
type: string | string[];
|
|
881
|
+
"poll-interval"?: string | string[] | undefined;
|
|
882
|
+
} | {
|
|
883
|
+
type: string | string[];
|
|
884
|
+
"bot-token": string | string[];
|
|
885
|
+
} | {
|
|
886
|
+
type: string | string[];
|
|
887
|
+
};
|
|
888
|
+
};
|
|
889
|
+
output: `added schedule connector "${string}" to channel "${string}"`;
|
|
890
|
+
outputFormat: "text";
|
|
891
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
892
|
+
};
|
|
893
|
+
};
|
|
894
|
+
} & {
|
|
895
|
+
"/channels/:channel/connectors/remove": {
|
|
896
|
+
$post: {
|
|
897
|
+
input: {
|
|
898
|
+
param: {
|
|
899
|
+
channel: string;
|
|
900
|
+
};
|
|
901
|
+
};
|
|
902
|
+
output: "funnel channels <channel> connectors remove <connector> — remove a connector\n\nusage: funnel channels <channel> connectors remove <connector>\n\nRemoves the connector from the channel configuration. The gateway drops\nit on the next reload. No external resources (Slack apps, Discord bots,\nGitHub webhooks) are touched.\n\nexamples:\n funnel channels production connectors remove slack-main\n\nsee also: funnel channels <channel> connectors, funnel channels <channel> connectors add";
|
|
903
|
+
outputFormat: "text";
|
|
904
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
905
|
+
};
|
|
906
|
+
};
|
|
907
|
+
} & {
|
|
908
|
+
"/channels/:channel/connectors/remove/:connector": {
|
|
909
|
+
$post: {
|
|
910
|
+
input: {
|
|
911
|
+
param: {
|
|
912
|
+
channel: string;
|
|
913
|
+
connector: string;
|
|
914
|
+
};
|
|
915
|
+
} & {
|
|
916
|
+
query: Record<string, never>;
|
|
917
|
+
};
|
|
918
|
+
output: `removed connector "${string}" from channel "${string}"`;
|
|
919
|
+
outputFormat: "text";
|
|
920
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
921
|
+
};
|
|
922
|
+
};
|
|
923
|
+
} & {
|
|
924
|
+
"/channels/:channel/connectors/set": {
|
|
925
|
+
$post: {
|
|
926
|
+
input: {
|
|
927
|
+
param: {
|
|
928
|
+
channel: string;
|
|
929
|
+
};
|
|
930
|
+
};
|
|
931
|
+
output: "funnel channels <channel> connectors set <connector> — update connector fields\n\nusage:\n funnel channels <ch> connectors set <conn> [--bot-token=...] [--app-token=...] # slack\n funnel channels <ch> connectors set <conn> [--bot-token=...] # discord\n funnel channels <ch> connectors set <conn> [--poll-interval=N] # gh";
|
|
932
|
+
outputFormat: "text";
|
|
933
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
934
|
+
};
|
|
935
|
+
};
|
|
936
|
+
} & {
|
|
937
|
+
"/channels/:channel/connectors/set/:connector": {
|
|
938
|
+
$post: {
|
|
939
|
+
input: {
|
|
940
|
+
param: {
|
|
941
|
+
channel: string;
|
|
942
|
+
connector: string;
|
|
943
|
+
};
|
|
944
|
+
} & {
|
|
945
|
+
query: {
|
|
946
|
+
[x: string]: string | string[];
|
|
947
|
+
"bot-token"?: string | undefined;
|
|
948
|
+
"app-token"?: string | undefined;
|
|
949
|
+
"poll-interval"?: string | string[] | undefined;
|
|
950
|
+
};
|
|
951
|
+
};
|
|
952
|
+
output: `updated connector "${string}" in channel "${string}"`;
|
|
953
|
+
outputFormat: "text";
|
|
954
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
955
|
+
};
|
|
956
|
+
};
|
|
957
|
+
} & {
|
|
958
|
+
"/channels/:channel/connectors/rename/:connector/:newName": {
|
|
959
|
+
$post: {
|
|
960
|
+
input: {
|
|
961
|
+
param: {
|
|
962
|
+
channel: string;
|
|
963
|
+
connector: string;
|
|
964
|
+
newName: string;
|
|
965
|
+
};
|
|
966
|
+
} & {
|
|
967
|
+
query: Record<string, never>;
|
|
968
|
+
};
|
|
969
|
+
output: `renamed connector "${string}" to "${string}"`;
|
|
970
|
+
outputFormat: "text";
|
|
971
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
972
|
+
};
|
|
973
|
+
};
|
|
974
|
+
} & {
|
|
975
|
+
"/channels/:channel/connectors/:connector/rename/:newName": {
|
|
976
|
+
$post: {
|
|
977
|
+
input: {
|
|
978
|
+
param: {
|
|
979
|
+
channel: string;
|
|
980
|
+
connector: string;
|
|
981
|
+
newName: string;
|
|
982
|
+
};
|
|
983
|
+
} & {
|
|
984
|
+
query: Record<string, never>;
|
|
985
|
+
};
|
|
986
|
+
output: `renamed connector "${string}" to "${string}"`;
|
|
987
|
+
outputFormat: "text";
|
|
988
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
989
|
+
};
|
|
990
|
+
};
|
|
991
|
+
} & {
|
|
992
|
+
"/channels/:channel/connectors/rename": {
|
|
993
|
+
$post: {
|
|
994
|
+
input: {
|
|
995
|
+
param: {
|
|
996
|
+
channel: string;
|
|
997
|
+
};
|
|
998
|
+
};
|
|
999
|
+
output: "funnel channels <channel> connectors rename <old-connector-name> <new-connector-name> — rename a connector\n\nusage: funnel channels <channel> connectors rename <old-connector-name> <new-connector-name>\n\nRenames the connector in the configuration file. Tokens, type, and\nschedules are preserved. The gateway picks up the new name on the\nnext reload.\n\nexamples:\n funnel channels production connectors rename slack-1 slack-main\n\nsee also: funnel channels <channel> connectors";
|
|
1000
|
+
outputFormat: "text";
|
|
1001
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1002
|
+
};
|
|
1003
|
+
};
|
|
1004
|
+
} & {
|
|
1005
|
+
"/channels/:channel/connectors/:connector/rename": {
|
|
1006
|
+
$post: {
|
|
1007
|
+
input: {
|
|
1008
|
+
param: {
|
|
1009
|
+
channel: string;
|
|
1010
|
+
} & {
|
|
1011
|
+
connector: string;
|
|
1012
|
+
};
|
|
1013
|
+
};
|
|
1014
|
+
output: "funnel channels <channel> connectors rename <connector> <new-name>\n\nusage: funnel channels <channel> connectors rename <connector> <new-name>";
|
|
1015
|
+
outputFormat: "text";
|
|
1016
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1017
|
+
};
|
|
1018
|
+
};
|
|
1019
|
+
} & {
|
|
1020
|
+
"/channels/:channel/connectors/:connector/request": {
|
|
1021
|
+
$post: {
|
|
1022
|
+
input: {
|
|
1023
|
+
param: {
|
|
1024
|
+
channel: string;
|
|
1025
|
+
connector: string;
|
|
1026
|
+
};
|
|
1027
|
+
} & {
|
|
1028
|
+
query: {
|
|
1029
|
+
[x: string]: string | string[];
|
|
1030
|
+
method: string | string[];
|
|
1031
|
+
path?: string | undefined;
|
|
1032
|
+
};
|
|
1033
|
+
};
|
|
1034
|
+
output: string;
|
|
1035
|
+
outputFormat: "text";
|
|
1036
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1037
|
+
};
|
|
1038
|
+
};
|
|
1039
|
+
} & {
|
|
1040
|
+
"/channels/:channel/connectors/:connector": {
|
|
1041
|
+
$get: {
|
|
1042
|
+
input: {
|
|
1043
|
+
param: {
|
|
1044
|
+
channel: string;
|
|
1045
|
+
connector: string;
|
|
1046
|
+
};
|
|
1047
|
+
};
|
|
1048
|
+
output: string;
|
|
1049
|
+
outputFormat: "text";
|
|
1050
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1051
|
+
};
|
|
1052
|
+
};
|
|
1053
|
+
} & {
|
|
1054
|
+
"/channels/:channel/connectors/:connector/schedules": {
|
|
1055
|
+
$get: {
|
|
1056
|
+
input: {
|
|
1057
|
+
param: {
|
|
1058
|
+
channel: string;
|
|
1059
|
+
connector: string;
|
|
1060
|
+
};
|
|
1061
|
+
};
|
|
1062
|
+
output: string;
|
|
1063
|
+
outputFormat: "text";
|
|
1064
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1065
|
+
};
|
|
1066
|
+
};
|
|
1067
|
+
} & {
|
|
1068
|
+
"/channels/:channel/connectors/:connector/schedules/add": {
|
|
1069
|
+
$post: {
|
|
1070
|
+
input: {
|
|
1071
|
+
param: {
|
|
1072
|
+
channel: string;
|
|
1073
|
+
} & {
|
|
1074
|
+
connector: string;
|
|
1075
|
+
};
|
|
1076
|
+
};
|
|
1077
|
+
output: "funnel channels <ch> connectors <conn> schedules add <id> — add a schedule entry\n\nusage: funnel channels <ch> connectors <conn> schedules add <id> --cron=\"*/5 * * * *\" --prompt=\"...\" [--enabled|--enabled=false] [--catchup-policy=latest|all|skip]\n\noptions:\n --cron <expr> / 5-field cron expression (required)\n --prompt <text> / prompt delivered on each fire (required)\n --enabled / fire on schedule (default: true; --enabled=false stores it disabled)\n --catchup-policy latest|all|skip / how missed fires are replayed after downtime (default: latest)";
|
|
1078
|
+
outputFormat: "text";
|
|
1079
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1080
|
+
};
|
|
1081
|
+
};
|
|
1082
|
+
} & {
|
|
1083
|
+
"/channels/:channel/connectors/:connector/schedules/add/:id": {
|
|
1084
|
+
$post: {
|
|
1085
|
+
input: {
|
|
1086
|
+
param: {
|
|
1087
|
+
channel: string;
|
|
1088
|
+
connector: string;
|
|
1089
|
+
id: string;
|
|
1090
|
+
};
|
|
1091
|
+
} & {
|
|
1092
|
+
query: {
|
|
1093
|
+
cron: string;
|
|
1094
|
+
prompt: string;
|
|
1095
|
+
enabled?: "" | "true" | "false" | undefined;
|
|
1096
|
+
"catchup-policy"?: "latest" | "all" | "skip" | undefined;
|
|
1097
|
+
};
|
|
1098
|
+
};
|
|
1099
|
+
output: `added schedule entry "${string}"`;
|
|
1100
|
+
outputFormat: "text";
|
|
1101
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1102
|
+
};
|
|
1103
|
+
};
|
|
1104
|
+
} & {
|
|
1105
|
+
"/channels/:channel/connectors/:connector/schedules/remove": {
|
|
1106
|
+
$post: {
|
|
1107
|
+
input: {
|
|
1108
|
+
param: {
|
|
1109
|
+
channel: string;
|
|
1110
|
+
} & {
|
|
1111
|
+
connector: string;
|
|
1112
|
+
};
|
|
1113
|
+
};
|
|
1114
|
+
output: "funnel channels <ch> connectors <conn> schedules remove <id>\n\nusage: funnel channels <ch> connectors <conn> schedules remove <id>";
|
|
1115
|
+
outputFormat: "text";
|
|
1116
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1117
|
+
};
|
|
1118
|
+
};
|
|
1119
|
+
} & {
|
|
1120
|
+
"/channels/:channel/connectors/:connector/schedules/remove/:id": {
|
|
1121
|
+
$post: {
|
|
1122
|
+
input: {
|
|
1123
|
+
param: {
|
|
1124
|
+
channel: string;
|
|
1125
|
+
connector: string;
|
|
1126
|
+
id: string;
|
|
1127
|
+
};
|
|
1128
|
+
} & {
|
|
1129
|
+
query: Record<string, never>;
|
|
1130
|
+
};
|
|
1131
|
+
output: `removed schedule entry "${string}"`;
|
|
1132
|
+
outputFormat: "text";
|
|
1133
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1134
|
+
};
|
|
1135
|
+
};
|
|
1136
|
+
} & {
|
|
1137
|
+
"/profiles": {
|
|
1138
|
+
$get: {
|
|
1139
|
+
input: {};
|
|
1140
|
+
output: string;
|
|
1141
|
+
outputFormat: "text";
|
|
1142
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1143
|
+
};
|
|
1144
|
+
};
|
|
1145
|
+
} & {
|
|
1146
|
+
"/profiles/add": {
|
|
1147
|
+
$post: {
|
|
1148
|
+
input: {};
|
|
1149
|
+
output: "funnel profiles add — add a profile\n\nusage: funnel profiles add <name> --path <path> --channel <channel-name> [recipe]\n\noptions:\n --path working directory passed to claude as cwd\n --channel channel name (resolved to channel id internally)\n --agent sub-agent name, prepended to the launch argv as --agent <name>\n --options extra launch argv as one whitespace-split string (e.g. \"--brief\")\n --env env vars layered under the process, as \"KEY=VAL,KEY2=VAL2\"\n --no-resume start a fresh claude session every launch (default resumes)\n\nThe launch recipe (--agent / --options / --env / --resume) lives on the\nprofile; the channel only declares transport (connectors / delivery).";
|
|
1150
|
+
outputFormat: "text";
|
|
1151
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1152
|
+
};
|
|
1153
|
+
};
|
|
1154
|
+
} & {
|
|
1155
|
+
"/profiles/add/:profile": {
|
|
1156
|
+
$post: {
|
|
1157
|
+
input: {
|
|
1158
|
+
param: {
|
|
1159
|
+
profile: string;
|
|
1160
|
+
};
|
|
1161
|
+
} & {
|
|
1162
|
+
query: {
|
|
1163
|
+
path: string;
|
|
1164
|
+
channel: string;
|
|
1165
|
+
agent?: string | undefined;
|
|
1166
|
+
options?: string | undefined;
|
|
1167
|
+
env?: string | undefined;
|
|
1168
|
+
resume?: string | undefined;
|
|
1169
|
+
"no-resume"?: string | undefined;
|
|
1170
|
+
};
|
|
1171
|
+
};
|
|
1172
|
+
output: `added profile "${string}"`;
|
|
1173
|
+
outputFormat: "text";
|
|
1174
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1175
|
+
};
|
|
1176
|
+
};
|
|
1177
|
+
} & {
|
|
1178
|
+
"/profiles/set": {
|
|
1179
|
+
$post: {
|
|
1180
|
+
input: {};
|
|
1181
|
+
output: "funnel profiles <name> set — update a profile\n\nusage: funnel profiles <name> set [--path <path>] [--channel <channel-name>] [recipe]\n\noptions:\n --path working directory passed to claude as cwd\n --channel channel name (resolved to channel id internally)\n --agent sub-agent name, prepended to the launch argv as --agent <name>\n --options extra launch argv as one whitespace-split string (e.g. \"--brief\")\n --env env vars layered under the process, as \"KEY=VAL,KEY2=VAL2\"\n --resume / --no-resume toggle claude session reuse\n\nOnly the flags you pass are changed; --agent and --options together replace\nthe profile's whole options list.";
|
|
1182
|
+
outputFormat: "text";
|
|
1183
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1184
|
+
};
|
|
1185
|
+
};
|
|
1186
|
+
} & {
|
|
1187
|
+
"/profiles/set/:profile": {
|
|
1188
|
+
$post: {
|
|
1189
|
+
input: {
|
|
1190
|
+
param: {
|
|
1191
|
+
profile: string;
|
|
1192
|
+
};
|
|
1193
|
+
} & {
|
|
1194
|
+
query: {
|
|
1195
|
+
path?: string | undefined;
|
|
1196
|
+
channel?: string | undefined;
|
|
1197
|
+
agent?: string | undefined;
|
|
1198
|
+
options?: string | undefined;
|
|
1199
|
+
env?: string | undefined;
|
|
1200
|
+
resume?: string | undefined;
|
|
1201
|
+
"no-resume"?: string | undefined;
|
|
1202
|
+
};
|
|
1203
|
+
};
|
|
1204
|
+
output: `updated profile "${string}"`;
|
|
1205
|
+
outputFormat: "text";
|
|
1206
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1207
|
+
};
|
|
1208
|
+
};
|
|
1209
|
+
} & {
|
|
1210
|
+
"/profiles/remove": {
|
|
1211
|
+
$post: {
|
|
1212
|
+
input: {};
|
|
1213
|
+
output: "funnel profiles remove — remove a profile\n\nusage: funnel profiles remove <name>";
|
|
1214
|
+
outputFormat: "text";
|
|
1215
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1216
|
+
};
|
|
1217
|
+
};
|
|
1218
|
+
} & {
|
|
1219
|
+
"/profiles/remove/:profile": {
|
|
1220
|
+
$post: {
|
|
1221
|
+
input: {
|
|
1222
|
+
param: {
|
|
1223
|
+
profile: string;
|
|
1224
|
+
};
|
|
1225
|
+
} & {
|
|
1226
|
+
query: Record<string, never>;
|
|
1227
|
+
};
|
|
1228
|
+
output: `removed profile "${string}"`;
|
|
1229
|
+
outputFormat: "text";
|
|
1230
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1231
|
+
};
|
|
1232
|
+
};
|
|
1233
|
+
} & {
|
|
1234
|
+
"/profiles/rename/:profile/:newName": {
|
|
1235
|
+
$post: {
|
|
1236
|
+
input: {
|
|
1237
|
+
param: {
|
|
1238
|
+
profile: string;
|
|
1239
|
+
newName: string;
|
|
1240
|
+
};
|
|
1241
|
+
} & {
|
|
1242
|
+
query: Record<string, never>;
|
|
1243
|
+
};
|
|
1244
|
+
output: `renamed profile "${string}" to "${string}"`;
|
|
1245
|
+
outputFormat: "text";
|
|
1246
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1247
|
+
};
|
|
1248
|
+
};
|
|
1249
|
+
} & {
|
|
1250
|
+
"/profiles/:profile/rename/:newName": {
|
|
1251
|
+
$post: {
|
|
1252
|
+
input: {
|
|
1253
|
+
param: {
|
|
1254
|
+
profile: string;
|
|
1255
|
+
newName: string;
|
|
1256
|
+
};
|
|
1257
|
+
} & {
|
|
1258
|
+
query: Record<string, never>;
|
|
1259
|
+
};
|
|
1260
|
+
output: `renamed profile "${string}" to "${string}"`;
|
|
1261
|
+
outputFormat: "text";
|
|
1262
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1263
|
+
};
|
|
1264
|
+
};
|
|
1265
|
+
} & {
|
|
1266
|
+
"/profiles/rename": {
|
|
1267
|
+
$post: {
|
|
1268
|
+
input: {};
|
|
1269
|
+
output: "funnel profiles rename — rename a profile\n\nusage:\n funnel profiles rename <old> <new>\n funnel profiles <old> rename <new>";
|
|
1270
|
+
outputFormat: "text";
|
|
1271
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1272
|
+
};
|
|
1273
|
+
};
|
|
1274
|
+
} & {
|
|
1275
|
+
"/profiles/:profile/rename": {
|
|
1276
|
+
$post: {
|
|
1277
|
+
input: {
|
|
1278
|
+
param: {
|
|
1279
|
+
profile: string;
|
|
1280
|
+
};
|
|
1281
|
+
};
|
|
1282
|
+
output: "funnel profiles rename — rename a profile\n\nusage:\n funnel profiles rename <old> <new>\n funnel profiles <old> rename <new>";
|
|
1283
|
+
outputFormat: "text";
|
|
1284
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1285
|
+
};
|
|
1286
|
+
};
|
|
1287
|
+
} & {
|
|
1288
|
+
"/profiles/:profile/as-default": {
|
|
1289
|
+
$post: {
|
|
1290
|
+
input: {
|
|
1291
|
+
param: {
|
|
1292
|
+
profile: string;
|
|
1293
|
+
};
|
|
1294
|
+
};
|
|
1295
|
+
output: `profile "${string}" is now the default`;
|
|
1296
|
+
outputFormat: "text";
|
|
1297
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1298
|
+
};
|
|
1299
|
+
};
|
|
1300
|
+
} & {
|
|
1301
|
+
"/gateway": {
|
|
1302
|
+
$get: {
|
|
1303
|
+
input: {};
|
|
1304
|
+
output: string;
|
|
1305
|
+
outputFormat: "text";
|
|
1306
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1307
|
+
};
|
|
1308
|
+
};
|
|
1309
|
+
} & {
|
|
1310
|
+
"/gateway/status": {
|
|
1311
|
+
$get: {
|
|
1312
|
+
input: {};
|
|
1313
|
+
output: string;
|
|
1314
|
+
outputFormat: "text";
|
|
1315
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1316
|
+
};
|
|
1317
|
+
};
|
|
1318
|
+
} & {
|
|
1319
|
+
"/gateway/start": {
|
|
1320
|
+
$get: {
|
|
1321
|
+
input: {
|
|
1322
|
+
query: {
|
|
1323
|
+
"no-caffeine"?: string | undefined;
|
|
1324
|
+
};
|
|
1325
|
+
};
|
|
1326
|
+
output: "funnel gateway: already running (pid null)" | `funnel gateway: already running (pid ${number})`;
|
|
1327
|
+
outputFormat: "text";
|
|
1328
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1329
|
+
} | {
|
|
1330
|
+
input: {
|
|
1331
|
+
query: {
|
|
1332
|
+
"no-caffeine"?: string | undefined;
|
|
1333
|
+
};
|
|
1334
|
+
};
|
|
1335
|
+
output: `funnel gateway: started (pid null, port ${number}) but /health did not respond within ${number}s \u2014 check \`fnl gateway logs\`` | `funnel gateway: started (pid ${number}, port ${number}) but /health did not respond within ${number}s \u2014 check \`fnl gateway logs\``;
|
|
1336
|
+
outputFormat: "text";
|
|
1337
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1338
|
+
} | {
|
|
1339
|
+
input: {
|
|
1340
|
+
query: {
|
|
1341
|
+
"no-caffeine"?: string | undefined;
|
|
1342
|
+
};
|
|
1343
|
+
};
|
|
1344
|
+
output: `funnel gateway: started (pid null, port ${number})` | `funnel gateway: started (pid ${number}, port ${number})`;
|
|
1345
|
+
outputFormat: "text";
|
|
1346
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1347
|
+
};
|
|
1348
|
+
};
|
|
1349
|
+
} & {
|
|
1350
|
+
"/gateway/stop": {
|
|
1351
|
+
$get: {
|
|
1352
|
+
input: {};
|
|
1353
|
+
output: "funnel gateway: no running process";
|
|
1354
|
+
outputFormat: "text";
|
|
1355
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1356
|
+
} | {
|
|
1357
|
+
input: {};
|
|
1358
|
+
output: "funnel gateway: stopped";
|
|
1359
|
+
outputFormat: "text";
|
|
1360
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1361
|
+
};
|
|
1362
|
+
};
|
|
1363
|
+
} & {
|
|
1364
|
+
"/gateway/restart": {
|
|
1365
|
+
$get: {
|
|
1366
|
+
input: {
|
|
1367
|
+
query: {
|
|
1368
|
+
"no-caffeine"?: string | undefined;
|
|
1369
|
+
};
|
|
1370
|
+
};
|
|
1371
|
+
output: string;
|
|
1372
|
+
outputFormat: "text";
|
|
1373
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1374
|
+
};
|
|
1375
|
+
};
|
|
1376
|
+
} & {
|
|
1377
|
+
"/gateway/logs": {
|
|
1378
|
+
$get: {
|
|
1379
|
+
input: {
|
|
1380
|
+
query: {
|
|
1381
|
+
n?: string | undefined;
|
|
1382
|
+
format?: "json" | "plain" | undefined;
|
|
1383
|
+
};
|
|
1384
|
+
};
|
|
1385
|
+
output: "no logs";
|
|
1386
|
+
outputFormat: "text";
|
|
1387
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1388
|
+
};
|
|
1389
|
+
};
|
|
1390
|
+
} & {
|
|
1391
|
+
"/gateway/sql": {
|
|
1392
|
+
$get: {
|
|
1393
|
+
input: {
|
|
1394
|
+
query: {
|
|
1395
|
+
query?: string | undefined;
|
|
1396
|
+
preset?: string | undefined;
|
|
1397
|
+
channel?: string | undefined;
|
|
1398
|
+
limit?: string | undefined;
|
|
1399
|
+
};
|
|
1400
|
+
};
|
|
1401
|
+
output: string;
|
|
1402
|
+
outputFormat: "text";
|
|
1403
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1404
|
+
};
|
|
1405
|
+
};
|
|
1406
|
+
} & {
|
|
1407
|
+
"/gateway/listeners": {
|
|
1408
|
+
$get: {
|
|
1409
|
+
input: {};
|
|
1410
|
+
output: string;
|
|
1411
|
+
outputFormat: "text";
|
|
1412
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1413
|
+
};
|
|
1414
|
+
};
|
|
1415
|
+
} & {
|
|
1416
|
+
"/debug": {
|
|
1417
|
+
$get: {
|
|
1418
|
+
input: {
|
|
1419
|
+
query: {
|
|
1420
|
+
channel?: string | undefined;
|
|
1421
|
+
all?: "" | "true" | "false" | undefined;
|
|
1422
|
+
limit?: string | undefined;
|
|
1423
|
+
};
|
|
1424
|
+
};
|
|
1425
|
+
output: string;
|
|
1426
|
+
outputFormat: "text";
|
|
1427
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1428
|
+
};
|
|
1429
|
+
};
|
|
1430
|
+
} & {
|
|
1431
|
+
"/debug/events": {
|
|
1432
|
+
$get: {
|
|
1433
|
+
input: {
|
|
1434
|
+
query: {
|
|
1435
|
+
channel?: string | undefined;
|
|
1436
|
+
limit?: string | undefined;
|
|
1437
|
+
};
|
|
1438
|
+
};
|
|
1439
|
+
output: string;
|
|
1440
|
+
outputFormat: "text";
|
|
1441
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1442
|
+
};
|
|
1443
|
+
};
|
|
1444
|
+
} & {
|
|
1445
|
+
"/debug/dropped": {
|
|
1446
|
+
$get: {
|
|
1447
|
+
input: {
|
|
1448
|
+
query: {
|
|
1449
|
+
channel?: string | undefined;
|
|
1450
|
+
limit?: string | undefined;
|
|
1451
|
+
};
|
|
1452
|
+
};
|
|
1453
|
+
output: string;
|
|
1454
|
+
outputFormat: "text";
|
|
1455
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1456
|
+
};
|
|
1457
|
+
};
|
|
1458
|
+
} & {
|
|
1459
|
+
"/debug/errors": {
|
|
1460
|
+
$get: {
|
|
1461
|
+
input: {
|
|
1462
|
+
query: {
|
|
1463
|
+
channel?: string | undefined;
|
|
1464
|
+
limit?: string | undefined;
|
|
1465
|
+
};
|
|
1466
|
+
};
|
|
1467
|
+
output: string;
|
|
1468
|
+
outputFormat: "text";
|
|
1469
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1470
|
+
};
|
|
1471
|
+
};
|
|
1472
|
+
} & {
|
|
1473
|
+
"/debug/replay": {
|
|
1474
|
+
$get: {
|
|
1475
|
+
input: {
|
|
1476
|
+
query: {
|
|
1477
|
+
channel?: string | undefined;
|
|
1478
|
+
seq?: string | undefined;
|
|
1479
|
+
};
|
|
1480
|
+
};
|
|
1481
|
+
output: string;
|
|
1482
|
+
outputFormat: "text";
|
|
1483
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1484
|
+
};
|
|
1485
|
+
};
|
|
1486
|
+
} & {
|
|
1487
|
+
"/docs": {
|
|
1488
|
+
$get: {
|
|
1489
|
+
input: {};
|
|
1490
|
+
output: string;
|
|
1491
|
+
outputFormat: "text";
|
|
1492
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1493
|
+
};
|
|
1494
|
+
};
|
|
1495
|
+
} & {
|
|
1496
|
+
"/docs/:topic": {
|
|
1497
|
+
$get: {
|
|
1498
|
+
input: {
|
|
1499
|
+
param: {
|
|
1500
|
+
topic: string;
|
|
1501
|
+
};
|
|
1502
|
+
};
|
|
1503
|
+
output: string;
|
|
1504
|
+
outputFormat: "text";
|
|
1505
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1506
|
+
};
|
|
1507
|
+
};
|
|
1508
|
+
} & {
|
|
1509
|
+
"/doctor": {
|
|
1510
|
+
$get: {
|
|
1511
|
+
input: {
|
|
1512
|
+
query: {
|
|
1513
|
+
fix?: "" | "true" | "false" | undefined;
|
|
1514
|
+
aggressive?: "" | "true" | "false" | undefined;
|
|
1515
|
+
};
|
|
1516
|
+
};
|
|
1517
|
+
output: string;
|
|
1518
|
+
outputFormat: "text";
|
|
1519
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1520
|
+
};
|
|
1521
|
+
};
|
|
1522
|
+
} & {
|
|
1523
|
+
"/schema": {
|
|
1524
|
+
$get: {
|
|
1525
|
+
input: {};
|
|
1526
|
+
output: `${string}
|
|
1527
|
+
`;
|
|
1528
|
+
outputFormat: "text";
|
|
1529
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1530
|
+
};
|
|
1531
|
+
};
|
|
1532
|
+
} & {
|
|
1533
|
+
"/status": {
|
|
1534
|
+
$get: {
|
|
1535
|
+
input: {
|
|
1536
|
+
query: {
|
|
1537
|
+
watch?: "" | "true" | "false" | undefined;
|
|
1538
|
+
interval?: string | undefined;
|
|
1539
|
+
};
|
|
1540
|
+
};
|
|
1541
|
+
output: string;
|
|
1542
|
+
outputFormat: "text";
|
|
1543
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1544
|
+
};
|
|
1545
|
+
};
|
|
1546
|
+
} & {
|
|
1547
|
+
"/update": {
|
|
1548
|
+
$get: {
|
|
1549
|
+
input: {};
|
|
1550
|
+
output: "updated @interactive-inc/claude-funnel";
|
|
1551
|
+
outputFormat: "text";
|
|
1552
|
+
status: _$hono_utils_http_status0.ContentfulStatusCode;
|
|
1553
|
+
};
|
|
1554
|
+
};
|
|
1555
|
+
}, "/", "/update">;
|
|
1556
|
+
type CliApp = typeof routes;
|
|
1557
|
+
//#endregion
|
|
1558
|
+
export { AddConnectorInput, AliveStub, AttachOptions, BaseConnectorConfig, BroadcastEvent, BroadcastSubscriber, CONNECTOR_CONNECTION_STATUSES, CallInput, ChannelConfig, ChannelConnectorView, ChannelDeliveryMode, ChannelDiagnosis, ChannelWsUrlInput, type CliApp, ConnectorAdapterDeps, ConnectorBuildContext, ConnectorConnectionEvent, ConnectorConnectionQuery, ConnectorConnectionRecord, ConnectorConnectionStatus, ConnectorDescriptor, ConnectorDiagnosticLog, ConnectorDiagnosticSqlReader, ConnectorListenerDeps, ConnectorOperation, ConnectorOperationContext, ConnectorProcessedEvent, ConnectorProcessedQuery, ConnectorProcessedRecord, ConnectorQuery, ConnectorRawEvent, ConnectorRawQuery, ConnectorRawRecord, ConnectorUpdateContext, DEFAULT_GATEWAY_PORT, DEFAULT_GATEWAY_TOKEN_PATH, DetachOptions, DiagnoseAllReport, DiagnosisStatus, DiagnosticConnectionError, DiagnosticEvent, DiagnosticsChannelSource, DiagnosticsGatewayProbe, DiagnosticsPublisher, DiagnosticsTokenReader, DocsTopicListing, DoctorFixMode, DoctorReport, Env, FUNNEL_DIR, FileStat, Funnel, FunnelBroadcaster, FunnelChannelPublisher, FunnelChannels, FunnelClock, FunnelConnectorAdapter, FunnelConnectorListener, FunnelConnectorRegistry, FunnelDiagnostics, FunnelDocs, FunnelDoctor, FunnelEvent, FunnelEventLog, FunnelEventRecord, FunnelFileSystem, FunnelGateway, FunnelGatewayServer, FunnelGatewayToken, FunnelHttpClient, FunnelIdGenerator, FunnelListenerSupervisor, FunnelListenersClient, FunnelLogger, FunnelProcessRunner, FunnelRecovery, FunnelSettingsReader, FunnelSettingsStore, type GatewayApp, type GatewayEmitInput, GatewayEventStore, type GatewayRouteDeps, type Env$1 as GatewayServerEnv, GatewayServerOptions, HttpRequest, HttpResponse, JsonValue, ListListenersResult, ListenerEntry, ListenerOpResult, LogEntry, MemoryConnectorDiagnosticLog, MemoryFunnelClock, MemoryFunnelEventLog, MemoryFunnelFileSystem, MemoryFunnelHttpClient, MemoryFunnelIdGenerator, MemoryFunnelLogger, MemoryFunnelProcessRunner, MemoryHttpHandler, MemoryHttpResponse, MemoryProcessCall, MemoryProcessHandler, MemoryProcessResponse, MemoryProcessSyncHandler, MockFunnelSettingsReader, NodeFunnelClock, NodeFunnelFileSystem, NodeFunnelHttpClient, NodeFunnelIdGenerator, NodeFunnelLogger, NodeFunnelProcessRunner, NoopFunnelLogger, NotifyFn, OnFunnelError, ProcessListStub, ProcessSnapshot, ProfileConfig, PublishRequest, PublishResponse, PublishResult, RecoveryAction, RecoveryChannelSource, RecoveryGatewayControl, RecoveryListenerControl, RecoveryResult, ReplayResult, ReplayableEvent, RunOptions, RunResult, SETTINGS_PATH, SETTINGS_VERSION, Settings, SqliteConnectorDiagnosticLog, SqliteFunnelEventLog, StartTimeStub, StoredConnectionEvent, StoredProcessedEvent, StoredRawEvent, baseConnectorConfigSchema, buildServiceRoutes, channelConfigSchema, channelDeliveryModeSchema, channelWsProtocols, channelWsUrl, routes as cliRoutes, connectorConnectionEventSchema, connectorProcessedEventSchema, connectorRawEventSchema, createSettings, factory, funnelEventSchema, gatewayLoopbackUrl, previewOf, profileConfigSchema, publishRequestSchema, publishResponseSchema, queryRows, queryToCliArgs, resolveFunnelDir, resolveFunnelPort, settingsSchema, toDiagnosticConnectionError, toDiagnosticEvent, toRequest };
|