Learning-driven command correction: Phase 2 & 3
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 25/100
- Issue-Typ
- Feature
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Ruhig
- Tech-Stack
- javascript, markdown, rust, shell
- Bereich
- cli, devtools, documentation, testing-qa
Rechercherichtung
Start with crates/terraphim_agent/src/learnings/hook.rs and capture.rs, then inspect the existing CLI in crates/terraphim_agent/src/main.rs and tests under crates/terraphim_agent/tests/. Review docs/src/command-rewriting-howto.md and the adapter hook references before choosing an implementation path. Done means prompt corrections are captured, compiled into a thesaurus, applied by replace, documented, and covered by the requested integration tests.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Context
Phase 1 (currently deployed) widens the OpenCode tool.execute.before hook so it pipes whitelisted package-manager commands through terraphim-agent replace, using the Terraphim Engineer role's KG. Verified mappings include:
npm install→bun addnpx create-react-app foo→bunx create-react-app foopip install requests→uv add requestspip install -r requirements.txt→uv syncpython -m pip install fastapi→uv add fastapigit commit -m "fix npm install bug"→git commit -m "fix bun add bug"
See docs/src/command-rewriting-howto.md for the full Phase 1 guide.
Phase 1 uses only the curated KG at ~/.config/terraphim/docs/src/kg/. Captured corrections under ~/Library/Application Support/terraphim/learnings/correction-*.md (written by terraphim-agent learn hook --learn-hook-type user-prompt-submit) are stored but not applied. This issue tracks closing that loop.
Phase 2 – Wire user-prompt-submit into agent hooks
Goal: every time the user types "use X instead of Y" / "prefer X over Y" / "use X not Y" / "switch to X" in a prompt, the existing process_user_prompt_submit parser records a CorrectionType::ToolPreference file.
Work:
- Document which agent events map to
user-prompt-submitfor each adapter (Claude Code, OpenCode, Codex). OpenCode exposes something likeexperimental.chat.messages.transform– confirm the exact event name in@opencode-ai/plugin/dist/index.d.ts. - Add the hook invocation in:
examples/claude-code-hooks/(shell script variant).- An OpenCode plugin that pipes
{ user_prompt }JSON intoterraphim-agent learn hook --format opencode --learn-hook-type user-prompt-submit.
- Unit tests covering the three pattern variants plus negative cases (
"I prefer tea over coffee"should NOT be captured as a tool preference). - Docs: append a Phase 2 section to
docs/src/command-rewriting-howto.mdandcontent/docs/command-rewriting-howto.mdon the terraphim.ai Zola site.
Acceptance: uttering "use uv instead of pip" in a fresh session creates one file under .terraphim/learnings/correction-*.md or the global equivalent.
Phase 3 – Compile captured corrections into a thesaurus
Goal: captured ToolPreference corrections are turned into live replace rules without manual KG authoring.
Work in crates/terraphim_agent/src/learnings/capture.rs:
/// Compile stored corrections of given types into a Thesaurus usable by `replace`.
pub fn compile_corrections_to_thesaurus(
storage_dir: &Path,
correction_types: &[CorrectionType],
) -> Result<Thesaurus, LearningError>
/// Export as Logseq-style KG markdown (one file per corrected term) for review / version control.
pub fn export_corrections_as_kg(
storage_dir: &Path,
correction_type: CorrectionType,
output_dir: &Path,
) -> Result<usize, LearningError>
CLI subcommands in crates/terraphim_agent/src/main.rs:
terraphim-agent learn compile-thesaurus \
--type tool-preference \
--output ~/.config/terraphim/kg/compiled/corrections.json
terraphim-agent learn export-kg \
--type tool-preference \
--output ~/.config/terraphim/kg/commands/
Extend replace (or add a new --extra-thesaurus <file> flag) so hooks can merge compiled corrections over the role's KG thesaurus. Merge semantics: compiled corrections override the base KG (learnt preferences win).
Invalidation: the SQLite thesaurus cache at /tmp/terraphim_sqlite/terraphim.db (keyed thesaurus_<role>.json) must be invalidated when corrections change. Options: (a) touch the mtime of the KG directory; (b) include the corrections-dir mtime in the cache key; (c) ship a terraphim-agent cache invalidate --role <role> command.
Acceptance:
terraphim-agent learn capture-correction --original "pip install" --corrected "uv add" --correction-type tool-preferencecreates a file.terraphim-agent learn compile-thesaurus --type tool-preferenceproduces a JSON with the mapping.terraphim-agent replace "pip install requests" --extra-thesaurus <compiled.json>returnsuv add requestseven if the base KG doesn't have that mapping.- Integration test runs through steps 1-3 with
#[tokio::test]incrates/terraphim_agent/tests/.
Phase 3.5 – OpenCode plugin extension (optional polish)
Modify terraphim-hooks.js (and the reference script in examples/claude-code-hooks/) to:
- Detect when a new
correction-*.mdis written (mtime check on the learnings dir). - Automatically run
terraphim-agent learn compile-thesaurusand pass--extra-thesaurusto the nextreplaceinvocation.
This closes the feedback loop: user says "use uv instead of pip" once → captured → compiled → applied on the next bash call.
Non-goals for this issue
- Expanding the rewriteable-head whitelist beyond package managers. That is a separate conversation about risk (shell syntax is easy to corrupt).
- Multi-user/shared corrections with trust levels (the existing
shared_learningmodule is out of scope here; seeCLAUDE.mdfor that roadmap).
Reference files
docs/src/command-rewriting-howto.md(this repo) – Phase 1 how-to, now on docs.terraphim.ai after next publish.~/projects/personal/private_agents_settings/opencode/plugin/terraphim-hooks.js– current Phase 1 hook implementation (pushed toAlexMikhalev/private_agents_settings).crates/terraphim_agent/src/learnings/hook.rs–process_user_prompt_submit,LearnHookType::UserPromptSubmit.crates/terraphim_agent/src/learnings/capture.rs–CorrectionEvent,capture_correction.crates/terraphim_automata/src/builder.rs– Logseq thesaurus builder.crates/terraphim_automata/src/matcher.rs– Aho-Corasickreplace_matches,MIN_PATTERN_LENGTH = 2.
- Vorherrschende Sprache
- Rust
- Sterne
- 62
- Forks
- 5
- Ø Merge
- 2 Std. 27 Min.
- Gemergte PRs (30 T.)
- 1
Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus terraphim/terraphim-ai
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
terraphim/terraphim-ai#885 ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 55/100
terraphim/terraphim-ai#871 ·
-
enhancement
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
terraphim/terraphim-ai#729 ·
-
enhancement
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
terraphim/terraphim-ai#728 ·
-
enhancement
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
terraphim/terraphim-ai#727 · 1 Kommentar ·
Alle Issues in terraphim/terraphim-ai
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
kwakseongjae/auto-hwp#319 ·
-
area:cli bug filter-quality good first issue priority:medium
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 72/100
bevyengine/bevy#25861 ·
-
comp-datalake
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
ClickHouse/ClickHouse#121222 ·
-
enhancement remote
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100