diff --git a/.changeset/account-lifecycle-stage.md b/.changeset/account-lifecycle-stage.md deleted file mode 100644 index 1a3d295713..0000000000 --- a/.changeset/account-lifecycle-stage.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Internal tooling: Add unified account lifecycle stage to admin tools diff --git a/.changeset/activity-user-names.md b/.changeset/activity-user-names.md deleted file mode 100644 index 3b1026e46e..0000000000 --- a/.changeset/activity-user-names.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Display user names instead of Slack IDs in proactive outreach history diff --git a/.changeset/add-update-meeting-tool.md b/.changeset/add-update-meeting-tool.md new file mode 100644 index 0000000000..9710cb748f --- /dev/null +++ b/.changeset/add-update-meeting-tool.md @@ -0,0 +1,13 @@ +--- +--- + +feat: Add update_meeting tool to Addie + +Added a new tool that allows updating existing meetings through conversation: +- Change title, description, or agenda +- Reschedule to a new time (properly handles timezone conversion) +- Update duration + +Updates are synchronized to Zoom and Google Calendar when those integrations +are configured. This enables fixing meeting times or details without having +to cancel and recreate. diff --git a/.changeset/addie-bot-token-fix.md b/.changeset/addie-bot-token-fix.md deleted file mode 100644 index b527df12db..0000000000 --- a/.changeset/addie-bot-token-fix.md +++ /dev/null @@ -1,8 +0,0 @@ ---- ---- - -Server-only: Fix Addie using wrong bot token to send messages. - -Addie was using SLACK_BOT_TOKEN (AAO bot) to send messages, which -failed with channel_not_found because Addie's DM channels are only -accessible via ADDIE_BOT_TOKEN. diff --git a/.changeset/addie-dm-no-threading.md b/.changeset/addie-dm-no-threading.md deleted file mode 100644 index 7c2dd05f25..0000000000 --- a/.changeset/addie-dm-no-threading.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix DM response posting as thread instead of regular message diff --git a/.changeset/addie-first-dm-fix.md b/.changeset/addie-first-dm-fix.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/addie-first-dm-fix.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/addie-home-nav-fix.md b/.changeset/addie-home-nav-fix.md deleted file mode 100644 index c9428e1ddd..0000000000 --- a/.changeset/addie-home-nav-fix.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix Addie chat home button navigation - clicking Home now properly shows the dashboard diff --git a/.changeset/addie-knowledge-improvements.md b/.changeset/addie-knowledge-improvements.md deleted file mode 100644 index 75e77a5735..0000000000 --- a/.changeset/addie-knowledge-improvements.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Addie admin improvements: Unified Knowledge Base tab, Slack message indexing, and curated content system. Server-only changes, no protocol impact. diff --git a/.changeset/addie-newline-fix.md b/.changeset/addie-newline-fix.md deleted file mode 100644 index 1658dde4dd..0000000000 --- a/.changeset/addie-newline-fix.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix missing newlines between context sections in Addie message formatting diff --git a/.changeset/addie-news-feeds.md b/.changeset/addie-news-feeds.md deleted file mode 100644 index babf21bb3d..0000000000 --- a/.changeset/addie-news-feeds.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add get_recent_news tool to Addie for browsing curated industry feeds diff --git a/.changeset/addie-role-suggestions.md b/.changeset/addie-role-suggestions.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/addie-role-suggestions.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/addie-slack-endpoint.md b/.changeset/addie-slack-endpoint.md deleted file mode 100644 index ce0693d8b8..0000000000 --- a/.changeset/addie-slack-endpoint.md +++ /dev/null @@ -1,18 +0,0 @@ ---- ---- - -Server-only changes: Refactor Slack endpoints with consistent URL structure. - -**BREAKING CHANGE:** Slack endpoint URLs changed: -- AAO bot: `/api/slack/events` → `/api/slack/aaobot/events` -- AAO bot: `/api/slack/commands` → `/api/slack/aaobot/commands` -- Addie: Added `/api/slack/addie/events` - -Update Slack app Event Subscription URLs in production. - -Also: -- Extract Slack middleware to `server/src/middleware/slack.ts` -- Extract public Slack routes to `server/src/routes/slack.ts` -- Extract admin Slack routes to `server/src/routes/admin/slack.ts` -- Extract admin Email routes to `server/src/routes/admin/email.ts` -- Create shared unified users cache in `server/src/cache/unified-users.ts` diff --git a/.changeset/addie-thread-reply-fix.md b/.changeset/addie-thread-reply-fix.md deleted file mode 100644 index 88e73d82fb..0000000000 --- a/.changeset/addie-thread-reply-fix.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix Addie mentions to reply in threads with full context diff --git a/.changeset/addie-thread-sharing.md b/.changeset/addie-thread-sharing.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/addie-thread-sharing.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/addie-user-simulation.md b/.changeset/addie-user-simulation.md deleted file mode 100644 index 2e2228725e..0000000000 --- a/.changeset/addie-user-simulation.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add admin user simulation support for Addie web chat debugging (server-side implementation only, no protocol changes). diff --git a/.changeset/afraid-ends-mate.md b/.changeset/afraid-ends-mate.md deleted file mode 100644 index 6dcf0b4089..0000000000 --- a/.changeset/afraid-ends-mate.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix missing column references in admin stats queries (engagement_reasons, next_step, subscription_status) diff --git a/.changeset/afraid-pigs-sit.md b/.changeset/afraid-pigs-sit.md deleted file mode 100644 index c4d6ca9058..0000000000 --- a/.changeset/afraid-pigs-sit.md +++ /dev/null @@ -1,8 +0,0 @@ ---- ---- - -Add member welcome and user signup email notifications via Resend. - -- New member thank you email sent after Stripe subscription created -- User signup email with conditional content based on org subscription status -- Updated naming from "Alliance for Agentic Advertising" to "AgenticAdvertising.org" diff --git a/.changeset/afraid-hairs-add.md b/.changeset/afraid-times-cover.md similarity index 100% rename from .changeset/afraid-hairs-add.md rename to .changeset/afraid-times-cover.md diff --git a/.changeset/allow-extra-fields.md b/.changeset/allow-extra-fields.md deleted file mode 100644 index 85eea668ec..0000000000 --- a/.changeset/allow-extra-fields.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"adcontextprotocol": patch ---- - -Allow additional properties in all JSON schemas for forward compatibility - -Changes all schemas from `"additionalProperties": false` to `"additionalProperties": true`. This enables clients running older schema versions to accept responses from servers with newer schemas without breaking validation - a standard practice for protocol evolution in distributed systems. diff --git a/.changeset/anthropic-timeout.md b/.changeset/anthropic-timeout.md deleted file mode 100644 index 18d0d43420..0000000000 --- a/.changeset/anthropic-timeout.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add timeout to Anthropic API calls in webhook handler (no protocol changes) diff --git a/.changeset/assets-discovery.md b/.changeset/assets-discovery.md new file mode 100644 index 0000000000..43d94fd6e9 --- /dev/null +++ b/.changeset/assets-discovery.md @@ -0,0 +1,11 @@ +--- +"adcontextprotocol": minor +--- + +Add unified `assets` field to format schema for better asset discovery + +- Add new `assets` array to format schema with `required` boolean per asset +- Deprecate `assets_required` (still supported for backward compatibility) +- Enables full asset discovery for buyers and AI agents to see all supported assets +- Optional assets like impression trackers can now be discovered and used + diff --git a/.changeset/big-lies-end.md b/.changeset/big-lies-end.md deleted file mode 100644 index b916c68583..0000000000 --- a/.changeset/big-lies-end.md +++ /dev/null @@ -1,6 +0,0 @@ ---- ---- - -Fix duplicate migration version 039 and add CI check. - -This is an internal fix for database migration numbering and does not affect the protocol specification or public API. diff --git a/.changeset/block-gmail-corp-domain.md b/.changeset/block-gmail-corp-domain.md deleted file mode 100644 index aefb92e1e1..0000000000 --- a/.changeset/block-gmail-corp-domain.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix domain health page to exclude free email providers (gmail.com, etc.) from "Related Organizations" section diff --git a/.changeset/brave-forks-crash.md b/.changeset/brave-forks-crash.md deleted file mode 100644 index 186b5d34c5..0000000000 --- a/.changeset/brave-forks-crash.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix Addie's response to empty mentions - when mentioned with just "@Addie" (no question), she no longer incorrectly welcomes the mentioner as if they were new to the channel. diff --git a/.changeset/bright-kids-say.md b/.changeset/bright-kids-say.md deleted file mode 100644 index d8ebeebfc6..0000000000 --- a/.changeset/bright-kids-say.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -fix: correct GitHub issue drafting repo and add confidentiality guidelines for Addie diff --git a/.changeset/bumpy-carrots-change.md b/.changeset/bumpy-carrots-change.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/bumpy-carrots-change.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/bumpy-cycles-hear.md b/.changeset/bumpy-cycles-hear.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/bumpy-cycles-hear.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/bumpy-kings-follow.md b/.changeset/bumpy-kings-follow.md deleted file mode 100644 index 2a9f4be3f0..0000000000 --- a/.changeset/bumpy-kings-follow.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix Docker image to include docs directory and git for Addie knowledge search and external repo indexing. diff --git a/.changeset/busy-swans-judge.md b/.changeset/busy-swans-judge.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/busy-swans-judge.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/calm-lamps-doubt.md b/.changeset/calm-lamps-doubt.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/calm-lamps-doubt.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/chatty-tools-lead.md b/.changeset/chatty-tools-lead.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/chatty-tools-lead.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/chubby-baboons-kick.md b/.changeset/chubby-baboons-kick.md deleted file mode 100644 index 4d017f0a0e..0000000000 --- a/.changeset/chubby-baboons-kick.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix invoice modal positioning: modals now appear centered on screen instead of at page bottom. diff --git a/.changeset/chubby-books-film.md b/.changeset/chubby-books-film.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/chubby-books-film.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/chubby-pumas-smoke.md b/.changeset/chubby-pumas-smoke.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/chubby-pumas-smoke.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/clean-ghosts-beam.md b/.changeset/clean-ghosts-beam.md deleted file mode 100644 index 87a9ee43f8..0000000000 --- a/.changeset/clean-ghosts-beam.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Documentation cleanup - streamlined CLAUDE.md to workspace-specific guidance only. No protocol changes. diff --git a/.changeset/clean-groups-press.md b/.changeset/clean-groups-press.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/clean-groups-press.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/clean-jokes-invent.md b/.changeset/clean-jokes-invent.md deleted file mode 100644 index 3d7d2144d3..0000000000 --- a/.changeset/clean-jokes-invent.md +++ /dev/null @@ -1,10 +0,0 @@ ---- ---- - -Add multi-select company types with "Data & Measurement" and "AI & Tech Platforms" categories (registry only) - -- Organizations can now have multiple company types (e.g., Microsoft can be both "brand" and "ai") -- Added new company type categories: "data" (Data & Measurement) and "ai" (AI & Tech Platforms) -- Renamed "AI Infrastructure" to "AI & Tech Platforms" to include agent builders -- Created centralized company-types config for frontend and backend consistency -- Migration preserves existing single-value data while enabling multi-select diff --git a/.changeset/clean-pumas-open.md b/.changeset/clean-pumas-open.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/clean-pumas-open.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/clear-colts-wink.md b/.changeset/clear-colts-wink.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/clear-colts-wink.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/clever-pets-brush.md b/.changeset/clever-pets-brush.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/clever-pets-brush.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/clickable-user-name.md b/.changeset/clickable-user-name.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/clickable-user-name.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/cold-shrimps-taste.md b/.changeset/cold-shrimps-taste.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/cold-shrimps-taste.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/common-cougars-unite.md b/.changeset/common-cougars-unite.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/common-cougars-unite.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/common-geckos-wash.md b/.changeset/common-geckos-wash.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/common-geckos-wash.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/cool-memes-wear.md b/.changeset/cool-memes-wear.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/cool-memes-wear.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/crisp-moments-wear.md b/.changeset/crisp-moments-wear.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/crisp-moments-wear.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/crisp-pets-tease.md b/.changeset/crisp-pets-tease.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/crisp-pets-tease.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/crisp-readers-rule.md b/.changeset/crisp-readers-rule.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/crisp-readers-rule.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/cuddly-pets-sort.md b/.changeset/cuddly-pets-sort.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/cuddly-pets-sort.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/cuddly-windows-accept.md b/.changeset/cuddly-windows-accept.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/cuddly-windows-accept.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/curvy-kiwis-clap.md b/.changeset/curvy-kiwis-clap.md new file mode 100644 index 0000000000..747a702cf8 --- /dev/null +++ b/.changeset/curvy-kiwis-clap.md @@ -0,0 +1,8 @@ +--- +--- + +fix: ensure tool documentation is always included in Addie's system prompt + +Tool documentation was only present in a hardcoded fallback prompt that wasn't used +when database rules existed. Now tool reference is always appended to the system prompt, +ensuring Addie knows about meeting scheduling and other tools regardless of DB state. diff --git a/.changeset/curvy-rice-bake.md b/.changeset/curvy-rice-bake.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/curvy-rice-bake.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/cute-taxes-boil.md b/.changeset/cute-taxes-boil.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/cute-taxes-boil.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/cyan-cooks-hang.md b/.changeset/cyan-cooks-hang.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/cyan-cooks-hang.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/dashboard-user-menu.md b/.changeset/dashboard-user-menu.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/dashboard-user-menu.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/david-event-mgmt-fix.md b/.changeset/david-event-mgmt-fix.md deleted file mode 100644 index b0344a2e57..0000000000 --- a/.changeset/david-event-mgmt-fix.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix chapter leader event management permission checks for users added via Slack diff --git a/.changeset/all-dolls-beam.md b/.changeset/dirty-hoops-eat.md similarity index 100% rename from .changeset/all-dolls-beam.md rename to .changeset/dirty-hoops-eat.md diff --git a/.changeset/dirty-kiwis-cheer.md b/.changeset/dirty-kiwis-cheer.md deleted file mode 100644 index 172b54291e..0000000000 --- a/.changeset/dirty-kiwis-cheer.md +++ /dev/null @@ -1,46 +0,0 @@ ---- ---- - -Improve Addie router intelligence and search observability - -**Router improvements:** -- Add `usage_hints` field to AddieTool interface for router-specific guidance -- Router now builds tool descriptions from tool definitions (no duplication) -- Distinguish "how does X work?" (search_docs) from "validate my X" (validate_adagents) -- Separate expertise areas for validation vs learning questions - -**Docs indexing:** -- Extract markdown headings as separate searchable artifacts -- Generate anchor links for deep linking to specific sections -- Build headings index alongside docs index (1659 headings from 100 docs) - -**Search tracking:** -- Log all search queries for pattern analysis -- Track results count, latency, and tool used -- Enable content gap detection via zero-result query analysis - -**Prompt improvements:** -- Strengthen GitHub issue drafting instructions - users cannot see tool outputs -- Add conversation context maintenance guidance to prevent entity substitution - -**Bug fixes:** -- Fix DM Assistant thread context loss - now fetches conversation history from database -- Previous messages are passed to Claude so it maintains context across turns - -**Member insights integration:** -- Router now uses member insights (role, interests, pain points) for smarter tool selection -- Fetch member context and insights in parallel for better performance -- Add in-memory cache with 30-minute TTL (long since we invalidate on writes) -- Prefetch insights when user opens Addie (before first message) -- Auto-invalidate cache when new insights are extracted or added via admin API - -**Performance optimizations:** -- Add 30-minute cache for admin status checks (isSlackUserAdmin) -- Admin status rarely changes and was being checked multiple times per conversation -- Add 30-minute cache for active insight goals (only 2 possible variants: mapped/unmapped) -- Auto-invalidate goals cache on goal create/update/delete via admin API -- Add 30-minute cache for Slack channel info (names/purposes rarely change) - -**Previous work (already in PR):** -- Log router decisions to unified thread messages -- Add config versioning for feedback analysis by configuration diff --git a/.changeset/dirty-meteors-sell.md b/.changeset/dirty-meteors-sell.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/dirty-meteors-sell.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/dirty-spies-burn.md b/.changeset/dirty-spies-burn.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/dirty-spies-burn.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/docs-versioning.md b/.changeset/docs-versioning.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/docs-versioning.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/dry-singers-pull.md b/.changeset/dry-singers-pull.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/dry-singers-pull.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/dull-dogs-live.md b/.changeset/dull-dogs-live.md deleted file mode 100644 index 724918eea8..0000000000 --- a/.changeset/dull-dogs-live.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add organization_domains table and WorkOS webhook handlers for domain sync diff --git a/.changeset/dull-rooms-battle.md b/.changeset/dull-rooms-battle.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/dull-rooms-battle.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/dull-singers-mate.md b/.changeset/dull-singers-mate.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/dull-singers-mate.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/eager-eels-sneeze.md b/.changeset/eager-eels-sneeze.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/eager-eels-sneeze.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/eager-humans-change.md b/.changeset/eager-humans-change.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/eager-humans-change.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/easy-lizards-hug.md b/.changeset/easy-lizards-hug.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/easy-lizards-hug.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/eighty-onions-leave.md b/.changeset/eighty-onions-leave.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/eighty-onions-leave.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/eighty-sloths-feel.md b/.changeset/eighty-sloths-feel.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/eighty-sloths-feel.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/eleven-rabbits-enter.md b/.changeset/eleven-rabbits-enter.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/eleven-rabbits-enter.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/eleven-wolves-return.md b/.changeset/eleven-wolves-return.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/eleven-wolves-return.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/email-tracking-logging.md b/.changeset/email-tracking-logging.md deleted file mode 100644 index 431f9dde3d..0000000000 --- a/.changeset/email-tracking-logging.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add diagnostic logging to email webhook handler (no protocol changes) diff --git a/.changeset/enable-addie-public.md b/.changeset/enable-addie-public.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/enable-addie-public.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/engagement-scoring-job.md b/.changeset/engagement-scoring-job.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/engagement-scoring-job.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/error-details-type.md b/.changeset/error-details-type.md deleted file mode 100644 index c9ee80212e..0000000000 --- a/.changeset/error-details-type.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"adcontextprotocol": patch ---- - -Add explicit type definition to error.json details property - -The `details` property in core/error.json now explicitly declares `"type": "object"` and `"additionalProperties": true`, consistent with other error details definitions in the codebase. This addresses issue #343 where the data type was unspecified. diff --git a/.changeset/event-attendance-tracking.md b/.changeset/event-attendance-tracking.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/event-attendance-tracking.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/event-visibility-fix.md b/.changeset/event-visibility-fix.md deleted file mode 100644 index 17c91e4e55..0000000000 --- a/.changeset/event-visibility-fix.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Internal: Fix event visibility and registration matching (no protocol changes) diff --git a/.changeset/every-falcons-peel.md b/.changeset/every-falcons-peel.md deleted file mode 100644 index a0791a3b6b..0000000000 --- a/.changeset/every-falcons-peel.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Update Addie's core thesis to incorporate the allocation vs efficiency framing. Advertisers are stuck at 3-5 platforms due to execution costs - the opportunity is scaling to 20+ partners, not optimizing the existing 3-5. Walled gardens benefit from AdCP because it lets them capture new allocation budgets without commoditizing their differentiation. diff --git a/.changeset/every-moose-kick.md b/.changeset/every-moose-kick.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/every-moose-kick.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fair-plants-reply.md b/.changeset/fair-plants-reply.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/fair-plants-reply.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fair-turkeys-sell.md b/.changeset/fair-turkeys-sell.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/fair-turkeys-sell.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/famous-rockets-report.md b/.changeset/famous-rockets-report.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/famous-rockets-report.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/famous-sides-hide.md b/.changeset/famous-sides-hide.md deleted file mode 100644 index 25bd707397..0000000000 --- a/.changeset/famous-sides-hide.md +++ /dev/null @@ -1,7 +0,0 @@ ---- ---- - -feat: Add membership metrics to admin analytics dashboard - -Adds new admin analytics endpoints and UI tables showing membership counts -broken down by company type and revenue tier. Includes CSV export functionality. diff --git a/.changeset/fast-hounds-lick.md b/.changeset/fast-hounds-lick.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/fast-hounds-lick.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fast-sloths-press.md b/.changeset/fast-sloths-press.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/fast-sloths-press.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/all-llamas-sin.md b/.changeset/few-dots-build.md similarity index 100% rename from .changeset/all-llamas-sin.md rename to .changeset/few-dots-build.md diff --git a/.changeset/fiery-actors-show.md b/.changeset/fiery-actors-show.md deleted file mode 100644 index 450cd1d6c0..0000000000 --- a/.changeset/fiery-actors-show.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add unified user counts (members + Slack-only) to accounts list and detail pages. Add Addie tools for listing organizations by user count and listing Slack users by organization. diff --git a/.changeset/fiery-days-roll.md b/.changeset/fiery-days-roll.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/fiery-days-roll.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fiery-maps-tan.md b/.changeset/fiery-maps-tan.md deleted file mode 100644 index 79826f3d12..0000000000 --- a/.changeset/fiery-maps-tan.md +++ /dev/null @@ -1,12 +0,0 @@ ---- ---- - -Add call_adcp_agent tool and Claude Skills for full AdCP protocol access. - -This enables clients to execute the full AdCP spec (not just testing API) via: -- `call_adcp_agent` tool: Low-level proxy to any AdCP-compliant sales agent -- Claude Skills: Protocol knowledge for media-buy, signals, and creative - -Skills teach Claude the protocol schemas and workflows; the tool routes to -whatever agent the user specifies. Auth tokens are looked up from saved -agent context or can be provided directly. diff --git a/.changeset/fiery-sides-allow.md b/.changeset/fiery-sides-allow.md deleted file mode 100644 index c4472c0b66..0000000000 --- a/.changeset/fiery-sides-allow.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Admin AI analysis UX improvements - no protocol changes diff --git a/.changeset/fifty-bars-pump.md b/.changeset/fifty-bars-pump.md deleted file mode 100644 index d6ac9145fb..0000000000 --- a/.changeset/fifty-bars-pump.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Remove insight_goals table and consolidate goal management into outreach_goals. Admin insight goals CRUD endpoints and UI have been removed. The insight extractor and passive extraction now read from outreach_goals. diff --git a/.changeset/fifty-pandas-sleep.md b/.changeset/fifty-pandas-sleep.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/fifty-pandas-sleep.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fix-addie-github-link.md b/.changeset/fix-addie-github-link.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/fix-addie-github-link.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/fix-admin-checks-mobile-pane.md b/.changeset/fix-admin-checks-mobile-pane.md deleted file mode 100644 index 8c994eaea1..0000000000 --- a/.changeset/fix-admin-checks-mobile-pane.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -No protocol changes - internal admin check consistency fix and mobile CSS improvement. diff --git a/.changeset/fix-admin-member-links.md b/.changeset/fix-admin-member-links.md deleted file mode 100644 index 7a519b2209..0000000000 --- a/.changeset/fix-admin-member-links.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix broken admin organization links and make member names clickable. diff --git a/.changeset/fix-analytics-views.md b/.changeset/fix-analytics-views.md deleted file mode 100644 index e28feb4dae..0000000000 --- a/.changeset/fix-analytics-views.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix analytics dashboard: rename "Revenue by Month" to "Bookings by Month" and fix empty "Revenue by Product" view by querying revenue_events instead of subscription_line_items. diff --git a/.changeset/fix-broken-readme-links.md b/.changeset/fix-broken-readme-links.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/fix-broken-readme-links.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/fix-calendar-timezone.md b/.changeset/fix-calendar-timezone.md new file mode 100644 index 0000000000..c6e2a018a2 --- /dev/null +++ b/.changeset/fix-calendar-timezone.md @@ -0,0 +1,14 @@ +--- +--- + +fix: Parse meeting times in specified timezone correctly + +Fixed timezone handling end-to-end: +- Added parseDateInTimezone() to interpret input times in the target timezone +- When Claude sends "2026-01-15T13:00:00" for "1 PM ET", we now create a Date + representing 18:00 UTC (the correct moment for 1 PM ET) +- Both display in Slack and API calls to Zoom/Calendar now show correct time +- Removed formatDateWithoutZ() workaround since Date objects are now correct + +Before: "1 PM ET" → Date(13:00 UTC) → displayed as "8 AM ET", but Calendar showed 1 PM +After: "1 PM ET" → Date(18:00 UTC) → displayed as "1 PM ET", Calendar shows 1 PM diff --git a/.changeset/fix-company-type-validation.md b/.changeset/fix-company-type-validation.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/fix-company-type-validation.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/fix-daily-digest.md b/.changeset/fix-daily-digest.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/fix-daily-digest.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/fix-domain-health-orgs.md b/.changeset/fix-domain-health-orgs.md deleted file mode 100644 index 233db1edd7..0000000000 --- a/.changeset/fix-domain-health-orgs.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Improve admin domain health page to show existing organizations for unlinked domains instead of only proposing new prospects. diff --git a/.changeset/fix-duplicate-members.md b/.changeset/fix-duplicate-members.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/fix-duplicate-members.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fix-email-preferences-table.md b/.changeset/fix-email-preferences-table.md deleted file mode 100644 index 02940fd408..0000000000 --- a/.changeset/fix-email-preferences-table.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix table name in getMemberCapabilities: email_preferences → user_email_preferences diff --git a/.changeset/fix-feed-email-slugs.md b/.changeset/fix-feed-email-slugs.md deleted file mode 100644 index 21b8491247..0000000000 --- a/.changeset/fix-feed-email-slugs.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix feed email slug lookup - prepend 'feed-' prefix to seeded email slugs to match webhook extraction diff --git a/.changeset/fix-feedback-modal.md b/.changeset/fix-feedback-modal.md deleted file mode 100644 index aa53c2615c..0000000000 --- a/.changeset/fix-feedback-modal.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix feedback modal not displaying saved feedback when viewing threads diff --git a/.changeset/fix-html-entities-news.md b/.changeset/fix-html-entities-news.md deleted file mode 100644 index 745e2fe647..0000000000 --- a/.changeset/fix-html-entities-news.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix HTML entity encoding in news feed API responses. RSS feed titles with entities like `'` are now properly decoded before being returned in API responses. diff --git a/.changeset/fix-industry-alerts-channel-filter.md b/.changeset/fix-industry-alerts-channel-filter.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/fix-industry-alerts-channel-filter.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/fix-industry-alerts-token.md b/.changeset/fix-industry-alerts-token.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/fix-industry-alerts-token.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/fix-interaction-analyzer-column.md b/.changeset/fix-interaction-analyzer-column.md deleted file mode 100644 index faab1dc733..0000000000 --- a/.changeset/fix-interaction-analyzer-column.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix organization_domains column name in interaction-analyzer query diff --git a/.changeset/fix-invoice-products.md b/.changeset/fix-invoice-products.md deleted file mode 100644 index aaa9496d8e..0000000000 --- a/.changeset/fix-invoice-products.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Filter invoice modal dropdown to show only subscription products, excluding legacy one-time invoice products. diff --git a/.changeset/fix-login-display-and-stats.md b/.changeset/fix-login-display-and-stats.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/fix-login-display-and-stats.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/fix-meeting-id-lookup.md b/.changeset/fix-meeting-id-lookup.md new file mode 100644 index 0000000000..40bbb03b93 --- /dev/null +++ b/.changeset/fix-meeting-id-lookup.md @@ -0,0 +1,12 @@ +--- +--- + +fix: Accept both UUID and Zoom meeting IDs in meeting tools + +Updated meeting tools to accept both internal UUIDs and Zoom meeting IDs: +- Show meeting ID in list_upcoming_meetings output +- get_meeting_details, cancel_meeting, rsvp_to_meeting, add_meeting_attendee + now try UUID first, then fall back to Zoom meeting ID lookup + +This fixes the issue where Claude would see Zoom meeting IDs in meeting links +but the tools only accepted internal UUIDs. diff --git a/.changeset/fix-meeting-z-suffix.md b/.changeset/fix-meeting-z-suffix.md new file mode 100644 index 0000000000..f086904417 --- /dev/null +++ b/.changeset/fix-meeting-z-suffix.md @@ -0,0 +1,8 @@ +--- +--- + +fix: Clarify start_time format in meeting scheduling schema + +Updated schema description to explicitly tell Claude NOT to add Z suffix to +start_time. Claude was interpreting "11 AM ET" as "11 AM UTC" with Z suffix, +causing meetings to be rejected as "already passed". diff --git a/.changeset/fix-meetings-section-display.md b/.changeset/fix-meetings-section-display.md new file mode 100644 index 0000000000..68ca5f8610 --- /dev/null +++ b/.changeset/fix-meetings-section-display.md @@ -0,0 +1,11 @@ +--- +--- + +fix: Display meetings section on committee pages and add admin edit + +Fixed a bug where the meetings section wasn't showing on committee detail pages. +The API returns `{ meetings: [...] }` but the code was calling `.filter()` directly +on the response object instead of `response.meetings`. + +Also added edit functionality to the admin meetings page - admins can now click +"Edit" to reschedule or update meeting details (title, description, time). diff --git a/.changeset/addie-email-domain-linking.md b/.changeset/fix-member-metrics.md similarity index 100% rename from .changeset/addie-email-domain-linking.md rename to .changeset/fix-member-metrics.md diff --git a/.changeset/fix-member-name-click.md b/.changeset/fix-member-name-click.md deleted file mode 100644 index 9aa2754cbc..0000000000 --- a/.changeset/fix-member-name-click.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -fix: escape apostrophes in user names for onclick handlers diff --git a/.changeset/fix-migration-151.md b/.changeset/fix-migration-151.md deleted file mode 100644 index 4ec327c8b6..0000000000 --- a/.changeset/fix-migration-151.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"adcontextprotocol": patch ---- - -Fix migration 151 to delete duplicates before updating Slack IDs to WorkOS IDs diff --git a/.changeset/fix-org-memberships-table.md b/.changeset/fix-org-memberships-table.md deleted file mode 100644 index fbe7f3984a..0000000000 --- a/.changeset/fix-org-memberships-table.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix organization member lookup table name in inbound email webhook diff --git a/.changeset/fix-outreach-stats.md b/.changeset/fix-outreach-stats.md deleted file mode 100644 index 8a7bfeefe1..0000000000 --- a/.changeset/fix-outreach-stats.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -fix: align frontend outreach stats field names with backend API response diff --git a/.changeset/fix-package-request-fields.md b/.changeset/fix-package-request-fields.md deleted file mode 100644 index d8b68492b7..0000000000 --- a/.changeset/fix-package-request-fields.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -"adcontextprotocol": patch ---- - -Add missing fields to package request schemas for consistency with core/package.json. - -**Schema Changes:** - -- `media-buy/package-request.json`: Added `impressions` and `paused` fields -- `media-buy/update-media-buy-request.json`: Added `impressions` field to package updates - -**Details:** - -- `impressions`: Impression goal for the package (optional, minimum: 0) -- `paused`: Create package in paused state (optional, default: false) - -These fields were defined in `core/package.json` but missing from the request schemas, making it impossible to set impression goals or initial paused state when creating/updating media buys. - -**Documentation:** - -- Updated `create_media_buy` task reference with new package parameters -- Updated `update_media_buy` task reference with impressions parameter diff --git a/.changeset/fix-pending-articles.md b/.changeset/fix-pending-articles.md deleted file mode 100644 index 122252461e..0000000000 --- a/.changeset/fix-pending-articles.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix industry feeds pending article count mismatch diff --git a/.changeset/fix-perspectives-body.md b/.changeset/fix-perspectives-body.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/fix-perspectives-body.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/fix-perspectives-link.md b/.changeset/fix-perspectives-link.md deleted file mode 100644 index 6c8028d3d0..0000000000 --- a/.changeset/fix-perspectives-link.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix broken working group post links in Slack notifications and frontend diff --git a/.changeset/fix-planner-column-names.md b/.changeset/fix-planner-column-names.md deleted file mode 100644 index 3f9e4cd8d0..0000000000 --- a/.changeset/fix-planner-column-names.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix column name mismatch in getMemberCapabilities query (messages_sent → message_count, date → activity_date) diff --git a/.changeset/fix-resend-inbound-webhook.md b/.changeset/fix-resend-inbound-webhook.md deleted file mode 100644 index 678a402d5e..0000000000 --- a/.changeset/fix-resend-inbound-webhook.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix Resend inbound email webhook timeout by skipping global JSON parser diff --git a/.changeset/fix-slack-auth-security.md b/.changeset/fix-slack-auth-security.md deleted file mode 100644 index dd0727322d..0000000000 --- a/.changeset/fix-slack-auth-security.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Update dependencies to address security vulnerabilities. diff --git a/.changeset/fix-slack-leader-display.md b/.changeset/fix-slack-leader-display.md deleted file mode 100644 index 3620cb18ae..0000000000 --- a/.changeset/fix-slack-leader-display.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -"adcontextprotocol": patch ---- - -fix: display Slack profile name for chapter leaders without WorkOS accounts - -Leaders added via Slack ID that haven't linked their WorkOS account now display -their Slack profile name (real_name or display_name) instead of the raw Slack -user ID (e.g., U09BEKNJ3GB). - -The getLeaders and getLeadersBatch queries now include slack_user_mappings as an -additional name source in the COALESCE chain. diff --git a/.changeset/fix-zoom-meeting-timezone.md b/.changeset/fix-zoom-meeting-timezone.md new file mode 100644 index 0000000000..c3ffd19f75 --- /dev/null +++ b/.changeset/fix-zoom-meeting-timezone.md @@ -0,0 +1,11 @@ +--- +--- + +fix: Strip Z suffix from Zoom meeting start_time + +When creating Zoom meetings, toISOString() was adding a Z suffix which made +Zoom interpret times as UTC instead of the specified timezone. A meeting for +"11 AM ET" was being scheduled for 11:00 UTC = 6:00 AM ET. + +Fixed by stripping the Z suffix so Zoom interprets the time in the timezone +parameter (e.g., America/New_York). diff --git a/.changeset/flat-candies-crash.md b/.changeset/flat-candies-crash.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/flat-candies-crash.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/flat-friends-learn.md b/.changeset/flat-friends-learn.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/flat-friends-learn.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/flat-frogs-go.md b/.changeset/flat-frogs-go.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/flat-frogs-go.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/flat-turkeys-tell.md b/.changeset/flat-turkeys-tell.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/flat-turkeys-tell.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/floppy-apples-live.md b/.changeset/floppy-apples-live.md deleted file mode 100644 index 8134d5058f..0000000000 --- a/.changeset/floppy-apples-live.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Update @adcp/client to 3.5.2 to fix schema validation for empty publisher_domains arrays. diff --git a/.changeset/floppy-crews-greet.md b/.changeset/floppy-crews-greet.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/floppy-crews-greet.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/forty-emus-sniff.md b/.changeset/forty-emus-sniff.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/forty-emus-sniff.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/forty-symbols-kick.md b/.changeset/forty-symbols-kick.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/forty-symbols-kick.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/four-forks-go.md b/.changeset/four-forks-go.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/four-forks-go.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/four-ways-yawn.md b/.changeset/four-ways-yawn.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/four-ways-yawn.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/better-papayas-attack.md b/.changeset/frank-donkeys-dress.md similarity index 100% rename from .changeset/better-papayas-attack.md rename to .changeset/frank-donkeys-dress.md diff --git a/.changeset/frank-pets-tan.md b/.changeset/frank-pets-tan.md deleted file mode 100644 index 7d477a6dad..0000000000 --- a/.changeset/frank-pets-tan.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -No protocol changes - website improvements only. diff --git a/.changeset/free-chicken-write.md b/.changeset/free-chicken-write.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/free-chicken-write.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/free-terms-send.md b/.changeset/free-terms-send.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/free-terms-send.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fresh-crews-wash.md b/.changeset/fresh-crews-wash.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/fresh-crews-wash.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fresh-numbers-hide.md b/.changeset/fresh-numbers-hide.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/fresh-numbers-hide.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fruity-papayas-act.md b/.changeset/fruity-papayas-act.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/fruity-papayas-act.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fruity-states-spend.md b/.changeset/fruity-states-spend.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/fruity-states-spend.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fruity-wasps-hope.md b/.changeset/fruity-wasps-hope.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/fruity-wasps-hope.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/funky-bars-chew.md b/.changeset/funky-bars-chew.md deleted file mode 100644 index 92afc14bf7..0000000000 --- a/.changeset/funky-bars-chew.md +++ /dev/null @@ -1,9 +0,0 @@ ---- ---- - -Improve industry news alert format for engagement - -- Replace priority headers with article title in Slack alerts -- Add "Addie's take" with emoji and discussion prompt to drive engagement -- Decode HTML entities in RSS feed titles -- Reduce false positives in agentic mention detection by only checking original content diff --git a/.changeset/funny-jeans-attack.md b/.changeset/funny-jeans-attack.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/funny-jeans-attack.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/funny-sheep-remain.md b/.changeset/funny-sheep-remain.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/funny-sheep-remain.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fuzzy-showers-know.md b/.changeset/fuzzy-showers-know.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/fuzzy-showers-know.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/fuzzy-streets-call.md b/.changeset/fuzzy-streets-call.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/fuzzy-streets-call.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/gentle-coins-live.md b/.changeset/gentle-coins-live.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/gentle-coins-live.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/gentle-moose-greet.md b/.changeset/gentle-moose-greet.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/gentle-moose-greet.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/gentle-pianos-spend.md b/.changeset/gentle-pianos-spend.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/gentle-pianos-spend.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/gentle-rivers-add.md b/.changeset/gentle-rivers-add.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/gentle-rivers-add.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/giant-eggs-stare.md b/.changeset/giant-eggs-stare.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/giant-eggs-stare.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/giant-parts-heal.md b/.changeset/giant-parts-heal.md deleted file mode 100644 index 8dfffdc2cb..0000000000 --- a/.changeset/giant-parts-heal.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add Addie Desktop app with native OAuth flow and multi-thread chat UI for web. diff --git a/.changeset/giant-tires-argue.md b/.changeset/giant-tires-argue.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/giant-tires-argue.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/github-issue-offer.md b/.changeset/github-issue-offer.md deleted file mode 100644 index a780d5e737..0000000000 --- a/.changeset/github-issue-offer.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add GitHub issue offer for open-source agent test failures diff --git a/.changeset/gold-spies-wait.md b/.changeset/gold-spies-wait.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/gold-spies-wait.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/good-ads-rule.md b/.changeset/good-ads-rule.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/good-ads-rule.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/good-cougars-serve.md b/.changeset/good-cougars-serve.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/good-cougars-serve.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/good-kiwis-tie.md b/.changeset/good-kiwis-tie.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/good-kiwis-tie.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/good-lemons-accept.md b/.changeset/good-lemons-accept.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/good-lemons-accept.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/good-steaks-slide.md b/.changeset/good-steaks-slide.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/good-steaks-slide.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/goofy-deer-pick.md b/.changeset/goofy-deer-pick.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/goofy-deer-pick.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/great-cobras-wave.md b/.changeset/great-cobras-wave.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/great-cobras-wave.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/great-singers-greet.md b/.changeset/great-singers-greet.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/great-singers-greet.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/green-banks-juggle.md b/.changeset/green-banks-juggle.md deleted file mode 100644 index 26569a2f78..0000000000 --- a/.changeset/green-banks-juggle.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add static admin API key for programmatic access (ADMIN_API_KEY env var) diff --git a/.changeset/green-bottles-fly.md b/.changeset/green-bottles-fly.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/green-bottles-fly.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/green-cooks-double.md b/.changeset/green-cooks-double.md deleted file mode 100644 index bed9202737..0000000000 --- a/.changeset/green-cooks-double.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Consolidate check_agent_health and get_agent_capabilities into probe_adcp_agent tool diff --git a/.changeset/happy-llamas-hope.md b/.changeset/happy-llamas-hope.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/happy-llamas-hope.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/happy-nights-talk.md b/.changeset/happy-nights-talk.md deleted file mode 100644 index 4c3ad70f2f..0000000000 --- a/.changeset/happy-nights-talk.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add committee leadership management tools for Addie and display industry gatherings in the dashboard committees section. diff --git a/.changeset/block-personal-workspace-merge.md b/.changeset/happy-singers-cry.md similarity index 100% rename from .changeset/block-personal-workspace-merge.md rename to .changeset/happy-singers-cry.md diff --git a/.changeset/heavy-dots-doubt.md b/.changeset/heavy-dots-doubt.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/heavy-dots-doubt.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/heavy-tips-visit.md b/.changeset/heavy-tips-visit.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/heavy-tips-visit.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/hip-bugs-jam.md b/.changeset/hip-bugs-jam.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/hip-bugs-jam.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/honest-spiders-tickle.md b/.changeset/honest-spiders-tickle.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/honest-spiders-tickle.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/blue-tables-agree.md b/.changeset/honest-stamps-switch.md similarity index 100% rename from .changeset/blue-tables-agree.md rename to .changeset/honest-stamps-switch.md diff --git a/.changeset/hot-teams-leave.md b/.changeset/hot-teams-leave.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/hot-teams-leave.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/huge-taxes-sin.md b/.changeset/huge-taxes-sin.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/huge-taxes-sin.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/humble-clouds-smell.md b/.changeset/humble-clouds-smell.md deleted file mode 100644 index f4fc7b5d9b..0000000000 --- a/.changeset/humble-clouds-smell.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix chat page showing logged-out state for authenticated users. diff --git a/.changeset/hungry-bars-jump.md b/.changeset/hungry-bars-jump.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/hungry-bars-jump.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/hungry-feet-jump.md b/.changeset/hungry-feet-jump.md deleted file mode 100644 index fff40c1626..0000000000 --- a/.changeset/hungry-feet-jump.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Ignore Slackbot system messages in Addie handlers (no protocol changes) diff --git a/.changeset/bold-hornets-behave.md b/.changeset/icy-cases-dig.md similarity index 100% rename from .changeset/bold-hornets-behave.md rename to .changeset/icy-cases-dig.md diff --git a/.changeset/icy-toes-pay.md b/.changeset/icy-toes-pay.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/icy-toes-pay.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/industry-gathering-slug-fix.md b/.changeset/industry-gathering-slug-fix.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/industry-gathering-slug-fix.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/jolly-chefs-knock.md b/.changeset/jolly-chefs-knock.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/jolly-chefs-knock.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/jolly-houses-shake.md b/.changeset/jolly-houses-shake.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/jolly-houses-shake.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/jolly-spoons-jump.md b/.changeset/jolly-spoons-jump.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/jolly-spoons-jump.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/kind-horses-fry.md b/.changeset/kind-horses-fry.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/kind-horses-fry.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/late-candles-invite.md b/.changeset/late-candles-invite.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/late-candles-invite.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/late-teeth-divide.md b/.changeset/late-teeth-divide.md deleted file mode 100644 index 836280767f..0000000000 --- a/.changeset/late-teeth-divide.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Improve domain health admin page UX: inline domain linking, www normalization, and verify button for existing domains. diff --git a/.changeset/lazy-doors-read.md b/.changeset/lazy-doors-read.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/lazy-doors-read.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/legal-dodos-rush.md b/.changeset/legal-dodos-rush.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/legal-dodos-rush.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/legal-islands-kick.md b/.changeset/legal-islands-kick.md new file mode 100644 index 0000000000..10b4399a09 --- /dev/null +++ b/.changeset/legal-islands-kick.md @@ -0,0 +1,8 @@ +--- +--- + +fix: Remove RSS and email content from Editorial working group + +Migration 153 incorrectly swept RSS feed articles into the Editorial working group. +RSS content should remain unassigned (working_group_id = NULL) and display +via The Latest sections through addie_knowledge. diff --git a/.changeset/lemon-cats-brake.md b/.changeset/lemon-cats-brake.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/lemon-cats-brake.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/brave-emus-invite.md b/.changeset/light-tables-stare.md similarity index 100% rename from .changeset/brave-emus-invite.md rename to .changeset/light-tables-stare.md diff --git a/.changeset/link-org-direct.md b/.changeset/link-org-direct.md deleted file mode 100644 index 6a38402a25..0000000000 --- a/.changeset/link-org-direct.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Link domain directly when clicking "Link to Org" on domain health page instead of showing modal diff --git a/.changeset/loose-feet-live.md b/.changeset/loose-feet-live.md deleted file mode 100644 index a9f04a1ea0..0000000000 --- a/.changeset/loose-feet-live.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add heading-level indexing for external repos (Addie knowledge base improvement - no protocol changes) diff --git a/.changeset/loud-bushes-train.md b/.changeset/loud-bushes-train.md new file mode 100644 index 0000000000..78db9bd2ba --- /dev/null +++ b/.changeset/loud-bushes-train.md @@ -0,0 +1,15 @@ +--- +"adcontextprotocol": minor +--- + +Clarify creative handling in media buy operations: + +**Breaking:** Replace `creative_ids` with `creative_assignments` in `create_media_buy` and `update_media_buy` +- `creative_assignments` supports optional `weight` and `placement_ids` for granular control +- Simple assignment: `{ "creative_id": "my_creative" }` (weight/placement optional) +- Advanced assignment: `{ "creative_id": "my_creative", "weight": 60, "placement_ids": ["p1"] }` + +**Clarifications:** +- `creatives` array creates NEW creatives only (add `CREATIVE_ID_EXISTS` error) +- `delete_missing` in sync_creatives cannot delete creatives in active delivery (`CREATIVE_IN_ACTIVE_DELIVERY` error) +- Document that existing library creatives should be managed via `sync_creatives` diff --git a/.changeset/loud-ducks-cough.md b/.changeset/loud-ducks-cough.md deleted file mode 100644 index 0e7d225748..0000000000 --- a/.changeset/loud-ducks-cough.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix ambiguous ORDER BY column in getMembershipsByWorkingGroup query. diff --git a/.changeset/loud-hairs-repeat.md b/.changeset/loud-hairs-repeat.md deleted file mode 100644 index 76db2d2794..0000000000 --- a/.changeset/loud-hairs-repeat.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Filter RSS and email content from research section to show only member perspectives. diff --git a/.changeset/loud-pigs-heal.md b/.changeset/loud-pigs-heal.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/loud-pigs-heal.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/lovely-banks-argue.md b/.changeset/lovely-banks-argue.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/lovely-banks-argue.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/lovely-dragons-know.md b/.changeset/lovely-dragons-know.md deleted file mode 100644 index 74fa3d2804..0000000000 --- a/.changeset/lovely-dragons-know.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix profile modal Continue button not working on dashboard. Added proper change event listeners to radio buttons for more reliable selection handling across browsers and mobile devices. diff --git a/.changeset/many-cups-teach.md b/.changeset/many-cups-teach.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/many-cups-teach.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/many-doors-shine.md b/.changeset/many-doors-shine.md deleted file mode 100644 index 8973ad0967..0000000000 --- a/.changeset/many-doors-shine.md +++ /dev/null @@ -1,10 +0,0 @@ ---- ---- - -Add unified account management system with action items, user stakeholders, and momentum tracking. - -- New migration for user_stakeholders and action_items tables -- Database service for managing account assignments and action items -- Momentum check job for analyzing outreach history and creating action items -- Admin UI with action items panel and My Accounts tab -- Reorganized admin sidebar with Account Management section diff --git a/.changeset/member-search-intros.md b/.changeset/member-search-intros.md deleted file mode 100644 index 11dfde4a52..0000000000 --- a/.changeset/member-search-intros.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Member search analytics and introduction email improvements (no protocol changes) diff --git a/.changeset/metal-ravens-argue.md b/.changeset/metal-ravens-argue.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/metal-ravens-argue.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/mighty-needles-count.md b/.changeset/mighty-needles-count.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/mighty-needles-count.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/mighty-rings-add.md b/.changeset/mighty-rings-add.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/mighty-rings-add.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/modern-maps-happen.md b/.changeset/modern-maps-happen.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/modern-maps-happen.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/modern-planets-marry.md b/.changeset/modern-planets-marry.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/modern-planets-marry.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/neat-things-lay.md b/.changeset/neat-things-lay.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/neat-things-lay.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/new-coins-think.md b/.changeset/new-coins-think.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/new-coins-think.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/new-meals-battle.md b/.changeset/new-meals-battle.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/new-meals-battle.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/new-olives-play.md b/.changeset/new-olives-play.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/new-olives-play.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/new-suns-study.md b/.changeset/new-suns-study.md deleted file mode 100644 index 781b121132..0000000000 --- a/.changeset/new-suns-study.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Server-only audit logging changes - adds comprehensive audit logging for organization lifecycle events and admin viewer. diff --git a/.changeset/nice-camels-serve.md b/.changeset/nice-camels-serve.md deleted file mode 100644 index 4c5176df57..0000000000 --- a/.changeset/nice-camels-serve.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add collapsible sidebar to chat interface with localStorage persistence. Fix external link handling in desktop app iframe. diff --git a/.changeset/nice-kings-add.md b/.changeset/nice-kings-add.md new file mode 100644 index 0000000000..80516bcb48 --- /dev/null +++ b/.changeset/nice-kings-add.md @@ -0,0 +1,14 @@ +--- +--- + +### Zoom Meeting Webhooks & User Timezone + +**Zoom Webhook Integration:** +- Handle `meeting.started` and `meeting.ended` webhooks to update meeting status +- Handle `recording.completed` webhook to store transcripts and Zoom AI Companion summaries +- Send Slack notifications to working group channels when meetings start/end +- Fix JSON body parsing to allow webhook signature verification + +**User Timezone:** +- Add timezone column to users table for scheduling preferences +- Add helper functions for timezone management (getUserTimezone, updateUserTimezone, etc.) diff --git a/.changeset/nice-meals-help.md b/.changeset/nice-meals-help.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/nice-meals-help.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/nine-lies-raise.md b/.changeset/nine-lies-raise.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/nine-lies-raise.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/nine-rings-beam.md b/.changeset/nine-rings-beam.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/nine-rings-beam.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/nine-views-clap.md b/.changeset/nine-views-clap.md deleted file mode 100644 index bd889bacfb..0000000000 --- a/.changeset/nine-views-clap.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add committee types system: Evolves working groups into multi-type committees (Working Groups, Industry Councils, Regional Chapters, Governance). Includes new navigation dropdown, landing pages for councils/chapters, admin panel updates, and seed data for initial committees. diff --git a/.changeset/ninety-oranges-rush.md b/.changeset/ninety-oranges-rush.md deleted file mode 100644 index 8bb529999c..0000000000 --- a/.changeset/ninety-oranges-rush.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Consolidate Contacts page into Users page - engagement scores, goals, and insights now shown in Users table and context modal. Remove redundant Contacts page and APIs. diff --git a/.changeset/old-geese-dress.md b/.changeset/old-geese-dress.md deleted file mode 100644 index 7bd09068db..0000000000 --- a/.changeset/old-geese-dress.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add industry gathering management for Addie admin and improve admin form UX. diff --git a/.changeset/old-shirts-hammer.md b/.changeset/old-shirts-hammer.md deleted file mode 100644 index 2e662e7335..0000000000 --- a/.changeset/old-shirts-hammer.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix outreach preview showing Slack-linking messages for already-linked users and remove guilt-inducing language from outreach variants. diff --git a/.changeset/olive-buses-doubt.md b/.changeset/olive-buses-doubt.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/olive-buses-doubt.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/olive-coats-bathe.md b/.changeset/olive-coats-bathe.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/olive-coats-bathe.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/open-rooms-tap.md b/.changeset/open-rooms-tap.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/open-rooms-tap.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/open-squids-flow.md b/.changeset/open-squids-flow.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/open-squids-flow.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/orange-bottles-reply.md b/.changeset/orange-bottles-reply.md deleted file mode 100644 index 741650006f..0000000000 --- a/.changeset/orange-bottles-reply.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Clarify AdCP/MCP relationship in docs: AdCP works *over* MCP and A2A as transports, not "built on" MCP. diff --git a/.changeset/orange-coins-wish.md b/.changeset/orange-coins-wish.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/orange-coins-wish.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/perky-deserts-matter.md b/.changeset/perky-deserts-matter.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/perky-deserts-matter.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/personal-workspace-enforcement.md b/.changeset/personal-workspace-enforcement.md deleted file mode 100644 index ec380ec43f..0000000000 --- a/.changeset/personal-workspace-enforcement.md +++ /dev/null @@ -1,3 +0,0 @@ ---- ---- - diff --git a/.changeset/petite-eels-fly.md b/.changeset/petite-eels-fly.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/petite-eels-fly.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/pink-corners-allow.md b/.changeset/pink-corners-allow.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/pink-corners-allow.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/plain-needles-smell.md b/.changeset/plain-needles-smell.md deleted file mode 100644 index d55d877750..0000000000 --- a/.changeset/plain-needles-smell.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix ON CONFLICT clause in domain insert queries to match database schema constraint. diff --git a/.changeset/plain-terms-sip.md b/.changeset/plain-terms-sip.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/plain-terms-sip.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/plenty-trees-relate.md b/.changeset/plenty-trees-relate.md deleted file mode 100644 index a10b808acf..0000000000 --- a/.changeset/plenty-trees-relate.md +++ /dev/null @@ -1,28 +0,0 @@ ---- ---- - -Server/dashboard changes: Add Luma integration for AAO events management. - -**Luma API Client** (`server/src/luma/client.ts`): -- Full Luma API client with typed interfaces -- Event operations: create, get, update, delete -- Guest/registration operations: list guests, approve, decline, check-in -- Calendar operations: list calendars, list calendar events -- Webhook payload parsing and validation - -**Luma Webhook Handler** (`POST /api/webhooks/luma`): -- Handles `guest.created` - Syncs new registrations from Luma to AAO database -- Handles `guest.updated` - Updates registration status (approved/declined/checked-in) -- Handles `event.updated` - Syncs event changes from Luma back to AAO - -**Addie Event Tools** for natural language event management: -- `create_event` - Create events in both Luma and AAO database -- `list_upcoming_events` - List upcoming events with filtering -- `get_event_details` - Get event details with registration counts -- `manage_event_registrations` - List, approve waitlist, export registrations -- `update_event` - Update event details - -**Admin Navigation**: -- Added "Events" link to admin sidebar in the Community section - -Requires `LUMA_API_KEY` environment variable for Luma integration. diff --git a/.changeset/polite-candies-rescue.md b/.changeset/polite-candies-rescue.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/polite-candies-rescue.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/polite-candles-walk.md b/.changeset/polite-candles-walk.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/polite-candles-walk.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/polite-cycles-hang.md b/.changeset/polite-cycles-hang.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/polite-cycles-hang.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/polite-socks-swim.md b/.changeset/polite-socks-swim.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/polite-socks-swim.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/polite-tables-fail.md b/.changeset/polite-tables-fail.md deleted file mode 100644 index 8469f93f36..0000000000 --- a/.changeset/polite-tables-fail.md +++ /dev/null @@ -1,11 +0,0 @@ ---- ---- - -Add comprehensive prospect ownership and management system: - -- Database migration to convert legacy prospect_owner text to org_stakeholders records -- 5 new Addie admin tools: my_engaged_prospects, my_followups_needed, unassigned_prospects, claim_prospect, suggest_prospects -- "My Prospects" section at top of admin dashboard with hot/followup lists -- Prospect stats in Slack App Home admin panel -- mine=true filter on prospects API -- Fix org owner display to fall back to legacy prospect_owner field when no stakeholder owner exists diff --git a/.changeset/polite-webs-cheat.md b/.changeset/polite-webs-cheat.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/polite-webs-cheat.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/posthog-analytics.md b/.changeset/posthog-analytics.md deleted file mode 100644 index 4f21593d06..0000000000 --- a/.changeset/posthog-analytics.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add PostHog analytics integration for tracking rage clicks, session recordings, and heatmaps. diff --git a/.changeset/pretty-cameras-jog.md b/.changeset/pretty-cameras-jog.md deleted file mode 100644 index 3c864ac716..0000000000 --- a/.changeset/pretty-cameras-jog.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Admin UI improvements: dynamic owner dropdowns with "(me)" indicator, quick follow-up form. diff --git a/.changeset/pretty-crabs-create.md b/.changeset/pretty-crabs-create.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/pretty-crabs-create.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/pretty-horses-add.md b/.changeset/pretty-horses-add.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/pretty-horses-add.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/property-governance-protocol.md b/.changeset/property-governance-protocol.md new file mode 100644 index 0000000000..882945edce --- /dev/null +++ b/.changeset/property-governance-protocol.md @@ -0,0 +1,9 @@ +--- +"adcontextprotocol": minor +--- + +Add Property Governance Protocol support to get_products + +- Add optional `property_list` parameter to get_products request for filtering products by property list +- Add `property_list_applied` response field to indicate whether filtering was applied +- Enables buyers to pass property lists from governance agents to sales agents for compliant inventory discovery diff --git a/.changeset/proud-jars-attack.md b/.changeset/proud-jars-attack.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/proud-jars-attack.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/proud-pugs-punch.md b/.changeset/proud-pugs-punch.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/proud-pugs-punch.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/public-needles-argue.md b/.changeset/public-needles-argue.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/public-needles-argue.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/puny-terms-start.md b/.changeset/puny-terms-start.md deleted file mode 100644 index bafe4fd5eb..0000000000 --- a/.changeset/puny-terms-start.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add AXE (Agentic eXecution Engine) documentation with real-time targeting, brand safety, and frequency management details. diff --git a/.changeset/purple-rice-unite.md b/.changeset/purple-rice-unite.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/purple-rice-unite.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/quick-pandas-invent.md b/.changeset/quick-pandas-invent.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/quick-pandas-invent.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/ready-breads-matter.md b/.changeset/ready-breads-matter.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/ready-breads-matter.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/ready-kids-teach.md b/.changeset/ready-kids-teach.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/ready-kids-teach.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/real-cases-join.md b/.changeset/real-cases-join.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/real-cases-join.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/real-places-float.md b/.changeset/real-places-float.md deleted file mode 100644 index 23458d9db1..0000000000 --- a/.changeset/real-places-float.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -CI fix: Add publish step to release workflow to enable GitHub release creation. diff --git a/.changeset/red-mails-do.md b/.changeset/red-mails-do.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/red-mails-do.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/reduce-log-noise.md b/.changeset/reduce-log-noise.md new file mode 100644 index 0000000000..8482d302ba --- /dev/null +++ b/.changeset/reduce-log-noise.md @@ -0,0 +1,4 @@ +--- +--- + +Reduce log noise by changing per-item logs to debug level and making job summaries conditional diff --git a/.changeset/release-relaxed-schemas.md b/.changeset/release-relaxed-schemas.md deleted file mode 100644 index fb0609cfce..0000000000 --- a/.changeset/release-relaxed-schemas.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"adcontextprotocol": patch ---- - -Release schemas with `additionalProperties: true` for forward compatibility - -This releases `dist/schemas/2.5.2/` containing the relaxed schema validation -introduced in #646. Clients can now safely ignore unknown fields when parsing -API responses, allowing the API to evolve without breaking existing integrations. diff --git a/.changeset/breezy-cats-own.md b/.changeset/rich-toes-grow.md similarity index 100% rename from .changeset/breezy-cats-own.md rename to .changeset/rich-toes-grow.md diff --git a/.changeset/ripe-ghosts-bet.md b/.changeset/ripe-ghosts-bet.md deleted file mode 100644 index 50f3463080..0000000000 --- a/.changeset/ripe-ghosts-bet.md +++ /dev/null @@ -1,9 +0,0 @@ ---- ---- - -Add escalation and learning capture tools for Addie - -- New `escalate_to_admin` tool for capability gaps and requests needing human action -- New `capture_learning` tool to flag valuable user insights for synthesis -- Admin API endpoints for managing escalations -- System prompt updates to prevent Addie from promising actions without tools diff --git a/.changeset/ripe-zebras-sell.md b/.changeset/ripe-zebras-sell.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/ripe-zebras-sell.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/salty-cooks-grin.md b/.changeset/salty-cooks-grin.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/salty-cooks-grin.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/seven-deer-marry.md b/.changeset/seven-deer-marry.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/seven-deer-marry.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/seven-heads-smile.md b/.changeset/seven-heads-smile.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/seven-heads-smile.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/seven-rules-invent.md b/.changeset/seven-rules-invent.md deleted file mode 100644 index 37a3d4f1bc..0000000000 --- a/.changeset/seven-rules-invent.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Allow working group leaders to schedule meetings for groups they lead via Addie. Added meeting and event tools documentation to Addie's system prompt. diff --git a/.changeset/seven-squids-carry.md b/.changeset/seven-squids-carry.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/seven-squids-carry.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/shaggy-rocks-train.md b/.changeset/shaggy-rocks-train.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/shaggy-rocks-train.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/shaky-paths-attend.md b/.changeset/shaky-paths-attend.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/shaky-paths-attend.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/shiny-dots-act.md b/.changeset/shiny-dots-act.md new file mode 100644 index 0000000000..3aacdbb4cb --- /dev/null +++ b/.changeset/shiny-dots-act.md @@ -0,0 +1,4 @@ +--- +--- + +Reduce log noise from scheduled jobs by moving routine success logs to debug level while keeping error logs at info level. diff --git a/.changeset/shiny-points-spend.md b/.changeset/shiny-points-spend.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/shiny-points-spend.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/short-clouds-feel.md b/.changeset/short-clouds-feel.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/short-clouds-feel.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/shy-bats-run.md b/.changeset/shy-bats-run.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/shy-bats-run.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/shy-kings-crash.md b/.changeset/shy-kings-crash.md new file mode 100644 index 0000000000..d21d7fc8c3 --- /dev/null +++ b/.changeset/shy-kings-crash.md @@ -0,0 +1,4 @@ +--- +--- + +Add Schedule button to admin working groups page diff --git a/.changeset/silent-cars-watch.md b/.changeset/silent-cars-watch.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/silent-cars-watch.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/silent-crews-lose.md b/.changeset/silent-crews-lose.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/silent-crews-lose.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/silly-paws-lick.md b/.changeset/silly-paws-lick.md new file mode 100644 index 0000000000..7572fa4a1a --- /dev/null +++ b/.changeset/silly-paws-lick.md @@ -0,0 +1,4 @@ +--- +--- + +Fix admin meetings page crash when loading meetings and series diff --git a/.changeset/silly-readers-hunt.md b/.changeset/silly-readers-hunt.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/silly-readers-hunt.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/silver-goats-exist.md b/.changeset/silver-goats-exist.md deleted file mode 100644 index e454a20f63..0000000000 --- a/.changeset/silver-goats-exist.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Internal server improvements: static fs import and proper 404 handling for HTML serving. diff --git a/.changeset/silver-suns-sell.md b/.changeset/silver-suns-sell.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/silver-suns-sell.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/sixty-colts-bathe.md b/.changeset/sixty-colts-bathe.md deleted file mode 100644 index a9682143b2..0000000000 --- a/.changeset/sixty-colts-bathe.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add company type and revenue tier collection during onboarding flow. diff --git a/.changeset/sixty-ends-ask.md b/.changeset/sixty-ends-ask.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/sixty-ends-ask.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/sixty-paws-punch.md b/.changeset/sixty-paws-punch.md deleted file mode 100644 index 9105fb5231..0000000000 --- a/.changeset/sixty-paws-punch.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add OpenTelemetry logging integration for PostHog and fix client-side JavaScript errors. diff --git a/.changeset/skip-welcome-engaged-users.md b/.changeset/skip-welcome-engaged-users.md deleted file mode 100644 index 01554d803f..0000000000 --- a/.changeset/skip-welcome-engaged-users.md +++ /dev/null @@ -1,6 +0,0 @@ ---- ---- - -No protocol impact - internal behavior change only. - -Skip intro/welcome goals for highly engaged users (committee leaders, working group members, council members, active Slack users). diff --git a/.changeset/slack-engagement-scores.md b/.changeset/slack-engagement-scores.md deleted file mode 100644 index 2a2fb92cb5..0000000000 --- a/.changeset/slack-engagement-scores.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Website only: Compute engagement scores for Slack-only contacts in admin dashboard diff --git a/.changeset/slick-camels-hide.md b/.changeset/slick-camels-hide.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/slick-camels-hide.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/slick-singers-prove.md b/.changeset/slick-singers-prove.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/slick-singers-prove.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/slick-tigers-invite.md b/.changeset/slick-tigers-invite.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/slick-tigers-invite.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/slimy-meteors-grab.md b/.changeset/slimy-meteors-grab.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/slimy-meteors-grab.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/slimy-singers-care.md b/.changeset/slimy-singers-care.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/slimy-singers-care.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/slow-snails-stand.md b/.changeset/slow-snails-stand.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/slow-snails-stand.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/slow-trains-agree.md b/.changeset/slow-trains-agree.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/slow-trains-agree.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/small-geese-leave.md b/.changeset/small-geese-leave.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/small-geese-leave.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/smart-olives-sort.md b/.changeset/smart-olives-sort.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/smart-olives-sort.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/smooth-rice-chew.md b/.changeset/smooth-rice-chew.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/smooth-rice-chew.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/soft-apples-play.md b/.changeset/soft-apples-play.md deleted file mode 100644 index 6bf8a359b8..0000000000 --- a/.changeset/soft-apples-play.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix profile completion goal to only show for paid members, handle personal workspaces diff --git a/.changeset/soft-rooms-spend.md b/.changeset/soft-rooms-spend.md deleted file mode 100644 index 968502484e..0000000000 --- a/.changeset/soft-rooms-spend.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Internal improvements to industry news page: HTML entity parsing, article sorting by publication date, and URL deduplication. diff --git a/.changeset/solid-hotels-occur.md b/.changeset/solid-hotels-occur.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/solid-hotels-occur.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/solid-ideas-shake.md b/.changeset/solid-ideas-shake.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/solid-ideas-shake.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/some-phones-study.md b/.changeset/some-phones-study.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/some-phones-study.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/some-teeth-judge.md b/.changeset/some-teeth-judge.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/some-teeth-judge.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/sparkly-camels-dream.md b/.changeset/sparkly-camels-dream.md deleted file mode 100644 index 648b907b34..0000000000 --- a/.changeset/sparkly-camels-dream.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Homepage layout refinement: tightened hero sections, moved Go Agentic section to prominent position after release banner, updated prompts to be more actionable, and removed mission statement band from org-index.html. diff --git a/.changeset/sparkly-onions-hug.md b/.changeset/sparkly-onions-hug.md deleted file mode 100644 index d9927220e2..0000000000 --- a/.changeset/sparkly-onions-hug.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add Addie email response capability - allows Addie to reply to email threads when CC'd and explicitly invoked diff --git a/.changeset/spicy-animals-fail.md b/.changeset/spicy-animals-fail.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/spicy-animals-fail.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/spicy-doors-flow.md b/.changeset/spicy-doors-flow.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/spicy-doors-flow.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/spicy-plants-rescue.md b/.changeset/spicy-plants-rescue.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/spicy-plants-rescue.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/spicy-tigers-double.md b/.changeset/spicy-tigers-double.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/spicy-tigers-double.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/stale-cobras-smile.md b/.changeset/stale-cobras-smile.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/stale-cobras-smile.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/stale-hats-dance.md b/.changeset/stale-hats-dance.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/stale-hats-dance.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/stale-tips-drive.md b/.changeset/stale-tips-drive.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/stale-tips-drive.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/strict-foxes-wash.md b/.changeset/strict-foxes-wash.md deleted file mode 100644 index 64c4740cc9..0000000000 --- a/.changeset/strict-foxes-wash.md +++ /dev/null @@ -1,8 +0,0 @@ ---- ---- - -fix: simplify engagement scoring and fix working group leader detection - -- Simplified engagement scoring: 10 points per Slack action + 20 points per event (capped at 100) -- Fixed working group count to include leaders as implicit members -- Committee leaders no longer receive "Discover Working Groups" recommendations diff --git a/.changeset/strict-lamps-turn.md b/.changeset/strict-lamps-turn.md deleted file mode 100644 index aab5a8b79f..0000000000 --- a/.changeset/strict-lamps-turn.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix Slack user linking in bulk prospect creation from domain discovery. diff --git a/.changeset/breezy-pens-kick.md b/.changeset/strong-wings-cough.md similarity index 100% rename from .changeset/breezy-pens-kick.md rename to .changeset/strong-wings-cough.md diff --git a/.changeset/sunny-apples-jam.md b/.changeset/sunny-apples-jam.md deleted file mode 100644 index 3146a532c7..0000000000 --- a/.changeset/sunny-apples-jam.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Improve Addie's GitHub issue detection for client library bugs vs agent bugs diff --git a/.changeset/sunny-bears-stare.md b/.changeset/sunny-bears-stare.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/sunny-bears-stare.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/breezy-zoos-hope.md b/.changeset/sunny-cars-pick.md similarity index 100% rename from .changeset/breezy-zoos-hope.md rename to .changeset/sunny-cars-pick.md diff --git a/.changeset/sweet-brooms-give.md b/.changeset/sweet-brooms-give.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/sweet-brooms-give.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/sweet-planes-follow.md b/.changeset/sweet-planes-follow.md deleted file mode 100644 index 6aa9556f09..0000000000 --- a/.changeset/sweet-planes-follow.md +++ /dev/null @@ -1,10 +0,0 @@ ---- ---- - -Improve Addie's Slack message understanding - -- Fix Addie not seeing forwarded Slack messages (content is in `attachments`, not `text`) -- Add reaction-based confirmations: thumbs up on "should I proceed?" means yes -- Add file share awareness: Addie now sees file metadata when users share files -- Add `fetch_url` tool: Addie can read content from URLs shared in messages -- Add `read_slack_file` tool: Addie can read text files shared in Slack diff --git a/.changeset/sweet-queens-send.md b/.changeset/sweet-queens-send.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/sweet-queens-send.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/sweet-taxis-act.md b/.changeset/sweet-taxis-act.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/sweet-taxis-act.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/swift-points-sniff.md b/.changeset/swift-points-sniff.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/swift-points-sniff.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/tame-hornets-peel.md b/.changeset/tame-hornets-peel.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/tame-hornets-peel.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/tame-hounds-swim.md b/.changeset/tame-hounds-swim.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/tame-hounds-swim.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/tame-llamas-shake.md b/.changeset/tame-llamas-shake.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/tame-llamas-shake.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/tasty-sails-tie.md b/.changeset/tasty-sails-tie.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/tasty-sails-tie.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/ten-bikes-shout.md b/.changeset/ten-bikes-shout.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/ten-bikes-shout.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/ten-crews-joke.md b/.changeset/ten-crews-joke.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/ten-crews-joke.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/ten-experts-fall.md b/.changeset/ten-experts-fall.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/ten-experts-fall.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/ten-groups-heal.md b/.changeset/ten-groups-heal.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/ten-groups-heal.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/ten-towns-admire.md b/.changeset/ten-towns-admire.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/ten-towns-admire.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/tender-experts-repeat.md b/.changeset/tender-experts-repeat.md deleted file mode 100644 index 4ceb3aa470..0000000000 --- a/.changeset/tender-experts-repeat.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Remove insight_goal_id references following migration 166 column drop. diff --git a/.changeset/tender-jeans-double.md b/.changeset/tender-jeans-double.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/tender-jeans-double.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/tender-needles-beg.md b/.changeset/tender-needles-beg.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/tender-needles-beg.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/tender-pants-glow.md b/.changeset/tender-pants-glow.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/tender-pants-glow.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/thick-cows-add.md b/.changeset/thick-cows-add.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/thick-cows-add.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/thin-lions-trade.md b/.changeset/thin-lions-trade.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/thin-lions-trade.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/thirty-dots-feel.md b/.changeset/thirty-dots-feel.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/thirty-dots-feel.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/thirty-papayas-rescue.md b/.changeset/thirty-papayas-rescue.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/thirty-papayas-rescue.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/thirty-regions-dance.md b/.changeset/thirty-regions-dance.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/thirty-regions-dance.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/thirty-snails-kneel.md b/.changeset/thirty-snails-kneel.md deleted file mode 100644 index efbd790a09..0000000000 --- a/.changeset/thirty-snails-kneel.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add token-aware context limiting for Addie to prevent prompt overflow errors in long conversations. diff --git a/.changeset/thirty-snakes-fix.md b/.changeset/thirty-snakes-fix.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/thirty-snakes-fix.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/timezone-meeting-fix.md b/.changeset/timezone-meeting-fix.md new file mode 100644 index 0000000000..e9ce99d6fd --- /dev/null +++ b/.changeset/timezone-meeting-fix.md @@ -0,0 +1,8 @@ +--- +--- + +fix: Meeting scheduling timezone comparison bug + +Fixed Addie incorrectly rejecting meeting times as "already passed" when users +specified times in their local timezone. The datetime comparison now correctly +interprets times in the specified timezone context. diff --git a/.changeset/tiny-games-decide.md b/.changeset/tiny-games-decide.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/tiny-games-decide.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/tiny-news-smash.md b/.changeset/tiny-news-smash.md deleted file mode 100644 index d453bc8770..0000000000 --- a/.changeset/tiny-news-smash.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add mobile app-like experience with slide-in navigation, safe area handling, touch-optimized targets, and PWA support. diff --git a/.changeset/tired-rockets-lie.md b/.changeset/tired-rockets-lie.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/tired-rockets-lie.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/tricky-baths-obey.md b/.changeset/tricky-baths-obey.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/tricky-baths-obey.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/tricky-worms-push.md b/.changeset/tricky-worms-push.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/tricky-worms-push.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/twelve-baboons-smell.md b/.changeset/twelve-baboons-smell.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/twelve-baboons-smell.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/twelve-books-cross.md b/.changeset/twelve-books-cross.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/twelve-books-cross.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/brown-doors-fly.md b/.changeset/twelve-hounds-stand.md similarity index 100% rename from .changeset/brown-doors-fly.md rename to .changeset/twelve-hounds-stand.md diff --git a/.changeset/twenty-ads-lay.md b/.changeset/twenty-ads-lay.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/twenty-ads-lay.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/twenty-bobcats-fall.md b/.changeset/twenty-bobcats-fall.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/twenty-bobcats-fall.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/wacky-seals-eat.md b/.changeset/wacky-seals-eat.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/wacky-seals-eat.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/wacky-things-refuse.md b/.changeset/wacky-things-refuse.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/wacky-things-refuse.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/wacky-worms-speak.md b/.changeset/wacky-worms-speak.md deleted file mode 100644 index 42ecbe41cd..0000000000 --- a/.changeset/wacky-worms-speak.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Fix admin tools not being available in Slack DM threads, add timeframe filtering to conversation stats, and fix feedback UI re-rendering after save diff --git a/.changeset/warm-jars-attack.md b/.changeset/warm-jars-attack.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/warm-jars-attack.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/warm-lamps-accept.md b/.changeset/warm-lamps-accept.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/warm-lamps-accept.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/wet-keys-wash.md b/.changeset/wet-keys-wash.md deleted file mode 100644 index 2405357f90..0000000000 --- a/.changeset/wet-keys-wash.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Add brand_manifest parameter to test_adcp_agent tool, allowing users to specify custom brands when testing agents. Defaults to Nike if not provided. diff --git a/.changeset/wicked-islands-tickle.md b/.changeset/wicked-islands-tickle.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/wicked-islands-tickle.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/wicked-memes-act.md b/.changeset/wicked-memes-act.md deleted file mode 100644 index 7596795353..0000000000 --- a/.changeset/wicked-memes-act.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Admin collaboration features for outreach: add insight button, year reference cleanup, vendor membership goal, admin nudge/override diff --git a/.changeset/wide-kiwis-say.md b/.changeset/wide-kiwis-say.md deleted file mode 100644 index 34a6a9b184..0000000000 --- a/.changeset/wide-kiwis-say.md +++ /dev/null @@ -1,11 +0,0 @@ ---- ---- - -Consolidate rating system to thumbs up/down and add rating_source to distinguish user vs admin feedback. - -Add eval framework for testing rule changes against historical interactions: -- New tables: addie_eval_runs, addie_eval_results -- Re-execute historical messages with proposed rules using real Claude calls -- Compare original vs new responses (routing, tools, response text) -- Human review with verdicts (improved/same/worse/uncertain) -- API endpoints: POST/GET /api/admin/addie/eval/runs, GET /results, PUT /review diff --git a/.changeset/wide-shirts-attack.md b/.changeset/wide-shirts-attack.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/wide-shirts-attack.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/wise-bags-invite.md b/.changeset/wise-bags-invite.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/wise-bags-invite.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/wise-places-invent.md b/.changeset/wise-places-invent.md deleted file mode 100644 index 1a9d8eea67..0000000000 --- a/.changeset/wise-places-invent.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Documentation improvements: Added testable JSON examples with $schema declarations to formats.mdx, consolidated list_creative_formats docs, and split preview_creative.mdx into core reference and advanced guide for better readability. diff --git a/.changeset/wise-tigers-lose.md b/.changeset/wise-tigers-lose.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/wise-tigers-lose.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/witty-teeth-live.md b/.changeset/witty-teeth-live.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/witty-teeth-live.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/yellow-deer-brush.md b/.changeset/yellow-deer-brush.md new file mode 100644 index 0000000000..19e5573f43 --- /dev/null +++ b/.changeset/yellow-deer-brush.md @@ -0,0 +1,4 @@ +--- +--- + +Internal changes only - no protocol impact diff --git a/.changeset/yellow-ghosts-appear.md b/.changeset/yellow-ghosts-appear.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/yellow-ghosts-appear.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/yellow-knives-warn.md b/.changeset/yellow-knives-warn.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/yellow-knives-warn.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/yellow-llamas-lie.md b/.changeset/yellow-llamas-lie.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/yellow-llamas-lie.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/young-baths-kiss.md b/.changeset/young-baths-kiss.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/young-baths-kiss.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/young-masks-care.md b/.changeset/young-masks-care.md deleted file mode 100644 index a845151cc8..0000000000 --- a/.changeset/young-masks-care.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/yummy-areas-bet.md b/.changeset/yummy-areas-bet.md deleted file mode 100644 index 99bd059314..0000000000 --- a/.changeset/yummy-areas-bet.md +++ /dev/null @@ -1,9 +0,0 @@ ---- ---- - -Add regional chapters and industry event presence features: -- User location tracking (city, country) for chapter matching -- Event groups (committee_type: 'event') linked to industry events -- Slack channel auto-sync: join channel = join group -- Admin UI for event groups and chapters -- Addie tools for member-driven chapter creation diff --git a/.github/workflows/broken-links.yml b/.github/workflows/broken-links.yml index 821bb20183..fed80be4bf 100644 --- a/.github/workflows/broken-links.yml +++ b/.github/workflows/broken-links.yml @@ -2,9 +2,9 @@ name: Check for Broken Links on: push: - branches: [ main, develop ] + branches: [ main, develop, '2.6.x' ] pull_request: - branches: [ main, develop ] + branches: [ main, develop, '2.6.x' ] workflow_run: workflows: ["Sync Versioned Docs"] types: @@ -32,8 +32,16 @@ jobs: - name: Install dependencies run: npm ci + - name: Exclude versioned docs from broken links check + run: rm -rf v2.6-rc + - name: Check for broken links in docs (v2.5) - run: npx mintlify@latest broken-links + run: | + # Temporarily remove v2.6-rc docs which have WIP governance links + # These will be fixed when governance section is complete + rm -rf v2.6-rc + npx mintlify@latest broken-links + git checkout v2.6-rc - name: Check README links run: npx markdown-link-check README.md --config .markdown-link-check.json diff --git a/.github/workflows/changeset-check.yml b/.github/workflows/changeset-check.yml index 346ed6202c..267de5f1f6 100644 --- a/.github/workflows/changeset-check.yml +++ b/.github/workflows/changeset-check.yml @@ -2,7 +2,7 @@ name: Changeset Check on: pull_request: - branches: [main] + branches: [main, '2.6.x'] jobs: check: diff --git a/.github/workflows/check-testable-snippets.yml b/.github/workflows/check-testable-snippets.yml index e3ef8c2785..f28614b7da 100644 --- a/.github/workflows/check-testable-snippets.yml +++ b/.github/workflows/check-testable-snippets.yml @@ -2,6 +2,7 @@ name: Check Testable Snippets on: pull_request: + branches: [main, '2.6.x'] paths: - 'docs/**/*.md' - 'docs/**/*.mdx' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c5665ce6d3..176da7a247 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - '2.6.x' concurrency: ${{ github.workflow }}-${{ github.ref }} diff --git a/.github/workflows/schema-validation.yml b/.github/workflows/schema-validation.yml index 7d772503ff..a599e1adb5 100644 --- a/.github/workflows/schema-validation.yml +++ b/.github/workflows/schema-validation.yml @@ -2,9 +2,9 @@ name: JSON Schema Validation on: push: - branches: [ main, develop ] + branches: [ main, develop, '2.6.x' ] pull_request: - branches: [ main, develop ] + branches: [ main, develop, '2.6.x' ] jobs: schema-validation: diff --git a/.github/workflows/sync-versioned-docs.yml b/.github/workflows/sync-versioned-docs.yml index 5295000d84..2c32ebb41f 100644 --- a/.github/workflows/sync-versioned-docs.yml +++ b/.github/workflows/sync-versioned-docs.yml @@ -39,7 +39,7 @@ jobs: if git ls-tree -d origin/2.6.x -- dist/schemas/2.6.0 > /dev/null 2>&1; then # Remove existing 2.6.0 schemas to ensure clean sync rm -rf dist/schemas/2.6.0 - + # Extract dist/schemas/2.6.0 folder from 2.6.x branch git archive origin/2.6.x -- dist/schemas/2.6.0 | tar -x echo "Synced dist/schemas/2.6.0 from 2.6.x branch" @@ -57,7 +57,7 @@ jobs: This PR syncs from the 2.6.x branch: - Documentation to `v2.6-rc/docs/` - Schemas to `dist/schemas/2.6.0/` (if available) - + Auto-generated by the sync-versioned-docs workflow. branch: auto/sync-v2.6-rc delete-branch: true diff --git a/.husky/pre-push b/.husky/pre-push index 29d47a2d34..b39a618810 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -8,10 +8,15 @@ npm run verify-version-sync echo "🔍 Validating Mintlify documentation..." # Check for broken internal links -npx --yes mintlify@latest broken-links || { +# Temporarily remove v2.6-rc docs which have WIP governance links +rm -rf v2.6-rc +npx --yes mintlify@latest broken-links +BROKEN_LINKS_EXIT=$? +git checkout v2.6-rc +if [ $BROKEN_LINKS_EXIT -ne 0 ]; then echo "❌ Mintlify broken links check failed. Please fix broken links before pushing." exit 1 -} +fi # Check for accessibility issues (warn only, don't fail) npx --yes mintlify@latest a11y || { diff --git a/CHANGELOG.md b/CHANGELOG.md index 7093223e02..39b2f0d568 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,91 @@ # Changelog +## 2.6.0 + +### Minor Changes + +- Add unified `assets` field to format schema for better asset discovery + + **Schema Changes:** + + - **format.json**: Add new `assets` array field that includes both required and optional assets + - **format.json**: Deprecate `assets_required` (still supported for backward compatibility) + + **Rationale:** + + Previously, buyers and AI agents could only see required assets via `assets_required`. There was no way to discover optional assets that enhance creatives (companion banners, third-party tracking pixels, etc.). + + Since each asset already has a `required` boolean field, we introduced a unified `assets` array where: + - `required: true` - Asset MUST be provided for a valid creative + - `required: false` - Asset is optional, enhances the creative when provided + + This enables: + - **Full asset discovery**: Buyers and AI agents can see ALL assets a format supports + - **Richer creatives**: Optional assets like impression trackers can now be discovered and used + - **Cleaner schema**: Single array instead of two separate arrays + + **Example:** + + ```json + { + "format_id": { "agent_url": "https://creative.adcontextprotocol.org", "id": "video_30s" }, + "assets": [ + { "item_type": "individual", "asset_id": "video_file", "asset_type": "video", "required": true }, + { "item_type": "individual", "asset_id": "end_card", "asset_type": "image", "required": false }, + { "item_type": "individual", "asset_id": "impression_tracker", "asset_type": "url", "required": false } + ] + } + ``` + + **Migration:** Non-breaking change. `assets_required` is deprecated but still supported. New implementations should use `assets`. + +## 2.5.3 + +### Patch Changes + +- 309a880: Allow additional properties in all JSON schemas for forward compatibility + + Changes all schemas from `"additionalProperties": false` to `"additionalProperties": true`. This enables clients running older schema versions to accept responses from servers with newer schemas without breaking validation - a standard practice for protocol evolution in distributed systems. + +- 5d0ce75: Add explicit type definition to error.json details property + + The `details` property in core/error.json now explicitly declares `"type": "object"` and `"additionalProperties": true`, consistent with other error details definitions in the codebase. This addresses issue #343 where the data type was unspecified. + +- cdcd70f: Fix migration 151 to delete duplicates before updating Slack IDs to WorkOS IDs +- 39abf79: Add missing fields to package request schemas for consistency with core/package.json. + + **Schema Changes:** + + - `media-buy/package-request.json`: Added `impressions` and `paused` fields + - `media-buy/update-media-buy-request.json`: Added `impressions` field to package updates + + **Details:** + + - `impressions`: Impression goal for the package (optional, minimum: 0) + - `paused`: Create package in paused state (optional, default: false) + + These fields were defined in `core/package.json` but missing from the request schemas, making it impossible to set impression goals or initial paused state when creating/updating media buys. + + **Documentation:** + + - Updated `create_media_buy` task reference with new package parameters + - Updated `update_media_buy` task reference with impressions parameter + +- fa68588: fix: display Slack profile name for chapter leaders without WorkOS accounts + + Leaders added via Slack ID that haven't linked their WorkOS account now display + their Slack profile name (real_name or display_name) instead of the raw Slack + user ID (e.g., U09BEKNJ3GB). + + The getLeaders and getLeadersBatch queries now include slack_user_mappings as an + additional name source in the COALESCE chain. + +- 9315247: Release schemas with `additionalProperties: true` for forward compatibility + + This releases `dist/schemas/2.5.2/` containing the relaxed schema validation + introduced in #646. Clients can now safely ignore unknown fields when parsing + API responses, allowing the API to evolve without breaking existing integrations. + ## 2.5.2 ### Patch Changes diff --git a/dist/schemas/2.5.3/adagents.json b/dist/schemas/2.5.3/adagents.json new file mode 100644 index 0000000000..f36134db23 --- /dev/null +++ b/dist/schemas/2.5.3/adagents.json @@ -0,0 +1,494 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "/schemas/2.5.3/adagents.json", + "title": "Authorized Sales Agents", + "description": "Declaration of authorized sales agents for advertising inventory. Hosted at /.well-known/adagents.json on publisher domains. Can either contain the full structure inline or reference an authoritative URL.", + "oneOf": [ + { + "type": "object", + "description": "URL reference variant - points to the authoritative location of the adagents.json file", + "properties": { + "$schema": { + "type": "string", + "description": "JSON Schema identifier for this adagents.json file" + }, + "authoritative_location": { + "type": "string", + "format": "uri", + "pattern": "^https://", + "description": "HTTPS URL of the authoritative adagents.json file. When present, this file is a reference and the authoritative location contains the actual agent authorization data." + }, + "last_updated": { + "type": "string", + "format": "date-time", + "description": "ISO 8601 timestamp indicating when this reference was last updated" + } + }, + "required": [ + "authoritative_location" + ], + "additionalProperties": true + }, + { + "type": "object", + "description": "Inline structure variant - contains full agent authorization data", + "properties": { + "$schema": { + "type": "string", + "description": "JSON Schema identifier for this adagents.json file" + }, + "contact": { + "type": "object", + "description": "Contact information for the entity managing this adagents.json file (may be publisher or third-party operator)", + "properties": { + "name": { + "type": "string", + "description": "Name of the entity managing this file (e.g., 'Meta Advertising Operations', 'Clear Channel Digital')", + "minLength": 1, + "maxLength": 255 + }, + "email": { + "type": "string", + "format": "email", + "description": "Contact email for questions or issues with this authorization file", + "minLength": 1, + "maxLength": 255 + }, + "domain": { + "type": "string", + "description": "Primary domain of the entity managing this file", + "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$" + }, + "seller_id": { + "type": "string", + "description": "Seller ID from IAB Tech Lab sellers.json (if applicable)", + "minLength": 1, + "maxLength": 255 + }, + "tag_id": { + "type": "string", + "description": "TAG Certified Against Fraud ID for verification (if applicable)", + "minLength": 1, + "maxLength": 100 + } + }, + "required": [ + "name" + ], + "additionalProperties": true + }, + "properties": { + "type": "array", + "description": "Array of all properties covered by this adagents.json file. Defines the canonical property list that authorized agents reference.", + "items": { + "$ref": "/schemas/2.5.3/core/property.json" + }, + "minItems": 1 + }, + "tags": { + "type": "object", + "description": "Metadata for each tag referenced by properties. Provides human-readable context for property tag values.", + "additionalProperties": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Human-readable name for this tag" + }, + "description": { + "type": "string", + "description": "Description of what this tag represents" + } + }, + "required": [ + "name", + "description" + ], + "additionalProperties": true + } + }, + "authorized_agents": { + "type": "array", + "description": "Array of sales agents authorized to sell inventory for properties in this file", + "items": { + "oneOf": [ + { + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri", + "description": "The authorized agent's API endpoint URL" + }, + "authorized_for": { + "type": "string", + "description": "Human-readable description of what this agent is authorized to sell", + "minLength": 1, + "maxLength": 500 + }, + "authorization_type": { + "type": "string", + "const": "property_ids", + "description": "Discriminator indicating authorization by specific property IDs" + }, + "property_ids": { + "type": "array", + "description": "Property IDs this agent is authorized for. Resolved against the top-level properties array in this file", + "items": { + "$ref": "/schemas/2.5.3/core/property-id.json" + }, + "minItems": 1 + } + }, + "required": [ + "url", + "authorized_for", + "authorization_type", + "property_ids" + ], + "additionalProperties": true + }, + { + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri", + "description": "The authorized agent's API endpoint URL" + }, + "authorized_for": { + "type": "string", + "description": "Human-readable description of what this agent is authorized to sell", + "minLength": 1, + "maxLength": 500 + }, + "authorization_type": { + "type": "string", + "const": "property_tags", + "description": "Discriminator indicating authorization by property tags" + }, + "property_tags": { + "type": "array", + "description": "Tags identifying which properties this agent is authorized for. Resolved against the top-level properties array in this file using tag matching", + "items": { + "$ref": "/schemas/2.5.3/core/property-tag.json" + }, + "minItems": 1 + } + }, + "required": [ + "url", + "authorized_for", + "authorization_type", + "property_tags" + ], + "additionalProperties": true + }, + { + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri", + "description": "The authorized agent's API endpoint URL" + }, + "authorized_for": { + "type": "string", + "description": "Human-readable description of what this agent is authorized to sell", + "minLength": 1, + "maxLength": 500 + }, + "authorization_type": { + "type": "string", + "const": "inline_properties", + "description": "Discriminator indicating authorization by inline property definitions" + }, + "properties": { + "type": "array", + "description": "Specific properties this agent is authorized for (alternative to property_ids/property_tags)", + "items": { + "$ref": "/schemas/2.5.3/core/property.json" + }, + "minItems": 1 + } + }, + "required": [ + "url", + "authorized_for", + "authorization_type", + "properties" + ], + "additionalProperties": true + }, + { + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri", + "description": "The authorized agent's API endpoint URL" + }, + "authorized_for": { + "type": "string", + "description": "Human-readable description of what this agent is authorized to sell", + "minLength": 1, + "maxLength": 500 + }, + "authorization_type": { + "type": "string", + "const": "publisher_properties", + "description": "Discriminator indicating authorization for properties from other publisher domains" + }, + "publisher_properties": { + "type": "array", + "description": "Properties from other publisher domains this agent is authorized for. Each entry specifies a publisher domain and which of their properties this agent can sell", + "items": { + "$ref": "/schemas/2.5.3/core/publisher-property-selector.json" + }, + "minItems": 1 + } + }, + "required": [ + "url", + "authorized_for", + "authorization_type", + "publisher_properties" + ], + "additionalProperties": true + } + ] + }, + "minItems": 1 + }, + "last_updated": { + "type": "string", + "format": "date-time", + "description": "ISO 8601 timestamp indicating when this file was last updated" + } + }, + "required": [ + "authorized_agents" + ], + "additionalProperties": true + } + ], + "examples": [ + { + "$schema": "/schemas/2.5.3/adagents.json", + "authoritative_location": "https://cdn.example.com/adagents/v2/adagents.json", + "last_updated": "2025-01-15T10:00:00Z" + }, + { + "$schema": "/schemas/2.5.3/adagents.json", + "properties": [ + { + "property_type": "website", + "name": "Example Site", + "identifiers": [ + { + "type": "domain", + "value": "example.com" + } + ], + "publisher_domain": "example.com" + } + ], + "authorized_agents": [ + { + "url": "https://agent.example.com", + "authorized_for": "Official sales agent", + "authorization_type": "property_tags", + "property_tags": [ + "all" + ] + } + ], + "tags": { + "all": { + "name": "All Properties", + "description": "All properties in this file" + } + }, + "last_updated": "2025-01-10T12:00:00Z" + }, + { + "$schema": "/schemas/2.5.3/adagents.json", + "contact": { + "name": "Meta Advertising Operations", + "email": "adops@meta.com", + "domain": "meta.com", + "seller_id": "pub-meta-12345", + "tag_id": "12345" + }, + "properties": [ + { + "property_type": "mobile_app", + "name": "Instagram", + "identifiers": [ + { + "type": "ios_bundle", + "value": "com.burbn.instagram" + }, + { + "type": "android_package", + "value": "com.instagram.android" + } + ], + "tags": [ + "meta_network", + "social_media" + ], + "publisher_domain": "instagram.com" + }, + { + "property_type": "mobile_app", + "name": "Facebook", + "identifiers": [ + { + "type": "ios_bundle", + "value": "com.facebook.Facebook" + }, + { + "type": "android_package", + "value": "com.facebook.katana" + } + ], + "tags": [ + "meta_network", + "social_media" + ], + "publisher_domain": "facebook.com" + }, + { + "property_type": "mobile_app", + "name": "WhatsApp", + "identifiers": [ + { + "type": "ios_bundle", + "value": "net.whatsapp.WhatsApp" + }, + { + "type": "android_package", + "value": "com.whatsapp" + } + ], + "tags": [ + "meta_network", + "messaging" + ], + "publisher_domain": "whatsapp.com" + } + ], + "tags": { + "meta_network": { + "name": "Meta Network", + "description": "All Meta-owned properties" + }, + "social_media": { + "name": "Social Media Apps", + "description": "Social networking applications" + }, + "messaging": { + "name": "Messaging Apps", + "description": "Messaging and communication apps" + } + }, + "authorized_agents": [ + { + "url": "https://meta-ads.com", + "authorized_for": "All Meta properties", + "authorization_type": "property_tags", + "property_tags": [ + "meta_network" + ] + } + ], + "last_updated": "2025-01-10T15:30:00Z" + }, + { + "$schema": "/schemas/2.5.3/adagents.json", + "contact": { + "name": "Tumblr Advertising" + }, + "properties": [ + { + "property_type": "website", + "name": "Tumblr Corporate", + "identifiers": [ + { + "type": "domain", + "value": "tumblr.com" + } + ], + "tags": [ + "corporate" + ], + "publisher_domain": "tumblr.com" + } + ], + "tags": { + "corporate": { + "name": "Corporate Properties", + "description": "Tumblr-owned corporate properties (not user blogs)" + } + }, + "authorized_agents": [ + { + "url": "https://tumblr-sales.com", + "authorized_for": "Tumblr corporate properties only", + "authorization_type": "property_tags", + "property_tags": [ + "corporate" + ] + } + ], + "last_updated": "2025-01-10T16:00:00Z" + }, + { + "$schema": "/schemas/2.5.3/adagents.json", + "contact": { + "name": "Example Third-Party Sales Agent", + "email": "sales@agent.example", + "domain": "agent.example" + }, + "authorized_agents": [ + { + "url": "https://agent.example/api", + "authorized_for": "CNN CTV properties via publisher authorization", + "authorization_type": "publisher_properties", + "publisher_properties": [ + { + "publisher_domain": "cnn.com", + "selection_type": "by_id", + "property_ids": [ + "cnn_ctv_app" + ] + } + ] + }, + { + "url": "https://agent.example/api", + "authorized_for": "All CTV properties from multiple publishers", + "authorization_type": "publisher_properties", + "publisher_properties": [ + { + "publisher_domain": "cnn.com", + "selection_type": "by_tag", + "property_tags": [ + "ctv" + ] + }, + { + "publisher_domain": "espn.com", + "selection_type": "by_tag", + "property_tags": [ + "ctv" + ] + } + ] + } + ], + "last_updated": "2025-01-10T17:00:00Z" + } + ] +} diff --git a/dist/schemas/2.5.3/bundled/media-buy/build-creative-request.json b/dist/schemas/2.5.3/bundled/media-buy/build-creative-request.json new file mode 100644 index 0000000000..f915a27362 --- /dev/null +++ b/dist/schemas/2.5.3/bundled/media-buy/build-creative-request.json @@ -0,0 +1,1349 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "/schemas/2.5.3/bundled/media-buy/build-creative-request.json", + "title": "Build Creative Request", + "description": "Request to transform or generate a creative manifest. Takes a source manifest (which may be minimal for pure generation) and produces a target manifest in the specified format. The source manifest should include all assets required by the target format (e.g., promoted_offerings for generative formats).", + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "Natural language instructions for the transformation or generation. For pure generation, this is the creative brief. For transformation, this provides guidance on how to adapt the creative." + }, + "creative_manifest": { + "title": "Creative Manifest", + "description": "Creative manifest to transform or generate from. For pure generation, this should include the target format_id and any required input assets (e.g., promoted_offerings for generative formats). For transformation (e.g., resizing, reformatting), this is the complete creative to adapt.", + "type": "object", + "properties": { + "format_id": { + "title": "Format ID", + "description": "Format identifier this manifest is for. Can be a template format (id only) or a deterministic format (id + dimensions/duration). For dimension-specific creatives, include width/height/unit in the format_id to create a unique identifier (e.g., {id: 'display_static', width: 300, height: 250, unit: 'px'}).", + "type": "object", + "properties": { + "agent_url": { + "type": "string", + "format": "uri", + "description": "URL of the agent that defines this format (e.g., 'https://creatives.adcontextprotocol.org' for standard formats, or 'https://publisher.com/.well-known/adcp/sales' for custom formats)" + }, + "id": { + "type": "string", + "pattern": "^[a-zA-Z0-9_-]+$", + "description": "Format identifier within the agent's namespace (e.g., 'display_static', 'video_hosted', 'audio_standard'). When used alone, references a template format. When combined with dimension/duration fields, creates a parameterized format ID for a specific variant." + }, + "width": { + "type": "integer", + "minimum": 1, + "description": "Width in pixels for visual formats. When specified, height must also be specified. Both fields together create a parameterized format ID for dimension-specific variants." + }, + "height": { + "type": "integer", + "minimum": 1, + "description": "Height in pixels for visual formats. When specified, width must also be specified. Both fields together create a parameterized format ID for dimension-specific variants." + }, + "duration_ms": { + "type": "number", + "minimum": 1, + "description": "Duration in milliseconds for time-based formats (video, audio). When specified, creates a parameterized format ID. Omit to reference a template format without parameters." + } + }, + "required": [ + "agent_url", + "id" + ], + "additionalProperties": true, + "dependencies": { + "width": [ + "height" + ], + "height": [ + "width" + ] + } + }, + "promoted_offering": { + "type": "string", + "description": "Product name or offering being advertised. Maps to promoted_offerings in create_media_buy request to associate creative with the product being promoted." + }, + "assets": { + "type": "object", + "description": "Map of asset IDs to actual asset content. Each key MUST match an asset_id from the format's assets_required array (e.g., 'banner_image', 'clickthrough_url', 'video_file', 'vast_tag'). The asset_id is the technical identifier used to match assets to format requirements.\n\nIMPORTANT: Creative manifest validation MUST be performed in the context of the format specification. The format defines what type each asset_id should be, which eliminates any validation ambiguity.", + "patternProperties": { + "^[a-z0-9_]+$": { + "oneOf": [ + { + "title": "Image Asset", + "description": "Image asset with URL and dimensions", + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri", + "description": "URL to the image asset" + }, + "width": { + "type": "integer", + "minimum": 1, + "description": "Width in pixels" + }, + "height": { + "type": "integer", + "minimum": 1, + "description": "Height in pixels" + }, + "format": { + "type": "string", + "description": "Image file format (jpg, png, gif, webp, etc.)" + }, + "alt_text": { + "type": "string", + "description": "Alternative text for accessibility" + } + }, + "required": [ + "url", + "width", + "height" + ], + "additionalProperties": true + }, + { + "title": "Video Asset", + "description": "Video asset with URL and specifications", + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri", + "description": "URL to the video asset" + }, + "width": { + "type": "integer", + "minimum": 1, + "description": "Width in pixels" + }, + "height": { + "type": "integer", + "minimum": 1, + "description": "Height in pixels" + }, + "duration_ms": { + "type": "integer", + "description": "Video duration in milliseconds", + "minimum": 1 + }, + "format": { + "type": "string", + "description": "Video file format (mp4, webm, mov, etc.)" + }, + "bitrate_kbps": { + "type": "integer", + "description": "Video bitrate in kilobits per second", + "minimum": 1 + } + }, + "required": [ + "url", + "width", + "height" + ], + "additionalProperties": true + }, + { + "title": "Audio Asset", + "description": "Audio asset with URL and specifications", + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri", + "description": "URL to the audio asset" + }, + "duration_ms": { + "type": "integer", + "description": "Audio duration in milliseconds", + "minimum": 0 + }, + "format": { + "type": "string", + "description": "Audio file format (mp3, wav, aac, etc.)" + }, + "bitrate_kbps": { + "type": "integer", + "description": "Audio bitrate in kilobits per second", + "minimum": 1 + } + }, + "required": [ + "url" + ], + "additionalProperties": true + }, + { + "title": "VAST Asset", + "description": "VAST (Video Ad Serving Template) tag for third-party video ad serving", + "oneOf": [ + { + "type": "object", + "properties": { + "delivery_type": { + "type": "string", + "const": "url", + "description": "Discriminator indicating VAST is delivered via URL endpoint" + }, + "url": { + "type": "string", + "format": "uri", + "description": "URL endpoint that returns VAST XML" + }, + "vast_version": { + "title": "VAST Version", + "description": "VAST specification version", + "type": "string", + "enum": [ + "2.0", + "3.0", + "4.0", + "4.1", + "4.2" + ] + }, + "vpaid_enabled": { + "type": "boolean", + "description": "Whether VPAID (Video Player-Ad Interface Definition) is supported" + }, + "duration_ms": { + "type": "integer", + "description": "Expected video duration in milliseconds (if known)", + "minimum": 0 + }, + "tracking_events": { + "type": "array", + "items": { + "title": "VAST Tracking Event", + "description": "Standard VAST tracking events for video ad playback and interaction", + "type": "string", + "enum": [ + "start", + "firstQuartile", + "midpoint", + "thirdQuartile", + "complete", + "impression", + "click", + "pause", + "resume", + "skip", + "mute", + "unmute", + "fullscreen", + "exitFullscreen", + "playerExpand", + "playerCollapse" + ] + }, + "description": "Tracking events supported by this VAST tag" + } + }, + "required": [ + "delivery_type", + "url" + ], + "additionalProperties": true + }, + { + "type": "object", + "properties": { + "delivery_type": { + "type": "string", + "const": "inline", + "description": "Discriminator indicating VAST is delivered as inline XML content" + }, + "content": { + "type": "string", + "description": "Inline VAST XML content" + }, + "vast_version": { + "title": "VAST Version", + "description": "VAST specification version", + "type": "string", + "enum": [ + "2.0", + "3.0", + "4.0", + "4.1", + "4.2" + ] + }, + "vpaid_enabled": { + "type": "boolean", + "description": "Whether VPAID (Video Player-Ad Interface Definition) is supported" + }, + "duration_ms": { + "type": "integer", + "description": "Expected video duration in milliseconds (if known)", + "minimum": 0 + }, + "tracking_events": { + "type": "array", + "items": { + "title": "VAST Tracking Event", + "description": "Standard VAST tracking events for video ad playback and interaction", + "type": "string", + "enum": [ + "start", + "firstQuartile", + "midpoint", + "thirdQuartile", + "complete", + "impression", + "click", + "pause", + "resume", + "skip", + "mute", + "unmute", + "fullscreen", + "exitFullscreen", + "playerExpand", + "playerCollapse" + ] + }, + "description": "Tracking events supported by this VAST tag" + } + }, + "required": [ + "delivery_type", + "content" + ], + "additionalProperties": true + } + ] + }, + { + "title": "Text Asset", + "description": "Text content asset", + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "Text content" + }, + "language": { + "type": "string", + "description": "Language code (e.g., 'en', 'es', 'fr')" + } + }, + "required": [ + "content" + ], + "additionalProperties": true + }, + { + "title": "URL Asset", + "description": "URL reference asset", + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri", + "description": "URL reference" + }, + "url_type": { + "title": "URL Asset Type", + "description": "Type of URL asset: 'clickthrough' for user click destination (landing page), 'tracker_pixel' for impression/event tracking via HTTP request (fires GET, expects pixel/204 response), 'tracker_script' for measurement SDKs that must load as + + + + + +
+ +
+ Loading... +
+ + + + + + diff --git a/server/public/admin-meetings.html b/server/public/admin-meetings.html index f6aa4e2009..3460bbd0f7 100644 --- a/server/public/admin-meetings.html +++ b/server/public/admin-meetings.html @@ -396,6 +396,7 @@

