S
Knowledge Pack Files
SideButton Marketing Website Knowledge Pack Files
Browse the source files that power the SideButton Marketing Website MCP server knowledge pack.
Available free v1.0.3 Browser
$
sidebutton install sidebutton.com Prerequisites
- Authenticated session
- At least one online agent (owned); ideally one shared agent too
- Cookie consent dismissed
- NOTE: Settings changes are persistent — test carefully, restore original values after testing
Phase 1: Page Load & Structure
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 1.1 | Settings page loads | navigate to /portal/settings | H1 "Settings" visible |
| 1.2 | Tab bar | snapshot | 7 tabs visible: General, Agents, Assistant, Issue Tracking, Slack, Knowledge Packs, Logs |
| 1.3 | General tab active | snapshot | "General" tab has dark background by default |
| 1.4 | Sidebar active | snapshot | "Settings" nav link highlighted |
Phase 2: General Tab
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 2.1 | LLM Provider dropdown | snapshot | select with current value (e.g. "openai") |
| 2.2 | Provider options | click dropdown → snapshot | 3 options: OpenAI, Anthropic, OpenRouter |
| 2.3 | Model input | snapshot | Text input with current model value |
| 2.4 | API Key field | snapshot | Password input with placeholder "(configured -- enter new to change)" |
| 2.5 | API key status | snapshot | Green "API key is configured" text when key exists, or "Platform key active..." fallback |
| 2.6 | Effort Level toggles | snapshot | 3 buttons: Max, High, Medium — one has active styling |
| 2.7 | Effort hint text | snapshot | "Max / High = Opus, Medium = Sonnet..." explanatory text |
| 2.8 | Save button | snapshot | Orange button "Save" |
| 2.9 | Change effort level | click different effort button → snapshot | Button styling changes to show new selection |
| 2.10 | Save General settings | click Save → snapshot | Status text shows "Saving..." then "Saved" in green |
| 2.11 | Save persists | reload page → snapshot | Changed values still present after page reload |
| 2.12 | Restore original effort | click original effort button → Save | Restore to avoid side effects |
Phase 3: Agents Tab — Card Header
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 3.1 | Switch to Agents tab | click "Agents" → snapshot | Tab active, URL shows ?tab=agents, description text visible |
| 3.2 | Description text | snapshot | "Manage agent roles, entry paths, environment config, and download RDP shortcuts." |
| 3.3 | Agent card basics | snapshot | Agent avatar ("Set avatar" button), display name, hostname, status badge |
| 3.4 | Status badge | snapshot | One of: ONLINE (green) / BUSY (amber) / ERROR (red) / OFFLINE (gray) |
| 3.5 | Shared with text | snapshot | "Shared with N account(s)" span visible on owned agents |
| 3.6 | Role checkboxes (owned) | snapshot | SE, QA, SD, PM checkboxes visible on owned agent |
| 3.7 | Toggle role checkbox | click one role checkbox → snapshot | Outline flash confirms save; checkbox state toggles |
| 3.8 | Effort dropdown (owned) | snapshot | Select with Default/Max/High/Medium options |
| 3.9 | Change effort dropdown | select different value → snapshot | Border flash green confirms save |
| 3.10 | Shared agent card | snapshot (if shared agent exists) | Sky-blue accents, "shared" badge, role tags (read-only) |
Phase 4: Agents Tab — Rename Agent
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 4.1 | Rename button hidden by default | snapshot | No "Rename agent" button visible (opacity-0) |
| 4.2 | Rename button on hover | hover over agent card → snapshot | Pencil icon "Rename agent" button appears |
| 4.3 | Click rename | click "Rename agent" → snapshot | Name becomes editable inline text field; save (emerald) and cancel (slate) buttons appear |
| 4.4 | Cancel rename | click cancel button → snapshot | Name reverts to original; inline edit closes |
| 4.5 | Save rename | type new name → click save button → snapshot | Display name updates on card; hostname unchanged |
| 4.6 | Rename persists | reload page → snapshot | New display name still shown after reload |
| 4.7 | Restore original name | rename back to original → save | Avoid side effects |
Phase 5: Agents Tab — Avatar Picker
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 5.1 | Open avatar modal | click "Set avatar" button on agent card → snapshot | Modal opens with heading "Set Agent Avatar" and preset grid (10 avatars) |
| 5.2 | Preset avatars visible | snapshot | 10 preset images in grid layout |
| 5.3 | Select preset | click a preset avatar → snapshot | "Saved" status, avatar updates on card |
| 5.4 | Upload input visible | snapshot | File input for avatar upload |
| 5.5 | Remove Avatar button | snapshot | "Remove avatar (use default)" button visible |
| 5.6 | Remove avatar | click "Remove avatar (use default)" → snapshot | Avatar reverts to default SVG |
| 5.7 | Cancel button | snapshot | "Cancel" button visible in modal |
| 5.8 | Close modal | click "Cancel" or press Escape → snapshot | Modal closes, page returns to normal |
Phase 6: Agents Tab — RDP Download Modal
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 6.1 | Open RDP modal | click "RDP" button → snapshot | Modal with heading "Download RDP Shortcut", Display Mode, Resolution, Platform options |
| 6.2 | Display Mode options | snapshot | Fullscreen and Windowed radio buttons |
| 6.3 | Resolution options | snapshot | 1280x800, 1440x900 (default), 1920x1080 radio buttons |
| 6.4 | Fullscreen disables resolution | select Fullscreen → snapshot | Resolution options become disabled |
| 6.5 | Platform options | snapshot | Windows (default), macOS, Linux radio buttons |
| 6.6 | macOS hint | select macOS → snapshot | "Requires Microsoft Remote Desktop from App Store" shown |
| 6.7 | Linux hint | select Linux → snapshot | "Open with Remmina, xfreerdp..." shown |
| 6.8 | Save Credentials checkbox | snapshot | Checkbox #rdp-save-password with "Save credentials Embed password in RDP file" |
| 6.9 | Copy password button | snapshot | "Copy password" button visible |
| 6.10 | Copy password | click "Copy password" → verify | Password copied to clipboard |
| 6.11 | Cancel button | click "Cancel" → snapshot | Modal closes without downloading |
| 6.12 | Download RDP | click "Download" → verify | Browser initiates .rdp file download with agent name |
Phase 7: Agents Tab — Config Panel (Owned)
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 7.1 | Expand config panel | click chevron → snapshot | Entry Paths, Environment Variables, Save buttons, Danger Zone visible |
| 7.2 | Entry paths list | snapshot | At least one entry path with active checkbox, path input, label input |
| 7.3 | MCP JSON textarea | snapshot per path | Textarea for JSON config (may be empty) |
| 7.4 | Add entry path | click "+ Add Entry Path" → snapshot | New empty entry path row appears |
| 7.5 | Remove entry path | click Remove on added path → snapshot | Path row disappears |
| 7.6 | Environment variables | snapshot | Textarea with current env content |
| 7.7 | Save button (DB only) | snapshot | Slate "Save" button visible |
| 7.8 | Save & Apply button | snapshot | Orange "Save & Apply" button visible |
| 7.9 | Save config | click Save → snapshot | Status text shows success |
| 7.10 | Save & Apply | click Save & Apply → snapshot | Status shows success + "Applied at: {timestamp}" |
| 7.11 | Collapse config | click chevron → snapshot | Config panel hides |
Phase 8: Agents Tab — Danger Zone
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 8.1 | Reboot button visible | snapshot (expanded panel) | Amber "Reboot" button in Danger Zone section |
| 8.2 | Delete button visible | snapshot | Red "Delete" button in Danger Zone section |
| 8.3 | Reboot confirmation | click Reboot → snapshot | Browser confirmation dialog appears (do NOT confirm unless safe) |
| 8.4 | Delete confirmation | click Delete → snapshot | Browser confirmation dialog appears (do NOT confirm) |
Phase 9: Agents Tab — Shared Agent Preferences
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 9.1 | Expand shared agent | click chevron on shared agent → snapshot | Preferences panel: Enabled Roles, Effort Level, Entry Paths |
| 9.2 | Enabled Roles checkboxes | snapshot | Checkboxes per agent capability |
| 9.3 | Effort Level dropdown | snapshot | Default / Max / High / Medium; shows agent's default |
| 9.4 | Enabled Entry Paths | snapshot | Checkboxes per active entry path |
| 9.5 | Save Preferences | click "Save Preferences" → snapshot | Sky-blue button, success feedback |
| 9.6 | Remove Shared Agent button | snapshot | Red remove button visible (do NOT click unless safe) |
Phase 10: Assistant Tab
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 10.1 | Switch to Assistant tab | click "Assistant" → snapshot | Tab active, Name/Persona/Avatar/Active Role fields visible |
| 10.2 | Name field | snapshot | Text input with current name value |
| 10.3 | Name hint | snapshot | "The name your team sees in Slack messages" |
| 10.4 | Persona textarea | snapshot | Multi-line text with system prompt content |
| 10.5 | Persona hint | snapshot | "System prompt that shapes the assistant's voice and behavior" |
| 10.6 | Avatar URL field | snapshot | Text input with URL value |
| 10.7 | Active Role dropdown | snapshot | select#active-role-select with current value |
| 10.8 | Active Role options | click dropdown → snapshot | Options: No role, QA Engineer, Skill Discovery, Software Engineer, Product Manager, Social Media Manager, etc. |
| 10.9 | Active Role hint | snapshot | "Skill pack role that shapes the assistant's domain expertise" |
| 10.10 | Change Active Role | select different role → snapshot | Dropdown value updates |
| 10.11 | Save button | snapshot | Orange button "Save" |
| 10.12 | Save feedback | click Save → snapshot | "Saving..." then "Saved" in green |
| 10.13 | Active Role persists | reload page → snapshot | Selected role still shown after reload |
| 10.14 | Edit and Save round-trip | change Name → Save → reload → snapshot | New name persisted across page reload |
| 10.15 | Restore original values | Reset Name and Active Role to original → Save | Avoid side effects |
Phase 11: Slack Tab
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 11.1 | Switch to Slack tab | click "Slack" → snapshot | Tab active, Connected Channels + Add Channel sections |
| 11.2 | Connected Channels | snapshot | H2 heading + "No channels connected yet." or channel list with status dots |
| 11.3 | Channel status dots | snapshot (if channels exist) | Emerald dot (active) or gray dot (inactive) per channel |
| 11.4 | Channel remove button | snapshot (if channels exist) | Remove button per channel |
| 11.5 | Add Channel form | snapshot | All 6 fields: Team ID, Channel ID, Channel Name, Bot Token, Signing Secret, Bot User ID |
| 11.6 | Field placeholders | snapshot | Correct placeholders: T0123ABC, C0123ABC, #engineering-agents, xoxb-..., etc. |
| 11.7 | Bot Token is password | snapshot | Bot Token input type is password (masked) |
| 11.8 | Signing Secret is password | snapshot | Signing Secret input type is password (masked) |
| 11.9 | Add Channel button | snapshot | Orange button "Add Channel" |
| 11.10 | Test Connection button | snapshot | Outlined button "Test Connection" |
| 11.11 | Test Connection flow | click "Test Connection" (with valid token) → snapshot | "Testing..." then "Connected: {team} ({user})" + Bot User ID auto-fills |
| 11.12 | Test Connection error | click "Test Connection" (with invalid token) → snapshot | "Slack error: {message}" |
| 11.13 | Setup Guide collapsed | snapshot | details > summary "Slack App Setup Guide" visible, collapsed |
| 11.14 | Expand Setup Guide | click "Slack App Setup Guide" → snapshot | 7-step guide with scopes, events URL |
| 11.15 | Guide content | snapshot(includeContent=true) | Steps include: chat:write, reactions:write, users:read scopes |
| 11.16 | Events URL | snapshot | URL https://sidebutton.com/api/slack/events mentioned |
Phase 12: Issue Tracking Tab
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 12.1 | Switch to Issue Tracking tab | click "Issue Tracking" → snapshot | Tab active, URL shows ?tab=integrations |
| 12.2 | Page heading | snapshot | H2 "Issue Tracking" + description about automated dispatching |
| 12.3 | Jira card | snapshot | Jira icon, "Jira" heading, "Atlassian Jira Cloud" subtitle |
| 12.4 | Credentials section | snapshot | CREDENTIALS label, Jira URL, Email, API Token fields |
| 12.5 | Jira URL field | snapshot | Placeholder "https://yourcompany.atlassian.net" |
| 12.6 | Email field | snapshot | Placeholder "[email protected]" |
| 12.7 | API Token field | snapshot | Password field; placeholder varies by state |
| 12.8 | API token configured status | snapshot (if token set) | Green "API token is configured" text |
| 12.9 | Test Connection button | snapshot | Outlined button for testing Jira API |
| 12.10 | Save button | snapshot | Orange button "Save" |
| 12.11 | Webhook section | snapshot | WEBHOOK label, URL, Copy, Test Webhook, Deploy Webhook |
| 12.12 | Webhook URL value | snapshot | Readonly input with https://sidebutton.com/api/webhooks/jira |
| 12.13 | Copy webhook URL | click "Copy" → verify | URL copied to clipboard |
| 12.14 | Deploy Webhook button | snapshot | Orange button "Deploy Webhook" |
| 12.15 | View webhook logs link | snapshot | Link to Webhook Logs tab |
Phase 13: Knowledge Packs Tab
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 13.1 | Switch to Knowledge Packs tab | click "Knowledge Packs" → snapshot | Tab active, URL shows ?tab=knowledge-packs |
| 13.2 | Default pack status card | snapshot | "Using SideButton Default Pack" with description |
| 13.3 | Sync Now button | snapshot | button "Sync Now" visible in pack card |
| 13.4 | Remove button | snapshot | button "Remove" visible in pack card |
| 13.5 | Upload Knowledge Pack heading | snapshot | H3 "Upload Knowledge Pack" |
| 13.6 | ZIP drop zone | snapshot | Drag-drop area with "Drop a .zip file here or click to browse" |
| 13.7 | ZIP size limit | snapshot | "Max 10MB. Must contain index.json at root." text |
| 13.8 | Display Name input | snapshot | Placeholder "My Knowledge Pack" |
| 13.9 | Upload & Sync disabled | snapshot (no file) | Button disabled when no file selected |
| 13.10 | Loaded Workflows heading | snapshot | H3 "Loaded Workflows" |
| 13.11 | Default workflows link | snapshot | "Default workflows are available on the Workflows page." with link |
Phase 14: Logs Tab — Structure & Data
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 14.1 | Switch to Logs tab | click "Logs" → snapshot | Tab active, URL shows ?tab=logs |
| 14.2 | Section heading | snapshot | H2 "Webhooks" + description "Incoming webhook events across all automations." |
| 14.3 | Matched only checkbox | snapshot | Unchecked checkbox with "Matched only" label |
| 14.4 | Table columns | snapshot | 5 column headers: Time, Status, Event, Automation, Job (Title Case) |
| 14.5 | Log row — SKIP | snapshot (wait for table load) | SKIP badge (grey/slate), event summary, automation name, "—" in Job column |
| 14.6 | Log row — MATCH | snapshot (with matched data) | MATCH badge (green/emerald), event summary, automation name, linked job #N in Job column |
| 14.7 | Event summary — Jira | snapshot | Format: "jira:issue_updated — ISSUE-KEY (Status)" |
| 14.8 | Job link | snapshot on MATCH row | Sky-blue #N link in Job column |
| 14.9 | Job link navigates | click job link | Navigates to /portal/jobs/{id} |
| 14.10 | Automation name | snapshot | Automation display name in row (e.g. "JIRA>Work TODO - agent 10") |
| 14.11 | Timestamp format | snapshot | Locale datetime string (e.g. "4/2/2026, 2:13:05 PM") |
Phase 15: Logs Tab — Filter & Pagination
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 15.1 | Matched only filter | check "Matched only" → wait for reload → snapshot | Only MATCH rows shown; no SKIP rows |
| 15.2 | Uncheck matched filter | uncheck → wait → snapshot | All rows (MATCH + SKIP) shown again |
| 15.3 | Pagination visible | snapshot (when total > 30) | Pagination bar with "N–M of Total" info + Prev/Next buttons |
| 15.4 | Prev disabled on first page | snapshot | Prev button has disabled attribute / opacity-30 class |
| 15.5 | Next page | click "Next" → wait → snapshot | Table shows next 30 entries; info text updates (e.g. "31–60 of 3958") |
| 15.6 | Prev page | click "Prev" → wait → snapshot | Returns to first page; Prev becomes disabled |
| 15.7 | Matched filter resets pagination | page forward, then check "Matched only" → snapshot | Resets to page 1 of filtered results |
Phase 16: Logs Tab — Empty & Error States
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 16.1 | Empty state | snapshot (account with no webhook events) | "No webhook events recorded yet" centered in table |
| 16.2 | Pagination hidden when empty | snapshot | No Prev/Next buttons visible |
| 16.3 | Loading state | snapshot immediately on tab switch | "Loading..." centered in table (before API response) |
Phase 17: MCP Connections (Assistant Tab)
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 17.1 | MCP section visible | switch to Assistant tab → scroll down → snapshot | H3 "MCP Connections" heading visible below divider line |
| 17.2 | MCP description | snapshot | "Tool sources available to the chat assistant, Slack bot, and MCP clients..." text |
| 17.3 | SideButton Cloud card | snapshot | Green dot, "SideButton Cloud" title, "Agent dispatch, workflow execution..." description |
| 17.4 | SideButton Cloud tools | snapshot | "7 tools" badge text |
| 17.5 | SideButton Cloud toggle | snapshot | Orange toggle checkbox (data-mcp-id="sidebutton") — checked by default |
| 17.6 | Jira card (configured) | snapshot | Green dot, "Jira / Atlassian" title, "Search, create, edit, and transition..." description |
| 17.7 | Jira tools | snapshot | "60 tools" badge text (when configured) |
| 17.8 | Jira toggle | snapshot | Orange toggle checkbox (data-mcp-id="jira") |
| 17.9 | Toggle SideButton Cloud off | uncheck toggle → snapshot | Toggle turns off (slate background) |
| 17.10 | Toggle SideButton Cloud on | check toggle → snapshot | Toggle turns on (orange background) |
Phase 18: Tab Switching & Deep Linking
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 18.1 | Switch all 7 tabs in sequence | click each tab → snapshot each | Correct content renders for each tab |
| 18.2 | Tab deep-linking via URL | navigate to /portal/settings?tab=slack | Slack tab active on page load |
| 18.3 | Tab URL updates | click tab → check URL | URL query param updates (e.g. ?tab=agents) |
| 18.4 | Logs tab deep-link | navigate to /portal/settings?tab=logs | Logs tab active, table loads |
| 18.5 | Form state on tab switch | edit General field → switch to Agents → switch back | Check if edited value persists or resets |
Phase 19: Save Feedback & Error States
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 19.1 | General Save status cycle | click Save → watch | "Saving..." (slate) → "Saved" (green) |
| 19.2 | Assistant Save status cycle | click Save → watch | "Saving..." (slate) → "Saved" (green) |
| 19.3 | Agent effort border flash | change effort dropdown → watch | Green border flash on success |
| 19.4 | Agent role outline flash | toggle role checkbox → watch | Outline flash confirms save |
| 19.5 | Slack duplicate channel | try adding already-connected channel | Error: "This Slack channel is already connected" |
| 19.6 | Knowledge pack sync error | trigger sync with invalid pack → watch | Badge → "error" (red), error text shown |
Phase 20: Edge Cases
| # | Test | Method | Pass Criteria |
|---|---|---|---|
| 20.1 | Empty model field | clear Model input → Save | Verify behavior (should save or show error) |
| 20.2 | Invalid Jira URL | enter "not-a-url" → Save | Verify behavior |
| 20.3 | API key overwrite | enter new text in API Key → Save → refresh | Placeholder still shows "(configured...)" |
| 20.4 | Long persona text | enter very long persona (near 5000 chars) → Save | Persisted without truncation |
| 20.5 | Avatar file too large | upload >1MB file in avatar modal | Error: "File too large (XXXkB). Maximum is 1MB." — input clears |
| 20.6 | Avatar invalid type | upload non-image file | Rejection (only JPEG/PNG/GIF/WebP/SVG allowed) |
| 20.7 | Entry path missing label | add entry path with path but no label → Save | Verify validation behavior |
| 20.8 | Knowledge pack invalid ZIP | upload invalid ZIP → Upload & Sync | Error feedback |
| 20.9 | Rename agent empty name | clear name → click save | Verify validation (should reject or use hostname) |
| 20.10 | Active Role change persists | change Active Role → Save → reload | Selected role value persists |
Automation Tips
- Tab switching uses
linkelements (not buttons) — use click by ref; URL updates with?tab=param - The LLM Provider dropdown is a native
<select>— useselect_optiontool - The effort level buttons on General tab are toggle buttons (not
<select>) — use click by ref - The Agents tab effort dropdown is a native
<select>— useselect_optiontool - Agent role checkboxes save immediately on click — no explicit Save needed; watch for border/outline flash as confirmation
- The Slack Setup Guide is a
<details>element — click the<summary>to expand - Bot Token and Signing Secret are
type="password"— values are masked in the UI - Test Connection calls Slack API directly from browser — requires a real valid bot token to test the success path
- Rename agent button (
agent-rename-btn) is hidden by default — only visible on hover (opacity-0 group-hover/card:opacity-100); usehovertool before clicking - Avatar picker modal heading is "Set Agent Avatar"; remove button text is "Remove avatar (use default)"; modal has a "Cancel" button
- Avatar picker modal: preset clicks save immediately; file upload has size/type validation client-side
- RDP modal heading is "Download RDP Shortcut"; button on card shows as "RDP" (not "Download RDP")
- RDP modal has "Copy password", "Cancel", and "Download" buttons; Save Credentials is a checkbox (
#rdp-save-password) - RDP modal generates the file client-side — no network request; check browser download event
- Danger Zone actions (Reboot/Delete) use browser
confirm()— cannot be confirmed via snapshot; useevaluateto test - Config panel expand/collapse is a chevron toggle — take fresh snapshot after expanding
- Knowledge pack uses ZIP upload now — "Upload & Sync" button disabled until file selected; "Sync Now" replaces old "Pull Updates"
- Knowledge pack has a "Remove" button for removing the pack
- Issue Tracking tab URL param is
?tab=integrations(not?tab=issue-tracking) - Active Role dropdown (
select#active-role-select) is a native<select>— useselect_optiontool - Tabs are deep-linkable: navigate to
?tab=slackto land directly on Slack tab - Logs tab URL param is
?tab=logs(was?tab=webhook-logs— label also changed from "Webhook Logs" to "Logs") - Settings changes PERSIST — always note original values before testing and restore after
- The API Key field masks existing values — you can't read the current key, only overwrite
- Save status text transitions: slate-400 ("Saving...") → emerald-400 ("Saved") → clears; red-400 for errors
- Shared agents cannot be configured, only preferences can be set — skip config panel tests for shared agents
- Logs tab table is client-side rendered — data loads via fetch after tab opens; use
evaluateor wait for table rows to appear before asserting content - Logs pagination loads 30 items per page; "Matched only" checkbox resets to page 1 when toggled
- MCP Connections section is on the Assistant tab, below the persona form, under an H3 heading — scroll down to see it
- MCP toggles are
checkboxelements withdata-mcp-idattributes (e.g.data-mcp-id="sidebutton",data-mcp-id="jira")