iosm-cli 0.2.15 → 0.2.16
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 +32 -0
- package/README.md +18 -1
- package/dist/cli/args.d.ts +2 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +16 -3
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-profiles.d.ts.map +1 -1
- package/dist/core/agent-profiles.js +3 -0
- package/dist/core/agent-profiles.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +26 -10
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agent-teams.d.ts.map +1 -1
- package/dist/core/agent-teams.js +12 -9
- package/dist/core/agent-teams.js.map +1 -1
- package/dist/core/checkpoint/fs-checkpoint.d.ts +14 -0
- package/dist/core/checkpoint/fs-checkpoint.d.ts.map +1 -0
- package/dist/core/checkpoint/fs-checkpoint.js +211 -0
- package/dist/core/checkpoint/fs-checkpoint.js.map +1 -0
- package/dist/core/command-dispatcher.d.ts +2 -0
- package/dist/core/command-dispatcher.d.ts.map +1 -1
- package/dist/core/command-dispatcher.js +78 -13
- package/dist/core/command-dispatcher.js.map +1 -1
- package/dist/core/mcp/cli.d.ts.map +1 -1
- package/dist/core/mcp/cli.js +26 -0
- package/dist/core/mcp/cli.js.map +1 -1
- package/dist/core/mcp/config.d.ts.map +1 -1
- package/dist/core/mcp/config.js +55 -0
- package/dist/core/mcp/config.js.map +1 -1
- package/dist/core/mcp/index.d.ts +1 -1
- package/dist/core/mcp/index.d.ts.map +1 -1
- package/dist/core/mcp/index.js.map +1 -1
- package/dist/core/mcp/runtime.d.ts +3 -1
- package/dist/core/mcp/runtime.d.ts.map +1 -1
- package/dist/core/mcp/runtime.js +21 -2
- package/dist/core/mcp/runtime.js.map +1 -1
- package/dist/core/mcp/types.d.ts +30 -2
- package/dist/core/mcp/types.d.ts.map +1 -1
- package/dist/core/mcp/types.js.map +1 -1
- package/dist/core/package-manager.d.ts +10 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +100 -2
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/policy/engine.d.ts +77 -0
- package/dist/core/policy/engine.d.ts.map +1 -0
- package/dist/core/policy/engine.js +614 -0
- package/dist/core/policy/engine.js.map +1 -0
- package/dist/core/policy/index.d.ts +2 -0
- package/dist/core/policy/index.d.ts.map +1 -0
- package/dist/core/policy/index.js +2 -0
- package/dist/core/policy/index.js.map +1 -0
- package/dist/core/sandbox/executor.d.ts +13 -0
- package/dist/core/sandbox/executor.d.ts.map +1 -0
- package/dist/core/sandbox/executor.js +64 -0
- package/dist/core/sandbox/executor.js.map +1 -0
- package/dist/core/sdk.d.ts +2 -2
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +3 -3
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/security/index.d.ts +3 -0
- package/dist/core/security/index.d.ts.map +1 -0
- package/dist/core/security/index.js +3 -0
- package/dist/core/security/index.js.map +1 -0
- package/dist/core/security/source-security.d.ts +43 -0
- package/dist/core/security/source-security.d.ts.map +1 -0
- package/dist/core/security/source-security.js +94 -0
- package/dist/core/security/source-security.js.map +1 -0
- package/dist/core/security/trust-ledger.d.ts +24 -0
- package/dist/core/security/trust-ledger.d.ts.map +1 -0
- package/dist/core/security/trust-ledger.js +66 -0
- package/dist/core/security/trust-ledger.js.map +1 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +128 -15
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +6 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +22 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +9 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/task-plan.d.ts +1 -0
- package/dist/core/task-plan.d.ts.map +1 -1
- package/dist/core/task-plan.js +103 -0
- package/dist/core/task-plan.js.map +1 -1
- package/dist/core/tools/apply-patch.d.ts +29 -0
- package/dist/core/tools/apply-patch.d.ts.map +1 -0
- package/dist/core/tools/apply-patch.js +167 -0
- package/dist/core/tools/apply-patch.js.map +1 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +15 -1
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/git-common.d.ts.map +1 -1
- package/dist/core/tools/git-common.js +15 -1
- package/dist/core/tools/git-common.js.map +1 -1
- package/dist/core/tools/index.d.ts +20 -2
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +85 -25
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/permissions.d.ts +16 -0
- package/dist/core/tools/permissions.d.ts.map +1 -1
- package/dist/core/tools/permissions.js +34 -1
- package/dist/core/tools/permissions.js.map +1 -1
- package/dist/core/tools/task.d.ts.map +1 -1
- package/dist/core/tools/task.js +68 -24
- package/dist/core/tools/task.js.map +1 -1
- package/dist/core/tools/tool-search.d.ts +24 -0
- package/dist/core/tools/tool-search.d.ts.map +1 -0
- package/dist/core/tools/tool-search.js +85 -0
- package/dist/core/tools/tool-search.js.map +1 -0
- package/dist/core/tools/tool-suggest.d.ts +18 -0
- package/dist/core/tools/tool-suggest.d.ts.map +1 -0
- package/dist/core/tools/tool-suggest.js +94 -0
- package/dist/core/tools/tool-suggest.js.map +1 -0
- package/dist/core/tools/verification-runner.d.ts.map +1 -1
- package/dist/core/tools/verification-runner.js +15 -1
- package/dist/core/tools/verification-runner.js.map +1 -1
- package/dist/core/unified-exec.d.ts +39 -0
- package/dist/core/unified-exec.d.ts.map +1 -0
- package/dist/core/unified-exec.js +286 -0
- package/dist/core/unified-exec.js.map +1 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +93 -11
- package/dist/main.js.map +1 -1
- package/dist/modes/acp/acp-mode.d.ts +17 -0
- package/dist/modes/acp/acp-mode.d.ts.map +1 -0
- package/dist/modes/acp/acp-mode.js +352 -0
- package/dist/modes/acp/acp-mode.js.map +1 -0
- package/dist/modes/index.d.ts +2 -1
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/index.js +1 -0
- package/dist/modes/index.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +217 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +8 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +159 -72
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +25 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +33 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +13 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +189 -28
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +54 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +96 -9
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/README.md +2 -0
- package/docs/acp-rpc-mapping.md +38 -0
- package/docs/configuration.generated.md +81 -0
- package/docs/configuration.md +7 -0
- package/package.json +4 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/core/policy/engine.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport TOML from \"@iarna/toml\";\nimport { minimatch } from \"minimatch\";\nimport { CONFIG_DIR_NAME } from \"../../config.js\";\nimport type { SettingsManager } from \"../settings-manager.js\";\nimport type { ToolPermissionRequest } from \"../tools/permissions.js\";\n\nexport type PolicyEffect = \"allow\" | \"deny\" | \"ask\";\nexport type PolicyLayer = \"admin\" | \"user\" | \"workspace\" | \"default\" | \"legacy\";\nexport type PolicyToolSource = \"builtin\" | \"extension\" | \"custom\" | \"mcp\";\n\nexport interface PolicyRuleV2 {\n\tid: string;\n\tenabled: boolean;\n\teffect: PolicyEffect;\n\tpriority: number;\n\ttools: string[];\n\ttoolSource?: PolicyToolSource[];\n\tmcpName?: string[];\n\tprofiles?: string[];\n\tcwdGlob?: string[];\n\targsPattern?: string;\n\tchecker?: string;\n\tlegacyRule?: string;\n}\n\nexport interface PolicySource {\n\tlayer: PolicyLayer;\n\tpath?: string;\n\trules: PolicyRuleV2[];\n\tallowedSources: string[];\n}\n\nexport interface PolicyEvaluationContext {\n\tprofile?: string;\n}\n\nexport interface PolicyDecision {\n\teffect: PolicyEffect;\n\tmatched: boolean;\n\treason: string;\n\trule?: PolicyRuleV2;\n\tlayer?: PolicyLayer;\n}\n\ninterface ParsedPolicyToml {\n\tversion?: number;\n\tallowed_sources?: unknown;\n\trules?: unknown;\n\t[key: string]: unknown;\n}\n\ninterface MutablePolicyToml {\n\tversion: number;\n\tallowed_sources?: string[];\n\trules: Array<Record<string, unknown>>;\n\t[key: string]: unknown;\n}\n\nconst DEFAULT_ALLOWED_SOURCES = [\n\t\"registry.npmjs.org\",\n\t\"npmjs.org\",\n\t\"github.com\",\n\t\"gitlab.com\",\n\t\"bitbucket.org\",\n\t\"api.github.com\",\n\t\"raw.githubusercontent.com\",\n];\n\nfunction escapeRegExp(value: string): string {\n\treturn value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction normalizeStringArray(value: unknown): string[] {\n\tif (!Array.isArray(value)) return [];\n\treturn 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}\n\nfunction toPolicyToolSourceArray(value: unknown): PolicyToolSource[] | undefined {\n\tconst values = normalizeStringArray(value)\n\t\t.map((item) => item.toLowerCase())\n\t\t.filter((item): item is PolicyToolSource =>\n\t\t\titem === \"builtin\" || item === \"extension\" || item === \"custom\" || item === \"mcp\",\n\t\t);\n\treturn values.length > 0 ? values : undefined;\n}\n\nfunction asPolicyEffect(value: unknown): PolicyEffect | undefined {\n\tif (typeof value !== \"string\") return undefined;\n\tif (value === \"allow\" || value === \"deny\" || value === \"ask\") return value;\n\treturn undefined;\n}\n\nfunction asFiniteNumber(value: unknown, fallback: number): number {\n\tif (typeof value !== \"number\" || Number.isNaN(value)) return fallback;\n\treturn value;\n}\n\nfunction normalizeRule(raw: unknown, index: number): PolicyRuleV2 | undefined {\n\tif (!raw || typeof raw !== \"object\") return undefined;\n\tconst obj = raw as Record<string, unknown>;\n\tconst effect = asPolicyEffect(obj.effect);\n\tif (!effect) return undefined;\n\tconst idRaw = typeof obj.id === \"string\" ? obj.id.trim() : \"\";\n\tconst id = idRaw.length > 0 ? idRaw : `rule-${index + 1}`;\n\tconst tools = normalizeStringArray(obj.tools);\n\tconst normalizedTools = tools.length > 0 ? tools : [\"*\"];\n\tconst enabled = typeof obj.enabled === \"boolean\" ? obj.enabled : true;\n\tconst priority = Math.trunc(asFiniteNumber(obj.priority, 0));\n\tconst toolSource = toPolicyToolSourceArray(obj.tool_source);\n\tconst mcpName = normalizeStringArray(obj.mcp_name);\n\tconst profiles = normalizeStringArray(obj.profiles);\n\tconst cwdGlob = normalizeStringArray(obj.cwd_glob);\n\tconst argsPattern = typeof obj.args_pattern === \"string\" && obj.args_pattern.trim().length > 0 ? obj.args_pattern : undefined;\n\tconst checker = typeof obj.checker === \"string\" && obj.checker.trim().length > 0 ? obj.checker : undefined;\n\tconst legacyRule =\n\t\ttypeof obj.legacy_rule === \"string\" && obj.legacy_rule.trim().length > 0 ? obj.legacy_rule.trim() : undefined;\n\n\treturn {\n\t\tid,\n\t\tenabled,\n\t\teffect,\n\t\tpriority,\n\t\ttools: normalizedTools,\n\t\ttoolSource,\n\t\tmcpName: mcpName.length > 0 ? mcpName : undefined,\n\t\tprofiles: profiles.length > 0 ? profiles : undefined,\n\t\tcwdGlob: cwdGlob.length > 0 ? cwdGlob : undefined,\n\t\targsPattern,\n\t\tchecker,\n\t\tlegacyRule,\n\t};\n}\n\nfunction toTomlRule(rule: PolicyRuleV2): Record<string, unknown> {\n\tconst serialized: Record<string, unknown> = {\n\t\tid: rule.id,\n\t\tenabled: rule.enabled,\n\t\teffect: rule.effect,\n\t\tpriority: rule.priority,\n\t\ttools: [...rule.tools],\n\t};\n\tif (rule.toolSource && rule.toolSource.length > 0) serialized.tool_source = [...rule.toolSource];\n\tif (rule.mcpName && rule.mcpName.length > 0) serialized.mcp_name = [...rule.mcpName];\n\tif (rule.profiles && rule.profiles.length > 0) serialized.profiles = [...rule.profiles];\n\tif (rule.cwdGlob && rule.cwdGlob.length > 0) serialized.cwd_glob = [...rule.cwdGlob];\n\tif (rule.argsPattern) serialized.args_pattern = rule.argsPattern;\n\tif (rule.checker) serialized.checker = rule.checker;\n\tif (rule.legacyRule) serialized.legacy_rule = rule.legacyRule;\n\treturn serialized;\n}\n\nfunction parsePolicyToml(content: string): { rules: PolicyRuleV2[]; allowedSources: string[] } {\n\tconst parsed = TOML.parse(content) as ParsedPolicyToml;\n\tconst ruleEntries = Array.isArray(parsed.rules) ? parsed.rules : [];\n\tconst rules: PolicyRuleV2[] = [];\n\tfor (let index = 0; index < ruleEntries.length; index += 1) {\n\t\tconst normalized = normalizeRule(ruleEntries[index], index);\n\t\tif (normalized) {\n\t\t\trules.push(normalized);\n\t\t}\n\t}\n\treturn {\n\t\trules,\n\t\tallowedSources: normalizeStringArray(parsed.allowed_sources),\n\t};\n}\n\nfunction buildLegacyPolicyRules(settingsManager: SettingsManager): PolicyRuleV2[] {\n\tconst rules: PolicyRuleV2[] = [];\n\n\tfor (const [index, raw] of settingsManager.getPermissionDenyRules().entries()) {\n\t\tconst normalized = raw.trim();\n\t\tif (!normalized) continue;\n\t\tconst [toolRaw, ...rest] = normalized.split(\":\");\n\t\tconst tool = toolRaw.trim() || \"*\";\n\t\tconst needle = rest.join(\":\").trim();\n\t\trules.push({\n\t\t\tid: `legacy-deny-${index + 1}`,\n\t\t\tenabled: true,\n\t\t\teffect: \"deny\",\n\t\t\tpriority: 1000 - index,\n\t\t\ttools: [tool],\n\t\t\tchecker: needle ? `summary_contains:${needle}` : undefined,\n\t\t\tlegacyRule: `${tool}:${needle}`,\n\t\t});\n\t}\n\n\tfor (const [index, raw] of settingsManager.getPermissionAllowRules().entries()) {\n\t\tconst normalized = raw.trim();\n\t\tif (!normalized) continue;\n\t\tconst [toolRaw, ...rest] = normalized.split(\":\");\n\t\tconst tool = toolRaw.trim() || \"*\";\n\t\tconst needle = rest.join(\":\").trim();\n\t\trules.push({\n\t\t\tid: `legacy-allow-${index + 1}`,\n\t\t\tenabled: true,\n\t\t\teffect: \"allow\",\n\t\t\tpriority: 1000 - index,\n\t\t\ttools: [tool],\n\t\t\tchecker: needle ? `summary_contains:${needle}` : undefined,\n\t\t\tlegacyRule: `${tool}:${needle}`,\n\t\t});\n\t}\n\n\treturn rules;\n}\n\nfunction loadPolicyFile(path: string): { rules: PolicyRuleV2[]; allowedSources: string[] } {\n\tif (!existsSync(path)) {\n\t\treturn { rules: [], allowedSources: [] };\n\t}\n\tconst content = readFileSync(path, \"utf8\");\n\treturn parsePolicyToml(content);\n}\n\nfunction normalizePolicyPath(path: string): string {\n\tif (path === \"~\") return homedir();\n\tif (path.startsWith(\"~/\")) return join(homedir(), path.slice(2));\n\treturn path;\n}\n\nfunction defaultAdminPolicyPath(): string {\n\tif (process.platform === \"win32\") {\n\t\treturn \"C:\\\\ProgramData\\\\iosm\\\\policy.toml\";\n\t}\n\treturn \"/etc/iosm/policy.toml\";\n}\n\nfunction buildDefaultRuleSet(): PolicySource {\n\treturn {\n\t\tlayer: \"default\",\n\t\trules: [],\n\t\tallowedSources: [...DEFAULT_ALLOWED_SOURCES],\n\t};\n}\n\nfunction getLayerRank(layer: PolicyLayer): number {\n\tswitch (layer) {\n\t\tcase \"admin\":\n\t\t\treturn 0;\n\t\tcase \"user\":\n\t\t\treturn 1;\n\t\tcase \"workspace\":\n\t\t\treturn 2;\n\t\tcase \"default\":\n\t\t\treturn 3;\n\t\tcase \"legacy\":\n\t\t\treturn 4;\n\t}\n}\n\nexport class PolicyEngineV2 {\n\tprivate readonly cwd: string;\n\tprivate readonly agentDir: string;\n\tprivate readonly adminPolicyPath: string;\n\tprivate readonly settingsManager: SettingsManager;\n\tprivate sources: PolicySource[] = [];\n\n\tconstructor(options: {\n\t\tcwd: string;\n\t\tagentDir: string;\n\t\tsettingsManager: SettingsManager;\n\t\tadminPolicyPath?: string;\n\t}) {\n\t\tthis.cwd = options.cwd;\n\t\tthis.agentDir = options.agentDir;\n\t\tthis.settingsManager = options.settingsManager;\n\t\tthis.adminPolicyPath = normalizePolicyPath(options.adminPolicyPath ?? defaultAdminPolicyPath());\n\t\tthis.refresh();\n\t}\n\n\trefresh(): void {\n\t\tconst userPath = join(this.agentDir, \"policy.toml\");\n\t\tconst workspacePath = join(this.cwd, CONFIG_DIR_NAME, \"policy.toml\");\n\t\tconst admin = loadPolicyFile(this.adminPolicyPath);\n\t\tconst user = loadPolicyFile(userPath);\n\t\tconst workspace = loadPolicyFile(workspacePath);\n\t\tconst legacyRules = buildLegacyPolicyRules(this.settingsManager);\n\t\tthis.sources = [\n\t\t\t{ layer: \"admin\", path: this.adminPolicyPath, rules: admin.rules, allowedSources: admin.allowedSources },\n\t\t\t{ layer: \"user\", path: userPath, rules: user.rules, allowedSources: user.allowedSources },\n\t\t\t{ layer: \"workspace\", path: workspacePath, rules: workspace.rules, allowedSources: workspace.allowedSources },\n\t\t\tbuildDefaultRuleSet(),\n\t\t\t{ layer: \"legacy\", rules: legacyRules, allowedSources: [] },\n\t\t];\n\t}\n\n\tgetSources(): PolicySource[] {\n\t\treturn this.sources.map((source) => ({\n\t\t\tlayer: source.layer,\n\t\t\tpath: source.path,\n\t\t\trules: source.rules.map((rule) => ({ ...rule })),\n\t\t\tallowedSources: [...source.allowedSources],\n\t\t}));\n\t}\n\n\tgetAllowedSourceHosts(): string[] {\n\t\tconst merged = new Set<string>();\n\t\tfor (const source of this.sources) {\n\t\t\tfor (const host of source.allowedSources) {\n\t\t\t\tmerged.add(host.toLowerCase());\n\t\t\t}\n\t\t}\n\t\treturn [...merged];\n\t}\n\n\tgetLegacyRules(effect: \"allow\" | \"deny\"): string[] {\n\t\tconst values: string[] = [];\n\t\tfor (const source of this.sources) {\n\t\t\tif (source.layer !== \"user\") continue;\n\t\t\tfor (const rule of source.rules) {\n\t\t\t\tif (rule.effect !== effect) continue;\n\t\t\t\tif (rule.legacyRule && rule.legacyRule.trim().length > 0) {\n\t\t\t\t\tvalues.push(rule.legacyRule.trim());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn values;\n\t}\n\n\tsetLegacyRules(effect: \"allow\" | \"deny\", rawRules: string[]): void {\n\t\tconst path = join(this.agentDir, \"policy.toml\");\n\t\tconst file = this.readMutablePolicy(path);\n\t\tconst keep = file.rules\n\t\t\t.map((entry, index) => ({ entry, index }))\n\t\t\t.filter(({ entry }) => {\n\t\t\t\tconst rule = normalizeRule(entry, 0);\n\t\t\t\tif (!rule) return true;\n\t\t\t\tif (rule.effect !== effect) return true;\n\t\t\t\treturn !rule.legacyRule;\n\t\t\t})\n\t\t\t.map(({ entry }) => entry);\n\t\tconst nextRules: Array<Record<string, unknown>> = [...keep];\n\t\tlet counter = 1;\n\t\tfor (const raw of rawRules) {\n\t\t\tconst normalized = raw.trim();\n\t\t\tif (!normalized || !normalized.includes(\":\")) continue;\n\t\t\tconst [toolRaw, ...rest] = normalized.split(\":\");\n\t\t\tconst tool = toolRaw.trim() || \"*\";\n\t\t\tconst needle = rest.join(\":\").trim();\n\t\t\tconst rule: PolicyRuleV2 = {\n\t\t\t\tid: `legacy-${effect}-${counter}`,\n\t\t\t\tenabled: true,\n\t\t\t\teffect,\n\t\t\t\tpriority: 1000 - counter,\n\t\t\t\ttools: [tool],\n\t\t\t\tchecker: needle ? `summary_contains:${needle}` : undefined,\n\t\t\t\tlegacyRule: `${tool}:${needle}`,\n\t\t\t};\n\t\t\tnextRules.push(toTomlRule(rule));\n\t\t\tcounter += 1;\n\t\t}\n\t\tfile.rules = nextRules;\n\t\tthis.writeMutablePolicy(path, file);\n\t\tthis.refresh();\n\t}\n\n\taddLegacyRule(effect: \"allow\" | \"deny\", rawRule: string): boolean {\n\t\tconst normalized = rawRule.trim();\n\t\tif (!normalized || !normalized.includes(\":\")) return false;\n\t\tconst existing = new Set(this.getLegacyRules(effect));\n\t\tif (existing.has(normalized)) return false;\n\t\tthis.setLegacyRules(effect, [...existing, normalized]);\n\t\treturn true;\n\t}\n\n\tremoveLegacyRule(effect: \"allow\" | \"deny\", rawRule: string): boolean {\n\t\tconst normalized = rawRule.trim();\n\t\tif (!normalized) return false;\n\t\tconst current = this.getLegacyRules(effect);\n\t\tconst next = current.filter((rule) => rule !== normalized);\n\t\tif (next.length === current.length) return false;\n\t\tthis.setLegacyRules(effect, next);\n\t\treturn true;\n\t}\n\n\tevaluate(request: ToolPermissionRequest, context: PolicyEvaluationContext = {}): PolicyDecision {\n\t\tconst decorated: Array<{\n\t\t\tlayer: PolicyLayer;\n\t\t\trule: PolicyRuleV2;\n\t\t\tlayerRank: number;\n\t\t\torder: number;\n\t\t}> = [];\n\t\tlet order = 0;\n\t\tfor (const source of this.sources) {\n\t\t\tfor (const rule of source.rules) {\n\t\t\t\tdecorated.push({\n\t\t\t\t\tlayer: source.layer,\n\t\t\t\t\trule,\n\t\t\t\t\tlayerRank: getLayerRank(source.layer),\n\t\t\t\t\torder: order++,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tdecorated.sort((a, b) => {\n\t\t\tif (a.layerRank !== b.layerRank) return a.layerRank - b.layerRank;\n\t\t\tif (a.rule.priority !== b.rule.priority) return b.rule.priority - a.rule.priority;\n\t\t\treturn a.order - b.order;\n\t\t});\n\n\t\tfor (const entry of decorated) {\n\t\t\tconst rule = entry.rule;\n\t\t\tif (!rule.enabled) continue;\n\t\t\tif (!this.matchesRule(rule, request, context)) continue;\n\t\t\treturn {\n\t\t\t\teffect: rule.effect,\n\t\t\t\tmatched: true,\n\t\t\t\treason: `Matched policy rule ${rule.id} (${entry.layer})`,\n\t\t\t\trule,\n\t\t\t\tlayer: entry.layer,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\teffect: \"ask\",\n\t\t\tmatched: false,\n\t\t\treason: \"No policy rule matched.\",\n\t\t};\n\t}\n\n\tprivate matchesRule(rule: PolicyRuleV2, request: ToolPermissionRequest, context: PolicyEvaluationContext): boolean {\n\t\tif (!this.matchesTools(rule, request)) return false;\n\t\tif (rule.toolSource && rule.toolSource.length > 0) {\n\t\t\tconst source = request.toolSource ?? \"builtin\";\n\t\t\tif (!rule.toolSource.includes(source)) return false;\n\t\t}\n\t\tif (rule.mcpName && rule.mcpName.length > 0) {\n\t\t\tconst serverName = request.mcpServerName?.trim();\n\t\t\tif (!serverName) return false;\n\t\t\tif (!rule.mcpName.some((candidate) => candidate === \"*\" || candidate === serverName)) return false;\n\t\t}\n\t\tif (rule.profiles && rule.profiles.length > 0) {\n\t\t\tconst profile = context.profile?.trim();\n\t\t\tif (!profile) return false;\n\t\t\tif (!rule.profiles.some((candidate) => candidate === \"*\" || candidate === profile)) return false;\n\t\t}\n\t\tif (rule.cwdGlob && rule.cwdGlob.length > 0) {\n\t\t\tif (!rule.cwdGlob.some((glob) => minimatch(request.cwd, glob, { dot: true }))) return false;\n\t\t}\n\t\tif (rule.argsPattern && !this.matchesArgsPattern(rule.argsPattern, request)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (rule.checker && !this.matchesChecker(rule.checker, request)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tprivate matchesTools(rule: PolicyRuleV2, request: ToolPermissionRequest): boolean {\n\t\tconst toolCandidates = [request.toolName];\n\t\tif (request.toolSource === \"mcp\") {\n\t\t\tif (request.mcpToolName) toolCandidates.push(request.mcpToolName);\n\t\t}\n\t\treturn rule.tools.some((pattern) => {\n\t\t\tif (pattern === \"*\") return true;\n\t\t\treturn toolCandidates.some((toolName) => minimatch(toolName, pattern));\n\t\t});\n\t}\n\n\tprivate matchesArgsPattern(pattern: string, request: ToolPermissionRequest): boolean {\n\t\tconst haystack = `${request.summary}\\n${this.serializeInput(request.input)}`;\n\t\ttry {\n\t\t\tconst regex = new RegExp(pattern, \"i\");\n\t\t\treturn regex.test(haystack);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tprivate matchesChecker(checker: string, request: ToolPermissionRequest): boolean {\n\t\tconst trimmed = checker.trim();\n\t\tif (trimmed.length === 0) return true;\n\t\tif (trimmed.startsWith(\"summary_contains:\")) {\n\t\t\tconst needle = trimmed.slice(\"summary_contains:\".length).trim().toLowerCase();\n\t\t\tif (!needle) return true;\n\t\t\treturn request.summary.toLowerCase().includes(needle);\n\t\t}\n\t\tif (trimmed.startsWith(\"summary_regex:\")) {\n\t\t\tconst pattern = trimmed.slice(\"summary_regex:\".length).trim();\n\t\t\tif (!pattern) return true;\n\t\t\ttry {\n\t\t\t\treturn new RegExp(pattern, \"i\").test(request.summary);\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tif (trimmed.startsWith(\"legacy_substring:\")) {\n\t\t\tconst needle = trimmed.slice(\"legacy_substring:\".length).trim().toLowerCase();\n\t\t\treturn !needle || request.summary.toLowerCase().includes(needle);\n\t\t}\n\t\tif (trimmed.startsWith(\"tool_exact:\")) {\n\t\t\tconst expected = trimmed.slice(\"tool_exact:\".length).trim();\n\t\t\treturn !expected || request.toolName === expected;\n\t\t}\n\t\tif (trimmed.startsWith(\"args_regex:\")) {\n\t\t\tconst pattern = trimmed.slice(\"args_regex:\".length).trim();\n\t\t\ttry {\n\t\t\t\treturn new RegExp(pattern, \"i\").test(this.serializeInput(request.input));\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate serializeInput(input: Record<string, unknown>): string {\n\t\ttry {\n\t\t\treturn JSON.stringify(input);\n\t\t} catch {\n\t\t\treturn \"\";\n\t\t}\n\t}\n\n\tprivate readMutablePolicy(path: string): MutablePolicyToml {\n\t\tif (!existsSync(path)) {\n\t\t\treturn {\n\t\t\t\tversion: 2,\n\t\t\t\tallowed_sources: [...DEFAULT_ALLOWED_SOURCES],\n\t\t\t\trules: [],\n\t\t\t};\n\t\t}\n\t\tconst raw = readFileSync(path, \"utf8\");\n\t\tconst parsed = TOML.parse(raw) as ParsedPolicyToml;\n\t\tconst rules = Array.isArray(parsed.rules)\n\t\t\t? parsed.rules.filter((entry): entry is Record<string, unknown> => !!entry && typeof entry === \"object\")\n\t\t\t: [];\n\t\treturn {\n\t\t\t...parsed,\n\t\t\tversion: typeof parsed.version === \"number\" ? parsed.version : 2,\n\t\t\tallowed_sources: normalizeStringArray(parsed.allowed_sources),\n\t\t\trules,\n\t\t};\n\t}\n\n\tprivate writeMutablePolicy(path: string, file: MutablePolicyToml): void {\n\t\tconst dir = dirname(path);\n\t\tif (!existsSync(dir)) {\n\t\t\tmkdirSync(dir, { recursive: true });\n\t\t}\n\t\tconst content = TOML.stringify(file as Parameters<typeof TOML.stringify>[0]);\n\t\twriteFileSync(path, content, \"utf8\");\n\t}\n}\n\nexport interface PermissionEvaluationResult {\n\toutcome: \"allow\" | \"deny\" | \"ask\";\n\tdecision: PolicyDecision;\n\treason: string;\n}\n\nconst DANGEROUS_TOOL_NAMES = new Set([\"bash\", \"edit\", \"write\", \"apply_patch\", \"git_write\", \"fs_ops\", \"db_run\"]);\n\nexport function evaluatePermissionWithPolicy(\n\tengine: PolicyEngineV2,\n\trequest: ToolPermissionRequest,\n\tcontext: {\n\t\tprofile?: string;\n\t\truntimeMode: \"interactive\" | \"rpc\";\n\t\tpermissionMode: \"ask\" | \"auto\" | \"yolo\";\n\t\tstrictExtensionToolEnforcement?: boolean;\n\t},\n): PermissionEvaluationResult {\n\tconst policyDecision = engine.evaluate(request, { profile: context.profile });\n\tconst isMcpRequest = request.toolSource === \"mcp\";\n\tconst mcpApprovalMode = isMcpRequest ? (request.mcpApprovalMode ?? \"auto\") : \"auto\";\n\tif (policyDecision.effect === \"deny\") {\n\t\treturn {\n\t\t\toutcome: \"deny\",\n\t\t\tdecision: policyDecision,\n\t\t\treason: policyDecision.reason,\n\t\t};\n\t}\n\n\tif (isMcpRequest && mcpApprovalMode === \"prompt\") {\n\t\treturn {\n\t\t\toutcome: \"ask\",\n\t\t\tdecision: policyDecision,\n\t\t\treason: \"MCP tool approval mode is prompt; confirmation required.\",\n\t\t};\n\t}\n\n\tif (isMcpRequest && mcpApprovalMode === \"approve\") {\n\t\tif (!request.mcpServerTrusted) {\n\t\t\treturn {\n\t\t\t\toutcome: \"ask\",\n\t\t\t\tdecision: policyDecision,\n\t\t\t\treason: \"MCP server is untrusted. approvalMode=approve requires trusted server.\",\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\toutcome: \"allow\",\n\t\t\tdecision: policyDecision,\n\t\t\treason:\n\t\t\t\tpolicyDecision.effect === \"allow\"\n\t\t\t\t\t? policyDecision.reason\n\t\t\t\t\t: \"MCP tool approval mode is approve on trusted server.\",\n\t\t};\n\t}\n\n\tif (policyDecision.effect === \"allow\") {\n\t\tif (isMcpRequest) {\n\t\t\tconst explicitMcpRule =\n\t\t\t\tBoolean(policyDecision.rule?.mcpName && policyDecision.rule.mcpName.length > 0) &&\n\t\t\t\tBoolean(policyDecision.rule?.tools && policyDecision.rule.tools.some((tool) => tool !== \"*\"));\n\t\t\tif (!request.mcpServerTrusted) {\n\t\t\t\treturn {\n\t\t\t\t\toutcome: \"ask\",\n\t\t\t\t\tdecision: policyDecision,\n\t\t\t\t\treason: \"MCP server is untrusted. Explicit allow requires trusted server for bypass.\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (!explicitMcpRule) {\n\t\t\t\treturn {\n\t\t\t\t\toutcome: \"ask\",\n\t\t\t\t\tdecision: policyDecision,\n\t\t\t\t\treason: \"MCP allow rule is not explicit (mcp_name + specific tool required).\",\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\toutcome: \"allow\",\n\t\t\tdecision: policyDecision,\n\t\t\treason: policyDecision.reason,\n\t\t};\n\t}\n\n\tif (isMcpRequest) {\n\t\treturn {\n\t\t\toutcome: \"ask\",\n\t\t\tdecision: policyDecision,\n\t\t\treason: \"MCP calls require explicit allow policy.\",\n\t\t};\n\t}\n\n\tif (context.strictExtensionToolEnforcement && request.toolSource === \"extension\" && context.permissionMode === \"auto\") {\n\t\tif (request.requiredPermission === \"read-only\") {\n\t\t\treturn {\n\t\t\t\toutcome: \"allow\",\n\t\t\t\tdecision: policyDecision,\n\t\t\t\treason: \"Auto mode allows read-only extension tools.\",\n\t\t\t};\n\t\t}\n\t\tif (!request.requiredPermission) {\n\t\t\treturn {\n\t\t\t\toutcome: \"deny\",\n\t\t\t\tdecision: policyDecision,\n\t\t\t\treason: \"Extension tool lacks requiredPermission metadata.\",\n\t\t\t};\n\t\t}\n\t}\n\n\tif (context.permissionMode === \"yolo\") {\n\t\treturn {\n\t\t\toutcome: \"allow\",\n\t\t\tdecision: policyDecision,\n\t\t\treason: \"Permission mode is yolo.\",\n\t\t};\n\t}\n\n\tif (\n\t\tcontext.permissionMode === \"auto\" &&\n\t\t(request.toolName === \"edit\" || request.toolName === \"write\" || request.toolName === \"apply_patch\")\n\t) {\n\t\treturn {\n\t\t\toutcome: \"allow\",\n\t\t\tdecision: policyDecision,\n\t\t\treason: \"Auto mode allows edit/write/apply_patch.\",\n\t\t};\n\t}\n\n\tif (context.runtimeMode === \"rpc\" && !DANGEROUS_TOOL_NAMES.has(request.toolName)) {\n\t\treturn {\n\t\t\toutcome: \"allow\",\n\t\t\tdecision: policyDecision,\n\t\t\treason: \"RPC mode auto-approves non-dangerous tools.\",\n\t\t};\n\t}\n\n\treturn {\n\t\toutcome: \"ask\",\n\t\tdecision: policyDecision,\n\t\treason: \"No policy allow/deny matched; confirmation required.\",\n\t};\n}\n\nexport function buildLegacyRulePattern(rawRule: string): string {\n\tconst normalized = rawRule.trim();\n\tconst [toolRaw, ...rest] = normalized.split(\":\");\n\tconst tool = toolRaw.trim() || \"*\";\n\tconst needle = rest.join(\":\").trim();\n\tconst checker = needle.length > 0 ? `summary_contains:${needle}` : \"summary_contains:\";\n\treturn `${tool}:${checker.replace(/^summary_contains:/, \"\")}`;\n}\n\nexport function legacyRuleToChecker(rawRule: string): string | undefined {\n\tconst normalized = rawRule.trim();\n\tconst [, ...rest] = normalized.split(\":\");\n\tconst needle = rest.join(\":\").trim();\n\tif (!needle) return undefined;\n\treturn `summary_contains:${escapeRegExp(needle)}`;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/policy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,4BAA4B,EAC5B,cAAc,EACd,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,GACjB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/policy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,4BAA4B,EAC5B,cAAc,GAOd,MAAM,aAAa,CAAC","sourcesContent":["export {\n\tevaluatePermissionWithPolicy,\n\tPolicyEngineV2,\n\ttype PermissionEvaluationResult,\n\ttype PolicyDecision,\n\ttype PolicyEffect,\n\ttype PolicyLayer,\n\ttype PolicyRuleV2,\n\ttype PolicySource,\n} from \"./engine.js\";\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface SandboxWrapInput {
|
|
2
|
+
command: string;
|
|
3
|
+
args: string[];
|
|
4
|
+
cwd: string;
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface SandboxWrapResult {
|
|
8
|
+
command: string;
|
|
9
|
+
args: string[];
|
|
10
|
+
}
|
|
11
|
+
export declare function isSandboxEnabledFromEnv(env?: NodeJS.ProcessEnv): boolean;
|
|
12
|
+
export declare function wrapCommandWithSandbox(input: SandboxWrapInput): SandboxWrapResult;
|
|
13
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/core/sandbox/executor.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CACf;AAED,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAIrF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CA6CjF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
const BWRAP_BIN = "bwrap";
|
|
5
|
+
const ENV_SANDBOX_ENABLED = "IOSM_SANDBOX_ENABLED";
|
|
6
|
+
function bwrapAvailable() {
|
|
7
|
+
try {
|
|
8
|
+
const result = spawnSync(BWRAP_BIN, ["--version"], { stdio: "pipe" });
|
|
9
|
+
const err = result.error;
|
|
10
|
+
return !err || err.code !== "ENOENT";
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function isSandboxEnabledFromEnv(env = process.env) {
|
|
17
|
+
const value = env[ENV_SANDBOX_ENABLED];
|
|
18
|
+
if (!value)
|
|
19
|
+
return false;
|
|
20
|
+
return value === "1" || value.toLowerCase() === "true" || value.toLowerCase() === "yes";
|
|
21
|
+
}
|
|
22
|
+
export function wrapCommandWithSandbox(input) {
|
|
23
|
+
if (!input.enabled) {
|
|
24
|
+
return {
|
|
25
|
+
command: input.command,
|
|
26
|
+
args: [...input.args],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
if (process.platform !== "linux") {
|
|
30
|
+
throw new Error("Sandbox is enabled, but Linux bubblewrap is only supported on Linux in v1.");
|
|
31
|
+
}
|
|
32
|
+
if (!bwrapAvailable()) {
|
|
33
|
+
throw new Error("Sandbox is enabled, but `bwrap` is unavailable. Install bubblewrap or disable sandbox.");
|
|
34
|
+
}
|
|
35
|
+
const workspace = resolve(input.cwd);
|
|
36
|
+
const runtimeTmp = resolve(tmpdir());
|
|
37
|
+
const wrappedArgs = [
|
|
38
|
+
"--die-with-parent",
|
|
39
|
+
"--new-session",
|
|
40
|
+
"--ro-bind",
|
|
41
|
+
"/",
|
|
42
|
+
"/",
|
|
43
|
+
"--bind",
|
|
44
|
+
workspace,
|
|
45
|
+
workspace,
|
|
46
|
+
"--bind",
|
|
47
|
+
runtimeTmp,
|
|
48
|
+
runtimeTmp,
|
|
49
|
+
"--chdir",
|
|
50
|
+
workspace,
|
|
51
|
+
"--dev",
|
|
52
|
+
"/dev",
|
|
53
|
+
"--proc",
|
|
54
|
+
"/proc",
|
|
55
|
+
"--",
|
|
56
|
+
input.command,
|
|
57
|
+
...input.args,
|
|
58
|
+
];
|
|
59
|
+
return {
|
|
60
|
+
command: BWRAP_BIN,
|
|
61
|
+
args: wrappedArgs,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/core/sandbox/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,SAAS,GAAG,OAAO,CAAC;AAC1B,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAEnD,SAAS,cAAc;IACtB,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,MAAM,GAAG,GAAG,MAAM,CAAC,KAA0C,CAAC;QAC9D,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAcD,MAAM,UAAU,uBAAuB,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC3E,MAAM,KAAK,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAuB;IAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACN,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;SACrB,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;IAC3G,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG;QACnB,mBAAmB;QACnB,eAAe;QACf,WAAW;QACX,GAAG;QACH,GAAG;QACH,QAAQ;QACR,SAAS;QACT,SAAS;QACT,QAAQ;QACR,UAAU;QACV,UAAU;QACV,SAAS;QACT,SAAS;QACT,OAAO;QACP,MAAM;QACN,QAAQ;QACR,OAAO;QACP,IAAI;QACJ,KAAK,CAAC,OAAO;QACb,GAAG,KAAK,CAAC,IAAI;KACb,CAAC;IAEF,OAAO;QACN,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,WAAW;KACjB,CAAC;AACH,CAAC","sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { tmpdir } from \"node:os\";\nimport { resolve } from \"node:path\";\n\nconst BWRAP_BIN = \"bwrap\";\nconst ENV_SANDBOX_ENABLED = \"IOSM_SANDBOX_ENABLED\";\n\nfunction bwrapAvailable(): boolean {\n\ttry {\n\t\tconst result = spawnSync(BWRAP_BIN, [\"--version\"], { stdio: \"pipe\" });\n\t\tconst err = result.error as NodeJS.ErrnoException | undefined;\n\t\treturn !err || err.code !== \"ENOENT\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport interface SandboxWrapInput {\n\tcommand: string;\n\targs: string[];\n\tcwd: string;\n\tenabled: boolean;\n}\n\nexport interface SandboxWrapResult {\n\tcommand: string;\n\targs: string[];\n}\n\nexport function isSandboxEnabledFromEnv(env: NodeJS.ProcessEnv = process.env): boolean {\n\tconst value = env[ENV_SANDBOX_ENABLED];\n\tif (!value) return false;\n\treturn value === \"1\" || value.toLowerCase() === \"true\" || value.toLowerCase() === \"yes\";\n}\n\nexport function wrapCommandWithSandbox(input: SandboxWrapInput): SandboxWrapResult {\n\tif (!input.enabled) {\n\t\treturn {\n\t\t\tcommand: input.command,\n\t\t\targs: [...input.args],\n\t\t};\n\t}\n\n\tif (process.platform !== \"linux\") {\n\t\tthrow new Error(\"Sandbox is enabled, but Linux bubblewrap is only supported on Linux in v1.\");\n\t}\n\n\tif (!bwrapAvailable()) {\n\t\tthrow new Error(\"Sandbox is enabled, but `bwrap` is unavailable. Install bubblewrap or disable sandbox.\");\n\t}\n\n\tconst workspace = resolve(input.cwd);\n\tconst runtimeTmp = resolve(tmpdir());\n\tconst wrappedArgs = [\n\t\t\"--die-with-parent\",\n\t\t\"--new-session\",\n\t\t\"--ro-bind\",\n\t\t\"/\",\n\t\t\"/\",\n\t\t\"--bind\",\n\t\tworkspace,\n\t\tworkspace,\n\t\t\"--bind\",\n\t\truntimeTmp,\n\t\truntimeTmp,\n\t\t\"--chdir\",\n\t\tworkspace,\n\t\t\"--dev\",\n\t\t\"/dev\",\n\t\t\"--proc\",\n\t\t\"/proc\",\n\t\t\"--\",\n\t\tinput.command,\n\t\t...input.args,\n\t];\n\n\treturn {\n\t\tcommand: BWRAP_BIN,\n\t\targs: wrappedArgs,\n\t};\n}\n"]}
|
package/dist/core/sdk.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { ModelRegistry } from "./model-registry.js";
|
|
|
8
8
|
import type { ResourceLoader } from "./resource-loader.js";
|
|
9
9
|
import { SessionManager } from "./session-manager.js";
|
|
10
10
|
import { SettingsManager } from "./settings-manager.js";
|
|
11
|
-
import { allTools, astGrepTool, bashTool, codingTools, combyTool, createAstGrepTool, createBashTool, createCodingTools, createCombyTool, createDbRunTool, createEditTool, createFdTool, createFetchTool, createFindTool, createFsOpsTool, createGitReadTool, createGitWriteTool, createGrepTool, createJqTool, createLintRunTool, createLsTool, createReadOnlyTools, createReadTool, createRgTool, createSedTool, createSemanticSearchTool, createSemgrepTool, createTestRunTool, createTypecheckRunTool, createWebSearchTool, createWriteTool, createYqTool, dbRunTool, editTool, fdTool, fetchTool, findTool, fsOpsTool, gitReadTool, gitWriteTool, grepTool, jqTool, lintRunTool, lsTool, readOnlyTools, readTool, rgTool, sedTool, semanticSearchTool, semgrepTool, testRunTool, type Tool, typecheckRunTool, webSearchTool, writeTool, yqTool } from "./tools/index.js";
|
|
11
|
+
import { allTools, applyPatchTool, astGrepTool, bashTool, codingTools, combyTool, createAstGrepTool, createApplyPatchTool, createBashTool, createCodingTools, createCombyTool, createDbRunTool, createEditTool, createFdTool, createFetchTool, createFindTool, createFsOpsTool, createGitReadTool, createGitWriteTool, createGrepTool, createJqTool, createLintRunTool, createLsTool, createReadOnlyTools, createReadTool, createRgTool, createSedTool, createSemanticSearchTool, createSemgrepTool, createTestRunTool, createToolSearchTool, createToolSuggestTool, createTypecheckRunTool, createWebSearchTool, createWriteTool, createYqTool, dbRunTool, editTool, fdTool, fetchTool, findTool, fsOpsTool, gitReadTool, gitWriteTool, grepTool, jqTool, lintRunTool, lsTool, readOnlyTools, readTool, rgTool, sedTool, semanticSearchTool, semgrepTool, testRunTool, toolSearchTool, toolSuggestTool, type Tool, typecheckRunTool, webSearchTool, writeTool, yqTool } from "./tools/index.js";
|
|
12
12
|
import { type AgentProfileName } from "./agent-profiles.js";
|
|
13
13
|
export interface CreateAgentSessionOptions {
|
|
14
14
|
/** Working directory for project-local discovery. Default: process.cwd() */
|
|
@@ -71,7 +71,7 @@ export type { ExtensionAPI, ExtensionCommandContext, ExtensionContext, Extension
|
|
|
71
71
|
export type { PromptTemplate } from "./prompt-templates.js";
|
|
72
72
|
export type { Skill } from "./skills.js";
|
|
73
73
|
export type { Tool } from "./tools/index.js";
|
|
74
|
-
export { createAskUserTool, readTool, bashTool, editTool, writeTool, grepTool, findTool, lsTool, rgTool, fdTool, astGrepTool, combyTool, jqTool, yqTool, semgrepTool, sedTool, semanticSearchTool, fetchTool, webSearchTool, gitReadTool, gitWriteTool, fsOpsTool, testRunTool, lintRunTool, typecheckRunTool, dbRunTool, codingTools, readOnlyTools, allTools as allBuiltInTools, createCodingTools, createReadOnlyTools, createReadTool, createBashTool, createEditTool, createWriteTool, createFetchTool, createWebSearchTool, createGrepTool, createFindTool, createLsTool, createRgTool, createFdTool, createAstGrepTool, createCombyTool, createJqTool, createYqTool, createSemgrepTool, createSedTool, createSemanticSearchTool, createGitReadTool, createGitWriteTool, createFsOpsTool, createTestRunTool, createLintRunTool, createTypecheckRunTool, createDbRunTool, };
|
|
74
|
+
export { createAskUserTool, readTool, bashTool, editTool, writeTool, applyPatchTool, grepTool, findTool, lsTool, rgTool, fdTool, astGrepTool, combyTool, jqTool, yqTool, semgrepTool, sedTool, semanticSearchTool, fetchTool, webSearchTool, gitReadTool, gitWriteTool, fsOpsTool, testRunTool, lintRunTool, typecheckRunTool, dbRunTool, toolSearchTool, toolSuggestTool, codingTools, readOnlyTools, allTools as allBuiltInTools, createCodingTools, createReadOnlyTools, createReadTool, createBashTool, createEditTool, createWriteTool, createApplyPatchTool, createFetchTool, createWebSearchTool, createGrepTool, createFindTool, createLsTool, createRgTool, createFdTool, createAstGrepTool, createCombyTool, createJqTool, createYqTool, createSemgrepTool, createSedTool, createSemanticSearchTool, createGitReadTool, createGitWriteTool, createFsOpsTool, createTestRunTool, createLintRunTool, createTypecheckRunTool, createDbRunTool, createToolSearchTool, createToolSuggestTool, };
|
|
75
75
|
/**
|
|
76
76
|
* Create an AgentSession with the specified options.
|
|
77
77
|
*
|
package/dist/core/sdk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,KAAK,EAAgB,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAmB,oBAAoB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGnG,OAAO,EAAE,aAAa,EAA4B,MAAM,qBAAqB,CAAC;AAE9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAMxD,OAAO,EACN,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,cAAc,EACd,YAAY,EACZ,eAAe,EACf,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,wBAAwB,EACxB,iBAAiB,EAEjB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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"}
|
package/dist/core/sdk.js
CHANGED
|
@@ -16,7 +16,7 @@ import { loadCustomSubagents, resolveCustomSubagentReference } from "./subagents
|
|
|
16
16
|
import { time } from "./timings.js";
|
|
17
17
|
import { createSharedMemoryReadTool, createSharedMemoryWriteTool } from "./tools/shared-memory.js";
|
|
18
18
|
import { patchAgentForParallelTaskExecution } from "./parallel-task-agent.js";
|
|
19
|
-
import { allTools, astGrepTool, bashTool, codingTools, combyTool, createAstGrepTool, createBashTool, createCodingTools, createCombyTool, createDbRunTool, createEditTool, createFdTool, createFetchTool, createFindTool, createFsOpsTool, createGitReadTool, createGitWriteTool, createGrepTool, createJqTool, createLintRunTool, createLsTool, createReadOnlyTools, createReadTool, createRgTool, createSedTool, createSemanticSearchTool, createSemgrepTool, createTaskTool, createTestRunTool, createToolsFromNames, createTypecheckRunTool, createWebSearchTool, createWriteTool, createYqTool, dbRunTool, editTool, fdTool, fetchTool, findTool, fsOpsTool, gitReadTool, gitWriteTool, grepTool, jqTool, lintRunTool, lsTool, readOnlyTools, readTool, rgTool, sedTool, semanticSearchTool, semgrepTool, testRunTool, typecheckRunTool, webSearchTool, writeTool, yqTool, } from "./tools/index.js";
|
|
19
|
+
import { allTools, applyPatchTool, astGrepTool, bashTool, codingTools, combyTool, createAstGrepTool, createApplyPatchTool, createBashTool, createCodingTools, createCombyTool, createDbRunTool, createEditTool, createFdTool, createFetchTool, createFindTool, createFsOpsTool, createGitReadTool, createGitWriteTool, createGrepTool, createJqTool, createLintRunTool, createLsTool, createReadOnlyTools, createReadTool, createRgTool, createSedTool, createSemanticSearchTool, createSemgrepTool, createTaskTool, createTestRunTool, createToolSearchTool, createToolSuggestTool, createToolsFromNames, createTypecheckRunTool, createWebSearchTool, createWriteTool, createYqTool, dbRunTool, editTool, fdTool, fetchTool, findTool, fsOpsTool, gitReadTool, gitWriteTool, grepTool, jqTool, lintRunTool, lsTool, readOnlyTools, readTool, rgTool, sedTool, semanticSearchTool, semgrepTool, testRunTool, toolSearchTool, toolSuggestTool, typecheckRunTool, webSearchTool, writeTool, yqTool, } from "./tools/index.js";
|
|
20
20
|
import { getAgentProfile } from "./agent-profiles.js";
|
|
21
21
|
export function collectSubagentRenderableText(message) {
|
|
22
22
|
if (message.role === "assistant") {
|
|
@@ -43,9 +43,9 @@ export function collectSubagentRenderableText(message) {
|
|
|
43
43
|
}
|
|
44
44
|
export { createAskUserTool,
|
|
45
45
|
// Pre-built tools (use process.cwd())
|
|
46
|
-
readTool, bashTool, editTool, writeTool, grepTool, findTool, lsTool, rgTool, fdTool, astGrepTool, combyTool, jqTool, yqTool, semgrepTool, sedTool, semanticSearchTool, fetchTool, webSearchTool, gitReadTool, gitWriteTool, fsOpsTool, testRunTool, lintRunTool, typecheckRunTool, dbRunTool, codingTools, readOnlyTools, allTools as allBuiltInTools,
|
|
46
|
+
readTool, bashTool, editTool, writeTool, applyPatchTool, grepTool, findTool, lsTool, rgTool, fdTool, astGrepTool, combyTool, jqTool, yqTool, semgrepTool, sedTool, semanticSearchTool, fetchTool, webSearchTool, gitReadTool, gitWriteTool, fsOpsTool, testRunTool, lintRunTool, typecheckRunTool, dbRunTool, toolSearchTool, toolSuggestTool, codingTools, readOnlyTools, allTools as allBuiltInTools,
|
|
47
47
|
// Tool factories (for custom cwd)
|
|
48
|
-
createCodingTools, createReadOnlyTools, createReadTool, createBashTool, createEditTool, createWriteTool, createFetchTool, createWebSearchTool, createGrepTool, createFindTool, createLsTool, createRgTool, createFdTool, createAstGrepTool, createCombyTool, createJqTool, createYqTool, createSemgrepTool, createSedTool, createSemanticSearchTool, createGitReadTool, createGitWriteTool, createFsOpsTool, createTestRunTool, createLintRunTool, createTypecheckRunTool, createDbRunTool, };
|
|
48
|
+
createCodingTools, createReadOnlyTools, createReadTool, createBashTool, createEditTool, createWriteTool, createApplyPatchTool, createFetchTool, createWebSearchTool, createGrepTool, createFindTool, createLsTool, createRgTool, createFdTool, createAstGrepTool, createCombyTool, createJqTool, createYqTool, createSemgrepTool, createSedTool, createSemanticSearchTool, createGitReadTool, createGitWriteTool, createFsOpsTool, createTestRunTool, createLintRunTool, createTypecheckRunTool, createDbRunTool, createToolSearchTool, createToolSuggestTool, };
|
|
49
49
|
// Helper Functions
|
|
50
50
|
function getDefaultAgentDir() {
|
|
51
51
|
return getAgentDir();
|
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 { Api, 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 { loadModelsDevProviderCatalog, type ModelsDevProviderCatalogInfo } from \"./models-dev-provider-catalog.js\";\nimport { ModelRegistry, type ProviderConfigInput } 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\tcreateDbRunTool,\n\tcreateEditTool,\n\tcreateFdTool,\n\tcreateFetchTool,\n\tcreateFindTool,\n\tcreateFsOpsTool,\n\tcreateGitReadTool,\n\tcreateGitWriteTool,\n\tcreateGrepTool,\n\tcreateJqTool,\n\tcreateLintRunTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateRgTool,\n\tcreateSedTool,\n\tcreateSemanticSearchTool,\n\tcreateSemgrepTool,\n\tcreateTaskTool,\n\tcreateTestRunTool,\n\tcreateToolsFromNames,\n\tcreateTypecheckRunTool,\n\tcreateWebSearchTool,\n\tcreateWriteTool,\n\tcreateYqTool,\n\tdbRunTool,\n\teditTool,\n\tfdTool,\n\tfetchTool,\n\tfindTool,\n\tfsOpsTool,\n\tgitReadTool,\n\tgitWriteTool,\n\tgrepTool,\n\tjqTool,\n\tlintRunTool,\n\tlsTool,\n\treadOnlyTools,\n\treadTool,\n\trgTool,\n\tsedTool,\n\tsemanticSearchTool,\n\tsemgrepTool,\n\ttestRunTool,\n\ttodoReadTool,\n\ttodoWriteTool,\n\ttype TaskToolProgress,\n\ttype TaskToolProgressPhase,\n\ttype Tool,\n\ttype ToolName,\n\ttypecheckRunTool,\n\twebSearchTool,\n\twriteTool,\n\tyqTool,\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, meta, 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\nexport function collectSubagentRenderableText(message: {\n\trole: string;\n\tcontent: unknown;\n\tdisplay?: boolean;\n}): string[] {\n\tif (message.role === \"assistant\") {\n\t\tif (!Array.isArray(message.content)) return [];\n\t\treturn message.content\n\t\t\t.filter((part): part is { type: \"text\"; text: string } => part?.type === \"text\" && typeof part.text === \"string\")\n\t\t\t.map((part) => part.text.trim())\n\t\t\t.filter((text) => text.length > 0);\n\t}\n\n\tif (message.role === \"custom\" && message.display !== false) {\n\t\tif (typeof message.content === \"string\") {\n\t\t\tconst text = message.content.trim();\n\t\t\treturn text.length > 0 ? [text] : [];\n\t\t}\n\t\tif (Array.isArray(message.content)) {\n\t\t\treturn message.content\n\t\t\t\t.filter((part): part is { type: \"text\"; text: string } => part?.type === \"text\" && typeof part.text === \"string\")\n\t\t\t\t.map((part) => part.text.trim())\n\t\t\t\t.filter((text) => text.length > 0);\n\t\t}\n\t}\n\n\treturn [];\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\nexport {\n\tcreateAskUserTool,\n\t// Pre-built tools (use process.cwd())\n\treadTool,\n\tbashTool,\n\teditTool,\n\twriteTool,\n\tgrepTool,\n\tfindTool,\n\tlsTool,\n\trgTool,\n\tfdTool,\n\tastGrepTool,\n\tcombyTool,\n\tjqTool,\n\tyqTool,\n\tsemgrepTool,\n\tsedTool,\n\tsemanticSearchTool,\n\tfetchTool,\n\twebSearchTool,\n\tgitReadTool,\n\tgitWriteTool,\n\tfsOpsTool,\n\ttestRunTool,\n\tlintRunTool,\n\ttypecheckRunTool,\n\tdbRunTool,\n\tcodingTools,\n\treadOnlyTools,\n\tallTools as allBuiltInTools,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateBashTool,\n\tcreateEditTool,\n\tcreateWriteTool,\n\tcreateFetchTool,\n\tcreateWebSearchTool,\n\tcreateGrepTool,\n\tcreateFindTool,\n\tcreateLsTool,\n\tcreateRgTool,\n\tcreateFdTool,\n\tcreateAstGrepTool,\n\tcreateCombyTool,\n\tcreateJqTool,\n\tcreateYqTool,\n\tcreateSemgrepTool,\n\tcreateSedTool,\n\tcreateSemanticSearchTool,\n\tcreateGitReadTool,\n\tcreateGitWriteTool,\n\tcreateFsOpsTool,\n\tcreateTestRunTool,\n\tcreateLintRunTool,\n\tcreateTypecheckRunTool,\n\tcreateDbRunTool,\n};\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\nfunction resolveModelsDevApi(modelNpm?: string): Api {\n\tconst npm = modelNpm?.toLowerCase() ?? \"\";\n\tif (npm.includes(\"anthropic\")) return \"anthropic-messages\";\n\tif (npm.includes(\"google-vertex\")) return \"google-vertex\";\n\tif (npm.includes(\"google\")) return \"google-generative-ai\";\n\tif (npm.includes(\"amazon-bedrock\")) return \"bedrock-converse-stream\";\n\tif (npm.includes(\"mistral\")) return \"mistral-conversations\";\n\tif (npm.includes(\"@ai-sdk/openai\") && !npm.includes(\"compatible\")) return \"openai-responses\";\n\treturn \"openai-completions\";\n}\n\nfunction buildModelsDevProviderConfig(providerInfo: ModelsDevProviderCatalogInfo): ProviderConfigInput | undefined {\n\tconst baseUrl = providerInfo.api ?? providerInfo.models.find((model) => !!model.api)?.api;\n\tif (!baseUrl) return undefined;\n\tif (providerInfo.models.length === 0) return undefined;\n\n\tconst models: NonNullable<ProviderConfigInput[\"models\"]> = providerInfo.models.map((model) => ({\n\t\tid: model.id,\n\t\tname: model.name,\n\t\tapi: resolveModelsDevApi(model.npm ?? providerInfo.npm),\n\t\treasoning: model.reasoning,\n\t\tinput: [...model.input],\n\t\tcost: model.cost,\n\t\tcontextWindow: model.contextWindow,\n\t\tmaxTokens: model.maxTokens,\n\t\theaders: Object.keys(model.headers).length > 0 ? model.headers : undefined,\n\t}));\n\n\treturn {\n\t\tbaseUrl,\n\t\tmodels,\n\t};\n}\n\nasync function hydrateProviderModelFromModelsDev(\n\tmodelRegistry: ModelRegistry,\n\tproviderId: string,\n\tmodelId: string,\n): Promise<void> {\n\tif (modelRegistry.find(providerId, modelId)) return;\n\ttry {\n\t\tconst catalog = await loadModelsDevProviderCatalog();\n\t\tconst providerInfo = catalog.get(providerId);\n\t\tif (!providerInfo) return;\n\n\t\tconst config = buildModelsDevProviderConfig(providerInfo);\n\t\tif (!config) return;\n\n\t\tmodelRegistry.registerProvider(providerId, config);\n\t} catch {\n\t\t// Best-effort hydration only; keep startup resilient when catalog/network is unavailable.\n\t}\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\tawait hydrateProviderModelFromModelsDev(modelRegistry, existingSession.model.provider, existingSession.model.modelId);\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 defaultProvider = settingsManager.getDefaultProvider();\n\t\tconst defaultModelId = settingsManager.getDefaultModel();\n\t\tif (defaultProvider && defaultModelId) {\n\t\t\tawait hydrateProviderModelFromModelsDev(\n\t\t\t\tmodelRegistry,\n\t\t\t\tdefaultProvider,\n\t\t\t\tdefaultModelId,\n\t\t\t);\n\t\t}\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\t? async (runnerOptions: {\n\t\t\t\tsystemPrompt: string;\n\t\t\t\tprofileName?: 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\tprofile: runnerOptions.profileName,\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 displayFallbackChunks: string[] = [];\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\tchunks.push(...collectSubagentRenderableText(event.message));\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 === \"message_end\" && event.message.role === \"custom\") {\n\t\t\t\t\t\t\tdisplayFallbackChunks.push(...collectSubagentRenderableText(event.message));\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, {\n\t\t\t\t\t\tskipIosmAutopilot: true,\n\t\t\t\t\t\tskipProtocolAutoRepair: true,\n\t\t\t\t\t});\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\tconst outputChunks = chunks.length > 0 ? chunks : displayFallbackChunks;\n\t\t\t\t\treturn {\n\t\t\t\t\t\toutput: outputChunks.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 getKnownSubagentToolNames = (): string[] => {\n\t\tconst known = new Set<string>(Object.keys(allTools));\n\t\tfor (const extension of resourceLoader.getExtensions().extensions) {\n\t\t\tfor (const toolName of extension.tools.keys()) {\n\t\t\t\tknown.add(toolName);\n\t\t\t}\n\t\t}\n\t\tfor (const tool of options.customTools ?? []) {\n\t\t\tknown.add(tool.name);\n\t\t}\n\t\tknown.add(\"task\");\n\t\tknown.add(\"ask_user\");\n\t\tif (sessionRef) {\n\t\t\tfor (const tool of sessionRef.getAllTools()) {\n\t\t\t\tknown.add(tool.name);\n\t\t\t}\n\t\t}\n\t\treturn Array.from(known.values());\n\t};\n\tconst initialCustomSubagents = loadCustomSubagents({\n\t\tcwd,\n\t\tagentDir,\n\t\tknownToolNames: getKnownSubagentToolNames(),\n\t});\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({\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tagentDir,\n\t\t\t\t\t\tknownToolNames: getKnownSubagentToolNames(),\n\t\t\t\t\t});\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\tgetAvailableToolNames: () =>\n\t\t\t\t\tsessionRef ? sessionRef.getAllTools().map((tool) => tool.name) : getKnownSubagentToolNames(),\n\t\t\t\tgetMetaMessages: () => sessionRef?.getMetaMessages() ?? [],\n\t\t\t\thostProfileName: profile?.name,\n\t\t\t\tgetHostProfileName: () => sessionRef?.profileName ?? profile?.name,\n\t\t\t})\n\t\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\tprofileName: profile?.name,\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 { Api, 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 { loadModelsDevProviderCatalog, type ModelsDevProviderCatalogInfo } from \"./models-dev-provider-catalog.js\";\nimport { ModelRegistry, type ProviderConfigInput } 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\tapplyPatchTool,\n\tastGrepTool,\n\tbashTool,\n\tcodingTools,\n\tcombyTool,\n\tcreateAstGrepTool,\n\tcreateApplyPatchTool,\n\tcreateBashTool,\n\tcreateCodingTools,\n\tcreateCombyTool,\n\tcreateDbRunTool,\n\tcreateEditTool,\n\tcreateFdTool,\n\tcreateFetchTool,\n\tcreateFindTool,\n\tcreateFsOpsTool,\n\tcreateGitReadTool,\n\tcreateGitWriteTool,\n\tcreateGrepTool,\n\tcreateJqTool,\n\tcreateLintRunTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateRgTool,\n\tcreateSedTool,\n\tcreateSemanticSearchTool,\n\tcreateSemgrepTool,\n\tcreateTaskTool,\n\tcreateTestRunTool,\n\tcreateToolSearchTool,\n\tcreateToolSuggestTool,\n\tcreateToolsFromNames,\n\tcreateTypecheckRunTool,\n\tcreateWebSearchTool,\n\tcreateWriteTool,\n\tcreateYqTool,\n\tdbRunTool,\n\teditTool,\n\tfdTool,\n\tfetchTool,\n\tfindTool,\n\tfsOpsTool,\n\tgitReadTool,\n\tgitWriteTool,\n\tgrepTool,\n\tjqTool,\n\tlintRunTool,\n\tlsTool,\n\treadOnlyTools,\n\treadTool,\n\trgTool,\n\tsedTool,\n\tsemanticSearchTool,\n\tsemgrepTool,\n\ttestRunTool,\n\ttodoReadTool,\n\ttodoWriteTool,\n\ttoolSearchTool,\n\ttoolSuggestTool,\n\ttype TaskToolProgress,\n\ttype TaskToolProgressPhase,\n\ttype Tool,\n\ttype ToolName,\n\ttypecheckRunTool,\n\twebSearchTool,\n\twriteTool,\n\tyqTool,\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, meta, 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\nexport function collectSubagentRenderableText(message: {\n\trole: string;\n\tcontent: unknown;\n\tdisplay?: boolean;\n}): string[] {\n\tif (message.role === \"assistant\") {\n\t\tif (!Array.isArray(message.content)) return [];\n\t\treturn message.content\n\t\t\t.filter((part): part is { type: \"text\"; text: string } => part?.type === \"text\" && typeof part.text === \"string\")\n\t\t\t.map((part) => part.text.trim())\n\t\t\t.filter((text) => text.length > 0);\n\t}\n\n\tif (message.role === \"custom\" && message.display !== false) {\n\t\tif (typeof message.content === \"string\") {\n\t\t\tconst text = message.content.trim();\n\t\t\treturn text.length > 0 ? [text] : [];\n\t\t}\n\t\tif (Array.isArray(message.content)) {\n\t\t\treturn message.content\n\t\t\t\t.filter((part): part is { type: \"text\"; text: string } => part?.type === \"text\" && typeof part.text === \"string\")\n\t\t\t\t.map((part) => part.text.trim())\n\t\t\t\t.filter((text) => text.length > 0);\n\t\t}\n\t}\n\n\treturn [];\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\nexport {\n\tcreateAskUserTool,\n\t// Pre-built tools (use process.cwd())\n\treadTool,\n\tbashTool,\n\teditTool,\n\twriteTool,\n\tapplyPatchTool,\n\tgrepTool,\n\tfindTool,\n\tlsTool,\n\trgTool,\n\tfdTool,\n\tastGrepTool,\n\tcombyTool,\n\tjqTool,\n\tyqTool,\n\tsemgrepTool,\n\tsedTool,\n\tsemanticSearchTool,\n\tfetchTool,\n\twebSearchTool,\n\tgitReadTool,\n\tgitWriteTool,\n\tfsOpsTool,\n\ttestRunTool,\n\tlintRunTool,\n\ttypecheckRunTool,\n\tdbRunTool,\n\ttoolSearchTool,\n\ttoolSuggestTool,\n\tcodingTools,\n\treadOnlyTools,\n\tallTools as allBuiltInTools,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateBashTool,\n\tcreateEditTool,\n\tcreateWriteTool,\n\tcreateApplyPatchTool,\n\tcreateFetchTool,\n\tcreateWebSearchTool,\n\tcreateGrepTool,\n\tcreateFindTool,\n\tcreateLsTool,\n\tcreateRgTool,\n\tcreateFdTool,\n\tcreateAstGrepTool,\n\tcreateCombyTool,\n\tcreateJqTool,\n\tcreateYqTool,\n\tcreateSemgrepTool,\n\tcreateSedTool,\n\tcreateSemanticSearchTool,\n\tcreateGitReadTool,\n\tcreateGitWriteTool,\n\tcreateFsOpsTool,\n\tcreateTestRunTool,\n\tcreateLintRunTool,\n\tcreateTypecheckRunTool,\n\tcreateDbRunTool,\n\tcreateToolSearchTool,\n\tcreateToolSuggestTool,\n};\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\nfunction resolveModelsDevApi(modelNpm?: string): Api {\n\tconst npm = modelNpm?.toLowerCase() ?? \"\";\n\tif (npm.includes(\"anthropic\")) return \"anthropic-messages\";\n\tif (npm.includes(\"google-vertex\")) return \"google-vertex\";\n\tif (npm.includes(\"google\")) return \"google-generative-ai\";\n\tif (npm.includes(\"amazon-bedrock\")) return \"bedrock-converse-stream\";\n\tif (npm.includes(\"mistral\")) return \"mistral-conversations\";\n\tif (npm.includes(\"@ai-sdk/openai\") && !npm.includes(\"compatible\")) return \"openai-responses\";\n\treturn \"openai-completions\";\n}\n\nfunction buildModelsDevProviderConfig(providerInfo: ModelsDevProviderCatalogInfo): ProviderConfigInput | undefined {\n\tconst baseUrl = providerInfo.api ?? providerInfo.models.find((model) => !!model.api)?.api;\n\tif (!baseUrl) return undefined;\n\tif (providerInfo.models.length === 0) return undefined;\n\n\tconst models: NonNullable<ProviderConfigInput[\"models\"]> = providerInfo.models.map((model) => ({\n\t\tid: model.id,\n\t\tname: model.name,\n\t\tapi: resolveModelsDevApi(model.npm ?? providerInfo.npm),\n\t\treasoning: model.reasoning,\n\t\tinput: [...model.input],\n\t\tcost: model.cost,\n\t\tcontextWindow: model.contextWindow,\n\t\tmaxTokens: model.maxTokens,\n\t\theaders: Object.keys(model.headers).length > 0 ? model.headers : undefined,\n\t}));\n\n\treturn {\n\t\tbaseUrl,\n\t\tmodels,\n\t};\n}\n\nasync function hydrateProviderModelFromModelsDev(\n\tmodelRegistry: ModelRegistry,\n\tproviderId: string,\n\tmodelId: string,\n): Promise<void> {\n\tif (modelRegistry.find(providerId, modelId)) return;\n\ttry {\n\t\tconst catalog = await loadModelsDevProviderCatalog();\n\t\tconst providerInfo = catalog.get(providerId);\n\t\tif (!providerInfo) return;\n\n\t\tconst config = buildModelsDevProviderConfig(providerInfo);\n\t\tif (!config) return;\n\n\t\tmodelRegistry.registerProvider(providerId, config);\n\t} catch {\n\t\t// Best-effort hydration only; keep startup resilient when catalog/network is unavailable.\n\t}\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\tawait hydrateProviderModelFromModelsDev(modelRegistry, existingSession.model.provider, existingSession.model.modelId);\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 defaultProvider = settingsManager.getDefaultProvider();\n\t\tconst defaultModelId = settingsManager.getDefaultModel();\n\t\tif (defaultProvider && defaultModelId) {\n\t\t\tawait hydrateProviderModelFromModelsDev(\n\t\t\t\tmodelRegistry,\n\t\t\t\tdefaultProvider,\n\t\t\t\tdefaultModelId,\n\t\t\t);\n\t\t}\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\t? async (runnerOptions: {\n\t\t\t\tsystemPrompt: string;\n\t\t\t\tprofileName?: 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\tprofile: runnerOptions.profileName,\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 displayFallbackChunks: string[] = [];\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\tchunks.push(...collectSubagentRenderableText(event.message));\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 === \"message_end\" && event.message.role === \"custom\") {\n\t\t\t\t\t\t\tdisplayFallbackChunks.push(...collectSubagentRenderableText(event.message));\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, {\n\t\t\t\t\t\tskipIosmAutopilot: true,\n\t\t\t\t\t\tskipProtocolAutoRepair: true,\n\t\t\t\t\t});\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\tconst outputChunks = chunks.length > 0 ? chunks : displayFallbackChunks;\n\t\t\t\t\treturn {\n\t\t\t\t\t\toutput: outputChunks.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 getKnownSubagentToolNames = (): string[] => {\n\t\tconst known = new Set<string>(Object.keys(allTools));\n\t\tfor (const extension of resourceLoader.getExtensions().extensions) {\n\t\t\tfor (const toolName of extension.tools.keys()) {\n\t\t\t\tknown.add(toolName);\n\t\t\t}\n\t\t}\n\t\tfor (const tool of options.customTools ?? []) {\n\t\t\tknown.add(tool.name);\n\t\t}\n\t\tknown.add(\"task\");\n\t\tknown.add(\"ask_user\");\n\t\tif (sessionRef) {\n\t\t\tfor (const tool of sessionRef.getAllTools()) {\n\t\t\t\tknown.add(tool.name);\n\t\t\t}\n\t\t}\n\t\treturn Array.from(known.values());\n\t};\n\tconst initialCustomSubagents = loadCustomSubagents({\n\t\tcwd,\n\t\tagentDir,\n\t\tknownToolNames: getKnownSubagentToolNames(),\n\t});\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({\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tagentDir,\n\t\t\t\t\t\tknownToolNames: getKnownSubagentToolNames(),\n\t\t\t\t\t});\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\tgetAvailableToolNames: () =>\n\t\t\t\t\tsessionRef ? sessionRef.getAllTools().map((tool) => tool.name) : getKnownSubagentToolNames(),\n\t\t\t\tgetMetaMessages: () => sessionRef?.getMetaMessages() ?? [],\n\t\t\t\thostProfileName: profile?.name,\n\t\t\t\tgetHostProfileName: () => sessionRef?.profileName ?? profile?.name,\n\t\t\t})\n\t\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\tprofileName: profile?.name,\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"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { SourceSecurityManager, type SecurityConsentRequest, type SourceVerificationInput, type SourceVerificationResult, } from "./source-security.js";
|
|
2
|
+
export { TrustLedger, type TrustActorScope, type TrustLedgerEntry, type TrustSourceType } from "./trust-ledger.js";
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/security/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,GAC7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/security/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,qBAAqB,GAIrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAqE,MAAM,mBAAmB,CAAC","sourcesContent":["export {\n\tSourceSecurityManager,\n\ttype SecurityConsentRequest,\n\ttype SourceVerificationInput,\n\ttype SourceVerificationResult,\n} from \"./source-security.js\";\nexport { TrustLedger, type TrustActorScope, type TrustLedgerEntry, type TrustSourceType } from \"./trust-ledger.js\";\n"]}
|