SYMBOL INDEX (453 symbols across 57 files) FILE: scripts/extract-changelog.mjs function normalizeVersion (line 3) | function normalizeVersion(input) { function extractSection (line 9) | function extractSection(changelogText, version) { function listVersions (line 38) | function listVersions(changelogText) { function escapeRegExp (line 51) | function escapeRegExp(str) { FILE: scripts/fetch-featured-skills.mjs constant OUTPUT_FILE (line 31) | const OUTPUT_FILE = 'featured-skills.json' constant CURATED_REPOS (line 34) | const CURATED_REPOS = [ constant MAX_SKILLS (line 44) | const MAX_SKILLS = 300 constant CONCURRENCY (line 45) | const CONCURRENCY = 10 constant MAX_RATE_LIMIT_WAIT_SECS (line 46) | const MAX_RATE_LIMIT_WAIT_SECS = 60 constant SKILL_SCAN_BASES (line 49) | const SKILL_SCAN_BASES = [ constant ROOT_SKIP_DIRS (line 58) | const ROOT_SKIP_DIRS = new Set([ constant CATEGORY_RULES (line 65) | const CATEGORY_RULES = [ constant GITHUB_TOKEN (line 75) | const GITHUB_TOKEN = process.env.GITHUB_TOKEN || '' function fetchJson (line 79) | async function fetchJson(url, retries = 3) { function sleep (line 119) | function sleep(ms) { function pMap (line 124) | async function pMap(items, fn, concurrency) { function fetchRepoMetadata (line 142) | async function fetchRepoMetadata(fullName) { function fetchAllRepoMetadata (line 152) | async function fetchAllRepoMetadata() { function detectSkillsFromTree (line 169) | function detectSkillsFromTree(treeItems) { function getRepoTree (line 219) | async function getRepoTree(owner, repo, branch) { function classify (line 231) | function classify(topics, description) { function parseSkillMdFrontmatter (line 243) | function parseSkillMdFrontmatter(content) { function fetchSkillMdContent (line 260) | async function fetchSkillMdContent(owner, repo, branch, dirPath) { function kebabToTitle (line 271) | function kebabToTitle(name) { function slugFromDirPath (line 278) | function slugFromDirPath(dirPath, repoName) { function main (line 286) | async function main() { FILE: scripts/version.mjs constant ROOT (line 6) | const ROOT = process.cwd(); function read (line 8) | function read(filePath) { function write (line 12) | function write(filePath, contents) { function replaceJsonStringProp (line 16) | function replaceJsonStringProp(filePath, propName, newValue) { function replaceCargoPackageVersion (line 27) | function replaceCargoPackageVersion(filePath, newValue) { function getPackageJsonVersion (line 50) | function getPackageJsonVersion() { function setPackageJsonVersion (line 58) | function setPackageJsonVersion(newVersion) { function syncFromPackageJson (line 62) | function syncFromPackageJson() { function checkInSync (line 71) | function checkInSync() { function usage (line 98) | function usage() { function main (line 105) | async function main() { FILE: src-tauri/build.rs function main (line 1) | fn main() { FILE: src-tauri/src/commands/mod.rs constant RECENT_PROJECTS_SETTING (line 37) | const RECENT_PROJECTS_SETTING: &str = "recent_projects_v1"; function format_anyhow_error (line 39) | fn format_anyhow_error(err: anyhow::Error) -> String { type ToolInfoDto (line 109) | pub struct ToolInfoDto { type ToolStatusDto (line 118) | pub struct ToolStatusDto { function get_tool_status (line 125) | pub async fn get_tool_status(store: State<'_, SkillStore>) -> Result) ->... function set_git_cache_cleanup_days (line 203) | pub async fn set_git_cache_cleanup_days( function clear_git_cache_now (line 215) | pub async fn clear_git_cache_now(app: tauri::AppHandle) -> Result) -> Res... function set_git_cache_ttl_secs (line 236) | pub async fn set_git_cache_ttl_secs( type InstallResultDto (line 248) | pub struct InstallResultDto { function expand_home_path (line 255) | fn expand_home_path(input: &str) -> Result) -> Result<&'static str, anyhow::... function get_recent_projects (line 280) | pub async fn get_recent_projects(store: State<'_, SkillStore>) -> Result... function save_recent_project (line 290) | pub async fn save_recent_project( function get_recent_projects_impl (line 301) | fn get_recent_projects_impl(store: &SkillStore) -> Result, a... function save_recent_project_impl (line 309) | fn save_recent_project_impl( function get_central_repo_path (line 330) | pub async fn get_central_repo_path( function set_central_repo_path (line 346) | pub async fn set_central_repo_path( function install_local (line 406) | pub async fn install_local( function list_local_skills_cmd (line 424) | pub async fn list_local_skills_cmd(basePath: String) -> Result) -> Result, token: Strin... function import_existing_skill (line 839) | pub async fn import_existing_skill( type ManagedSkillDto (line 862) | pub struct ManagedSkillDto { type TagDto (line 878) | pub struct TagDto { type TagWithCountDto (line 884) | pub struct TagWithCountDto { type SkillTargetDto (line 892) | pub struct SkillTargetDto { function get_managed_skills (line 903) | pub fn get_managed_skills(store: State<'_, SkillStore>) -> Result) -> Result, name: String) -> Result<... function rename_tag (line 938) | pub fn rename_tag( function delete_tag (line 954) | pub fn delete_tag(store: State<'_, SkillStore>, tagId: i64) -> Result<()... function get_skill_tags (line 960) | pub fn get_skill_tags( function set_skill_tags (line 979) | pub fn set_skill_tags( function get_untagged_skill_ids (line 990) | pub fn get_untagged_skill_ids(store: State<'_, SkillStore>) -> Result Result<(), String> { function to_install_dto (line 1063) | fn to_install_dto(result: InstallResult) -> InstallResultDto { function now_ms (line 1072) | fn now_ms() -> i64 { function get_managed_skills_impl (line 1079) | fn get_managed_skills_impl(store: &SkillStore) -> Result Self { function get_featured_skills (line 1150) | pub async fn get_featured_skills( type OnlineSkillDto (line 1164) | pub struct OnlineSkillDto { method from (line 1172) | fn from(r: OnlineSkillResult) -> Self { function search_skills_online (line 1183) | pub async fn search_skills_online( type SkillFileEntry (line 1199) | pub struct SkillFileEntry { function list_skill_files (line 1205) | pub async fn list_skill_files(central_path: String) -> Result... function cancel_current_operation (line 1236) | pub fn cancel_current_operation(cancel: State<'_, Arc>) -> ... FILE: src-tauri/src/commands/tests/commands.rs function make_store (line 4) | fn make_store() -> (tempfile::TempDir, SkillStore) { function format_anyhow_error_passthrough_prefixes (line 12) | fn format_anyhow_error_passthrough_prefixes() { function format_anyhow_error_redacts_clone_temp_path (line 18) | fn format_anyhow_error_redacts_clone_temp_path() { function format_anyhow_error_github_hint_auth (line 26) | fn format_anyhow_error_github_hint_auth() { function expand_home_path_basic (line 33) | fn expand_home_path_basic() { function expand_home_path_empty_is_error (line 40) | fn expand_home_path_empty_is_error() { function normalize_scope_defaults_to_global_and_rejects_unknown (line 46) | fn normalize_scope_defaults_to_global_and_rejects_unknown() { function recent_projects_are_deduped_ordered_and_limited (line 54) | fn recent_projects_are_deduped_ordered_and_limited() { function save_recent_project_rejects_missing_directory (line 88) | fn save_recent_project_rejects_missing_directory() { function remove_path_any_handles_file_dir_and_missing (line 98) | fn remove_path_any_handles_file_dir_and_missing() { function remove_path_any_removes_symlink_only (line 115) | fn remove_path_any_removes_symlink_only() { function get_managed_skills_impl_maps_targets (line 130) | fn get_managed_skills_impl_maps_targets() { FILE: src-tauri/src/core/cache_cleanup.rs constant CACHE_DIR_NAME (line 10) | const CACHE_DIR_NAME: &str = "skills-hub-git-cache"; constant CACHE_META_FILE (line 11) | const CACHE_META_FILE: &str = ".skills-hub-cache.json"; constant GIT_CACHE_CLEANUP_DAYS_KEY (line 12) | pub const GIT_CACHE_CLEANUP_DAYS_KEY: &str = "git_cache_cleanup_days"; constant DEFAULT_GIT_CACHE_CLEANUP_DAYS (line 13) | pub const DEFAULT_GIT_CACHE_CLEANUP_DAYS: i64 = 30; constant MAX_GIT_CACHE_CLEANUP_DAYS (line 14) | const MAX_GIT_CACHE_CLEANUP_DAYS: i64 = 3650; constant GIT_CACHE_TTL_SECS_KEY (line 15) | pub const GIT_CACHE_TTL_SECS_KEY: &str = "git_cache_ttl_secs"; constant DEFAULT_GIT_CACHE_TTL_SECS (line 16) | pub const DEFAULT_GIT_CACHE_TTL_SECS: i64 = 60; constant MAX_GIT_CACHE_TTL_SECS (line 17) | const MAX_GIT_CACHE_TTL_SECS: i64 = 3600; type RepoCacheMeta (line 20) | struct RepoCacheMeta { function get_git_cache_cleanup_days (line 24) | pub fn get_git_cache_cleanup_days(store: &SkillStore) -> i64 { function set_git_cache_cleanup_days (line 29) | pub fn set_git_cache_cleanup_days(store: &SkillStore, days: i64) -> Resu... function get_git_cache_ttl_secs (line 40) | pub fn get_git_cache_ttl_secs(store: &SkillStore) -> i64 { function set_git_cache_ttl_secs (line 45) | pub fn set_git_cache_ttl_secs(store: &SkillStore, secs: i64) -> Result( function cleanup_git_cache_dirs_in (line 67) | fn cleanup_git_cache_dirs_in(cache_dir: &Path, max_age: Duration) -> Res... function parse_cleanup_days (line 130) | fn parse_cleanup_days(raw: Option) -> Option { function parse_cache_ttl_secs (line 139) | fn parse_cache_ttl_secs(raw: Option) -> Option { function now_ms (line 148) | fn now_ms() -> i64 { FILE: src-tauri/src/core/cancel_token.rs type CancelToken (line 6) | pub struct CancelToken { method new (line 11) | pub fn new() -> Self { method cancel (line 18) | pub fn cancel(&self) { method reset (line 23) | pub fn reset(&self) { method is_cancelled (line 28) | pub fn is_cancelled(&self) -> bool { function default_is_not_cancelled (line 38) | fn default_is_not_cancelled() { function cancel_sets_flag (line 44) | fn cancel_sets_flag() { function reset_clears_flag (line 51) | fn reset_clears_flag() { FILE: src-tauri/src/core/central_repo.rs constant CENTRAL_DIR_NAME (line 9) | const CENTRAL_DIR_NAME: &str = ".skillshub"; function resolve_central_repo_path (line 11) | pub fn resolve_central_repo_path( function ensure_central_repo (line 30) | pub fn ensure_central_repo(path: &Path) -> Result<()> { FILE: src-tauri/src/core/content_hash.rs constant IGNORE_NAMES (line 7) | const IGNORE_NAMES: [&str; 4] = [".git", ".DS_Store", "Thumbs.db", ".git... function is_ignored (line 9) | fn is_ignored(entry: &DirEntry) -> bool { function hash_dir (line 14) | pub fn hash_dir(path: &Path) -> Result { FILE: src-tauri/src/core/featured_skills.rs constant FEATURED_SKILLS_URL (line 7) | const FEATURED_SKILLS_URL: &str = constant CACHE_KEY (line 10) | const CACHE_KEY: &str = "featured_skills_cache"; constant BUNDLED_JSON (line 13) | const BUNDLED_JSON: &str = include_str!("../../../featured-skills.json"); type FeaturedSkillsData (line 16) | struct FeaturedSkillsData { type FeaturedSkillRaw (line 21) | struct FeaturedSkillRaw { type FeaturedSkill (line 35) | pub struct FeaturedSkill { function fetch_featured_skills (line 44) | pub fn fetch_featured_skills(store: &SkillStore) -> Result Result<... function fetch_from_url (line 69) | fn fetch_from_url(url: &str) -> Result { function parse_and_filter (line 88) | fn parse_and_filter(json_str: &str) -> Result> { FILE: src-tauri/src/core/git_fetcher.rs function clone_or_pull (line 12) | pub fn clone_or_pull( function clone_or_pull_sparse (line 93) | pub fn clone_or_pull_sparse( function git_timeout (line 268) | fn git_timeout() -> Duration { function git_fetch_timeout (line 276) | fn git_fetch_timeout() -> Duration { function resolve_git_bin (line 286) | fn resolve_git_bin() -> Option { function git_bin_works (line 324) | fn git_bin_works(bin: &str) -> bool { function git_cmd (line 335) | fn git_cmd() -> Command { function run_cmd_with_timeout (line 347) | fn run_cmd_with_timeout( function clone_or_pull_via_git_cli (line 387) | fn clone_or_pull_via_git_cli( function fetch_origin (line 530) | fn fetch_origin(repo: &Repository) -> Result<()> { FILE: src-tauri/src/core/github_download.rs type GithubContent (line 13) | struct GithubContent { function download_github_directory (line 28) | pub fn download_github_directory( function download_dir_recursive (line 48) | fn download_dir_recursive( function check_github_response (line 135) | fn check_github_response( function parse_github_api_params (line 170) | pub fn parse_github_api_params( function parse_github_api_params_extracts_correctly (line 206) | fn parse_github_api_params_extracts_correctly() { function parse_github_api_params_returns_none_without_subpath (line 224) | fn parse_github_api_params_returns_none_without_subpath() { function parse_github_api_params_returns_none_for_root_subpath (line 231) | fn parse_github_api_params_returns_none_for_root_subpath() { function parse_github_api_params_returns_none_for_non_github (line 241) | fn parse_github_api_params_returns_none_for_non_github() { function check_github_response_passes_success (line 251) | fn check_github_response_passes_success() { function check_github_response_extracts_rate_limit_reset (line 264) | fn check_github_response_extracts_rate_limit_reset() { function check_github_response_handles_403_without_reset_header (line 296) | fn check_github_response_handles_403_without_reset_header() { function check_github_response_handles_other_errors (line 314) | fn check_github_response_handles_other_errors() { FILE: src-tauri/src/core/github_search.rs type SearchResponse (line 6) | struct SearchResponse { type RepoItem (line 11) | struct RepoItem { type RepoSummary (line 21) | pub struct RepoSummary { function search_github_repos (line 30) | pub fn search_github_repos( function search_github_repos_inner (line 38) | fn search_github_repos_inner( FILE: src-tauri/src/core/installer.rs type InstallResult (line 21) | pub struct InstallResult { function install_local_skill (line 28) | pub fn install_local_skill( function install_git_skill (line 87) | pub fn install_git_skill( type ParsedGitSource (line 305) | struct ParsedGitSource { function parse_github_url (line 311) | fn parse_github_url(input: &str) -> ParsedGitSource { function normalize_github_skill_subpath (line 381) | fn normalize_github_skill_subpath(subpath: &str) -> String { function looks_like_github_shorthand (line 393) | fn looks_like_github_shorthand(input: &str) -> bool { function now_ms (line 438) | fn now_ms() -> i64 { function derive_name_from_repo_url (line 445) | fn derive_name_from_repo_url(repo_url: &str) -> String { constant SKILL_SCAN_BASES (line 462) | const SKILL_SCAN_BASES: [&str; 5] = [ function is_skill_dir (line 471) | fn is_skill_dir(p: &Path) -> bool { function ensure_installable_skill_dir (line 475) | fn ensure_installable_skill_dir(p: &Path) -> Result<()> { function is_claude_skill_dir (line 486) | fn is_claude_skill_dir(p: &Path) -> bool { function read_plugin_description (line 498) | fn read_plugin_description(repo_dir: &Path) -> Option { function extract_skill_info (line 512) | fn extract_skill_info(skill_dir: &Path, repo_dir: &Path) -> (String, Opt... function is_hidden_dir_name (line 529) | fn is_hidden_dir_name(name: &str) -> bool { function is_known_root_scan_dir (line 533) | fn is_known_root_scan_dir(name: &str) -> bool { function is_skill_container_dir_name (line 540) | fn is_skill_container_dir_name(name: &str) -> bool { function push_skill_dirs_from_base (line 545) | fn push_skill_dirs_from_base(out: &mut Vec, base_dir: &Path) { function collect_skill_dirs (line 556) | fn collect_skill_dirs(repo_dir: &Path) -> Vec { function scan_skill_candidates_in_dir (line 592) | fn scan_skill_candidates_in_dir(repo_dir: &Path) -> Vec<(String, String)> { function count_skills_in_repo (line 607) | fn count_skills_in_repo(repo_dir: &Path) -> usize { function compute_content_hash (line 611) | fn compute_content_hash(path: &Path) -> Option { function should_compute_content_hash (line 619) | fn should_compute_content_hash() -> bool { type UpdateResult (line 629) | pub struct UpdateResult { function update_managed_skill_from_source (line 639) | pub fn update_managed_skill_from_source( type GitSkillCandidate (line 835) | pub struct GitSkillCandidate { type LocalSkillCandidate (line 842) | pub struct LocalSkillCandidate { function list_git_skills (line 850) | pub fn list_git_skills( function list_local_skills (line 927) | pub fn list_local_skills(base_path: &Path) -> Result( function install_local_skill_from_selection (line 1151) | pub fn install_local_skill_from_selection( type RepoCacheMeta (line 1184) | struct RepoCacheMeta { function clone_to_cache (line 1191) | fn clone_to_cache( function clone_to_cache_subpath (line 1272) | fn clone_to_cache_subpath( function repo_cache_key (line 1356) | fn repo_cache_key(clone_url: &str, branch: Option<&str>, subpath: Option... function backfill_skill_descriptions (line 1372) | pub fn backfill_skill_descriptions(store: &SkillStore) { function parse_skill_md (line 1388) | fn parse_skill_md(path: &Path) -> Option<(String, Option)> { function parse_skill_md_with_reason (line 1392) | fn parse_skill_md_with_reason(path: &Path) -> Result<(String, Option String { function frontmatter_block_style (line 1463) | fn frontmatter_block_style(value: &str) -> Option { FILE: src-tauri/src/core/onboarding.rs type OnboardingVariant (line 13) | pub struct OnboardingVariant { type OnboardingGroup (line 23) | pub struct OnboardingGroup { type OnboardingPlan (line 30) | pub struct OnboardingPlan { function build_onboarding_plan (line 36) | pub fn build_onboarding_plan( function build_onboarding_plan_in_home (line 52) | fn build_onboarding_plan_in_home( function filter_detected (line 115) | fn filter_detected( function is_under (line 146) | fn is_under(path: &Path, base: &Path) -> bool { function managed_target_key (line 150) | fn managed_target_key(tool: &str, path: &Path) -> String { function normalize_path_for_key (line 156) | fn normalize_path_for_key(path: &Path) -> String { FILE: src-tauri/src/core/skill_files.rs constant IGNORE_NAMES (line 6) | const IGNORE_NAMES: [&str; 4] = [".git", ".DS_Store", "Thumbs.db", ".git... constant MAX_FILE_SIZE (line 7) | const MAX_FILE_SIZE: u64 = 1_048_576; function is_ignored (line 9) | fn is_ignored(entry: &DirEntry) -> bool { type FileEntry (line 14) | pub struct FileEntry { function list_files (line 19) | pub fn list_files(central_path: &Path) -> Result> { function read_file (line 58) | pub fn read_file(central_path: &Path, relative_path: &str) -> Result Self { method db_path (line 140) | pub fn db_path(&self) -> &Path { method ensure_schema (line 144) | pub fn ensure_schema(&self) -> Result<()> { method get_setting (line 184) | pub fn get_setting(&self, key: &str) -> Result> { method set_setting (line 195) | pub fn set_setting(&self, key: &str, value: &str) -> Result<()> { method set_onboarding_completed (line 207) | pub fn set_onboarding_completed(&self, completed: bool) -> Result<()> { method upsert_skill (line 214) | pub fn upsert_skill(&self, record: &SkillRecord) -> Result<()> { method upsert_skill_target (line 259) | pub fn upsert_skill_target(&self, record: &SkillTargetRecord) -> Resul... method list_skills (line 290) | pub fn list_skills(&self) -> Result> { method get_skill_by_id (line 325) | pub fn get_skill_by_id(&self, skill_id: &str) -> Result Result<()> { method create_tag (line 379) | pub fn create_tag(&self, name: &str) -> Result { method rename_tag (line 396) | pub fn rename_tag(&self, tag_id: i64, name: &str) -> Result { method delete_tag (line 415) | pub fn delete_tag(&self, tag_id: i64) -> Result<()> { method list_tags_with_counts (line 422) | pub fn list_tags_with_counts(&self) -> Result> { method get_skill_tags (line 449) | pub fn get_skill_tags(&self, skill_id: &str) -> Result> { method set_skill_tags (line 473) | pub fn set_skill_tags(&self, skill_id: &str, tag_ids: &[i64]) -> Resul... method list_untagged_skill_ids (line 505) | pub fn list_untagged_skill_ids(&self) -> Result> { method list_skill_targets (line 524) | pub fn list_skill_targets(&self, skill_id: &str) -> Result Result(&self, f: impl FnOnce(&Connection) -> Result) -> Re... type SkillRecord (line 89) | pub struct SkillRecord { type SkillTargetRecord (line 107) | pub struct SkillTargetRecord { type TagRecord (line 121) | pub struct TagRecord { type TagWithCountRecord (line 127) | pub struct TagWithCountRecord { function migrate_skill_targets_to_v4 (line 636) | fn migrate_skill_targets_to_v4(conn: &Connection) -> Result<()> { function migrate_tags_to_v5 (line 667) | fn migrate_tags_to_v5(conn: &Connection) -> Result<()> { function normalize_tag_name (line 688) | fn normalize_tag_name(name: &str) -> Result { function now_ms (line 696) | fn now_ms() -> i64 { function default_db_path (line 703) | pub fn default_db_path(app: &tauri::AppHandle) -> ... function migrate_legacy_db_if_needed (line 713) | pub fn migrate_legacy_db_if_needed(target_db_path: &Path) -> Result<()> { function db_has_any_skills (line 766) | fn db_has_any_skills(db_path: &Path) -> Result { FILE: src-tauri/src/core/skills_search.rs type SkillsShResponse (line 6) | struct SkillsShResponse { type SkillsShItem (line 11) | struct SkillsShItem { type OnlineSkillResult (line 18) | pub struct OnlineSkillResult { function search_skills_online (line 25) | pub fn search_skills_online(query: &str, limit: usize) -> Result Result Result<()> { function remove_path_any (line 137) | fn remove_path_any(path: &Path) -> Result<()> { function is_same_link (line 158) | fn is_same_link(link_path: &Path, target: &Path) -> bool { function try_link_dir (line 165) | fn try_link_dir(source: &Path, target: &Path) -> Result<()> { function try_junction (line 185) | fn try_junction(source: &Path, target: &Path) -> Result<()> { function should_skip_copy (line 191) | fn should_skip_copy(entry: &walkdir::DirEntry) -> bool { function copy_dir_recursive (line 195) | pub fn copy_dir_recursive(source: &Path, target: &Path) -> Result<()> { FILE: src-tauri/src/core/temp_cleanup.rs constant TEMP_PREFIX (line 7) | const TEMP_PREFIX: &str = "skills-hub-git-"; constant TEMP_MARKER (line 8) | const TEMP_MARKER: &str = ".skills-hub-git-temp"; function mark_temp_dir (line 11) | pub fn mark_temp_dir(dir: &Path) -> Result<()> { function cleanup_old_git_temp_dirs (line 21) | pub fn cleanup_old_git_temp_dirs( function cleanup_old_git_temp_dirs_in (line 33) | fn cleanup_old_git_temp_dirs_in(cache_dir: &Path, max_age: Duration) -> ... FILE: src-tauri/src/core/tests/central_repo.rs function make_store (line 6) | fn make_store() -> (tempfile::TempDir, SkillStore) { function resolve_uses_setting_when_present (line 14) | fn resolve_uses_setting_when_present() { function ensure_central_repo_creates_dir (line 27) | fn ensure_central_repo_creates_dir() { FILE: src-tauri/src/core/tests/content_hash.rs function hash_changes_with_content_and_ignores_git_dir (line 6) | fn hash_changes_with_content_and_ignores_git_dir() { FILE: src-tauri/src/core/tests/featured_skills.rs function temp_store (line 4) | fn temp_store() -> SkillStore { function json_payload (line 14) | fn json_payload() -> String { function parses_and_filters_empty_source_url (line 40) | fn parses_and_filters_empty_source_url() { function falls_back_to_cache_on_http_failure (line 59) | fn falls_back_to_cache_on_http_failure() { function falls_back_to_bundled_on_total_failure (line 81) | fn falls_back_to_bundled_on_total_failure() { function falls_back_to_bundled_on_malformed_json (line 99) | fn falls_back_to_bundled_on_malformed_json() { FILE: src-tauri/src/core/tests/git_fetcher.rs function commit_file (line 5) | fn commit_file(repo: &git2::Repository, path: &str, content: &[u8], msg:... function clone_then_pull_updates_head (line 29) | fn clone_then_pull_updates_head() { function sparse_clone_only_materializes_requested_subpath (line 59) | fn sparse_clone_only_materializes_requested_subpath() { FILE: src-tauri/src/core/tests/github_search.rs function json_one_repo (line 5) | fn json_one_repo() -> String { function limit_is_clamped (line 22) | fn limit_is_clamped() { function maps_fields (line 54) | fn maps_fields() { function http_error_has_context (line 73) | fn http_error_has_context() { FILE: src-tauri/src/core/tests/installer.rs function make_store (line 6) | fn make_store() -> (tempfile::TempDir, SkillStore) { function set_central_path (line 13) | fn set_central_path(store: &SkillStore, central: &Path) { function init_git_repo (line 19) | fn init_git_repo(dir: &Path) -> git2::Repository { function commit_all (line 36) | fn commit_all(repo: &git2::Repository, msg: &str) -> git2::Oid { function parses_github_urls (line 61) | fn parses_github_urls() { function parses_skill_md_frontmatter (line 102) | fn parses_skill_md_frontmatter() { function parses_skill_md_frontmatter_literal_description (line 123) | fn parses_skill_md_frontmatter_literal_description() { function parses_skill_md_frontmatter_folded_chomp_description (line 150) | fn parses_skill_md_frontmatter_folded_chomp_description() { function backfill_skill_descriptions_replaces_stale_frontmatter_marker (line 179) | fn backfill_skill_descriptions_replaces_stale_frontmatter_marker() { function installs_local_skill_and_updates_from_source (line 222) | fn installs_local_skill_and_updates_from_source() { function lists_and_installs_git_skills_without_network (line 293) | fn lists_and_installs_git_skills_without_network() { function install_git_skill_errors_on_multi_skills_repo_root (line 332) | fn install_git_skill_errors_on_multi_skills_repo_root() { function lists_local_skills_with_invalid_entries (line 368) | fn lists_local_skills_with_invalid_entries() { function install_local_selection_validates_skill_md (line 402) | fn install_local_selection_validates_skill_md() { function install_git_skill_uses_skill_md_name_over_subpath_skills (line 446) | fn install_git_skill_uses_skill_md_name_over_subpath_skills() { function install_git_skill_rejects_container_subpath_without_skill_md (line 487) | fn install_git_skill_rejects_container_subpath_without_skill_md() { function install_git_skill_selection_accepts_specific_child_under_container (line 524) | fn install_git_skill_selection_accepts_specific_child_under_container() { function install_git_skill_respects_user_provided_name (line 562) | fn install_git_skill_respects_user_provided_name() { function install_git_skill_derives_name_from_skill_md (line 590) | fn install_git_skill_derives_name_from_skill_md() { function install_git_skill_detects_root_level_multi_skills (line 623) | fn install_git_skill_detects_root_level_multi_skills() { function list_git_skills_finds_root_level_skills (line 662) | fn list_git_skills_finds_root_level_skills() { function list_git_skills_finds_root_skill_container_layout (line 704) | fn list_git_skills_finds_root_skill_container_layout() { function collect_skill_dirs_finds_skills_under_explicit_container (line 738) | fn collect_skill_dirs_finds_skills_under_explicit_container() { function collect_skill_dirs_finds_multiple_skills_under_explicit_container (line 762) | fn collect_skill_dirs_finds_multiple_skills_under_explicit_container() { function collect_skill_dirs_scans_named_skill_containers_but_not_generic_dirs (line 795) | fn collect_skill_dirs_scans_named_skill_containers_but_not_generic_dirs() { function collect_skill_dirs_deduplicates_known_root_containers (line 824) | fn collect_skill_dirs_deduplicates_known_root_containers() { FILE: src-tauri/src/core/tests/onboarding.rs function groups_by_name_and_detects_conflicts_by_fingerprint (line 6) | fn groups_by_name_and_detects_conflicts_by_fingerprint() { function excludes_central_repo_path (line 34) | fn excludes_central_repo_path() { function excludes_managed_skill_targets (line 54) | fn excludes_managed_skill_targets() { FILE: src-tauri/src/core/tests/skill_store.rs function make_store (line 6) | fn make_store() -> (tempfile::TempDir, SkillStore) { function make_skill (line 14) | fn make_skill(id: &str, name: &str, central_path: &str, updated_at: i64)... function schema_is_idempotent (line 34) | fn schema_is_idempotent() { function migrates_v3_targets_to_global_scope (line 40) | fn migrates_v3_targets_to_global_scope() { function settings_roundtrip_and_update (line 114) | fn settings_roundtrip_and_update() { function skills_upsert_list_get_delete (line 142) | fn skills_upsert_list_get_delete() { function skill_targets_upsert_unique_constraint_and_list_order (line 170) | fn skill_targets_upsert_unique_constraint_and_list_order() { function project_targets_coexist_by_project_path_and_delete_precisely (line 248) | fn project_targets_coexist_by_project_path_and_delete_precisely() { function deleting_skill_cascades_targets (line 355) | fn deleting_skill_cascades_targets() { function tags_can_be_created_renamed_linked_and_deleted (line 380) | fn tags_can_be_created_renamed_linked_and_deleted() { function tag_links_are_removed_when_skill_is_deleted_and_untagged_is_counted (line 418) | fn tag_links_are_removed_when_skill_is_deleted_and_untagged_is_counted() { function description_stored_and_retrieved (line 436) | fn description_stored_and_retrieved() { function description_null_by_default (line 447) | fn description_null_by_default() { function update_skill_description_backfills (line 457) | fn update_skill_description_backfills() { function error_context_includes_db_path (line 484) | fn error_context_includes_db_path() { FILE: src-tauri/src/core/tests/skills_search.rs function json_response (line 5) | fn json_response() -> String { function json_empty (line 24) | fn json_empty() -> String { function parses_search_results (line 29) | fn parses_search_results() { function source_url_is_constructed_from_source (line 54) | fn source_url_is_constructed_from_source() { function http_error_returns_error (line 72) | fn http_error_returns_error() { function empty_results (line 86) | fn empty_results() { FILE: src-tauri/src/core/tests/sync_engine.rs function copy_dir_recursive_skips_git_dir (line 9) | fn copy_dir_recursive_skips_git_dir() { function hybrid_sync_creates_link_and_is_idempotent_when_same_link (line 24) | fn hybrid_sync_creates_link_and_is_idempotent_when_same_link() { function hybrid_sync_with_overwrite_replaces_existing (line 46) | fn hybrid_sync_with_overwrite_replaces_existing() { function cursor_sync_forces_copy (line 63) | fn cursor_sync_forces_copy() { function copy_overwrite_replaces_broken_symlink_target (line 79) | fn copy_overwrite_replaces_broken_symlink_target() { FILE: src-tauri/src/core/tests/temp_cleanup.rs function cleanup_removes_only_marked_prefixed_dirs (line 7) | fn cleanup_removes_only_marked_prefixed_dirs() { FILE: src-tauri/src/core/tests/tool_adapters.rs function adapter_by_key_finds_known_tool (line 10) | fn adapter_by_key_finds_known_tool() { function adapter_by_key_finds_new_tools (line 16) | fn adapter_by_key_finds_new_tools() { function adapters_sharing_skills_dir_groups_amp_and_kimi (line 26) | fn adapters_sharing_skills_dir_groups_amp_and_kimi() { function project_relative_skills_dir_maps_supported_agents (line 36) | fn project_relative_skills_dir_maps_supported_agents() { function project_path_resolution_uses_project_specific_mapping (line 73) | fn project_path_resolution_uses_project_specific_mapping() { function adapters_sharing_project_skills_dir_groups_agents_tools (line 94) | fn adapters_sharing_project_skills_dir_groups_agents_tools() { function scan_tool_dir_skips_codex_system_and_includes_symlink_dir (line 114) | fn scan_tool_dir_skips_codex_system_and_includes_symlink_dir() { function scan_tool_dir_skips_app_support_path (line 148) | fn scan_tool_dir_skips_app_support_path() { FILE: src-tauri/src/core/tool_adapters/mod.rs type ToolId (line 6) | pub enum ToolId { method as_key (line 54) | pub fn as_key(&self) -> &'static str { type ToolAdapter (line 105) | pub struct ToolAdapter { type DetectedSkill (line 115) | pub struct DetectedSkill { function default_tool_adapters (line 123) | pub fn default_tool_adapters() -> Vec { function adapters_sharing_skills_dir (line 436) | pub fn adapters_sharing_skills_dir(adapter: &ToolAdapter) -> Vec Vec... function adapter_by_key (line 451) | pub fn adapter_by_key(key: &str) -> Option { function resolve_default_path (line 457) | pub fn resolve_default_path(adapter: &ToolAdapter) -> Result { function resolve_project_path (line 462) | pub fn resolve_project_path(adapter: &ToolAdapter, project_root: &Path) ... function supports_project_scope (line 466) | pub fn supports_project_scope(adapter: &ToolAdapter) -> bool { function project_relative_skills_dir (line 470) | pub fn project_relative_skills_dir(adapter: &ToolAdapter) -> &'static str { function resolve_detect_path (line 517) | pub fn resolve_detect_path(adapter: &ToolAdapter) -> Result { function is_tool_installed (line 522) | pub fn is_tool_installed(adapter: &ToolAdapter) -> Result { function scan_tool_dir (line 526) | pub fn scan_tool_dir(tool: &ToolAdapter, dir: &Path) -> Result (bool, Option) { FILE: src-tauri/src/lib.rs function run (line 12) | pub fn run() { FILE: src-tauri/src/main.rs function main (line 4) | fn main() { FILE: src/App.tsx type SkillScopeState (line 39) | type SkillScopeState = Record< function App (line 47) | function App() { FILE: src/components/skills/ExplorePage.tsx type ExplorePageProps (line 6) | type ExplorePageProps = { function formatCount (line 20) | function formatCount(n: number): string { FILE: src/components/skills/FilterBar.tsx type FilterBarProps (line 6) | type FilterBarProps = { FILE: src/components/skills/Header.tsx type HeaderProps (line 5) | type HeaderProps = { FILE: src/components/skills/LoadingOverlay.tsx type LoadingOverlayProps (line 4) | type LoadingOverlayProps = { FILE: src/components/skills/SettingsPage.tsx type UpdateStatus (line 6) | type UpdateStatus = 'idle' | 'checking' | 'up-to-date' | 'available' | '... type SettingsPageProps (line 8) | type SettingsPageProps = { FILE: src/components/skills/SkillCard.tsx type GithubInfo (line 7) | type GithubInfo = { type SkillCardProps (line 12) | type SkillCardProps = { constant MAX_VISIBLE_BADGES (line 30) | const MAX_VISIBLE_BADGES = 5 FILE: src/components/skills/SkillDetailView.tsx type SkillDetailViewProps (line 25) | type SkillDetailViewProps = { type TreeNode (line 33) | type TreeNode = { function formatSize (line 42) | function formatSize(bytes: number): string { constant EXT_LANG (line 48) | const EXT_LANG: Record = { function getLang (line 96) | function getLang(filename: string): string { function isMarkdown (line 104) | function isMarkdown(filename: string): boolean { function buildTree (line 109) | function buildTree(files: SkillFileEntry[]): TreeNode[] { type FileTreeNodeProps (line 163) | type FileTreeNodeProps = { type FileContentRendererProps (line 235) | type FileContentRendererProps = { function parseFrontmatter (line 241) | function parseFrontmatter(raw: string): { FILE: src/components/skills/SkillsList.tsx type GithubInfo (line 7) | type GithubInfo = { type SkillsListProps (line 12) | type SkillsListProps = { FILE: src/components/skills/TagsPage.tsx type TagsPageProps (line 6) | type TagsPageProps = { FILE: src/components/skills/modals/AddSkillModal.tsx type AddSkillModalProps (line 6) | type AddSkillModalProps = { FILE: src/components/skills/modals/DeleteModal.tsx type DeleteModalProps (line 5) | type DeleteModalProps = { FILE: src/components/skills/modals/EditSkillTagsModal.tsx type EditSkillTagsModalProps (line 6) | type EditSkillTagsModalProps = { FILE: src/components/skills/modals/GitPickModal.tsx type GitPickModalProps (line 6) | type GitPickModalProps = { FILE: src/components/skills/modals/ImportModal.tsx type ImportModalProps (line 6) | type ImportModalProps = { FILE: src/components/skills/modals/LocalPickModal.tsx type LocalPickModalProps (line 6) | type LocalPickModalProps = { FILE: src/components/skills/modals/NewToolsModal.tsx type NewToolsModalProps (line 4) | type NewToolsModalProps = { FILE: src/components/skills/modals/ScopeSyncModal.tsx type ScopeSyncModalProps (line 6) | type ScopeSyncModalProps = { FILE: src/components/skills/modals/SharedDirModal.tsx type SharedDirModalProps (line 4) | type SharedDirModalProps = { FILE: src/components/skills/types.ts type OnboardingVariant (line 1) | type OnboardingVariant = { type OnboardingGroup (line 10) | type OnboardingGroup = { type OnboardingPlan (line 16) | type OnboardingPlan = { type ToolOption (line 22) | type ToolOption = { type TagDto (line 28) | type TagDto = { type TagWithCountDto (line 33) | type TagWithCountDto = TagDto & { type ManagedSkill (line 38) | type ManagedSkill = { type GitSkillCandidate (line 61) | type GitSkillCandidate = { type LocalSkillCandidate (line 67) | type LocalSkillCandidate = { type InstallResultDto (line 75) | type InstallResultDto = { type ToolInfoDto (line 82) | type ToolInfoDto = { type ToolStatusDto (line 90) | type ToolStatusDto = { type UpdateResultDto (line 96) | type UpdateResultDto = { type FeaturedSkillDto (line 104) | type FeaturedSkillDto = { type OnlineSkillDto (line 113) | type OnlineSkillDto = { type SkillFileEntry (line 120) | type SkillFileEntry = { FILE: src/tauri-plugin-dialog.d.ts type OpenDialogOptions (line 2) | type OpenDialogOptions = {