fix: remove inline imports and debug logging

- Convert all inline import() types to top-level imports
- Remove debug console.error statements from plan-mode hook
This commit is contained in:
Helmut Januschka 2026-01-03 22:36:44 +01:00 committed by Mario Zechner
parent a169029a16
commit 277d7bd83b
4 changed files with 14 additions and 25 deletions

View file

@ -322,7 +322,6 @@ export default function planModeHook(pi: HookAPI) {
const nextStep = todoItems.find((t) => !t.completed);
if (nextStep) {
nextStep.completed = true;
console.error(`[plan-mode] Marked step ${nextStep.step} complete (tool): ${nextStep.text}`);
updateStatus(ctx);
}
});
@ -330,11 +329,9 @@ export default function planModeHook(pi: HookAPI) {
// Filter out stale plan mode context messages from LLM context
// This ensures the agent only sees the CURRENT state (plan mode on/off)
pi.on("context", async (event) => {
console.error(`[plan-mode] context event: planModeEnabled=${planModeEnabled}, executionMode=${executionMode}, msgs=${event.messages.length}`);
// Only filter when NOT in plan mode (i.e., when executing)
if (planModeEnabled) {
console.error("[plan-mode] skipping filter - plan mode enabled");
return;
}
@ -346,26 +343,21 @@ export default function planModeHook(pi: HookAPI) {
(c) => c.type === "text" && c.text.includes("[PLAN MODE ACTIVE]"),
);
if (hasOldContext) {
console.error("[plan-mode] FILTERING OUT message with [PLAN MODE ACTIVE]");
return false;
}
}
return true;
});
console.error(`[plan-mode] filtered ${beforeCount} -> ${filtered.length} messages`);
return { messages: filtered };
});
// Inject plan mode context
pi.on("before_agent_start", async () => {
console.error(`[plan-mode] before_agent_start: planModeEnabled=${planModeEnabled}, executionMode=${executionMode}`);
if (!planModeEnabled && !executionMode) {
console.error("[plan-mode] before_agent_start: no injection needed");
return;
}
if (planModeEnabled) {
console.error("[plan-mode] before_agent_start: injecting PLAN MODE ACTIVE");
return {
message: {
customType: "plan-mode-context",
@ -390,7 +382,6 @@ Do NOT attempt to make changes - just describe what you would do.`,
}
if (executionMode && todoItems.length > 0) {
console.error("[plan-mode] before_agent_start: injecting EXECUTING PLAN context");
const remaining = todoItems.filter((t) => !t.completed);
const todoList = remaining.map((t) => `${t.step}. ${t.text}`).join("\n");
return {
@ -406,7 +397,6 @@ Execute each step in order.`,
},
};
}
console.error("[plan-mode] before_agent_start: no context injected (shouldn't reach here)");
});
// After agent finishes
@ -478,8 +468,6 @@ Execute each step in order.`,
if (choice?.startsWith("Execute")) {
planModeEnabled = false;
executionMode = hasTodos;
console.error(`[plan-mode] EXECUTING: planModeEnabled=${planModeEnabled}, executionMode=${executionMode}`);
console.error(`[plan-mode] Setting tools to: ${NORMAL_MODE_TOOLS.join(", ")}`);
pi.setActiveTools(NORMAL_MODE_TOOLS);
updateStatus(ctx);
@ -554,7 +542,6 @@ Execute each step in order.`,
const nextStep = todoItems.find((t) => !t.completed);
if (nextStep) {
nextStep.completed = true;
console.error(`[plan-mode] Marked step ${nextStep.step} complete (no-tool turn): ${nextStep.text}`);
updateStatus(ctx);
}
}

View file

