@v587d/capital-generation 2.10.1 → 2.11.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 (392) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +19 -10
  3. package/THIRD_PARTY_NOTICES.md +29 -28
  4. package/chart-ui/package.json +1 -1
  5. package/config/client.js +36 -31
  6. package/config/client.src.cjs +185 -139
  7. package/config/package.json +1 -1
  8. package/lib/data-contract.d.ts +15 -0
  9. package/lib/data-contract.js +26 -0
  10. package/lib/selected-skills-entry.d.ts +3 -3
  11. package/lib/selected-skills-entry.js +9 -1
  12. package/lib/web-retriever/local-fetch.d.ts +1 -1
  13. package/lib/web-retriever/local-fetch.js +1 -1
  14. package/lib/web-retriever/wind-client.d.ts +1 -1
  15. package/lib/web-retriever/wind-client.js +1 -1
  16. package/package.json +2 -1
  17. package/selected-skills/InvestSkill/UPSTREAM.md +8 -0
  18. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/10k-digest/SKILL.md +11 -4
  19. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/10k-digest/references/10-retrieving-the-filing.md +24 -15
  20. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/10k-digest/references/11-key-metrics-table.md +3 -2
  21. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/bear-case/SKILL.md +9 -2
  22. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/catalyst-calendar/SKILL.md +9 -2
  23. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/competitor-analysis/SKILL.md +9 -2
  24. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/competitor-analysis/references/13-input-formats.md +2 -2
  25. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/dividend-analysis/SKILL.md +9 -2
  26. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/dividend-analysis/references/13-fcf-deployment-scorecard.md +13 -21
  27. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/earnings-call-analysis/SKILL.md +9 -2
  28. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/earnings-call-analysis/references/11-data-sources.md +18 -45
  29. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/earnings-preview/SKILL.md +9 -2
  30. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/economics-analysis/SKILL.md +10 -3
  31. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/etf-analysis/SKILL.md +9 -2
  32. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/fact-check/SKILL.md +11 -4
  33. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/fact-check/references/10-overview.md +1 -1
  34. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/fact-check/references/11-phase-2-source-hierarchy.md +9 -3
  35. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/fact-check/references/13-notes.md +1 -1
  36. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/financial-report-analyst/SKILL.md +9 -2
  37. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/financial-report-analyst/references/10-overview.md +9 -8
  38. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/industry-map/SKILL.md +9 -2
  39. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/industry-map/references/10-overview.md +2 -2
  40. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/industry-map/references/12-visualization-support.md +1 -1
  41. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/insider-trading/SKILL.md +9 -2
  42. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/insider-trading/references/11-pattern-recognition.md +9 -24
  43. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/insider-trading/references/12-interpretation-guidelines.md +1 -1
  44. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/institutional-ownership/SKILL.md +9 -2
  45. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/institutional-ownership/references/11-ownership-concentration-analysis.md +5 -8
  46. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/institutional-ownership/references/12-red-flags-warning-signs.md +2 -2
  47. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/learning-coach/SKILL.md +9 -2
  48. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/learning-coach/references/10-overview.md +6 -4
  49. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/learning-coach/references/11-phase-2-explanation-card.md +2 -2
  50. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/learning-coach/references/12-output-format.md +1 -1
  51. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/options-analysis/SKILL.md +9 -2
  52. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/portfolio-review/SKILL.md +9 -2
  53. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/position-ladder/SKILL.md +9 -2
  54. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/result-validator/SKILL.md +7 -0
  55. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/risk-stress-test/SKILL.md +9 -2
  56. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/sector-analysis/SKILL.md +9 -2
  57. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/sector-analysis/references/11-sector-correlation-matrix.md +4 -4
  58. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/sector-analysis/references/12-peer-benchmarking-within-sector.md +1 -1
  59. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/short-interest/SKILL.md +9 -2
  60. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/short-interest/references/12-data-sources.md +9 -15
  61. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-eval/SKILL.md +9 -2
  62. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-eval/references/11-dupont-decomposition.md +1 -1
  63. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-screener/SKILL.md +9 -2
  64. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-valuation/SKILL.md +9 -2
  65. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/tax-lens/SKILL.md +9 -2
  66. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/technical-analysis/SKILL.md +9 -2
  67. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/technical-analysis/references/11-chart-visualization-support.md +1 -1
  68. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/thesis-tracker/SKILL.md +9 -2
  69. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/thesis-tracker/references/10-overview.md +1 -1
  70. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/thesis-tracker/references/11-phase-5-the-pre.md +1 -1
  71. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/thesis-tracker/references/12-example.md +2 -2
  72. package/selected-skills/README.md +29 -19
  73. package/selected-skills/ROUTING.md +5 -3
  74. package/selected-skills/catalog.js +38 -0
  75. package/selected-skills/china-stock-research-skills/UPSTREAM.md +8 -0
  76. package/selected-skills/china-stock-research-skills/skills/business-decomposition-order-quality/SKILL.md +7 -0
  77. package/selected-skills/china-stock-research-skills/skills/business-decomposition-order-quality/references/idc-order-ledger-guide.md +11 -9
  78. package/selected-skills/china-stock-research-skills/skills/financial-health/SKILL.md +7 -0
  79. package/selected-skills/china-stock-research-skills/skills/financial-health/references/idc-balance-sheet-stress-guide.md +10 -8
  80. package/selected-skills/china-stock-research-skills/skills/industry-competition-moat/SKILL.md +7 -0
  81. package/selected-skills/china-stock-research-skills/skills/industry-competition-moat/references/idc-value-chain-and-peers.md +9 -7
  82. package/selected-skills/china-stock-research-skills/skills/risk-warning-catalysts/SKILL.md +7 -0
  83. package/selected-skills/china-stock-research-skills/skills/risk-warning-catalysts/references/idc-monitoring-indicators.md +9 -7
  84. package/selected-skills/china-stock-research-skills/skills/shared/references/asset-heavy-ramp-overlay.md +7 -5
  85. package/selected-skills/china-stock-research-skills/skills/shared/references/business-model-transition-overlay.md +7 -5
  86. package/selected-skills/china-stock-research-skills/skills/shared/references/citation-standard.md +7 -7
  87. package/selected-skills/china-stock-research-skills/skills/shared/references/consumer-channel-brand-overlay.md +8 -6
  88. package/selected-skills/china-stock-research-skills/skills/shared/references/cyclical-price-driven-overlay.md +8 -6
  89. package/selected-skills/china-stock-research-skills/skills/shared/references/export-manufacturing-supply-chain-overlay.md +8 -6
  90. package/selected-skills/china-stock-research-skills/skills/shared/references/idc-heavy-asset-transition-overlay.md +16 -14
  91. package/selected-skills/china-stock-research-skills/skills/shared/references/project-order-business-overlay.md +7 -5
  92. package/selected-skills/china-stock-research-skills/skills/shared/references/regulated-healthcare-policy-overlay.md +8 -6
  93. package/selected-skills/china-stock-research-skills/skills/shared/references/source-registry.md +45 -47
  94. package/selected-skills/china-stock-research-skills/skills/strategy-business-transition/SKILL.md +7 -0
  95. package/selected-skills/china-stock-research-skills/skills/strategy-business-transition/references/idc-transition-markers.md +8 -6
  96. package/selected-skills/china-stock-research-skills/skills/valuation-investment-strategy/SKILL.md +7 -0
  97. package/selected-skills/china-stock-research-skills/skills/valuation-investment-strategy/references/idc-valuation-overlays.md +8 -6
  98. package/selected-skills/claude-for-financial-services-cn/UPSTREAM.md +9 -0
  99. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-break-trace/SKILL.md +1 -1
  100. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-catalyst-calendar/SKILL.md +1 -1
  101. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-comps-analysis/SKILL.md +3 -3
  102. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-dcf/SKILL.md +1 -1
  103. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-earnings-analysis/SKILL.md +1 -1
  104. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-earnings-preview/SKILL.md +1 -1
  105. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-idea-generation/SKILL.md +1 -1
  106. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-initiating-coverage/SKILL.md +2 -2
  107. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-morning-note/SKILL.md +1 -1
  108. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-sector-overview/SKILL.md +2 -2
  109. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-thesis-tracker/SKILL.md +1 -1
  110. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-variance-commentary/SKILL.md +1 -1
  111. package/selected-skills/filter.js +70 -0
  112. package/selected-skills/financeskills/UPSTREAM.md +10 -0
  113. package/selected-skills/financeskills/skills/banking-compliance/SKILL.md +9 -2
  114. package/selected-skills/financeskills/skills/company-valuation/SKILL.md +9 -2
  115. package/selected-skills/financeskills/skills/credit-analysis/SKILL.md +9 -2
  116. package/selected-skills/financeskills/skills/ecl-computation/SKILL.md +9 -2
  117. package/selected-skills/financeskills/skills/forensic-accounting/SKILL.md +9 -2
  118. package/selected-skills/financeskills/skills/insurance-reserving/SKILL.md +9 -2
  119. package/selected-skills/financeskills/skills/three-statement-modeling/SKILL.md +9 -2
  120. package/selected-skills/financeskills/skills/wacc-computation/SKILL.md +9 -2
  121. package/selected-skills/investment-skills/UPSTREAM.md +9 -0
  122. package/selected-skills/investment-skills/skills/buffett-investment-framework/SKILL.md +7 -0
  123. package/selected-skills/investment-skills/skills/buffett-investment-framework/references/00-source-key.md +25 -25
  124. package/selected-skills/investment-skills/skills/buffett-investment-framework/references/11-deterministic-router.md +40 -9
  125. package/selected-skills/peter-lynch-skill/UPSTREAM.md +7 -0
  126. package/selected-skills/peter-lynch-skill/skills/peter-lynch-skill/SKILL.md +9 -2
  127. package/selected-skills/peter-lynch-skill/skills/peter-lynch-skill/references/10-workflow.md +1 -1
  128. package/selected-skills/peter-lynch-skill/skills/peter-lynch-skill/references/deep/system-prompt.md +5 -5
  129. package/selected-skills/peter-lynch-skill/skills/peter-lynch-skill/references/deep/web-research-1.md +1 -1
  130. package/selected-skills/peter-lynch-skill/skills/peter-lynch-skill/references/deep/web-research-2.md +4 -7
  131. package/selected-skills/peter-lynch-skill/skills/peter-lynch-skill/references/quick/system-prompt.md +1 -1
  132. package/selected-skills/peter-lynch-skill/skills/peter-lynch-skill/references/quick/web-research-1.md +50 -49
  133. package/selected-skills/quant-agent-skills/UPSTREAM.md +8 -0
  134. package/selected-skills/quant-agent-skills/skills/cross-market-listing-choice/SKILL.md +1 -1
  135. package/selected-skills/routing.js +52 -1
  136. package/selected-skills/trading-skills/UPSTREAM.md +10 -0
  137. package/selected-skills/trading-skills/skills/catalyst-map/SKILL.md +7 -0
  138. package/selected-skills/trading-skills/skills/evidence-gap-check/SKILL.md +7 -0
  139. package/selected-skills/trading-skills/skills/execution-plan-check/SKILL.md +7 -0
  140. package/selected-skills/trading-skills/skills/journal-pattern-analyzer/SKILL.md +7 -0
  141. package/selected-skills/trading-skills/skills/macro-event-analysis/SKILL.md +6 -9
  142. package/selected-skills/trading-skills/skills/macro-event-analysis/references/interpretation-guide.md +1 -1
  143. package/selected-skills/trading-skills/skills/market-regime-analysis/SKILL.md +5 -8
  144. package/selected-skills/trading-skills/skills/portfolio-concentration/SKILL.md +7 -0
  145. package/selected-skills/trading-skills/skills/position-management/SKILL.md +7 -0
  146. package/selected-skills/trading-skills/skills/position-sizing/SKILL.md +7 -0
  147. package/selected-skills/trading-skills/skills/post-trade-review/SKILL.md +7 -0
  148. package/selected-skills/trading-skills/skills/risk-reward-sanity-check/SKILL.md +7 -0
  149. package/selected-skills/trading-skills/skills/thesis-validation/SKILL.md +7 -0
  150. package/selected-skills/trading-skills/skills/watchlist-review/SKILL.md +7 -0
  151. package/watchlist/package.json +1 -1
  152. package/selected-skills/InvestSkill/install.sh +0 -212
  153. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/chart-master/SKILL.md +0 -648
  154. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/dcf-valuation/SKILL.md +0 -109
  155. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/full-report/SKILL.md +0 -301
  156. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/fundamental-analysis/SKILL.md +0 -67
  157. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/report-generator/SKILL.md +0 -857
  158. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/research-bundle/SKILL.md +0 -94
  159. package/selected-skills/china-stock-research-skills/skills/china-stock-research-orchestrator/SKILL.md +0 -75
  160. package/selected-skills/china-stock-research-skills/skills/china-stock-research-orchestrator/references/final-output-contract.md +0 -62
  161. package/selected-skills/china-stock-research-skills/skills/china-stock-research-orchestrator/references/routing-matrix.md +0 -34
  162. package/selected-skills/china-stock-research-skills/skills/china-stock-research-orchestrator/references/sector-overlay-escalation-rules.md +0 -38
  163. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-3-statement-model/SKILL.md +0 -287
  164. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-accrual-schedule/SKILL.md +0 -182
  165. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-audit-xls/SKILL.md +0 -231
  166. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-clean-data-xls/SKILL.md +0 -237
  167. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-comps/SKILL.md +0 -104
  168. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-dcf-model/SKILL.md +0 -68
  169. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-deal-screening/SKILL.md +0 -212
  170. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-deck-refresh/SKILL.md +0 -221
  171. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-gl-recon/SKILL.md +0 -232
  172. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-ib-check-deck/SKILL.md +0 -252
  173. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-lbo-model/SKILL.md +0 -273
  174. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-market-data/SKILL.md +0 -229
  175. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-model-update/SKILL.md +0 -219
  176. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-ppt-template-creator/SKILL.md +0 -231
  177. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-pptx-author/SKILL.md +0 -240
  178. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-roll-forward/SKILL.md +0 -189
  179. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-skill-creator/SKILL.md +0 -304
  180. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-tax-loss-harvesting/SKILL.md +0 -200
  181. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-xlsx-author/SKILL.md +0 -256
  182. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/fund-admin/skills/china-accrual-schedule/SKILL.md +0 -190
  183. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/fund-admin/skills/china-break-trace/SKILL.md +0 -182
  184. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/fund-admin/skills/china-gl-recon/SKILL.md +0 -200
  185. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/fund-admin/skills/china-nav-tieout/SKILL.md +0 -233
  186. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/fund-admin/skills/china-roll-forward/SKILL.md +0 -178
  187. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/fund-admin/skills/china-variance-commentary/SKILL.md +0 -190
  188. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/investment-banking/skills/china-buyer-list/SKILL.md +0 -198
  189. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/investment-banking/skills/china-cim-builder/SKILL.md +0 -223
  190. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/investment-banking/skills/china-competitive-analysis/SKILL.md +0 -233
  191. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/investment-banking/skills/china-datapack-builder/SKILL.md +0 -232
  192. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/investment-banking/skills/china-deal-tracker/SKILL.md +0 -151
  193. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/investment-banking/skills/china-merger-model/SKILL.md +0 -226
  194. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/investment-banking/skills/china-pitch-deck/SKILL.md +0 -231
  195. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/investment-banking/skills/china-process-letter/SKILL.md +0 -249
  196. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/investment-banking/skills/china-strip-profile/SKILL.md +0 -196
  197. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/investment-banking/skills/china-teaser/SKILL.md +0 -235
  198. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/operations/skills/china-kyc-doc-parse/SKILL.md +0 -252
  199. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/operations/skills/china-kyc-rules/SKILL.md +0 -223
  200. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/private-equity/skills/china-ai-readiness/SKILL.md +0 -184
  201. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/private-equity/skills/china-dd-checklist/SKILL.md +0 -217
  202. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/private-equity/skills/china-dd-meeting-prep/SKILL.md +0 -290
  203. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/private-equity/skills/china-deal-sourcing/SKILL.md +0 -224
  204. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/private-equity/skills/china-ic-memo/SKILL.md +0 -230
  205. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/private-equity/skills/china-portfolio-monitoring/SKILL.md +0 -214
  206. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/private-equity/skills/china-returns-analysis/SKILL.md +0 -176
  207. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/private-equity/skills/china-unit-economics/SKILL.md +0 -192
  208. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/private-equity/skills/china-value-creation-plan/SKILL.md +0 -193
  209. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/wealth-management/skills/china-client-report/SKILL.md +0 -205
  210. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/wealth-management/skills/china-client-review/SKILL.md +0 -218
  211. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/wealth-management/skills/china-financial-plan/SKILL.md +0 -259
  212. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/wealth-management/skills/china-investment-proposal/SKILL.md +0 -271
  213. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/wealth-management/skills/china-portfolio-rebalance/SKILL.md +0 -191
  214. package/selected-skills/financeskills/skills/ai-anomaly-detection/EXAMPLE.md +0 -21
  215. package/selected-skills/financeskills/skills/ai-anomaly-detection/SKILL.md +0 -84
  216. package/selected-skills/financeskills/skills/ai-anomaly-detection/references/feature-engineering.md +0 -20
  217. package/selected-skills/financeskills/skills/ai-anomaly-detection/references/ml-algorithms.md +0 -28
  218. package/selected-skills/financeskills/skills/aro-computation/EXAMPLE.md +0 -21
  219. package/selected-skills/financeskills/skills/aro-computation/SKILL.md +0 -82
  220. package/selected-skills/financeskills/skills/aro-computation/references/aro-standards.md +0 -22
  221. package/selected-skills/financeskills/skills/aro-computation/references/pv-math.md +0 -27
  222. package/selected-skills/financeskills/skills/audit-checklist/EXAMPLE.md +0 -17
  223. package/selected-skills/financeskills/skills/audit-checklist/SKILL.md +0 -77
  224. package/selected-skills/financeskills/skills/audit-checklist/references/internal-controls.md +0 -36
  225. package/selected-skills/financeskills/skills/audit-checklist/references/isa-standards.md +0 -26
  226. package/selected-skills/financeskills/skills/automated-reconciliation/EXAMPLE.md +0 -21
  227. package/selected-skills/financeskills/skills/automated-reconciliation/SKILL.md +0 -87
  228. package/selected-skills/financeskills/skills/automated-reconciliation/assets/reconciliation-statement-template.md +0 -31
  229. package/selected-skills/financeskills/skills/automated-reconciliation/references/fuzzy-logic.md +0 -27
  230. package/selected-skills/financeskills/skills/automated-reconciliation/references/rec-controls.md +0 -28
  231. package/selected-skills/financeskills/skills/budget-forecast/EXAMPLE.md +0 -21
  232. package/selected-skills/financeskills/skills/budget-forecast/SKILL.md +0 -87
  233. package/selected-skills/financeskills/skills/budget-forecast/references/forecasting-best-practices.md +0 -26
  234. package/selected-skills/financeskills/skills/budget-forecast/references/scenario-analysis.md +0 -25
  235. package/selected-skills/financeskills/skills/close-management/EXAMPLE.md +0 -17
  236. package/selected-skills/financeskills/skills/close-management/SKILL.md +0 -85
  237. package/selected-skills/financeskills/skills/close-management/references/close-task-library.md +0 -32
  238. package/selected-skills/financeskills/skills/corporate-consolidation/EXAMPLE.md +0 -21
  239. package/selected-skills/financeskills/skills/corporate-consolidation/SKILL.md +0 -84
  240. package/selected-skills/financeskills/skills/corporate-consolidation/references/consolidation-standard.md +0 -28
  241. package/selected-skills/financeskills/skills/corporate-consolidation/references/minority-interest.md +0 -25
  242. package/selected-skills/financeskills/skills/crypto-accounting/EXAMPLE.md +0 -21
  243. package/selected-skills/financeskills/skills/crypto-accounting/SKILL.md +0 -81
  244. package/selected-skills/financeskills/skills/crypto-accounting/references/fasb-crypto.md +0 -26
  245. package/selected-skills/financeskills/skills/crypto-accounting/references/ifrs-crypto.md +0 -25
  246. package/selected-skills/financeskills/skills/cvp-breakeven/EXAMPLE.md +0 -21
  247. package/selected-skills/financeskills/skills/cvp-breakeven/SKILL.md +0 -78
  248. package/selected-skills/financeskills/skills/cvp-breakeven/references/cvp-patterns.md +0 -28
  249. package/selected-skills/financeskills/skills/debt-payoff/EXAMPLE.md +0 -21
  250. package/selected-skills/financeskills/skills/debt-payoff/SKILL.md +0 -94
  251. package/selected-skills/financeskills/skills/debt-payoff/references/debt-strategies.md +0 -32
  252. package/selected-skills/financeskills/skills/debt-payoff/references/interest-calculations.md +0 -27
  253. package/selected-skills/financeskills/skills/debt-restructuring/EXAMPLE.md +0 -21
  254. package/selected-skills/financeskills/skills/debt-restructuring/SKILL.md +0 -79
  255. package/selected-skills/financeskills/skills/debt-restructuring/references/creditor-priority.md +0 -26
  256. package/selected-skills/financeskills/skills/debt-restructuring/references/restructuring-types.md +0 -24
  257. package/selected-skills/financeskills/skills/deferred-tax/EXAMPLE.md +0 -21
  258. package/selected-skills/financeskills/skills/deferred-tax/SKILL.md +0 -86
  259. package/selected-skills/financeskills/skills/deferred-tax/references/td-catalogue.md +0 -39
  260. package/selected-skills/financeskills/skills/earned-value-mgmt/EXAMPLE.md +0 -21
  261. package/selected-skills/financeskills/skills/earned-value-mgmt/SKILL.md +0 -79
  262. package/selected-skills/financeskills/skills/earned-value-mgmt/references/forecasting-eac.md +0 -27
  263. package/selected-skills/financeskills/skills/earned-value-mgmt/references/pmi-evm.md +0 -29
  264. package/selected-skills/financeskills/skills/esg-reporting/EXAMPLE.md +0 -17
  265. package/selected-skills/financeskills/skills/esg-reporting/SKILL.md +0 -79
  266. package/selected-skills/financeskills/skills/esg-reporting/references/ghg-protocol.md +0 -22
  267. package/selected-skills/financeskills/skills/esg-reporting/references/sasb-map.md +0 -25
  268. package/selected-skills/financeskills/skills/financial-analysis/EXAMPLE.md +0 -21
  269. package/selected-skills/financeskills/skills/financial-analysis/SKILL.md +0 -108
  270. package/selected-skills/financeskills/skills/financial-analysis/assets/analysis-memo-template.md +0 -31
  271. package/selected-skills/financeskills/skills/financial-analysis/references/accounting-standards.md +0 -45
  272. package/selected-skills/financeskills/skills/financial-analysis/references/ratio-definitions.md +0 -14
  273. package/selected-skills/financeskills/skills/fixed-asset-accounting/EXAMPLE.md +0 -21
  274. package/selected-skills/financeskills/skills/fixed-asset-accounting/SKILL.md +0 -78
  275. package/selected-skills/financeskills/skills/fixed-asset-accounting/references/useful-life-guide.md +0 -30
  276. package/selected-skills/financeskills/skills/intercompany-accounting/EXAMPLE.md +0 -21
  277. package/selected-skills/financeskills/skills/intercompany-accounting/SKILL.md +0 -79
  278. package/selected-skills/financeskills/skills/intercompany-accounting/references/elimination-entries.md +0 -35
  279. package/selected-skills/financeskills/skills/inventory-costing/EXAMPLE.md +0 -21
  280. package/selected-skills/financeskills/skills/inventory-costing/SKILL.md +0 -80
  281. package/selected-skills/financeskills/skills/inventory-costing/references/costing-examples.md +0 -31
  282. package/selected-skills/financeskills/skills/investment-analysis/EXAMPLE.md +0 -21
  283. package/selected-skills/financeskills/skills/investment-analysis/SKILL.md +0 -82
  284. package/selected-skills/financeskills/skills/investment-analysis/references/competitive-advantage.md +0 -31
  285. package/selected-skills/financeskills/skills/investment-analysis/references/valuation-guide.md +0 -29
  286. package/selected-skills/financeskills/skills/journal-entry/EXAMPLE.md +0 -21
  287. package/selected-skills/financeskills/skills/journal-entry/SKILL.md +0 -94
  288. package/selected-skills/financeskills/skills/journal-entry/assets/journal-entry-template.md +0 -21
  289. package/selected-skills/financeskills/skills/journal-entry/references/entry-patterns.md +0 -51
  290. package/selected-skills/financeskills/skills/lbo-modeling/EXAMPLE.md +0 -21
  291. package/selected-skills/financeskills/skills/lbo-modeling/SKILL.md +0 -88
  292. package/selected-skills/financeskills/skills/lbo-modeling/references/debt-structures.md +0 -22
  293. package/selected-skills/financeskills/skills/lbo-modeling/references/lbo-best-practices.md +0 -27
  294. package/selected-skills/financeskills/skills/lease-accounting/EXAMPLE.md +0 -21
  295. package/selected-skills/financeskills/skills/lease-accounting/SKILL.md +0 -88
  296. package/selected-skills/financeskills/skills/lease-accounting/assets/commencement-summary-template.md +0 -28
  297. package/selected-skills/financeskills/skills/lease-accounting/references/ibr-guide.md +0 -26
  298. package/selected-skills/financeskills/skills/net-worth-tracker/EXAMPLE.md +0 -21
  299. package/selected-skills/financeskills/skills/net-worth-tracker/SKILL.md +0 -98
  300. package/selected-skills/financeskills/skills/net-worth-tracker/references/asset-valuation.md +0 -40
  301. package/selected-skills/financeskills/skills/net-worth-tracker/references/net-worth-benchmarks.md +0 -33
  302. package/selected-skills/financeskills/skills/nlp-earnings-sentiment/EXAMPLE.md +0 -17
  303. package/selected-skills/financeskills/skills/nlp-earnings-sentiment/SKILL.md +0 -77
  304. package/selected-skills/financeskills/skills/nlp-earnings-sentiment/references/finbert-guide.md +0 -26
  305. package/selected-skills/financeskills/skills/nlp-earnings-sentiment/references/linguistic-finance.md +0 -23
  306. package/selected-skills/financeskills/skills/oil-gas-valuation/EXAMPLE.md +0 -21
  307. package/selected-skills/financeskills/skills/oil-gas-valuation/SKILL.md +0 -86
  308. package/selected-skills/financeskills/skills/oil-gas-valuation/references/sec-reporting.md +0 -22
  309. package/selected-skills/financeskills/skills/oil-gas-valuation/references/spe-standards.md +0 -25
  310. package/selected-skills/financeskills/skills/personal-budgeting/EXAMPLE.md +0 -21
  311. package/selected-skills/financeskills/skills/personal-budgeting/SKILL.md +0 -100
  312. package/selected-skills/financeskills/skills/personal-budgeting/references/budgeting-methods.md +0 -40
  313. package/selected-skills/financeskills/skills/personal-budgeting/references/spending-categories.md +0 -40
  314. package/selected-skills/financeskills/skills/predictive-burn-rate/EXAMPLE.md +0 -21
  315. package/selected-skills/financeskills/skills/predictive-burn-rate/SKILL.md +0 -82
  316. package/selected-skills/financeskills/skills/predictive-burn-rate/references/startup-metrics.md +0 -27
  317. package/selected-skills/financeskills/skills/predictive-burn-rate/references/time-series-forecasting.md +0 -22
  318. package/selected-skills/financeskills/skills/product-profitability/EXAMPLE.md +0 -21
  319. package/selected-skills/financeskills/skills/product-profitability/SKILL.md +0 -83
  320. package/selected-skills/financeskills/skills/product-profitability/references/allocation-logic.md +0 -28
  321. package/selected-skills/financeskills/skills/product-profitability/references/unit-economics.md +0 -30
  322. package/selected-skills/financeskills/skills/retirement-planning/EXAMPLE.md +0 -21
  323. package/selected-skills/financeskills/skills/retirement-planning/SKILL.md +0 -98
  324. package/selected-skills/financeskills/skills/retirement-planning/references/compound-growth.md +0 -38
  325. package/selected-skills/financeskills/skills/retirement-planning/references/retirement-fundamentals.md +0 -29
  326. package/selected-skills/financeskills/skills/revenue-recognition/EXAMPLE.md +0 -21
  327. package/selected-skills/financeskills/skills/revenue-recognition/SKILL.md +0 -86
  328. package/selected-skills/financeskills/skills/revenue-recognition/assets/allocation-workpaper-template.md +0 -30
  329. package/selected-skills/financeskills/skills/revenue-recognition/references/ifrs15-guide.md +0 -28
  330. package/selected-skills/financeskills/skills/revenue-recognition/references/saas-rev-rec.md +0 -26
  331. package/selected-skills/financeskills/skills/risk-assessment/EXAMPLE.md +0 -21
  332. package/selected-skills/financeskills/skills/risk-assessment/SKILL.md +0 -83
  333. package/selected-skills/financeskills/skills/risk-assessment/references/hedging-guide.md +0 -24
  334. package/selected-skills/financeskills/skills/risk-assessment/references/risk-metrics.md +0 -24
  335. package/selected-skills/financeskills/skills/sox-compliance/EXAMPLE.md +0 -17
  336. package/selected-skills/financeskills/skills/sox-compliance/SKILL.md +0 -88
  337. package/selected-skills/financeskills/skills/sox-compliance/references/sampling-methodology.md +0 -27
  338. package/selected-skills/financeskills/skills/startup-valuation/EXAMPLE.md +0 -21
  339. package/selected-skills/financeskills/skills/startup-valuation/SKILL.md +0 -88
  340. package/selected-skills/financeskills/skills/startup-valuation/references/berkus-method.md +0 -25
  341. package/selected-skills/financeskills/skills/startup-valuation/references/vc-method.md +0 -23
  342. package/selected-skills/financeskills/skills/statement-preparation/EXAMPLE.md +0 -21
  343. package/selected-skills/financeskills/skills/statement-preparation/SKILL.md +0 -86
  344. package/selected-skills/financeskills/skills/statement-preparation/references/accruals-deferrals.md +0 -24
  345. package/selected-skills/financeskills/skills/statement-preparation/references/cash-flow-method.md +0 -32
  346. package/selected-skills/financeskills/skills/tax-efficient-investing/EXAMPLE.md +0 -21
  347. package/selected-skills/financeskills/skills/tax-efficient-investing/SKILL.md +0 -97
  348. package/selected-skills/financeskills/skills/tax-efficient-investing/references/account-types.md +0 -33
  349. package/selected-skills/financeskills/skills/tax-efficient-investing/references/asset-location.md +0 -36
  350. package/selected-skills/financeskills/skills/tax-planning/EXAMPLE.md +0 -21
  351. package/selected-skills/financeskills/skills/tax-planning/SKILL.md +0 -93
  352. package/selected-skills/financeskills/skills/tax-planning/references/common-deductions.md +0 -28
  353. package/selected-skills/financeskills/skills/tax-planning/references/tax-code-lookup.md +0 -25
  354. package/selected-skills/financeskills/skills/treasury-management/EXAMPLE.md +0 -21
  355. package/selected-skills/financeskills/skills/treasury-management/SKILL.md +0 -83
  356. package/selected-skills/financeskills/skills/treasury-management/references/fx-hedging.md +0 -27
  357. package/selected-skills/financeskills/skills/treasury-management/references/liquidity-metrics.md +0 -24
  358. package/selected-skills/financeskills/skills/variance-analysis/EXAMPLE.md +0 -21
  359. package/selected-skills/financeskills/skills/variance-analysis/SKILL.md +0 -78
  360. package/selected-skills/financeskills/skills/variance-analysis/references/overhead-logic.md +0 -24
  361. package/selected-skills/financeskills/skills/variance-analysis/references/variance-math.md +0 -35
  362. package/selected-skills/financeskills/skills/venture-debt/EXAMPLE.md +0 -21
  363. package/selected-skills/financeskills/skills/venture-debt/SKILL.md +0 -84
  364. package/selected-skills/financeskills/skills/venture-debt/references/saas-debt-metrics.md +0 -26
  365. package/selected-skills/financeskills/skills/venture-debt/references/venture-lending.md +0 -23
  366. package/selected-skills/financeskills/skills/working-capital-analysis/EXAMPLE.md +0 -21
  367. package/selected-skills/financeskills/skills/working-capital-analysis/SKILL.md +0 -83
  368. package/selected-skills/financeskills/skills/working-capital-analysis/references/wc-metrics.md +0 -30
  369. package/selected-skills/investment-skills/Makefile +0 -29
  370. package/selected-skills/investment-skills/skills/buffett-investment-framework/agents/openai.yaml +0 -4
  371. package/selected-skills/investment-skills/skills/buffett-investment-framework/scripts/framework.py +0 -470
  372. package/selected-skills/trading-skills/skills/earnings-preview/SKILL.md +0 -124
  373. package/selected-skills/trading-skills/skills/earnings-preview/references/data-providers.md +0 -26
  374. package/selected-skills/trading-skills/skills/earnings-preview/references/providers/fmp.md +0 -49
  375. package/selected-skills/trading-skills/skills/earnings-preview/references/providers/polygon.md +0 -45
  376. package/selected-skills/trading-skills/skills/earnings-preview/references/providers/tradingeconomics.md +0 -49
  377. package/selected-skills/trading-skills/skills/earnings-preview/references/relevance-ranking.md +0 -24
  378. package/selected-skills/trading-skills/skills/earnings-trade-prep/SKILL.md +0 -134
  379. package/selected-skills/trading-skills/skills/earnings-trade-prep/references/workflow-framework.md +0 -65
  380. package/selected-skills/trading-skills/skills/macro-event-analysis/references/data-providers.md +0 -23
  381. package/selected-skills/trading-skills/skills/macro-event-analysis/references/providers/fmp.md +0 -28
  382. package/selected-skills/trading-skills/skills/macro-event-analysis/references/providers/tradingeconomics.md +0 -40
  383. package/selected-skills/trading-skills/skills/market-regime-analysis/references/data-providers.md +0 -26
  384. package/selected-skills/trading-skills/skills/market-regime-analysis/references/providers/fmp.md +0 -46
  385. package/selected-skills/trading-skills/skills/market-regime-analysis/references/providers/polygon.md +0 -36
  386. package/selected-skills/trading-skills/skills/market-regime-analysis/references/providers/tradingeconomics.md +0 -46
  387. package/selected-skills/trading-skills/skills/portfolio-risk-review/SKILL.md +0 -126
  388. package/selected-skills/trading-skills/skills/portfolio-risk-review/references/workflow-framework.md +0 -57
  389. package/selected-skills/trading-skills/skills/post-trade-debrief/SKILL.md +0 -99
  390. package/selected-skills/trading-skills/skills/post-trade-debrief/references/workflow-framework.md +0 -51
  391. package/selected-skills/trading-skills/skills/pre-trade-check/SKILL.md +0 -136
  392. package/selected-skills/trading-skills/skills/pre-trade-check/references/workflow-framework.md +0 -61
