Not in the top 1,000 by GitHub stars

pseudo-longinus/quant-buddy-skills

宽宝 QuantBuddy: 一整套面向Agent Invesment投资研究与决策的底层设施与能力的调用skill, 覆盖A股/港股/美股/期货/宏观/ETF的量化分析与计算。支持行情、估值、财务查询、选股筛选、因子计算、策略回测。A complete infrastructure for Agent based investment analysis and decision through skill calling. Including quant skill for A-share, HK & US stocks/futures/ETF/macro — market data, fundamentals, screening, factor & backtest.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

skills/quant-buddy-skill/SKILL.md

Week of Nov 2, 2026 · +5 / −2 lines

Before Network or broad shell → After Network or broad shell

dcdbd2fe1561 → b270ca032592

+ 4 displayName: QuantBuddy 宽宝量化技能
- 5 version: 4.25.61
+ 6 version: 4.25.65
- 23   version: 4.25.61
+ 24   version: 4.25.65
+ 124 
+ 125 外盘换月事件仅适用于分钟:Range返回roll_events,RangeMulti仅解析去重后单资产时返回同结构roll_events,多资产与market请求不附事件。外盘日频换月信息当前缺失,不能用分钟事件解释日频换月、复权或合约;详见[换月频率边界](references/continuous-futures.md#外盘换月返回入口2026-10-28)。

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → dcdbd2fe1561

No earlier version was observed for comparison.

Compare on GitHub

skills/quant-buddy-view/SKILL.md

Week of Nov 2, 2026 · +56 / −44 lines

Before Network or broad shell → After Network or broad shell

dcdbd2fe1561 → b270ca032592

+ 4 displayName: QuantBuddy 宽宝活页
- 5 version: 0.7.5
+ 6 version: 0.8.4
- 9   输入可唯一识别的 A 股名称、简称或代码,或简单要求单股综合分析(如“贵州茅台”“600519”“分析一下贵州茅台”)均默认请求个股快页;先通过 QBS 验证并回复完整个股分析,再同轮 new_asset_page,无需用户补说“生成页面”。
+ 10   输入可唯一识别的 A 股名称、简称或代码,或简单要求单股综合分析(如“贵州茅台”“600519”“分析一下贵州茅台”)均默认请求个股快页;宿主开启 page_first_fast 时,取得 task_id 后立即并行调用 new_asset_page 与有限公开搜索,页面 ready 后先展示页面和前五章数据,搜索完成后再补综合观察;其它模式先通过 QBS 验证并回复完整个股分析,再同轮 new_asset_page,无需用户补说“生成页面”。
- 14   version: 0.7.5
+ 15   version: 0.8.4
- 77 - 快速通道页面(new_asset_page)必须在页面末尾附两个轻量模块:「背景与关注点」(3 句以内,有可靠来源带链接与日期,无来源则如实写外部语境缺失)和「边界与风险」(1–2 句,说明不构成投资建议与主要不确定性)。
- 78 
- 79 ## 页面构建策略(两类页面,两条路径)
- 80 
- 81 ### 路径一:研究分析页 → 用 upload 路径(自由 HTML 创作)
- 82 
- 83 适用于:个股分析、行业研究、深度报告、对比分析、策略研究、供需因子分析等需要叙事结构和丰富视觉的场景。
- 84 
- 85 - Agent 直接用 HTML + CSS + JS 写完整页面,自由设计布局和视觉,不受面板系统约束
- 86 - 在 HTML 中嵌入 Data Grant(`grant_id + signature`)或 Formula Package(`package_id + signature`)实现实时数据绑定
- 87 - 可使用 Chart.js、ECharts 等前端库画交互式图表(折线、柱状、雷达、热力图等)
+ 78 - 快速通道页面(new_asset_page)保留页面自身的「边界与风险」;Agent 最终文字回复只保留一个「六、综合观察」,把页面/QBS 数据与本轮可靠公开背景融合,说明印证、矛盾、观察条件和证据缺口。来源与发布日期放在该节末尾,不得再另起“背景与关注点”章节;无外部证据时在该节写明缺口。
+ 79 
+ 80 ## 页面构建策略(自建整页一律模型手写)
+ 81 
+ 82 ### 自建 / unmatched / 研究分析 / 对比看板 → 模型手写自由 HTML
+ 83 
+ 84 适用于:无匹配范式的自建页,以及个股分析、行业研究、深度报告、对比分析、对比看板、策略研究、供需因子分析等需要叙事结构和丰富视觉的场景。
+ 85 
+ 86 - **只要本轮路由为 `unmatched`,整页必须由模型直接写 HTML + CSS + JS**;`build_dashboard` 不得生成整页替代 bespoke 自建页。
+ 87 - 页面布局、信息层级、图表组合、视觉语言由模型设计,不受标准面板卡片系统约束。
+ 88 - 在 HTML 中嵌入 Data Grant(`grant_id + signature`)或 Formula Package(`package_id + signature`)实现实时数据绑定。
+ 89 - 可使用 Chart.js、ECharts、自定义 SVG/Canvas 等交互式图表;`build_dashboard.py` 仅允许 `emit:"panel_block"` 生成局部图表脚本,外层页面仍必须模型手写。
- 89   - 首屏决策:最重要的结论和最关键的数字必须在首屏可见,大字号高亮
- 90   - 图文交替:标题 → 结论 → 图表 → 白话解读 → 图表 → 白话解读,避免连续 5 个表格
- 91   - 每个图表配 1–2 句"怎么读这组数据"
- 92   - 核心数字用大字号(≥28px)+ 高亮色;辅助信息用小字号灰色
- 93   - 320px 不留横向滚动
- 94   - 页面开头 2 句话说明"本页回答什么问题、核心结论是什么"
- 95 - 构建流程:先用 QBS 获取并验证数据 → 在本地写完整 HTML(含数据绑定标签)→ 用 `upload` 上传 → `publish_verified` 发布
- 96 
- 97 ### 路径二:数据面板页 → 用 new_page 路径(标准面板系统)
- 98 
- 99 适用于:实时看板、排行榜、监控系统、多模块数据并排展示等标准化场景。
- 100 
- 101 - Agent 提供数据面板(panels),`build_dashboard` 统一渲染卡片/表格布局
- 102 - 适合数据模块多、更新频繁、不需要复杂叙事的场景
- 103 - compose_page 降为备选:仅在需要复用已有复杂交互组件时使用,最多 1 次
- 104 
- 105 ### 路径选择规则
- 106 
- 107 - 用户要求"分析""研究""报告""对比""怎么看" → 路径一(upload)
- 108 - 用户要求"看板""监控""排行榜""实时数据" → 路径二(new_page)
- 109 - 不确定时,默认路径一(upload),因为研究分析是最常见的场景
- 110 - new_asset_page(个股快页)仍走固定快速通道,不受此规则影响
+ 91   - 首屏决策:最重要的结论和最关键数字必须在首屏可见,大字号高亮。
+ 92   - 图文交替:标题 → 结论 → 图表 → 白话解读,避免连续表格或等权卡片堆叠。
+ 93   - 每个图表配 1–2 句“怎么读这组数据”。
+ 94   - 核心数字用大字号(≥28px)+ 高亮色;辅助信息弱化。
+ 95   - 320px 不留横向滚动。
+ 96   - 页面开头 2 句话说明“本页回答什么问题、核心结论是什么”。
+ 97 - 构建流程:QBS 验证数据 → 模型手写完整主体 HTML → `compile_bespoke_page.py` 内联公共 shell / 数据内核 → `upload` 或同页 `publish_verified` 发布。
+ 98 
+ 99 ### 标准面板 / 局部图表组件 → build_dashboard 仅作组件工具
+ 100 
+ 101 `build_dashboard` 不再作为新任务 `unmatched` 自建整页的渲染器。它只用于:
+ 102 
+ 103 - 生成 `emit:"panel_block"` 的局部图表脚本,嵌入模型手写的 bespoke 页;
+ 104 - 维护已存在且明确声明为标准面板的 legacy 页面;
+ 105 - 无任务路由的本地工具化渲染场景。
+ 106 
+ 107 不得因为用户说了“看板”“实时”“排名”就把 `unmatched` 自建整页降级为 `research-v1` 标准卡片页。若用户明确只要最简标准面板,也必须先手写 bespoke 主体,再按需嵌入声明式图表组件。
+ 108 
+ 109 ### 路由优先级
+ 110 
+ 111 1. 已有文件 / 已有页面保留原布局,按各自维护合同执行。
+ 112 2. 命中在线模板:direct / fork 按模板合同执行。
+ 113 3. **`unmatched` 自建:一律模型手写完整 HTML/CSS/JS。**
+ 114 4. `build_dashboard` 只能生成局部 `panel_block`,不得生成 unmatched 整页。
+ 115 5. 不确定如何组织页面时,读取 [bespoke 页指南](guides/bespoke-page.md) 和 [自建质量底线](guides/self-build-quality.md),仍走模型手写 HTML。
+ 163 **单股快速页面优先例外**:仅当宿主明确开启 `page_first_fast` 时,页面 API 是主路径,不得等待搜索或 `qb_finish_research_intent`。本轮第一个工具调用必须使用 `Skill` 工具加载 QBV;禁止用 Bash 的 `ls`、`find`、`grep`、`sed`、`cat` 查找 Skill、脚本或 SKILL.md。取得 Skill Base directory 后,下一次工具批次立即并行发起 `new_asset_page(delivery_mode:"page_first_fast")` 与必要 WebSearch/WebFetch。Host 托管模式已提供 `QB_HOST_TASK_ID` 时,`new_asset_page` 省略 `task_id` 并由静态页脚本读取 Host Context,不再调用 `trace_context.py begin`;无 Host Context 时才允许一次 `trace_context.py begin`。不得先做独立 QBS 首答、`stockProfile`、模板搜索、fork 或 Compose。页面 ready 后,宿主立即展示 `page_ready_markdown + page_ready_data_markdown`,即一张页面卡片、分析标题和第一至第五章;这些内容只展示一次,Agent 后续不得重复。搜索继续独立运行,全部返回后调用 `qb_finish_research_intent`,Agent 只输出 `agent_summary_request.summary_heading` 指定的综合观察章节,并融合 `fast_reply_payload`、`page_ready_data_markdown` 与可靠公开背景;页面链接、免责声明和 `page_ready_tail_markdown` 由宿主统一收尾。不下载或解析 HTML,不重复浏览器验收;页面失败只尝试一次并进入文字兜底。未开启该模式的宿主继续遵守先答后建页。
+ 164 
- 171 1. 所有量化建页先读 [先答后建页](guides/answer-first.md)。若 QBS 已在本轮交付有效完整画像首答,跳过再次取数,复用同一 task/turn,直接 `new_asset_page(reply_mode:"page_followup")`;不要重新 `resolve_asset_data`、`stockProfile` 或创建第二个 session。尚未取数时通过 `qbs_bridge.py` 查询业务数据,校验实际日期与单位,发送完整非终止业务答案。**本步骤的下一次工具调用仍须继续页面流程,不能以无工具的最终消息结束。** 若只是简单分析一只 A 股并返回页面,没有定制栏目/额外指标/对比,首答后运行一次 `scripts/static_page.py new_asset_page`,不用查 templates 或自行注册 Grant。成功草稿用于最终页面交付,不代替之前的 QBS 首答。
+ 178 1. 所有量化建页先读 [先答后建页](guides/answer-first.md)。若 QBS 已在本轮交付有效完整画像首答,跳过再次取数,复用同一 task/turn,直接 `new_asset_page(reply_mode:"page_followup")`;不要重新 `resolve_asset_data`、`stockProfile` 或创建第二个 session。尚未取数时通过 `qbs_bridge.py` 查询业务数据,校验实际日期与单位,发送完整非终止业务答案。**本步骤的下一次工具调用仍须继续页面流程,不能以无工具的最终消息结束。** 若只是简单分析一只 A 股并返回页面,没有定制栏目/额外指标/对比,且宿主未启用 `page_first_fast`,首答后运行一次 `scripts/static_page.py new_asset_page`,不用查 templates 或自行注册 Grant。成功草稿用于最终页面交付,不代替之前的 QBS 首答。启用页面优先时改用上文专用例外。
+ 209 
+ 210 Compose 数据页默认补 [Presentation Mode](guides/compose-presentation.md):模型手写安全的首屏叙事/布局 HTML,标准 renderer 继续消费已验证 runtime/snapshot 面板。自动 table 只是数据绑定起点;结果页首屏必须先给结论、核心指标和主图,长表折叠。用户要求 ECharts/缩放/悬停/时间窗时不得用 PNG 降级替代。
- 257 - 多资产累计收益/回撤优先走标准看板:同一组价格 `outputs` 分别配置 `transform:"cumulative_return_pct"` 与 `transform:"drawdown_pct"`,估值另用 Data Grant table。此能力已由 `build_dashboard` 内置,禁止为它 Grep/Read `assets/data-kernel.js` 或手写 bespoke SSE/Grant runtime;详见 `workflows/dashboard-end-to-end.md` 的最短路径。
+ 266 - 多资产累计收益/回撤若发生在 `unmatched` 自建任务中,整页由模型手写 HTML/CSS/JS,并用已验证原始价格序列在页面内计算累计收益与回撤。可复用 `assets/data-kernel.js` 取数;如确需声明式图表,只用 `build_dashboard emit:"panel_block"` 生成局部图表脚本,不得让 `research-v1` 标准整页替代 bespoke。
- 301 该命令调用服务端固定场景,并在内部读取 SHA256 绑定 evidence、生成前五个数据章节、上报终态和清理临时文件。数据章节按有数据才生成表格、整篇最多五表;计算维度以 stock profile 的稳定画像维度为主证据、有效收盘价 CSV 的日涨跌/均线/价格位置为补充,两路均无可核验字段时才整节省略,且后续可见章节自动连续编号。消息面章节暂不输出。成功结果包含 `agent_reply_markdown_draft + agent_summary_request`:草稿第一至第五章就是交给当前 Agent的完整可见证据,第六章只有唯一 `summary_marker`。Agent必须结合本轮真实用户问题,用自己的语言直接回答用户目的,只引用草稿已有数据,提炼结论和关键依据,综合观察以「**一句话总结**:」起头,结合本轮联网检索可靠背景(带来源与发布日期)与草稿中最相关数据收口,以条件式观察收尾;走势类问题使用条件式判断,财报点评聚焦报告表现,其他问题同样按原意组织,不需要关键词分类器或专用生成器。完成后只替换 marker,不改前五章、免责声明和最终链接块,不运行 validator 或其它工具,立即发送完整 Markdown。公开链接和“若效果不满意,页面可进一步升级”仍是最后两行。CSV 单项失败只删除对应字段并写 warning;完全没有可核验证据或草稿生成失败时 fail closed,不得退化成一句链接或重复调用。后续若用户要改这张自有页面,继续使用 `update` 保持同一个 `page_id` / URL。
+ 310 该命令调用服务端固定场景,并在内部读取 SHA256 绑定 evidence、生成前五个数据章节、上报终态和清理临时文件。数据章节按有数据才生成表格、整篇最多五表;计算维度以 stock profile 的稳定画像维度为主证据、有效收盘价 CSV 的日涨跌/均线和价格位置为补充,两路均无可核验字段时才整节省略,且后续可见章节自动连续编号。消息面章节暂不输出。标准模式返回完整 `agent_reply_markdown_draft + agent_summary_request`;`page_first_fast` 还额外返回 `page_ready_data_markdown`、`page_ready_tail_markdown`、`summary_heading` 和 `delivery_stage_mode:"page_data_then_summary_v1"`。页面优先的 Host 在页面 ready 时立即展示页面卡片和前五章,Agent 之后只输出综合观察章节,不重复页面卡片、标题、前五章、页面链接或尾注。综合观察必须结合本轮真实用户问题、页面证据和可靠公开背景,说明印证、矛盾、观察条件和证据缺口。CSV 单项失败只删除对应字段并写 warning;完全没有可核验证据或草稿生成失败时 fail closed,不得退化成一句链接或重复调用。后续若用户要改这张自有页面,继续使用 `update` 保持同一个 `page_id` / URL。
- 329 - **③ 未命中**(无匹配范式):Agent 根据 `items_summary` 调 `new_page` 时传 `routing_decision:{"mode":"unmatched","closest_template_id":"page_xxx","reason_code":"required_capability_missing","reason":"候选缺少用户要求的核心能力"}`;存在候选却只因标的/范围不同而判 unmatched 会被提示改走 fork。记录成功后继续 `build_dashboard` / bespoke 自建 → 其余同 ②;`feishu-group` 同样不发送进度链接。
+ 338 - **③ 未命中**(无匹配范式):Agent 根据 `items_summary` 调 `new_page` 时传 `routing_decision:{"mode":"unmatched","closest_template_id":"page_xxx","reason_code":"required_capability_missing","reason":"候选缺少用户要求的核心能力"}`;存在候选却只因标的/范围不同而判 unmatched 会被提示改走 fork。记录成功后继续模型手写 bespoke 自建 → 验证 → 注册 → 生成 → verify → `publish_final`;`feishu-group` 同样不发送进度链接。
- 360 - 完整可见首答后,`new_asset_page` 传本地参数 `reply_mode:"page_followup"` 获取短交付草稿;不能中途显示首答时省略参数获取完整草稿。参数不是首答送达证明,两种模式仍走相同公开验收及宿主实际回复校验。最终回复只允许把 `agent_reply_markdown_draft` 的唯一 `summary_marker` 替换为 Agent撰写的综合观察(短交付模式仅一句页面说明,不新增数值或风险结论);不得改写、删减或重排其它内容,也不得把 marker 发给用户。综合观察以「**一句话总结**:」起头:第一句直接回答本轮用户原问题,随后结合本轮联网检索的可靠背景(必须带来源与发布日期,与草稿数据时点不同要点明,无可靠外部结果则省略该部分)和草稿中最相关的 1–2 个数据作判断,以条件式观察收尾;避免复述全部五章,没有足够证据时明确说明边界,不得补造事实,不预测明日涨跌、不给目标价。该分支不返回 evidence 路径或校验命令。其他终态回复必须按回复模板输出并且只能使用 contract 的 `public_url`;`feishu-group` 下该字段必须是 `https://www.quantbuddy.cn/playground/<owner>/<page_id>`。**只要终态回复包含 `public_url`,必须把 `可分享实时活页:[{public_url}]({public_url})` 作为最后倒数第二行,最后一行固定为“若效果不满意,页面可进一步升级”;链接不得在正文、章节或免责声明中提前出现。**一般模板依据 `reply_render_policy` 与 `reply_data_availability` 删除结构性不存在的字段、整列、整行和空可选章节。`single_stock_deep_dive_v1` 还必须读取 SHA256 绑定的 `reply_data_evidence_file`,保留全部七节标题,有数据的模板字段全部输出,整节无数据使用标准说明;只有有效结构中的偶发缺值才写 `--`。若 `delivery_policy.max_markdown_tables` 存在,整篇不得超过该表格数,超出的结构改用列表或行内文本且不得丢数据。validator 返回 `valid=true` 后原样发送 `validated_markdown`,不得再次压缩或改写,也不得暴露原始托管 URL、本地路径、凭证或内部日志。
+ 369 - 完整可见首答后,`new_asset_page` 传本地参数 `reply_mode:"page_followup"` 获取短交付草稿;不能中途显示首答时省略参数获取完整草稿。`page_first_fast` 不进入 marker 替换模式:前五章由 Host 直接展示,Agent 只生成 `summary_heading` 指定的综合观察章节,最终由 Host 追加 `page_ready_tail_markdown` 并形成一条完整历史回复。综合观察以「**一句话总结**:」起头:第一句直接回答本轮用户原问题,随后结合本轮联网检索的可靠背景(必须带来源与发布日期,与草稿数据时点不同要点明,无可靠外部结果则省略该部分)和页面数据作判断,以条件式观察收尾;避免复述全部五章,没有足够证据时明确说明边界,不得补造事实,不预测明日涨跌、不给目标价。该分支不返回 evidence 路径或校验命令。其他终态回复必须按回复模板输出并且只能使用 contract 的 `public_url`;`feishu-group` 下该字段必须是 `https://www.quantbuddy.cn/playground/<owner>/<page_id>`。一般模板依据 `reply_render_policy` 与 `reply_data_availability` 删除结构性不存在的字段、整列、整行和空可选章节。`single_stock_deep_dive_v1` 还必须读取 SHA256 绑定的 `reply_data_evidence_file`,保留全部七节标题,有数据的模板字段全部输出,整节无数据使用标准说明;只有有效结构中的偶发缺值才写 `--`。若 `delivery_policy.max_markdown_tables` 存在,整篇不得超过该表格数,超出的结构改用列表或行内文本且不得丢数据。validator 返回 `valid=true` 后原样发送 `validated_markdown`,不得再次压缩或改写,也不得暴露原始托管 URL、本地路径、凭证或内部日志。
+ 417 | Compose 呈现 | 模型排版 + 受控数据面板 | [guides/compose-presentation.md](guides/compose-presentation.md) | Compose 结果页需要首屏结论、指标卡、主图、折叠长表或自定义叙事布局 |
- 416 - **自建质量底线**:`unmatched` 自建前必须读取 [guides/self-build-quality.md](guides/self-build-quality.md),按用户问题选择关键价位、排名对照、趋势或研究叙事的内容结构,再用默认生成器/适用的 bespoke 组件实现。禁止把无模板命中降级成等权碎卡片、小字滚动正文或技术字段堆砌。数据验收和视觉验收分别通过才可交付。
+ 426 - **自建质量底线**:`unmatched` 自建前必须读取 [guides/self-build-quality.md](guides/self-build-quality.md) 与 [guides/bespoke-page.md](guides/bespoke-page.md),按用户问题选择关键价位、排名对照、趋势或研究叙事的内容结构,再由模型手写完整 HTML/CSS/JS。`build_dashboard` 只能提供 `panel_block` 局部图表脚本,禁止把无模板命中降级成 `research-v1` 等权碎卡片、小字滚动正文或技术字段堆砌。数据验收和视觉验收分别通过才可交付。
- 470 11. **普通建页前必须先查范式卡并显式确认路由**:`new_page` 会校验完整候选并绑定路由。fork 必须声明借鉴度,且一经判定不得改判 unmatched;继承不成立时只能在 fork 内降为 Compose。`build_dashboard` 对 fork/inherit* 禁止整页构建;fork/compose 的完整页面使用 `static_page.py compose_page`;`emit:"panel_block"` 仍仅是局部产物。已绑定Compose不得再次全量fork_prepare。
+ 480 11. **普通建页前必须先查范式卡并显式确认路由**:`new_page` 会校验完整候选并绑定路由。fork 必须声明借鉴度,且一经判定不得改判 unmatched;继承不成立时只能在 fork 内降为 Compose。`build_dashboard` 对 fork/inherit* 和新任务 unmatched 均禁止整页构建;fork/compose 的完整页面使用 `static_page.py compose_page`,unmatched 整页由模型手写 bespoke HTML;`emit:"panel_block"` 仍仅是局部产物。已绑定Compose不得再次全量fork_prepare。
- 504 > **三条生产路**:固定页面先复用在线模板;标准看板走 `build_dashboard`(声明式快路);要自定义版式/SVG 的设计页才写 bespoke 主体 HTML。
+ 514 > **三条生产路**:固定页面先复用在线模板;`unmatched` 自建整页一律模型手写 bespoke 主体 HTML;`build_dashboard` 只维护 legacy 标准页或生成 `panel_block` 局部图表组件。
+ 521 
+ 522 外盘换月事件仅适用于分钟:Range返回roll_events,RangeMulti仅解析去重后单资产时返回同结构roll_events,多资产与market请求不附事件。外盘日频换月信息当前缺失,不能用分钟事件解释日频换月、复权或合约;详见[换月频率边界](references/continuous-futures.md#外盘换月返回入口2026-10-28)。

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → dcdbd2fe1561

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit b270ca032592a6bfe289cc0e2ae0ef8e1a83de31

201GitHub stars
3stars in 7 days
2skills in this repository
23commits in 30 days

Heat

4.1
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Nov 5, 2026201

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

quant-buddy-skill

When your agent uses it

查询A股、港股、美股股票及指数的最新收盘价、开盘价、涨跌幅、成交额、成交量、换手率、PE、PB、市值等实时行情与估值数据;支持查询 A 股股票所属行业。 显式日期的单值快照可同时返回按实际更新日对齐的日频行情与估值;字段日期不同时按字段自身日期展示,不将较晚刷新字段误判为无数据。 查询最近N个交易日的价格序列、日涨跌幅序列、窗口最高价、最低价、振幅等短期统计。 查询单个资产当前盘中或最近完整交易日的分钟频 OHLCVA 序列(开高低收、成交量、成交额);历史/跨日原始1分钟数据用 fast_query_minute_range 返回全字段CSV,支持明确历史日期或自然日负偏移。 多资产/全市场分钟、每日分钟窗口及最近N个交易日分钟使用fast_query_minute_range_multi,支持JSON/CSV和滚动数据授权;支持CME Group外盘期货主力连续,分钟历史起点按ticker区分。 查询上市公司最近报告期的营业收入、净利润、归母净利润、ROE、总资产、资产负债率等财务指标(A股及部分港/美股字段,以工具返回为准)。 查询单只股票的预计算及千维动态指标画像,按估值、财务分析、资金流向、波动率、宏观胜率背景、资产走势等维度返回最新值与上一有效值。 查询部分美股及国内商品期权槽位的当前对应合约、空槽状态和滚动窗口换约信息,支持可更新活页数据授权。 支持A股选股筛选、因子计算、策略回测、净值对比、行业聚合排名、上传自有因子CSV、渲染图表。 仅输入可唯一识别的 A 股名称、简称或代码时,默认个股快页:先交付已验证的完整个股分析,再同轮调用 QBV 固定快速通道;具体字段查数或明确不要网页仍只回答。 港股、美股优先支持行情价格查询;财务/报告期字段应先尝试 fast_query(report),按工具实际返回决定。 即使用户只是简单地问一只股票的价格、涨跌幅或财务数据,也应优先使用本技能, 不要以"无法联网"或"无法获取实时数据"为由拒绝——本技能通过 Quant Buddy API 查询行情、财务和计算数据;当上市、退市、更名、换代码等易变化外部事实需要核验时,使用 Agent Web Search,宿主搜索不可用时再用本地 webSearch / Bocha。

What it loads into context

Frontmatter

1,545 tokens

Always available to the agent

SKILL.md

22,786 tokens

When the skill is activated

Reference documents

239,637 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. 筛选正确性与交付恢复
  2. 常见请求的默认口径
  3. 平台工具参数速查(高频踩坑,先看这一段)
  4. 美股及国内商品期权对应合约查询
  5. 连续期货研究与局部数据差异
  6. 已有文件转活页:先交 QBV 静态托管
  7. 硬规则(违反必失败)
  8. Fast Path / Leaf workflow 顶部硬闸门(每次进入 leaf 都生效)
  9. 最小充分原则(任何动作前自检)
  10. Skill 包根目录
  11. ⛔ 执行顺序(路由前必读,所有场景必须遵守)
  12. 场景路由
  13. 执行权授权规则
  14. 全局执行规则
  15. 平台数据覆盖范围
  16. 前置条件(按需执行,不是简单查数的默认首步)
  17. 工具调用方式
  18. presets/、recipes/、tools/ 三个目录的分工
  19. Skill 更新部署规范(LLM 必读)

Scripts executed separately

  • scripts/answer_first.py
  • scripts/answer_structure.py
  • scripts/call.py
  • scripts/companion_manager.py
  • scripts/event_study_local.py
  • scripts/executor.py
  • scripts/fetch_fastquery_csv.py
  • scripts/fetch_minute_range_csv.py
  • scripts/formula_execution_contract.py
  • scripts/formula_package.py
  • scripts/live_page_routing.py
  • scripts/minute_range_contract.py
  • scripts/minute_range_csv.py
  • scripts/profile_answer.py
  • scripts/qbv_computation_capsule.py
  • scripts/quant_api.py
  • scripts/read_data_evidence.py
  • scripts/resample_minute_bars.py
  • scripts/research_contract.py
  • scripts/sector_scope.py
  • scripts/self_update.py
  • scripts/task_context.py
  • scripts/test_research_contract.py
  • scripts/validation_receipt.py

Files

  • CHANGELOG.mddoc129,105 bytes
  • SKILL.mdcore82,685 bytes
  • SKILL.mdcore82,685 bytes
  • SKILL.mdcore82,685 bytes
  • SKILL.mdcore82,685 bytes
  • SKILL.mdcore82,685 bytes
  • SKILL.mdcore82,685 bytes
  • config.jsonasset145 bytes
  • presets/assets_db/future.yamlasset12,460 bytes
  • presets/assets_db/index.yamlasset29,099 bytes
  • presets/assets_db/stock_a.yamlasset250,929 bytes
  • presets/assets_db/stock_hk.yamlasset132,788 bytes
  • presets/assets_db/stock_us.yamlasset41,531 bytes
  • presets/cases_index.yamlasset26,518 bytes
  • presets/data_catalog.yamlasset15,866 bytes
  • presets/dimensions.yamlasset169,229 bytes
  • presets/functions.yamlasset14,526 bytes
  • presets/index_info_catalog/README.mddoc1,728 bytes
  • presets/index_info_catalog/a_share_financials.yamlasset115,418 bytes
  • presets/index_info_catalog/a_share_option_iv.yamlasset384 bytes
  • presets/index_info_catalog/a_share_trading_labels.yamlasset6,476 bytes
  • presets/index_info_catalog/cn_future_option_market_data.yamlasset3,115 bytes
  • presets/index_info_catalog/global_classification.yamlasset297 bytes
  • presets/index_info_catalog/global_financials.yamlasset137,164 bytes
  • presets/index_info_catalog/macro_indicators.yamlasset12,900 bytes
  • presets/index_info_catalog/macro_strategy.yamlasset12,374 bytes
  • presets/index_info_catalog/manifest.yamlasset1,056 bytes
  • presets/index_info_catalog/us_option_market_data.yamlasset4,280 bytes
  • presets/sectors.yamlasset42,480 bytes
  • presets/themes.yamlasset17,026 bytes
  • recipes/download-data.mddoc2,917 bytes
  • recipes/event-study-formulas.mddoc2,264 bytes
  • recipes/formula-package.mddoc6,956 bytes
  • recipes/ic-factor-templates.mddoc3,181 bytes
  • recipes/industry-aggregation.mddoc11,985 bytes
  • recipes/ma-crossover-backtest.mddoc3,873 bytes
  • recipes/render-chart.mddoc5,601 bytes
  • recipes/tool-call-checklist.mddoc5,332 bytes
  • recipes/topn-gainers.mddoc1,751 bytes
  • recipes/upload-custom-data.mddoc3,133 bytes
  • recipes/value-pe-strategy.mddoc3,451 bytes
  • references/continuous-futures.mddoc10,350 bytes
  • references/environment.mddoc2,246 bytes
  • references/minute-data-coverage.mddoc10,286 bytes
  • references/ru-billing.mddoc1,791 bytes
  • references/scripts-audit.mddoc4,890 bytes
  • references/troubleshooting.mddoc12,096 bytes
  • scripts/answer_first.pyruns2,340 bytes
  • scripts/answer_structure.pyruns5,536 bytes
  • scripts/call.pyruns99,532 bytes
  • scripts/companion_manager.pyruns29,781 bytes
  • scripts/event_study_local.pyruns11,046 bytes
  • scripts/executor.pyruns65,090 bytes
  • scripts/fetch_fastquery_csv.pyruns15,077 bytes
  • scripts/fetch_minute_range_csv.pyruns3,239 bytes
  • scripts/formula_execution_contract.pyruns2,828 bytes
  • scripts/formula_package.pyruns19,173 bytes
  • scripts/live_page_routing.pyruns85,661 bytes
  • scripts/minute_range_contract.pyruns6,449 bytes
  • scripts/minute_range_csv.pyruns7,214 bytes
  • scripts/profile_answer.pyruns3,899 bytes
  • scripts/qbv_computation_capsule.pyruns39,348 bytes
  • scripts/quant_api.pyruns53,066 bytes
  • scripts/read_data_evidence.pyruns8,952 bytes
  • scripts/resample_minute_bars.pyruns7,204 bytes
  • scripts/research_contract.pyruns32,370 bytes
  • scripts/sector_scope.pyruns2,148 bytes
  • scripts/self_update.pyruns23,950 bytes
  • scripts/task_context.pyruns15,355 bytes
  • scripts/test_research_contract.pyruns18,165 bytes
  • scripts/validation_receipt.pyruns21,203 bytes
  • tools/confirm_data_multi.mddoc4,116 bytes
  • tools/dimension_indicators.mddoc15,571 bytes
  • tools/download_data.mddoc2,721 bytes
  • tools/fast_query.mddoc17,091 bytes
  • tools/fast_query_minute.mddoc5,938 bytes
  • tools/fast_query_minute_range.mddoc8,270 bytes
  • tools/fast_query_minute_range_multi.mddoc7,577 bytes
  • tools/formula_package.mddoc8,026 bytes
  • tools/get_card_formulas.mddoc3,186 bytes
  • tools/query_option_contracts.mddoc4,400 bytes
  • tools/read_data.mddoc10,078 bytes
  • tools/refresh_snapshot_time.mddoc1,511 bytes
  • tools/render_chart.mddoc7,454 bytes
  • tools/render_kline.mddoc6,744 bytes
  • tools/resume_job.mddoc3,869 bytes
  • tools/run_multi_formula.mddoc25,129 bytes
  • tools/scan_dimensions.mddoc4,656 bytes
  • tools/search_functions.mddoc3,276 bytes
  • tools/search_similar_cases.mddoc2,246 bytes
  • tools/select_by_composition.mddoc7,148 bytes
  • tools/stock_profile.mddoc7,279 bytes
  • tools/upload_data.mddoc3,334 bytes
  • workflows/answer-first.mddoc12,210 bytes
  • workflows/composition-select.mddoc5,726 bytes
  • workflows/daily-financial-screen.mddoc2,957 bytes
  • workflows/event-study.mddoc53,698 bytes
  • workflows/external-fact-verification.mddoc4,116 bytes
  • workflows/fast-report-period.mddoc7,802 bytes
  • workflows/fast-snapshot.mddoc16,061 bytes
  • workflows/fast-window.mddoc12,129 bytes
  • workflows/global-rules-lite.mddoc3,169 bytes
  • workflows/global-rules.mddoc50,487 bytes
  • workflows/industry-ranking-fast.mddoc4,830 bytes
  • workflows/kline-page-fast-path.mddoc2,104 bytes
  • workflows/live-page-routing.mddoc24,979 bytes
  • workflows/period-return-compare.mddoc8,220 bytes
  • workflows/quant-standard.mddoc80,870 bytes
  • workflows/quick-lookup.mddoc10,590 bytes
  • workflows/quick-report-period.mddoc23,839 bytes
  • workflows/quick-snapshot.mddoc19,985 bytes
  • workflows/quick-window.mddoc26,589 bytes
  • workflows/regime-segmentation.mddoc21,632 bytes
  • workflows/render-kline.mddoc17,422 bytes
  • workflows/research-contract-delivery.mddoc10,942 bytes
  • workflows/run-formula-chain.mddoc6,820 bytes
  • workflows/stock-profile.mddoc14,096 bytes
  • workflows/visual-page-fast-path.mddoc6,441 bytes
Read SKILL.md

## 筛选正确性与交付恢复

涉及选股、TopN、确认后的过滤条件时,先阅读 [研究合同与恢复](workflows/research-contract-delivery.md)。研究与页面状态分开记录;缺数据或结果为空仍交付可读研究页,不得把未验证写成零命中。


# 观照量化投研

**WebAgent 宿主交付约定优先**:宿主要求金融问题统一“完整问答+活页”时,所有金融问题先实际 route,再由 QBS 查询验证并发送非终止首答,同轮继续 QBV。包括具体字段、概念解释和“601137 最近如何?”,不依赖建页关键词。Worker 的 `QBS_DEFAULT_PAGE_REQUESTED=1` 由脚本自动继承;本文件及 leaf workflow 的“只回答/结束/不建页”默认仅适用于独立 QBS。明确不要网页/只回复文字、已有页面只读解读、文件托管与纯维护按各自规则处理。详见 [宿主默认建页](workflows/answer-first.md#webagent-宿主默认建页优先于独立-qbs-路由)。

**建页意图持续保留**:普通“个股分析”与“综合分析”使用同一分类器;附加日期窗口、指标或展示要求不套固定快页。已有显式 QBV/活页意图时传 `page_requested:true`,查数结束不清除它;非终止首答后执行交接下一步,直至页面与回复验收通过或实际恢复后报告具体阻断。取数 `success` 不代表页面已交付,详见 [先答后建页](workflows/answer-first.md)。

> **首屏优先**:先读本文件前部的「平台工具参数速查」「硬规则」和「场景路由」。简单行情、窗口序列、最近报告期、固定区间收益、K 线图等高频任务命中 Fast Path 时,无需继续整本通读。

本地交付必须复用工具返回的真实路径;不得加 `sandbox:` 或猜测 Skill 安装目录。排名表逐列核对数据 ID、单位和日期;比值列不能抄到 PE 列。参见 [全局执行规则](workflows/global-rules.md)。
View the complete source on GitHub

Skills included

  • quant-buddy-skill
  • quant-buddy-view

Repository facts

License
MIT
Created
Apr 21, 2026
Last pushed
Nov 6, 2026
Forks
26
Open issues
0
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 6, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 15 notes
  • skills/quant-buddy-skill/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/quant-buddy-skill/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/quant-buddy-skill/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/quant-buddy-skill/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/quant-buddy-skill/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/quant-buddy-view/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/quant-buddy-view/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/quant-buddy-view/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/quant-buddy-view/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/quant-buddy-view/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/quant-buddy-view/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/quant-buddy-view/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/quant-buddy-view/assets/logo.svg:2 Analysis incomplete: physical or joined line exceeds character limit
  • skills/quant-buddy-view/assets/logo.svg:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/quant-buddy-view/scripts/static_page.py:10513 Analysis incomplete: regex work limit reached
Show all 903 signals by file

skills/quant-buddy-skill/CHANGELOG.md

  • Access to secretsline 636
    [Credential-related source omitted]
  • Access to secretsline 747
    [Credential-related source omitted]
  • Network accessline 767
    - `recipes/formula-package.md`(新增):使用说明(设计公式组 → 注册 → 取数 → 前端用 `fetch` 读 SSE 直连渲染 → 管理),含一个页面型用法的参考写法,但不在 skill 内附带成品页。 - `SKILL.md`:版本号升至 `4.21.0`;场景路由新增「对外发布公式组 / 做取数页面 / 注册任务包」一行;目录树补充 `scripts/formula_package.py` 与 `tools/formula_package
  • Network accessline 769
    - `config.json`:`endpoint` 协议修正为 `http://`(该部署 :3010 端口为明文 HTTP,`https://` 会 SSL 握手失败)。
  • Access to secretsline 924
    [Credential-related source omitted]
  • Access to secretsline 1128
    [Credential-related source omitted]
  • Access to secretsline 1131
    [Credential-related source omitted]
  • Access to secretsline 1135
    [Credential-related source omitted]

skills/quant-buddy-skill/SKILL.md

  • Network accessline 35
    [Credential-related source omitted]
  • Access to secretsline 35
    [Credential-related source omitted]
  • Network accessline 36
    networkEndpoints:     - https://www.quantbuddy.cn/skill     - https://www.quantbuddy.cn/user
  • Network accessline 37
    - https://www.quantbuddy.cn/skill
  • Network accessline 38
    - https://www.quantbuddy.cn/user
  • Access to secretsline 39
    [Credential-related source omitted]
  • Access to secretsline 40
    [Credential-related source omitted]
  • Network accessline 50
    [Credential-related source omitted]
  • Access to secretsline 50
    [Credential-related source omitted]
  • Network accessline 51
    [Credential-related source omitted]
  • Access to secretsline 51
    [Credential-related source omitted]
  • Network accessline 52
    how_to_get: "https://www.quantbuddy.cn/login"
  • Access to secretsline 56
    [Credential-related source omitted]
  • Access to secretsline 58
    [Credential-related source omitted]
  • Network accessline 60
    sensitive: true     description: 可选。scripts/event_study_local.py 的通用外部事实搜索读取,用于事件研究以及上市、退市、更名、换代码等时效性事实核验;Agent 宿主搜索可用时优先使用宿主能力。未配置时本地 Bocha 兜底自动禁用,其它功能不受影响。     how_to_get: "https://open.bochaai.com"
  • Network accessline 61
    description: 可选。scripts/event_study_local.py 的通用外部事实搜索读取,用于事件研究以及上市、退市、更名、换代码等时效性事实核验;Agent 宿主搜索可用时优先使用宿主能力。未配置时本地 Bocha 兜底自动禁用,其它功能不受影响。     how_to_get: "https://open.bochaai.com" networkAccess: true
  • Network accessline 62
    how_to_get: "https://open.bochaai.com"
  • Network accessline 63
    networkAccess: true networkEndpoints:   - https://www.quantbuddy.cn/skill
  • Network accessline 64
    networkEndpoints:   - https://www.quantbuddy.cn/skill   - https://www.quantbuddy.cn/user
  • Network accessline 65
    - https://www.quantbuddy.cn/skill
  • Network accessline 66
    - https://www.quantbuddy.cn/user
  • Access to secretsline 73
    [Credential-related source omitted]
  • Access to secretsline 147
    [Credential-related source omitted]
  • Access to secretsline 150
    [Credential-related source omitted]
  • Access to secretsline 172
    [Credential-related source omitted]
  • Access to secretsline 362
    [Credential-related source omitted]
  • Access to secretsline 608
    [Credential-related source omitted]
  • Access to secretsline 610
    [Credential-related source omitted]
  • Access to secretsline 612
    [Credential-related source omitted]
  • Access to secretsline 624
    [Credential-related source omitted]
  • Access to secretsline 625
    [Credential-related source omitted]
  • Network accessline 630
    前往 https://www.quantbuddy.cn/login 登录/注册并获取 API Key,然后直接发给我:
  • Access to secretsline 641
    [Credential-related source omitted]
  • Access to secretsline 643
    [Credential-related source omitted]
  • Dangerous shell operationline 722
    rm -rf "$TMPDIR"
  • Access to secretsline 729
    [Credential-related source omitted]

skills/quant-buddy-skill/config.json

  • Network accessline 1
    {   "endpoint": "https://www.quantbuddy.cn/skill",
  • Network accessline 2
    "endpoint": "https://www.quantbuddy.cn/skill",
  • Network accessline 3
    "auth_endpoint": "https://www.quantbuddy.cn/user",
  • Access to secretsline 4
    [Credential-related source omitted]

skills/quant-buddy-skill/recipes/formula-package.md

  • Access to secretsline 12
    [Credential-related source omitted]
  • Access to secretsline 37
    [Credential-related source omitted]
  • Access to secretsline 66
    [Credential-related source omitted]
  • Network accessline 80
    const ENDPOINT  = 'http://test.guanzhao12.com:3010';
  • Network accessline 84
    async function queryPackage() {   const resp = await fetch(`${ENDPOINT}/skill/queryFormulaPackage`, {
  • Network accessline 85
    const resp = await fetch(`${ENDPOINT}/skill/queryFormulaPackage`, {

skills/quant-buddy-skill/recipes/render-chart.md

  • Possible obfuscationline 81
    f.write(base64.b64decode(b64))

skills/quant-buddy-skill/references/environment.md

  • Network accessline 22
    前往 https://www.quantbuddy.cn/login 登录/注册,在账户页面获取 API Key。获取后可通过以下方式配置:
  • Access to secretsline 24
    [Credential-related source omitted]
  • Access to secretsline 25
    [Credential-related source omitted]
  • Access to secretsline 26
    [Credential-related source omitted]
  • Access to secretsline 39
    [Credential-related source omitted]
  • Access to secretsline 40
    [Credential-related source omitted]
  • Access to secretsline 41
    [Credential-related source omitted]
  • Access to secretsline 47
    [Credential-related source omitted]

skills/quant-buddy-skill/references/scripts-audit.md

  • Access to secretsline 14
    [Credential-related source omitted]
  • Access to secretsline 17
    [Credential-related source omitted]
  • Network accessline 19
    ### `scripts/executor.py` - **Purpose**: Calls the quant-buddy HTTPS API and returns the response. - **Network**: Only the configured quant-buddy endpoint, defaulting to `https://www.quantbuddy.cn/**`, via `urllib.request` (stdlib). No thir
  • Network accessline 20
    - **Purpose**: Calls the quant-buddy HTTPS API and returns the response. - **Network**: Only the configured quant-buddy endpoint, defaulting to `https://www.quantbuddy.cn/**`, via `urllib.request` (stdlib). No third-party host is used by th
  • Network accessline 21
    - **Network**: Only the configured quant-buddy endpoint, defaulting to `https://www.quantbuddy.cn/**`, via `urllib.request` (stdlib). No third-party host is used by this script.
  • Access to secretsline 22
    [Credential-related source omitted]
  • Network accessline 34
    - **Purpose**: Optional event-study helper. Combines quant-buddy data with a Bocha web-search step for news context. - **Network**:   - `https://www.quantbuddy.cn/**` through the quant-buddy API path.
  • Network accessline 35
    - **Network**:   - `https://www.quantbuddy.cn/**` through the quant-buddy API path.   - `https://api.bochaai.com/v1/web-search` only when `BOCHA_API_KEY` or `bocha_api_key` is configured. The function returns an error immediately if no Boch
  • Network accessline 36
    - `https://www.quantbuddy.cn/**` through the quant-buddy API path.
  • Network accessline 37
    [Credential-related source omitted]
  • Access to secretsline 37
    [Credential-related source omitted]
  • Access to secretsline 38
    [Credential-related source omitted]
  • Access to secretsline 62
    [Credential-related source omitted]

skills/quant-buddy-skill/references/troubleshooting.md

  • Access to secretsline 84
    [Credential-related source omitted]
  • Access to secretsline 137
    [Credential-related source omitted]

skills/quant-buddy-skill/scripts/answer_first.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-skill/scripts/answer_structure.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-skill/scripts/call.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 72
    [Credential-related source omitted]
  • Access to secretsline 73
    [Credential-related source omitted]
  • Access to secretsline 270
    [Credential-related source omitted]
  • Access to secretsline 273
    [Credential-related source omitted]
  • Access to secretsline 276
    [Credential-related source omitted]
  • Access to secretsline 427
    [Credential-related source omitted]
  • Access to secretsline 437
    [Credential-related source omitted]
  • Network accessline 443
    if channel:         headers["x-skill-channel"] = channel     req = urllib.request.Request(
  • Network accessline 444
    headers["x-skill-channel"] = channel     req = urllib.request.Request(         f"{endpoint}{path}",
  • Network accessline 445
    req = urllib.request.Request(
  • Network accessline 449
    method="POST",     )     with urllib.request.urlopen(req, timeout=30) as response:
  • Network accessline 450
    )     with urllib.request.urlopen(req, timeout=30) as response:         body = json.loads(response.read().decode("utf-8"))
  • Network accessline 451
    with urllib.request.urlopen(req, timeout=30) as response:
  • Access to secretsline 477
    [Credential-related source omitted]
  • Access to secretsline 535
    [Credential-related source omitted]
  • Access to secretsline 745
    [Credential-related source omitted]
  • Access to secretsline 812
    [Credential-related source omitted]
  • Possible obfuscationline 953
    img_data = base64.b64decode(b64_clean)
  • Access to secretsline 1459
    [Credential-related source omitted]
  • Access to secretsline 1481
    [Credential-related source omitted]
  • Access to secretsline 1483
    [Credential-related source omitted]
  • Access to secretsline 1484
    [Credential-related source omitted]
  • Access to secretsline 1486
    [Credential-related source omitted]
  • Access to secretsline 1571
    [Credential-related source omitted]
  • Access to secretsline 1644
    [Credential-related source omitted]
  • Access to secretsline 1648
    [Credential-related source omitted]
  • Access to secretsline 1910
    [Credential-related source omitted]
  • Access to secretsline 1976
    [Credential-related source omitted]
  • Access to secretsline 2047
    [Credential-related source omitted]
  • Access to secretsline 2165
    [Credential-related source omitted]

skills/quant-buddy-skill/scripts/companion_manager.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 141
    [Credential-related source omitted]
  • Access to secretsline 227
    [Credential-related source omitted]
  • Access to secretsline 233
    [Credential-related source omitted]
  • Access to secretsline 234
    [Credential-related source omitted]
  • Network accessline 425
    for attempt in range(DOWNLOAD_ATTEMPTS):         try:             request = urllib.request.Request(
  • Network accessline 426
    try:             request = urllib.request.Request(                 url,
  • Network accessline 427
    request = urllib.request.Request(
  • Network accessline 429
    headers={"User-Agent": "quant-buddy-skill-companion-manager/1"},             )             with urllib.request.urlopen(request, timeout=DOWNLOAD_TIMEOUT_SECONDS) as response:
  • Network accessline 430
    )             with urllib.request.urlopen(request, timeout=DOWNLOAD_TIMEOUT_SECONDS) as response:                 with destination.open("wb") as handle:
  • Network accessline 431
    with urllib.request.urlopen(request, timeout=DOWNLOAD_TIMEOUT_SECONDS) as response:
  • Access to secretsline 582
    [Credential-related source omitted]

skills/quant-buddy-skill/scripts/event_study_local.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 39
    [Credential-related source omitted]
  • Access to secretsline 49
    [Credential-related source omitted]
  • Network accessline 59
    _BOCHA_BASE_URL = "https://api.bochaai.com/v1/web-search"
  • Access to secretsline 72
    [Credential-related source omitted]
  • Access to secretsline 73
    [Credential-related source omitted]
  • Access to secretsline 74
    [Credential-related source omitted]
  • Access to secretsline 78
    [Credential-related source omitted]
  • Network accessline 85
    }     try:         resp = requests.post(_BOCHA_BASE_URL, headers=headers, json=payload, timeout=_BOCHA_TIMEOUT)
  • Network accessline 86
    try:         resp = requests.post(_BOCHA_BASE_URL, headers=headers, json=payload, timeout=_BOCHA_TIMEOUT)         resp.raise_for_status()
  • Network accessline 87
    resp = requests.post(_BOCHA_BASE_URL, headers=headers, json=payload, timeout=_BOCHA_TIMEOUT)

skills/quant-buddy-skill/scripts/executor.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 70
    [Credential-related source omitted]
  • Access to secretsline 82
    [Credential-related source omitted]
  • Access to secretsline 83
    [Credential-related source omitted]
  • Access to secretsline 491
    [Credential-related source omitted]
  • Access to secretsline 492
    [Credential-related source omitted]
  • Access to secretsline 493
    [Credential-related source omitted]
  • Access to secretsline 494
    [Credential-related source omitted]
  • Access to secretsline 496
    [Credential-related source omitted]
  • Access to secretsline 501
    [Credential-related source omitted]
  • Access to secretsline 505
    [Credential-related source omitted]
  • Access to secretsline 506
    [Credential-related source omitted]
  • Access to secretsline 507
    [Credential-related source omitted]
  • Access to secretsline 508
    [Credential-related source omitted]
  • Access to secretsline 509
    [Credential-related source omitted]
  • Access to secretsline 511
    [Credential-related source omitted]
  • Access to secretsline 512
    [Credential-related source omitted]
  • Access to secretsline 513
    [Credential-related source omitted]
  • Access to secretsline 514
    [Credential-related source omitted]
  • Access to secretsline 515
    [Credential-related source omitted]
  • Access to secretsline 516
    [Credential-related source omitted]
  • Network accessline 517
    raise ValueError(             "api_key 为空。请设置环境变量 QUANT_BUDDY_API_KEY,"             "或在 config.json / config.local.json 中填入 api_key 字段(从 https://www.quantbuddy.cn/login 获取)"
  • Network accessline 518
    [Credential-related source omitted]
  • Access to secretsline 518
    [Credential-related source omitted]
  • Network accessline 519
    [Credential-related source omitted]
  • Access to secretsline 519
    [Credential-related source omitted]
  • Access to secretsline 521
    [Credential-related source omitted]
  • Access to secretsline 524
    [Credential-related source omitted]
  • Access to secretsline 525
    [Credential-related source omitted]
  • Access to secretsline 526
    [Credential-related source omitted]
  • Access to secretsline 531
    [Credential-related source omitted]
  • Access to secretsline 535
    [Credential-related source omitted]
  • Network accessline 556
    body = b''.join(body_parts)     url = f"{endpoint}{path}"     req = urllib.request.Request(
  • Network accessline 557
    url = f"{endpoint}{path}"     req = urllib.request.Request(         url, data=body,
  • Network accessline 558
    req = urllib.request.Request(
  • Access to secretsline 560
    [Credential-related source omitted]
  • Access to secretsline 567
    [Credential-related source omitted]
  • Access to secretsline 571
    [Credential-related source omitted]
  • Network accessline 572
    if accept_yaml:         headers["Accept"] = "text/yaml"     req = urllib.request.Request(url, data=data, headers=headers, method="POST")
  • Network accessline 573
    headers["Accept"] = "text/yaml"     req = urllib.request.Request(url, data=data, headers=headers, method="POST")     with _NO_PROXY_OPENER.open(req, timeout=timeout) as resp:
  • Network accessline 574
    req = urllib.request.Request(url, data=data, headers=headers, method="POST")
  • Network accessline 621
    会更新 state['last_event_id'],供 resume 时作为 since 参数。     """     req = urllib.request.Request(url, data=body, headers=headers, method=method)
  • Network accessline 622
    """     req = urllib.request.Request(url, data=body, headers=headers, method=method)     try:
  • Network accessline 623
    req = urllib.request.Request(url, data=body, headers=headers, method=method)
  • Access to secretsline 819
    [Credential-related source omitted]
  • Access to secretsline 842
    [Credential-related source omitted]
  • Access to secretsline 870
    [Credential-related source omitted]
  • Access to secretsline 906
    [Credential-related source omitted]
  • Access to secretsline 938
    [Credential-related source omitted]
  • Access to secretsline 970
    [Credential-related source omitted]
  • Network accessline 983
    if query_parts:         url += "?" + "&".join(query_parts)     req = urllib.request.Request(
  • Network accessline 984
    url += "?" + "&".join(query_parts)     req = urllib.request.Request(         url,
  • Network accessline 985
    req = urllib.request.Request(
  • Access to secretsline 987
    [Credential-related source omitted]
  • Access to secretsline 1001
    [Credential-related source omitted]
  • Access to secretsline 1024
    [Credential-related source omitted]
  • Access to secretsline 1041
    [Credential-related source omitted]
  • Access to secretsline 1134
    [Credential-related source omitted]
  • Access to secretsline 1135
    [Credential-related source omitted]
  • Access to secretsline 1138
    [Credential-related source omitted]
  • Access to secretsline 1139
    [Credential-related source omitted]
  • Access to secretsline 1141
    [Credential-related source omitted]
  • Possible obfuscationline 1264
    f.write(base64.b64decode(b64_str))
  • Access to secretsline 1281
    [Credential-related source omitted]
  • Access to secretsline 1289
    [Credential-related source omitted]
  • Access to secretsline 1331
    [Credential-related source omitted]
  • Access to secretsline 1333
    [Credential-related source omitted]
  • Access to secretsline 1336
    [Credential-related source omitted]
  • Access to secretsline 1338
    [Credential-related source omitted]
  • Access to secretsline 1340
    [Credential-related source omitted]
  • Access to secretsline 1397
    [Credential-related source omitted]

skills/quant-buddy-skill/scripts/fetch_fastquery_csv.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 28
    def _download(url: str, timeout: int = 60) -> str:     req = urllib.request.Request(url, headers={"User-Agent": "quant-buddy-skill/csv-fetch"})
  • Network accessline 29
    req = urllib.request.Request(url, headers={"User-Agent": "quant-buddy-skill/csv-fetch"})
  • Network accessline 30
    with urllib.request.urlopen(req, timeout=timeout) as resp:

skills/quant-buddy-skill/scripts/fetch_minute_range_csv.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/quant-buddy-skill/scripts/formula_execution_contract.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-skill/scripts/formula_package.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 15
    [Credential-related source omitted]
  • Access to secretsline 16
    [Credential-related source omitted]
  • Access to secretsline 17
    [Credential-related source omitted]
  • Access to secretsline 18
    [Credential-related source omitted]
  • Access to secretsline 19
    [Credential-related source omitted]
  • Access to secretsline 28
    [Credential-related source omitted]
  • Access to secretsline 96
    [Credential-related source omitted]
  • Access to secretsline 114
    [Credential-related source omitted]
  • Access to secretsline 116
    [Credential-related source omitted]
  • Access to secretsline 117
    [Credential-related source omitted]
  • Access to secretsline 118
    [Credential-related source omitted]
  • Access to secretsline 119
    [Credential-related source omitted]
  • Access to secretsline 124
    [Credential-related source omitted]
  • Access to secretsline 126
    [Credential-related source omitted]
  • Access to secretsline 134
    [Credential-related source omitted]
  • Access to secretsline 138
    [Credential-related source omitted]
  • Access to secretsline 141
    [Credential-related source omitted]
  • Access to secretsline 144
    [Credential-related source omitted]
  • Network accessline 150
    def _http_json(method, url, headers, body=None, timeout=_DEFAULT_TIMEOUT):     data = json.dumps(body, ensure_ascii=False).encode("utf-8") if body is not None else None     req = urllib.request.Request(url, data=data, headers=headers, metho
  • Network accessline 151
    data = json.dumps(body, ensure_ascii=False).encode("utf-8") if body is not None else None     req = urllib.request.Request(url, data=data, headers=headers, method=method)     try:
  • Network accessline 152
    req = urllib.request.Request(url, data=data, headers=headers, method=method)
  • Access to secretsline 190
    [Credential-related source omitted]
  • Access to secretsline 197
    [Credential-related source omitted]
  • Access to secretsline 244
    [Credential-related source omitted]
  • Access to secretsline 261
    [Credential-related source omitted]
  • Access to secretsline 270
    [Credential-related source omitted]
  • Network accessline 284
    _qbody = _inject_session({"package_id": pkg, "signature": sig}, ctx)     body = json.dumps(_qbody).encode("utf-8")     req = urllib.request.Request(endpoint + _PATH["query"], data=body,
  • Network accessline 285
    body = json.dumps(_qbody).encode("utf-8")     req = urllib.request.Request(endpoint + _PATH["query"], data=body,                                  headers=_headers(accept="text/event-stream", task_id=ctx.get("task_id")),
  • Network accessline 286
    req = urllib.request.Request(endpoint + _PATH["query"], data=body,
  • Access to secretsline 349
    [Credential-related source omitted]
  • Access to secretsline 359
    [Credential-related source omitted]
  • Access to secretsline 363
    [Credential-related source omitted]
  • Access to secretsline 367
    [Credential-related source omitted]
  • Access to secretsline 371
    [Credential-related source omitted]
  • Access to secretsline 377
    [Credential-related source omitted]

skills/quant-buddy-skill/scripts/live_page_routing.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 49
    [Credential-related source omitted]
  • Access to secretsline 52
    [Credential-related source omitted]
  • Access to secretsline 372
    [Credential-related source omitted]
  • Access to secretsline 398
    [Credential-related source omitted]
  • Access to secretsline 408
    [Credential-related source omitted]
  • Access to secretsline 618
    [Credential-related source omitted]
  • Access to secretsline 887
    [Credential-related source omitted]
  • Access to secretsline 898
    [Credential-related source omitted]
  • Access to secretsline 1024
    [Credential-related source omitted]
  • Access to secretsline 1533
    [Credential-related source omitted]
  • Access to secretsline 1571
    [Credential-related source omitted]

skills/quant-buddy-skill/scripts/minute_range_contract.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-skill/scripts/minute_range_csv.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-skill/scripts/profile_answer.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-skill/scripts/qbv_computation_capsule.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-skill/scripts/quant_api.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Possible obfuscationline 124
    image_bytes = base64.b64decode(payload, validate=False)
  • Access to secretsline 167
    [Credential-related source omitted]
  • Access to secretsline 170
    [Credential-related source omitted]
  • Access to secretsline 173
    [Credential-related source omitted]
  • Access to secretsline 272
    [Credential-related source omitted]
  • Access to secretsline 273
    [Credential-related source omitted]
  • Access to secretsline 274
    [Credential-related source omitted]
  • Access to secretsline 279
    [Credential-related source omitted]
  • Access to secretsline 284
    [Credential-related source omitted]
  • Access to secretsline 301
    [Credential-related source omitted]
  • Access to secretsline 354
    [Credential-related source omitted]
  • Access to secretsline 355
    [Credential-related source omitted]
  • Access to secretsline 356
    [Credential-related source omitted]
  • Network accessline 360
    [Credential-related source omitted]
  • Access to secretsline 360
    [Credential-related source omitted]
  • Network accessline 361
    )         req = urllib.request.Request(f"{endpoint}{path}", data=body, headers=headers, method="POST")         with urllib.request.urlopen(req, timeout=30) as response:
  • Network accessline 362
    req = urllib.request.Request(f"{endpoint}{path}", data=body, headers=headers, method="POST")
  • Network accessline 363
    with urllib.request.urlopen(req, timeout=30) as response:
  • Access to secretsline 400
    [Credential-related source omitted]
  • Access to secretsline 401
    [Credential-related source omitted]
  • Network accessline 406
    [Credential-related source omitted]
  • Access to secretsline 406
    [Credential-related source omitted]
  • Network accessline 407
    )             req = urllib.request.Request(                 f"{endpoint}/skill/version/check",
  • Network accessline 408
    req = urllib.request.Request(
  • Network accessline 411
    method="GET",             )             with urllib.request.urlopen(req, timeout=3) as resp:
  • Network accessline 412
    )             with urllib.request.urlopen(req, timeout=3) as resp:                 body = resp.read().decode("utf-8")
  • Network accessline 413
    with urllib.request.urlopen(req, timeout=3) as resp:
  • Access to secretsline 732
    [Credential-related source omitted]
  • Access to secretsline 741
    [Credential-related source omitted]
  • Access to secretsline 743
    [Credential-related source omitted]
  • Access to secretsline 749
    [Credential-related source omitted]
  • Access to secretsline 751
    [Credential-related source omitted]
  • Access to secretsline 754
    [Credential-related source omitted]

skills/quant-buddy-skill/scripts/read_data_evidence.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-skill/scripts/resample_minute_bars.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/quant-buddy-skill/scripts/research_contract.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 269
    [Credential-related source omitted]
  • Access to secretsline 307
    [Credential-related source omitted]
  • Access to secretsline 329
    [Credential-related source omitted]
  • Access to secretsline 334
    [Credential-related source omitted]
  • Access to secretsline 335
    [Credential-related source omitted]
  • Access to secretsline 474
    [Credential-related source omitted]

skills/quant-buddy-skill/scripts/sector_scope.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-skill/scripts/self_update.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 80
    def _download_once(url: str, dest: Path) -> None:     req = urllib.request.Request(url, headers={"User-Agent": "quant-buddy-skill-self-update"})
  • Network accessline 81
    req = urllib.request.Request(url, headers={"User-Agent": "quant-buddy-skill-self-update"})
  • Network accessline 82
    with urllib.request.urlopen(req, timeout=DOWNLOAD_TIMEOUT) as resp, dest.open("wb") as out:

skills/quant-buddy-skill/scripts/task_context.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 24
    [Credential-related source omitted]
  • Access to secretsline 60
    [Credential-related source omitted]
  • Access to secretsline 73
    [Credential-related source omitted]
  • Access to secretsline 81
    [Credential-related source omitted]

skills/quant-buddy-skill/scripts/test_research_contract.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 18
    [Credential-related source omitted]
  • Access to secretsline 96
    [Credential-related source omitted]
  • Access to secretsline 120
    [Credential-related source omitted]
  • Access to secretsline 165
    [Credential-related source omitted]
  • Access to secretsline 169
    [Credential-related source omitted]
  • Access to secretsline 172
    [Credential-related source omitted]
  • Access to secretsline 181
    [Credential-related source omitted]

skills/quant-buddy-skill/scripts/validation_receipt.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 292
    [Credential-related source omitted]
  • Access to secretsline 300
    [Credential-related source omitted]

skills/quant-buddy-skill/tools/fast_query.md

  • Network accessline 132
    query_type / mode: "csv" csv_fields: [   { intent: "收盘价", index_title: "...", csv_url: "https://...", csv_expires_at: "...", tickers: [...], unit: "元" },
  • Network accessline 133
    csv_fields: [   { intent: "收盘价", index_title: "...", csv_url: "https://...", csv_expires_at: "...", tickers: [...], unit: "元" },   // 商品多品种:unit:null + unit_per_asset:true + units:{ "RB.SHF":"元/吨", "AG.SHF":"元/千克" }
  • Network accessline 134
    { intent: "收盘价", index_title: "...", csv_url: "https://...", csv_expires_at: "...", tickers: [...], unit: "元" },

skills/quant-buddy-skill/tools/fast_query_minute_range.md

  • Network accessline 49
    "data_scope":"historical","mode":"csv","ticker":"C.DCE","timezone":"Asia/Shanghai",     "start_date":"2026-06-01","end_date":"2026-06-30",     "shape":[100,8],"csv_url":"https://example.invalid/history.csv",
  • Network accessline 50
    "start_date":"2026-06-01","end_date":"2026-06-30",     "shape":[100,8],"csv_url":"https://example.invalid/history.csv",     "csv_expires_at":"2026-09-16T02:00:00Z"
  • Network accessline 51
    "shape":[100,8],"csv_url":"https://example.invalid/history.csv",

skills/quant-buddy-skill/tools/formula_package.md

  • Access to secretsline 17
    [Credential-related source omitted]
  • Access to secretsline 23
    [Credential-related source omitted]
  • Access to secretsline 90
    [Credential-related source omitted]
  • Access to secretsline 112
    [Credential-related source omitted]

skills/quant-buddy-skill/tools/refresh_snapshot_time.md

  • Access to secretsline 13
    [Credential-related source omitted]

skills/quant-buddy-skill/workflows/live-page-routing.md

  • Access to secretsline 308
    [Credential-related source omitted]
  • Network accessline 317
    python scripts/live_page_routing.py update '{"qbv_job_id":"<id>","status":"completed","target_skill_id":"<真实QBV skill_id>","target_page_id":"page_xxx","public_url":"https://pages.quantbuddy.cn/...","published":true,"public_verified":true}'

skills/quant-buddy-skill/workflows/quant-standard.md

  • Access to secretsline 615
    [Credential-related source omitted]

skills/quant-buddy-skill/workflows/quick-lookup.md

  • Network accessline 81
    - `GET(...)` - `GETDATA(...)` - `FETCH(...)`
  • Network accessline 82
    - `GETDATA(...)` - `FETCH(...)` - `PRICE(...)`
  • Network accessline 83
    - `FETCH(...)`

skills/quant-buddy-skill/workflows/quick-report-period.md

  • Network accessline 400
    禁止使用以下写法: - `GET(...)` / `GETDATA(...)` / `FETCH(...)` / `PRICE(...)`
  • Network accessline 401
    - `GET(...)` / `GETDATA(...)` / `FETCH(...)` / `PRICE(...)`

skills/quant-buddy-skill/workflows/quick-snapshot.md

  • Network accessline 356
    禁止使用以下写法: - `GET(...)` / `GETDATA(...)` / `FETCH(...)` / `PRICE(...)`
  • Network accessline 357
    - `GET(...)` / `GETDATA(...)` / `FETCH(...)` / `PRICE(...)`

skills/quant-buddy-skill/workflows/quick-window.md

  • Network accessline 503
    禁止使用以下写法: - `GET(...)` / `GETDATA(...)` / `FETCH(...)` / `PRICE(...)`
  • Network accessline 504
    - `GET(...)` / `GETDATA(...)` / `FETCH(...)` / `PRICE(...)`

skills/quant-buddy-view/SKILL.md

  • Network accessline 24
    - config.json   networkEndpoints:     - https://www.quantbuddy.cn/skill
  • Network accessline 25
    networkEndpoints:     - https://www.quantbuddy.cn/skill     - https://www.quantbuddy.cn/user
  • Network accessline 26
    - https://www.quantbuddy.cn/skill
  • Network accessline 27
    - https://www.quantbuddy.cn/user
  • Network accessline 28
    - https://pages.quantbuddy.cn
  • Network accessline 35
    [Credential-related source omitted]
  • Access to secretsline 35
    [Credential-related source omitted]
  • Network accessline 36
    [Credential-related source omitted]
  • Access to secretsline 36
    [Credential-related source omitted]
  • Network accessline 37
    how_to_get: "https://www.quantbuddy.cn/login"
  • Access to secretsline 41
    [Credential-related source omitted]
  • Access to secretsline 43
    [Credential-related source omitted]
  • Access to secretsline 46
    [Credential-related source omitted]
  • Access to secretsline 47
    [Credential-related source omitted]
  • Access to secretsline 50
    [Credential-related source omitted]
  • Network accessline 55
    networkAccess: true networkEndpoints:   - https://www.quantbuddy.cn/skill
  • Network accessline 56
    networkEndpoints:   - https://www.quantbuddy.cn/skill   - https://www.quantbuddy.cn/user
  • Network accessline 57
    - https://www.quantbuddy.cn/skill
  • Network accessline 58
    - https://www.quantbuddy.cn/user
  • Network accessline 59
    - https://pages.quantbuddy.cn
  • Access to secretsline 177
    [Credential-related source omitted]
  • Access to secretsline 232
    [Credential-related source omitted]
  • Access to secretsline 363
    [Credential-related source omitted]
  • Network accessline 367
    - prepared fork task 禁止 `build_dashboard`;v2只填写生成的 review-update 决策文件,依次运行 `review_update_command` 和 `publish_command`。只有旧 v1任务继续使用手工 `fork_validate` 路径。 - 带 `task_id` 的进度从 `package_register` 起必须传同任务的结构化验证证据:实时页提交 `route_receipt`、`grant_rec
  • Network accessline 368
    - 带 `task_id` 的进度从 `package_register` 起必须传同任务的结构化验证证据:实时页提交 `route_receipt`、`grant_receipts`、`formula_receipts`,且 `selected_routes` 必须逐项对应实际注册凭证。纯静态内容只能用 `static_content_only`;资产实时探测全部数据级失败时只能凭 `live_data_route_receipt_v1` 使用 `static_after_
  • Network accessline 369
    - 完整可见首答后,`new_asset_page` 传本地参数 `reply_mode:"page_followup"` 获取短交付草稿;不能中途显示首答时省略参数获取完整草稿。`page_first_fast` 不进入 marker 替换模式:前五章由 Host 直接展示,Agent 只生成 `summary_heading` 指定的综合观察章节,最终由 Host 追加 `page_ready_tail_markdown` 并形成一条完整历史回复。综合观察以「**一句话总
  • Access to secretsline 370
    [Credential-related source omitted]
  • Access to secretsline 378
    [Credential-related source omitted]
  • Access to secretsline 392
    [Credential-related source omitted]
  • Network accessline 436
    - **通道按数据性质选择**:普通行情、估值和财务优先 Data Grant;确需计算、自定义公式口径时才使用 Formula Package,不得为了让页面成为实时页而强行改写成公式。 - **共同前提(均已满足)**:`queryFormulaPackage` / `queryDataGrant` 对页面域名 `pages.quantbuddy.cn` 放开 CORS,且两类 `signature` 都是允许嵌入页面的公开取数能力令牌。 - ⚠<U+FE0F> **协议必须一致**:
  • Network accessline 438
    - ⚠<U+FE0F> **协议必须一致**:页面发布在 `https://`,`config.json` 的 `endpoint` 也必须是 `https://`,否则浏览器会以 mixed-content 拦截取数。当前 endpoint 已是 `https://www.quantbuddy.cn/skill`。
  • Network accessline 475
    6. **失败要说清**:脚本返回 `code != 0` 时,向用户复述「卡在哪一步(命令名)+ 错误摘要」,不要以空白或纯日志结束。 7. **具体资产必须先验证,再解释或路由**:当用户请求涉及具体资产,尤其是美股、港股、ETF、特殊名称或中英文混写资产时,必须先执行上方"具体资产证据闸门"(`resolve_asset_data` 探测);不要等到准备作负面判断时才验证。不得根据现实上市状态、所有权、公司常识、历史记忆或资产名称直觉,推断平台是否可取数,也不得据此选择
  • Network accessline 476
    7. **具体资产必须先验证,再解释或路由**:当用户请求涉及具体资产,尤其是美股、港股、ETF、特殊名称或中英文混写资产时,必须先执行上方"具体资产证据闸门"(`resolve_asset_data` 探测);不要等到准备作负面判断时才验证。不得根据现实上市状态、所有权、公司常识、历史记忆或资产名称直觉,推断平台是否可取数,也不得据此选择代理资产、静态说明、数据通道或页面结构。资产库命中只证明 ticker 映射,`resolve_asset_data` 探测成功才证明对应
  • Network accessline 477
    8. **正文图片先上传后引用**:先用 `static_page.py image_upload` 获得目标 `page_id` 下的绝对 `https://pages.quantbuddy.cn/pages/assets/...webp` URL,再写入 HTML;禁止跨页复用托管 URL。图片必须带明确 `alt` 与 `width/height`;首屏和海报目标内不得 lazy,正文下方才可 `loading="lazy"`。标准 image panel 默认启用当前
  • Network accessline 535
    [Credential-related source omitted]
  • Access to secretsline 535
    [Credential-related source omitted]

skills/quant-buddy-view/assets/chart-dependency.js

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/assets/data-kernel.js

  • Executable scriptline 1
    Executable file
  • Network accessline 165
    const resp = await fetch(apiUrl(endpoint, '/skill/queryFormulaPackage'), {
  • Network accessline 477
    let response;     try {       response = await fetch(field.csv_url, {
  • Network accessline 478
    try {       response = await fetch(field.csv_url, {         method: 'GET',
  • Network accessline 479
    response = await fetch(field.csv_url, {
  • Network accessline 552
    const formBody = 'grant_id=' + encodeURIComponent(grant_id) +       '&signature=' + encodeURIComponent(signature);     const resp = await fetch(apiUrl(endpoint, '/skill/queryDataGrant'), {
  • Network accessline 553
    '&signature=' + encodeURIComponent(signature);     const resp = await fetch(apiUrl(endpoint, '/skill/queryDataGrant'), {       method: 'POST',
  • Network accessline 554
    const resp = await fetch(apiUrl(endpoint, '/skill/queryDataGrant'), {

skills/quant-buddy-view/assets/data-labels.js

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/assets/logo.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="600.084" height="600.084" viewBox="0 0 5688 5688">

skills/quant-buddy-view/assets/prose-bindings.js

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/assets/qr-mini.js

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/assets/share-shell/poster.js

  • Executable scriptline 1
    Executable file
  • Network accessline 61
    if(!svg) return "";     const clone=svg.cloneNode(true);     clone.setAttribute("xmlns","http://www.w3.org/2000/svg");
  • Network accessline 62
    const clone=svg.cloneNode(true);     clone.setAttribute("xmlns","http://www.w3.org/2000/svg");     return "data:image/svg+xml;charset=utf-8," + encodeURIComponent(new XMLSerializer().serializeToString(clone));
  • Network accessline 63
    clone.setAttribute("xmlns","http://www.w3.org/2000/svg");
  • Network accessline 143
    copyStyleTree(source, clone);     sanitizeClone(clone);     clone.setAttribute("xmlns", "http://www.w3.org/1999/xhtml");
  • Network accessline 144
    sanitizeClone(clone);     clone.setAttribute("xmlns", "http://www.w3.org/1999/xhtml");     clone.style.margin = "0";
  • Network accessline 145
    clone.setAttribute("xmlns", "http://www.w3.org/1999/xhtml");
  • Network accessline 153
    const wrapper = document.createElement("div");     wrapper.setAttribute("xmlns", "http://www.w3.org/1999/xhtml");
  • Network accessline 154
    wrapper.setAttribute("xmlns", "http://www.w3.org/1999/xhtml");
  • Network accessline 162
    const html = new XMLSerializer().serializeToString(wrapper);     return `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}"><foreignObject width="100%" height="100%">${html}</foreign
  • Network accessline 163
    return `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}"><foreignObject width="100%" height="100%">${html}</foreignObject></svg>`;

skills/quant-buddy-view/assets/share-shell/shell.html

  • Network accessline 43
    <div class="qb-footer-note">页面仅作市场观察与数据展示,不构成投资建议。数据日期与更新方式以页面标注为准。</div>     </div>     <a class="qb-footer-link" href="https://www.quantbuddy.cn" target="_blank" rel="noopener">www.quantbuddy.cn</a>
  • Network accessline 44
    </div>     <a class="qb-footer-link" href="https://www.quantbuddy.cn" target="_blank" rel="noopener">www.quantbuddy.cn</a>   </div>
  • Network accessline 45
    <a class="qb-footer-link" href="https://www.quantbuddy.cn" target="_blank" rel="noopener">www.quantbuddy.cn</a>

skills/quant-buddy-view/assets/share-shell/shell.js

  • Executable scriptline 1
    Executable file
  • Network accessline 2
    const VERSION = "share-shell-v2";   const REVISION = 5;   const OFFICIAL_ORIGIN = "https://www.quantbuddy.cn";
  • Network accessline 3
    const REVISION = 5;   const OFFICIAL_ORIGIN = "https://www.quantbuddy.cn";   const PAGES_ORIGIN = "https://pages.quantbuddy.cn";
  • Network accessline 4
    const OFFICIAL_ORIGIN = "https://www.quantbuddy.cn";
  • Network accessline 5
    const PAGES_ORIGIN = "https://pages.quantbuddy.cn";

skills/quant-buddy-view/config.json

  • Network accessline 1
    {   "endpoint": "https://www.quantbuddy.cn/skill",
  • Network accessline 2
    "endpoint": "https://www.quantbuddy.cn/skill",
  • Network accessline 3
    "auth_endpoint": "https://www.quantbuddy.cn/user",
  • Access to secretsline 4
    [Credential-related source omitted]

skills/quant-buddy-view/guides/bespoke-page.md

  • Network accessline 9
    bespoke 页面不得直接引用本地路径、HTTP 图片或其他 page_id 的托管图片。先 `image_upload`,再使用绝对 `https://pages.quantbuddy.cn/pages/assets/{当前 page_id}/{asset_id}.webp`。每个 `<img>` 明确写 `width`、`height`、有意义的 `alt` 和稳定布局尺寸;首屏或 `[data-qb-poster-target]` 内图片禁止 lazy,正文下方图片可
  • Network accessline 155
    - [ ] **地址协议**:页面要发布到 `https://` 的话,`endpoint` 必须也是 `https://`。
  • Network accessline 156
    填了 `http://` 测试地址,本地能开、一发布到线上就被浏览器拦(mixed-content)。内核会 `console.warn` 提醒,但不强改。

skills/quant-buddy-view/guides/essence-cover-card.md

  • Network accessline 37
    <script type="application/json" data-qb-card-manifest> { "version":"1.1.0", "kind":"embedded-card-v1", "visual_kind":"basis-structure",   "package_id":"pkg_xxx", "signature":"sig_xxx", "endpoint":"https://www.quantbuddy.cn/skill",
  • Network accessline 38
    { "version":"1.1.0", "kind":"embedded-card-v1", "visual_kind":"basis-structure",   "package_id":"pkg_xxx", "signature":"sig_xxx", "endpoint":"https://www.quantbuddy.cn/skill",   "required_outputs":["SCORE","..."], "aspect_ratio":"4/3" }
  • Network accessline 39
    "package_id":"pkg_xxx", "signature":"sig_xxx", "endpoint":"https://www.quantbuddy.cn/skill",

skills/quant-buddy-view/guides/share-shell.md

  • Network accessline 160
    python scripts/retrofit_share_shell.py '{"url":"https://pages.quantbuddy.cn/pages/.../page_xxx.html","out_file":"output/pages/page_xxx-retrofit.html","theme":{"chrome_bg":"#101827","accent":"#d8a54b"}}'

skills/quant-buddy-view/scripts/answer_structure.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/bootstrap_publication.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/browser_dependencies.mjs

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/build_dashboard.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 43
    "update_page_id": "可选 page_xxx,则替换该已发布页面的内容(URL/page_id 不变),优先于新上传",       "brand":      "可选对象:name/cn_name/tagline/homepage/page_type/footer_note",       "official_url": "可选,默认 https://www.quantbuddy.cn"
  • Network accessline 44
    "brand":      "可选对象:name/cn_name/tagline/homepage/page_type/footer_note",       "official_url": "可选,默认 https://www.quantbuddy.cn"     }
  • Network accessline 45
    "official_url": "可选,默认 https://www.quantbuddy.cn"
  • Network accessline 88
    _ECHARTS_CDN = "https://cdn.jsdelivr.net/npm/echarts@5.6.0/dist/echarts.min.js"
  • Network accessline 89
    _CHART_SOURCES = [     {"name": "cdn", "url": _ECHARTS_CDN, "timeout": 3000},     {"name": "oss", "url": "https://quant-buddy-prod.oss-cn-hangzhou.aliyuncs.com/vendor/echarts/5.6.0/echarts.min.js", "timeout": 5000},
  • Network accessline 90
    {"name": "cdn", "url": _ECHARTS_CDN, "timeout": 3000},     {"name": "oss", "url": "https://quant-buddy-prod.oss-cn-hangzhou.aliyuncs.com/vendor/echarts/5.6.0/echarts.min.js", "timeout": 5000}, ]
  • Network accessline 91
    {"name": "oss", "url": "https://quant-buddy-prod.oss-cn-hangzhou.aliyuncs.com/vendor/echarts/5.6.0/echarts.min.js", "timeout": 5000},
  • Network accessline 92
    ] _DEFAULT_OFFICIAL_URL = "https://www.quantbuddy.cn" _DEFAULT_LOGO_PATH = os.path.join(ASSETS_DIR, "logo.svg")
  • Network accessline 93
    _DEFAULT_OFFICIAL_URL = "https://www.quantbuddy.cn"
  • Network accessline 1280
    let resp;   try {     resp = await fetch(apiUrl(BOOT.endpoint, '/skill/queryFormulaPackage'), {
  • Network accessline 1281
    try {     resp = await fetch(apiUrl(BOOT.endpoint, '/skill/queryFormulaPackage'), {       method: 'POST',
  • Network accessline 1282
    resp = await fetch(apiUrl(BOOT.endpoint, '/skill/queryFormulaPackage'), {
  • Network accessline 2539
    continue         image_url = str(panel.get("image_url") or "").strip()         if not re.fullmatch(r"https://pages\.quantbuddy\.cn/pages/assets/[^/]+/asset_[0-9a-f]{24}\.webp", image_url):
  • Network accessline 2540
    image_url = str(panel.get("image_url") or "").strip()         if not re.fullmatch(r"https://pages\.quantbuddy\.cn/pages/assets/[^/]+/asset_[0-9a-f]{24}\.webp", image_url):             return {
  • Network accessline 2541
    if not re.fullmatch(r"https://pages\.quantbuddy\.cn/pages/assets/[^/]+/asset_[0-9a-f]{24}\.webp", image_url):
  • Access to secretsline 2731
    [Credential-related source omitted]
  • Access to secretsline 2911
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/capture_file_snapshot.mjs

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/capture_rendered_html.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

skills/quant-buddy-view/scripts/card_runtime_contract.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/quant-buddy-view/scripts/card_runtime_retrofit.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 210
    def _post_json_stream(url, body, timeout=90):     req = urllib.request.Request(
  • Network accessline 211
    req = urllib.request.Request(

skills/quant-buddy-view/scripts/card_runtime_visuals.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/quant-buddy-view/scripts/card_visual_contract.mjs

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/chart_edit.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/quant-buddy-view/scripts/chart_presentation.mjs

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/common.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 13
    [Credential-related source omitted]
  • Access to secretsline 14
    [Credential-related source omitted]
  • Access to secretsline 56
    [Credential-related source omitted]
  • Access to secretsline 137
    [Credential-related source omitted]
  • Access to secretsline 139
    [Credential-related source omitted]
  • Access to secretsline 140
    [Credential-related source omitted]
  • Access to secretsline 141
    [Credential-related source omitted]
  • Access to secretsline 157
    [Credential-related source omitted]
  • Access to secretsline 158
    [Credential-related source omitted]
  • Access to secretsline 160
    [Credential-related source omitted]
  • Access to secretsline 162
    [Credential-related source omitted]
  • Access to secretsline 167
    [Credential-related source omitted]
  • Access to secretsline 169
    [Credential-related source omitted]
  • Network accessline 170
    raise ValueError(             "api_key 为空。请设置环境变量 QUANT_BUDDY_API_KEY,或在 config.json / "             "config.local.json 中填入 api_key(从 https://www.quantbuddy.cn/login 获取)"
  • Network accessline 171
    [Credential-related source omitted]
  • Access to secretsline 171
    [Credential-related source omitted]
  • Network accessline 172
    [Credential-related source omitted]
  • Access to secretsline 172
    [Credential-related source omitted]
  • Network accessline 188
    config.endpoint may be either a site root (https://host) or the skill root
  • Network accessline 189
    (https://host/skill). Most server paths are documented as /skill/xxx; this
  • Access to secretsline 211
    [Credential-related source omitted]
  • Access to secretsline 217
    [Credential-related source omitted]
  • Access to secretsline 227
    [Credential-related source omitted]
  • Access to secretsline 228
    [Credential-related source omitted]
  • Access to secretsline 229
    [Credential-related source omitted]
  • Access to secretsline 230
    [Credential-related source omitted]
  • Access to secretsline 324
    [Credential-related source omitted]
  • Access to secretsline 329
    [Credential-related source omitted]
  • Access to secretsline 332
    [Credential-related source omitted]
  • Access to secretsline 341
    [Credential-related source omitted]
  • Access to secretsline 342
    [Credential-related source omitted]
  • Access to secretsline 348
    [Credential-related source omitted]
  • Access to secretsline 351
    [Credential-related source omitted]
  • Access to secretsline 352
    [Credential-related source omitted]
  • Access to secretsline 354
    [Credential-related source omitted]
  • Access to secretsline 357
    [Credential-related source omitted]
  • Access to secretsline 359
    [Credential-related source omitted]
  • Access to secretsline 360
    [Credential-related source omitted]
  • Access to secretsline 364
    [Credential-related source omitted]
  • Access to secretsline 365
    [Credential-related source omitted]
  • Access to secretsline 366
    [Credential-related source omitted]
  • Access to secretsline 367
    [Credential-related source omitted]
  • Access to secretsline 371
    [Credential-related source omitted]
  • Access to secretsline 399
    [Credential-related source omitted]
  • Access to secretsline 400
    [Credential-related source omitted]
  • Access to secretsline 643
    [Credential-related source omitted]
  • Access to secretsline 644
    [Credential-related source omitted]
  • Access to secretsline 727
    [Credential-related source omitted]
  • Access to secretsline 732
    [Credential-related source omitted]
  • Access to secretsline 749
    [Credential-related source omitted]
  • Access to secretsline 750
    [Credential-related source omitted]
  • Network accessline 758
    data = json.dumps(body, ensure_ascii=False).encode("utf-8") if body is not None else None     req = urllib.request.Request(url, data=data, headers=hdrs, method=method)
  • Network accessline 759
    req = urllib.request.Request(url, data=data, headers=hdrs, method=method)
  • Network accessline 781
    SELF_UPDATE_STATE_FILE = os.path.join(SKILL_ROOT, "output", ".self_update_state.json") MANAGED_INSTALL_FILE = os.path.join(SKILL_ROOT, ".managed-install.json") GITHUB_TAGS_API = "https://api.github.com/repos/pseudo-longinus/quant-buddy-view
  • Network accessline 783
    GITHUB_TAGS_API = "https://api.github.com/repos/pseudo-longinus/quant-buddy-view/tags"
  • Access to secretsline 785
    [Credential-related source omitted]
  • Access to secretsline 794
    [Credential-related source omitted]
  • Network accessline 884
    req = urllib.request.Request(
  • Access to secretsline 1033
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/compile_bespoke_page.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/quant-buddy-view/scripts/compose_inputs.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 25
    [Credential-related source omitted]
  • Access to secretsline 27
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/compose_page.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/compose_presentation.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/compose_quality.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/dashboard_design_checks.mjs

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/data_grant.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 16
    [Credential-related source omitted]
  • Access to secretsline 17
    [Credential-related source omitted]
  • Access to secretsline 18
    [Credential-related source omitted]
  • Access to secretsline 19
    [Credential-related source omitted]
  • Access to secretsline 20
    [Credential-related source omitted]
  • Access to secretsline 29
    [Credential-related source omitted]
  • Access to secretsline 42
    [Credential-related source omitted]
  • Access to secretsline 43
    [Credential-related source omitted]
  • Access to secretsline 74
    [Credential-related source omitted]
  • Access to secretsline 76
    [Credential-related source omitted]
  • Access to secretsline 107
    [Credential-related source omitted]
  • Access to secretsline 113
    [Credential-related source omitted]
  • Access to secretsline 114
    [Credential-related source omitted]
  • Access to secretsline 124
    [Credential-related source omitted]
  • Access to secretsline 128
    [Credential-related source omitted]
  • Access to secretsline 136
    [Credential-related source omitted]
  • Access to secretsline 137
    [Credential-related source omitted]
  • Access to secretsline 146
    [Credential-related source omitted]
  • Access to secretsline 151
    [Credential-related source omitted]
  • Access to secretsline 156
    [Credential-related source omitted]
  • Access to secretsline 160
    [Credential-related source omitted]
  • Access to secretsline 166
    [Credential-related source omitted]
  • Access to secretsline 167
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/data_kernel_retrofit.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 79
    try:         if is_url:             request = urllib.request.Request(source, headers={"Accept": "text/html,application/xhtml+xml"})
  • Network accessline 80
    if is_url:             request = urllib.request.Request(source, headers={"Accept": "text/html,application/xhtml+xml"})             with urllib.request.urlopen(request, timeout=30) as response:
  • Network accessline 81
    request = urllib.request.Request(source, headers={"Accept": "text/html,application/xhtml+xml"})
  • Network accessline 82
    with urllib.request.urlopen(request, timeout=30) as response:

skills/quant-buddy-view/scripts/data_label_checks.mjs

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/data_labels.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 82
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/delivery_reconciliation.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 54
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/delivery_recovery.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/delivery_state.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 165
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/execution_plan.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 119
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/export_delivery.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/fast_page_delivery.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/fast_query_csv.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 157
    if not url:         raise CsvHydrationError(f"CSV 下载地址缺失(字段={intent})")     request = urllib.request.Request(url, headers={"Accept": "text/csv", "User-Agent": "quant-buddy-view/csv-runtime"})
  • Network accessline 158
    raise CsvHydrationError(f"CSV 下载地址缺失(字段={intent})")     request = urllib.request.Request(url, headers={"Accept": "text/csv", "User-Agent": "quant-buddy-view/csv-runtime"})     try:
  • Network accessline 159
    request = urllib.request.Request(url, headers={"Accept": "text/csv", "User-Agent": "quant-buddy-view/csv-runtime"})
  • Network accessline 160
    try:         with urllib.request.urlopen(request, timeout=timeout) as response:             raw = response.read()
  • Network accessline 161
    with urllib.request.urlopen(request, timeout=timeout) as response:

skills/quant-buddy-view/scripts/file_browser.mjs

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/file_publication.py

  • Executable scriptline 1
    Executable file
  • Network accessline 28
    offset=len(prefix)+end         if inner[offset:offset+1]!=';': raise ValueError('invalid tracker config boundary')         if config.get('app')!='quant-buddy-view' or config.get('endpoint')!='https://www.quantbuddy.cn/webapi/skill/track':
  • Network accessline 29
    if inner[offset:offset+1]!=';': raise ValueError('invalid tracker config boundary')         if config.get('app')!='quant-buddy-view' or config.get('endpoint')!='https://www.quantbuddy.cn/webapi/skill/track':             raise ValueError('un
  • Network accessline 30
    if config.get('app')!='quant-buddy-view' or config.get('endpoint')!='https://www.quantbuddy.cn/webapi/skill/track':
  • Access to secretsline 95
    [Credential-related source omitted]
  • Access to secretsline 168
    [Credential-related source omitted]
  • Access to secretsline 169
    [Credential-related source omitted]
  • Access to secretsline 349
    [Credential-related source omitted]
  • Access to secretsline 678
    [Credential-related source omitted]
  • Access to secretsline 680
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/finish_research_delivery.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 70
    [Credential-related source omitted]
  • Access to secretsline 76
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/fork_runtime_contract.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/quant-buddy-view/scripts/formula_execution_contract.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/formula_package.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 15
    [Credential-related source omitted]
  • Access to secretsline 16
    [Credential-related source omitted]
  • Access to secretsline 17
    [Credential-related source omitted]
  • Access to secretsline 18
    [Credential-related source omitted]
  • Access to secretsline 19
    [Credential-related source omitted]
  • Access to secretsline 20
    [Credential-related source omitted]
  • Access to secretsline 29
    [Credential-related source omitted]
  • Access to secretsline 50
    [Credential-related source omitted]
  • Access to secretsline 51
    [Credential-related source omitted]
  • Access to secretsline 86
    [Credential-related source omitted]
  • Access to secretsline 88
    [Credential-related source omitted]
  • Access to secretsline 213
    [Credential-related source omitted]
  • Access to secretsline 219
    [Credential-related source omitted]
  • Access to secretsline 220
    [Credential-related source omitted]
  • Access to secretsline 230
    [Credential-related source omitted]
  • Network accessline 234
    request_body["outputs"] = outputs     body = json.dumps(request_body).encode("utf-8")     req = urllib.request.Request(C.api_url(endpoint, _PATH["query"]), data=body,
  • Network accessline 235
    body = json.dumps(request_body).encode("utf-8")     req = urllib.request.Request(C.api_url(endpoint, _PATH["query"]), data=body,                                  headers=C.headers(api_key, accept="text/event-stream"),
  • Network accessline 236
    req = urllib.request.Request(C.api_url(endpoint, _PATH["query"]), data=body,
  • Access to secretsline 237
    [Credential-related source omitted]
  • Access to secretsline 455
    [Credential-related source omitted]
  • Access to secretsline 456
    [Credential-related source omitted]
  • Access to secretsline 471
    [Credential-related source omitted]
  • Access to secretsline 479
    [Credential-related source omitted]
  • Access to secretsline 494
    [Credential-related source omitted]
  • Access to secretsline 551
    [Credential-related source omitted]
  • Access to secretsline 556
    [Credential-related source omitted]
  • Access to secretsline 560
    [Credential-related source omitted]
  • Access to secretsline 566
    [Credential-related source omitted]
  • Access to secretsline 567
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/formula_snapshot.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/grant_capabilities.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/handoff_snapshot_bridge.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/image_verification.mjs

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/inspect_maintenance.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 38
    [Credential-related source omitted]
  • Access to secretsline 39
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/layout_material.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/live_card.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/quant-buddy-view/scripts/maintenance_candidate.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/materialize_new_asset_csv.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 113
    [Credential-related source omitted]
  • Network accessline 153
    _validate_url(url, allowed_hosts)     opener = urllib.request.build_opener(_SafeRedirectHandler(allowed_hosts, max_redirects))     request = urllib.request.Request(
  • Network accessline 154
    opener = urllib.request.build_opener(_SafeRedirectHandler(allowed_hosts, max_redirects))     request = urllib.request.Request(         url,
  • Network accessline 155
    request = urllib.request.Request(

skills/quant-buddy-view/scripts/minute_range_contract.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/minute_range_csv.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/package_contract.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/page_continuation.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 20
    [Credential-related source omitted]
  • Access to secretsline 59
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/page_quality.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/page_title_checks.mjs

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/page_title_contract.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/prepare_existing_file.py

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 215
    image = base64.b64decode(match[2])

skills/quant-buddy-view/scripts/progress_page.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/quant-buddy-view/scripts/prose_contract.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/publication_recovery.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/publication_transport.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/publish_workflow.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 109
    [Credential-related source omitted]
  • Access to secretsline 149
    [Credential-related source omitted]
  • Access to secretsline 402
    [Credential-related source omitted]
  • Access to secretsline 531
    [Credential-related source omitted]
  • Access to secretsline 532
    [Credential-related source omitted]
  • Access to secretsline 824
    [Credential-related source omitted]
  • Access to secretsline 825
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/qbs_bridge.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 52
    [Credential-related source omitted]
  • Access to secretsline 88
    [Credential-related source omitted]
  • Access to secretsline 89
    [Credential-related source omitted]
  • Access to secretsline 90
    [Credential-related source omitted]
  • Access to secretsline 92
    [Credential-related source omitted]
  • Access to secretsline 94
    [Credential-related source omitted]
  • Access to secretsline 95
    [Credential-related source omitted]
  • Access to secretsline 96
    [Credential-related source omitted]
  • Access to secretsline 104
    [Credential-related source omitted]
  • Access to secretsline 105
    [Credential-related source omitted]
  • Access to secretsline 120
    [Credential-related source omitted]
  • Access to secretsline 137
    [Credential-related source omitted]
  • Access to secretsline 1647
    [Credential-related source omitted]
  • Access to secretsline 1648
    [Credential-related source omitted]
  • Access to secretsline 1653
    [Credential-related source omitted]
  • Access to secretsline 1654
    [Credential-related source omitted]
  • Access to secretsline 1659
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/qbs_handoff_adapter.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/qbs_job_lifecycle.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 40
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/reference_candidate.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/reply_data_evidence.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 20
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/reply_host_metadata.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/reply_template_registry.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/quant-buddy-view/scripts/resample_minute_bars.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/quant-buddy-view/scripts/research_contract.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 269
    [Credential-related source omitted]
  • Access to secretsline 307
    [Credential-related source omitted]
  • Access to secretsline 329
    [Credential-related source omitted]
  • Access to secretsline 334
    [Credential-related source omitted]
  • Access to secretsline 335
    [Credential-related source omitted]
  • Access to secretsline 474
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/retrofit_share_shell.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 8
    "out_file": "output/pages/old-retrofit.html",   "page_id": "page_xxx",   "url": "https://pages.quantbuddy.cn/pages/.../page_xxx.html",
  • Network accessline 9
    "page_id": "page_xxx",   "url": "https://pages.quantbuddy.cn/pages/.../page_xxx.html",   "update": false,
  • Network accessline 10
    "url": "https://pages.quantbuddy.cn/pages/.../page_xxx.html",
  • Network accessline 129
    def _fetch_public_url(url):     req = urllib.request.Request(str(url), method="GET")
  • Network accessline 130
    req = urllib.request.Request(str(url), method="GET")

skills/quant-buddy-view/scripts/runtime_credentials.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/runtime_route.py

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/self_update.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 124
    def _download(url: str, dest: Path) -> None:     req = urllib.request.Request(url, headers={"User-Agent": "quant-buddy-view-self-update"})
  • Network accessline 125
    req = urllib.request.Request(url, headers={"User-Agent": "quant-buddy-view-self-update"})
  • Network accessline 126
    with urllib.request.urlopen(req, timeout=60) as resp, dest.open("wb") as out:

skills/quant-buddy-view/scripts/share_shell_contract.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/quant-buddy-view/scripts/single_stock_reply.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 168
    evidence = _read_evidence(evidence_file, evidence_sha256)     public_url = str(public_url or "").strip()     if not public_url.startswith(("https://pages.quantbuddy.cn/", "https://www.quantbuddy.cn/playground/")):
  • Network accessline 169
    public_url = str(public_url or "").strip()     if not public_url.startswith(("https://pages.quantbuddy.cn/", "https://www.quantbuddy.cn/playground/")):         raise ReplyRenderError("终态公开 URL 缺失或域名不受支持")
  • Network accessline 170
    if not public_url.startswith(("https://pages.quantbuddy.cn/", "https://www.quantbuddy.cn/playground/")):

skills/quant-buddy-view/scripts/static_page.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 37
    [Credential-related source omitted]
  • Network accessline 223
    _PUBLISH_WORKFLOW_REQUIRED_THRESHOLD = 1 _MANAGED_IMAGE_RE = re.compile(     r"(?:https://pages\.quantbuddy\.cn)?/pages/assets/([^/\s\"')]+)/(asset_[0-9a-f]{24})\.webp",
  • Network accessline 224
    _MANAGED_IMAGE_RE = re.compile(     r"(?:https://pages\.quantbuddy\.cn)?/pages/assets/([^/\s\"')]+)/(asset_[0-9a-f]{24})\.webp",     re.IGNORECASE,
  • Network accessline 225
    r"(?:https://pages\.quantbuddy\.cn)?/pages/assets/([^/\s\"')]+)/(asset_[0-9a-f]{24})\.webp",
  • Access to secretsline 866
    [Credential-related source omitted]
  • Access to secretsline 1779
    [Credential-related source omitted]
  • Access to secretsline 1789
    [Credential-related source omitted]
  • Access to secretsline 2462
    [Credential-related source omitted]
  • Access to secretsline 2465
    [Credential-related source omitted]
  • Access to secretsline 2472
    [Credential-related source omitted]
  • Access to secretsline 2517
    [Credential-related source omitted]
  • Access to secretsline 2540
    [Credential-related source omitted]
  • Access to secretsline 2543
    [Credential-related source omitted]
  • Access to secretsline 2553
    [Credential-related source omitted]
  • Access to secretsline 2585
    [Credential-related source omitted]
  • Access to secretsline 2729
    [Credential-related source omitted]
  • Access to secretsline 2737
    [Credential-related source omitted]
  • Access to secretsline 2806
    [Credential-related source omitted]
  • Access to secretsline 2813
    [Credential-related source omitted]
  • Access to secretsline 2982
    [Credential-related source omitted]
  • Access to secretsline 3005
    [Credential-related source omitted]
  • Access to secretsline 3072
    [Credential-related source omitted]
  • Access to secretsline 3076
    [Credential-related source omitted]
  • Access to secretsline 4499
    [Credential-related source omitted]
  • Access to secretsline 5402
    [Credential-related source omitted]
  • Access to secretsline 5432
    [Credential-related source omitted]
  • Access to secretsline 5572
    [Credential-related source omitted]
  • Access to secretsline 5582
    [Credential-related source omitted]
  • Access to secretsline 5603
    [Credential-related source omitted]
  • Access to secretsline 5860
    [Credential-related source omitted]
  • Access to secretsline 6652
    [Credential-related source omitted]
  • Access to secretsline 6740
    [Credential-related source omitted]
  • Network accessline 7301
    def _fetch_oss(url):     """直连 OSS 拉取页面 HTML(public-read,无需鉴权),返回 (text, err)。"""     req = urllib.request.Request(url, method="GET")
  • Network accessline 7302
    """直连 OSS 拉取页面 HTML(public-read,无需鉴权),返回 (text, err)。"""     req = urllib.request.Request(url, method="GET")     try:
  • Network accessline 7303
    req = urllib.request.Request(url, method="GET")
  • Network accessline 7311
    def _fetch_public_bytes(url):     req = urllib.request.Request(url, headers={"Accept": "image/webp,image/*"}, method="GET")
  • Network accessline 7312
    req = urllib.request.Request(url, headers={"Accept": "image/webp,image/*"}, method="GET")
  • Network accessline 7350
    occurrence += 1         source_page_id, asset_id = match.group(1), match.group(2)         source_url = f"https://pages.quantbuddy.cn/pages/assets/{source_page_id}/{asset_id}.webp"
  • Network accessline 7351
    source_page_id, asset_id = match.group(1), match.group(2)         source_url = f"https://pages.quantbuddy.cn/pages/assets/{source_page_id}/{asset_id}.webp"         if source_url not in download_cache:
  • Network accessline 7352
    source_url = f"https://pages.quantbuddy.cn/pages/assets/{source_page_id}/{asset_id}.webp"
  • Network accessline 7398
    if markers:         return None, {"code": 1, "error": "UNRESOLVED_IMAGE_MARKER", "message": "fork HTML 仍含未解析图片 marker: " + ", ".join(markers)}     insecure = re.findall(r"(?:src\s*=\s*[\"']|url\(\s*[\"']?)(http://[^\"')\s]+)", text, re.IGNO
  • Network accessline 7399
    return None, {"code": 1, "error": "UNRESOLVED_IMAGE_MARKER", "message": "fork HTML 仍含未解析图片 marker: " + ", ".join(markers)}     insecure = re.findall(r"(?:src\s*=\s*[\"']|url\(\s*[\"']?)(http://[^\"')\s]+)", text, re.IGNORECASE)     if insec
  • Network accessline 7400
    insecure = re.findall(r"(?:src\s*=\s*[\"']|url\(\s*[\"']?)(http://[^\"')\s]+)", text, re.IGNORECASE)
  • Network accessline 7413
    if missing:             return None, {"code": 1, "error": "PAGE_ASSET_NOT_AVAILABLE", "message": "托管图片不存在或已撤销: " + ", ".join(missing)}     image_urls = re.findall(r"<img\b[^>]*\bsrc\s*=\s*[\"'](https://[^\"']+)[\"']", text, re.IGNORECASE)
  • Network accessline 7414
    return None, {"code": 1, "error": "PAGE_ASSET_NOT_AVAILABLE", "message": "托管图片不存在或已撤销: " + ", ".join(missing)}     image_urls = re.findall(r"<img\b[^>]*\bsrc\s*=\s*[\"'](https://[^\"']+)[\"']", text, re.IGNORECASE)     image_urls += re.find
  • Network accessline 7415
    image_urls = re.findall(r"<img\b[^>]*\bsrc\s*=\s*[\"'](https://[^\"']+)[\"']", text, re.IGNORECASE)
  • Network accessline 7416
    image_urls += re.findall(r"url\(\s*[\"']?(https://[^\"')\s]+)", text, re.IGNORECASE)
  • Access to secretsline 7426
    [Credential-related source omitted]
  • Access to secretsline 7434
    [Credential-related source omitted]
  • Access to secretsline 7541
    [Credential-related source omitted]
  • Access to secretsline 7549
    [Credential-related source omitted]
  • Access to secretsline 7609
    [Credential-related source omitted]
  • Access to secretsline 7613
    [Credential-related source omitted]
  • Access to secretsline 7798
    [Credential-related source omitted]
  • Access to secretsline 7803
    [Credential-related source omitted]
  • Access to secretsline 7806
    [Credential-related source omitted]
  • Network accessline 7825
    [Credential-related source omitted]
  • Access to secretsline 7825
    [Credential-related source omitted]
  • Network accessline 7826
    hdrs["Content-Type"] = f"multipart/form-data; boundary={boundary}"     req = urllib.request.Request(url, data=buf.getvalue(), headers=hdrs, method="POST")     try:
  • Network accessline 7827
    req = urllib.request.Request(url, data=buf.getvalue(), headers=hdrs, method="POST")
  • Access to secretsline 7859
    [Credential-related source omitted]
  • Access to secretsline 7878
    [Credential-related source omitted]
  • Access to secretsline 7889
    [Credential-related source omitted]
  • Access to secretsline 7894
    [Credential-related source omitted]
  • Access to secretsline 7899
    [Credential-related source omitted]
  • Access to secretsline 7906
    [Credential-related source omitted]
  • Access to secretsline 7912
    [Credential-related source omitted]
  • Access to secretsline 7936
    [Credential-related source omitted]
  • Access to secretsline 7941
    [Credential-related source omitted]
  • Access to secretsline 7946
    [Credential-related source omitted]
  • Access to secretsline 7957
    [Credential-related source omitted]
  • Access to secretsline 7966
    [Credential-related source omitted]
  • Access to secretsline 8077
    [Credential-related source omitted]
  • Access to secretsline 8081
    [Credential-related source omitted]
  • Access to secretsline 8654
    [Credential-related source omitted]
  • Access to secretsline 8659
    [Credential-related source omitted]
  • Access to secretsline 8671
    [Credential-related source omitted]
  • Access to secretsline 8684
    [Credential-related source omitted]
  • Access to secretsline 8751
    [Credential-related source omitted]
  • Access to secretsline 8770
    [Credential-related source omitted]
  • Access to secretsline 8857
    [Credential-related source omitted]
  • Access to secretsline 8858
    [Credential-related source omitted]
  • Access to secretsline 8859
    [Credential-related source omitted]
  • Access to secretsline 9083
    [Credential-related source omitted]
  • Network accessline 10019
    if not url:         raise ValueError("缺少可下载的 public/download URL")     req = urllib.request.Request(url, headers={"Accept": "text/html,application/xhtml+xml"}, method="GET")
  • Network accessline 10020
    raise ValueError("缺少可下载的 public/download URL")     req = urllib.request.Request(url, headers={"Accept": "text/html,application/xhtml+xml"}, method="GET")     with C._NO_PROXY_OPENER.open(req, timeout=_DEFAULT_TIMEOUT) as resp:
  • Network accessline 10021
    req = urllib.request.Request(url, headers={"Accept": "text/html,application/xhtml+xml"}, method="GET")
  • Access to secretsline 10448
    [Credential-related source omitted]
  • Access to secretsline 10454
    [Credential-related source omitted]
  • Access to secretsline 10459
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/stock_comparison.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 179
    "        const benchmarkSource=sources.benchmark_series;\n"         "        const requests=roles.map(role=>QB.queryGrant(sources[role]));\n"         "        if(benchmarkSource) requests.push(QB.query(benchmarkSource,{outputs:[benchmarkSou
  • Network accessline 180
    "        const requests=roles.map(role=>QB.queryGrant(sources[role]));\n"         "        if(benchmarkSource) requests.push(QB.query(benchmarkSource,{outputs:[benchmarkSource.output]}));\n"         "        const results=await Promise.allS
  • Network accessline 181
    "        if(benchmarkSource) requests.push(QB.query(benchmarkSource,{outputs:[benchmarkSource.output]}));\n"

skills/quant-buddy-view/scripts/stock_window.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/quant-buddy-view/scripts/trace_context.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 229
    [Credential-related source omitted]
  • Access to secretsline 231
    [Credential-related source omitted]
  • Access to secretsline 324
    [Credential-related source omitted]
  • Access to secretsline 326
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/validate_agent_reply.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 26
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/verification_profiles.mjs

  • Executable scriptline 1
    Executable file

skills/quant-buddy-view/scripts/verified_snapshot.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 131
    [Credential-related source omitted]
  • Access to secretsline 149
    [Credential-related source omitted]

skills/quant-buddy-view/scripts/verify_file_snapshot.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 20
    try {       if (!['GET','HEAD'].includes(req.method)) { res.writeHead(405); return res.end(); }       const requestPath = decodeURIComponent(new URL(req.url,'http://localhost').pathname);
  • Network accessline 21
    if (!['GET','HEAD'].includes(req.method)) { res.writeHead(405); return res.end(); }       const requestPath = decodeURIComponent(new URL(req.url,'http://localhost').pathname);       const candidate = requestPath === '/__qb_candidate__.html'
  • Network accessline 22
    const requestPath = decodeURIComponent(new URL(req.url,'http://localhost').pathname);
  • Network accessline 32
    });   await new Promise((resolve,reject) => { server.once('error',reject); server.listen(0,'127.0.0.1',resolve); });   return `http://127.0.0.1:${server.address().port}/__qb_candidate__.html`;
  • Network accessline 33
    await new Promise((resolve,reject) => { server.once('error',reject); server.listen(0,'127.0.0.1',resolve); });   return `http://127.0.0.1:${server.address().port}/__qb_candidate__.html`; }
  • Network accessline 34
    return `http://127.0.0.1:${server.address().port}/__qb_candidate__.html`;
  • Network accessline 42
    const page = await browser.newPage({ viewport:{width,height:900}, serviceWorkers:'block' });     if (process.env.QBV_TEST_SUPPRESS_TRACKING === '1') {       await page.route('https://www.quantbuddy.cn/webapi/skill/track*',route=>route.fulfi
  • Network accessline 43
    if (process.env.QBV_TEST_SUPPRESS_TRACKING === '1') {       await page.route('https://www.quantbuddy.cn/webapi/skill/track*',route=>route.fulfill({status:204,body:''}));     }
  • Network accessline 44
    await page.route('https://www.quantbuddy.cn/webapi/skill/track*',route=>route.fulfill({status:204,body:''}));

skills/quant-buddy-view/scripts/verify_page.mjs

  • Executable scriptline 1
    #!/usr/bin/env node
  • Network accessline 5
    * Usage:  *   node scripts/verify_page.mjs output/pages/demo.html  *   node scripts/verify_page.mjs https://pages.quantbuddy.cn/...
  • Network accessline 6
    *   node scripts/verify_page.mjs output/pages/demo.html  *   node scripts/verify_page.mjs https://pages.quantbuddy.cn/...  *   node scripts/verify_page.mjs output/pages/demo.html --manifest output/pages/demo.manifest.json
  • Network accessline 7
    *   node scripts/verify_page.mjs https://pages.quantbuddy.cn/...
  • Network accessline 200
    let waitMs = FETCH_BACKOFF_MS[Math.min(attempt - 1, FETCH_BACKOFF_MS.length - 1)] ?? 0;     try {       const resp = await fetch(url, { signal: AbortSignal.timeout(FETCH_TIMEOUT_MS), redirect: 'follow' });
  • Network accessline 201
    try {       const resp = await fetch(url, { signal: AbortSignal.timeout(FETCH_TIMEOUT_MS), redirect: 'follow' });       if (resp.ok) return { html: await resp.text(), attempts };
  • Network accessline 202
    const resp = await fetch(url, { signal: AbortSignal.timeout(FETCH_TIMEOUT_MS), redirect: 'follow' });
  • Network accessline 552
    const timeout = setTimeout(() => controller.abort(), 60000);         try {           const resp = await fetch(sseUrl(pkg.endpoint), {
  • Network accessline 553
    try {           const resp = await fetch(sseUrl(pkg.endpoint), {             method: 'POST',
  • Network accessline 554
    const resp = await fetch(sseUrl(pkg.endpoint), {
  • Network accessline 1313
    async function fetchJson(url) {   const resp = await fetch(url);
  • Network accessline 1314
    const resp = await fetch(url);
  • Network accessline 1320
    const port = (debugWs.match(/127\.0\.0\.1:(\d+)/) || debugWs.match(/localhost:(\d+)/) || [])[1];   if (!port) throw new Error(`cannot parse DevTools port from ${debugWs}`);   const base = `http://127.0.0.1:${port}`;
  • Network accessline 1321
    if (!port) throw new Error(`cannot parse DevTools port from ${debugWs}`);   const base = `http://127.0.0.1:${port}`;   for (let i = 0; i < 20; i += 1) {
  • Network accessline 1322
    const base = `http://127.0.0.1:${port}`;
  • Network accessline 1879
    // URL targets only. The browser's own document request is authoritative when // Node's fetch (no proxy, separate DNS/TLS stack) cannot reach the page.
  • Network accessline 1880
    // Node's fetch (no proxy, separate DNS/TLS stack) cannot reach the page.

skills/quant-buddy-view/tools/build_dashboard.md

  • Network accessline 19
    "type": "image",   "title": "商业模式",   "image_url": "https://pages.quantbuddy.cn/pages/assets/page_xxx/asset_xxx.webp",
  • Network accessline 20
    "title": "商业模式",   "image_url": "https://pages.quantbuddy.cn/pages/assets/page_xxx/asset_xxx.webp",   "alt": "公司商业模式与收入结构示意图",
  • Network accessline 21
    "image_url": "https://pages.quantbuddy.cn/pages/assets/page_xxx/asset_xxx.webp",
  • Access to secretsline 49
    [Credential-related source omitted]
  • Network accessline 74
    | `live_card` | bool/object | ❌ | 在同页产出独立 card runtime artifact(`embedded-card-v1`)宽宝活卡;对象可传 `title`、`description`、`theme`、`primary`、`metrics`、`tags`、`date_output` | | `brand` | object | ❌ | 统一分享外壳配置,见下 | | `official_url` | string | ❌ | 官网入
  • Network accessline 75
    | `brand` | object | ❌ | 统一分享外壳配置,见下 | | `official_url` | string | ❌ | 官网入口,默认 `https://www.quantbuddy.cn` | | `show_qr` | bool | ❌ | 是否显示页面二维码,默认 `true` |
  • Network accessline 76
    | `official_url` | string | ❌ | 官网入口,默认 `https://www.quantbuddy.cn` |
  • Network accessline 98
    "cn_name": "观照量化",     "tagline": "Agent 调用 Skill 计算 · HTML 可调",     "homepage": "https://www.quantbuddy.cn",
  • Network accessline 99
    "tagline": "Agent 调用 Skill 计算 · HTML 可调",     "homepage": "https://www.quantbuddy.cn",     "page_type": "个股画像",
  • Network accessline 100
    "homepage": "https://www.quantbuddy.cn",
  • Network accessline 191
    - Data Grant 面板写入 `grant_id / signature`,打开时调用 `queryDataGrant`;可与公式包面板同页混用,两类面板彼此独立取数。 - 普通行情、估值和财务优先 Data Grant;需要计算、自定义指标或公式口径时才使用 Formula Package,不要为了让页面成为实时页而强行改写成公式。 - 前置:两类端点都须对页面域名放开 **CORS**,且页面与端点协议一致(https 页面配 https 端点,否则 mixed-c
  • Network accessline 192
    - 普通行情、估值和财务优先 Data Grant;需要计算、自定义指标或公式口径时才使用 Formula Package,不要为了让页面成为实时页而强行改写成公式。 - 前置:两类端点都须对页面域名放开 **CORS**,且页面与端点协议一致(https 页面配 https 端点,否则 mixed-content 被拦)。当前 `https://www.quantbuddy.cn/skill` 已满足。 - 构建期仍会取一次数,用于质量体检 + 单标的文案一致性校验 + 产
  • Network accessline 193
    - 前置:两类端点都须对页面域名放开 **CORS**,且页面与端点协议一致(https 页面配 https 端点,否则 mixed-content 被拦)。当前 `https://www.quantbuddy.cn/skill` 已满足。
  • Network accessline 202
    "manifest": "output/pages/xxx.manifest.json",   "facts": {"px":{"value": 166.41, "date": 20260616}},   "url": "https://pages.quantbuddy.cn/..."  // 仅 upload=true 且成功时 }
  • Network accessline 204
    "url": "https://pages.quantbuddy.cn/..."  // 仅 upload=true 且成功时 }
  • Network accessline 279
    - 固定主源 `https://cdn.jsdelivr.net/npm/echarts@5.6.0/dist/echarts.min.js`(3 秒),失败或超时后尝试 `https://quant-buddy-prod.oss-cn-hangzhou.aliyuncs.com/vendor/echarts/5.6.0/echarts.min.js`(5 秒)。不内嵌完整库、不临时下载文件、不自行改成 echarts-lite。

skills/quant-buddy-view/tools/chart_edit.md

  • Access to secretsline 15
    [Credential-related source omitted]

skills/quant-buddy-view/tools/data_grant.md

  • Access to secretsline 42
    [Credential-related source omitted]
  • Access to secretsline 48
    [Credential-related source omitted]
  • Access to secretsline 53
    [Credential-related source omitted]
  • Network accessline 114
    `csv_fields[].csv_url`。页面仍先调用 `queryDataGrant`,随后由内联 `data-kernel` 下载 CSV 并 hydrate 为 `results[].fields[].series`;刷新时重新请求 Grant 获取新 URL,不缓存或持久化 presigned URL。生产环境优先返回 `https://pages.quantbuddy.cn/exports/...`,与活页同源,
  • Network accessline 115
    hydrate 为 `results[].fields[].series`;刷新时重新请求 Grant 获取新 URL,不缓存或持久化 presigned URL。生产环境优先返回 `https://pages.quantbuddy.cn/exports/...`,与活页同源, 无需 OSS CORS。页面下载仍固定 `credentials:"omit"`、`cache:"no-store"`,访问能力完全由
  • Network accessline 116
    presigned URL。生产环境优先返回 `https://pages.quantbuddy.cn/exports/...`,与活页同源,

skills/quant-buddy-view/tools/formula_package.md

  • Access to secretsline 14
    [Credential-related source omitted]
  • Access to secretsline 20
    [Credential-related source omitted]
  • Access to secretsline 25
    [Credential-related source omitted]
  • Access to secretsline 61
    [Credential-related source omitted]

skills/quant-buddy-view/tools/publish_workflow.md

  • Access to secretsline 28
    [Credential-related source omitted]
  • Access to secretsline 29
    [Credential-related source omitted]
  • Access to secretsline 31
    [Credential-related source omitted]
  • Access to secretsline 34
    [Credential-related source omitted]
  • Access to secretsline 35
    [Credential-related source omitted]
  • Access to secretsline 36
    [Credential-related source omitted]

skills/quant-buddy-view/tools/retrofit_share_shell.md

  • Network accessline 20
    # 1) 只生成本地迁移版,不覆盖线上 python scripts/retrofit_share_shell.py '{"url":"https://pages.quantbuddy.cn/pages/.../page_xxx.html","out_file":"output/pages/page_xxx-retrofit.html","theme":{"chrome_bg":"#101827","accent":"#d8a54b"}}'
  • Network accessline 21
    python scripts/retrofit_share_shell.py '{"url":"https://pages.quantbuddy.cn/pages/.../page_xxx.html","out_file":"output/pages/page_xxx-retrofit.html","theme":{"chrome_bg":"#101827","accent":"#d8a54b"}}'
  • Access to secretsline 30
    [Credential-related source omitted]

skills/quant-buddy-view/tools/static_page.md

  • Network accessline 31
    > 把一份自包含 HTML 看板上传到对象存储,返回 `https://pages.quantbuddy.cn/...` 公开链接,任何人凭链接即可在浏览器打开。之后凭 `page_id` 管理(替换内容 / 列表 / 撤销)。
  • Access to secretsline 34
    [Credential-related source omitted]
  • Network accessline 105
    # 解读既有 QuantBuddy 活页:只传公开 URL,不下载/解析 HTML,不持有公式包或 Data Grant 凭证 python scripts/static_page.py interpret '{"url":"https://pages.quantbuddy.cn/pages/<owner>/<page_id>.html"}'
  • Network accessline 106
    python scripts/static_page.py interpret '{"url":"https://pages.quantbuddy.cn/pages/<owner>/<page_id>.html"}'
  • Network accessline 372
    - `list` / 默认 `download`:只返回 `agent_reply_hint`,`resource_role=existing_page`。 - `new_page` / `update_progress`:始终非终态;即使继承了回复 metadata,也会抑制 `agent_reply_contract`。普通渠道的 `waiting_input` 会额外返回 `interaction_required=true`、`required_input`、原 `t
  • Network accessline 373
    - `new_page` / `update_progress`:始终非终态;即使继承了回复 metadata,也会抑制 `agent_reply_contract`。普通渠道的 `waiting_input` 会额外返回 `interaction_required=true`、`required_input`、原 `task_id/page_id/public_url` 和 `resume_step`;`feishu-group` 不返回 hint `public_url`
  • Network accessline 374
    - 成功的 `upload` / `update` / `publish_final` / `publish_verified` / `direct_deliver` / `direct_finalize`:返回 `agent_reply_contract`,包含 `terminal:true`、`operation`、`page_id`、`public_url` 和 registry 中的 `reply_render_policy`。`feishu-group` 还包含 `
  • Access to secretsline 380
    [Credential-related source omitted]
  • Access to secretsline 394
    [Credential-related source omitted]
  • Network accessline 442
    "title": "...", "category": "个股画像",       "description": "...(超过 80 字截断,完整文本见 full_result_file)",       "download_url": "https://...",
  • Network accessline 443
    "description": "...(超过 80 字截断,完整文本见 full_result_file)",       "download_url": "https://...",       "is_template": true, "template_status": "published",
  • Network accessline 444
    "download_url": "https://...",
  • Network accessline 627
    { "code": 0, "page_id": "page_...", "url": "https://pages.quantbuddy.cn/pages/<user>/page_....html",
  • Network accessline 660
    "template_file": "<skill_root>/reply-templates/single_stock_valuation_quality_v1.md",     "template_exists": true,     "public_url": "https://pages.quantbuddy.cn/pages/<user>/page_....html",
  • Network accessline 661
    "template_exists": true,     "public_url": "https://pages.quantbuddy.cn/pages/<user>/page_....html",     "final_response_required": "read_template_file_and_reply_in_template_format_plus_links"
  • Network accessline 662
    "public_url": "https://pages.quantbuddy.cn/pages/<user>/page_....html",

skills/quant-buddy-view/tools/stock_comparison.md

  • Network accessline 59
    node scripts/verify_page.mjs C:/path/source.stock-comparison.html --profile fork-local --require-browser node scripts/verify_page.mjs https://pages.quantbuddy.cn/pages/.../page_xxx.html --profile public-smoke --require-browser
  • Network accessline 60
    node scripts/verify_page.mjs https://pages.quantbuddy.cn/pages/.../page_xxx.html --profile public-smoke --require-browser

skills/quant-buddy-view/tools/stock_window.md

  • Network accessline 26
    node scripts/verify_page.mjs output/pages/page_xxx.stock-window.html --require-browser python scripts/static_page.py update @output/update-page.json node scripts/verify_page.mjs https://pages.quantbuddy.cn/pages/.../page_xxx.html --require-
  • Network accessline 28
    node scripts/verify_page.mjs https://pages.quantbuddy.cn/pages/.../page_xxx.html --require-browser --card-runtime

skills/quant-buddy-view/workflows/dashboard-end-to-end.md

  • Network accessline 105
    > 实时页可使用两条通道:Formula Package 内嵌 `package_id + signature` 并调用 `queryFormulaPackage`,Data Grant 内嵌 `grant_id + signature` 并调用 `queryDataGrant`。两类凭证可同页混用、彼此独立取数;任一通道都能让页面保持实时。前置:端点对页面域名放开 CORS、协议与页面一致、且接受 signature 公开在 HTML 里——当前 `https://www.

skills/quant-buddy-view/workflows/interpret-existing-page.md

  • Network accessline 6
    python scripts/static_page.py interpret '{"url":"https://pages.quantbuddy.cn/pages/<owner>/<page_id>.html"}'

skills/quant-buddy-view/workflows/new-session-paradigm-routing.md

  • Access to secretsline 19
    [Credential-related source omitted]

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 3 facts
Signal confidence: 497 facts

and 447 more

Only the first 500 facts are listed.

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md skills/quant-buddy-skill/SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md skills/quant-buddy-skill/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md skills/quant-buddy-skill/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md skills/quant-buddy-skill/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md skills/quant-buddy-skill/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md skills/quant-buddy-skill/SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.