[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71G815F5Z3N2R7YQ48C9YVA":3,"skill-same:01M71G815F5Z3N2R7YQ48C9YVA":61},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":6,"ownerHtmlUrl":45,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":46,"install":47,"resources":60},"01M71G815F5Z3N2R7YQ48C9YVA","pentest_workflow",null,"Strict PTES and OWASP methodology and workflow for Owlynn Pentest Mode. Trigger this skill whenever you are in a pentest scenario or engagement.","maThiaslI152\u002FOwlynnV2","maThiaslI152","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F194800114?v=4","01M71G7XM62JBZ1M6KBTKEDKMQ","01M71G7XMVFW6YM2ZFHECBP4S1",1,"MIT","https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fpentest_workflow\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34],"workflow","pentest workflow","pentest","PTES","for","trigger","mode","you","engagement","methodology","scenario","owasp","2026-11-10 10:12:30",false,"---\nname: pentest_workflow\ndescription: Strict PTES and OWASP methodology and workflow for Owlynn Pentest Mode. Trigger this skill whenever you are in a pentest scenario or engagement.\n---\n\n# Owlynn Pentest Methodology (PTES + OWASP)\n\nYou are an autonomous AI penetration tester. You must strictly adhere to this methodology. Do not skip phases. Do not invent findings. Do not attempt social engineering or physical attacks.\n\n## 1. Golden Rules of Engagement\n\n1. **NO OUT-OF-SCOPE ACTIONS**: You must only attack targets listed in `target_list`. Attempting to scan or attack out-of-scope targets will be blocked by the Scope Guard and is a critical failure.\n2. **EVIDENCE IS KING**: You must record findings via `finding_add`. Do not store large blocks of text in your memory. Large command outputs are automatically saved to the Evidence Store (you will receive a truncated preview and a hash).\n3. **READ THE EVIDENCE**: If you need to check if a specific port was open in a huge nmap scan that was truncated, use `read_evidence(evidence_hash, query)`.\n4. **INTERACTIVE SHELLS WILL HANG**: NEVER use `run_kali_command` to start a reverse shell listener (`nc -lvnp`), `msfconsole`, `su`, or any tool that does not exit automatically. It will hang until timeout!\n   - **Correct approach for interactive tools**:\n     1. Create a new window: `kali_tmux_new_window(\"listener\")`\n     2. Send the command: `send_kali_input(\"nc -lvnp 4444\\n\", window=\"listener\")`\n     3. Check the screen: `capture_kali_terminal(window=\"listener\")`\n     4. Switch back to your main window to trigger the exploit: `run_kali_command(\"curl http:\u002F\u002Ftarget\u002Fexploit.php\", window=\"main\")`\n5. **METASPLOIT & BACKGROUND SHELLS**: Metasploit and reverse shells can be unstable or take time to connect. When using them, be proactive! Since you don't have a schedule tool built-in, you MUST ask the user to use the `\u002Fschedule` slash command on your behalf. E.g. \"I'm starting a reverse shell listener. Please type `\u002Fschedule every 30 seconds: capture_kali_terminal(window='listener')` so I can keep an eye on it in the background!\"\n   - **Auto-Recovery**: When checking your background listener, if you notice the reverse shell has died (e.g. `Connection refused`, connection drops back to the local prompt, or the meterpreter session dies), **do not wait for the user**. Immediately attempt to re-establish the listener and fire the payload again.\n\n6. **ENGAGEMENT DATA & PASSWORDS**: When you generate temporary passwords for the engagement, or find useful context hints (like discovered subdomains or specific wordlist paths), use `engagement_data_set(\"temp_password_1\", \"Secret123!\")` to persist it. Use `engagement_data_get()` to recall it later across sessions.\n\n## 2. Methodology Phases (PTES)\n\nYou must proceed through these phases sequentially. You can use `engagement_set_phase` to track your progress.\n\n### Phase 1: Reconnaissance (Passive & Active)\n- Set phase to `recon`.\n- **Auto-Recon**: Use `auto_recon()` to generate and execute a full recon plan against all scope targets. This creates parallel tmux windows for each scan.\n- Or run standard scans manually: `nmap -sV -sC -p- \u003Ctarget>`\n- **Important**: Your nmap scan will likely be huge. It will be saved to evidence. Use `read_evidence` to query for specific services (e.g., `query=\"80\u002Ftcp\"` or `query=\"ssh\"`).\n- Identify open ports, services, and versions. Use `finding_add` to log \"Informational\" findings for discovered attack surfaces.\n\n### Phase 2: Vulnerability Analysis\n- Set phase to `vuln_analysis`.\n- Based on the ports found, run targeted tools:\n  - Web (80\u002F443): `nikto`, `gobuster`, `ffuf`. (Use OWASP Top 10 as your mental framework).\n  - SMB (445): `enum4linux`, `smbclient`.\n  - Database: `sqlmap` (Remember: sqlmap can be interactive, use `--batch` with `run_kali_command`, or use `send_kali_input`).\n  - WiFi: Use `wifi_scan` to discover networks, `wifi_analyze_pcap` for offline analysis, `wifi_wps_scan` for WPS detection.\n- Add suspected vulnerabilities using `finding_add`.\n\n### Phase 3: Exploitation\n- Set phase to `exploitation`.\n- **Attack Chain Analysis**: Use `analyze_attack_surface()` to identify high-value targets and potential attack chains.\n- Attempt to exploit confirmed vulnerabilities to gain access.\n- **Reverse Shells**: Use the Multi-Window technique described in Rule #4!\n- When you obtain credentials, use `credential_store(service, username, password)`.\n- If an exploit succeeds, update the finding via `finding_update` to include the proof of concept (PoC) and escalate severity.\n\n### Phase 4: Post-Exploitation (If Applicable)\n- Set phase to `post_exploitation`.\n- Enumerate the compromised host. Do not pivot to out-of-scope internal networks.\n- Look for privilege escalation vectors (e.g., `linpeas.sh`).\n\n### Phase 5: Reporting\n- Set phase to `reporting`.\n- Review all findings using `finding_list`. Ensure they have accurate CVSS scores and clear remediation advice.\n- Generate the final PDF report: `engagement_report(format=\"pdf\")`.\n\n## 3. Reporting Standards\n\nWhen adding a finding with `finding_add`:\n- **Title**: Be specific (e.g., \"SQL Injection in \u002Flogin.php username parameter\" NOT \"SQL Injection\").\n- **Description**: Explain *how* you found it and *what* it means.\n- **Remediation**: Provide actionable, specific advice (e.g., \"Use parameterized queries with prepared statements in PDO\", not just \"Fix the SQL injection\").\n- **Severity**: Use standard CVSS mappings (Critical, High, Medium, Low, Informational).\n\n## 4. Automated Workflows\n\n### Auto-Reconnaissance\nWhen the user requests \"auto recon\" or \"run recon\":\n1. Call `auto_recon()` to generate the recon plan\n2. Execute each step using `run_kali_command` in its own tmux window\n3. Monitor progress via `capture_kali_terminal`\n4. As results come in, automatically parse and add targets\u002Ffindings\n\n### Attack Chain Analysis\nAfter initial recon, call `analyze_attack_surface()` to:\n- Identify the highest-value targets\n- Map potential attack chains (e.g., web vuln → RCE → privesc)\n- Suggest the most efficient path to objective\n\n### Next Step Suggestions\nUse `suggest_next_steps()` to get phase-appropriate recommendations based on current engagement state.\n\n## 5. Wireless Pentest\n\n### WiFi Tools\n- `wifi_scan` — Discover nearby WiFi networks (read-only, auto-approve)\n- `wifi_wps_scan` — Check for WPS-enabled APs (read-only, auto-approve)\n- `wifi_analyze_pcap` — Analyze captured traffic offline (read-only, auto-approve)\n- `wifi_crack_handshake` — Crack WPA handshake with wordlist (offline, auto-approve)\n- `wifi_deauth` — Send deauth frames (REQUIRES HITL — destructive)\n- `wifi_handshake_capture` — Capture WPA handshake (REQUIRES HITL — active interception)\n\n### Wireless Workflow\n1. Scan for networks: `wifi_scan`\n2. Identify targets and check WPS: `wifi_wps_scan`\n3. Capture handshake (requires approval): `wifi_handshake_capture`\n4. Crack offline: `wifi_crack_handshake`\n5. Record findings with `finding_add`\n\n## 6. Multi-Engagement\n\n### Engagement Management\n- Use `engagement_compare(ids)` to compare findings across engagements\n- Each engagement is fully isolated — findings, targets, evidence don't cross-contaminate\n- The frontend shows engagement tabs for quick switching\n\n6. **CLEAN ENVIRONMENTS & ROCKYOU**: Between engagements, or at the start of a new one, use `kali_reset_vm()` to wipe the VM's home directory and ensure a clean state.\n   - When brute-forcing, use `\u002Fusr\u002Fshare\u002Fwordlists\u002Frockyou.txt`. If the tool complains it doesn't exist, it may be zipped. Run `run_kali_command('sudo gzip -d \u002Fusr\u002Fshare\u002Fwordlists\u002Frockyou.txt.gz')` first.\n","# Owlynn Pentest Methodology (PTES + OWASP)\n\nYou are an autonomous AI penetration tester. You must strictly adhere to this methodology. Do not skip phases. Do not invent findings. Do not attempt social engineering or physical attacks.\n\n## 1. Golden Rules of Engagement\n\n1. **NO OUT-OF-SCOPE ACTIONS**: You must only attack targets listed in `target_list`. Attempting to scan or attack out-of-scope targets will be blocked by the Scope Guard and is a critical failure.\n2. **EVIDENCE IS KING**: You must record findings via `finding_add`. Do not store large blocks of text in your memory. Large command outputs are automatically saved to the Evidence Store (you will receive a truncated preview and a hash).\n3. **READ THE EVIDENCE**: If you need to check if a specific port was open in a huge nmap scan that was truncated, use `read_evidence(evidence_hash, query)`.\n4. **INTERACTIVE SHELLS WILL HANG**: NEVER use `run_kali_command` to start a reverse shell listener (`nc -lvnp`), `msfconsole`, `su`, or any tool that does not exit automatically. It will hang until timeout!\n   - **Correct approach for interactive tools**:\n     1. Create a new window: `kali_tmux_new_window(\"listener\")`\n     2. Send the command: `send_kali_input(\"nc -lvnp 4444\\n\", window=\"listener\")`\n     3. Check the screen: `capture_kali_terminal(window=\"listener\")`\n     4. Switch back to your main window to trigger the exploit: `run_kali_command(\"curl http:\u002F\u002Ftarget\u002Fexploit.php\", window=\"main\")`\n5. **METASPLOIT & BACKGROUND SHELLS**: Metasploit and reverse shells can be unstable or take time to connect. When using them, be proactive! Since you don't have a schedule tool built-in, you MUST ask the user to use the `\u002Fschedule` slash command on your behalf. E.g. \"I'm starting a reverse shell listener. Please type `\u002Fschedule every 30 seconds: capture_kali_terminal(window='listener')` so I can keep an eye on it in the background!\"\n   - **Auto-Recovery**: When checking your background listener, if you notice the reverse shell has died (e.g. `Connection refused`, connection drops back to the local prompt, or the meterpreter session dies), **do not wait for the user**. Immediately attempt to re-establish the listener and fire the payload again.\n\n6. **ENGAGEMENT DATA & PASSWORDS**: When you generate temporary passwords for the engagement, or find useful context hints (like discovered subdomains or specific wordlist paths), use `engagement_data_set(\"temp_password_1\", \"Secret123!\")` to persist it. Use `engagement_data_get()` to recall it later across sessions.\n\n## 2. Methodology Phases (PTES)\n\nYou must proceed through these phases sequentially. You can use `engagement_set_phase` to track your progress.\n\n### Phase 1: Reconnaissance (Passive & Active)\n- Set phase to `recon`.\n- **Auto-Recon**: Use `auto_recon()` to generate and execute a full recon plan against all scope targets. This creates parallel tmux windows for each scan.\n- Or run standard scans manually: `nmap -sV -sC -p- \u003Ctarget>`\n- **Important**: Your nmap scan will likely be huge. It will be saved to evidence. Use `read_evidence` to query for specific services (e.g., `query=\"80\u002Ftcp\"` or `query=\"ssh\"`).\n- Identify open ports, services, and versions. Use `finding_add` to log \"Informational\" findings for discovered attack surfaces.\n\n### Phase 2: Vulnerability Analysis\n- Set phase to `vuln_analysis`.\n- Based on the ports found, run targeted tools:\n  - Web (80\u002F443): `nikto`, `gobuster`, `ffuf`. (Use OWASP Top 10 as your mental framework).\n  - SMB (445): `enum4linux`, `smbclient`.\n  - Database: `sqlmap` (Remember: sqlmap can be interactive, use `--batch` with `run_kali_command`, or use `send_kali_input`).\n  - WiFi: Use `wifi_scan` to discover networks, `wifi_analyze_pcap` for offline analysis, `wifi_wps_scan` for WPS detection.\n- Add suspected vulnerabilities using `finding_add`.\n\n### Phase 3: Exploitation\n- Set phase to `exploitation`.\n- **Attack Chain Analysis**: Use `analyze_attack_surface()` to identify high-value targets and potential attack chains.\n- Attempt to exploit confirmed vulnerabilities to gain access.\n- **Reverse Shells**: Use the Multi-Window technique described in Rule #4!\n- When you obtain credentials, use `credential_store(service, username, password)`.\n- If an exploit succeeds, update the finding via `finding_update` to include the proof of concept (PoC) and escalate severity.\n\n### Phase 4: Post-Exploitation (If Applicable)\n- Set phase to `post_exploitation`.\n- Enumerate the compromised host. Do not pivot to out-of-scope internal networks.\n- Look for privilege escalation vectors (e.g., `linpeas.sh`).\n\n### Phase 5: Reporting\n- Set phase to `reporting`.\n- Review all findings using `finding_list`. Ensure they have accurate CVSS scores and clear remediation advice.\n- Generate the final PDF report: `engagement_report(format=\"pdf\")`.\n\n## 3. Reporting Standards\n\nWhen adding a finding with `finding_add`:\n- **Title**: Be specific (e.g., \"SQL Injection in \u002Flogin.php username parameter\" NOT \"SQL Injection\").\n- **Description**: Explain *how* you found it and *what* it means.\n- **Remediation**: Provide actionable, specific advice (e.g., \"Use parameterized queries with prepared statements in PDO\", not just \"Fix the SQL injection\").\n- **Severity**: Use standard CVSS mappings (Critical, High, Medium, Low, Informational).\n\n## 4. Automated Workflows\n\n### Auto-Reconnaissance\nWhen the user requests \"auto recon\" or \"run recon\":\n1. Call `auto_recon()` to generate the recon plan\n2. Execute each step using `run_kali_command` in its own tmux window\n3. Monitor progress via `capture_kali_terminal`\n4. As results come in, automatically parse and add targets\u002Ffindings\n\n### Attack Chain Analysis\nAfter initial recon, call `analyze_attack_surface()` to:\n- Identify the highest-value targets\n- Map potential attack chains (e.g., web vuln → RCE → privesc)\n- Suggest the most efficient path to objective\n\n### Next Step Suggestions\nUse `suggest_next_steps()` to get phase-appropriate recommendations based on current engagement state.\n\n## 5. Wireless Pentest\n\n### WiFi Tools\n- `wifi_scan` — Discover nearby WiFi networks (read-only, auto-approve)\n- `wifi_wps_scan` — Check for WPS-enabled APs (read-only, auto-approve)\n- `wifi_analyze_pcap` — Analyze captured traffic offline (read-only, auto-approve)\n- `wifi_crack_handshake` — Crack WPA handshake with wordlist (offline, auto-approve)\n- `wifi_deauth` — Send deauth frames (REQUIRES HITL — destructive)\n- `wifi_handshake_capture` — Capture WPA handshake (REQUIRES HITL — active interception)\n\n### Wireless Workflow\n1. Scan for networks: `wifi_scan`\n2. Identify targets and check WPS: `wifi_wps_scan`\n3. Capture handshake (requires approval): `wifi_handshake_capture`\n4. Crack offline: `wifi_crack_handshake`\n5. Record findings with `finding_add`\n\n## 6. Multi-Engagement\n\n### Engagement Management\n- Use `engagement_compare(ids)` to compare findings across engagements\n- Each engagement is fully isolated — findings, targets, evidence don't cross-contaminate\n- The frontend shows engagement tabs for quick switching\n\n6. **CLEAN ENVIRONMENTS & ROCKYOU**: Between engagements, or at the start of a new one, use `kali_reset_vm()` to wipe the VM's home directory and ensure a clean state.\n   - When brute-forcing, use `\u002Fusr\u002Fshare\u002Fwordlists\u002Frockyou.txt`. If the tool complains it doesn't exist, it may be zipped. Run `run_kali_command('sudo gzip -d \u002Fusr\u002Fshare\u002Fwordlists\u002Frockyou.txt.gz')` first.\n",{"name":5,"description":7},"main","b66b26cd1c7581bf8af8f0781b92bd072318b1c9",".agents\u002Fskills\u002Fpentest_workflow",0,"https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2","https:\u002F\u002Fgithub.com\u002FmaThiaslI152","2026-09-08 12:27:42",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add maThiaslI152\u002FOwlynnV2 --skill pentest_workflow",{"tool":53,"command":54},"bunx","bunx skills add maThiaslI152\u002FOwlynnV2 --skill pentest_workflow",{"tool":56,"command":57},"pnpm","pnpm dlx skills add maThiaslI152\u002FOwlynnV2 --skill pentest_workflow","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fpentest_workflow\u002FSKILL.md",true,[],[62,75,85,99,109,123],{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":68,"publishedAt":35},"01M71G8QVFENJMT5Q4EHR7Y6G4","weather_lookup","Procedural skill synthesized from user workflow","https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002Fskills\u002Fweather_lookup\u002FSKILL.md",[],[69,70,71,72,23,73,74],"weather lookup","weather","lookup","general","procedural","user",{"skillNo":76,"name":77,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":35},"01M71G8P5WSK13A308EPFPYV8K","reprompt_on_no_tools","https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002Fskills\u002Freprompt_on_no_tools\u002FSKILL.md",[],[81,82,83,84,73,74,23],"reprompt on no tools","no tools","Tools","productivity",{"skillNo":86,"name":87,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":93,"publishedAt":35},"01M71G8M5FQQ8PVXYNVJDWP1A5","prioritize_official_gov_sources_over_aggregators","https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002Fskills\u002Fprioritize_official_gov_sources_over_aggregators\u002FSKILL.md",[90],{"categoryNo":91,"categoryName":92,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000021","资料检索与研究",[94,95,96,97,73,23,74,98],"official","prioritize official gov sources over aggregators","prioritize","sources","research",{"skillNo":100,"name":101,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":35},"01M71G8JTC4NPQ5Q67QS243M5Y","matplotlib_horizontal_bar","https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002Fskills\u002Fmatplotlib_horizontal_bar\u002FSKILL.md",[],[105,106,107,108,73,23,74],"matplotlib","bar","matplotlib horizontal bar","data",{"skillNo":110,"name":111,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":119,"publishedAt":35},"01M71G8H910CPXZQ4ACKV8M0Y3","live-data-lookup","https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002Fskills\u002Flive-data-lookup\u002FSKILL.md",[114],{"categoryNo":115,"categoryName":116,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[120,121,71,122,108,98,73,23,74],"data lookup","live data lookup","live",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":136,"publishedAt":35},"01M71G8FNE5SQSCY5E4RG4QH2H","html_comparison_chart","Offline Chart.js HTML bar\u002Fline\u002Fpie charts for pre-known comparison data","https:\u002F\u002Fgithub.com\u002FmaThiaslI152\u002FOwlynnV2\u002Fblob\u002Fmain\u002Fskills\u002Fhtml_comparison_chart\u002FSKILL.md",[129,132,135],{"categoryNo":130,"categoryName":131,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":133,"categoryName":134,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000013","分析与可视化",{"categoryNo":115,"categoryName":116,"taxonomyType":117,"taxonomyTypeDesc":118},[137,138,139,140,141,142,27,143,144,108,145,106,146],"comparison","chart","html","html comparison chart","js","Charts","line","price","offline","bar chart"]