@v587d/capital-generation 2.7.12 → 2.8.1

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 (157) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/README.md +10 -6
  3. package/THIRD_PARTY_NOTICES.md +6 -1
  4. package/chart-ui/package.json +1 -1
  5. package/config/index.js +1 -0
  6. package/config/package.json +1 -1
  7. package/lib/agents/bash-guard.d.ts +22 -17
  8. package/lib/agents/bash-guard.js +32 -28
  9. package/lib/agents/root-tool-policy.d.ts +29 -3
  10. package/lib/agents/root-tool-policy.js +100 -14
  11. package/lib/data-collector/dataset-tools.js +9 -0
  12. package/lib/data-collector/tools.js +17 -5
  13. package/lib/index.d.ts +4 -0
  14. package/lib/index.js +27 -8
  15. package/lib/sources/ftshare-rest.d.ts +54 -0
  16. package/lib/sources/ftshare-rest.js +2363 -0
  17. package/lib/time/tools.js +24 -0
  18. package/lib/web-retriever/local-fetch.d.ts +1 -1
  19. package/lib/web-retriever/local-fetch.js +1 -1
  20. package/lib/web-retriever/wind-client.d.ts +1 -1
  21. package/lib/web-retriever/wind-client.js +1 -1
  22. package/package.json +1 -1
  23. package/preset/capital-generation/README.md +22 -15
  24. package/preset/capital-generation/agent.patch.yml +14 -1
  25. package/preset/capital-generation/skills/capital-data-protocol/SKILL.md +4 -1
  26. package/selected-skills/InvestSkill/UPSTREAM.md +17 -0
  27. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/10k-digest/SKILL.md +10 -296
  28. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/10k-digest/references/10-retrieving-the-filing.md +130 -0
  29. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/10k-digest/references/11-key-metrics-table.md +129 -0
  30. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/10k-digest/references/12-language-mode.md +60 -0
  31. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/bear-case/SKILL.md +5 -3
  32. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/catalyst-calendar/SKILL.md +10 -284
  33. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/catalyst-calendar/references/10-persona.md +113 -0
  34. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/catalyst-calendar/references/11-section-c-company-specific.md +108 -0
  35. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/catalyst-calendar/references/12-section-f-90-day.md +85 -0
  36. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/competitor-analysis/SKILL.md +11 -433
  37. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/competitor-analysis/references/10-overview.md +82 -0
  38. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/competitor-analysis/references/11-porter-s-five-forces.md +137 -0
  39. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/competitor-analysis/references/12-innovation-disruption-assessment.md +112 -0
  40. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/competitor-analysis/references/13-input-formats.md +130 -0
  41. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/dividend-analysis/SKILL.md +12 -639
  42. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/dividend-analysis/references/10-analysis-framework.md +138 -0
  43. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/dividend-analysis/references/11-dividend-history-and-reliability.md +131 -0
  44. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/dividend-analysis/references/12-share-buyback-analysis.md +125 -0
  45. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/dividend-analysis/references/13-fcf-deployment-scorecard.md +133 -0
  46. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/dividend-analysis/references/14-output.md +149 -0
  47. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/earnings-call-analysis/SKILL.md +10 -411
  48. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/earnings-call-analysis/references/10-analysis-framework.md +194 -0
  49. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/earnings-call-analysis/references/11-data-sources.md +196 -0
  50. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/earnings-call-analysis/references/12-thesis-invalidation.md +43 -0
  51. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/earnings-preview/SKILL.md +11 -234
  52. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/earnings-preview/references/10-overview.md +86 -0
  53. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/earnings-preview/references/11-phase-4-the-implied.md +60 -0
  54. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/earnings-preview/references/12-output-format.md +83 -0
  55. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/earnings-preview/references/13-standard-signal-output.md +34 -0
  56. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/economics-analysis/SKILL.md +10 -304
  57. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/economics-analysis/references/10-key-economic-indicators.md +98 -0
  58. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/economics-analysis/references/11-credit-market-indicators.md +114 -0
  59. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/economics-analysis/references/12-recession-probability-scoring.md +114 -0
  60. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/etf-analysis/SKILL.md +11 -236
  61. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/etf-analysis/references/10-overview.md +83 -0
  62. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/etf-analysis/references/11-phase-5-overlap-with.md +69 -0
  63. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/etf-analysis/references/12-output-format.md +79 -0
  64. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/etf-analysis/references/13-standard-signal-output.md +34 -0
  65. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/fact-check/SKILL.md +11 -243
  66. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/fact-check/references/10-overview.md +61 -0
  67. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/fact-check/references/11-phase-2-source-hierarchy.md +54 -0
  68. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/fact-check/references/12-phase-5-consistency.md +90 -0
  69. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/fact-check/references/13-notes.md +68 -0
  70. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/financial-report-analyst/SKILL.md +11 -499
  71. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/financial-report-analyst/references/10-overview.md +143 -0
  72. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/financial-report-analyst/references/11-phase-3-financial-statement.md +167 -0
  73. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/financial-report-analyst/references/12-phase-6-management-tone.md +176 -0
  74. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/financial-report-analyst/references/13-thesis-invalidation.md +43 -0
  75. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/industry-map/SKILL.md +10 -291
  76. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/industry-map/references/10-overview.md +117 -0
  77. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/industry-map/references/11-step-3-position-locator.md +112 -0
  78. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/industry-map/references/12-visualization-support.md +84 -0
  79. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/insider-trading/SKILL.md +10 -457
  80. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/insider-trading/references/10-analysis-framework.md +185 -0
  81. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/insider-trading/references/11-pattern-recognition.md +175 -0
  82. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/insider-trading/references/12-interpretation-guidelines.md +120 -0
  83. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/institutional-ownership/SKILL.md +11 -503
  84. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/institutional-ownership/references/10-analysis-framework.md +132 -0
  85. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/institutional-ownership/references/11-ownership-concentration-analysis.md +166 -0
  86. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/institutional-ownership/references/12-red-flags-warning-signs.md +192 -0
  87. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/institutional-ownership/references/13-thesis-invalidation.md +43 -0
  88. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/learning-coach/SKILL.md +11 -264
  89. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/learning-coach/references/10-overview.md +63 -0
  90. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/learning-coach/references/11-phase-2-explanation-card.md +108 -0
  91. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/learning-coach/references/12-output-format.md +88 -0
  92. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/learning-coach/references/13-standard-signal-output.md +34 -0
  93. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/options-analysis/SKILL.md +11 -448
  94. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/options-analysis/references/10-analysis-framework.md +109 -0
  95. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/options-analysis/references/11-implied-volatility-iv-analysis.md +102 -0
  96. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/options-analysis/references/12-earnings-play-analysis.md +109 -0
  97. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/options-analysis/references/13-data-sources.md +159 -0
  98. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/portfolio-review/SKILL.md +11 -435
  99. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/portfolio-review/references/10-phase-1-portfolio-snapshot.md +124 -0
  100. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/portfolio-review/references/11-phase-6-correlation-diversification.md +124 -0
  101. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/portfolio-review/references/12-phase-9-rebalancing-decision.md +153 -0
  102. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/portfolio-review/references/13-data-verification.md +62 -0
  103. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/position-ladder/SKILL.md +11 -372
  104. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/position-ladder/references/10-overview.md +102 -0
  105. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/position-ladder/references/11-phase-3-the-trim.md +88 -0
  106. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/position-ladder/references/12-phase-6-the-thesis.md +105 -0
  107. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/position-ladder/references/13-input-formats.md +105 -0
  108. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/risk-stress-test/SKILL.md +10 -250
  109. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/risk-stress-test/references/10-overview.md +92 -0
  110. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/risk-stress-test/references/11-phase-4-correlation-spike.md +116 -0
  111. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/risk-stress-test/references/12-notes.md +65 -0
  112. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/sector-analysis/SKILL.md +11 -381
  113. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/sector-analysis/references/10-sector-overview.md +123 -0
  114. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/sector-analysis/references/11-sector-correlation-matrix.md +90 -0
  115. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/sector-analysis/references/12-peer-benchmarking-within-sector.md +92 -0
  116. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/sector-analysis/references/13-consumer-staples.md +105 -0
  117. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/short-interest/SKILL.md +10 -352
  118. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/short-interest/references/10-analysis-framework.md +110 -0
  119. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/short-interest/references/11-bearish-thesis-evaluation.md +118 -0
  120. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/short-interest/references/12-data-sources.md +148 -0
  121. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-eval/SKILL.md +16 -603
  122. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-eval/references/10-analysis-components.md +122 -0
  123. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-eval/references/11-dupont-decomposition.md +121 -0
  124. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-eval/references/12-quality-scoring-framework.md +115 -0
  125. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-eval/references/13-dcf-framework.md +113 -0
  126. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-eval/references/14-analyst-consensus-tracking.md +127 -0
  127. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-eval/references/15-thesis-invalidation.md +43 -0
  128. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-screener/SKILL.md +5 -3
  129. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-valuation/SKILL.md +12 -595
  130. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-valuation/references/10-overview.md +133 -0
  131. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-valuation/references/11-method-2-comparable-company.md +127 -0
  132. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-valuation/references/12-football-field-summary-valuation.md +140 -0
  133. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-valuation/references/13-terminal-value-two-methods.md +121 -0
  134. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/stock-valuation/references/14-when-dcf-is.md +110 -0
  135. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/tax-lens/SKILL.md +12 -304
  136. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/tax-lens/references/10-overview.md +73 -0
  137. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/tax-lens/references/11-phase-3-dividends-qualified.md +67 -0
  138. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/tax-lens/references/12-framework-non-us-module.md +61 -0
  139. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/tax-lens/references/13-scoring-tax-efficiency-score.md +83 -0
  140. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/tax-lens/references/14-thesis-invalidation.md +55 -0
  141. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/technical-analysis/SKILL.md +16 -612
  142. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/technical-analysis/references/10-chart-pattern-analysis.md +172 -0
  143. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/technical-analysis/references/11-chart-visualization-support.md +181 -0
  144. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/technical-analysis/references/12-multi-timeframe-analysis-mtf.md +95 -0
  145. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/technical-analysis/references/13-advanced-indicators-ichimoku-cloud.md +61 -0
  146. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/technical-analysis/references/14-options-flow-integration.md +95 -0
  147. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/technical-analysis/references/15-thesis-invalidation.md +45 -0
  148. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/thesis-tracker/SKILL.md +10 -274
  149. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/thesis-tracker/references/10-overview.md +94 -0
  150. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/thesis-tracker/references/11-phase-5-the-pre.md +113 -0
  151. package/selected-skills/InvestSkill/plugins/us-stock-analysis/skills/thesis-tracker/references/12-example.md +90 -0
  152. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-catalyst-calendar/SKILL.md +5 -3
  153. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-idea-generation/SKILL.md +5 -3
  154. package/selected-skills/claude-for-financial-services-cn/vertical-plugins/china-finance/skills/china-sector-overview/SKILL.md +5 -3
  155. package/selected-skills/investment-skills/skills/buffett-investment-framework/SKILL.md +1 -1
  156. package/selected-skills/peter-lynch-skill/skills/peter-lynch-skill/SKILL.md +5 -3
  157. package/watchlist/package.json +1 -1
