18 KiB
AGENTS.md
This document defines how an agent (human or LLM‑assisted) should migrate the existing WWCompanion codebase, concepts, and behaviors into SiteCompanion, without rewriting from scratch. The migration is patch‑style: refactor, rename, generalize, and constrain—never invent new execution semantics.
SiteCompanion is a tool, not a product. It exists to remove copy/paste friction while preserving explicit user intent. Automation is restricted to context binding only.
0. Prime Directive (Non‑Negotiable)
Preserve the execution model.
Nothing may execute without an explicit user click.
Allowed:
-
Automatic context restoration (workspace loading on navigation)
-
UI reinjection on DOM mutation (idempotent)
Forbidden:
- Auto‑execution
- Background scraping
- Inferred intent
- Heuristic task selection
If a change violates this, it is out of scope.
1. Terminology Mapping (Rename, Don’t Reimagine)
| WWCompanion | SiteCompanion | Notes |
|---|
| Companion | SiteCompanion | Tool rename only | | Prompt | Task | Tasks are the most basic execution unit | | Quick Run | Shortcut | Shortcut = preconfigured run | | Context | Site Text | Explicitly bound via paste/selection | | Profile | Profile | Same meaning, now workspace-scoped | | Mode | Env | Execution discipline (system prompt + constraints) |
Rules:
- The constructed prompt must use
Profileas the header name for user context - The extension must never emit
Resumeas a pipeline header or constant prompt text - Users may supply resume-like content, but it is always placed under the
Profileheader
Do not introduce new conceptual layers.
2. Core Execution Pipeline (Must Remain Intact)
The execution pipeline is stable and final:
Env (system prompt + discipline)
→ Profile (opaque user context)
→ Task (semantic intent template)
→ Site Text (primary extracted text)
Rules:
-
The pipeline must not contain a
Resumestage -
Prompt headers must use exactly these names
-
Tasks are the most basic executable unit
-
Shortcuts bind
(env + profile + task) -
Shortcuts are the only pinnable and toolbar-exposed unit
Agents must never collapse, rename, or reorder this pipeline.
3. Workspaces (Authoritative Model)
3.1 Root Global Workspace
SiteCompanion introduces a real but hidden workspace named global.
global is not a special case in code. It is a full workspace that:
- Always exists
- Is not user-deletable
- Is never auto-switched into
global owns:
-
Global appearance defaults
-
Global API configuration (providers, endpoints, API keys)
-
Globally scoped Envs, Profiles, Tasks
-
Global Presets
Rules:
- API configuration is global-only and non-inheritable
globalparticipates in inheritance like any other workspace
3.2 Workspace Definition
A Workspace is a strict namespace, but not an ownership boundary.
A workspace references:
- Appearance overrides
- Envs
- Profiles
- Tasks
- Presets
- Sites
3.3 Deletion Semantics
Deleting a workspace:
-
Does not delete any Envs, Profiles, Tasks, Presets, or Sites
-
Moves all referenced items to the
globalworkspace -
Preserves names, identities, and semantics
Deletion therefore removes a namespace, not data.
3.4 Inheritance Model (Unified)
Scopes form a strict hierarchy:
global → workspace → site
Inheritance rules:
- Inherit by default
- Items may be disabled (subtractive)
- Override by redefinition: defining an item with the same name shadows the inherited one
- Nearest scope wins by name
Rules:
- No merging of semantics
- No inference
- APIs / API keys do not inherit
3.5 Migration Rule
If WWCompanion has:
- Global config
- Implicit defaults
- Cross-context state
Then:
- Move capability-like config into
global - Move user-meaningful items into a default migrated workspace
- Remove all implicit fallback logic
3.3 Inheritance Model (Unified)
Scopes form a strict hierarchy:
global → workspace → site
Inheritance rules:
- Inherit by default
- Items may be disabled (subtractive)
- Override by redefinition: defining an item with the same name shadows the inherited one
- Nearest scope wins by name
Rules:
- No merging of semantics
- No inference
- APIs / API keys do not inherit
3.4 Migration Rule
If WWCompanion has:
- Global config
- Implicit defaults
- Cross-context state
Then:
- Move capability-like config into
global - Move user-meaningful items into a default migrated workspace
- Remove all implicit fallback logic
4. Env & Profile Visibility (Final Decision)
In SiteCompanion:
- Env selector is always visible
- Profile selector is always visible
Even when:
- A preset defines defaults
Visibility = inspectability.
Agents must not introduce read‑only, hidden, or inferred env/profile states.
5. Tasks vs Shortcuts (Critical Separation)
5.1 Tasks
Tasks:
- Are the most basic execution unit
- Define semantic intent
- Are directly runnable via manual popup execution
- Define a default Environment
- Define a default Profile
- Are never pinnable
When a user selects or changes a Task in the popup:
- The Environment selector must refresh to the Task’s default Environment
- The Profile selector must refresh to the Task’s default Profile
5.2 Shortcuts
Shortcuts:
- Are concrete, named execution shortcuts
- Bind
(env + profile + task)explicitly - Are executable via one click
- Are pinnable
- Never appear in the popup UI
Shortcuts exist purely as injected-toolbar shortcuts.
5.3 Manual Execution (Popup Configuration)
The popup UI allows manual execution of Tasks using explicit configuration.
Rules:
-
The popup UI must never list or reference shortcuts
-
Manual execution must use the same execution pipeline as shortcuts
-
Manual execution does not create a shortcut unless explicitly saved by the user
-
Manual execution is equivalent to WWCompanion behavior
Migration rule:
Any WWCompanion feature that "runs" something maps either to manual Task execution or to a toolbar Shortcut.
6. Site Binding & Context Extraction
6.1 Site Ownership
Each site:
- Belongs to exactly one workspace
- Has an explicit URL matcher
- Has an explicit extraction definition
- Inherits appearance, envs, profiles, tasks, presets from its workspace (unless overridden)
6.2 Unknown Sites (Two Paths Only)
When encountering an unknown site, only two paths are allowed:
Path A: Popup UI (default)
- Toolbar appears in minimal state
- User pastes or selects a portion of page text
- System finds the minimum DOM scope whose
innerTextcontains the pasted text - User confirms or retries
- User selects workspace
- Site config is created
Path B: Settings Page (manual)
- User defines URL matcher
- User defines extraction logic explicitly
Rules:
- No fuzzy matching
- No guessing
- No background scraping
7. Automatic Behavior (Strictly Limited)
Allowed automation:
- Loading a site’s associated workspace on navigation
Disallowed automation:
- Running presets
- Selecting presets
- Modifying env/profile/task
Context may be restored. Intent may not be inferred.
8. UI & Interaction Rules
SiteCompanion has three UIs, each with a strict role boundary. Wherever applicable, UI layout, interaction patterns, and visual hierarchy must respect WWCompanion’s existing design.
8.1 UI Surfaces (Authoritative)
-
Floating Injected Toolbar
- Appears on recognized sites only
- Floating, injected, idempotent on DOM mutation
- Supported positions only: four corners + bottom center
- Contains toolbar presets only
-
Extension Popup UI
-
Primary inspection, configuration, and manual execution surface
-
Never displays presets
-
State-machine driven (see below)
-
-
Settings UI
- Configuration and organization surface only
- No execution affordances
8.2 Floating Toolbar (Toolbar Presets Only)
The floating toolbar:
- Displays buttons named after all enabled presets in scope for the current site
- Executes a preset with one click
- Is the exclusive surface from which presets may be executed
Preset aggregation order:
-
Enabled Global Presets
-
Enabled Workspace Presets
-
Enabled Site Presets
Rules:
-
Presets must never appear in the popup UI
-
Presets must never appear in settings execution paths
-
Presets should be labeled as "Toolbar Presets" where naming clarification is needed
8.3 Popup UI – State Machine
The popup UI has exactly three states, and popup state must be persisted.
Persistence rule:
-
Closing the popup must not reset state
-
Popup state is preserved until:
- The user performs a manual action in the popup (selection / click), or
- The user executes a toolbar Shortcut
State transitions are therefore explicit and durable.
State 1: Unknown Site
Shown when a site has no saved configuration.
UI elements:
-
Prompt asking the user to paste partial text they want SiteCompanion to extract each time
-
Button: "Try Extracting Full Text"
State 2: Extraction Review
Entered after attempting full-text extraction.
UI elements:
- Read-only buffer showing the extracted text
- Editable field to configure the URL match pattern for the site
- Button: Retry (returns to State 1)
- Button: Confirm (saves the site as recognized)
Validation rules:
- URL patterns must be explicit
- No URL pattern may be a substring of another (conflict error)
State 3: Normal Execution
Shown for recognized sites.
Rules:
-
Layout must respect WWCompanion popup design
-
Allows manual configuration of env, profile, and task
-
Changing the Task refreshes env/profile to Task defaults
-
Allows manual execution
-
Never displays shortcuts or shortcut-derived UI
-
Adds a single, read-only line indicating the current Workspace
State 2: Extraction Review
Entered after attempting full-text extraction.
UI elements:
- Read-only buffer showing the extracted text
- Editable field to configure the URL match pattern for the site
- Button: Retry (returns to State 1)
- Button: Confirm (saves the site as recognized)
Validation rules:
- URL patterns must be explicit
- No URL pattern may be a substring of another (conflict error)
State 3: Normal Execution
Shown for recognized sites.
Rules:
-
Layout must respect WWCompanion popup design
-
Allows manual configuration of env, profile, task, and site text
-
Allows manual execution
-
Never displays presets or preset-derived UI
-
Adds a single, read-only line indicating the current Workspace
8.4 Naming & Display Rules (UI-Wide)
- Naming conflict checking is case-insensitive
- Display must preserve the original casing of the name as entered
8.2 Floating Toolbar (Presets Only)
The floating toolbar:
- Displays buttons named after all presets enabled for the current site
- Executes a preset with one click
- Is the exclusive surface from which presets may be executed
Preset source order:
- Enabled Global Presets
- Enabled Workspace Presets
- Enabled Site Presets
Rules:
- Presets must never appear in the popup UI
- Presets must never appear in the settings execution paths
8.3 Popup UI – State Machine
The popup UI has exactly three states.
State 1: Unknown Site
Shown when a site has no saved configuration.
UI elements:
- Prompt asking the user to paste partial text they want SiteCompanion to extract each time
- Button: "Try Extracting Full Text"
State 2: Extraction Review
Entered after attempting full-text extraction.
UI elements:
-
Read-only buffer showing the extracted text
-
Editable field to configure the URL match pattern
-
Button: Retry (returns to State 1)
-
Button: Confirm (saves the site as recognized)
Validation rules:
- URL patterns must be explicit
- No URL pattern may be a substring of another (conflict error)
State 3: Normal Execution
Shown for recognized sites.
Rules:
- Layout must respect WWCompanion popup design
- Allows manual configuration of env, profile, task, and site text
- Allows manual execution
- Never displays presets or preset-derived UI
- Adds a single line indicating the current Workspace
8.4 Naming & Display Rules (UI-Wide)
- Naming conflict checking is case-insensitive
- Display must preserve the original casing of the name as entered
9. Preset Scope, Enablement, and Naming
9.1 Preset Scope Resolution
Toolbar presets shown for a site are the union of:
- Enabled Global Presets
- Enabled Workspace Presets (if applicable)
- Enabled Site Presets (if applicable)
9.2 Enablement Semantics
- Presets may exist at global, workspace, or site scope
- Lower tiers inherit enable/disable state from parents by default
- A lower-tier preset with the same name overrides and disables the inherited one
9.3 Naming Scope
Naming is scoped as:
Enabled Global + Enabled Workspace + Enabled Site + Module Type
Rules:
- Conflict detection is case-insensitive within the same module type
- Display preserves original casing
10. Motion & UX Doctrine
Structural motion only:
- Viewport‑anchored reflow (FLIP pattern)
- Item stays visually fixed; UI reflows around it
Motion is:
- Structural, not decorative
- Respectful of reduced‑motion settings
11. Engineering & UX Constraints
11.1 Legacy WWCompanion Adapters (Removal Mandate)
Any of the following must be removed, not adapted:
-
Legacy config adapters
-
Compatibility shims
-
Auto-migration layers that preserve old semantics at runtime
Migration is one-time and destructive at the semantic level.
Allowed:
-
Data migration scripts
-
Explicit renaming / reshaping of stored config
Forbidden:
-
Dual-mode logic
-
Runtime branching on legacy flags
11.2 Settings UI Structure (Authoritative)
The Settings UI contains the following top-level sections:
1. Global Configuration
Acts as the configuration baseline.
Contains:
-
Global appearance (theme, toolbar positioning, auto-hide on unknown sites)
-
API Keys
-
API Configurations
-
Expandable / foldable lists of:
- Environments
- Profiles
- Tasks
- Presets
Each configuration entry:
- Is configuration-only (no execution)
- Has an enable / disable toggle
Also includes:
- Expandable / foldable list of sites inheriting directly from global
2. Workspaces
Contains a list of workspace sections (all visible in sidebar TOC; TOC supports folding).
Each workspace section contains:
-
Name
-
Appearance overrides (inherits from global on creation)
-
API configurations shown as enable/disable toggles only
-
Expandable / foldable lists of:
- Environments
- Profiles
- Tasks
- Presets
Each list is split into:
- Inherited (toggle-based enable/disable)
- Workspace-specific (full configuration UI)
Also includes:
- Expandable / foldable list of sites inheriting from this workspace
3. Sites
Mirrors the Workspace structure, minus the list of sites.
Rules:
-
Lower tiers inherit both enabled/disabled state and defaults from parents
-
On creation or parent change, inherited defaults must be refreshed
-
If a site/workspace config name conflicts with an enabled inherited one:
- The inherited one is automatically disabled
- Helper text must explain the override
11.3 Duplication Semantics
For all non-API configurations, duplication must be offered as:
- Duplicate to Workspace (with selector)
- Duplicate to Site (with selector)
No generic duplicate buttons are allowed.
11.4 Naming & Conflict Detection
Naming rules are case-insensitive and module-specific.
Rules:
- Conflicts are detected case-insensitively
- Display preserves original casing
- Different module types may share the same name
11.5 Error Checking & Messaging
Error checking is mandatory and non-removable.
Agents:
- May refactor validation logic
- May strengthen invariants
- May change where errors are surfaced in the UI
Agents may not:
- Silence errors
- Convert errors into warnings
- Auto-recover from invalid state without user action
Errors must:
- Be explicit
- Be attributable to a concrete user action or config
- Not block unrelated UI inspection
11.6 UI Design Theme
Respect the existing SiteCompanion UI doctrine:
-
Minimal surface area
-
WWCompanion layout parity where applicable
-
No instructional text in execution paths
-
No decorative UI
-
No icon-first navigation
UI exists to expose state, not to explain it.
12. Migration Checklist (Agent‑Facing)
An agent migrating WWCompanion must:
-
Rename concepts using the mapping table
-
Ensure constructed prompts use
Profile(neverResume) as the header -
Introduce workspaces as hard namespaces
-
Introduce the
globalworkspace for capability config -
Split global state into workspace‑owned state
-
Separate tasks from presets
-
Ensure only presets execute
-
Make env & profile selectors always visible
-
Remove any auto‑execution logic
-
Remove all legacy config adapters
-
Enforce case‑insensitive, module‑local naming rules
-
Constrain automation to context binding only
-
Keep execution pipeline intact
If any step requires inventing behavior, stop.
13. Closing Doctrine
SiteCompanion is intentionally narrow.
It restores clarity of intent by enforcing boundaries:
- Context may be bound automatically
- Intent may only cross the boundary via an explicit click
Legacy convenience is not a justification for ambiguity.
The tool must always make it obvious what will run, with what, and why.
Agents exist to preserve this clarity — not to smooth it away.