refactor: low-regret cleanup across core, engine, dashboard

- core: extract ai-engine-loader.ts to share @fusion/engine dynamic-import
  boilerplate between ai-summarize and memory-compaction (incl. AgentMessage
  type); collapse getInbox/getOutbox, listInsights/countInsights,
  listRuns/countRuns, and three hasProjectDb* variants behind shared helpers.
- core: drop unused pluginLoaderLog export; tighten two `any` casts
  (db.walCheckpoint row, plugin-loader error.code).
- engine: extract resolveRoleFallback helper from buildSessionSkillContext/Sync;
  remove 22 stale `eslint-disable no-explicit-any` directives across
  project-engine, self-healing, triage, worktree-pool.
- dashboard: apply ESLint autofix (let→const, empty `interface extends`→type).

All three packages: typecheck clean, full test suites pass (14,414 tests),
builds clean. Net lint: -31 warnings. No public behavior changes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsxdsm
2026-04-19 13:33:19 -07:00
parent 2dde0b174a
commit fc30dc48fd
18 changed files with 174 additions and 266 deletions

View File

@@ -15,30 +15,7 @@
import type { ProjectSettings } from "./types.js";
import type { ScheduledTaskCreateInput } from "./automation.js";
// Dynamic import for @fusion/engine to avoid resolution issues in test environment
// eslint-disable-next-line @typescript-eslint/no-explicit-any
type AgentResult = any;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let createKbAgent: any;
// Initialize the import (this runs in actual server, mocked in tests)
async function initEngine() {
if (!createKbAgent) {
try {
// Use dynamic import with variable to prevent static analysis
const engineModule = "@fusion/engine";
const engine = await import(/* @vite-ignore */ engineModule);
createKbAgent = engine.createKbAgent;
} catch {
// Allow failure in test environments - agent functionality will be stubbed
createKbAgent = undefined;
}
}
}
// Initialize on module load (will be awaited in actual usage)
const engineReady = initEngine();
import { getKbAgent, type AgentMessage } from "./ai-engine-loader.js";
// ── Constants ───────────────────────────────────────────────────────────────
@@ -102,9 +79,7 @@ export async function compactMemoryWithAi(
provider?: string,
modelId?: string
): Promise<string> {
// Ensure engine is loaded before using createKbAgent
await engineReady;
const createKbAgent = await getKbAgent();
if (!createKbAgent) {
if (DEBUG) console.log("[memory-compaction] AI engine not available");
throw new AiServiceError("AI engine not available");
@@ -151,12 +126,6 @@ export async function compactMemoryWithAi(
if (DEBUG) console.log("[memory-compaction] Prompt sent, extracting response from messages...");
// Get the response text from the agent's state
interface AgentMessage {
role: string;
content?: string | Array<{ type: string; text: string }>;
}
const messages: AgentMessage[] = agentResult.session.state?.messages ?? [];
const assistantMessages = messages.filter((m: AgentMessage) => m.role === "assistant");