Meeting Details

@@ -462,7 +463,8 @@

Meeting Details

const response = await fetch(url); if (!response.ok) throw new Error('Failed to load meetings'); - meetings = await response.json(); + const data = await response.json(); + meetings = data.meetings || []; renderMeetings(); document.getElementById('loading').style.display = 'none'; @@ -478,15 +480,20 @@

Meeting Details

async function loadSeries() { try { const groupId = document.getElementById('groupFilter').value; - let url = '/api/admin/meetings/series'; - if (groupId) { - url += `?working_group_id=${groupId}`; + + // Series endpoint requires a working group filter + if (!groupId) { + series = []; + renderSeries(); + return; } + const url = `/api/admin/meetings/series?working_group_id=${groupId}`; const response = await fetch(url); if (!response.ok) throw new Error('Failed to load series'); - series = await response.json(); + const data = await response.json(); + series = data.series || []; renderSeries(); } catch (error) { console.error('Error loading series:', error); @@ -633,56 +640,112 @@

${escapeHtml(s.title)}

document.getElementById('meetingModal').style.display = 'flex'; } + // Edit existing meeting + function editMeeting() { + if (!viewingMeeting) return; + + const m = viewingMeeting; + const date = new Date(m.start_time); + const tz = m.timezone || 'America/New_York'; + + // Format date/time in the meeting's timezone for editing + const dateFormatter = new Intl.DateTimeFormat('en-CA', { timeZone: tz, year: 'numeric', month: '2-digit', day: '2-digit' }); + const timeFormatter = new Intl.DateTimeFormat('en-US', { timeZone: tz, hour: '2-digit', minute: '2-digit', hour12: false }); + const formattedDate = dateFormatter.format(date); // YYYY-MM-DD format + const formattedTime = timeFormatter.format(date).replace(/^24:/, '00:'); // HH:MM format + + document.getElementById('modalTitle').textContent = 'Edit Meeting'; + document.getElementById('meetingId').value = m.id; + document.getElementById('workingGroupId').value = m.working_group_id; + document.getElementById('title').value = m.title; + document.getElementById('meetingDate').value = formattedDate; + document.getElementById('meetingTime').value = formattedTime; + document.getElementById('timezone').value = tz; + document.getElementById('description').value = m.description || m.agenda || ''; + + // Calculate duration from start_time and end_time + if (m.end_time) { + const endDate = new Date(m.end_time); + const durationMs = endDate.getTime() - date.getTime(); + document.getElementById('duration').value = Math.round(durationMs / 60000); + } else { + document.getElementById('duration').value = 60; + } + + // Hide invite mode for edits (can't change invites after creation) + document.getElementById('inviteMode').parentElement.style.display = 'none'; + + document.getElementById('saveBtn').textContent = 'Save Changes'; + closeDetailsModal(); + document.getElementById('meetingModal').style.display = 'flex'; + } + function closeModal() { document.getElementById('meetingModal').style.display = 'none'; + // Reset invite mode visibility + document.getElementById('inviteMode').parentElement.style.display = 'block'; + document.getElementById('saveBtn').textContent = 'Schedule'; } - // Save meeting + // Save meeting (create or update) async function saveMeeting(event) { event.preventDefault(); + const meetingId = document.getElementById('meetingId').value; + const isUpdate = !!meetingId; + const date = document.getElementById('meetingDate').value; const time = document.getElementById('meetingTime').value; const timezone = document.getElementById('timezone').value; + const durationMinutes = parseInt(document.getElementById('duration').value) || 60; // Construct ISO datetime const startTime = new Date(`${date}T${time}`); + const endTime = new Date(startTime.getTime() + durationMinutes * 60000); const data = { - working_group_id: document.getElementById('workingGroupId').value, title: document.getElementById('title').value.trim(), description: document.getElementById('description').value.trim() || null, start_time: startTime.toISOString(), - duration_minutes: parseInt(document.getElementById('duration').value) || 60, + end_time: endTime.toISOString(), timezone: timezone, - invite_mode: document.getElementById('inviteMode').value, }; + // Only include these fields for new meetings + if (!isUpdate) { + data.working_group_id = document.getElementById('workingGroupId').value; + data.duration_minutes = durationMinutes; + data.invite_mode = document.getElementById('inviteMode').value; + } + const saveBtn = document.getElementById('saveBtn'); saveBtn.disabled = true; - saveBtn.textContent = 'Scheduling...'; + saveBtn.textContent = isUpdate ? 'Saving...' : 'Scheduling...'; try { - const response = await fetch('/api/admin/meetings', { - method: 'POST', + const url = isUpdate ? `/api/admin/meetings/${meetingId}` : '/api/admin/meetings'; + const method = isUpdate ? 'PUT' : 'POST'; + + const response = await fetch(url, { + method: method, headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); if (!response.ok) { const error = await response.json(); - throw new Error(error.message || 'Failed to schedule meeting'); + throw new Error(error.message || `Failed to ${isUpdate ? 'update' : 'schedule'} meeting`); } closeModal(); loadMeetings(); } catch (error) { - console.error('Error scheduling meeting:', error); - alert('Failed to schedule meeting: ' + error.message); + console.error(`Error ${isUpdate ? 'updating' : 'scheduling'} meeting:`, error); + alert(`Failed to ${isUpdate ? 'update' : 'schedule'} meeting: ` + error.message); } saveBtn.disabled = false; - saveBtn.textContent = 'Schedule'; + saveBtn.textContent = isUpdate ? 'Save Changes' : 'Schedule'; } // View meeting details @@ -691,7 +754,8 @@

${escapeHtml(s.title)}

const response = await fetch(`/api/admin/meetings/${id}`); if (!response.ok) throw new Error('Failed to load meeting'); - viewingMeeting = await response.json(); + const data = await response.json(); + viewingMeeting = { ...data.meeting, attendees: data.attendees }; const m = viewingMeeting; const group = workingGroups.find(g => g.id === m.working_group_id); const date = new Date(m.start_time); @@ -731,7 +795,10 @@

${escapeHtml(s.title)}

`; - document.getElementById('cancelMeetingBtn').style.display = m.status === 'scheduled' ? 'block' : 'none'; + // Only show Edit and Cancel buttons for scheduled meetings + const isScheduled = m.status === 'scheduled'; + document.getElementById('editMeetingBtn').style.display = isScheduled ? 'inline-block' : 'none'; + document.getElementById('cancelMeetingBtn').style.display = isScheduled ? 'inline-block' : 'none'; document.getElementById('detailsModal').style.display = 'flex'; } catch (error) { console.error('Error loading meeting:', error); @@ -785,6 +852,18 @@

${escapeHtml(s.title)}

async function init() { await loadWorkingGroups(); await loadMeetings(); + + // Auto-open schedule modal if requested via URL + const params = new URLSearchParams(window.location.search); + if (params.get('action') === 'schedule') { + showCreateModal(); + // Clear the action param to prevent re-triggering on refresh + params.delete('action'); + const newUrl = params.toString() + ? `${window.location.pathname}?${params.toString()}` + : window.location.pathname; + window.history.replaceState({}, '', newUrl); + } } init(); diff --git a/server/public/admin-settings.html b/server/public/admin-settings.html index d7b9e6ce67..e639b4a6e4 100644 --- a/server/public/admin-settings.html +++ b/server/public/admin-settings.html @@ -192,6 +192,32 @@

Billing Notifications Channel

+ +
+

Escalation Notifications Channel

+

+ Choose which Slack channel receives escalation notifications when Addie cannot fulfill a request. + This allows admins to be notified when users need human assistance. +

+ +
+ Loading... +
+ +
+
+ + + Select a channel where admins can see and respond to escalations. View escalations +
+ +
+
+ @@ -214,6 +240,7 @@

Billing Notifications Channel

currentSettings = await response.json(); updateCurrentChannelDisplay(); + updateCurrentEscalationChannelDisplay(); document.getElementById('loading').style.display = 'none'; document.getElementById('content').style.display = 'block'; @@ -229,7 +256,8 @@

Billing Notifications Channel

// Load Slack channels for picker async function loadSlackChannels() { - const select = document.getElementById('billingChannel'); + const billingSelect = document.getElementById('billingChannel'); + const escalationSelect = document.getElementById('escalationChannel'); try { const response = await fetch('/api/admin/settings/slack-channels'); @@ -241,24 +269,34 @@

Billing Notifications Channel

const data = await response.json(); slackChannels = data.channels; - // Build options - let html = ''; + // Build options for both dropdowns + let billingHtml = ''; + let escalationHtml = ''; + if (slackChannels.length === 0) { - html = ''; - select.innerHTML = html; - showStatusMessage('Addie is not in any private channels. Invite @Addie to your billing channel and refresh.', 'error'); + const emptyOption = ''; + billingSelect.innerHTML = emptyOption; + escalationSelect.innerHTML = emptyOption; + showStatusMessage('Addie is not in any private channels. Invite @Addie to your channels and refresh.', 'error'); } else { slackChannels.forEach(ch => { - const selected = currentSettings?.billing_channel?.channel_id === ch.id ? 'selected' : ''; - html += ``; + const billingSelected = currentSettings?.billing_channel?.channel_id === ch.id ? 'selected' : ''; + const escalationSelected = currentSettings?.escalation_channel?.channel_id === ch.id ? 'selected' : ''; + billingHtml += ``; + escalationHtml += ``; }); - select.innerHTML = html; - select.disabled = false; + billingSelect.innerHTML = billingHtml; + billingSelect.disabled = false; document.getElementById('saveBtn').disabled = false; + + escalationSelect.innerHTML = escalationHtml; + escalationSelect.disabled = false; + document.getElementById('saveEscalationBtn').disabled = false; } } catch (error) { console.error('Error loading Slack channels:', error); - select.innerHTML = ''; + billingSelect.innerHTML = ''; + escalationSelect.innerHTML = ''; showStatusMessage('Failed to load Slack channels: ' + error.message, 'error'); } } @@ -277,6 +315,20 @@

Billing Notifications Channel

} } + // Update the current escalation channel display + function updateCurrentEscalationChannelDisplay() { + const el = document.getElementById('currentEscalationChannel'); + const channel = currentSettings?.escalation_channel; + + if (channel?.channel_id && channel?.channel_name) { + el.className = 'current-value'; + el.innerHTML = `Current: #${escapeHtml(channel.channel_name)}`; + } else { + el.className = 'current-value not-set'; + el.innerHTML = 'Current: Not configured (escalation notifications disabled)'; + } + } + // Save billing channel async function saveBillingChannel() { const select = document.getElementById('billingChannel'); @@ -326,6 +378,55 @@

Billing Notifications Channel

} } + // Save escalation channel + async function saveEscalationChannel() { + const select = document.getElementById('escalationChannel'); + const saveBtn = document.getElementById('saveEscalationBtn'); + const channelId = select.value || null; + + // Find channel name + let channelName = null; + if (channelId) { + const channel = slackChannels.find(c => c.id === channelId); + channelName = channel?.name || null; + } + + saveBtn.disabled = true; + saveBtn.textContent = 'Saving...'; + + try { + const response = await fetch('/api/admin/settings/escalation-channel', { + method: 'PUT', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ channel_id: channelId, channel_name: channelName }), + }); + + if (!response.ok) { + const data = await response.json(); + throw new Error(data.message || 'Failed to save'); + } + + const data = await response.json(); + currentSettings.escalation_channel = data.escalation_channel; + updateCurrentEscalationChannelDisplay(); + + saveBtn.textContent = 'Saved!'; + saveBtn.classList.add('btn-success'); + showStatusMessage('Escalation channel updated successfully', 'success'); + + setTimeout(() => { + saveBtn.textContent = 'Save'; + saveBtn.classList.remove('btn-success'); + saveBtn.disabled = false; + }, 2000); + } catch (error) { + console.error('Error saving escalation channel:', error); + showStatusMessage('Failed to save: ' + error.message, 'error'); + saveBtn.textContent = 'Save'; + saveBtn.disabled = false; + } + } + // Status message helpers function showStatusMessage(message, type) { const el = document.getElementById('statusMessage'); diff --git a/server/public/admin-sidebar.js b/server/public/admin-sidebar.js index 3dc75dce5c..9f650fe630 100644 --- a/server/public/admin-sidebar.js +++ b/server/public/admin-sidebar.js @@ -46,6 +46,7 @@ { href: '/admin/agreements', label: 'Agreements', icon: '📋' }, { href: '/admin/email', label: 'Email', icon: '📧' }, { href: '/admin/addie', label: 'Addie', icon: '🤖' }, + { href: '/admin/escalations', label: 'Escalations', icon: '🚨' }, { href: '/admin/feeds', label: 'Industry Feeds', icon: '📰' }, { href: '/admin/notification-channels', label: 'Alert Channels', icon: '📢' }, { href: '/admin/api-keys', label: 'API Keys', icon: '🔑' }, diff --git a/server/public/admin-working-groups.html b/server/public/admin-working-groups.html index 31e81ad277..cbc53404da 100644 --- a/server/public/admin-working-groups.html +++ b/server/public/admin-working-groups.html @@ -788,6 +788,7 @@

