2026-03-31 18:47:00 +03:00
|
|
|
import { registerFsRoutes } from '../fs/routes.js';
|
|
|
|
|
import { registerQuotaRoutes } from '../quota/routes.js';
|
|
|
|
|
import { registerGitHubRoutes } from '../github/routes.js';
|
|
|
|
|
import { registerGitRoutes } from '../git/routes.js';
|
2026-04-07 22:51:14 +03:00
|
|
|
import { registerMagicPromptRoutes } from '../magic-prompts/routes.js';
|
2026-04-22 19:39:02 +03:00
|
|
|
import { registerSessionFoldersRoutes } from '../session-folders/routes.js';
|
2026-03-31 18:47:00 +03:00
|
|
|
import { registerConfigEntityRoutes } from './config-entity-routes.js';
|
|
|
|
|
import { registerSettingsUtilityRoutes } from './core-routes.js';
|
|
|
|
|
import { registerProjectIconRoutes } from './project-icon-routes.js';
|
2026-04-16 15:55:08 +03:00
|
|
|
import { registerScheduledTaskRoutes } from '../scheduled-tasks/routes.js';
|
2026-03-31 18:47:00 +03:00
|
|
|
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,
|
2026-04-16 15:55:08 +03:00
|
|
|
projectConfigRuntime,
|
|
|
|
|
scheduledTasksRuntime,
|
|
|
|
|
getOpenChamberEventClients,
|
|
|
|
|
writeSseEvent,
|
2026-03-31 18:47:00 +03:00
|
|
|
} = 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,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
registerProjectIconRoutes(app, {
|
|
|
|
|
fsPromises,
|
|
|
|
|
path,
|
|
|
|
|
crypto,
|
|
|
|
|
openchamberDataDir,
|
|
|
|
|
sanitizeProjects,
|
|
|
|
|
readSettingsFromDiskMigrated,
|
|
|
|
|
persistSettings,
|
|
|
|
|
createFsSearchRuntime,
|
|
|
|
|
spawn,
|
|
|
|
|
resolveGitBinaryForSpawn,
|
|
|
|
|
});
|
|
|
|
|
|
2026-04-16 15:55:08 +03:00
|
|
|
registerScheduledTaskRoutes(app, {
|
|
|
|
|
readSettingsFromDiskMigrated,
|
|
|
|
|
sanitizeProjects,
|
|
|
|
|
projectConfigRuntime,
|
|
|
|
|
scheduledTasksRuntime,
|
|
|
|
|
getOpenChamberEventClients,
|
|
|
|
|
writeSseEvent,
|
|
|
|
|
});
|
|
|
|
|
|
2026-03-31 18:47:00 +03:00
|
|
|
const {
|
|
|
|
|
getAgentSources,
|
|
|
|
|
getAgentConfig,
|
|
|
|
|
createAgent,
|
|
|
|
|
updateAgent,
|
|
|
|
|
deleteAgent,
|
|
|
|
|
getCommandSources,
|
|
|
|
|
createCommand,
|
|
|
|
|
updateCommand,
|
|
|
|
|
deleteCommand,
|
|
|
|
|
listMcpConfigs,
|
|
|
|
|
getMcpConfig,
|
|
|
|
|
createMcpConfig,
|
|
|
|
|
updateMcpConfig,
|
|
|
|
|
deleteMcpConfig,
|
|
|
|
|
} = await import('./index.js');
|
|
|
|
|
|
|
|
|
|
registerConfigEntityRoutes(app, {
|
|
|
|
|
resolveProjectDirectory,
|
|
|
|
|
resolveOptionalProjectDirectory,
|
|
|
|
|
refreshOpenCodeAfterConfigChange,
|
|
|
|
|
clientReloadDelayMs,
|
|
|
|
|
getAgentSources,
|
|
|
|
|
getAgentConfig,
|
|
|
|
|
createAgent,
|
|
|
|
|
updateAgent,
|
|
|
|
|
deleteAgent,
|
|
|
|
|
getCommandSources,
|
|
|
|
|
createCommand,
|
|
|
|
|
updateCommand,
|
|
|
|
|
deleteCommand,
|
|
|
|
|
listMcpConfigs,
|
|
|
|
|
getMcpConfig,
|
|
|
|
|
createMcpConfig,
|
|
|
|
|
updateMcpConfig,
|
|
|
|
|
deleteMcpConfig,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const {
|
|
|
|
|
getSkillSources,
|
|
|
|
|
discoverSkills,
|
|
|
|
|
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,
|
|
|
|
|
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);
|
2026-04-07 22:51:14 +03:00
|
|
|
registerMagicPromptRoutes(app, {
|
|
|
|
|
fsPromises,
|
|
|
|
|
path,
|
|
|
|
|
openchamberDataDir,
|
|
|
|
|
});
|
2026-04-22 19:39:02 +03:00
|
|
|
registerSessionFoldersRoutes(app, {
|
|
|
|
|
fsPromises,
|
|
|
|
|
path,
|
|
|
|
|
openchamberDataDir,
|
|
|
|
|
});
|
2026-03-31 18:47:00 +03:00
|
|
|
registerFsRoutes(app, {
|
|
|
|
|
os,
|
|
|
|
|
path,
|
|
|
|
|
fsPromises,
|
|
|
|
|
spawn,
|
|
|
|
|
crypto,
|
|
|
|
|
normalizeDirectoryPath,
|
|
|
|
|
resolveProjectDirectory,
|
|
|
|
|
buildAugmentedPath,
|
|
|
|
|
resolveGitBinaryForSpawn,
|
|
|
|
|
openchamberUserConfigRoot,
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
registerRoutes,
|
|
|
|
|
};
|
|
|
|
|
};
|