chore: bootstrap hermes-ui skeleton from 0.6.29 snapshot
Import the client, server, skills, tests, and build scripts as the starting point for the rebuild, then trim the surfaces this project does not ship: Electron desktop packaging, the marketing website, and the ESP32 firmware tree. CI keeps the web build, e2e, lockfile, release, and Docker workflows. Rename the package and CLI entry points to hermes-ui, drop the prepare hook so npm ci no longer triggers a build, and drop the removed tsconfig and nodemon references. Rewrite AGENTS.md, ARCHITECTURE.md, DEVELOPMENT.md, and the READMEs so the documented package map and hard rules match this repository. reference_code/ is ignored: it is a read-only snapshot, not an input to the build.
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
# Harness Overview
|
||||
|
||||
This harness turns recurring project knowledge into files and checks that an
|
||||
agent can discover without chat history.
|
||||
|
||||
## Goals
|
||||
|
||||
- Make repository context legible through short maps and deeper docs.
|
||||
- Keep architecture constraints close to the code they protect.
|
||||
- Give agents a deterministic validation path before opening or updating a PR.
|
||||
- Prefer mechanical checks over reminder text when a rule can be verified.
|
||||
|
||||
## Entry Points
|
||||
|
||||
- `AGENTS.md` is the root map for coding agents.
|
||||
- `ARCHITECTURE.md` documents package boundaries and state ownership.
|
||||
- `DEVELOPMENT.md` remains the contributor rules and command reference.
|
||||
- `docs/harness/validation.md` maps change types to checks.
|
||||
- `docs/harness/worktree-runbook.md` explains isolated worktree development.
|
||||
- `docs/harness/pr-review.md` provides a PR self-review checklist.
|
||||
- `scripts/harness-check.mjs` enforces baseline repository invariants.
|
||||
|
||||
## Operating Model
|
||||
|
||||
1. Read the root map and the specific doc for the task.
|
||||
2. Make the smallest scoped change.
|
||||
3. Add or update focused tests when behavior changes.
|
||||
4. Run `npm run harness:check` and the relevant validation commands.
|
||||
5. If a failure pattern repeats, improve this harness with docs, tests, scripts,
|
||||
or CI instead of relying on a longer prompt.
|
||||
|
||||
## What Belongs In The Harness
|
||||
|
||||
- Facts that future agents must know to work safely.
|
||||
- Checklists that prevent repeated PR review comments.
|
||||
- Scripts that fail fast on repository-wide invariants.
|
||||
- Runbooks for local, CI, and release flows.
|
||||
|
||||
Do not put long implementation notes in `AGENTS.md`. Add them under `docs/` and
|
||||
link to them from the map.
|
||||
@@ -0,0 +1,42 @@
|
||||
# PR Self-Review
|
||||
|
||||
Use this checklist before pushing or updating a pull request.
|
||||
|
||||
## Scope
|
||||
|
||||
- The PR title states the behavior being changed.
|
||||
- The diff is limited to the requested task and required harness updates.
|
||||
- Unrelated formatting or refactors are not bundled into the change.
|
||||
- User-facing text has locale coverage.
|
||||
|
||||
## Architecture
|
||||
|
||||
- Client code uses shared API helpers and existing UI patterns.
|
||||
- Server routes stay thin and delegate reusable behavior to controllers/services.
|
||||
- Web UI state uses `config.appHome` or documented helpers.
|
||||
- Hermes Agent state and Web UI state remain separate.
|
||||
- Subprocess calls use argument arrays instead of shell string construction.
|
||||
|
||||
## Tests And Validation
|
||||
|
||||
- A focused test was added or updated for behavior changes.
|
||||
- Browser-visible flows have e2e coverage when the risk justifies it.
|
||||
- `npm run harness:check` passes.
|
||||
- The PR body lists validation commands that actually ran.
|
||||
- Known limitations or follow-ups are called out.
|
||||
|
||||
## Release And CI
|
||||
|
||||
- Workflow changes were checked with `npm run harness:check`.
|
||||
- Release artifact lists stay platform-specific where a matrix target has its
|
||||
own expected output.
|
||||
- `fail_on_unmatched_files: true` is preserved when each matrix target has its
|
||||
own expected artifact list.
|
||||
- Package manifest changes have matching lockfile changes when dependencies
|
||||
change.
|
||||
|
||||
## Before Merge
|
||||
|
||||
- CI is green or failures are explained as unrelated.
|
||||
- The branch is mergeable.
|
||||
- The PR does not depend on hidden local state, credentials, or uncommitted files.
|
||||
@@ -0,0 +1,63 @@
|
||||
# Validation Guide
|
||||
|
||||
Run the smallest relevant checks while iterating. Escalate to the broad checks
|
||||
when touching shared behavior, release automation, auth, persistence, or chat.
|
||||
|
||||
## Always Run For PRs
|
||||
|
||||
```bash
|
||||
npm run harness:check
|
||||
```
|
||||
|
||||
For broad or shared changes, also run:
|
||||
|
||||
```bash
|
||||
npm run test:coverage
|
||||
npm run test:e2e
|
||||
npm run build
|
||||
```
|
||||
|
||||
## Change-Type Matrix
|
||||
|
||||
| Change | Minimum local validation |
|
||||
| --- | --- |
|
||||
| Docs only | `npm run harness:check` |
|
||||
| Client component/store/API | focused `npm run test -- <pattern>`, then `npm run build` |
|
||||
| User-visible browser flow | focused Vitest plus `npm run test:e2e` |
|
||||
| Server controller/service/db | focused `npm run test -- tests/server/<file>` |
|
||||
| Auth, profile, or credential behavior | focused server tests plus relevant e2e auth tests |
|
||||
| Chat, Socket.IO, group chat | focused server tests plus relevant e2e chat tests |
|
||||
| Chat session chain, Agent Bridge, compression, or Group Chat | Add one `docs/chat-chain-changes/*.md` fragment with date, PR/commit, touched feature, and behavior impact; then run `npm run harness:check` plus focused chat/bridge/group-chat tests |
|
||||
| Docker image | `npm run harness:check` and `npm run build` |
|
||||
| GitHub workflow | `npm run harness:check` and `actionlint` when available |
|
||||
| Package manifests | `npm ci --ignore-scripts` and lockfile workflow expectations |
|
||||
|
||||
## CI Mapping
|
||||
|
||||
- Build workflow: installs dependencies, runs coverage, and builds production
|
||||
assets on pushes and pull requests.
|
||||
- Playwright workflow: runs browser e2e tests.
|
||||
- NPM lockfile workflow: verifies `package-lock.json` is synchronized.
|
||||
- Web UI release workflow: packages Web UI artifacts for published releases.
|
||||
- Docker workflow: builds and publishes release images.
|
||||
|
||||
## Release Workflow Guardrail
|
||||
|
||||
Published GitHub Releases should still trigger Web UI artifact packaging and
|
||||
Docker image publishing, but those workflows must keep the GitHub Release out
|
||||
of latest.
|
||||
|
||||
Web UI release jobs must upload only the artifacts their build can produce. Keep
|
||||
artifact globs in matrix data and keep `fail_on_unmatched_files: true` so a
|
||||
missing expected file still fails.
|
||||
|
||||
## Failure Handling
|
||||
|
||||
When a command fails:
|
||||
|
||||
1. Read the first actionable error, not just the final stack trace.
|
||||
2. Check whether the failure indicates missing context, missing test coverage,
|
||||
or a missing mechanical rule.
|
||||
3. Fix the product bug when there is one.
|
||||
4. Update docs or `scripts/harness-check.mjs` when the same class of mistake
|
||||
should be prevented next time.
|
||||
@@ -0,0 +1,58 @@
|
||||
# Worktree Runbook
|
||||
|
||||
Use a separate git worktree for agent changes so local user work remains
|
||||
untouched.
|
||||
|
||||
## Create A Worktree
|
||||
|
||||
```bash
|
||||
git fetch origin --prune
|
||||
git worktree add -b codex/<short-topic> ../worktrees/hermes-web-ui-<short-topic> origin/main
|
||||
cd ../worktrees/hermes-web-ui-<short-topic>
|
||||
```
|
||||
|
||||
If the repository uses a fork remote, push to the remote requested by the task.
|
||||
Do not rewrite or reset unrelated branches.
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
npm ci --ignore-scripts
|
||||
npm rebuild node-pty
|
||||
```
|
||||
|
||||
## Isolated Runtime
|
||||
|
||||
Use per-worktree state and ports to avoid colliding with a running local app:
|
||||
|
||||
```bash
|
||||
export PORT=18648
|
||||
export HERMES_WEB_UI_HOME="$PWD/.tmp/hermes-web-ui"
|
||||
export HERMES_WEBUI_STATE_DIR="$HERMES_WEB_UI_HOME"
|
||||
export UPLOAD_DIR="$PWD/.tmp/uploads"
|
||||
npm run dev
|
||||
```
|
||||
|
||||
Do not point `HERMES_WEB_UI_HOME` at a user's real `~/.hermes-web-ui` when a task
|
||||
only needs local verification.
|
||||
|
||||
## Browser Checks
|
||||
|
||||
For browser-visible changes:
|
||||
|
||||
```bash
|
||||
npm run test:e2e
|
||||
```
|
||||
|
||||
Prefer existing Playwright fixtures and mocked backend services. Add real-service
|
||||
requirements only when the behavior cannot be represented with mocks.
|
||||
|
||||
## Cleanup
|
||||
|
||||
After a PR is pushed and no more local work is needed:
|
||||
|
||||
```bash
|
||||
git worktree remove ../worktrees/hermes-web-ui-<short-topic>
|
||||
```
|
||||
|
||||
Only remove the worktree you created.
|
||||
Reference in New Issue
Block a user