Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 19 additions & 9 deletions discord-read/server/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,15 +71,6 @@ const runtime = withRuntime<Env, typeof StateSchema, Registry>({
const organizationId = env.MESH_REQUEST_CONTEXT?.organizationId;
const token = env.MESH_REQUEST_CONTEXT?.token;

// Configure HyperDX logger if API key is provided
if (state?.HYPERDX_API_KEY) {
logger.setApiKey(state.HYPERDX_API_KEY);
logger.info("HyperDX logger configured", {
trace_id: traceId,
organizationId,
});
}

// Database tables are managed via Supabase
console.log("[Setup] Skipping database initialization (using Supabase)");

Expand Down Expand Up @@ -184,6 +175,25 @@ const runtime = withRuntime<Env, typeof StateSchema, Registry>({
const hasAuth = !!env.MESH_REQUEST_CONTEXT?.authorization;
if (hasAuth) {
if (isBotRunning(env)) {
// Bot is already running (possibly via shared client from bootstrap).
// Update the primary instance's env so event handlers get fresh state
// (AGENT config, system prompt, etc.) instead of the empty bootstrap state.
if (connectionId) {
const currentInstance = getInstance(connectionId);
if (currentInstance?.client) {
const { getInstanceByClient } = await import("./bot-instance.ts");
const ownerInstance = getInstanceByClient(currentInstance.client);
if (
ownerInstance &&
ownerInstance.connectionId !== connectionId
) {
ownerInstance.env = env;
console.log(
`[CONFIG] Updated primary instance ${ownerInstance.connectionId} env from ${connectionId} onChange`,
);
}
}
}
console.log(
`[CONFIG] Bot already running for ${connectionId || "unknown"}`,
);
Expand Down
13 changes: 1 addition & 12 deletions discord-read/server/types/env.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,10 @@
*/

import type { Registry } from "@decocms/mcps-shared/registry";
import { AgentOf, BindingOf, type DefaultEnv } from "@decocms/runtime";
import { AgentOf, type DefaultEnv } from "@decocms/runtime";
import z from "zod";

export const StateSchema = z.object({
// Bindings obrigatórias
CONNECTION: BindingOf("@deco/connection"),

// AI Configuration — AgentOf() resolves to a client with .STREAM()
AGENT: AgentOf(),

Expand Down Expand Up @@ -138,14 +135,6 @@ export const StateSchema = z.object({
})
.optional()
.describe("How the bot responds to messages"),

// HyperDX Configuration
HYPERDX_API_KEY: z
.string()
.optional()
.describe(
"HyperDX API key for advanced logging and observability. If not provided, logs will only go to stdout.",
),
});

export type Env = DefaultEnv<typeof StateSchema, Registry>;
Expand Down
Loading