[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EC2MV2S3TCT0VJAV688MT3":3,"skill-same:01M6EC2MV2S3TCT0VJAV688MT3":345},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":25,"publishedAt":28,"linkOnly":29,"markdownContent":30,"markdownBody":30,"frontMatter":31,"refName":32,"commitSha":33,"skillDirectory":34,"forksCount":35,"repositoryHtmlUrl":36,"repositoryHomepageUrl":37,"ownerHtmlUrl":38,"ownerBlogUrl":6,"ownerDescription":39,"updatedAt":40,"install":41,"resources":54},"01M6EC2MV2S3TCT0VJAV688MT3","cbioportal-database",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FK-Dense-AI\u002Fclaude-scientific-skills\u002Fcbioportal-database\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[26,27],"database","cbioportal database","2026-11-10 10:12:30",false,"# cBioPortal Database\n\n## Overview\n\ncBioPortal for Cancer Genomics (https:\u002F\u002Fwww.cbioportal.org\u002F) is an open-access resource for exploring, visualizing, and analyzing multidimensional cancer genomics data. It hosts data from The Cancer Genome Atlas (TCGA), AACR Project GENIE, MSK-IMPACT, and hundreds of other cancer studies — covering mutations, copy number alterations (CNA), structural variants, mRNA\u002Fprotein expression, methylation, and clinical data for thousands of cancer samples.\n\n**Key resources:**\n- cBioPortal website: https:\u002F\u002Fwww.cbioportal.org\u002F\n- REST API: https:\u002F\u002Fwww.cbioportal.org\u002Fapi\u002F\n- API docs (Swagger): https:\u002F\u002Fwww.cbioportal.org\u002Fapi\u002Fswagger-ui\u002Findex.html\n- Python client: `bravado` or `requests`\n- GitHub: https:\u002F\u002Fgithub.com\u002FcBioPortal\u002Fcbioportal\n\n## When to Use This Skill\n\nUse cBioPortal when:\n\n- **Mutation landscape**: What fraction of a cancer type has mutations in a specific gene?\n- **Oncogene\u002FTSG validation**: Is a gene frequently mutated, amplified, or deleted in cancer?\n- **Co-mutation patterns**: Are mutations in gene A and gene B mutually exclusive or co-occurring?\n- **Survival analysis**: Do mutations in a gene associate with better or worse patient outcomes?\n- **Alteration profiles**: What types of alterations (missense, truncating, amplification, deletion) affect a gene?\n- **Pan-cancer analysis**: Compare alteration frequencies across cancer types\n- **Clinical associations**: Link genomic alterations to clinical variables (stage, grade, treatment response)\n- **TCGA\u002FGENIE exploration**: Systematic access to TCGA and clinical sequencing datasets\n\n## Core Capabilities\n\n### 1. cBioPortal REST API\n\nBase URL: `https:\u002F\u002Fwww.cbioportal.org\u002Fapi`\n\nThe API is RESTful, returns JSON, and requires no API key for public data.\n\n```python\nimport requests\n\nBASE_URL = \"https:\u002F\u002Fwww.cbioportal.org\u002Fapi\"\nHEADERS = {\"Accept\": \"application\u002Fjson\", \"Content-Type\": \"application\u002Fjson\"}\n\ndef cbioportal_get(endpoint, params=None):\n    url = f\"{BASE_URL}\u002F{endpoint}\"\n    response = requests.get(url, params=params, headers=HEADERS)\n    response.raise_for_status()\n    return response.json()\n\ndef cbioportal_post(endpoint, body):\n    url = f\"{BASE_URL}\u002F{endpoint}\"\n    response = requests.post(url, json=body, headers=HEADERS)\n    response.raise_for_status()\n    return response.json()\n```\n\n### 2. Browse Studies\n\n```python\ndef get_all_studies():\n    \"\"\"List all available cancer studies.\"\"\"\n    return cbioportal_get(\"studies\", {\"pageSize\": 500})\n\n# Each study has:\n# studyId: unique identifier (e.g., \"brca_tcga\")\n# name: human-readable name\n# description: dataset description\n# cancerTypeId: cancer type abbreviation\n# referenceGenome: GRCh37 or GRCh38\n# pmid: associated publication\n\nstudies = get_all_studies()\nprint(f\"Total studies: {len(studies)}\")\n\n# Common TCGA study IDs:\n# brca_tcga, luad_tcga, coadread_tcga, gbm_tcga, prad_tcga,\n# skcm_tcga, blca_tcga, hnsc_tcga, lihc_tcga, stad_tcga\n\n# Filter for TCGA studies\ntcga_studies = [s for s in studies if \"tcga\" in s[\"studyId\"]]\nprint([s[\"studyId\"] for s in tcga_studies[:10]])\n```\n\n### 3. Molecular Profiles\n\nEach study has multiple molecular profiles (mutation, CNA, expression, etc.):\n\n```python\ndef get_molecular_profiles(study_id):\n    \"\"\"Get all molecular profiles for a study.\"\"\"\n    return cbioportal_get(f\"studies\u002F{study_id}\u002Fmolecular-profiles\")\n\nprofiles = get_molecular_profiles(\"brca_tcga\")\nfor p in profiles:\n    print(f\"  {p['molecularProfileId']}: {p['name']} ({p['molecularAlterationType']})\")\n\n# Alteration types:\n# MUTATION_EXTENDED — somatic mutations\n# COPY_NUMBER_ALTERATION — CNA (GISTIC)\n# MRNA_EXPRESSION — mRNA expression\n# PROTEIN_LEVEL — RPPA protein expression\n# STRUCTURAL_VARIANT — fusions\u002Frearrangements\n```\n\n### 4. Mutation Data\n\n```python\ndef get_mutations(molecular_profile_id, entrez_gene_ids, sample_list_id=None):\n    \"\"\"Get mutations for specified genes in a molecular profile.\"\"\"\n    body = {\n        \"entrezGeneIds\": entrez_gene_ids,\n        \"sampleListId\": sample_list_id or molecular_profile_id.replace(\"_mutations\", \"_all\")\n    }\n    return cbioportal_post(\n        f\"molecular-profiles\u002F{molecular_profile_id}\u002Fmutations\u002Ffetch\",\n        body\n    )\n\n# BRCA1 Entrez ID is 672, TP53 is 7157, PTEN is 5728\nmutations = get_mutations(\"brca_tcga_mutations\", entrez_gene_ids=[7157])  # TP53\n\n# Each mutation record contains:\n# patientId, sampleId, entrezGeneId, gene.hugoGeneSymbol\n# mutationType (Missense_Mutation, Nonsense_Mutation, Frame_Shift_Del, etc.)\n# proteinChange (e.g., \"R175H\")\n# variantClassification, variantType\n# ncbiBuild, chr, startPosition, endPosition, referenceAllele, variantAllele\n# mutationStatus (Somatic\u002FGermline)\n# alleleFreqT (tumor VAF)\n\nimport pandas as pd\ndf = pd.DataFrame(mutations)\nprint(df[[\"patientId\", \"mutationType\", \"proteinChange\", \"alleleFreqT\"]].head())\nprint(f\"\\nMutation types:\\n{df['mutationType'].value_counts()}\")\n```\n\n### 5. Copy Number Alteration Data\n\n```python\ndef get_cna(molecular_profile_id, entrez_gene_ids):\n    \"\"\"Get discrete CNA data (GISTIC: -2, -1, 0, 1, 2).\"\"\"\n    body = {\n        \"entrezGeneIds\": entrez_gene_ids,\n        \"sampleListId\": molecular_profile_id.replace(\"_gistic\", \"_all\").replace(\"_cna\", \"_all\")\n    }\n    return cbioportal_post(\n        f\"molecular-profiles\u002F{molecular_profile_id}\u002Fdiscrete-copy-number\u002Ffetch\",\n        body\n    )\n\n# GISTIC values:\n# -2 = Deep deletion (homozygous loss)\n# -1 = Shallow deletion (heterozygous loss)\n#  0 = Diploid (neutral)\n#  1 = Low-level gain\n#  2 = High-level amplification\n\ncna_data = get_cna(\"brca_tcga_gistic\", entrez_gene_ids=[1956])  # EGFR\ndf_cna = pd.DataFrame(cna_data)\nprint(df_cna[\"value\"].value_counts())\n```\n\n### 6. Alteration Frequency (OncoPrint-style)\n\n```python\ndef get_alteration_frequency(study_id, gene_symbols, alteration_types=None):\n    \"\"\"Compute alteration frequencies for genes across a cancer study.\"\"\"\n    import requests, pandas as pd\n\n    # Get sample list\n    samples = requests.get(\n        f\"{BASE_URL}\u002Fstudies\u002F{study_id}\u002Fsample-lists\",\n        headers=HEADERS\n    ).json()\n    all_samples_id = next(\n        (s[\"sampleListId\"] for s in samples if s[\"category\"] == \"all_cases_in_study\"), None\n    )\n    total_samples = len(requests.get(\n        f\"{BASE_URL}\u002Fsample-lists\u002F{all_samples_id}\u002Fsample-ids\",\n        headers=HEADERS\n    ).json())\n\n    # Get gene Entrez IDs\n    gene_data = requests.post(\n        f\"{BASE_URL}\u002Fgenes\u002Ffetch\",\n        json=[{\"hugoGeneSymbol\": g} for g in gene_symbols],\n        headers=HEADERS\n    ).json()\n    entrez_ids = [g[\"entrezGeneId\"] for g in gene_data]\n\n    # Get mutations\n    mutation_profile = f\"{study_id}_mutations\"\n    mutations = get_mutations(mutation_profile, entrez_ids, all_samples_id)\n\n    freq = {}\n    for g_symbol, e_id in zip(gene_symbols, entrez_ids):\n        mutated = len(set(m[\"patientId\"] for m in mutations if m[\"entrezGeneId\"] == e_id))\n        freq[g_symbol] = mutated \u002F total_samples * 100\n\n    return freq\n\n# Example\nfreq = get_alteration_frequency(\"brca_tcga\", [\"TP53\", \"PIK3CA\", \"BRCA1\", \"BRCA2\"])\nfor gene, pct in sorted(freq.items(), key=lambda x: -x[1]):\n    print(f\"  {gene}: {pct:.1f}%\")\n```\n\n### 7. Clinical Data\n\n```python\ndef get_clinical_data(study_id, attribute_ids=None):\n    \"\"\"Get patient-level clinical data.\"\"\"\n    params = {\"studyId\": study_id}\n    all_clinical = cbioportal_get(\n        \"clinical-data\u002Ffetch\",\n        params\n    )\n    # Returns list of {patientId, studyId, clinicalAttributeId, value}\n\n# Clinical attributes include:\n# OS_STATUS, OS_MONTHS, DFS_STATUS, DFS_MONTHS (survival)\n# TUMOR_STAGE, GRADE, AGE, SEX, RACE\n# Study-specific attributes vary\n\ndef get_clinical_attributes(study_id):\n    \"\"\"List all available clinical attributes for a study.\"\"\"\n    return cbioportal_get(f\"studies\u002F{study_id}\u002Fclinical-attributes\")\n```\n\n## Query Workflows\n\n### Workflow 1: Gene Alteration Profile in a Cancer Type\n\n```python\nimport requests, pandas as pd\n\ndef alteration_profile(study_id, gene_symbol):\n    \"\"\"Full alteration profile for a gene in a cancer study.\"\"\"\n\n    # 1. Get gene Entrez ID\n    gene_info = requests.post(\n        f\"{BASE_URL}\u002Fgenes\u002Ffetch\",\n        json=[{\"hugoGeneSymbol\": gene_symbol}],\n        headers=HEADERS\n    ).json()[0]\n    entrez_id = gene_info[\"entrezGeneId\"]\n\n    # 2. Get mutations\n    mutations = get_mutations(f\"{study_id}_mutations\", [entrez_id])\n    mut_df = pd.DataFrame(mutations) if mutations else pd.DataFrame()\n\n    # 3. Get CNAs\n    cna = get_cna(f\"{study_id}_gistic\", [entrez_id])\n    cna_df = pd.DataFrame(cna) if cna else pd.DataFrame()\n\n    # 4. Summary\n    n_mut = len(set(mut_df[\"patientId\"])) if not mut_df.empty else 0\n    n_amp = len(cna_df[cna_df[\"value\"] == 2]) if not cna_df.empty else 0\n    n_del = len(cna_df[cna_df[\"value\"] == -2]) if not cna_df.empty else 0\n\n    return {\"mutations\": n_mut, \"amplifications\": n_amp, \"deep_deletions\": n_del}\n\nresult = alteration_profile(\"brca_tcga\", \"PIK3CA\")\nprint(result)\n```\n\n### Workflow 2: Pan-Cancer Gene Mutation Frequency\n\n```python\nimport requests, pandas as pd\n\ndef pan_cancer_mutation_freq(gene_symbol, cancer_study_ids=None):\n    \"\"\"Mutation frequency of a gene across multiple cancer types.\"\"\"\n    studies = get_all_studies()\n    if cancer_study_ids:\n        studies = [s for s in studies if s[\"studyId\"] in cancer_study_ids]\n\n    results = []\n    for study in studies[:20]:  # Limit for demo\n        try:\n            freq = get_alteration_frequency(study[\"studyId\"], [gene_symbol])\n            results.append({\n                \"study\": study[\"studyId\"],\n                \"cancer\": study.get(\"cancerTypeId\", \"\"),\n                \"mutation_pct\": freq.get(gene_symbol, 0)\n            })\n        except Exception:\n            pass\n\n    df = pd.DataFrame(results).sort_values(\"mutation_pct\", ascending=False)\n    return df\n```\n\n### Workflow 3: Survival Analysis by Mutation Status\n\n```python\nimport requests, pandas as pd\n\ndef survival_by_mutation(study_id, gene_symbol):\n    \"\"\"Get survival data split by mutation status.\"\"\"\n    # This workflow fetches clinical and mutation data for downstream analysis\n\n    gene_info = requests.post(\n        f\"{BASE_URL}\u002Fgenes\u002Ffetch\",\n        json=[{\"hugoGeneSymbol\": gene_symbol}],\n        headers=HEADERS\n    ).json()[0]\n    entrez_id = gene_info[\"entrezGeneId\"]\n\n    mutations = get_mutations(f\"{study_id}_mutations\", [entrez_id])\n    mutated_patients = set(m[\"patientId\"] for m in mutations)\n\n    clinical = cbioportal_get(\"clinical-data\u002Ffetch\", {\"studyId\": study_id})\n    clinical_df = pd.DataFrame(clinical)\n\n    os_data = clinical_df[clinical_df[\"clinicalAttributeId\"].isin([\"OS_MONTHS\", \"OS_STATUS\"])]\n    os_wide = os_data.pivot(index=\"patientId\", columns=\"clinicalAttributeId\", values=\"value\")\n    os_wide[\"mutated\"] = os_wide.index.isin(mutated_patients)\n\n    return os_wide\n```\n\n## Key API Endpoints Summary\n\n| Endpoint | Description |\n|----------|-------------|\n| `GET \u002Fstudies` | List all studies |\n| `GET \u002Fstudies\u002F{studyId}\u002Fmolecular-profiles` | Molecular profiles for a study |\n| `POST \u002Fmolecular-profiles\u002F{profileId}\u002Fmutations\u002Ffetch` | Get mutation data |\n| `POST \u002Fmolecular-profiles\u002F{profileId}\u002Fdiscrete-copy-number\u002Ffetch` | Get CNA data |\n| `POST \u002Fmolecular-profiles\u002F{profileId}\u002Fmolecular-data\u002Ffetch` | Get expression data |\n| `GET \u002Fstudies\u002F{studyId}\u002Fclinical-attributes` | Available clinical variables |\n| `GET \u002Fclinical-data\u002Ffetch` | Clinical data |\n| `POST \u002Fgenes\u002Ffetch` | Gene metadata by symbol or Entrez ID |\n| `GET \u002Fstudies\u002F{studyId}\u002Fsample-lists` | Sample lists |\n\n## Best Practices\n\n- **Know your study IDs**: Use the Swagger UI or `GET \u002Fstudies` to find the correct study ID\n- **Use sample lists**: Each study has an `all` sample list and subsets; always specify the appropriate one\n- **TCGA vs. GENIE**: TCGA data is comprehensive but older; GENIE has more recent clinical sequencing data\n- **Entrez gene IDs**: The API uses Entrez IDs — use `\u002Fgenes\u002Ffetch` to convert from symbols\n- **Handle 404s**: Some molecular profiles may not exist for all studies\n- **Rate limiting**: Add delays for bulk queries; consider downloading data files for large-scale analyses\n\n## Data Downloads\n\nFor large-scale analyses, download study data directly:\n```bash\n# Download TCGA BRCA data\nwget https:\u002F\u002Fcbioportal-datahub.s3.amazonaws.com\u002Fbrca_tcga.tar.gz\n```\n\n## Additional Resources\n\n- **cBioPortal website**: https:\u002F\u002Fwww.cbioportal.org\u002F\n- **API Swagger UI**: https:\u002F\u002Fwww.cbioportal.org\u002Fapi\u002Fswagger-ui\u002Findex.html\n- **Documentation**: https:\u002F\u002Fdocs.cbioportal.org\u002F\n- **GitHub**: https:\u002F\u002Fgithub.com\u002FcBioPortal\u002Fcbioportal\n- **Data hub**: https:\u002F\u002Fdatahub.cbioportal.org\u002F\n- **Citation**: Cerami E et al. (2012) Cancer Discovery. PMID: 22588877\n- **API clients**: https:\u002F\u002Fdocs.cbioportal.org\u002Fweb-api-and-clients\u002F\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FK-Dense-AI\u002Fclaude-scientific-skills\u002Fcbioportal-database",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":42,"prompt":52,"zipAvailable":53},[43,46,49],{"tool":44,"command":45},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill cbioportal-database",{"tool":47,"command":48},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill cbioportal-database",{"tool":50,"command":51},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill cbioportal-database","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FK-Dense-AI\u002Fclaude-scientific-skills\u002Fcbioportal-database\u002FSKILL.md",true,[55,61,65,71,75,79,83,87,91,95,99,103,107,111,115,119,123,127,131,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263,267,271,275,279,283,287,291,297,301,305,309,313,317,321,325,329,333,337,341],{"path":56,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":59,"sourceHtmlUrl":60},"azure-pipelines-template.yaml","REFERENCE","参考文档",5365,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fazure-pipelines-template.yaml",{"path":62,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":63,"sourceHtmlUrl":64},"checklist.md",8737,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fchecklist.md",{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"customize.toml","OTHER","其他",1550,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fcustomize.toml",{"path":72,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":73,"sourceHtmlUrl":74},"github-actions-template.yaml",10783,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fgithub-actions-template.yaml",{"path":76,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":77,"sourceHtmlUrl":78},"gitlab-ci-template.yaml",4680,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fgitlab-ci-template.yaml",{"path":80,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":81,"sourceHtmlUrl":82},"harness-pipeline-template.yaml",6473,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fharness-pipeline-template.yaml",{"path":84,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":85,"sourceHtmlUrl":86},"instructions.md",1111,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Finstructions.md",{"path":88,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":89,"sourceHtmlUrl":90},"jenkins-pipeline-template.groovy",5099,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fjenkins-pipeline-template.groovy",{"path":92,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":93,"sourceHtmlUrl":94},"resources\u002Fknowledge\u002Fadr-quality-readiness-checklist.md",25356,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fadr-quality-readiness-checklist.md",{"path":96,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":97,"sourceHtmlUrl":98},"resources\u002Fknowledge\u002Fapi-request.md",17129,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fapi-request.md",{"path":100,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":101,"sourceHtmlUrl":102},"resources\u002Fknowledge\u002Fapi-testing-patterns.md",26976,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fapi-testing-patterns.md",{"path":104,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":105,"sourceHtmlUrl":106},"resources\u002Fknowledge\u002Fauth-session.md",16215,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fauth-session.md",{"path":108,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":109,"sourceHtmlUrl":110},"resources\u002Fknowledge\u002Fburn-in.md",6503,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fburn-in.md",{"path":112,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":113,"sourceHtmlUrl":114},"resources\u002Fknowledge\u002Fci-burn-in.md",22486,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fci-burn-in.md",{"path":116,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":117,"sourceHtmlUrl":118},"resources\u002Fknowledge\u002Fcomponent-tdd.md",16149,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fcomponent-tdd.md",{"path":120,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":121,"sourceHtmlUrl":122},"resources\u002Fknowledge\u002Fcontract-testing.md",38991,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fcontract-testing.md",{"path":124,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":125,"sourceHtmlUrl":126},"resources\u002Fknowledge\u002Fdata-factories.md",15331,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fdata-factories.md",{"path":128,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":129,"sourceHtmlUrl":130},"resources\u002Fknowledge\u002Femail-auth.md",24553,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Femail-auth.md",{"path":132,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":133,"sourceHtmlUrl":134},"resources\u002Fknowledge\u002Ferror-handling.md",22959,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Ferror-handling.md",{"path":136,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":137,"sourceHtmlUrl":138},"resources\u002Fknowledge\u002Ffeature-flags.md",23214,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Ffeature-flags.md",{"path":140,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":141,"sourceHtmlUrl":142},"resources\u002Fknowledge\u002Ffile-utils.md",13745,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Ffile-utils.md",{"path":144,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":145,"sourceHtmlUrl":146},"resources\u002Fknowledge\u002Ffixture-architecture.md",12414,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Ffixture-architecture.md",{"path":148,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":149,"sourceHtmlUrl":150},"resources\u002Fknowledge\u002Ffixtures-composition.md",11249,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Ffixtures-composition.md",{"path":152,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":153,"sourceHtmlUrl":154},"resources\u002Fknowledge\u002Fintercept-network-call.md",13489,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fintercept-network-call.md",{"path":156,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":157,"sourceHtmlUrl":158},"resources\u002Fknowledge\u002Flog.md",11281,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Flog.md",{"path":160,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":161,"sourceHtmlUrl":162},"resources\u002Fknowledge\u002Fnetwork-error-monitor.md",12277,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fnetwork-error-monitor.md",{"path":164,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":165,"sourceHtmlUrl":166},"resources\u002Fknowledge\u002Fnetwork-first.md",16327,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fnetwork-first.md",{"path":168,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":169,"sourceHtmlUrl":170},"resources\u002Fknowledge\u002Fnetwork-recorder.md",15499,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fnetwork-recorder.md",{"path":172,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":173,"sourceHtmlUrl":174},"resources\u002Fknowledge\u002Fnfr-criteria.md",26670,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fnfr-criteria.md",{"path":176,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":177,"sourceHtmlUrl":178},"resources\u002Fknowledge\u002Foverview.md",9663,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Foverview.md",{"path":180,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":181,"sourceHtmlUrl":182},"resources\u002Fknowledge\u002Fpact-broker-webhooks.md",13376,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fpact-broker-webhooks.md",{"path":184,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":185,"sourceHtmlUrl":186},"resources\u002Fknowledge\u002Fpact-consumer-di.md",12005,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fpact-consumer-di.md",{"path":188,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":189,"sourceHtmlUrl":190},"resources\u002Fknowledge\u002Fpact-consumer-framework-setup.md",35846,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fpact-consumer-framework-setup.md",{"path":192,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":193,"sourceHtmlUrl":194},"resources\u002Fknowledge\u002Fpact-mcp.md",8977,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fpact-mcp.md",{"path":196,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":197,"sourceHtmlUrl":198},"resources\u002Fknowledge\u002Fpactjs-utils-consumer-helpers.md",16029,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fpactjs-utils-consumer-helpers.md",{"path":200,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":201,"sourceHtmlUrl":202},"resources\u002Fknowledge\u002Fpactjs-utils-overview.md",10481,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fpactjs-utils-overview.md",{"path":204,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":205,"sourceHtmlUrl":206},"resources\u002Fknowledge\u002Fpactjs-utils-provider-verifier.md",18180,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fpactjs-utils-provider-verifier.md",{"path":208,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":209,"sourceHtmlUrl":210},"resources\u002Fknowledge\u002Fpactjs-utils-request-filter.md",7275,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fpactjs-utils-request-filter.md",{"path":212,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":213,"sourceHtmlUrl":214},"resources\u002Fknowledge\u002Fplaywright-cli.md",14993,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fplaywright-cli.md",{"path":216,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":217,"sourceHtmlUrl":218},"resources\u002Fknowledge\u002Fplaywright-config.md",21457,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fplaywright-config.md",{"path":220,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":221,"sourceHtmlUrl":222},"resources\u002Fknowledge\u002Fprobability-impact.md",19200,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fprobability-impact.md",{"path":224,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":225,"sourceHtmlUrl":226},"resources\u002Fknowledge\u002Frecurse.md",12936,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Frecurse.md",{"path":228,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":229,"sourceHtmlUrl":230},"resources\u002Fknowledge\u002Frisk-governance.md",20965,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Frisk-governance.md",{"path":232,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":233,"sourceHtmlUrl":234},"resources\u002Fknowledge\u002Fselective-testing.md",21846,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fselective-testing.md",{"path":236,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":237,"sourceHtmlUrl":238},"resources\u002Fknowledge\u002Fselector-resilience.md",19784,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fselector-resilience.md",{"path":240,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":241,"sourceHtmlUrl":242},"resources\u002Fknowledge\u002Ftest-healing-patterns.md",21388,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Ftest-healing-patterns.md",{"path":244,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":245,"sourceHtmlUrl":246},"resources\u002Fknowledge\u002Ftest-levels-framework.md",14756,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Ftest-levels-framework.md",{"path":248,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":249,"sourceHtmlUrl":250},"resources\u002Fknowledge\u002Ftest-priorities-matrix.md",11454,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Ftest-priorities-matrix.md",{"path":252,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":253,"sourceHtmlUrl":254},"resources\u002Fknowledge\u002Ftest-quality.md",24580,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Ftest-quality.md",{"path":256,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":257,"sourceHtmlUrl":258},"resources\u002Fknowledge\u002Ftiming-debugging.md",14021,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Ftiming-debugging.md",{"path":260,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":261,"sourceHtmlUrl":262},"resources\u002Fknowledge\u002Fvisual-debugging.md",17480,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fvisual-debugging.md",{"path":264,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":265,"sourceHtmlUrl":266},"resources\u002Fknowledge\u002Fwebhook-module-setup.md",5834,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fwebhook-module-setup.md",{"path":268,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":269,"sourceHtmlUrl":270},"resources\u002Fknowledge\u002Fwebhook-providers.md",6440,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fwebhook-providers.md",{"path":272,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":273,"sourceHtmlUrl":274},"resources\u002Fknowledge\u002Fwebhook-risk-guidance.md",6474,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fwebhook-risk-guidance.md",{"path":276,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":277,"sourceHtmlUrl":278},"resources\u002Fknowledge\u002Fwebhook-template-matchers.md",6011,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fwebhook-template-matchers.md",{"path":280,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":281,"sourceHtmlUrl":282},"resources\u002Fknowledge\u002Fwebhook-testing-fundamentals.md",3185,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fwebhook-testing-fundamentals.md",{"path":284,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":285,"sourceHtmlUrl":286},"resources\u002Fknowledge\u002Fwebhook-timeout-error.md",5726,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fwebhook-timeout-error.md",{"path":288,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":289,"sourceHtmlUrl":290},"resources\u002Fknowledge\u002Fwebhook-waiting-querying.md",7074,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Fknowledge\u002Fwebhook-waiting-querying.md",{"path":292,"resourceType":293,"resourceTypeDesc":294,"sizeBytes":295,"sourceHtmlUrl":296},"resources\u002Ftea-index.csv","ASSET","资产文件",11002,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fresources\u002Ftea-index.csv",{"path":298,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":299,"sourceHtmlUrl":300},"steps-c\u002Fstep-01-preflight.md",5559,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fsteps-c\u002Fstep-01-preflight.md",{"path":302,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":303,"sourceHtmlUrl":304},"steps-c\u002Fstep-01b-resume.md",3747,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fsteps-c\u002Fstep-01b-resume.md",{"path":306,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":307,"sourceHtmlUrl":308},"steps-c\u002Fstep-02-generate-pipeline.md",14647,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fsteps-c\u002Fstep-02-generate-pipeline.md",{"path":310,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":311,"sourceHtmlUrl":312},"steps-c\u002Fstep-03-configure-quality-gates.md",5532,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fsteps-c\u002Fstep-03-configure-quality-gates.md",{"path":314,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":315,"sourceHtmlUrl":316},"steps-c\u002Fstep-04-validate-and-summary.md",2492,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fsteps-c\u002Fstep-04-validate-and-summary.md",{"path":318,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":319,"sourceHtmlUrl":320},"steps-e\u002Fstep-01-assess.md",1253,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fsteps-e\u002Fstep-01-assess.md",{"path":322,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":323,"sourceHtmlUrl":324},"steps-e\u002Fstep-02-apply-edit.md",1475,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fsteps-e\u002Fstep-02-apply-edit.md",{"path":326,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":327,"sourceHtmlUrl":328},"steps-v\u002Fstep-01-validate.md",2833,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fsteps-v\u002Fstep-01-validate.md",{"path":330,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":331,"sourceHtmlUrl":332},"validation-report-20260127-095021.md",2018,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fvalidation-report-20260127-095021.md",{"path":334,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":335,"sourceHtmlUrl":336},"validation-report-20260127-102401.md",3634,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fvalidation-report-20260127-102401.md",{"path":338,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":339,"sourceHtmlUrl":340},"workflow-plan.md",448,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fworkflow-plan.md",{"path":342,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":343,"sourceHtmlUrl":344},"workflow.yaml",1884,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-testarch-ci\u002Fworkflow.yaml",[346,356,366,375,381,388],{"skillNo":347,"name":348,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":349,"categories":350,"keywords":352,"publishedAt":28},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[351],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[353,354,355],"model","model hierarchy","model hierarchy skill",{"skillNo":357,"name":358,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":359,"categories":360,"keywords":362,"publishedAt":28},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[361],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[363,364,365],"MCP","zoom","zoom mcp",{"skillNo":367,"name":368,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":369,"categories":370,"keywords":371,"publishedAt":28},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[372,373,374,364],"sdk","zoom apps sdk","apps",{"skillNo":376,"name":377,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":378,"categories":379,"keywords":380,"publishedAt":28},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[377],{"skillNo":382,"name":383,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":384,"categories":385,"keywords":387,"publishedAt":28},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[386],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[383],{"skillNo":389,"name":390,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":391,"categories":392,"keywords":393,"publishedAt":28},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[390]]