tickflow-assist 0.3.8 → 0.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  基于 [OpenClaw](https://openclaw.ai) 的 A 股监控与分析插件。它使用 [TickFlow](https://tickflow.org/auth/register?ref=BUJ54JEDGE) 获取行情与财务数据,并可选接入 [金十数据 MCP](https://mcp.jin10.com/app/) 快讯流,结合 LLM 生成技术面、基本面、资讯面的综合判断,并把结果持久化到本地 LanceDB。
4
4
 
5
- 最近更新:`v0.3.8` 接入东方财富自选同步、妙想官方数据/智能选股兼容与小规模候选池联动,新增 `/ta_screenstocks` / `/ta_screenstocks_llm`,并优化盘前简报提炼和监控阶段提醒去重。完整发布记录见 <https://github.com/robinspt/tickflow-assist/blob/main/CHANGELOG.md>。
5
+ 最近更新:`v0.3.9` 对齐 OpenClaw `v2026.5.2+`,恢复新版 Telegram 原生命令菜单中的 `/ta_` 命令可见性,并增强 PNG 媒体投递失败后的文本回退与一键安装依赖处理。完整发布记录见 <https://github.com/robinspt/tickflow-assist/blob/main/CHANGELOG.md>。
6
6
 
7
- 当前主线按 OpenClaw `v2026.3.31+` 对齐,并已验证社区安装在 `v2026.4.22` 上兼容。
7
+ 当前主线按 OpenClaw `v2026.5.2+` 对齐,并使用 `contracts.tools` 与 `setup.providers[].envVars` 等新版插件清单字段。
8
8
 
9
9
  ## 安装前准备
10
10
 
@@ -34,7 +34,7 @@ openclaw gateway restart
34
34
 
35
35
  - `configure-openclaw` 会把配置写入 `~/.openclaw/openclaw.json` 的 `plugins.entries["tickflow-assist"].config`。
36
36
  - 核心必填建议先准备:`tickflowApiKey`、`tickflowApiKeyLevel`、`llmApiKey`、`llmBaseUrl`、`llmModel`;告警场景再补 `alertChannel`、`alertTarget`、`alertAccount`。
37
- - 如果你不想把密钥落盘,优先把环境变量写进 `~/.openclaw/.env`,再运行配置向导补齐非密钥项;如需 PNG 告警卡正常显示中文,请自行安装 `fontconfig` 与 Noto CJK 字体。
37
+ - 如果你不想把密钥落盘,优先把环境变量写进 `~/.openclaw/.env`,再运行配置向导补齐非密钥项;如需 PNG 告警卡图片投递,请确认宿主 OpenClaw 的全局 npm 环境可解析 `sharp`,如需中文正常显示再安装 `fontconfig` 与 Noto CJK 字体。
38
38
 
39
39
  社区安装后的升级方式:
40
40
 
@@ -96,6 +96,7 @@ plugins.entries["tickflow-assist"].config
96
96
  ## 依赖与可选能力
97
97
 
98
98
  - [TickFlow](https://tickflow.org/auth/register?ref=BUJ54JEDGE):`Free` 可用日线与实时行情;`Starter` 起可用标的池,插件会用来做申万行业映射与申万 3 级同业表现;`Pro` 起可用分钟K;`Expert` 才走 TickFlow 财务数据,非 `Expert` 默认回退妙想 lite。
99
+ - `sharp`:插件本地依赖用于生成 PNG;OpenClaw `message send --media` 还需要宿主 OpenClaw 全局 npm 环境可解析 `sharp`,否则图片投递会回退为纯文本。
99
100
  - [金十数据 MCP](https://mcp.jin10.com/app/):可选,用于 24 小时快讯流接入、自选关联筛选与事件驱动告警。独立的金十数据 Skill 详见 [OpenClaw Skill](https://clawhub.ai/robinspt/jin10) / [Hermes Skill](https://github.com/robinspt/hermes-skills)。
100
101
  - [东方财富妙想 Skills](https://marketing.dfcfs.com/views/finskillshub/):可选,用于 `mx_search`、`mx_data`、`mx_select_stock`、东方财富自选同步与非 `Expert` 财务链路的 lite 补充。
101
102
 
@@ -82,6 +82,17 @@ export class AlertService {
82
82
  await this.logCompletion(sendId, messageHash, payload, result);
83
83
  return result;
84
84
  }
85
+ if (isDefiniteCommandMediaPreSendFailure(primaryFailure.error)
86
+ && isPossiblyDeliveredTextCommandFailure(textFallbackFailure.error)) {
87
+ const result = {
88
+ ok: true,
89
+ mediaAttempted: true,
90
+ mediaDelivered: false,
91
+ error: this.combineErrors(primaryFailure.error, `text fallback command returned an uncertain status: ${textFallbackFailure.error}`),
92
+ };
93
+ await this.logCompletion(sendId, messageHash, payload, result);
94
+ return result;
95
+ }
85
96
  const result = {
86
97
  ok: false,
87
98
  mediaAttempted: true,
@@ -293,11 +304,12 @@ export class AlertService {
293
304
  });
294
305
  return null;
295
306
  }
307
+ const detail = result.stderr.trim()
308
+ || result.stdout.trim()
309
+ || `command exited with ${result.code ?? "unknown"}`;
296
310
  const failure = {
297
- error: result.stderr.trim()
298
- || result.stdout.trim()
299
- || `command exited with ${result.code ?? "unknown"}`,
300
- ambiguous: true,
311
+ error: detail,
312
+ ambiguous: Boolean(payload.mediaPath) && !isDefiniteCommandMediaPreSendFailure(detail),
301
313
  };
302
314
  await this.logTransportFailure("command_failed", context, payload, failure, {
303
315
  code: result.code,
@@ -420,6 +432,24 @@ function formatErrorMessage(error) {
420
432
  function isRuntimeCapabilityUnavailableError(detail) {
421
433
  return /runtime channel .* unavailable/i.test(detail);
422
434
  }
435
+ function isDefiniteCommandMediaPreSendFailure(detail) {
436
+ return [
437
+ /Failed to optimize image/i,
438
+ /Optional dependency sharp is required/i,
439
+ /Cannot find package ['"]sharp['"]/i,
440
+ /\bENOENT\b/i,
441
+ /no such file or directory/i,
442
+ /media file missing/i,
443
+ ].some((pattern) => pattern.test(detail));
444
+ }
445
+ function isPossiblyDeliveredTextCommandFailure(detail) {
446
+ return [
447
+ /command exited with unknown/i,
448
+ /message send timed out/i,
449
+ /\btimeout\b/i,
450
+ /no-output-timeout/i,
451
+ ].some((pattern) => pattern.test(detail));
452
+ }
423
453
  function normalizeSendInput(input) {
424
454
  return typeof input === "string"
425
455
  ? { message: input }
@@ -1,31 +1,150 @@
1
1
  {
2
2
  "id": "tickflow-assist",
3
3
  "name": "TickFlow Assist",
4
- "version": "0.3.8",
4
+ "version": "0.3.9",
5
5
  "description": "A-share watchlist analysis, monitoring, and alert delivery powered by TickFlow and OpenClaw.",
6
6
  "skills": [
7
7
  "skills"
8
8
  ],
9
9
  "activation": {
10
+ "onStartup": true,
11
+ "onCommands": [
12
+ "ta_addstock",
13
+ "ta_rmstock",
14
+ "ta_analyze",
15
+ "ta_backtest",
16
+ "ta_viewanalysis",
17
+ "ta_watchlist",
18
+ "ta_refreshnames",
19
+ "ta_refreshprofiles",
20
+ "ta_startmonitor",
21
+ "ta_stopmonitor",
22
+ "ta_monitorstatus",
23
+ "ta_flashstatus",
24
+ "ta_startdailyupdate",
25
+ "ta_stopdailyupdate",
26
+ "ta_updateall",
27
+ "ta_dailyupdatestatus",
28
+ "ta_testalert",
29
+ "ta_screenstocks",
30
+ "ta_screenstocks_llm",
31
+ "ta_debug"
32
+ ],
10
33
  "onCapabilities": ["tool", "hook"]
11
34
  },
12
- "providerAuthEnvVars": {
13
- "tickflow": [
14
- "TICKFLOW_ASSIST_TICKFLOW_API_KEY",
15
- "TICKFLOW_API_KEY"
16
- ],
17
- "llm": [
18
- "TICKFLOW_ASSIST_LLM_API_KEY",
19
- "LLM_API_KEY"
20
- ],
21
- "mx-search": [
22
- "TICKFLOW_ASSIST_MX_SEARCH_API_KEY",
23
- "MX_SEARCH_API_KEY",
24
- "MX_APIKEY"
25
- ],
26
- "jin10": [
27
- "TICKFLOW_ASSIST_JIN10_API_TOKEN",
28
- "JIN10_API_TOKEN"
35
+ "commandAliases": [
36
+ {
37
+ "name": "ta_addstock",
38
+ "kind": "runtime-slash"
39
+ },
40
+ {
41
+ "name": "ta_rmstock",
42
+ "kind": "runtime-slash"
43
+ },
44
+ {
45
+ "name": "ta_analyze",
46
+ "kind": "runtime-slash"
47
+ },
48
+ {
49
+ "name": "ta_backtest",
50
+ "kind": "runtime-slash"
51
+ },
52
+ {
53
+ "name": "ta_viewanalysis",
54
+ "kind": "runtime-slash"
55
+ },
56
+ {
57
+ "name": "ta_watchlist",
58
+ "kind": "runtime-slash"
59
+ },
60
+ {
61
+ "name": "ta_refreshnames",
62
+ "kind": "runtime-slash"
63
+ },
64
+ {
65
+ "name": "ta_refreshprofiles",
66
+ "kind": "runtime-slash"
67
+ },
68
+ {
69
+ "name": "ta_startmonitor",
70
+ "kind": "runtime-slash"
71
+ },
72
+ {
73
+ "name": "ta_stopmonitor",
74
+ "kind": "runtime-slash"
75
+ },
76
+ {
77
+ "name": "ta_monitorstatus",
78
+ "kind": "runtime-slash"
79
+ },
80
+ {
81
+ "name": "ta_flashstatus",
82
+ "kind": "runtime-slash"
83
+ },
84
+ {
85
+ "name": "ta_startdailyupdate",
86
+ "kind": "runtime-slash"
87
+ },
88
+ {
89
+ "name": "ta_stopdailyupdate",
90
+ "kind": "runtime-slash"
91
+ },
92
+ {
93
+ "name": "ta_updateall",
94
+ "kind": "runtime-slash"
95
+ },
96
+ {
97
+ "name": "ta_dailyupdatestatus",
98
+ "kind": "runtime-slash"
99
+ },
100
+ {
101
+ "name": "ta_testalert",
102
+ "kind": "runtime-slash"
103
+ },
104
+ {
105
+ "name": "ta_screenstocks",
106
+ "kind": "runtime-slash"
107
+ },
108
+ {
109
+ "name": "ta_screenstocks_llm",
110
+ "kind": "runtime-slash"
111
+ },
112
+ {
113
+ "name": "ta_debug",
114
+ "kind": "runtime-slash"
115
+ }
116
+ ],
117
+ "contracts": {
118
+ "tools": [
119
+ "add_stock",
120
+ "analyze",
121
+ "backtest_key_levels",
122
+ "daily_update_status",
123
+ "fetch_intraday_klines",
124
+ "fetch_financials",
125
+ "flash_monitor_status",
126
+ "fetch_klines",
127
+ "list_watchlist",
128
+ "list_eastmoney_watchlist",
129
+ "monitor_status",
130
+ "mx_data",
131
+ "mx_search",
132
+ "mx_select_stock",
133
+ "push_eastmoney_watchlist",
134
+ "query_database",
135
+ "refresh_watchlist_names",
136
+ "refresh_watchlist_profiles",
137
+ "remove_eastmoney_watchlist",
138
+ "remove_stock",
139
+ "screen_stock_candidates",
140
+ "start_daily_update",
141
+ "start_monitor",
142
+ "sync_eastmoney_watchlist",
143
+ "stop_daily_update",
144
+ "stop_monitor",
145
+ "test_alert",
146
+ "update_all",
147
+ "view_analysis"
29
148
  ]
30
149
  },
31
150
  "providerAuthChoices": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tickflow-assist",
3
- "version": "0.3.8",
3
+ "version": "0.3.9",
4
4
  "description": "面向 A 股投资与盯盘场景的 OpenClaw 智能股票插件,基于 TickFlow API 提供实时监控、收盘后复盘、多维综合分析、关键价位跟踪与告警能力。OpenClaw smart stock plugin for A-share investing and watchlist workflows, powered by TickFlow API for realtime monitoring, post-close review, multi-dimensional analysis, key level tracking, and alerts.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -46,17 +46,17 @@
46
46
  },
47
47
  "openclaw": {
48
48
  "build": {
49
- "openclawVersion": "2026.4.22"
49
+ "openclawVersion": "2026.5.2"
50
50
  },
51
51
  "compat": {
52
- "pluginApi": ">=2026.3.31",
53
- "minGatewayVersion": "2026.3.31",
54
- "builtWithOpenClawVersion": "2026.4.22"
52
+ "pluginApi": ">=2026.5.2",
53
+ "minGatewayVersion": "2026.5.2",
54
+ "builtWithOpenClawVersion": "2026.5.2"
55
55
  },
56
56
  "install": {
57
57
  "npmSpec": "tickflow-assist",
58
58
  "defaultChoice": "npm",
59
- "minHostVersion": ">=2026.3.31"
59
+ "minHostVersion": ">=2026.5.2"
60
60
  },
61
61
  "extensions": [
62
62
  "dist/plugin.js"
@@ -74,9 +74,9 @@
74
74
  },
75
75
  "devDependencies": {
76
76
  "@types/node": "^22.13.11",
77
- "openclaw": "^2026.4.22",
77
+ "openclaw": "^2026.5.2",
78
78
  "typescript": "^5.8.2"
79
79
  },
80
- "readme": "# TickFlow Assist\n\n基于 [OpenClaw](https://openclaw.ai) 的 A 股监控与分析插件。它使用 [TickFlow](https://tickflow.org/auth/register?ref=BUJ54JEDGE) 获取行情与财务数据,并可选接入 [金十数据 MCP](https://mcp.jin10.com/app/) 快讯流,结合 LLM 生成技术面、基本面、资讯面的综合判断,并把结果持久化到本地 LanceDB。\n\n最近更新:`v0.3.8` 接入东方财富自选同步、妙想官方数据/智能选股兼容与小规模候选池联动,新增 `/ta_screenstocks` / `/ta_screenstocks_llm`,并优化盘前简报提炼和监控阶段提醒去重。完整发布记录见 <https://github.com/robinspt/tickflow-assist/blob/main/CHANGELOG.md>。\n\n当前主线按 OpenClaw `v2026.3.31+` 对齐,并已验证社区安装在 `v2026.4.22` 上兼容。\n\n## 安装前准备\n\n在执行社区安装前,建议先确认你已经准备好以下配置:\n\n- 核心必需:`tickflowApiKey`、`llmApiKey`、`llmBaseUrl`、`llmModel`\n- 告警投递:`alertChannel`、`alertTarget`、`alertAccount`\n- 可选增强:`mxSearchApiKey`、`jin10ApiToken`\n\n其中,`configure-openclaw` 会把上述配置写入 `~/.openclaw/openclaw.json` 的 `plugins.entries[\"tickflow-assist\"].config`,插件启用后会在本地 `databasePath` 下持久化 LanceDB 数据,并运行监控 / 日更等后台服务。\n如果你不想把密钥写进配置文件,运行时也支持环境变量回退,优先级是 `openclaw.json / local.config.json` > 环境变量 > 默认值。\n常用环境变量:`TICKFLOW_ASSIST_TICKFLOW_API_KEY` / `TICKFLOW_API_KEY`、`TICKFLOW_ASSIST_LLM_API_KEY` / `LLM_API_KEY`、`TICKFLOW_ASSIST_LLM_BASE_URL` / `LLM_BASE_URL`、`TICKFLOW_ASSIST_LLM_MODEL` / `LLM_MODEL`、`TICKFLOW_ASSIST_MX_SEARCH_API_KEY` / `MX_SEARCH_API_KEY` / `MX_APIKEY`、`TICKFLOW_ASSIST_JIN10_API_TOKEN` / `JIN10_API_TOKEN`。\n如果你希望尽量避免把密钥落盘,推荐先把这些变量写进 `~/.openclaw/.env`,再运行配置向导补齐非密钥项。\n\n## 安装\n\n社区安装:\n\n```bash\nopenclaw plugins install tickflow-assist\nnode ~/.openclaw/extensions/tickflow-assist/dist/dev/tickflow-assist-cli.js configure-openclaw\ncd ~/.openclaw/extensions/tickflow-assist/python && uv sync\nopenclaw plugins enable tickflow-assist\nopenclaw config validate\nopenclaw gateway restart\n```\n\n- `configure-openclaw` 会把配置写入 `~/.openclaw/openclaw.json` 的 `plugins.entries[\"tickflow-assist\"].config`。\n- 核心必填建议先准备:`tickflowApiKey`、`tickflowApiKeyLevel`、`llmApiKey`、`llmBaseUrl`、`llmModel`;告警场景再补 `alertChannel`、`alertTarget`、`alertAccount`。\n- 如果你不想把密钥落盘,优先把环境变量写进 `~/.openclaw/.env`,再运行配置向导补齐非密钥项;如需 PNG 告警卡正常显示中文,请自行安装 `fontconfig` 与 Noto CJK 字体。\n\n社区安装后的升级方式:\n\n```bash\nopenclaw plugins update tickflow-assist\nopenclaw gateway restart\n```\n\n## 配置\n\n插件正式运行读取:\n\n```text\n~/.openclaw/openclaw.json\n```\n\n配置路径:\n\n```text\nplugins.entries[\"tickflow-assist\"].config\n```\n\n建议按完整功能显式填写以下字段,不要只填 API Key:\n\n- 核心运行:`tickflowApiKey`、`llmApiKey`、`llmBaseUrl`、`llmModel`\n- 本地数据:`databasePath`、`calendarFile`\n- 告警投递:`alertChannel`、`alertTarget`、`alertAccount`\n- 能力补充:`mxSearchApiKey`、`jin10ApiToken`\n\n其中,`mxSearchApiKey` 用于 `mx_search`、`mx_data`、`mx_select_stock`、东方财富自选同步以及非 `Expert` 财务链路的 lite 补充;东方财富自选管理接口每日额度 200 次;`jin10ApiToken` 用于 24 小时金十数据快讯监控;`jin10FlashNightAlert` 默认 `false`(开启夜间静默),设为 `true` 可恢复 24 小时快讯告警;`alertTarget`、`alertAccount` 建议在准备启用 `test_alert`、实时监控告警、金十数据快讯告警和定时通知前一并配好,避免配置不完整导致功能缺失。\n如果你使用环境变量,运行时支持以下回退:\n\n- `tickflowApiUrl`:`TICKFLOW_ASSIST_TICKFLOW_API_URL` / `TICKFLOW_API_URL`\n- `tickflowApiKey`:`TICKFLOW_ASSIST_TICKFLOW_API_KEY` / `TICKFLOW_API_KEY`\n- `tickflowApiKeyLevel`:`TICKFLOW_ASSIST_TICKFLOW_API_KEY_LEVEL` / `TICKFLOW_API_KEY_LEVEL`\n- `llmBaseUrl`:`TICKFLOW_ASSIST_LLM_BASE_URL` / `LLM_BASE_URL`\n- `llmApiKey`:`TICKFLOW_ASSIST_LLM_API_KEY` / `LLM_API_KEY`\n- `llmModel`:`TICKFLOW_ASSIST_LLM_MODEL` / `LLM_MODEL`\n- `mxSearchApiUrl`:`TICKFLOW_ASSIST_MX_SEARCH_API_URL` / `MX_SEARCH_API_URL`\n- `mxSearchApiKey`:`TICKFLOW_ASSIST_MX_SEARCH_API_KEY` / `MX_SEARCH_API_KEY` / `MX_APIKEY`\n- `jin10McpUrl`:`TICKFLOW_ASSIST_JIN10_MCP_URL` / `JIN10_MCP_URL`\n- `jin10ApiToken`:`TICKFLOW_ASSIST_JIN10_API_TOKEN` / `JIN10_API_TOKEN`\n\n## 功能\n\n- 自选股管理、东方财富自选同步、日 K / 分钟 K 抓取与指标计算\n- 妙想资讯搜索、官方金融数据查询、智能选股,以及限量候选池 + TickFlow 补数据联动\n- 技术面、财务面、资讯面的综合分析\n- 实时监控、定时日更、收盘后复盘\n- 金十数据 24 小时快讯监控与自选关联提醒\n- 本地 LanceDB 数据留痕与分析结果查看\n\n## 运行说明\n\n- 插件会在本地 `databasePath` 下持久化 LanceDB 数据。\n- 后台服务会按配置执行定时日更、实时监控与金十数据快讯监控。\n- Python 子模块仅用于技术指标计算,不承担主业务流程。\n\n## 依赖与可选能力\n\n- [TickFlow](https://tickflow.org/auth/register?ref=BUJ54JEDGE):`Free` 可用日线与实时行情;`Starter` 起可用标的池,插件会用来做申万行业映射与申万 3 级同业表现;`Pro` 起可用分钟K;`Expert` 才走 TickFlow 财务数据,非 `Expert` 默认回退妙想 lite。\n- [金十数据 MCP](https://mcp.jin10.com/app/):可选,用于 24 小时快讯流接入、自选关联筛选与事件驱动告警。独立的金十数据 Skill 详见 [OpenClaw Skill](https://clawhub.ai/robinspt/jin10) / [Hermes Skill](https://github.com/robinspt/hermes-skills)。\n- [东方财富妙想 Skills](https://marketing.dfcfs.com/views/finskillshub/):可选,用于 `mx_search`、`mx_data`、`mx_select_stock`、东方财富自选同步与非 `Expert` 财务链路的 lite 补充。\n\n## 仓库\n\n- GitHub: [robinspt/tickflow-assist](https://github.com/robinspt/tickflow-assist)\n",
80
+ "readme": "# TickFlow Assist\n\n基于 [OpenClaw](https://openclaw.ai) 的 A 股监控与分析插件。它使用 [TickFlow](https://tickflow.org/auth/register?ref=BUJ54JEDGE) 获取行情与财务数据,并可选接入 [金十数据 MCP](https://mcp.jin10.com/app/) 快讯流,结合 LLM 生成技术面、基本面、资讯面的综合判断,并把结果持久化到本地 LanceDB。\n\n最近更新:`v0.3.9` 对齐 OpenClaw `v2026.5.2+`,恢复新版 Telegram 原生命令菜单中的 `/ta_` 命令可见性,并增强 PNG 媒体投递失败后的文本回退与一键安装依赖处理。完整发布记录见 <https://github.com/robinspt/tickflow-assist/blob/main/CHANGELOG.md>。\n\n当前主线按 OpenClaw `v2026.5.2+` 对齐,并使用 `contracts.tools` 与 `setup.providers[].envVars` 等新版插件清单字段。\n\n## 安装前准备\n\n在执行社区安装前,建议先确认你已经准备好以下配置:\n\n- 核心必需:`tickflowApiKey`、`llmApiKey`、`llmBaseUrl`、`llmModel`\n- 告警投递:`alertChannel`、`alertTarget`、`alertAccount`\n- 可选增强:`mxSearchApiKey`、`jin10ApiToken`\n\n其中,`configure-openclaw` 会把上述配置写入 `~/.openclaw/openclaw.json` 的 `plugins.entries[\"tickflow-assist\"].config`,插件启用后会在本地 `databasePath` 下持久化 LanceDB 数据,并运行监控 / 日更等后台服务。\n如果你不想把密钥写进配置文件,运行时也支持环境变量回退,优先级是 `openclaw.json / local.config.json` > 环境变量 > 默认值。\n常用环境变量:`TICKFLOW_ASSIST_TICKFLOW_API_KEY` / `TICKFLOW_API_KEY`、`TICKFLOW_ASSIST_LLM_API_KEY` / `LLM_API_KEY`、`TICKFLOW_ASSIST_LLM_BASE_URL` / `LLM_BASE_URL`、`TICKFLOW_ASSIST_LLM_MODEL` / `LLM_MODEL`、`TICKFLOW_ASSIST_MX_SEARCH_API_KEY` / `MX_SEARCH_API_KEY` / `MX_APIKEY`、`TICKFLOW_ASSIST_JIN10_API_TOKEN` / `JIN10_API_TOKEN`。\n如果你希望尽量避免把密钥落盘,推荐先把这些变量写进 `~/.openclaw/.env`,再运行配置向导补齐非密钥项。\n\n## 安装\n\n社区安装:\n\n```bash\nopenclaw plugins install tickflow-assist\nnode ~/.openclaw/extensions/tickflow-assist/dist/dev/tickflow-assist-cli.js configure-openclaw\ncd ~/.openclaw/extensions/tickflow-assist/python && uv sync\nopenclaw plugins enable tickflow-assist\nopenclaw config validate\nopenclaw gateway restart\n```\n\n- `configure-openclaw` 会把配置写入 `~/.openclaw/openclaw.json` 的 `plugins.entries[\"tickflow-assist\"].config`。\n- 核心必填建议先准备:`tickflowApiKey`、`tickflowApiKeyLevel`、`llmApiKey`、`llmBaseUrl`、`llmModel`;告警场景再补 `alertChannel`、`alertTarget`、`alertAccount`。\n- 如果你不想把密钥落盘,优先把环境变量写进 `~/.openclaw/.env`,再运行配置向导补齐非密钥项;如需 PNG 告警卡图片投递,请确认宿主 OpenClaw 的全局 npm 环境可解析 `sharp`,如需中文正常显示再安装 `fontconfig` 与 Noto CJK 字体。\n\n社区安装后的升级方式:\n\n```bash\nopenclaw plugins update tickflow-assist\nopenclaw gateway restart\n```\n\n## 配置\n\n插件正式运行读取:\n\n```text\n~/.openclaw/openclaw.json\n```\n\n配置路径:\n\n```text\nplugins.entries[\"tickflow-assist\"].config\n```\n\n建议按完整功能显式填写以下字段,不要只填 API Key:\n\n- 核心运行:`tickflowApiKey`、`llmApiKey`、`llmBaseUrl`、`llmModel`\n- 本地数据:`databasePath`、`calendarFile`\n- 告警投递:`alertChannel`、`alertTarget`、`alertAccount`\n- 能力补充:`mxSearchApiKey`、`jin10ApiToken`\n\n其中,`mxSearchApiKey` 用于 `mx_search`、`mx_data`、`mx_select_stock`、东方财富自选同步以及非 `Expert` 财务链路的 lite 补充;东方财富自选管理接口每日额度 200 次;`jin10ApiToken` 用于 24 小时金十数据快讯监控;`jin10FlashNightAlert` 默认 `false`(开启夜间静默),设为 `true` 可恢复 24 小时快讯告警;`alertTarget`、`alertAccount` 建议在准备启用 `test_alert`、实时监控告警、金十数据快讯告警和定时通知前一并配好,避免配置不完整导致功能缺失。\n如果你使用环境变量,运行时支持以下回退:\n\n- `tickflowApiUrl`:`TICKFLOW_ASSIST_TICKFLOW_API_URL` / `TICKFLOW_API_URL`\n- `tickflowApiKey`:`TICKFLOW_ASSIST_TICKFLOW_API_KEY` / `TICKFLOW_API_KEY`\n- `tickflowApiKeyLevel`:`TICKFLOW_ASSIST_TICKFLOW_API_KEY_LEVEL` / `TICKFLOW_API_KEY_LEVEL`\n- `llmBaseUrl`:`TICKFLOW_ASSIST_LLM_BASE_URL` / `LLM_BASE_URL`\n- `llmApiKey`:`TICKFLOW_ASSIST_LLM_API_KEY` / `LLM_API_KEY`\n- `llmModel`:`TICKFLOW_ASSIST_LLM_MODEL` / `LLM_MODEL`\n- `mxSearchApiUrl`:`TICKFLOW_ASSIST_MX_SEARCH_API_URL` / `MX_SEARCH_API_URL`\n- `mxSearchApiKey`:`TICKFLOW_ASSIST_MX_SEARCH_API_KEY` / `MX_SEARCH_API_KEY` / `MX_APIKEY`\n- `jin10McpUrl`:`TICKFLOW_ASSIST_JIN10_MCP_URL` / `JIN10_MCP_URL`\n- `jin10ApiToken`:`TICKFLOW_ASSIST_JIN10_API_TOKEN` / `JIN10_API_TOKEN`\n\n## 功能\n\n- 自选股管理、东方财富自选同步、日 K / 分钟 K 抓取与指标计算\n- 妙想资讯搜索、官方金融数据查询、智能选股,以及限量候选池 + TickFlow 补数据联动\n- 技术面、财务面、资讯面的综合分析\n- 实时监控、定时日更、收盘后复盘\n- 金十数据 24 小时快讯监控与自选关联提醒\n- 本地 LanceDB 数据留痕与分析结果查看\n\n## 运行说明\n\n- 插件会在本地 `databasePath` 下持久化 LanceDB 数据。\n- 后台服务会按配置执行定时日更、实时监控与金十数据快讯监控。\n- Python 子模块仅用于技术指标计算,不承担主业务流程。\n\n## 依赖与可选能力\n\n- [TickFlow](https://tickflow.org/auth/register?ref=BUJ54JEDGE):`Free` 可用日线与实时行情;`Starter` 起可用标的池,插件会用来做申万行业映射与申万 3 级同业表现;`Pro` 起可用分钟K;`Expert` 才走 TickFlow 财务数据,非 `Expert` 默认回退妙想 lite。\n- `sharp`:插件本地依赖用于生成 PNG;OpenClaw `message send --media` 还需要宿主 OpenClaw 全局 npm 环境可解析 `sharp`,否则图片投递会回退为纯文本。\n- [金十数据 MCP](https://mcp.jin10.com/app/):可选,用于 24 小时快讯流接入、自选关联筛选与事件驱动告警。独立的金十数据 Skill 详见 [OpenClaw Skill](https://clawhub.ai/robinspt/jin10) / [Hermes Skill](https://github.com/robinspt/hermes-skills)。\n- [东方财富妙想 Skills](https://marketing.dfcfs.com/views/finskillshub/):可选,用于 `mx_search`、`mx_data`、`mx_select_stock`、东方财富自选同步与非 `Expert` 财务链路的 lite 补充。\n\n## 仓库\n\n- GitHub: [robinspt/tickflow-assist](https://github.com/robinspt/tickflow-assist)\n",
81
81
  "readmeFilename": "README.md"
82
82
  }