@@ -47,8 +47,20 @@ function render(_args, value) {
47
47
  // ToolOutputDefinition.render(args, value):第一参是入参、第二参才是返回值。
48
48
  return [{ type: 'text', text: JSON.stringify(value) }];
49
49
  }
50
- function tool(name, description, parameters, schema, execute) {
51
- return { name, description, parameters, output: { schema, render }, execute };
50
+ function tool(name, description, parameters, schema, execute, options = {}) {
51
+ return {
52
+ name,
53
+ description,
54
+ parameters,
55
+ output: { schema, render },
56
+ execute,
57
+ // 与 `dataset-tools.ts` 的 `describe_dataset` 同一机制:框架把同一条消息里的多个调用
58
+ // 放进有界并发池,N 份结果在同一个下一步一起返回(宿主 fail-closed:不标就串行,2026-10-16
59
+ // 一次性 headless 探针核过,账本 L30)。⛔ 只给**纯读**的发现面开:
60
+ // `request_data` 刻意不标——Hub 的执行器是 FIFO 串行(`hub.ts` 的 Phase 1 注释),
61
+ // 让模型并行发取数等于把上游节流与 in-flight 合并放在我们没承诺过的位置上。
62
+ ...(options.concurrencySafe === true ? { isConcurrencySafe: () => true } : {}),
63
+ };
52
64
  }
53
65
  /**
54
66
  * 调用方 Agent session(官方注入,不可由模型伪造)。请求归属恒为当前调用者,
@@ -151,8 +163,8 @@ export function registerDataCollectorTools(ctx, hub, diagnostics) {
151
163
  throw requestParamsError(error, requestedCapability) ?? error;
152
164
  }
153
165
  }),
154
- tool('list_capabilities', '列出当前已注册的数据能力目录:**纯文本,一行一条** `capability|summary|paginated`,paginated 为 1(分页)/ 0(不分页)。名字或摘要里的 `|`、换行会转义成 `\\|`、`\\n`,所以一行就是一条能力,不要按冒号或空格拆分。目录是发现入口,**一个任务只需调用一次**:同一 session 的历史里已经保有这份目录,重复调用只会白占上下文。目录刻意不含参数与输出结构(完整 schema 约 23KB,会被剪枝截断);确定要用的能力后,用 describe_capability 单独取那一个能力的 input_schema 后即可 request_data。request_data 的 capability 必须以本目录为准,不要自行编造。', jsonObject(), { type: 'string' }, async (_args, exec) => { delegatedSession(exec, 'list_capabilities'); return hub.capabilityDirectory(); }),
155
- tool('describe_capability', '读取**一个**能力的完整契约:description(单位、null 语义、时间与分页口径)、input_schema(params 的取值与约束)、output_fields(返回字段的逐行字典 `路径:类型[:说明]`,类型后缀 `?` 为可为 null、`[].` 为数组元素的字段)与 paginated。request_data 的 params 必须按这里返回的 input_schema 填写;request_data 若返回 request_params_invalid,应回到这里重新读取后再重试。一个能力描述一次即可:结果已在本 session 历史里,重复描述同一个能力只会白占上下文;需要几个能力就分别调用几次,不要用逗号把多个名字塞进一次调用。错误按 code 引导:capability_required(没给名字,先 list_capabilities())、capability_invalid(不是字符串/超长/含逗号,改为目录中的单个名字)、capability_catalog_empty(数据源未注册,别重试,回告主 Agent)、capability_unknown(名字不存在,错误里会列出全部可用能力名并要求原样复制)。', jsonObject({ capability: { type: 'string' } }, ['capability']), jsonObject({
166
+ tool('list_capabilities', '列出当前已注册的数据能力目录:**纯文本,一行一条** `capability|summary|paginated`,paginated 为 1(分页)/ 0(不分页)。名字或摘要里的 `|`、换行会转义成 `\\|`、`\\n`,所以一行就是一条能力,不要按冒号或空格拆分。目录是发现入口,**一个任务只需调用一次**:同一 session 的历史里已经保有这份目录,重复调用只会白占上下文。目录刻意不含参数与输出结构(完整 schema 约 23KB,会被剪枝截断);确定要用的能力后,用 describe_capability 单独取那一个能力的 input_schema 后即可 request_data。request_data 的 capability 必须以本目录为准,不要自行编造。', jsonObject(), { type: 'string' }, async (_args, exec) => { delegatedSession(exec, 'list_capabilities'); return hub.capabilityDirectory(); }, { concurrencySafe: true }),
167
+ tool('describe_capability', '读取**一个**能力的完整契约:description(单位、null 语义、时间与分页口径)、input_schema(params 的取值与约束)、output_fields(返回字段的逐行字典 `路径:类型[:说明]`,类型后缀 `?` 为可为 null、`[].` 为数组元素的字段)与 paginated。request_data 的 params 必须按这里返回的 input_schema 填写;request_data 若返回 request_params_invalid,应回到这里重新读取后再重试。一个能力描述一次即可:结果已在本 session 历史里,重复描述同一个能力只会白占上下文;需要几个能力就**在同一条消息里一次发出多个调用**(本工具是纯读、可并发执行,框架会把它们放进并发池、在同一个下一步一起返回),但一次仍只传**一个**名字,不要用逗号把多个名字塞进一条调用。错误按 code 引导:capability_required(没给名字,先 list_capabilities())、capability_invalid(不是字符串/超长/含逗号,改为目录中的单个名字)、capability_catalog_empty(数据源未注册,别重试,回告主 Agent)、capability_unknown(名字不存在,错误里会列出全部可用能力名并要求原样复制)。', jsonObject({ capability: { type: 'string' } }, ['capability']), jsonObject({
156
168
  capability: { type: 'string' },
157
169
  summary: { type: 'string' },
158
170
  paginated: { type: 'boolean' },
@@ -166,7 +178,7 @@ export function registerDataCollectorTools(ctx, hub, diagnostics) {
166
178
  if (!detail)
167
179
  throw capabilityError('capability_unknown', `未注册的能力 "${capability}"。`);
168
180
  return detail;
169
- }),
181
+ }, { concurrencySafe: true }),
170
182
  ...(diagnostics ? [
171
183
  tool('dc_status', '诊断工具:返回数据管道运行状态 —— at/call 为本次真实执行的时间戳与计数(防伪)、api_key 为**本次调用现取**的凭据解析结果(present/source,不含密钥值)、registered_capabilities 为当前已注册 capability 列表、root_tool_policy 为根 Agent 工具收敛的现场记录(preset_id / outcome / denied / failed,排查"主 Agent 为什么看得见本该收敛掉的工具"用)。数据源注册不依赖 key:api_key.present=false 时同花顺能力仍在目录里,但每次取数会点名 FUYAO_API_KEY 失败。排障时优先调用。', jsonObject(), jsonObject({
172
184
  at: { type: 'integer' },
package/lib/index.d.ts CHANGED
@@ -86,6 +86,8 @@ export interface Config {
86
86
  selectedSkills?: SelectedSkillSelection;
87
87
  /** Fuyao credentials 引用名;空值回退到 FUYAO_API_KEY。 */
88
88
  fuyaoCredentialRef?: string;
89
+ /** FTShare(非凸科技)credentials 引用名;空值回退到 FTSHARE_API_KEY。 */
90
+ ftshareCredentialRef?: string;
89
91
  /** web_retriever 配置(可选;缺省使用 AnySearch 默认地址与凭据名)。 */
90
92
  retriever?: RetrieverConfig;
91
93
  }