@ -12,7 +12,7 @@ import { getAgentDir } from "../../config.js";
import type { HookMessage } from "../messages.js";
import type { SessionManager } from "../session-manager.js";
import { execCommand } from "./runner.js";
import type { ExecOptions, HookAPI, HookFactory, HookMessageRenderer, RegisteredCommand } from "./types.js";
import type { ExecOptions, HookAPI, HookContext, HookFactory, HookMessageRenderer, RegisteredCommand } from "./types.js";
// Create require function to resolve module paths at runtime
const require = createRequire(import.meta.url);
@ -101,7 +101,7 @@ export interface HookShortcut {
/** Description for help */
description?: string;
/** Handler function */
handler: (ctx: import("./types.js").HookContext) => Promise<void> | void;
handler: (ctx: HookContext) => Promise<void> | void;
/** Hook path that registered this shortcut */
hookPath: string;
}
@ -296,7 +296,7 @@ function createHookAPI(
shortcut: string,
options: {
description?: string;
handler: (ctx: import("./types.js").HookContext) => Promise<void> | void;
handler: (ctx: HookContext) => Promise<void> | void;
},
): void {
shortcuts.set(shortcut, { shortcut, hookPath, ...options });

View file

@ -3,13 +3,15 @@
*/
import type { AgentMessage } from "@mariozechner/pi-agent-core";
import type { Model } from "@mariozechner/pi-ai";
import type { ImageContent, Model } from "@mariozechner/pi-ai";
import { theme } from "../../modes/interactive/theme/theme.js";
import type { ModelRegistry } from "../model-registry.js";
import type { SessionManager } from "../session-manager.js";
import type {
AppendEntryHandler,
BranchHandler,
HookFlag,
HookShortcut,
LoadedHook,
NavigateTreeHandler,
NewSessionHandler,
@ -176,8 +178,8 @@ export class HookRunner {
/**
* Get all CLI flags registered by hooks.
*/
getFlags(): Map<string, import("./loader.js").HookFlag> {
const allFlags = new Map<string, import("./loader.js").HookFlag>();
getFlags(): Map<string, HookFlag> {
const allFlags = new Map<string, HookFlag>();
for (const hook of this.hooks) {
for (const [name, flag] of hook.flags) {
allFlags.set(name, flag);
@ -221,8 +223,8 @@ export class HookRunner {
* Conflicts with built-in shortcuts are skipped with a warning.
* Conflicts between hooks are logged as warnings.
*/
getShortcuts(): Map<string, import("./loader.js").HookShortcut> {
const allShortcuts = new Map<string, import("./loader.js").HookShortcut>();
getShortcuts(): Map<string, HookShortcut> {
const allShortcuts = new Map<string, HookShortcut>();
for (const hook of this.hooks) {
for (const [key, shortcut] of hook.shortcuts) {
const normalizedKey = key.toLowerCase();
@ -486,7 +488,7 @@ export class HookRunner {
*/
async emitBeforeAgentStart(
prompt: string,
images?: import("@mariozechner/pi-ai").ImageContent[],
images?: ImageContent[],
): Promise<BeforeAgentStartEventResult | undefined> {
const ctx = this.createContext();
let result: BeforeAgentStartEventResult | undefined;

View file

@ -31,7 +31,7 @@ import { exec, spawn, spawnSync } from "child_process";
import { APP_NAME, getAuthPath, getDebugLogPath } from "../../config.js";
import type { AgentSession, AgentSessionEvent } from "../../core/agent-session.js";
import type { CustomToolSessionEvent, LoadedCustomTool } from "../../core/custom-tools/index.js";
import type { HookUIContext } from "../../core/hooks/index.js";
import type { HookContext, HookRunner, HookUIContext } from "../../core/hooks/index.js";
import { KeybindingsManager } from "../../core/keybindings.js";
import { createCompactionSummaryMessage } from "../../core/messages.js";
import { type SessionContext, SessionManager } from "../../core/session-manager.js";
@ -581,12 +581,12 @@ export class InteractiveMode {
/**
* Set up keyboard shortcuts registered by hooks.
*/
private setupHookShortcuts(hookRunner: import("../../core/hooks/index.js").HookRunner): void {
private setupHookShortcuts(hookRunner: HookRunner): void {
const shortcuts = hookRunner.getShortcuts();
if (shortcuts.size === 0) return;
// Create a context for shortcut handlers
const createContext = (): import("../../core/hooks/types.js").HookContext => ({
const createContext = (): HookContext => ({
ui: this.createHookUIContext(),
hasUI: true,
cwd: process.cwd(),