Files
claude-code-build/create-stubs.ts
T
2026-04-01 18:04:13 +08:00

130 lines
5.5 KiB
TypeScript

/**
* Creates stub modules for feature-gated internal modules
* that don't exist in the restored source.
*/
import { mkdirSync, writeFileSync, existsSync } from 'fs';
import { dirname, join } from 'path';
const SRC = join(import.meta.dir, 'src');
const STUB = `export default {};`;
const stubs: Record<string, string> = {
// Proactive / KAIROS / Assistant
'proactive/index.ts': 'export const isProactiveActive = () => false; export default {};',
'assistant/index.ts': 'export const isAssistantMode = () => false; export const getAssistantActivationPath = () => undefined; export default {};',
'assistant/gate.ts': 'export const isKairosGateOpen = () => false; export default {};',
'assistant/sessionDiscovery.ts': STUB,
// Server / Direct Connect
'server/parseConnectUrl.ts': STUB,
'server/server.ts': STUB,
'server/serverBanner.ts': STUB,
'server/serverLog.ts': STUB,
'server/sessionManager.ts': STUB,
'server/lockfile.ts': STUB,
'server/connectHeadless.ts': STUB,
'server/backends/dangerousBackend.ts': STUB,
// SSH
'ssh/createSSHSession.ts': STUB,
// Coordinator
'coordinator/workerAgent.ts': STUB,
// Feature-gated tools
'tools/OverflowTestTool/OverflowTestTool.ts': 'export default {};',
'tools/TerminalCaptureTool/TerminalCaptureTool.ts': 'export default {};',
'tools/TerminalCaptureTool/prompt.ts': 'export const TERMINAL_CAPTURE_TOOL_NAME = "TerminalCapture";',
'tools/VerifyPlanExecutionTool/VerifyPlanExecutionTool.ts': 'export default {};',
'tools/VerifyPlanExecutionTool/constants.ts': 'export const VERIFY_PLAN_EXECUTION_TOOL_NAME = "VerifyPlanExecution";',
'tools/WorkflowTool/WorkflowTool.ts': 'export default {};',
'tools/WorkflowTool/constants.ts': 'export const WORKFLOW_TOOL_NAME = "Workflow";',
'tools/WorkflowTool/bundled/index.ts': STUB,
'tools/WorkflowTool/createWorkflowCommand.ts': STUB,
'tools/MonitorTool/MonitorTool.ts': 'export default {};',
'tools/SleepTool/SleepTool.ts': 'export default {};',
'tools/REPLTool/REPLTool.ts': 'export default {};',
'tools/ListPeersTool/ListPeersTool.ts': 'export default {};',
'tools/SnipTool/SnipTool.ts': 'export default {};',
'tools/SnipTool/prompt.ts': 'export const SNIP_TOOL_NAME = "Snip";',
'tools/CtxInspectTool/CtxInspectTool.ts': 'export default {};',
'tools/WebBrowserTool/WebBrowserTool.ts': 'export default {};',
'tools/SendUserFileTool/SendUserFileTool.ts': 'export default {};',
'tools/SendUserFileTool/prompt.ts': 'export const SEND_USER_FILE_TOOL_NAME = "SendUserFile";',
'tools/PushNotificationTool/PushNotificationTool.ts': 'export default {};',
'tools/SubscribePRTool/SubscribePRTool.ts': 'export default {};',
'tools/SuggestBackgroundPRTool/SuggestBackgroundPRTool.ts': 'export default {};',
'tools/TungstenTool/TungstenTool.ts': 'export default {};',
'tools/DiscoverSkillsTool/prompt.ts': 'export const DISCOVER_SKILLS_TOOL_NAME = "DiscoverSkills";',
// Feature-gated services
'services/compact/cachedMCConfig.ts': 'export const getCachedMCConfig = () => ({ enabled: false, keepRecent: 5, supportedModels: [], systemPromptSuggestSummaries: false });',
'services/compact/cachedMicrocompact.ts': STUB,
'services/compact/reactiveCompact.ts': STUB,
'services/compact/snipCompact.ts': STUB,
'services/compact/snipProjection.ts': STUB,
'services/contextCollapse/index.ts': STUB,
'services/sessionTranscript/sessionTranscript.ts': STUB,
'services/skillSearch/featureCheck.ts': 'export const isSkillSearchEnabled = () => false;',
'services/skillSearch/prefetch.ts': STUB,
'services/skillSearch/localSearch.ts': STUB,
// Feature-gated commands
'commands/proactive.ts': STUB,
'commands/buddy/index.ts': STUB,
'commands/assistant/index.ts': STUB,
'commands/fork/index.ts': STUB,
'commands/peers/index.ts': STUB,
'commands/subscribe-pr.ts': STUB,
'commands/torch.ts': STUB,
'commands/workflows/index.ts': STUB,
'commands/agents-platform/index.ts': STUB,
'commands/force-snip.ts': STUB,
'commands/remoteControlServer/index.ts': STUB,
// Types
'types/connectorText.ts': 'export type ConnectorTextBlock = { type: "connector_text"; text: string }; export type ConnectorTextDelta = { type: "connector_text_delta"; text: string }; export const isConnectorTextBlock = (_: any): _ is ConnectorTextBlock => false;',
// Components
'components/agents/SnapshotUpdateDialog.ts': STUB,
// Skills
'skills/mcpSkills.ts': STUB,
// Utils
'utils/systemThemeWatcher.ts': 'export const getSystemTheme = () => "dark"; export const onSystemThemeChange = () => () => {};',
'utils/taskSummary.ts': STUB,
// Jobs
'jobs/classifier.ts': STUB,
// Yolo classifier prompts (text files)
'yolo-classifier-prompts/auto_mode_system_prompt.txt': '',
'yolo-classifier-prompts/permissions_anthropic.txt': '',
'yolo-classifier-prompts/permissions_external.txt': '',
// Entrypoint stubs
'entrypoints/sdk/coreSchemas.ts': STUB,
'entrypoints/sdk/runtimeTypes.ts': STUB,
'entrypoints/sdk/toolTypes.ts': STUB,
// Other missing
'attributionTrailer.ts': 'export const getAttributionTrailer = () => "";',
'devtools.ts': STUB,
'coreTypes.generated.ts': STUB,
'protectedNamespace.ts': 'export const isProtectedNamespace = () => false;',
};
let created = 0;
for (const [relPath, content] of Object.entries(stubs)) {
const fullPath = join(SRC, relPath);
if (!existsSync(fullPath)) {
mkdirSync(dirname(fullPath), { recursive: true });
writeFileSync(fullPath, content, 'utf8');
created++;
}
}
console.log(`Created ${created} stub modules (${Object.keys(stubs).length - created} already existed)`);