mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-07-12 21:02:17 +02:00
Skills now own their tools. The copilot attaches only a small hardcoded base set (~16 tools instead of all ~42); loading a skill via loadSkill attaches its declared tools as native tool definitions from the very next model step, and they stay attached for the rest of the session. - tools_extended: new durable turn event (the one sanctioned exception to per-turn tool immutability — explicit, replayable, never silent). Reducer tracks extensions per model-call index; effectiveTools() composes base + extensions for both the live loop and inspect. - Runtime: sync tool results may carry metadata.toolAdditions; dedupe and the durable append run atomically on the serialized commit chain (safe under concurrent sync tools). Crash recovery rebuilds the extended toolset from the log. - Skills declare tools (SkillDefinition.tools; SKILL.md tools:/ allowed-tools frontmatter); catalog entries list them; loadSkill returns them via a reserved $toolAdditions key the registry lifts into result metadata. builtin-tools skill = escape hatch, derived as "every non-base builtin" at module init. - Sessions derive composition.activeSkills from the previous turn's request + its tools_extended events; the resolver attaches active skills' tools on top of the base set (stable order, so snapshot inheritance keeps working). - Legacy code-mode path keeps working on the base set (which includes code_agent_run/launch-code-task) and strips $toolAdditions. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| docs | ||
| scripts | ||
| src | ||
| .gitignore | ||
| package.json | ||
| tsconfig.build.json | ||
| tsconfig.json | ||
| vitest.config.ts | ||