{"id":"0681d15b-e1b7-4be4-8120-233484ad31d2","entityType":"agent","slug":"clawhub-asfamilybank-stock-query","name":"Stock Query","canonicalUrl":"https://www.xpersona.co/agent/clawhub-asfamilybank-stock-query","canonicalPath":"/agent/clawhub-asfamilybank-stock-query","generatedAt":"2026-10-10T02:54:20.165Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T23:22:02.476Z","emptyReason":null},"description":"查询全球股票实时行情（A 股、港股、美股）、ETF、场外基金、指数，支持批量查询、历史K线（含均线）与自选股管理。 TRIGGER when: 用户查询股价/行情/净值/历史K线/自选盈亏/大盘指数时。NOT for: 加密货币、期货、期权、外汇。 Skill: Stock Query Owner: asfamilybank Summary: 查询全球股票实时行情（A 股、港股、美股）、ETF、场外基金、指数，支持批量查询、历史K线（含均线）与自选股管理。 TRIGGER when: 用户查询股价/行情/净值/历史K线/自选盈亏/大盘指数时。NOT for: 加密货币、期货、期权、外汇。 Tags: china:1.0.3, etf:1.0.3, finance:1.0.3, fund:1.0.3, latest:2.6.0, stock:1.0.3 Version history: v2.6.0 | 2026-04-09T01:55:57.805Z | auto v2.6.0 brings major improvements and market data source enhancements: - 增加对 Yahoo Finance 实时数据接口支持（美股行情更加完","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.9K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17d7bw87ak4a3hadkqj6xhted83h9qr:stock-query","sourceUrl":"https://clawhub.ai/asfamilybank/stock-query","homepage":"https://clawhub.ai/asfamilybank/skills/stock-query","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/asfamilybank/stock-query","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/asfamilybank/skills/stock-query","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":56,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"查询全球股票实时行情（A 股、港股、美股）、ETF、场外基金、指数，支持批量查询、历史K线（含均线）与自选股管理。 TRIGGER when: 用户查询股价/行情/净值/历史K线/自选盈亏/大盘指数时。NOT for: 加密货币、期货、期权、外汇。 Skill: Stock Query Owner: asfamilyb"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T23:22:02.476Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T23:22:02.476Z","emptyReason":null},"stars":null,"forks":null,"downloads":1896,"packageName":null,"latestVersion":"2.6.0","tractionLabel":"1.9K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T23:22:02.476Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T23:22:02.476Z","lastCrawledAt":"2026-10-09T23:22:02.476Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T23:22:02.476Z","lastVerifiedAt":null,"highlights":[{"version":"2.6.0","createdAt":"2026-04-09T01:55:57.805Z","changelog":"v2.6.0 brings major improvements and market data source enhancements: - 增加对 Yahoo Finance 实时数据接口支持（美股行情更加完善）。 - 权限声明中新增 Yahoo 数据源，并在所有相关表述中体现。 - help/version 输出更新为 v2.6.0 并精简 skill 元信息组织。 - 修复 detail_mode 下表格输出指令，需加 --detail 参数。 - 技术文档规范性与兼容性说明优化。","fileCount":7,"zipByteSize":28128},{"version":"2.5.1","createdAt":"2026-04-08T01:12:26.624Z","changelog":"stock-query v2.5.1 is a documentation refinement release. - 更新 SKILL.md，优化描述与指引，精简了前言说明，更突出自动触发范围与核心能力。 - version/help 输出的版本号由 v2.5.0 升级为 v2.5.1。 - 未变更底层功能及流程，主要聚焦于文档及元数据更正。","fileCount":6,"zipByteSize":23215},{"version":"2.5.0","createdAt":"2026-04-07T08:56:46.986Z","changelog":"- 重要更新：自选股 portfolio.csv 文件查找逻辑调整为优先支持 ~/.config/stock-query/portfolio.csv，兼容多个旧路径。 - 删除对 scripts/portfolio.sh 的依赖，精简和统一 portfolio 文件相关操作。 - 更新所有相关文档，用法指引与引导说明覆盖新配置目录和模板复制方式。 - 保持所有行情源和行情查询、表格输出流程不变，兼容所有已有功能和调用语义。","fileCount":6,"zipByteSize":23466},{"version":"2.4.1","createdAt":"2026-04-03T08:55:14.638Z","changelog":"stock-query v2.4.1 - Portfolio（自选股文件）相关字段统一调整为“数量/自选价格”，规范字段命名，文档/帮助/模板均已更新 - 优化描述和文档，展示中“持仓”统一表述为“数量”，“成本价”改为“自选价格” - 帮助信息、示例表格等同步更新字段表述 - 版本号升级，相关内容同步显示为 v2.4.1","fileCount":7,"zipByteSize":24926},{"version":"2.4.0","createdAt":"2026-04-03T08:28:32.869Z","changelog":"**新增重大功能：支持个股历史K线/历史行情查询，并新增格式化脚本提供更美观的人类可读表格输出。** - 新增“Command 3”命令体系，可直接查询A股、港股、美股等各类标的的日K、周K等历史行情/走势/K线数据。 - 行情查询(`Command 2`)全面支持`--format`参数，调用新引入的`scripts/fmt.sh`脚本输出Markdown表格，显示效果更佳，CJK对齐、均线展示，emoji区分涨跌色系无误。 - 增加历史行情/走势相关触发词识别（历史/K线/日K/周K等），快捷查询近30日等区间的价格明细。 - 行情与历史数据网络权限扩展，涵盖`web.ifzq.gtimg.cn`、`push2his.eastmoney.com`等历史数据源。 - 只允许通过Bash脚本和","fileCount":7,"zipByteSize":24937},{"version":"2.3.8","createdAt":"2026-04-02T05:22:56.195Z","changelog":"stock-query v2.3.8 is a minor update. - 更新版本号至 2.3.8，版本/帮助命令将同步返回新版本号。 - 移除未使用的 scripts/query_price.sh 文件，统一脚本调用入口。 - 文档（SKILL.md）中相关版本号和命令帮助展示同步调整为 2.3.8。 - 其他功能、调用和接口未变。","fileCount":6,"zipByteSize":18334},{"version":"2.3.7","createdAt":"2026-04-02T03:53:47.801Z","changelog":"- Version updated to 2.3.7 - 文档调整：version 和 help 输出中的版本号修订为 2.3.7 - SKILL.md 文件访问声明补充：明确 portfolio.csv 默认路径细节 - 技术说明补充：pfile 命令输出说明更新，去除 PATH_REJECTED 分支描述 - 无业务逻辑变更，无新增功能或接口调整","fileCount":7,"zipByteSize":21340},{"version":"2.3.6","createdAt":"2026-04-02T03:40:59.497Z","changelog":"**stock-query v2.3.6 — Changelog** - New: Added support for a new configuration file (`skill.yaml`). - File access now strictly fixed to the default installation directory (no environment variable for path). - Security: Commands are rejected if file paths contain token/secret/.ssh and similar keywords. - Shell command requirements clarified: only minimal tools (`curl`, `iconv`, `grep`, `awk`, `mktemp`) are used and only on `portfolio.csv`. - Expanded SKILL.md with clearer permission, file access, and network source documentation. - Description improved for clarity; no functional change to market or data source support.","fileCount":7,"zipByteSize":21589}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17d7bw87ak4a3hadkqj6xhted83h9qr:stock-query","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-asfamilybank-stock-query/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-asfamilybank-stock-query/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-asfamilybank-stock-query/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-asfamilybank-stock-query/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-asfamilybank-stock-query/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-asfamilybank-stock-query/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T02:54:20.162Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-asfamilybank-stock-query/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-asfamilybank-stock-query/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-asfamilybank-stock-query/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-asfamilybank-stock-query/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T23:22:02.476Z","emptyReason":null},"readme":"Skill: Stock Query\n\nOwner: asfamilybank\n\nSummary: 查询全球股票实时行情（A 股、港股、美股）、ETF、场外基金、指数，支持批量查询、历史K线（含均线）与自选股管理。 TRIGGER when: 用户查询股价/行情/净值/历史K线/自选盈亏/大盘指数时。NOT for: 加密货币、期货、期权、外汇。\n\nTags: china:1.0.3, etf:1.0.3, finance:1.0.3, fund:1.0.3, latest:2.6.0, stock:1.0.3\n\nVersion history:\n\nv2.6.0 | 2026-04-09T01:55:57.805Z | auto\n\nv2.6.0 brings major improvements and market data source enhancements:\n\n- 增加对 Yahoo Finance 实时数据接口支持（美股行情更加完善）。\n- 权限声明中新增 Yahoo 数据源，并在所有相关表述中体现。\n- help/version 输出更新为 v2.6.0 并精简 skill 元信息组织。\n- 修复 detail_mode 下表格输出指令，需加 --detail 参数。\n- 技术文档规范性与兼容性说明优化。\n\nv2.5.1 | 2026-04-08T01:12:26.624Z | auto\n\nstock-query v2.5.1 is a documentation refinement release.\n\n- 更新 SKILL.md，优化描述与指引，精简了前言说明，更突出自动触发范围与核心能力。\n- version/help 输出的版本号由 v2.5.0 升级为 v2.5.1。\n- 未变更底层功能及流程，主要聚焦于文档及元数据更正。\n\nv2.5.0 | 2026-04-07T08:56:46.986Z | auto\n\n- 重要更新：自选股 portfolio.csv 文件查找逻辑调整为优先支持 ~/.config/stock-query/portfolio.csv，兼容多个旧路径。\n- 删除对 scripts/portfolio.sh 的依赖，精简和统一 portfolio 文件相关操作。\n- 更新所有相关文档，用法指引与引导说明覆盖新配置目录和模板复制方式。\n- 保持所有行情源和行情查询、表格输出流程不变，兼容所有已有功能和调用语义。\n\nv2.4.1 | 2026-04-03T08:55:14.638Z | auto\n\nstock-query v2.4.1\n\n- Portfolio（自选股文件）相关字段统一调整为“数量/自选价格”，规范字段命名，文档/帮助/模板均已更新\n- 优化描述和文档，展示中“持仓”统一表述为“数量”，“成本价”改为“自选价格”\n- 帮助信息、示例表格等同步更新字段表述\n- 版本号升级，相关内容同步显示为 v2.4.1\n\nv2.4.0 | 2026-04-03T08:28:32.869Z | auto\n\n**新增重大功能：支持个股历史K线/历史行情查询，并新增格式化脚本提供更美观的人类可读表格输出。**\n\n- 新增“Command 3”命令体系，可直接查询A股、港股、美股等各类标的的日K、周K等历史行情/走势/K线数据。\n- 行情查询(`Command 2`)全面支持`--format`参数，调用新引入的`scripts/fmt.sh`脚本输出Markdown表格，显示效果更佳，CJK对齐、均线展示，emoji区分涨跌色系无误。\n- 增加历史行情/走势相关触发词识别（历史/K线/日K/周K等），快捷查询近30日等区间的价格明细。\n- 行情与历史数据网络权限扩展，涵盖`web.ifzq.gtimg.cn`、`push2his.eastmoney.com`等历史数据源。\n- 只允许通过Bash脚本和\n\nv2.3.8 | 2026-04-02T05:22:56.195Z | auto\n\nstock-query v2.3.8 is a minor update.\n\n- 更新版本号至 2.3.8，版本/帮助命令将同步返回新版本号。\n- 移除未使用的 scripts/query_price.sh 文件，统一脚本调用入口。\n- 文档（SKILL.md）中相关版本号和命令帮助展示同步调整为 2.3.8。\n- 其他功能、调用和接口未变。\n\nv2.3.7 | 2026-04-02T03:53:47.801Z | auto\n\n- Version updated to 2.3.7\n- 文档调整：version 和 help 输出中的版本号修订为 2.3.7\n- SKILL.md 文件访问声明补充：明确 portfolio.csv 默认路径细节\n- 技术说明补充：pfile 命令输出说明更新，去除 PATH_REJECTED 分支描述\n- 无业务逻辑变更，无新增功能或接口调整\n\nv2.3.6 | 2026-04-02T03:40:59.497Z | auto\n\n**stock-query v2.3.6 — Changelog**\n\n- New: Added support for a new configuration file (`skill.yaml`).\n- File access now strictly fixed to the default installation directory (no environment variable for path).\n- Security: Commands are rejected if file paths contain token/secret/.ssh and similar keywords.\n- Shell command requirements clarified: only minimal tools (`curl`, `iconv`, `grep`, `awk`, `mktemp`) are used and only on `portfolio.csv`.\n- Expanded SKILL.md with clearer permission, file access, and network source documentation.\n- Description improved for clarity; no functional change to market or data source support.\n\nv2.3.5 | 2026-04-02T03:14:24.558Z | auto\n\nstock-query v2.3.5\n\n- Help/version信息中的版本号更新为 2.3.5。\n- 资源文件 portfolio.csv 移至 assets 目录（assets/portfolio.csv），原 examples/portfolio.csv 删除。\n\nv2.3.4 | 2026-04-02T03:02:36.806Z | auto\n\nstock-query v2.3.4 introduces strict separation between skill output and internal process info.\n\n- Enforces that process/logging output is never shown to users, only final tables or errors (Claude output constraint clarified).\n- `scripts/sq.sh` now outputs only structured JSON to stdout, and logs/errors to stderr.\n- Portfolio path errors now include explicit \"PATH_REJECTED\" code for credential keyword detection.\n- Updated version references and help output to v2.3.4.\n- Removed obsolete manifest files (`clawhub.json`, `skill.yaml`).\n\nv2.3.3 | 2026-04-01T10:04:32.564Z | auto\n\n**Summary: Switched query CLI from scripts/sq to scripts/sq.sh and added project metadata.**\n\n- Replaced main query CLI from `scripts/sq` to `scripts/sq.sh` for all command invocations and documentation.\n- Added three new files: `clawhub.json` (metadata), `scripts/query_price.sh`, and `scripts/sq.sh`.\n- Updated examples, permissions, and workflow details to use the new script path (`sq.sh`).\n- Bumped version to 2.3.3 in documentation and help outputs.\n\nv2.3.2 | 2026-04-01T09:43:55.240Z | auto\n\n- 更新版本号至 2.3.2。  \n- 所有用户帮助、版本输出中的版本号均同步为 2.3.2，无其他功能或行为变更。\n\nv2.3.1 | 2026-04-01T09:37:26.678Z | auto\n\n**stock-query v2.3.1 — Changelog**\n\n- 新增 `scripts/portfolio.sh`，优化自选股/持仓文件管理逻辑。\n- 行情核心脚本更名为 `scripts/sq`，所有行情相关 shell 操作统一通过该入口调用。\n- 精简和调整权限、文件访问及依赖声明，现明确仅允许通过 Bash 工具和官方行情脚本操作。\n- 技能文档全面精简，指令路由和查询模块分工更明确，增加“详细模式”输出宽表说明。\n- 移除旧版顶层 `portfolio.sh`，升级 portfolio 相关操作实现。\n\nv2.2.1 | 2026-03-31T03:51:33.368Z | auto\n\nstock-query v2.2.1 — 强化隐私体验，隐藏所有中间推理\n\n- 严格禁止在用户回复中出现任何市场判断、数据流转、接口切换等过程信息，仅输出最终行情。\n- 全文规范描述“静默执行原则”：对执行流程、推理、不透明数据切换等完全不对用户暴露。\n- Meta命令（version/help）示例输出版本号同步至 2.2.1。\n- 帮助文档与行为细节保持与上一版一致。\n\nv2.2.0 | 2026-03-25T08:21:07.629Z | auto\n\n**港股代码兼容大幅升级，支持输入“700”“9988”等自动补全为“00700”“09988”。A股000xxx指数判定修正，同时增加新依赖源并细化权限。**\n\n- 港股代码输入支持少于5位自动补零，无需手输前置零（如“700”自动转“00700”）\n- 沪市000xxx指数区分优化：根据白名单快速判定，避免歧义（如000001自动识别上证指数/平安银行）\n- 新增数据接口 `push2.eastmoney.com`，扩展后备查询能力\n- 权限表明确加入 `grep`、`awk` 命令及新 API 域名，细化网络和 Shell 权限声明\n- 帮助文档及版本号同步至 2.2.0\n\nv2.1.2 | 2026-03-25T05:56:55.609Z | auto\n\nstock-query v2.1.2 introduces enhanced permission and file safety notes.\n\n- 新增权限声明和操作范围说明，提高对 network、shell 等敏感操作的规范描述。\n- 明确 portfolio.csv 仅限持仓基础数据，禁止存储账号/Token 等敏感信息。\n- 列出技能将自动触发与不会自动触发（如 portfolio 文件操作）的场景。\n- version/help 输出版本同步更新至 2.1.2。\n- 其他功能及核心逻辑保持不变。\n\nv2.1.1 | 2026-03-25T05:48:37.621Z | auto\n\n- 新增支持自动触发（不再仅限斜杠命令），可根据用户上下文需求直接调用股价/净值查询。\n- help/version 输出内容已更新为 2.1.1，描述略有调整。\n- description 增加 “TRIGGER when” 行，明确触发场景，便于集成。\n- 其余功能和接口未作更改。\n\nv2.1.0 | 2026-03-25T05:30:23.111Z | auto\n\n**新增组合（持仓）文件操作，丰富自选股/持仓管理：**\n\n- 新增 examples/portfolio.csv 示例文件及 portfolio.sh 脚本，支持批量自选股或持仓导入、增删、查阅等管理操作。\n- 在交互流程中，新增“Command 3：Portfolio 文件管理”，可通过自然语言或命令操作自选股/持仓（如添加、删除、查看等），并与行情查询流程解耦。\n- 优化 meta 指令（version/help）识别逻辑，实现更准确更优先的命令路由。\n- 基金净值查询补充新鲜度检测，防止引用滞后估值。\n- 部分查询表格字段扩展（如 52周高/低、成交额、换手率等），详细模式可输出更多行情数据。\n\nv2.0.5 | 2026-03-24T09:40:57.927Z | auto\n\nstock-query v2.0.5 changelog:\n\n- 文档简介部分增加 curl、iconv 依赖说明，更突出前置依赖要求\n- 移除无实际变化的内容，使文档更加简洁清晰\n- 其余功能及用法保持不变\n\nv2.0.4 | 2026-03-24T09:28:15.752Z | auto\n\n- 新增“前置依赖”说明，明确需安装 curl 与 iconv 两个命令行工具。\n- help/version 输出中的版本号已更新为 v2.0.4。\n- 其余内容与前一版本一致，无接口与功能调整。\n\nv2.0.3 | 2026-03-24T09:20:31.970Z | auto\n\nstock-query v2.0.3\n\n- 新增支持「version」和「help」meta 命令，直接显示版本号或帮助，不执行行情查询\n- 帮助信息中明确列出常用查询示例，优化新用户体验\n- 其它功能与上版一致，未作业务逻辑变更\n\nv2.0.2 | 2026-03-24T09:01:53.937Z | auto\n\n**Summary:**  \nExpanded query output, simplified implementation files.\n\n- 增加最高价和最低价显示，表格格式 now includes “最高”和“最低”列\n- 精简了实现结构，移除辅助脚本与配置（clawhub.json, scripts/monitor.sh, scripts/query_price.sh）\n- skill.yaml 及技能描述文档同步更新\n- 文档与接口逻辑保持一致，无功能/接口变更\n- 依然支持 A股、港股、美股、基金、指数的实时行情查询\n\nv2.0.1 | 2026-03-24T08:07:29.633Z | user\n\nfix: 修正发布显示名称\n\nv2.0.0 | 2026-03-24T08:01:39.831Z | auto\n\n## 2.0.0 重大更新：支持全球主要市场股票实时行情和跨市场批量查询\n\n- 原技能升级为“全球股票/ETF/基金/指数实时价格查询”，新增对港股、美股、全球主要指数的支持\n- 主行情数据源切换为腾讯财经，实现 A 股、港股、美股（含指数）统一查询，A 股新浪财经作为备用\n- 代码输入新增识别：港股（5位数字）、美股（英文 ticker）、全球指数（如 .DJI、HSI 等）\n- 场外基金机制不变，补充数据源和异常处理说明\n- 格式化输出统一，自动识别并区分市场（A 股/港股/美股）及币种，按不同市场调整红绿涨跌色\n- 工作流程与错误处理大幅丰富，全面提升用户体验\n\nv1.0.4 | 2026-03-20T03:04:50.176Z | auto\n\n- 清理与简化：移除 CHANGELOG.md、README.md、clawhub.json 和 metadata 字段，增加 _meta.json。\n- SKILL.md 结构优化，去除 Openclaw 相关配置信息，其他实际查询及工作流程未变。\n- 安全与隐私说明内容移除。\n- 持仓市值相关 Markdown 示例调整为更贴近实际结果。\n- 无功能性变更，仅为文档和元数据精简优化。\n\nv1.0.3 | 2026-03-19T02:08:44.344Z | user\n\n文档与配置更新，回应 ClawHub Instruction Scope 检测：在 SKILL.md 中增加安全与隐私说明（基金估值接口 HTTP 说明、portfolio_file 使用与风险提示），并在 skill.yaml 的 portfolio_file 描述中增加勿指向敏感文件的提示。\n\nv1.0.2 | 2026-03-18T10:00:28.048Z | user\n\nfix: declare runtime binaries (curl/iconv/bc), tools, and repository URL to resolve ClawHub security scan flags\n\nv1.0.1 | 2026-03-18T09:49:38.467Z | user\n\nfix: replace personal portfolio data in examples with generic ones\n\nv1.0.0 | 2026-03-18T09:24:19.413Z | user\n\nInitial release\n\nArchive index:\n\nArchive v2.6.0: 7 files, 28128 bytes\n\nFiles: assets/portfolio.csv (2026b), scripts/fmt.sh (14397b), scripts/sq.sh (45597b), skill-card.md (2375b), SKILL.md (14450b), skill.yaml (2328b), _meta.json (130b)\n\nFile v2.6.0:SKILL.md\n\n---\nname: stock-query\ndescription: >\n  查询全球股票实时行情（A 股、港股、美股）、ETF、场外基金、指数，支持批量查询、历史K线（含均线）与自选股管理。\n  TRIGGER when: 用户查询股价/行情/净值/历史K线/自选盈亏/大盘指数时。NOT for: 加密货币、期货、期权、外汇。\nlicense: MIT\ncompatibility: Requires curl, iconv, python3. macOS/Linux only.\nmetadata:\n  version: \"2.6.0\"\n  author: asfamilybank\n  repo: https://github.com/asfamilybank/stock-query\nuser-invocable: true\nallowed-tools:\n  - Bash\n---\n\n# 全球股票/ETF/基金/指数 实时价格查询\n\n## 权限与操作范围\n\n| 权限 | 声明用途 | 限制 |\n|------|---------|------|\n| `network` | `scripts/sq.sh` 内部调用行情 API | 仅限 `qt.gtimg.cn`、`hq.sinajs.cn`、`push2.eastmoney.com`、`web.ifzq.gtimg.cn`、`query1.finance.yahoo.com`、`fundgz.1234567.com.cn`、`api.fund.eastmoney.com` 七个数据源，不发送用户个人数据 |\n| `shell` | 执行 `curl`、`iconv`、`grep`、`awk`、`mktemp` | 仅操作 `portfolio.csv`；不执行任意命令 |\n\n**文件访问：** 本 skill 仅在用户**显式指令**下读写 `portfolio.csv` 一个文件，优先查找 `~/.config/stock-query/portfolio.csv`，其次兼容旧版安装目录（`~/.openclaw/workspace/skills/stock-query/`、`~/.claude/skills/stock-query/`、`~/.agents/skills/stock-query/`），无需配置任何环境变量。历史数据通过网络实时获取，不写本地文件。\n\n**自动触发范围：** **文件操作（Command 1）不会自动触发**，仅在用户明确发出增/删/改/查 portfolio 指令时执行。\n\n⚠️ **凭证安全：** `portfolio.csv` 仅应包含股票代码、名称、数量、自选价格。**禁止存放账户密码、API 密钥、Token 或任何认证凭证。**\n\n## 前置依赖\n\n| 工具 | 说明 |\n|------|------|\n| `scripts/sq.sh` | 行情查询 CLI，内部使用 `curl` + `iconv` |\n| `scripts/fmt.sh` | 格式化输出工具，由 `sq.sh --format` 调用，依赖 `python3`，输出人类可读的 Markdown 表格 |\n\n## 支持的市场与标的\n\n| 市场 | 代码格式 | 示例 |\n|------|---------|------|\n| 沪/深市股票、ETF、指数 | 6 位数字 | `601991`、`510300`、`000001` |\n| 港股 | ≤5 位数字（自动补零） | `700`、`00700`、`09988` |\n| 美股 | 英文 ticker | `AAPL`、`TSLA`、`BIDU` |\n| 美股指数 | `.DJI` / `.IXIC` / `.SPX` | `.DJI` |\n| 场外基金 | 6 位数字 | `014978`、`110011` |\n\n---\n\n## 工作流程\n\n### Step 0: 意图识别与 Command 路由\n\n**Meta 命令**（最高优先级）：输入为 `version`、`-v`、`--version`、`help`、`-h`、`--help`（大小写不敏感）\n→ 直接输出版本/帮助信息，**不执行后续步骤**\n\nversion 输出：\n```\nstock-query v2.6.0\n```\n\nhelp 输出：\n```\nstock-query v2.6.0 — 全球股票/ETF/基金/指数实时行情查询\n\n用法：\n  /stock-query <代码> [代码2 ...]   查询一个或多个标的实时行情\n  /stock-query <代码> 历史          查询个股历史K线（默认近30个交易日）\n  /stock-query version              显示版本号\n  /stock-query help                 显示本帮助\n\n支持的市场：\n  A股（沪/深）  6位数字，如 601991 000001\n  港股          5位数字，如 00700 09988\n  美股          英文ticker，如 AAPL TSLA NVDA\n  美股指数      .DJI  .IXIC  .SPX\n  ETF           6位数字，如 510300 159915\n  场外基金      6位数字，如 014978\n\n常用示例：\n  /stock-query AAPL\n  /stock-query 00700 09988\n  /stock-query AAPL 00700 601991 510300\n  /stock-query 600519 近60天日K\n  /stock-query TSLA 周K 最近20周\n\n作者：asfamilybank · https://github.com/asfamilybank/stock-query\n```\n\n**Command 1：Portfolio 文件管理**：含操作词（添加/新增/删除/移除/修改/查看/列出）＋ 对象词（自选股/持仓/portfolio/watchlist），或明确指令如\"把 AAPL 加到自选股\"\n→ 直接执行 Command 1，**不进入 Command 2/3 流程**\n\n**Command 3：历史行情查询**：含关键词（历史/历史数据/历史行情/历史价格/历史走势/K线/日K/周K/月K）\n→ 直接执行 Command 3，**不进入 Command 2 流程**\n\n**Command 2：行情查询**（默认）：其余所有输入 → 进入 Command 2 流程（执行 Step 1–6）\n\n---\n\n## 静默执行原则（Claude 对话输出约束）\n\n**⛔ 严禁向用户输出任何中间推理或过程信息。** 这是最高优先级约束，覆盖所有步骤。\n\n> 本约束仅适用于 Claude 的对话文本输出。`scripts/sq.sh` stdout 仅输出结构化数据供 Claude 内部消费：行情/基金命令输出 JSON 数组，`pfile` 命令输出文件绝对路径或控制令牌 `NOT_FOUND`；stderr 输出错误/用法提示。`scripts/fmt.sh` 是格式化渲染层，接收 `sq.sh` 的 JSON 输出，输出供用户直接查看的 Markdown 表格（含涨跌 emoji、CJK 对齐、均线列）；其 stdout 为最终展示内容，非过程日志。两个脚本均不向用户界面打印任何过程信息。\n\n以下内容**绝对禁止出现**在回复中：\n- 市场/类型判断（如\"014978 是场外基金\"）\n- 数据源切换说明（如\"腾讯接口返回空，切换至东方财富：\"）\n- 文件路径查找过程\n- 任何形式的\"正在...\"、\"切换...\"、\"尝试...\"等过程性文字\n\n**唯一允许的输出：** 最终结果表格，或无法查询时的错误提示。\n\n---\n\n## Command 1: Portfolio 文件管理\n\n**所有增删改查操作必须通过 Bash 工具执行实际命令，禁止依赖会话记忆。未执行命令不得声称操作已完成。**\n\n### 文件定位（每次进入 Command 1 必须首先执行）\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\necho \"$PFILE\"\n```\n\n- 输出 `NOT_FOUND` → 立即向用户输出下方创建引导，停止执行，**不得创建任何替代文件**\n- 否则将 `$PFILE` 用于所有后续操作\n\n**portfolio.csv 不存在时**，引导用户创建：\n```\n未找到自选股文件。请执行以下步骤创建：\n\n1. 创建配置目录并复制模板：\n   mkdir -p ~/.config/stock-query\n   cp <skill安装目录>/assets/portfolio.csv ~/.config/stock-query/portfolio.csv\n\n2. 编辑文件，填入你的自选股信息。\n```\n\n**CSV 文件格式**（参考 `assets/portfolio.csv`）：\n\n```\n代码,名称,数量,自选价格\n601991,大唐发电,1000,4.00   # 含数量与参考价，输出浮盈亏\n014978,华安纳指100C,10000,  # 自选价格留空：只查行情\nAAPL,,50,220.00             # 名称留空：自动从接口获取\n000300,,0,                  # 数量为 0：纯自选\n```\n\n### 查\n\n```bash\ngrep -v '^#' \"$PFILE\" | tail -n +2\n```\n\n格式化为表格展示，不查询实时行情。如需实时价格，使用 Command 2。\n\n### 增\n\n1. 用 `bash scripts/sq.sh get <code>` 获取标的名称\n2. 执行：\n```bash\nif grep -q \"^{code},\" \"$PFILE\" 2>/dev/null; then\n  echo \"DUPLICATE:{code}\"\nelse\n  echo \"{code},{name},{shares},{cost}\" >> \"$PFILE\" && echo \"ADDED:{code},{name},{shares},{cost}\"\nfi\n```\n3. `ADDED:...` → 展示添加结果；`DUPLICATE:{code}` → 询问是否改为修改操作\n\n### 改\n\n1. 用 `bash scripts/sq.sh get <code>` 获取最新名称\n2. 执行：\n```bash\nOLD=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$OLD\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  NEW=\"{code},{name},{shares},{cost}\"\n  tmp=$(mktemp)\n  awk -F',' -v c=\"{code}\" -v n=\"$NEW\" \\\n    'BEGIN{OFS=\",\"} $1==c{print n;next}{print}' \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"BEFORE:$OLD\"\n  echo \"AFTER:$NEW\"\nfi\n```\n3. 展示修改前后 diff；`NOT_FOUND:{code}` → 提示未找到\n\n### 删\n\n```bash\nDEL=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$DEL\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  tmp=$(mktemp)\n  grep -v \"^{code},\" \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"DELETED:$DEL\"\nfi\n```\n\n`DELETED:...` → 展示删除结果；`NOT_FOUND:{code}` → 提示未找到\n\n---\n\n## Command 2: 行情查询\n\n### Step 1: 解析用户输入\n\n**detail_mode 检测：** 若用户消息含以下关键词，设 `detail_mode = true`，在 Step 3 输出详细表格：\n- 中文：详细、详情、详细信息、更多信息、全部信息、完整信息\n- 英文：detail、details、verbose、full\n\n从用户消息中提取标的代码，支持以下形式：\n- **6 位纯数字** → A 股（股票/ETF/指数/基金）\n- **≤5 位纯数字** → 港股，自动补零（700 → 00700）\n- **英文字母或英文+数字** → 美股 ticker\n- **中文/英文名称** → 匹配下表常见标的；无法确定时向用户确认\n\n常见标的速查：\n\n**A 股：**\n- 黄金ETF → 518880 / 红利低波ETF → 512890 / 沪深300ETF → 510300\n- 卫星ETF → 563230 / 创业板ETF → 159915 / 中证500ETF → 510500\n- 上证指数 → 000001 / 深证成指 → 399001 / 创业板指 → 399006\n- 沪深300 → 000300 / 上证50 → 000016 / 中证500 → 000905 / 中证1000 → 000852\n\n**港股：**\n- 腾讯 → 00700 / 阿里巴巴 → 09988 / 美团 → 03690 / 小米 → 01810\n- 比亚迪 → 01211 / 恒生指数 → HSI\n\n**美股：**\n- 苹果 → AAPL / 谷歌 → GOOG / 特斯拉 → TSLA / 英伟达 → NVDA\n- 微软 → MSFT / 亚马逊 → AMZN / 百度 → BIDU / 阿里巴巴 → BABA\n- 哔哩哔哩 → BILI / 拼多多 → PDD\n- 道琼斯 → .DJI / 纳斯达克 → .IXIC / 标普500 → .SPX\n\n### Step 2: 查询并格式化输出\n\n```\nStep 2A: 执行命令（不得省略 --format 参数，单支/批量/任意市场均适用）\n  detail_mode = false → bash scripts/sq.sh get <code1> [code2 ...] --format table\n  detail_mode = true  → bash scripts/sq.sh get <code1> [code2 ...] --format table --detail\n\nStep 2B: 将命令的 stdout 原样作为回复返回\n  ⛔ 不得解析 JSON 自行构建表格\n  ⛔ 不得修改 emoji 字符（A股/港股：涨🔴跌🟢；美股：涨🟩跌🟥）\n  ⛔ 不得添加、删除或重排列\n```\n\n**⛔ 特别注意：港股跌幅用 🟢（非 🔴）。** A股、港股均遵循中国市场惯例：上涨 🔴，下跌 🟢，平盘 ⚪。命令输出已正确处理，勿覆盖。\n\n### Step 4: 自选市值计算（可选）\n\n#### 4a. 从 portfolio 文件加载\n\n当用户指令涉及自选股（如\"查我的自选股\"\"看下自选股\"），先定位文件再批量查询：\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\n```\n\n- 输出 `NOT_FOUND` → 立即输出创建引导（见 Command 1），停止执行\n- 否则读取文件，提取所有代码后用 `sq get` 批量查询\n\n执行步骤（严格按序）：\n\n```\nStep A: 读取全部条目\n  codes_all      = 文件中所有非注释、非表头行\n  codes_position = codes_all 中数量 > 0 的条目\n  codes_watch    = codes_all 中数量 = 0 或空的条目\n\nStep B: 批量查询\n  bash scripts/sq.sh get <codes_all 中所有代码>\n\nStep C: 输出自选市值表（若 codes_position 非空）\n  横向宽表格：代码/名称/数量/自选价格/现价/市值/浮盈亏/盈亏比\n\nStep D: 输出自选行情表（若 codes_watch 非空）← 必须执行，不得省略\n  标题\"自选行情\"，简表：代码/名称/现价/涨跌幅\n```\n\n**⚠️ Step D 不得跳过。** 数量=0 的条目不进市值表，但必须出现在 Step D。\n\n输出示例：\n\n```\n| 代码   | 名称     | 数量    | 自选价格 | 现价    | 市值      | 浮盈/亏      | 盈亏比      |\n|--------|---------|--------|---------|--------|----------|------------|------------|\n| 601991 | 大唐发电 | 1000股 | 4.00    | 4.08   | 4,080    | 🔴 +80     | 🔴 +2.00% |\n| AAPL   | 苹果     | 50股   | 220.00  | 246.63 | 12,332   | 🟩 +1,332  | 🟩 +12.10%|\n\n自选行情\n| 代码   | 名称    | 现价     | 涨跌幅      |\n|--------|--------|---------|------------|\n| 000300 | 沪深300 | 4509.24 | 🔴 +0.38% |\n| .DJI   | 道琼斯  | 45216.14| 🟩 +0.11% |\n```\n\n#### 4b. 用户手动提供自选信息\n\n用 `sq get` 查询后，**必须使用横向宽表格，禁止使用竖向键值对格式**：\n\n```\n| 代码   | 名称      | 数量   | 自选价格 | 最新价  | 市值       | 浮盈/亏        | 盈亏比         |\n|--------|----------|--------|---------|--------|-----------|--------------|--------------|\n| 600519 | 贵州茅台  | 100股  | 1680.0  | 1725.0 | 172,500   | 🔴 +4,500    | 🔴 +2.68%   |\n| AAPL   | 苹果      | 50股   | 220.0   | 251.49 | 12,574.50 | 🟩 +1,574.50 | 🟩 +14.31%  |\n```\n\n汇总行：\n```\n📊 自选合计：市值 185,074.50 | 总参考成本 179,000 | 浮盈 +6,074.50（+3.39%）\n```\n\n浮盈亏 emoji 遵循市场规则（A股/港股：盈利🔴亏损🟢；美股：盈利🟩亏损🟥）。跨市场汇总时提示用户各币种分开统计。\n\nCSV 解析规则：`#` 开头为注释，第一个非注释行为表头，名称列为空时从查询结果自动填充，自选价格为空时浮盈亏显示 `—`。\n\n---\n\n## Command 3: 历史行情查询\n\n### 意图解析\n\n从用户输入中提取以下参数（均可省略，使用默认值）：\n\n**标的代码**：同 Step 1 规则。\n\n**周期**（默认 day）：\n| 用户表述 | 参数 |\n|---------|------|\n| 日/天/日K/daily | `--period day` |\n| 周/周K/weekly | `--period week` |\n| 月/月K/monthly | `--period month` |\n\n**数量/区间**：\n- \"近N天/周/月\"、\"最近N条\"、\"过去N\" → `--count N`\n- \"从 YYYY-MM-DD 到 YYYY-MM-DD\"、\"2024年1月到3月\" → `--start ... --end ...`（转为 YYYY-MM-DD 格式）\n- 未指定 → 默认 30 条\n\n**复权**（默认前复权）：\n| 用户表述 | 参数 |\n|---------|------|\n| 前复权（默认） | `--fq pre` |\n| 后复权 | `--fq post` |\n| 不复权/原始价格 | `--fq none` |\n\n### 数据获取与格式化输出\n\n```bash\nbash scripts/sq.sh hist <code> [--period day|week|month] [--count N] [--start YYYY-MM-DD] [--end YYYY-MM-DD] [--fq pre|post|none] --format table\n```\n\n直接执行上述命令，将输出原样呈现给用户。`--format table` 已内置所有格式化逻辑：倒序 K 线表格、标题行（标的/周期/复权/条数）、区间统计、emoji 涨跌规则、成交量单位换算。\n\n---\n\n## 交易时间参考\n\n| 市场 | 交易时段（当地时间） | 时区 |\n|------|-------------------|------|\n| A 股/ETF | 工作日 09:30-11:30, 13:00-15:00 | UTC+8 |\n| 场外基金估值 | 工作日 09:30-15:00 | UTC+8 |\n| 港股 | 工作日 09:30-12:00, 13:00-16:00 | UTC+8 |\n| 美股 | 工作日 09:30-16:00（北京时间 夏令时 21:30-04:00） | UTC-4/-5 |\n| QDII 基金 | 净值 T+2 至 T+7 公布 | — |\n\nFile v2.6.0:_meta.json\n\n{\n  \"ownerId\": \"kn722wj47zb7qme4e79tqwyg5582tfyp\",\n  \"slug\": \"stock-query\",\n  \"version\": \"2.6.0\",\n  \"publishedAt\": 1775699757805\n}\n\nFile v2.6.0:skill-card.md\n\n## Description:\n\nStock Query helps agents retrieve and format real-time market quotes, historical K-line data, and portfolio watchlist views for stocks, ETFs, mutual funds, and indexes across A-share, Hong Kong, and U.S. markets.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[asfamilybank](https://clawhub.ai/user/asfamilybank)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and agents use this skill to answer stock, fund, index, historical price, and watchlist valuation requests. It is intended for market-data lookup and formatting, not for cryptocurrency, futures, options, or foreign-exchange workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Unsafe input handling in shell-based portfolio and history commands may enable local code execution.\n\nMitigation: Review before installing and use only with trusted prompts until the shell/Python injection paths are fixed.\n\nRisk: Portfolio data is stored in portfolio.csv and may be modified during explicit portfolio-management requests.\n\nMitigation: Keep portfolio.csv limited to stock codes, names, quantities, and reference prices; do not store credentials, API keys, tokens, or account passwords in it.\n\nRisk: Queried symbols are sent to external market-data services.\n\nMitigation: Avoid querying sensitive or confidential watchlists if disclosure of symbols to external providers is unacceptable.\n\n## Reference(s):\n\n- [ClawHub release page](https://clawhub.ai/asfamilybank/skills/stock-query)\n- [Source repository listed in metadata](https://github.com/asfamilybank/stock-query)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, JSON, CSV, Shell commands, Configuration guidance]\n\n**Output Format:** [Markdown tables, JSON arrays or objects, CSV, and concise error text]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires curl, iconv, and python3 on macOS or Linux; queried symbols may be sent to external market-data services.]\n\n## Skill Version(s):\n\n2.6.0 (source: server release metadata, skill.yaml, and SKILL.md frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v2.6.0:skill.yaml\n\nname: stock-query\nversion: 2.6.0\nauthor: asfamilybank\ndescription: >\n  查询全球主要市场股票实时行情：A 股、港股、美股，以及 ETF、场外基金、主要指数，支持批量查询、自选市值计算与个股历史K线（含 MA5/MA10/MA20/MA60 均线）。\n  同时支持在用户显式指令下通过内联 bash 命令管理本地 portfolio.csv 自选股文件（增/删/改/查），文件仅含股票代码、名称、数量、自选价格，禁止存放账户凭证或密钥。\n  需要：curl（行情 API 请求）、iconv（GBK→UTF-8 转码）。\n  文件访问：仅限 portfolio.csv，优先查找 ~/.config/stock-query/portfolio.csv，其次兼容旧版安装目录，不访问其他系统文件。\n  网络访问：仅限 qt.gtimg.cn、hq.sinajs.cn、push2.eastmoney.com、web.ifzq.gtimg.cn、query1.finance.yahoo.com、fundgz.1234567.com.cn、api.fund.eastmoney.com 七个行情数据源。\n  Use when: 用户提到\"查股价\"\"查净值\"\"行情\"\"最新价\"\"自选市值\"\"实时价格\"\"大盘\"\"指数\"\"港股\"\"美股\"等。\n  NOT for: 加密货币、期货、期权、外汇。\nemoji: \"📈\"\nrequires:\n  bins: [curl, iconv, python3]\n  os: [darwin, linux]\nlicense: MIT\nrepository: https://github.com/asfamilybank/stock-query\n\npermissions:\n  - network  # 用途：curl 调用行情 API（仅限 qt.gtimg.cn / hq.sinajs.cn / push2.eastmoney.com / web.ifzq.gtimg.cn / query1.finance.yahoo.com / fundgz.1234567.com.cn / api.fund.eastmoney.com）\n  - shell    # 用途：执行 curl、iconv 转码、grep/awk 文件操作（仅操作 portfolio.csv，不执行任意命令）\n\nentryPoint:\n  type: natural\n  prompt: |\n    你是一个全球股票行情查询助手。根据 SKILL.md 中的工作流程，\n    识别用户提供的标的代码（包括 A 股、港股、美股、ETF、基金及指数），\n    调用腾讯财经接口查询行情，A 股失败时回退新浪接口。\n    所有腾讯和新浪接口的 curl 响应必须通过 iconv -f GBK -t UTF-8 转码。\n\ntriggers:\n  keywords:\n    - \"查股价\"\n    - \"查行情\"\n    - \"查指数\"\n    - \"大盘\"\n    - \"上证指数\"\n    - \"查净值\"\n    - \"最新价\"\n    - \"stock price\"\n    - \"实时价格\"\n    - \"自选市值\"\n    - \"基金估值\"\n    - \"港股\"\n    - \"美股\"\n    - \"纳斯达克\"\n    - \"道琼斯\"\n    - \"恒生指数\"\n\nArchive v2.5.1: 6 files, 23215 bytes\n\nFiles: assets/portfolio.csv (2026b), scripts/fmt.sh (10533b), scripts/sq.sh (38241b), SKILL.md (14274b), skill.yaml (2324b), _meta.json (130b)\n\nFile v2.5.1:SKILL.md\n\n---\nname: stock-query\nversion: 2.5.1\ndescription: >\n  查询全球股票实时行情（A 股、港股、美股）、ETF、场外基金、指数，支持批量查询、历史K线（含均线）与自选股管理。\n  TRIGGER when: 用户查询股价/行情/净值/历史K线/自选盈亏/大盘指数时。NOT for: 加密货币、期货、期权、外汇。\nuser-invocable: true\nallowed-tools:\n  - Bash\n---\n\n# 全球股票/ETF/基金/指数 实时价格查询\n\n## 权限与操作范围\n\n| 权限 | 声明用途 | 限制 |\n|------|---------|------|\n| `network` | `scripts/sq.sh` 内部调用行情 API | 仅限 `qt.gtimg.cn`、`hq.sinajs.cn`、`push2.eastmoney.com`、`web.ifzq.gtimg.cn`、`push2his.eastmoney.com`、`fundgz.1234567.com.cn`、`api.fund.eastmoney.com` 七个数据源，不发送用户个人数据 |\n| `shell` | 执行 `curl`、`iconv`、`grep`、`awk`、`mktemp` | 仅操作 `portfolio.csv`；不执行任意命令 |\n\n**文件访问：** 本 skill 仅在用户**显式指令**下读写 `portfolio.csv` 一个文件，优先查找 `~/.config/stock-query/portfolio.csv`，其次兼容旧版安装目录（`~/.openclaw/workspace/skills/stock-query/`、`~/.claude/skills/stock-query/`、`~/.agents/skills/stock-query/`），无需配置任何环境变量。历史数据通过网络实时获取，不写本地文件。\n\n**自动触发范围：** **文件操作（Command 1）不会自动触发**，仅在用户明确发出增/删/改/查 portfolio 指令时执行。\n\n⚠️ **凭证安全：** `portfolio.csv` 仅应包含股票代码、名称、数量、自选价格。**禁止存放账户密码、API 密钥、Token 或任何认证凭证。**\n\n## 前置依赖\n\n| 工具 | 说明 |\n|------|------|\n| `scripts/sq.sh` | 行情查询 CLI，内部使用 `curl` + `iconv` |\n| `scripts/fmt.sh` | 格式化输出工具，由 `sq.sh --format` 调用，依赖 `python3`，输出人类可读的 Markdown 表格 |\n\n## 支持的市场与标的\n\n| 市场 | 代码格式 | 示例 |\n|------|---------|------|\n| 沪/深市股票、ETF、指数 | 6 位数字 | `601991`、`510300`、`000001` |\n| 港股 | ≤5 位数字（自动补零） | `700`、`00700`、`09988` |\n| 美股 | 英文 ticker | `AAPL`、`TSLA`、`BIDU` |\n| 美股指数 | `.DJI` / `.IXIC` / `.SPX` | `.DJI` |\n| 场外基金 | 6 位数字 | `014978`、`110011` |\n\n---\n\n## 工作流程\n\n### Step 0: 意图识别与 Command 路由\n\n**Meta 命令**（最高优先级）：输入为 `version`、`-v`、`--version`、`help`、`-h`、`--help`（大小写不敏感）\n→ 直接输出版本/帮助信息，**不执行后续步骤**\n\nversion 输出：\n```\nstock-query v2.5.1\n```\n\nhelp 输出：\n```\nstock-query v2.5.1 — 全球股票/ETF/基金/指数实时行情查询\n\n用法：\n  /stock-query <代码> [代码2 ...]   查询一个或多个标的实时行情\n  /stock-query <代码> 历史          查询个股历史K线（默认近30个交易日）\n  /stock-query version              显示版本号\n  /stock-query help                 显示本帮助\n\n支持的市场：\n  A股（沪/深）  6位数字，如 601991 000001\n  港股          5位数字，如 00700 09988\n  美股          英文ticker，如 AAPL TSLA NVDA\n  美股指数      .DJI  .IXIC  .SPX\n  ETF           6位数字，如 510300 159915\n  场外基金      6位数字，如 014978\n\n常用示例：\n  /stock-query AAPL\n  /stock-query 00700 09988\n  /stock-query AAPL 00700 601991 510300\n  /stock-query 600519 近60天日K\n  /stock-query TSLA 周K 最近20周\n\n作者：asfamilybank · https://github.com/asfamilybank/stock-query\n```\n\n**Command 1：Portfolio 文件管理**：含操作词（添加/新增/删除/移除/修改/查看/列出）＋ 对象词（自选股/持仓/portfolio/watchlist），或明确指令如\"把 AAPL 加到自选股\"\n→ 直接执行 Command 1，**不进入 Command 2/3 流程**\n\n**Command 3：历史行情查询**：含关键词（历史/历史数据/历史行情/历史价格/历史走势/K线/日K/周K/月K）\n→ 直接执行 Command 3，**不进入 Command 2 流程**\n\n**Command 2：行情查询**（默认）：其余所有输入 → 进入 Command 2 流程（执行 Step 1–6）\n\n---\n\n## 静默执行原则（Claude 对话输出约束）\n\n**⛔ 严禁向用户输出任何中间推理或过程信息。** 这是最高优先级约束，覆盖所有步骤。\n\n> 本约束仅适用于 Claude 的对话文本输出。`scripts/sq.sh` stdout 仅输出结构化数据供 Claude 内部消费：行情/基金命令输出 JSON 数组，`pfile` 命令输出文件绝对路径或控制令牌 `NOT_FOUND`；stderr 输出错误/用法提示。`scripts/fmt.sh` 是格式化渲染层，接收 `sq.sh` 的 JSON 输出，输出供用户直接查看的 Markdown 表格（含涨跌 emoji、CJK 对齐、均线列）；其 stdout 为最终展示内容，非过程日志。两个脚本均不向用户界面打印任何过程信息。\n\n以下内容**绝对禁止出现**在回复中：\n- 市场/类型判断（如\"014978 是场外基金\"）\n- 数据源切换说明（如\"腾讯接口返回空，切换至东方财富：\"）\n- 文件路径查找过程\n- 任何形式的\"正在...\"、\"切换...\"、\"尝试...\"等过程性文字\n\n**唯一允许的输出：** 最终结果表格，或无法查询时的错误提示。\n\n---\n\n## Command 1: Portfolio 文件管理\n\n**所有增删改查操作必须通过 Bash 工具执行实际命令，禁止依赖会话记忆。未执行命令不得声称操作已完成。**\n\n### 文件定位（每次进入 Command 1 必须首先执行）\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\necho \"$PFILE\"\n```\n\n- 输出 `NOT_FOUND` → 立即向用户输出下方创建引导，停止执行，**不得创建任何替代文件**\n- 否则将 `$PFILE` 用于所有后续操作\n\n**portfolio.csv 不存在时**，引导用户创建：\n```\n未找到自选股文件。请执行以下步骤创建：\n\n1. 创建配置目录并复制模板：\n   mkdir -p ~/.config/stock-query\n   cp <skill安装目录>/assets/portfolio.csv ~/.config/stock-query/portfolio.csv\n\n2. 编辑文件，填入你的自选股信息。\n```\n\n**CSV 文件格式**（参考 `assets/portfolio.csv`）：\n\n```\n代码,名称,数量,自选价格\n601991,大唐发电,1000,4.00   # 含数量与参考价，输出浮盈亏\n014978,华安纳指100C,10000,  # 自选价格留空：只查行情\nAAPL,,50,220.00             # 名称留空：自动从接口获取\n000300,,0,                  # 数量为 0：纯自选\n```\n\n### 查\n\n```bash\ngrep -v '^#' \"$PFILE\" | tail -n +2\n```\n\n格式化为表格展示，不查询实时行情。如需实时价格，使用 Command 2。\n\n### 增\n\n1. 用 `bash scripts/sq.sh get <code>` 获取标的名称\n2. 执行：\n```bash\nif grep -q \"^{code},\" \"$PFILE\" 2>/dev/null; then\n  echo \"DUPLICATE:{code}\"\nelse\n  echo \"{code},{name},{shares},{cost}\" >> \"$PFILE\" && echo \"ADDED:{code},{name},{shares},{cost}\"\nfi\n```\n3. `ADDED:...` → 展示添加结果；`DUPLICATE:{code}` → 询问是否改为修改操作\n\n### 改\n\n1. 用 `bash scripts/sq.sh get <code>` 获取最新名称\n2. 执行：\n```bash\nOLD=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$OLD\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  NEW=\"{code},{name},{shares},{cost}\"\n  tmp=$(mktemp)\n  awk -F',' -v c=\"{code}\" -v n=\"$NEW\" \\\n    'BEGIN{OFS=\",\"} $1==c{print n;next}{print}' \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"BEFORE:$OLD\"\n  echo \"AFTER:$NEW\"\nfi\n```\n3. 展示修改前后 diff；`NOT_FOUND:{code}` → 提示未找到\n\n### 删\n\n```bash\nDEL=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$DEL\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  tmp=$(mktemp)\n  grep -v \"^{code},\" \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"DELETED:$DEL\"\nfi\n```\n\n`DELETED:...` → 展示删除结果；`NOT_FOUND:{code}` → 提示未找到\n\n---\n\n## Command 2: 行情查询\n\n### Step 1: 解析用户输入\n\n**detail_mode 检测：** 若用户消息含以下关键词，设 `detail_mode = true`，在 Step 3 输出详细表格：\n- 中文：详细、详情、详细信息、更多信息、全部信息、完整信息\n- 英文：detail、details、verbose、full\n\n从用户消息中提取标的代码，支持以下形式：\n- **6 位纯数字** → A 股（股票/ETF/指数/基金）\n- **≤5 位纯数字** → 港股，自动补零（700 → 00700）\n- **英文字母或英文+数字** → 美股 ticker\n- **中文/英文名称** → 匹配下表常见标的；无法确定时向用户确认\n\n常见标的速查：\n\n**A 股：**\n- 黄金ETF → 518880 / 红利低波ETF → 512890 / 沪深300ETF → 510300\n- 卫星ETF → 563230 / 创业板ETF → 159915 / 中证500ETF → 510500\n- 上证指数 → 000001 / 深证成指 → 399001 / 创业板指 → 399006\n- 沪深300 → 000300 / 上证50 → 000016 / 中证500 → 000905 / 中证1000 → 000852\n\n**港股：**\n- 腾讯 → 00700 / 阿里巴巴 → 09988 / 美团 → 03690 / 小米 → 01810\n- 比亚迪 → 01211 / 恒生指数 → HSI\n\n**美股：**\n- 苹果 → AAPL / 谷歌 → GOOG / 特斯拉 → TSLA / 英伟达 → NVDA\n- 微软 → MSFT / 亚马逊 → AMZN / 百度 → BIDU / 阿里巴巴 → BABA\n- 哔哩哔哩 → BILI / 拼多多 → PDD\n- 道琼斯 → .DJI / 纳斯达克 → .IXIC / 标普500 → .SPX\n\n### Step 2: 查询并格式化输出\n\n```\nStep 2A: 执行命令（不得省略 --format 参数，单支/批量/任意市场均适用）\n  detail_mode = false → bash scripts/sq.sh get <code1> [code2 ...] --format table\n  detail_mode = true  → bash scripts/sq.sh get <code1> [code2 ...] --format detail\n\nStep 2B: 将命令的 stdout 原样作为回复返回\n  ⛔ 不得解析 JSON 自行构建表格\n  ⛔ 不得修改 emoji 字符（A股/港股：涨🔴跌🟢；美股：涨🟩跌🟥）\n  ⛔ 不得添加、删除或重排列\n```\n\n**⛔ 特别注意：港股跌幅用 🟢（非 🔴）。** A股、港股均遵循中国市场惯例：上涨 🔴，下跌 🟢，平盘 ⚪。命令输出已正确处理，勿覆盖。\n\n### Step 4: 自选市值计算（可选）\n\n#### 4a. 从 portfolio 文件加载\n\n当用户指令涉及自选股（如\"查我的自选股\"\"看下自选股\"），先定位文件再批量查询：\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\n```\n\n- 输出 `NOT_FOUND` → 立即输出创建引导（见 Command 1），停止执行\n- 否则读取文件，提取所有代码后用 `sq get` 批量查询\n\n执行步骤（严格按序）：\n\n```\nStep A: 读取全部条目\n  codes_all      = 文件中所有非注释、非表头行\n  codes_position = codes_all 中数量 > 0 的条目\n  codes_watch    = codes_all 中数量 = 0 或空的条目\n\nStep B: 批量查询\n  bash scripts/sq.sh get <codes_all 中所有代码>\n\nStep C: 输出自选市值表（若 codes_position 非空）\n  横向宽表格：代码/名称/数量/自选价格/现价/市值/浮盈亏/盈亏比\n\nStep D: 输出自选行情表（若 codes_watch 非空）← 必须执行，不得省略\n  标题\"自选行情\"，简表：代码/名称/现价/涨跌幅\n```\n\n**⚠️ Step D 不得跳过。** 数量=0 的条目不进市值表，但必须出现在 Step D。\n\n输出示例：\n\n```\n| 代码   | 名称     | 数量    | 自选价格 | 现价    | 市值      | 浮盈/亏      | 盈亏比      |\n|--------|---------|--------|---------|--------|----------|------------|------------|\n| 601991 | 大唐发电 | 1000股 | 4.00    | 4.08   | 4,080    | 🔴 +80     | 🔴 +2.00% |\n| AAPL   | 苹果     | 50股   | 220.00  | 246.63 | 12,332   | 🟩 +1,332  | 🟩 +12.10%|\n\n自选行情\n| 代码   | 名称    | 现价     | 涨跌幅      |\n|--------|--------|---------|------------|\n| 000300 | 沪深300 | 4509.24 | 🔴 +0.38% |\n| .DJI   | 道琼斯  | 45216.14| 🟩 +0.11% |\n```\n\n#### 4b. 用户手动提供自选信息\n\n用 `sq get` 查询后，**必须使用横向宽表格，禁止使用竖向键值对格式**：\n\n```\n| 代码   | 名称      | 数量   | 自选价格 | 最新价  | 市值       | 浮盈/亏        | 盈亏比         |\n|--------|----------|--------|---------|--------|-----------|--------------|--------------|\n| 600519 | 贵州茅台  | 100股  | 1680.0  | 1725.0 | 172,500   | 🔴 +4,500    | 🔴 +2.68%   |\n| AAPL   | 苹果      | 50股   | 220.0   | 251.49 | 12,574.50 | 🟩 +1,574.50 | 🟩 +14.31%  |\n```\n\n汇总行：\n```\n📊 自选合计：市值 185,074.50 | 总参考成本 179,000 | 浮盈 +6,074.50（+3.39%）\n```\n\n浮盈亏 emoji 遵循市场规则（A股/港股：盈利🔴亏损🟢；美股：盈利🟩亏损🟥）。跨市场汇总时提示用户各币种分开统计。\n\nCSV 解析规则：`#` 开头为注释，第一个非注释行为表头，名称列为空时从查询结果自动填充，自选价格为空时浮盈亏显示 `—`。\n\n---\n\n## Command 3: 历史行情查询\n\n### 意图解析\n\n从用户输入中提取以下参数（均可省略，使用默认值）：\n\n**标的代码**：同 Step 1 规则。\n\n**周期**（默认 day）：\n| 用户表述 | 参数 |\n|---------|------|\n| 日/天/日K/daily | `--period day` |\n| 周/周K/weekly | `--period week` |\n| 月/月K/monthly | `--period month` |\n\n**数量/区间**：\n- \"近N天/周/月\"、\"最近N条\"、\"过去N\" → `--count N`\n- \"从 YYYY-MM-DD 到 YYYY-MM-DD\"、\"2024年1月到3月\" → `--start ... --end ...`（转为 YYYY-MM-DD 格式）\n- 未指定 → 默认 30 条\n\n**复权**（默认前复权）：\n| 用户表述 | 参数 |\n|---------|------|\n| 前复权（默认） | `--fq pre` |\n| 后复权 | `--fq post` |\n| 不复权/原始价格 | `--fq none` |\n\n### 数据获取与格式化输出\n\n```bash\nbash scripts/sq.sh hist <code> [--period day|week|month] [--count N] [--start YYYY-MM-DD] [--end YYYY-MM-DD] [--fq pre|post|none] --format table\n```\n\n直接执行上述命令，将输出原样呈现给用户。`--format table` 已内置所有格式化逻辑：倒序 K 线表格、标题行（标的/周期/复权/条数）、区间统计、emoji 涨跌规则、成交量单位换算。\n\n---\n\n## 交易时间参考\n\n| 市场 | 交易时段（当地时间） | 时区 |\n|------|-------------------|------|\n| A 股/ETF | 工作日 09:30-11:30, 13:00-15:00 | UTC+8 |\n| 场外基金估值 | 工作日 09:30-15:00 | UTC+8 |\n| 港股 | 工作日 09:30-12:00, 13:00-16:00 | UTC+8 |\n| 美股 | 工作日 09:30-16:00（北京时间 夏令时 21:30-04:00） | UTC-4/-5 |\n| QDII 基金 | 净值 T+2 至 T+7 公布 | — |\n\nFile v2.5.1:_meta.json\n\n{\n  \"ownerId\": \"kn722wj47zb7qme4e79tqwyg5582tfyp\",\n  \"slug\": \"stock-query\",\n  \"version\": \"2.5.1\",\n  \"publishedAt\": 1775610746624\n}\n\nFile v2.5.1:skill.yaml\n\nname: stock-query\nversion: 2.5.1\nauthor: asfamilybank\ndescription: >\n  查询全球主要市场股票实时行情：A 股、港股、美股，以及 ETF、场外基金、主要指数，支持批量查询、自选市值计算与个股历史K线（含 MA5/MA10/MA20/MA60 均线）。\n  同时支持在用户显式指令下通过内联 bash 命令管理本地 portfolio.csv 自选股文件（增/删/改/查），文件仅含股票代码、名称、数量、自选价格，禁止存放账户凭证或密钥。\n  需要：curl（行情 API 请求）、iconv（GBK→UTF-8 转码）。\n  文件访问：仅限 portfolio.csv，优先查找 ~/.config/stock-query/portfolio.csv，其次兼容旧版安装目录，不访问其他系统文件。\n  网络访问：仅限 qt.gtimg.cn、hq.sinajs.cn、push2.eastmoney.com、web.ifzq.gtimg.cn、push2his.eastmoney.com、fundgz.1234567.com.cn、api.fund.eastmoney.com 七个行情数据源。\n  Use when: 用户提到\"查股价\"\"查净值\"\"行情\"\"最新价\"\"自选市值\"\"实时价格\"\"大盘\"\"指数\"\"港股\"\"美股\"等。\n  NOT for: 加密货币、期货、期权、外汇。\nemoji: \"📈\"\nrequires:\n  bins: [curl, iconv, python3]\n  os: [darwin, linux]\nlicense: MIT\nrepository: https://github.com/asfamilybank/stock-query\n\npermissions:\n  - network  # 用途：curl 调用行情 API（仅限 qt.gtimg.cn / hq.sinajs.cn / push2.eastmoney.com / web.ifzq.gtimg.cn / push2his.eastmoney.com / fundgz.1234567.com.cn / api.fund.eastmoney.com）\n  - shell    # 用途：执行 curl、iconv 转码、grep/awk 文件操作（仅操作 portfolio.csv，不执行任意命令）\n\nentryPoint:\n  type: natural\n  prompt: |\n    你是一个全球股票行情查询助手。根据 SKILL.md 中的工作流程，\n    识别用户提供的标的代码（包括 A 股、港股、美股、ETF、基金及指数），\n    调用腾讯财经接口查询行情，A 股失败时回退新浪接口。\n    所有腾讯和新浪接口的 curl 响应必须通过 iconv -f GBK -t UTF-8 转码。\n\ntriggers:\n  keywords:\n    - \"查股价\"\n    - \"查行情\"\n    - \"查指数\"\n    - \"大盘\"\n    - \"上证指数\"\n    - \"查净值\"\n    - \"最新价\"\n    - \"stock price\"\n    - \"实时价格\"\n    - \"自选市值\"\n    - \"基金估值\"\n    - \"港股\"\n    - \"美股\"\n    - \"纳斯达克\"\n    - \"道琼斯\"\n    - \"恒生指数\"\n\nArchive v2.5.0: 6 files, 23466 bytes\n\nFiles: assets/portfolio.csv (2026b), scripts/fmt.sh (10533b), scripts/sq.sh (38241b), SKILL.md (15254b), skill.yaml (2324b), _meta.json (130b)\n\nFile v2.5.0:SKILL.md\n\n---\nname: stock-query\nversion: 2.5.0\ndescription: >\n  查询全球主要市场股票实时行情（A 股、港股、美股、ETF、场外基金、主要指数），支持批量查询、自选市值计算与个股历史K线。\n  同时支持在用户显式指令下管理本地 portfolio.csv 自选股文件（增/删/改/查）；文件仅含股票代码、名称、数量、自选价格，禁止存放账户凭证或密钥。\n  需要 shell 权限执行：curl（行情 API 请求）、iconv（GBK→UTF-8 转码）、grep/awk/mktemp（文件操作，仅限 portfolio.csv）。\n  文件访问：仅限 portfolio.csv 一个文件，优先查找 ~/.config/stock-query/portfolio.csv，其次兼容旧版安装目录（~/.openclaw/workspace/skills/stock-query/ 或 ~/.claude/skills/stock-query/ 或 ~/.agents/skills/stock-query/），无需配置任何环境变量。\n  网络访问：仅限 qt.gtimg.cn、hq.sinajs.cn、push2.eastmoney.com、web.ifzq.gtimg.cn、push2his.eastmoney.com、fundgz.1234567.com.cn、api.fund.eastmoney.com 七个行情数据源。\n  TRIGGER when: 用户要求查看股价、行情、净值、自选盈亏、大盘指数、历史走势/K线，或管理自选股文件时，直接调用，无需等待斜杠命令。\n  NOT for: 加密货币、期货、期权、外汇。\n  用法：/stock-query AAPL 00700 601991\nuser-invocable: true\nallowed-tools:\n  - Bash\n---\n\n# 全球股票/ETF/基金/指数 实时价格查询\n\n## 权限与操作范围\n\n| 权限 | 声明用途 | 限制 |\n|------|---------|------|\n| `network` | `scripts/sq.sh` 内部调用行情 API | 仅限 `qt.gtimg.cn`、`hq.sinajs.cn`、`push2.eastmoney.com`、`web.ifzq.gtimg.cn`、`push2his.eastmoney.com`、`fundgz.1234567.com.cn`、`api.fund.eastmoney.com` 七个数据源，不发送用户个人数据 |\n| `shell` | 执行 `curl`、`iconv`、`grep`、`awk`、`mktemp` | 仅操作 `portfolio.csv`；不执行任意命令 |\n\n**文件访问：** 本 skill 仅在用户**显式指令**下读写 `portfolio.csv` 一个文件，优先查找 `~/.config/stock-query/portfolio.csv`，其次兼容旧版安装目录（`~/.openclaw/workspace/skills/stock-query/`、`~/.claude/skills/stock-query/`、`~/.agents/skills/stock-query/`），无需配置任何环境变量。历史数据通过网络实时获取，不写本地文件。\n\n**自动触发范围：** **文件操作（Command 1）不会自动触发**，仅在用户明确发出增/删/改/查 portfolio 指令时执行。\n\n⚠️ **凭证安全：** `portfolio.csv` 仅应包含股票代码、名称、数量、自选价格。**禁止存放账户密码、API 密钥、Token 或任何认证凭证。**\n\n## 前置依赖\n\n| 工具 | 说明 |\n|------|------|\n| `scripts/sq.sh` | 行情查询 CLI，内部使用 `curl` + `iconv` |\n| `scripts/fmt.sh` | 格式化输出工具，由 `sq.sh --format` 调用，依赖 `python3`，输出人类可读的 Markdown 表格 |\n\n## 支持的市场与标的\n\n| 市场 | 代码格式 | 示例 |\n|------|---------|------|\n| 沪/深市股票、ETF、指数 | 6 位数字 | `601991`、`510300`、`000001` |\n| 港股 | ≤5 位数字（自动补零） | `700`、`00700`、`09988` |\n| 美股 | 英文 ticker | `AAPL`、`TSLA`、`BIDU` |\n| 美股指数 | `.DJI` / `.IXIC` / `.SPX` | `.DJI` |\n| 场外基金 | 6 位数字 | `014978`、`110011` |\n\n---\n\n## 工作流程\n\n### Step 0: 意图识别与 Command 路由\n\n**Meta 命令**（最高优先级）：输入为 `version`、`-v`、`--version`、`help`、`-h`、`--help`（大小写不敏感）\n→ 直接输出版本/帮助信息，**不执行后续步骤**\n\nversion 输出：\n```\nstock-query v2.5.0\n```\n\nhelp 输出：\n```\nstock-query v2.5.0 — 全球股票/ETF/基金/指数实时行情查询\n\n用法：\n  /stock-query <代码> [代码2 ...]   查询一个或多个标的实时行情\n  /stock-query <代码> 历史          查询个股历史K线（默认近30个交易日）\n  /stock-query version              显示版本号\n  /stock-query help                 显示本帮助\n\n支持的市场：\n  A股（沪/深）  6位数字，如 601991 000001\n  港股          5位数字，如 00700 09988\n  美股          英文ticker，如 AAPL TSLA NVDA\n  美股指数      .DJI  .IXIC  .SPX\n  ETF           6位数字，如 510300 159915\n  场外基金      6位数字，如 014978\n\n常用示例：\n  /stock-query AAPL\n  /stock-query 00700 09988\n  /stock-query AAPL 00700 601991 510300\n  /stock-query 600519 近60天日K\n  /stock-query TSLA 周K 最近20周\n\n作者：asfamilybank · https://github.com/asfamilybank/stock-query\n```\n\n**Command 1：Portfolio 文件管理**：含操作词（添加/新增/删除/移除/修改/查看/列出）＋ 对象词（自选股/持仓/portfolio/watchlist），或明确指令如\"把 AAPL 加到自选股\"\n→ 直接执行 Command 1，**不进入 Command 2/3 流程**\n\n**Command 3：历史行情查询**：含关键词（历史/历史数据/历史行情/历史价格/历史走势/K线/日K/周K/月K）\n→ 直接执行 Command 3，**不进入 Command 2 流程**\n\n**Command 2：行情查询**（默认）：其余所有输入 → 进入 Command 2 流程（执行 Step 1–6）\n\n---\n\n## 静默执行原则（Claude 对话输出约束）\n\n**⛔ 严禁向用户输出任何中间推理或过程信息。** 这是最高优先级约束，覆盖所有步骤。\n\n> 本约束仅适用于 Claude 的对话文本输出。`scripts/sq.sh` stdout 仅输出结构化数据供 Claude 内部消费：行情/基金命令输出 JSON 数组，`pfile` 命令输出文件绝对路径或控制令牌 `NOT_FOUND`；stderr 输出错误/用法提示。`scripts/fmt.sh` 是格式化渲染层，接收 `sq.sh` 的 JSON 输出，输出供用户直接查看的 Markdown 表格（含涨跌 emoji、CJK 对齐、均线列）；其 stdout 为最终展示内容，非过程日志。两个脚本均不向用户界面打印任何过程信息。\n\n以下内容**绝对禁止出现**在回复中：\n- 市场/类型判断（如\"014978 是场外基金\"）\n- 数据源切换说明（如\"腾讯接口返回空，切换至东方财富：\"）\n- 文件路径查找过程\n- 任何形式的\"正在...\"、\"切换...\"、\"尝试...\"等过程性文字\n\n**唯一允许的输出：** 最终结果表格，或无法查询时的错误提示。\n\n---\n\n## Command 1: Portfolio 文件管理\n\n**所有增删改查操作必须通过 Bash 工具执行实际命令，禁止依赖会话记忆。未执行命令不得声称操作已完成。**\n\n### 文件定位（每次进入 Command 1 必须首先执行）\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\necho \"$PFILE\"\n```\n\n- 输出 `NOT_FOUND` → 立即向用户输出下方创建引导，停止执行，**不得创建任何替代文件**\n- 否则将 `$PFILE` 用于所有后续操作\n\n**portfolio.csv 不存在时**，引导用户创建：\n```\n未找到自选股文件。请执行以下步骤创建：\n\n1. 创建配置目录并复制模板：\n   mkdir -p ~/.config/stock-query\n   cp <skill安装目录>/assets/portfolio.csv ~/.config/stock-query/portfolio.csv\n\n2. 编辑文件，填入你的自选股信息。\n```\n\n**CSV 文件格式**（参考 `assets/portfolio.csv`）：\n\n```\n代码,名称,数量,自选价格\n601991,大唐发电,1000,4.00   # 含数量与参考价，输出浮盈亏\n014978,华安纳指100C,10000,  # 自选价格留空：只查行情\nAAPL,,50,220.00             # 名称留空：自动从接口获取\n000300,,0,                  # 数量为 0：纯自选\n```\n\n### 查\n\n```bash\ngrep -v '^#' \"$PFILE\" | tail -n +2\n```\n\n格式化为表格展示，不查询实时行情。如需实时价格，使用 Command 2。\n\n### 增\n\n1. 用 `bash scripts/sq.sh get <code>` 获取标的名称\n2. 执行：\n```bash\nif grep -q \"^{code},\" \"$PFILE\" 2>/dev/null; then\n  echo \"DUPLICATE:{code}\"\nelse\n  echo \"{code},{name},{shares},{cost}\" >> \"$PFILE\" && echo \"ADDED:{code},{name},{shares},{cost}\"\nfi\n```\n3. `ADDED:...` → 展示添加结果；`DUPLICATE:{code}` → 询问是否改为修改操作\n\n### 改\n\n1. 用 `bash scripts/sq.sh get <code>` 获取最新名称\n2. 执行：\n```bash\nOLD=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$OLD\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  NEW=\"{code},{name},{shares},{cost}\"\n  tmp=$(mktemp)\n  awk -F',' -v c=\"{code}\" -v n=\"$NEW\" \\\n    'BEGIN{OFS=\",\"} $1==c{print n;next}{print}' \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"BEFORE:$OLD\"\n  echo \"AFTER:$NEW\"\nfi\n```\n3. 展示修改前后 diff；`NOT_FOUND:{code}` → 提示未找到\n\n### 删\n\n```bash\nDEL=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$DEL\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  tmp=$(mktemp)\n  grep -v \"^{code},\" \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"DELETED:$DEL\"\nfi\n```\n\n`DELETED:...` → 展示删除结果；`NOT_FOUND:{code}` → 提示未找到\n\n---\n\n## Command 2: 行情查询\n\n### Step 1: 解析用户输入\n\n**detail_mode 检测：** 若用户消息含以下关键词，设 `detail_mode = true`，在 Step 3 输出详细表格：\n- 中文：详细、详情、详细信息、更多信息、全部信息、完整信息\n- 英文：detail、details、verbose、full\n\n从用户消息中提取标的代码，支持以下形式：\n- **6 位纯数字** → A 股（股票/ETF/指数/基金）\n- **≤5 位纯数字** → 港股，自动补零（700 → 00700）\n- **英文字母或英文+数字** → 美股 ticker\n- **中文/英文名称** → 匹配下表常见标的；无法确定时向用户确认\n\n常见标的速查：\n\n**A 股：**\n- 黄金ETF → 518880 / 红利低波ETF → 512890 / 沪深300ETF → 510300\n- 卫星ETF → 563230 / 创业板ETF → 159915 / 中证500ETF → 510500\n- 上证指数 → 000001 / 深证成指 → 399001 / 创业板指 → 399006\n- 沪深300 → 000300 / 上证50 → 000016 / 中证500 → 000905 / 中证1000 → 000852\n\n**港股：**\n- 腾讯 → 00700 / 阿里巴巴 → 09988 / 美团 → 03690 / 小米 → 01810\n- 比亚迪 → 01211 / 恒生指数 → HSI\n\n**美股：**\n- 苹果 → AAPL / 谷歌 → GOOG / 特斯拉 → TSLA / 英伟达 → NVDA\n- 微软 → MSFT / 亚马逊 → AMZN / 百度 → BIDU / 阿里巴巴 → BABA\n- 哔哩哔哩 → BILI / 拼多多 → PDD\n- 道琼斯 → .DJI / 纳斯达克 → .IXIC / 标普500 → .SPX\n\n### Step 2: 查询并格式化输出\n\n```\nStep 2A: 执行命令（不得省略 --format 参数，单支/批量/任意市场均适用）\n  detail_mode = false → bash scripts/sq.sh get <code1> [code2 ...] --format table\n  detail_mode = true  → bash scripts/sq.sh get <code1> [code2 ...] --format detail\n\nStep 2B: 将命令的 stdout 原样作为回复返回\n  ⛔ 不得解析 JSON 自行构建表格\n  ⛔ 不得修改 emoji 字符（A股/港股：涨🔴跌🟢；美股：涨🟩跌🟥）\n  ⛔ 不得添加、删除或重排列\n```\n\n**⛔ 特别注意：港股跌幅用 🟢（非 🔴）。** A股、港股均遵循中国市场惯例：上涨 🔴，下跌 🟢，平盘 ⚪。命令输出已正确处理，勿覆盖。\n\n### Step 4: 自选市值计算（可选）\n\n#### 4a. 从 portfolio 文件加载\n\n当用户指令涉及自选股（如\"查我的自选股\"\"看下自选股\"），先定位文件再批量查询：\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\n```\n\n- 输出 `NOT_FOUND` → 立即输出创建引导（见 Command 1），停止执行\n- 否则读取文件，提取所有代码后用 `sq get` 批量查询\n\n执行步骤（严格按序）：\n\n```\nStep A: 读取全部条目\n  codes_all      = 文件中所有非注释、非表头行\n  codes_position = codes_all 中数量 > 0 的条目\n  codes_watch    = codes_all 中数量 = 0 或空的条目\n\nStep B: 批量查询\n  bash scripts/sq.sh get <codes_all 中所有代码>\n\nStep C: 输出自选市值表（若 codes_position 非空）\n  横向宽表格：代码/名称/数量/自选价格/现价/市值/浮盈亏/盈亏比\n\nStep D: 输出自选行情表（若 codes_watch 非空）← 必须执行，不得省略\n  标题\"自选行情\"，简表：代码/名称/现价/涨跌幅\n```\n\n**⚠️ Step D 不得跳过。** 数量=0 的条目不进市值表，但必须出现在 Step D。\n\n输出示例：\n\n```\n| 代码   | 名称     | 数量    | 自选价格 | 现价    | 市值      | 浮盈/亏      | 盈亏比      |\n|--------|---------|--------|---------|--------|----------|------------|------------|\n| 601991 | 大唐发电 | 1000股 | 4.00    | 4.08   | 4,080    | 🔴 +80     | 🔴 +2.00% |\n| AAPL   | 苹果     | 50股   | 220.00  | 246.63 | 12,332   | 🟩 +1,332  | 🟩 +12.10%|\n\n自选行情\n| 代码   | 名称    | 现价     | 涨跌幅      |\n|--------|--------|---------|------------|\n| 000300 | 沪深300 | 4509.24 | 🔴 +0.38% |\n| .DJI   | 道琼斯  | 45216.14| 🟩 +0.11% |\n```\n\n#### 4b. 用户手动提供自选信息\n\n用 `sq get` 查询后，**必须使用横向宽表格，禁止使用竖向键值对格式**：\n\n```\n| 代码   | 名称      | 数量   | 自选价格 | 最新价  | 市值       | 浮盈/亏        | 盈亏比         |\n|--------|----------|--------|---------|--------|-----------|--------------|--------------|\n| 600519 | 贵州茅台  | 100股  | 1680.0  | 1725.0 | 172,500   | 🔴 +4,500    | 🔴 +2.68%   |\n| AAPL   | 苹果      | 50股   | 220.0   | 251.49 | 12,574.50 | 🟩 +1,574.50 | 🟩 +14.31%  |\n```\n\n汇总行：\n```\n📊 自选合计：市值 185,074.50 | 总参考成本 179,000 | 浮盈 +6,074.50（+3.39%）\n```\n\n浮盈亏 emoji 遵循市场规则（A股/港股：盈利🔴亏损🟢；美股：盈利🟩亏损🟥）。跨市场汇总时提示用户各币种分开统计。\n\nCSV 解析规则：`#` 开头为注释，第一个非注释行为表头，名称列为空时从查询结果自动填充，自选价格为空时浮盈亏显示 `—`。\n\n---\n\n## Command 3: 历史行情查询\n\n### 意图解析\n\n从用户输入中提取以下参数（均可省略，使用默认值）：\n\n**标的代码**：同 Step 1 规则。\n\n**周期**（默认 day）：\n| 用户表述 | 参数 |\n|---------|------|\n| 日/天/日K/daily | `--period day` |\n| 周/周K/weekly | `--period week` |\n| 月/月K/monthly | `--period month` |\n\n**数量/区间**：\n- \"近N天/周/月\"、\"最近N条\"、\"过去N\" → `--count N`\n- \"从 YYYY-MM-DD 到 YYYY-MM-DD\"、\"2024年1月到3月\" → `--start ... --end ...`（转为 YYYY-MM-DD 格式）\n- 未指定 → 默认 30 条\n\n**复权**（默认前复权）：\n| 用户表述 | 参数 |\n|---------|------|\n| 前复权（默认） | `--fq pre` |\n| 后复权 | `--fq post` |\n| 不复权/原始价格 | `--fq none` |\n\n### 数据获取与格式化输出\n\n```bash\nbash scripts/sq.sh hist <code> [--period day|week|month] [--count N] [--start YYYY-MM-DD] [--end YYYY-MM-DD] [--fq pre|post|none] --format table\n```\n\n直接执行上述命令，将输出原样呈现给用户。`--format table` 已内置所有格式化逻辑：倒序 K 线表格、标题行（标的/周期/复权/条数）、区间统计、emoji 涨跌规则、成交量单位换算。\n\n---\n\n## 交易时间参考\n\n| 市场 | 交易时段（当地时间） | 时区 |\n|------|-------------------|------|\n| A 股/ETF | 工作日 09:30-11:30, 13:00-15:00 | UTC+8 |\n| 场外基金估值 | 工作日 09:30-15:00 | UTC+8 |\n| 港股 | 工作日 09:30-12:00, 13:00-16:00 | UTC+8 |\n| 美股 | 工作日 09:30-16:00（北京时间 夏令时 21:30-04:00） | UTC-4/-5 |\n| QDII 基金 | 净值 T+2 至 T+7 公布 | — |\n\nFile v2.5.0:_meta.json\n\n{\n  \"ownerId\": \"kn722wj47zb7qme4e79tqwyg5582tfyp\",\n  \"slug\": \"stock-query\",\n  \"version\": \"2.5.0\",\n  \"publishedAt\": 1775552206986\n}\n\nFile v2.5.0:skill.yaml\n\nname: stock-query\nversion: 2.5.0\nauthor: asfamilybank\ndescription: >\n  查询全球主要市场股票实时行情：A 股、港股、美股，以及 ETF、场外基金、主要指数，支持批量查询、自选市值计算与个股历史K线（含 MA5/MA10/MA20/MA60 均线）。\n  同时支持在用户显式指令下通过内联 bash 命令管理本地 portfolio.csv 自选股文件（增/删/改/查），文件仅含股票代码、名称、数量、自选价格，禁止存放账户凭证或密钥。\n  需要：curl（行情 API 请求）、iconv（GBK→UTF-8 转码）。\n  文件访问：仅限 portfolio.csv，优先查找 ~/.config/stock-query/portfolio.csv，其次兼容旧版安装目录，不访问其他系统文件。\n  网络访问：仅限 qt.gtimg.cn、hq.sinajs.cn、push2.eastmoney.com、web.ifzq.gtimg.cn、push2his.eastmoney.com、fundgz.1234567.com.cn、api.fund.eastmoney.com 七个行情数据源。\n  Use when: 用户提到\"查股价\"\"查净值\"\"行情\"\"最新价\"\"自选市值\"\"实时价格\"\"大盘\"\"指数\"\"港股\"\"美股\"等。\n  NOT for: 加密货币、期货、期权、外汇。\nemoji: \"📈\"\nrequires:\n  bins: [curl, iconv, python3]\n  os: [darwin, linux]\nlicense: MIT\nrepository: https://github.com/asfamilybank/stock-query\n\npermissions:\n  - network  # 用途：curl 调用行情 API（仅限 qt.gtimg.cn / hq.sinajs.cn / push2.eastmoney.com / web.ifzq.gtimg.cn / push2his.eastmoney.com / fundgz.1234567.com.cn / api.fund.eastmoney.com）\n  - shell    # 用途：执行 curl、iconv 转码、grep/awk 文件操作（仅操作 portfolio.csv，不执行任意命令）\n\nentryPoint:\n  type: natural\n  prompt: |\n    你是一个全球股票行情查询助手。根据 SKILL.md 中的工作流程，\n    识别用户提供的标的代码（包括 A 股、港股、美股、ETF、基金及指数），\n    调用腾讯财经接口查询行情，A 股失败时回退新浪接口。\n    所有腾讯和新浪接口的 curl 响应必须通过 iconv -f GBK -t UTF-8 转码。\n\ntriggers:\n  keywords:\n    - \"查股价\"\n    - \"查行情\"\n    - \"查指数\"\n    - \"大盘\"\n    - \"上证指数\"\n    - \"查净值\"\n    - \"最新价\"\n    - \"stock price\"\n    - \"实时价格\"\n    - \"自选市值\"\n    - \"基金估值\"\n    - \"港股\"\n    - \"美股\"\n    - \"纳斯达克\"\n    - \"道琼斯\"\n    - \"恒生指数\"\n\nArchive v2.4.1: 7 files, 24926 bytes\n\nFiles: assets/portfolio.csv (2026b), scripts/fmt.sh (10533b), scripts/portfolio.sh (3777b), scripts/sq.sh (38052b), SKILL.md (15140b), skill.yaml (2360b), _meta.json (130b)\n\nFile v2.4.1:SKILL.md\n\n---\nname: stock-query\nversion: 2.4.1\ndescription: >\n  查询全球主要市场股票实时行情（A 股、港股、美股、ETF、场外基金、主要指数），支持批量查询、自选市值计算与个股历史K线。\n  同时支持在用户显式指令下管理本地 portfolio.csv 自选股文件（增/删/改/查）；文件仅含股票代码、名称、数量、自选价格，禁止存放账户凭证或密钥。\n  需要 shell 权限执行：curl（行情 API 请求）、iconv（GBK→UTF-8 转码）、grep/awk/mktemp（文件操作，仅限 portfolio.csv）。\n  文件访问：仅限 portfolio.csv 一个文件，固定在默认安装目录（~/.openclaw/workspace/skills/stock-query/ 或 ~/.claude/skills/stock-query/）下查找，无需配置任何环境变量。\n  网络访问：仅限 qt.gtimg.cn、hq.sinajs.cn、push2.eastmoney.com、web.ifzq.gtimg.cn、push2his.eastmoney.com、fundgz.1234567.com.cn、api.fund.eastmoney.com 七个行情数据源。\n  TRIGGER when: 用户要求查看股价、行情、净值、自选盈亏、大盘指数、历史走势/K线，或管理自选股文件时，直接调用，无需等待斜杠命令。\n  NOT for: 加密货币、期货、期权、外汇。\n  用法：/stock-query AAPL 00700 601991\nuser-invocable: true\nallowed-tools:\n  - Bash\n---\n\n# 全球股票/ETF/基金/指数 实时价格查询\n\n## 权限与操作范围\n\n| 权限 | 声明用途 | 限制 |\n|------|---------|------|\n| `network` | `scripts/sq.sh` 内部调用行情 API | 仅限 `qt.gtimg.cn`、`hq.sinajs.cn`、`push2.eastmoney.com`、`web.ifzq.gtimg.cn`、`push2his.eastmoney.com`、`fundgz.1234567.com.cn`、`api.fund.eastmoney.com` 七个数据源，不发送用户个人数据 |\n| `shell` | 执行 `curl`、`iconv`、`grep`、`awk`、`mktemp` | 仅操作 `portfolio.csv`；不执行任意命令 |\n\n**文件访问：** 本 skill 仅在用户**显式指令**下读写 `portfolio.csv` 一个文件，固定在默认安装目录（`~/.openclaw/workspace/skills/stock-query/` 或 `~/.claude/skills/stock-query/`）下查找，无需配置任何环境变量。历史数据通过网络实时获取，不写本地文件。\n\n**自动触发范围：** **文件操作（Command 1）不会自动触发**，仅在用户明确发出增/删/改/查 portfolio 指令时执行。\n\n⚠️ **凭证安全：** `portfolio.csv` 仅应包含股票代码、名称、数量、自选价格。**禁止存放账户密码、API 密钥、Token 或任何认证凭证。**\n\n## 前置依赖\n\n| 工具 | 说明 |\n|------|------|\n| `scripts/sq.sh` | 行情查询 CLI，内部使用 `curl` + `iconv` |\n| `scripts/fmt.sh` | 格式化输出工具，由 `sq.sh --format` 调用，依赖 `python3`，输出人类可读的 Markdown 表格 |\n\n## 支持的市场与标的\n\n| 市场 | 代码格式 | 示例 |\n|------|---------|------|\n| 沪/深市股票、ETF、指数 | 6 位数字 | `601991`、`510300`、`000001` |\n| 港股 | ≤5 位数字（自动补零） | `700`、`00700`、`09988` |\n| 美股 | 英文 ticker | `AAPL`、`TSLA`、`BIDU` |\n| 美股指数 | `.DJI` / `.IXIC` / `.SPX` | `.DJI` |\n| 场外基金 | 6 位数字 | `014978`、`110011` |\n\n---\n\n## 工作流程\n\n### Step 0: 意图识别与 Command 路由\n\n**Meta 命令**（最高优先级）：输入为 `version`、`-v`、`--version`、`help`、`-h`、`--help`（大小写不敏感）\n→ 直接输出版本/帮助信息，**不执行后续步骤**\n\nversion 输出：\n```\nstock-query v2.4.1\n```\n\nhelp 输出：\n```\nstock-query v2.4.1 — 全球股票/ETF/基金/指数实时行情查询\n\n用法：\n  /stock-query <代码> [代码2 ...]   查询一个或多个标的实时行情\n  /stock-query <代码> 历史          查询个股历史K线（默认近30个交易日）\n  /stock-query version              显示版本号\n  /stock-query help                 显示本帮助\n\n支持的市场：\n  A股（沪/深）  6位数字，如 601991 000001\n  港股          5位数字，如 00700 09988\n  美股          英文ticker，如 AAPL TSLA NVDA\n  美股指数      .DJI  .IXIC  .SPX\n  ETF           6位数字，如 510300 159915\n  场外基金      6位数字，如 014978\n\n常用示例：\n  /stock-query AAPL\n  /stock-query 00700 09988\n  /stock-query AAPL 00700 601991 510300\n  /stock-query 600519 近60天日K\n  /stock-query TSLA 周K 最近20周\n\n作者：asfamilybank · https://github.com/asfamilybank/stock-query\n```\n\n**Command 1：Portfolio 文件管理**：含操作词（添加/新增/删除/移除/修改/查看/列出）＋ 对象词（自选股/持仓/portfolio/watchlist），或明确指令如\"把 AAPL 加到自选股\"\n→ 直接执行 Command 1，**不进入 Command 2/3 流程**\n\n**Command 3：历史行情查询**：含关键词（历史/历史数据/历史行情/历史价格/历史走势/K线/日K/周K/月K）\n→ 直接执行 Command 3，**不进入 Command 2 流程**\n\n**Command 2：行情查询**（默认）：其余所有输入 → 进入 Command 2 流程（执行 Step 1–6）\n\n---\n\n## 静默执行原则（Claude 对话输出约束）\n\n**⛔ 严禁向用户输出任何中间推理或过程信息。** 这是最高优先级约束，覆盖所有步骤。\n\n> 本约束仅适用于 Claude 的对话文本输出。`scripts/sq.sh` stdout 仅输出结构化数据供 Claude 内部消费：行情/基金命令输出 JSON 数组，`pfile` 命令输出文件绝对路径或控制令牌 `NOT_FOUND`；stderr 输出错误/用法提示。`scripts/fmt.sh` 是格式化渲染层，接收 `sq.sh` 的 JSON 输出，输出供用户直接查看的 Markdown 表格（含涨跌 emoji、CJK 对齐、均线列）；其 stdout 为最终展示内容，非过程日志。两个脚本均不向用户界面打印任何过程信息。\n\n以下内容**绝对禁止出现**在回复中：\n- 市场/类型判断（如\"014978 是场外基金\"）\n- 数据源切换说明（如\"腾讯接口返回空，切换至东方财富：\"）\n- 文件路径查找过程\n- 任何形式的\"正在...\"、\"切换...\"、\"尝试...\"等过程性文字\n\n**唯一允许的输出：** 最终结果表格，或无法查询时的错误提示。\n\n---\n\n## Command 1: Portfolio 文件管理\n\n**所有增删改查操作必须通过 Bash 工具执行实际命令，禁止依赖会话记忆。未执行命令不得声称操作已完成。**\n\n### 文件定位（每次进入 Command 1 必须首先执行）\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\necho \"$PFILE\"\n```\n\n- 输出 `NOT_FOUND` → 立即向用户输出下方创建引导，停止执行，**不得创建任何替代文件**\n- 否则将 `$PFILE` 用于所有后续操作\n\n**portfolio.csv 不存在时**，引导用户创建：\n```\n未找到自选股文件。请执行以下步骤创建：\n\n1. 复制模板文件（路径替换为你的实际安装目录）：\n   cp ~/.openclaw/workspace/skills/stock-query/assets/portfolio.csv \\\n      ~/.openclaw/workspace/skills/stock-query/portfolio.csv\n\n2. 编辑文件，填入你的自选股信息。\n```\n\n**CSV 文件格式**（参考 `assets/portfolio.csv`）：\n\n```\n代码,名称,数量,自选价格\n601991,大唐发电,1000,4.00   # 含数量与参考价，输出浮盈亏\n014978,华安纳指100C,10000,  # 自选价格留空：只查行情\nAAPL,,50,220.00             # 名称留空：自动从接口获取\n000300,,0,                  # 数量为 0：纯自选\n```\n\n### 查\n\n```bash\ngrep -v '^#' \"$PFILE\" | tail -n +2\n```\n\n格式化为表格展示，不查询实时行情。如需实时价格，使用 Command 2。\n\n### 增\n\n1. 用 `bash scripts/sq.sh get <code>` 获取标的名称\n2. 执行：\n```bash\nif grep -q \"^{code},\" \"$PFILE\" 2>/dev/null; then\n  echo \"DUPLICATE:{code}\"\nelse\n  echo \"{code},{name},{shares},{cost}\" >> \"$PFILE\" && echo \"ADDED:{code},{name},{shares},{cost}\"\nfi\n```\n3. `ADDED:...` → 展示添加结果；`DUPLICATE:{code}` → 询问是否改为修改操作\n\n### 改\n\n1. 用 `bash scripts/sq.sh get <code>` 获取最新名称\n2. 执行：\n```bash\nOLD=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$OLD\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  NEW=\"{code},{name},{shares},{cost}\"\n  tmp=$(mktemp)\n  awk -F',' -v c=\"{code}\" -v n=\"$NEW\" \\\n    'BEGIN{OFS=\",\"} $1==c{print n;next}{print}' \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"BEFORE:$OLD\"\n  echo \"AFTER:$NEW\"\nfi\n```\n3. 展示修改前后 diff；`NOT_FOUND:{code}` → 提示未找到\n\n### 删\n\n```bash\nDEL=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$DEL\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  tmp=$(mktemp)\n  grep -v \"^{code},\" \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"DELETED:$DEL\"\nfi\n```\n\n`DELETED:...` → 展示删除结果；`NOT_FOUND:{code}` → 提示未找到\n\n---\n\n## Command 2: 行情查询\n\n### Step 1: 解析用户输入\n\n**detail_mode 检测：** 若用户消息含以下关键词，设 `detail_mode = true`，在 Step 3 输出详细表格：\n- 中文：详细、详情、详细信息、更多信息、全部信息、完整信息\n- 英文：detail、details、verbose、full\n\n从用户消息中提取标的代码，支持以下形式：\n- **6 位纯数字** → A 股（股票/ETF/指数/基金）\n- **≤5 位纯数字** → 港股，自动补零（700 → 00700）\n- **英文字母或英文+数字** → 美股 ticker\n- **中文/英文名称** → 匹配下表常见标的；无法确定时向用户确认\n\n常见标的速查：\n\n**A 股：**\n- 黄金ETF → 518880 / 红利低波ETF → 512890 / 沪深300ETF → 510300\n- 卫星ETF → 563230 / 创业板ETF → 159915 / 中证500ETF → 510500\n- 上证指数 → 000001 / 深证成指 → 399001 / 创业板指 → 399006\n- 沪深300 → 000300 / 上证50 → 000016 / 中证500 → 000905 / 中证1000 → 000852\n\n**港股：**\n- 腾讯 → 00700 / 阿里巴巴 → 09988 / 美团 → 03690 / 小米 → 01810\n- 比亚迪 → 01211 / 恒生指数 → HSI\n\n**美股：**\n- 苹果 → AAPL / 谷歌 → GOOG / 特斯拉 → TSLA / 英伟达 → NVDA\n- 微软 → MSFT / 亚马逊 → AMZN / 百度 → BIDU / 阿里巴巴 → BABA\n- 哔哩哔哩 → BILI / 拼多多 → PDD\n- 道琼斯 → .DJI / 纳斯达克 → .IXIC / 标普500 → .SPX\n\n### Step 2: 查询并格式化输出\n\n```\nStep 2A: 执行命令（不得省略 --format 参数，单支/批量/任意市场均适用）\n  detail_mode = false → bash scripts/sq.sh get <code1> [code2 ...] --format table\n  detail_mode = true  → bash scripts/sq.sh get <code1> [code2 ...] --format detail\n\nStep 2B: 将命令的 stdout 原样作为回复返回\n  ⛔ 不得解析 JSON 自行构建表格\n  ⛔ 不得修改 emoji 字符（A股/港股：涨🔴跌🟢；美股：涨🟩跌🟥）\n  ⛔ 不得添加、删除或重排列\n```\n\n**⛔ 特别注意：港股跌幅用 🟢（非 🔴）。** A股、港股均遵循中国市场惯例：上涨 🔴，下跌 🟢，平盘 ⚪。命令输出已正确处理，勿覆盖。\n\n### Step 4: 自选市值计算（可选）\n\n#### 4a. 从 portfolio 文件加载\n\n当用户指令涉及自选股（如\"查我的自选股\"\"看下自选股\"），先定位文件再批量查询：\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\n```\n\n- 输出 `NOT_FOUND` → 立即输出创建引导（见 Command 1），停止执行\n- 否则读取文件，提取所有代码后用 `sq get` 批量查询\n\n执行步骤（严格按序）：\n\n```\nStep A: 读取全部条目\n  codes_all      = 文件中所有非注释、非表头行\n  codes_position = codes_all 中数量 > 0 的条目\n  codes_watch    = codes_all 中数量 = 0 或空的条目\n\nStep B: 批量查询\n  bash scripts/sq.sh get <codes_all 中所有代码>\n\nStep C: 输出自选市值表（若 codes_position 非空）\n  横向宽表格：代码/名称/数量/自选价格/现价/市值/浮盈亏/盈亏比\n\nStep D: 输出自选行情表（若 codes_watch 非空）← 必须执行，不得省略\n  标题\"自选行情\"，简表：代码/名称/现价/涨跌幅\n```\n\n**⚠️ Step D 不得跳过。** 数量=0 的条目不进市值表，但必须出现在 Step D。\n\n输出示例：\n\n```\n| 代码   | 名称     | 数量    | 自选价格 | 现价    | 市值      | 浮盈/亏      | 盈亏比      |\n|--------|---------|--------|---------|--------|----------|------------|------------|\n| 601991 | 大唐发电 | 1000股 | 4.00    | 4.08   | 4,080    | 🔴 +80     | 🔴 +2.00% |\n| AAPL   | 苹果     | 50股   | 220.00  | 246.63 | 12,332   | 🟩 +1,332  | 🟩 +12.10%|\n\n自选行情\n| 代码   | 名称    | 现价     | 涨跌幅      |\n|--------|--------|---------|------------|\n| 000300 | 沪深300 | 4509.24 | 🔴 +0.38% |\n| .DJI   | 道琼斯  | 45216.14| 🟩 +0.11% |\n```\n\n#### 4b. 用户手动提供自选信息\n\n用 `sq get` 查询后，**必须使用横向宽表格，禁止使用竖向键值对格式**：\n\n```\n| 代码   | 名称      | 数量   | 自选价格 | 最新价  | 市值       | 浮盈/亏        | 盈亏比         |\n|--------|----------|--------|---------|--------|-----------|--------------|--------------|\n| 600519 | 贵州茅台  | 100股  | 1680.0  | 1725.0 | 172,500   | 🔴 +4,500    | 🔴 +2.68%   |\n| AAPL   | 苹果      | 50股   | 220.0   | 251.49 | 12,574.50 | 🟩 +1,574.50 | 🟩 +14.31%  |\n```\n\n汇总行：\n```\n📊 自选合计：市值 185,074.50 | 总参考成本 179,000 | 浮盈 +6,074.50（+3.39%）\n```\n\n浮盈亏 emoji 遵循市场规则（A股/港股：盈利🔴亏损🟢；美股：盈利🟩亏损🟥）。跨市场汇总时提示用户各币种分开统计。\n\nCSV 解析规则：`#` 开头为注释，第一个非注释行为表头，名称列为空时从查询结果自动填充，自选价格为空时浮盈亏显示 `—`。\n\n---\n\n## Command 3: 历史行情查询\n\n### 意图解析\n\n从用户输入中提取以下参数（均可省略，使用默认值）：\n\n**标的代码**：同 Step 1 规则。\n\n**周期**（默认 day）：\n| 用户表述 | 参数 |\n|---------|------|\n| 日/天/日K/daily | `--period day` |\n| 周/周K/weekly | `--period week` |\n| 月/月K/monthly | `--period month` |\n\n**数量/区间**：\n- \"近N天/周/月\"、\"最近N条\"、\"过去N\" → `--count N`\n- \"从 YYYY-MM-DD 到 YYYY-MM-DD\"、\"2024年1月到3月\" → `--start ... --end ...`（转为 YYYY-MM-DD 格式）\n- 未指定 → 默认 30 条\n\n**复权**（默认前复权）：\n| 用户表述 | 参数 |\n|---------|------|\n| 前复权（默认） | `--fq pre` |\n| 后复权 | `--fq post` |\n| 不复权/原始价格 | `--fq none` |\n\n### 数据获取与格式化输出\n\n```bash\nbash scripts/sq.sh hist <code> [--period day|week|month] [--count N] [--start YYYY-MM-DD] [--end YYYY-MM-DD] [--fq pre|post|none] --format table\n```\n\n直接执行上述命令，将输出原样呈现给用户。`--format table` 已内置所有格式化逻辑：倒序 K 线表格、标题行（标的/周期/复权/条数）、区间统计、emoji 涨跌规则、成交量单位换算。\n\n---\n\n## 交易时间参考\n\n| 市场 | 交易时段（当地时间） | 时区 |\n|------|-------------------|------|\n| A 股/ETF | 工作日 09:30-11:30, 13:00-15:00 | UTC+8 |\n| 场外基金估值 | 工作日 09:30-15:00 | UTC+8 |\n| 港股 | 工作日 09:30-12:00, 13:00-16:00 | UTC+8 |\n| 美股 | 工作日 09:30-16:00（北京时间 夏令时 21:30-04:00） | UTC-4/-5 |\n| QDII 基金 | 净值 T+2 至 T+7 公布 | — |\n\nFile v2.4.1:_meta.json\n\n{\n  \"ownerId\": \"kn722wj47zb7qme4e79tqwyg5582tfyp\",\n  \"slug\": \"stock-query\",\n  \"version\": \"2.4.1\",\n  \"publishedAt\": 1775206514638\n}\n\nFile v2.4.1:skill.yaml\n\nname: stock-query\nversion: 2.4.1\nauthor: asfamilybank\ndescription: >\n  查询全球主要市场股票实时行情：A 股、港股、美股，以及 ETF、场外基金、主要指数，支持批量查询、自选市值计算与个股历史K线（含 MA5/MA10/MA20/MA60 均线）。\n  同时支持在用户显式指令下通过内联 bash 命令管理本地 portfolio.csv 自选股文件（增/删/改/查），文件仅含股票代码、名称、数量、自选价格，禁止存放账户凭证或密钥。\n  需要：curl（行情 API 请求）、iconv（GBK→UTF-8 转码）。\n  文件访问：仅限 portfolio.csv，固定在默认安装目录（~/.openclaw/workspace/skills/stock-query/ 或 ~/.claude/skills/stock-query/）下查找，不访问其他系统文件。\n  网络访问：仅限 qt.gtimg.cn、hq.sinajs.cn、push2.eastmoney.com、web.ifzq.gtimg.cn、push2his.eastmoney.com、fundgz.1234567.com.cn、api.fund.eastmoney.com 七个行情数据源。\n  Use when: 用户提到\"查股价\"\"查净值\"\"行情\"\"最新价\"\"自选市值\"\"实时价格\"\"大盘\"\"指数\"\"港股\"\"美股\"等。\n  NOT for: 加密货币、期货、期权、外汇。\nemoji: \"📈\"\nrequires:\n  bins: [curl, iconv, python3]\n  os: [darwin, linux]\nlicense: MIT\nrepository: https://github.com/asfamilybank/stock-query\n\npermissions:\n  - network  # 用途：curl 调用行情 API（仅限 qt.gtimg.cn / hq.sinajs.cn / push2.eastmoney.com / web.ifzq.gtimg.cn / push2his.eastmoney.com / fundgz.1234567.com.cn / api.fund.eastmoney.com）\n  - shell    # 用途：执行 curl、iconv 转码、grep/awk 文件操作（仅操作 portfolio.csv，不执行任意命令）\n\nentryPoint:\n  type: natural\n  prompt: |\n    你是一个全球股票行情查询助手。根据 SKILL.md 中的工作流程，\n    识别用户提供的标的代码（包括 A 股、港股、美股、ETF、基金及指数），\n    调用腾讯财经接口查询行情，A 股失败时回退新浪接口。\n    所有腾讯和新浪接口的 curl 响应必须通过 iconv -f GBK -t UTF-8 转码。\n\ntriggers:\n  keywords:\n    - \"查股价\"\n    - \"查行情\"\n    - \"查指数\"\n    - \"大盘\"\n    - \"上证指数\"\n    - \"查净值\"\n    - \"最新价\"\n    - \"stock price\"\n    - \"实时价格\"\n    - \"自选市值\"\n    - \"基金估值\"\n    - \"港股\"\n    - \"美股\"\n    - \"纳斯达克\"\n    - \"道琼斯\"\n    - \"恒生指数\"\n\nArchive v2.4.0: 7 files, 24937 bytes\n\nFiles: assets/portfolio.csv (2015b), scripts/fmt.sh (10533b), scripts/portfolio.sh (3784b), scripts/sq.sh (38052b), SKILL.md (15136b), skill.yaml (2364b), _meta.json (130b)\n\nFile v2.4.0:SKILL.md\n\n---\nname: stock-query\nversion: 2.4.0\ndescription: >\n  查询全球主要市场股票实时行情（A 股、港股、美股、ETF、场外基金、主要指数），支持批量查询、持仓市值计算与个股历史K线。\n  同时支持在用户显式指令下管理本地 portfolio.csv 自选股/持仓文件（增/删/改/查）；文件仅含股票代码、名称、持仓、成本价，禁止存放账户凭证或密钥。\n  需要 shell 权限执行：curl（行情 API 请求）、iconv（GBK→UTF-8 转码）、grep/awk/mktemp（文件操作，仅限 portfolio.csv）。\n  文件访问：仅限 portfolio.csv 一个文件，固定在默认安装目录（~/.openclaw/workspace/skills/stock-query/ 或 ~/.claude/skills/stock-query/）下查找，无需配置任何环境变量。\n  网络访问：仅限 qt.gtimg.cn、hq.sinajs.cn、push2.eastmoney.com、web.ifzq.gtimg.cn、push2his.eastmoney.com、fundgz.1234567.com.cn、api.fund.eastmoney.com 七个行情数据源。\n  TRIGGER when: 用户要求查看股价、行情、净值、持仓盈亏、大盘指数、历史走势/K线，或管理自选股/持仓文件时，直接调用，无需等待斜杠命令。\n  NOT for: 加密货币、期货、期权、外汇。\n  用法：/stock-query AAPL 00700 601991\nuser-invocable: true\nallowed-tools:\n  - Bash\n---\n\n# 全球股票/ETF/基金/指数 实时价格查询\n\n## 权限与操作范围\n\n| 权限 | 声明用途 | 限制 |\n|------|---------|------|\n| `network` | `scripts/sq.sh` 内部调用行情 API | 仅限 `qt.gtimg.cn`、`hq.sinajs.cn`、`push2.eastmoney.com`、`web.ifzq.gtimg.cn`、`push2his.eastmoney.com`、`fundgz.1234567.com.cn`、`api.fund.eastmoney.com` 七个数据源，不发送用户个人数据 |\n| `shell` | 执行 `curl`、`iconv`、`grep`、`awk`、`mktemp` | 仅操作 `portfolio.csv`；不执行任意命令 |\n\n**文件访问：** 本 skill 仅在用户**显式指令**下读写 `portfolio.csv` 一个文件，固定在默认安装目录（`~/.openclaw/workspace/skills/stock-query/` 或 `~/.claude/skills/stock-query/`）下查找，无需配置任何环境变量。历史数据通过网络实时获取，不写本地文件。\n\n**自动触发范围：** **文件操作（Command 1）不会自动触发**，仅在用户明确发出增/删/改/查 portfolio 指令时执行。\n\n⚠️ **凭证安全：** `portfolio.csv` 仅应包含股票代码、名称、持仓数量、成本价。**禁止存放账户密码、API 密钥、Token 或任何认证凭证。**\n\n## 前置依赖\n\n| 工具 | 说明 |\n|------|------|\n| `scripts/sq.sh` | 行情查询 CLI，内部使用 `curl` + `iconv` |\n| `scripts/fmt.sh` | 格式化输出工具，由 `sq.sh --format` 调用，依赖 `python3`，输出人类可读的 Markdown 表格 |\n\n## 支持的市场与标的\n\n| 市场 | 代码格式 | 示例 |\n|------|---------|------|\n| 沪/深市股票、ETF、指数 | 6 位数字 | `601991`、`510300`、`000001` |\n| 港股 | ≤5 位数字（自动补零） | `700`、`00700`、`09988` |\n| 美股 | 英文 ticker | `AAPL`、`TSLA`、`BIDU` |\n| 美股指数 | `.DJI` / `.IXIC` / `.SPX` | `.DJI` |\n| 场外基金 | 6 位数字 | `014978`、`110011` |\n\n---\n\n## 工作流程\n\n### Step 0: 意图识别与 Command 路由\n\n**Meta 命令**（最高优先级）：输入为 `version`、`-v`、`--version`、`help`、`-h`、`--help`（大小写不敏感）\n→ 直接输出版本/帮助信息，**不执行后续步骤**\n\nversion 输出：\n```\nstock-query v2.4.0\n```\n\nhelp 输出：\n```\nstock-query v2.4.0 — 全球股票/ETF/基金/指数实时行情查询\n\n用法：\n  /stock-query <代码> [代码2 ...]   查询一个或多个标的实时行情\n  /stock-query <代码> 历史          查询个股历史K线（默认近30个交易日）\n  /stock-query version              显示版本号\n  /stock-query help                 显示本帮助\n\n支持的市场：\n  A股（沪/深）  6位数字，如 601991 000001\n  港股          5位数字，如 00700 09988\n  美股          英文ticker，如 AAPL TSLA NVDA\n  美股指数      .DJI  .IXIC  .SPX\n  ETF           6位数字，如 510300 159915\n  场外基金      6位数字，如 014978\n\n常用示例：\n  /stock-query AAPL\n  /stock-query 00700 09988\n  /stock-query AAPL 00700 601991 510300\n  /stock-query 600519 近60天日K\n  /stock-query TSLA 周K 最近20周\n\n作者：asfamilybank · https://github.com/asfamilybank/stock-query\n```\n\n**Command 1：Portfolio 文件管理**：含操作词（添加/新增/删除/移除/修改/查看/列出）＋ 对象词（自选股/持仓/portfolio/watchlist），或明确指令如\"把 AAPL 加到自选股\"\n→ 直接执行 Command 1，**不进入 Command 2/3 流程**\n\n**Command 3：历史行情查询**：含关键词（历史/历史数据/历史行情/历史价格/历史走势/K线/日K/周K/月K）\n→ 直接执行 Command 3，**不进入 Command 2 流程**\n\n**Command 2：行情查询**（默认）：其余所有输入 → 进入 Command 2 流程（执行 Step 1–6）\n\n---\n\n## 静默执行原则（Claude 对话输出约束）\n\n**⛔ 严禁向用户输出任何中间推理或过程信息。** 这是最高优先级约束，覆盖所有步骤。\n\n> 本约束仅适用于 Claude 的对话文本输出。`scripts/sq.sh` stdout 仅输出结构化数据供 Claude 内部消费：行情/基金命令输出 JSON 数组，`pfile` 命令输出文件绝对路径或控制令牌 `NOT_FOUND`；stderr 输出错误/用法提示。`scripts/fmt.sh` 是格式化渲染层，接收 `sq.sh` 的 JSON 输出，输出供用户直接查看的 Markdown 表格（含涨跌 emoji、CJK 对齐、均线列）；其 stdout 为最终展示内容，非过程日志。两个脚本均不向用户界面打印任何过程信息。\n\n以下内容**绝对禁止出现**在回复中：\n- 市场/类型判断（如\"014978 是场外基金\"）\n- 数据源切换说明（如\"腾讯接口返回空，切换至东方财富：\"）\n- 文件路径查找过程\n- 任何形式的\"正在...\"、\"切换...\"、\"尝试...\"等过程性文字\n\n**唯一允许的输出：** 最终结果表格，或无法查询时的错误提示。\n\n---\n\n## Command 1: Portfolio 文件管理\n\n**所有增删改查操作必须通过 Bash 工具执行实际命令，禁止依赖会话记忆。未执行命令不得声称操作已完成。**\n\n### 文件定位（每次进入 Command 1 必须首先执行）\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\necho \"$PFILE\"\n```\n\n- 输出 `NOT_FOUND` → 立即向用户输出下方创建引导，停止执行，**不得创建任何替代文件**\n- 否则将 `$PFILE` 用于所有后续操作\n\n**portfolio.csv 不存在时**，引导用户创建：\n```\n未找到自选股文件。请执行以下步骤创建：\n\n1. 复制模板文件（路径替换为你的实际安装目录）：\n   cp ~/.openclaw/workspace/skills/stock-query/assets/portfolio.csv \\\n      ~/.openclaw/workspace/skills/stock-query/portfolio.csv\n\n2. 编辑文件，填入你的自选股和持仓信息。\n```\n\n**CSV 文件格式**（参考 `assets/portfolio.csv`）：\n\n```\n代码,名称,持仓,成本价\n601991,大唐发电,1000,4.00   # 含持仓与成本，输出浮盈亏\n014978,华安纳指100C,10000,  # 成本价留空：只查行情\nAAPL,,50,220.00             # 名称留空：自动从接口获取\n000300,,0,                  # 持仓为 0：纯自选\n```\n\n### 查\n\n```bash\ngrep -v '^#' \"$PFILE\" | tail -n +2\n```\n\n格式化为表格展示，不查询实时行情。如需实时价格，使用 Command 2。\n\n### 增\n\n1. 用 `bash scripts/sq.sh get <code>` 获取标的名称\n2. 执行：\n```bash\nif grep -q \"^{code},\" \"$PFILE\" 2>/dev/null; then\n  echo \"DUPLICATE:{code}\"\nelse\n  echo \"{code},{name},{shares},{cost}\" >> \"$PFILE\" && echo \"ADDED:{code},{name},{shares},{cost}\"\nfi\n```\n3. `ADDED:...` → 展示添加结果；`DUPLICATE:{code}` → 询问是否改为修改操作\n\n### 改\n\n1. 用 `bash scripts/sq.sh get <code>` 获取最新名称\n2. 执行：\n```bash\nOLD=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$OLD\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  NEW=\"{code},{name},{shares},{cost}\"\n  tmp=$(mktemp)\n  awk -F',' -v c=\"{code}\" -v n=\"$NEW\" \\\n    'BEGIN{OFS=\",\"} $1==c{print n;next}{print}' \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"BEFORE:$OLD\"\n  echo \"AFTER:$NEW\"\nfi\n```\n3. 展示修改前后 diff；`NOT_FOUND:{code}` → 提示未找到\n\n### 删\n\n```bash\nDEL=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$DEL\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  tmp=$(mktemp)\n  grep -v \"^{code},\" \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"DELETED:$DEL\"\nfi\n```\n\n`DELETED:...` → 展示删除结果；`NOT_FOUND:{code}` → 提示未找到\n\n---\n\n## Command 2: 行情查询\n\n### Step 1: 解析用户输入\n\n**detail_mode 检测：** 若用户消息含以下关键词，设 `detail_mode = true`，在 Step 3 输出详细表格：\n- 中文：详细、详情、详细信息、更多信息、全部信息、完整信息\n- 英文：detail、details、verbose、full\n\n从用户消息中提取标的代码，支持以下形式：\n- **6 位纯数字** → A 股（股票/ETF/指数/基金）\n- **≤5 位纯数字** → 港股，自动补零（700 → 00700）\n- **英文字母或英文+数字** → 美股 ticker\n- **中文/英文名称** → 匹配下表常见标的；无法确定时向用户确认\n\n常见标的速查：\n\n**A 股：**\n- 黄金ETF → 518880 / 红利低波ETF → 512890 / 沪深300ETF → 510300\n- 卫星ETF → 563230 / 创业板ETF → 159915 / 中证500ETF → 510500\n- 上证指数 → 000001 / 深证成指 → 399001 / 创业板指 → 399006\n- 沪深300 → 000300 / 上证50 → 000016 / 中证500 → 000905 / 中证1000 → 000852\n\n**港股：**\n- 腾讯 → 00700 / 阿里巴巴 → 09988 / 美团 → 03690 / 小米 → 01810\n- 比亚迪 → 01211 / 恒生指数 → HSI\n\n**美股：**\n- 苹果 → AAPL / 谷歌 → GOOG / 特斯拉 → TSLA / 英伟达 → NVDA\n- 微软 → MSFT / 亚马逊 → AMZN / 百度 → BIDU / 阿里巴巴 → BABA\n- 哔哩哔哩 → BILI / 拼多多 → PDD\n- 道琼斯 → .DJI / 纳斯达克 → .IXIC / 标普500 → .SPX\n\n### Step 2: 查询并格式化输出\n\n```\nStep 2A: 执行命令（不得省略 --format 参数，单支/批量/任意市场均适用）\n  detail_mode = false → bash scripts/sq.sh get <code1> [code2 ...] --format table\n  detail_mode = true  → bash scripts/sq.sh get <code1> [code2 ...] --format detail\n\nStep 2B: 将命令的 stdout 原样作为回复返回\n  ⛔ 不得解析 JSON 自行构建表格\n  ⛔ 不得修改 emoji 字符（A股/港股：涨🔴跌🟢；美股：涨🟩跌🟥）\n  ⛔ 不得添加、删除或重排列\n```\n\n**⛔ 特别注意：港股跌幅用 🟢（非 🔴）。** A股、港股均遵循中国市场惯例：上涨 🔴，下跌 🟢，平盘 ⚪。命令输出已正确处理，勿覆盖。\n\n### Step 4: 持仓市值计算（可选）\n\n#### 4a. 从 portfolio 文件加载\n\n当用户指令涉及持仓/自选股（如\"查我的持仓\"\"看下自选股\"），先定位文件再批量查询：\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\n```\n\n- 输出 `NOT_FOUND` → 立即输出创建引导（见 Command 1），停止执行\n- 否则读取文件，提取所有代码后用 `sq get` 批量查询\n\n执行步骤（严格按序）：\n\n```\nStep A: 读取全部条目\n  codes_all      = 文件中所有非注释、非表头行\n  codes_position = codes_all 中持仓 > 0 的条目\n  codes_watch    = codes_all 中持仓 = 0 或空的条目\n\nStep B: 批量查询\n  bash scripts/sq.sh get <codes_all 中所有代码>\n\nStep C: 输出持仓市值表（若 codes_position 非空）\n  横向宽表格：代码/名称/持仓/成本价/现价/市值/浮盈亏/盈亏比\n\nStep D: 输出自选行情表（若 codes_watch 非空）← 必须执行，不得省略\n  标题\"自选行情\"，简表：代码/名称/现价/涨跌幅\n```\n\n**⚠️ Step D 不得跳过。** 持仓=0 的条目不进市值表，但必须出现在 Step D。\n\n输出示例：\n\n```\n| 代码   | 名称     | 持仓    | 成本价  | 现价    | 市值      | 浮盈/亏      | 盈亏比      |\n|--------|---------|--------|--------|--------|----------|------------|------------|\n| 601991 | 大唐发电 | 1000股 | 4.00   | 4.08   | 4,080    | 🔴 +80     | 🔴 +2.00% |\n| AAPL   | 苹果     | 50股   | 220.00 | 246.63 | 12,332   | 🟩 +1,332  | 🟩 +12.10%|\n\n自选行情\n| 代码   | 名称    | 现价     | 涨跌幅      |\n|--------|--------|---------|------------|\n| 000300 | 沪深300 | 4509.24 | 🔴 +0.38% |\n| .DJI   | 道琼斯  | 45216.14| 🟩 +0.11% |\n```\n\n#### 4b. 用户手动提供持仓信息\n\n用 `sq get` 查询后，**必须使用横向宽表格，禁止使用竖向键值对格式**：\n\n```\n| 代码   | 名称      | 持仓   | 成本价  | 最新价  | 市值       | 浮盈/亏        | 盈亏比         |\n|--------|----------|--------|--------|--------|-----------|--------------|--------------|\n| 600519 | 贵州茅台  | 100股  | 1680.0 | 1725.0 | 172,500   | 🔴 +4,500    | 🔴 +2.68%   |\n| AAPL   | 苹果      | 50股   | 220.0  | 251.49 | 12,574.50 | 🟩 +1,574.50 | 🟩 +14.31%  |\n```\n\n汇总行：\n```\n📊 持仓合计：市值 185,074.50 | 总成本 179,000 | 浮盈 +6,074.50（+3.39%）\n```\n\n浮盈亏 emoji 遵循市场规则（A股/港股：盈利🔴亏损🟢；美股：盈利🟩亏损🟥）。跨市场汇总时提示用户各币种分开统计。\n\nCSV 解析规则：`#` 开头为注释，第一个非注释行为表头，名称列为空时从查询结果自动填充，成本价为空时浮盈亏显示 `—`。\n\n---\n\n## Command 3: 历史行情查询\n\n### 意图解析\n\n从用户输入中提取以下参数（均可省略，使用默认值）：\n\n**标的代码**：同 Step 1 规则。\n\n**周期**（默认 day）：\n| 用户表述 | 参数 |\n|---------|------|\n| 日/天/日K/daily | `--period day` |\n| 周/周K/weekly | `--period week` |\n| 月/月K/monthly | `--period month` |\n\n**数量/区间**：\n- \"近N天/周/月\"、\"最近N条\"、\"过去N\" → `--count N`\n- \"从 YYYY-MM-DD 到 YYYY-MM-DD\"、\"2024年1月到3月\" → `--start ... --end ...`（转为 YYYY-MM-DD 格式）\n- 未指定 → 默认 30 条\n\n**复权**（默认前复权）：\n| 用户表述 | 参数 |\n|---------|------|\n| 前复权（默认） | `--fq pre` |\n| 后复权 | `--fq post` |\n| 不复权/原始价格 | `--fq none` |\n\n### 数据获取与格式化输出\n\n```bash\nbash scripts/sq.sh hist <code> [--period day|week|month] [--count N] [--start YYYY-MM-DD] [--end YYYY-MM-DD] [--fq pre|post|none] --format table\n```\n\n直接执行上述命令，将输出原样呈现给用户。`--format table` 已内置所有格式化逻辑：倒序 K 线表格、标题行（标的/周期/复权/条数）、区间统计、emoji 涨跌规则、成交量单位换算。\n\n---\n\n## 交易时间参考\n\n| 市场 | 交易时段（当地时间） | 时区 |\n|------|-------------------|------|\n| A 股/ETF | 工作日 09:30-11:30, 13:00-15:00 | UTC+8 |\n| 场外基金估值 | 工作日 09:30-15:00 | UTC+8 |\n| 港股 | 工作日 09:30-12:00, 13:00-16:00 | UTC+8 |\n| 美股 | 工作日 09:30-16:00（北京时间 夏令时 21:30-04:00） | UTC-4/-5 |\n| QDII 基金 | 净值 T+2 至 T+7 公布 | — |\n\nFile v2.4.0:_meta.json\n\n{\n  \"ownerId\": \"kn722wj47zb7qme4e79tqwyg5582tfyp\",\n  \"slug\": \"stock-query\",\n  \"version\": \"2.4.0\",\n  \"publishedAt\": 1775204912869\n}\n\nFile v2.4.0:skill.yaml\n\nname: stock-query\nversion: 2.4.0\nauthor: asfamilybank\ndescription: >\n  查询全球主要市场股票实时行情：A 股、港股、美股，以及 ETF、场外基金、主要指数，支持批量查询、持仓市值计算与个股历史K线（含 MA5/MA10/MA20/MA60 均线）。\n  同时支持在用户显式指令下通过内联 bash 命令管理本地 portfolio.csv 自选股/持仓文件（增/删/改/查），文件仅含股票代码、名称、持仓、成本价，禁止存放账户凭证或密钥。\n  需要：curl（行情 API 请求）、iconv（GBK→UTF-8 转码）。\n  文件访问：仅限 portfolio.csv，固定在默认安装目录（~/.openclaw/workspace/skills/stock-query/ 或 ~/.claude/skills/stock-query/）下查找，不访问其他系统文件。\n  网络访问：仅限 qt.gtimg.cn、hq.sinajs.cn、push2.eastmoney.com、web.ifzq.gtimg.cn、push2his.eastmoney.com、fundgz.1234567.com.cn、api.fund.eastmoney.com 七个行情数据源。\n  Use when: 用户提到\"查股价\"\"查净值\"\"行情\"\"最新价\"\"持仓市值\"\"实时价格\"\"大盘\"\"指数\"\"港股\"\"美股\"等。\n  NOT for: 加密货币、期货、期权、外汇。\nemoji: \"📈\"\nrequires:\n  bins: [curl, iconv, python3]\n  os: [darwin, linux]\nlicense: MIT\nrepository: https://github.com/asfamilybank/stock-query\n\npermissions:\n  - network  # 用途：curl 调用行情 API（仅限 qt.gtimg.cn / hq.sinajs.cn / push2.eastmoney.com / web.ifzq.gtimg.cn / push2his.eastmoney.com / fundgz.1234567.com.cn / api.fund.eastmoney.com）\n  - shell    # 用途：执行 curl、iconv 转码、grep/awk 文件操作（仅操作 portfolio.csv，不执行任意命令）\n\nentryPoint:\n  type: natural\n  prompt: |\n    你是一个全球股票行情查询助手。根据 SKILL.md 中的工作流程，\n    识别用户提供的标的代码（包括 A 股、港股、美股、ETF、基金及指数），\n    调用腾讯财经接口查询行情，A 股失败时回退新浪接口。\n    所有腾讯和新浪接口的 curl 响应必须通过 iconv -f GBK -t UTF-8 转码。\n\ntriggers:\n  keywords:\n    - \"查股价\"\n    - \"查行情\"\n    - \"查指数\"\n    - \"大盘\"\n    - \"上证指数\"\n    - \"查净值\"\n    - \"最新价\"\n    - \"stock price\"\n    - \"实时价格\"\n    - \"持仓市值\"\n    - \"基金估值\"\n    - \"港股\"\n    - \"美股\"\n    - \"纳斯达克\"\n    - \"道琼斯\"\n    - \"恒生指数\"\n\nArchive v2.3.8: 6 files, 18334 bytes\n\nFiles: assets/portfolio.csv (2015b), scripts/portfolio.sh (3784b), scripts/sq.sh (24625b), SKILL.md (16620b), skill.yaml (2211b), _meta.json (130b)\n\nFile v2.3.8:SKILL.md\n\n---\nname: stock-query\nversion: 2.3.8\ndescription: >\n  查询全球主要市场股票实时行情（A 股、港股、美股、ETF、场外基金、主要指数），支持批量查询与持仓市值计算。\n  同时支持在用户显式指令下管理本地 portfolio.csv 自选股/持仓文件（增/删/改/查）；文件仅含股票代码、名称、持仓、成本价，禁止存放账户凭证或密钥。\n  需要 shell 权限执行：curl（行情 API 请求）、iconv（GBK→UTF-8 转码）、grep/awk/mktemp（文件操作，仅限 portfolio.csv）。\n  文件访问：仅限 portfolio.csv 一个文件，固定在默认安装目录（~/.openclaw/workspace/skills/stock-query/ 或 ~/.claude/skills/stock-query/）下查找，无需配置任何环境变量。\n  网络访问：仅限 qt.gtimg.cn、hq.sinajs.cn、push2.eastmoney.com、fundgz.1234567.com.cn、api.fund.eastmoney.com 五个行情数据源。\n  TRIGGER when: 用户要求查看股价、行情、净值、持仓盈亏、大盘指数，或管理自选股/持仓文件时，直接调用，无需等待斜杠命令。\n  NOT for: 加密货币、期货、期权、外汇。\n  用法：/stock-query AAPL 00700 601991\nuser-invocable: true\nallowed-tools:\n  - Bash\n---\n\n# 全球股票/ETF/基金/指数 实时价格查询\n\n## 权限与操作范围\n\n| 权限 | 声明用途 | 限制 |\n|------|---------|------|\n| `network` | `scripts/sq.sh` 内部调用行情 API | 仅限 `qt.gtimg.cn`、`hq.sinajs.cn`、`push2.eastmoney.com`、`fundgz.1234567.com.cn`、`api.fund.eastmoney.com` 五个数据源，不发送用户个人数据 |\n| `shell` | 执行 `curl`、`iconv`、`grep`、`awk`、`mktemp` | 仅操作 `portfolio.csv`；不执行任意命令 |\n\n**文件访问：** 本 skill 仅在用户**显式指令**下读写 `portfolio.csv` 一个文件，固定在默认安装目录（`~/.openclaw/workspace/skills/stock-query/` 或 `~/.claude/skills/stock-query/`）下查找，无需配置任何环境变量。\n\n**自动触发范围：** **文件操作（Command 1）不会自动触发**，仅在用户明确发出增/删/改/查 portfolio 指令时执行。\n\n⚠️ **凭证安全：** `portfolio.csv` 仅应包含股票代码、名称、持仓数量、成本价。**禁止存放账户密码、API 密钥、Token 或任何认证凭证。**\n\n## 前置依赖\n\n| 工具 | 说明 |\n|------|------|\n| `scripts/sq.sh` | 行情查询 CLI，内部使用 `curl` + `iconv` |\n\n## 支持的市场与标的\n\n| 市场 | 代码格式 | 示例 |\n|------|---------|------|\n| 沪/深市股票、ETF、指数 | 6 位数字 | `601991`、`510300`、`000001` |\n| 港股 | ≤5 位数字（自动补零） | `700`、`00700`、`09988` |\n| 美股 | 英文 ticker | `AAPL`、`TSLA`、`BIDU` |\n| 美股指数 | `.DJI` / `.IXIC` / `.SPX` | `.DJI` |\n| 场外基金 | 6 位数字 | `014978`、`110011` |\n\n---\n\n## 工作流程\n\n### Step 0: 意图识别与 Command 路由\n\n**Meta 命令**（最高优先级）：输入为 `version`、`-v`、`--version`、`help`、`-h`、`--help`（大小写不敏感）\n→ 直接输出版本/帮助信息，**不执行后续步骤**\n\nversion 输出：\n```\nstock-query v2.3.8\n```\n\nhelp 输出：\n```\nstock-query v2.3.8 — 全球股票/ETF/基金/指数实时行情查询\n\n用法：\n  /stock-query <代码> [代码2 ...]   查询一个或多个标的\n  /stock-query version              显示版本号\n  /stock-query help                 显示本帮助\n\n支持的市场：\n  A股（沪/深）  6位数字，如 601991 000001\n  港股          5位数字，如 00700 09988\n  美股          英文ticker，如 AAPL TSLA NVDA\n  美股指数      .DJI  .IXIC  .SPX\n  ETF           6位数字，如 510300 159915\n  场外基金      6位数字，如 014978\n\n常用示例：\n  /stock-query AAPL\n  /stock-query 00700 09988\n  /stock-query AAPL 00700 601991 510300\n\n作者：asfamilybank · https://github.com/asfamilybank/stock-query\n```\n\n**Command 1：Portfolio 文件管理**：含操作词（添加/新增/删除/移除/修改/查看/列出）＋ 对象词（自选股/持仓/portfolio/watchlist），或明确指令如\"把 AAPL 加到自选股\"\n→ 直接执行 Command 1，**不进入 Command 2 流程**\n\n**Command 2：行情查询**（默认）：其余所有输入 → 进入 Command 2 流程（执行 Step 1–6）\n\n---\n\n## 静默执行原则（Claude 对话输出约束）\n\n**⛔ 严禁向用户输出任何中间推理或过程信息。** 这是最高优先级约束，覆盖所有步骤。\n\n> 本约束仅适用于 Claude 的对话文本输出。`scripts/sq.sh` stdout 仅输出结构化数据供 Claude 内部消费：行情/基金命令输出 JSON 数组，`pfile` 命令输出文件绝对路径或控制令牌 `NOT_FOUND`；stderr 输出错误/用法提示。脚本不向用户界面打印任何过程信息。\n\n以下内容**绝对禁止出现**在回复中：\n- 市场/类型判断（如\"014978 是场外基金\"）\n- 数据源切换说明（如\"腾讯接口返回空，切换至东方财富：\"）\n- 文件路径查找过程\n- 任何形式的\"正在...\"、\"切换...\"、\"尝试...\"等过程性文字\n\n**唯一允许的输出：** 最终结果表格，或无法查询时的错误提示。\n\n---\n\n## Command 2: 行情查询\n\n### Step 1: 解析用户输入\n\n**detail_mode 检测：** 若用户消息含以下关键词，设 `detail_mode = true`，在 Step 3 输出详细表格：\n- 中文：详细、详情、详细信息、更多信息、全部信息、完整信息\n- 英文：detail、details、verbose、full\n\n从用户消息中提取标的代码，支持以下形式：\n- **6 位纯数字** → A 股（股票/ETF/指数/基金）\n- **≤5 位纯数字** → 港股，自动补零（700 → 00700）\n- **英文字母或英文+数字** → 美股 ticker\n- **中文/英文名称** → 匹配下表常见标的；无法确定时向用户确认\n\n常见标的速查：\n\n**A 股：**\n- 黄金ETF → 518880 / 红利低波ETF → 512890 / 沪深300ETF → 510300\n- 卫星ETF → 563230 / 创业板ETF → 159915 / 中证500ETF → 510500\n- 上证指数 → 000001 / 深证成指 → 399001 / 创业板指 → 399006\n- 沪深300 → 000300 / 上证50 → 000016 / 中证500 → 000905 / 中证1000 → 000852\n\n**港股：**\n- 腾讯 → 00700 / 阿里巴巴 → 09988 / 美团 → 03690 / 小米 → 01810\n- 比亚迪 → 01211 / 恒生指数 → HSI\n\n**美股：**\n- 苹果 → AAPL / 谷歌 → GOOG / 特斯拉 → TSLA / 英伟达 → NVDA\n- 微软 → MSFT / 亚马逊 → AMZN / 百度 → BIDU / 阿里巴巴 → BABA\n- 哔哩哔哩 → BILI / 拼多多 → PDD\n- 道琼斯 → .DJI / 纳斯达克 → .IXIC / 标普500 → .SPX\n\n### Step 2: 查询实时行情\n\n对所有代码执行一次批量查询：\n\n```bash\nbash scripts/sq.sh get <code1> [code2 ...]\n```\n\n输出为 JSON 数组，每个对象字段如下：\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `code` | string | 用户输入代码 |\n| `name` | string | 标的名称 |\n| `market` | string | `A股` / `港股` / `美股` / `基金` |\n| `type` | string | `stock` / `etf` / `index` / `fund` |\n| `currency` | string | `CNY` / `HKD` / `USD` |\n| `price` | number | 最新价 |\n| `prev_close` | number\\|null | 昨收 |\n| `open` | number\\|null | 今开 |\n| `high` | number\\|null | 最高 |\n| `low` | number\\|null | 最低 |\n| `change` | number\\|null | 涨跌额 |\n| `change_pct` | number\\|null | 涨跌幅（正=涨，负=跌，单位%） |\n| `direction` | string | `up` / `down` / `flat` |\n| `volume` | number\\|null | 成交量（A股/港股单位手，美股单位股）；展示时 A股/港股 ÷10000 显示为「X.X万手」，美股保留原始整数 |\n| `amount` | number\\|null | 成交额（万元，A股有效） |\n| `turnover` | number\\|null | 换手率 %（A股/港股有效） |\n| `pe` | number\\|null | 市盈率（A股有效） |\n| `week52_high` | number\\|null | 52周最高 |\n| `week52_low` | number\\|null | 52周最低 |\n| `datetime` | string\\|null | 行情时间（YYYY-MM-DD HH:MM:SS） |\n| `is_estimate` | boolean | 基金：true=今日估算净值 |\n| `nav_date` | string\\|null | 基金：净值日期 |\n| `is_qdii` | boolean | 基金：是否QDII（净值有延迟） |\n| `error` | string\\|null | 查询失败原因，成功时为 null |\n\n### Step 3: 格式化输出\n\n根据 JSON 结果构造 Markdown 表格。`error` 非 null 的条目单独提示。\n\n#### 3a. 标准模式（默认）\n\n```\n| 代码    | 名称          | 市场  | 最新价    | 昨收      | 涨跌幅          | 最高      | 最低      | 币种 | 更新时间            |\n|---------|--------------|-------|----------|----------|----------------|----------|----------|------|-------------------|\n| 000001  | 上证指数      | A股   | 3874.39  | 3812.77  | 🔴 +1.60%      | 3881.20  | 3850.10  | CNY  | 2026-03-24 15:00  |\n| 00700   | 腾讯控股      | 港股  | 511.000  | 498.200  | 🔴 +2.53%      | 515.000  | 498.000  | HKD  | 2026-03-24 16:00  |\n| AAPL    | 苹果          | 美股  | 251.49   | 248.02   | 🟩 +1.41%      | 254.60   | 250.28   | USD  | 2026-03-23 16:00  |\n| 014978  | 华安纳指100C  | 基金  | 6.8897   | —        | 🟢 -1.43%（估） | —        | —        | CNY  | 2026-03-24 15:00  |\n```\n\n#### 3b. 详细模式（`detail_mode = true`）\n\n**必须使用横向宽表格，禁止使用竖向键值对格式。**\n\n```\n| 代码   | 名称     | 市场 | 最新价  | 昨收    | 今开    | 涨跌幅      | 涨跌额  | 最高    | 最低    | 成交量     | 成交额    | 换手率  | 市盈率PE | 52W最高 | 52W最低 | 币种 | 更新时间           |\n|--------|---------|------|--------|--------|--------|------------|--------|--------|--------|----------|---------|--------|---------|--------|--------|------|------------------|\n| 601991 | 大唐发电 | A股  | 4.21   | 4.03   | 4.05   | 🔴 +4.47%  | +0.18  | 4.25   | 4.06   | 12.3万手  | 5,200万 | 1.23%  | 18.50   | 5.10   | 3.20   | CNY  | 2026-03-24 15:00 |\n| AAPL   | 苹果     | 美股 | 251.49 | 248.02 | 249.00 | 🟩 +1.41%  | +3.47  | 254.60 | 250.28 | 58,234,000| —       | —      | —       | 260.10 | 164.08 | USD  | 2026-03-23 16:00 |\n```\n\n**涨跌标识规则（逐行独立判断，不受其他行影响）：**\n\n| 市场 | 上涨 | 下跌 | 平盘 |\n|------|------|------|------|\n| A股 / 港股 | 🔴 `+X.XX%` | 🟢 `-X.XX%` | ⚪ `0.00%` |\n| 美股 | 🟩 `+X.XX%` | 🟥 `-X.XX%` | ⚪ `0.00%` |\n\n使用 `direction` 字段判断涨跌，`market` 字段决定 emoji 色系。\n\n**其他输出规则：**\n- `null` 字段显示 `—`\n- 成交量：A股/港股 `volume ÷ 10000`，保留1位小数，显示为「X.X万手」；美股显示原始整数（无单位）\n- 价格保留原始小数位数\n- 基金 `is_estimate=true` → 涨跌幅后加 `（估）`；`is_estimate=false` → 加 `（净值）`\n- `is_qdii=true` → 表格下方加注：`⏳ QDII基金，净值公布有 T+2~T+7 延迟`\n- 非交易时段 → 表格下方加注：`⏸ 非交易时段，显示上一交易日收盘数据`\n\n### Step 4: 持仓市值计算（可选）\n\n#### 4a. 从 portfolio 文件加载\n\n当用户指令涉及持仓/自选股（如\"查我的持仓\"\"看下自选股\"），先定位文件再批量查询：\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\n```\n\n- 输出 `NOT_FOUND` → 立即输出创建引导（见 Command 1），停止执行\n- 否则读取文件，提取所有代码后用 `sq get` 批量查询\n\n执行步骤（严格按序）：\n\n```\nStep A: 读取全部条目\n  codes_all      = 文件中所有非注释、非表头行\n  codes_position = codes_all 中持仓 > 0 的条目\n  codes_watch    = codes_all 中持仓 = 0 或空的条目\n\nStep B: 批量查询\n  bash scripts/sq.sh get <codes_all 中所有代码>\n\nStep C: 输出持仓市值表（若 codes_position 非空）\n  横向宽表格：代码/名称/持仓/成本价/现价/市值/浮盈亏/盈亏比\n\nStep D: 输出自选行情表（若 codes_watch 非空）← 必须执行，不得省略\n  标题\"自选行情\"，简表：代码/名称/现价/涨跌幅\n```\n\n**⚠️ Step D 不得跳过。** 持仓=0 的条目不进市值表，但必须出现在 Step D。\n\n输出示例：\n\n```\n| 代码   | 名称     | 持仓    | 成本价  | 现价    | 市值      | 浮盈/亏      | 盈亏比      |\n|--------|---------|--------|--------|--------|----------|------------|------------|\n| 601991 | 大唐发电 | 1000股 | 4.00   | 4.08   | 4,080    | 🔴 +80     | 🔴 +2.00% |\n| AAPL   | 苹果     | 50股   | 220.00 | 246.63 | 12,332   | 🟩 +1,332  | 🟩 +12.10%|\n\n自选行情\n| 代码   | 名称    | 现价     | 涨跌幅      |\n|--------|--------|---------|------------|\n| 000300 | 沪深300 | 4509.24 | 🔴 +0.38% |\n| .DJI   | 道琼斯  | 45216.14| 🟩 +0.11% |\n```\n\n#### 4b. 用户手动提供持仓信息\n\n用 `sq get` 查询后，**必须使用横向宽表格，禁止使用竖向键值对格式**：\n\n```\n| 代码   | 名称      | 持仓   | 成本价  | 最新价  | 市值       | 浮盈/亏        | 盈亏比         |\n|--------|----------|--------|--------|--------|-----------|--------------|--------------|\n| 600519 | 贵州茅台  | 100股  | 1680.0 | 1725.0 | 172,500   | 🔴 +4,500    | 🔴 +2.68%   |\n| AAPL   | 苹果      | 50股   | 220.0  | 251.49 | 12,574.50 | 🟩 +1,574.50 | 🟩 +14.31%  |\n```\n\n汇总行：\n```\n📊 持仓合计：市值 185,074.50 | 总成本 179,000 | 浮盈 +6,074.50（+3.39%）\n```\n\n浮盈亏 emoji 遵循市场规则（A股/港股：盈利🔴亏损🟢；美股：盈利🟩亏损🟥）。跨市场汇总时提示用户各币种分开统计。\n\nCSV 解析规则：`#` 开头为注释，第一个非注释行为表头，名称列为空时从查询结果自动填充，成本价为空时浮盈亏显示 `—`。\n\n---\n\n## Command 1: Portfolio 文件管理\n\n**所有增删改查操作必须通过 Bash 工具执行实际命令，禁止依赖会话记忆。未执行命令不得声称操作已完成。**\n\n### 文件定位（每次进入 Command 1 必须首先执行）\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\necho \"$PFILE\"\n```\n\n- 输出 `NOT_FOUND` → 立即向用户输出下方创建引导，停止执行，**不得创建任何替代文件**\n- 否则将 `$PFILE` 用于所有后续操作\n\n**portfolio.csv 不存在时**，引导用户创建：\n```\n未找到自选股文件。请执行以下步骤创建：\n\n1. 复制模板文件（路径替换为你的实际安装目录）：\n   cp ~/.openclaw/workspace/skills/stock-query/assets/portfolio.csv \\\n      ~/.openclaw/workspace/skills/stock-query/portfolio.csv\n\n2. 编辑文件，填入你的自选股和持仓信息。\n```\n\n**CSV 文件格式**（参考 `assets/portfolio.csv`）：\n\n```\n代码,名称,持仓,成本价\n601991,大唐发电,1000,4.00   # 含持仓与成本，输出浮盈亏\n014978,华安纳指100C,10000,  # 成本价留空：只查行情\nAAPL,,50,220.00             # 名称留空：自动从接口获取\n000300,,0,                  # 持仓为 0：纯自选\n```\n\n### 查\n\n```bash\ngrep -v '^#' \"$PFILE\" | tail -n +2\n```\n\n格式化为表格展示，不查询实时行情。如需实时价格，使用 Command 2。\n\n### 增\n\n1. 用 `bash scripts/sq.sh get <code>` 获取标的名称\n2. 执行：\n```bash\nif grep -q \"^{code},\" \"$PFILE\" 2>/dev/null; then\n  echo \"DUPLICATE:{code}\"\nelse\n  echo \"{code},{name},{shares},{cost}\" >> \"$PFILE\" && echo \"ADDED:{code},{name},{shares},{cost}\"\nfi\n```\n3. `ADDED:...` → 展示添加结果；`DUPLICATE:{code}` → 询问是否改为修改操作\n\n### 改\n\n1. 用 `bash scripts/sq.sh get <code>` 获取最新名称\n2. 执行：\n```bash\nOLD=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$OLD\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  NEW=\"{code},{name},{shares},{cost}\"\n  tmp=$(mktemp)\n  awk -F',' -v c=\"{code}\" -v n=\"$NEW\" \\\n    'BEGIN{OFS=\",\"} $1==c{print n;next}{print}' \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"BEFORE:$OLD\"\n  echo \"AFTER:$NEW\"\nfi\n```\n3. 展示修改前后 diff；`NOT_FOUND:{code}` → 提示未找到\n\n### 删\n\n```bash\nDEL=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$DEL\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  tmp=$(mktemp)\n  grep -v \"^{code},\" \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"DELETED:$DEL\"\nfi\n```\n\n`DELETED:...` → 展示删除结果；`NOT_FOUND:{code}` → 提示未找到\n\n---\n\n## 交易时间参考\n\n| 市场 | 交易时段（当地时间） | 时区 |\n|------|-------------------|------|\n| A 股/ETF | 工作日 09:30-11:30, 13:00-15:00 | UTC+8 |\n| 场外基金估值 | 工作日 09:30-15:00 | UTC+8 |\n| 港股 | 工作日 09:30-12:00, 13:00-16:00 | UTC+8 |\n| 美股 | 工作日 09:30-16:00（北京时间 夏令时 21:30-04:00） | UTC-4/-5 |\n| QDII 基金 | 净值 T+2 至 T+7 公布 | — |\n\nFile v2.3.8:_meta.json\n\n{\n  \"ownerId\": \"kn722wj47zb7qme4e79tqwyg5582tfyp\",\n  \"slug\": \"stock-query\",\n  \"version\": \"2.3.8\",\n  \"publishedAt\": 1775107376195\n}\n\nFile v2.3.8:skill.yaml\n\nname: stock-query\nversion: 2.3.8\nauthor: asfamilybank\ndescription: >\n  查询全球主要市场股票实时行情：A 股、港股、美股，以及 ETF、场外基金、主要指数，支持批量查询和持仓市值计算。\n  同时支持在用户显式指令下通过内联 bash 命令管理本地 portfolio.csv 自选股/持仓文件（增/删/改/查），文件仅含股票代码、名称、持仓、成本价，禁止存放账户凭证或密钥。\n  需要：curl（行情 API 请求）、iconv（GBK→UTF-8 转码）。\n  文件访问：仅限 portfolio.csv，固定在默认安装目录（~/.openclaw/workspace/skills/stock-query/ 或 ~/.claude/skills/stock-query/）下查找，不访问其他系统文件。\n  网络访问：仅限 qt.gtimg.cn、hq.sinajs.cn、push2.eastmoney.com、fundgz.1234567.com.cn、api.fund.eastmoney.com 五个行情数据源。\n  Use when: 用户提到\"查股价\"\"查净值\"\"行情\"\"最新价\"\"持仓市值\"\"实时价格\"\"大盘\"\"指数\"\"港股\"\"美股\"等。\n  NOT for: 加密货币、期货、期权、外汇。\nemoji: \"📈\"\nrequires:\n  bins: [curl, iconv]\n  os: [darwin, linux]\nlicense: MIT\nrepository: https://github.com/asfamilybank/stock-query\n\npermissions:\n  - network  # 用途：curl 调用行情 API（仅限 qt.gtimg.cn / hq.sinajs.cn / push2.eastmoney.com / fundgz.1234567.com.cn / api.fund.eastmoney.com）\n  - shell    # 用途：执行 curl、iconv 转码、grep/awk 文件操作（仅操作 portfolio.csv，不执行任意命令）\n\nentryPoint:\n  type: natural\n  prompt: |\n    你是一个全球股票行情查询助手。根据 SKILL.md 中的工作流程，\n    识别用户提供的标的代码（包括 A 股、港股、美股、ETF、基金及指数），\n    调用腾讯财经接口查询行情，A 股失败时回退新浪接口。\n    所有腾讯和新浪接口的 curl 响应必须通过 iconv -f GBK -t UTF-8 转码。\n\ntriggers:\n  keywords:\n    - \"查股价\"\n    - \"查行情\"\n    - \"查指数\"\n    - \"大盘\"\n    - \"上证指数\"\n    - \"查净值\"\n    - \"最新价\"\n    - \"stock price\"\n    - \"实时价格\"\n    - \"持仓市值\"\n    - \"基金估值\"\n    - \"港股\"\n    - \"美股\"\n    - \"纳斯达克\"\n    - \"道琼斯\"\n    - \"恒生指数\"\n\nArchive v2.3.7: 7 files, 21340 bytes\n\nFiles: assets/portfolio.csv (2015b), scripts/portfolio.sh (3784b), scripts/query_price.sh (8456b), scripts/sq.sh (24625b), SKILL.md (16620b), skill.yaml (2211b), _meta.json (130b)\n\nFile v2.3.7:SKILL.md\n\n---\nname: stock-query\nversion: 2.3.7\ndescription: >\n  查询全球主要市场股票实时行情（A 股、港股、美股、ETF、场外基金、主要指数），支持批量查询与持仓市值计算。\n  同时支持在用户显式指令下管理本地 portfolio.csv 自选股/持仓文件（增/删/改/查）；文件仅含股票代码、名称、持仓、成本价，禁止存放账户凭证或密钥。\n  需要 shell 权限执行：curl（行情 API 请求）、iconv（GBK→UTF-8 转码）、grep/awk/mktemp（文件操作，仅限 portfolio.csv）。\n  文件访问：仅限 portfolio.csv 一个文件，固定在默认安装目录（~/.openclaw/workspace/skills/stock-query/ 或 ~/.claude/skills/stock-query/）下查找，无需配置任何环境变量。\n  网络访问：仅限 qt.gtimg.cn、hq.sinajs.cn、push2.eastmoney.com、fundgz.1234567.com.cn、api.fund.eastmoney.com 五个行情数据源。\n  TRIGGER when: 用户要求查看股价、行情、净值、持仓盈亏、大盘指数，或管理自选股/持仓文件时，直接调用，无需等待斜杠命令。\n  NOT for: 加密货币、期货、期权、外汇。\n  用法：/stock-query AAPL 00700 601991\nuser-invocable: true\nallowed-tools:\n  - Bash\n---\n\n# 全球股票/ETF/基金/指数 实时价格查询\n\n## 权限与操作范围\n\n| 权限 | 声明用途 | 限制 |\n|------|---------|------|\n| `network` | `scripts/sq.sh` 内部调用行情 API | 仅限 `qt.gtimg.cn`、`hq.sinajs.cn`、`push2.eastmoney.com`、`fundgz.1234567.com.cn`、`api.fund.eastmoney.com` 五个数据源，不发送用户个人数据 |\n| `shell` | 执行 `curl`、`iconv`、`grep`、`awk`、`mktemp` | 仅操作 `portfolio.csv`；不执行任意命令 |\n\n**文件访问：** 本 skill 仅在用户**显式指令**下读写 `portfolio.csv` 一个文件，固定在默认安装目录（`~/.openclaw/workspace/skills/stock-query/` 或 `~/.claude/skills/stock-query/`）下查找，无需配置任何环境变量。\n\n**自动触发范围：** **文件操作（Command 1）不会自动触发**，仅在用户明确发出增/删/改/查 portfolio 指令时执行。\n\n⚠️ **凭证安全：** `portfolio.csv` 仅应包含股票代码、名称、持仓数量、成本价。**禁止存放账户密码、API 密钥、Token 或任何认证凭证。**\n\n## 前置依赖\n\n| 工具 | 说明 |\n|------|------|\n| `scripts/sq.sh` | 行情查询 CLI，内部使用 `curl` + `iconv` |\n\n## 支持的市场与标的\n\n| 市场 | 代码格式 | 示例 |\n|------|---------|------|\n| 沪/深市股票、ETF、指数 | 6 位数字 | `601991`、`510300`、`000001` |\n| 港股 | ≤5 位数字（自动补零） | `700`、`00700`、`09988` |\n| 美股 | 英文 ticker | `AAPL`、`TSLA`、`BIDU` |\n| 美股指数 | `.DJI` / `.IXIC` / `.SPX` | `.DJI` |\n| 场外基金 | 6 位数字 | `014978`、`110011` |\n\n---\n\n## 工作流程\n\n### Step 0: 意图识别与 Command 路由\n\n**Meta 命令**（最高优先级）：输入为 `version`、`-v`、`--version`、`help`、`-h`、`--help`（大小写不敏感）\n→ 直接输出版本/帮助信息，**不执行后续步骤**\n\nversion 输出：\n```\nstock-query v2.3.7\n```\n\nhelp 输出：\n```\nstock-query v2.3.7 — 全球股票/ETF/基金/指数实时行情查询\n\n用法：\n  /stock-query <代码> [代码2 ...]   查询一个或多个标的\n  /stock-query version              显示版本号\n  /stock-query help                 显示本帮助\n\n支持的市场：\n  A股（沪/深）  6位数字，如 601991 000001\n  港股          5位数字，如 00700 09988\n  美股          英文ticker，如 AAPL TSLA NVDA\n  美股指数      .DJI  .IXIC  .SPX\n  ETF           6位数字，如 510300 159915\n  场外基金      6位数字，如 014978\n\n常用示例：\n  /stock-query AAPL\n  /stock-query 00700 09988\n  /stock-query AAPL 00700 601991 510300\n\n作者：asfamilybank · https://github.com/asfamilybank/stock-query\n```\n\n**Command 1：Portfolio 文件管理**：含操作词（添加/新增/删除/移除/修改/查看/列出）＋ 对象词（自选股/持仓/portfolio/watchlist），或明确指令如\"把 AAPL 加到自选股\"\n→ 直接执行 Command 1，**不进入 Command 2 流程**\n\n**Command 2：行情查询**（默认）：其余所有输入 → 进入 Command 2 流程（执行 Step 1–6）\n\n---\n\n## 静默执行原则（Claude 对话输出约束）\n\n**⛔ 严禁向用户输出任何中间推理或过程信息。** 这是最高优先级约束，覆盖所有步骤。\n\n> 本约束仅适用于 Claude 的对话文本输出。`scripts/sq.sh` stdout 仅输出结构化数据供 Claude 内部消费：行情/基金命令输出 JSON 数组，`pfile` 命令输出文件绝对路径或控制令牌 `NOT_FOUND`；stderr 输出错误/用法提示。脚本不向用户界面打印任何过程信息。\n\n以下内容**绝对禁止出现**在回复中：\n- 市场/类型判断（如\"014978 是场外基金\"）\n- 数据源切换说明（如\"腾讯接口返回空，切换至东方财富：\"）\n- 文件路径查找过程\n- 任何形式的\"正在...\"、\"切换...\"、\"尝试...\"等过程性文字\n\n**唯一允许的输出：** 最终结果表格，或无法查询时的错误提示。\n\n---\n\n## Command 2: 行情查询\n\n### Step 1: 解析用户输入\n\n**detail_mode 检测：** 若用户消息含以下关键词，设 `detail_mode = true`，在 Step 3 输出详细表格：\n- 中文：详细、详情、详细信息、更多信息、全部信息、完整信息\n- 英文：detail、details、verbose、full\n\n从用户消息中提取标的代码，支持以下形式：\n- **6 位纯数字** → A 股（股票/ETF/指数/基金）\n- **≤5 位纯数字** → 港股，自动补零（700 → 00700）\n- **英文字母或英文+数字** → 美股 ticker\n- **中文/英文名称** → 匹配下表常见标的；无法确定时向用户确认\n\n常见标的速查：\n\n**A 股：**\n- 黄金ETF → 518880 / 红利低波ETF → 512890 / 沪深300ETF → 510300\n- 卫星ETF → 563230 / 创业板ETF → 159915 / 中证500ETF → 510500\n- 上证指数 → 000001 / 深证成指 → 399001 / 创业板指 → 399006\n- 沪深300 → 000300 / 上证50 → 000016 / 中证500 → 000905 / 中证1000 → 000852\n\n**港股：**\n- 腾讯 → 00700 / 阿里巴巴 → 09988 / 美团 → 03690 / 小米 → 01810\n- 比亚迪 → 01211 / 恒生指数 → HSI\n\n**美股：**\n- 苹果 → AAPL / 谷歌 → GOOG / 特斯拉 → TSLA / 英伟达 → NVDA\n- 微软 → MSFT / 亚马逊 → AMZN / 百度 → BIDU / 阿里巴巴 → BABA\n- 哔哩哔哩 → BILI / 拼多多 → PDD\n- 道琼斯 → .DJI / 纳斯达克 → .IXIC / 标普500 → .SPX\n\n### Step 2: 查询实时行情\n\n对所有代码执行一次批量查询：\n\n```bash\nbash scripts/sq.sh get <code1> [code2 ...]\n```\n\n输出为 JSON 数组，每个对象字段如下：\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `code` | string | 用户输入代码 |\n| `name` | string | 标的名称 |\n| `market` | string | `A股` / `港股` / `美股` / `基金` |\n| `type` | string | `stock` / `etf` / `index` / `fund` |\n| `currency` | string | `CNY` / `HKD` / `USD` |\n| `price` | number | 最新价 |\n| `prev_close` | number\\|null | 昨收 |\n| `open` | number\\|null | 今开 |\n| `high` | number\\|null | 最高 |\n| `low` | number\\|null | 最低 |\n| `change` | number\\|null | 涨跌额 |\n| `change_pct` | number\\|null | 涨跌幅（正=涨，负=跌，单位%） |\n| `direction` | string | `up` / `down` / `flat` |\n| `volume` | number\\|null | 成交量（A股/港股单位手，美股单位股）；展示时 A股/港股 ÷10000 显示为「X.X万手」，美股保留原始整数 |\n| `amount` | number\\|null | 成交额（万元，A股有效） |\n| `turnover` | number\\|null | 换手率 %（A股/港股有效） |\n| `pe` | number\\|null | 市盈率（A股有效） |\n| `week52_high` | number\\|null | 52周最高 |\n| `week52_low` | number\\|null | 52周最低 |\n| `datetime` | string\\|null | 行情时间（YYYY-MM-DD HH:MM:SS） |\n| `is_estimate` | boolean | 基金：true=今日估算净值 |\n| `nav_date` | string\\|null | 基金：净值日期 |\n| `is_qdii` | boolean | 基金：是否QDII（净值有延迟） |\n| `error` | string\\|null | 查询失败原因，成功时为 null |\n\n### Step 3: 格式化输出\n\n根据 JSON 结果构造 Markdown 表格。`error` 非 null 的条目单独提示。\n\n#### 3a. 标准模式（默认）\n\n```\n| 代码    | 名称          | 市场  | 最新价    | 昨收      | 涨跌幅          | 最高      | 最低      | 币种 | 更新时间            |\n|---------|--------------|-------|----------|----------|----------------|----------|----------|------|-------------------|\n| 000001  | 上证指数      | A股   | 3874.39  | 3812.77  | 🔴 +1.60%      | 3881.20  | 3850.10  | CNY  | 2026-03-24 15:00  |\n| 00700   | 腾讯控股      | 港股  | 511.000  | 498.200  | 🔴 +2.53%      | 515.000  | 498.000  | HKD  | 2026-03-24 16:00  |\n| AAPL    | 苹果          | 美股  | 251.49   | 248.02   | 🟩 +1.41%      | 254.60   | 250.28   | USD  | 2026-03-23 16:00  |\n| 014978  | 华安纳指100C  | 基金  | 6.8897   | —        | 🟢 -1.43%（估） | —        | —        | CNY  | 2026-03-24 15:00  |\n```\n\n#### 3b. 详细模式（`detail_mode = true`）\n\n**必须使用横向宽表格，禁止使用竖向键值对格式。**\n\n```\n| 代码   | 名称     | 市场 | 最新价  | 昨收    | 今开    | 涨跌幅      | 涨跌额  | 最高    | 最低    | 成交量     | 成交额    | 换手率  | 市盈率PE | 52W最高 | 52W最低 | 币种 | 更新时间           |\n|--------|---------|------|--------|--------|--------|------------|--------|--------|--------|----------|---------|--------|---------|--------|--------|------|------------------|\n| 601991 | 大唐发电 | A股  | 4.21   | 4.03   | 4.05   | 🔴 +4.47%  | +0.18  | 4.25   | 4.06   | 12.3万手  | 5,200万 | 1.23%  | 18.50   | 5.10   | 3.20   | CNY  | 2026-03-24 15:00 |\n| AAPL   | 苹果     | 美股 | 251.49 | 248.02 | 249.00 | 🟩 +1.41%  | +3.47  | 254.60 | 250.28 | 58,234,000| —       | —      | —       | 260.10 | 164.08 | USD  | 2026-03-23 16:00 |\n```\n\n**涨跌标识规则（逐行独立判断，不受其他行影响）：**\n\n| 市场 | 上涨 | 下跌 | 平盘 |\n|------|------|------|------|\n| A股 / 港股 | 🔴 `+X.XX%` | 🟢 `-X.XX%` | ⚪ `0.00%` |\n| 美股 | 🟩 `+X.XX%` | 🟥 `-X.XX%` | ⚪ `0.00%` |\n\n使用 `direction` 字段判断涨跌，`market` 字段决定 emoji 色系。\n\n**其他输出规则：**\n- `null` 字段显示 `—`\n- 成交量：A股/港股 `volume ÷ 10000`，保留1位小数，显示为「X.X万手」；美股显示原始整数（无单位）\n- 价格保留原始小数位数\n- 基金 `is_estimate=true` → 涨跌幅后加 `（估）`；`is_estimate=false` → 加 `（净值）`\n- `is_qdii=true` → 表格下方加注：`⏳ QDII基金，净值公布有 T+2~T+7 延迟`\n- 非交易时段 → 表格下方加注：`⏸ 非交易时段，显示上一交易日收盘数据`\n\n### Step 4: 持仓市值计算（可选）\n\n#### 4a. 从 portfolio 文件加载\n\n当用户指令涉及持仓/自选股（如\"查我的持仓\"\"看下自选股\"），先定位文件再批量查询：\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\n```\n\n- 输出 `NOT_FOUND` → 立即输出创建引导（见 Command 1），停止执行\n- 否则读取文件，提取所有代码后用 `sq get` 批量查询\n\n执行步骤（严格按序）：\n\n```\nStep A: 读取全部条目\n  codes_all      = 文件中所有非注释、非表头行\n  codes_position = codes_all 中持仓 > 0 的条目\n  codes_watch    = codes_all 中持仓 = 0 或空的条目\n\nStep B: 批量查询\n  bash scripts/sq.sh get <codes_all 中所有代码>\n\nStep C: 输出持仓市值表（若 codes_position 非空）\n  横向宽表格：代码/名称/持仓/成本价/现价/市值/浮盈亏/盈亏比\n\nStep D: 输出自选行情表（若 codes_watch 非空）← 必须执行，不得省略\n  标题\"自选行情\"，简表：代码/名称/现价/涨跌幅\n```\n\n**⚠️ Step D 不得跳过。** 持仓=0 的条目不进市值表，但必须出现在 Step D。\n\n输出示例：\n\n```\n| 代码   | 名称     | 持仓    | 成本价  | 现价    | 市值      | 浮盈/亏      | 盈亏比      |\n|--------|---------|--------|--------|--------|----------|------------|------------|\n| 601991 | 大唐发电 | 1000股 | 4.00   | 4.08   | 4,080    | 🔴 +80     | 🔴 +2.00% |\n| AAPL   | 苹果     | 50股   | 220.00 | 246.63 | 12,332   | 🟩 +1,332  | 🟩 +12.10%|\n\n自选行情\n| 代码   | 名称    | 现价     | 涨跌幅      |\n|--------|--------|---------|------------|\n| 000300 | 沪深300 | 4509.24 | 🔴 +0.38% |\n| .DJI   | 道琼斯  | 45216.14| 🟩 +0.11% |\n```\n\n#### 4b. 用户手动提供持仓信息\n\n用 `sq get` 查询后，**必须使用横向宽表格，禁止使用竖向键值对格式**：\n\n```\n| 代码   | 名称      | 持仓   | 成本价  | 最新价  | 市值       | 浮盈/亏        | 盈亏比         |\n|--------|----------|--------|--------|--------|-----------|--------------|--------------|\n| 600519 | 贵州茅台  | 100股  | 1680.0 | 1725.0 | 172,500   | 🔴 +4,500    | 🔴 +2.68%   |\n| AAPL   | 苹果      | 50股   | 220.0  | 251.49 | 12,574.50 | 🟩 +1,574.50 | 🟩 +14.31%  |\n```\n\n汇总行：\n```\n📊 持仓合计：市值 185,074.50 | 总成本 179,000 | 浮盈 +6,074.50（+3.39%）\n```\n\n浮盈亏 emoji 遵循市场规则（A股/港股：盈利🔴亏损🟢；美股：盈利🟩亏损🟥）。跨市场汇总时提示用户各币种分开统计。\n\nCSV 解析规则：`#` 开头为注释，第一个非注释行为表头，名称列为空时从查询结果自动填充，成本价为空时浮盈亏显示 `—`。\n\n---\n\n## Command 1: Portfolio 文件管理\n\n**所有增删改查操作必须通过 Bash 工具执行实际命令，禁止依赖会话记忆。未执行命令不得声称操作已完成。**\n\n### 文件定位（每次进入 Command 1 必须首先执行）\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\necho \"$PFILE\"\n```\n\n- 输出 `NOT_FOUND` → 立即向用户输出下方创建引导，停止执行，**不得创建任何替代文件**\n- 否则将 `$PFILE` 用于所有后续操作\n\n**portfolio.csv 不存在时**，引导用户创建：\n```\n未找到自选股文件。请执行以下步骤创建：\n\n1. 复制模板文件（路径替换为你的实际安装目录）：\n   cp ~/.openclaw/workspace/skills/stock-query/assets/portfolio.csv \\\n      ~/.openclaw/workspace/skills/stock-query/portfolio.csv\n\n2. 编辑文件，填入你的自选股和持仓信息。\n```\n\n**CSV 文件格式**（参考 `assets/portfolio.csv`）：\n\n```\n代码,名称,持仓,成本价\n601991,大唐发电,1000,4.00   # 含持仓与成本，输出浮盈亏\n014978,华安纳指100C,10000,  # 成本价留空：只查行情\nAAPL,,50,220.00             # 名称留空：自动从接口获取\n000300,,0,                  # 持仓为 0：纯自选\n```\n\n### 查\n\n```bash\ngrep -v '^#' \"$PFILE\" | tail -n +2\n```\n\n格式化为表格展示，不查询实时行情。如需实时价格，使用 Command 2。\n\n### 增\n\n1. 用 `bash scripts/sq.sh get <code>` 获取标的名称\n2. 执行：\n```bash\nif grep -q \"^{code},\" \"$PFILE\" 2>/dev/null; then\n  echo \"DUPLICATE:{code}\"\nelse\n  echo \"{code},{name},{shares},{cost}\" >> \"$PFILE\" && echo \"ADDED:{code},{name},{shares},{cost}\"\nfi\n```\n3. `ADDED:...` → 展示添加结果；`DUPLICATE:{code}` → 询问是否改为修改操作\n\n### 改\n\n1. 用 `bash scripts/sq.sh get <code>` 获取最新名称\n2. 执行：\n```bash\nOLD=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$OLD\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  NEW=\"{code},{name},{shares},{cost}\"\n  tmp=$(mktemp)\n  awk -F',' -v c=\"{code}\" -v n=\"$NEW\" \\\n    'BEGIN{OFS=\",\"} $1==c{print n;next}{print}' \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"BEFORE:$OLD\"\n  echo \"AFTER:$NEW\"\nfi\n```\n3. 展示修改前后 diff；`NOT_FOUND:{code}` → 提示未找到\n\n### 删\n\n```bash\nDEL=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$DEL\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  tmp=$(mktemp)\n  grep -v \"^{code},\" \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"DELETED:$DEL\"\nfi\n```\n\n`DELETED:...` → 展示删除结果；`NOT_FOUND:{code}` → 提示未找到\n\n---\n\n## 交易时间参考\n\n| 市场 | 交易时段（当地时间） | 时区 |\n|------|-------------------|------|\n| A 股/ETF | 工作日 09:30-11:30, 13:00-15:00 | UTC+8 |\n| 场外基金估值 | 工作日 09:30-15:00 | UTC+8 |\n| 港股 | 工作日 09:30-12:00, 13:00-16:00 | UTC+8 |\n| 美股 | 工作日 09:30-16:00（北京时间 夏令时 21:30-04:00） | UTC-4/-5 |\n| QDII 基金 | 净值 T+2 至 T+7 公布 | — |\n\nFile v2.3.7:_meta.json\n\n{\n  \"ownerId\": \"kn722wj47zb7qme4e79tqwyg5582tfyp\",\n  \"slug\": \"stock-query\",\n  \"version\": \"2.3.7\",\n  \"publishedAt\": 1775102027801\n}\n\nFile v2.3.7:skill.yaml\n\nname: stock-query\nversion: 2.3.7\nauthor: asfamilybank\ndescription: >\n  查询全球主要市场股票实时行情：A 股、港股、美股，以及 ETF、场外基金、主要指数，支持批量查询和持仓市值计算。\n  同时支持在用户显式指令下通过内联 bash 命令管理本地 portfolio.csv 自选股/持仓文件（增/删/改/查），文件仅含股票代码、名称、持仓、成本价，禁止存放账户凭证或密钥。\n  需要：curl（行情 API 请求）、iconv（GBK→UTF-8 转码）。\n  文件访问：仅限 portfolio.csv，固定在默认安装目录（~/.openclaw/workspace/skills/stock-query/ 或 ~/.claude/skills/stock-query/）下查找，不访问其他系统文件。\n  网络访问：仅限 qt.gtimg.cn、hq.sinajs.cn、push2.eastmoney.com、fundgz.1234567.com.cn、api.fund.eastmoney.com 五个行情数据源。\n  Use when: 用户提到\"查股价\"\"查净值\"\"行情\"\"最新价\"\"持仓市值\"\"实时价格\"\"大盘\"\"指数\"\"港股\"\"美股\"等。\n  NOT for: 加密货币、期货、期权、外汇。\nemoji: \"📈\"\nrequires:\n  bins: [curl, iconv]\n  os: [darwin, linux]\nlicense: MIT\nrepository: https://github.com/asfamilybank/stock-query\n\npermissions:\n  - network  # 用途：curl 调用行情 API（仅限 qt.gtimg.cn / hq.sinajs.cn / push2.eastmoney.com / fundgz.1234567.com.cn / api.fund.eastmoney.com）\n  - shell    # 用途：执行 curl、iconv 转码、grep/awk 文件操作（仅操作 portfolio.csv，不执行任意命令）\n\nentryPoint:\n  type: natural\n  prompt: |\n    你是一个全球股票行情查询助手。根据 SKILL.md 中的工作流程，\n    识别用户提供的标的代码（包括 A 股、港股、美股、ETF、基金及指数），\n    调用腾讯财经接口查询行情，A 股失败时回退新浪接口。\n    所有腾讯和新浪接口的 curl 响应必须通过 iconv -f GBK -t UTF-8 转码。\n\ntriggers:\n  keywords:\n    - \"查股价\"\n    - \"查行情\"\n    - \"查指数\"\n    - \"大盘\"\n    - \"上证指数\"\n    - \"查净值\"\n    - \"最新价\"\n    - \"stock price\"\n    - \"实时价格\"\n    - \"持仓市值\"\n    - \"基金估值\"\n    - \"港股\"\n    - \"美股\"\n    - \"纳斯达克\"\n    - \"道琼斯\"\n    - \"恒生指数\"\n\nArchive v2.3.6: 7 files, 21589 bytes\n\nFiles: assets/portfolio.csv (2015b), scripts/portfolio.sh (3784b), scripts/query_price.sh (8456b), scripts/sq.sh (24858b), SKILL.md (16770b), skill.yaml (2283b), _meta.json (130b)\n\nFile v2.3.6:SKILL.md\n\n---\nname: stock-query\nversion: 2.3.6\ndescription: >\n  查询全球主要市场股票实时行情（A 股、港股、美股、ETF、场外基金、主要指数），支持批量查询与持仓市值计算。\n  同时支持在用户显式指令下管理本地 portfolio.csv 自选股/持仓文件（增/删/改/查）；文件仅含股票代码、名称、持仓、成本价，禁止存放账户凭证或密钥。\n  需要 shell 权限执行：curl（行情 API 请求）、iconv（GBK→UTF-8 转码）、grep/awk/mktemp（文件操作，仅限 portfolio.csv）。\n  文件访问：仅限 portfolio.csv 一个文件（固定在默认安装目录下查找，无需配置任何环境变量）；路径含 token/secret/.ssh 等凭证关键词时自动拒绝操作。\n  网络访问：仅限 qt.gtimg.cn、hq.sinajs.cn、push2.eastmoney.com、fundgz.1234567.com.cn、api.fund.eastmoney.com 五个行情数据源。\n  TRIGGER when: 用户要求查看股价、行情、净值、持仓盈亏、大盘指数，或管理自选股/持仓文件时，直接调用，无需等待斜杠命令。\n  NOT for: 加密货币、期货、期权、外汇。\n  用法：/stock-query AAPL 00700 601991\nuser-invocable: true\nallowed-tools:\n  - Bash\n---\n\n# 全球股票/ETF/基金/指数 实时价格查询\n\n## 权限与操作范围\n\n| 权限 | 声明用途 | 限制 |\n|------|---------|------|\n| `network` | `scripts/sq.sh` 内部调用行情 API | 仅限 `qt.gtimg.cn`、`hq.sinajs.cn`、`push2.eastmoney.com`、`fundgz.1234567.com.cn`、`api.fund.eastmoney.com` 五个数据源，不发送用户个人数据 |\n| `shell` | 执行 `curl`、`iconv`、`grep`、`awk`、`mktemp` | 仅操作 `portfolio.csv`；不执行任意命令 |\n\n**文件访问：** 本 skill 仅在用户**显式指令**下读写 `portfolio.csv` 一个文件，固定在默认安装目录（`~/.openclaw/workspace/skills/stock-query/` 或 `~/.claude/skills/stock-query/`）下查找，无需配置任何环境变量。\n\n**自动触发范围：** **文件操作（Command 1）不会自动触发**，仅在用户明确发出增/删/改/查 portfolio 指令时执行。\n\n⚠️ **凭证安全：** `portfolio.csv` 仅应包含股票代码、名称、持仓数量、成本价。**禁止存放账户密码、API 密钥、Token 或任何认证凭证。**\n\n## 前置依赖\n\n| 工具 | 说明 |\n|------|------|\n| `scripts/sq.sh` | 行情查询 CLI，内部使用 `curl` + `iconv` |\n\n## 支持的市场与标的\n\n| 市场 | 代码格式 | 示例 |\n|------|---------|------|\n| 沪/深市股票、ETF、指数 | 6 位数字 | `601991`、`510300`、`000001` |\n| 港股 | ≤5 位数字（自动补零） | `700`、`00700`、`09988` |\n| 美股 | 英文 ticker | `AAPL`、`TSLA`、`BIDU` |\n| 美股指数 | `.DJI` / `.IXIC` / `.SPX` | `.DJI` |\n| 场外基金 | 6 位数字 | `014978`、`110011` |\n\n---\n\n## 工作流程\n\n### Step 0: 意图识别与 Command 路由\n\n**Meta 命令**（最高优先级）：输入为 `version`、`-v`、`--version`、`help`、`-h`、`--help`（大小写不敏感）\n→ 直接输出版本/帮助信息，**不执行后续步骤**\n\nversion 输出：\n```\nstock-query v2.3.6\n```\n\nhelp 输出：\n```\nstock-query v2.3.6 — 全球股票/ETF/基金/指数实时行情查询\n\n用法：\n  /stock-query <代码> [代码2 ...]   查询一个或多个标的\n  /stock-query version              显示版本号\n  /stock-query help                 显示本帮助\n\n支持的市场：\n  A股（沪/深）  6位数字，如 601991 000001\n  港股          5位数字，如 00700 09988\n  美股          英文ticker，如 AAPL TSLA NVDA\n  美股指数      .DJI  .IXIC  .SPX\n  ETF           6位数字，如 510300 159915\n  场外基金      6位数字，如 014978\n\n常用示例：\n  /stock-query AAPL\n  /stock-query 00700 09988\n  /stock-query AAPL 00700 601991 510300\n\n作者：asfamilybank · https://github.com/asfamilybank/stock-query\n```\n\n**Command 1：Portfolio 文件管理**：含操作词（添加/新增/删除/移除/修改/查看/列出）＋ 对象词（自选股/持仓/portfolio/watchlist），或明确指令如\"把 AAPL 加到自选股\"\n→ 直接执行 Command 1，**不进入 Command 2 流程**\n\n**Command 2：行情查询**（默认）：其余所有输入 → 进入 Command 2 流程（执行 Step 1–6）\n\n---\n\n## 静默执行原则（Claude 对话输出约束）\n\n**⛔ 严禁向用户输出任何中间推理或过程信息。** 这是最高优先级约束，覆盖所有步骤。\n\n> 本约束仅适用于 Claude 的对话文本输出。`scripts/sq.sh` 仅向 stdout 输出结构化 JSON 数据（由 Claude 内部消费），向 stderr 输出错误/用法提示，不向用户界面打印任何过程信息。\n\n以下内容**绝对禁止出现**在回复中：\n- 市场/类型判断（如\"014978 是场外基金\"）\n- 数据源切换说明（如\"腾讯接口返回空，切换至东方财富：\"）\n- 文件路径查找过程\n- 任何形式的\"正在...\"、\"切换...\"、\"尝试...\"等过程性文字\n\n**唯一允许的输出：** 最终结果表格，或无法查询时的错误提示。\n\n---\n\n## Command 2: 行情查询\n\n### Step 1: 解析用户输入\n\n**detail_mode 检测：** 若用户消息含以下关键词，设 `detail_mode = true`，在 Step 3 输出详细表格：\n- 中文：详细、详情、详细信息、更多信息、全部信息、完整信息\n- 英文：detail、details、verbose、full\n\n从用户消息中提取标的代码，支持以下形式：\n- **6 位纯数字** → A 股（股票/ETF/指数/基金）\n- **≤5 位纯数字** → 港股，自动补零（700 → 00700）\n- **英文字母或英文+数字** → 美股 ticker\n- **中文/英文名称** → 匹配下表常见标的；无法确定时向用户确认\n\n常见标的速查：\n\n**A 股：**\n- 黄金ETF → 518880 / 红利低波ETF → 512890 / 沪深300ETF → 510300\n- 卫星ETF → 563230 / 创业板ETF → 159915 / 中证500ETF → 510500\n- 上证指数 → 000001 / 深证成指 → 399001 / 创业板指 → 399006\n- 沪深300 → 000300 / 上证50 → 000016 / 中证500 → 000905 / 中证1000 → 000852\n\n**港股：**\n- 腾讯 → 00700 / 阿里巴巴 → 09988 / 美团 → 03690 / 小米 → 01810\n- 比亚迪 → 01211 / 恒生指数 → HSI\n\n**美股：**\n- 苹果 → AAPL / 谷歌 → GOOG / 特斯拉 → TSLA / 英伟达 → NVDA\n- 微软 → MSFT / 亚马逊 → AMZN / 百度 → BIDU / 阿里巴巴 → BABA\n- 哔哩哔哩 → BILI / 拼多多 → PDD\n- 道琼斯 → .DJI / 纳斯达克 → .IXIC / 标普500 → .SPX\n\n### Step 2: 查询实时行情\n\n对所有代码执行一次批量查询：\n\n```bash\nbash scripts/sq.sh get <code1> [code2 ...]\n```\n\n输出为 JSON 数组，每个对象字段如下：\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `code` | string | 用户输入代码 |\n| `name` | string | 标的名称 |\n| `market` | string | `A股` / `港股` / `美股` / `基金` |\n| `type` | string | `stock` / `etf` / `index` / `fund` |\n| `currency` | string | `CNY` / `HKD` / `USD` |\n| `price` | number | 最新价 |\n| `prev_close` | number\\|null | 昨收 |\n| `open` | number\\|null | 今开 |\n| `high` | number\\|null | 最高 |\n| `low` | number\\|null | 最低 |\n| `change` | number\\|null | 涨跌额 |\n| `change_pct` | number\\|null | 涨跌幅（正=涨，负=跌，单位%） |\n| `direction` | string | `up` / `down` / `flat` |\n| `volume` | number\\|null | 成交量（A股/港股单位手，美股单位股）；展示时 A股/港股 ÷10000 显示为「X.X万手」，美股保留原始整数 |\n| `amount` | number\\|null | 成交额（万元，A股有效） |\n| `turnover` | number\\|null | 换手率 %（A股/港股有效） |\n| `pe` | number\\|null | 市盈率（A股有效） |\n| `week52_high` | number\\|null | 52周最高 |\n| `week52_low` | number\\|null | 52周最低 |\n| `datetime` | string\\|null | 行情时间（YYYY-MM-DD HH:MM:SS） |\n| `is_estimate` | boolean | 基金：true=今日估算净值 |\n| `nav_date` | string\\|null | 基金：净值日期 |\n| `is_qdii` | boolean | 基金：是否QDII（净值有延迟） |\n| `error` | string\\|null | 查询失败原因，成功时为 null |\n\n### Step 3: 格式化输出\n\n根据 JSON 结果构造 Markdown 表格。`error` 非 null 的条目单独提示。\n\n#### 3a. 标准模式（默认）\n\n```\n| 代码    | 名称          | 市场  | 最新价    | 昨收      | 涨跌幅          | 最高      | 最低      | 币种 | 更新时间            |\n|---------|--------------|-------|----------|----------|----------------|----------|----------|------|-------------------|\n| 000001  | 上证指数      | A股   | 3874.39  | 3812.77  | 🔴 +1.60%      | 3881.20  | 3850.10  | CNY  | 2026-03-24 15:00  |\n| 00700   | 腾讯控股      | 港股  | 511.000  | 498.200  | 🔴 +2.53%      | 515.000  | 498.000  | HKD  | 2026-03-24 16:00  |\n| AAPL    | 苹果          | 美股  | 251.49   | 248.02   | 🟩 +1.41%      | 254.60   | 250.28   | USD  | 2026-03-23 16:00  |\n| 014978  | 华安纳指100C  | 基金  | 6.8897   | —        | 🟢 -1.43%（估） | —        | —        | CNY  | 2026-03-24 15:00  |\n```\n\n#### 3b. 详细模式（`detail_mode = true`）\n\n**必须使用横向宽表格，禁止使用竖向键值对格式。**\n\n```\n| 代码   | 名称     | 市场 | 最新价  | 昨收    | 今开    | 涨跌幅      | 涨跌额  | 最高    | 最低    | 成交量     | 成交额    | 换手率  | 市盈率PE | 52W最高 | 52W最低 | 币种 | 更新时间           |\n|--------|---------|------|--------|--------|--------|------------|--------|--------|--------|----------|---------|--------|---------|--------|--------|------|------------------|\n| 601991 | 大唐发电 | A股  | 4.21   | 4.03   | 4.05   | 🔴 +4.47%  | +0.18  | 4.25   | 4.06   | 12.3万手  | 5,200万 | 1.23%  | 18.50   | 5.10   | 3.20   | CNY  | 2026-03-24 15:00 |\n| AAPL   | 苹果     | 美股 | 251.49 | 248.02 | 249.00 | 🟩 +1.41%  | +3.47  | 254.60 | 250.28 | 58,234,000| —       | —      | —       | 260.10 | 164.08 | USD  | 2026-03-23 16:00 |\n```\n\n**涨跌标识规则（逐行独立判断，不受其他行影响）：**\n\n| 市场 | 上涨 | 下跌 | 平盘 |\n|------|------|------|------|\n| A股 / 港股 | 🔴 `+X.XX%` | 🟢 `-X.XX%` | ⚪ `0.00%` |\n| 美股 | 🟩 `+X.XX%` | 🟥 `-X.XX%` | ⚪ `0.00%` |\n\n使用 `direction` 字段判断涨跌，`market` 字段决定 emoji 色系。\n\n**其他输出规则：**\n- `null` 字段显示 `—`\n- 成交量：A股/港股 `volume ÷ 10000`，保留1位小数，显示为「X.X万手」；美股显示原始整数（无单位）\n- 价格保留原始小数位数\n- 基金 `is_estimate=true` → 涨跌幅后加 `（估）`；`is_estimate=false` → 加 `（净值）`\n- `is_qdii=true` → 表格下方加注：`⏳ QDII基金，净值公布有 T+2~T+7 延迟`\n- 非交易时段 → 表格下方加注：`⏸ 非交易时段，显示上一交易日收盘数据`\n\n### Step 4: 持仓市值计算（可选）\n\n#### 4a. 从 portfolio 文件加载\n\n当用户指令涉及持仓/自选股（如\"查我的持仓\"\"看下自选股\"），先定位文件再批量查询：\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\n```\n\n- 输出 `NOT_FOUND` → 立即输出创建引导（见 Command 1），停止执行\n- 输出 `PATH_REJECTED` → 提示\"路径包含疑似凭证关键词，已拒绝操作\"，停止执行\n- 否则读取文件，提取所有代码后用 `sq get` 批量查询\n\n执行步骤（严格按序）：\n\n```\nStep A: 读取全部条目\n  codes_all      = 文件中所有非注释、非表头行\n  codes_position = codes_all 中持仓 > 0 的条目\n  codes_watch    = codes_all 中持仓 = 0 或空的条目\n\nStep B: 批量查询\n  bash scripts/sq.sh get <codes_all 中所有代码>\n\nStep C: 输出持仓市值表（若 codes_position 非空）\n  横向宽表格：代码/名称/持仓/成本价/现价/市值/浮盈亏/盈亏比\n\nStep D: 输出自选行情表（若 codes_watch 非空）← 必须执行，不得省略\n  标题\"自选行情\"，简表：代码/名称/现价/涨跌幅\n```\n\n**⚠️ Step D 不得跳过。** 持仓=0 的条目不进市值表，但必须出现在 Step D。\n\n输出示例：\n\n```\n| 代码   | 名称     | 持仓    | 成本价  | 现价    | 市值      | 浮盈/亏      | 盈亏比      |\n|--------|---------|--------|--------|--------|----------|------------|------------|\n| 601991 | 大唐发电 | 1000股 | 4.00   | 4.08   | 4,080    | 🔴 +80     | 🔴 +2.00% |\n| AAPL   | 苹果     | 50股   | 220.00 | 246.63 | 12,332   | 🟩 +1,332  | 🟩 +12.10%|\n\n自选行情\n| 代码   | 名称    | 现价     | 涨跌幅      |\n|--------|--------|---------|------------|\n| 000300 | 沪深300 | 4509.24 | 🔴 +0.38% |\n| .DJI   | 道琼斯  | 45216.14| 🟩 +0.11% |\n```\n\n#### 4b. 用户手动提供持仓信息\n\n用 `sq get` 查询后，**必须使用横向宽表格，禁止使用竖向键值对格式**：\n\n```\n| 代码   | 名称      | 持仓   | 成本价  | 最新价  | 市值       | 浮盈/亏        | 盈亏比         |\n|--------|----------|--------|--------|--------|-----------|--------------|--------------|\n| 600519 | 贵州茅台  | 100股  | 1680.0 | 1725.0 | 172,500   | 🔴 +4,500    | 🔴 +2.68%   |\n| AAPL   | 苹果      | 50股   | 220.0  | 251.49 | 12,574.50 | 🟩 +1,574.50 | 🟩 +14.31%  |\n```\n\n汇总行：\n```\n📊 持仓合计：市值 185,074.50 | 总成本 179,000 | 浮盈 +6,074.50（+3.39%）\n```\n\n浮盈亏 emoji 遵循市场规则（A股/港股：盈利🔴亏损🟢；美股：盈利🟩亏损🟥）。跨市场汇总时提示用户各币种分开统计。\n\nCSV 解析规则：`#` 开头为注释，第一个非注释行为表头，名称列为空时从查询结果自动填充，成本价为空时浮盈亏显示 `—`。\n\n---\n\n## Command 1: Portfolio 文件管理\n\n**所有增删改查操作必须通过 Bash 工具执行实际命令，禁止依赖会话记忆。未执行命令不得声称操作已完成。**\n\n### 文件定位（每次进入 Command 1 必须首先执行）\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\necho \"$PFILE\"\n```\n\n- 输出 `NOT_FOUND` → 立即向用户输出下方创建引导，停止执行，**不得创建任何替代文件**\n- 输出 `PATH_REJECTED` → 向用户提示\"路径包含疑似凭证关键词（如 token、secret、.ssh 等），已拒绝操作\"，停止执行\n- 否则将 `$PFILE` 用于所有后续操作\n\n**portfolio.csv 不存在时**，引导用户创建：\n```\n未找到自选股文件。请执行以下步骤创建：\n\n1. 复制模板文件（路径替换为你的实际安装目录）：\n   cp ~/.openclaw/workspace/skills/stock-query/assets/portfolio.csv \\\n      ~/.openclaw/workspace/skills/stock-query/portfolio.csv\n\n2. 编辑文件，填入你的自选股和持仓信息。\n```\n\n**CSV 文件格式**（参考 `assets/portfolio.csv`）：\n\n```\n代码,名称,持仓,成本价\n601991,大唐发电,1000,4.00   # 含持仓与成本，输出浮盈亏\n014978,华安纳指100C,10000,  # 成本价留空：只查行情\nAAPL,,50,220.00             # 名称留空：自动从接口获取\n000300,,0,                  # 持仓为 0：纯自选\n```\n\n### 查\n\n```bash\ngrep -v '^#' \"$PFILE\" | tail -n +2\n```\n\n格式化为表格展示，不查询实时行情。如需实时价格，使用 Command 2。\n\n### 增\n\n1. 用 `bash scripts/sq.sh get <code>` 获取标的名称\n2. 执行：\n```bash\nif grep -q \"^{code},\" \"$PFILE\" 2>/dev/null; then\n  echo \"DUPLICATE:{code}\"\nelse\n  echo \"{code},{name},{shares},{cost}\" >> \"$PFILE\" && echo \"ADDED:{code},{name},{shares},{cost}\"\nfi\n```\n3. `ADDED:...` → 展示添加结果；`DUPLICATE:{code}` → 询问是否改为修改操作\n\n### 改\n\n1. 用 `bash scripts/sq.sh get <code>` 获取最新名称\n2. 执行：\n```bash\nOLD=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$OLD\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  NEW=\"{code},{name},{shares},{cost}\"\n  tmp=$(mktemp)\n  awk -F',' -v c=\"{code}\" -v n=\"$NEW\" \\\n    'BEGIN{OFS=\",\"} $1==c{print n;next}{print}' \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"BEFORE:$OLD\"\n  echo \"AFTER:$NEW\"\nfi\n```\n3. 展示修改前后 diff；`NOT_FOUND:{code}` → 提示未找到\n\n### 删\n\n```bash\nDEL=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$DEL\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  tmp=$(mktemp)\n  grep -v \"^{code},\" \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"DELETED:$DEL\"\nfi\n```\n\n`DELETED:...` → 展示删除结果；`NOT_FOUND:{code}` → 提示未找到\n\n---\n\n## 交易时间参考\n\n| 市场 | 交易时段（当地时间） | 时区 |\n|------|-------------------|------|\n| A 股/ETF | 工作日 09:30-11:30, 13:00-15:00 | UTC+8 |\n| 场外基金估值 | 工作日 09:30-15:00 | UTC+8 |\n| 港股 | 工作日 09:30-12:00, 13:00-16:00 | UTC+8 |\n| 美股 | 工作日 09:30-16:00（北京时间 夏令时 21:30-04:00） | UTC-4/-5 |\n| QDII 基金 | 净值 T+2 至 T+7 公布 | — |\n\nFile v2.3.6:_meta.json\n\n{\n  \"ownerId\": \"kn722wj47zb7qme4e79tqwyg5582tfyp\",\n  \"slug\": \"stock-query\",\n  \"version\": \"2.3.6\",\n  \"publishedAt\": 1775101259497\n}\n\nFile v2.3.6:skill.yaml\n\nname: stock-query\nversion: 2.3.6\nauthor: asfamilybank\ndescription: >\n  查询全球主要市场股票实时行情：A 股、港股、美股，以及 ETF、场外基金、主要指数，支持批量查询和持仓市值计算。\n  同时支持在用户显式指令下通过内联 bash 命令管理本地 portfolio.csv 自选股/持仓文件（增/删/改/查），文件仅含股票代码、名称、持仓、成本价，禁止存放账户凭证或密钥。\n  需要：curl（行情 API 请求）、iconv（GBK→UTF-8 转码）。\n  文件访问：仅限 portfolio.csv（固定在默认安装目录 ~/.openclaw/workspace/skills/stock-query/ 或 ~/.claude/skills/stock-query/ 下查找），不访问其他系统文件；路径包含 token/secret/.ssh 等凭证关键词时自动拒绝操作。\n  网络访问：仅限 qt.gtimg.cn、hq.sinajs.cn、push2.eastmoney.com、fundgz.1234567.com.cn、api.fund.eastmoney.com 五个行情数据源。\n  Use when: 用户提到\"查股价\"\"查净值\"\"行情\"\"最新价\"\"持仓市值\"\"实时价格\"\"大盘\"\"指数\"\"港股\"\"美股\"等。\n  NOT for: 加密货币、期货、期权、外汇。\nemoji: \"📈\"\nrequires:\n  bins: [curl, iconv]\n  os: [darwin, linux]\nlicense: MIT\nrepository: https://github.com/asfamilybank/stock-query\n\npermissions:\n  - network  # 用途：curl 调用行情 API（仅限 qt.gtimg.cn / hq.sinajs.cn / push2.eastmoney.com / fundgz.1234567.com.cn / api.fund.eastmoney.com）\n  - shell    # 用途：执行 curl、iconv 转码、grep/awk 文件操作（仅操作 portfolio.csv，不执行任意命令）\n\nentryPoint:\n  type: natural\n  prompt: |\n    你是一个全球股票行情查询助手。根据 SKILL.md 中的工作流程，\n    识别用户提供的标的代码（包括 A 股、港股、美股、ETF、基金及指数），\n    调用腾讯财经接口查询行情，A 股失败时回退新浪接口。\n    所有腾讯和新浪接口的 curl 响应必须通过 iconv -f GBK -t UTF-8 转码。\n\ntriggers:\n  keywords:\n    - \"查股价\"\n    - \"查行情\"\n    - \"查指数\"\n    - \"大盘\"\n    - \"上证指数\"\n    - \"查净值\"\n    - \"最新价\"\n    - \"stock price\"\n    - \"实时价格\"\n    - \"持仓市值\"\n    - \"基金估值\"\n    - \"港股\"\n    - \"美股\"\n    - \"纳斯达克\"\n    - \"道琼斯\"\n    - \"恒生指数\"\n\nArchive v2.3.5: 6 files, 20042 bytes\n\nFiles: assets/portfolio.csv (2015b), scripts/portfolio.sh (3978b), scripts/query_price.sh (8456b), scripts/sq.sh (24960b), SKILL.md (16080b), _meta.json (130b)\n\nFile v2.3.5:SKILL.md\n\n---\nname: stock-query\nversion: 2.3.5\ndescription: >\n  查询全球主要市场股票实时行情：A 股、港股、美股，以及场内 ETF、场外基金、主要指数。\n  TRIGGER when: 用户要求查看股价、行情、净值、持仓盈亏、大盘指数时，直接调用，无需等待斜杠命令。\n  NOT for: 加密货币、期货、期权、外汇。\n  用法：/stock-query AAPL 00700 601991\nuser-invocable: true\nallowed-tools:\n  - Bash\n---\n\n# 全球股票/ETF/基金/指数 实时价格查询\n\n## 权限与操作范围\n\n| 权限 | 声明用途 | 限制 |\n|------|---------|------|\n| `network` | `scripts/sq.sh` 内部调用行情 API | 仅限 `qt.gtimg.cn`、`hq.sinajs.cn`、`push2.eastmoney.com`、`fundgz.1234567.com.cn`、`api.fund.eastmoney.com` 五个数据源，不发送用户个人数据 |\n| `shell` | 执行 `scripts/sq.sh`、读写 `portfolio.csv` | 仅执行已声明操作；不执行任意命令 |\n\n**文件访问：** 本 skill 仅在用户**显式指令**下读写 `portfolio.csv` 一个文件。路径由 `PORTFOLIO_FILE` 环境变量指定；未配置时在默认安装目录（`~/.openclaw/workspace/skills/stock-query/` 或 `~/.claude/skills/stock-query/`）下查找。\n\n**自动触发范围：** **文件操作（Command 1）不会自动触发**，仅在用户明确发出增/删/改/查 portfolio 指令时执行。\n\n⚠️ **凭证安全：** `portfolio.csv` 仅应包含股票代码、名称、持仓数量、成本价。**禁止存放账户密码、API 密钥、Token 或任何认证凭证。**\n\n## 前置依赖\n\n| 工具 | 说明 |\n|------|------|\n| `scripts/sq.sh` | 行情查询 CLI，内部使用 `curl` + `iconv` |\n\n## 支持的市场与标的\n\n| 市场 | 代码格式 | 示例 |\n|------|---------|------|\n| 沪/深市股票、ETF、指数 | 6 位数字 | `601991`、`510300`、`000001` |\n| 港股 | ≤5 位数字（自动补零） | `700`、`00700`、`09988` |\n| 美股 | 英文 ticker | `AAPL`、`TSLA`、`BIDU` |\n| 美股指数 | `.DJI` / `.IXIC` / `.SPX` | `.DJI` |\n| 场外基金 | 6 位数字 | `014978`、`110011` |\n\n---\n\n## 工作流程\n\n### Step 0: 意图识别与 Command 路由\n\n**Meta 命令**（最高优先级）：输入为 `version`、`-v`、`--version`、`help`、`-h`、`--help`（大小写不敏感）\n→ 直接输出版本/帮助信息，**不执行后续步骤**\n\nversion 输出：\n```\nstock-query v2.3.5\n```\n\nhelp 输出：\n```\nstock-query v2.3.5 — 全球股票/ETF/基金/指数实时行情查询\n\n用法：\n  /stock-query <代码> [代码2 ...]   查询一个或多个标的\n  /stock-query version              显示版本号\n  /stock-query help                 显示本帮助\n\n支持的市场：\n  A股（沪/深）  6位数字，如 601991 000001\n  港股          5位数字，如 00700 09988\n  美股          英文ticker，如 AAPL TSLA NVDA\n  美股指数      .DJI  .IXIC  .SPX\n  ETF           6位数字，如 510300 159915\n  场外基金      6位数字，如 014978\n\n常用示例：\n  /stock-query AAPL\n  /stock-query 00700 09988\n  /stock-query AAPL 00700 601991 510300\n\n作者：asfamilybank · https://github.com/asfamilybank/stock-query\n```\n\n**Command 1：Portfolio 文件管理**：含操作词（添加/新增/删除/移除/修改/查看/列出）＋ 对象词（自选股/持仓/portfolio/watchlist），或明确指令如\"把 AAPL 加到自选股\"\n→ 直接执行 Command 1，**不进入 Command 2 流程**\n\n**Command 2：行情查询**（默认）：其余所有输入 → 进入 Command 2 流程（执行 Step 1–6）\n\n---\n\n## 静默执行原则（Claude 对话输出约束）\n\n**⛔ 严禁向用户输出任何中间推理或过程信息。** 这是最高优先级约束，覆盖所有步骤。\n\n> 本约束仅适用于 Claude 的对话文本输出。`scripts/sq.sh` 仅向 stdout 输出结构化 JSON 数据（由 Claude 内部消费），向 stderr 输出错误/用法提示，不向用户界面打印任何过程信息。\n\n以下内容**绝对禁止出现**在回复中：\n- 市场/类型判断（如\"014978 是场外基金\"）\n- 数据源切换说明（如\"腾讯接口返回空，切换至东方财富：\"）\n- 文件路径查找过程\n- 任何形式的\"正在...\"、\"切换...\"、\"尝试...\"等过程性文字\n\n**唯一允许的输出：** 最终结果表格，或无法查询时的错误提示。\n\n---\n\n## Command 2: 行情查询\n\n### Step 1: 解析用户输入\n\n**detail_mode 检测：** 若用户消息含以下关键词，设 `detail_mode = true`，在 Step 3 输出详细表格：\n- 中文：详细、详情、详细信息、更多信息、全部信息、完整信息\n- 英文：detail、details、verbose、full\n\n从用户消息中提取标的代码，支持以下形式：\n- **6 位纯数字** → A 股（股票/ETF/指数/基金）\n- **≤5 位纯数字** → 港股，自动补零（700 → 00700）\n- **英文字母或英文+数字** → 美股 ticker\n- **中文/英文名称** → 匹配下表常见标的；无法确定时向用户确认\n\n常见标的速查：\n\n**A 股：**\n- 黄金ETF → 518880 / 红利低波ETF → 512890 / 沪深300ETF → 510300\n- 卫星ETF → 563230 / 创业板ETF → 159915 / 中证500ETF → 510500\n- 上证指数 → 000001 / 深证成指 → 399001 / 创业板指 → 399006\n- 沪深300 → 000300 / 上证50 → 000016 / 中证500 → 000905 / 中证1000 → 000852\n\n**港股：**\n- 腾讯 → 00700 / 阿里巴巴 → 09988 / 美团 → 03690 / 小米 → 01810\n- 比亚迪 → 01211 / 恒生指数 → HSI\n\n**美股：**\n- 苹果 → AAPL / 谷歌 → GOOG / 特斯拉 → TSLA / 英伟达 → NVDA\n- 微软 → MSFT / 亚马逊 → AMZN / 百度 → BIDU / 阿里巴巴 → BABA\n- 哔哩哔哩 → BILI / 拼多多 → PDD\n- 道琼斯 → .DJI / 纳斯达克 → .IXIC / 标普500 → .SPX\n\n### Step 2: 查询实时行情\n\n对所有代码执行一次批量查询：\n\n```bash\nbash scripts/sq.sh get <code1> [code2 ...]\n```\n\n输出为 JSON 数组，每个对象字段如下：\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `code` | string | 用户输入代码 |\n| `name` | string | 标的名称 |\n| `market` | string | `A股` / `港股` / `美股` / `基金` |\n| `type` | string | `stock` / `etf` / `index` / `fund` |\n| `currency` | string | `CNY` / `HKD` / `USD` |\n| `price` | number | 最新价 |\n| `prev_close` | number\\|null | 昨收 |\n| `open` | number\\|null | 今开 |\n| `high` | number\\|null | 最高 |\n| `low` | number\\|null | 最低 |\n| `change` | number\\|null | 涨跌额 |\n| `change_pct` | number\\|null | 涨跌幅（正=涨，负=跌，单位%） |\n| `direction` | string | `up` / `down` / `flat` |\n| `volume` | number\\|null | 成交量（A股/港股单位手，美股单位股）；展示时 A股/港股 ÷10000 显示为「X.X万手」，美股保留原始整数 |\n| `amount` | number\\|null | 成交额（万元，A股有效） |\n| `turnover` | number\\|null | 换手率 %（A股/港股有效） |\n| `pe` | number\\|null | 市盈率（A股有效） |\n| `week52_high` | number\\|null | 52周最高 |\n| `week52_low` | number\\|null | 52周最低 |\n| `datetime` | string\\|null | 行情时间（YYYY-MM-DD HH:MM:SS） |\n| `is_estimate` | boolean | 基金：true=今日估算净值 |\n| `nav_date` | string\\|null | 基金：净值日期 |\n| `is_qdii` | boolean | 基金：是否QDII（净值有延迟） |\n| `error` | string\\|null | 查询失败原因，成功时为 null |\n\n### Step 3: 格式化输出\n\n根据 JSON 结果构造 Markdown 表格。`error` 非 null 的条目单独提示。\n\n#### 3a. 标准模式（默认）\n\n```\n| 代码    | 名称          | 市场  | 最新价    | 昨收      | 涨跌幅          | 最高      | 最低      | 币种 | 更新时间            |\n|---------|--------------|-------|----------|----------|----------------|----------|----------|------|-------------------|\n| 000001  | 上证指数      | A股   | 3874.39  | 3812.77  | 🔴 +1.60%      | 3881.20  | 3850.10  | CNY  | 2026-03-24 15:00  |\n| 00700   | 腾讯控股      | 港股  | 511.000  | 498.200  | 🔴 +2.53%      | 515.000  | 498.000  | HKD  | 2026-03-24 16:00  |\n| AAPL    | 苹果          | 美股  | 251.49   | 248.02   | 🟩 +1.41%      | 254.60   | 250.28   | USD  | 2026-03-23 16:00  |\n| 014978  | 华安纳指100C  | 基金  | 6.8897   | —        | 🟢 -1.43%（估） | —        | —        | CNY  | 2026-03-24 15:00  |\n```\n\n#### 3b. 详细模式（`detail_mode = true`）\n\n**必须使用横向宽表格，禁止使用竖向键值对格式。**\n\n```\n| 代码   | 名称     | 市场 | 最新价  | 昨收    | 今开    | 涨跌幅      | 涨跌额  | 最高    | 最低    | 成交量     | 成交额    | 换手率  | 市盈率PE | 52W最高 | 52W最低 | 币种 | 更新时间           |\n|--------|---------|------|--------|--------|--------|------------|--------|--------|--------|----------|---------|--------|---------|--------|--------|------|------------------|\n| 601991 | 大唐发电 | A股  | 4.21   | 4.03   | 4.05   | 🔴 +4.47%  | +0.18  | 4.25   | 4.06   | 12.3万手  | 5,200万 | 1.23%  | 18.50   | 5.10   | 3.20   | CNY  | 2026-03-24 15:00 |\n| AAPL   | 苹果     | 美股 | 251.49 | 248.02 | 249.00 | 🟩 +1.41%  | +3.47  | 254.60 | 250.28 | 58,234,000| —       | —      | —       | 260.10 | 164.08 | USD  | 2026-03-23 16:00 |\n```\n\n**涨跌标识规则（逐行独立判断，不受其他行影响）：**\n\n| 市场 | 上涨 | 下跌 | 平盘 |\n|------|------|------|------|\n| A股 / 港股 | 🔴 `+X.XX%` | 🟢 `-X.XX%` | ⚪ `0.00%` |\n| 美股 | 🟩 `+X.XX%` | 🟥 `-X.XX%` | ⚪ `0.00%` |\n\n使用 `direction` 字段判断涨跌，`market` 字段决定 emoji 色系。\n\n**其他输出规则：**\n- `null` 字段显示 `—`\n- 成交量：A股/港股 `volume ÷ 10000`，保留1位小数，显示为「X.X万手」；美股显示原始整数（无单位）\n- 价格保留原始小数位数\n- 基金 `is_estimate=true` → 涨跌幅后加 `（估）`；`is_estimate=false` → 加 `（净值）`\n- `is_qdii=true` → 表格下方加注：`⏳ QDII基金，净值公布有 T+2~T+7 延迟`\n- 非交易时段 → 表格下方加注：`⏸ 非交易时段，显示上一交易日收盘数据`\n\n### Step 4: 持仓市值计算（可选）\n\n#### 4a. 从 portfolio 文件加载\n\n当用户指令涉及持仓/自选股（如\"查我的持仓\"\"看下自选股\"），先定位文件再批量查询：\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\n```\n\n- 输出 `NOT_FOUND` → 立即输出创建引导（见 Command 1），停止执行\n- 输出 `PATH_REJECTED` → 提示\"路径包含疑似凭证关键词，已拒绝操作\"，停止执行\n- 否则读取文件，提取所有代码后用 `sq get` 批量查询\n\n执行步骤（严格按序）：\n\n```\nStep A: 读取全部条目\n  codes_all      = 文件中所有非注释、非表头行\n  codes_position = codes_all 中持仓 > 0 的条目\n  codes_watch    = codes_all 中持仓 = 0 或空的条目\n\nStep B: 批量查询\n  bash scripts/sq.sh get <codes_all 中所有代码>\n\nStep C: 输出持仓市值表（若 codes_position 非空）\n  横向宽表格：代码/名称/持仓/成本价/现价/市值/浮盈亏/盈亏比\n\nStep D: 输出自选行情表（若 codes_watch 非空）← 必须执行，不得省略\n  标题\"自选行情\"，简表：代码/名称/现价/涨跌幅\n```\n\n**⚠️ Step D 不得跳过。** 持仓=0 的条目不进市值表，但必须出现在 Step D。\n\n输出示例：\n\n```\n| 代码   | 名称     | 持仓    | 成本价  | 现价    | 市值      | 浮盈/亏      | 盈亏比      |\n|--------|---------|--------|--------|--------|----------|------------|------------|\n| 601991 | 大唐发电 | 1000股 | 4.00   | 4.08   | 4,080    | 🔴 +80     | 🔴 +2.00% |\n| AAPL   | 苹果     | 50股   | 220.00 | 246.63 | 12,332   | 🟩 +1,332  | 🟩 +12.10%|\n\n自选行情\n| 代码   | 名称    | 现价     | 涨跌幅      |\n|--------|--------|---------|------------|\n| 000300 | 沪深300 | 4509.24 | 🔴 +0.38% |\n| .DJI   | 道琼斯  | 45216.14| 🟩 +0.11% |\n```\n\n#### 4b. 用户手动提供持仓信息\n\n用 `sq get` 查询后，**必须使用横向宽表格，禁止使用竖向键值对格式**：\n\n```\n| 代码   | 名称      | 持仓   | 成本价  | 最新价  | 市值       | 浮盈/亏        | 盈亏比         |\n|--------|----------|--------|--------|--------|-----------|--------------|--------------|\n| 600519 | 贵州茅台  | 100股  | 1680.0 | 1725.0 | 172,500   | 🔴 +4,500    | 🔴 +2.68%   |\n| AAPL   | 苹果      | 50股   | 220.0  | 251.49 | 12,574.50 | 🟩 +1,574.50 | 🟩 +14.31%  |\n```\n\n汇总行：\n```\n📊 持仓合计：市值 185,074.50 | 总成本 179,000 | 浮盈 +6,074.50（+3.39%）\n```\n\n浮盈亏 emoji 遵循市场规则（A股/港股：盈利🔴亏损🟢；美股：盈利🟩亏损🟥）。跨市场汇总时提示用户各币种分开统计。\n\nCSV 解析规则：`#` 开头为注释，第一个非注释行为表头，名称列为空时从查询结果自动填充，成本价为空时浮盈亏显示 `—`。\n\n---\n\n## Command 1: Portfolio 文件管理\n\n**所有增删改查操作必须通过 Bash 工具执行实际命令，禁止依赖会话记忆。未执行命令不得声称操作已完成。**\n\n### 文件定位（每次进入 Command 1 必须首先执行）\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\necho \"$PFILE\"\n```\n\n- 输出 `NOT_FOUND` → 立即向用户输出下方创建引导，停止执行，**不得创建任何替代文件**\n- 输出 `PATH_REJECTED` → 向用户提示\"路径包含疑似凭证关键词（如 token、secret、.ssh 等），已拒绝操作\"，停止执行\n- 否则将 `$PFILE` 用于所有后续操作\n\n**portfolio.csv 不存在时**，引导用户创建：\n```\n未找到自选股文件。请执行以下步骤创建：\n\n1. 复制模板文件（路径替换为你的实际安装目录）：\n   cp ~/.openclaw/workspace/skills/stock-query/assets/portfolio.csv \\\n      ~/.openclaw/workspace/skills/stock-query/portfolio.csv\n\n2. 编辑文件，填入你的自选股和持仓信息。\n\n3. 或直接设置 PORTFOLIO_FILE 指向已有文件路径。\n```\n\n**CSV 文件格式**（参考 `assets/portfolio.csv`）：\n\n```\n代码,名称,持仓,成本价\n601991,大唐发电,1000,4.00   # 含持仓与成本，输出浮盈亏\n014978,华安纳指100C,10000,  # 成本价留空：只查行情\nAAPL,,50,220.00             # 名称留空：自动从接口获取\n000300,,0,                  # 持仓为 0：纯自选\n```\n\n### 查\n\n```bash\ngrep -v '^#' \"$PFILE\" | tail -n +2\n```\n\n格式化为表格展示，不查询实时行情。如需实时价格，使用 Command 2。\n\n### 增\n\n1. 用 `bash scripts/sq.sh get <code>` 获取标的名称\n2. 执行：\n```bash\nif grep -q \"^{code},\" \"$PFILE\" 2>/dev/null; then\n  echo \"DUPLICATE:{code}\"\nelse\n  echo \"{code},{name},{shares},{cost}\" >> \"$PFILE\" && echo \"ADDED:{code},{name},{shares},{cost}\"\nfi\n```\n3. `ADDED:...` → 展示添加结果；`DUPLICATE:{code}` → 询问是否改为修改操作\n\n### 改\n\n1. 用 `bash scripts/sq.sh get <code>` 获取最新名称\n2. 执行：\n```bash\nOLD=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$OLD\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  NEW=\"{code},{name},{shares},{cost}\"\n  tmp=$(mktemp)\n  awk -F',' -v c=\"{code}\" -v n=\"$NEW\" \\\n    'BEGIN{OFS=\",\"} $1==c{print n;next}{print}' \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"BEFORE:$OLD\"\n  echo \"AFTER:$NEW\"\nfi\n```\n3. 展示修改前后 diff；`NOT_FOUND:{code}` → 提示未找到\n\n### 删\n\n```bash\nDEL=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$DEL\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  tmp=$(mktemp)\n  grep -v \"^{code},\" \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"DELETED:$DEL\"\nfi\n```\n\n`DELETED:...` → 展示删除结果；`NOT_FOUND:{code}` → 提示未找到\n\n---\n\n## 交易时间参考\n\n| 市场 | 交易时段（当地时间） | 时区 |\n|------|-------------------|------|\n| A 股/ETF | 工作日 09:30-11:30, 13:00-15:00 | UTC+8 |\n| 场外基金估值 | 工作日 09:30-15:00 | UTC+8 |\n| 港股 | 工作日 09:30-12:00, 13:00-16:00 | UTC+8 |\n| 美股 | 工作日 09:30-16:00（北京时间 夏令时 21:30-04:00） | UTC-4/-5 |\n| QDII 基金 | 净值 T+2 至 T+7 公布 | — |\n\nFile v2.3.5:_meta.json\n\n{\n  \"ownerId\": \"kn722wj47zb7qme4e79tqwyg5582tfyp\",\n  \"slug\": \"stock-query\",\n  \"version\": \"2.3.5\",\n  \"publishedAt\": 1775099664558\n}\n\nArchive v2.3.4: 6 files, 20053 bytes\n\nFiles: examples/portfolio.csv (2015b), scripts/portfolio.sh (3978b), scripts/query_price.sh (8456b), scripts/sq.sh (24960b), SKILL.md (16084b), _meta.json (130b)\n\nFile v2.3.4:SKILL.md\n\n---\nname: stock-query\nversion: 2.3.4\ndescription: >\n  查询全球主要市场股票实时行情：A 股、港股、美股，以及场内 ETF、场外基金、主要指数。\n  TRIGGER when: 用户要求查看股价、行情、净值、持仓盈亏、大盘指数时，直接调用，无需等待斜杠命令。\n  NOT for: 加密货币、期货、期权、外汇。\n  用法：/stock-query AAPL 00700 601991\nuser-invocable: true\nallowed-tools:\n  - Bash\n---\n\n# 全球股票/ETF/基金/指数 实时价格查询\n\n## 权限与操作范围\n\n| 权限 | 声明用途 | 限制 |\n|------|---------|------|\n| `network` | `scripts/sq.sh` 内部调用行情 API | 仅限 `qt.gtimg.cn`、`hq.sinajs.cn`、`push2.eastmoney.com`、`fundgz.1234567.com.cn`、`api.fund.eastmoney.com` 五个数据源，不发送用户个人数据 |\n| `shell` | 执行 `scripts/sq.sh`、读写 `portfolio.csv` | 仅执行已声明操作；不执行任意命令 |\n\n**文件访问：** 本 skill 仅在用户**显式指令**下读写 `portfolio.csv` 一个文件。路径由 `PORTFOLIO_FILE` 环境变量指定；未配置时在默认安装目录（`~/.openclaw/workspace/skills/stock-query/` 或 `~/.claude/skills/stock-query/`）下查找。\n\n**自动触发范围：** **文件操作（Command 1）不会自动触发**，仅在用户明确发出增/删/改/查 portfolio 指令时执行。\n\n⚠️ **凭证安全：** `portfolio.csv` 仅应包含股票代码、名称、持仓数量、成本价。**禁止存放账户密码、API 密钥、Token 或任何认证凭证。**\n\n## 前置依赖\n\n| 工具 | 说明 |\n|------|------|\n| `scripts/sq.sh` | 行情查询 CLI，内部使用 `curl` + `iconv` |\n\n## 支持的市场与标的\n\n| 市场 | 代码格式 | 示例 |\n|------|---------|------|\n| 沪/深市股票、ETF、指数 | 6 位数字 | `601991`、`510300`、`000001` |\n| 港股 | ≤5 位数字（自动补零） | `700`、`00700`、`09988` |\n| 美股 | 英文 ticker | `AAPL`、`TSLA`、`BIDU` |\n| 美股指数 | `.DJI` / `.IXIC` / `.SPX` | `.DJI` |\n| 场外基金 | 6 位数字 | `014978`、`110011` |\n\n---\n\n## 工作流程\n\n### Step 0: 意图识别与 Command 路由\n\n**Meta 命令**（最高优先级）：输入为 `version`、`-v`、`--version`、`help`、`-h`、`--help`（大小写不敏感）\n→ 直接输出版本/帮助信息，**不执行后续步骤**\n\nversion 输出：\n```\nstock-query v2.3.4\n```\n\nhelp 输出：\n```\nstock-query v2.3.4 — 全球股票/ETF/基金/指数实时行情查询\n\n用法：\n  /stock-query <代码> [代码2 ...]   查询一个或多个标的\n  /stock-query version              显示版本号\n  /stock-query help                 显示本帮助\n\n支持的市场：\n  A股（沪/深）  6位数字，如 601991 000001\n  港股          5位数字，如 00700 09988\n  美股          英文ticker，如 AAPL TSLA NVDA\n  美股指数      .DJI  .IXIC  .SPX\n  ETF           6位数字，如 510300 159915\n  场外基金      6位数字，如 014978\n\n常用示例：\n  /stock-query AAPL\n  /stock-query 00700 09988\n  /stock-query AAPL 00700 601991 510300\n\n作者：asfamilybank · https://github.com/asfamilybank/stock-query\n```\n\n**Command 1：Portfolio 文件管理**：含操作词（添加/新增/删除/移除/修改/查看/列出）＋ 对象词（自选股/持仓/portfolio/watchlist），或明确指令如\"把 AAPL 加到自选股\"\n→ 直接执行 Command 1，**不进入 Command 2 流程**\n\n**Command 2：行情查询**（默认）：其余所有输入 → 进入 Command 2 流程（执行 Step 1–6）\n\n---\n\n## 静默执行原则（Claude 对话输出约束）\n\n**⛔ 严禁向用户输出任何中间推理或过程信息。** 这是最高优先级约束，覆盖所有步骤。\n\n> 本约束仅适用于 Claude 的对话文本输出。`scripts/sq.sh` 仅向 stdout 输出结构化 JSON 数据（由 Claude 内部消费），向 stderr 输出错误/用法提示，不向用户界面打印任何过程信息。\n\n以下内容**绝对禁止出现**在回复中：\n- 市场/类型判断（如\"014978 是场外基金\"）\n- 数据源切换说明（如\"腾讯接口返回空，切换至东方财富：\"）\n- 文件路径查找过程\n- 任何形式的\"正在...\"、\"切换...\"、\"尝试...\"等过程性文字\n\n**唯一允许的输出：** 最终结果表格，或无法查询时的错误提示。\n\n---\n\n## Command 2: 行情查询\n\n### Step 1: 解析用户输入\n\n**detail_mode 检测：** 若用户消息含以下关键词，设 `detail_mode = true`，在 Step 3 输出详细表格：\n- 中文：详细、详情、详细信息、更多信息、全部信息、完整信息\n- 英文：detail、details、verbose、full\n\n从用户消息中提取标的代码，支持以下形式：\n- **6 位纯数字** → A 股（股票/ETF/指数/基金）\n- **≤5 位纯数字** → 港股，自动补零（700 → 00700）\n- **英文字母或英文+数字** → 美股 ticker\n- **中文/英文名称** → 匹配下表常见标的；无法确定时向用户确认\n\n常见标的速查：\n\n**A 股：**\n- 黄金ETF → 518880 / 红利低波ETF → 512890 / 沪深300ETF → 510300\n- 卫星ETF → 563230 / 创业板ETF → 159915 / 中证500ETF → 510500\n- 上证指数 → 000001 / 深证成指 → 399001 / 创业板指 → 399006\n- 沪深300 → 000300 / 上证50 → 000016 / 中证500 → 000905 / 中证1000 → 000852\n\n**港股：**\n- 腾讯 → 00700 / 阿里巴巴 → 09988 / 美团 → 03690 / 小米 → 01810\n- 比亚迪 → 01211 / 恒生指数 → HSI\n\n**美股：**\n- 苹果 → AAPL / 谷歌 → GOOG / 特斯拉 → TSLA / 英伟达 → NVDA\n- 微软 → MSFT / 亚马逊 → AMZN / 百度 → BIDU / 阿里巴巴 → BABA\n- 哔哩哔哩 → BILI / 拼多多 → PDD\n- 道琼斯 → .DJI / 纳斯达克 → .IXIC / 标普500 → .SPX\n\n### Step 2: 查询实时行情\n\n对所有代码执行一次批量查询：\n\n```bash\nbash scripts/sq.sh get <code1> [code2 ...]\n```\n\n输出为 JSON 数组，每个对象字段如下：\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `code` | string | 用户输入代码 |\n| `name` | string | 标的名称 |\n| `market` | string | `A股` / `港股` / `美股` / `基金` |\n| `type` | string | `stock` / `etf` / `index` / `fund` |\n| `currency` | string | `CNY` / `HKD` / `USD` |\n| `price` | number | 最新价 |\n| `prev_close` | number\\|null | 昨收 |\n| `open` | number\\|null | 今开 |\n| `high` | number\\|null | 最高 |\n| `low` | number\\|null | 最低 |\n| `change` | number\\|null | 涨跌额 |\n| `change_pct` | number\\|null | 涨跌幅（正=涨，负=跌，单位%） |\n| `direction` | string | `up` / `down` / `flat` |\n| `volume` | number\\|null | 成交量（A股/港股单位手，美股单位股）；展示时 A股/港股 ÷10000 显示为「X.X万手」，美股保留原始整数 |\n| `amount` | number\\|null | 成交额（万元，A股有效） |\n| `turnover` | number\\|null | 换手率 %（A股/港股有效） |\n| `pe` | number\\|null | 市盈率（A股有效） |\n| `week52_high` | number\\|null | 52周最高 |\n| `week52_low` | number\\|null | 52周最低 |\n| `datetime` | string\\|null | 行情时间（YYYY-MM-DD HH:MM:SS） |\n| `is_estimate` | boolean | 基金：true=今日估算净值 |\n| `nav_date` | string\\|null | 基金：净值日期 |\n| `is_qdii` | boolean | 基金：是否QDII（净值有延迟） |\n| `error` | string\\|null | 查询失败原因，成功时为 null |\n\n### Step 3: 格式化输出\n\n根据 JSON 结果构造 Markdown 表格。`error` 非 null 的条目单独提示。\n\n#### 3a. 标准模式（默认）\n\n```\n| 代码    | 名称          | 市场  | 最新价    | 昨收      | 涨跌幅          | 最高      | 最低      | 币种 | 更新时间            |\n|---------|--------------|-------|----------|----------|----------------|----------|----------|------|-------------------|\n| 000001  | 上证指数      | A股   | 3874.39  | 3812.77  | 🔴 +1.60%      | 3881.20  | 3850.10  | CNY  | 2026-03-24 15:00  |\n| 00700   | 腾讯控股      | 港股  | 511.000  | 498.200  | 🔴 +2.53%      | 515.000  | 498.000  | HKD  | 2026-03-24 16:00  |\n| AAPL    | 苹果          | 美股  | 251.49   | 248.02   | 🟩 +1.41%      | 254.60   | 250.28   | USD  | 2026-03-23 16:00  |\n| 014978  | 华安纳指100C  | 基金  | 6.8897   | —        | 🟢 -1.43%（估） | —        | —        | CNY  | 2026-03-24 15:00  |\n```\n\n#### 3b. 详细模式（`detail_mode = true`）\n\n**必须使用横向宽表格，禁止使用竖向键值对格式。**\n\n```\n| 代码   | 名称     | 市场 | 最新价  | 昨收    | 今开    | 涨跌幅      | 涨跌额  | 最高    | 最低    | 成交量     | 成交额    | 换手率  | 市盈率PE | 52W最高 | 52W最低 | 币种 | 更新时间           |\n|--------|---------|------|--------|--------|--------|------------|--------|--------|--------|----------|---------|--------|---------|--------|--------|------|------------------|\n| 601991 | 大唐发电 | A股  | 4.21   | 4.03   | 4.05   | 🔴 +4.47%  | +0.18  | 4.25   | 4.06   | 12.3万手  | 5,200万 | 1.23%  | 18.50   | 5.10   | 3.20   | CNY  | 2026-03-24 15:00 |\n| AAPL   | 苹果     | 美股 | 251.49 | 248.02 | 249.00 | 🟩 +1.41%  | +3.47  | 254.60 | 250.28 | 58,234,000| —       | —      | —       | 260.10 | 164.08 | USD  | 2026-03-23 16:00 |\n```\n\n**涨跌标识规则（逐行独立判断，不受其他行影响）：**\n\n| 市场 | 上涨 | 下跌 | 平盘 |\n|------|------|------|------|\n| A股 / 港股 | 🔴 `+X.XX%` | 🟢 `-X.XX%` | ⚪ `0.00%` |\n| 美股 | 🟩 `+X.XX%` | 🟥 `-X.XX%` | ⚪ `0.00%` |\n\n使用 `direction` 字段判断涨跌，`market` 字段决定 emoji 色系。\n\n**其他输出规则：**\n- `null` 字段显示 `—`\n- 成交量：A股/港股 `volume ÷ 10000`，保留1位小数，显示为「X.X万手」；美股显示原始整数（无单位）\n- 价格保留原始小数位数\n- 基金 `is_estimate=true` → 涨跌幅后加 `（估）`；`is_estimate=false` → 加 `（净值）`\n- `is_qdii=true` → 表格下方加注：`⏳ QDII基金，净值公布有 T+2~T+7 延迟`\n- 非交易时段 → 表格下方加注：`⏸ 非交易时段，显示上一交易日收盘数据`\n\n### Step 4: 持仓市值计算（可选）\n\n#### 4a. 从 portfolio 文件加载\n\n当用户指令涉及持仓/自选股（如\"查我的持仓\"\"看下自选股\"），先定位文件再批量查询：\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\n```\n\n- 输出 `NOT_FOUND` → 立即输出创建引导（见 Command 1），停止执行\n- 输出 `PATH_REJECTED` → 提示\"路径包含疑似凭证关键词，已拒绝操作\"，停止执行\n- 否则读取文件，提取所有代码后用 `sq get` 批量查询\n\n执行步骤（严格按序）：\n\n```\nStep A: 读取全部条目\n  codes_all      = 文件中所有非注释、非表头行\n  codes_position = codes_all 中持仓 > 0 的条目\n  codes_watch    = codes_all 中持仓 = 0 或空的条目\n\nStep B: 批量查询\n  bash scripts/sq.sh get <codes_all 中所有代码>\n\nStep C: 输出持仓市值表（若 codes_position 非空）\n  横向宽表格：代码/名称/持仓/成本价/现价/市值/浮盈亏/盈亏比\n\nStep D: 输出自选行情表（若 codes_watch 非空）← 必须执行，不得省略\n  标题\"自选行情\"，简表：代码/名称/现价/涨跌幅\n```\n\n**⚠️ Step D 不得跳过。** 持仓=0 的条目不进市值表，但必须出现在 Step D。\n\n输出示例：\n\n```\n| 代码   | 名称     | 持仓    | 成本价  | 现价    | 市值      | 浮盈/亏      | 盈亏比      |\n|--------|---------|--------|--------|--------|----------|------------|------------|\n| 601991 | 大唐发电 | 1000股 | 4.00   | 4.08   | 4,080    | 🔴 +80     | 🔴 +2.00% |\n| AAPL   | 苹果     | 50股   | 220.00 | 246.63 | 12,332   | 🟩 +1,332  | 🟩 +12.10%|\n\n自选行情\n| 代码   | 名称    | 现价     | 涨跌幅      |\n|--------|--------|---------|------------|\n| 000300 | 沪深300 | 4509.24 | 🔴 +0.38% |\n| .DJI   | 道琼斯  | 45216.14| 🟩 +0.11% |\n```\n\n#### 4b. 用户手动提供持仓信息\n\n用 `sq get` 查询后，**必须使用横向宽表格，禁止使用竖向键值对格式**：\n\n```\n| 代码   | 名称      | 持仓   | 成本价  | 最新价  | 市值       | 浮盈/亏        | 盈亏比         |\n|--------|----------|--------|--------|--------|-----------|--------------|--------------|\n| 600519 | 贵州茅台  | 100股  | 1680.0 | 1725.0 | 172,500   | 🔴 +4,500    | 🔴 +2.68%   |\n| AAPL   | 苹果      | 50股   | 220.0  | 251.49 | 12,574.50 | 🟩 +1,574.50 | 🟩 +14.31%  |\n```\n\n汇总行：\n```\n📊 持仓合计：市值 185,074.50 | 总成本 179,000 | 浮盈 +6,074.50（+3.39%）\n```\n\n浮盈亏 emoji 遵循市场规则（A股/港股：盈利🔴亏损🟢；美股：盈利🟩亏损🟥）。跨市场汇总时提示用户各币种分开统计。\n\nCSV 解析规则：`#` 开头为注释，第一个非注释行为表头，名称列为空时从查询结果自动填充，成本价为空时浮盈亏显示 `—`。\n\n---\n\n## Command 1: Portfolio 文件管理\n\n**所有增删改查操作必须通过 Bash 工具执行实际命令，禁止依赖会话记忆。未执行命令不得声称操作已完成。**\n\n### 文件定位（每次进入 Command 1 必须首先执行）\n\n```bash\nPFILE=$(bash scripts/sq.sh pfile)\necho \"$PFILE\"\n```\n\n- 输出 `NOT_FOUND` → 立即向用户输出下方创建引导，停止执行，**不得创建任何替代文件**\n- 输出 `PATH_REJECTED` → 向用户提示\"路径包含疑似凭证关键词（如 token、secret、.ssh 等），已拒绝操作\"，停止执行\n- 否则将 `$PFILE` 用于所有后续操作\n\n**portfolio.csv 不存在时**，引导用户创建：\n```\n未找到自选股文件。请执行以下步骤创建：\n\n1. 复制模板文件（路径替换为你的实际安装目录）：\n   cp ~/.openclaw/workspace/skills/stock-query/examples/portfolio.csv \\\n      ~/.openclaw/workspace/skills/stock-query/portfolio.csv\n\n2. 编辑文件，填入你的自选股和持仓信息。\n\n3. 或直接设置 PORTFOLIO_FILE 指向已有文件路径。\n```\n\n**CSV 文件格式**（参考 `examples/portfolio.csv`）：\n\n```\n代码,名称,持仓,成本价\n601991,大唐发电,1000,4.00   # 含持仓与成本，输出浮盈亏\n014978,华安纳指100C,10000,  # 成本价留空：只查行情\nAAPL,,50,220.00             # 名称留空：自动从接口获取\n000300,,0,                  # 持仓为 0：纯自选\n```\n\n### 查\n\n```bash\ngrep -v '^#' \"$PFILE\" | tail -n +2\n```\n\n格式化为表格展示，不查询实时行情。如需实时价格，使用 Command 2。\n\n### 增\n\n1. 用 `bash scripts/sq.sh get <code>` 获取标的名称\n2. 执行：\n```bash\nif grep -q \"^{code},\" \"$PFILE\" 2>/dev/null; then\n  echo \"DUPLICATE:{code}\"\nelse\n  echo \"{code},{name},{shares},{cost}\" >> \"$PFILE\" && echo \"ADDED:{code},{name},{shares},{cost}\"\nfi\n```\n3. `ADDED:...` → 展示添加结果；`DUPLICATE:{code}` → 询问是否改为修改操作\n\n### 改\n\n1. 用 `bash scripts/sq.sh get <code>` 获取最新名称\n2. 执行：\n```bash\nOLD=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$OLD\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  NEW=\"{code},{name},{shares},{cost}\"\n  tmp=$(mktemp)\n  awk -F',' -v c=\"{code}\" -v n=\"$NEW\" \\\n    'BEGIN{OFS=\",\"} $1==c{print n;next}{print}' \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"BEFORE:$OLD\"\n  echo \"AFTER:$NEW\"\nfi\n```\n3. 展示修改前后 diff；`NOT_FOUND:{code}` → 提示未找到\n\n### 删\n\n```bash\nDEL=$(grep \"^{code},\" \"$PFILE\")\nif [ -z \"$DEL\" ]; then\n  echo \"NOT_FOUND:{code}\"\nelse\n  tmp=$(mktemp)\n  grep -v \"^{code},\" \"$PFILE\" > \"$tmp\" && mv \"$tmp\" \"$PFILE\"\n  echo \"DELETED:$DEL\"\nfi\n```\n\n`DELETED:...` → 展示删除结果；`NOT_FOUND:{code}` → 提示未找到\n\n---\n\n## 交易时间参考\n\n| 市场 | 交易时段（当地时间） | 时区 |\n|------|-------------------|------|\n| A 股/ETF | 工作日 09:30-11:30, 13:00-15:00 | UTC+8 |\n| 场外基金估值 | 工作日 09:30-15:00 | UTC+8 |\n| 港股 | 工作日 09:30-12:00, 13:00-16:00 | UTC+8 |\n| 美股 | 工作日 09:30-16:00（北京时间 夏令时 21:30-04:00） | UTC-4/-5 |\n| QDII 基金 | 净值 T+2 至 T+7 公布 | — |\n\nFile v2.3.4:_meta.json\n\n{\n  \"ownerId\": \"kn722wj47zb7qme4e79tqwyg5582tfyp\",\n  \"slug\": \"stock-query\",\n  \"version\": \"2.3.4\",\n  \"publishedAt\": 1775098956806\n}","readmeExcerpt":"Skill: Stock Query Owner: asfamilybank Summary: 查询全球股票实时行情（A 股、港股、美股）、ETF、场外基金、指数，支持批量查询、历史K线（含均线）与自选股管理。 TRIGGER when: 用户查询股价/行情/净值/历史K线/自选盈亏/大盘指数时。NOT for: 加密货币、期货、期权、外汇。 Tags: china:1.0.3, etf:1.0.3, finance:1.0.3, fund:1.0.3, latest:2.6.0, stock:1.0.3 Version history: v2.6.0 | 2026-04-09T01:55:57.805Z | auto v2.6.0 brings major improvements and market data source enhancements: - 增加对 Yahoo Finance 实时数据接口支持（美股行情更加完","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"stock-query v2.6.0"},{"language":"text","snippet":"stock-query v2.6.0 — 全球股票/ETF/基金/指数实时行情查询\n\n用法：\n  /stock-query <代码> [代码2 ...]   查询一个或多个标的实时行情\n  /stock-query <代码> 历史          查询个股历史K线（默认近30个交易日）\n  /stock-query version              显示版本号\n  /stock-query help                 显示本帮助\n\n支持的市场：\n  A股（沪/深）  6位数字，如 601991 000001\n  港股          5位数字，如 00700 09988\n  美股          英文ticker，如 AAPL TSLA NVDA\n  美股指数      .DJI  .IXIC  .SPX\n  ETF           6位数字，如 510300 159915\n  场外基金      6位数字，如 014978\n\n常用示例：\n  /stock-query AAPL\n  /stock-query 00700 09988\n  /stock-query AAPL 00700 601991 510300\n  /stock-query 600519 近60天日K\n  /stock-query TSLA 周K 最近20周\n\n作者：asfamilybank · https://github.com/asfamilybank/stock-query"},{"language":"bash","snippet":"PFILE=$(bash scripts/sq.sh pfile)\necho \"$PFILE\""},{"language":"text","snippet":"未找到自选股文件。请执行以下步骤创建：\n\n1. 创建配置目录并复制模板：\n   mkdir -p ~/.config/stock-query\n   cp <skill安装目录>/assets/portfolio.csv ~/.config/stock-query/portfolio.csv\n\n2. 编辑文件，填入你的自选股信息。"},{"language":"text","snippet":"代码,名称,数量,自选价格\n601991,大唐发电,1000,4.00   # 含数量与参考价，输出浮盈亏\n014978,华安纳指100C,10000,  # 自选价格留空：只查行情\nAAPL,,50,220.00             # 名称留空：自动从接口获取\n000300,,0,                  # 数量为 0：纯自选"},{"language":"bash","snippet":"grep -v '^#' \"$PFILE\" | tail -n +2"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: stock-query\ndescription: >\n  查询全球股票实时行情（A 股、港股、美股）、ETF、场外基金、指数，支持批量查询、历史K线（含均线）与自选股管理。\n  TRIGGER when: 用户查询股价/行情/净值/历史K线/自选盈亏/大盘指数时。NOT for: 加密货币、期货、期权、外汇。\nlicense: MIT\ncompatibility: Requires curl, iconv, python3. macOS/Linux only.\nmetadata:\n  version: \"2.6.0\"\n  author: asfamilybank\n  repo: https://github.com/asfamilybank/stock-query\nuser-invocable: true\nallowed-tools:\n  - Bash\n---\n\n# 全球股票/ETF/基金/指数 实时价格查询\n\n## 权限与操作范围\n\n| 权限 | 声明用途 | 限制 |\n|------|---------|------|\n| `network` | `scripts/sq.sh` 内部调用行情 API | 仅限 `qt.gtimg.cn`、`hq.sinajs.cn`、`push2.eastmoney.com`、`web.ifzq.gtimg.cn`、`query1.finance.yahoo.com`、`fundgz.1234567.com.cn`、`api.fund.eastmoney.com` 七个数据源，不发送用户个人数据 |\n| `shell` | 执行 `curl`、`iconv`、`grep`、`awk`、`mktemp` | 仅操作 `portfolio.csv`；不执行任意命令 |\n\n**文件访问：** 本 skill 仅在用户**显式指令**下读写 `portfolio.csv` 一个文件，优先查找 `~/.config/stock-query/portfolio.csv`，其次兼容旧版安装目录（`~/.openclaw/workspace/skills/stock-query/`、`~/.claude/skills/stock-query/`、`~/.agents/skills/stock-query/`），无需配置任何环境变量。历史数据通过网络实时获取，不写本地文件。\n\n**自动触发范围：** **文件操作（Command 1）不会自动触发**，仅在用户明确发出增/删/改/查 portfolio 指令时执行。\n\n⚠️ **凭证安全：** `portfolio.csv` 仅应包含股票代码、名称、数量、自选价格。**禁止存放账户密码、API 密钥、Token 或任何认证凭证。**\n\n## 前置依赖\n\n| 工具 | 说明 |\n|------|------|\n| `scripts/sq.sh` | 行情查询 CLI，内部使用 `curl` + `iconv` |\n| `scripts/fmt.sh` | 格式化输出工具，由 `sq.sh --format` 调用，依赖 `python3`，输出人类可读的 Markdown 表格 |\n\n## 支持的市场与标的\n\n| 市场 | 代码格式 | 示例 |\n|------|---------|------|\n| 沪/深市股票、ETF、指数 | 6 位数字 | `601991`、`510300`、`000001` |\n| 港股 | ≤5 位数字（自动补零） | `700`、`00700`、`09988` |\n| 美股 | 英文 ticker | `AAPL`、`TSLA`、`BIDU` |\n| 美股指数 | `.DJI` / `.IXIC` / `.SPX` | `.DJI` |\n| 场外基金 | 6 位数字 | `014978`、`110011` |\n\n---\n\n## 工作流程\n\n### Step 0: 意图识别与 Command 路由\n\n**Meta 命令**（最高优先级）：输入为 `version`、`-v`、`--version`、`help`、`-h`、`--help`（大小写不敏感）\n→ 直接输出版本/帮助信息，**不执行后续步骤**\n\nversion 输出：\n```\nstock-query v2.6.0\n```\n\nhelp 输出：\n```\nstock-query v2.6.0 — 全球股票/ETF/基金/指数实时行情查询\n\n用法：\n  /stock-query <代码> [代码2 ...]   查询一个或多个标的实时行情\n  /stock-query <代码> 历史          查询个股历史K线（默认近30个交易日）\n  /stock-query version              显示版本号\n  /stock-query help                 显示本帮助\n\n支持的市场：\n  A股（沪/深）  6位数字，如 601991 000001\n  港股          5位数字，如 00700 09988\n  美股          英文ticker，如 AAPL TSLA NVDA\n  美股指数      .DJI  .IXIC  .SPX\n  ETF           6位数字，如 510300 159915\n  场外基金      6位数字，如 014978\n\n常用示例：\n  /stock-query AAPL\n  /stock-query 00700 09988\n  /stock-query AAPL 00700 601991 510300\n  /stock-query 600519 近60天日K\n  /stock-query TSLA 周K 最近20周\n\n作者：asfamilybank · https://github.com/asfamilybank/stock-query\n```\n\n**Command 1：Portfolio 文件管理**：含操作词（添加/新增/删除/移除/修改/查看/列出）＋ 对象词（自选股/持仓/portfolio/watchlist），或明确指令如\"把 AAPL 加到自选股\"\n→ 直接执行 Command 1，**不进入 Command 2/3 流程**\n\n**Command 3：历史行情查询**：含关键词（历史/历史数据/历史行情/历史价格/历史走势/K线/日K/周K/月K）\n→ 直接执行 Command 3，**不进入 Command 2 流程**\n\n**Command 2：行情查询**（默认）：其余所有输入 → 进入 Command 2 流程（执行 Step 1–6）\n\n---\n\n## 静默执行原则（Claude 对话输出约束）\n\n**⛔ 严禁向用户输出任何中间推理或过程信息。** 这是最高优先级约束，覆盖所有步骤。\n\n> 本约束仅适用于 Claude 的对话文本输出。`scripts/sq.sh` stdout 仅输出结构化数据供 Claude 内部消费：行情/基金命令输出 JSON 数组，`pfile` 命令输出文件绝对路径或"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn722wj47zb7qme4e79tqwyg5582tfyp\",\n  \"slug\": \"stock-query\",\n  \"version\": \"2.6.0\",\n  \"publishedAt\": 1775699757805\n}"},{"path":"skill-card.md","content":"## Description:\n\nStock Query helps agents retrieve and format real-time market quotes, historical K-line data, and portfolio watchlist views for stocks, ETFs, mutual funds, and indexes across A-share, Hong Kong, and U.S. markets.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[asfamilybank](https://clawhub.ai/user/asfamilybank)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and agents use this skill to answer stock, fund, index, historical price, and watchlist valuation requests. It is intended for market-data lookup and formatting, not for cryptocurrency, futures, options, or foreign-exchange workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Unsafe input handling in shell-based portfolio and history commands may enable local code execution.\n\nMitigation: Review before installing and use only with trusted prompts until the shell/Python injection paths are fixed.\n\nRisk: Portfolio data is stored in portfolio.csv and may be modified during explicit portfolio-management requests.\n\nMitigation: Keep portfolio.csv limited to stock codes, names, quantities, and reference prices; do not store credentials, API keys, tokens, or account passwords in it.\n\nRisk: Queried symbols are sent to external market-data services.\n\nMitigation: Avoid querying sensitive or confidential watchlists if disclosure of symbols to external providers is unacceptable.\n\n## Reference(s):\n\n- [ClawHub release page](https://clawhub.ai/asfamilybank/skills/stock-query)\n- [Source repository listed in metadata](https://github.com/asfamilybank/stock-query)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, JSON, CSV, Shell commands, Configuration guidance]\n\n**Output Format:** [Markdown tables, JSON arrays or objects, CSV, and concise error text]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires curl, iconv, and python3 on macOS or Linux; queried symbols may be sent to external market-data services.]\n\n## Skill Version(s):\n\n2.6.0 (source: server release metadata, skill.yaml, and SKILL.md frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."},{"path":"skill.yaml","content":"name: stock-query\nversion: 2.6.0\nauthor: asfamilybank\ndescription: >\n  查询全球主要市场股票实时行情：A 股、港股、美股，以及 ETF、场外基金、主要指数，支持批量查询、自选市值计算与个股历史K线（含 MA5/MA10/MA20/MA60 均线）。\n  同时支持在用户显式指令下通过内联 bash 命令管理本地 portfolio.csv 自选股文件（增/删/改/查），文件仅含股票代码、名称、数量、自选价格，禁止存放账户凭证或密钥。\n  需要：curl（行情 API 请求）、iconv（GBK→UTF-8 转码）。\n  文件访问：仅限 portfolio.csv，优先查找 ~/.config/stock-query/portfolio.csv，其次兼容旧版安装目录，不访问其他系统文件。\n  网络访问：仅限 qt.gtimg.cn、hq.sinajs.cn、push2.eastmoney.com、web.ifzq.gtimg.cn、query1.finance.yahoo.com、fundgz.1234567.com.cn、api.fund.eastmoney.com 七个行情数据源。\n  Use when: 用户提到\"查股价\"\"查净值\"\"行情\"\"最新价\"\"自选市值\"\"实时价格\"\"大盘\"\"指数\"\"港股\"\"美股\"等。\n  NOT for: 加密货币、期货、期权、外汇。\nemoji: \"📈\"\nrequires:\n  bins: [curl, iconv, python3]\n  os: [darwin, linux]\nlicense: MIT\nrepository: https://github.com/asfamilybank/stock-query\n\npermissions:\n  - network  # 用途：curl 调用行情 API（仅限 qt.gtimg.cn / hq.sinajs.cn / push2.eastmoney.com / web.ifzq.gtimg.cn / query1.finance.yahoo.com / fundgz.1234567.com.cn / api.fund.eastmoney.com）\n  - shell    # 用途：执行 curl、iconv 转码、grep/awk 文件操作（仅操作 portfolio.csv，不执行任意命令）\n\nentryPoint:\n  type: natural\n  prompt: |\n    你是一个全球股票行情查询助手。根据 SKILL.md 中的工作流程，\n    识别用户提供的标的代码（包括 A 股、港股、美股、ETF、基金及指数），\n    调用腾讯财经接口查询行情，A 股失败时回退新浪接口。\n    所有腾讯和新浪接口的 curl 响应必须通过 iconv -f GBK -t UTF-8 转码。\n\ntriggers:\n  keywords:\n    - \"查股价\"\n    - \"查行情\"\n    - \"查指数\"\n    - \"大盘\"\n    - \"上证指数\"\n    - \"查净值\"\n    - \"最新价\"\n    - \"stock price\"\n    - \"实时价格\"\n    - \"自选市值\"\n    - \"基金估值\"\n    - \"港股\"\n    - \"美股\"\n    - \"纳斯达克\"\n    - \"道琼斯\"\n    - \"恒生指数\""}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"查询全球股票实时行情（A 股、港股、美股）、ETF、场外基金、指数，支持批量查询、历史K线（含均线）与自选股管理。 TRIGGER when: 用户查询股价/行情/净值/历史K线/自选盈亏/大盘指数时。NOT for: 加密货币、期货、期权、外汇。 Skill: Stock Query Owner: asfamilybank Summary: 查询全球股票实时行情（A 股、港股、美股）、ETF、场外基金、指数，支持批量查询、历史K线（含均线）与自选股管理。 TRIGGER when: 用户查询股价/行情/净值/历史K线/自选盈亏/大盘指数时。NOT for: 加密货币、期货、期权、外汇。 Tags: china:1.0.3, etf:1.0.3, finance:1.0.3, fund:1.0.3, latest:2.6.0, stock:1.0.3 Version history: v2.6.0 | 2026-04-09T01:55:57.805Z | auto v2.6.0 brings major improvements and market data source enhancements: - 增加对 Yahoo Finance 实时数据接口支持（美股行情更加完","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1133,"uniquenessScore":49,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T23:22:02.476Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T23:22:02.476Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T02:54:20.165Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}