fix(captain/hermes): subscription_name e secret usam profile_name (slug)
Bug: Captain dispatchava pra /webhooks/captain-inbox-<inbox.id>, mas o script hermes-provision criava subscription com nome captain-inbox-<slug>. Mismatch → daemon retornava 404, Sidekiq retentava, AutoReact firava N reactions sem nunca dispatchar pro LLM. Fix: - subscription_name_for(inbox): se o assistant tem hermes_profile_name, usa "captain-inbox-<slug>" (estável por agente). Fallback pra "captain-inbox-<inbox.id>" só se não tiver slug. - subscription_signing_secret(inbox): lê de assistant.hermes_subscription_secret primeiro (DB-driven, gravado pelo script). Fallback pra env var legacy CAPTAIN_HERMES_SUBSCRIPTION_SECRET_INBOX_<id>. Resultado: admin pode apontar Angelina (inbox 1) pra qualquer agente Hermes (Valentina · Hermes / Nina · Hermes / Lara.H / Juliana · Hermes) e o roteamento funciona — não depende mais de inbox.id no path. Renomeei manualmente as subscriptions de Valentina e Nina nos profiles da VPS (eram captain-inbox-1 e captain-inbox-5 legado) pra captain-inbox-valentina e captain-inbox-nina. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
ec50496d21
commit
88a5adb65e
@ -65,13 +65,25 @@ module Captain::Hermes
|
|||||||
"#{webhook_base_url(inbox)}/webhooks/#{subscription_name_for(inbox)}"
|
"#{webhook_base_url(inbox)}/webhooks/#{subscription_name_for(inbox)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Convenção de nome de subscription no Hermes: precisa bater com o que o
|
# Convenção de nome de subscription no Hermes:
|
||||||
# admin criou via `hermes webhook subscribe captain-inbox-<id> ...`.
|
# - Pra Hermes assistant criado pelo Construtor (tem hermes_profile_name):
|
||||||
|
# usa "captain-inbox-<slug>" (única por agente, independente de qual
|
||||||
|
# inbox o admin atrelou).
|
||||||
|
# - Pra agentes legados (Valentina, Nina) criados antes do Construtor:
|
||||||
|
# fallback pro padrão velho "captain-inbox-<inbox.id>".
|
||||||
def subscription_name_for(inbox)
|
def subscription_name_for(inbox)
|
||||||
"captain-inbox-#{inbox.id}"
|
assistant = assistant_for(inbox)
|
||||||
|
if assistant&.hermes_profile_name.present?
|
||||||
|
"captain-inbox-#{assistant.hermes_profile_name}"
|
||||||
|
else
|
||||||
|
"captain-inbox-#{inbox.id}"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def subscription_signing_secret(inbox)
|
def subscription_signing_secret(inbox)
|
||||||
|
assistant = assistant_for(inbox)
|
||||||
|
return assistant.hermes_subscription_secret if assistant&.hermes_subscription_secret.present?
|
||||||
|
|
||||||
ENV.fetch("CAPTAIN_HERMES_SUBSCRIPTION_SECRET_INBOX_#{inbox.id}", nil)
|
ENV.fetch("CAPTAIN_HERMES_SUBSCRIPTION_SECRET_INBOX_#{inbox.id}", nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user