features: /changes, /search, /fork, web_search, prompt memoization, per-turn spend cap, workspace refresh
ci / check (macos-latest) (push) Canceled after 0s
ci / check (ubuntu-latest) (push) Canceled after 0s
ci / check (windows-latest) (push) Canceled after 0s

- /changes diffs the last turn's file snapshot (added/modified/deleted), reusing undo infra via SnapshotStack.peek()
- system prompt memoized behind version counters (notebook/memory/skills/plugins/tools/workspace); hit-rate in /cost, foundation for provider caching
- web_search: DuckDuckGo Lite, keyless, 5 results, SSRF-filtered, in the net set with ask permission
- /search <query>: full-text grep over saved sessions incl. tool-input JSON
- workspace file list re-walks at a turn boundary after writes
- maxSpendPerTurn: per-turn cap stops a runaway step with a notice
- /fork: branch the session at the last turn boundary, original untouched

821 tests pass, typecheck clean, build green
This commit is contained in:
asepharyana committed 2026-09-09 18:06:31 +07:00
1 parent 0bdf642672
commit e709737df1
24 files changed
+720 -41

No files matched your search

+1 -1
View File
@@ -82,7 +82,7 @@ test('a lone slash lists the whole menu', () => {
test('a prefix narrows the menu', () => {
expect(matchCommands('/co').map((c) => c.name)).toEqual(['context', 'compact', 'cost']);
expect(matchCommands('/se').map((c) => c.name)).toEqual(['sessions']);
expect(matchCommands('/se').map((c) => c.name)).toEqual(['sessions', 'search']);
expect(matchCommands('/ag').map((c) => c.name)).toEqual(['agent']);
expect(matchCommands('/th').map((c) => c.name)).toEqual(['think']);
});