${escapeHtml(group.name)}

+
diff --git a/server/public/dashboard.html b/server/public/dashboard.html index 26fbb00a38..93e1f81d5a 100644 --- a/server/public/dashboard.html +++ b/server/public/dashboard.html @@ -634,8 +634,64 @@

Tell Us About Your Organization

background: var(--color-gray-100); } + /* Setup alerts banner styles */ + .setup-alert { + background: var(--color-warning-50); + border: 1px solid var(--color-warning-200); + border-left: 4px solid var(--color-warning-500); + border-radius: var(--radius-md); + padding: var(--space-4); + margin-bottom: var(--space-4); + display: flex; + align-items: flex-start; + gap: var(--space-3); + } + .setup-alert-icon { + font-size: 18px; + line-height: 1; + flex-shrink: 0; + } + .setup-alert-content { + flex: 1; + min-width: 0; + } + .setup-alert-title { + font-weight: 600; + color: var(--color-warning-800); + margin: 0 0 2px 0; + font-size: 14px; + } + .setup-alert-message { + color: var(--color-warning-700); + margin: 0; + font-size: 13px; + } + .setup-alert-action { + flex-shrink: 0; + } + .setup-alert-action .btn { + font-size: 12px; + padding: 6px 12px; + } + .setup-alert-dismiss { + background: none; + border: none; + color: var(--color-warning-500); + cursor: pointer; + padding: 4px; + font-size: 16px; + line-height: 1; + opacity: 0.7; + } + .setup-alert-dismiss:hover { + opacity: 1; + } + + + + @@ -1289,6 +1345,9 @@

