=== MusePort ===
Contributors: matthewxmurphy
Tags: agent, api, activity, audit, administration
Requires at least: 6.4
Tested up to: 7.1
Requires PHP: 8.1
Stable tag: 2026.10.09.001
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

A private, lightweight WordPress activity observer for API-connected agents.

== Description ==

MusePort gives WordPress administrators a native view of activity submitted by separately connected agents: task runs, reported states, heartbeats, mail submission outcomes, source observation times and server receipt times. No React application, Node runtime or background process is required on the WordPress host.

Every writer key belongs to one registered agent and can only submit events. All activity-reading APIs require WordPress administrator capability. Agent registry and key actions require an administrator's secure native browser session and current nonce. Keys are shown once and stored only as keyed hashes. Revocation preserves previous observations.

Only minimized metadata is accepted. Full messages, credentials, contacts, URLs and private paths do not belong in activity. Unknown payload fields fail, and common sensitive patterns in short summaries are redacted before storage. Redaction is an additional safeguard, not permission to upload private records.

Activity stays private. The plugin does not add a public dashboard or shortcode. Public product documentation and storefront copy are separate from administrative data.

This is an observer. It does not start agents, execute commands, read mailboxes, send mail, approve work or establish delivery. A heartbeat proves contact only. A reported successful task is an agent claim; an SMTP accepted outcome still has unconfirmed delivery. Proof references and their observation times are also agent supplied.

An optional Python standard-library receipt adapter converts one existing MusePost schema-version-1 JSON receipt into minimized activity. It works offline by default, never invokes MusePost, never opens mailboxes and never sends mail. This adapter is a new integration; it does not convert the existing MusePost email client into WordPress or claim existing agents are connected.

A generic Python standard-library event sender validates already prepared real task and heartbeat observations. It defaults to offline output; explicit publishing uses an exact HTTPS API base and private writer config, refuses redirects and preserves the event's request ID on conflicts or uncertainty. It never executes the task being reported.

== Installation ==

1. Install the complete museport directory through WordPress Plugins or your reviewed deployment workflow.
2. Activate on the explicitly selected HTTPS WordPress site with an InnoDB-capable MySQL/MariaDB database.
3. Open MusePort as a WordPress administrator.
4. Register an agent only when you intend to connect that worker. Copy its one-time key into the worker's private mode-0600 credential file.
5. Follow docs/API.md and verify an actual submitted event. An empty registry or newly issued credential is not a working agent integration.

== Limits and retention ==

Activity retention: 90 days, at most 10,000 events and 100 agent identities. Writers may submit up to 60 new events per minute; replaying an identical request does not create another row. JSON bodies are limited to 4,096 bytes, summaries to 280 characters. Daily WordPress cron and ingestion remove expired observations. At the row ceiling new events fail explicitly; existing data is not silently discarded.

Deactivation stops the plugin's retention schedule. It preserves the plugin tables and original activity. Reinstallation does not silently delete data. See docs/OPERATIONS.md for deliberate retention and rollback procedures.

== Frequently Asked Questions ==

= Can an agent key read another agent's activity or manage WordPress? =
No. It can only POST minimized events for its own server-assigned identity. Read routes require administrator capability and reject writer headers.

= Does accepted mean email delivery? =
No. Accepted means SMTP accepted a submission. The separate delivery field remains unconfirmed unless an agent reports a provider receipt. MusePort does not independently validate that external receipt.

= Does this replace Communications Hub? =
No. That private CPH-owned review workflow and its existing accounts, keys, instructions and decisions remain separate.

= Does WordPress store mailbox passwords and drafts? =
No. Mailbox credentials, original drafts, EML bodies and original MusePost state stay on the worker.

== Changelog ==

= 2026.10.09.001 =
Initial activity observer source: native administration, scoped writer API, task runs, privacy filters, idempotent receipts, bounded retention, optional offline MusePost receipt adapter and verification tooling.

== Credits ==

Developer and copyright holder: MatthewxMurphy.com.
Release assignment: BuiltNotBegged.com, subject to the owner's reviewed source catalog and release verification.
Canonical revision: VERSION. WordPress revisions use YYYY.M.DD.XXX.
