import { registerFsRoutes } from '../fs/routes.js'; import { registerQuotaRoutes } from '../quota/routes.js'; import { registerGitHubRoutes } from '../github/routes.js'; import { registerGitRoutes } from '../git/routes.js'; import { registerMagicPromptRoutes } from '../magic-prompts/routes.js'; import { registerSessionFoldersRoutes } from '../session-folders/routes.js'; import { registerConfigEntityRoutes } from './config-entity-routes.js'; import { registerSettingsUtilityRoutes } from './core-routes.js'; import { registerProjectIconRoutes } from './project-icon-routes.js'; import { registerScheduledTaskRoutes } from '../scheduled-tasks/routes.js'; import { registerSkillRoutes } from './skill-routes.js'; import { registerOpenCodeRoutes } from './routes.js'; export const createFeatureRoutesRuntime = (dependencies) => { const { clientReloadDelayMs, } = dependencies; let quotaProviders = null; const getQuotaProviders = async () => { if (!quotaProviders) { quotaProviders = await import('../quota/index.js'); } return quotaProviders; }; const registerRoutes = async (app, routeDependencies) => { const { crypto, fs, os, path, fsPromises, spawn, resolveGitBinaryForSpawn, createFsSearchRuntime, openchamberDataDir, openchamberUserConfigRoot, normalizeDirectoryPath, resolveProjectDirectory, resolveOptionalProjectDirectory, validateDirectoryPath, readCustomThemesFromDisk, refreshOpenCodeAfterConfigChange, getOpenCodeResolutionSnapshot, formatSettingsResponse, readSettingsFromDisk, readSettingsFromDiskMigrated, persistSettings, sanitizeProjects, sanitizeSkillCatalogs, isUnsafeSkillRelativePath, buildOpenCodeUrl, getOpenCodeAuthHeaders, getOpenCodePort, buildAugmentedPath, projectConfigRuntime, scheduledTasksRuntime, getOpenChamberEventClients, writeSseEvent, } = routeDependencies; const { getProviderSources, removeProviderConfig } = await import('./index.js'); registerSettingsUtilityRoutes(app, { readCustomThemesFromDisk, refreshOpenCodeAfterConfigChange, clientReloadDelayMs, }); registerOpenCodeRoutes(app, { crypto, clientReloadDelayMs, getOpenCodeResolutionSnapshot, formatSettingsResponse, readSettingsFromDisk, readSettingsFromDiskMigrated, persistSettings, sanitizeProjects, validateDirectoryPath, resolveProjectDirectory, getProviderSources, removeProviderConfig, refreshOpenCodeAfterConfigChange, buildOpenCodeUrl, getOpenCodeAuthHeaders, }); registerProjectIconRoutes(app, { fsPromises, path, crypto, openchamberDataDir, sanitizeProjects, readSettingsFromDiskMigrated, persistSettings, createFsSearchRuntime, spawn, resolveGitBinaryForSpawn, }); registerScheduledTaskRoutes(app, { readSettingsFromDiskMigrated, sanitizeProjects, projectConfigRuntime, scheduledTasksRuntime, getOpenChamberEventClients, writeSseEvent, }); const { getAgentSources, getAgentConfig, createAgent, updateAgent, deleteAgent, getCommandSources, createCommand, updateCommand, deleteCommand, listMcpConfigs, getMcpConfig, createMcpConfig, updateMcpConfig, deleteMcpConfig, listSnippets, getSnippet, createSnippet, updateSnippet, deleteSnippet, expandSnippets, } = await import('./index.js'); registerConfigEntityRoutes(app, { resolveProjectDirectory, resolveOptionalProjectDirectory, refreshOpenCodeAfterConfigChange, clientReloadDelayMs, getAgentSources, getAgentConfig, createAgent, updateAgent, deleteAgent, getCommandSources, createCommand, updateCommand, deleteCommand, listMcpConfigs, getMcpConfig, createMcpConfig, updateMcpConfig, deleteMcpConfig, listSnippets, getSnippet, createSnippet, updateSnippet, deleteSnippet, expandSnippets, }); const { getSkillSources, discoverSkills, mergeDiscoveredSkills, createSkill, updateSkill, deleteSkill, readSkillSupportingFile, writeSkillSupportingFile, deleteSkillSupportingFile, SKILL_SCOPE, SKILL_DIR, } = await import('./index.js'); const { getCuratedSkillsSources, getCacheKey, getCachedScan, setCachedScan, parseSkillRepoSource, scanSkillsRepository, installSkillsFromRepository, scanClawdHubPage, installSkillsFromClawdHub, isClawdHubSource, } = await import('../skills-catalog/index.js'); const { getProfiles, getProfile } = await import('../git/index.js'); registerSkillRoutes(app, { fs, path, os, resolveProjectDirectory, resolveOptionalProjectDirectory, readSettingsFromDisk, sanitizeSkillCatalogs, isUnsafeSkillRelativePath, refreshOpenCodeAfterConfigChange, clientReloadDelayMs, buildOpenCodeUrl, getOpenCodeAuthHeaders, getOpenCodePort, getSkillSources, discoverSkills, mergeDiscoveredSkills, createSkill, updateSkill, deleteSkill, readSkillSupportingFile, writeSkillSupportingFile, deleteSkillSupportingFile, SKILL_SCOPE, SKILL_DIR, getCuratedSkillsSources, getCacheKey, getCachedScan, setCachedScan, parseSkillRepoSource, scanSkillsRepository, installSkillsFromRepository, scanClawdHubPage, installSkillsFromClawdHub, isClawdHubSource, getProfiles, getProfile, }); registerQuotaRoutes(app, { getQuotaProviders }); registerGitHubRoutes(app); registerGitRoutes(app); registerMagicPromptRoutes(app, { fsPromises, path, openchamberDataDir, }); registerSessionFoldersRoutes(app, { fsPromises, path, openchamberDataDir, }); registerFsRoutes(app, { os, path, fsPromises, spawn, crypto, normalizeDirectoryPath, resolveProjectDirectory, buildAugmentedPath, resolveGitBinaryForSpawn, openchamberUserConfigRoot, }); }; return { registerRoutes, }; };