{"version":3,"file":"web-research-availability.test.d.ts","sourceRoot":"","sources":["../../src/core/web-research-availability.test.ts"],"names":[],"mappings":"","sourcesContent":["import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { afterEach, describe, expect, it } from \"vitest\";\nimport { AuthStorage } from \"./auth-storage.js\";\nimport { ModelRegistry } from \"./model-registry.js\";\nimport { DefaultResourceLoader } from \"./resource-loader.js\";\nimport { createAgentSession } from \"./sdk.js\";\nimport { SessionManager } from \"./session-manager.js\";\nimport { SettingsManager } from \"./settings-manager.js\";\nimport { createAllTools } from \"./tools/index.js\";\n\nconst WEB_TOOLS = [\"web_search\", \"web_fetch\", \"deep_research\", \"web_research_status\"] as const;\n\nfunction createFixture(toolsConfig?: unknown) {\n\tconst root = mkdtempSync(join(tmpdir(), \"jensen-web-avail-\"));\n\tconst cwd = join(root, \"repo\");\n\tconst agentDir = join(root, \"agent\");\n\tmkdirSync(cwd, { recursive: true });\n\tmkdirSync(agentDir, { recursive: true });\n\twriteFileSync(\n\t\tjoin(agentDir, \"settings.json\"),\n\t\tJSON.stringify({\n\t\t\tdefaultProvider: \"openrouter\",\n\t\t\tdefaultModel: \"openai/gpt-5.6-terra-pro\",\n\t\t\t...(toolsConfig !== undefined ? { tools: toolsConfig } : {}),\n\t\t}),\n\t);\n\tconst authStorage = AuthStorage.inMemory({ openrouter: { type: \"api_key\", key: \"test-key\" } });\n\tconst settingsManager = SettingsManager.create(cwd, agentDir);\n\tconst modelRegistry = new ModelRegistry(authStorage, join(agentDir, \"models.json\"));\n\tconst resourceLoader = new DefaultResourceLoader({ cwd, agentDir, settingsManager });\n\treturn { root, cwd, agentDir, authStorage, settingsManager, modelRegistry, resourceLoader };\n}\n\ndescribe(\"deep_research production availability\", () => {\n\tlet root: string | undefined;\n\tafterEach(() => {\n\t\tif (root) rmSync(root, { recursive: true, force: true });\n\t\troot = undefined;\n\t});\n\n\tit(\"registers deep_research in the production base registry and all-tools surface\", () => {\n\t\tconst registry = createAllTools(\"/tmp\");\n\t\texpect(registry.deep_research.name).toBe(\"deep_research\");\n\t\texpect(typeof registry.deep_research.execute).toBe(\"function\");\n\t\texpect(registry.deep_research.parameters).toBeDefined();\n\t\texpect(registry.web_search.name).toBe(\"web_search\");\n\t\texpect(registry.web_fetch.name).toBe(\"web_fetch\");\n\t\texpect(registry.web_research_status.name).toBe(\"web_research_status\");\n\t});\n\n\tit(\"exposes the web research family to a fresh session with no explicit tools config\", async () => {\n\t\tconst fixture = createFixture();\n\t\troot = fixture.root;\n\t\tawait fixture.resourceLoader.reload();\n\t\tconst { session } = await createAgentSession({\n\t\t\tcwd: fixture.cwd,\n\t\t\tagentDir: fixture.agentDir,\n\t\t\tauthStorage: fixture.authStorage,\n\t\t\tmodelRegistry: fixture.modelRegistry,\n\t\t\tsettingsManager: fixture.settingsManager,\n\t\t\tresourceLoader: fixture.resourceLoader,\n\t\t\tsessionManager: SessionManager.inMemory(),\n\t\t});\n\n\t\tconst active = session.getActiveToolNames();\n\t\tfor (const name of WEB_TOOLS) {\n\t\t\texpect(active).toContain(name);\n\t\t}\n\t\tconst defs = session.agent.state.tools ?? [];\n\t\tfor (const name of WEB_TOOLS) {\n\t\t\texpect(defs.map((tool) => tool.name)).toContain(name);\n\t\t}\n\t});\n\n\tit(\"keeps explicit settings defaultActiveToolNames authoritative (does not force web tools when disabled)\", async () => {\n\t\tconst fixture = createFixture({ defaultActiveToolNames: [\"read\", \"bash\"], disabledToolNames: [] });\n\t\troot = fixture.root;\n\t\tconst { session } = await createAgentSession({\n\t\t\tcwd: fixture.cwd,\n\t\t\tagentDir: fixture.agentDir,\n\t\t\tauthStorage: fixture.authStorage,\n\t\t\tmodelRegistry: fixture.modelRegistry,\n\t\t\tsettingsManager: fixture.settingsManager,\n\t\t\tresourceLoader: fixture.resourceLoader,\n\t\t\tsessionManager: SessionManager.inMemory(),\n\t\t});\n\t\tconst active = session.getActiveToolNames();\n\t\texpect(active).toContain(\"read\");\n\t\texpect(active).not.toContain(\"deep_research\");\n\t});\n});\n"]}