@@ -5,13 +5,26 @@ const {
5
5
  SettingsSecretField,
6
6
  SettingsFormModel,
7
7
  SegmentedControl,
8
+ Pill,
8
9
  Switch,
10
+ Tag,
9
11
  Modal,
10
- writeClipboard,
11
12
  IconRightUpOutlineRegular,
12
13
  } = require('@deepseek-ai/dsh-client-ui-primitives')
13
14
  const { SELECTED_SKILL_CATALOG, SELECTED_SKILL_TAG_LABELS } = require('../selected-skills/catalog.js')
14
- const { SELECTED_SKILL_ROLES, SELECTED_SKILL_ROUTING } = require('../selected-skills/routing.js')
15
+ const {
16
+ SELECTED_SKILL_FILTER_ALL,
17
+ filterSelectedSkills,
18
+ selectedSkillFacetCounts,
19
+ selectedSkillPresetTotals,
20
+ selectedSkillRoles,
21
+ selectedSkillTraitOrder,
22
+ } = require('../selected-skills/filter.js')
23
+ const {
24
+ SELECTED_SKILL_PRESETS,
25
+ SELECTED_SKILL_PRESET_ORDER,
26
+ SELECTED_SKILL_ROUTING,
27
+ } = require('../selected-skills/routing.js')
15
28
 
