Learning-driven command correction: Phase 2 & 3
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- javascript, markdown, rust, shell
- Ambito
- cli, devtools, documentation, testing-qa
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- Rust
- Stelle
- 62
- Fork
- 5
- Merge medio
- 2h 27m
- PR unite (30g)
- 1
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di terraphim/terraphim-ai
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
terraphim/terraphim-ai#885 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
terraphim/terraphim-ai#871 ·
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
terraphim/terraphim-ai#729 ·
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
terraphim/terraphim-ai#728 ·
-
enhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
terraphim/terraphim-ai#727 · 1 commento ·
Tutte le issue di terraphim/terraphim-ai
Issue simili
-
risk:low runtime status:in-progress type:test
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
zeroclaw-labs/zeroclaw#11023 ·
-
good first issue refactor
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
EricSpencer00/Resilient#4835 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
bisq-network/bisq-musig#204 ·
-
agent:ready documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
cesarferreira/stax#890 ·