mirror of
https://github.com/harivansh-afk/clanker-agent.git
synced 2026-04-15 09:01:13 +00:00
update chat
This commit is contained in:
parent
4dc5e1b376
commit
08717ea6d1
2 changed files with 283 additions and 117 deletions
|
|
@ -267,7 +267,7 @@ export class GatewayRuntime {
|
|||
sessionKey: string,
|
||||
listener: (event: GatewayEvent) => void,
|
||||
): Promise<() => void> {
|
||||
const managedSession = await this.requireExistingSession(sessionKey);
|
||||
const managedSession = await this.ensureSession(sessionKey);
|
||||
managedSession.listeners.add(listener);
|
||||
listener({
|
||||
type: "hello",
|
||||
|
|
@ -674,7 +674,10 @@ export class GatewayRuntime {
|
|||
if (!teamId) continue;
|
||||
const rawMembers = Array.isArray(p.members) ? p.members : [];
|
||||
const members = rawMembers
|
||||
.filter((m): m is Record<string, unknown> => typeof m === "object" && m !== null)
|
||||
.filter(
|
||||
(m): m is Record<string, unknown> =>
|
||||
typeof m === "object" && m !== null,
|
||||
)
|
||||
.map((m) => ({
|
||||
id: typeof m.id === "string" ? m.id : "",
|
||||
name: typeof m.name === "string" ? m.name : "Teammate",
|
||||
|
|
@ -810,7 +813,28 @@ export class GatewayRuntime {
|
|||
request: IncomingMessage,
|
||||
response: ServerResponse,
|
||||
): Promise<void> {
|
||||
const origin = request.headers.origin;
|
||||
if (origin) {
|
||||
response.setHeader("Access-Control-Allow-Origin", origin);
|
||||
response.setHeader(
|
||||
"Access-Control-Allow-Methods",
|
||||
"GET, POST, PUT, PATCH, DELETE, OPTIONS",
|
||||
);
|
||||
response.setHeader(
|
||||
"Access-Control-Allow-Headers",
|
||||
"Content-Type, Authorization",
|
||||
);
|
||||
response.setHeader("Access-Control-Allow-Credentials", "true");
|
||||
}
|
||||
|
||||
const method = request.method ?? "GET";
|
||||
|
||||
if (method === "OPTIONS") {
|
||||
response.writeHead(204);
|
||||
response.end();
|
||||
return;
|
||||
}
|
||||
|
||||
const url = new URL(
|
||||
request.url ?? "/",
|
||||
`http://${request.headers.host ?? `${this.config.bind}:${this.config.port}`}`,
|
||||
|
|
@ -989,7 +1013,7 @@ export class GatewayRuntime {
|
|||
const action = sessionMatch[2];
|
||||
|
||||
if (!action && method === "GET") {
|
||||
const session = await this.requireExistingSession(sessionKey);
|
||||
const session = await this.ensureSession(sessionKey);
|
||||
this.writeJson(response, 200, { session: this.createSnapshot(session) });
|
||||
return;
|
||||
}
|
||||
|
|
@ -1176,7 +1200,8 @@ export class GatewayRuntime {
|
|||
response.write("\n");
|
||||
|
||||
const listener = createVercelStreamListener(response);
|
||||
const structuredPartListener = createGatewayStructuredPartListener(response);
|
||||
const structuredPartListener =
|
||||
createGatewayStructuredPartListener(response);
|
||||
let unsubscribe: (() => void) | undefined;
|
||||
let unsubscribeStructured: (() => void) | undefined;
|
||||
let streamingActive = false;
|
||||
|
|
@ -1361,7 +1386,7 @@ export class GatewayRuntime {
|
|||
provider: string,
|
||||
modelId: string,
|
||||
): Promise<{ ok: true; model: { provider: string; modelId: string } }> {
|
||||
const managed = await this.requireExistingSession(sessionKey);
|
||||
const managed = await this.ensureSession(sessionKey);
|
||||
const found = managed.session.modelRegistry.find(provider, modelId);
|
||||
if (!found) {
|
||||
throw new HttpError(404, `Model not found: ${provider}/${modelId}`);
|
||||
|
|
@ -1467,7 +1492,8 @@ export class GatewayRuntime {
|
|||
}
|
||||
|
||||
private getCompanionChannelsSettings(): CompanionChannelsSettings {
|
||||
const globalSettings = this.primarySession.settingsManager.getGlobalSettings();
|
||||
const globalSettings =
|
||||
this.primarySession.settingsManager.getGlobalSettings();
|
||||
const projectSettings =
|
||||
this.primarySession.settingsManager.getProjectSettings();
|
||||
const mergedSettings = mergeRecords(
|
||||
|
|
@ -1475,7 +1501,9 @@ export class GatewayRuntime {
|
|||
isRecord(projectSettings) ? projectSettings : {},
|
||||
);
|
||||
const piChannels = mergedSettings["companion-channels"];
|
||||
return isRecord(piChannels) ? (piChannels as CompanionChannelsSettings) : {};
|
||||
return isRecord(piChannels)
|
||||
? (piChannels as CompanionChannelsSettings)
|
||||
: {};
|
||||
}
|
||||
|
||||
private buildSlackChannelStatus(
|
||||
|
|
@ -1497,7 +1525,8 @@ export class GatewayRuntime {
|
|||
|
||||
if (hasConfig) {
|
||||
if (!adapter) {
|
||||
error = 'Slack requires `companion-channels.adapters.slack = { "type": "slack" }`.';
|
||||
error =
|
||||
'Slack requires `companion-channels.adapters.slack = { "type": "slack" }`.';
|
||||
} else if (adapterType !== "slack") {
|
||||
error = 'Slack adapter type must be "slack".';
|
||||
} else if (!appToken) {
|
||||
|
|
@ -1546,7 +1575,8 @@ export class GatewayRuntime {
|
|||
} else if (adapterType !== "telegram") {
|
||||
error = 'Telegram adapter type must be "telegram".';
|
||||
} else if (!botToken) {
|
||||
error = "Telegram requires companion-channels.adapters.telegram.botToken.";
|
||||
error =
|
||||
"Telegram requires companion-channels.adapters.telegram.botToken.";
|
||||
} else if (!pollingEnabled) {
|
||||
error =
|
||||
"Telegram requires companion-channels.adapters.telegram.polling = true.";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue