Commit Graph

5 Commits

Author SHA1 Message Date
xiaoshuai 33155181a1 Add AGENTS.md instructions and allow tracking it 2026-10-12 21:13:06 +08:00
xiaoshuai a64ea2acb3 Add memory plugin: three-tier markdown store with plugin-driven retrieval
A durable memory layer for OpenCode. Structure:

  ROOT.md          total plan: goals, hard rules, directory registry,
                   and a scenario -> file routing table
  <category>/
    index.md       one line per file, COMPILED from frontmatter
    <slug>.md      the memory itself

Two roots, same shape: <config>/memory/ (global) and
<project canonical>/.memory/ (project). Project wins on conflict; global
hard rules stay resident everywhere.

Why a plugin rather than a skill that tells the model to read a folder:
model-driven retrieval is unreliable — the model forgets, reads half the
files, or reads the wrong ones. Markdown is the human-facing format; the
plugin is the engine that parses, scores, and injects.

Measured, not assumed: FTS5's two built-in tokenizers both fail on this
corpus. On SQLite 3.53.4 with "部署脚本用 pnpm 而不是 npm...": unicode61
emits 7 terms for the whole sentence and matches 0 hits for "部署";
trigram needs >= 3 characters and also returns 0 for that two-character
word. So tokenization happens in the plugin (CJK bigrams, latin words)
and no SQL index is used — a thousand memories are fine to scan.

index.md and ROOT's two tables are compiled, never hand-edited: a
hand-maintained index drifts, a generated one cannot. Hit counters live
in .state.json so cross-device sync does not conflict on every recall.

Tools are named recall/remember/forget/inspect rather than
write/read/status: generic names were observed shadowing the harness's
own built-in tools.
2026-10-09 10:17:45 +08:00
xiaoshuai 8ba68d7f9a Untrack opencode.json: its shell path is a per-user Windows absolute path
The "shell" field points at C:\Users\<name>\.config\opencode\pwsh.cmd, so
cloning this repo on Linux or macOS left OpenCode trying to exec a shell that
does not exist there.

The file stays untracked on each machine and keeps the UTF-8 fix working
locally. pwsh.cmd remains tracked: it only calls chcp and pwsh.exe from PATH,
so it is portable.
2026-10-09 00:01:49 +08:00
xiaoshuai 3857c1f051 Remove agent-memory plugin; track UTF-8 shell config and npm manifest
agent-memory is removed: upstream (kurbezz/memory) states Windows is not supported, as the skill relies on absolute symlinks into the store and a Bash CLI. The checked-in plugins/agent-memory.js was a git symlink (mode 120000) to a Linux path, which Windows materialised as a 68-byte text file, failing to load with 'AggregateError: 7 errors building'.

Now tracked so the setup is reproducible elsewhere: opencode.json and pwsh.cmd configure the UTF-8 shell (chcp 65001) that OpenCode's -NoProfile PowerShell otherwise lacks, and package.json records better-sqlite3, without which the sqlite plugin fails to resolve.
2026-10-08 23:56:06 +08:00
xiaoshuai 15a1bbcee0 Version OpenCode skills and plugins
Repository sits at the OpenCode config root rather than inside skills/ or
plugins/. OpenCode scans exactly those two subdirectories, and a .git
directory inside either one is picked up as a plugin and fails to load:

  loading plugin id=.../plugins/.git entrypoint=.../plugins/.git/index
  failed to load plugin ... AggregateError: 2 errors building .../plugins/.git/index

The watcher.ignore config option does not help: it only suppresses filesystem
update events, not plugin discovery, and the "-" disable prefix only applies to
plugins listed in opencode.json(c), not auto-discovered ones.

.gitignore admits only skills/ and plugins/ (plus itself). Personal config
(opencode.jsonc, cli.json, service.json) and node_modules stay local.

skills/opencode-plugins  V2-only plugin authoring reference and 7 templates,
                         transcribed from the V2 docs with the URL on every file
plugins/searxng-search   searxng_search tool over a self-hosted SearXNG JSON API
2026-10-08 13:12:10 +08:00