@@ -98,6 +100,7 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
98
100
  [k: string]: z<boolean, boolean, "defined">;
99
101
  }>>, "defined">;
100
102
  fuyaoCredentialRef: z<string, string, "defined">;
103
+ ftshareCredentialRef: z<string, string, "defined">;
101
104
  retriever: z<Schemastery.ObjectS<NoInfer<{
102
105
  baseURL: z<string, string, "defined">;
103
106
  credentialRef: z<string, string, "defined">;
@@ -183,6 +186,7 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
183
186
  [k: string]: z<boolean, boolean, "defined">;
184
187
  }>>, "defined">;
185
188
  fuyaoCredentialRef: z<string, string, "defined">;
189
+ ftshareCredentialRef: z<string, string, "defined">;
186
190
  retriever: z<Schemastery.ObjectS<NoInfer<{
187
191
  baseURL: z<string, string, "defined">;
188
192
  credentialRef: z<string, string, "defined">;
package/lib/index.js CHANGED
@@ -4,6 +4,7 @@ import { WorkspaceDatasetStore } from './data-collector/store.js';
4
4
  import { resolveFuyaoApiKey, createFuyaoRestSources } from './sources/fuyao-rest.js';
5
5
  import { createTencentSources } from './sources/tencent-http.js';
6
6
  import { createEastmoneySources } from './sources/eastmoney-http.js';
7
+ import { createFtshareSources, resolveFtshareApiKey } from './sources/ftshare-rest.js';
7
8
  import { createWindSources } from './sources/wind-mcp.js';
8
9
  import { registerDataCollectorTools } from './data-collector/tools.js';
9
10
  import { registerDatasetTools } from './data-collector/dataset-tools.js';
@@ -11,7 +12,7 @@ import { registerTimeTool } from './time/tools.js';
11
12
  import { registerWatchlistTool } from './watchlist/tools.js';
12
13
  import { registerChartTool } from './chart/tool.js';
13
14
  import { createChartEventPublisher } from './chart/events.js';
14
- import { registerRootToolPolicy, rootPolicyProbes } from './agents/root-tool-policy.js';
15
+ import { registerRootToolPolicy, registerFsWriteGuard, rootPolicyProbes } from './agents/root-tool-policy.js';
15
16
  import { registerBashGuard } from './agents/bash-guard.js';
16
17
  import { registerRootSelectedSkills, SELECTED_SKILL_CATALOG } from './agents/selected-skills-provider.js';
17
18
  import { ChartSourceTokenStore, registerChartSourceTool } from './chart/source-token.js';
@@ -147,6 +148,9 @@ export const Config = z.object({
147
148
  fuyaoCredentialRef: z.string()
148
149
  .default('FUYAO_API_KEY')
149
150
  .description('Fuyao credentials 引用名,空 = FUYAO_API_KEY'),
151
+ ftshareCredentialRef: z.string()
152
+ .default('FTSHARE_API_KEY')
153
+ .description('FTShare(非凸科技)credentials 引用名,空 = FTSHARE_API_KEY'),
150
154
  retriever: RetrieverSchema.default({ baseURL: '', credentialRef: 'ANYSEARCH_API_KEY', windDocs: { endpoint: '', credentialRef: 'WIND_API_KEY', timeoutMs: 60000 }, localFetch: { ...LOCAL_FETCH_DEFAULTS }, paddleOcr: { ...PADDLE_OCR_DEFAULTS } })
151
155
  .description('web_retriever 配置(可选;缺省使用 AnySearch 默认地址与凭据名)'),
152
156
  });
@@ -362,16 +366,22 @@ export function apply(ctx, config) {
362
366
  chartEvents: () => createChartEventPublisher(chartEventContext),
363
367
  });
