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,225 @@
|
|
|
1
|
+
function boundedError(error) {
|
|
2
|
+
const message = error instanceof Error ? error.message : String(error)
|
|
3
|
+
return message.replace(/\s+/g, ' ').trim().slice(0, 500)
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
function isUnknownToolError(error) {
|
|
7
|
+
const message = boundedError(error).toLowerCase()
|
|
8
|
+
return message.includes('unknown tool') ||
|
|
9
|
+
message.includes('method not found') ||
|
|
10
|
+
message.includes('tool not found')
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function isNotFoundToolError(error) {
|
|
14
|
+
const message = boundedError(error).toLowerCase()
|
|
15
|
+
return message.includes('not_found') || message.includes('not found')
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function directReplyShouldFallBack(error) {
|
|
19
|
+
const code = error?.code
|
|
20
|
+
return code === 'AUTH_FAILED' || code === 'HTTP_404'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function replyText(reply) {
|
|
24
|
+
return String(reply?.text ?? '').trim()
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function nowMs() {
|
|
28
|
+
return performance.now()
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function timingEnabled() {
|
|
32
|
+
return process.env.FOUNDR_WORK_MISSION_TIMING === '1' || process.env.FOUNDR_PRIVATE_CHAT_TIMING === '1'
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function timingLog(startedAt, message) {
|
|
36
|
+
if (!timingEnabled()) return
|
|
37
|
+
console.error(`[foundr:public-mentions:timing +${Math.round(nowMs() - startedAt)}ms] ${message}`)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function publicRoomMentionEnvelope(mention, agent = null) {
|
|
41
|
+
return {
|
|
42
|
+
kind: 'public_room_mention',
|
|
43
|
+
thread: {
|
|
44
|
+
id: `room:${mention.room_id}`,
|
|
45
|
+
kind: 'public_room',
|
|
46
|
+
},
|
|
47
|
+
room: {
|
|
48
|
+
id: mention.room_id,
|
|
49
|
+
handle: mention.room_handle,
|
|
50
|
+
},
|
|
51
|
+
mention: {
|
|
52
|
+
id: mention.mention_id,
|
|
53
|
+
expires_at: mention.expires_at,
|
|
54
|
+
},
|
|
55
|
+
message: {
|
|
56
|
+
id: mention.chat_id,
|
|
57
|
+
body: mention.text,
|
|
58
|
+
sender_public_id: mention.sender_public_id,
|
|
59
|
+
sender_display_name: mention.sender_display_name,
|
|
60
|
+
created_at: mention.created_at,
|
|
61
|
+
},
|
|
62
|
+
delivery: {
|
|
63
|
+
id: mention.mention_id,
|
|
64
|
+
agent_key_id: agent?.id ?? '',
|
|
65
|
+
},
|
|
66
|
+
agent: agent ?? null,
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function isPublicRoomMentionWakePayload(payload) {
|
|
71
|
+
return payload?.type === 'public_room_mention_ready' &&
|
|
72
|
+
typeof payload.mention_id === 'string' &&
|
|
73
|
+
typeof payload.room_id === 'string' &&
|
|
74
|
+
typeof payload.room_handle === 'string' &&
|
|
75
|
+
typeof payload.chat_id === 'string' &&
|
|
76
|
+
typeof payload.sender_public_id === 'string' &&
|
|
77
|
+
typeof payload.sender_display_name === 'string' &&
|
|
78
|
+
typeof payload.text === 'string' &&
|
|
79
|
+
typeof payload.created_at === 'string' &&
|
|
80
|
+
typeof payload.expires_at === 'string'
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function publicRoomMentionFromWake(payload) {
|
|
84
|
+
return {
|
|
85
|
+
mention_id: payload.mention_id,
|
|
86
|
+
room_id: payload.room_id,
|
|
87
|
+
room_handle: payload.room_handle,
|
|
88
|
+
chat_id: payload.chat_id,
|
|
89
|
+
sender_public_id: payload.sender_public_id,
|
|
90
|
+
sender_display_name: payload.sender_display_name,
|
|
91
|
+
text: payload.text,
|
|
92
|
+
created_at: payload.created_at,
|
|
93
|
+
expires_at: payload.expires_at,
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
async function sendPublicRoomMentionReply({ client, mentionId, roomHandle, text }) {
|
|
98
|
+
if (typeof client.callJson === 'function') {
|
|
99
|
+
try {
|
|
100
|
+
return await client.callJson('/api/mcp/public-room-mention-reply', {
|
|
101
|
+
mention_id: mentionId,
|
|
102
|
+
text,
|
|
103
|
+
})
|
|
104
|
+
} catch (error) {
|
|
105
|
+
if (!directReplyShouldFallBack(error)) throw error
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
try {
|
|
110
|
+
return await client.callTool('reply_public_room_mention', {
|
|
111
|
+
mention_id: mentionId,
|
|
112
|
+
text,
|
|
113
|
+
})
|
|
114
|
+
} catch (error) {
|
|
115
|
+
if (!isUnknownToolError(error)) throw error
|
|
116
|
+
const sent = await client.callTool('say_in_room', {
|
|
117
|
+
room_handle: roomHandle,
|
|
118
|
+
text,
|
|
119
|
+
})
|
|
120
|
+
await client.callTool('ack_public_room_mention', {
|
|
121
|
+
mention_id: mentionId,
|
|
122
|
+
status: 'replied',
|
|
123
|
+
replied_chat_id: sent.chat_id,
|
|
124
|
+
})
|
|
125
|
+
return { mention_id: mentionId, chat_id: sent.chat_id, ts: sent.ts }
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export async function runOnePublicRoomMentionIteration({
|
|
130
|
+
client,
|
|
131
|
+
adapter,
|
|
132
|
+
agent = null,
|
|
133
|
+
}) {
|
|
134
|
+
const iterationStartedAt = nowMs()
|
|
135
|
+
let claimed
|
|
136
|
+
try {
|
|
137
|
+
claimed = await client.callTool('claim_public_room_mention', {})
|
|
138
|
+
} catch (error) {
|
|
139
|
+
if (!isUnknownToolError(error)) throw error
|
|
140
|
+
return { timed_out: true, replied: 0, skipped: 0, failed: 0, unsupported: true }
|
|
141
|
+
}
|
|
142
|
+
const mention = claimed?.mention ?? null
|
|
143
|
+
if (!mention) return { timed_out: true, replied: 0, skipped: 0, failed: 0 }
|
|
144
|
+
timingLog(iterationStartedAt, `claimed mention=${mention.mention_id}`)
|
|
145
|
+
|
|
146
|
+
const mentionId = mention.mention_id
|
|
147
|
+
try {
|
|
148
|
+
const reply = await adapter.reply(publicRoomMentionEnvelope(mention, agent))
|
|
149
|
+
const text = replyText(reply)
|
|
150
|
+
if (!text) {
|
|
151
|
+
await client.callTool('ack_public_room_mention', {
|
|
152
|
+
mention_id: mentionId,
|
|
153
|
+
status: 'skipped',
|
|
154
|
+
})
|
|
155
|
+
return { replied: 0, skipped: 1, failed: 0 }
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const sent = await client.callTool('say_in_room', {
|
|
159
|
+
room_handle: mention.room_handle,
|
|
160
|
+
text,
|
|
161
|
+
})
|
|
162
|
+
await client.callTool('ack_public_room_mention', {
|
|
163
|
+
mention_id: mentionId,
|
|
164
|
+
status: 'replied',
|
|
165
|
+
replied_chat_id: sent.chat_id,
|
|
166
|
+
})
|
|
167
|
+
timingLog(iterationStartedAt, `reply sent mention=${mentionId}`)
|
|
168
|
+
return { replied: 1, skipped: 0, failed: 0, chat_id: sent.chat_id }
|
|
169
|
+
} catch (error) {
|
|
170
|
+
const errorText = boundedError(error)
|
|
171
|
+
await client.callTool('ack_public_room_mention', {
|
|
172
|
+
mention_id: mentionId,
|
|
173
|
+
status: 'failed',
|
|
174
|
+
error: errorText,
|
|
175
|
+
}).catch(() => {})
|
|
176
|
+
return { replied: 0, skipped: 0, failed: 1, error: errorText }
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export async function runOnePublicRoomMentionWakeIteration({
|
|
181
|
+
client,
|
|
182
|
+
adapter,
|
|
183
|
+
agent = null,
|
|
184
|
+
wake,
|
|
185
|
+
}) {
|
|
186
|
+
if (!isPublicRoomMentionWakePayload(wake)) {
|
|
187
|
+
return runOnePublicRoomMentionIteration({ client, adapter, agent })
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const iterationStartedAt = nowMs()
|
|
191
|
+
const mention = publicRoomMentionFromWake(wake)
|
|
192
|
+
const mentionId = mention.mention_id
|
|
193
|
+
timingLog(iterationStartedAt, `wake mention=${mentionId}`)
|
|
194
|
+
|
|
195
|
+
try {
|
|
196
|
+
const reply = await adapter.reply(publicRoomMentionEnvelope(mention, agent))
|
|
197
|
+
const text = replyText(reply)
|
|
198
|
+
if (!text) {
|
|
199
|
+
await client.callTool('ack_public_room_mention', {
|
|
200
|
+
mention_id: mentionId,
|
|
201
|
+
status: 'skipped',
|
|
202
|
+
})
|
|
203
|
+
return { replied: 0, skipped: 1, failed: 0 }
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const sent = await sendPublicRoomMentionReply({
|
|
207
|
+
client,
|
|
208
|
+
mentionId,
|
|
209
|
+
roomHandle: mention.room_handle,
|
|
210
|
+
text,
|
|
211
|
+
})
|
|
212
|
+
timingLog(iterationStartedAt, `wake reply sent mention=${mentionId}`)
|
|
213
|
+
return { replied: 1, skipped: 0, failed: 0, chat_id: sent.chat_id }
|
|
214
|
+
} catch (error) {
|
|
215
|
+
const errorText = boundedError(error)
|
|
216
|
+
if (!isNotFoundToolError(error)) {
|
|
217
|
+
await client.callTool('ack_public_room_mention', {
|
|
218
|
+
mention_id: mentionId,
|
|
219
|
+
status: 'failed',
|
|
220
|
+
error: errorText,
|
|
221
|
+
}).catch(() => {})
|
|
222
|
+
}
|
|
223
|
+
return { replied: 0, skipped: 0, failed: 1, error: errorText }
|
|
224
|
+
}
|
|
225
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-room-mention-listener-loop.mjs","sourceRoot":"","sources":["../../src/bridge/public-room-mention-listener-loop.mjs"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function createPrivateChatWakeSubscription({ wake, onWake, onStatus, clientFactory, }: {
|
|
2
|
+
wake: any;
|
|
3
|
+
onWake: any;
|
|
4
|
+
onStatus?: (() => void) | undefined;
|
|
5
|
+
clientFactory?: (<Database = any, SchemaNameOrClientOptions extends (string & keyof Omit<Database, "__InternalSupabase">) | {
|
|
6
|
+
PostgrestVersion: string;
|
|
7
|
+
} = "public" extends Exclude<keyof Database, "__InternalSupabase"> ? "public" : string & Exclude<keyof Database, "__InternalSupabase">, SchemaName extends string & keyof Omit<Database, "__InternalSupabase"> = SchemaNameOrClientOptions extends string & Exclude<keyof Database, "__InternalSupabase"> ? SchemaNameOrClientOptions : "public" extends Exclude<keyof Database, "__InternalSupabase"> ? "public" : string & Exclude<Exclude<keyof Database, "__InternalSupabase">, "__InternalSupabase">>(supabaseUrl: string, supabaseKey: string, options?: import("@supabase/supabase-js").SupabaseClientOptions<SchemaName>) => import("@supabase/supabase-js").SupabaseClient<Database, SchemaNameOrClientOptions, SchemaName>) | undefined;
|
|
8
|
+
}): Promise<{
|
|
9
|
+
close: () => Promise<void>;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=realtime-wake.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-wake.d.mts","sourceRoot":"","sources":["../../src/bridge/realtime-wake.mjs"],"names":[],"mappings":"AAWA;;;;;;;;;GA0HC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { createClient } from '@supabase/supabase-js'
|
|
2
|
+
|
|
3
|
+
const SUBSCRIBE_TIMEOUT_MS = 10_000
|
|
4
|
+
const RECONNECT_BASE_MS = 750
|
|
5
|
+
const RECONNECT_MAX_MS = 10_000
|
|
6
|
+
|
|
7
|
+
function reconnectDelayMs(attempt) {
|
|
8
|
+
const capped = Math.min(RECONNECT_MAX_MS, RECONNECT_BASE_MS * (2 ** Math.max(0, attempt - 1)))
|
|
9
|
+
return Math.round(capped * (0.75 + Math.random() * 0.5))
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export async function createPrivateChatWakeSubscription({
|
|
13
|
+
wake,
|
|
14
|
+
onWake,
|
|
15
|
+
onStatus = () => {},
|
|
16
|
+
clientFactory = createClient,
|
|
17
|
+
}) {
|
|
18
|
+
if (!wake?.supabase_url || !wake?.supabase_key || !wake?.topic) {
|
|
19
|
+
throw new Error('wake transport is unavailable for this listener session')
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const supabase = clientFactory(wake.supabase_url, wake.supabase_key, {
|
|
23
|
+
auth: { persistSession: false, autoRefreshToken: false },
|
|
24
|
+
realtime: { params: { eventsPerSecond: 10 } },
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
let closed = false
|
|
28
|
+
let channel = null
|
|
29
|
+
let reconnectTimer = null
|
|
30
|
+
let reconnectAttempt = 0
|
|
31
|
+
let subscribedOnce = false
|
|
32
|
+
|
|
33
|
+
const clearReconnectTimer = () => {
|
|
34
|
+
if (!reconnectTimer) return
|
|
35
|
+
clearTimeout(reconnectTimer)
|
|
36
|
+
reconnectTimer = null
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const removeCurrentChannel = async () => {
|
|
40
|
+
const current = channel
|
|
41
|
+
channel = null
|
|
42
|
+
if (current) await supabase.removeChannel(current).catch(() => {})
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const scheduleReconnect = () => {
|
|
46
|
+
if (closed || reconnectTimer) return
|
|
47
|
+
reconnectAttempt += 1
|
|
48
|
+
const delayMs = reconnectDelayMs(reconnectAttempt)
|
|
49
|
+
reconnectTimer = setTimeout(() => {
|
|
50
|
+
reconnectTimer = null
|
|
51
|
+
void reconnect()
|
|
52
|
+
}, delayMs)
|
|
53
|
+
reconnectTimer.unref?.()
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const subscribeOnce = () => new Promise((resolve, reject) => {
|
|
57
|
+
if (closed) {
|
|
58
|
+
reject(new Error('wake subscription closed'))
|
|
59
|
+
return
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const nextChannel = supabase.channel(wake.topic)
|
|
63
|
+
channel = nextChannel
|
|
64
|
+
nextChannel.on('broadcast', { event: 'private_chat_delivery_ready' }, (event) => {
|
|
65
|
+
onWake(event.payload ?? {})
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
let settled = false
|
|
69
|
+
const timeout = setTimeout(() => {
|
|
70
|
+
void rejectAfterCleanup(new Error('wake subscribe timed out'))
|
|
71
|
+
}, SUBSCRIBE_TIMEOUT_MS)
|
|
72
|
+
|
|
73
|
+
const resolveOnce = () => {
|
|
74
|
+
if (settled) return
|
|
75
|
+
settled = true
|
|
76
|
+
clearTimeout(timeout)
|
|
77
|
+
resolve()
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const rejectAfterCleanup = async (error) => {
|
|
81
|
+
if (settled) return
|
|
82
|
+
settled = true
|
|
83
|
+
clearTimeout(timeout)
|
|
84
|
+
if (channel === nextChannel) channel = null
|
|
85
|
+
await supabase.removeChannel(nextChannel).catch(() => {})
|
|
86
|
+
reject(error)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
try {
|
|
90
|
+
nextChannel.subscribe((status) => {
|
|
91
|
+
onStatus(status)
|
|
92
|
+
if (closed || channel !== nextChannel) return
|
|
93
|
+
if (status === 'SUBSCRIBED') {
|
|
94
|
+
reconnectAttempt = 0
|
|
95
|
+
resolveOnce()
|
|
96
|
+
}
|
|
97
|
+
if (status === 'CHANNEL_ERROR' || status === 'TIMED_OUT') {
|
|
98
|
+
if (!subscribedOnce) {
|
|
99
|
+
void rejectAfterCleanup(new Error(`wake subscribe failed: ${status}`))
|
|
100
|
+
} else {
|
|
101
|
+
scheduleReconnect()
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (status === 'CLOSED' && subscribedOnce) {
|
|
105
|
+
scheduleReconnect()
|
|
106
|
+
}
|
|
107
|
+
})
|
|
108
|
+
} catch (error) {
|
|
109
|
+
void rejectAfterCleanup(error)
|
|
110
|
+
}
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
async function reconnect() {
|
|
114
|
+
if (closed) return
|
|
115
|
+
await removeCurrentChannel()
|
|
116
|
+
try {
|
|
117
|
+
await subscribeOnce()
|
|
118
|
+
subscribedOnce = true
|
|
119
|
+
} catch {
|
|
120
|
+
scheduleReconnect()
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
await subscribeOnce()
|
|
125
|
+
subscribedOnce = true
|
|
126
|
+
|
|
127
|
+
return {
|
|
128
|
+
close: async () => {
|
|
129
|
+
closed = true
|
|
130
|
+
clearReconnectTimer()
|
|
131
|
+
await removeCurrentChannel()
|
|
132
|
+
},
|
|
133
|
+
}
|
|
134
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-wake.mjs","sourceRoot":"","sources":["../../src/bridge/realtime-wake.mjs"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
export function pendingWorkMissionFounderMessages(snapshot: any, { ignoredMessageIds, }?: {
|
|
2
|
+
ignoredMessageIds?: Set<any> | undefined;
|
|
3
|
+
}): any[];
|
|
4
|
+
export function workMissionEnvelope(snapshot: any, message: any, agent: any, delivery?: null): {
|
|
5
|
+
kind: string;
|
|
6
|
+
mission: any;
|
|
7
|
+
thread: {
|
|
8
|
+
id: string;
|
|
9
|
+
kind: string;
|
|
10
|
+
};
|
|
11
|
+
message: any;
|
|
12
|
+
delivery: {
|
|
13
|
+
id: any;
|
|
14
|
+
agent_key_id: any;
|
|
15
|
+
requested_model: any;
|
|
16
|
+
};
|
|
17
|
+
agent: any;
|
|
18
|
+
};
|
|
19
|
+
export function runOneWorkMissionIteration({ client, adapter, agent, sessionId, }: {
|
|
20
|
+
client: any;
|
|
21
|
+
adapter: any;
|
|
22
|
+
agent: any;
|
|
23
|
+
sessionId: any;
|
|
24
|
+
}): Promise<{
|
|
25
|
+
timed_out: boolean;
|
|
26
|
+
replied: number;
|
|
27
|
+
skipped: number;
|
|
28
|
+
failed: number;
|
|
29
|
+
message_id?: undefined;
|
|
30
|
+
error?: undefined;
|
|
31
|
+
} | {
|
|
32
|
+
replied: number;
|
|
33
|
+
skipped: number;
|
|
34
|
+
failed: number;
|
|
35
|
+
timed_out?: undefined;
|
|
36
|
+
message_id?: undefined;
|
|
37
|
+
error?: undefined;
|
|
38
|
+
} | {
|
|
39
|
+
replied: number;
|
|
40
|
+
skipped: number;
|
|
41
|
+
failed: number;
|
|
42
|
+
message_id: any;
|
|
43
|
+
timed_out?: undefined;
|
|
44
|
+
error?: undefined;
|
|
45
|
+
} | {
|
|
46
|
+
replied: number;
|
|
47
|
+
skipped: number;
|
|
48
|
+
failed: number;
|
|
49
|
+
error: string;
|
|
50
|
+
timed_out?: undefined;
|
|
51
|
+
message_id?: undefined;
|
|
52
|
+
}>;
|
|
53
|
+
export function runOneWorkMissionWakeIteration({ client, adapter, agent, sessionId, wake, }: {
|
|
54
|
+
client: any;
|
|
55
|
+
adapter: any;
|
|
56
|
+
agent: any;
|
|
57
|
+
sessionId: any;
|
|
58
|
+
wake: any;
|
|
59
|
+
}): Promise<{
|
|
60
|
+
timed_out: boolean;
|
|
61
|
+
replied: number;
|
|
62
|
+
skipped: number;
|
|
63
|
+
failed: number;
|
|
64
|
+
message_id?: undefined;
|
|
65
|
+
error?: undefined;
|
|
66
|
+
} | {
|
|
67
|
+
replied: number;
|
|
68
|
+
skipped: number;
|
|
69
|
+
failed: number;
|
|
70
|
+
timed_out?: undefined;
|
|
71
|
+
message_id?: undefined;
|
|
72
|
+
error?: undefined;
|
|
73
|
+
} | {
|
|
74
|
+
replied: number;
|
|
75
|
+
skipped: number;
|
|
76
|
+
failed: number;
|
|
77
|
+
message_id: any;
|
|
78
|
+
timed_out?: undefined;
|
|
79
|
+
error?: undefined;
|
|
80
|
+
} | {
|
|
81
|
+
replied: number;
|
|
82
|
+
skipped: number;
|
|
83
|
+
failed: number;
|
|
84
|
+
error: string;
|
|
85
|
+
timed_out?: undefined;
|
|
86
|
+
message_id?: undefined;
|
|
87
|
+
}>;
|
|
88
|
+
export function runWorkMissionListener({ client, adapter, clientName, clientVersion, expectedAgentId, pollMs, publicMentionPollMs, transport, wakeSubscriptionFactory, }: {
|
|
89
|
+
client: any;
|
|
90
|
+
adapter: any;
|
|
91
|
+
clientName?: string | undefined;
|
|
92
|
+
clientVersion?: string | undefined;
|
|
93
|
+
expectedAgentId: any;
|
|
94
|
+
pollMs?: number | undefined;
|
|
95
|
+
publicMentionPollMs?: number | undefined;
|
|
96
|
+
transport?: string | undefined;
|
|
97
|
+
wakeSubscriptionFactory?: typeof createPrivateChatWakeSubscription | undefined;
|
|
98
|
+
}): Promise<void>;
|
|
99
|
+
import { createPrivateChatWakeSubscription } from './realtime-wake.mjs';
|
|
100
|
+
//# sourceMappingURL=work-mission-listener-loop.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-mission-listener-loop.d.mts","sourceRoot":"","sources":["../../src/bridge/work-mission-listener-loop.mjs"],"names":[],"mappings":"AAwDA;;UAeC;AAED;;;;;;;;;;;;;;EAgBC;AA4MD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkGC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyGC;AAED;;;;;;;;;;kBA4OC;kDAhuBiD,qBAAqB"}
|