@huicai/cli 2026.714.0 → 2026.721.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/README.md +2 -1
  2. package/bin/huicai.js +83 -0
  3. package/package.json +2 -2
  4. package/skills/ab-testing/SKILL.md +58 -0
  5. package/skills/ab-testing/scripts/__pycache__/ab_test.cpython-312.pyc +0 -0
  6. package/skills/ab-testing/scripts/ab_test.py +71 -0
  7. package/skills/academic-writing/SKILL.md +54 -0
  8. package/skills/accounting-ops/SKILL.md +68 -0
  9. package/skills/accounting-ops/scripts/__pycache__/acct_tools.cpython-312.pyc +0 -0
  10. package/skills/accounting-ops/scripts/acct_tools.py +89 -0
  11. package/skills/ai-agent/SKILL.md +85 -0
  12. package/skills/ai-agent/references/tool-design-checklist.md +51 -0
  13. package/skills/ai-aiops/SKILL.md +73 -0
  14. package/skills/ai-aiops/references/aiops-rollout-checklist.md +36 -0
  15. package/skills/ai-coding/SKILL.md +89 -0
  16. package/skills/ai-coding/references/task-brief-template.md +48 -0
  17. package/skills/ai-compliance/SKILL.md +74 -0
  18. package/skills/ai-compliance/references/genai-compliance-checklist.md +40 -0
  19. package/skills/ai-eval/SKILL.md +80 -0
  20. package/skills/ai-eval/scripts/eval-runner.py +150 -0
  21. package/skills/ai-llm-app/SKILL.md +90 -0
  22. package/skills/ai-llm-app/references/llm-integration-checklist.md +39 -0
  23. package/skills/ai-mlops/SKILL.md +72 -0
  24. package/skills/ai-mlops/scripts/token-cost-calc.py +108 -0
  25. package/skills/ai-multimodal/SKILL.md +86 -0
  26. package/skills/ai-multimodal/scripts/field-validate.py +182 -0
  27. package/skills/ai-prompt/SKILL.md +75 -0
  28. package/skills/ai-prompt/references/prompt-template.md +46 -0
  29. package/skills/ai-rag/SKILL.md +76 -0
  30. package/skills/ai-rag/scripts/chunk-inspect.py +129 -0
  31. package/skills/anomaly-detection/SKILL.md +54 -0
  32. package/skills/anomaly-detection/scripts/__pycache__/anomaly.cpython-312.pyc +0 -0
  33. package/skills/anomaly-detection/scripts/anomaly.py +99 -0
  34. package/skills/api-integration/SKILL.md +74 -0
  35. package/skills/api-integration/references/signing-recipes.md +141 -0
  36. package/skills/arch-design/SKILL.md +57 -0
  37. package/skills/arch-distributed/SKILL.md +81 -0
  38. package/skills/arch-distributed/references/idempotency-review.md +43 -0
  39. package/skills/arch-multitenant/SKILL.md +73 -0
  40. package/skills/arch-multitenant/references/tenant-isolation-checklist.md +34 -0
  41. package/skills/audit-assist/SKILL.md +63 -0
  42. package/skills/audit-assist/scripts/__pycache__/audit_sampling.cpython-312.pyc +0 -0
  43. package/skills/audit-assist/scripts/audit_sampling.py +93 -0
  44. package/skills/audit-chain/SKILL.md +60 -0
  45. package/skills/banking-credit/SKILL.md +59 -0
  46. package/skills/banking-credit/scripts/__pycache__/credit_metrics.cpython-312.pyc +0 -0
  47. package/skills/banking-credit/scripts/credit_metrics.py +53 -0
  48. package/skills/brand-design/SKILL.md +56 -0
  49. package/skills/business-plan/SKILL.md +56 -0
  50. package/skills/capital-ops/SKILL.md +52 -0
  51. package/skills/cicd-pipeline/SKILL.md +85 -0
  52. package/skills/cicd-pipeline/references/pipeline-review-checklist.md +39 -0
  53. package/skills/content-creation/SKILL.md +56 -0
  54. package/skills/corporate-governance/SKILL.md +56 -0
  55. package/skills/crawl-chain/SKILL.md +61 -0
  56. package/skills/customer-service/SKILL.md +51 -0
  57. package/skills/data-analysis/SKILL.md +46 -0
  58. package/skills/data-analysis/scripts/cjk_font.py +56 -0
  59. package/skills/data-chain/SKILL.md +54 -0
  60. package/skills/data-governance/SKILL.md +54 -0
  61. package/skills/data-report-pro/SKILL.md +65 -0
  62. package/skills/data-report-pro/scripts/__pycache__/bigdata.cpython-312.pyc +0 -0
  63. package/skills/data-report-pro/scripts/bigdata.py +79 -0
  64. package/skills/data-streaming/SKILL.md +87 -0
  65. package/skills/data-streaming/references/job-checklist.md +36 -0
  66. package/skills/data-wrangling/SKILL.md +52 -0
  67. package/skills/data-wrangling/scripts/__pycache__/join_tools.cpython-312.pyc +0 -0
  68. package/skills/data-wrangling/scripts/join_tools.py +99 -0
  69. package/skills/db-es/SKILL.md +68 -0
  70. package/skills/db-es/scripts/es-health.sh +72 -0
  71. package/skills/db-migration/SKILL.md +72 -0
  72. package/skills/db-migration/scripts/checksum-mysql.sql +46 -0
  73. package/skills/db-migration/scripts/checksum-postgres.sql +39 -0
  74. package/skills/db-migration/scripts/compare-reports.py +98 -0
  75. package/skills/db-mysql/SKILL.md +78 -0
  76. package/skills/db-mysql/scripts/mysql-health.sql +80 -0
  77. package/skills/db-postgres/SKILL.md +86 -0
  78. package/skills/db-postgres/scripts/pg-health.sql +67 -0
  79. package/skills/db-redis/SKILL.md +83 -0
  80. package/skills/db-redis/scripts/redis-health.sh +92 -0
  81. package/skills/dev-cpp/SKILL.md +94 -0
  82. package/skills/dev-cpp/references/cmake-sanitizer-snippets.md +56 -0
  83. package/skills/dev-cross-platform/SKILL.md +73 -0
  84. package/skills/dev-cross-platform/references/capability-matrix-template.md +39 -0
  85. package/skills/dev-csharp/SKILL.md +96 -0
  86. package/skills/dev-csharp/references/review-checklist.md +37 -0
  87. package/skills/dev-frontend/SKILL.md +91 -0
  88. package/skills/dev-frontend/scripts/bundle-budget.py +106 -0
  89. package/skills/dev-go/SKILL.md +88 -0
  90. package/skills/dev-go/scripts/go-triage.sh +54 -0
  91. package/skills/dev-harmony/SKILL.md +64 -0
  92. package/skills/dev-harmony/references/harmony-checklist.md +40 -0
  93. package/skills/dev-java/SKILL.md +77 -0
  94. package/skills/dev-java/scripts/jvm-triage.sh +84 -0
  95. package/skills/dev-mobile/SKILL.md +82 -0
  96. package/skills/dev-mobile/references/store-compliance-checklist.md +33 -0
  97. package/skills/dev-node/SKILL.md +82 -0
  98. package/skills/dev-node/scripts/node-triage.sh +78 -0
  99. package/skills/dev-php/SKILL.md +86 -0
  100. package/skills/dev-php/scripts/fpm-calc.py +48 -0
  101. package/skills/dev-python/SKILL.md +81 -0
  102. package/skills/dev-python/scripts/venv-doctor.sh +75 -0
  103. package/skills/dev-rust/SKILL.md +84 -0
  104. package/skills/dev-rust/references/cargo-ci-snippets.md +50 -0
  105. package/skills/dev-toolchain/SKILL.md +78 -0
  106. package/skills/dev-toolchain/scripts/secret-scan.sh +83 -0
  107. package/skills/doc-chain/SKILL.md +58 -0
  108. package/skills/doc-compare/SKILL.md +44 -0
  109. package/skills/doc-compare/scripts/compare.py +93 -0
  110. package/skills/docx-author/SKILL.md +39 -0
  111. package/skills/docx-author/scripts/docx_doc.py +161 -0
  112. package/skills/ecommerce-ops/SKILL.md +54 -0
  113. package/skills/ecommerce-ops/scripts/__pycache__/gmv_decompose.cpython-312.pyc +0 -0
  114. package/skills/ecommerce-ops/scripts/gmv_decompose.py +61 -0
  115. package/skills/education-training/SKILL.md +53 -0
  116. package/skills/ehs-safety/SKILL.md +63 -0
  117. package/skills/email-writing/SKILL.md +52 -0
  118. package/skills/eng-ai/SKILL.md +74 -0
  119. package/skills/eng-ai/references/ai-feature-checklist.md +36 -0
  120. package/skills/eng-architecture/SKILL.md +85 -0
  121. package/skills/eng-architecture/scripts/capacity-calc.py +100 -0
  122. package/skills/eng-automation/SKILL.md +84 -0
  123. package/skills/eng-automation/references/automation-inventory.md +38 -0
  124. package/skills/eng-automation/references/routine-presets.md +73 -0
  125. package/skills/eng-collaboration/SKILL.md +76 -0
  126. package/skills/eng-collaboration/references/collab-templates.md +43 -0
  127. package/skills/eng-complex-env/SKILL.md +84 -0
  128. package/skills/eng-complex-env/references/env-dossier-template.md +52 -0
  129. package/skills/eng-complex-env/scripts/env-recon.sh +152 -0
  130. package/skills/eng-data-platform/SKILL.md +81 -0
  131. package/skills/eng-data-platform/references/table-spec-template.md +39 -0
  132. package/skills/eng-database/SKILL.md +79 -0
  133. package/skills/eng-database/references/schema-review-checklist.md +37 -0
  134. package/skills/eng-develop/SKILL.md +76 -0
  135. package/skills/eng-develop/references/dod-checklist.md +43 -0
  136. package/skills/eng-docs/SKILL.md +71 -0
  137. package/skills/eng-docs/references/runbook-template.md +57 -0
  138. package/skills/eng-efficiency/SKILL.md +75 -0
  139. package/skills/eng-efficiency/scripts/dora-calc.py +104 -0
  140. package/skills/eng-infra/SKILL.md +81 -0
  141. package/skills/eng-infra/references/production-readiness.md +46 -0
  142. package/skills/eng-integration/SKILL.md +82 -0
  143. package/skills/eng-integration/references/integration-dossier-template.md +38 -0
  144. package/skills/eng-legacy/SKILL.md +81 -0
  145. package/skills/eng-legacy/references/modernization-workbook.md +46 -0
  146. package/skills/eng-observability/SKILL.md +78 -0
  147. package/skills/eng-observability/scripts/slo-calc.py +82 -0
  148. package/skills/eng-ops/SKILL.md +74 -0
  149. package/skills/eng-ops/references/postmortem-template.md +67 -0
  150. package/skills/eng-performance/SKILL.md +73 -0
  151. package/skills/eng-performance/scripts/perf-baseline.py +110 -0
  152. package/skills/eng-planning/SKILL.md +79 -0
  153. package/skills/eng-planning/scripts/schedule-calc.py +101 -0
  154. package/skills/eng-quality/SKILL.md +74 -0
  155. package/skills/eng-quality/references/test-plan-templates.md +46 -0
  156. package/skills/eng-release/SKILL.md +78 -0
  157. package/skills/eng-release/references/release-plan-template.md +36 -0
  158. package/skills/eng-reliability/SKILL.md +72 -0
  159. package/skills/eng-reliability/references/resilience-review.md +43 -0
  160. package/skills/eng-requirements/SKILL.md +86 -0
  161. package/skills/eng-requirements/references/story-templates.md +47 -0
  162. package/skills/eng-research/SKILL.md +73 -0
  163. package/skills/eng-research/references/research-templates.md +42 -0
  164. package/skills/eng-security/SKILL.md +73 -0
  165. package/skills/eng-security/references/security-review-checklist.md +33 -0
  166. package/skills/eng-ux/SKILL.md +85 -0
  167. package/skills/eng-ux/references/ux-review-checklist.md +36 -0
  168. package/skills/engineering-chain/SKILL.md +101 -0
  169. package/skills/engineering-chain/references/eng-health-review.md +37 -0
  170. package/skills/env-offline/SKILL.md +81 -0
  171. package/skills/env-offline/scripts/bundle-manifest.sh +94 -0
  172. package/skills/env-private-deploy/SKILL.md +72 -0
  173. package/skills/env-private-deploy/references/delivery-templates.md +35 -0
  174. package/skills/env-xinchuang/SKILL.md +73 -0
  175. package/skills/env-xinchuang/references/adaptation-matrix-template.md +41 -0
  176. package/skills/equipment-tpm/SKILL.md +56 -0
  177. package/skills/equipment-tpm/scripts/oee.py +58 -0
  178. package/skills/esg-report/SKILL.md +58 -0
  179. package/skills/esg-report/scripts/carbon_calc.py +61 -0
  180. package/skills/event-management/SKILL.md +51 -0
  181. package/skills/excel-analysis-chain/SKILL.md +73 -0
  182. package/skills/file-ingest/SKILL.md +51 -0
  183. package/skills/file-ingest/scripts/__pycache__/file_toolkit.cpython-312.pyc +0 -0
  184. package/skills/file-ingest/scripts/file_toolkit.py +404 -0
  185. package/skills/finance-analysis/SKILL.md +60 -0
  186. package/skills/finance-analysis/references/ratios.md +54 -0
  187. package/skills/finance-analysis/scripts/fin_ratios.py +132 -0
  188. package/skills/finance-chain/SKILL.md +59 -0
  189. package/skills/financial-modeling/SKILL.md +58 -0
  190. package/skills/financial-modeling/scripts/fin_model.py +123 -0
  191. package/skills/foreign-trade/SKILL.md +54 -0
  192. package/skills/funnel-cohort/SKILL.md +53 -0
  193. package/skills/funnel-cohort/scripts/__pycache__/funnel.cpython-312.pyc +0 -0
  194. package/skills/funnel-cohort/scripts/funnel.py +105 -0
  195. package/skills/gov-document/SKILL.md +57 -0
  196. package/skills/hr-chain/SKILL.md +51 -0
  197. package/skills/hr-operations/SKILL.md +53 -0
  198. package/skills/info-disclosure/SKILL.md +56 -0
  199. package/skills/infra-gateway/SKILL.md +85 -0
  200. package/skills/infra-gateway/references/golive-checklist.md +36 -0
  201. package/skills/infra-k8s/SKILL.md +78 -0
  202. package/skills/infra-k8s/scripts/k8s-triage.sh +84 -0
  203. package/skills/infra-mq/SKILL.md +87 -0
  204. package/skills/infra-mq/references/mq-review-checklist.md +36 -0
  205. package/skills/insurance-advisory/SKILL.md +57 -0
  206. package/skills/internal-audit/SKILL.md +66 -0
  207. package/skills/ip-management/SKILL.md +54 -0
  208. package/skills/ipo-listing/SKILL.md +60 -0
  209. package/skills/it-audit/SKILL.md +56 -0
  210. package/skills/itsm-ops/SKILL.md +55 -0
  211. package/skills/knowledge-sop/SKILL.md +51 -0
  212. package/skills/legal-chain/SKILL.md +55 -0
  213. package/skills/legal-contract/SKILL.md +58 -0
  214. package/skills/legal-contract/references/contract-checklists.md +59 -0
  215. package/skills/litigation-support/SKILL.md +53 -0
  216. package/skills/logistics-warehouse/SKILL.md +53 -0
  217. package/skills/logistics-warehouse/scripts/freight_check.py +71 -0
  218. package/skills/long-doc-analysis/SKILL.md +52 -0
  219. package/skills/management-accounting/SKILL.md +57 -0
  220. package/skills/management-accounting/scripts/__pycache__/costing.cpython-312.pyc +0 -0
  221. package/skills/management-accounting/scripts/costing.py +90 -0
  222. package/skills/manufacturing-chain/SKILL.md +57 -0
  223. package/skills/manufacturing-quality/SKILL.md +57 -0
  224. package/skills/manufacturing-quality/scripts/__pycache__/spc.cpython-312.pyc +0 -0
  225. package/skills/manufacturing-quality/scripts/spc.py +86 -0
  226. package/skills/marketing-analytics/SKILL.md +59 -0
  227. package/skills/marketing-analytics/scripts/__pycache__/rfm.cpython-312.pyc +0 -0
  228. package/skills/marketing-analytics/scripts/rfm.py +60 -0
  229. package/skills/marketing-chain/SKILL.md +57 -0
  230. package/skills/meeting-minutes/SKILL.md +55 -0
  231. package/skills/metrics-system/SKILL.md +55 -0
  232. package/skills/negotiation-prep/SKILL.md +56 -0
  233. package/skills/obs-prometheus/SKILL.md +74 -0
  234. package/skills/obs-prometheus/references/promql-cheatsheet.md +78 -0
  235. package/skills/office-automation/SKILL.md +54 -0
  236. package/skills/okr-review/SKILL.md +44 -0
  237. package/skills/ops-fleet/SKILL.md +69 -0
  238. package/skills/ops-fleet/scripts/batch-exec-guard.sh +119 -0
  239. package/skills/ops-linux/SKILL.md +69 -0
  240. package/skills/ops-linux/scripts/quick-triage.sh +138 -0
  241. package/skills/optimization-solver/SKILL.md +53 -0
  242. package/skills/optimization-solver/scripts/__pycache__/solver.cpython-312.pyc +0 -0
  243. package/skills/optimization-solver/scripts/solver.py +107 -0
  244. package/skills/pdf-toolkit/SKILL.md +43 -0
  245. package/skills/pdf-toolkit/scripts/pdf_ops.py +137 -0
  246. package/skills/pivot-crosstab/SKILL.md +44 -0
  247. package/skills/pivot-crosstab/scripts/__pycache__/pivot_tools.cpython-312.pyc +0 -0
  248. package/skills/pivot-crosstab/scripts/pivot_tools.py +90 -0
  249. package/skills/policy-analysis/SKILL.md +47 -0
  250. package/skills/portfolio-analysis/SKILL.md +56 -0
  251. package/skills/portfolio-analysis/scripts/__pycache__/portfolio.cpython-312.pyc +0 -0
  252. package/skills/portfolio-analysis/scripts/portfolio.py +78 -0
  253. package/skills/ppt-chain/SKILL.md +61 -0
  254. package/skills/pptx-author/SKILL.md +48 -0
  255. package/skills/pptx-author/scripts/pptx_deck.py +193 -0
  256. package/skills/pr-comms/SKILL.md +58 -0
  257. package/skills/pr-comms/references/pr-templates.md +54 -0
  258. package/skills/procurement-supply/SKILL.md +47 -0
  259. package/skills/procurement-supply/scripts/__pycache__/supply.cpython-312.pyc +0 -0
  260. package/skills/procurement-supply/scripts/supply.py +71 -0
  261. package/skills/product-design/SKILL.md +66 -0
  262. package/skills/product-design/references/prd-framework.md +60 -0
  263. package/skills/production-planning/SKILL.md +56 -0
  264. package/skills/production-planning/scripts/__pycache__/mrp_capacity.cpython-312.pyc +0 -0
  265. package/skills/production-planning/scripts/mrp_capacity.py +70 -0
  266. package/skills/project-management/SKILL.md +53 -0
  267. package/skills/project-management/scripts/__pycache__/cpm.cpython-312.pyc +0 -0
  268. package/skills/project-management/scripts/cpm.py +84 -0
  269. package/skills/project-proposal/SKILL.md +54 -0
  270. package/skills/project-proposal/scripts/budget_sheet.py +90 -0
  271. package/skills/qa-api-automation/SKILL.md +67 -0
  272. package/skills/qa-api-automation/references/three-layer-skeleton.md +61 -0
  273. package/skills/qa-mobile-automation/SKILL.md +70 -0
  274. package/skills/qa-mobile-automation/references/device-matrix-template.md +34 -0
  275. package/skills/qa-ui-automation/SKILL.md +80 -0
  276. package/skills/qa-ui-automation/references/stability-conventions.md +41 -0
  277. package/skills/quant-analysis/SKILL.md +60 -0
  278. package/skills/quant-analysis/scripts/__pycache__/quant.cpython-312.pyc +0 -0
  279. package/skills/quant-analysis/scripts/quant.py +102 -0
  280. package/skills/real-estate-property/SKILL.md +51 -0
  281. package/skills/real-estate-property/scripts/__pycache__/property_calc.cpython-312.pyc +0 -0
  282. package/skills/real-estate-property/scripts/property_calc.py +106 -0
  283. package/skills/regression-forecast/SKILL.md +52 -0
  284. package/skills/regression-forecast/scripts/__pycache__/regress.cpython-312.pyc +0 -0
  285. package/skills/regression-forecast/scripts/regress.py +106 -0
  286. package/skills/retail-store-ops/SKILL.md +57 -0
  287. package/skills/retail-store-ops/scripts/store_ops.py +57 -0
  288. package/skills/risk-compliance/SKILL.md +51 -0
  289. package/skills/sec-auth/SKILL.md +89 -0
  290. package/skills/sec-auth/references/auth-review-checklist.md +38 -0
  291. package/skills/sec-compliance/SKILL.md +74 -0
  292. package/skills/sec-compliance/references/dengbao-checklist.md +43 -0
  293. package/skills/securities-chain/SKILL.md +69 -0
  294. package/skills/securities-research/SKILL.md +58 -0
  295. package/skills/securities-research/scripts/__pycache__/valuation.cpython-312.pyc +0 -0
  296. package/skills/securities-research/scripts/valuation.py +93 -0
  297. package/skills/slides-html/SKILL.md +50 -0
  298. package/skills/slides-html/scripts/template.html +117 -0
  299. package/skills/statistical-testing/SKILL.md +51 -0
  300. package/skills/statistical-testing/scripts/__pycache__/stat_tests.cpython-312.pyc +0 -0
  301. package/skills/statistical-testing/scripts/stat_tests.py +131 -0
  302. package/skills/strategy-planning/SKILL.md +53 -0
  303. package/skills/supply-chain/SKILL.md +53 -0
  304. package/skills/tax-compliance/SKILL.md +57 -0
  305. package/skills/tax-compliance/scripts/tax_calc.py +90 -0
  306. package/skills/tech-research/SKILL.md +55 -0
  307. package/skills/tech-research/references/research-framework.md +50 -0
  308. package/skills/tender-bidding/SKILL.md +65 -0
  309. package/skills/tender-bidding/references/bid-checklist.md +44 -0
  310. package/skills/translation-pro/SKILL.md +44 -0
  311. package/skills/treasury-mgmt/SKILL.md +56 -0
  312. package/skills/treasury-mgmt/scripts/__pycache__/cashflow_forecast.cpython-312.pyc +0 -0
  313. package/skills/treasury-mgmt/scripts/cashflow_forecast.py +51 -0
  314. package/skills/web-scraping/SKILL.md +81 -0
  315. package/skills/web-search/SKILL.md +67 -0
  316. package/skills/xlsx-analysis/SKILL.md +96 -0
  317. package/skills/xlsx-analysis/scripts/__pycache__/xlsx_toolkit.cpython-312.pyc +0 -0
  318. package/skills/xlsx-analysis/scripts/xlsx_style.py +71 -0
  319. package/skills/xlsx-analysis/scripts/xlsx_toolkit.py +335 -0
  320. package/src/agent.js +1 -1
  321. package/src/api.js +1 -1
  322. package/src/codeindex.js +1 -1
  323. package/src/commands.js +1 -1
  324. package/src/config.js +1 -1
  325. package/src/context.js +1 -1
  326. package/src/doccache.js +1 -0
  327. package/src/doctor.js +1 -1
  328. package/src/executors.js +1 -1
  329. package/src/input.js +1 -1
  330. package/src/permissions.js +1 -1
  331. package/src/pyruntime.js +1 -0
  332. package/src/repl.js +1 -1
  333. package/src/scan.js +1 -1
  334. package/src/tools.js +1 -1
  335. package/src/tui/app.js +1 -1
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: web-scraping
3
+ description: 网络数据抓取与结构化提取(网页抓取解析、数据字段提取、多级深度爬取、翻页与增量采集、JS 渲染页、API 接入、清洗入库)。当用户说"抓取网页/爬数据/采集/提取网页字段/深度爬取/从网站拿数据/接口对接/外部数据"时使用。爬虫链之采集环。
4
+ version: 1.2.0
5
+ ---
6
+
7
+ # 网络数据抓取与结构化提取(爬虫链 · 采集环;检索选题见 web-search,签名接口见 api-integration,全链见 crawl-chain)
8
+
9
+ ## 合规红线(第一位,不可跳过)
10
+
11
+ - **遵守 robots.txt 与网站服务条款**;不抓取需登录/付费墙后的受保护内容;
12
+ - 频率克制(加延时,别把人家站点打挂——高频=攻击);标明 User-Agent;
13
+ - **不抓个人隐私数据**(手机号/身份证/住址等,《个人信息保护法》红线,转 risk-compliance);
14
+ 不绕过验证码/反爬做对抗(技术对抗≈越界,如实劝阻);
15
+ - 数据用途合规(商用授权/版权);拿不准的**先咨询法务**(legal-chain)。
16
+ 本技能仅辅助**合法公开数据**的采集与整理。
17
+
18
+ ## 工具路径(按规模递进,复用既有能力)
19
+
20
+ - **单页/接口**:`fetch_url` 直接抓——已按页面字符集解码(GBK 中文站不乱码)、附标题;
21
+ **顺链翻页**:`fetch_url(url, links=true)` 返回「锚文本 → 绝对URL」清单,挑下一页/详情页继续;
22
+ - **系统级工具**:`run_bash` 里用 **curl / wget**——需要自定义 header(Cookie/Referer/UA)、
23
+ 调 REST 接口、下载文件、看响应头/状态码时比 fetch_url 更灵活:
24
+ - `curl -sSL -A "..." -H "Referer: ..." URL`(-s 静默 -S 报错 -L 跟跳转);
25
+ - `curl -sD - -o body.html URL` 分离响应头与正文;`curl -w "%{http_code} %{time_total}\n"` 看指标;
26
+ - `curl --compressed`(gzip 省流)、`--retry 3 --retry-delay 2`(内建重试)、`--limit-rate 500k`(限速礼貌);
27
+ - 签名认证接口 → 载入 **api-integration**(签名算法/时间戳/鉴权头);
28
+ - **解析与批量**:`run_python` + 按需装(`packages=['requests','beautifulsoup4','lxml']`):
29
+ - requests(headers/timeout/重试/延时封装成函数,session 复用连接与 Cookie);
30
+ - BeautifulSoup/lxml(CSS 选择器/XPath;**选择器写注释**,结构变更好修);
31
+ - pandas `read_html` 一行抓网页表格(**规整表格首选,别手写解析**);
32
+ - **JS 渲染页判定与路由**:fetch_url 抓回正文近空/只有骨架 → 靠 JS 渲染:
33
+ ①优先找背后数据接口(浏览器 Network 里常有现成 JSON,直连最稳,配合 api-integration 处理签名);
34
+ ②桌面端内置浏览器 browser_* 截图辅助定位;③仍不行才 playwright 渲染(重型,页面少不值得)。
35
+
36
+ ## 结构化数据提取(从"抓回一坨文本"到"干净的字段表")
37
+
38
+ 1. **先定 schema**:要哪些字段、类型、必填性——照着 schema 提取,而非有啥抓啥;
39
+ 2. **定位锚点**:优先稳定锚(id/语义化 class/`data-*`/JSON-LD `<script type=application/ld+json>`
40
+ 常含现成结构化数据,**先找它**);避免依赖易变的层级下标与展示型 class;
41
+ 3. **正则只切碎片、结构靠解析器**:别用正则解析整页 HTML(脆且易错);正则用于从已定位文本里
42
+ 抠日期/金额/编号等 pattern;
43
+ 4. **规范化即时做**:日期统一 ISO、金额去千分位转数值并记币种、空值标 NA、去首尾空白与全半角;
44
+ 5. **一致性校验**:字段级(类型/枚举/范围)+ 记录级(该有的字段齐不齐)+ 批次级
45
+ (本批 vs 上批数量突变即预警);连续大面积 NA → 选择器可能失效,停并报告,别闷头写下去。
46
+
47
+ ## 多级深度爬取(列表 → 详情 → 下一层,广度优先 + 去重 + 限深)
48
+
49
+ - **模型**:种子 URL → 抽链接(fetch_url links=true 或解析器)→ 入队 → 逐个抓 → 再抽链接…
50
+ 用 **BFS 队列**(先进先出,层层推进)而非无脑递归;
51
+ - **三个必备闸门**(缺一即失控):
52
+ - **去重集**:已访问 URL 归一化(去 fragment、排序 query、统一大小写)后入 set,命中即跳;
53
+ - **限深/限量**:max_depth(如详情页 2 层就够)+ max_pages(总量上限),到顶即停;
54
+ - **同域约束**:默认只跟同域链接,跨域要显式放行(防爬遍半个互联网);
55
+ - **礼貌**:同域串行 + 延时 ≥1s;尊重 robots 的 Crawl-delay;并发只在多域间且带全局限速;
56
+ - **断点续爬**:队列状态 + 已访问集落盘,中断可从断点续(大爬必备,别从头再来);
57
+ - **产出可回放**:每页原始响应存 `raw/<url哈希>.html`,解析与抓取解耦——解析逻辑改了不必重抓。
58
+
59
+ ## 抓取流程(工程化,不是一次性脚本)
60
+
61
+ 1. **踩点**:数据在页面还是接口?静态还是 JS 渲染?robots/ToS 确认?预估量级(<50 页脚本直跑,更大上断点续爬);
62
+ 2. **单条验证**:先抓一条解析对(字段齐、编码正、类型对),再批量;
63
+ 3. **批量/深爬**:BFS + 去重 + 限深 + 延时 + 重试(≤3 退避) + 逐条日志;
64
+ 4. **增量更新**:二次只抓新增/变更(URL 集合差 / 发布时间水位线),全量重抓是浪费;
65
+ 5. **解析入库**:raw 留档 → schema 提取 → data-wrangling 清洗 → 落 xlsx/csv
66
+ (**每条带来源 URL 与采集时间戳,可溯源**);
67
+ 6. **反爬礼貌应对**:403/429 降频而非对抗;结构变更解析容错(缺失标 NA 不崩)。
68
+
69
+ ## 典型场景
70
+
71
+ 竞品价格监控(定时抓取,office-automation 例程,pivot-crosstab 出趋势)/ 公开数据聚合
72
+ (统计局/公告/榜单,web-search 先定位信源)/ 舆情信源采集(转 pr-comms 舆情分析)/
73
+ 目录站深度归集(列表→详情两级爬,tech-research 佐证,注明抓取日期)。
74
+
75
+ ## 验收自查
76
+
77
+ - [ ] robots/ToS 已确认;无隐私/受保护数据
78
+ - [ ] 先定 schema 再提取;锚点稳(优先 JSON-LD/语义化);规范化与校验到位
79
+ - [ ] 深爬有去重集+限深限量+同域约束+断点续;原始响应留档
80
+ - [ ] 频率克制有延时;单条先验证再批量;JS 渲染页走接口/渲染路由
81
+ - [ ] 数据带来源 URL 与采集时间戳;遇反爬降频不对抗
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: web-search
3
+ description: 网页搜索与信息检索(查询构造、多源交叉验证、结果甄别去重、网页内容分析与提炼、引用规范、搜索→抓取→分析闭环)。当用户说"搜一下/查资料/联网查/最新消息/找信源/调研某主题/分析这个网页/总结这篇文章"时使用。爬虫链之检索环。
4
+ version: 1.1.0
5
+ ---
6
+
7
+ # 网页搜索与内容分析(爬虫链 · 检索环;采集见 web-scraping,全链见 crawl-chain)
8
+
9
+ ## 检索通道(按可用性择优)
10
+
11
+ - **平台联网搜索**:所用智能体/模型开了联网搜索时优先用(结果带引用,最省事);
12
+ - **企业/用户自备搜索 API**:有 Bing/Google/SerpAPI 等 key 时用 curl / fetch_url 直连其 REST 接口
13
+ (key 走环境变量,勿硬编码勿回显;需签名的载入 api-integration);
14
+ - **公开搜索页兜底**:fetch_url 抓轻量搜索页(如 `https://html.duckduckgo.com/html/?q=关键词`),
15
+ 再 `links=true` 取结果链接——**频率克制(次数少、间隔≥2s),尊重对方 ToS**;被限流即停;
16
+ - 定向检索常比通用搜索准:已知权威站直接站内查(官网/文档站/统计局/交易所/GitHub)。
17
+
18
+ ## 查询构造(一次搜不准是常态,会迭代才是能力)
19
+
20
+ - 关键词化而非整句:提取实体+限定词("华为 2025 年报 营收" 优于整句);
21
+ - 善用操作符:`site:gov.cn`(限站)、`filetype:pdf`(找报告原文)、`"精确短语"`、`-排除词`、时间限定;
22
+ - 中英双语各搜一遍(技术/学术主题英文信源常更全);
23
+ - 递进式:宽泛首搜认识领域词汇 → 用学到的准确术语二搜 → 直捣权威信源站内三搜。
24
+
25
+ ## 网页内容分析(抓回来之后,从"文本"到"回答")
26
+
27
+ 抓到正文(fetch_url / curl)后不是原样丢给用户,而是**按意图加工**:
28
+
29
+ - **定位与降噪**:网页正文常裹在导航/广告/推荐里。找主体区域(`<article>`/`<main>`/正文密度最高块),
30
+ 剥离页眉页脚侧栏——喂给下一步的应是干净正文,不是整页噪声;
31
+ - **抽取式提炼**:先抽关键句/关键数据(原文片段,可回指),再做归纳——**先事实后观点**,别一上来就概括;
32
+ - **结构化产出按意图**:
33
+ - 「总结这篇」→ 分层摘要(一句话结论 + 3-5 要点 + 关键数据表);
34
+ - 「对比几个来源」→ 证据矩阵(行=来源,列=对比维度,每格带出处,见 tech-research);
35
+ - 「提取字段」→ 结构化表(转 web-scraping 的 schema 提取);
36
+ - 「找答案」→ 直接回答 + 支撑原文引用 + 未覆盖部分如实说;
37
+ - **长文分块**:超长网页/文档分块处理再合并,别截断丢尾(长文走 long-doc-analysis);
38
+ - **多页聚合**:同主题多来源 → 去重(近义信息合并)→ 冲突并列 → 时间线/对比表收敛。
39
+
40
+ ## 结果甄别与交叉验证
41
+
42
+ - **信源分级**:官方一手(官网/公告/统计局/论文)> 权威媒体/行业报告 > 社区/自媒体(只作线索);
43
+ - **关键事实至少两个独立信源相互印证**;数字类核对口径(统计范围/币种/时点);
44
+ - 时效检查:注明发布日期,旧文当新闻是硬伤;SEO 农场/内容拼凑站直接丢弃;
45
+ - 搜索结果只是入口:**结论必须来自点进去的原文**(fetch_url 抓全文核实,别拿摘要下结论)。
46
+
47
+ ## 搜索 → 抓取 → 分析闭环
48
+
49
+ 1. 明确要回答的问题(拆成 2-5 个可检索的子问题);
50
+ 2. 逐子问题检索,收集候选信源(URL + 标题 + 日期);
51
+ 3. fetch_url/curl 抓正文,按上节「内容分析」降噪+提炼(web-scraping 处理批量/深爬);
52
+ 4. 汇总输出:**每个关键结论标注来源(URL + 访问日期)**,冲突信息并列呈现并说明取舍;
53
+ 5. 信息不足时如实说"没查到/存疑",绝不编造——宁缺毋滥。
54
+
55
+ ## 典型场景
56
+
57
+ 行业/竞品调研(转 tech-research 深度分析)/ 政策法规检索(官方原文为准,转 legal-chain 解读)/
58
+ 数据找源(统计局/年报/榜单 → web-scraping 采集)/ 技术选型查证(官方文档+GitHub issue 双核)/
59
+ 单篇深读(长文摘要/观点提炼,转 long-doc-analysis)/ 时事背景补全(写作/汇报前事实核查)。
60
+
61
+ ## 验收自查
62
+
63
+ - [ ] 关键结论均有来源标注(URL + 访问日期),且来自原文非摘要
64
+ - [ ] 关键事实 ≥2 独立信源印证;冲突已并列说明
65
+ - [ ] 内容分析先降噪再提炼、先事实后观点;长文分块不丢尾
66
+ - [ ] 信源分级意识:结论不建立在社区/自媒体单源上
67
+ - [ ] 搜索页兜底通道频率克制;没查到的如实说明
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: xlsx-analysis
3
+ description: 复杂 Excel 表格分析、透视、对账与格式化回写。当用户说"Excel/表格/xlsx/透视/汇总/对账/核对/多 Sheet"或给出 .xlsx/.xls 文件时使用。
4
+ version: 1.1.0
5
+ ---
6
+
7
+ # Excel 分析与回写(经 run_python 执行,pandas/openpyxl/xlrd 已随托管运行时就绪)
8
+
9
+ 要点:**用 run_python 直接开原始表格文件**做精确分析——附件的纯文本摘要只够"大概看看"(公式/多 Sheet/合并单元格全丢),
10
+ **绝不据摘要作答对账/透视类问题**。附件原件已落盘会话工作区 `attachments/`(提问上下文里会指明路径),直接读它。
11
+ `.xls` 旧格式已随核心装了 xlrd,和 `.xlsx` 一样开箱即读,无需再补装。
12
+
13
+ ## 首选:先载工具箱(治真实办公表的脏——表头不在首行/文本金额/杂乱日期/合计行混入)
14
+
15
+ 真实表格 90% 的坑(表头在第 2~5 行、合并单元格留 NaN、金额是带千分位的文本、日期五花八门、夹着「合计」行)
16
+ 本技能的 `scripts/xlsx_toolkit.py` 已封装。**除非表格极简单,一律先用它**:
17
+
18
+ ```python
19
+ # 1) read_skill_file(skill="xlsx-analysis", path="scripts/xlsx_toolkit.py") 取源码
20
+ # 2) 连同下面的调用一起交给 run_python 执行(把源码内联在最前,或 exec 之)
21
+ sheet_map('attachments/收款单202602.xlsx') # 摸清每个 Sheet:满形状/表头行/列清单/金额·日期列
22
+ df = smart_read('attachments/收款单202602.xlsx', '凌川峰应收账款') # 稳读:自动表头+去spacer+剔合计+金额救成float
23
+ ar = sum_by_period(df, value_col='贷方金额', date_col='记账日期') # 按月汇总贷方 → {'2026-01':30000, ...}
24
+ ```
25
+
26
+ 工具箱清单(函数名即用途,全部可直接调):
27
+ - `sheet_map(path)` — **分析第 0 步**,一次打印整本工作簿结构(表头行、列名、疑似金额/日期列)。
28
+ - `smart_read(path, sheet, header=None, drop_subtotal=True)` — 稳读单个 Sheet,返回干净 DataFrame。表头识别不准时手动传 `header=N`。
29
+ - `to_amount(series)` / `to_period(series, freq='M')` — 金额(清千分位/货币符/括号负数)、日期(含 `2026.3`/excel 序列号/`2026-02-03 0`)稳健转换。
30
+ - `sum_by_period(df, value_col, date_col, freq='M')` — 明细按期汇总 → Series。
31
+ - `reconcile(left, right, left_name, right_name, tol=0.01)` — **按期对账**,逐期算差额并判「✅对平/❌差异」,打印对账表 + 结论。
32
+
33
+ ### 对账任务范式(多 Shet 勾稽,用户最常问的一类)
34
+ > 「把 A 明细、B 明细按月汇总贷方金额,分别和汇总表里某组织的两列按月核对」——标准三步:
35
+ ```python
36
+ ar = sum_by_period(smart_read(F, '凌川峰应收账款'), '贷方金额', '记账日期')
37
+ adv = sum_by_period(smart_read(F, '凌川峰预收'), '贷方金额', '记账日期')
38
+ summ = smart_read(F, '收款单汇总')
39
+ mine = summ[summ['收款组织'].astype(str).str.contains('凌川峰')] # 先按组织过滤
40
+ sum_ar = pd.Series(to_amount(mine['应收账款-贷方']).values, index=to_period(mine['月份']).values)
41
+ sum_adv = pd.Series(to_amount(mine['预收账款-贷方']).values, index=to_period(mine['月份']).values)
42
+ reconcile(ar, sum_ar, '应收明细', '汇总应收-贷方') # 逐月对平/差异一目了然
43
+ reconcile(adv, sum_adv, '预收明细', '汇总预收-贷方')
44
+ ```
45
+
46
+ ## 底层手法(工具箱不够用、或需自定义时)
47
+
48
+ 1. **先摸结构再分析**(跳过这步 = 错误答案的头号来源):`sheet_map(path)`;或手写
49
+ ```python
50
+ import pandas as pd
51
+ xf = pd.ExcelFile('文件.xlsx')
52
+ for s in xf.sheet_names:
53
+ print(s, xf.parse(s, header=None, nrows=8).to_markdown()) # header=None 看清表头到底在第几行
54
+ ```
55
+ 看清:表头在第几行?有没有合并单元格产生的 NaN?哪些列是日期/金额?
56
+ 2. **正确读取**:表头不在首行用 `header=N` 或 `skiprows`;读全部 Sheet 用 `sheet_name=None`(返回 dict);大表先 `usecols` 挑列。
57
+ 3. **清洗**:合并单元格读出的 NaN 用 `df[col] = df[col].ffill()`(仅对确认是合并单元格的列);金额千分位/文本用 `to_amount()`;日期用 `to_period()` 或 `pd.to_datetime(df[col])`。
58
+ 4. **分析/透视**:
59
+ ```python
60
+ pv = df.pivot_table(index='地区', columns='季度', values='销售额', aggfunc='sum', margins=True, margins_name='合计')
61
+ ```
62
+ 多层透视 index=['大区','省份'];同时多个聚合 aggfunc={'销售额':'sum','订单':'count'}。
63
+ 5. **格式化回写**:`read_skill_file` 读本技能 `scripts/xlsx_style.py`,把 `write_styled()` 连同代码一起执行——表头样式/冻结首行/自动列宽/数字格式/斑马纹一步到位。需要图表另出 png(画图先 load_skill('data-analysis') 用其字体脚本)。
64
+ 6. **验收(必做)**:回写后**重新打开**校验并 print:
65
+ ```python
66
+ chk = pd.read_excel('产物.xlsx', sheet_name=None)
67
+ for s, d in chk.items():
68
+ print(s, d.shape, '| 首行:', d.iloc[0].tolist() if len(d) else '空', '| 末行:', d.iloc[-1].tolist() if len(d) else '空')
69
+ ```
70
+
71
+ ## 公式与格式的边界
72
+
73
+ - pandas 读到的是**值**;要读**公式本身**用 `openpyxl.load_workbook(f)`(不带 data_only),要读**公式算出的值**用 `data_only=True`(前提:文件被 Excel 保存过,否则缓存值为 None——此时用 pandas 自己算)。
74
+ - 回写公式:openpyxl `ws['D2'] = '=SUM(B2:C2)'`;写完的公式值要等用户用 Excel 打开才计算,验收时校验公式字符串而非值。
75
+ - `.xls` 老格式:xlrd 已随核心装好,`pd.read_excel('x.xls')` 直接可读(pandas 按扩展名自动选引擎),无需补装。
76
+
77
+ ## 常见坑
78
+
79
+ - 「合计」行混在数据里:分析前剔除(`df[df['地区']!='合计']`),透视用 margins 自己生成。
80
+ - 数字被读成文本(前导零/空格):对账合不上先查 dtypes。
81
+ - 单元格里的换行与不可见空格:`str.strip()`。
82
+ - 超大表(几十万行):pandas 正常处理;不要逐单元格 openpyxl 循环(慢百倍)。
83
+
84
+ ## 验收自查
85
+
86
+ - [ ] 第一步结构探查的输出在结果里(Sheets/形状/表头)
87
+ - [ ] 每个产物 xlsx 都重读校验过(形状+首末行已 print)
88
+ - [ ] 金额/日期列类型正确(对账类任务 print 过 dtypes)
89
+ - [ ] 用户口径的"合计"与你算的合计对得上(差异要指出原因)
90
+
91
+ ## 附件
92
+
93
+ - `scripts/xlsx_toolkit.py` — **分析工具箱(首选先载)**:`sheet_map` 摸结构、`smart_read` 稳读脏表、`to_amount`/`to_period` 稳健转换、`sum_by_period` 按期汇总、`reconcile` 按期对账;`python xlsx_toolkit.py` 可直接跑自测
94
+ - `scripts/xlsx_style.py` — 格式化回写助手:`write_styled(df_dict, path, ...)` 表头样式/冻结/列宽/数字格式/斑马纹;可直接执行自测
95
+
96
+ > 本技能属 **Excel 与数据分析链**——19 项数据能力路由与端到端工作流见 `excel-analysis-chain`。
@@ -0,0 +1,71 @@
1
+ # xlsx 格式化回写助手(经 run_python 执行)。核心入口 write_styled():
2
+ # 表头加粗白字深蓝底、冻结首行、按内容自动列宽(中文按 2 宽)、数字/金额/日期格式、斑马纹。
3
+ # 直接执行本文件 = 自测:产出 xlsx_style_check.xlsx 并重读校验。
4
+ import pandas as pd
5
+ from openpyxl.styles import Alignment, Border, Font, PatternFill, Side
6
+ from openpyxl.utils import get_column_letter
7
+
8
+ HEADER_FILL = PatternFill('solid', fgColor='1F4E79') # 深蓝
9
+ STRIPE_FILL = PatternFill('solid', fgColor='F2F6FA') # 斑马浅蓝
10
+ THIN = Side(style='thin', color='D9D9D9')
11
+ BORDER = Border(left=THIN, right=THIN, top=THIN, bottom=THIN)
12
+
13
+
14
+ def _width(v):
15
+ """按显示宽度估列宽:CJK 记 2,其他记 1。"""
16
+ s = '' if v is None else str(v)
17
+ return sum(2 if ord(ch) > 0x2E7F else 1 for ch in s)
18
+
19
+
20
+ def write_styled(sheets, path, number_formats=None, stripe=True, max_width=60):
21
+ """把 {sheet名: DataFrame} 写成带格式的 xlsx。
22
+ number_formats: {列名: 格式},如 {'销售额': '#,##0.00', '占比': '0.0%', '日期': 'yyyy-mm-dd'}。
23
+ """
24
+ if isinstance(sheets, pd.DataFrame):
25
+ sheets = {'Sheet1': sheets}
26
+ number_formats = number_formats or {}
27
+ with pd.ExcelWriter(path, engine='openpyxl') as xw:
28
+ for name, df in sheets.items():
29
+ df.to_excel(xw, sheet_name=name[:31], index=False)
30
+ ws = xw.sheets[name[:31]]
31
+ ws.freeze_panes = 'A2'
32
+ for j, col in enumerate(df.columns, start=1):
33
+ letter = get_column_letter(j)
34
+ head = ws.cell(row=1, column=j)
35
+ head.font = Font(bold=True, color='FFFFFF')
36
+ head.fill = HEADER_FILL
37
+ head.alignment = Alignment(horizontal='center', vertical='center')
38
+ fmt = number_formats.get(str(col))
39
+ w = _width(col) + 2
40
+ for i in range(2, len(df) + 2):
41
+ cell = ws.cell(row=i, column=j)
42
+ cell.border = BORDER
43
+ if fmt:
44
+ cell.number_format = fmt
45
+ if stripe and i % 2 == 0:
46
+ cell.fill = STRIPE_FILL
47
+ w = max(w, _width(cell.value) + 2)
48
+ ws.column_dimensions[letter].width = min(w, max_width)
49
+ return path
50
+
51
+
52
+ def verify(path):
53
+ """重读校验并打印(验收步骤用):每个 sheet 的形状与首末行。"""
54
+ chk = pd.read_excel(path, sheet_name=None)
55
+ for s, d in chk.items():
56
+ head = d.iloc[0].tolist() if len(d) else '空'
57
+ tail = d.iloc[-1].tolist() if len(d) else '空'
58
+ print(f'[verify] {s} shape={d.shape} 首行={head} 末行={tail}')
59
+ return chk
60
+
61
+
62
+ if __name__ == '__main__':
63
+ df = pd.DataFrame({
64
+ '地区': ['华东', '华南', '华北', '西南'],
65
+ '销售额': [1200.5, 950.25, 870.0, 640.75],
66
+ '占比': [0.328, 0.26, 0.238, 0.175],
67
+ })
68
+ p = write_styled({'销售汇总': df}, 'xlsx_style_check.xlsx',
69
+ number_formats={'销售额': '#,##0.00', '占比': '0.0%'})
70
+ verify(p)
71
+ print('OK', p)