feat: M1-M7 gap audit phase 3 — context prefix, deferred tools, compact hooks
Gap 11 (M6): Fixed context prefix - Window.PrefixMessages stores immutable docs (CLAUDE.md, .gnoma/GNOMA.md) - Prefix stripped before compaction, prepended after — survives all compaction - AllMessages() returns prefix + history for provider requests - main.go loads CLAUDE.md and .gnoma/GNOMA.md at startup as prefix Gap 12 (M6): Deferred tool loading - DeferrableTool optional interface: ShouldDefer() bool - buildRequest() skips deferred tools until activated - Tools auto-activate on first model request (activatedTools map) - agent + spawn_elfs marked as deferrable (large schemas, rarely needed early) - Saves ~800 tokens per deferred tool per request Gap 13 (M6): Pre/post compact hooks - OnPreCompact/OnPostCompact callbacks in WindowConfig - Called in doCompact() (shared by CompactIfNeeded + ForceCompact) - M8 hooks system will extend these to full protocol
This commit is contained in:
@@ -55,6 +55,10 @@ type Engine struct {
|
||||
// Cached model capabilities, resolved lazily
|
||||
modelCaps *provider.Capabilities
|
||||
modelCapsFor string // model ID the cached caps are for
|
||||
|
||||
// Deferred tool loading: tools with ShouldDefer() are excluded until
|
||||
// the model requests them. Activated on first use.
|
||||
activatedTools map[string]bool
|
||||
}
|
||||
|
||||
// New creates an engine.
|
||||
@@ -67,8 +71,9 @@ func New(cfg Config) (*Engine, error) {
|
||||
logger = slog.Default()
|
||||
}
|
||||
return &Engine{
|
||||
cfg: cfg,
|
||||
logger: logger,
|
||||
cfg: cfg,
|
||||
logger: logger,
|
||||
activatedTools: make(map[string]bool),
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user