foundr-companion 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bridge/adapters.d.mts +33 -0
- package/dist/bridge/adapters.d.mts.map +1 -0
- package/dist/bridge/adapters.mjs +159 -0
- package/dist/bridge/adapters.mjs.map +1 -0
- package/dist/bridge/bridge-auth.d.mts +5 -0
- package/dist/bridge/bridge-auth.d.mts.map +1 -0
- package/dist/bridge/bridge-auth.mjs +24 -0
- package/dist/bridge/bridge-auth.mjs.map +1 -0
- package/dist/bridge/codex-app-server-adapter.d.mts +37 -0
- package/dist/bridge/codex-app-server-adapter.d.mts.map +1 -0
- package/dist/bridge/codex-app-server-adapter.mjs +401 -0
- package/dist/bridge/codex-app-server-adapter.mjs.map +1 -0
- package/dist/bridge/daemon.mjs +190 -0
- package/dist/bridge/foundr-codex-reply.d.mts +96 -0
- package/dist/bridge/foundr-codex-reply.d.mts.map +1 -0
- package/dist/bridge/foundr-codex-reply.mjs +542 -0
- package/dist/bridge/foundr-codex-reply.mjs.map +1 -0
- package/dist/bridge/listener-flags.d.mts +5 -0
- package/dist/bridge/listener-flags.d.mts.map +1 -0
- package/dist/bridge/listener-flags.mjs +18 -0
- package/dist/bridge/listener-flags.mjs.map +1 -0
- package/dist/bridge/listener-loop.d.mts +58 -0
- package/dist/bridge/listener-loop.d.mts.map +1 -0
- package/dist/bridge/listener-loop.mjs +424 -0
- package/dist/bridge/listener-loop.mjs.map +1 -0
- package/dist/bridge/logout.d.mts +8 -0
- package/dist/bridge/logout.d.mts.map +1 -0
- package/dist/bridge/logout.mjs +35 -0
- package/dist/bridge/logout.mjs.map +1 -0
- package/dist/bridge/mcp-client.d.mts +97 -0
- package/dist/bridge/mcp-client.d.mts.map +1 -0
- package/dist/bridge/mcp-client.mjs +290 -0
- package/dist/bridge/mcp-client.mjs.map +1 -0
- package/dist/bridge/oauth-provider.d.mts +32 -0
- package/dist/bridge/oauth-provider.d.mts.map +1 -0
- package/dist/bridge/oauth-provider.mjs +94 -0
- package/dist/bridge/oauth-provider.mjs.map +1 -0
- package/dist/bridge/public-room-mention-listener-loop.d.mts +120 -0
- package/dist/bridge/public-room-mention-listener-loop.d.mts.map +1 -0
- package/dist/bridge/public-room-mention-listener-loop.mjs +225 -0
- package/dist/bridge/public-room-mention-listener-loop.mjs.map +1 -0
- package/dist/bridge/realtime-wake.d.mts +11 -0
- package/dist/bridge/realtime-wake.d.mts.map +1 -0
- package/dist/bridge/realtime-wake.mjs +134 -0
- package/dist/bridge/realtime-wake.mjs.map +1 -0
- package/dist/bridge/work-mission-listener-loop.d.mts +100 -0
- package/dist/bridge/work-mission-listener-loop.d.mts.map +1 -0
- package/dist/bridge/work-mission-listener-loop.mjs +737 -0
- package/dist/bridge/work-mission-listener-loop.mjs.map +1 -0
- package/dist/cli-parse.d.ts +27 -0
- package/dist/cli-parse.d.ts.map +1 -0
- package/dist/cli-parse.js +47 -0
- package/dist/cli-parse.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +232 -0
- package/dist/cli.js.map +1 -0
- package/dist/codex-preflight.d.ts +44 -0
- package/dist/codex-preflight.d.ts.map +1 -0
- package/dist/codex-preflight.js +74 -0
- package/dist/codex-preflight.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/launchd.d.ts +78 -0
- package/dist/launchd.d.ts.map +1 -0
- package/dist/launchd.js +118 -0
- package/dist/launchd.js.map +1 -0
- package/dist/paths.d.ts +30 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +26 -0
- package/dist/paths.js.map +1 -0
- package/install.sh +117 -0
- package/package.json +29 -0
|
@@ -0,0 +1,542 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawn } from 'node:child_process'
|
|
3
|
+
import { pathToFileURL } from 'node:url'
|
|
4
|
+
import { parseReplyText } from './adapters.mjs'
|
|
5
|
+
|
|
6
|
+
const APP_SERVER_REQUEST_TIMEOUT_MS = 120_000
|
|
7
|
+
const APP_SERVER_TURN_TIMEOUT_MS = 180_000
|
|
8
|
+
const DEFAULT_CODEX_MODEL = 'gpt-5.4-mini'
|
|
9
|
+
const UI_REQUESTABLE_CODEX_MODELS = new Set([
|
|
10
|
+
'gpt-5.5',
|
|
11
|
+
'gpt-5.4',
|
|
12
|
+
'gpt-5.4-mini',
|
|
13
|
+
'gpt-5.3-codex',
|
|
14
|
+
'gpt-5.3-codex-spark',
|
|
15
|
+
])
|
|
16
|
+
|
|
17
|
+
const SAFE_ENV_KEYS = new Set([
|
|
18
|
+
'CODEX_HOME',
|
|
19
|
+
'HOME',
|
|
20
|
+
'LANG',
|
|
21
|
+
'LC_ALL',
|
|
22
|
+
'LOGNAME',
|
|
23
|
+
'PATH',
|
|
24
|
+
'SHELL',
|
|
25
|
+
'TERM',
|
|
26
|
+
'TMPDIR',
|
|
27
|
+
'USER',
|
|
28
|
+
])
|
|
29
|
+
|
|
30
|
+
async function readStdin(input = process.stdin) {
|
|
31
|
+
const chunks = []
|
|
32
|
+
for await (const chunk of input) {
|
|
33
|
+
chunks.push(chunk)
|
|
34
|
+
}
|
|
35
|
+
return Buffer.concat(chunks).toString('utf8')
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function safeCodexEnv(env) {
|
|
39
|
+
const next = {}
|
|
40
|
+
for (const key of SAFE_ENV_KEYS) {
|
|
41
|
+
if (env[key] != null) next[key] = env[key]
|
|
42
|
+
}
|
|
43
|
+
if (env.FOUNDR_CODEX_HOME) {
|
|
44
|
+
next.CODEX_HOME = env.FOUNDR_CODEX_HOME
|
|
45
|
+
}
|
|
46
|
+
return next
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function codexSessionId(env) {
|
|
50
|
+
return String(env.FOUNDR_CODEX_SESSION_ID || env.CODEX_THREAD_ID || '').trim()
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function codexThreadMode(env) {
|
|
54
|
+
const mode = String(env.FOUNDR_CODEX_THREAD_MODE || '').trim().toLowerCase()
|
|
55
|
+
if (mode === 'bridge' || mode === 'dedicated') return 'bridge'
|
|
56
|
+
return 'resume'
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function codexPrompt(envelope) {
|
|
60
|
+
if (envelope.kind === 'public_room_mention') {
|
|
61
|
+
return [
|
|
62
|
+
'You are replying to a public Founder World room chat message that mentioned this local agent.',
|
|
63
|
+
'Write only the short public room reply. Everyone in the room can see it.',
|
|
64
|
+
'Use only the public message text below. Do not reveal private missions, private chat, decisions, artifacts, browser sessions, filesystem paths, codebase details, tokens, or local machine information.',
|
|
65
|
+
'If the founder asks for private or sensitive information, say you cannot discuss that in public room chat.',
|
|
66
|
+
'',
|
|
67
|
+
'Foundr context:',
|
|
68
|
+
`- Room: ${envelope.room?.handle ?? envelope.room?.id ?? 'unknown'}`,
|
|
69
|
+
`- Public mention id: ${envelope.mention?.id ?? 'unknown'}`,
|
|
70
|
+
`- Message id: ${envelope.message?.id ?? 'unknown'}`,
|
|
71
|
+
`- Agent key id: ${envelope.delivery?.agent_key_id ?? 'unknown'}`,
|
|
72
|
+
'',
|
|
73
|
+
`Public sender: ${envelope.message?.sender_display_name ?? 'Founder'}`,
|
|
74
|
+
'Public message:',
|
|
75
|
+
envelope.message?.body ?? '',
|
|
76
|
+
'',
|
|
77
|
+
].join('\n')
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (envelope.kind === 'work_mission') {
|
|
81
|
+
return [
|
|
82
|
+
'You are replying to a Founder World work mission chat message sent inside the game.',
|
|
83
|
+
'Continue the current Codex conversation and write only the reply that should appear in the mission chat.',
|
|
84
|
+
'Do not describe the bridge, CLI, or transport unless the founder asks about it.',
|
|
85
|
+
'',
|
|
86
|
+
'Foundr context:',
|
|
87
|
+
`- Mission: ${envelope.mission?.title ?? 'unknown'}`,
|
|
88
|
+
`- Mission id: ${envelope.mission?.id ?? 'unknown'}`,
|
|
89
|
+
`- Message id: ${envelope.message?.id ?? 'unknown'}`,
|
|
90
|
+
`- Agent key id: ${envelope.delivery?.agent_key_id ?? 'unknown'}`,
|
|
91
|
+
'',
|
|
92
|
+
'Founder message:',
|
|
93
|
+
envelope.message?.body ?? '',
|
|
94
|
+
'',
|
|
95
|
+
].join('\n')
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return [
|
|
99
|
+
'You are replying to a Founder World private chat message sent inside the game.',
|
|
100
|
+
'Continue the current Codex conversation and write only the reply that should appear in the game private chat.',
|
|
101
|
+
'Do not describe the bridge, CLI, or transport unless the founder asks about it.',
|
|
102
|
+
'',
|
|
103
|
+
'Foundr context:',
|
|
104
|
+
`- Private thread: ${envelope.thread?.id ?? 'unknown'}`,
|
|
105
|
+
`- Message id: ${envelope.message?.id ?? 'unknown'}`,
|
|
106
|
+
`- Agent key id: ${envelope.delivery?.agent_key_id ?? 'unknown'}`,
|
|
107
|
+
'',
|
|
108
|
+
'Founder message:',
|
|
109
|
+
envelope.message?.body ?? '',
|
|
110
|
+
'',
|
|
111
|
+
].join('\n')
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export function codexBridgePrompt(envelope) {
|
|
115
|
+
if (envelope.kind === 'public_room_mention') {
|
|
116
|
+
return [
|
|
117
|
+
`Room: ${envelope.room?.handle ?? envelope.room?.id ?? 'unknown'}`,
|
|
118
|
+
`Public sender: ${envelope.message?.sender_display_name ?? 'Founder'}`,
|
|
119
|
+
`Message: ${envelope.message?.body ?? ''}`,
|
|
120
|
+
'',
|
|
121
|
+
'Reply as Codex in public Founder World room chat.',
|
|
122
|
+
'Keep it short. Do not reveal private missions, private chat, decisions, artifacts, filesystem paths, codebase details, tokens, or local machine information.',
|
|
123
|
+
].join('\n')
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (envelope.kind === 'work_mission') {
|
|
127
|
+
return [
|
|
128
|
+
`Mission: ${envelope.mission?.title ?? 'unknown'}`,
|
|
129
|
+
`Message: ${envelope.message?.body ?? ''}`,
|
|
130
|
+
'',
|
|
131
|
+
'Reply as Codex in the Founder World mission chat.',
|
|
132
|
+
].join('\n')
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return [
|
|
136
|
+
`Private thread: ${envelope.thread?.id ?? 'unknown'}`,
|
|
137
|
+
`Message: ${envelope.message?.body ?? ''}`,
|
|
138
|
+
'',
|
|
139
|
+
'Reply as Codex in Founder World private chat.',
|
|
140
|
+
].join('\n')
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export function codexArgs() {
|
|
144
|
+
return ['app-server', '--listen', 'stdio://']
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export function extractCodexProgressEvent(event) {
|
|
148
|
+
const type = String(event?.type ?? '')
|
|
149
|
+
const method = String(event?.method ?? '')
|
|
150
|
+
if (method === 'turn/started') {
|
|
151
|
+
return { type: 'status', status: 'thinking' }
|
|
152
|
+
}
|
|
153
|
+
if (method === 'item/agentMessage/delta') {
|
|
154
|
+
const delta = event?.params?.delta
|
|
155
|
+
return typeof delta === 'string' && delta ? { type: 'delta', text: delta } : null
|
|
156
|
+
}
|
|
157
|
+
if (type === 'turn.started') {
|
|
158
|
+
return { type: 'status', status: 'thinking' }
|
|
159
|
+
}
|
|
160
|
+
if (!type.includes('delta')) return null
|
|
161
|
+
|
|
162
|
+
const candidates = [
|
|
163
|
+
event.delta,
|
|
164
|
+
event.text,
|
|
165
|
+
event.content,
|
|
166
|
+
event.item?.delta,
|
|
167
|
+
event.item?.text,
|
|
168
|
+
]
|
|
169
|
+
for (const candidate of candidates) {
|
|
170
|
+
if (typeof candidate === 'string' && candidate) {
|
|
171
|
+
return { type: 'delta', text: candidate }
|
|
172
|
+
}
|
|
173
|
+
if (candidate && typeof candidate === 'object') {
|
|
174
|
+
const text = candidate.text ?? candidate.content
|
|
175
|
+
if (typeof text === 'string' && text) {
|
|
176
|
+
return { type: 'delta', text }
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return null
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export function extractCompletedCodexText(event) {
|
|
184
|
+
if (event?.method === 'item/completed') {
|
|
185
|
+
const item = event.params?.item
|
|
186
|
+
if (item?.type !== 'agentMessage') return ''
|
|
187
|
+
return typeof item.text === 'string' ? item.text : ''
|
|
188
|
+
}
|
|
189
|
+
if (event?.type === 'item.completed') {
|
|
190
|
+
const item = event.item
|
|
191
|
+
if (item?.type !== 'agent_message') return ''
|
|
192
|
+
return typeof item.text === 'string' ? item.text : ''
|
|
193
|
+
}
|
|
194
|
+
return ''
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export function appServerRequestParams(method, params) {
|
|
198
|
+
if (method === 'initialize') {
|
|
199
|
+
return {
|
|
200
|
+
clientInfo: { name: 'foundr-codex-bridge', version: '0.1.0' },
|
|
201
|
+
capabilities: { experimentalApi: true, requestAttestation: false },
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return params
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export function appServerResumeParams(sessionId, env) {
|
|
208
|
+
return {
|
|
209
|
+
threadId: sessionId,
|
|
210
|
+
cwd: env.PWD || process.cwd(),
|
|
211
|
+
approvalPolicy: 'never',
|
|
212
|
+
sandbox: 'read-only',
|
|
213
|
+
excludeTurns: true,
|
|
214
|
+
persistExtendedHistory: false,
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
export function appServerBridgeInstructions(env = process.env) {
|
|
219
|
+
const custom = String(env.FOUNDR_CODEX_BRIDGE_INSTRUCTIONS || '').trim()
|
|
220
|
+
if (custom) return custom
|
|
221
|
+
|
|
222
|
+
return [
|
|
223
|
+
'You are Codex answering Founder World in-game mission chat and public owner-mentioned room chat.',
|
|
224
|
+
'Reply directly to the founder as a concise chat message.',
|
|
225
|
+
'Do not use tools, do not inspect files, and do not mention the bridge, MCP, transport, or local listener unless asked.',
|
|
226
|
+
'For public room chat, use only the public message text and do not reveal private missions, private chat, decisions, artifacts, filesystem paths, codebase details, tokens, or local machine information.',
|
|
227
|
+
'If the founder asks for substantial coding work, say that you can continue it in the main Codex session and ask for confirmation.',
|
|
228
|
+
'Return only the text that should appear in the game chat.',
|
|
229
|
+
].join('\n')
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export function appServerThreadStartParams(env = process.env) {
|
|
233
|
+
const model = String(env.FOUNDR_CODEX_MODEL || DEFAULT_CODEX_MODEL).trim()
|
|
234
|
+
const serviceTier = String(env.FOUNDR_CODEX_SERVICE_TIER || '').trim()
|
|
235
|
+
const ephemeral = env.FOUNDR_CODEX_BRIDGE_EPHEMERAL === '1'
|
|
236
|
+
|
|
237
|
+
return {
|
|
238
|
+
cwd: env.PWD || process.cwd(),
|
|
239
|
+
approvalPolicy: 'never',
|
|
240
|
+
sandbox: 'read-only',
|
|
241
|
+
baseInstructions: appServerBridgeInstructions(env),
|
|
242
|
+
developerInstructions: 'Answer as a low-latency in-game chat agent. Keep responses short unless the founder asks for detail.',
|
|
243
|
+
ephemeral,
|
|
244
|
+
...(model ? { model } : {}),
|
|
245
|
+
...(serviceTier ? { serviceTier } : {}),
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
export function appServerTurnStartParams(threadId, envelope, env = process.env) {
|
|
250
|
+
const effort = String(env.FOUNDR_CODEX_REASONING_EFFORT || 'low').trim()
|
|
251
|
+
const model = codexModelForEnvelope(envelope, env)
|
|
252
|
+
const serviceTier = String(env.FOUNDR_CODEX_SERVICE_TIER || '').trim()
|
|
253
|
+
|
|
254
|
+
return {
|
|
255
|
+
threadId,
|
|
256
|
+
effort,
|
|
257
|
+
summary: 'none',
|
|
258
|
+
approvalPolicy: 'never',
|
|
259
|
+
sandboxPolicy: { type: 'readOnly' },
|
|
260
|
+
...(model ? { model } : {}),
|
|
261
|
+
...(serviceTier ? { serviceTier } : {}),
|
|
262
|
+
input: [{
|
|
263
|
+
type: 'text',
|
|
264
|
+
text: codexThreadMode(env) === 'bridge' ? codexBridgePrompt(envelope) : codexPrompt(envelope),
|
|
265
|
+
text_elements: [],
|
|
266
|
+
}],
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export function codexModelForEnvelope(envelope, env = process.env) {
|
|
271
|
+
const requested = String(envelope?.delivery?.requested_model ?? '').trim()
|
|
272
|
+
if (UI_REQUESTABLE_CODEX_MODELS.has(requested)) return requested
|
|
273
|
+
return String(env.FOUNDR_CODEX_MODEL || DEFAULT_CODEX_MODEL).trim()
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
export function appServerServerRequestResponse(method) {
|
|
277
|
+
if (method === 'item/commandExecution/requestApproval') return { decision: 'decline' }
|
|
278
|
+
if (method === 'item/fileChange/requestApproval') return { decision: 'decline' }
|
|
279
|
+
if (method === 'item/tool/requestUserInput') return { answers: {} }
|
|
280
|
+
return { error: { code: -32601, message: `Unhandled server request ${method}` } }
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
export function appServerErrorMessage(error) {
|
|
284
|
+
if (!error) return 'Codex app-server request failed'
|
|
285
|
+
if (typeof error === 'string') return error
|
|
286
|
+
if (typeof error.message === 'string') return error.message
|
|
287
|
+
return JSON.stringify(error)
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export function parseJsonLine(line) {
|
|
291
|
+
const text = String(line ?? '').trim()
|
|
292
|
+
if (!text) return null
|
|
293
|
+
try {
|
|
294
|
+
return JSON.parse(text)
|
|
295
|
+
} catch {
|
|
296
|
+
return null
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export async function runCodex(envelope, {
|
|
301
|
+
env = process.env,
|
|
302
|
+
spawnFn = spawn,
|
|
303
|
+
onProgress,
|
|
304
|
+
} = {}) {
|
|
305
|
+
const sessionId = codexSessionId(env)
|
|
306
|
+
if (!sessionId) {
|
|
307
|
+
throw new Error(
|
|
308
|
+
'CODEX_THREAD_ID is unavailable. Start the listener from an active Codex shell, or set FOUNDR_CODEX_SESSION_ID to the Codex session id to resume.',
|
|
309
|
+
)
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
return parseReplyText(await new Promise((resolve, reject) => {
|
|
313
|
+
const child = spawnFn('codex', codexArgs(), {
|
|
314
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
315
|
+
env: safeCodexEnv(env),
|
|
316
|
+
})
|
|
317
|
+
let stderrText = ''
|
|
318
|
+
let lineBuffer = ''
|
|
319
|
+
let nextRequestId = 1
|
|
320
|
+
let resolved = false
|
|
321
|
+
let finalText = ''
|
|
322
|
+
let streamedText = ''
|
|
323
|
+
let activeTurnId = null
|
|
324
|
+
let turnTimer = null
|
|
325
|
+
const pending = new Map()
|
|
326
|
+
|
|
327
|
+
const cleanup = () => {
|
|
328
|
+
if (turnTimer) clearTimeout(turnTimer)
|
|
329
|
+
for (const { timer } of pending.values()) clearTimeout(timer)
|
|
330
|
+
pending.clear()
|
|
331
|
+
}
|
|
332
|
+
const fail = (error) => {
|
|
333
|
+
if (resolved) return
|
|
334
|
+
resolved = true
|
|
335
|
+
cleanup()
|
|
336
|
+
try {
|
|
337
|
+
child.kill?.('SIGTERM')
|
|
338
|
+
} catch {}
|
|
339
|
+
reject(error)
|
|
340
|
+
}
|
|
341
|
+
const finish = () => {
|
|
342
|
+
if (resolved) return
|
|
343
|
+
resolved = true
|
|
344
|
+
cleanup()
|
|
345
|
+
try {
|
|
346
|
+
child.kill?.('SIGTERM')
|
|
347
|
+
} catch {}
|
|
348
|
+
resolve(finalText || streamedText)
|
|
349
|
+
}
|
|
350
|
+
turnTimer = setTimeout(() => {
|
|
351
|
+
fail(new Error('Codex app-server turn timed out'))
|
|
352
|
+
}, APP_SERVER_TURN_TIMEOUT_MS)
|
|
353
|
+
turnTimer.unref?.()
|
|
354
|
+
|
|
355
|
+
const send = (method, params) => {
|
|
356
|
+
const id = nextRequestId++
|
|
357
|
+
return new Promise((requestResolve, requestReject) => {
|
|
358
|
+
const timer = setTimeout(() => {
|
|
359
|
+
pending.delete(id)
|
|
360
|
+
requestReject(new Error(`Codex app-server request timed out: ${method}`))
|
|
361
|
+
}, APP_SERVER_REQUEST_TIMEOUT_MS)
|
|
362
|
+
timer.unref?.()
|
|
363
|
+
pending.set(id, {
|
|
364
|
+
method,
|
|
365
|
+
timer,
|
|
366
|
+
resolve: requestResolve,
|
|
367
|
+
reject: requestReject,
|
|
368
|
+
})
|
|
369
|
+
child.stdin.write(`${JSON.stringify({ id, method, params: appServerRequestParams(method, params) })}\n`)
|
|
370
|
+
})
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
const handleMessage = (event) => {
|
|
374
|
+
if (!event) return
|
|
375
|
+
|
|
376
|
+
if (event.id != null && event.method) {
|
|
377
|
+
const response = appServerServerRequestResponse(String(event.method))
|
|
378
|
+
if ('error' in response) {
|
|
379
|
+
child.stdin.write(`${JSON.stringify({ id: event.id, error: response.error })}\n`)
|
|
380
|
+
} else {
|
|
381
|
+
child.stdin.write(`${JSON.stringify({ id: event.id, result: response })}\n`)
|
|
382
|
+
}
|
|
383
|
+
return
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
if (event.id != null) {
|
|
387
|
+
const request = pending.get(event.id)
|
|
388
|
+
if (!request) return
|
|
389
|
+
pending.delete(event.id)
|
|
390
|
+
clearTimeout(request.timer)
|
|
391
|
+
if (event.error) {
|
|
392
|
+
request.reject(new Error(appServerErrorMessage(event.error)))
|
|
393
|
+
} else {
|
|
394
|
+
request.resolve(event.result)
|
|
395
|
+
}
|
|
396
|
+
return
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
const completedText = extractCompletedCodexText(event)
|
|
400
|
+
if (completedText) finalText = completedText
|
|
401
|
+
const progressEvent = extractCodexProgressEvent(event)
|
|
402
|
+
if (progressEvent?.type === 'delta') streamedText += progressEvent.text
|
|
403
|
+
if (progressEvent) onProgress?.(progressEvent)
|
|
404
|
+
if (event.method === 'turn/started') {
|
|
405
|
+
activeTurnId = event.params?.turn?.id ?? activeTurnId
|
|
406
|
+
}
|
|
407
|
+
if (
|
|
408
|
+
event.method === 'turn/completed' &&
|
|
409
|
+
(!activeTurnId || event.params?.turn?.id === activeTurnId)
|
|
410
|
+
) {
|
|
411
|
+
finish()
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
child.stdout.on('data', (chunk) => {
|
|
416
|
+
lineBuffer += String(chunk)
|
|
417
|
+
const lines = lineBuffer.split(/\r?\n/)
|
|
418
|
+
lineBuffer = lines.pop() ?? ''
|
|
419
|
+
for (const line of lines) handleMessage(parseJsonLine(line))
|
|
420
|
+
})
|
|
421
|
+
child.stderr.on('data', (chunk) => {
|
|
422
|
+
stderrText += chunk
|
|
423
|
+
})
|
|
424
|
+
child.on('error', fail)
|
|
425
|
+
child.on('close', (code) => {
|
|
426
|
+
if (lineBuffer) handleMessage(parseJsonLine(lineBuffer))
|
|
427
|
+
if (resolved) return
|
|
428
|
+
if (code !== 0) {
|
|
429
|
+
fail(new Error(stderrText.trim() || `codex app-server exited ${code}`))
|
|
430
|
+
return
|
|
431
|
+
}
|
|
432
|
+
finish()
|
|
433
|
+
})
|
|
434
|
+
|
|
435
|
+
void (async () => {
|
|
436
|
+
try {
|
|
437
|
+
await send('initialize')
|
|
438
|
+
child.stdin.write(`${JSON.stringify({ method: 'initialized' })}\n`)
|
|
439
|
+
const resumed = await send('thread/resume', appServerResumeParams(sessionId, env))
|
|
440
|
+
const threadId = resumed?.thread?.id ?? sessionId
|
|
441
|
+
await send('turn/start', appServerTurnStartParams(threadId, envelope, env))
|
|
442
|
+
} catch (error) {
|
|
443
|
+
fail(error)
|
|
444
|
+
}
|
|
445
|
+
})()
|
|
446
|
+
}))
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
export async function runCodexExecFallback(envelope, {
|
|
450
|
+
env = process.env,
|
|
451
|
+
spawnFn = spawn,
|
|
452
|
+
onProgress,
|
|
453
|
+
outputPath,
|
|
454
|
+
} = {}) {
|
|
455
|
+
const sessionId = codexSessionId(env)
|
|
456
|
+
if (!sessionId) {
|
|
457
|
+
throw new Error(
|
|
458
|
+
'CODEX_THREAD_ID is unavailable. Start the listener from an active Codex shell, or set FOUNDR_CODEX_SESSION_ID to the Codex session id to resume.',
|
|
459
|
+
)
|
|
460
|
+
}
|
|
461
|
+
if (!outputPath) throw new Error('outputPath is required for exec fallback')
|
|
462
|
+
const stdout = await new Promise((resolve, reject) => {
|
|
463
|
+
const child = spawnFn('codex', [
|
|
464
|
+
'exec',
|
|
465
|
+
'resume',
|
|
466
|
+
'--json',
|
|
467
|
+
'--output-last-message',
|
|
468
|
+
outputPath,
|
|
469
|
+
sessionId,
|
|
470
|
+
'-',
|
|
471
|
+
], {
|
|
472
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
473
|
+
env: safeCodexEnv(env),
|
|
474
|
+
})
|
|
475
|
+
let stdoutText = ''
|
|
476
|
+
let stderrText = ''
|
|
477
|
+
let lineBuffer = ''
|
|
478
|
+
let completedText = ''
|
|
479
|
+
|
|
480
|
+
const handleJsonLine = (line) => {
|
|
481
|
+
const text = String(line ?? '').trim()
|
|
482
|
+
if (!text) return
|
|
483
|
+
let event
|
|
484
|
+
try {
|
|
485
|
+
event = JSON.parse(text)
|
|
486
|
+
} catch {
|
|
487
|
+
return
|
|
488
|
+
}
|
|
489
|
+
completedText = extractCompletedCodexText(event) || completedText
|
|
490
|
+
const progressEvent = extractCodexProgressEvent(event)
|
|
491
|
+
if (progressEvent) onProgress?.(progressEvent)
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
child.stdout.on('data', (chunk) => {
|
|
495
|
+
const chunkText = String(chunk)
|
|
496
|
+
stdoutText += chunkText
|
|
497
|
+
lineBuffer += chunkText
|
|
498
|
+
const lines = lineBuffer.split(/\r?\n/)
|
|
499
|
+
lineBuffer = lines.pop() ?? ''
|
|
500
|
+
for (const line of lines) handleJsonLine(line)
|
|
501
|
+
})
|
|
502
|
+
child.stderr.on('data', (chunk) => {
|
|
503
|
+
stderrText += chunk
|
|
504
|
+
})
|
|
505
|
+
child.on('error', reject)
|
|
506
|
+
child.on('close', (code) => {
|
|
507
|
+
if (lineBuffer) handleJsonLine(lineBuffer)
|
|
508
|
+
if (code !== 0) {
|
|
509
|
+
reject(new Error(stderrText.trim() || `codex exited ${code}`))
|
|
510
|
+
return
|
|
511
|
+
}
|
|
512
|
+
resolve(completedText || stdoutText)
|
|
513
|
+
})
|
|
514
|
+
|
|
515
|
+
child.stdin.end(codexPrompt(envelope))
|
|
516
|
+
})
|
|
517
|
+
return parseReplyText(stdout)
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
export async function main({
|
|
521
|
+
input = process.stdin,
|
|
522
|
+
output = process.stdout,
|
|
523
|
+
errorOutput = process.stderr,
|
|
524
|
+
exit = process.exit,
|
|
525
|
+
} = {}) {
|
|
526
|
+
try {
|
|
527
|
+
const envelope = JSON.parse(await readStdin(input))
|
|
528
|
+
const text = await runCodex(envelope, {
|
|
529
|
+
onProgress: (event) => {
|
|
530
|
+
output.write(`${JSON.stringify(event)}\n`)
|
|
531
|
+
},
|
|
532
|
+
})
|
|
533
|
+
output.write(`${JSON.stringify({ text })}\n`)
|
|
534
|
+
} catch (error) {
|
|
535
|
+
errorOutput.write(`${error instanceof Error ? error.message : String(error)}\n`)
|
|
536
|
+
exit(1)
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
|
|
541
|
+
await main()
|
|
542
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"foundr-codex-reply.mjs","sourceRoot":"","sources":["../../src/bridge/foundr-codex-reply.mjs"],"names":[],"mappings":";;;;;;;;AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,MAAM,6BAA6B,GAAG,MAAO,CAAA;AAC7C,MAAM,0BAA0B,GAAG,MAAO,CAAA;AAC1C,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAC1C,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC;IAC1C,SAAS;IACT,SAAS;IACT,cAAc;IACd,eAAe;IACf,qBAAqB;CACtB,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,YAAY;IACZ,MAAM;IACN,MAAM;IACN,QAAQ;IACR,SAAS;IACT,MAAM;IACN,OAAO;IACP,MAAM;IACN,QAAQ;IACR,MAAM;CACP,CAAC,CAAA;AAEF,KAAK,UAAU,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;;IAC5C,MAAM,MAAM,GAAG,EAAE,CAAA;;QACjB,KAA0B,eAAA,UAAA,cAAA,KAAK,CAAA,WAAA,yEAAE,CAAC;YAAR,qBAAK;YAAL,WAAK;YAApB,MAAM,KAAK,KAAA,CAAA;YACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;;;;;;;;;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAG;IAC9B,MAAM,IAAI,GAAG,EAAE,CAAA;IACf,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;IACD,IAAI,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,iBAAiB,CAAA;IACzC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAG;IAChC,OAAO,MAAM,CAAC,GAAG,CAAC,uBAAuB,IAAI,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;AAChF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAG;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC5E,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,QAAQ,CAAA;IAC9D,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAQ;;IAClC,IAAI,QAAQ,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QAC5C,OAAO;YACL,+FAA+F;YAC/F,0EAA0E;YAC1E,yMAAyM;YACzM,4GAA4G;YAC5G,EAAE;YACF,iBAAiB;YACjB,WAAW,MAAA,MAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,MAAM,mCAAI,MAAA,QAAQ,CAAC,IAAI,0CAAE,EAAE,mCAAI,SAAS,EAAE;YACpE,wBAAwB,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,EAAE,mCAAI,SAAS,EAAE;YAC3D,iBAAiB,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,EAAE,mCAAI,SAAS,EAAE;YACpD,mBAAmB,MAAA,MAAA,QAAQ,CAAC,QAAQ,0CAAE,YAAY,mCAAI,SAAS,EAAE;YACjE,EAAE;YACF,kBAAkB,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,mBAAmB,mCAAI,SAAS,EAAE;YACtE,iBAAiB;YACjB,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,IAAI,mCAAI,EAAE;YAC5B,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACd,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACrC,OAAO;YACL,qFAAqF;YACrF,0GAA0G;YAC1G,iFAAiF;YACjF,EAAE;YACF,iBAAiB;YACjB,cAAc,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,KAAK,mCAAI,SAAS,EAAE;YACpD,iBAAiB,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,EAAE,mCAAI,SAAS,EAAE;YACpD,iBAAiB,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,EAAE,mCAAI,SAAS,EAAE;YACpD,mBAAmB,MAAA,MAAA,QAAQ,CAAC,QAAQ,0CAAE,YAAY,mCAAI,SAAS,EAAE;YACjE,EAAE;YACF,kBAAkB;YAClB,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,IAAI,mCAAI,EAAE;YAC5B,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACd,CAAC;IAED,OAAO;QACL,gFAAgF;QAChF,+GAA+G;QAC/G,iFAAiF;QACjF,EAAE;QACF,iBAAiB;QACjB,qBAAqB,MAAA,MAAA,QAAQ,CAAC,MAAM,0CAAE,EAAE,mCAAI,SAAS,EAAE;QACvD,iBAAiB,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,EAAE,mCAAI,SAAS,EAAE;QACpD,mBAAmB,MAAA,MAAA,QAAQ,CAAC,QAAQ,0CAAE,YAAY,mCAAI,SAAS,EAAE;QACjE,EAAE;QACF,kBAAkB;QAClB,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,IAAI,mCAAI,EAAE;QAC5B,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAQ;;IACxC,IAAI,QAAQ,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QAC5C,OAAO;YACL,SAAS,MAAA,MAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,MAAM,mCAAI,MAAA,QAAQ,CAAC,IAAI,0CAAE,EAAE,mCAAI,SAAS,EAAE;YAClE,kBAAkB,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,mBAAmB,mCAAI,SAAS,EAAE;YACtE,YAAY,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,IAAI,mCAAI,EAAE,EAAE;YAC1C,EAAE;YACF,mDAAmD;YACnD,8JAA8J;SAC/J,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACd,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACrC,OAAO;YACL,YAAY,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,KAAK,mCAAI,SAAS,EAAE;YAClD,YAAY,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,IAAI,mCAAI,EAAE,EAAE;YAC1C,EAAE;YACF,mDAAmD;SACpD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACd,CAAC;IAED,OAAO;QACL,mBAAmB,MAAA,MAAA,QAAQ,CAAC,MAAM,0CAAE,EAAE,mCAAI,SAAS,EAAE;QACrD,YAAY,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,IAAI,mCAAI,EAAE,EAAE;QAC1C,EAAE;QACF,+CAA+C;KAChD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAK;;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,mCAAI,EAAE,CAAC,CAAA;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,mCAAI,EAAE,CAAC,CAAA;IAC1C,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;IAC/C,CAAC;IACD,IAAI,MAAM,KAAK,yBAAyB,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,0CAAE,KAAK,CAAA;QAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACnF,CAAC;IACD,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;IAC/C,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAA;IAExC,MAAM,UAAU,GAAG;QACjB,KAAK,CAAC,KAAK;QACX,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,OAAO;QACb,MAAA,KAAK,CAAC,IAAI,0CAAE,KAAK;QACjB,MAAA,KAAK,CAAC,IAAI,0CAAE,IAAI;KACjB,CAAA;IACD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QAC3C,CAAC;QACD,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAG,MAAA,SAAS,CAAC,IAAI,mCAAI,SAAS,CAAC,OAAO,CAAA;YAChD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAK;;IAC7C,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,MAAK,gBAAgB,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,MAAM,0CAAE,IAAI,CAAA;QAC/B,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,MAAK,cAAc;YAAE,OAAO,EAAE,CAAA;QAC5C,OAAO,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IACvD,CAAC;IACD,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,MAAK,gBAAgB,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;QACvB,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,MAAK,eAAe;YAAE,OAAO,EAAE,CAAA;QAC7C,OAAO,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IACvD,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAM,EAAE,MAAM;IACnD,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,OAAO;YACL,UAAU,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,EAAE;YAC7D,YAAY,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE;SACnE,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAS,EAAE,GAAG;IAClD,OAAO;QACL,QAAQ,EAAE,SAAS;QACnB,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;QAC7B,cAAc,EAAE,OAAO;QACvB,OAAO,EAAE,WAAW;QACpB,YAAY,EAAE,IAAI;QAClB,sBAAsB,EAAE,KAAK;KAC9B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;IAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACxE,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,OAAO;QACL,kGAAkG;QAClG,0DAA0D;QAC1D,wHAAwH;QACxH,0MAA0M;QAC1M,mIAAmI;QACnI,2DAA2D;KAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;IAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,IAAI,mBAAmB,CAAC,CAAC,IAAI,EAAE,CAAA;IAC1E,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACtE,MAAM,SAAS,GAAG,GAAG,CAAC,6BAA6B,KAAK,GAAG,CAAA;IAE3D,qCACE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAC7B,cAAc,EAAE,OAAO,EACvB,OAAO,EAAE,WAAW,EACpB,gBAAgB,EAAE,2BAA2B,CAAC,GAAG,CAAC,EAClD,qBAAqB,EAAE,sGAAsG,EAC7H,SAAS,IACN,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GACxB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACxC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG;IAC5E,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,6BAA6B,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;IACxE,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IAClD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAEtE,mDACE,QAAQ;QACR,MAAM,EACN,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,OAAO,EACvB,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAChC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GACxB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACvC,KAAK,EAAE,CAAC;gBACN,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,eAAe,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC;gBAC7F,aAAa,EAAE,EAAE;aAClB,CAAC,IACH;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG;;IAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,0CAAE,eAAe,mCAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAC1E,IAAI,2BAA2B,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAA;IAChE,OAAO,MAAM,CAAC,GAAG,CAAC,kBAAkB,IAAI,mBAAmB,CAAC,CAAC,IAAI,EAAE,CAAA;AACrE,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAAM;IACnD,IAAI,MAAM,KAAK,uCAAuC;QAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;IACtF,IAAI,MAAM,KAAK,iCAAiC;QAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;IAChF,IAAI,MAAM,KAAK,4BAA4B;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;IACnE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,4BAA4B,MAAM,EAAE,EAAE,EAAE,CAAA;AACnF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAK;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,iCAAiC,CAAA;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3C,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,OAAO,CAAA;IAC3D,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAI;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACtC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IACtB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAQ,EAAE,EACvC,GAAG,GAAG,OAAO,CAAC,GAAG,EACjB,OAAO,GAAG,KAAK,EACf,UAAU,GACX,GAAG,EAAE;IACJ,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;IACrC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,kJAAkJ,CACnJ,CAAA;IACH,CAAC;IAED,OAAO,cAAc,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;;QAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;YAC1C,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC;SACvB,CAAC,CAAA;QACF,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,aAAa,GAAG,CAAC,CAAA;QACrB,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,IAAI,SAAS,GAAG,EAAE,CAAA;QAClB,IAAI,YAAY,GAAG,EAAE,CAAA;QACrB,IAAI,YAAY,GAAG,IAAI,CAAA;QACvB,IAAI,SAAS,GAAG,IAAI,CAAA;QACpB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;QAEzB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,SAAS;gBAAE,YAAY,CAAC,SAAS,CAAC,CAAA;YACtC,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAA;YAC7D,OAAO,CAAC,KAAK,EAAE,CAAA;QACjB,CAAC,CAAA;QACD,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE;;YACrB,IAAI,QAAQ;gBAAE,OAAM;YACpB,QAAQ,GAAG,IAAI,CAAA;YACf,OAAO,EAAE,CAAA;YACT,IAAI,CAAC;gBACH,MAAA,KAAK,CAAC,IAAI,sDAAG,SAAS,CAAC,CAAA;YACzB,CAAC;YAAC,WAAM,CAAC,CAAA,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,CAAA;QACf,CAAC,CAAA;QACD,MAAM,MAAM,GAAG,GAAG,EAAE;;YAClB,IAAI,QAAQ;gBAAE,OAAM;YACpB,QAAQ,GAAG,IAAI,CAAA;YACf,OAAO,EAAE,CAAA;YACT,IAAI,CAAC;gBACH,MAAA,KAAK,CAAC,IAAI,sDAAG,SAAS,CAAC,CAAA;YACzB,CAAC;YAAC,WAAM,CAAC,CAAA,CAAC;YACV,OAAO,CAAC,SAAS,IAAI,YAAY,CAAC,CAAA;QACpC,CAAC,CAAA;QACD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,IAAI,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAA;QACpD,CAAC,EAAE,0BAA0B,CAAC,CAAA;QAC9B,MAAA,SAAS,CAAC,KAAK,yDAAI,CAAA;QAEnB,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;YAC9B,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;YAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE;;gBACnD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC5B,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;oBAClB,aAAa,CAAC,IAAI,KAAK,CAAC,uCAAuC,MAAM,EAAE,CAAC,CAAC,CAAA;gBAC3E,CAAC,EAAE,6BAA6B,CAAC,CAAA;gBACjC,MAAA,KAAK,CAAC,KAAK,qDAAI,CAAA;gBACf,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE;oBACd,MAAM;oBACN,KAAK;oBACL,OAAO,EAAE,cAAc;oBACvB,MAAM,EAAE,aAAa;iBACtB,CAAC,CAAA;gBACF,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;YAC1G,CAAC,CAAC,CAAA;QACJ,CAAC,CAAA;QAED,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,EAAE;;YAC9B,IAAI,CAAC,KAAK;gBAAE,OAAM;YAElB,IAAI,KAAK,CAAC,EAAE,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACrC,MAAM,QAAQ,GAAG,8BAA8B,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;gBACrE,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;oBACxB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAA;gBACnF,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAA;gBAC9E,CAAC;gBACD,OAAM;YACR,CAAC;YAED,IAAI,KAAK,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;gBACrC,IAAI,CAAC,OAAO;oBAAE,OAAM;gBACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;gBACxB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBAC3B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChB,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAC/D,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBAC/B,CAAC;gBACD,OAAM;YACR,CAAC;YAED,MAAM,aAAa,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAA;YACtD,IAAI,aAAa;gBAAE,SAAS,GAAG,aAAa,CAAA;YAC5C,MAAM,aAAa,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAA;YACtD,IAAI,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,MAAK,OAAO;gBAAE,YAAY,IAAI,aAAa,CAAC,IAAI,CAAA;YACvE,IAAI,aAAa;gBAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,aAAa,CAAC,CAAA;YAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;gBACpC,YAAY,GAAG,MAAA,MAAA,MAAA,KAAK,CAAC,MAAM,0CAAE,IAAI,0CAAE,EAAE,mCAAI,YAAY,CAAA;YACvD,CAAC;YACD,IACE,KAAK,CAAC,MAAM,KAAK,gBAAgB;gBACjC,CAAC,CAAC,YAAY,IAAI,CAAA,MAAA,MAAA,KAAK,CAAC,MAAM,0CAAE,IAAI,0CAAE,EAAE,MAAK,YAAY,CAAC,EAC1D,CAAC;gBACD,MAAM,EAAE,CAAA;YACV,CAAC;QACH,CAAC,CAAA;QAED,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;;YAChC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,CAAA;YAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YACvC,UAAU,GAAG,MAAA,KAAK,CAAC,GAAG,EAAE,mCAAI,EAAE,CAAA;YAC9B,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9D,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChC,UAAU,IAAI,KAAK,CAAA;QACrB,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACvB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,UAAU;gBAAE,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAA;YACxD,IAAI,QAAQ;gBAAE,OAAM;YACpB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,2BAA2B,IAAI,EAAE,CAAC,CAAC,CAAA;gBACvE,OAAM;YACR,CAAC;YACD,MAAM,EAAE,CAAA;QACV,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,KAAK,IAAI,EAAE;;YACf,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,YAAY,CAAC,CAAA;gBACxB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,IAAI,CAAC,CAAA;gBACnE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,qBAAqB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAA;gBAClF,MAAM,QAAQ,GAAG,MAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,EAAE,mCAAI,SAAS,CAAA;gBACjD,MAAM,IAAI,CAAC,YAAY,EAAE,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA;YAC7E,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,CAAC,CAAA;YACb,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;IACN,CAAC,CAAC,CAAC,CAAA;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,QAAQ,EAAE,EACnD,GAAG,GAAG,OAAO,CAAC,GAAG,EACjB,OAAO,GAAG,KAAK,EACf,UAAU,EACV,UAAU,GACX,GAAG,EAAE;IACJ,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;IACrC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,kJAAkJ,CACnJ,CAAA;IACH,CAAC;IACD,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC5E,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE;YAC7B,MAAM;YACN,QAAQ;YACR,QAAQ;YACR,uBAAuB;YACvB,UAAU;YACV,SAAS;YACT,GAAG;SACJ,EAAE;YACC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC;SACvB,CAAC,CAAA;QACF,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,aAAa,GAAG,EAAE,CAAA;QAEtB,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;YACtC,IAAI,CAAC,IAAI;gBAAE,OAAM;YACjB,IAAI,KAAK,CAAA;YACT,IAAI,CAAC;gBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC1B,CAAC;YAAC,WAAM,CAAC;gBACP,OAAM;YACR,CAAC;YACD,aAAa,GAAG,yBAAyB,CAAC,KAAK,CAAC,IAAI,aAAa,CAAA;YACjE,MAAM,aAAa,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAA;YACtD,IAAI,aAAa;gBAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,aAAa,CAAC,CAAA;QAChD,CAAC,CAAA;QAED,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;;YAChC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;YAC/B,UAAU,IAAI,SAAS,CAAA;YACvB,UAAU,IAAI,SAAS,CAAA;YACvB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YACvC,UAAU,GAAG,MAAA,KAAK,CAAC,GAAG,EAAE,mCAAI,EAAE,CAAA;YAC9B,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,cAAc,CAAC,IAAI,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChC,UAAU,IAAI,KAAK,CAAA;QACrB,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QACzB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,UAAU;gBAAE,cAAc,CAAC,UAAU,CAAC,CAAA;YAC1C,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,gBAAgB,IAAI,EAAE,CAAC,CAAC,CAAA;gBAC9D,OAAM;YACR,CAAC;YACD,OAAO,CAAC,aAAa,IAAI,UAAU,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IACF,OAAO,cAAc,CAAC,MAAM,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,EACzB,KAAK,GAAG,OAAO,CAAC,KAAK,EACrB,MAAM,GAAG,OAAO,CAAC,MAAM,EACvB,WAAW,GAAG,OAAO,CAAC,MAAM,EAC5B,IAAI,GAAG,OAAO,CAAC,IAAI,GACpB,GAAG,EAAE;IACJ,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;QACnD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE;YACpC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;gBACpB,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC5C,CAAC;SACF,CAAC,CAAA;QACF,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAA;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAChF,IAAI,CAAC,CAAC,CAAC,CAAA;IACT,CAAC;AACH,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/E,MAAM,IAAI,EAAE,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listener-flags.d.mts","sourceRoot":"","sources":["../../src/bridge/listener-flags.mjs"],"names":[],"mappings":"AAQA;;;EASC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const DEFAULT_POLL_MS = 1000
|
|
2
|
+
const DEFAULT_PUBLIC_MENTION_POLL_MS = 1000
|
|
3
|
+
|
|
4
|
+
function positiveNumberFlag(flags, name, fallback) {
|
|
5
|
+
const value = Number(flags.get(name))
|
|
6
|
+
return Number.isFinite(value) && value > 0 ? value : fallback
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function listenerTimingFromFlags(flags) {
|
|
10
|
+
return {
|
|
11
|
+
pollMs: positiveNumberFlag(flags, '--poll-ms', DEFAULT_POLL_MS),
|
|
12
|
+
publicMentionPollMs: positiveNumberFlag(
|
|
13
|
+
flags,
|
|
14
|
+
'--public-mention-poll-ms',
|
|
15
|
+
DEFAULT_PUBLIC_MENTION_POLL_MS,
|
|
16
|
+
),
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listener-flags.mjs","sourceRoot":"","sources":["../../src/bridge/listener-flags.mjs"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,IAAI,CAAA;AAC5B,MAAM,8BAA8B,GAAG,IAAI,CAAA;AAE3C,SAAS,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;IACrC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAK;IAC3C,OAAO;QACL,MAAM,EAAE,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,eAAe,CAAC;QAC/D,mBAAmB,EAAE,kBAAkB,CACrC,KAAK,EACL,0BAA0B,EAC1B,8BAA8B,CAC/B;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export function runOnePrivateChatIteration({ client, adapter, sessionId, claimTool, }: {
|
|
2
|
+
client: any;
|
|
3
|
+
adapter: any;
|
|
4
|
+
sessionId: any;
|
|
5
|
+
claimTool?: string | undefined;
|
|
6
|
+
}): Promise<{
|
|
7
|
+
timed_out: boolean;
|
|
8
|
+
failed?: undefined;
|
|
9
|
+
error?: undefined;
|
|
10
|
+
skipped?: undefined;
|
|
11
|
+
replied?: undefined;
|
|
12
|
+
ack_failed?: undefined;
|
|
13
|
+
message_id?: undefined;
|
|
14
|
+
} | {
|
|
15
|
+
failed: boolean;
|
|
16
|
+
error: string;
|
|
17
|
+
timed_out?: undefined;
|
|
18
|
+
skipped?: undefined;
|
|
19
|
+
replied?: undefined;
|
|
20
|
+
ack_failed?: undefined;
|
|
21
|
+
message_id?: undefined;
|
|
22
|
+
} | {
|
|
23
|
+
skipped: boolean;
|
|
24
|
+
timed_out?: undefined;
|
|
25
|
+
failed?: undefined;
|
|
26
|
+
error?: undefined;
|
|
27
|
+
replied?: undefined;
|
|
28
|
+
ack_failed?: undefined;
|
|
29
|
+
message_id?: undefined;
|
|
30
|
+
} | {
|
|
31
|
+
replied: boolean;
|
|
32
|
+
ack_failed: boolean;
|
|
33
|
+
message_id: any;
|
|
34
|
+
error: string;
|
|
35
|
+
timed_out?: undefined;
|
|
36
|
+
failed?: undefined;
|
|
37
|
+
skipped?: undefined;
|
|
38
|
+
} | {
|
|
39
|
+
replied: boolean;
|
|
40
|
+
message_id: any;
|
|
41
|
+
timed_out?: undefined;
|
|
42
|
+
failed?: undefined;
|
|
43
|
+
error?: undefined;
|
|
44
|
+
skipped?: undefined;
|
|
45
|
+
ack_failed?: undefined;
|
|
46
|
+
}>;
|
|
47
|
+
export function runPrivateChatListener({ client, adapter, clientName, clientVersion, expectedAgentId, transport, fallbackPollMs, wakeSubscriptionFactory, }: {
|
|
48
|
+
client: any;
|
|
49
|
+
adapter: any;
|
|
50
|
+
clientName?: string | undefined;
|
|
51
|
+
clientVersion?: string | undefined;
|
|
52
|
+
expectedAgentId: any;
|
|
53
|
+
transport?: string | undefined;
|
|
54
|
+
fallbackPollMs?: number | undefined;
|
|
55
|
+
wakeSubscriptionFactory?: typeof createPrivateChatWakeSubscription | undefined;
|
|
56
|
+
}): Promise<void>;
|
|
57
|
+
import { createPrivateChatWakeSubscription } from './realtime-wake.mjs';
|
|
58
|
+
//# sourceMappingURL=listener-loop.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listener-loop.d.mts","sourceRoot":"","sources":["../../src/bridge/listener-loop.mjs"],"names":[],"mappings":"AAoKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyFC;AAED;;;;;;;;;kBAwKC;kDAvaiD,qBAAqB"}
|