364
368
  // 根 Agent 工具收敛:`agent/created` 里对**主 Agent**(无 parentSession)在其自己的
365
- // scope 上 deny render_chart / subagent_visualization_specialist / prepare_chart_source。
369
+ // scope 上逐名 deny `ROOT_AGENT_DENIED_TOOLS`(出图三件套 + 十三个出网工具 + `write` /
370
+ // `edit`;2026-10-15 用户决策「开 read、同时保留 bash」后 shell 名已移出名单)。
366
371
  // 子 Agent 的 scope parent 是 standing key(兄弟),因此不受影响。
367
372
  registerRootToolPolicy(ctx);
368
- // data_junior 的 bash 闸门:对**本 preset 的每个 agent** 在其自己的 scope 上装一次单调 guard。
369
- // 两层可靠判定——A 只对**被委派**子会话开放(镜像 tool-exec.ts 的 delegatedSession);
370
- // B 拦掉必然失败的 `sandbox_permissions`(委派会话的审批策略由框架固定为 never,
371
- // answerer 根本不会被调用),并给出正确路径。**不解析命令内容**:正则挡不住
372
- // `node -e`,而 node/python 正是引入 bash 的目的;禁区纪律走 data_junior 的 persona。
373
- // 理由全文见 src/agents/bash-guard.ts 与 docs/dev/bash-gate.md §1.6「data_junior 的 bash 闸门」。
373
+ // shell 闸门:对**本 preset 的每个 agent**(含主 Agent)在其自己的 scope 上装一次单调 guard,
374
+ // 只拦**必然失败的沙箱升级**(`sandbox_permissions` / `justification`:被委派会话的审批策略
375
+ // 由框架固定为 never,answerer 根本不会被调用),并给出正确路径。主 Agent 的 shell 保留
376
+ // (2026-10-15 决策),它的升级走正常 ask 审批。**不解析命令内容**:正则挡不住 `node -e`,
377
+ // 而 node/python 正是引入 bash 的目的;禁区纪律走 data_junior 的 persona。
378
+ // 理由全文见 src/agents/bash-guard.ts 与 docs/dev/bash-gate.md §1.6。
374
379
  registerBashGuard(ctx);
