22 Commits

Author SHA1 Message Date
EugeneTes
b2f13def40 Ignore workspace/fortress and record implementation notes in the spec 2026-09-23 19:41:21 +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
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
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
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
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
a3ce614171 Plan: fix fakeClient fixture to use live getters 2026-09-08 10:49:55 +00:00
EugeneTes
9b0a90458c Add implementation plan for Playwright MCP bridge
Seven-task plan: deps → config parsing (TDD) → bridge module (TDD w/
fake MCP client) → main.ts wiring → Dockerfile Chromium install →
docs → verification.
2026-09-08 10:37:50 +00:00
EugeneTes
5b7d344207 Draft design for Playwright MCP bridge
Bridge @playwright/mcp as a stdio subprocess and re-export its tools
as Pi custom tools, gated on PLAYWRIGHT_ENABLED. Uses Type.Unsafe to
pass MCP inputSchema through to the model without hand-mapping.
2026-09-08 10:24:07 +00:00
EugeneTes
160a615713 Add implementation plan for recurring calendar events 2026-09-08 08:00:59 +00:00
EugeneTes
30695cb121 Add design for recurring Google Calendar events
Extends the calendar tool to create, modify, and delete recurring events
via raw RFC 5545 recurrence lines, with instance vs. series scope on
update/delete and a list_instances action to fetch a series' occurrences.
2026-09-08 07:56:24 +00:00
EugeneTes
9cf6f7385e Cap captured script output, scrub the bot token, and speed up scheduler tests (Group C)
- runner.ts: cap captured stdout/stderr at 64 KiB per stream via a new
  Capture helper, keeping the first 48 KiB and last 16 KiB once a stream
  exceeds the cap, joined by "\n...(truncated)...\n". Prevents a runaway
  watcher script from ballooning memory or a Telegram message.
- runner.ts runScript: delete TELEGRAM_BOT_TOKEN from the child environment
  before spawning, since model-written scripts must never be able to read
  and exfiltrate it. Spec section 6.2 updated to describe the exclusion.
- scheduler.test.ts: the "drain() gives up after its timeout" test no longer
  calls s.stop() at the end -- no timer is armed after the at job fires, and
  its delivery never resolves, so stop()'s 10s grace period would run out
  for nothing. Full suite now runs in ~1.5s.
- runner.test.ts: relax the timeout-kill elapsed-time assertion from 3000ms
  to 4000ms to reduce flakiness, per the review.

Claude-Session: https://claude.ai/code/session_01JtuZTCMW9TyogEmBgGf8JT
2026-09-06 18:07:12 +02:00
EugeneTes
d2a0ec2cf1 Join every turn-final answer instead of only the last (Group A)
Pi drains queued follow-ups and steers inside the same run with no
agent_end/agent_start between them, so when a scheduled job's follow-up (or
a user steer) merges into a run, the model can answer twice before
agent_settled fires once. AgentHost.settle() used only the last assistant
message as finalText, so the first answer was lost (it only ever appeared
as progress-message narration, which gets deleted).

RunRecord now tracks `finals`: assistant texts whose stopReason is not
toolUse (and, as before, not error/aborted), collected alongside `texts`.
settle() joins `finals` with blank lines, falling back to `texts` and then
to the placeholder, matching the documented fallback chain.

Claude-Session: https://claude.ai/code/session_01JtuZTCMW9TyogEmBgGf8JT
2026-09-06 18:06:46 +02:00
EugeneTes
794580ee3a Ignore SDD scratch directory
Claude-Session: https://claude.ai/code/session_01JtuZTCMW9TyogEmBgGf8JT
2026-09-06 14:17:09 +02:00
EugeneTes
9c44020252 Add implementation plan and align spec with it
Claude-Session: https://claude.ai/code/session_01JtuZTCMW9TyogEmBgGf8JT
2026-09-06 14:14:22 +02:00
EugeneTes
0aacbcc4f7 Spec self-review: single terminal event per run, reuse PI_CODING_AGENT_DIR
Claude-Session: https://claude.ai/code/session_01JtuZTCMW9TyogEmBgGf8JT
2026-09-06 13:39:55 +02:00
EugeneTes
20b84d7fdd Add Volcanic Secretary design spec
Claude-Session: https://claude.ai/code/session_01JtuZTCMW9TyogEmBgGf8JT
2026-09-06 13:38:46 +02:00