Merge development_mik_6_1 into development #11
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "development_mik_6_1"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Test plan
@thabeta lmk what you think! It is live at hero.gent04.grid.tf (admin, admin, for credentials).
As I see it, we can merge this and then you make an issue/review if we need to change/update something, for example you had good deep design feedback lately.
Thanks!
I checked the AI assistant but for some reason it's not capable of doing the basic tasks like these ?
Requesting changes based on two functional regressions in the new admin conversation/chat flow.
Findings:
GET /api/conversations/:id/messagesreturns raw message content and bypasses the existing secret-redaction path used byGET /api/messages.POST /api/chataccepts anyconversation_idand persists messages even when that conversation does not exist, which creates orphaned history that the conversation endpoints cannot retrieve.I also verified locally on the PR branch that
bun run typecheck,bun test,bun run doctor,bun run doctor:maintenance,bun run doctor:snapshot:export, andbun run doctor:snapshot:importall pass when run sequentially.@ -219,0 +251,4 @@if (!conv) {return Response.json({ error: "Conversation not found" }, { status: 404 });}const msgs = getMessagesByConversation(convId, 100);This new conversation-history endpoint returns
getMessagesByConversation()directly, so it skips theredactSecretsInText()pass used by/api/messages. Conversation-scoped messages can therefore expose stored secrets back to the admin API/UI. Please redactcontenthere before returning.@ -219,0 +291,4 @@if (!message) {return Response.json({ error: "message is required" }, { status: 400 });}const conversationId = body?.conversation_id || undefined;conversation_idis accepted blindly and forwarded into persistence. Because there is no FK onmessages.conversation_idandsaveMessageWithConversation()does not verify existence, a typo or stale ID creates orphaned messages that/api/conversations/:id/messageswill later reject with 404. Please validate the conversation before processing the chat request.Replace broken stdio bridge scripts with UnixSocketMcpServer that talks HTTP directly to service Unix sockets. Uses Bun's native fetch({unix:...}) with curl fallback. Stdio transport kept for external MCP servers. All 54 MCP tools from 6 services now load successfully. Closes lhumina_code/home#34. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>@thabeta thanks checking all this. Yes it was not 100% done but latest changes made should really help. All MCP + services work, even with creation event now. Will review your feedback to ensure I cover it all.
Addressed both review items
@thabeta Both issues from your review are fixed in commit
d912740:1. Secret redaction on conversation messages ✅
GET /api/conversations/:id/messagesnow appliesredactSecretsInText()tocontentbefore returning — matching the existing pattern inGET /api/messages.2. Conversation ID validation on chat ✅
POST /api/chatnow validatesconversation_idexists before processing. Returns404 {"error": "Conversation not found"}for invalid/stale IDs instead of creating orphaned messages.Verified on herodev
conversation_id→ 404 ✅conversation_id→ success, messages persisted correctly ✅GET /conversations/:id/messages→ content redacted ✅GET /conversations/fake-id/messages→ 404 ✅Also in this push
2811a33: Direct HTTP-over-Unix-socket MCP transport — fixes the AI assistant MCP integration (all 54 tools now load, end-to-end verified)CI fixed, all green.
What was wrong:
The old
.github/workflows/ci.ymlusedactions/checkout@v4which needsnode— doesn't exist on our Forgejo runner. Replaced with.forgejo/workflows/test.yamlusingoven/bun:1container and manual git clone.Doctor health check failed because
bun testleaves a dead letter in the SQLite DB (the outbox test creates one on purpose). Doctor seesdead=1and fails. The test tries to isolate via a temp dir butconfig.tscachesdataDirat import time so the override doesn't stick. Fix: reset the data dir before doctor runs. Proper fix would be late-binding config, but that's a separate refactor.Previous review feedback (secret redaction, conversation_id validation) already addressed.