forked from Mirror/pi
feat(coding-agent): internalize reload callbacks
This commit is contained in:
@@ -202,7 +202,7 @@ export class RuntimeReloadError extends Error {
|
||||
}
|
||||
}
|
||||
|
||||
export interface RuntimeReloadHooks {
|
||||
export interface RuntimeReloadCallbacks {
|
||||
beforeReload?(): void | Promise<void>;
|
||||
beforeSessionStart?(): void | Promise<void>;
|
||||
afterReload?(): void | Promise<void>;
|
||||
@@ -248,7 +248,7 @@ export interface ExtensionBindings {
|
||||
abortHandler?: () => void;
|
||||
shutdownHandler?: ShutdownHandler;
|
||||
onError?: ExtensionErrorListener;
|
||||
reloadHooks?: RuntimeReloadHooks;
|
||||
reloadHooks?: RuntimeReloadCallbacks;
|
||||
}
|
||||
|
||||
/** Options for AgentSession.prompt() */
|
||||
@@ -376,7 +376,7 @@ export class AgentSession {
|
||||
private _extensionShutdownHandler?: ShutdownHandler;
|
||||
private _extensionErrorListener?: ExtensionErrorListener;
|
||||
private _extensionErrorUnsubscriber?: () => void;
|
||||
private _runtimeReloadHooks?: RuntimeReloadHooks;
|
||||
private _runtimeReloadHooks?: RuntimeReloadCallbacks;
|
||||
private _extensionsBound = false;
|
||||
private _runtimeAvailability: RuntimeAvailability = "available";
|
||||
private _runtimeReloadError?: RuntimeReloadError;
|
||||
@@ -684,7 +684,7 @@ export class AgentSession {
|
||||
}
|
||||
}
|
||||
|
||||
private async _performReload(hooks: RuntimeReloadHooks | undefined): Promise<void> {
|
||||
private async _performReload(hooks: RuntimeReloadCallbacks | undefined): Promise<void> {
|
||||
let runtimeInvalidated = false;
|
||||
this._runtimeAvailability = "reloading";
|
||||
try {
|
||||
@@ -2774,7 +2774,7 @@ export class AgentSession {
|
||||
|
||||
/** Tear down the old runtime, then enter the same load and start path used during startup. */
|
||||
private async _reloadRuntime(
|
||||
beforeSessionStart: RuntimeReloadHooks["beforeSessionStart"],
|
||||
beforeSessionStart: RuntimeReloadCallbacks["beforeSessionStart"],
|
||||
onInvalidated: () => void,
|
||||
): Promise<void> {
|
||||
const oldRunner = this._extensionRunner;
|
||||
|
||||
@@ -22,7 +22,6 @@ export {
|
||||
type PromptOptions,
|
||||
parseSkillBlock,
|
||||
RuntimeReloadError,
|
||||
type RuntimeReloadHooks,
|
||||
type SessionStats,
|
||||
} from "./core/agent-session.ts";
|
||||
export { readStoredCredential } from "./core/auth-storage.ts";
|
||||
|
||||
@@ -60,7 +60,7 @@ import {
|
||||
type AgentSession,
|
||||
type AgentSessionEvent,
|
||||
parseSkillBlock,
|
||||
type RuntimeReloadHooks,
|
||||
type RuntimeReloadCallbacks,
|
||||
} from "../../core/agent-session.ts";
|
||||
import { type AgentSessionRuntime, SessionImportFileNotFoundError } from "../../core/agent-session-runtime.ts";
|
||||
import {
|
||||
@@ -5662,7 +5662,7 @@ export class InteractiveMode {
|
||||
}
|
||||
}
|
||||
|
||||
private createReloadHooks(): RuntimeReloadHooks {
|
||||
private createReloadHooks(): RuntimeReloadCallbacks {
|
||||
let previousEditor: Component | undefined;
|
||||
let reloadBoxDismissed = true;
|
||||
let chatRestoredBeforeSessionStart = false;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { fauxAssistantMessage } from "@earendil-works/pi-ai";
|
||||
import { Container, Text } from "@earendil-works/pi-tui";
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import type { AgentSessionEvent, RuntimeReloadHooks } from "../../../src/core/agent-session.ts";
|
||||
import type { AgentSessionEvent, RuntimeReloadCallbacks } from "../../../src/core/agent-session.ts";
|
||||
import type { ExtensionUIContext } from "../../../src/core/extensions/index.ts";
|
||||
import { InteractiveMode } from "../../../src/modes/interactive/interactive-mode.ts";
|
||||
import { initTheme, type Theme, theme } from "../../../src/modes/interactive/theme/theme.ts";
|
||||
@@ -137,7 +137,7 @@ type InteractiveModePrototype = {
|
||||
): void;
|
||||
rebindCurrentSession(this: RebindContext, options?: { renderBeforeBind?: boolean }): Promise<void>;
|
||||
handleReloadCommand(this: ReloadCommandContext): Promise<void>;
|
||||
createReloadHooks(this: ReloadCommandContext): RuntimeReloadHooks;
|
||||
createReloadHooks(this: ReloadCommandContext): RuntimeReloadCallbacks;
|
||||
};
|
||||
|
||||
const interactiveModePrototype = InteractiveMode.prototype as unknown as InteractiveModePrototype;
|
||||
|
||||
@@ -1,16 +1,10 @@
|
||||
import { fauxAssistantMessage, fauxToolCall } from "@earendil-works/pi-ai";
|
||||
import { Type } from "typebox";
|
||||
import { afterEach, describe, expect, it } from "vitest";
|
||||
import { RuntimeReloadError } from "../../../src/core/agent-session.ts";
|
||||
import { type RuntimeReloadCallbacks, RuntimeReloadError } from "../../../src/core/agent-session.ts";
|
||||
import { createEventBus } from "../../../src/core/event-bus.ts";
|
||||
import { createExtensionRuntime, loadExtensionFromFactory } from "../../../src/core/extensions/loader.ts";
|
||||
import type {
|
||||
ExtensionContext,
|
||||
ExtensionFactory,
|
||||
LoadExtensionsResult,
|
||||
ResourceLoader,
|
||||
RuntimeReloadHooks,
|
||||
} from "../../../src/index.ts";
|
||||
import type { ExtensionContext, ExtensionFactory, LoadExtensionsResult, ResourceLoader } from "../../../src/index.ts";
|
||||
import { assistantMsg, userMsg } from "../../utilities.ts";
|
||||
import { createHarness, getAssistantTexts, type Harness } from "../harness.ts";
|
||||
|
||||
@@ -47,7 +41,7 @@ async function createReloadingResourceLoader(factory: ExtensionFactory): Promise
|
||||
};
|
||||
}
|
||||
|
||||
const reloadHooks = (beforeReload?: () => void): RuntimeReloadHooks => ({ beforeReload });
|
||||
const reloadHooks = (beforeReload?: () => void): RuntimeReloadCallbacks => ({ beforeReload });
|
||||
|
||||
describe("issue #6552 deferred extension reload", () => {
|
||||
const harnesses: Harness[] = [];
|
||||
|
||||
Reference in New Issue
Block a user