mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-15 05:02:07 +00:00
fix(coding-agent): tighten session_before emit typing and test env filtering
This commit is contained in:
parent
2668326e05
commit
6822691a81
2 changed files with 36 additions and 13 deletions
|
|
@ -38,6 +38,8 @@ import type {
|
||||||
ResourcesDiscoverEvent,
|
ResourcesDiscoverEvent,
|
||||||
ResourcesDiscoverResult,
|
ResourcesDiscoverResult,
|
||||||
SessionBeforeCompactResult,
|
SessionBeforeCompactResult,
|
||||||
|
SessionBeforeForkResult,
|
||||||
|
SessionBeforeSwitchResult,
|
||||||
SessionBeforeTreeResult,
|
SessionBeforeTreeResult,
|
||||||
ToolCallEvent,
|
ToolCallEvent,
|
||||||
ToolCallEventResult,
|
ToolCallEventResult,
|
||||||
|
|
@ -108,6 +110,27 @@ type RunnerEmitEvent = Exclude<
|
||||||
| InputEvent
|
| InputEvent
|
||||||
>;
|
>;
|
||||||
|
|
||||||
|
type SessionBeforeEvent = Extract<
|
||||||
|
RunnerEmitEvent,
|
||||||
|
{ type: "session_before_switch" | "session_before_fork" | "session_before_compact" | "session_before_tree" }
|
||||||
|
>;
|
||||||
|
|
||||||
|
type SessionBeforeEventResult =
|
||||||
|
| SessionBeforeSwitchResult
|
||||||
|
| SessionBeforeForkResult
|
||||||
|
| SessionBeforeCompactResult
|
||||||
|
| SessionBeforeTreeResult;
|
||||||
|
|
||||||
|
type RunnerEmitResult<TEvent extends RunnerEmitEvent> = TEvent extends { type: "session_before_switch" }
|
||||||
|
? SessionBeforeSwitchResult | undefined
|
||||||
|
: TEvent extends { type: "session_before_fork" }
|
||||||
|
? SessionBeforeForkResult | undefined
|
||||||
|
: TEvent extends { type: "session_before_compact" }
|
||||||
|
? SessionBeforeCompactResult | undefined
|
||||||
|
: TEvent extends { type: "session_before_tree" }
|
||||||
|
? SessionBeforeTreeResult | undefined
|
||||||
|
: undefined;
|
||||||
|
|
||||||
export type ExtensionErrorListener = (error: ExtensionError) => void;
|
export type ExtensionErrorListener = (error: ExtensionError) => void;
|
||||||
|
|
||||||
export type NewSessionHandler = (options?: {
|
export type NewSessionHandler = (options?: {
|
||||||
|
|
@ -480,20 +503,18 @@ export class ExtensionRunner {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private isSessionBeforeEvent(
|
private isSessionBeforeEvent(event: RunnerEmitEvent): event is SessionBeforeEvent {
|
||||||
type: string,
|
|
||||||
): type is "session_before_switch" | "session_before_fork" | "session_before_compact" | "session_before_tree" {
|
|
||||||
return (
|
return (
|
||||||
type === "session_before_switch" ||
|
event.type === "session_before_switch" ||
|
||||||
type === "session_before_fork" ||
|
event.type === "session_before_fork" ||
|
||||||
type === "session_before_compact" ||
|
event.type === "session_before_compact" ||
|
||||||
type === "session_before_tree"
|
event.type === "session_before_tree"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async emit(event: RunnerEmitEvent): Promise<SessionBeforeCompactResult | SessionBeforeTreeResult | undefined> {
|
async emit<TEvent extends RunnerEmitEvent>(event: TEvent): Promise<RunnerEmitResult<TEvent>> {
|
||||||
const ctx = this.createContext();
|
const ctx = this.createContext();
|
||||||
let result: SessionBeforeCompactResult | SessionBeforeTreeResult | undefined;
|
let result: SessionBeforeEventResult | undefined;
|
||||||
|
|
||||||
for (const ext of this.extensions) {
|
for (const ext of this.extensions) {
|
||||||
const handlers = ext.handlers.get(event.type);
|
const handlers = ext.handlers.get(event.type);
|
||||||
|
|
@ -503,10 +524,10 @@ export class ExtensionRunner {
|
||||||
try {
|
try {
|
||||||
const handlerResult = await handler(event, ctx);
|
const handlerResult = await handler(event, ctx);
|
||||||
|
|
||||||
if (this.isSessionBeforeEvent(event.type) && handlerResult) {
|
if (this.isSessionBeforeEvent(event) && handlerResult) {
|
||||||
result = handlerResult as SessionBeforeCompactResult | SessionBeforeTreeResult;
|
result = handlerResult as SessionBeforeEventResult;
|
||||||
if (result.cancel) {
|
if (result.cancel) {
|
||||||
return result;
|
return result as RunnerEmitResult<TEvent>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
@ -522,7 +543,7 @@ export class ExtensionRunner {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result as RunnerEmitResult<TEvent>;
|
||||||
}
|
}
|
||||||
|
|
||||||
async emitToolResult(event: ToolResultEvent): Promise<ToolResultEventResult | undefined> {
|
async emitToolResult(event: ToolResultEvent): Promise<ToolResultEventResult | undefined> {
|
||||||
|
|
|
||||||
2
test.sh
2
test.sh
|
|
@ -35,6 +35,8 @@ unset ZAI_API_KEY
|
||||||
unset MISTRAL_API_KEY
|
unset MISTRAL_API_KEY
|
||||||
unset MINIMAX_API_KEY
|
unset MINIMAX_API_KEY
|
||||||
unset MINIMAX_CN_API_KEY
|
unset MINIMAX_CN_API_KEY
|
||||||
|
unset KIMI_API_KEY
|
||||||
|
unset HF_TOKEN
|
||||||
unset AI_GATEWAY_API_KEY
|
unset AI_GATEWAY_API_KEY
|
||||||
unset OPENCODE_API_KEY
|
unset OPENCODE_API_KEY
|
||||||
unset COPILOT_GITHUB_TOKEN
|
unset COPILOT_GITHUB_TOKEN
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue