/** * [WHO]: Provides bindExtensionCore() — wires AgentSession host methods to ExtensionRunner APIs, including LLM call telemetry (every ctx.completeSimple / completeSimpleWithUsage / completeJson emits one ext_llm_calls row) * [FROM]: Depends on ExtensionRunner, model/session/resource abstractions, slash command metadata, core/platform/telemetry (getExtCallerContext for caller attribution + LlmCallEventInput shape) * [TO]: Consumed by AgentSession when initializing extension runtime capabilities * [HERE]: core/runtime/extension-core-bindings.ts - the LLM-call instrumentation point; reads AsyncLocalStorage context pushed by runner.invokeCommand (user-initiated=true) or runner.invokeHookHandler (user-initiated=false) to attribute each call. is_user_initiated=false rows grouped by extension_name + caller_context are the idle-thinking bug detector. */ import type { Model } from "@catui/ai/types"; import type { ThinkingLevel } from "@catui/agent-core"; import type { SettingsManager } from "../platform/config/settings-manager.js"; import type { ResourceLoader } from "../platform/config/resource-loader.js"; import type { ExtensionActions, ExtensionRunner, ToolInfo } from "../extensions-host/index.js"; import type { ModelRegistry } from "../model-registry.js"; import type { PromptTemplate } from "../prompt/prompt-templates.js"; import type { SessionManager } from "../session/session-manager.js"; import type { ContextUsage } from "../extensions-host/types.js"; import type { CompactionResult } from "../session/compaction/index.js"; type SendMessage = ExtensionActions["sendMessage"]; type SendUserMessage = ExtensionActions["sendUserMessage"]; export interface ExtensionCoreBindingHost { promptTemplates: ReadonlyArray; resourceLoader: ResourceLoader; modelRegistry: ModelRegistry; sessionManager: SessionManager; settingsManager: SettingsManager; shutdownHandler?: () => void; soulManager?: unknown; get model(): Model | undefined; get thinkingLevel(): ThinkingLevel; get isStreaming(): boolean; get pendingMessageCount(): number; get systemPrompt(): string; sendCustomMessage: (message: Parameters[0], options?: Parameters[1]) => Promise; sendUserMessage: (content: Parameters[0], options?: Parameters[1]) => Promise; executeSlashCommand(text: string): Promise; getActiveToolNames(): string[]; getAllTools(): ToolInfo[]; setActiveToolsByName(toolNames: string[]): void; setModel(model: Model): Promise; setThinkingLevel(level: ThinkingLevel): void; abort(): Promise | void; clearFollowUpQueue(): void; getContextUsage(): ContextUsage | undefined; compact(customInstructions?: string): Promise; } export declare function bindExtensionCore(runner: ExtensionRunner, host: ExtensionCoreBindingHost): void; export {};