70 lines
3.6 KiB
Markdown
70 lines
3.6 KiB
Markdown
# AGENTS.md
|
|
|
|
This repo is the source of a `dotnet new` template (shortName `labapi-plugin`) that
|
|
scaffolds SCP: Secret Laboratory LabAPI plugins. This file follows the
|
|
editor/vendor-agnostic [agents.md](https://agents.md) convention for AI coding tools
|
|
other than Claude Code (Cursor, Codex, etc.). **`CLAUDE.md` is this repo's primary,
|
|
detailed instructions file** — read it first if your tooling can. What follows is the
|
|
condensed subset any agent needs, kept in sync with `CLAUDE.md`.
|
|
|
|
## This is template source, not a plugin
|
|
|
|
This section applies only while `.template.config/` is present next to this file —
|
|
i.e. you're editing the template repo itself, not a plugin already generated from it.
|
|
|
|
`.template.config/template.json` makes the dotnet templating engine do a **literal,
|
|
repo-wide string replacement** at generation time (not semantic renaming): this
|
|
folder's own name (`sourceName`) becomes whatever project name a consumer picks, the
|
|
placeholder author name in `EntryPoint.cs` becomes their `--PluginAuthor`, and the
|
|
LabAPI version pinned in the `.csproj`/`EntryPoint.cs` becomes their
|
|
`--LabApiVersion`. See `template.json` for the exact current literals — don't repeat
|
|
them verbatim in prose here, since this file ships inside every generated project and
|
|
an exact match would get silently rewritten too. Don't introduce an exact match of
|
|
one of those literals elsewhere in the repo unless you mean for it to be substituted;
|
|
add a new `template.json` symbol instead of hardcoding a magic string. `EntryPoint`/
|
|
`Config` (the class names) are intentionally **not** substituted — only the namespace
|
|
tracks the project name.
|
|
|
|
## Never invent LabAPI API surface
|
|
|
|
Don't assume a LabAPI class/namespace/method/property/attribute exists. Verify it
|
|
against the restored `Northwood.LabAPI` package (`LabApi.dll`/`LabApi.xml` under
|
|
`%userprofile%\.nuget\packages\northwood.labapi\<version>\lib\net48\`) or
|
|
https://github.com/northwood-studios/LabAPI first. If you can't verify a member,
|
|
say so instead of guessing.
|
|
|
|
## Toolchain choices — don't change without being asked
|
|
|
|
`TargetFramework` is `netstandard2.1` on purpose (LabAPI itself only ships
|
|
`net48`/`net481`), chosen so the plugin still loads under the game's Mono/.NET
|
|
Framework 4.8 host. `LangVersion` is pinned to `14.0`. The `.csproj` suppresses
|
|
exactly `NU1701` (scoped to the `Northwood.LabAPI` `PackageReference`) and `MSB3270`
|
|
(via `ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch=None`) because of that
|
|
netstandard2.1/net48-only-package combination — don't broaden either into a blanket
|
|
suppression or remove them.
|
|
|
|
## Code style and language
|
|
|
|
No `//`, `/* */`, or `///` comments unless the user explicitly asks for them in that
|
|
request; don't add comments restating self-explanatory code — `EntryPoint.cs`/
|
|
`Config.cs` are already comment-free, follow the same standard for new files. All
|
|
text embedded in code (log/console messages, exceptions, config descriptions,
|
|
user-facing strings) defaults to English — e.g. `Logger.Info("Plugin initialized
|
|
successfully")` — except identifiers the user requested (project name, namespace,
|
|
class/method/property/variable names), which are never translated, and text the user
|
|
explicitly asks to be in another language.
|
|
|
|
## Verifying a change
|
|
|
|
No automated tests exist. Verify by generating a real project and building it:
|
|
|
|
```bash
|
|
dotnet new uninstall . && dotnet new install .
|
|
dotnet new labapi-plugin -n VerifyPlugin -o ../_verify/VerifyPlugin
|
|
cd ../_verify/VerifyPlugin && dotnet build
|
|
```
|
|
|
|
Expect `Build succeeded. 0 Warning(s) 0 Error(s)`. See `CLAUDE.md` for the full
|
|
verification notes (cache invalidation after editing `template.json`, Windows cleanup
|
|
caveats).
|