flow-agent-bridge 0.25.0 → 0.26.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 +42 -0
- package/dist/api.d.ts +7 -1
- package/dist/api.js +4 -0
- package/dist/api.js.map +1 -1
- package/dist/app-guard-cli.d.ts +12 -0
- package/dist/app-guard-cli.js +62 -0
- package/dist/app-guard-cli.js.map +1 -0
- package/dist/app-guard.d.ts +72 -0
- package/dist/app-guard.js +265 -0
- package/dist/app-guard.js.map +1 -0
- package/dist/app-token.d.ts +45 -0
- package/dist/app-token.js +112 -0
- package/dist/app-token.js.map +1 -0
- package/dist/index.js +21 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.js +23 -4
- package/dist/mcp-server.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -132,6 +132,48 @@ tools, pull-only — no presence or push, that's the daemon's job. Other
|
|
|
132
132
|
servers in an existing `.mcp.json` are preserved; the file is git-ignored
|
|
133
133
|
since it holds the agent token.
|
|
134
134
|
|
|
135
|
+
## Put a web app behind Flow membership (`app-guard`)
|
|
136
|
+
|
|
137
|
+
An agent can host a web app locally, but a public tunnel accepts anyone.
|
|
138
|
+
Pin the tunnel URL as an **app** artifact and only channel members get in:
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
create_artifact(url: "https://myapp.trycloudflare.com", app: true)
|
|
142
|
+
→ returns the app secret, once
|
|
143
|
+
|
|
144
|
+
FLOW_APP_SECRET=<that secret> \
|
|
145
|
+
npx flow-agent-bridge app-guard --upstream http://localhost:3000 --port 8788
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Tunnel **8788** (the guard), not 3000 (the app). When a member opens the
|
|
149
|
+
artifact their client mints a 5-minute single-use token; the guard verifies it
|
|
150
|
+
offline — it never calls Flow — swaps it for an 8-hour session cookie, and
|
|
151
|
+
proxies to the app. Everyone else gets a 401.
|
|
152
|
+
|
|
153
|
+
The app sees a plain reverse proxy with identity attached to every request:
|
|
154
|
+
|
|
155
|
+
| header | |
|
|
156
|
+
| --- | --- |
|
|
157
|
+
| `X-Flow-User-Id` | the viewer's Flow user id |
|
|
158
|
+
| `X-Flow-User-Name` | their display name |
|
|
159
|
+
| `X-Flow-Is-Agent` | `true` for agents |
|
|
160
|
+
| `X-Flow-Channel-Id` | the channel the app is pinned in |
|
|
161
|
+
| `X-Flow-Artifact-Id` | the artifact |
|
|
162
|
+
|
|
163
|
+
Inbound `X-Flow-*` headers are stripped, so those values cannot be spoofed. A
|
|
164
|
+
naive app needs no changes; a per-user app reads two headers.
|
|
165
|
+
|
|
166
|
+
An app already pinned as a plain link doesn't need re-pinning by hand:
|
|
167
|
+
`create_artifact` on the **same url** with `app: true` promotes that artifact in
|
|
168
|
+
place and returns its secret, so it keeps its id and its place in everyone's
|
|
169
|
+
sidebar. Doing it twice is refused — a second secret would silently kill every
|
|
170
|
+
token the first one has out; rotate in Flow instead.
|
|
171
|
+
|
|
172
|
+
Pinning the same app in a second channel makes a second artifact with its own
|
|
173
|
+
secret — pass both, comma-separated, in `FLOW_APP_SECRET`. Sessions live in
|
|
174
|
+
memory, so restarting the guard just makes everyone's next open re-mint.
|
|
175
|
+
Rotating the artifact's secret in Flow invalidates outstanding tokens.
|
|
176
|
+
|
|
135
177
|
## Keep it running
|
|
136
178
|
|
|
137
179
|
The daemon only dials out (HTTPS + WSS) — no open ports needed. Under
|
package/dist/api.d.ts
CHANGED
|
@@ -65,12 +65,18 @@ export declare class FlowApi {
|
|
|
65
65
|
/** Phase 13: pin `fileId` as a shared artifact in a channel. The caller must
|
|
66
66
|
* be a member of the channel and able to read the file. `ownsFile` marks an
|
|
67
67
|
* artifact whose file was uploaded for it (agent-generated). */
|
|
68
|
+
/** With `app: true` (link artifacts only) the response is an
|
|
69
|
+
* `AppArtifactSecretDTO`: the artifact plus its app secret, which Flow
|
|
70
|
+
* returns exactly once — see docs/design/MINI_APPS.md. */
|
|
68
71
|
createArtifact(channelId: string, opts: {
|
|
69
72
|
fileId?: string | undefined;
|
|
70
73
|
url?: string | undefined;
|
|
71
74
|
name?: string | undefined;
|
|
72
75
|
ownsFile?: boolean | undefined;
|
|
73
|
-
|
|
76
|
+
app?: boolean | undefined;
|
|
77
|
+
}): Promise<ArtifactDTO & {
|
|
78
|
+
appSecret?: string;
|
|
79
|
+
}>;
|
|
74
80
|
/** Phase 13: rename and/or re-point an artifact at a new file (the "update"
|
|
75
81
|
* path). At least one of name/fileId must be provided. */
|
|
76
82
|
/** The caller's visible artifacts in the workspace (channels they are a member
|
package/dist/api.js
CHANGED
|
@@ -170,6 +170,9 @@ export class FlowApi {
|
|
|
170
170
|
/** Phase 13: pin `fileId` as a shared artifact in a channel. The caller must
|
|
171
171
|
* be a member of the channel and able to read the file. `ownsFile` marks an
|
|
172
172
|
* artifact whose file was uploaded for it (agent-generated). */
|
|
173
|
+
/** With `app: true` (link artifacts only) the response is an
|
|
174
|
+
* `AppArtifactSecretDTO`: the artifact plus its app secret, which Flow
|
|
175
|
+
* returns exactly once — see docs/design/MINI_APPS.md. */
|
|
173
176
|
createArtifact(channelId, opts) {
|
|
174
177
|
return this.req('POST', '/v1/artifacts', {
|
|
175
178
|
channelId,
|
|
@@ -177,6 +180,7 @@ export class FlowApi {
|
|
|
177
180
|
...(opts.url ? { url: opts.url } : {}),
|
|
178
181
|
...(opts.name ? { name: opts.name } : {}),
|
|
179
182
|
...(opts.ownsFile ? { ownsFile: opts.ownsFile } : {}),
|
|
183
|
+
...(opts.app ? { app: true } : {}),
|
|
180
184
|
});
|
|
181
185
|
}
|
|
182
186
|
/** Phase 13: rename and/or re-point an artifact at a new file (the "update"
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface AppGuardCliOptions {
|
|
2
|
+
upstream: string;
|
|
3
|
+
port: number;
|
|
4
|
+
host: string;
|
|
5
|
+
secrets: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare class AppGuardUsageError extends Error {
|
|
8
|
+
}
|
|
9
|
+
/** Parse `app-guard`'s flags. `secrets` comes from the environment, never the
|
|
10
|
+
* command line — a secret in argv is a secret in `ps` output. */
|
|
11
|
+
export declare function parseAppGuardArgs(args: string[], env: NodeJS.ProcessEnv): AppGuardCliOptions;
|
|
12
|
+
export declare function runAppGuard(args: string[], env?: NodeJS.ProcessEnv): Promise<void>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// `flow-agent-bridge app-guard --upstream http://localhost:3000 --port 8788`
|
|
2
|
+
// — argument parsing and startup for the mini-app guard (see app-guard.ts for
|
|
3
|
+
// what it actually does). Kept apart from the guard itself so the proxy can be
|
|
4
|
+
// tested without a process.
|
|
5
|
+
import { AppGuard, parseSecretList } from './app-guard.js';
|
|
6
|
+
export class AppGuardUsageError extends Error {
|
|
7
|
+
}
|
|
8
|
+
/** Parse `app-guard`'s flags. `secrets` comes from the environment, never the
|
|
9
|
+
* command line — a secret in argv is a secret in `ps` output. */
|
|
10
|
+
export function parseAppGuardArgs(args, env) {
|
|
11
|
+
const flag = (name) => {
|
|
12
|
+
const i = args.indexOf(`--${name}`);
|
|
13
|
+
return i >= 0 ? args[i + 1] : undefined;
|
|
14
|
+
};
|
|
15
|
+
const upstream = flag('upstream');
|
|
16
|
+
if (!upstream)
|
|
17
|
+
throw new AppGuardUsageError('app-guard needs --upstream (e.g. http://localhost:3000)');
|
|
18
|
+
const portRaw = flag('port') ?? '8788';
|
|
19
|
+
const port = Number(portRaw);
|
|
20
|
+
if (!Number.isInteger(port) || port < 0 || port > 65535) {
|
|
21
|
+
throw new AppGuardUsageError(`--port must be a port number, got ${portRaw}`);
|
|
22
|
+
}
|
|
23
|
+
const secrets = parseSecretList(env.FLOW_APP_SECRET);
|
|
24
|
+
if (secrets.length === 0) {
|
|
25
|
+
throw new AppGuardUsageError('set FLOW_APP_SECRET to the secret create_artifact returned (several, comma-separated, when the app is pinned in more than one channel)');
|
|
26
|
+
}
|
|
27
|
+
return { upstream, port, host: flag('host') ?? '0.0.0.0', secrets };
|
|
28
|
+
}
|
|
29
|
+
export async function runAppGuard(args, env = process.env) {
|
|
30
|
+
const opts = parseAppGuardArgs(args, env);
|
|
31
|
+
// Every way the guard can fail to come up is a misconfiguration the operator
|
|
32
|
+
// has to fix, so they all leave by the same door: one line, exit 2.
|
|
33
|
+
let guard;
|
|
34
|
+
try {
|
|
35
|
+
guard = new AppGuard({ upstream: opts.upstream, secrets: opts.secrets });
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
throw new AppGuardUsageError(err.message);
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
await guard.listen(opts.port, opts.host);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
// A busy port is the common one, and a node stack trace is a bad way to
|
|
45
|
+
// learn that another guard is already running.
|
|
46
|
+
const e = err;
|
|
47
|
+
if (e.code === 'EADDRINUSE')
|
|
48
|
+
throw new AppGuardUsageError(`port ${opts.port} is already in use — pass a different --port`);
|
|
49
|
+
if (e.code === 'EACCES')
|
|
50
|
+
throw new AppGuardUsageError(`not allowed to listen on port ${opts.port} — pick one above 1024`);
|
|
51
|
+
throw err;
|
|
52
|
+
}
|
|
53
|
+
const port = guard.server.address().port;
|
|
54
|
+
console.error(`app-guard: :${port} → ${opts.upstream} (${opts.secrets.length} secret${opts.secrets.length === 1 ? '' : 's'}). ` +
|
|
55
|
+
'Tunnel this port, not the app’s.');
|
|
56
|
+
const stop = () => {
|
|
57
|
+
void guard.close().then(() => process.exit(0));
|
|
58
|
+
};
|
|
59
|
+
process.on('SIGINT', stop);
|
|
60
|
+
process.on('SIGTERM', stop);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=app-guard-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-guard-cli.js","sourceRoot":"","sources":["../src/app-guard-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import http from 'node:http';
|
|
2
|
+
/** Session lifetime. Long enough to use an app for a working day, short enough
|
|
3
|
+
* that a removed member's access dies without any membership plumbing. */
|
|
4
|
+
export declare const SESSION_TTL_MS: number;
|
|
5
|
+
export declare const SESSION_COOKIE = "flow_app_session";
|
|
6
|
+
/** The query parameter the client appends when opening the artifact. */
|
|
7
|
+
export declare const TOKEN_PARAM = "flow_token";
|
|
8
|
+
/** Everything the app is told about the viewer. Straight off the verified
|
|
9
|
+
* token — the app sees identity it cannot be lied to about. */
|
|
10
|
+
export interface GuardSession {
|
|
11
|
+
userId: string;
|
|
12
|
+
displayName: string;
|
|
13
|
+
isAgent: boolean;
|
|
14
|
+
artifactId: string;
|
|
15
|
+
channelId: string;
|
|
16
|
+
expiresAt: number;
|
|
17
|
+
}
|
|
18
|
+
export interface AppGuardOptions {
|
|
19
|
+
/** Where the real app listens, e.g. `http://localhost:3000`. */
|
|
20
|
+
upstream: string;
|
|
21
|
+
/** base64url secrets from `create_artifact` — one per artifact, and one app
|
|
22
|
+
* can be pinned in several channels (spec risk #5). */
|
|
23
|
+
secrets: string[];
|
|
24
|
+
/** Injectable for tests. */
|
|
25
|
+
now?: () => Date;
|
|
26
|
+
/** Log line sink; defaults to stderr so stdout stays clean. */
|
|
27
|
+
log?: (line: string) => void;
|
|
28
|
+
}
|
|
29
|
+
/** Parse a Cookie header into a name → value map. Tolerant: a malformed pair is
|
|
30
|
+
* skipped, not fatal. */
|
|
31
|
+
export declare function parseCookies(header: string | undefined): Record<string, string>;
|
|
32
|
+
/**
|
|
33
|
+
* The headers the upstream receives: the client's, minus anything `X-Flow-*`
|
|
34
|
+
* (so a viewer cannot claim to be someone else) and minus the session cookie,
|
|
35
|
+
* plus the identity we verified. Order matters only in that the strip happens
|
|
36
|
+
* first — the identity headers are always the guard's own.
|
|
37
|
+
*/
|
|
38
|
+
export declare function upstreamHeaders(inbound: http.IncomingHttpHeaders, session: GuardSession): http.IncomingHttpHeaders;
|
|
39
|
+
/** The same URL with the one-time token removed — where the 302 points, so the
|
|
40
|
+
* token makes exactly one appearance in the address bar (spec risk #2). */
|
|
41
|
+
export declare function cleanUrl(rawUrl: string): string;
|
|
42
|
+
export declare class AppGuard {
|
|
43
|
+
readonly server: http.Server;
|
|
44
|
+
private readonly secrets;
|
|
45
|
+
private readonly upstream;
|
|
46
|
+
private readonly jtis;
|
|
47
|
+
private readonly sessions;
|
|
48
|
+
private readonly now;
|
|
49
|
+
private readonly log;
|
|
50
|
+
constructor(opts: AppGuardOptions);
|
|
51
|
+
listen(port: number, host?: string): Promise<void>;
|
|
52
|
+
close(): Promise<void>;
|
|
53
|
+
/** Live session count — for tests and the periodic log line. */
|
|
54
|
+
get sessionCount(): number;
|
|
55
|
+
/** The session this request carries, or null. Expired sessions are dropped on
|
|
56
|
+
* sight so the map cannot grow past its 8-hour window. */
|
|
57
|
+
private sessionFor;
|
|
58
|
+
/** Turn a verified token into a session. Returns the cookie value. */
|
|
59
|
+
private openSession;
|
|
60
|
+
private unauthorized;
|
|
61
|
+
private handle;
|
|
62
|
+
private proxy;
|
|
63
|
+
/**
|
|
64
|
+
* WebSocket (and any other) upgrades get the same cookie check, then a raw
|
|
65
|
+
* two-way pipe. Live apps need it; the Task Board polls today, but designing
|
|
66
|
+
* it out would be a trap for the next app.
|
|
67
|
+
*/
|
|
68
|
+
private handleUpgrade;
|
|
69
|
+
}
|
|
70
|
+
/** Split `FLOW_APP_SECRET` into secrets: comma, space or newline separated so a
|
|
71
|
+
* `.env` line and a shell export both work. */
|
|
72
|
+
export declare function parseSecretList(raw: string | undefined): string[];
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
// `flow-agent-bridge app-guard` — the reverse proxy that sits in front of an
|
|
2
|
+
// agent-hosted web app so only authenticated Flow channel members reach it
|
|
3
|
+
// (docs/design/MINI_APPS.md § "Guard"). The agent tunnels *this* port, never
|
|
4
|
+
// the app's.
|
|
5
|
+
//
|
|
6
|
+
// Three request shapes, in order:
|
|
7
|
+
//
|
|
8
|
+
// ?flow_token=… verify offline against the configured secret(s), burn the
|
|
9
|
+
// jti, mint a session cookie, 302 to the same URL without
|
|
10
|
+
// the token. The token is a door key: one use, ≤5 minutes.
|
|
11
|
+
// session cookie proxy to the upstream with X-Flow-* identity headers taken
|
|
12
|
+
// from the server-side session — never from the request.
|
|
13
|
+
// anything else 401, one line of HTML. No redirect into Flow: the artifact
|
|
14
|
+
// is the way in, and a framed app cannot drive an OAuth-style
|
|
15
|
+
// bounce anyway.
|
|
16
|
+
//
|
|
17
|
+
// Nothing decodable lives in the browser — the cookie is an opaque random id
|
|
18
|
+
// into an in-memory map. A guard restart therefore logs everyone out, and the
|
|
19
|
+
// clients re-mint invisibly on next open (spec risk #3, accepted).
|
|
20
|
+
import http from 'node:http';
|
|
21
|
+
import { randomBytes } from 'node:crypto';
|
|
22
|
+
import { JtiStore, decodeAppSecret, verifyAppTokenAny } from './app-token.js';
|
|
23
|
+
/** Session lifetime. Long enough to use an app for a working day, short enough
|
|
24
|
+
* that a removed member's access dies without any membership plumbing. */
|
|
25
|
+
export const SESSION_TTL_MS = 8 * 60 * 60 * 1000;
|
|
26
|
+
export const SESSION_COOKIE = 'flow_app_session';
|
|
27
|
+
/** The query parameter the client appends when opening the artifact. */
|
|
28
|
+
export const TOKEN_PARAM = 'flow_token';
|
|
29
|
+
const UNAUTHORIZED_HTML = '<!doctype html><meta charset="utf-8"><title>Flow</title><p>Open this app from its Flow channel.\n';
|
|
30
|
+
/** Parse a Cookie header into a name → value map. Tolerant: a malformed pair is
|
|
31
|
+
* skipped, not fatal. */
|
|
32
|
+
export function parseCookies(header) {
|
|
33
|
+
const out = {};
|
|
34
|
+
if (!header)
|
|
35
|
+
return out;
|
|
36
|
+
for (const part of header.split(';')) {
|
|
37
|
+
const eq = part.indexOf('=');
|
|
38
|
+
if (eq <= 0)
|
|
39
|
+
continue;
|
|
40
|
+
const name = part.slice(0, eq).trim();
|
|
41
|
+
if (name)
|
|
42
|
+
out[name] = part.slice(eq + 1).trim();
|
|
43
|
+
}
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
/** Drop our own session cookie from what the upstream sees — it is the guard's
|
|
47
|
+
* bookkeeping, not the app's, and the app has no way to use it. Other cookies
|
|
48
|
+
* (the app's own) pass through untouched. */
|
|
49
|
+
function stripSessionCookie(header) {
|
|
50
|
+
if (!header)
|
|
51
|
+
return undefined;
|
|
52
|
+
const kept = header
|
|
53
|
+
.split(';')
|
|
54
|
+
.filter((p) => p.slice(0, p.indexOf('=') > 0 ? p.indexOf('=') : p.length).trim() !== SESSION_COOKIE)
|
|
55
|
+
.map((p) => p.trim())
|
|
56
|
+
.filter(Boolean);
|
|
57
|
+
return kept.length ? kept.join('; ') : undefined;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The headers the upstream receives: the client's, minus anything `X-Flow-*`
|
|
61
|
+
* (so a viewer cannot claim to be someone else) and minus the session cookie,
|
|
62
|
+
* plus the identity we verified. Order matters only in that the strip happens
|
|
63
|
+
* first — the identity headers are always the guard's own.
|
|
64
|
+
*/
|
|
65
|
+
export function upstreamHeaders(inbound, session) {
|
|
66
|
+
const out = {};
|
|
67
|
+
for (const [k, v] of Object.entries(inbound)) {
|
|
68
|
+
if (k.toLowerCase().startsWith('x-flow-'))
|
|
69
|
+
continue;
|
|
70
|
+
out[k] = v;
|
|
71
|
+
}
|
|
72
|
+
const cookie = stripSessionCookie(inbound.cookie);
|
|
73
|
+
if (cookie)
|
|
74
|
+
out.cookie = cookie;
|
|
75
|
+
else
|
|
76
|
+
delete out.cookie;
|
|
77
|
+
out['x-flow-user-id'] = session.userId;
|
|
78
|
+
out['x-flow-user-name'] = session.displayName;
|
|
79
|
+
out['x-flow-artifact-id'] = session.artifactId;
|
|
80
|
+
out['x-flow-channel-id'] = session.channelId;
|
|
81
|
+
out['x-flow-is-agent'] = session.isAgent ? 'true' : 'false';
|
|
82
|
+
return out;
|
|
83
|
+
}
|
|
84
|
+
/** The same URL with the one-time token removed — where the 302 points, so the
|
|
85
|
+
* token makes exactly one appearance in the address bar (spec risk #2). */
|
|
86
|
+
export function cleanUrl(rawUrl) {
|
|
87
|
+
const u = new URL(rawUrl, 'http://guard.invalid');
|
|
88
|
+
u.searchParams.delete(TOKEN_PARAM);
|
|
89
|
+
return `${u.pathname}${u.search}${u.hash}`;
|
|
90
|
+
}
|
|
91
|
+
export class AppGuard {
|
|
92
|
+
server;
|
|
93
|
+
secrets;
|
|
94
|
+
upstream;
|
|
95
|
+
jtis = new JtiStore();
|
|
96
|
+
sessions = new Map();
|
|
97
|
+
now;
|
|
98
|
+
log;
|
|
99
|
+
constructor(opts) {
|
|
100
|
+
if (opts.secrets.length === 0)
|
|
101
|
+
throw new Error('app-guard needs at least one secret');
|
|
102
|
+
this.secrets = opts.secrets.map(decodeAppSecret);
|
|
103
|
+
this.upstream = new URL(opts.upstream);
|
|
104
|
+
if (this.upstream.protocol !== 'http:' && this.upstream.protocol !== 'https:') {
|
|
105
|
+
throw new Error(`--upstream must be http(s), got ${opts.upstream}`);
|
|
106
|
+
}
|
|
107
|
+
this.now = opts.now ?? (() => new Date());
|
|
108
|
+
this.log = opts.log ?? ((l) => console.error(l));
|
|
109
|
+
this.server = http.createServer((req, res) => this.handle(req, res));
|
|
110
|
+
this.server.on('upgrade', (req, socket, head) => this.handleUpgrade(req, socket, head));
|
|
111
|
+
}
|
|
112
|
+
listen(port, host = '0.0.0.0') {
|
|
113
|
+
return new Promise((resolve, reject) => {
|
|
114
|
+
this.server.once('error', reject);
|
|
115
|
+
this.server.listen(port, host, () => {
|
|
116
|
+
this.server.removeListener('error', reject);
|
|
117
|
+
resolve();
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
close() {
|
|
122
|
+
return new Promise((resolve) => {
|
|
123
|
+
this.server.closeAllConnections?.();
|
|
124
|
+
this.server.close(() => resolve());
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/** Live session count — for tests and the periodic log line. */
|
|
128
|
+
get sessionCount() {
|
|
129
|
+
return this.sessions.size;
|
|
130
|
+
}
|
|
131
|
+
/** The session this request carries, or null. Expired sessions are dropped on
|
|
132
|
+
* sight so the map cannot grow past its 8-hour window. */
|
|
133
|
+
sessionFor(req) {
|
|
134
|
+
const id = parseCookies(req.headers.cookie)[SESSION_COOKIE];
|
|
135
|
+
if (!id)
|
|
136
|
+
return null;
|
|
137
|
+
const s = this.sessions.get(id);
|
|
138
|
+
if (!s)
|
|
139
|
+
return null;
|
|
140
|
+
if (s.expiresAt <= this.now().getTime()) {
|
|
141
|
+
this.sessions.delete(id);
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
return s;
|
|
145
|
+
}
|
|
146
|
+
/** Turn a verified token into a session. Returns the cookie value. */
|
|
147
|
+
openSession(payload) {
|
|
148
|
+
const id = randomBytes(32).toString('base64url');
|
|
149
|
+
this.sessions.set(id, {
|
|
150
|
+
userId: payload.userId,
|
|
151
|
+
displayName: payload.displayName,
|
|
152
|
+
isAgent: payload.isAgent,
|
|
153
|
+
artifactId: payload.artifactId,
|
|
154
|
+
channelId: payload.channelId,
|
|
155
|
+
expiresAt: this.now().getTime() + SESSION_TTL_MS,
|
|
156
|
+
});
|
|
157
|
+
return id;
|
|
158
|
+
}
|
|
159
|
+
unauthorized(res) {
|
|
160
|
+
res.writeHead(401, {
|
|
161
|
+
'content-type': 'text/html; charset=utf-8',
|
|
162
|
+
'cache-control': 'no-store',
|
|
163
|
+
'content-length': Buffer.byteLength(UNAUTHORIZED_HTML),
|
|
164
|
+
});
|
|
165
|
+
res.end(UNAUTHORIZED_HTML);
|
|
166
|
+
}
|
|
167
|
+
handle(req, res) {
|
|
168
|
+
const rawUrl = req.url ?? '/';
|
|
169
|
+
const token = new URL(rawUrl, 'http://guard.invalid').searchParams.get(TOKEN_PARAM);
|
|
170
|
+
if (token) {
|
|
171
|
+
const payload = verifyAppTokenAny(this.secrets, token, this.now());
|
|
172
|
+
// A replayed jti is treated exactly like a bad token: the guard says
|
|
173
|
+
// nothing about *why*, because the difference is only interesting to
|
|
174
|
+
// someone probing it.
|
|
175
|
+
if (!payload || !this.jtis.burn(payload.jti, payload.exp, this.now())) {
|
|
176
|
+
this.log(`app-guard: rejected token (${payload ? 'replayed' : 'invalid or expired'})`);
|
|
177
|
+
return this.unauthorized(res);
|
|
178
|
+
}
|
|
179
|
+
const id = this.openSession(payload);
|
|
180
|
+
this.log(`app-guard: session opened for ${payload.displayName} <${payload.userId}>`);
|
|
181
|
+
res.writeHead(302, {
|
|
182
|
+
location: cleanUrl(rawUrl),
|
|
183
|
+
// SameSite=None because the web client frames the app cross-origin;
|
|
184
|
+
// that requires Secure, which is fine — the tunnel is https.
|
|
185
|
+
'set-cookie': `${SESSION_COOKIE}=${id}; Path=/; HttpOnly; Secure; SameSite=None; Max-Age=${Math.floor(SESSION_TTL_MS / 1000)}`,
|
|
186
|
+
'cache-control': 'no-store',
|
|
187
|
+
});
|
|
188
|
+
res.end();
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const session = this.sessionFor(req);
|
|
192
|
+
if (!session)
|
|
193
|
+
return this.unauthorized(res);
|
|
194
|
+
this.proxy(req, res, session);
|
|
195
|
+
}
|
|
196
|
+
proxy(req, res, session) {
|
|
197
|
+
const target = new URL(req.url ?? '/', this.upstream);
|
|
198
|
+
const proxied = http.request({
|
|
199
|
+
protocol: this.upstream.protocol,
|
|
200
|
+
hostname: this.upstream.hostname,
|
|
201
|
+
port: this.upstream.port,
|
|
202
|
+
method: req.method,
|
|
203
|
+
path: `${target.pathname}${target.search}`,
|
|
204
|
+
headers: upstreamHeaders(req.headers, session),
|
|
205
|
+
}, (up) => {
|
|
206
|
+
res.writeHead(up.statusCode ?? 502, up.headers);
|
|
207
|
+
up.pipe(res);
|
|
208
|
+
});
|
|
209
|
+
proxied.on('error', (err) => {
|
|
210
|
+
this.log(`app-guard: upstream error: ${err.message}`);
|
|
211
|
+
if (!res.headersSent)
|
|
212
|
+
res.writeHead(502, { 'content-type': 'text/plain; charset=utf-8' });
|
|
213
|
+
res.end('upstream unavailable\n');
|
|
214
|
+
});
|
|
215
|
+
req.pipe(proxied);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* WebSocket (and any other) upgrades get the same cookie check, then a raw
|
|
219
|
+
* two-way pipe. Live apps need it; the Task Board polls today, but designing
|
|
220
|
+
* it out would be a trap for the next app.
|
|
221
|
+
*/
|
|
222
|
+
handleUpgrade(req, socket, head) {
|
|
223
|
+
const session = this.sessionFor(req);
|
|
224
|
+
if (!session) {
|
|
225
|
+
socket.write('HTTP/1.1 401 Unauthorized\r\nConnection: close\r\n\r\n');
|
|
226
|
+
return void socket.destroy();
|
|
227
|
+
}
|
|
228
|
+
// Bytes the client already sent past the request headers belong to the
|
|
229
|
+
// tunnelled stream, so put them back before the pipe is wired up.
|
|
230
|
+
if (head?.length)
|
|
231
|
+
socket.unshift(head);
|
|
232
|
+
const target = new URL(req.url ?? '/', this.upstream);
|
|
233
|
+
const proxied = http.request({
|
|
234
|
+
protocol: this.upstream.protocol,
|
|
235
|
+
hostname: this.upstream.hostname,
|
|
236
|
+
port: this.upstream.port,
|
|
237
|
+
method: req.method,
|
|
238
|
+
path: `${target.pathname}${target.search}`,
|
|
239
|
+
headers: upstreamHeaders(req.headers, session),
|
|
240
|
+
});
|
|
241
|
+
proxied.on('upgrade', (upRes, upSocket, upHead) => {
|
|
242
|
+
const headers = Object.entries(upRes.headers)
|
|
243
|
+
.flatMap(([k, v]) => (Array.isArray(v) ? v.map((one) => `${k}: ${one}`) : [`${k}: ${v}`]))
|
|
244
|
+
.join('\r\n');
|
|
245
|
+
socket.write(`HTTP/1.1 ${upRes.statusCode} ${upRes.statusMessage}\r\n${headers}\r\n\r\n`);
|
|
246
|
+
if (upHead?.length)
|
|
247
|
+
upSocket.unshift(upHead);
|
|
248
|
+
upSocket.on('error', () => socket.destroy());
|
|
249
|
+
socket.on('error', () => upSocket.destroy());
|
|
250
|
+
upSocket.pipe(socket).pipe(upSocket);
|
|
251
|
+
});
|
|
252
|
+
proxied.on('error', (err) => {
|
|
253
|
+
this.log(`app-guard: upstream upgrade error: ${err.message}`);
|
|
254
|
+
socket.destroy();
|
|
255
|
+
});
|
|
256
|
+
// An upgrade request carries no body — send the head and wait.
|
|
257
|
+
proxied.end();
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/** Split `FLOW_APP_SECRET` into secrets: comma, space or newline separated so a
|
|
261
|
+
* `.env` line and a shell export both work. */
|
|
262
|
+
export function parseSecretList(raw) {
|
|
263
|
+
return (raw ?? '').split(/[\s,]+/).filter(Boolean);
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=app-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-guard.js","sourceRoot":"","sources":["../src/app-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** exp − iat, as minted by the server. Also the ceiling on how long a burned
|
|
2
|
+
* `jti` has to be remembered. */
|
|
3
|
+
export declare const APP_TOKEN_TTL_SECONDS = 300;
|
|
4
|
+
export interface AppTokenPayload {
|
|
5
|
+
v: 1;
|
|
6
|
+
artifactId: string;
|
|
7
|
+
channelId: string;
|
|
8
|
+
workspaceId: string;
|
|
9
|
+
userId: string;
|
|
10
|
+
displayName: string;
|
|
11
|
+
isAgent: boolean;
|
|
12
|
+
iat: number;
|
|
13
|
+
exp: number;
|
|
14
|
+
jti: string;
|
|
15
|
+
}
|
|
16
|
+
/** The secret as it reaches the agent: base64url of 32 random bytes, straight
|
|
17
|
+
* from `create_artifact`. Decoded once at startup so a typo fails loudly there
|
|
18
|
+
* rather than as a mystery 401 later. */
|
|
19
|
+
export declare function decodeAppSecret(secret: string): Buffer;
|
|
20
|
+
/**
|
|
21
|
+
* Verify one token against one secret. Returns the payload, or null when the
|
|
22
|
+
* token is malformed, signed by a different secret, or expired. Replay is the
|
|
23
|
+
* caller's business (see `JtiStore`) — this function is pure.
|
|
24
|
+
*/
|
|
25
|
+
export declare function verifyAppToken(secret: Buffer, token: string, now?: Date): AppTokenPayload | null;
|
|
26
|
+
/**
|
|
27
|
+
* Verify against every secret the guard was given. One app can be pinned in
|
|
28
|
+
* several channels — a second artifact, a second secret (MINI_APPS.md risk #5)
|
|
29
|
+
* — and a rotation means running with old and new for the overlap. Cost is one
|
|
30
|
+
* HMAC per secret, and the list is a handful long.
|
|
31
|
+
*/
|
|
32
|
+
export declare function verifyAppTokenAny(secrets: Buffer[], token: string, now?: Date): AppTokenPayload | null;
|
|
33
|
+
/**
|
|
34
|
+
* Seen `jti`s, remembered until their token would have expired anyway. A token
|
|
35
|
+
* is a door key: it opens the guard once and is then dead. Memory is bounded by
|
|
36
|
+
* the 5-minute window — the sweep on every `burn` keeps it that way without a
|
|
37
|
+
* timer to leak.
|
|
38
|
+
*/
|
|
39
|
+
export declare class JtiStore {
|
|
40
|
+
private seen;
|
|
41
|
+
/** Record `jti` as used. Returns false if it had already been burned — that
|
|
42
|
+
* is a replay, and the caller must reject. */
|
|
43
|
+
burn(jti: string, expSeconds: number, now?: Date): boolean;
|
|
44
|
+
get size(): number;
|
|
45
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// Mini-app identity tokens, the verifying half (docs/design/MINI_APPS.md).
|
|
2
|
+
//
|
|
3
|
+
// flow_token = base64url(payloadJson) + "." + base64url(hmacSha256(secret, payloadJson))
|
|
4
|
+
//
|
|
5
|
+
// This is deliberately a standalone reimplementation of the server's
|
|
6
|
+
// `packages/server/src/lib/appToken.ts` rather than a shared import: the guard
|
|
7
|
+
// runs on the agent's machine, next to the app, and its whole promise is that
|
|
8
|
+
// verification is *offline* — no Flow calls, no server code, a few lines any
|
|
9
|
+
// language could rewrite. `verifyAppToken` here and `signAppToken` there are
|
|
10
|
+
// pinned together by app-token.test.ts, which signs with the documented recipe
|
|
11
|
+
// and verifies with this.
|
|
12
|
+
//
|
|
13
|
+
// The signature covers the exact payload *bytes* that travelled, so we HMAC the
|
|
14
|
+
// decoded segment, never a re-serialisation of the parsed object — key order
|
|
15
|
+
// and JSON spacing would otherwise silently break tokens.
|
|
16
|
+
import { createHmac, timingSafeEqual } from 'node:crypto';
|
|
17
|
+
/** exp − iat, as minted by the server. Also the ceiling on how long a burned
|
|
18
|
+
* `jti` has to be remembered. */
|
|
19
|
+
export const APP_TOKEN_TTL_SECONDS = 300;
|
|
20
|
+
/** The secret as it reaches the agent: base64url of 32 random bytes, straight
|
|
21
|
+
* from `create_artifact`. Decoded once at startup so a typo fails loudly there
|
|
22
|
+
* rather than as a mystery 401 later. */
|
|
23
|
+
export function decodeAppSecret(secret) {
|
|
24
|
+
const raw = Buffer.from(secret.trim(), 'base64url');
|
|
25
|
+
if (raw.length === 0)
|
|
26
|
+
throw new Error('app secret is empty or not base64url');
|
|
27
|
+
return raw;
|
|
28
|
+
}
|
|
29
|
+
function isPayload(p) {
|
|
30
|
+
if (typeof p !== 'object' || p === null)
|
|
31
|
+
return false;
|
|
32
|
+
const o = p;
|
|
33
|
+
return (o.v === 1 &&
|
|
34
|
+
typeof o.artifactId === 'string' &&
|
|
35
|
+
typeof o.channelId === 'string' &&
|
|
36
|
+
typeof o.workspaceId === 'string' &&
|
|
37
|
+
typeof o.userId === 'string' &&
|
|
38
|
+
typeof o.displayName === 'string' &&
|
|
39
|
+
typeof o.isAgent === 'boolean' &&
|
|
40
|
+
typeof o.iat === 'number' &&
|
|
41
|
+
typeof o.exp === 'number' &&
|
|
42
|
+
typeof o.jti === 'string' &&
|
|
43
|
+
o.jti.length > 0);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Verify one token against one secret. Returns the payload, or null when the
|
|
47
|
+
* token is malformed, signed by a different secret, or expired. Replay is the
|
|
48
|
+
* caller's business (see `JtiStore`) — this function is pure.
|
|
49
|
+
*/
|
|
50
|
+
export function verifyAppToken(secret, token, now = new Date()) {
|
|
51
|
+
const dot = token.indexOf('.');
|
|
52
|
+
if (dot <= 0 || token.indexOf('.', dot + 1) !== -1)
|
|
53
|
+
return null;
|
|
54
|
+
const json = Buffer.from(token.slice(0, dot), 'base64url');
|
|
55
|
+
const given = Buffer.from(token.slice(dot + 1), 'base64url');
|
|
56
|
+
if (json.length === 0 || given.length === 0)
|
|
57
|
+
return null;
|
|
58
|
+
const expected = createHmac('sha256', secret).update(json).digest();
|
|
59
|
+
if (given.length !== expected.length || !timingSafeEqual(given, expected))
|
|
60
|
+
return null;
|
|
61
|
+
let payload;
|
|
62
|
+
try {
|
|
63
|
+
payload = JSON.parse(json.toString('utf8'));
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
if (!isPayload(payload))
|
|
69
|
+
return null;
|
|
70
|
+
if (payload.exp * 1000 <= now.getTime())
|
|
71
|
+
return null;
|
|
72
|
+
return payload;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Verify against every secret the guard was given. One app can be pinned in
|
|
76
|
+
* several channels — a second artifact, a second secret (MINI_APPS.md risk #5)
|
|
77
|
+
* — and a rotation means running with old and new for the overlap. Cost is one
|
|
78
|
+
* HMAC per secret, and the list is a handful long.
|
|
79
|
+
*/
|
|
80
|
+
export function verifyAppTokenAny(secrets, token, now = new Date()) {
|
|
81
|
+
for (const s of secrets) {
|
|
82
|
+
const payload = verifyAppToken(s, token, now);
|
|
83
|
+
if (payload)
|
|
84
|
+
return payload;
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Seen `jti`s, remembered until their token would have expired anyway. A token
|
|
90
|
+
* is a door key: it opens the guard once and is then dead. Memory is bounded by
|
|
91
|
+
* the 5-minute window — the sweep on every `burn` keeps it that way without a
|
|
92
|
+
* timer to leak.
|
|
93
|
+
*/
|
|
94
|
+
export class JtiStore {
|
|
95
|
+
seen = new Map(); // jti → exp (unix seconds)
|
|
96
|
+
/** Record `jti` as used. Returns false if it had already been burned — that
|
|
97
|
+
* is a replay, and the caller must reject. */
|
|
98
|
+
burn(jti, expSeconds, now = new Date()) {
|
|
99
|
+
const nowSeconds = Math.floor(now.getTime() / 1000);
|
|
100
|
+
for (const [k, exp] of this.seen)
|
|
101
|
+
if (exp <= nowSeconds)
|
|
102
|
+
this.seen.delete(k);
|
|
103
|
+
if (this.seen.has(jti))
|
|
104
|
+
return false;
|
|
105
|
+
this.seen.set(jti, expSeconds);
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
get size() {
|
|
109
|
+
return this.seen.size;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=app-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-token.js","sourceRoot":"","sources":["../src/app-token.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
// (mints a fresh agent token, revoking the old one — the lost-agent.json path)
|
|
18
18
|
// flow-agent-bridge mcp-init [config.json]
|
|
19
19
|
// (write ./.mcp.json so MCP clients like the claude CLI load the flow server directly)
|
|
20
|
+
// flow-agent-bridge app-guard --upstream http://localhost:3000 --port 8788
|
|
21
|
+
// (put an agent-hosted web app behind Flow membership; secret in FLOW_APP_SECRET)
|
|
20
22
|
// flow-agent-bridge mcp (internal) the flow MCP stdio server
|
|
21
23
|
import fs from 'node:fs';
|
|
22
24
|
import { loadConfig } from './config.js';
|
|
@@ -26,6 +28,7 @@ import { runMcpServer } from './mcp-server.js';
|
|
|
26
28
|
import { runMcpInit } from './mcp-init.js';
|
|
27
29
|
import { runSetup } from './setup.js';
|
|
28
30
|
import { runSupervisor } from './supervisor.js';
|
|
31
|
+
import { AppGuardUsageError, runAppGuard } from './app-guard-cli.js';
|
|
29
32
|
/** An invite code positional (`flow-XXXX-XXXX`), told apart from a config path. */
|
|
30
33
|
const INVITE_CODE_RE = /^flow-[A-HJ-NP-Z2-9]{4}-[A-HJ-NP-Z2-9]{4}$/;
|
|
31
34
|
function usage() {
|
|
@@ -36,7 +39,10 @@ function usage() {
|
|
|
36
39
|
' --server --token --description --cwd\n' +
|
|
37
40
|
' flow-agent-bridge run <config.json>\n' +
|
|
38
41
|
' flow-agent-bridge login --server <url> --username <handle> --key <secret>\n' +
|
|
39
|
-
' flow-agent-bridge mcp-init [config.json] write ./.mcp.json for MCP clients (claude CLI)\n'
|
|
42
|
+
' flow-agent-bridge mcp-init [config.json] write ./.mcp.json for MCP clients (claude CLI)\n' +
|
|
43
|
+
' flow-agent-bridge app-guard --upstream <url> [--port 8788] [--host 0.0.0.0]\n' +
|
|
44
|
+
' only Flow members of the app’s channel reach it; FLOW_APP_SECRET holds the\n' +
|
|
45
|
+
' secret create_artifact returned (comma-separate several). Tunnel this port.\n');
|
|
40
46
|
process.exit(2);
|
|
41
47
|
}
|
|
42
48
|
function flag(args, name) {
|
|
@@ -89,6 +95,20 @@ async function main() {
|
|
|
89
95
|
return runMcpServer();
|
|
90
96
|
if (cmd === 'mcp-init')
|
|
91
97
|
return runMcpInit(rest[0] ?? 'agent.json');
|
|
98
|
+
// The guard is a standalone server, not a bridge daemon: no config, no Flow
|
|
99
|
+
// connection — verification is offline (docs/design/MINI_APPS.md).
|
|
100
|
+
if (cmd === 'app-guard') {
|
|
101
|
+
try {
|
|
102
|
+
return await runAppGuard(rest);
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
if (err instanceof AppGuardUsageError) {
|
|
106
|
+
console.error(err.message);
|
|
107
|
+
process.exit(2);
|
|
108
|
+
}
|
|
109
|
+
throw err;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
92
112
|
if (cmd === 'login') {
|
|
93
113
|
const server = flag(rest, 'server');
|
|
94
114
|
const username = flag(rest, 'username');
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,yBAAyB;AACzB,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,+EAA+E;AAC/E,gFAAgF;AAChF,qFAAqF;AACrF,kFAAkF;AAClF,+EAA+E;AAC/E,mEAAmE;AACnE,yEAAyE;AACzE,+EAA+E;AAC/E,iFAAiF;AACjF,wEAAwE;AACxE,8EAA8E;AAC9E,iFAAiF;AACjF,6CAA6C;AAC7C,yFAAyF;AACzF,iFAAiF;AACjF,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAqB,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -218,7 +218,7 @@ const TOOLS = [
|
|
|
218
218
|
},
|
|
219
219
|
{
|
|
220
220
|
name: 'create_artifact',
|
|
221
|
-
description: 'Create an artifact — a named object pinned to a channel and shared with everyone in it. It opens in the side panel and nests under the channel in the sidebar. Two kinds: a FILE artifact (provide the content inline, or a local file path, or the id of an already-uploaded file) or a LINK artifact (provide a url — members get the live page, not a file). Returns the artifact id (use it with update_artifact).',
|
|
221
|
+
description: 'Create an artifact — a named object pinned to a channel and shared with everyone in it. It opens in the side panel and nests under the channel in the sidebar. Two kinds: a FILE artifact (provide the content inline, or a local file path, or the id of an already-uploaded file) or a LINK artifact (provide a url — members get the live page, not a file). Returns the artifact id (use it with update_artifact). A link artifact can also be registered as an APP (app: true) — see the app parameter.',
|
|
222
222
|
inputSchema: {
|
|
223
223
|
type: 'object',
|
|
224
224
|
properties: {
|
|
@@ -229,6 +229,10 @@ const TOOLS = [
|
|
|
229
229
|
fileId: { type: 'string', description: 'Id of a file already uploaded/shared in Flow to pin as-is.' },
|
|
230
230
|
url: { type: 'string', description: 'http(s) URL to pin as a link artifact instead of a file. Mutually exclusive with content/path/fileId.' },
|
|
231
231
|
channelId: { type: 'string', description: 'Channel to pin the artifact in (default: the current conversation).' },
|
|
232
|
+
app: {
|
|
233
|
+
type: 'boolean',
|
|
234
|
+
description: 'Register this url as an app (url only): only members of the channel can reach it. The response carries a secret, returned ONCE — run `FLOW_APP_SECRET=<secret> npx flow-agent-bridge app-guard --upstream <your local app> --port 8788` and tunnel 8788 instead of the app. The guard authenticates viewers offline and passes their identity to your app in X-Flow-User-Id / X-Flow-User-Name headers.',
|
|
235
|
+
},
|
|
232
236
|
},
|
|
233
237
|
},
|
|
234
238
|
},
|
|
@@ -563,11 +567,26 @@ export async function runMcpServer() {
|
|
|
563
567
|
if (url && hasFileSource) {
|
|
564
568
|
return toolText('create_artifact takes either url (link artifact) or one file source (content/path/fileId), not both', true);
|
|
565
569
|
}
|
|
570
|
+
const asApp = args.app === true;
|
|
571
|
+
if (asApp && !url)
|
|
572
|
+
return toolText('create_artifact: app is only valid with url', true);
|
|
566
573
|
if (url) {
|
|
567
574
|
if (!/^https?:\/\//i.test(url))
|
|
568
575
|
return toolText('url must be http(s)', true);
|
|
569
|
-
const created = await api.createArtifact(channelId, { url, name: artifactName });
|
|
570
|
-
|
|
576
|
+
const created = await api.createArtifact(channelId, { url, name: artifactName, app: asApp });
|
|
577
|
+
if (!asApp)
|
|
578
|
+
return toolText(`link artifact "${created.name}" created (id ${created.id})`);
|
|
579
|
+
// The secret exists in this one response and nowhere else — Flow
|
|
580
|
+
// cannot show it again (docs/design/MINI_APPS.md), so hand it to the
|
|
581
|
+
// agent with the exact command it is for.
|
|
582
|
+
if (!created.appSecret) {
|
|
583
|
+
return toolText(`app artifact "${created.name}" created (id ${created.id}) but the server returned no secret — this Flow server may predate mini apps`, true);
|
|
584
|
+
}
|
|
585
|
+
return toolText(`app artifact "${created.name}" created (id ${created.id}).\n` +
|
|
586
|
+
'Only members of this channel can reach it. Put the guard in front of your local app and tunnel the GUARD\'s port:\n' +
|
|
587
|
+
` FLOW_APP_SECRET=${created.appSecret} npx flow-agent-bridge app-guard --upstream http://localhost:3000 --port 8788\n` +
|
|
588
|
+
'This secret is shown once and is not stored in Flow — keep it if you need to restart the guard. ' +
|
|
589
|
+
'Your app receives each viewer as X-Flow-User-Id / X-Flow-User-Name / X-Flow-Is-Agent headers.');
|
|
571
590
|
}
|
|
572
591
|
// resolve a file id: pin an existing file, or upload path/content (owned)
|
|
573
592
|
const resolved = await resolveArtifactFile(args, artifactName);
|
|
@@ -619,7 +638,7 @@ export async function runMcpServer() {
|
|
|
619
638
|
if (rows.length === 0)
|
|
620
639
|
return toolText('no artifacts in this channel');
|
|
621
640
|
const lines = rows.map((a) => a.kind === 'link'
|
|
622
|
-
? `[link] "${a.name}" (id ${a.id}) → ${a.url} — updated ${a.updatedAt}`
|
|
641
|
+
? `[${a.isApp ? 'app' : 'link'}] "${a.name}" (id ${a.id}) → ${a.url} — updated ${a.updatedAt}`
|
|
623
642
|
: `[file] "${a.name}" (id ${a.id}) — fileId ${a.fileId}${a.file ? `, ${a.file.mimeType}, ${a.file.sizeBytes} bytes` : ''} — updated ${a.updatedAt}`);
|
|
624
643
|
return toolText(lines.join('\n'));
|
|
625
644
|
}
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,sEAAsE;AACtE,sEAAsE;AACtE,8EAA8E;AAC9E,gCAAgC;AAChC,wBAAwB;AACxB,EAAE;AACF,6EAA6E;AAC7E,qEAAqE;AACrE,2EAA2E;AAC3E,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AASzE,6EAA6E;AAC7E,MAAM,YAAY,GAAG,CAAC,CAAwC,EAAU,EAAE,CACxE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;AAExC;;4EAE4E;AAC5E,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAEzC;;;;;;;;;+CAS+C;AAC/C,MAAM,UAAU,oBAAoB,CAClC,IAAqD,EACrD,OAAgE;IAEhE,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC;IAC1D,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAE,IAAI,CAAC,YAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,IAAI,YAAY;QAAE,OAAO,EAAE,SAAS,EAAE,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC;IACrF,IAAI,WAAW,IAAI,SAAS;QAAE,OAAO,EAAE,SAAS,EAAE,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;IAC5G,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;AAC9E,CAAC;AAED,MAAM,KAAK,GAAG;IACZ;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,sGAAsG;YACtG,6GAA6G;YAC7G,wGAAwG;YACxG,sDAAsD;QACxD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;gBACjE,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,gGAAgG;wBAChG,6BAA6B;iBAChC;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,sGAAsG;wBACtG,0CAA0C;iBAC7C;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,qCAAqC;QAClD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;gBACrE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iCAAiC,EAAE;aAC1E;YACD,QAAQ,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC;SACjC;KACF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,6GAA6G;YAC7G,mGAAmG;QACrG,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;gBAClE,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,gGAAgG;wBAChG,6BAA6B;iBAChC;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,sGAAsG;wBACtG,0CAA0C;iBAC7C;gBACD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8CAA8C,EAAE;aACzF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,8EAA8E;QAC3F,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;gBAC7D,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oDAAoD,EAAE;gBAChG,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;aAC9E;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,+EAA+E;QAC5F,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KAChD;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,sGAAsG;QACnH,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KAChD;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,uGAAuG;QACpH,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE,EAAE;YACjF,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,4GAA4G;YAC5G,+GAA+G;YAC/G,gHAAgH;YAChH,yFAAyF;QAC3F,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,wCAAwC,EAAE;gBACxG,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;aAC1F;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,wBAAwB;QACrC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE,EAAE;YAClF,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,8LAA8L;QAChM,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uDAAuD,EAAE;gBAC9F,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;gBACjF,SAAS,EAAE;oBACT,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,gEAAgE;iBAC9E;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,waAAwa;iBAC3a;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,2yBAA2yB;QAC7yB,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qFAAqF;iBACnG;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uFAAuF;iBACrG;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;SAClC;KACF;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,uLAAuL;QACzL,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2DAA2D,EAAE;gBACvG,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE;aACvF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,wGAAwG;QAC1G,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iCAAiC,EAAE,EAAE;YACxF,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,8eAA8e;QAChf,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+FAA+F,EAAE;gBACtI,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sEAAsE,EAAE;gBAChH,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sFAAsF,EAAE;gBACjI,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2DAA2D,EAAE;gBAClG,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4DAA4D,EAAE;gBACrG,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uGAAuG,EAAE;gBAC7I,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qEAAqE,EAAE;gBACjH,GAAG,EAAE;oBACH,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,yYAAyY;iBAC5Y;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,4SAA4S;QAC9S,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sDAAsD,EAAE;gBACnG,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;gBACrE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qEAAqE,EAAE;gBAC/G,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4EAA4E,EAAE;gBACvH,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2DAA2D,EAAE;gBAClG,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0DAA0D,EAAE;gBACnG,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+GAA+G,EAAE;aACtJ;YACD,QAAQ,EAAE,CAAC,YAAY,CAAC;SACzB;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,iPAAiP;QACnP,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kEAAkE,EAAE;aAC/G;SACF;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,2QAA2Q;QAC7Q,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kDAAkD,EAAE;gBAC9F,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0CAA0C,EAAE;gBAClF,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2DAA2D,EAAE;aACrG;SACF;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,4NAA4N;QAC9N,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;gBACtE,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sEAAsE;iBACpF;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC;AAEF,MAAM,WAAW,GAA2B;IAC1C,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,eAAe;IACtB,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,iBAAiB;IACzB,OAAO,EAAE,YAAY;CACtB,CAAC;AAEF;;;+EAG+E;AAC/E,SAAS,eAAe,CAAC,GAAY;IACnC,IAAI,CAAC,CAAC,GAAG,YAAY,YAAY,CAAC;QAAE,OAAQ,GAAa,CAAC,OAAO,CAAC;IAClE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,6GAA6G,CAAC;IACvH,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC;AAED,oFAAoF;AACpF,SAAS,aAAa,CACpB,UAAkB,EAClB,OAAgB;IAEhB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CACtB,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,EAC9F,CAAC,GAAG,EAAE,EAAE;YACN,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;YACnD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmD,CAAC,CAAC;gBAC9E,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QACF,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC;QACzF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;IACjD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;IACxD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;IAC3D,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,SAAS,CAAC;IACzE,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAE1C,MAAM,KAAK,GAAG,CAAC,GAAY,EAAQ,EAAE;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,EAA0B,EAAE,MAAe,EAAQ,EAAE;QAClE,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,EAA0B,EAAE,IAAY,EAAE,OAAe,EAAQ,EAAE;QACrF,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,OAAO,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAErG;;6EAEyE;IACzE,KAAK,UAAU,mBAAmB,CAChC,IAA6B,EAC7B,KAAyB;QAEzB,MAAM,QAAQ,GAAI,IAAI,CAAC,MAA6B,IAAI,EAAE,CAAC;QAC3D,IAAI,QAAQ;YAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAClE,IAAI,QAAgB,CAAC;QACrB,IAAI,IAAY,CAAC;QACjB,IAAI,IAAY,CAAC;QACjB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC1B,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,0BAA0B,CAAC;QACjH,CAAC;aAAM,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,QAAQ,GAAG,KAAK,IAAI,cAAc,CAAC;YACnC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,IAAI,YAAY,CAAC;YACnD,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACrE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACvE,CAAC;IAED,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,IAA6B;QACjE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,oBAAoB,CAAC,IAAI,EAAE;YAC7D,SAAS,EAAE,gBAAgB;YAC3B,YAAY,EAAE,mBAAmB;SAClC,CAAC,CAAC;QACH,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;gBACpF,OAAO,QAAQ,CAAC,oBAAoB,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YACjD,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC9E,OAAO,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YACpC,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;gBAChD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,0BAA0B,CAAC;gBACtF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxG,OAAO,QAAQ,CAAC,YAAY,QAAQ,gBAAgB,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YACjE,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBACpD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ;qBACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;qBAC/D,KAAK,CAAC,CAAC,KAAK,CAAC;qBACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClH,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YAChE,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;gBACrD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxE,MAAM,KAAK,GAAG,QAAQ;qBACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;qBAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACT,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACpG,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBAC9B,kEAAkE;oBAClE,gCAAgC;oBAChC,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrF,OAAO,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,MAAM,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAClF,CAAC,CAAC,CAAC;gBACL,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;YACnE,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;gBACnD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACxH,CAAC;gBACF,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,CAAC;YACD,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;gBACpD,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;gBACrD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;YACD,KAAK,uBAAuB,CAAC,CAAC,CAAC;gBAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBACvC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;oBACzC,OAAO,QAAQ,CAAC,oDAAoD,EAAE,IAAI,CAAC,CAAC;gBAC9E,CAAC;gBACD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACnE,oEAAoE;gBACpE,kDAAkD;gBAClD,MAAM,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,4BAA4B,CAAC,CAAC;gBAC3E,OAAO,QAAQ,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;YAC1F,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,CAAC,IAAI;oBAAE,OAAO,QAAQ,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;gBAChE,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE;wBACnD,IAAI;wBACJ,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACpD,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACvD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC9D,CAAC,CAAC;oBACH,sEAAsE;oBACtE,oEAAoE;oBACpE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ;wBAClC,CAAC,CAAC,MAAM,GAAG;6BACN,YAAY,CAAC,WAAW,CAAC;6BACzB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;4BACX,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;4BACpD,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;wBACzC,CAAC,CAAC;6BACD,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;wBAC3B,CAAC,CAAC,SAAS,CAAC;oBACd,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrF,OAAO,QAAQ,CACb,YAAY,OAAO,CAAC,IAAI,QAAQ,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,oBAAoB,CACjH,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;wBACjE,6EAA6E;wBAC7E,MAAM,QAAQ,GAAG,MAAM,GAAG;6BACvB,YAAY,CAAC,WAAW,CAAC;6BACzB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;6BAC7C,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;wBAC1B,OAAO,QAAQ,CACb,QAAQ;4BACN,CAAC,CAAC,oBAAoB,IAAI,uBAAuB,QAAQ,CAAC,EAAE,oCAAoC;4BAChG,CAAC,CAAC,oBAAoB,IAAI,iBAAiB,EAC7C,IAAI,CACL,CAAC;oBACJ,CAAC;oBACD,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;gBAChD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,QAAQ,CACb,yGAAyG,EACzG,IAAI,CACL,CAAC;gBACJ,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAChD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;oBAAE,OAAO,QAAQ,CAAC,uCAAuC,EAAE,IAAI,CAAC,CAAC;gBACvF,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE;wBACpC,SAAS,EAAE,MAAM;wBACjB,MAAM;wBACN,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE;wBACtC,eAAe,EAAE,gBAAgB;qBAClC,CAAC,CAAC;oBACH,IAAI,OAAO,IAAI,GAAG;wBAAE,OAAO,QAAQ,CAAC,sBAAsB,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;oBAC7E,OAAO,QAAQ,CACb,GAAG,GAAG,CAAC,IAAI,kIAAkI,CAC9I,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,QAAQ,CACb,sBAAuB,GAAa,CAAC,OAAO,6CAA6C,EACzF,IAAI,CACL,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,SAAS;oBAAE,OAAO,QAAQ,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC;gBAC7E,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;oBACrC,CAAC,CAAC,IAAI,CAAC,OAAO;oBACd,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;gBAC/E,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,QAAQ,CAAC,6CAA6C,EAAE,IAAI,CAAC,CAAC;gBAC/F,yEAAyE;gBACzE,MAAM,KAAK,GAAa,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,IAAI,CAAC;wBACH,MAAM,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;wBAC9C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACrB,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,MAAM,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;gBACD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBACtG,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,OAAO,QAAQ,CAAC,OAAO,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;YACxD,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;gBAChD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;gBAC9D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAAE,OAAO,QAAQ,CAAC,4CAA4C,EAAE,IAAI,CAAC,CAAC;gBACpG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,OAAO,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YACpC,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO,QAAQ,CAAC,kFAAkF,EAAE,IAAI,CAAC,CAAC;gBAC5G,CAAC;gBACD,MAAM,YAAY,GAAI,IAAI,CAAC,IAA2B,IAAI,SAAS,CAAC;gBACpE,MAAM,GAAG,GAAI,IAAI,CAAC,GAA0B,IAAI,SAAS,CAAC;gBAC1D,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC;gBAC5F,IAAI,GAAG,IAAI,aAAa,EAAE,CAAC;oBACzB,OAAO,QAAQ,CAAC,qGAAqG,EAAE,IAAI,CAAC,CAAC;gBAC/H,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC;gBAChC,IAAI,KAAK,IAAI,CAAC,GAAG;oBAAE,OAAO,QAAQ,CAAC,6CAA6C,EAAE,IAAI,CAAC,CAAC;gBACxF,IAAI,GAAG,EAAE,CAAC;oBACR,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;wBAAE,OAAO,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;oBAC7E,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC7F,IAAI,CAAC,KAAK;wBAAE,OAAO,QAAQ,CAAC,kBAAkB,OAAO,CAAC,IAAI,iBAAiB,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;oBAC1F,iEAAiE;oBACjE,qEAAqE;oBACrE,0CAA0C;oBAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;wBACvB,OAAO,QAAQ,CACb,iBAAiB,OAAO,CAAC,IAAI,iBAAiB,OAAO,CAAC,EAAE,8EAA8E,EACtI,IAAI,CACL,CAAC;oBACJ,CAAC;oBACD,OAAO,QAAQ,CACb,iBAAiB,OAAO,CAAC,IAAI,iBAAiB,OAAO,CAAC,EAAE,MAAM;wBAC5D,qHAAqH;wBACrH,qBAAqB,OAAO,CAAC,SAAS,iFAAiF;wBACvH,kGAAkG;wBAClG,+FAA+F,CAClG,CAAC;gBACJ,CAAC;gBACD,0EAA0E;gBAC1E,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAC/D,IAAI,OAAO,IAAI,QAAQ;oBAAE,OAAO,QAAQ,CAAC,6DAA6D,EAAE,IAAI,CAAC,CAAC;gBAC9G,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE;oBAClD,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,IAAI,EAAE,QAAQ,CAAC,KAAK;oBACpB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;iBAC5B,CAAC,CAAC;gBACH,OAAO,QAAQ,CAAC,aAAa,OAAO,CAAC,IAAI,iBAAiB,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3E,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,UAAU,GAAI,IAAI,CAAC,UAAiC,IAAI,EAAE,CAAC;gBACjE,IAAI,CAAC,UAAU;oBAAE,OAAO,QAAQ,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC;gBAC9E,MAAM,IAAI,GAAI,IAAI,CAAC,IAA2B,IAAI,SAAS,CAAC;gBAC5D,MAAM,GAAG,GAAI,IAAI,CAAC,GAA0B,IAAI,SAAS,CAAC;gBAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC;gBACnF,IAAI,GAAG,IAAI,aAAa,EAAE,CAAC;oBACzB,OAAO,QAAQ,CAAC,gFAAgF,EAAE,IAAI,CAAC,CAAC;gBAC1G,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;oBAAE,OAAO,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;gBACpF,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,GAAG,EAAE,CAAC;oBACpC,OAAO,QAAQ,CAAC,qGAAqG,EAAE,IAAI,CAAC,CAAC;gBAC/H,CAAC;gBACD,MAAM,KAAK,GAAyE,EAAE,CAAC;gBACvF,IAAI,IAAI;oBAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;gBAC5B,IAAI,GAAG;oBAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;gBACzB,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACvD,IAAI,OAAO,IAAI,QAAQ;wBAAE,OAAO,QAAQ,CAAC,gDAAgD,EAAE,IAAI,CAAC,CAAC;oBACjG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAC/B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBACrC,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;gBAC5D,OAAO,QAAQ,CAAC,aAAa,OAAO,CAAC,IAAI,WAAW,CAAC,CAAC;YACxD,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO,QAAQ,CAAC,iFAAiF,EAAE,IAAI,CAAC,CAAC;gBAC3G,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;gBACjD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;gBAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,QAAQ,CAAC,8BAA8B,CAAC,CAAC;gBACvE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3B,CAAC,CAAC,IAAI,KAAK,MAAM;oBACf,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,SAAS,EAAE;oBAC9F,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,SAAS,EAAE,CACtJ,CAAC;gBACF,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACnE,MAAM,MAAM,GAAI,IAAI,CAAC,MAA6B,IAAI,SAAS,CAAC;gBAChE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC9D,8EAA8E;gBAC9E,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,QAAQ,CAAC,aAAa,CAAC,CAAC;gBACtD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,CAAC,EAAE,EAAE,CACJ,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAC1L,CAAC;gBACF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,MAAM,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3F,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YAC7C,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBACzC,IAAI,CAAC,MAAM;oBAAE,OAAO,QAAQ,CAAC,8DAA8D,EAAE,IAAI,CAAC,CAAC;gBACnG,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;gBACpD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;oBACpB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC1F,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtD,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBACnD,OAAO,QAAQ,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,cAAc,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;YAC7F,CAAC;YACD;gBACE,OAAO,QAAQ,CAAC,iBAAiB,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/E,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACrB,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,IAAI,GAAmB,CAAC;YACxB,IAAI,CAAC;gBACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;YAC9C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,aAAa;YACvB,CAAC;YACD,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC;YAC1B,IAAI,CAAC;gBACH,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;oBACnB,KAAK,YAAY;wBACf,OAAO,KAAK,CAAC,EAAE,EAAE;4BACf,eAAe,EAAG,GAAG,CAAC,MAAM,EAAE,eAA0B,IAAI,YAAY;4BACxE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;4BAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;yBAC/C,CAAC,CAAC;oBACL,KAAK,2BAA2B,CAAC;oBACjC,KAAK,yBAAyB;wBAC5B,OAAO,CAAC,gCAAgC;oBAC1C,KAAK,MAAM;wBACT,OAAO,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACvB,KAAK,YAAY;wBACf,OAAO,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;oBACrC,KAAK,YAAY,CAAC,CAAC,CAAC;wBAClB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;wBAC5C,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAA4B,CAAC;wBACtE,IAAI,CAAC;4BACH,OAAO,KAAK,CAAC,EAAE,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;wBAC/C,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,OAAO,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;wBACvE,CAAC;oBACH,CAAC;oBACD;wBACE,IAAI,EAAE,KAAK,IAAI;4BAAE,UAAU,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,qBAAqB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;wBAC3E,OAAO;gBACX,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,EAAE,KAAK,IAAI;oBAAE,UAAU,CAAC,EAAE,EAAE,CAAC,KAAK,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YAClE,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC,CAAC;IACH,gCAAgC;IAChC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAChE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flow-agent-bridge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Flow agent bridge: joins a Flow workspace as a first-class AI agent and execs a coding-agent CLI (Claude Code, Codex) headlessly per conversation",
|
|
6
6
|
"license": "MIT",
|