iosm-cli 0.1.3 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/README.md +88 -46
- package/dist/core/agent-teams.d.ts.map +1 -1
- package/dist/core/agent-teams.js +38 -11
- package/dist/core/agent-teams.js.map +1 -1
- package/dist/core/blast.d.ts +62 -0
- package/dist/core/blast.d.ts.map +1 -0
- package/dist/core/blast.js +448 -0
- package/dist/core/blast.js.map +1 -0
- package/dist/core/contract.d.ts +54 -0
- package/dist/core/contract.d.ts.map +1 -0
- package/dist/core/contract.js +300 -0
- package/dist/core/contract.js.map +1 -0
- package/dist/core/failure-retrospective.d.ts +12 -0
- package/dist/core/failure-retrospective.d.ts.map +1 -0
- package/dist/core/failure-retrospective.js +115 -0
- package/dist/core/failure-retrospective.js.map +1 -0
- package/dist/core/project-index/index.d.ts +17 -0
- package/dist/core/project-index/index.d.ts.map +1 -0
- package/dist/core/project-index/index.js +323 -0
- package/dist/core/project-index/index.js.map +1 -0
- package/dist/core/project-index/types.d.ts +34 -0
- package/dist/core/project-index/types.d.ts.map +1 -0
- package/dist/core/project-index/types.js +2 -0
- package/dist/core/project-index/types.js.map +1 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +8 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/semantic/config.d.ts.map +1 -1
- package/dist/core/semantic/config.js +5 -0
- package/dist/core/semantic/config.js.map +1 -1
- package/dist/core/semantic/index.d.ts +1 -1
- package/dist/core/semantic/index.d.ts.map +1 -1
- package/dist/core/semantic/index.js +1 -1
- package/dist/core/semantic/index.js.map +1 -1
- package/dist/core/semantic/runtime.d.ts.map +1 -1
- package/dist/core/semantic/runtime.js +12 -1
- package/dist/core/semantic/runtime.js.map +1 -1
- package/dist/core/semantic/types.d.ts +6 -0
- package/dist/core/semantic/types.d.ts.map +1 -1
- package/dist/core/semantic/types.js +6 -0
- package/dist/core/semantic/types.js.map +1 -1
- package/dist/core/shadow-guard.d.ts +30 -0
- package/dist/core/shadow-guard.d.ts.map +1 -0
- package/dist/core/shadow-guard.js +81 -0
- package/dist/core/shadow-guard.js.map +1 -0
- package/dist/core/shared-memory.d.ts +46 -0
- package/dist/core/shared-memory.d.ts.map +1 -0
- package/dist/core/shared-memory.js +253 -0
- package/dist/core/shared-memory.js.map +1 -0
- package/dist/core/singular.d.ts +73 -0
- package/dist/core/singular.d.ts.map +1 -0
- package/dist/core/singular.js +413 -0
- package/dist/core/singular.js.map +1 -0
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +14 -2
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/subagents.js +1 -1
- package/dist/core/subagents.js.map +1 -1
- package/dist/core/swarm/gates.d.ts +9 -0
- package/dist/core/swarm/gates.d.ts.map +1 -0
- package/dist/core/swarm/gates.js +65 -0
- package/dist/core/swarm/gates.js.map +1 -0
- package/dist/core/swarm/index.d.ts +9 -0
- package/dist/core/swarm/index.d.ts.map +1 -0
- package/dist/core/swarm/index.js +9 -0
- package/dist/core/swarm/index.js.map +1 -0
- package/dist/core/swarm/locks.d.ts +21 -0
- package/dist/core/swarm/locks.d.ts.map +1 -0
- package/dist/core/swarm/locks.js +93 -0
- package/dist/core/swarm/locks.js.map +1 -0
- package/dist/core/swarm/planner.d.ts +16 -0
- package/dist/core/swarm/planner.d.ts.map +1 -0
- package/dist/core/swarm/planner.js +137 -0
- package/dist/core/swarm/planner.js.map +1 -0
- package/dist/core/swarm/retry.d.ts +16 -0
- package/dist/core/swarm/retry.d.ts.map +1 -0
- package/dist/core/swarm/retry.js +32 -0
- package/dist/core/swarm/retry.js.map +1 -0
- package/dist/core/swarm/scheduler.d.ts +48 -0
- package/dist/core/swarm/scheduler.d.ts.map +1 -0
- package/dist/core/swarm/scheduler.js +554 -0
- package/dist/core/swarm/scheduler.js.map +1 -0
- package/dist/core/swarm/spawn.d.ts +16 -0
- package/dist/core/swarm/spawn.d.ts.map +1 -0
- package/dist/core/swarm/spawn.js +42 -0
- package/dist/core/swarm/spawn.js.map +1 -0
- package/dist/core/swarm/state-store.d.ts +35 -0
- package/dist/core/swarm/state-store.d.ts.map +1 -0
- package/dist/core/swarm/state-store.js +106 -0
- package/dist/core/swarm/state-store.js.map +1 -0
- package/dist/core/swarm/types.d.ts +116 -0
- package/dist/core/swarm/types.d.ts.map +1 -0
- package/dist/core/swarm/types.js +2 -0
- package/dist/core/swarm/types.js.map +1 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +6 -3
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/semantic-search.d.ts.map +1 -1
- package/dist/core/tools/semantic-search.js +1 -0
- package/dist/core/tools/semantic-search.js.map +1 -1
- package/dist/core/tools/shared-memory.d.ts +23 -0
- package/dist/core/tools/shared-memory.d.ts.map +1 -0
- package/dist/core/tools/shared-memory.js +134 -0
- package/dist/core/tools/shared-memory.js.map +1 -0
- package/dist/core/tools/task.d.ts +8 -1
- package/dist/core/tools/task.d.ts.map +1 -1
- package/dist/core/tools/task.js +664 -123
- package/dist/core/tools/task.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +8 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +8 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +70 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +27 -4
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/subagent-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/subagent-message.js +14 -0
- package/dist/modes/interactive/components/subagent-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +81 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +3481 -870
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/docs/cli-reference.md +29 -1
- package/docs/configuration.md +5 -0
- package/docs/interactive-mode.md +171 -2
- package/docs/orchestration-and-subagents.md +96 -169
- package/package.json +4 -3
package/dist/core/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport { Agent, type AgentMessage, type ThinkingLevel } from \"@mariozechner/pi-agent-core\";\nimport type { Message, Model } from \"@mariozechner/pi-ai\";\nimport { getAgentDir, getDocsPath } from \"../config.js\";\nimport { createAskUserTool } from \"./ask-user-tool.js\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.js\";\nimport type { ExtensionRunner, LoadExtensionsResult, ToolDefinition } from \"./extensions/index.js\";\nimport { convertToLlm } from \"./messages.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { findInitialModel } from \"./model-resolver.js\";\nimport type { ResourceLoader } from \"./resource-loader.js\";\nimport { DefaultResourceLoader } from \"./resource-loader.js\";\nimport { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\nimport { loadCustomSubagents, resolveCustomSubagentReference } from \"./subagents.js\";\nimport { time } from \"./timings.js\";\nimport { patchAgentForParallelTaskExecution } from \"./parallel-task-agent.js\";\nimport {\n\tallTools,\n\tastGrepTool,\n\tbashTool,\n\tcodingTools,\n\tcombyTool,\n\tcreateAstGrepTool,\n\tcreateBashTool,\n\tcreateCodingTools,\n\tcreateCombyTool,\n\tcreateEditTool,\n\tcreateFdTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateJqTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateRgTool,\n\tcreateSedTool,\n\tcreateSemgrepTool,\n\tcreateSemanticSearchTool,\n\tcreateTaskTool,\n\tcreateToolsFromNames,\n\tcreateWriteTool,\n\teditTool,\n\tfdTool,\n\tfindTool,\n\tgrepTool,\n\tjqTool,\n\tlsTool,\n\treadOnlyTools,\n\treadTool,\n\trgTool,\n\tsedTool,\n\tsemanticSearchTool,\n\tsemgrepTool,\n\ttodoReadTool,\n\ttodoWriteTool,\n\ttype TaskToolProgress,\n\ttype TaskToolProgressPhase,\n\ttype Tool,\n\ttype ToolName,\n\tyqTool,\n\tcreateYqTool,\n\twriteTool,\n} from \"./tools/index.js\";\nimport { getAgentProfile, type AgentProfileName } from \"./agent-profiles.js\";\n\nexport interface CreateAgentSessionOptions {\n\t/** Working directory for project-local discovery. Default: process.cwd() */\n\tcwd?: string;\n\t/** Global config directory. Default: ~/.iosm/agent */\n\tagentDir?: string;\n\n\t/** Auth storage for credentials. Default: AuthStorage.create(agentDir/auth.json) */\n\tauthStorage?: AuthStorage;\n\t/** Model registry. Default: new ModelRegistry(authStorage, agentDir/models.json) */\n\tmodelRegistry?: ModelRegistry;\n\n\t/** Model to use. Default: from settings, else first available */\n\tmodel?: Model<any>;\n\t/** Require explicit model selection by the user; disables automatic model fallback/selection for new sessions. */\n\trequireExplicitModelSelection?: boolean;\n\t/** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n\tthinkingLevel?: ThinkingLevel;\n\t/** Models available for cycling (Ctrl+P in interactive mode) */\n\tscopedModels?: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\n\t/** Built-in tools to use. Default: active profile tools (profile defaults to \"full\"). */\n\ttools?: Tool[];\n\t/** Custom tools to register (in addition to built-in tools). */\n\tcustomTools?: ToolDefinition[];\n\t/** Enable the interactive ask_user clarification tool. Best used in interactive or RPC sessions. */\n\tenableAskUserTool?: boolean;\n\n\t/** Resource loader. When omitted, DefaultResourceLoader is used. */\n\tresourceLoader?: ResourceLoader;\n\n\t/** Session manager. Default: SessionManager.create(cwd) */\n\tsessionManager?: SessionManager;\n\n\t/** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n\tsettingsManager?: SettingsManager;\n\n\t/**\n\t * Agent profile name. Overrides tools and thinkingLevel with profile defaults.\n\t * Profiles: explore, plan, iosm_analyst, iosm_verifier, cycle_planner, full (default).\n\t */\n\tprofile?: AgentProfileName | string;\n\n\t/**\n\t * Whether to register the Task tool (subagent spawning).\n\t * Default: true for interactive/print sessions; false for subagent sessions to avoid recursion.\n\t */\n\tenableTaskTool?: boolean;\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n\t/** The created session */\n\tsession: AgentSession;\n\t/** Extensions result (for UI context setup in interactive mode) */\n\textensionsResult: LoadExtensionsResult;\n\t/** Warning if session was restored with a different model than saved */\n\tmodelFallbackMessage?: string;\n}\n\n// Re-exports\n\nexport type {\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionContext,\n\tExtensionFactory,\n\tSlashCommandInfo,\n\tSlashCommandLocation,\n\tSlashCommandSource,\n\tToolDefinition,\n} from \"./extensions/index.js\";\nexport type { PromptTemplate } from \"./prompt-templates.js\";\nexport type { Skill } from \"./skills.js\";\nexport type { Tool } from \"./tools/index.js\";\n\n\texport {\n\t\tcreateAskUserTool,\n\t\t// Pre-built tools (use process.cwd())\n\t\treadTool,\n\t\tbashTool,\n\t\teditTool,\n\t\twriteTool,\n\t\tgrepTool,\n\t\tfindTool,\n\t\tlsTool,\n\t\trgTool,\n\t\tfdTool,\n\t\tastGrepTool,\n\t\tcombyTool,\n\t\tjqTool,\n\t\tyqTool,\n\t\tsemgrepTool,\n\t\tsedTool,\n\t\tsemanticSearchTool,\n\t\tcodingTools,\n\t\treadOnlyTools,\n\t\tallTools as allBuiltInTools,\n\t\t// Tool factories (for custom cwd)\n\t\tcreateCodingTools,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateBashTool,\n\tcreateEditTool,\n\t\tcreateWriteTool,\n\t\tcreateGrepTool,\n\t\tcreateFindTool,\n\t\tcreateLsTool,\n\t\tcreateRgTool,\n\t\tcreateFdTool,\n\t\tcreateAstGrepTool,\n\t\tcreateCombyTool,\n\t\tcreateJqTool,\n\t\tcreateYqTool,\n\t\tcreateSemgrepTool,\n\t\tcreateSedTool,\n\t\tcreateSemanticSearchTool,\n\t};\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n\treturn getAgentDir();\n}\n\nfunction resolveModelBySpecifier(\n\tmodelRegistry: ModelRegistry,\n\tspecifier: string,\n\tpreferredProvider?: string,\n): Model<any> | undefined {\n\tconst raw = specifier.trim();\n\tif (!raw) return undefined;\n\tconst slash = raw.indexOf(\"/\");\n\tif (slash > 0 && slash < raw.length - 1) {\n\t\tconst provider = raw.slice(0, slash);\n\t\tconst modelId = raw.slice(slash + 1);\n\t\treturn modelRegistry.find(provider, modelId);\n\t}\n\n\tconst all = modelRegistry.getAll().filter((candidate) => candidate.id === raw);\n\tif (all.length === 0) return undefined;\n\tif (preferredProvider) {\n\t\tconst preferred = all.find((candidate) => candidate.provider === preferredProvider);\n\t\tif (preferred) return preferred;\n\t}\n\treturn all[0];\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@mariozechner/pi-ai';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [readTool, bashTool],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(options: CreateAgentSessionOptions = {}): Promise<CreateAgentSessionResult> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst agentDir = options.agentDir ?? getDefaultAgentDir();\n\tconst contextProfile = options.profile?.toString().toLowerCase() === \"iosm\" ? \"iosm\" : \"standard\";\n\tlet resourceLoader = options.resourceLoader;\n\n\t// Use provided or create AuthStorage and ModelRegistry\n\tconst authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n\tconst modelsPath = options.agentDir ? join(agentDir, \"models.json\") : undefined;\n\tconst authStorage = options.authStorage ?? AuthStorage.create(authPath);\n\tconst modelRegistry = options.modelRegistry ?? new ModelRegistry(authStorage, modelsPath);\n\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst sessionManager = options.sessionManager ?? SessionManager.create(cwd);\n\n\tif (!resourceLoader) {\n\t\tresourceLoader = new DefaultResourceLoader({ cwd, agentDir, settingsManager, contextProfile });\n\t\tawait resourceLoader.reload();\n\t\ttime(\"resourceLoader.reload\");\n\t}\n\n\t// Check if session has existing data to restore\n\tconst existingSession = sessionManager.buildSessionContext();\n\tconst hasExistingSession = existingSession.messages.length > 0;\n\tconst hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === \"thinking_level_change\");\n\n\tlet model = options.model;\n\tlet modelFallbackMessage: string | undefined;\n\tconst requireExplicitModelSelection = options.requireExplicitModelSelection === true;\n\n\t// If session has data, try to restore model from it\n\tif (!model && hasExistingSession && existingSession.model) {\n\t\tconst restoredModel = modelRegistry.find(existingSession.model.provider, existingSession.model.modelId);\n\t\tif (restoredModel && (await modelRegistry.getApiKey(restoredModel))) {\n\t\t\tmodel = restoredModel;\n\t\t}\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n\t\t}\n\t}\n\n\t// If still no model, use findInitialModel unless explicit selection is required.\n\tif (!model && !requireExplicitModelSelection) {\n\t\tconst result = await findInitialModel({\n\t\t\tscopedModels: options.scopedModels ?? [],\n\t\t\tisContinuing: hasExistingSession,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelRegistry,\n\t\t});\n\t\tmodel = result.model;\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `No models available. Use /login or set an API key environment variable. See ${join(getDocsPath(), \"providers.md\")}. Then use /model to select a model.`;\n\t\t} else if (modelFallbackMessage) {\n\t\t\tmodelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n\t\t}\n\t} else if (!model && requireExplicitModelSelection && !hasExistingSession) {\n\t\tmodelFallbackMessage = \"No model selected. Choose one with /model or pass --provider and --model.\";\n\t}\n\n\tlet thinkingLevel = options.thinkingLevel;\n\n\t// If session has data, restore thinking level from it\n\tif (thinkingLevel === undefined && hasExistingSession) {\n\t\tthinkingLevel = hasThinkingEntry\n\t\t\t? (existingSession.thinkingLevel as ThinkingLevel)\n\t\t\t: (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n\t}\n\n\t// Fall back to settings default\n\tif (thinkingLevel === undefined) {\n\t\tthinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t}\n\n\t// Clamp to model capabilities\n\tif (!model || !model.reasoning) {\n\t\tthinkingLevel = \"off\";\n\t}\n\n\t// Apply agent profile: default to \"full\" when no explicit profile is provided.\n\t// This keeps runtime tool availability aligned with UI/profile badges.\n\tconst profile = getAgentProfile(options.profile);\n\tif (profile.name !== \"full\") {\n\t\t// Profile overrides thinking level only when caller did not explicitly pass one\n\t\tif (options.thinkingLevel === undefined && !hasExistingSession) {\n\t\t\tthinkingLevel = profile.thinkingLevel;\n\t\t\t// Re-clamp to model capabilities\n\t\t\tif (!model || !model.reasoning) {\n\t\t\t\tthinkingLevel = \"off\";\n\t\t\t}\n\t\t}\n\t}\n\n\tconst enableTaskTool = options.enableTaskTool !== false; // default true\n\tconst profileToolNames: string[] = [...profile.tools, ...(enableTaskTool ? [\"task\"] : []), \"todo_write\", \"todo_read\"].filter(\n\t\t(n) => n === \"task\" || n in allTools,\n\t);\n\n\tconst initialActiveToolNames: string[] = options.tools\n\t\t? options.tools.map((t) => t.name).filter((n) => n === \"task\" || n in allTools)\n\t\t: profileToolNames;\n\n\tlet agent: Agent;\n\n\t// Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n\tconst convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n\t\tconst converted = convertToLlm(messages);\n\t\t// Check setting dynamically so mid-session changes take effect\n\t\tif (!settingsManager.getBlockImages()) {\n\t\t\treturn converted;\n\t\t}\n\t\t// Filter out ImageContent from all messages, replacing with text placeholder\n\t\treturn converted.map((msg) => {\n\t\t\tif (msg.role === \"user\" || msg.role === \"toolResult\") {\n\t\t\t\tconst content = msg.content;\n\t\t\t\tif (Array.isArray(content)) {\n\t\t\t\t\tconst hasImages = content.some((c) => c.type === \"image\");\n\t\t\t\t\tif (hasImages) {\n\t\t\t\t\t\tconst filteredContent = content\n\t\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\t\tc.type === \"image\" ? { type: \"text\" as const, text: \"Image reading is disabled.\" } : c,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(c, i, arr) =>\n\t\t\t\t\t\t\t\t\t// Dedupe consecutive \"Image reading is disabled.\" texts\n\t\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\t\tc.type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\tc.text === \"Image reading is disabled.\" &&\n\t\t\t\t\t\t\t\t\t\ti > 0 &&\n\t\t\t\t\t\t\t\t\t\tarr[i - 1].type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\t(arr[i - 1] as { type: \"text\"; text: string }).text === \"Image reading is disabled.\"\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn { ...msg, content: filteredContent };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn msg;\n\t\t});\n\t};\n\n\tconst extensionRunnerRef: { current?: ExtensionRunner } = {};\n\n\tagent = new Agent({\n\t\tinitialState: {\n\t\t\tsystemPrompt: \"\",\n\t\t\tmodel,\n\t\t\tthinkingLevel,\n\t\t\ttools: [],\n\t\t},\n\t\tconvertToLlm: convertToLlmWithBlockImages,\n\t\tsessionId: sessionManager.getSessionId(),\n\t\ttransformContext: async (messages) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner) return messages;\n\t\t\treturn runner.emitContext(messages);\n\t\t},\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\ttransport: settingsManager.getTransport(),\n\t\tthinkingBudgets: settingsManager.getThinkingBudgets(),\n\t\tmaxRetryDelayMs: settingsManager.getRetrySettings().maxDelayMs,\n\t\tgetApiKey: async (provider) => {\n\t\t\t// Use the provider argument from the in-flight request;\n\t\t\t// agent.state.model may already be switched mid-turn.\n\t\t\tconst resolvedProvider = provider || agent.state.model?.provider;\n\t\t\tif (!resolvedProvider) {\n\t\t\t\tthrow new Error(\"No model selected\");\n\t\t\t}\n\t\t\tconst key = await modelRegistry.getApiKeyForProvider(resolvedProvider);\n\t\t\tif (!key) {\n\t\t\t\tconst model = agent.state.model;\n\t\t\t\tconst isOAuth = model && modelRegistry.isUsingOAuth(model);\n\t\t\t\tif (isOAuth) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Authentication failed for \"${resolvedProvider}\". ` +\n\t\t\t\t\t\t\t`Credentials may have expired or network is unavailable. ` +\n\t\t\t\t\t\t\t`Run '/login ${resolvedProvider}' to re-authenticate.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`No API key found for \"${resolvedProvider}\". ` +\n\t\t\t\t\t\t`Set an API key environment variable or run '/login ${resolvedProvider}'.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn key;\n\t\t},\n\t});\n\tpatchAgentForParallelTaskExecution(agent);\n\n\t// Restore messages if session has existing data\n\tif (hasExistingSession) {\n\t\tagent.replaceMessages(existingSession.messages);\n\t\tif (!hasThinkingEntry) {\n\t\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t}\n\t} else {\n\t\t// Save initial model and thinking level for new sessions so they can be restored on resume\n\t\tif (model) {\n\t\t\tsessionManager.appendModelChange(model.provider, model.id);\n\t\t}\n\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t}\n\n\t// Build Task tool SubagentRunner — spawns isolated sub-sessions without circular imports\n\tconst taskToolRunner = enableTaskTool\n\t\t? async (runnerOptions: {\n\t\t\t\tsystemPrompt: string;\n\t\t\t\ttools: string[];\n\t\t\t\tprompt: string;\n\t\t\t\tcwd: string;\n\t\t\t\tmodelOverride?: string;\n\t\t\t\tsignal?: AbortSignal;\n\t\t\t\tonProgress?: (progress: TaskToolProgress) => void;\n\t\t\t}): Promise<\n\t\t\t\tstring | { output: string; sessionId?: string; stats?: { toolCallsStarted: number; toolCallsCompleted: number; assistantMessages: number } }\n\t\t\t> => {\n\t\t\t\tlet subModel = model;\n\t\t\t\tif (runnerOptions.modelOverride) {\n\t\t\t\t\tconst resolved = resolveModelBySpecifier(\n\t\t\t\t\t\tmodelRegistry,\n\t\t\t\t\t\trunnerOptions.modelOverride,\n\t\t\t\t\t\tmodel?.provider,\n\t\t\t\t\t);\n\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\tthrow new Error(`Unknown model override: ${runnerOptions.modelOverride}`);\n\t\t\t\t\t}\n\t\t\t\t\tif (!(await modelRegistry.getApiKey(resolved))) {\n\t\t\t\t\t\tthrow new Error(`No API key available for model override: ${resolved.provider}/${resolved.id}`);\n\t\t\t\t\t}\n\t\t\t\t\tsubModel = resolved;\n\t\t\t\t}\n\t\t\t\tconst { session: sub } = await createAgentSession({\n\t\t\t\t\tcwd: runnerOptions.cwd,\n\t\t\t\t\tagentDir,\n\t\t\t\t\tauthStorage,\n\t\t\t\t\tmodelRegistry,\n\t\t\t\t\tmodel: subModel,\n\t\t\t\t\ttools: createToolsFromNames(runnerOptions.cwd, runnerOptions.tools, {\n\t\t\t\t\t\tsemantic: { authStorage, agentDir },\n\t\t\t\t\t}),\n\t\t\t\t\tsessionManager: SessionManager.inMemory(),\n\t\t\t\t\tsettingsManager,\n\t\t\t\t\tenableTaskTool: false, // prevent recursive subagent spawning\n\t\t\t\t});\n\n\t\t\t\t// Apply profile system prompt by appending it to the base after session init\n\t\t\t\tif (runnerOptions.systemPrompt) {\n\t\t\t\t\tconst base = sub.agent.state.systemPrompt;\n\t\t\t\t\tsub.agent.setSystemPrompt(\n\t\t\t\t\t\tbase ? `${base}\\n\\n${runnerOptions.systemPrompt}` : runnerOptions.systemPrompt,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Collect all assistant text from the sub-session\n\t\t\t\tconst chunks: string[] = [];\n\t\t\t\tconst abortSubagent = (): void => {\n\t\t\t\t\tvoid sub.abort();\n\t\t\t\t};\n\t\t\t\tif (runnerOptions.signal?.aborted) {\n\t\t\t\t\tabortSubagent();\n\t\t\t\t\tthrow new Error(\"Operation aborted\");\n\t\t\t\t}\n\t\t\t\trunnerOptions.signal?.addEventListener(\"abort\", abortSubagent, { once: true });\n\t\t\t\tconst progressState = {\n\t\t\t\t\ttoolCallsStarted: 0,\n\t\t\t\t\ttoolCallsCompleted: 0,\n\t\t\t\t\tassistantMessages: 0,\n\t\t\t\t\tactiveTool: undefined as string | undefined,\n\t\t\t\t};\n\t\t\t\tconst trimInline = (value: string, max = 60): string => {\n\t\t\t\t\tconst compact = value.trim().replace(/\\s+/g, \" \");\n\t\t\t\t\treturn compact.length > max ? `${compact.slice(0, Math.max(1, max - 3))}...` : compact;\n\t\t\t\t};\n\t\t\t\tconst summarizeToolTarget = (toolName: string, args: unknown): string => {\n\t\t\t\t\tif (!args || typeof args !== \"object\") return `running ${toolName}`;\n\t\t\t\t\tconst record = args as Record<string, unknown>;\n\t\t\t\t\tconst filePath =\n\t\t\t\t\t\ttypeof record.file_path === \"string\"\n\t\t\t\t\t\t\t? record.file_path\n\t\t\t\t\t\t\t: typeof record.path === \"string\"\n\t\t\t\t\t\t\t\t? record.path\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tif (filePath) {\n\t\t\t\t\t\treturn `running ${toolName} (${trimInline(filePath, 50)})`;\n\t\t\t\t\t}\n\t\t\t\t\tconst command =\n\t\t\t\t\t\ttypeof record.command === \"string\"\n\t\t\t\t\t\t\t? record.command\n\t\t\t\t\t\t\t: typeof record.cmd === \"string\"\n\t\t\t\t\t\t\t\t? record.cmd\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tif (command) {\n\t\t\t\t\t\treturn `running ${toolName} (${trimInline(command, 50)})`;\n\t\t\t\t\t}\n\t\t\t\t\treturn `running ${toolName}`;\n\t\t\t\t};\n\t\t\t\tconst emitProgress = (phase: TaskToolProgressPhase, message: string, activeTool?: string): void => {\n\t\t\t\t\tprogressState.activeTool = activeTool;\n\t\t\t\t\trunnerOptions.onProgress?.({\n\t\t\t\t\t\tkind: \"subagent_progress\",\n\t\t\t\t\t\tphase,\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t\tcwd: runnerOptions.cwd,\n\t\t\t\t\t\tactiveTool: progressState.activeTool,\n\t\t\t\t\t\ttoolCallsStarted: progressState.toolCallsStarted,\n\t\t\t\t\t\ttoolCallsCompleted: progressState.toolCallsCompleted,\n\t\t\t\t\t\tassistantMessages: progressState.assistantMessages,\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\temitProgress(\"starting\", \"booting subagent\", undefined);\n\n\t\t\t\ttry {\n\t\t\t\t\tsub.subscribe((event) => {\n\t\t\t\t\t\tif (event.type === \"message_end\" && event.message.role === \"assistant\") {\n\t\t\t\t\t\t\tprogressState.assistantMessages += 1;\n\t\t\t\t\t\t\tfor (const part of event.message.content) {\n\t\t\t\t\t\t\t\tif (part.type === \"text\" && part.text.trim()) {\n\t\t\t\t\t\t\t\t\tchunks.push(part.text.trim());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (chunks.length > 0) {\n\t\t\t\t\t\t\t\temitProgress(\"responding\", \"drafting response\", undefined);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (event.type === \"tool_execution_start\") {\n\t\t\t\t\t\t\tprogressState.toolCallsStarted += 1;\n\t\t\t\t\t\t\tconst toolName = event.toolName ?? \"tool\";\n\t\t\t\t\t\t\temitProgress(\"running\", summarizeToolTarget(toolName, event.args), toolName);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (event.type === \"tool_execution_end\") {\n\t\t\t\t\t\t\tprogressState.toolCallsCompleted += 1;\n\t\t\t\t\t\t\tconst toolName = event.toolName ?? \"tool\";\n\t\t\t\t\t\t\tconst nextActive = progressState.activeTool === toolName ? undefined : progressState.activeTool;\n\t\t\t\t\t\t\temitProgress(\"running\", `completed ${toolName}`, nextActive);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tawait sub.prompt(runnerOptions.prompt, { skipIosmAutopilot: true });\n\t\t\t\t\tif (runnerOptions.signal?.aborted) {\n\t\t\t\t\t\tthrow new Error(\"Operation aborted\");\n\t\t\t\t\t}\n\t\t\t\t\temitProgress(\"responding\", \"finalizing response\", undefined);\n\t\t\t\t\tconst sessionId = sub.sessionManager.getSessionId();\n\t\t\t\t\treturn {\n\t\t\t\t\t\toutput: chunks.join(\"\\n\\n\"),\n\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\tstats: {\n\t\t\t\t\t\t\ttoolCallsStarted: progressState.toolCallsStarted,\n\t\t\t\t\t\t\ttoolCallsCompleted: progressState.toolCallsCompleted,\n\t\t\t\t\t\t\tassistantMessages: progressState.assistantMessages,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t} finally {\n\t\t\t\t\trunnerOptions.signal?.removeEventListener(\"abort\", abortSubagent);\n\t\t\t\t\tsub.dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t: undefined;\n\n\tlet sessionRef: AgentSession | undefined;\n\tconst initialCustomSubagents = loadCustomSubagents({ cwd, agentDir });\n\tfor (const diagnostic of initialCustomSubagents.diagnostics) {\n\t\tconsole.warn(`Warning: invalid subagent ${diagnostic.path}: ${diagnostic.message}`);\n\t}\n\tconst taskTool = taskToolRunner\n\t\t? createTaskTool(cwd, taskToolRunner, {\n\t\t\t\tresolveCustomSubagent: (name) => {\n\t\t\t\t\t// Resolve against live on-disk definitions so newly created agents\n\t\t\t\t\t// are immediately callable in the same interactive session.\n\t\t\t\t\tconst current = loadCustomSubagents({ cwd, agentDir });\n\t\t\t\t\tconst resolvedName = resolveCustomSubagentReference(name, current.agents);\n\t\t\t\t\treturn resolvedName ? current.agents.find((agent) => agent.name === resolvedName) : undefined;\n\t\t\t\t},\n\t\t\t\tavailableCustomSubagents: initialCustomSubagents.agents.map((agent) => agent.name),\n\t\t\t\tavailableCustomSubagentHints: initialCustomSubagents.agents.map((agent) => ({\n\t\t\t\t\tname: agent.name,\n\t\t\t\t\tdescription: agent.description,\n\t\t\t\t})),\n\t\t\t\tgetMetaMessages: () => sessionRef?.getMetaMessages() ?? [],\n\t\t\t})\n\t\t: undefined;\n\n\t// Wire in ask_user, task tool, and any caller-supplied custom tools\n\tconst baseCustomTools: ToolDefinition[] = [\n\t\t...(options.customTools ?? []).filter(\n\t\t\t(t) => t.name !== \"ask_user\" && t.name !== \"task\",\n\t\t),\n\t\t...(taskTool ? [taskTool as unknown as ToolDefinition] : []),\n\t];\n\n\tconst customTools: ToolDefinition[] | undefined = options.enableAskUserTool\n\t\t? [\n\t\t\t\t...baseCustomTools.filter((tool) => tool.name !== \"ask_user\"),\n\t\t\t\tcreateAskUserTool() as unknown as ToolDefinition,\n\t\t\t]\n\t\t: baseCustomTools.length > 0\n\t\t\t? baseCustomTools\n\t\t\t: options.customTools;\n\n\tconst session = new AgentSession({\n\t\tagent,\n\t\tsessionManager,\n\t\tsettingsManager,\n\t\tcwd,\n\t\tscopedModels: options.scopedModels,\n\t\tresourceLoader,\n\t\tcustomTools,\n\t\tmodelRegistry,\n\t\tinitialActiveToolNames,\n\t\textensionRunnerRef,\n\t\tsystemPromptSuffix: profile?.systemPromptAppend || undefined,\n\t\tiosmAutopilotEnabled: profile?.name === \"iosm\",\n\t});\n\tsessionRef = session;\n\tconst extensionsResult = resourceLoader.getExtensions();\n\n\treturn {\n\t\tsession,\n\t\textensionsResult,\n\t\tmodelFallbackMessage,\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport { Agent, type AgentMessage, type ThinkingLevel } from \"@mariozechner/pi-agent-core\";\nimport type { Message, Model } from \"@mariozechner/pi-ai\";\nimport { getAgentDir, getDocsPath } from \"../config.js\";\nimport { createAskUserTool } from \"./ask-user-tool.js\";\nimport { AgentSession } from \"./agent-session.js\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.js\";\nimport type { ExtensionRunner, LoadExtensionsResult, ToolDefinition } from \"./extensions/index.js\";\nimport { convertToLlm } from \"./messages.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { findInitialModel } from \"./model-resolver.js\";\nimport type { ResourceLoader } from \"./resource-loader.js\";\nimport { DefaultResourceLoader } from \"./resource-loader.js\";\nimport { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\nimport type { SharedMemoryContext } from \"./shared-memory.js\";\nimport { loadCustomSubagents, resolveCustomSubagentReference } from \"./subagents.js\";\nimport { time } from \"./timings.js\";\nimport { createSharedMemoryReadTool, createSharedMemoryWriteTool } from \"./tools/shared-memory.js\";\nimport { patchAgentForParallelTaskExecution } from \"./parallel-task-agent.js\";\nimport {\n\tallTools,\n\tastGrepTool,\n\tbashTool,\n\tcodingTools,\n\tcombyTool,\n\tcreateAstGrepTool,\n\tcreateBashTool,\n\tcreateCodingTools,\n\tcreateCombyTool,\n\tcreateEditTool,\n\tcreateFdTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateJqTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateRgTool,\n\tcreateSedTool,\n\tcreateSemgrepTool,\n\tcreateSemanticSearchTool,\n\tcreateTaskTool,\n\tcreateToolsFromNames,\n\tcreateWriteTool,\n\teditTool,\n\tfdTool,\n\tfindTool,\n\tgrepTool,\n\tjqTool,\n\tlsTool,\n\treadOnlyTools,\n\treadTool,\n\trgTool,\n\tsedTool,\n\tsemanticSearchTool,\n\tsemgrepTool,\n\ttodoReadTool,\n\ttodoWriteTool,\n\ttype TaskToolProgress,\n\ttype TaskToolProgressPhase,\n\ttype Tool,\n\ttype ToolName,\n\tyqTool,\n\tcreateYqTool,\n\twriteTool,\n} from \"./tools/index.js\";\nimport { getAgentProfile, type AgentProfileName } from \"./agent-profiles.js\";\n\nexport interface CreateAgentSessionOptions {\n\t/** Working directory for project-local discovery. Default: process.cwd() */\n\tcwd?: string;\n\t/** Global config directory. Default: ~/.iosm/agent */\n\tagentDir?: string;\n\n\t/** Auth storage for credentials. Default: AuthStorage.create(agentDir/auth.json) */\n\tauthStorage?: AuthStorage;\n\t/** Model registry. Default: new ModelRegistry(authStorage, agentDir/models.json) */\n\tmodelRegistry?: ModelRegistry;\n\n\t/** Model to use. Default: from settings, else first available */\n\tmodel?: Model<any>;\n\t/** Require explicit model selection by the user; disables automatic model fallback/selection for new sessions. */\n\trequireExplicitModelSelection?: boolean;\n\t/** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n\tthinkingLevel?: ThinkingLevel;\n\t/** Models available for cycling (Ctrl+P in interactive mode) */\n\tscopedModels?: Array<{ model: Model<any>; thinkingLevel?: ThinkingLevel }>;\n\n\t/** Built-in tools to use. Default: active profile tools (profile defaults to \"full\"). */\n\ttools?: Tool[];\n\t/** Custom tools to register (in addition to built-in tools). */\n\tcustomTools?: ToolDefinition[];\n\t/** Enable the interactive ask_user clarification tool. Best used in interactive or RPC sessions. */\n\tenableAskUserTool?: boolean;\n\n\t/** Resource loader. When omitted, DefaultResourceLoader is used. */\n\tresourceLoader?: ResourceLoader;\n\n\t/** Session manager. Default: SessionManager.create(cwd) */\n\tsessionManager?: SessionManager;\n\n\t/** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n\tsettingsManager?: SettingsManager;\n\n\t/**\n\t * Agent profile name. Overrides tools and thinkingLevel with profile defaults.\n\t * Profiles: explore, plan, iosm_analyst, iosm_verifier, cycle_planner, full (default).\n\t */\n\tprofile?: AgentProfileName | string;\n\n\t/**\n\t * Whether to register the Task tool (subagent spawning).\n\t * Default: true for interactive/print sessions; false for subagent sessions to avoid recursion.\n\t */\n\tenableTaskTool?: boolean;\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n\t/** The created session */\n\tsession: AgentSession;\n\t/** Extensions result (for UI context setup in interactive mode) */\n\textensionsResult: LoadExtensionsResult;\n\t/** Warning if session was restored with a different model than saved */\n\tmodelFallbackMessage?: string;\n}\n\n// Re-exports\n\nexport type {\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionContext,\n\tExtensionFactory,\n\tSlashCommandInfo,\n\tSlashCommandLocation,\n\tSlashCommandSource,\n\tToolDefinition,\n} from \"./extensions/index.js\";\nexport type { PromptTemplate } from \"./prompt-templates.js\";\nexport type { Skill } from \"./skills.js\";\nexport type { Tool } from \"./tools/index.js\";\n\n\texport {\n\t\tcreateAskUserTool,\n\t\t// Pre-built tools (use process.cwd())\n\t\treadTool,\n\t\tbashTool,\n\t\teditTool,\n\t\twriteTool,\n\t\tgrepTool,\n\t\tfindTool,\n\t\tlsTool,\n\t\trgTool,\n\t\tfdTool,\n\t\tastGrepTool,\n\t\tcombyTool,\n\t\tjqTool,\n\t\tyqTool,\n\t\tsemgrepTool,\n\t\tsedTool,\n\t\tsemanticSearchTool,\n\t\tcodingTools,\n\t\treadOnlyTools,\n\t\tallTools as allBuiltInTools,\n\t\t// Tool factories (for custom cwd)\n\t\tcreateCodingTools,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateBashTool,\n\tcreateEditTool,\n\t\tcreateWriteTool,\n\t\tcreateGrepTool,\n\t\tcreateFindTool,\n\t\tcreateLsTool,\n\t\tcreateRgTool,\n\t\tcreateFdTool,\n\t\tcreateAstGrepTool,\n\t\tcreateCombyTool,\n\t\tcreateJqTool,\n\t\tcreateYqTool,\n\t\tcreateSemgrepTool,\n\t\tcreateSedTool,\n\t\tcreateSemanticSearchTool,\n\t};\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n\treturn getAgentDir();\n}\n\nfunction resolveModelBySpecifier(\n\tmodelRegistry: ModelRegistry,\n\tspecifier: string,\n\tpreferredProvider?: string,\n): Model<any> | undefined {\n\tconst raw = specifier.trim();\n\tif (!raw) return undefined;\n\tconst slash = raw.indexOf(\"/\");\n\tif (slash > 0 && slash < raw.length - 1) {\n\t\tconst provider = raw.slice(0, slash);\n\t\tconst modelId = raw.slice(slash + 1);\n\t\treturn modelRegistry.find(provider, modelId);\n\t}\n\n\tconst all = modelRegistry.getAll().filter((candidate) => candidate.id === raw);\n\tif (all.length === 0) return undefined;\n\tif (preferredProvider) {\n\t\tconst preferred = all.find((candidate) => candidate.provider === preferredProvider);\n\t\tif (preferred) return preferred;\n\t}\n\treturn all[0];\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@mariozechner/pi-ai';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [readTool, bashTool],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(options: CreateAgentSessionOptions = {}): Promise<CreateAgentSessionResult> {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst agentDir = options.agentDir ?? getDefaultAgentDir();\n\tconst contextProfile = options.profile?.toString().toLowerCase() === \"iosm\" ? \"iosm\" : \"standard\";\n\tlet resourceLoader = options.resourceLoader;\n\n\t// Use provided or create AuthStorage and ModelRegistry\n\tconst authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n\tconst modelsPath = options.agentDir ? join(agentDir, \"models.json\") : undefined;\n\tconst authStorage = options.authStorage ?? AuthStorage.create(authPath);\n\tconst modelRegistry = options.modelRegistry ?? new ModelRegistry(authStorage, modelsPath);\n\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tconst sessionManager = options.sessionManager ?? SessionManager.create(cwd);\n\n\tif (!resourceLoader) {\n\t\tresourceLoader = new DefaultResourceLoader({ cwd, agentDir, settingsManager, contextProfile });\n\t\tawait resourceLoader.reload();\n\t\ttime(\"resourceLoader.reload\");\n\t}\n\n\t// Check if session has existing data to restore\n\tconst existingSession = sessionManager.buildSessionContext();\n\tconst hasExistingSession = existingSession.messages.length > 0;\n\tconst hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === \"thinking_level_change\");\n\n\tlet model = options.model;\n\tlet modelFallbackMessage: string | undefined;\n\tconst requireExplicitModelSelection = options.requireExplicitModelSelection === true;\n\n\t// If session has data, try to restore model from it\n\tif (!model && hasExistingSession && existingSession.model) {\n\t\tconst restoredModel = modelRegistry.find(existingSession.model.provider, existingSession.model.modelId);\n\t\tif (restoredModel && (await modelRegistry.getApiKey(restoredModel))) {\n\t\t\tmodel = restoredModel;\n\t\t}\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n\t\t}\n\t}\n\n\t// If still no model, use findInitialModel unless explicit selection is required.\n\tif (!model && !requireExplicitModelSelection) {\n\t\tconst result = await findInitialModel({\n\t\t\tscopedModels: options.scopedModels ?? [],\n\t\t\tisContinuing: hasExistingSession,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelRegistry,\n\t\t});\n\t\tmodel = result.model;\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `No models available. Use /login or set an API key environment variable. See ${join(getDocsPath(), \"providers.md\")}. Then use /model to select a model.`;\n\t\t} else if (modelFallbackMessage) {\n\t\t\tmodelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n\t\t}\n\t} else if (!model && requireExplicitModelSelection && !hasExistingSession) {\n\t\tmodelFallbackMessage = \"No model selected. Choose one with /model or pass --provider and --model.\";\n\t}\n\n\tlet thinkingLevel = options.thinkingLevel;\n\n\t// If session has data, restore thinking level from it\n\tif (thinkingLevel === undefined && hasExistingSession) {\n\t\tthinkingLevel = hasThinkingEntry\n\t\t\t? (existingSession.thinkingLevel as ThinkingLevel)\n\t\t\t: (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n\t}\n\n\t// Fall back to settings default\n\tif (thinkingLevel === undefined) {\n\t\tthinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t}\n\n\t// Clamp to model capabilities\n\tif (!model || !model.reasoning) {\n\t\tthinkingLevel = \"off\";\n\t}\n\n\t// Apply agent profile: default to \"full\" when no explicit profile is provided.\n\t// This keeps runtime tool availability aligned with UI/profile badges.\n\tconst profile = getAgentProfile(options.profile);\n\tif (profile.name !== \"full\") {\n\t\t// Profile overrides thinking level only when caller did not explicitly pass one\n\t\tif (options.thinkingLevel === undefined && !hasExistingSession) {\n\t\t\tthinkingLevel = profile.thinkingLevel;\n\t\t\t// Re-clamp to model capabilities\n\t\t\tif (!model || !model.reasoning) {\n\t\t\t\tthinkingLevel = \"off\";\n\t\t\t}\n\t\t}\n\t}\n\n\tconst enableTaskTool = options.enableTaskTool !== false; // default true\n\tconst profileToolNames: string[] = [...profile.tools, ...(enableTaskTool ? [\"task\"] : []), \"todo_write\", \"todo_read\"].filter(\n\t\t(n) => n === \"task\" || n in allTools,\n\t);\n\n\tconst initialActiveToolNames: string[] = options.tools\n\t\t? options.tools.map((t) => t.name).filter((n) => n === \"task\" || n in allTools)\n\t\t: profileToolNames;\n\n\tlet agent: Agent;\n\n\t// Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n\tconst convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n\t\tconst converted = convertToLlm(messages);\n\t\t// Check setting dynamically so mid-session changes take effect\n\t\tif (!settingsManager.getBlockImages()) {\n\t\t\treturn converted;\n\t\t}\n\t\t// Filter out ImageContent from all messages, replacing with text placeholder\n\t\treturn converted.map((msg) => {\n\t\t\tif (msg.role === \"user\" || msg.role === \"toolResult\") {\n\t\t\t\tconst content = msg.content;\n\t\t\t\tif (Array.isArray(content)) {\n\t\t\t\t\tconst hasImages = content.some((c) => c.type === \"image\");\n\t\t\t\t\tif (hasImages) {\n\t\t\t\t\t\tconst filteredContent = content\n\t\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\t\tc.type === \"image\" ? { type: \"text\" as const, text: \"Image reading is disabled.\" } : c,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(c, i, arr) =>\n\t\t\t\t\t\t\t\t\t// Dedupe consecutive \"Image reading is disabled.\" texts\n\t\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\t\tc.type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\tc.text === \"Image reading is disabled.\" &&\n\t\t\t\t\t\t\t\t\t\ti > 0 &&\n\t\t\t\t\t\t\t\t\t\tarr[i - 1].type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\t(arr[i - 1] as { type: \"text\"; text: string }).text === \"Image reading is disabled.\"\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn { ...msg, content: filteredContent };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn msg;\n\t\t});\n\t};\n\n\tconst extensionRunnerRef: { current?: ExtensionRunner } = {};\n\n\tagent = new Agent({\n\t\tinitialState: {\n\t\t\tsystemPrompt: \"\",\n\t\t\tmodel,\n\t\t\tthinkingLevel,\n\t\t\ttools: [],\n\t\t},\n\t\tconvertToLlm: convertToLlmWithBlockImages,\n\t\tsessionId: sessionManager.getSessionId(),\n\t\ttransformContext: async (messages) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner) return messages;\n\t\t\treturn runner.emitContext(messages);\n\t\t},\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\ttransport: settingsManager.getTransport(),\n\t\tthinkingBudgets: settingsManager.getThinkingBudgets(),\n\t\tmaxRetryDelayMs: settingsManager.getRetrySettings().maxDelayMs,\n\t\tgetApiKey: async (provider) => {\n\t\t\t// Use the provider argument from the in-flight request;\n\t\t\t// agent.state.model may already be switched mid-turn.\n\t\t\tconst resolvedProvider = provider || agent.state.model?.provider;\n\t\t\tif (!resolvedProvider) {\n\t\t\t\tthrow new Error(\"No model selected\");\n\t\t\t}\n\t\t\tconst key = await modelRegistry.getApiKeyForProvider(resolvedProvider);\n\t\t\tif (!key) {\n\t\t\t\tconst model = agent.state.model;\n\t\t\t\tconst isOAuth = model && modelRegistry.isUsingOAuth(model);\n\t\t\t\tif (isOAuth) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Authentication failed for \"${resolvedProvider}\". ` +\n\t\t\t\t\t\t\t`Credentials may have expired or network is unavailable. ` +\n\t\t\t\t\t\t\t`Run '/login ${resolvedProvider}' to re-authenticate.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`No API key found for \"${resolvedProvider}\". ` +\n\t\t\t\t\t\t`Set an API key environment variable or run '/login ${resolvedProvider}'.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn key;\n\t\t},\n\t});\n\tpatchAgentForParallelTaskExecution(agent);\n\n\t// Restore messages if session has existing data\n\tif (hasExistingSession) {\n\t\tagent.replaceMessages(existingSession.messages);\n\t\tif (!hasThinkingEntry) {\n\t\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t}\n\t} else {\n\t\t// Save initial model and thinking level for new sessions so they can be restored on resume\n\t\tif (model) {\n\t\t\tsessionManager.appendModelChange(model.provider, model.id);\n\t\t}\n\t\tsessionManager.appendThinkingLevelChange(thinkingLevel);\n\t}\n\n\t// Build Task tool SubagentRunner — spawns isolated sub-sessions without circular imports\n\tconst taskToolRunner = enableTaskTool\n\t\t? async (runnerOptions: {\n\t\t\t\tsystemPrompt: string;\n\t\t\t\ttools: string[];\n\t\t\t\tprompt: string;\n\t\t\t\tcwd: string;\n\t\t\t\tmodelOverride?: string;\n\t\t\t\tsharedMemoryContext?: SharedMemoryContext;\n\t\t\t\tsignal?: AbortSignal;\n\t\t\t\tonProgress?: (progress: TaskToolProgress) => void;\n\t\t\t}): Promise<\n\t\t\t\tstring | { output: string; sessionId?: string; stats?: { toolCallsStarted: number; toolCallsCompleted: number; assistantMessages: number } }\n\t\t\t> => {\n\t\t\t\tlet subModel = model;\n\t\t\t\tif (runnerOptions.modelOverride) {\n\t\t\t\t\tconst resolved = resolveModelBySpecifier(\n\t\t\t\t\t\tmodelRegistry,\n\t\t\t\t\t\trunnerOptions.modelOverride,\n\t\t\t\t\t\tmodel?.provider,\n\t\t\t\t\t);\n\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\tthrow new Error(`Unknown model override: ${runnerOptions.modelOverride}`);\n\t\t\t\t\t}\n\t\t\t\t\tif (!(await modelRegistry.getApiKey(resolved))) {\n\t\t\t\t\t\tthrow new Error(`No API key available for model override: ${resolved.provider}/${resolved.id}`);\n\t\t\t\t\t}\n\t\t\t\t\tsubModel = resolved;\n\t\t\t\t}\n\t\t\t\tconst sharedMemoryTools: ToolDefinition[] | undefined = runnerOptions.sharedMemoryContext\n\t\t\t\t\t? [\n\t\t\t\t\t\t\tcreateSharedMemoryWriteTool(runnerOptions.sharedMemoryContext) as unknown as ToolDefinition,\n\t\t\t\t\t\t\tcreateSharedMemoryReadTool(runnerOptions.sharedMemoryContext) as unknown as ToolDefinition,\n\t\t\t\t\t\t]\n\t\t\t\t\t: undefined;\n\t\t\t\tconst { session: sub } = await createAgentSession({\n\t\t\t\t\tcwd: runnerOptions.cwd,\n\t\t\t\t\tagentDir,\n\t\t\t\t\tauthStorage,\n\t\t\t\t\tmodelRegistry,\n\t\t\t\t\tmodel: subModel,\n\t\t\t\t\ttools: createToolsFromNames(runnerOptions.cwd, runnerOptions.tools, {\n\t\t\t\t\t\tsemantic: { authStorage, agentDir },\n\t\t\t\t\t}),\n\t\t\t\t\tcustomTools: sharedMemoryTools,\n\t\t\t\t\tsessionManager: SessionManager.inMemory(),\n\t\t\t\t\tsettingsManager,\n\t\t\t\t\tenableTaskTool: false, // prevent recursive subagent spawning\n\t\t\t\t});\n\n\t\t\t\t// Apply profile system prompt by appending it to the base after session init\n\t\t\t\tif (runnerOptions.systemPrompt) {\n\t\t\t\t\tconst base = sub.agent.state.systemPrompt;\n\t\t\t\t\tsub.agent.setSystemPrompt(\n\t\t\t\t\t\tbase ? `${base}\\n\\n${runnerOptions.systemPrompt}` : runnerOptions.systemPrompt,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Collect all assistant text from the sub-session\n\t\t\t\tconst chunks: string[] = [];\n\t\t\t\tconst abortSubagent = (): void => {\n\t\t\t\t\tvoid sub.abort();\n\t\t\t\t};\n\t\t\t\tif (runnerOptions.signal?.aborted) {\n\t\t\t\t\tabortSubagent();\n\t\t\t\t\tthrow new Error(\"Operation aborted\");\n\t\t\t\t}\n\t\t\t\trunnerOptions.signal?.addEventListener(\"abort\", abortSubagent, { once: true });\n\t\t\t\tconst progressState = {\n\t\t\t\t\ttoolCallsStarted: 0,\n\t\t\t\t\ttoolCallsCompleted: 0,\n\t\t\t\t\tassistantMessages: 0,\n\t\t\t\t\tactiveTool: undefined as string | undefined,\n\t\t\t\t};\n\t\t\t\tconst trimInline = (value: string, max = 60): string => {\n\t\t\t\t\tconst compact = value.trim().replace(/\\s+/g, \" \");\n\t\t\t\t\treturn compact.length > max ? `${compact.slice(0, Math.max(1, max - 3))}...` : compact;\n\t\t\t\t};\n\t\t\t\tconst summarizeToolTarget = (toolName: string, args: unknown): string => {\n\t\t\t\t\tif (!args || typeof args !== \"object\") return `running ${toolName}`;\n\t\t\t\t\tconst record = args as Record<string, unknown>;\n\t\t\t\t\tconst filePath =\n\t\t\t\t\t\ttypeof record.file_path === \"string\"\n\t\t\t\t\t\t\t? record.file_path\n\t\t\t\t\t\t\t: typeof record.path === \"string\"\n\t\t\t\t\t\t\t\t? record.path\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tif (filePath) {\n\t\t\t\t\t\treturn `running ${toolName} (${trimInline(filePath, 50)})`;\n\t\t\t\t\t}\n\t\t\t\t\tconst command =\n\t\t\t\t\t\ttypeof record.command === \"string\"\n\t\t\t\t\t\t\t? record.command\n\t\t\t\t\t\t\t: typeof record.cmd === \"string\"\n\t\t\t\t\t\t\t\t? record.cmd\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tif (command) {\n\t\t\t\t\t\treturn `running ${toolName} (${trimInline(command, 50)})`;\n\t\t\t\t\t}\n\t\t\t\t\treturn `running ${toolName}`;\n\t\t\t\t};\n\t\t\t\tconst emitProgress = (phase: TaskToolProgressPhase, message: string, activeTool?: string): void => {\n\t\t\t\t\tprogressState.activeTool = activeTool;\n\t\t\t\t\trunnerOptions.onProgress?.({\n\t\t\t\t\t\tkind: \"subagent_progress\",\n\t\t\t\t\t\tphase,\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t\tcwd: runnerOptions.cwd,\n\t\t\t\t\t\tactiveTool: progressState.activeTool,\n\t\t\t\t\t\ttoolCallsStarted: progressState.toolCallsStarted,\n\t\t\t\t\t\ttoolCallsCompleted: progressState.toolCallsCompleted,\n\t\t\t\t\t\tassistantMessages: progressState.assistantMessages,\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\temitProgress(\"starting\", \"booting subagent\", undefined);\n\n\t\t\t\ttry {\n\t\t\t\t\tsub.subscribe((event) => {\n\t\t\t\t\t\tif (event.type === \"message_end\" && event.message.role === \"assistant\") {\n\t\t\t\t\t\t\tprogressState.assistantMessages += 1;\n\t\t\t\t\t\t\tfor (const part of event.message.content) {\n\t\t\t\t\t\t\t\tif (part.type === \"text\" && part.text.trim()) {\n\t\t\t\t\t\t\t\t\tchunks.push(part.text.trim());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (chunks.length > 0) {\n\t\t\t\t\t\t\t\temitProgress(\"responding\", \"drafting response\", undefined);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (event.type === \"tool_execution_start\") {\n\t\t\t\t\t\t\tprogressState.toolCallsStarted += 1;\n\t\t\t\t\t\t\tconst toolName = event.toolName ?? \"tool\";\n\t\t\t\t\t\t\temitProgress(\"running\", summarizeToolTarget(toolName, event.args), toolName);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (event.type === \"tool_execution_end\") {\n\t\t\t\t\t\t\tprogressState.toolCallsCompleted += 1;\n\t\t\t\t\t\t\tconst toolName = event.toolName ?? \"tool\";\n\t\t\t\t\t\t\tconst nextActive = progressState.activeTool === toolName ? undefined : progressState.activeTool;\n\t\t\t\t\t\t\temitProgress(\"running\", `completed ${toolName}`, nextActive);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tawait sub.prompt(runnerOptions.prompt, { skipIosmAutopilot: true });\n\t\t\t\t\tif (runnerOptions.signal?.aborted) {\n\t\t\t\t\t\tthrow new Error(\"Operation aborted\");\n\t\t\t\t\t}\n\t\t\t\t\temitProgress(\"responding\", \"finalizing response\", undefined);\n\t\t\t\t\tconst sessionId = sub.sessionManager.getSessionId();\n\t\t\t\t\treturn {\n\t\t\t\t\t\toutput: chunks.join(\"\\n\\n\"),\n\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\tstats: {\n\t\t\t\t\t\t\ttoolCallsStarted: progressState.toolCallsStarted,\n\t\t\t\t\t\t\ttoolCallsCompleted: progressState.toolCallsCompleted,\n\t\t\t\t\t\t\tassistantMessages: progressState.assistantMessages,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t} finally {\n\t\t\t\t\trunnerOptions.signal?.removeEventListener(\"abort\", abortSubagent);\n\t\t\t\t\tsub.dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t: undefined;\n\n\tlet sessionRef: AgentSession | undefined;\n\tconst initialCustomSubagents = loadCustomSubagents({ cwd, agentDir });\n\tfor (const diagnostic of initialCustomSubagents.diagnostics) {\n\t\tconsole.warn(`Warning: invalid subagent ${diagnostic.path}: ${diagnostic.message}`);\n\t}\n\tconst taskTool = taskToolRunner\n\t\t? createTaskTool(cwd, taskToolRunner, {\n\t\t\t\tresolveCustomSubagent: (name) => {\n\t\t\t\t\t// Resolve against live on-disk definitions so newly created agents\n\t\t\t\t\t// are immediately callable in the same interactive session.\n\t\t\t\t\tconst current = loadCustomSubagents({ cwd, agentDir });\n\t\t\t\t\tconst resolvedName = resolveCustomSubagentReference(name, current.agents);\n\t\t\t\t\treturn resolvedName ? current.agents.find((agent) => agent.name === resolvedName) : undefined;\n\t\t\t\t},\n\t\t\t\tavailableCustomSubagents: initialCustomSubagents.agents.map((agent) => agent.name),\n\t\t\t\tavailableCustomSubagentHints: initialCustomSubagents.agents.map((agent) => ({\n\t\t\t\t\tname: agent.name,\n\t\t\t\t\tdescription: agent.description,\n\t\t\t\t})),\n\t\t\t\tgetMetaMessages: () => sessionRef?.getMetaMessages() ?? [],\n\t\t\t})\n\t\t: undefined;\n\n\t// Wire in ask_user, task tool, and any caller-supplied custom tools\n\tconst baseCustomTools: ToolDefinition[] = [\n\t\t...(options.customTools ?? []).filter(\n\t\t\t(t) => t.name !== \"ask_user\" && t.name !== \"task\",\n\t\t),\n\t\t...(taskTool ? [taskTool as unknown as ToolDefinition] : []),\n\t];\n\n\tconst customTools: ToolDefinition[] | undefined = options.enableAskUserTool\n\t\t? [\n\t\t\t\t...baseCustomTools.filter((tool) => tool.name !== \"ask_user\"),\n\t\t\t\tcreateAskUserTool() as unknown as ToolDefinition,\n\t\t\t]\n\t\t: baseCustomTools.length > 0\n\t\t\t? baseCustomTools\n\t\t\t: options.customTools;\n\n\tconst session = new AgentSession({\n\t\tagent,\n\t\tsessionManager,\n\t\tsettingsManager,\n\t\tcwd,\n\t\tscopedModels: options.scopedModels,\n\t\tresourceLoader,\n\t\tcustomTools,\n\t\tmodelRegistry,\n\t\tinitialActiveToolNames,\n\t\textensionRunnerRef,\n\t\tsystemPromptSuffix: profile?.systemPromptAppend || undefined,\n\t\tiosmAutopilotEnabled: profile?.name === \"iosm\",\n\t});\n\tsessionRef = session;\n\tconst extensionsResult = resourceLoader.getExtensions();\n\n\treturn {\n\t\tsession,\n\t\textensionsResult,\n\t\tmodelFallbackMessage,\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/semantic/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EAEpB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/semantic/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EAEpB,MAAM,YAAY,CAAC;AAoLpB,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjG;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,wBAAwB,CAgBtH;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,oBAAoB,CAyB5F;AAED,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,kBAAkB,EACxB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACd,MAAM,CAQR;AAED,wBAAgB,gCAAgC,CAC/C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,oBAAoB,EAC5B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACd,MAAM,CA8BR;AAED,wBAAgB,8BAA8B,IAAI,oBAAoB,CAcrE"}
|
|
@@ -5,6 +5,7 @@ const DEFAULT_INCLUDE_GLOBS = ["**/*.{ts,tsx,js,jsx,py,go,rs,java,md,json,yaml,y
|
|
|
5
5
|
const DEFAULT_EXCLUDE_GLOBS = ["**/.git/**", "**/node_modules/**", "**/dist/**", "**/build/**", "**/.iosm/**"];
|
|
6
6
|
const DEFAULT_CONFIG = {
|
|
7
7
|
enabled: true,
|
|
8
|
+
autoIndex: true,
|
|
8
9
|
provider: {
|
|
9
10
|
type: "openrouter",
|
|
10
11
|
model: "openai/text-embedding-3-small",
|
|
@@ -110,6 +111,7 @@ function parseSemanticConfigFile(path) {
|
|
|
110
111
|
: undefined;
|
|
111
112
|
result.semanticSearch = {
|
|
112
113
|
enabled: asBoolean(rawSemantic.enabled),
|
|
114
|
+
autoIndex: asBoolean(rawSemantic.autoIndex),
|
|
113
115
|
provider,
|
|
114
116
|
index,
|
|
115
117
|
};
|
|
@@ -141,6 +143,7 @@ function resolveSemanticSearchConfig(partial) {
|
|
|
141
143
|
}
|
|
142
144
|
return {
|
|
143
145
|
enabled: partial.enabled ?? DEFAULT_CONFIG.enabled,
|
|
146
|
+
autoIndex: partial.autoIndex ?? DEFAULT_CONFIG.autoIndex,
|
|
144
147
|
provider: {
|
|
145
148
|
type: providerType,
|
|
146
149
|
model,
|
|
@@ -223,6 +226,7 @@ export function upsertScopedSemanticSearchConfig(scope, config, cwd, agentDir) {
|
|
|
223
226
|
...current.file,
|
|
224
227
|
semanticSearch: {
|
|
225
228
|
enabled: config.enabled,
|
|
229
|
+
autoIndex: config.autoIndex,
|
|
226
230
|
provider: {
|
|
227
231
|
type: config.provider.type,
|
|
228
232
|
model: config.provider.model,
|
|
@@ -247,6 +251,7 @@ export function upsertScopedSemanticSearchConfig(scope, config, cwd, agentDir) {
|
|
|
247
251
|
export function getDefaultSemanticSearchConfig() {
|
|
248
252
|
return {
|
|
249
253
|
enabled: DEFAULT_CONFIG.enabled,
|
|
254
|
+
autoIndex: DEFAULT_CONFIG.autoIndex,
|
|
250
255
|
provider: { ...DEFAULT_CONFIG.provider },
|
|
251
256
|
index: {
|
|
252
257
|
includeGlobs: [...DEFAULT_CONFIG.index.includeGlobs],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/semantic/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport type {\n\tSemanticConfigFile,\n\tSemanticMergedConfig,\n\tSemanticScope,\n\tSemanticScopedLoadResult,\n\tSemanticSearchConfig,\n\tSemanticProviderType,\n} from \"./types.js\";\nimport { SemanticConfigError } from \"./types.js\";\n\nconst DEFAULT_INCLUDE_GLOBS = [\"**/*.{ts,tsx,js,jsx,py,go,rs,java,md,json,yaml,yml}\"];\nconst DEFAULT_EXCLUDE_GLOBS = [\"**/.git/**\", \"**/node_modules/**\", \"**/dist/**\", \"**/build/**\", \"**/.iosm/**\"];\n\nconst DEFAULT_CONFIG: SemanticSearchConfig = {\n\tenabled: true,\n\tprovider: {\n\t\ttype: \"openrouter\",\n\t\tmodel: \"openai/text-embedding-3-small\",\n\t\tbatchSize: 32,\n\t\ttimeoutMs: 30_000,\n\t},\n\tindex: {\n\t\tincludeGlobs: [...DEFAULT_INCLUDE_GLOBS],\n\t\texcludeGlobs: [...DEFAULT_EXCLUDE_GLOBS],\n\t\tchunkMaxChars: 1200,\n\t\tchunkOverlapChars: 200,\n\t\tmaxFileBytes: 262_144,\n\t\tmaxFiles: 20_000,\n\t},\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nfunction asBoolean(value: unknown): boolean | undefined {\n\treturn typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction asNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction sanitizeStringArray(value: unknown): string[] | undefined {\n\tif (!Array.isArray(value)) return undefined;\n\tconst normalized = value\n\t\t.filter((item): item is string => typeof item === \"string\")\n\t\t.map((item) => item.trim())\n\t\t.filter((item) => item.length > 0);\n\treturn normalized.length > 0 ? normalized : undefined;\n}\n\nfunction sanitizeStringRecord(value: unknown): Record<string, string> | undefined {\n\tif (!isRecord(value)) return undefined;\n\tconst result: Record<string, string> = {};\n\tfor (const [key, rawValue] of Object.entries(value)) {\n\t\tif (typeof rawValue !== \"string\") continue;\n\t\tconst normalizedKey = key.trim();\n\t\tif (!normalizedKey) continue;\n\t\tresult[normalizedKey] = rawValue;\n\t}\n\treturn Object.keys(result).length > 0 ? result : undefined;\n}\n\nfunction sanitizeProviderType(value: unknown): SemanticProviderType | undefined {\n\tif (value === \"openrouter\" || value === \"ollama\" || value === \"custom_openai\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nfunction clampInt(value: number | undefined, fallback: number, min: number, max: number): number {\n\tif (value === undefined) return fallback;\n\tconst normalized = Math.floor(value);\n\tif (!Number.isFinite(normalized)) return fallback;\n\tif (normalized < min) return min;\n\tif (normalized > max) return max;\n\treturn normalized;\n}\n\nfunction parseSemanticConfigFile(path: string): SemanticConfigFile {\n\tif (!existsSync(path)) {\n\t\treturn {};\n\t}\n\tconst raw = readFileSync(path, \"utf8\");\n\tconst parsed = JSON.parse(raw) as unknown;\n\tif (!isRecord(parsed)) {\n\t\tthrow new SemanticConfigError(`Expected JSON object in ${path}`);\n\t}\n\n\tconst result: SemanticConfigFile = {};\n\tconst rawSemantic = parsed.semanticSearch;\n\tif (!isRecord(rawSemantic)) {\n\t\treturn result;\n\t}\n\n\tconst provider = isRecord(rawSemantic.provider)\n\t\t? {\n\t\t\t\ttype: sanitizeProviderType(rawSemantic.provider.type),\n\t\t\t\tmodel: asString(rawSemantic.provider.model),\n\t\t\t\tbaseUrl: asString(rawSemantic.provider.baseUrl),\n\t\t\t\tapiKeyEnv: asString(rawSemantic.provider.apiKeyEnv),\n\t\t\t\theaders: sanitizeStringRecord(rawSemantic.provider.headers),\n\t\t\t\tbatchSize: asNumber(rawSemantic.provider.batchSize),\n\t\t\t\ttimeoutMs: asNumber(rawSemantic.provider.timeoutMs),\n\t\t\t}\n\t\t: undefined;\n\n\tconst index = isRecord(rawSemantic.index)\n\t\t? {\n\t\t\t\tincludeGlobs: sanitizeStringArray(rawSemantic.index.includeGlobs),\n\t\t\t\texcludeGlobs: sanitizeStringArray(rawSemantic.index.excludeGlobs),\n\t\t\t\tchunkMaxChars: asNumber(rawSemantic.index.chunkMaxChars),\n\t\t\t\tchunkOverlapChars: asNumber(rawSemantic.index.chunkOverlapChars),\n\t\t\t\tmaxFileBytes: asNumber(rawSemantic.index.maxFileBytes),\n\t\t\t\tmaxFiles: asNumber(rawSemantic.index.maxFiles),\n\t\t\t}\n\t\t: undefined;\n\n\tresult.semanticSearch = {\n\t\tenabled: asBoolean(rawSemantic.enabled),\n\t\tprovider,\n\t\tindex,\n\t};\n\n\treturn result;\n}\n\nfunction mergeSemanticConfig(\n\tbase: SemanticConfigFile[\"semanticSearch\"] | undefined,\n\toverride: SemanticConfigFile[\"semanticSearch\"] | undefined,\n): SemanticConfigFile[\"semanticSearch\"] | undefined {\n\tif (!base && !override) return undefined;\n\treturn {\n\t\t...(base ?? {}),\n\t\t...(override ?? {}),\n\t\tprovider: {\n\t\t\t...(base?.provider ?? {}),\n\t\t\t...(override?.provider ?? {}),\n\t\t},\n\t\tindex: {\n\t\t\t...(base?.index ?? {}),\n\t\t\t...(override?.index ?? {}),\n\t\t},\n\t};\n}\n\nfunction resolveSemanticSearchConfig(\n\tpartial: SemanticConfigFile[\"semanticSearch\"] | undefined,\n): SemanticSearchConfig | undefined {\n\tif (!partial) return undefined;\n\n\tconst providerType = partial.provider?.type ?? DEFAULT_CONFIG.provider.type;\n\tconst model = (partial.provider?.model ?? DEFAULT_CONFIG.provider.model).trim();\n\tif (!model) {\n\t\tthrow new SemanticConfigError(`semanticSearch.provider.model cannot be empty`);\n\t}\n\n\treturn {\n\t\tenabled: partial.enabled ?? DEFAULT_CONFIG.enabled,\n\t\tprovider: {\n\t\t\ttype: providerType,\n\t\t\tmodel,\n\t\t\tbaseUrl: partial.provider?.baseUrl?.trim() || undefined,\n\t\t\tapiKeyEnv: partial.provider?.apiKeyEnv?.trim() || undefined,\n\t\t\theaders: partial.provider?.headers && Object.keys(partial.provider.headers).length > 0 ? partial.provider.headers : undefined,\n\t\t\tbatchSize: clampInt(partial.provider?.batchSize, DEFAULT_CONFIG.provider.batchSize, 1, 512),\n\t\t\ttimeoutMs: clampInt(partial.provider?.timeoutMs, DEFAULT_CONFIG.provider.timeoutMs, 1_000, 300_000),\n\t\t},\n\t\tindex: {\n\t\t\tincludeGlobs: partial.index?.includeGlobs && partial.index.includeGlobs.length > 0 ? partial.index.includeGlobs : [...DEFAULT_CONFIG.index.includeGlobs],\n\t\t\texcludeGlobs: partial.index?.excludeGlobs && partial.index.excludeGlobs.length > 0 ? partial.index.excludeGlobs : [...DEFAULT_CONFIG.index.excludeGlobs],\n\t\t\tchunkMaxChars: clampInt(partial.index?.chunkMaxChars, DEFAULT_CONFIG.index.chunkMaxChars, 200, 20_000),\n\t\t\tchunkOverlapChars: clampInt(partial.index?.chunkOverlapChars, DEFAULT_CONFIG.index.chunkOverlapChars, 0, 5_000),\n\t\t\tmaxFileBytes: clampInt(partial.index?.maxFileBytes, DEFAULT_CONFIG.index.maxFileBytes, 1_024, 16 * 1024 * 1024),\n\t\t\tmaxFiles: clampInt(partial.index?.maxFiles, DEFAULT_CONFIG.index.maxFiles, 1, 1_000_000),\n\t\t},\n\t};\n}\n\nexport function getSemanticConfigPath(scope: SemanticScope, cwd: string, agentDir: string): string {\n\treturn scope === \"project\" ? join(cwd, \".iosm\", \"semantic.json\") : join(agentDir, \"semantic.json\");\n}\n\nexport function readScopedSemanticConfig(scope: SemanticScope, cwd: string, agentDir: string): SemanticScopedLoadResult {\n\tconst path = getSemanticConfigPath(scope, cwd, agentDir);\n\ttry {\n\t\treturn {\n\t\t\tscope,\n\t\t\tpath,\n\t\t\tfile: parseSemanticConfigFile(path),\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\tscope,\n\t\t\tpath,\n\t\t\tfile: {},\n\t\t\terror: error instanceof Error ? error : new Error(String(error)),\n\t\t};\n\t}\n}\n\nexport function loadMergedSemanticConfig(cwd: string, agentDir: string): SemanticMergedConfig {\n\tconst scoped = [readScopedSemanticConfig(\"user\", cwd, agentDir), readScopedSemanticConfig(\"project\", cwd, agentDir)];\n\tconst errors: string[] = [];\n\n\tfor (const entry of scoped) {\n\t\tif (entry.error) {\n\t\t\terrors.push(`${entry.scope} config (${entry.path}): ${entry.error.message}`);\n\t\t}\n\t}\n\n\tconst mergedPartial = mergeSemanticConfig(scoped[0]?.file.semanticSearch, scoped[1]?.file.semanticSearch);\n\tlet config: SemanticSearchConfig | undefined;\n\ttry {\n\t\tconfig = resolveSemanticSearchConfig(mergedPartial);\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\terrors.push(`semanticSearch: ${message}`);\n\t\tconfig = undefined;\n\t}\n\n\treturn {\n\t\tconfig,\n\t\terrors,\n\t\tscoped,\n\t};\n}\n\nexport function writeScopedSemanticConfig(\n\tscope: SemanticScope,\n\tfile: SemanticConfigFile,\n\tcwd: string,\n\tagentDir: string,\n): string {\n\tconst path = getSemanticConfigPath(scope, cwd, agentDir);\n\tconst dir = dirname(path);\n\tif (!existsSync(dir)) {\n\t\tmkdirSync(dir, { recursive: true });\n\t}\n\twriteFileSync(path, `${JSON.stringify(file, null, 2)}\\n`, \"utf8\");\n\treturn path;\n}\n\nexport function upsertScopedSemanticSearchConfig(\n\tscope: SemanticScope,\n\tconfig: SemanticSearchConfig,\n\tcwd: string,\n\tagentDir: string,\n): string {\n\tconst current = readScopedSemanticConfig(scope, cwd, agentDir);\n\tif (current.error) {\n\t\tthrow new SemanticConfigError(`Cannot update ${scope} semantic config (${current.path}): ${current.error.message}`);\n\t}\n\tconst nextFile: SemanticConfigFile = {\n\t\t...current.file,\n\t\tsemanticSearch: {\n\t\t\tenabled: config.enabled,\n\t\t\tprovider: {\n\t\t\t\ttype: config.provider.type,\n\t\t\t\tmodel: config.provider.model,\n\t\t\t\tbaseUrl: config.provider.baseUrl,\n\t\t\t\tapiKeyEnv: config.provider.apiKeyEnv,\n\t\t\t\theaders: config.provider.headers,\n\t\t\t\tbatchSize: config.provider.batchSize,\n\t\t\t\ttimeoutMs: config.provider.timeoutMs,\n\t\t\t},\n\t\t\tindex: {\n\t\t\t\tincludeGlobs: [...config.index.includeGlobs],\n\t\t\t\texcludeGlobs: [...config.index.excludeGlobs],\n\t\t\t\tchunkMaxChars: config.index.chunkMaxChars,\n\t\t\t\tchunkOverlapChars: config.index.chunkOverlapChars,\n\t\t\t\tmaxFileBytes: config.index.maxFileBytes,\n\t\t\t\tmaxFiles: config.index.maxFiles,\n\t\t\t},\n\t\t},\n\t};\n\treturn writeScopedSemanticConfig(scope, nextFile, cwd, agentDir);\n}\n\nexport function getDefaultSemanticSearchConfig(): SemanticSearchConfig {\n\treturn {\n\t\tenabled: DEFAULT_CONFIG.enabled,\n\t\tprovider: { ...DEFAULT_CONFIG.provider },\n\t\tindex: {\n\t\t\tincludeGlobs: [...DEFAULT_CONFIG.index.includeGlobs],\n\t\t\texcludeGlobs: [...DEFAULT_CONFIG.index.excludeGlobs],\n\t\t\tchunkMaxChars: DEFAULT_CONFIG.index.chunkMaxChars,\n\t\t\tchunkOverlapChars: DEFAULT_CONFIG.index.chunkOverlapChars,\n\t\t\tmaxFileBytes: DEFAULT_CONFIG.index.maxFileBytes,\n\t\t\tmaxFiles: DEFAULT_CONFIG.index.maxFiles,\n\t\t},\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/semantic/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport type {\n\tSemanticConfigFile,\n\tSemanticMergedConfig,\n\tSemanticScope,\n\tSemanticScopedLoadResult,\n\tSemanticSearchConfig,\n\tSemanticProviderType,\n} from \"./types.js\";\nimport { SemanticConfigError } from \"./types.js\";\n\nconst DEFAULT_INCLUDE_GLOBS = [\"**/*.{ts,tsx,js,jsx,py,go,rs,java,md,json,yaml,yml}\"];\nconst DEFAULT_EXCLUDE_GLOBS = [\"**/.git/**\", \"**/node_modules/**\", \"**/dist/**\", \"**/build/**\", \"**/.iosm/**\"];\n\nconst DEFAULT_CONFIG: SemanticSearchConfig = {\n\tenabled: true,\n\tautoIndex: true,\n\tprovider: {\n\t\ttype: \"openrouter\",\n\t\tmodel: \"openai/text-embedding-3-small\",\n\t\tbatchSize: 32,\n\t\ttimeoutMs: 30_000,\n\t},\n\tindex: {\n\t\tincludeGlobs: [...DEFAULT_INCLUDE_GLOBS],\n\t\texcludeGlobs: [...DEFAULT_EXCLUDE_GLOBS],\n\t\tchunkMaxChars: 1200,\n\t\tchunkOverlapChars: 200,\n\t\tmaxFileBytes: 262_144,\n\t\tmaxFiles: 20_000,\n\t},\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nfunction asBoolean(value: unknown): boolean | undefined {\n\treturn typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction asNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction sanitizeStringArray(value: unknown): string[] | undefined {\n\tif (!Array.isArray(value)) return undefined;\n\tconst normalized = value\n\t\t.filter((item): item is string => typeof item === \"string\")\n\t\t.map((item) => item.trim())\n\t\t.filter((item) => item.length > 0);\n\treturn normalized.length > 0 ? normalized : undefined;\n}\n\nfunction sanitizeStringRecord(value: unknown): Record<string, string> | undefined {\n\tif (!isRecord(value)) return undefined;\n\tconst result: Record<string, string> = {};\n\tfor (const [key, rawValue] of Object.entries(value)) {\n\t\tif (typeof rawValue !== \"string\") continue;\n\t\tconst normalizedKey = key.trim();\n\t\tif (!normalizedKey) continue;\n\t\tresult[normalizedKey] = rawValue;\n\t}\n\treturn Object.keys(result).length > 0 ? result : undefined;\n}\n\nfunction sanitizeProviderType(value: unknown): SemanticProviderType | undefined {\n\tif (value === \"openrouter\" || value === \"ollama\" || value === \"custom_openai\") {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\nfunction clampInt(value: number | undefined, fallback: number, min: number, max: number): number {\n\tif (value === undefined) return fallback;\n\tconst normalized = Math.floor(value);\n\tif (!Number.isFinite(normalized)) return fallback;\n\tif (normalized < min) return min;\n\tif (normalized > max) return max;\n\treturn normalized;\n}\n\nfunction parseSemanticConfigFile(path: string): SemanticConfigFile {\n\tif (!existsSync(path)) {\n\t\treturn {};\n\t}\n\tconst raw = readFileSync(path, \"utf8\");\n\tconst parsed = JSON.parse(raw) as unknown;\n\tif (!isRecord(parsed)) {\n\t\tthrow new SemanticConfigError(`Expected JSON object in ${path}`);\n\t}\n\n\tconst result: SemanticConfigFile = {};\n\tconst rawSemantic = parsed.semanticSearch;\n\tif (!isRecord(rawSemantic)) {\n\t\treturn result;\n\t}\n\n\tconst provider = isRecord(rawSemantic.provider)\n\t\t? {\n\t\t\t\ttype: sanitizeProviderType(rawSemantic.provider.type),\n\t\t\t\tmodel: asString(rawSemantic.provider.model),\n\t\t\t\tbaseUrl: asString(rawSemantic.provider.baseUrl),\n\t\t\t\tapiKeyEnv: asString(rawSemantic.provider.apiKeyEnv),\n\t\t\t\theaders: sanitizeStringRecord(rawSemantic.provider.headers),\n\t\t\t\tbatchSize: asNumber(rawSemantic.provider.batchSize),\n\t\t\t\ttimeoutMs: asNumber(rawSemantic.provider.timeoutMs),\n\t\t\t}\n\t\t: undefined;\n\n\tconst index = isRecord(rawSemantic.index)\n\t\t? {\n\t\t\t\tincludeGlobs: sanitizeStringArray(rawSemantic.index.includeGlobs),\n\t\t\t\texcludeGlobs: sanitizeStringArray(rawSemantic.index.excludeGlobs),\n\t\t\t\tchunkMaxChars: asNumber(rawSemantic.index.chunkMaxChars),\n\t\t\t\tchunkOverlapChars: asNumber(rawSemantic.index.chunkOverlapChars),\n\t\t\t\tmaxFileBytes: asNumber(rawSemantic.index.maxFileBytes),\n\t\t\t\tmaxFiles: asNumber(rawSemantic.index.maxFiles),\n\t\t\t}\n\t\t: undefined;\n\n\tresult.semanticSearch = {\n\t\tenabled: asBoolean(rawSemantic.enabled),\n\t\tautoIndex: asBoolean(rawSemantic.autoIndex),\n\t\tprovider,\n\t\tindex,\n\t};\n\n\treturn result;\n}\n\nfunction mergeSemanticConfig(\n\tbase: SemanticConfigFile[\"semanticSearch\"] | undefined,\n\toverride: SemanticConfigFile[\"semanticSearch\"] | undefined,\n): SemanticConfigFile[\"semanticSearch\"] | undefined {\n\tif (!base && !override) return undefined;\n\treturn {\n\t\t...(base ?? {}),\n\t\t...(override ?? {}),\n\t\tprovider: {\n\t\t\t...(base?.provider ?? {}),\n\t\t\t...(override?.provider ?? {}),\n\t\t},\n\t\tindex: {\n\t\t\t...(base?.index ?? {}),\n\t\t\t...(override?.index ?? {}),\n\t\t},\n\t};\n}\n\nfunction resolveSemanticSearchConfig(\n\tpartial: SemanticConfigFile[\"semanticSearch\"] | undefined,\n): SemanticSearchConfig | undefined {\n\tif (!partial) return undefined;\n\n\tconst providerType = partial.provider?.type ?? DEFAULT_CONFIG.provider.type;\n\tconst model = (partial.provider?.model ?? DEFAULT_CONFIG.provider.model).trim();\n\tif (!model) {\n\t\tthrow new SemanticConfigError(`semanticSearch.provider.model cannot be empty`);\n\t}\n\n\treturn {\n\t\tenabled: partial.enabled ?? DEFAULT_CONFIG.enabled,\n\t\tautoIndex: partial.autoIndex ?? DEFAULT_CONFIG.autoIndex,\n\t\tprovider: {\n\t\t\ttype: providerType,\n\t\t\tmodel,\n\t\t\tbaseUrl: partial.provider?.baseUrl?.trim() || undefined,\n\t\t\tapiKeyEnv: partial.provider?.apiKeyEnv?.trim() || undefined,\n\t\t\theaders: partial.provider?.headers && Object.keys(partial.provider.headers).length > 0 ? partial.provider.headers : undefined,\n\t\t\tbatchSize: clampInt(partial.provider?.batchSize, DEFAULT_CONFIG.provider.batchSize, 1, 512),\n\t\t\ttimeoutMs: clampInt(partial.provider?.timeoutMs, DEFAULT_CONFIG.provider.timeoutMs, 1_000, 300_000),\n\t\t},\n\t\tindex: {\n\t\t\tincludeGlobs: partial.index?.includeGlobs && partial.index.includeGlobs.length > 0 ? partial.index.includeGlobs : [...DEFAULT_CONFIG.index.includeGlobs],\n\t\t\texcludeGlobs: partial.index?.excludeGlobs && partial.index.excludeGlobs.length > 0 ? partial.index.excludeGlobs : [...DEFAULT_CONFIG.index.excludeGlobs],\n\t\t\tchunkMaxChars: clampInt(partial.index?.chunkMaxChars, DEFAULT_CONFIG.index.chunkMaxChars, 200, 20_000),\n\t\t\tchunkOverlapChars: clampInt(partial.index?.chunkOverlapChars, DEFAULT_CONFIG.index.chunkOverlapChars, 0, 5_000),\n\t\t\tmaxFileBytes: clampInt(partial.index?.maxFileBytes, DEFAULT_CONFIG.index.maxFileBytes, 1_024, 16 * 1024 * 1024),\n\t\t\tmaxFiles: clampInt(partial.index?.maxFiles, DEFAULT_CONFIG.index.maxFiles, 1, 1_000_000),\n\t\t},\n\t};\n}\n\nexport function getSemanticConfigPath(scope: SemanticScope, cwd: string, agentDir: string): string {\n\treturn scope === \"project\" ? join(cwd, \".iosm\", \"semantic.json\") : join(agentDir, \"semantic.json\");\n}\n\nexport function readScopedSemanticConfig(scope: SemanticScope, cwd: string, agentDir: string): SemanticScopedLoadResult {\n\tconst path = getSemanticConfigPath(scope, cwd, agentDir);\n\ttry {\n\t\treturn {\n\t\t\tscope,\n\t\t\tpath,\n\t\t\tfile: parseSemanticConfigFile(path),\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\tscope,\n\t\t\tpath,\n\t\t\tfile: {},\n\t\t\terror: error instanceof Error ? error : new Error(String(error)),\n\t\t};\n\t}\n}\n\nexport function loadMergedSemanticConfig(cwd: string, agentDir: string): SemanticMergedConfig {\n\tconst scoped = [readScopedSemanticConfig(\"user\", cwd, agentDir), readScopedSemanticConfig(\"project\", cwd, agentDir)];\n\tconst errors: string[] = [];\n\n\tfor (const entry of scoped) {\n\t\tif (entry.error) {\n\t\t\terrors.push(`${entry.scope} config (${entry.path}): ${entry.error.message}`);\n\t\t}\n\t}\n\n\tconst mergedPartial = mergeSemanticConfig(scoped[0]?.file.semanticSearch, scoped[1]?.file.semanticSearch);\n\tlet config: SemanticSearchConfig | undefined;\n\ttry {\n\t\tconfig = resolveSemanticSearchConfig(mergedPartial);\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\terrors.push(`semanticSearch: ${message}`);\n\t\tconfig = undefined;\n\t}\n\n\treturn {\n\t\tconfig,\n\t\terrors,\n\t\tscoped,\n\t};\n}\n\nexport function writeScopedSemanticConfig(\n\tscope: SemanticScope,\n\tfile: SemanticConfigFile,\n\tcwd: string,\n\tagentDir: string,\n): string {\n\tconst path = getSemanticConfigPath(scope, cwd, agentDir);\n\tconst dir = dirname(path);\n\tif (!existsSync(dir)) {\n\t\tmkdirSync(dir, { recursive: true });\n\t}\n\twriteFileSync(path, `${JSON.stringify(file, null, 2)}\\n`, \"utf8\");\n\treturn path;\n}\n\nexport function upsertScopedSemanticSearchConfig(\n\tscope: SemanticScope,\n\tconfig: SemanticSearchConfig,\n\tcwd: string,\n\tagentDir: string,\n): string {\n\tconst current = readScopedSemanticConfig(scope, cwd, agentDir);\n\tif (current.error) {\n\t\tthrow new SemanticConfigError(`Cannot update ${scope} semantic config (${current.path}): ${current.error.message}`);\n\t}\n\tconst nextFile: SemanticConfigFile = {\n\t\t...current.file,\n\t\tsemanticSearch: {\n\t\t\tenabled: config.enabled,\n\t\t\tautoIndex: config.autoIndex,\n\t\t\tprovider: {\n\t\t\t\ttype: config.provider.type,\n\t\t\t\tmodel: config.provider.model,\n\t\t\t\tbaseUrl: config.provider.baseUrl,\n\t\t\t\tapiKeyEnv: config.provider.apiKeyEnv,\n\t\t\t\theaders: config.provider.headers,\n\t\t\t\tbatchSize: config.provider.batchSize,\n\t\t\t\ttimeoutMs: config.provider.timeoutMs,\n\t\t\t},\n\t\t\tindex: {\n\t\t\t\tincludeGlobs: [...config.index.includeGlobs],\n\t\t\t\texcludeGlobs: [...config.index.excludeGlobs],\n\t\t\t\tchunkMaxChars: config.index.chunkMaxChars,\n\t\t\t\tchunkOverlapChars: config.index.chunkOverlapChars,\n\t\t\t\tmaxFileBytes: config.index.maxFileBytes,\n\t\t\t\tmaxFiles: config.index.maxFiles,\n\t\t\t},\n\t\t},\n\t};\n\treturn writeScopedSemanticConfig(scope, nextFile, cwd, agentDir);\n}\n\nexport function getDefaultSemanticSearchConfig(): SemanticSearchConfig {\n\treturn {\n\t\tenabled: DEFAULT_CONFIG.enabled,\n\t\tautoIndex: DEFAULT_CONFIG.autoIndex,\n\t\tprovider: { ...DEFAULT_CONFIG.provider },\n\t\tindex: {\n\t\t\tincludeGlobs: [...DEFAULT_CONFIG.index.includeGlobs],\n\t\t\texcludeGlobs: [...DEFAULT_CONFIG.index.excludeGlobs],\n\t\t\tchunkMaxChars: DEFAULT_CONFIG.index.chunkMaxChars,\n\t\t\tchunkOverlapChars: DEFAULT_CONFIG.index.chunkOverlapChars,\n\t\t\tmaxFileBytes: DEFAULT_CONFIG.index.maxFileBytes,\n\t\t\tmaxFiles: DEFAULT_CONFIG.index.maxFiles,\n\t\t},\n\t};\n}\n"]}
|
|
@@ -4,5 +4,5 @@ export { clearSemanticIndex, getSemanticIndexDir, getSemanticIndexFiles, getSema
|
|
|
4
4
|
export { createSemanticEmbeddingProvider, isLikelyEmbeddingModelId, listOllamaLocalModels, listOpenRouterEmbeddingModels, } from "./providers.js";
|
|
5
5
|
export { SemanticSearchRuntime } from "./runtime.js";
|
|
6
6
|
export type { SemanticAction, SemanticChunkForEmbedding, SemanticConfigFile, SemanticFileFingerprint, SemanticIndexConfig, SemanticIndexMeta, SemanticIndexOperationResult, SemanticIndexedChunk, SemanticIndexedVector, SemanticMergedConfig, SemanticProviderConfig, SemanticProviderType, SemanticQueryHit, SemanticQueryResult, SemanticScope, SemanticScopedLoadResult, SemanticSearchConfig, SemanticStatusResult, SemanticStaleReason, SemanticToolResult, } from "./types.js";
|
|
7
|
-
export { SemanticConfigError, SemanticConfigMissingError, SemanticRebuildRequiredError, } from "./types.js";
|
|
7
|
+
export { SemanticConfigError, SemanticConfigMissingError, SemanticIndexRequiredError, SemanticRebuildRequiredError, } from "./types.js";
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/semantic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,8BAA8B,EAC9B,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,gCAAgC,EAChC,yBAAyB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,+BAA+B,EAC/B,wBAAwB,EACxB,qBAAqB,EACrB,6BAA6B,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EACX,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,GAC5B,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/semantic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,8BAA8B,EAC9B,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,gCAAgC,EAChC,yBAAyB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,+BAA+B,EAC/B,wBAAwB,EACxB,qBAAqB,EACrB,6BAA6B,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EACX,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,mBAAmB,EACnB,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,GAC5B,MAAM,YAAY,CAAC"}
|
|
@@ -3,5 +3,5 @@ export { getSemanticCommandHelp, parseSemanticCliCommand, } from "./cli.js";
|
|
|
3
3
|
export { clearSemanticIndex, getSemanticIndexDir, getSemanticIndexFiles, getSemanticIndexesDir, getSemanticProjectHash, getSemanticRootDir, loadSemanticIndex, writeSemanticIndex, } from "./index-store.js";
|
|
4
4
|
export { createSemanticEmbeddingProvider, isLikelyEmbeddingModelId, listOllamaLocalModels, listOpenRouterEmbeddingModels, } from "./providers.js";
|
|
5
5
|
export { SemanticSearchRuntime } from "./runtime.js";
|
|
6
|
-
export { SemanticConfigError, SemanticConfigMissingError, SemanticRebuildRequiredError, } from "./types.js";
|
|
6
|
+
export { SemanticConfigError, SemanticConfigMissingError, SemanticIndexRequiredError, SemanticRebuildRequiredError, } from "./types.js";
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/semantic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,8BAA8B,EAC9B,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,gCAAgC,EAChC,yBAAyB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,sBAAsB,EACtB,uBAAuB,GAGvB,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,+BAA+B,EAC/B,wBAAwB,EACxB,qBAAqB,EACrB,6BAA6B,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAuBrD,OAAO,EACN,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,GAC5B,MAAM,YAAY,CAAC","sourcesContent":["export {\n\tgetDefaultSemanticSearchConfig,\n\tgetSemanticConfigPath,\n\tloadMergedSemanticConfig,\n\treadScopedSemanticConfig,\n\tupsertScopedSemanticSearchConfig,\n\twriteScopedSemanticConfig,\n} from \"./config.js\";\nexport {\n\tgetSemanticCommandHelp,\n\tparseSemanticCliCommand,\n\ttype ParseSemanticCliResult,\n\ttype SemanticCliCommand,\n} from \"./cli.js\";\nexport {\n\tclearSemanticIndex,\n\tgetSemanticIndexDir,\n\tgetSemanticIndexFiles,\n\tgetSemanticIndexesDir,\n\tgetSemanticProjectHash,\n\tgetSemanticRootDir,\n\tloadSemanticIndex,\n\twriteSemanticIndex,\n} from \"./index-store.js\";\nexport {\n\tcreateSemanticEmbeddingProvider,\n\tisLikelyEmbeddingModelId,\n\tlistOllamaLocalModels,\n\tlistOpenRouterEmbeddingModels,\n} from \"./providers.js\";\nexport { SemanticSearchRuntime } from \"./runtime.js\";\nexport type {\n\tSemanticAction,\n\tSemanticChunkForEmbedding,\n\tSemanticConfigFile,\n\tSemanticFileFingerprint,\n\tSemanticIndexConfig,\n\tSemanticIndexMeta,\n\tSemanticIndexOperationResult,\n\tSemanticIndexedChunk,\n\tSemanticIndexedVector,\n\tSemanticMergedConfig,\n\tSemanticProviderConfig,\n\tSemanticProviderType,\n\tSemanticQueryHit,\n\tSemanticQueryResult,\n\tSemanticScope,\n\tSemanticScopedLoadResult,\n\tSemanticSearchConfig,\n\tSemanticStatusResult,\n\tSemanticStaleReason,\n\tSemanticToolResult,\n} from \"./types.js\";\nexport {\n\tSemanticConfigError,\n\tSemanticConfigMissingError,\n\tSemanticRebuildRequiredError,\n} from \"./types.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/semantic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,8BAA8B,EAC9B,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,gCAAgC,EAChC,yBAAyB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,sBAAsB,EACtB,uBAAuB,GAGvB,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,+BAA+B,EAC/B,wBAAwB,EACxB,qBAAqB,EACrB,6BAA6B,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAuBrD,OAAO,EACN,mBAAmB,EACnB,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,GAC5B,MAAM,YAAY,CAAC","sourcesContent":["export {\n\tgetDefaultSemanticSearchConfig,\n\tgetSemanticConfigPath,\n\tloadMergedSemanticConfig,\n\treadScopedSemanticConfig,\n\tupsertScopedSemanticSearchConfig,\n\twriteScopedSemanticConfig,\n} from \"./config.js\";\nexport {\n\tgetSemanticCommandHelp,\n\tparseSemanticCliCommand,\n\ttype ParseSemanticCliResult,\n\ttype SemanticCliCommand,\n} from \"./cli.js\";\nexport {\n\tclearSemanticIndex,\n\tgetSemanticIndexDir,\n\tgetSemanticIndexFiles,\n\tgetSemanticIndexesDir,\n\tgetSemanticProjectHash,\n\tgetSemanticRootDir,\n\tloadSemanticIndex,\n\twriteSemanticIndex,\n} from \"./index-store.js\";\nexport {\n\tcreateSemanticEmbeddingProvider,\n\tisLikelyEmbeddingModelId,\n\tlistOllamaLocalModels,\n\tlistOpenRouterEmbeddingModels,\n} from \"./providers.js\";\nexport { SemanticSearchRuntime } from \"./runtime.js\";\nexport type {\n\tSemanticAction,\n\tSemanticChunkForEmbedding,\n\tSemanticConfigFile,\n\tSemanticFileFingerprint,\n\tSemanticIndexConfig,\n\tSemanticIndexMeta,\n\tSemanticIndexOperationResult,\n\tSemanticIndexedChunk,\n\tSemanticIndexedVector,\n\tSemanticMergedConfig,\n\tSemanticProviderConfig,\n\tSemanticProviderType,\n\tSemanticQueryHit,\n\tSemanticQueryResult,\n\tSemanticScope,\n\tSemanticScopedLoadResult,\n\tSemanticSearchConfig,\n\tSemanticStatusResult,\n\tSemanticStaleReason,\n\tSemanticToolResult,\n} from \"./types.js\";\nexport {\n\tSemanticConfigError,\n\tSemanticConfigMissingError,\n\tSemanticIndexRequiredError,\n\tSemanticRebuildRequiredError,\n} from \"./types.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/core/semantic/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAatD,OAAO,KAAK,EAGX,4BAA4B,EAI5B,mBAAmB,EAEnB,oBAAoB,EAGpB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/core/semantic/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAatD,OAAO,KAAK,EAGX,4BAA4B,EAI5B,mBAAmB,EAEnB,oBAAoB,EAGpB,MAAM,YAAY,CAAC;AAOpB,UAAU,sBAAsB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC1B;AAiED,qBAAa,qBAAqB;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAc;gBAE/B,OAAO,EAAE,sBAAsB;IAMrC,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;IACxD,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAC/D,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,4BAA4B,CAAC;IACjE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAcpF,MAAM,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAiDvC,KAAK,IAAI,OAAO,CAAC,4BAA4B,CAAC;IAI9C,OAAO,IAAI,OAAO,CAAC,4BAA4B,CAAC;IAIhD,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAiG1E,OAAO,CAAC,4BAA4B;IAcpC,OAAO,CAAC,eAAe;IAsCvB,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,mBAAmB;IAqC3B,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,sBAAsB;YAWhB,UAAU;CA4KxB"}
|
|
@@ -6,7 +6,7 @@ import { getSemanticConfigPath, loadMergedSemanticConfig, } from "./config.js";
|
|
|
6
6
|
import { chunkTextForSemantic } from "./chunking.js";
|
|
7
7
|
import { getSemanticIndexDir, getSemanticProjectHash, loadSemanticIndex, writeSemanticIndex, } from "./index-store.js";
|
|
8
8
|
import { createSemanticEmbeddingProvider } from "./providers.js";
|
|
9
|
-
import { SemanticConfigMissingError, SemanticRebuildRequiredError, } from "./types.js";
|
|
9
|
+
import { SemanticConfigMissingError, SemanticIndexRequiredError, SemanticRebuildRequiredError, } from "./types.js";
|
|
10
10
|
function toPosixPath(filePath) {
|
|
11
11
|
return filePath.split(sep).join("/");
|
|
12
12
|
}
|
|
@@ -87,6 +87,7 @@ export class SemanticSearchRuntime {
|
|
|
87
87
|
action: "status",
|
|
88
88
|
configured: false,
|
|
89
89
|
enabled: false,
|
|
90
|
+
autoIndex: false,
|
|
90
91
|
indexed: false,
|
|
91
92
|
stale: true,
|
|
92
93
|
staleReason: "missing_index",
|
|
@@ -105,6 +106,7 @@ export class SemanticSearchRuntime {
|
|
|
105
106
|
action: "status",
|
|
106
107
|
configured: true,
|
|
107
108
|
enabled: config.enabled,
|
|
109
|
+
autoIndex: config.autoIndex,
|
|
108
110
|
indexed: loaded.exists && !!loaded.meta,
|
|
109
111
|
stale: stale.stale,
|
|
110
112
|
staleReason: stale.reason,
|
|
@@ -142,6 +144,15 @@ export class SemanticSearchRuntime {
|
|
|
142
144
|
status.staleReason === "chunking_changed" ||
|
|
143
145
|
status.staleReason === "index_filters_changed" ||
|
|
144
146
|
status.staleReason === "dimension_mismatch";
|
|
147
|
+
if (!config.autoIndex) {
|
|
148
|
+
if (!status.indexed) {
|
|
149
|
+
throw new SemanticIndexRequiredError("Semantic index is missing and auto-indexing is disabled. Run /semantic index (or iosm semantic index), or enable auto-indexing in /semantic.");
|
|
150
|
+
}
|
|
151
|
+
if (requiresRebuild) {
|
|
152
|
+
throw new SemanticRebuildRequiredError(`Semantic index is stale${status.staleReason ? ` (${status.staleReason})` : ""} and auto-indexing is disabled. Run /semantic rebuild.`);
|
|
153
|
+
}
|
|
154
|
+
throw new SemanticIndexRequiredError(`Semantic index is stale${status.staleReason ? ` (${status.staleReason})` : ""} and auto-indexing is disabled. Run /semantic index (or enable auto-indexing in /semantic).`);
|
|
155
|
+
}
|
|
145
156
|
await this.buildIndex(requiresRebuild);
|
|
146
157
|
autoRefreshed = true;
|
|
147
158
|
}
|