Repository navigation
Releases: amurru/hakase
Release list
v0.1.0
What's Changed
- feat(cli): add hakase init wizard and actionable first-run errors by @amurru in #99
- feat(cli): add hakase doctor preflight command by @amurru in #100
- docs(roadmap): slice Tier 4 install & distribution, defer darwin by @amurru in #102
- feat(release): add linux arm64 asset and curl|sh installer by @amurru in #103
- docs: rewrite README quickstart for fast binary onboarding by @amurru in #105
- feat(prompt-cache): canonical renderer, frozen turn context, append-only assembly (Phase 1) by @amurru in #111
- fix(session): durable ADK session events visible in-flight (ADK v2.4.0 model contents) by @amurru in #112
- feat(prompt-cache): context classes + project snapshot decoupling (PC-004/PC-005) by @amurru in #114
- feat(prompt-cache): single-rewrite compaction + cache telemetry (PC-006/PC-007; resolves #113) by @amurru in #115
- feat(webui): UX transformation polish across chat, shell, and list views by @amurru in #116
- Release 0.1.0 by @amurru in #117
Full Changelog: v0.1.0-alpha.10...v0.1.0
v0.1.0-alpha.10
What's Changed
- feat(finops): live cost meter, budgets, hakase stats (FO-001..FO-005) by @amurru in #82
- feat(context): implement Context Hygiene (CX-001 to CX-004) by @amurru in #81
- Implement docs/git-tools/tasks.md T7.x structured git tools by @amurru in #83
- Fix -race data races in events_test.go and telegram package by @amurru in #84
- Permissions policy: permissions.json allow/ask/deny per tool+path (PM-001..PM-004, #85) by @amurru in #88
- fix(security): audit-engine findings H1-H2, M1-M6, L1-L7 by @amurru in #89
- docs(workflow): add Jules PR prompt part and AGENTS.md hook by @amurru in #91
- feat(mcp): implement MCP Gateway Phase 1 and Phase 2 (T1.1-T2.3) by @amurru in #92
- MCP Gateway Phase 3 (T3.1 + T3.2) by @amurru in #95
- docs(mcp): complete MCP Gateway documentation and QA sign-off by @amurru in #96
- Release 0.1.0-alpha.10 by @amurru in #97
Full Changelog: v0.1.0-alpha.9...v0.1.0-alpha.10
0.1.0-alpha.9
[0.1.0-alpha.9] - 2026-10-06
Fixed
- A panicking gate-session probe could wedge every later run.
SessionIDFromCtxtook the task registry read-lock, called the probedSessionID(), then unlocked — a panicking implementation skipped the unlock while the recover swallowed the panic, leaking the read-lock permanently, after which every run registration blocked forever. The unlock is now deferred. Found by the full package suite: isolated tests passed and only full-suite ordering hung. - Pre-existing
-racefailures filed as #72 (channel router/dispatch test + telegram run test race on fake counters; reproduce on clean develop; normal suite green) — found during Discord T4.2, left out of scope. - Two documented knowledge features silently never ran. Since the August package split,
SetupRunnerplugged the model callbacks intoDepsfields nothing reads, while the tools read theknowledgepackage vars — sosearch_expansion: truewas a quiet no-op (plain BM25, no error) andsave_knowledgealways used deterministic extraction instead of AI-written summaries/tags/related links. Both now wire directly at startup via a unit-tested helper (the same pattern as the hybridEmbedFn); the deadDepsfields are deleted so the trap cannot recur, and a bridge regression test pins the path the old suite never exercised (it stubbed the vars directly). Cost note: each agentsave_knowledgenow makes one model call on the cheapest configured model (worst case ~3k in / ~200 out tokens, sub-cent, saves are rare) — the documented, pre-split behavior, with the deterministic fallback preserved on failure. Seedocs/knowledge-seams/spec.mdKS-001..KS-006.
Added
-
Durable human-in-the-loop resume (opt-in) - a restart (crash, deploy,
/restart) while a run is blocked on an approval or clarify gate no longer kills the run: answer the pending prompt after restart and the run continues.durable_resume.enabled: trueswitches ADK session history to a JSON store under<sessionsDir>/adk/and records in-flight gate pauses; the classic Runner is unchanged (the ADK graph migration was researched and rejected — seedocs/adk-graph-migration/). A clarify answer resumes the paused turn without re-executing any tool; an approval denial settles immediately, while an approval re-drives a fresh turn under a one-shot pre-grant for the exact command — refused when the paused history already holds completed side-effecting calls, since a re-drive would run them twice. Gates are now context-aware too, so/stopunblocks a pending approval instead of waiting out the expiry. The web UI lists interrupted pauses (GET /api/resumable) and re-emits their prompts at startup behinddurable_resume.auto_resume_on_startup(prompts answered through the unchanged respond endpoints; stale pauses expire aftermax_resume_age_minutes, default 30). TUI gates share the mechanism; channel-transport re-emission is a follow-up. Seedocs/durable-resume/and #74. -
Discord channel transport (DM bot over the gateway) - second
channel.Channelbeside Telegram: DM-only v1 over the gateway websocket (outbound-only, NAT-friendly like Telegram polling) via discordgo v0.29.0 (pure Go, no CGO). Non-privileged intents only (DM content is exempt from MESSAGE_CONTENT, verified in Discord docs); guild messages dropped. Full run lifecycle in DMs (paced status edits ≥5s, chunked 2000-char answers, receipt reactions), approval/clarify buttons over gateway interactions (no public endpoint), all five push events, pairing-code auth in the sharedchannels.json.channels.discordmirrors telegram config +HAKASE_DISCORD_*env; one Service runs both transports with per-transport trace labels. Text-only v1: attachments declined, voice/threads/guilds/slash-registration deferred. Seedocs/discord/spec.mdDC-001..DC-013. -
Hybrid knowledge retrieval (embeddings + BM25 via RRF) - opt-in dense retrieval fused with the existing fielded BM25 through Reciprocal Rank Fusion:
hybrid_search: truewithknowledge_embed_model(e.g.nomic-embed-texton Ollama,text-embedding-3-smallon OpenAI;knowledge_embed_base_urloverrides the endpoint, defaulting to the primarybase_url) routessearch_knowledgethroughHybridSearch, which cosine-ranks every gate-passing note against the query embedding and fuses with BM25 — paraphrase queries recall notes with no token overlap while exact-identifier queries keep BM25 precision. Vectors persist as sidecars (<knowledgedir>/vectors/<slug>.vec.json, validity-gated on note mtime/size + model/dim, lazy batched backfill), so files stay the source of truth with zero new dependencies. Default off: byte-identical search, no network. Runtime endpoint failures degrade to BM25 with a log line (static misconfig fails fast at load); sleep recall and web REST stay BM25-only by design. CLI:knowledge search --hybrid,knowledge bench --hybrid(BM25 vs hybrid tables). Seedocs/hybrid-retrieval/spec.mdHR-001..HR-008. -
Piper TTS audio provider (
generate_audioworks) - the existing local Piper TTS (previously Telegram voice replies only) is routed through the media registry as thepiperaudio provider:audio_provider: piperwith atext_to_speechdefault voice resolves and synthesizes OGG/Opus into the media store (120s default timeout, semaphore, manifest line,<audio controls>snippet).voiceselects the per-language voice like Telegram; default staysoffwith the verbatim actionable message.openai/elevenlabsremain accepted-but-unwired forward-compat. Seedocs/media-generation/spec.mdMG-012. -
Project-scope hooks with content-hash trust -
<project-root>/.hakase/hooks.jsonlayers projectPreToolUse/PostToolUse/SessionStarthooks under the user config (user layer runs first; project files can only add hooks, never disable user hooks or the trust gate). Project handlers execute only after explicit per-hook trust (hakase hooks trust [--all] [--yes] [fingerprint-prefix]): the trust key is a content hash over the resolved argv plus local script bytes, so rewriting a script body lapses trust and the hook is skipped loudly until re-trusted. Untrusted hooks never execute — not a warning that proceeds. This deliberately adopts Codex's content-hash model, not Gemini CLI's fingerprint-and-approve (known-broken, gemini-cli#27900). -
SessionStarthooks - run once per session with stdout/JSON context injected at the head of the first turn (alongside the auto-memory block); empty renders roll back so mid-session trust grants fire later.hakase hooks test <name|prefix>dry-runs any handler with a sample payload and prints the verdict. -
Hook-config write protection -
~/.hakase/hooks-trust.jsonjoins the sandbox sensitive-files deny list, and agent writes to any*/.hakase/hooks.jsonare denied in path confinement (reads stay allowed). Even if a write landed another way, the trust gate still refuses to execute untrusted hooks. -
UserPromptSubmithooks - run on every user prompt with the prompt text in the payload, so hooks can react to content (e.g. inject repo context for test-failure questions); context prepends to the turn, fired once per prompt via a HistoryBuilder slot keyed on message sequence. -
Hook management without restarts - per-hook
"enabled": falseskips execution without touching the content fingerprint (toggling never lapses trust), and user-layer edits recompile the live runner in place:hakase hooks add/rm/enable/disable/on/off,POST /api/hooks/user/*+/masterbehind a full web Hooks page (list, trust, revoke, add/edit forms), and TUI/hookssubcommands (trust --yeswith script-preview review,test,add/update/rm/enable/disable/on/off). External CLI edits reach a running server via SIGHUP; trust grants need neither (mtime-cached). See docs/hooks/usage.md.
[0.1.0-alpha.7] - 2026-09-27
Changed
- Releases are now published as prereleases - every release up to and including
v0.1.0-alpha.6was created without--prerelease, so GitHub treated a0.xalpha as the latest stable release:/releases/latestresolved to an alpha and upgrade tooling would follow it as though it were stable. New tags are flagged at creation, andv0.1.0-alpha.6was re-flagged. Consequence:/releases/latestnow resolves to the newest stable release rather than the newest alpha, so anything following that redirect - a script, acurl .../releases/latest/...URL, a packaging helper - getsv0.1.0-alpha.5until a non-prerelease ever ships. Pin a tag or a version instead if you want the current alpha. Nothing in this repository relied on that redirect (the AURPKGBUILDpins a tag URL), and the flag applies only at creation, so re-running a release for an existing tag will not re-flag it. - mermaid 11.16.1 -> 12.0.0, and diagrams now render differently - a deliberate major upgrade, but it carries three changes worth knowing about before you file a bug.
useMermaid.tsconfigures onlystartOnLoadandsecurityLevel, so all three of mermaid 12's new defaults apply: (1) the default layout flips from dagre to ELK for flowchart, state, class, ER, requirement and use-case diagrams, which upstream describes as changing how existing diagrams look; (2) the default theme becomesredux-colorand the default lookneofor ten diagram types including sequence and state, so those change appearance too; (3) the browser floor rises to Safari 17.4+ / ES2024 and Node 22.12+ (mermaid is lazily imported, so this only affects a client that actually renders a diagram, not the rest of the web UI). ELK ships bundled now, so no extra install; its code is fetched only when a diagram uses it, and the tiny build still falls back to dagre. The previous appearance is one line away if it turns out to be unwanted:layout: 'dagre',theme: 'default'and `...
v0.1.0-alpha.8
What's Changed
- chore(aur): bump hakase-bin to 0.1.0.alpha.7 by @amurru in #60
- perf(agent): cut per-turn prompt cost, stop per-minute cache invalidation, cache MCP tool lists by @amurru in #61
- Release 0.1.0-alpha.8: dead-MCP-server stall, mcp doctor, 36% smaller prompt by @amurru in #62
Full Changelog: v0.1.0-alpha.7...v0.1.0-alpha.8
v0.1.0-alpha.7
What's Changed
- Post-alpha.6 follow-ups: fix the windows release smoke step, bump the AUR PKGBUILD by @amurru in #54
- Regenerate .SRCINFO for 0.1.0.alpha.6 by @amurru in #55
- Close the three post-alpha.6 gaps: dictation fan-out, Telegram model budget, test hermeticity by @amurru in #56
- chore(deps): bump golang.org/x/oauth2 from 0.36.0 to 0.37.0 in the minor-and-patch group by @dependabot[bot] in #50
- chore(deps): bump the minor-and-patch group in /webui with 2 updates by @dependabot[bot] in #51
- chore(deps-dev): bump @types/node from 24.13.3 to 26.6.2 in /webui by @dependabot[bot] in #53
- chore(deps): bump mermaid from 11.16.1 to 12.0.0 in /webui by @dependabot[bot] in #52
- Restore main to the alpha.6 state after four dependency bumps landed on it directly by @amurru in #57
- docs(changelog): record mermaid 12's visible changes by @amurru in #58
- Release 0.1.0-alpha.7: dictation fan-out, Telegram model budget, prereleases, mermaid 12 by @amurru in #59
Full Changelog: v0.1.0-alpha.6...v0.1.0-alpha.7
v0.1.0-alpha.6
What's Changed
- feat: Visual Execution Canvas (ADK node graph) by @amurru in #9
- feat(sleep): SkillOpt-Sleep offline skill-evolution loop (plan phases 0-4) by @amurru in #10
- feat(webui): message navigation rail for chat sessions by @amurru in #11
- chore: sync develop into main (persistence, sandbox, provider fallback, CI, docs) by @amurru in #23
- fix: make the Go test suite pass on Windows (first CI run follow-up) by @amurru in #37
- Agent-written auto-memory (#16) + MCP 2026-07-28 upgrade (#17) by @amurru in #35
- chore: sync develop into main (darwin builds, darwin CI, CodeQL security fixes) by @amurru in #41
- test(web) unpin x/time, chore(deps) ignore typescript majors by @amurru in #42
- chore(deps): bump actions/setup-node from 4 to 7 by @dependabot[bot] in #24
- chore(deps): bump actions/setup-go from 5 to 7 by @dependabot[bot] in #25
- chore(deps): bump actions/checkout from 4 to 7 by @dependabot[bot] in #26
- chore(deps): bump pnpm/action-setup from 4 to 6 by @dependabot[bot] in #28
- chore(deps): bump actions/upload-artifact from 4.6.2 to 7.0.1 by @dependabot[bot] in #27
- chore(deps): bump the minor-and-patch group across 1 directory with 14 updates by @dependabot[bot] in #40
- chore(deps): bump the minor-and-patch group across 1 directory with 15 updates by @dependabot[bot] in #30
- chore(deps-dev): bump vitest from 4.1.11 to 5.0.1 in /webui by @dependabot[bot] in #31
- chore(deps): bump vue-router from 4.6.4 to 5.3.1 in /webui by @dependabot[bot] in #34
- chore(deps): bump @vueuse/core from 14.4.0 to 15.0.0 in /webui by @dependabot[bot] in #33
- fix(mcp): scheme-gate the OAuth browser opener; fix(config): strict HAKASE_* env overrides by @amurru in #43
- Voice notes (whisper.cpp in / Piper out), session rewind, OTel GenAI tracing by @amurru in #44
- feat(webui): add voice dictation support via local whisper STT by @amurru in #47
- feat(mcp): hakase runs as MCP tools via 'mcp serve --agent' (#45) by @amurru in #46
- refactor: move STT and TTS config to top-level Config by @amurru in #48
- Release 0.1.0-alpha.6: MCP server mode, voice in/out, OTel tracing, auto-memory, session rewind, canvas by @amurru in #49
New Contributors
- @dependabot[bot] made their first contribution in #24
Full Changelog: v0.1.0-alpha.5...v0.1.0-alpha.6
v0.1.0-alpha.5
What's Changed
- Git tools, project registry & web project management by @amurru in #6
- fix(deps): bump grpc to v1.83.1 (CVE-2026-84304, DoS via HTTP/2 frame… by @amurru in #7
- Telegram channels, git tools + project registry, keyless web search fallback, session management by @amurru in #8
Full Changelog: v0.1.0-alpha.4...v0.1.0-alpha.5
v0.1.0-alpha.4
What's Changed
- Sidekick second-model advisor, web slash-command palette, and /compact endpoint by @amurru in #4
- feat: native Windows port (Path A) + any-browser MCP presets by @amurru in #5
Full Changelog: v0.1.0-alpha.3...v0.1.0-alpha.4
v0.1.0-alpha.3
Full Changelog: v0.1.0-alpha.2...v0.1.0-alpha.3
v0.1.0-alpha.2
Full Changelog: v0.1.0-alpha.1...v0.1.0-alpha.2