Commit Graph

1402 Commits

Author SHA1 Message Date
Matthew Meszaros 6b05ca8e48 feat: renumber the sequence AI step migration from 000067 to 000068 after merging main, whose email-auth-state migration takes the 000067 slot in the renumbered sequence 2026-07-17 18:29:41 +02:00
Matthew Meszaros 273dd7ce33 feat: merge main (deliverability auth-state sweep, watch-band cold throttle, research roadmap) plus the 000067 email-auth-state migration renumber into the campaign AI step branch 2026-07-17 18:29:06 +02:00
Matthew Meszaros ad794bb184 feat: document the AI step and AI branching — sequences guide (AI steps, AI-picked tag choices, context controls, AI-label paths with inline label creation), automations guides (Ask AI branch, per-label classify routing), and the AI credits cost table entries for campaign AI steps and Ask AI branches 2026-07-17 16:26:58 +00:00
Matthew Meszaros 2945974ca7 feat: build the campaign AI step editor and canvas routing — instruction with contact variables, label/output-field lists, an AI action palette reusing the extracted ActionConfigFields with per-action when-hints and AI-picked tag/label choice sets with max-pick caps, what-AI-can-see context toggles, and AI-label connection paths with inline new-label creation that writes the label back to the step 2026-07-17 16:26:50 +00:00
Matthew Meszaros fd2994bdd8 feat: build the automations builder UI for AI branching — an Ask AI (yes/no) condition field with prompt textarea, event-variable chips and credit note, per-label connection routing on AI classify nodes via a node-editor "Route connections by label" section with purple label edges, and stale label-edge healing on save 2026-07-17 16:26:42 +00:00
Matthew Meszaros b564b227c0 feat: add automations Ask AI branch condition and ai_classify per-label edges — a prompt-driven yes/no condition evaluated via the metered provider (fail-safe to the no path, run-history errors, dry-run charged without auto-pause), label:<x> edges validated against the classify node's label set and followed only on the matching verdict, and no credit minting on local-provider refunds 2026-07-17 16:26:30 +00:00
Matthew Meszaros d18c5ebe4a feat: execute campaign AI steps in the scheduler path — one metered completion per contact (SetAI-wired provider + credits with per-step idempotency and refund-on-failure) that labels progress, fills contact custom fields which feed the chosen actions' templates, runs AI-picked pre-configured actions with per-decision campaign logging and tag/label choice resolution, grounds decisions in campaign history and the newest inbound reply via LatestInboundFromContact, and hands instant chains back to the scheduler at AI nodes 2026-07-17 16:26:23 +00:00
Matthew Meszaros 27381aa127 feat: branch campaign sequences on the AI step verdict — ai_label/"is" conditions validated as a strict pair and evaluated deterministically at schedule time off the stored label, threaded through FindNextRoutedPair, GetContactProgress, and a new RecordAILabel upsert (no model call in the scheduler polling path) 2026-07-17 16:26:14 +00:00
Matthew Meszaros 1bf517678a feat: add the campaign sequence AI step data layer — "ai" action config with instruction, label set, output fields, AI-decided action palette (tag/label choice sets, when-hints) and context opt-outs, write-time validation caps, and migration 000067 adding campaign_contact_progress.ai_label 2026-07-17 16:26:08 +00:00
Matthew Meszaros f2a56448fd feat: renumber the email auth state migration from 000051 to 000067 to resolve the duplicate-version collision with 000051_referrals that broke cmd/migrate after merging the deliverability auth-sweep into the ai-platform migration range 2026-07-17 18:18:29 +02:00
Matthew Meszaros cd5e1e9cf7 Merge pull request #72 from warmbly/research/warmup-abuse-cold-effectiveness
feat: deliverability research + observe-only SPF/DKIM/DMARC auth state and watch-band cold throttle
2026-07-17 05:29:58 +02:00
Matthew Meszaros 3ea2831040 feat: annotate the research roadmap with the observe-only auth-state and watch-band cold-throttle work already shipped on this branch 2026-07-17 03:24:18 +00:00
Matthew Meszaros 8af92417bd feat: add authDomainOf unit test covering casing, whitespace, subdomains, and malformed addresses for the auth-check sweep domain extraction 2026-07-17 03:23:46 +00:00
Matthew Meszaros 7176bbce3c feat: add dnsauth unit tests covering Result.State() classification (unknown on empty/transient-error, passing on SPF+DMARC, DKIM advisory) and DMARC policy parsing 2026-07-17 03:22:48 +00:00
Matthew Meszaros e5a6643e2f feat: apply the warmup watch-band volume multiplier (0.7x) to cold campaign sends via the shared adjustmentFor helper so a watch-state mailbox slows cold volume before it hard-quarantines 2026-07-17 03:21:29 +00:00
Matthew Meszaros c96dc0b47a Merge pull request #71 from warmbly/mobile-half-frame
feat: iOS app showcase on the homepage — half-cut iPhone with 1:1 SwiftUI screens, story switcher, and frosted notifications
2026-07-16 18:44:20 +02:00
Matthew Meszaros 3b3fc0fe62 feat: show the iOS app showcase on the homepage, slotted between the integrations feature section and the automations centerpiece so the sky band breaks up two light sections 2026-07-16 18:43:11 +02:00
Matthew Meszaros c68ee02a20 feat: drive the mobile showcase — scale-to-fit phone stage capped at real-device size, story segments that fill and auto-advance the screens with tap-to-jump, cycling push notifications with long quiet gaps, and an IntersectionObserver lifecycle that pauses everything off-screen 2026-07-16 18:43:02 +02:00
Matthew Meszaros 28830a2718 feat: style the mobile showcase motion — screen slide transitions, status-bar glyph cross-fade, notification drop-in under the Dynamic Island, health-ring and chart draw-in states, phone entrance reveal, and prefers-reduced-motion fallbacks 2026-07-16 18:42:51 +02:00
Matthew Meszaros cc1a35e835 feat: add the MobileAppShowcase section markup — sky band with a story-bar switcher and a bottom-cut iPhone whose Home/Inbox/Campaigns screens recreate the SwiftUI app 1:1 on a 393pt canvas (AirSkyWash hero, gradient-stroke stat chips, health rings, unibox and campaign rows, fixed status bar, frosted notification with the real app icon) 2026-07-16 18:42:37 +02:00
Matthew Meszaros 69c634a68c feat: ship the real Warmbly iOS app icon (AppIcon-Light downscaled to a 10KB 128px png) as site/public/brand/app-icon.png for the mobile showcase notification banner 2026-07-16 18:42:27 +02:00
Matthew Meszaros 5b7d29c766 Merge pull request #70 from warmbly/domain-inbox-placement
feat: deliverability score + per-provider/per-domain inbox placement on the dashboard
2026-07-16 18:02:02 +02:00
Matthew Meszaros 1e1e357c06 feat: add a 0-100 deliverability score plus per-provider seed placement and per-domain warmup placement breakdowns to GET /analytics/deliverability, surface them on a customizable deliverability dashboard (toggleable sections + persisted view), and document the new fields in the guides and API reference 2026-07-16 17:55:34 +02:00
Matthew Meszaros 26b0c47148 Merge pull request #69 from warmbly/dev-quick-start 2026-07-16 09:54:39 +02:00
Matthew Meszaros fe6d3769cc feat: document make dev at the top of the AGENTS.md local development targets (readiness waits, seeding, seeded login, Ctrl-C leaves infra up) 2026-07-16 09:51:32 +02:00
Matthew Meszaros 968e43cf2d feat: collapse the sandbox quick start from six terminals to four by starting the core stack with make dev instead of infra+run+web 2026-07-16 09:51:32 +02:00
Matthew Meszaros f7ae908439 feat: rework the local development docs around make dev - new One command section with SEED/AI_PROVIDER variants, Rust/Elixir moved to optional prerequisites, and the stale manual-env-exports-plus-air native section rewritten around the pre-wired make targets 2026-07-16 09:51:32 +02:00
Matthew Meszaros c8126d945d feat: lead the README quick start with make dev - one command from clone to a seeded running stack with the dev@warmbly.com login, keeping the infra/run/web split and the all-docker make up as noted alternatives 2026-07-16 09:51:32 +02:00
Matthew Meszaros fa3672464a feat: add one-command make dev target - brings up docker infra and polls real readiness (pg_isready plus kafka/schema-registry/localstack init one-shot exit codes, failing loudly with a make logs hint), applies migrations, loads seed fixtures (SEED=false to skip), installs web deps on first run, then runs backend + consumer + both shared workers + dashboard in one terminal with Ctrl-C teardown 2026-07-16 09:51:20 +02:00
Matthew Meszaros b40148c482 Merge pull request #68 from warmbly/ai-platform 2026-07-16 08:58:47 +02:00
Matthew Meszaros d0e8bc1c97 feat: add one-command MCP OAuth connect on api.warmbly.com/v1/mcp — RFC 7591 dynamic client registration for public PKCE clients (dcr.go), RFC 9728 protected-resource metadata + WWW-Authenticate challenge via MCPAuthMiddleware, /v1/mcp now accepts an API key or OAuth token, public-client auth with no secret and mandatory PKCE reusing the existing OAuth 2.1 server (nullable-org clients, migration 000066), executable-redirect-scheme hardening on the open register endpoint, plus mcp/oauth/authentication/endpoints docs 2026-07-16 08:57:19 +02:00
Matthew Meszaros 30e8d3c13a feat: restyle the docs site without decorative sidebar icons (frontmatter icons dropped, lucide source plugin disabled, AGENTS.md conventions updated), add LangTab language-logo code tabs, and document the new agent tools plus panel resize/placement/shortcuts in the assistant guide and MCP reference 2026-07-16 07:50:24 +02:00
Matthew Meszaros e4a391c8a4 feat: make the assistant panel fully placeable: drag the inner edge to resize (360-720px, persisted), dock to the left or right screen edge from the header (persisted, dock bar follows), and panel-scoped shortcuts (Cmd/Ctrl+]/[ switch tabs, Alt+N new chat, Alt+W close tab, Alt+M minimize) listed in the shortcuts dialog 2026-07-16 07:50:24 +02:00
Matthew Meszaros fabb1d2a42 feat: broaden the agent tool registry: list_campaign_leads (derived lead statuses + totals, the correct source for cold-lead/follow-up questions), set_campaign_status (approval-gated start/stop), get_dashboard_analytics, list_mailboxes (health + warmup), list_pipelines, list_deals, add_contact_note, and a list_threads description that steers the model to list_campaign_leads and to retry unfiltered before concluding the inbox is empty 2026-07-16 07:50:24 +02:00
Matthew Meszaros 73c80530c3 feat: adapt the OpenAI-compatible provider to the gpt-5.x/o-series request shape at runtime: a 400 naming max_tokens or temperature flips a sticky per-provider flag (max_completion_tokens / omit temperature) and retries, so newer OpenAI models work while Ollama/Groq/OpenRouter keep the legacy params 2026-07-16 07:25:08 +02:00
Matthew Meszaros 0b073bbe8a feat: redraw AgentMark as the recognizable AI glyph (large spark + small companion spark, filled) and bump the header assistant icon to w-4 so it reads clearly as the AI agent 2026-07-16 07:18:56 +02:00
Matthew Meszaros fd0be6e5ff feat: log the real provider error (org, session, provider, model) and transcript-persist failures server-side when an agent run fails, instead of swallowing them behind the generic provider_error SSE message 2026-07-16 07:18:56 +02:00
Matthew Meszaros 602f0d2d0c feat: animate the notifications dropdown open/close with the house framer-motion pattern (AnimatePresence fade + 4px slide, 120ms) instead of popping in instantly 2026-07-16 07:05:06 +02:00
Matthew Meszaros 4830fb9631 feat: drop the black tile behind the assistant logomark; the AgentMark spark now renders bare in sky-600 in the panel header, empty state, and minimized dock 2026-07-16 07:02:38 +02:00
Matthew Meszaros 619b63715d feat: force the dashboard light-only (theme resolver and ThemeProvider never apply the .dark root class) and drop the dark/system theme commands from the command palette, fixing the palette rendering dark inside the all-white app on a dark-mode OS 2026-07-16 07:02:38 +02:00
Matthew Meszaros c2bd4a7301 feat: animate the sidebar READY status with a dedicated status-breathe keyframe (halo swells 0.6x to 1.4x and fades on a 2.2s cycle, honoring prefers-reduced-motion) since animate-pulse on the tiny halo was imperceptible; CONNECTING dot pulses too 2026-07-16 07:02:38 +02:00
Matthew Meszaros b03964ac29 feat: give the sidebar READY status a slow breathing emerald glow instead of a static ring and pulse the CONNECTING dot, so a quiet-but-connected workspace visibly reads as alive 2026-07-16 06:56:13 +02:00
Matthew Meszaros d64c1ddcf7 feat: give the assistant a serious monochrome AgentMark logomark (panel header, empty state, top bar), center single-line composer text against the send button, add minimize-to-dock with a live bottom-right status bar (working/step count, needs approval, response ready), unseen dots on tabs, and a live status badge on the header spark button 2026-07-16 06:52:30 +02:00
Matthew Meszaros e87adf1251 feat: add agentMinimized and per-tab unseen state to agentSlice and make Cmd+I dock-aware (restores a minimized panel instead of closing it) 2026-07-16 06:52:30 +02:00
Matthew Meszaros a913e73837 feat: seed the sandbox org's AI-credit ledger (plan monthly allowance + a 5000-credit purchased top-up with idempotent grant transactions) so the assistant never reports out-of-credits in the demo; re-seeding refills both pools 2026-07-16 06:52:30 +02:00
Matthew Meszaros e64b0b161d feat: sweep stale OPENAI_API_KEY/AI_LOCAL_MODEL mentions out of comments, the provider-not-configured and warmup-admin error strings, env.example, and the deployment guide now that AI_* is the only config surface 2026-07-16 06:39:07 +02:00
Matthew Meszaros 29e3bb3a64 feat: drop the legacy OPENAI_*/ANTHROPIC_API_KEY/AI_LOCAL_MODEL env fallbacks (no prod deployments exist): AI_PROVIDER/AI_API_KEY/AI_MODEL/AI_BASE_URL/AI_FREE are the only AI vars, empty provider means openai, the anthropic preset and writing client key off AI_API_KEY, and the warmup Batch generator runs only when the selected provider is OpenAI 2026-07-16 06:39:06 +02:00
Matthew Meszaros d0e8daf763 feat: fix agent panel interaction bugs: stick-to-bottom scrolling with a Latest pill, per-tab drafts, IME-safe Enter, double-send guard, send lock during history hydration, inert+Escape when closed, autoresizing composer, editor-style tabs (middle-click close, active scroll-into-view, tablist a11y), focus management, memoized turns, centered transcript in expanded mode 2026-07-16 06:28:29 +02:00
Matthew Meszaros de3aed0a9b feat: keep the unsent composer draft per agent tab in agentSlice and respawn a fresh tab when the last one closes so the panel is never blank 2026-07-16 06:28:29 +02:00
Matthew Meszaros d8475a1896 feat: render assistant replies as markdown with a dependency-free React renderer (bold, lists, inline code, safe links, fenced code) and prompt the agent to emit that simple subset 2026-07-16 06:28:29 +02:00