Commit Graph

120 Commits

Author SHA1 Message Date
EugeneTes
4dc4b5b557 Add Fortress MCP bridge with fortress_ tool prefix and workspace write dir 2026-09-23 19:29:10 +00:00
EugeneTes
3d4ffde3c9 Build Playwright MCP bridge on the generic bridge 2026-09-23 19:29:10 +00:00
EugeneTes
52c4e13d5c Extract generic stdio MCP bridge with optional tool-name prefix 2026-09-23 19:29:10 +00:00
EugeneTes
231740b32d Add implementation plan for Fortress MCP bridge 2026-09-23 19:28:23 +00:00
EugeneTes
c078ce8add Add design spec for Fortress stealth-browser MCP bridge 2026-09-23 19:23:00 +00:00
EugeneTes
f9d84cccac Truncate voice-transcript echo so Telegram doesn't reject long messages
The bot re-emits the transcript back to the owner as a preview
(`🎤 …`). Telegram's sendMessage caps at 4096 chars, so a long audio
message crashed the handler with a 400. Trim the echo to 200 chars
with an ellipsis; the agent still receives the full transcript via
result.input.text.
2026-09-23 14:26:07 +00:00
EugeneTes
a8f838cb61 Wrap device user code in <code> so Telegram taps to copy 2026-09-23 11:00:40 +00:00
EugeneTes
8d663685b3 Document the /connect_calendar flow in README and .env.example 2026-09-23 10:33:20 +00:00
EugeneTes
ee38bd02d5 Wire GoogleTokenStore and DeviceFlowClient into main 2026-09-23 10:29:43 +00:00
EugeneTes
f3c4025b38 Handle thrown exceptions from device-flow complete() in /calendar_done 2026-09-23 10:28:11 +00:00
EugeneTes
279134a305 Add /connect_calendar and /calendar_done bot commands 2026-09-23 10:20:48 +00:00
EugeneTes
2d294995fa Fix runTool helper in calendar tests to match execute() arity 2026-09-23 10:16:13 +00:00
EugeneTes
ecf61c34e1 Calendar tool reads refresh token from GoogleTokenStore per call 2026-09-23 10:07:50 +00:00
EugeneTes
f765784acb Make GOOGLE_REFRESH_TOKEN optional in config 2026-09-23 10:03:09 +00:00
EugeneTes
1a4960e5bb Add Google device-authorization flow client 2026-09-23 09:59:11 +00:00
EugeneTes
e776c32ca3 Add GoogleTokenStore for workspace-local refresh token 2026-09-23 09:55:09 +00:00
EugeneTes
e9c39c5f87 Add implementation plan for Google Calendar connect flow 2026-09-23 09:49:17 +00:00
EugeneTes
6d430b8c0c Add spec for in-bot Google Calendar connect flow 2026-09-23 09:21:30 +00:00
EugeneTes
288506a390 Add manual E2E entry for forward-with-audio-comment merge 2026-09-23 07:18:26 +00:00
EugeneTes
2004572e5e Hold debouncer flush while a Telegram message handler is transcribing 2026-09-23 07:13:24 +00:00
EugeneTes
98e1ed2613 Add pending-token API to InputDebouncer 2026-09-23 07:05:09 +00:00
EugeneTes
76bbac2df9 Add implementation plan for forwarded audio + comment merge
Three TDD tasks: pending-token API on the debouncer, bracket the
bridge message handler, and one manual E2E line in the README.
2026-09-23 07:02:09 +00:00
EugeneTes
483df6f528 Add spec for merging forwarded audio with its comment
Fixes the debouncer race where a fast comment message flushes on its
own before slow audio transcription completes, splitting a single
user turn into two.
2026-09-23 06:58:54 +00:00
EugeneTes
c35d0434ff Document reply / reply-with-quote support in the README 2026-09-22 08:53:01 +00:00
EugeneTes
bbc8c41118 Pass bot user id into normalizeMessage for reply labelling 2026-09-22 08:51:19 +00:00
EugeneTes
7a53ce379a Prepend reply header ahead of forward header in normalizeMessage 2026-09-22 08:47:37 +00:00
EugeneTes
38ca7cbfea Add buildReplyHeader helper with truncation and media descriptors 2026-09-22 08:42:59 +00:00
EugeneTes
0febacfee7 Add reply, quote, and botUserId types to inbound 2026-09-22 08:38:54 +00:00
EugeneTes
90bcb6fd1f Implementation plan for reply and reply-with-quote context 2026-09-22 08:15:37 +00:00
EugeneTes
99dc906d4e Design spec: surface reply and reply-with-quote context to the agent 2026-09-22 08:11:40 +00:00
EugeneTes
d1d8b26e22 Debounce inbound messages so forward + comment reach the agent as one turn
Telegram sends "forward with a comment" as two separate messages. Buffer
inputs for ~600ms after each arrival and flush a single merged AgentInput;
label forwarded content with its origin so the merged text is intelligible.
2026-09-22 07:51:13 +00:00
EugeneTes
4f2248e24c Default PLAYWRIGHT_BROWSER to chromium in the image
The Dockerfile installs Chromium via `playwright install chromium`, but
Playwright MCP defaults to Chrome (the branded Google build) when no
browser is specified. On a fresh container the launch fails and the
agent falls back to installing Chrome at runtime. Baking the env var
into the image keeps installed browser and default in sync.
2026-09-08 12:45:19 +00:00
EugeneTes
311bdb2eed Document the send tool in the README 2026-09-08 12:32:59 +00:00
EugeneTes
0a40a6b5fa Wire send tool into main.ts 2026-09-08 12:29:19 +00:00
EugeneTes
1bda8a2f16 Document the send tool in the system prompt 2026-09-08 12:26:12 +00:00
EugeneTes
f687c1b9a3 Test Pi tool wrapper for send 2026-09-08 12:23:43 +00:00
EugeneTes
202cb001e7 Test oversize photo/document rejection 2026-09-08 12:20:48 +00:00
EugeneTes
f98572b39e Test explicit kind override for send 2026-09-08 12:18:06 +00:00
EugeneTes
40cb4a8061 Test document routing for non-image extensions 2026-09-08 12:15:46 +00:00
EugeneTes
a6612edc1d Type send.test.ts mocks against SendBotApi 2026-09-08 12:05:09 +00:00
EugeneTes
c30fccb6d5 Send photos through sendPhoto with auto-detection 2026-09-08 12:03:17 +00:00
EugeneTes
7c806d2d57 Reject missing files and directory paths in send 2026-09-08 11:59:43 +00:00
EugeneTes
3db5844c86 Reject send paths that escape the workspace 2026-09-08 11:55:25 +00:00
EugeneTes
3039f85db8 Add send tool skeleton with schema and factory 2026-09-08 11:51:33 +00:00
EugeneTes
ec87e8dcfd Add implementation plan for send-attachments tool 2026-09-08 11:49:13 +00:00
EugeneTes
0b2ae39651 Draft design for send-attachments tool
Adds a `send` custom tool so the agent can push files and images from the
workspace to the owner as Telegram attachments, closing the gap where the
bot could receive files but only ever reply with text.
2026-09-08 11:40:30 +00:00
EugeneTes
8b22645df4 Pipe MCP subprocess stderr to logger and fix bin lookup key
Two review followups:
- Consume the piped stderr from @playwright/mcp so browser-launch
  failures surface in our own logs (was set to "pipe" but never read).
- Drop the wrong ["mcp-server-playwright"] lookup; the actual bin key
  is "playwright-mcp". Falling through Object.values worked but was
  dead code.
2026-09-08 11:00:42 +00:00
EugeneTes
3a43391eb0 Document Playwright MCP env vars and manual E2E steps 2026-09-08 10:56:54 +00:00
EugeneTes
d69d01124d Install Chromium + deps in image for Playwright MCP 2026-09-08 10:55:34 +00:00
EugeneTes
8106c55e46 Wire Playwright MCP bridge into main.ts startup 2026-09-08 10:52:03 +00:00