Module: Pikuri::Thunderbird
- Defined in:
- lib/pikuri-thunderbird.rb,
lib/pikuri/thunderbird/gloda.rb,
lib/pikuri/thunderbird/profile.rb,
lib/pikuri/thunderbird/calendar.rb,
lib/pikuri/thunderbird/launcher.rb,
lib/pikuri/thunderbird/extension.rb,
lib/pikuri/thunderbird/ical_line.rb,
lib/pikuri/thunderbird/ics_event.rb,
lib/pikuri/thunderbird/mail_read.rb,
lib/pikuri/thunderbird/gloda/mail.rb,
lib/pikuri/thunderbird/mailto_uri.rb,
lib/pikuri/thunderbird/mail_search.rb,
lib/pikuri/thunderbird/date_helpers.rb,
lib/pikuri/thunderbird/mail_compose.rb,
lib/pikuri/thunderbird/calendar_read.rb,
lib/pikuri/thunderbird/compose_guard.rb,
lib/pikuri/thunderbird/contact_search.rb,
lib/pikuri/thunderbird/gloda/contacts.rb,
lib/pikuri/thunderbird/calendar_create.rb,
lib/pikuri/thunderbird/calendar_search.rb,
lib/pikuri/thunderbird/database_snapshot.rb
Defined Under Namespace
Modules: DateHelpers, IcalLine, IcsEvent, MailtoUri Classes: Calendar, CalendarCreate, CalendarRead, CalendarSearch, ComposeGuard, ContactSearch, DatabaseSnapshot, Extension, Gloda, Launcher, MailCompose, MailRead, MailSearch, Profile
Constant Summary collapse
- INBOUND_LEGS =
Legs of the five inbound tools: a mailbox and a calendar are private by domain, and their contents are written by whoever mailed you.
The
private: trueis the one place the framework declares that leg for you, and it is a narrow exception rather than a breach of the rule that the user declares sensitivity: elsewhere the framework cannot tell~/work/scratchfrom~/work/payroll, but a mailbox is sensitive by what it is, not by how it was configured. Nothing was inspected to know this — only the tool's domain. Pikuri::Tool::TrifectaLegs.new( private: true, untrusted: :hard, egress_payload_review: :no_egress ).freeze
- OUTBOUND_LEGS =
Legs of the two opt-in outbound hand-offs.
:human_reviewedrather than:unreviewedbecause all four clauses of the approver seat hold, and the load-bearing one is payload visibility: the human commits in Thunderbird's own compose window / import wizard, so what is on screen is what leaves, byte for byte. That is why these are graded differently from a confirmer-gated shell command, where the human approves a program whose output was never shown.The destination stays
:attacker_reachable, and the pair is the clearest proof the two egress axes are orthogonal: the recipient is a drafted field, so an injection can address the mail to itself and a reviewed payload still lands in an inbox the attacker reads.It stays true only while the outbound surface carries nothing but fields that render literally — no attachments, no HTML body. A tool that gained one would silently drop to hard
:egress, since the human would be approving a reference to bytes nobody saw.No
private, unlike INBOUND_LEGS: these send, they do not read the mailbox. The one trickle back is ComposeGuard's recipient-novelty note, and it is a single incidental bit about an address the model itself supplied — worthless under attack, where a novel recipient is expected by construction. The private leg grades what a tool lets an attacker query over the pool, not whether any bit at all flows back. Pikuri::Tool::TrifectaLegs.new( private: false, untrusted: :none, egress_payload_review: :human_reviewed, egress_destination: :attacker_reachable ).freeze
- LOADER =
Zeitwerk::Loader.new