380
+ // fs 写口闸门:**全局**装一次(guard 按 `exec.agent` 取链路,与实例绑哪层无关——
381
+ // docs/dev/bash-gate.md §1.6 里声明的备选方向在写口上落地),调用期拦本 preset 的
382
+ // `write` / `edit`;`read` 开放给主 Agent 读 skill 分册与工作区文件。判据 fail-open
383
+ // (别的 preset 的会话照常读写),见 src/agents/root-tool-policy.ts。
384
+ registerFsWriteGuard(ctx);
375
385
  ctx.effect(() => {
376
386
  const sources = createTencentSources();
377
387
  const disposers = sources.map((dataSource) => hub.registerSource(dataSource));
@@ -398,6 +408,15 @@ export function apply(ctx, config) {
398
408
  return () => { for (const dispose of disposers)
399
409
  dispose(); };
400
410
  }, 'capital-generation.fuyao-sources()');
411
+ // FTShare(非凸科技)——同花顺资金流那一族的第二家上游。注册同样只看结构,key 每次调用现取(§9.7);
412
+ // 免费档限流 10 QPS / burst 20 由 src/sources/ftshare-rest.ts 的进程级节流链兜住。
413
+ ctx.effect(() => {
414
+ const sources = createFtshareSources(() => resolveFtshareApiKey(ctx, effectiveConfig.ftshareCredentialRef || 'FTSHARE_API_KEY'));
415
+ const disposers = sources.map((dataSource) => hub.registerSource(dataSource));
416
+ ctx.logger.info(`capital-generation: 已注册 ${disposers.length} 个 FTShare 数据源(ftshare_*,key 每次调用现取)`);
417
+ return () => { for (const dispose of disposers)
418
+ dispose(); };
419
+ }, 'capital-generation.ftshare-sources()');
401
420
  // ── web_retriever 域:anysearch(广度)+ wind_docs(public_document 精准)──────
402
421
  const retriever = effectiveConfig.retriever ?? {};
403
422
  const credentialRef = retriever.credentialRef || 'ANYSEARCH_API_KEY';
@@ -0,0 +1,54 @@
1
+ /**
2
+ * FTShare(非凸科技 `market.ft.tech/gateway`)REST source —— **资金流 + 行情/日 K 截面 + 快照与日历
3
+ * + 大宗与披露 + 申万行业**。
4
+ *
5
+ * 为什么接这一族(2026-10-15 逐条真报文实测):
6
+ * - 同花顺 `capital-flow/*` 对我们是 `code=2004` 永久关闭,东财 `eastmoney_main_capital_snapshot`
7
+ * 实测**只有查询日一股一行**——个股资金流的历史序列在本仓一直是空的。这一族给到最近约 45 个交易日
8
+ * (T-45 仍有 5199 行、T-50 起 total=0),主力五档更给到约 187 个交易日。
9
+ * - 板块(行业)资金滚动此前只有 `eastmoney_cashflow_rotation` 一条,上游一抖就没有第二家。
10
+ * - 北交所行情此前是**零**:腾讯那一路在参数层明确拒 BJ,而这一族实测含 349 只北证票。
11
+ * 上游分别是同花顺与同花顺 daec,与现有能力**不是同一条抓取路径**,才够称 plan B。
12
+ *
13
+ * ⛔ 本模块的 description 与注释**只允许写有原始报文可回查的数字**。2026-10-15 曾有一批"实测计数"
14
+ * (行数在 3766/3864/5450/5574 之间跳、`ys` 返回 309 行、业务码 100605、页码回显谎报)事后逐条回查
15
+ * **在任何一次真报文里都不存在**,是我把不同接口的读数串成了因果;据此撤掉的两颗能力已于当晚复验注册回来。
16
+ * 教训写进 `docs/design/ftshare-source-survey.md` §7.5–§7.7:**没打进日志的数字不算实测**。
17
+ *
18
+ * ⛔ 免费档限流 **10 QPS / burst 20**(官方口径)。`DataCollectorHub` 的 FIFO 只保证同一时刻
19
+ * 一个请求,**不含最小间隔**——串行 ≠ 节流(`src/net/eastmoney-client.ts` 同一条教训)。
20
+ * 本模块用进程级节流链把上限压到 ~8 QPS,留突发余量。
21
+ *
22
+ * ⛔ 凭据一律**调用期解析**,注册只看结构(AGENTS.md §9.7,2026-09-30 桌面端 61 能力静默缺席
23
+ * 那一族事故)。套餐外路由返回 403 `route_not_allowed`,归类成 `plan_closed` 且不重试——
24
+ * 它和 Fuyao 的 `2004` 是同一件事:能力级不可用,重试只白烧回合。
25
+ */
26
+ import type { Context } from '@deepseek-ai/cordis';
27
+ import type { DataSource } from '../data-collector/hub.js';
28
+ type JsonRecord = Record<string, unknown>;
29
+ /** 10 QPS 的 80% 上限:120ms 最小间隔 ⇒ 稳态 ~8.3 次/秒,突发也不会越过 20。 */
30
+ export declare const FTSHARE_MIN_INTERVAL_MS = 120;
31
+ /** 失败归类:与 `FuyaoFailureKind` 同一套语汇,`plan_closed` 对应 Fuyao 的 `capability_closed`。 */
32
+ type FtshareFailureKind = 'credential_missing' | 'rate_limited' | 'plan_closed' | 'invalid_parameter' | 'http_error' | 'upstream_error' | 'invalid_response';
33
+ export declare class FtshareError extends Error {
34
+ readonly kind: FtshareFailureKind;
35
+ readonly status?: number;
36
+ readonly code?: number;
37
+ constructor(kind: FtshareFailureKind, message: string, details?: {
38
+ status?: number;
39
+ code?: number;
40
+ });
41
+ }
42
+ export interface FtshareRequester {
43
+ getJson(path: string, search: URLSearchParams, signal: AbortSignal): Promise<JsonRecord>;
44
+ }
45
+ /** key 每次调用现取(`resolveApiKey` 由装配层注入),构造客户端不依赖 key。 */
46
+ export declare function createFtshareClient(resolveApiKey: () => Promise<string | undefined>, baseUrl?: string): FtshareRequester;
47
+ /**
48
+ * key 每次调用现取(与 `resolveFuyaoApiKey` 同一口径):credentials 优先、环境变量兜底。
49
+ * ⛔ 注册面**不得**以"装配期读到 key"为条件(AGENTS.md §9.7),也不要把这里的 rejection 缓存住——
50
+ * 一次装配期抢跑会把这个能力钉到进程结束。
51
+ */
52
+ export declare function resolveFtshareApiKey(ctx: Context, credentialRef?: string): Promise<string | undefined>;
53
+ export declare function createFtshareSources(resolveApiKey: () => Promise<string | undefined>): DataSource[];
54
+ export {};