Unable to Load // Show member promo banner (e.g., for upcoming events) renderMemberPromoBanner(org); + + // Show setup alerts for incomplete profile items + renderSetupAlerts(org); } else { // Hide the small membership card and show CTA section membershipCard.style.display = 'none'; @@ -1578,6 +1637,125 @@

Join the Agentic Advertising Organization

// promoBanner.style.display = 'block'; } + // Render setup alerts for incomplete profile items (members only) + async function renderSetupAlerts(org) { + const setupAlerts = document.getElementById('setupAlerts'); + if (!setupAlerts) return; + + // Only show for active members + if (org.billing?.status !== 'active') { + setupAlerts.style.display = 'none'; + return; + } + + // Get dismissed alerts from session storage + const dismissedAlerts = JSON.parse(sessionStorage.getItem('dismissedSetupAlerts') || '[]'); + + // Fetch member profile to check for missing items + try { + const response = await fetch(`/api/member-profiles/org/${org.id}`); + if (!response.ok) { + setupAlerts.style.display = 'none'; + return; + } + + const profile = await response.json(); + const alerts = []; + + // Check for missing logo + if (!profile.logo_url && !dismissedAlerts.includes('missing-logo')) { + alerts.push({ + id: 'missing-logo', + icon: '🖼️', + title: 'Add Your Company Logo', + message: 'Upload a logo so your company appears in the member directory and on the homepage.', + actionLabel: 'Add Logo', + actionUrl: '/dashboard-settings#logo' + }); + } + + // Check for missing tagline + if (!profile.tagline && !dismissedAlerts.includes('missing-tagline')) { + alerts.push({ + id: 'missing-tagline', + icon: '✏️', + title: 'Add a Company Description', + message: 'Help others learn about your organization by adding a tagline.', + actionLabel: 'Add Description', + actionUrl: '/dashboard-settings#profile' + }); + } + + // Check for pending join requests (admins only) + try { + const pendingResponse = await fetch(`/api/organizations/${org.id}/join-requests`); + if (pendingResponse.ok) { + const pendingData = await pendingResponse.json(); + const pendingCount = pendingData.requests?.length || 0; + if (pendingCount > 0 && !dismissedAlerts.includes('pending-join-requests')) { + alerts.push({ + id: 'pending-join-requests', + icon: '👋', + title: `${pendingCount} Pending Join Request${pendingCount > 1 ? 's' : ''}`, + message: `${pendingCount} ${pendingCount > 1 ? 'people are' : 'person is'} waiting to join your team.`, + actionLabel: 'Review Requests', + actionUrl: `/team?org=${org.id}` + }); + } + } + } catch (e) { + // Ignore errors - user may not be admin + } + + // If no alerts, hide the container + if (alerts.length === 0) { + setupAlerts.style.display = 'none'; + return; + } + + // Render alerts + setupAlerts.innerHTML = alerts.map(alert => ` +
+
${alert.icon}
+
+

