Velum's entity detector occasionally pulls a leading ( into a PHONE
span without taking the matching ) — so "Berater (+43 660 938 4021)"
turned into "Berater <PHONE_2>)", with the opening paren swallowed by
the placeholder.
After normalizing the response, walk each mapping entry and peel off
any unbalanced opening or closing bracket from the original value,
moving it outside the placeholder in the pseudonymized text. Works for
() [] {}. Balanced brackets inside the original (e.g. a "(660)" area
code) are left alone.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the checkbox-style bullet format with a Markdown table matching
the extract-action-items command. Status is binary now —
"abgeschlossen" only when the conversation explicitly confirms it,
otherwise "offen". Deadline cells are left blank unless a concrete date
appears in the text, so the model can't fabricate due dates.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
An ASCII " inside the prompt literal terminated the string mid-line —
esbuild then choked on the trailing tokens. Use „…“ (typographic) so
the JS string stays one piece.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The Action Items section in the email summary sometimes omitted whether
an item was open, in progress, or done — leaving the reader to guess.
Force a leading [ ] / [x] / [~] marker on every entry, define how to
derive the status from the conversation, and lock down the per-entry
format so verantwortlich + deadline land in predictable slots.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drop the summaryModel preference (and the awkward textfield holding a
raw model ID nobody could discover without poking the SDK types). Each
AI view now controls its model dropdown, loads the shared
velum.ai.last-model on mount, and writes it back on submit — so picking
Claude 4.7 Opus in the summarize command becomes the prefilled default
in briefing, action-items, structured-data, and reply next time around.
Also drops 'model' from ReplyDefaults; the shared key supersedes it.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@raycast/api ships only types, no runtime JS. AI.Model is injected by
Raycast at runtime and Object.entries() returned an unpredictable
(and incomplete) subset — so half the current models were missing
from the in-view dropdown.
Replace the dynamic derivation with an explicit curated list covering
all 55+ non-deprecated entries from the SDK type defs, ordered by
provider with the strongest models first. Update README to point at
src/ai.ts as the place to keep this in sync with future SDK bumps.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Generate MODEL_OPTIONS at runtime from AI.Model (dedupe by value, drop
@deprecated aliases), so the AI-view dropdowns show every model the
installed @raycast/api ships — no more hand-maintained six-entry list.
Switch the summaryModel preference from a static dropdown to a textfield
holding a model ID. The discoverable picker lives in the AI views (now
fully dynamic), and the preference just stores the chosen default.
Drop duplicate MODEL_OPTIONS / CREATIVITY_OPTIONS constants from
summarize-email.tsx and reply-email.tsx; both pull from ./ai now like
the briefing and extract views already do.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Clarify in the preferences list that summaryModel acts as a default
overridable per AI view, and that userFullName is overridable in the
reply-email form. Also lock closeAfterAction as a required preference.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Cover the AI workflows (summarize / reply / briefing / action-items /
structured-data), the symmetrical depseudonymize commands, all
preferences including the new close-after-action checkbox, and the
Raycast 2.0 Beta workarounds the codebase relies on.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Pseudonymize-and-AI workflow for handling PII-sensitive text via the
Velum API and Raycast AI. Commands cover end-to-end email summary and
reply, briefing/action-items/structured-data extraction, manual
pseudonymize/depseudonymize on selection or clipboard, and session
management. Includes Raycast 2.0 Beta workarounds for selection capture
and rich-text clipboard.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>