SYMBOL INDEX (559 symbols across 93 files) FILE: plugins/coding-tutor/skills/coding-tutor/scripts/create_tutorial.py function get_tutorials_repo_path (line 17) | def get_tutorials_repo_path(): function get_repo_name (line 22) | def get_repo_name(): function check_uncommitted_changes (line 36) | def check_uncommitted_changes(): function slugify (line 51) | def slugify(text): function create_tutorial (line 56) | def create_tutorial(topic, concepts=None, output_dir=None): function main (line 173) | def main(): FILE: plugins/coding-tutor/skills/coding-tutor/scripts/index_tutorials.py function get_tutorials_directory (line 20) | def get_tutorials_directory(): function extract_frontmatter (line 25) | def extract_frontmatter(filepath): function index_tutorials (line 81) | def index_tutorials(tutorials_dir=None): function format_human_readable (line 122) | def format_human_readable(tutorials): function main (line 154) | def main(): FILE: plugins/coding-tutor/skills/coding-tutor/scripts/quiz_priority.py function get_tutorials_directory (line 18) | def get_tutorials_directory(): function parse_frontmatter (line 39) | def parse_frontmatter(filepath): function parse_date (line 81) | def parse_date(date_value): function calculate_priority (line 88) | def calculate_priority(tutorial, today): function main (line 121) | def main(): FILE: plugins/coding-tutor/skills/coding-tutor/scripts/setup_tutorials.py function get_tutorials_repo_path (line 19) | def get_tutorials_repo_path(): function setup_tutorials_repo (line 46) | def setup_tutorials_repo(create_github=False): function main (line 99) | def main(): FILE: plugins/compound-engineering/skills/claude-permissions-optimizer/scripts/extract-commands.mjs function flag (line 21) | function flag(name, fallback) { function flagAll (line 26) | function flagAll(name) { function loadAllowlist (line 53) | async function loadAllowlist(filePath) { function isAllowed (line 81) | function isAllowed(command) { function matchGlob (line 89) | function matchGlob(pattern, command) { constant RED_PATTERNS (line 115) | const RED_PATTERNS = [ constant GREEN_BASES (line 194) | const GREEN_BASES = new Set([ constant GREEN_COMPOUND (line 204) | const GREEN_COMPOUND = [ constant YELLOW_BASES (line 241) | const YELLOW_BASES = new Set([ constant YELLOW_COMPOUND (line 248) | const YELLOW_COMPOUND = [ function classify (line 269) | function classify(command) { constant GLOBAL_RISK_FLAGS (line 307) | const GLOBAL_RISK_FLAGS = new Set([ constant CONTEXTUAL_RISK_FLAGS (line 316) | const CONTEXTUAL_RISK_FLAGS = { function isRiskFlag (line 321) | function isRiskFlag(token, base) { function normalize (line 331) | function normalize(command) { function listDirs (line 430) | async function listDirs(dir) { function listJsonlFiles (line 439) | async function listJsonlFiles(dir) { function processFile (line 450) | async function processFile(filePath, sessionId) { FILE: plugins/compound-engineering/skills/dspy-ruby/assets/config-template.rb type FeatureFlags (line 82) | module FeatureFlags FILE: plugins/compound-engineering/skills/dspy-ruby/assets/module-template.rb class BasicClassifier (line 19) | class BasicClassifier < DSPy::Module method initialize (line 20) | def initialize method forward (line 25) | def forward(text:) class ReasoningClassifier (line 38) | class ReasoningClassifier < DSPy::Module method initialize (line 39) | def initialize method forward (line 44) | def forward(text:) class InstrumentedModule (line 53) | class InstrumentedModule < DSPy::Module method initialize (line 58) | def initialize method forward (line 64) | def forward(query:) method setup_metrics (line 71) | def setup_metrics method manage_context (line 77) | def manage_context method log_completion (line 85) | def log_completion method load_user_context (line 90) | def load_user_context = nil method save_updated_context (line 91) | def save_updated_context(_result) = nil class SearchTool (line 99) | class SearchTool < DSPy::Tools::Base method call (line 104) | def call(query:, max_results: 5) class FinishTool (line 110) | class FinishTool < DSPy::Tools::Base method call (line 115) | def call(answer:) class ResearchAgent (line 120) | class ResearchAgent < DSPy::Module method initialize (line 121) | def initialize method forward (line 131) | def forward(question:) class SmartRouter (line 138) | class SmartRouter < DSPy::Module method initialize (line 139) | def initialize method forward (line 145) | def forward(text:) method fast_model (line 163) | def fast_model method powerful_model (line 170) | def powerful_model class ConfiguredAgent (line 180) | class ConfiguredAgent < DSPy::Module method initialize (line 181) | def initialize method forward (line 195) | def forward(question:) class TokenTrackingModule (line 207) | class TokenTrackingModule < DSPy::Module method initialize (line 210) | def initialize method forward (line 216) | def forward(query:) method track_tokens (line 220) | def track_tokens(_event, attrs) method token_usage (line 224) | def token_usage class RerankTool (line 234) | class RerankTool < DSPy::Tools::Base method call (line 242) | def call(query:, items: []) class AnalysisPipeline (line 268) | class AnalysisPipeline < DSPy::Module method initialize (line 269) | def initialize method forward (line 276) | def forward(text:) class TracedModule (line 285) | class TracedModule < DSPy::Module method initialize (line 286) | def initialize method forward (line 291) | def forward(query:) FILE: plugins/compound-engineering/skills/dspy-ruby/assets/signature-template.rb class SentimentAnalysis (line 20) | class SentimentAnalysis < DSPy::Signature class Sentiment (line 23) | class Sentiment < T::Enum class EventScheduler (line 49) | class EventScheduler < DSPy::Signature class SmartSearch (line 74) | class SmartSearch < DSPy::Signature class EntityExtraction (line 99) | class EntityExtraction < DSPy::Signature class EntityType (line 102) | class EntityType < T::Enum class Entity (line 111) | class Entity < T::Struct class FlexibleClassification (line 132) | class FlexibleClassification < DSPy::Signature class Category (line 135) | class Category < T::Enum class DocumentParser (line 157) | class DocumentParser < DSPy::Signature class NodeType (line 160) | class NodeType < T::Enum class TreeNode (line 169) | class TreeNode < T::Struct class ImageAnalysis (line 192) | class ImageAnalysis < DSPy::Signature FILE: plugins/compound-engineering/skills/gemini-imagegen/scripts/compose_images.py function compose_images (line 28) | def compose_images( function main (line 109) | def main(): FILE: plugins/compound-engineering/skills/gemini-imagegen/scripts/edit_image.py function edit_image (line 26) | def edit_image( function main (line 96) | def main(): FILE: plugins/compound-engineering/skills/gemini-imagegen/scripts/gemini_images.py class GeminiImageGenerator (line 31) | class GeminiImageGenerator: method __init__ (line 37) | def __init__(self, api_key: str | None = None, model: Model = FLASH): method _build_config (line 51) | def _build_config( method generate (line 74) | def generate( method edit (line 115) | def edit( method compose (line 160) | def compose( method chat (line 211) | def chat(self) -> "ImageChat": class ImageChat (line 216) | class ImageChat: method __init__ (line 219) | def __init__(self, client: genai.Client, model: Model): method send (line 228) | def send( method reset (line 257) | def reset(self): FILE: plugins/compound-engineering/skills/gemini-imagegen/scripts/generate_image.py function generate_image (line 25) | def generate_image( function main (line 87) | def main(): FILE: plugins/compound-engineering/skills/gemini-imagegen/scripts/multi_turn_chat.py class ImageChat (line 35) | class ImageChat: method __init__ (line 38) | def __init__( method _init_chat (line 58) | def _init_chat(self): method send_message (line 69) | def send_message(self, message: str, image: Image.Image | None = None)... method save_image (line 94) | def save_image(self, filename: str | None = None) -> str | None: method load_image (line 108) | def load_image(self, path: str) -> Image.Image: function main (line 115) | def main(): FILE: scripts/release/preview.ts function parseArgs (line 5) | function parseArgs(argv: string[]): { function formatPreview (line 46) | function formatPreview(preview: Awaited FILE: src/commands/convert.ts method run (line 79) | async run({ args }) { function parseExtraTargets (line 214) | function parseExtraTargets(value: unknown): string[] { function resolveOutputRoot (line 222) | function resolveOutputRoot(value: unknown): string { FILE: src/commands/install.ts method run (line 81) | async run({ args }) { type ResolvedPluginPath (line 222) | type ResolvedPluginPath = { function resolvePluginPath (line 227) | async function resolvePluginPath(input: string): Promise): string { FILE: src/converters/claude-to-copilot.ts type ClaudeToCopilotOptions (line 11) | type ClaudeToCopilotOptions = ClaudeToOpenCodeOptions constant COPILOT_BODY_CHAR_LIMIT (line 13) | const COPILOT_BODY_CHAR_LIMIT = 30_000 function convertClaudeToCopilot (line 15) | function convertClaudeToCopilot( function convertAgent (line 46) | function convertAgent(agent: ClaudeAgent, usedNames: Set): Copil... function convertCommandToSkill (line 79) | function convertCommandToSkill( function transformContentForCopilot (line 106) | function transformContentForCopilot(body: string): string { function convertMcpServers (line 140) | function convertMcpServers( function prefixEnvVars (line 169) | function prefixEnvVars(env: Record): Record): string { FILE: src/converters/claude-to-droid.ts type ClaudeToDroidOptions (line 6) | type ClaudeToDroidOptions = ClaudeToOpenCodeOptions constant CLAUDE_TO_DROID_TOOLS (line 8) | const CLAUDE_TO_DROID_TOOLS: Record = { constant VALID_DROID_TOOLS (line 26) | const VALID_DROID_TOOLS = new Set([ function convertClaudeToDroid (line 42) | function convertClaudeToDroid( function convertCommand (line 56) | function convertCommand(command: ClaudeCommand): DroidCommandFile { function convertAgent (line 73) | function convertAgent(agent: ClaudeAgent): DroidAgentFile { function mapAgentTools (line 101) | function mapAgentTools(agent: ClaudeAgent): string[] | undefined { function transformContentForDroid (line 122) | function transformContentForDroid(body: string): string { function flattenCommandName (line 157) | function flattenCommandName(name: string): string { function normalizeName (line 163) | function normalizeName(value: string): string { FILE: src/converters/claude-to-gemini.ts type ClaudeToGeminiOptions (line 6) | type ClaudeToGeminiOptions = ClaudeToOpenCodeOptions constant GEMINI_DESCRIPTION_MAX_LENGTH (line 8) | const GEMINI_DESCRIPTION_MAX_LENGTH = 1024 function convertClaudeToGemini (line 10) | function convertClaudeToGemini( function convertAgentToSkill (line 40) | function convertAgentToSkill(agent: ClaudeAgent, usedNames: Set)... function convertCommand (line 61) | function convertCommand(command: ClaudeCommand, usedNames: Set):... function transformContentForGemini (line 86) | function transformContentForGemini(body: string): string { function convertMcpServers (line 110) | function convertMcpServers( function resolveCommandPath (line 136) | function resolveCommandPath(name: string): string[] { function toToml (line 144) | function toToml(description: string, prompt: string): string { function formatTomlString (line 157) | function formatTomlString(value: string): string { function normalizeName (line 161) | function normalizeName(value: string): string { function sanitizeDescription (line 174) | function sanitizeDescription(value: string, maxLength = GEMINI_DESCRIPTI... function uniqueName (line 181) | function uniqueName(base: string, used: Set): string { FILE: src/converters/claude-to-kiro.ts type ClaudeToKiroOptions (line 15) | type ClaudeToKiroOptions = ClaudeToOpenCodeOptions constant KIRO_SKILL_NAME_MAX_LENGTH (line 17) | const KIRO_SKILL_NAME_MAX_LENGTH = 64 constant KIRO_SKILL_NAME_PATTERN (line 18) | const KIRO_SKILL_NAME_PATTERN = /^[a-z][a-z0-9-]*$/ constant KIRO_DESCRIPTION_MAX_LENGTH (line 19) | const KIRO_DESCRIPTION_MAX_LENGTH = 1024 constant CLAUDE_TO_KIRO_TOOLS (line 21) | const CLAUDE_TO_KIRO_TOOLS: Record = { function convertClaudeToKiro (line 32) | function convertClaudeToKiro( function convertAgentToKiroAgent (line 72) | function convertAgentToKiroAgent(agent: ClaudeAgent, knownAgentNames: st... function convertCommandToSkill (line 103) | function convertCommandToSkill( function transformContentForKiro (line 135) | function transformContentForKiro(body: string, knownAgentNames: string[]... function convertMcpServers (line 173) | function convertMcpServers( function buildSteeringFiles (line 198) | function buildSteeringFiles(plugin: ClaudePlugin, knownAgentNames: strin... function resolveInstructionPath (line 215) | function resolveInstructionPath(root: string): string | null { function normalizeName (line 225) | function normalizeName(value: string): string { function sanitizeDescription (line 254) | function sanitizeDescription(value: string, maxLength = KIRO_DESCRIPTION... function uniqueName (line 261) | function uniqueName(base: string, used: Set): string { FILE: src/converters/claude-to-openclaw.ts type ClaudeToOpenClawOptions (line 16) | type ClaudeToOpenClawOptions = ClaudeToOpenCodeOptions function convertClaudeToOpenClaw (line 18) | function convertClaudeToOpenClaw( function buildManifest (line 62) | function buildManifest(plugin: ClaudePlugin, skillDirs: string[]): OpenC... function buildPackageJson (line 75) | function buildPackageJson(plugin: ClaudePlugin): Record { function convertAgentToSkill (line 99) | function convertAgentToSkill(agent: ClaudeAgent): OpenClawSkillFile { function convertCommandToSkill (line 119) | function convertCommandToSkill(command: ClaudeCommand): OpenClawSkillFile { function convertCommand (line 139) | function convertCommand(command: ClaudeCommand): OpenClawCommandRegistra... function buildOpenClawConfig (line 148) | function buildOpenClawConfig( function generateEntryPoint (line 173) | function generateEntryPoint(commands: OpenClawCommandRegistration[]): st... function rewritePaths (line 232) | function rewritePaths(body: string): string { function formatDisplayName (line 239) | function formatDisplayName(name: string): string { FILE: src/converters/claude-to-opencode.ts type PermissionMode (line 16) | type PermissionMode = "none" | "broad" | "from-commands" type ClaudeToOpenCodeOptions (line 18) | type ClaudeToOpenCodeOptions = { constant TOOL_MAP (line 24) | const TOOL_MAP: Record = { type HookEventMapping (line 41) | type HookEventMapping = { constant HOOK_EVENT_MAP (line 48) | const HOOK_EVENT_MAP: Record = { function convertClaudeToOpenCode (line 64) | function convertClaudeToOpenCode( function convertAgent (line 89) | function convertAgent(agent: ClaudeAgent, options: ClaudeToOpenCodeOptio... function convertCommands (line 116) | function convertCommands(commands: ClaudeCommand[]): OpenCodeCommandFile... function convertMcp (line 132) | function convertMcp(servers: Record): Record = { function normalizeModel (line 271) | function normalizeModel(model: string): string { function inferTemperature (line 287) | function inferTemperature(agent: ClaudeAgent): number | undefined { function applyPermissions (line 304) | function applyPermissions( function normalizeTool (line 405) | function normalizeTool(raw: string): string | null { function parseToolSpec (line 409) | function parseToolSpec(raw: string): { tool: string | null; pattern?: st... function normalizePattern (line 422) | function normalizePattern(tool: string, pattern: string): string { FILE: src/converters/claude-to-pi.ts type ClaudeToPiOptions (line 12) | type ClaudeToPiOptions = ClaudeToOpenCodeOptions constant PI_DESCRIPTION_MAX_LENGTH (line 14) | const PI_DESCRIPTION_MAX_LENGTH = 1024 function convertClaudeToPi (line 16) | function convertClaudeToPi( function convertPrompt (line 48) | function convertPrompt(command: ClaudeCommand, usedNames: Set) { function convertAgent (line 64) | function convertAgent(agent: ClaudeAgent, usedNames: Set): PiGen... function transformContentForPi (line 93) | function transformContentForPi(body: string): string { function appendCompatibilityNoteIfNeeded (line 133) | function appendCompatibilityNoteIfNeeded(body: string): string { function convertMcpToMcporter (line 148) | function convertMcpToMcporter(servers: Record):... function normalizeName (line 173) | function normalizeName(value: string): string { function sanitizeDescription (line 186) | function sanitizeDescription(value: string, maxLength = PI_DESCRIPTION_M... function uniqueName (line 193) | function uniqueName(base: string, used: Set): string { FILE: src/converters/claude-to-qwen.ts type ClaudeToQwenOptions (line 12) | type ClaudeToQwenOptions = { function convertClaudeToQwen (line 17) | function convertClaudeToQwen(plugin: ClaudePlugin, options: ClaudeToQwen... function convertAgent (line 50) | function convertAgent(agent: ClaudeAgent, options: ClaudeToQwenOptions):... function convertCommands (line 78) | function convertCommands(commands: ClaudeCommand[]): QwenCommandFile[] { function convertMcp (line 97) | function convertMcp(servers: Record): Record): ... function formatSettingName (line 142) | function formatSettingName(envVar: string): string { function generateContextFile (line 149) | function generateContextFile(plugin: ClaudePlugin): string { function rewriteQwenPaths (line 195) | function rewriteQwenPaths(body: string): string { constant CLAUDE_FAMILY_ALIASES (line 201) | const CLAUDE_FAMILY_ALIASES: Record = { function normalizeModel (line 207) | function normalizeModel(model: string): string { function inferTemperature (line 223) | function inferTemperature(agent: ClaudeAgent): number | undefined { FILE: src/converters/claude-to-windsurf.ts type ClaudeToWindsurfOptions (line 7) | type ClaudeToWindsurfOptions = ClaudeToOpenCodeOptions constant WINDSURF_WORKFLOW_CHAR_LIMIT (line 9) | const WINDSURF_WORKFLOW_CHAR_LIMIT = 12_000 function convertClaudeToWindsurf (line 11) | function convertClaudeToWindsurf( function convertAgentToSkill (line 48) | function convertAgentToSkill( function convertCommandToWorkflow (line 71) | function convertCommandToWorkflow( function transformContentForWindsurf (line 108) | function transformContentForWindsurf(body: string, knownAgentNames: stri... function buildMcpConfig (line 134) | function buildMcpConfig(servers?: Record): Wind... function normalizeName (line 171) | function normalizeName(value: string): string { function sanitizeDescription (line 189) | function sanitizeDescription(value: string): string { function uniqueName (line 193) | function uniqueName(base: string, used: Set): string { FILE: src/parsers/claude-home.ts type ClaudeHomeConfig (line 8) | interface ClaudeHomeConfig { function loadClaudeHome (line 14) | async function loadClaudeHome(claudeHome?: string): Promise { function resolveClaudeRoot (line 39) | async function resolveClaudeRoot(inputPath: string): Promise { function loadAgents (line 57) | async function loadAgents(agentsDirs: string[]): Promise { function loadCommands (line 77) | async function loadCommands(commandsDirs: string[]): Promise { function loadHooks (line 122) | async function loadHooks(root: string, hooksField?: ClaudeManifest["hook... function loadMcpServers (line 148) | async function loadMcpServers( function parseAllowedTools (line 169) | function parseAllowedTools(value: unknown): string[] | undefined { function resolveComponentDirs (line 183) | function resolveComponentDirs( function toPathList (line 195) | function toPathList(value?: string | string[]): string[] { function collectMarkdownFiles (line 201) | async function collectMarkdownFiles(dirs: string[]): Promise { function collectFiles (line 206) | async function collectFiles(dirs: string[]): Promise { function mergeHooks (line 216) | function mergeHooks(hooksList: ClaudeHooks[]): ClaudeHooks { function loadMcpPaths (line 229) | async function loadMcpPaths( function unwrapMcpServers (line 244) | function unwrapMcpServers(raw: Record): Record[]): Re... function resolveWithinRoot (line 255) | function resolveWithinRoot(root: string, entry: string, label: string): ... FILE: src/release/components.ts constant RELEASE_COMPONENTS (line 11) | const RELEASE_COMPONENTS: ReleaseComponent[] = [ constant FILE_COMPONENT_MAP (line 19) | const FILE_COMPONENT_MAP: Array<{ component: ReleaseComponent; prefixes:... constant SCOPES_TO_COMPONENTS (line 42) | const SCOPES_TO_COMPONENTS: Record = { constant NON_RELEASABLE_TYPES (line 51) | const NON_RELEASABLE_TYPES = new Set(["docs", "chore", "test", "ci", "bu... constant PATCH_TYPES (line 52) | const PATCH_TYPES = new Set(["fix", "perf", "refactor", "revert"]) type VersionSources (line 54) | type VersionSources = Record type RootPackageJson (line 56) | type RootPackageJson = { type PluginManifest (line 60) | type PluginManifest = { type MarketplaceManifest (line 64) | type MarketplaceManifest = { function parseReleaseIntent (line 70) | function parseReleaseIntent(rawTitle: string): ParsedReleaseIntent { function inferBumpFromIntent (line 93) | function inferBumpFromIntent(intent: ParsedReleaseIntent): BumpLevel | n... function detectComponentsFromFiles (line 102) | function detectComponentsFromFiles(files: string[]): Map { function countSkillDirectories (line 81) | async function countSkillDirectories(root: string): Promise { function countMcpServers (line 99) | async function countMcpServers(pluginRoot: string): Promise { function getCompoundEngineeringCounts (line 105) | async function getCompoundEngineeringCounts(root: string): Promise): Record { function isWithinDir (line 76) | async function isWithinDir(candidate: string, canonicalParentDir: string... function removeGeminiMirrorConflicts (line 82) | async function removeGeminiMirrorConflicts( function convertMcpForGemini (line 118) | function convertMcpForGemini( FILE: src/sync/json-config.ts type JsonObject (line 4) | type JsonObject = Record function isJsonObject (line 6) | function isJsonObject(value: unknown): value is JsonObject { function mergeJsonConfigAtKey (line 10) | async function mergeJsonConfigAtKey(options: { function readJsonObjectSafe (line 29) | async function readJsonObjectSafe(configPath: string): Promise):... FILE: src/sync/qwen.ts function syncToQwen (line 10) | async function syncToQwen( function convertMcpForQwen (line 26) | function convertMcpForQwen( FILE: src/sync/registry.ts function getCopilotHomeRoot (line 15) | function getCopilotHomeRoot(home: string): string { function getGeminiHomeRoot (line 19) | function getGeminiHomeRoot(home: string): string { type SyncTargetName (line 23) | type SyncTargetName = type SyncTargetDefinition (line 35) | type SyncTargetDefinition = { function isSyncTargetName (line 127) | function isSyncTargetName(value: string): value is SyncTargetName { function getSyncTarget (line 131) | function getSyncTarget(name: SyncTargetName): SyncTargetDefinition { function getDefaultSyncRegistryContext (line 139) | function getDefaultSyncRegistryContext(): { home: string; cwd: string } { FILE: src/sync/skills.ts function syncSkills (line 6) | async function syncSkills( FILE: src/sync/windsurf.ts function syncToWindsurf (line 10) | async function syncToWindsurf( function convertMcpForWindsurf (line 26) | function convertMcpForWindsurf( FILE: src/targets/codex.ts function writeCodexBundle (line 8) | async function writeCodexBundle(outputRoot: string, bundle: CodexBundle)... function copyCodexSkillDir (line 48) | async function copyCodexSkillDir( function resolveCodexRoot (line 83) | function resolveCodexRoot(outputRoot: string): string { function renderCodexConfig (line 87) | function renderCodexConfig(mcpServers?: Record)... function formatTomlString (line 123) | function formatTomlString(value: string): string { function formatTomlKey (line 127) | function formatTomlKey(value: string): string { function formatTomlInlineTable (line 132) | function formatTomlInlineTable(entries: Record): string { FILE: src/targets/copilot.ts function writeCopilotBundle (line 5) | async function writeCopilotBundle(outputRoot: string, bundle: CopilotBun... function resolveCopilotPaths (line 40) | function resolveCopilotPaths(outputRoot: string) { FILE: src/targets/droid.ts function writeDroidBundle (line 5) | async function writeDroidBundle(outputRoot: string, bundle: DroidBundle)... function resolveDroidPaths (line 32) | function resolveDroidPaths(outputRoot: string) { FILE: src/targets/gemini.ts function writeGeminiBundle (line 5) | async function writeGeminiBundle(outputRoot: string, bundle: GeminiBundl... function resolveGeminiPaths (line 53) | function resolveGeminiPaths(outputRoot: string) { FILE: src/targets/index.ts type TargetScope (line 33) | type TargetScope = "global" | "workspace" function isTargetScope (line 35) | function isTargetScope(value: string): value is TargetScope { function validateScope (line 43) | function validateScope( type TargetHandler (line 59) | type TargetHandler = { FILE: src/targets/kiro.ts function writeKiroBundle (line 5) | async function writeKiroBundle(outputRoot: string, bundle: KiroBundle): ... function resolveKiroPaths (line 95) | function resolveKiroPaths(outputRoot: string) { function validatePathSafe (line 118) | function validatePathSafe(name: string, label: string): void { FILE: src/targets/openclaw.ts function writeOpenClawBundle (line 6) | async function writeOpenClawBundle(outputRoot: string, bundle: OpenClawB... function resolveOpenClawPaths (line 46) | function resolveOpenClawPaths(outputRoot: string) { function rewritePathsInDir (line 56) | async function rewritePathsInDir(dir: string): Promise { function mergeOpenClawConfig (line 71) | async function mergeOpenClawConfig( FILE: src/targets/opencode.ts function mergeOpenCodeConfig (line 6) | async function mergeOpenCodeConfig( function writeOpenCodeBundle (line 57) | async function writeOpenCodeBundle(outputRoot: string, bundle: OpenCodeB... function resolveOpenCodePaths (line 101) | function resolveOpenCodePaths(outputRoot: string) { FILE: src/targets/pi.ts constant PI_AGENTS_BLOCK_START (line 13) | const PI_AGENTS_BLOCK_START = "" constant PI_AGENTS_BLOCK_END (line 14) | const PI_AGENTS_BLOCK_END = "" constant PI_AGENTS_BLOCK_BODY (line 16) | const PI_AGENTS_BLOCK_BODY = `## Compound Engineering (Pi compatibility) function writePiBundle (line 28) | async function writePiBundle(outputRoot: string, bundle: PiBundle): Prom... function resolvePiPaths (line 62) | function resolvePiPaths(outputRoot: string) { function ensurePiAgentsBlock (line 97) | async function ensurePiAgentsBlock(filePath: string): Promise { function buildPiAgentsBlock (line 112) | function buildPiAgentsBlock(): string { function upsertBlock (line 116) | function upsertBlock(existing: string, block: string): string { FILE: src/targets/qwen.ts function writeQwenBundle (line 5) | async function writeQwenBundle(outputRoot: string, bundle: QwenBundle): ... function resolveQwenPaths (line 48) | function resolveQwenPaths(outputRoot: string) { FILE: src/targets/windsurf.ts function writeWindsurfBundle (line 13) | async function writeWindsurfBundle(outputRoot: string, bundle: WindsurfB... function validatePathSafe (line 96) | function validatePathSafe(name: string, label: string): void { function formatWorkflowContent (line 102) | function formatWorkflowContent(name: string, description: string, body: ... FILE: src/templates/pi/compat-extension.ts constant PI_COMPAT_EXTENSION_SOURCE (line 1) | const PI_COMPAT_EXTENSION_SOURCE = `import fs from "node:fs" FILE: src/types/claude.ts type ClaudeMcpServer (line 1) | type ClaudeMcpServer = { type ClaudeManifest (line 10) | type ClaudeManifest = { type ClaudeAgent (line 27) | type ClaudeAgent = { type ClaudeCommand (line 36) | type ClaudeCommand = { type ClaudeSkill (line 47) | type ClaudeSkill = { type ClaudePlugin (line 56) | type ClaudePlugin = { type ClaudeHookCommand (line 66) | type ClaudeHookCommand = { type ClaudeHookPrompt (line 72) | type ClaudeHookPrompt = { type ClaudeHookAgent (line 77) | type ClaudeHookAgent = { type ClaudeHookEntry (line 82) | type ClaudeHookEntry = ClaudeHookCommand | ClaudeHookPrompt | ClaudeHook... type ClaudeHookMatcher (line 84) | type ClaudeHookMatcher = { type ClaudeHooks (line 89) | type ClaudeHooks = { FILE: src/types/codex.ts type CodexPrompt (line 4) | type CodexPrompt = { type CodexSkillDir (line 9) | type CodexSkillDir = { type CodexGeneratedSkill (line 14) | type CodexGeneratedSkill = { type CodexBundle (line 19) | type CodexBundle = { FILE: src/types/copilot.ts type CopilotAgent (line 1) | type CopilotAgent = { type CopilotGeneratedSkill (line 6) | type CopilotGeneratedSkill = { type CopilotSkillDir (line 11) | type CopilotSkillDir = { type CopilotMcpServer (line 16) | type CopilotMcpServer = { type CopilotBundle (line 26) | type CopilotBundle = { FILE: src/types/droid.ts type DroidCommandFile (line 1) | type DroidCommandFile = { type DroidAgentFile (line 6) | type DroidAgentFile = { type DroidSkillDir (line 11) | type DroidSkillDir = { type DroidBundle (line 16) | type DroidBundle = { FILE: src/types/gemini.ts type GeminiSkill (line 1) | type GeminiSkill = { type GeminiSkillDir (line 6) | type GeminiSkillDir = { type GeminiCommand (line 11) | type GeminiCommand = { type GeminiMcpServer (line 16) | type GeminiMcpServer = { type GeminiBundle (line 24) | type GeminiBundle = { FILE: src/types/kiro.ts type KiroAgent (line 1) | type KiroAgent = { type KiroAgentConfig (line 7) | type KiroAgentConfig = { type KiroSkill (line 17) | type KiroSkill = { type KiroSkillDir (line 22) | type KiroSkillDir = { type KiroSteeringFile (line 27) | type KiroSteeringFile = { type KiroMcpServer (line 32) | type KiroMcpServer = { type KiroBundle (line 40) | type KiroBundle = { FILE: src/types/openclaw.ts type OpenClawPluginManifest (line 1) | type OpenClawPluginManifest = { type OpenClawConfigSchema (line 10) | type OpenClawConfigSchema = { type OpenClawConfigProperty (line 17) | type OpenClawConfigProperty = { type OpenClawUiHint (line 23) | type OpenClawUiHint = { type OpenClawSkillFile (line 29) | type OpenClawSkillFile = { type OpenClawCommandRegistration (line 36) | type OpenClawCommandRegistration = { type OpenClawBundle (line 44) | type OpenClawBundle = { FILE: src/types/opencode.ts type OpenCodePermission (line 1) | type OpenCodePermission = "allow" | "ask" | "deny" type OpenCodeConfig (line 3) | type OpenCodeConfig = { type OpenCodeAgentConfig (line 13) | type OpenCodeAgentConfig = { type OpenCodeMcpServer (line 22) | type OpenCodeMcpServer = { type OpenCodeAgentFile (line 31) | type OpenCodeAgentFile = { type OpenCodePluginFile (line 36) | type OpenCodePluginFile = { type OpenCodeCommandFile (line 41) | type OpenCodeCommandFile = { type OpenCodeBundle (line 46) | type OpenCodeBundle = { FILE: src/types/pi.ts type PiPrompt (line 1) | type PiPrompt = { type PiSkillDir (line 6) | type PiSkillDir = { type PiGeneratedSkill (line 11) | type PiGeneratedSkill = { type PiExtensionFile (line 16) | type PiExtensionFile = { type PiMcporterServer (line 21) | type PiMcporterServer = { type PiMcporterConfig (line 30) | type PiMcporterConfig = { type PiBundle (line 34) | type PiBundle = { FILE: src/types/qwen.ts type QwenExtensionConfig (line 1) | type QwenExtensionConfig = { type QwenMcpServer (line 12) | type QwenMcpServer = { type QwenSetting (line 22) | type QwenSetting = { type QwenAgentFile (line 29) | type QwenAgentFile = { type QwenSkillDir (line 35) | type QwenSkillDir = { type QwenCommandFile (line 40) | type QwenCommandFile = { type QwenBundle (line 45) | type QwenBundle = { FILE: src/types/windsurf.ts type WindsurfWorkflow (line 1) | type WindsurfWorkflow = { type WindsurfGeneratedSkill (line 7) | type WindsurfGeneratedSkill = { type WindsurfSkillDir (line 12) | type WindsurfSkillDir = { type WindsurfMcpServerEntry (line 17) | type WindsurfMcpServerEntry = { type WindsurfMcpConfig (line 26) | type WindsurfMcpConfig = { type WindsurfBundle (line 30) | type WindsurfBundle = { FILE: src/utils/codex-agents.ts constant CODEX_AGENTS_BLOCK_START (line 4) | const CODEX_AGENTS_BLOCK_START = "" constant CODEX_AGENTS_BLOCK_END (line 5) | const CODEX_AGENTS_BLOCK_END = "" constant CODEX_AGENTS_BLOCK_BODY (line 7) | const CODEX_AGENTS_BLOCK_BODY = `## Compound Codex Tool Mapping (Claude ... function ensureCodexAgentsFile (line 28) | async function ensureCodexAgentsFile(codexHome: string): Promise { function buildCodexAgentsBlock (line 45) | function buildCodexAgentsBlock(): string { function upsertBlock (line 49) | function upsertBlock(existing: string, block: string): string { FILE: src/utils/codex-content.ts type CodexInvocationTargets (line 1) | type CodexInvocationTargets = { type CodexTransformOptions (line 6) | type CodexTransformOptions = { function transformContentForCodex (line 22) | function transformContentForCodex( function normalizeCodexName (line 73) | function normalizeCodexName(value: string): string { FILE: src/utils/detect-tools.ts type DetectedTool (line 5) | type DetectedTool = { function detectInstalledTools (line 11) | async function detectInstalledTools( function getDetectedTargetNames (line 31) | async function getDetectedTargetNames( FILE: src/utils/files.ts function backupFile (line 4) | async function backupFile(filePath: string): Promise { function pathExists (line 17) | async function pathExists(filePath: string): Promise { function ensureDir (line 26) | async function ensureDir(dirPath: string): Promise { function readText (line 30) | async function readText(filePath: string): Promise { function readJson (line 34) | async function readJson(filePath: string): Promise { function writeText (line 39) | async function writeText(filePath: string, content: string): Promise { function writeJsonSecure (line 56) | async function writeJsonSecure(filePath: string, data: unknown): Promise... function walkFiles (line 63) | async function walkFiles(root: string): Promise { function resolveCommandPath (line 83) | async function resolveCommandPath(dir: string, name: string, ext: string... function copyDir (line 93) | async function copyDir(sourceDir: string, targetDir: string): Promise, body: string):... function formatYamlLine (line 46) | function formatYamlLine(key: string, value: unknown): string { function formatYamlValue (line 54) | function formatYamlValue(value: unknown): string { FILE: src/utils/resolve-home.ts function expandHome (line 4) | function expandHome(value: string): string { function resolveTargetHome (line 12) | function resolveTargetHome(value: unknown, defaultPath: string): string { FILE: src/utils/resolve-output.ts function resolveTargetOutputRoot (line 5) | function resolveTargetOutputRoot(options: { FILE: src/utils/secrets.ts constant SENSITIVE_PATTERN (line 1) | const SENSITIVE_PATTERN = /key|token|secret|password|credential|api_key/i function hasPotentialSecrets (line 4) | function hasPotentialSecrets( function findServersWithPotentialSecrets (line 18) | function findServersWithPotentialSecrets( FILE: src/utils/symlink.ts function forceSymlink (line 7) | async function forceSymlink(source: string, target: string): Promise { function runGit (line 15) | async function runGit(args: string[], cwd: string, env?: NodeJS.ProcessE... FILE: tests/codex-agents.test.ts function readFile (line 11) | async function readFile(filePath: string): Promise { FILE: tests/codex-writer.test.ts function exists (line 8) | async function exists(filePath: string): Promise { FILE: tests/copilot-writer.test.ts function exists (line 8) | async function exists(filePath: string): Promise { FILE: tests/droid-writer.test.ts function exists (line 8) | async function exists(filePath: string): Promise { FILE: tests/gemini-writer.test.ts function exists (line 8) | async function exists(filePath: string): Promise { FILE: tests/kiro-writer.test.ts function exists (line 8) | async function exists(filePath: string): Promise { FILE: tests/opencode-writer.test.ts function exists (line 9) | async function exists(filePath: string): Promise { FILE: tests/pi-writer.test.ts function exists (line 8) | async function exists(filePath: string): Promise { FILE: tests/release-metadata.test.ts function makeFixtureRoot (line 19) | async function makeFixtureRoot(): Promise { FILE: tests/windsurf-writer.test.ts function exists (line 8) | async function exists(filePath: string): Promise {