${escapeHtml(alert.title)}

+

${escapeHtml(alert.message)}

+
+
+ ${escapeHtml(alert.actionLabel)} +
+ +
+ `).join(''); + + setupAlerts.style.display = 'block'; + } catch (error) { + console.error('Error fetching member profile for setup alerts:', error); + setupAlerts.style.display = 'none'; + } + } + + // Dismiss a setup alert for the current session + function dismissSetupAlert(alertId) { + const dismissedAlerts = JSON.parse(sessionStorage.getItem('dismissedSetupAlerts') || '[]'); + if (!dismissedAlerts.includes(alertId)) { + dismissedAlerts.push(alertId); + sessionStorage.setItem('dismissedSetupAlerts', JSON.stringify(dismissedAlerts)); + } + + // Remove the alert from the DOM + const alertEl = document.querySelector(`.setup-alert[data-alert-id="${alertId}"]`); + if (alertEl) { + alertEl.remove(); + } + + // Hide container if no more alerts + const setupAlerts = document.getElementById('setupAlerts'); + if (setupAlerts && setupAlerts.children.length === 0) { + setupAlerts.style.display = 'none'; + } + } + // Load team count for status card async function loadTeamCount(orgId) { try { diff --git a/server/public/index.html b/server/public/index.html index 187c3a1a78..972063797a 100644 --- a/server/public/index.html +++ b/server/public/index.html @@ -409,6 +409,92 @@ gap: 1.5rem; } } + + /* Latest Posts Section */ + .latestPostsSection_AdCP { + padding: 4rem 0; + background: var(--ifm-color-emphasis-50, #f9fafb); + } + .latestPostsHeader_AdCP { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 2rem; + } + .latestPostsHeader_AdCP .sectionTitle_Ut5p { + margin-bottom: 0; + } + .viewAllLink_AdCP { + font-size: 0.95rem; + font-weight: 500; + color: var(--color-brand, #1a36b4); + text-decoration: none; + } + .viewAllLink_AdCP:hover { + text-decoration: underline; + } + .latestPostsGrid_AdCP { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.5rem; + } + .latestPostCard_AdCP { + background: white; + border-radius: 12px; + padding: 1.5rem; + box-shadow: 0 2px 8px rgba(0,0,0,0.06); + transition: all 0.2s ease; + border: 1px solid transparent; + display: flex; + flex-direction: column; + } + .latestPostCard_AdCP:hover { + border-color: var(--color-brand, #1a36b4); + box-shadow: 0 4px 16px rgba(26, 54, 180, 0.1); + transform: translateY(-2px); + } + .latestPostMeta_AdCP { + font-size: 0.8rem; + color: var(--ifm-color-emphasis-600); + margin-bottom: 0.75rem; + } + .latestPostTitle_AdCP { + font-size: 1.1rem; + font-weight: 600; + line-height: 1.4; + margin-bottom: 0.75rem; + color: var(--ifm-heading-color); + } + .latestPostTitle_AdCP a { + color: inherit; + text-decoration: none; + } + .latestPostTitle_AdCP a:hover { + color: var(--color-brand, #1a36b4); + } + .latestPostExcerpt_AdCP { + font-size: 0.9rem; + color: var(--ifm-color-emphasis-700); + line-height: 1.6; + flex-grow: 1; + } + .latestPostsLoading_AdCP, + .latestPostsEmpty_AdCP { + grid-column: 1 / -1; + text-align: center; + padding: 2rem; + color: var(--ifm-color-emphasis-600); + } + @media (max-width: 900px) { + .latestPostsGrid_AdCP { + grid-template-columns: 1fr; + } + .latestPostsHeader_AdCP { + flex-direction: column; + align-items: flex-start; + gap: 0.5rem; + } + } @@ -696,6 +782,23 @@

Join the community

+ +
+
+
+
+
+

The Latest

+ View all perspectives +
+
+
Loading...
+
+
+
+
+
+
@@ -717,5 +820,51 @@

Built in the open

+ + \ No newline at end of file diff --git a/server/public/nav.js b/server/public/nav.js index 82f4a9107d..24531f17c4 100644 --- a/server/public/nav.js +++ b/server/public/nav.js @@ -204,7 +204,7 @@