πŸ“Š Dashboard

Goal: Amy should expose one canonical Discord embed dashboard for state, options, feedback, context, model/provider, usage, queue, and health. Slash commands and interactive buttons should render the same state snapshot β€” no duplicate truth, no stale status, no Markdown pretending to be UI.

🏷️ Naming β€” Ompcord vs Amy. Ompcord is the omp⇄Discord bridge (product/plugin); Amy is the bot persona it runs. You install Ompcord; Amy is who answers. Rename phases 1–5 are complete at docs/command/runtime/package level: package name ompcord, wrapper runtime ompcordd.mjs/ompcordd.service, and compatibility for amyd.mjs, /amy, /pi-discord-remote, legacy config, and ~/.omp/amy-sessions/. Repo directory stays pi-discord-amy until final filesystem cutover. See the naming direction.*

Rocket launch channel pattern

The channel-level entry point is deliberately reaction-gated:

…
 
This gives the launch channel a visible **outside powerpanel** while the real run happens inside the thread. The current v1 mode is only `πŸš€` = normal run. Future reactions may map to `plan`, `debug`, or `review`.
 
The outside dashboard is not a separate source of truth: it is a mirror of the same `Dashboard` state used in the thread.
 
Quick-start: [Amy Rocket Launch Channels](./rocket-launch).
 
---
 
## Core doctrine
 
Amy needs a **single state snapshot** and multiple renderers, not scattered status strings.
 
```text
…
 
Everything user-visible should come from `StatusSnapshot`:
 
- `/amy status`
…
If the value is not in the snapshot, it is not part of the dashboard truth.
 
---
 
## StatusSnapshot contract
 
```js
…
 
**Important:** model/provider/context/usage must be honest.
 
| Field               | Source                                                                            | Rule                                                                         |
…
 
---
 
## Embed layout: status as a dashboard
 
Use fields as the SSOT surface. Avoid giant prose. Keep every field scannable.
 
```text
…
 
### Field contract
 
| Field            | Example value                                                                                                                     |
…
 
### Color rules
 
| State                  | Color   |
…
 
---
 
## Slash command design
 
Implemented commands:
 
| Command             | Status         | Behavior                                                                         |
…
 
Future commands:
 
| Command        | Purpose                                                                                  |
…
 
**ACK rule:** every slash command that may touch Discord/network/process state must `deferReply({ flags: MessageFlags.Ephemeral })` before doing work. `status`/`health` reply immediately because they read an in-memory snapshot only.
 
---
 
## Interactive dashboard components
 
Use components as dashboard actions, not decoration.
 
```text
…
 
| Component   | Behavior                                                             |
…
 
Future controls:
 
| Component    | Behavior                                                         |
…
 
**Do not** let a refresh button call the model. Dashboard interactions are control-plane operations only.
 
---
 
## Options, stats, feedback model
 
The dashboard should make Amy feel alive without spamming the thread.
 
| Category       | What to show                                                                    | What not to fake                     |
…
 
When usage is unknown, say exactly:
 
```text
…
 
That is better than false precision.
 
---
 
## Event capture: one feed, many views
 
Every run should update the same snapshot:
 
```text
…
 
This gives:
 
- dashboard embed fields
…
---
 
## Implementation status
 
Implemented:
 
1. `status.mjs`:
…
Next:
 
1. Add queue policy state beyond the current `reject`/single-depth hint.
…
---
 
## Acceptance bar
 
- [x] `/amy status` shows gateway, active thread, cwd, session, model, provider status, usage status, queue, last error, uptime, pid.
…
---
 
## Related docs
 
- [Discord Responsive Interview Embed](./responsive-interviews)
- [Ompcord β€” Always-on Discord Bridge](./)
 
[…179ln elided; re-read needed ranges, e.g. /home/usr/funday/dev/docs/content/omp/harnesses/ompcord/ssot-dashboard.md:22-26,41-43]

Ask Docs

AI assistant to help answer questions about the documentation. Answers are read-only and cite docs/source.

Hi! How can I help you with the documentation today? Answers are read-only and cite docs/source.

Ctrl+Enter to send