16
29
  /**
17
30
  * Two different strings: `ENTRY_ID` is the settings namespace (= profile entry
@@ -51,6 +64,9 @@ const DOC_URLS = {
51
64
  /** Render order = array order; one list drives status, refs, drafts and event refresh. */
52
65
  const CREDENTIAL_FIELDS = ['fuyao', 'ftshare', 'anysearch', 'wind', 'paddleocr']
53
66
  const SELECTED_SKILL_FIELDS = SELECTED_SKILL_CATALOG.map(({ key }) => key)
67
+ // Stable orders: facet counts change with the other dimension, but chips must not jump under the cursor.
68
+ const SELECTED_SKILL_TRAITS = selectedSkillTraitOrder()
69
+ const SELECTED_SKILL_PRESET_TOTALS = selectedSkillPresetTotals()
54
70
  const DEFAULT_REFS = {
55
71
  fuyao: FUYAO_DEFAULT_REF,
56
72
  ftshare: FTSHARE_DEFAULT_REF,
@@ -81,16 +97,17 @@ const zh = {
81
97
  paddleocrLabel: 'PaddleOCR 文档解析 Token',
82
98
  paddleocrHint: '配置 Token 后自动解析 PDF、图片。保存后新自动模式会话生效。',
83
99
  selectedSkillsTitle: '精选 Skills',
84
- selectedSkillsModeLabel: '自动选择方法',
85
- selectedSkillsModeHint: '开启后按角色开放该角色全部方法,由模型按触发条件选择;下方勾选只在手动模式生效。',
86
- selectedSkillsModeShort: '自动',
87
- selectedSkillsFilterLabel: '按能力筛选',
88
- selectedSkillsEmpty: '没有匹配这个标签的 Skill。',
89
- selectedSkillsRoles: '角色:',
90
- selectedSkillsWhen: '何时使用:',
91
- selectedSkillsCopyName: '复制 /技能名',
92
- selectedSkillsCopied: '已复制',
93
- selectedSkillsDetail: '详情',
100
+ selectedSkillsModeLabel: '智能装载 Skills',
101
+ selectedSkillsModeHint: '开启后,由大模型根据用户提问,智能装载合适的精选「Skills」。',
102
+ selectedSkillsFilterLabel: '筛选精选 Skills',
103
+ selectedSkillsTraitGroup: 'Skill 特点',
104
+ selectedSkillsPresetGroup: '适用预设',
105
+ selectedSkillsAll: '全部',
106
+ selectedSkillsEmpty: '没有符合当前筛选条件的 Skill。',
107
+ selectedSkillsWhen: '何时使用',
108
+ selectedSkillsKeywords: '关键词',
109
+ selectedSkillsOpenDetail: '查看 Skill 原文',
110
+ selectedSkillsPresetUnavailable: '该预设不加载精选 Skills',
94
111
  selectedSkillsDetailClose: '关闭',
95
112
  selectedSkillsDocLoading: '原文读取中…',
96
113
  selectedSkillsDocFailed: '原文读不到:这份快照没随包落地,或暂时读不出来。',
@@ -127,16 +144,17 @@ const en = {
127
144
  paddleocrLabel: 'PaddleOCR document token',
128
145
  paddleocrHint: 'Configure the token to parse PDFs and images automatically. Takes effect in new Auto mode sessions.',
129
146
  selectedSkillsTitle: 'Selected Skills',
130
- selectedSkillsModeLabel: 'Pick methods automatically',
131
- selectedSkillsModeHint: 'When on, every method owned by a role is exposed and the model picks by trigger; the switches below apply to Manual mode only.',
132
- selectedSkillsModeShort: 'Auto',
133
- selectedSkillsFilterLabel: 'Filter by capability',
134
- selectedSkillsEmpty: 'No skills match this tag.',
135
- selectedSkillsRoles: 'Roles: ',
136
- selectedSkillsWhen: 'Use when: ',
137
- selectedSkillsCopyName: 'Copy /name',
138
- selectedSkillsCopied: 'Copied',
139
- selectedSkillsDetail: 'Details',
147
+ selectedSkillsModeLabel: 'Auto-load Skills',
148
+ selectedSkillsModeHint: 'When on, the model picks the relevant selected Skills for each question.',
149
+ selectedSkillsFilterLabel: 'Filter selected Skills',
150
+ selectedSkillsTraitGroup: 'Skill traits',
151
+ selectedSkillsPresetGroup: 'Preset',
152
+ selectedSkillsAll: 'All',
153
+ selectedSkillsEmpty: 'No skills match the current filters.',
154
+ selectedSkillsWhen: 'Use when',
155
+ selectedSkillsKeywords: 'Keywords',
156
+ selectedSkillsOpenDetail: 'Open skill source',
157
+ selectedSkillsPresetUnavailable: 'This preset does not load selected Skills.',
140
158
  selectedSkillsDetailClose: 'Close',
141
159
  selectedSkillsDocLoading: 'Loading the source…',
142
160
  selectedSkillsDocFailed: 'The source could not be read: this snapshot is not in the installed package, or it cannot be opened right now.',
@@ -172,7 +190,6 @@ function installStyles() {
172
190
  style.dataset.capitalConfig = 'true'
173
191
  style.textContent = `
174
192
  .capital-config-card { display: flex; flex-direction: column; gap: 12px; }
175
- .capital-config-title { margin: 0; font-size: 14px; font-weight: 500; line-height: 20px; }
176
193
  /* Declare display only when not hidden, or the hidden attribute loses to author display. */
177
194
  .capital-config-panel { flex-direction: column; gap: 12px; }
178
195
  .capital-config-panel:not([hidden]) { display: flex; }
@@ -188,25 +205,39 @@ function installStyles() {
188
205
  .capital-config-secret-row label { flex: 0 1 auto; }
189
206
  .capital-config-secret-row label ~ span { order: 1; margin-left: auto; }
190
207
  .capital-config-field { display: flex; flex-direction: column; gap: 6px; padding: 12px 0; border-top: 0.5px solid var(--dsw-alias-border-l2); }
191
- /* Filter column stays sticky while the 35-row list scrolls; padding-top matches the 24px rhythm. */
192
- .capital-config-selected-layout { display: flex; align-items: flex-start; gap: 16px; padding-top: 12px; }
193
- .capital-config-selected-filter { position: sticky; top: 12px; flex: 0 0 132px; display: flex; flex-direction: column; align-items: stretch; gap: 3px; }
194
- .capital-config-selected-filter-button { display: flex; align-items: baseline; justify-content: space-between; gap: 6px; min-height: 26px; padding: 3px 8px; border: 0.5px solid var(--dsw-alias-border-l1); border-radius: 6px; background: transparent; color: var(--dsw-alias-label-secondary); font: inherit; font-size: 12px; line-height: 18px; text-align: left; cursor: pointer; }
195
- .capital-config-selected-filter-button:hover { background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-primary); }
196
- .capital-config-selected-filter-button[aria-pressed="true"] { border-color: var(--dsw-alias-brand-primary); background: color-mix(in srgb, var(--dsw-alias-brand-primary) 12%, transparent); color: var(--dsw-alias-label-primary); }
197
- .capital-config-selected-filter-count { flex: none; color: var(--dsw-alias-label-tertiary); font-variant-numeric: tabular-nums; }
198
- .capital-config-selected-filter-button[aria-pressed="true"] .capital-config-selected-filter-count { color: inherit; }
199
- .capital-config-selected-list { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; }
200
- .capital-config-skill-tags { display: flex; flex-wrap: wrap; gap: 4px; }
201
- .capital-config-skill-tag { padding: 1px 5px; border-radius: 4px; background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-tertiary); font-size: 11px; line-height: 16px; }
202
- .capital-config-skill-heading { min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
203
- .capital-config-skill-actions { flex: none; display: inline-flex; align-items: center; gap: 6px; }
204
- .capital-config-skill-action { flex: none; min-height: 22px; padding: 2px 8px; border: 0.5px solid var(--dsw-alias-border-l2); border-radius: 6px; background: color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent); color: var(--dsw-alias-brand-primary); font: inherit; font-size: 11px; line-height: 16px; white-space: nowrap; cursor: pointer; }
205
- .capital-config-skill-action:hover { border-color: var(--dsw-alias-brand-primary); background: color-mix(in srgb, var(--dsw-alias-brand-primary) 18%, transparent); }
206
- .capital-config-skill-action:focus-visible { outline: var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsw-alias-brand-primary)); outline-offset: 1px; }
207
- .capital-config-skill-repo { display: inline-flex; align-items: center; gap: 3px; color: var(--dsw-alias-label-tertiary); font-size: 11px; line-height: 16px; text-decoration: none; }
208
- .capital-config-skill-repo:hover { color: var(--dsw-alias-brand-primary); text-decoration: underline; }
208
+ .capital-config-selected-mode { padding: 12px 14px; border: 0.5px solid var(--dsw-alias-border-l1); border-radius: 10px; background: var(--dsw-alias-bg-layer-2); }
209
+ .capital-config-switch-row { align-items: center; gap: 12px; display: flex; }
210
+ .capital-config-switch-text { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 4px; }
211
+ .capital-config-switch-label { color: var(--dsw-alias-label-primary); font-size: 13px; font-weight: 500; line-height: 20px; }
212
+ .capital-config-hint { margin: 0; color: var(--dsw-alias-label-tertiary); font-size: 12px; line-height: 18px; }
213
+ .capital-config-skills-browser { display: flex; flex-direction: column; gap: 16px; }
214
+ .capital-config-filters { display: flex; flex-direction: column; gap: 10px; padding: 12px 14px; border: 0.5px solid var(--dsw-alias-border-l1); border-radius: 10px; background: var(--dsw-alias-bg-layer-2); }
215
+ .capital-config-filter-row { display: flex; align-items: flex-start; gap: 12px; }
216
+ .capital-config-filter-label { flex: 0 0 auto; min-width: 64px; padding-top: 3px; color: var(--dsw-alias-label-tertiary); font-size: 11.5px; font-weight: 500; line-height: 18px; }
217
+ .capital-config-filter-options { display: flex; flex: 1 1 auto; flex-wrap: wrap; gap: 4px; min-width: 0; }
218
+ .capital-config-filter-pill { height: 22px; padding: 0 7px; gap: 5px; font-size: 11.5px; line-height: 16px; }
219
+ .capital-config-filter-pill:disabled { opacity: 0.45; cursor: not-allowed; }
220
+ .capital-config-filter-pill:disabled:hover { background: var(--dsw-alias-bg-layer-2); }
221
+ .capital-config-filter-count { color: var(--dsw-alias-label-tertiary); font-size: 10px; line-height: 14px; font-variant-numeric: tabular-nums; }
222
+ .capital-config-filter-pill[aria-pressed="true"] .capital-config-filter-count { color: inherit; opacity: 0.72; }
223
+ .capital-config-selected-list { display: flex; flex-direction: column; border-top: 0.5px solid var(--dsw-alias-border-l1); }
224
+ .capital-config-skill-item { border-bottom: 0.5px solid var(--dsw-alias-border-l1); }
225
+ .capital-config-skill-row { display: flex; align-items: flex-start; gap: 16px; padding: 14px 2px; }
226
+ .capital-config-skill-main { min-width: 0; flex: 1 1 auto; display: flex; flex-direction: column; gap: 6px; }
227
+ .capital-config-skill-heading { min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; }
228
+ .capital-config-skill-name { padding: 0; border: 0; border-radius: 4px; background: transparent; color: var(--dsw-alias-label-primary); font: inherit; font-size: 13px; font-weight: 500; line-height: 20px; text-align: left; cursor: pointer; }
229
+ .capital-config-skill-name:hover { color: var(--dsw-alias-brand-primary); }
230
+ .capital-config-skill-name:focus-visible { outline: var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsw-alias-brand-primary)); outline-offset: 2px; }
231
+ .capital-config-skill-tags, .capital-config-skill-presets { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px; }
232
+ .capital-config-skill-tag { font-weight: 400; }
233
+ .capital-config-skill-preset { font-weight: 500; }
209
234
  .capital-config-skill-description { margin: 0; color: var(--dsw-alias-label-secondary); font-size: 12px; line-height: 18px; }
235
+ .capital-config-skill-meta { display: grid; grid-template-columns: max-content minmax(0, 1fr); column-gap: 10px; row-gap: 2px; margin: 0; color: var(--dsw-alias-label-secondary); font-size: 12px; line-height: 18px; }
236
+ .capital-config-skill-meta dt { color: var(--dsw-alias-label-tertiary); font-weight: 500; white-space: nowrap; }
237
+ .capital-config-skill-meta dd { min-width: 0; margin: 0; }
238
+ .capital-config-skill-repo { display: inline-flex; align-items: center; gap: 3px; width: max-content; max-width: 100%; margin-top: 2px; color: var(--dsw-alias-label-tertiary); font-size: 11px; line-height: 16px; text-decoration: none; }
239
+ .capital-config-skill-repo:hover { color: var(--dsw-alias-brand-primary); text-decoration: underline; }
240
+ .capital-config-selected-empty { margin: 0; padding: 28px 0; color: var(--dsw-alias-label-tertiary); font-size: 12px; line-height: 18px; text-align: center; }
210
241
  /* Official Modal defaults to 380px; the div prefix outranks the hashed .dialog class. */
211
242
  div.capital-config-skill-modal { width: min(820px, 100%); max-height: 100%; }
212
243
  /* Scroll the body so the dialog's overflow:hidden cannot clip it. */
@@ -221,14 +252,6 @@ function installStyles() {
221
252
  .capital-config-doc-link { display: inline-flex; align-items: center; gap: 3px; color: var(--dsw-alias-label-tertiary); font-size: 12px; line-height: 20px; white-space: nowrap; text-decoration: none; }
222
253
  .capital-config-doc-link:hover { color: var(--dsw-alias-brand-primary); text-decoration: underline; }
223
254
  .capital-config-doc-link:focus-visible { border-radius: 3px; outline: var(--dsw-focus-ring-width, 2px) solid var(--dsw-focus-ring-color, var(--dsw-alias-brand-primary)); outline-offset: 2px; }
224
- .capital-config-selected-mode { margin-bottom: 12px; }
225
- .capital-config-switch-row { align-items: center; gap: 12px; display: flex; }
226
- .capital-config-switch-text { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 4px; }
227
- .capital-config-switch-label { color: var(--dsw-alias-label-primary); font-size: 13px; font-weight: 500; line-height: 20px; }
228
- .capital-config-hint { margin: 0; color: var(--dsw-alias-label-tertiary); font-size: 12px; line-height: 18px; }
229
- .capital-config-skill-roles { display: flex; flex-wrap: wrap; gap: 4px; }
230
- .capital-config-skill-role { padding: 1px 5px; border-radius: 4px; border: 0.5px solid var(--dsw-alias-border-l1); color: var(--dsw-alias-label-secondary); font-size: 11px; line-height: 16px; }
231
- .capital-config-skill-when { margin: 0; color: var(--dsw-alias-label-tertiary); font-size: 11.5px; line-height: 17px; }
232
255
  .capital-config-write-failed { margin: 0; color: var(--dsw-alias-state-error-primary); font-size: 12px; line-height: 18px; }
233
256
  /* Own inline-flex group so the host's wrapping never splits the two links. */
234
257
  .capital-config-plugin-links { flex: none; align-items: center; gap: 2px; display: inline-flex; }
@@ -537,27 +560,27 @@ function loadSkillDoc(name) {
537
560
  return pending
538
561
  }
539
562
 
540
- const COPIED_FLASH_MS = 1600
563
+ function presetLabel(role, locale) {
564
+ return SELECTED_SKILL_PRESETS[role]?.[locale] ?? role
565
+ }
541
566
 
542
- function SelectedSkillRow({ entry, state, copyable, disabled, onChange, t }) {
567
+ /** Routing text stays one sentence; split the keyword tail so both lines share a type scale. */
568
+ function splitUseWhen(value, locale) {
569
+ const marker = locale === 'en' ? 'Triggers on ' : ';关键词:'
570
+ const index = value.lastIndexOf(marker)
571
+ if (index <= 0) return { when: value, keywords: '' }
572
+ return {
573
+ when: value.slice(0, index).trim(),
574
+ keywords: value.slice(index + marker.length).trim().replace(locale === 'en' ? /\.$/ : /。$/, ''),
575
+ }
576
+ }
577
+
578
+ function SelectedSkillRow({ entry, state, disabled, onChange, t }) {
543
579
  const locale = skillLocale()
544
580
  const label = entry.label[locale]
545
581
  const repositoryUrl = `https://github.com/${entry.owner}/${entry.repository}`
546
- const copyTimer = useRef(null)
547
- const [copied, setCopied] = useState(false)
548
582
  const [detailOpen, setDetailOpen] = useState(false)
549
583
  const [doc, setDoc] = useState(null)
550
- useEffect(() => () => {
551
- if (copyTimer.current !== null) clearTimeout(copyTimer.current)
552
- }, [])
553
- const copyName = async () => {
554
- const accepted = await writeClipboard(`/${entry.name}`)
555
- // Do not flip the label if the clipboard rejected it.
556
- if (!accepted) return
557
- setCopied(true)
558
- if (copyTimer.current !== null) clearTimeout(copyTimer.current)
559
- copyTimer.current = setTimeout(() => setCopied(false), COPIED_FLASH_MS)
560
- }
561
584
  const prefetchDoc = () => {
562
585
  if (doc?.status === 'ready' || doc?.status === 'loading') return
563
586
  if (skillDocs.has(entry.name)) {
@@ -578,48 +601,56 @@ function SelectedSkillRow({ entry, state, copyable, disabled, onChange, t }) {
578
601
  : doc?.status === 'failed'
579
602
  ? h('p', { className: 'capital-config-skill-doc-state' }, t(doc.code === 'route_missing' ? 'selectedSkillsDocStale' : 'selectedSkillsDocFailed'))
580
603
  : h('p', { className: 'capital-config-skill-doc-state' }, t('selectedSkillsDocLoading'))
581
- return h('div', { className: 'capital-config-field' },
582
- h('div', { className: 'capital-config-switch-row' },
583
- h('div', { className: 'capital-config-switch-text' },
604
+ const { when, keywords } = splitUseWhen(SELECTED_SKILL_ROUTING[entry.name]?.useWhen?.[locale] ?? '', locale)
605
+ const roles = entry.roles ?? []
606
+ return h('div', { className: 'capital-config-skill-item' },
607
+ h('div', { className: 'capital-config-skill-row' },
608
+ h('div', { className: 'capital-config-skill-main' },
584
609
  h('div', { className: 'capital-config-skill-heading' },
585
- h('span', { className: 'capital-config-title' }, label),
586
- h('div', { className: 'capital-config-skill-actions' },
587
- // Manual: only enabled rows. Auto: the role owns every method, so copying any name is meaningful.
588
- copyable === true ? h('button', {
589
- type: 'button',
590
- className: 'capital-config-skill-action',
591
- title: `${t('selectedSkillsCopyName')}: ${entry.name}`,
592
- 'aria-label': `${t('selectedSkillsCopyName')}: ${entry.name}`,
593
- onClick: copyName,
594
- }, copied ? t('selectedSkillsCopied') : t('selectedSkillsCopyName')) : null,
595
- h('button', {
596
- type: 'button',
597
- className: 'capital-config-skill-action',
598
- 'aria-label': `${t('selectedSkillsDetail')}: ${entry.name}`,
599
- 'aria-haspopup': 'dialog',
600
- // Prefetch on hover / focus so the modal opens with content; click is the action.
601
- onPointerEnter: prefetchDoc,
602
- onFocus: prefetchDoc,
603
- onClick: () => {
604
- prefetchDoc()
605
- setDetailOpen(true)
606
- },
607
- }, t('selectedSkillsDetail')),
608
- h(Modal, {
609
- open: detailOpen,
610
- onClose: () => setDetailOpen(false),
611
- title: label,
612
- description: entry.name,
613
- closeLabel: t('selectedSkillsDetailClose'),
614
- className: 'capital-config-skill-modal',
615
- contentClassName: 'capital-config-skill-modal-content',
616
- }, detailContent),
617
- ),
610
+ h('button', {
611
+ type: 'button',
612
+ className: 'capital-config-skill-name',
613
+ title: t('selectedSkillsOpenDetail'),
614
+ 'aria-haspopup': 'dialog',
615
+ // Prefetch on hover / focus so the modal opens with content; click is the action.
616
+ onPointerEnter: prefetchDoc,
617
+ onFocus: prefetchDoc,
618
+ onClick: () => {
619
+ prefetchDoc()
620
+ setDetailOpen(true)
621
+ },
622
+ }, label),
623
+ h('div', { className: 'capital-config-skill-tags', role: 'group', 'aria-label': t('selectedSkillsTraitGroup') },
624
+ entry.tags.map((tag) => h(Tag, {
625
+ key: tag,
626
+ tone: 'neutral',
627
+ className: 'capital-config-skill-tag',
628
+ }, SELECTED_SKILL_TAG_LABELS[locale][tag] ?? tag))),
629
+ roles.length > 0 ? h('div', { className: 'capital-config-skill-presets', role: 'group', 'aria-label': t('selectedSkillsPresetGroup') },
630
+ roles.map((role) => h(Tag, {
631
+ key: role,
632
+ tone: 'info',
633
+ className: 'capital-config-skill-preset',
634
+ },
635
+ h('span', { className: 'capital-config-sr-only' }, `${t('selectedSkillsPresetGroup')}:`),
636
+ presetLabel(role, locale)))) : null,
637
+ h(Modal, {
638
+ open: detailOpen,
639
+ onClose: () => setDetailOpen(false),
640
+ title: label,
641
+ description: entry.name,
642
+ closeLabel: t('selectedSkillsDetailClose'),
643
+ className: 'capital-config-skill-modal',
644
+ contentClassName: 'capital-config-skill-modal-content',
645
+ }, detailContent),
618
646
  ),
619
647
  h('p', { className: 'capital-config-skill-description' }, entry.description[locale]),
620
- h('p', { className: 'capital-config-skill-when' }, `${t('selectedSkillsWhen')}${SELECTED_SKILL_ROUTING[entry.name]?.useWhen?.[locale] ?? ''}`),
621
- entry.roles?.length ? h('div', { className: 'capital-config-skill-roles' }, entry.roles.map((role) =>
622
- h('span', { key: role, className: 'capital-config-skill-role' }, SELECTED_SKILL_ROLES[role]?.[locale] ?? role))) : null,
648
+ h('dl', { className: 'capital-config-skill-meta' },
649
+ h('dt', { key: 'when-label' }, t('selectedSkillsWhen')),
650
+ h('dd', { key: 'when' }, when),
651
+ keywords ? h('dt', { key: 'keywords-label' }, t('selectedSkillsKeywords')) : null,
652
+ keywords ? h('dd', { key: 'keywords' }, keywords) : null,
653
+ ),
623
654
  h('a', {
624
655
  className: 'capital-config-skill-repo',
625
656
  href: repositoryUrl,
@@ -627,8 +658,6 @@ function SelectedSkillRow({ entry, state, copyable, disabled, onChange, t }) {
627
658
  rel: 'noopener noreferrer',
628
659
  title: t('selectedSkillsOpenRepo'),
629
660
  }, `${entry.owner}/${entry.repository}`, h(IconRightUpOutlineRegular, { size: 12 })),
630
- h('div', { className: 'capital-config-skill-tags' }, entry.tags.map((tag) =>
631
- h('span', { key: tag, className: 'capital-config-skill-tag' }, SELECTED_SKILL_TAG_LABELS[locale][tag] ?? tag))),
632
661
  ),
633
662
  h(Switch, {
634
663
  label,
@@ -654,7 +683,8 @@ function CapitalCard(props) {
654
683
  const autoMode = state.selectedSkillsMode?.auto === true
655
684
  const locale = skillLocale()
656
685
  const [tab, setTab] = useState('sources')
657
- const [tagFilter, setTagFilter] = useState('all')
686
+ const [traitFilter, setTraitFilter] = useState(SELECTED_SKILL_FILTER_ALL)
687
+ const [presetFilter, setPresetFilter] = useState(SELECTED_SKILL_FILTER_ALL)
658
688
  // Fetch on mount: tab labels carry numbers; hooks must precede the unavailable return.
659
689
  useEffect(() => { props.ensureBundleRows() }, [])
660
690
  // Pinned order is snapshotted on tab entry so rows never move under the cursor.
@@ -662,17 +692,11 @@ function CapitalCard(props) {
662
692
  .filter((entry) => state.selectedSkills?.[entry.key]?.on === true)
663
693
  .map((entry) => entry.key))
664
694
  const [pinnedSkills, setPinnedSkills] = useState(enabledKeys)
665
- useEffect(() => { if (state.available) setPinnedSkills(enabledKeys()) }, [state.available])
666
- const tagCounts = new Map()
667
- for (const entry of SELECTED_SKILL_CATALOG) {
668
- for (const tag of entry.tags) tagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1)
669
- }
670
- tagCounts.set('all', SELECTED_SKILL_CATALOG.length)
671
- const tags = ['all', ...Array.from(tagCounts.keys())
672
- .filter((tag) => tag !== 'all')
673
- .sort((left, right) => tagCounts.get(right) - tagCounts.get(left))]
674
- const visibleSkills = SELECTED_SKILL_CATALOG
675
- .filter((entry) => tagFilter === 'all' || entry.tags.includes(tagFilter))
695
+ useEffect(() => {
696
+ if (state.available && !autoMode) setPinnedSkills(enabledKeys())
697
+ }, [state.available, autoMode])
698
+ const facetCounts = selectedSkillFacetCounts({ trait: traitFilter, preset: presetFilter })
699
+ const visibleSkills = filterSelectedSkills({ trait: traitFilter, preset: presetFilter })
676
700
  .sort((left, right) => (pinnedSkills.has(left.key) ? 0 : 1) - (pinnedSkills.has(right.key) ? 0 : 1))
677
701
  const form = h(SettingsForm, {
678
702
  labels: {
@@ -708,7 +732,7 @@ function CapitalCard(props) {
708
732
  ),
709
733
  state.localFetch?.failed ? h('p', { role: 'status', className: 'capital-config-write-failed' }, t('saveFailed')) : null,
710
734
  )
711
- const modeSection = h('div', { className: 'capital-config-field capital-config-selected-mode' },
735
+ const modeSection = h('div', { className: 'capital-config-selected-mode' },
712
736
  h('div', { className: 'capital-config-switch-row' },
713
737
  h('div', { className: 'capital-config-switch-text' },
714
738
  h('span', { className: 'capital-config-switch-label' }, t('selectedSkillsModeLabel')),
@@ -723,37 +747,60 @@ function CapitalCard(props) {
723
747
  ),
724
748
  state.selectedSkillsMode?.failed ? h('p', { role: 'status', className: 'capital-config-write-failed' }, t('saveFailed')) : null,
725
749
  )
726
- const tagLabels = SELECTED_SKILL_TAG_LABELS[locale]
727
- const skillsFilter = h('div', { className: 'capital-config-selected-filter', role: 'group', 'aria-label': t('selectedSkillsFilterLabel') },
728
- ...tags.map((tag) => h('button', {
729
- key: tag,
750
+ const traitLabels = SELECTED_SKILL_TAG_LABELS[locale]
751
+ const filterRow = (label, pills) => h('div', { className: 'capital-config-filter-row' },
752
+ h('span', { className: 'capital-config-filter-label' }, label),
753
+ h('div', { className: 'capital-config-filter-options', role: 'group', 'aria-label': label }, ...pills),
754
+ )
755
+ const traitPills = SELECTED_SKILL_TRAITS.map((trait) => h(Pill, {
756
+ key: trait,
757
+ type: 'button',
758
+ className: 'capital-config-filter-pill',
759
+ active: traitFilter === trait,
760
+ 'aria-pressed': traitFilter === trait ? 'true' : 'false',
761
+ onClick: () => setTraitFilter(trait),
762
+ },
763
+ trait === SELECTED_SKILL_FILTER_ALL ? t('selectedSkillsAll') : (traitLabels[trait] ?? trait),
764
+ h('span', { className: 'capital-config-filter-count' }, String(facetCounts.traits.get(trait) ?? 0))))
765
+ const presetPills = [SELECTED_SKILL_FILTER_ALL, ...SELECTED_SKILL_PRESET_ORDER].map((preset) => {
766
+ const total = preset === SELECTED_SKILL_FILTER_ALL
767
+ ? SELECTED_SKILL_CATALOG.length
768
+ : SELECTED_SKILL_PRESET_TOTALS.get(preset) ?? 0
769
+ const unavailable = preset !== SELECTED_SKILL_FILTER_ALL && total === 0
770
+ return h(Pill, {
771
+ key: preset,
730
772
  type: 'button',
731
- className: 'capital-config-selected-filter-button',
732
- 'aria-pressed': tagFilter === tag ? 'true' : 'false',
733
- onClick: () => setTagFilter(tag),
734
- }, tagLabels[tag] ?? tag, h('span', { className: 'capital-config-selected-filter-count' }, String(tagCounts.get(tag))))),
773
+ className: 'capital-config-filter-pill',
774
+ active: presetFilter === preset,
775
+ 'aria-pressed': presetFilter === preset ? 'true' : 'false',
776
+ disabled: unavailable,
777
+ title: unavailable ? t('selectedSkillsPresetUnavailable') : undefined,
778
+ onClick: () => setPresetFilter(preset),
779
+ },
780
+ preset === SELECTED_SKILL_FILTER_ALL ? t('selectedSkillsAll') : presetLabel(preset, locale),
781
+ h('span', { className: 'capital-config-filter-count' }, String(facetCounts.presets.get(preset) ?? 0)))
782
+ })
783
+ const skillsFilter = h('div', { className: 'capital-config-filters', role: 'group', 'aria-label': t('selectedSkillsFilterLabel') },
784
+ filterRow(t('selectedSkillsTraitGroup'), traitPills),
785
+ filterRow(t('selectedSkillsPresetGroup'), presetPills),
735
786
  )
736
787
  // No cap: the user builds the set; the role prompt caps only how many it lists.
737
- const enabledSkills = SELECTED_SKILL_CATALOG.filter(
738
- (entry) => state.selectedSkills?.[entry.key]?.on === true,
739
- ).length
740
788
  const skillRows = visibleSkills.length > 0
741
789
  ? visibleSkills.map((entry) => h(SelectedSkillRow, {
742
790
  key: entry.key,
743
- entry: { ...entry, roles: SELECTED_SKILL_ROUTING[entry.name]?.roles ?? [] },
791
+ entry: { ...entry, roles: selectedSkillRoles(entry) },
744
792
  state: state.selectedSkills?.[entry.key],
745
- copyable: autoMode || state.selectedSkills?.[entry.key]?.on === true,
746
- disabled: disabled || state.saving || autoMode,
793
+ disabled: disabled || state.saving,
747
794
  onChange: (value) => props.toggleSelectedSkill(entry.key, value),
748
795
  t,
749
796
  }))
750
- : [h('p', { key: 'empty', className: 'capital-config-hint' }, t('selectedSkillsEmpty'))]
797
+ : [h('p', { key: 'empty', className: 'capital-config-selected-empty' }, t('selectedSkillsEmpty'))]
751
798
  // No cap banner: the icon is the only explanation. Unknown count prints no number.
752
799
  const withCount = (label, count) => (Number.isInteger(count) ? `${label} ${count}` : label)
753
800
  const options = [
754
801
  // A dirty draft while Save is off-screen must be announced on the tab.
755
802
  { value: 'sources', label: state.dirty ? t('titleUnsaved') : t('title') },
756
- { value: 'skills', label: `${t('selectedSkillsTitle')} ${autoMode ? t('selectedSkillsModeShort') : `${enabledSkills}/${SELECTED_SKILL_CATALOG.length}`}` },
803
+ { value: 'skills', label: t('selectedSkillsTitle') },
757
804
  { value: 'components', label: withCount(t('componentsTitle'), state.components?.count) },
758
805
  ]
759
806
  const panel = (value, children) => h('section', {
@@ -780,13 +827,12 @@ function CapitalCard(props) {
780
827
  },
781
828
  }),
782
829
  panel('sources', [form, localFetchSection]),
783
- panel('skills', [
784
- modeSection,
785
- h('div', { className: 'capital-config-selected-layout' },
830
+ panel('skills', autoMode
831
+ ? [modeSection]
832
+ : [modeSection, h('div', { className: 'capital-config-skills-browser' },
786
833
  skillsFilter,
787
834
  h('div', { className: 'capital-config-selected-list' }, ...skillRows),
788
- ),
789
- ]),
835
+ )]),
790
836
  // The panel is the host's rows list; keep the aria-controls target non-empty via sr-only.
791
837
  panel('components', [h('span', { className: 'capital-config-sr-only' }, t('componentsHint'))]),
792
838
  )
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@v587d/config",
3
- "version": "2.10.1",
3
+ "version": "2.11.0",
4
4
  "description": "自动模式的取数凭据与偏好配置行:卡片坐在 @v587d/capital-generation 插件主页的「配置」段,点这一行本身没有表单。",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `capital:data-contract` system-prompt section: the single statement of how every Capital
3
+ * role obtains data. Skills declare what evidence they need; this section says where it comes
4
+ * from, so provider names and fetch recipes never live in skill prose.
5
+ * Static text — registered per role by the selected-skills row, which every skill-loading role mounts.
6
+ */
7
+ export declare const DATA_CONTRACT_SECTION = "capital:data-contract";
8
+ /** Just before the selected-skill brief (order 60). */
9
+ export declare const DATA_CONTRACT_ORDER = 59;
10
+ export declare function dataContractSection(): {
11
+ name: string;
12
+ order: number;
13
+ interpolate: false;
14
+ text: string;
15
+ };
@@ -0,0 +1,26 @@
1
+ /**
2
+ * `capital:data-contract` system-prompt section: the single statement of how every Capital
3
+ * role obtains data. Skills declare what evidence they need; this section says where it comes
4
+ * from, so provider names and fetch recipes never live in skill prose.
5
+ * Static text — registered per role by the selected-skills row, which every skill-loading role mounts.
6
+ */
7
+ export const DATA_CONTRACT_SECTION = 'capital:data-contract';
8
+ /** Just before the selected-skill brief (order 60). */
9
+ export const DATA_CONTRACT_ORDER = 59;
10
+ const TEXT = `# 数据边界
11
+
12
+ 需要数据时,先看本角色是不是取数通道的承担者:不是,就向承担它的角色提请求;是,就用本角色的工具面执行。除这两条路,不自己访问 URL、API、数据库、终端或脚本,也不用训练记忆补数字。
13
+
14
+ - 结构化数据(行情、财务报表、宏观序列、持仓)→ 委派 data_collector
15
+ - 网页、披露文件、新闻、会议材料、PDF → 委派 web_retriever
16
+ - 已落库 Dataset 的计算、统计与出图 → 委派 data_junior
17
+ - 你自己就是上述某一侧的承担者时,用本角色的工具面执行,不越过该面
18
+
19
+ 请求写清:标的或代码、证据类型(公告 / 财报 / 纪要 / 行情 / 宏观序列)、需要的字段或章节、期间与 as-of、频率、口径。"最新"必须带锚点日期。
20
+
21
+ 每个数字都要带出处(场所、文档名、文档日期、accession 或该次检索返回的链接)、取数路径与缺口。缺字段就点名缺哪个并停止该字段下的分析,不估算、不回填;用户粘贴的材料标 pasted by user,不因此提高置信度。
22
+
23
+ skill 正文只写"要什么证据",不写服务商、密钥、URL、下载步骤或脚本命令。`;
24
+ export function dataContractSection() {
25
+ return { name: DATA_CONTRACT_SECTION, order: DATA_CONTRACT_ORDER, interpolate: false, text: TEXT };
26
+ }
@@ -1,7 +1,7 @@
1
1
  /**
2
- * `tools/selected-skills` row: role-scoped selected-skill catalog plus its role prompt section.
3
- * The row is mounted once per Capital preset (`config.role`) and registers into that Agent's
4
- * own scope only; it never writes to the preset standing scope or the host scope.
2
+ * `tools/selected-skills` row: role-scoped selected-skill catalog, the `capital:data-contract`
3
+ * section every skill-loading role needs, and the selected-skill brief. Mounted once per Capital
4
+ * preset (`config.role`) and registers into that Agent's own scope only.
5
5
  */
6
6
  import type { Context } from '@deepseek-ai/cordis';
7
7
  import { type SelectedSkillRole } from './agents/selected-skills-provider.js';
@@ -1,5 +1,6 @@
1
1
  import { registerSelectedSkills, renderSelectedSkillsBrief, SELECTED_SKILL_ENTRY_ROLES, } from './agents/selected-skills-provider.js';
2
2
  import { readCapitalConfig } from './capital-settings.js';
3
+ import { dataContractSection } from './data-contract.js';
3
4
  export const name = 'capital-selected-skills';
4
5
  export const inject = ['systemPrompt'];
5
6
  const SECTION_NAME = 'capital:selected-skills';
@@ -17,6 +18,8 @@ export function apply(ctx, config = {}) {
17
18
  registerSelectedSkills(ctx, role, accessOf(ctx));
18
19
  let lastRenderError;
19
20
  ctx.effect(() => {
21
+ // Every role that can load a skill also needs the boundary that says where its data comes from.
22
+ const disposeContract = ctx.systemPrompt.section(dataContractSection());
20
23
  const dispose = ctx.systemPrompt.section({
21
24
  name: SECTION_NAME,
22
25
  order: SECTION_ORDER,
@@ -38,6 +41,11 @@ export function apply(ctx, config = {}) {
38
41
  }
39
42
  },
40
43
  });
41
- return typeof dispose === 'function' ? dispose : () => { };
44
+ return () => {
45
+ if (typeof dispose === 'function')
46
+ dispose();
47
+ if (typeof disposeContract === 'function')
48
+ disposeContract();
49
+ };
42
50
  }, 'capital-generation.selected-skills()');
43
51
  }
@@ -3,7 +3,7 @@
3
3
  * Known limit: DNS resolves per request but the IP is not pinned to the connection,
4
4
  * so a rebinding window remains (same trade-off as dsh-search-first).
5
5
  */
6
- export declare const LOCAL_FETCH_CLIENT_VERSION = "2.10.1";
6
+ export declare const LOCAL_FETCH_CLIENT_VERSION = "2.11.0";
7
7
  export declare const LOCAL_FETCH_MAX_URL_LENGTH = 2048;
8
8
  export type LocalFetchErrorCode = 'ABORTED' | 'TIMEOUT' | 'INVALID_URL' | 'BLOCKED_URL' | 'DNS' | 'REDIRECT' | 'HTTP' | 'TOO_LARGE' | 'UNSUPPORTED_CONTENT_TYPE';
9
9
  export declare class LocalFetchError extends Error {
@@ -4,7 +4,7 @@
4
4
  * so a rebinding window remains (same trade-off as dsh-search-first).
5
5
  */
6
6
  import { htmlToMarkdown, stripInvisibleText } from './html-markdown.js';
7
- export const LOCAL_FETCH_CLIENT_VERSION = '2.10.1';
7
+ export const LOCAL_FETCH_CLIENT_VERSION = '2.11.0';
8
8
  export const LOCAL_FETCH_MAX_URL_LENGTH = 2048;
9
9
  export class LocalFetchError extends Error {
10
10
  code;
@@ -35,7 +35,7 @@ export interface WindCallResult {
35
35
  code?: WindErrorCode;
36
36
  }
37
37
  /** Must match `package.json` version; a test pins the two together. */
38
- export declare const WIND_CLIENT_VERSION = "2.10.1";
38
+ export declare const WIND_CLIENT_VERSION = "2.11.0";
39
39
  export interface WindClient {
40
40
  callTool(toolName: string, args: Record<string, unknown>, signal?: AbortSignal): Promise<WindCallResult>;
41
41
  }
@@ -19,7 +19,7 @@ export const WIND_SERVER_ENDPOINTS = {
19
19
  analytics_data: 'https://mcp.wind.com.cn/vserver_analytics_data/mcp/',
20
20
  };
21
21
  /** Must match `package.json` version; a test pins the two together. */
22
- export const WIND_CLIENT_VERSION = '2.10.1';
22
+ export const WIND_CLIENT_VERSION = '2.11.0';
23
23
  function errorText(error) {
24
24
  return error instanceof Error ? error.message : String(error);
25
25
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@v587d/capital-generation",
3
- "version": "2.10.1",
3
+ "version": "2.11.0",
4
4
  "description": "Capital Generation:面向中国散户的 AI 投资助手插件(自动模式 Agent Preset)",
5
5
  "icon": "assets/cg-icon.png",
6
6
  "author": "v587d",
@@ -108,6 +108,7 @@
108
108
  "watchlist",
109
109
  "preset",
110
110
  "selected-skills/catalog.js",
111
+ "selected-skills/filter.js",
111
112
  "selected-skills/routing.js",
112
113
  "selected-skills/ROUTING.md",
113
114
  "selected-skills/README.md",