Update, before adding massive new feature
This commit is contained in:
121
AGENT.md
Normal file
121
AGENT.md
Normal file
@@ -0,0 +1,121 @@
|
||||
# AGENT.md
|
||||
|
||||
This document provides an overview of the Next Explorer project, its structure, and its implementation details.
|
||||
|
||||
## Project Overview
|
||||
|
||||
Next Explorer is a web application for browsing and exploring the registers of the Spectrum Next computer. It is built with Next.js (App Router), React, and TypeScript.
|
||||
|
||||
The application reads register data from `data/nextreg.txt`, parses it on the server, and displays it in a user-friendly interface. Users can search for specific registers and view their details, including per-register notes and source snippets.
|
||||
|
||||
## Project Structure
|
||||
|
||||
The project is a Next.js application with the following structure:
|
||||
```
|
||||
|
||||
next-explorer/
|
||||
├── eslint.config.mjs
|
||||
├── next.config.ts
|
||||
├── package.json
|
||||
├── pnpm-lock.yaml
|
||||
├── tsconfig.json
|
||||
├── data/
|
||||
│ ├── nextreg.txt
|
||||
│ ├── custom_parsers.txt
|
||||
│ └── wikilinks.txt
|
||||
├── node_modules/...
|
||||
├── public/...
|
||||
└── src/
|
||||
├── middleware.js
|
||||
├── app/
|
||||
│ ├── layout.tsx
|
||||
│ ├── page.module.css
|
||||
│ ├── page.tsx
|
||||
│ └── registers/
|
||||
│ ├── page.tsx
|
||||
│ ├── RegisterBrowser.tsx
|
||||
│ ├── RegisterDetail.tsx
|
||||
│ └── [hex]/
|
||||
│ └── page.tsx
|
||||
├── components/
|
||||
│ ├── Navbar.tsx
|
||||
│ └── ThemeDropdown.tsx
|
||||
├── scss/
|
||||
│ ├── _bootswatch.scss
|
||||
│ ├── _explorer.scss
|
||||
│ ├── _variables.scss
|
||||
│ └── nbn.scss
|
||||
├── services/
|
||||
│ └── register.service.ts
|
||||
└── utils/
|
||||
├── register_parser.ts
|
||||
└── register_parsers/
|
||||
├── reg_default.ts
|
||||
└── reg_f0.ts
|
||||
```
|
||||
- **`data/`**: Contains the raw input data for the Spectrum Next explorer.
|
||||
- `nextreg.txt`: Main register definition file.
|
||||
- `custom_parsers.txt`, `wikilinks.txt`: Auxiliary configuration/data used by the parser.
|
||||
- **`src/app/`**: Next.js App Router entrypoint.
|
||||
- `layout.tsx`: Root layout for all routes.
|
||||
- `page.tsx`: Application home page.
|
||||
- `registers/`: Routes and components for the register explorer.
|
||||
- `page.tsx`: Server Component that loads and lists all registers.
|
||||
- `RegisterBrowser.tsx`: Client Component implementing search/filter and listing.
|
||||
- `RegisterDetail.tsx`: Client Component that renders a single register’s details, including modes, notes, and source modal.
|
||||
- `[hex]/page.tsx`: Dynamic route that renders details for a specific register by hex address.
|
||||
- **`src/components/`**: Shared UI components such as `Navbar` and `ThemeDropdown`.
|
||||
- **`src/services/register.service.ts`**: Service layer responsible for loading and caching parsed register data.
|
||||
- **`src/utils/register_parser.ts` & `src/utils/register_parsers/`**: Parsing logic for `nextreg.txt`, including mode/bitfield handling and any register-specific parsing extensions.
|
||||
|
||||
## Implementation Details
|
||||
|
||||
Comment what the code does, not what the agent has done. The documentation's purpose is the state of the application today, not a log of actions taken.
|
||||
|
||||
### Data Parsing
|
||||
|
||||
- `getRegisters()` in `src/services/register.service.ts`:
|
||||
- Reads `data/nextreg.txt` from disk.
|
||||
- Uses `parseNextReg()` from `src/utils/register_parser.ts` to convert the raw text into an array of `Register` objects.
|
||||
- Returns the in-memory representation of all registers (and can be extended to cache results across calls).
|
||||
|
||||
- `parseNextReg()` and related helpers in `register_parser.ts`:
|
||||
- Parse the custom `nextreg.txt` format into structured data:
|
||||
- Register addresses (hex/dec).
|
||||
- Names, notes, and descriptive text.
|
||||
- Per-mode read/write/common bitfield views.
|
||||
- Optional source lines and external links (e.g. wiki URLs).
|
||||
- Delegate special-case parsing to functions in `src/utils/register_parsers/` (e.g. `reg_default.ts`, `reg_f0.ts`) when needed.
|
||||
|
||||
### React / Next.js Patterns
|
||||
|
||||
- **Server Components**:
|
||||
- `src/app/registers/page.tsx` and `src/app/registers/[hex]/page.tsx` are Server Components.
|
||||
- They call `getRegisters()` on the server and pass the resulting data down to client components as props.
|
||||
|
||||
- **Client Components**:
|
||||
- `RegisterBrowser.tsx`:
|
||||
- Marked with `'use client'`.
|
||||
- Uses React state to manage search input and filtered results.
|
||||
- Renders a list or grid of registers.
|
||||
- `RegisterDetail.tsx`:
|
||||
- Marked with `'use client'`.
|
||||
- Renders a single register with tabs for different access modes.
|
||||
- Uses a modal to show the original source lines for the register.
|
||||
|
||||
- **Dynamic Routing**:
|
||||
- `src/app/registers/[hex]/page.tsx`:
|
||||
- Resolves the `[hex]` URL segment.
|
||||
- Looks up the corresponding register by `hex_address`.
|
||||
- Calls `notFound()` when no matching register exists.
|
||||
|
||||
### Working Patterns***
|
||||
|
||||
- git branching:
|
||||
- Do not create new branches
|
||||
- git commits:
|
||||
- Do not commit code - just create COMMIT_EDITMSG file for manual commiting.
|
||||
- git commit messages:
|
||||
- Use imperative mood (e.g., "Add feature X", "Fix bug Y").
|
||||
- Include relevant issue numbers if applicable.
|
||||
- Sign-off commit message as Junie@<hostname>
|
||||
Reference in New Issue
Block a user