echopai 2.6.1 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +252 -688
- package/package.json +1 -1
package/dist/bin.js
CHANGED
|
@@ -15,8 +15,8 @@ var OPERATIONS = {
|
|
|
15
15
|
cliName: "agent session-end",
|
|
16
16
|
method: "POST",
|
|
17
17
|
path: "/v1/agent/session/{id}/end",
|
|
18
|
-
description: "
|
|
19
|
-
summary: "
|
|
18
|
+
description: "Closes a session opened by `/v1/agent/session/start` and commits its final usage.",
|
|
19
|
+
summary: "Close a billable agent session.",
|
|
20
20
|
positional: [
|
|
21
21
|
"id"
|
|
22
22
|
],
|
|
@@ -50,8 +50,8 @@ var OPERATIONS = {
|
|
|
50
50
|
cliName: "agent session-start",
|
|
51
51
|
method: "POST",
|
|
52
52
|
path: "/v1/agent/session/start",
|
|
53
|
-
description: "
|
|
54
|
-
summary: "
|
|
53
|
+
description: "Opens a billable session for an agent credential and returns a session_id that groups subsequent calls into a single billable unit. Requires an `Idempotency-Key` header.",
|
|
54
|
+
summary: "Open a billable agent session.",
|
|
55
55
|
positional: [],
|
|
56
56
|
outputDefault: "json",
|
|
57
57
|
pagination: "none",
|
|
@@ -115,8 +115,8 @@ var OPERATIONS = {
|
|
|
115
115
|
cliName: "agent session-usage",
|
|
116
116
|
method: "GET",
|
|
117
117
|
path: "/v1/agent/session/{id}/usage",
|
|
118
|
-
description: "
|
|
119
|
-
summary: "Get cumulative usage
|
|
118
|
+
description: "Returns the cumulative billable call count and per-scope quota consumption for the given session.",
|
|
119
|
+
summary: "Get cumulative usage for an agent session.",
|
|
120
120
|
positional: [
|
|
121
121
|
"id"
|
|
122
122
|
],
|
|
@@ -150,8 +150,8 @@ var OPERATIONS = {
|
|
|
150
150
|
cliName: "announcements detail",
|
|
151
151
|
method: "GET",
|
|
152
152
|
path: "/v1/announcements/{announcement_id}",
|
|
153
|
-
description: "
|
|
154
|
-
summary: "
|
|
153
|
+
description: "Returns the full content of one announcement: body (markdown and plain text), metadata, and parse status.",
|
|
154
|
+
summary: "Get a single announcement by id.",
|
|
155
155
|
positional: [
|
|
156
156
|
"announcement_id"
|
|
157
157
|
],
|
|
@@ -185,8 +185,8 @@ var OPERATIONS = {
|
|
|
185
185
|
cliName: "announcements feed",
|
|
186
186
|
method: "GET",
|
|
187
187
|
path: "/v1/announcements/feed",
|
|
188
|
-
description: "
|
|
189
|
-
summary: "List recent A-share announcements",
|
|
188
|
+
description: "Returns a feed of recent A-share corporate announcements, sorted by publication date descending. Filter by `type` or `since`. Requires the `announcements:read` scope.",
|
|
189
|
+
summary: "List recent A-share announcements.",
|
|
190
190
|
positional: [],
|
|
191
191
|
outputDefault: "json",
|
|
192
192
|
pagination: "offset",
|
|
@@ -233,8 +233,8 @@ var OPERATIONS = {
|
|
|
233
233
|
cliName: "announcements search",
|
|
234
234
|
method: "GET",
|
|
235
235
|
path: "/v1/announcements/search",
|
|
236
|
-
description: "
|
|
237
|
-
summary: "
|
|
236
|
+
description: "Hybrid search over A-share announcements: structured filtering by security name or code, combined with full-text keyword search (over title, AI summary, and the first ~1500 characters of the body). A query containing a 6-digit code or an embedded security name is filtered by that security; remaining free text is ranked by relevance with time decay; a pure code or name lists results by publication date descending. Requires the `announcements:read` scope.",
|
|
237
|
+
summary: "Search A-share announcements.",
|
|
238
238
|
positional: [],
|
|
239
239
|
outputDefault: "json",
|
|
240
240
|
pagination: "offset",
|
|
@@ -293,8 +293,8 @@ var OPERATIONS = {
|
|
|
293
293
|
cliName: "announcements stock",
|
|
294
294
|
method: "GET",
|
|
295
295
|
path: "/v1/announcements/stock",
|
|
296
|
-
description: "
|
|
297
|
-
summary: "List announcements for
|
|
296
|
+
description: "Returns the announcement history for one A-share security over a date window. Accepts a 6-digit code or canonical form (e.g. `SSE:600519`). Requires the `announcements:read` scope.",
|
|
297
|
+
summary: "List announcements for one security.",
|
|
298
298
|
positional: [],
|
|
299
299
|
outputDefault: "json",
|
|
300
300
|
pagination: "offset",
|
|
@@ -352,17 +352,8 @@ var OPERATIONS = {
|
|
|
352
352
|
cliName: "auth whoami",
|
|
353
353
|
method: "GET",
|
|
354
354
|
path: "/v1/auth/whoami",
|
|
355
|
-
description:
|
|
356
|
-
|
|
357
|
-
feature_flags. Any valid JWT can call — no specific scope required.
|
|
358
|
-
|
|
359
|
-
CLI/MCP call this once at startup, cache 5 minutes in-process, and use
|
|
360
|
-
the response to derive \`verbs.available\` (intersection of curated verb
|
|
361
|
-
scopes with token scopes) and to populate \`echopai doctor\` checks.
|
|
362
|
-
|
|
363
|
-
See \`docs/PLAN_CLI_V2_AGENT_SURFACE.md\` §5.1.
|
|
364
|
-
`,
|
|
365
|
-
summary: "Token introspection (CLI/MCP capability discovery)",
|
|
355
|
+
description: "Returns the calling token's kind, scopes, audience, app metadata, rate limit, allowed clients, agent budget (when kind=agent), API version, and feature flags. Any valid token may call this; no specific scope is required. Clients typically call it once at startup and cache the result briefly to determine which commands are available.",
|
|
356
|
+
summary: "Introspect the calling token (capability discovery).",
|
|
366
357
|
positional: [],
|
|
367
358
|
outputDefault: "json",
|
|
368
359
|
pagination: "none",
|
|
@@ -383,8 +374,8 @@ See \`docs/PLAN_CLI_V2_AGENT_SURFACE.md\` §5.1.
|
|
|
383
374
|
cliName: "bars daily",
|
|
384
375
|
method: "GET",
|
|
385
376
|
path: "/v1/bars/daily",
|
|
386
|
-
description: "
|
|
387
|
-
summary: "
|
|
377
|
+
description: "Returns daily open/high/low/close/volume/turnover for one A-share security over a date range (canonical code, e.g. `SSE:600519`). End-of-day data. Requires the `bars:30d` scope (last 30 trading days) or `bars:full` scope (full history).",
|
|
378
|
+
summary: "List daily OHLC bars for one A-share security.",
|
|
388
379
|
positional: [],
|
|
389
380
|
outputDefault: "json",
|
|
390
381
|
pagination: "none",
|
|
@@ -432,8 +423,8 @@ See \`docs/PLAN_CLI_V2_AGENT_SURFACE.md\` §5.1.
|
|
|
432
423
|
cliName: "bars daily-batch",
|
|
433
424
|
method: "GET",
|
|
434
425
|
path: "/v1/bars/daily-batch",
|
|
435
|
-
description: "
|
|
436
|
-
summary: "Batch daily OHLC bars for up to 100
|
|
426
|
+
description: "Returns daily OHLC bars for multiple A-share securities in one call: up to 100 codes and up to a one-year date range. Responses use a partial-success envelope: codes the token may not access are reported in `errors[]`, the rest in `items[]` (with an empty `bars[]` when no data is found), preserving input order. Requires the `bars:30d` or `bars:full` scope.",
|
|
427
|
+
summary: "Batch daily OHLC bars for up to 100 securities.",
|
|
437
428
|
positional: [],
|
|
438
429
|
outputDefault: "json",
|
|
439
430
|
pagination: "none",
|
|
@@ -489,8 +480,8 @@ See \`docs/PLAN_CLI_V2_AGENT_SURFACE.md\` §5.1.
|
|
|
489
480
|
cliName: "bars minute",
|
|
490
481
|
method: "GET",
|
|
491
482
|
path: "/v1/bars/minute",
|
|
492
|
-
description: "
|
|
493
|
-
summary: "
|
|
483
|
+
description: "Returns minute-level OHLC bars for one A-share security on a single trade date (canonical code, e.g. `SSE:600519`). Requires the `bars:30d` or `bars:full` scope.",
|
|
484
|
+
summary: "List minute OHLC bars for one A-share security.",
|
|
494
485
|
positional: [],
|
|
495
486
|
outputDefault: "json",
|
|
496
487
|
pagination: "none",
|
|
@@ -531,8 +522,8 @@ See \`docs/PLAN_CLI_V2_AGENT_SURFACE.md\` §5.1.
|
|
|
531
522
|
cliName: "bars minute-batch",
|
|
532
523
|
method: "GET",
|
|
533
524
|
path: "/v1/bars/minute-batch",
|
|
534
|
-
description: "
|
|
535
|
-
summary: "Batch minute OHLC bars for up to 20
|
|
525
|
+
description: "Returns minute-level OHLC bars for multiple A-share securities in one call: up to 20 codes and up to a 7 calendar-day (~5 trading-day) range. Responses use a partial-success envelope: codes the token may not access are reported in `errors[]`, the rest in `items[]` with a flat `bars[]` array where each bar carries its own `trade_date` for client-side grouping. Requires the `bars:30d` or `bars:full` scope.",
|
|
526
|
+
summary: "Batch minute OHLC bars for up to 20 securities.",
|
|
536
527
|
positional: [],
|
|
537
528
|
outputDefault: "json",
|
|
538
529
|
pagination: "none",
|
|
@@ -588,12 +579,8 @@ See \`docs/PLAN_CLI_V2_AGENT_SURFACE.md\` §5.1.
|
|
|
588
579
|
cliName: "concepts alerts",
|
|
589
580
|
method: "GET",
|
|
590
581
|
path: "/v1/concepts/alerts",
|
|
591
|
-
description:
|
|
592
|
-
|
|
593
|
-
- limit_up_cluster: limit_up_count >= 3 AND stock_count >= 5
|
|
594
|
-
See PLAN_CONCEPT_INDUSTRY_QUOTE §5.5 "异动检测与推送".
|
|
595
|
-
`,
|
|
596
|
-
summary: "Currently active concept alerts (big_move / limit_up_cluster)",
|
|
582
|
+
description: "Returns the live set of concept alerts. Two rules fire: `big_move` when absolute percent change exceeds 3%, and `limit_up_cluster` when a concept has at least 3 limit-up members across at least 5 member stocks.",
|
|
583
|
+
summary: "List currently active concept alerts.",
|
|
597
584
|
positional: [],
|
|
598
585
|
outputDefault: "json",
|
|
599
586
|
pagination: "none",
|
|
@@ -618,8 +605,8 @@ See PLAN_CONCEPT_INDUSTRY_QUOTE §5.5 "异动检测与推送".
|
|
|
618
605
|
cliName: "concepts alerts-history",
|
|
619
606
|
method: "GET",
|
|
620
607
|
path: "/v1/concepts/alerts/history",
|
|
621
|
-
description: "
|
|
622
|
-
summary: "
|
|
608
|
+
description: "Returns historical concept alert events (default: last 24 hours). Filter by rule (`big_move` / `limit_up_cluster`) and time window. Useful for reviewing how concept activity evolved over a period.",
|
|
609
|
+
summary: "List recent concept alert history.",
|
|
623
610
|
positional: [],
|
|
624
611
|
outputDefault: "json",
|
|
625
612
|
pagination: "none",
|
|
@@ -668,10 +655,8 @@ See PLAN_CONCEPT_INDUSTRY_QUOTE §5.5 "异动检测与推送".
|
|
|
668
655
|
cliName: "concepts daily-bars",
|
|
669
656
|
method: "GET",
|
|
670
657
|
path: "/v1/concepts/{concept_id}/daily-bars",
|
|
671
|
-
description:
|
|
672
|
-
|
|
673
|
-
`,
|
|
674
|
-
summary: "Concept index daily bars (chain-linked equal-weight, base 1000)",
|
|
658
|
+
description: "Returns daily OHLC for a concept index (index points, not an average of member stock prices), along with breadth fields and a backfill flag. The concept index is a chain-linked equal-weight return series with a base of 1000.",
|
|
659
|
+
summary: "List daily bars for a concept index.",
|
|
675
660
|
positional: [
|
|
676
661
|
"concept_id"
|
|
677
662
|
],
|
|
@@ -716,8 +701,8 @@ breadth fields, and is_backfilled flag. See PLAN §5.4 algorithm.
|
|
|
716
701
|
cliName: "concepts list",
|
|
717
702
|
method: "GET",
|
|
718
703
|
path: "/v1/concepts",
|
|
719
|
-
description: "
|
|
720
|
-
summary: "List concepts with live snapshot
|
|
704
|
+
description: "Lists market concepts (themes/sectors) joined with their latest real-time snapshot, falling back to the last close and then to recent daily data when live ticks are unavailable. Each item carries a `_source` freshness indicator. Live fields include percent change, index value, advancing/declining counts, limit-up count, turnover amount, 3-minute momentum, and `main_net_in` (net main-capital inflow in CNY, which may be negative for net outflow and null when unavailable). The concept index is a chain-linked equal-weight return series with a base of 1000. During the 9:00–9:14 pre-open window, live data is suppressed and a loading state is returned.",
|
|
705
|
+
summary: "List concepts with their live snapshot.",
|
|
721
706
|
positional: [],
|
|
722
707
|
outputDefault: "json",
|
|
723
708
|
pagination: "none",
|
|
@@ -773,8 +758,8 @@ breadth fields, and is_backfilled flag. See PLAN §5.4 algorithm.
|
|
|
773
758
|
cliName: "concepts minute-bars",
|
|
774
759
|
method: "GET",
|
|
775
760
|
path: "/v1/concepts/{concept_id}/minute-bars",
|
|
776
|
-
description: "
|
|
777
|
-
summary: "
|
|
761
|
+
description: "Returns minute-level OHLC for a concept index (chain-linked equal-weight return series, base 1000), up to 7 days per request.",
|
|
762
|
+
summary: "List minute bars for a concept index.",
|
|
778
763
|
positional: [
|
|
779
764
|
"concept_id"
|
|
780
765
|
],
|
|
@@ -819,10 +804,8 @@ breadth fields, and is_backfilled flag. See PLAN §5.4 algorithm.
|
|
|
819
804
|
cliName: "concepts news",
|
|
820
805
|
method: "GET",
|
|
821
806
|
path: "/v1/concepts/{concept_id}/news",
|
|
822
|
-
description:
|
|
823
|
-
|
|
824
|
-
`,
|
|
825
|
-
summary: "Related news matching concept name (ILIKE)",
|
|
807
|
+
description: "Returns recent news whose title or body mentions the concept's name. Use it to see what is currently driving a theme.",
|
|
808
|
+
summary: "List news related to a concept.",
|
|
826
809
|
positional: [
|
|
827
810
|
"concept_id"
|
|
828
811
|
],
|
|
@@ -869,8 +852,8 @@ concept name and full_name. Long-term: news AI tagging.
|
|
|
869
852
|
cliName: "concepts show",
|
|
870
853
|
method: "GET",
|
|
871
854
|
path: "/v1/concepts/{concept_id}",
|
|
872
|
-
description: "
|
|
873
|
-
summary: "
|
|
855
|
+
description: "Returns detail for one concept: metadata (full name, source, status, approval date, first-listed date) plus its current member securities with their latest snapshots.",
|
|
856
|
+
summary: "Get concept detail with member securities.",
|
|
874
857
|
positional: [
|
|
875
858
|
"concept_id"
|
|
876
859
|
],
|
|
@@ -905,8 +888,8 @@ concept name and full_name. Long-term: news AI tagging.
|
|
|
905
888
|
cliName: "concepts snapshot",
|
|
906
889
|
method: "GET",
|
|
907
890
|
path: "/v1/concepts/snapshot",
|
|
908
|
-
description: "
|
|
909
|
-
summary: "Bulk
|
|
891
|
+
description: "Returns real-time snapshots for concepts, with two modes. With `codes=`, each requested concept id is resolved via real-time → last-close → recent-daily fallback so every requested id is populated. Without `codes`, it returns a best-effort dump of all concepts that currently have a real-time or last-close snapshot; concepts absent from both are not backfilled (use `GET /v1/concepts` if you need every known concept). Each item carries a `_source` freshness indicator. During the 9:00–9:14 pre-open window, live data is suppressed and an empty list is returned.",
|
|
892
|
+
summary: "Bulk real-time snapshot of concepts.",
|
|
910
893
|
positional: [],
|
|
911
894
|
outputDefault: "json",
|
|
912
895
|
pagination: "none",
|
|
@@ -936,8 +919,8 @@ concept name and full_name. Long-term: news AI tagging.
|
|
|
936
919
|
cliName: "concepts views",
|
|
937
920
|
method: "GET",
|
|
938
921
|
path: "/v1/concepts/{concept_id}/views",
|
|
939
|
-
description: "
|
|
940
|
-
summary: "
|
|
922
|
+
description: "Returns analyst views linked to this concept (with AI processing complete), sorted by publication date descending.",
|
|
923
|
+
summary: "List analyst views associated with a concept.",
|
|
941
924
|
positional: [
|
|
942
925
|
"concept_id"
|
|
943
926
|
],
|
|
@@ -977,25 +960,8 @@ concept name and full_name. Long-term: news AI tagging.
|
|
|
977
960
|
cliName: "digest get",
|
|
978
961
|
method: "GET",
|
|
979
962
|
path: "/v1/digest/{code}",
|
|
980
|
-
description:
|
|
981
|
-
|
|
982
|
-
market sentiment context, and supplementary news.
|
|
983
|
-
Partial-failure tolerant:
|
|
984
|
-
each bucket is independently fetched and per-bucket failures surface
|
|
985
|
-
in \`meta.partial_failures[]\` rather than poisoning the response. If
|
|
986
|
-
every sub-bucket fails the endpoint returns 502.
|
|
987
|
-
|
|
988
|
-
Bucket scopes are checked *per bucket* (not at gateway level): a
|
|
989
|
-
token with only \`views:read\` gets the views bucket populated and the
|
|
990
|
-
rest reported as \`scope_insufficient\` partial failures. This mirrors
|
|
991
|
-
the CLI fan-out contract exactly so \`echopai digest\` can either call
|
|
992
|
-
this endpoint (preferred, single round-trip) or fall back to local
|
|
993
|
-
fan-out without behavior drift.
|
|
994
|
-
|
|
995
|
-
See \`docs/PLAN_CLI_V2_AGENT_SURFACE.md\` §3.3 (digest spec) and §11
|
|
996
|
-
Phase 5.2 (server endpoint).
|
|
997
|
-
`,
|
|
998
|
-
summary: "One-shot research digest for a single security (composite)",
|
|
963
|
+
description: "Composite endpoint that, in a single call, returns separated sections for one security: analyst views (the primary research source), a real-time quote, a valuation snapshot (PE/PB/PS, turnover rate, dividend yield, volume ratio, and ~14 fields in total), market sentiment context, and supplementary news. Each section is fetched independently and per-section failures are reported in `meta.partial_failures[]` instead of failing the whole call; the endpoint returns 502 only if every section fails. Scopes are enforced per section, so a token with only `views:read` receives the views section and sees the rest reported as scope-insufficient. Use this when you want a single broad overview of a security (canonical code, e.g. `SSE:600519`).",
|
|
964
|
+
summary: "Build a one-shot research digest for one security.",
|
|
999
965
|
positional: [
|
|
1000
966
|
"code"
|
|
1001
967
|
],
|
|
@@ -1049,8 +1015,8 @@ Phase 5.2 (server endpoint).
|
|
|
1049
1015
|
cliName: "financials pit",
|
|
1050
1016
|
method: "GET",
|
|
1051
1017
|
path: "/v1/financials/pit",
|
|
1052
|
-
description: "
|
|
1053
|
-
summary: "
|
|
1018
|
+
description: "Returns the most recent financial report that was publicly available on a given date for one A-share security (canonical code, e.g. `SSE:600519`) — i.e. announcement date on or before `date`, with a conservative 90-day fallback when the announcement date is unknown. Designed to avoid look-ahead bias in backtests and quantitative strategies. Fields include EPS (basic / non-recurring / diluted), BPS, ROE, gross margin, revenue, net profit, total assets, and parent-company equity (~25 core fields).",
|
|
1019
|
+
summary: "Get point-in-time fundamentals for one security at a date.",
|
|
1054
1020
|
positional: [],
|
|
1055
1021
|
outputDefault: "json",
|
|
1056
1022
|
pagination: "none",
|
|
@@ -1089,8 +1055,8 @@ Phase 5.2 (server endpoint).
|
|
|
1089
1055
|
cliName: "financials quote-snapshot",
|
|
1090
1056
|
method: "GET",
|
|
1091
1057
|
path: "/v1/financials/quote-snapshot",
|
|
1092
|
-
description: "
|
|
1093
|
-
summary: "
|
|
1058
|
+
description: "Returns a one-stop valuation snapshot (14 fields) for one A-share security (canonical code, e.g. `SSE:600519`), combining real-time prices with point-in-time fundamentals so figures are free of look-ahead bias. Fields: valuation (`pe`, `pe_ttm`, `pb`, `ps`, `ps_ttm`); share counts in 10k shares (`total_share`, `float_share`, `free_share`); market cap in 10k CNY (`total_mv`, `circ_mv`); liquidity (`turnover_rate`, `turnover_rate_f` in %, `volume_ratio` as a multiple); and dividend yield (`dv_ratio`, `dv_ttm` in %). Leave `date` empty for a real-time snapshot, or pass `date=YYYY-MM-DD` to value as of that day's close (useful for historical checks and backtests).",
|
|
1059
|
+
summary: "Get a real-time valuation snapshot for one security.",
|
|
1094
1060
|
positional: [],
|
|
1095
1061
|
outputDefault: "json",
|
|
1096
1062
|
pagination: "none",
|
|
@@ -1130,8 +1096,8 @@ Phase 5.2 (server endpoint).
|
|
|
1130
1096
|
cliName: "financials reports",
|
|
1131
1097
|
method: "GET",
|
|
1132
1098
|
path: "/v1/financials/reports",
|
|
1133
|
-
description: "
|
|
1134
|
-
summary: "
|
|
1099
|
+
description: "Returns core indicators for the most recent N financial reports of one A-share security (EPS/BPS/ROE, gross margin, revenue, net profit, total assets, parent equity, operating cash flow, total shares, and ~25 fields in total). Filter by `kind` for quarterly / interim / annual reports. Each report's `announce_date` indicates when it became publicly visible, which is useful for point-in-time analysis. Note: `kind=preliminary` does not exist as a separate report row — earnings forecasts and flash reports are exposed as metric fields (e.g. `forecast_ni_lower`, `forecast_ni_upper`, `express_ni_parent`, `express_revenue`) via `financials.series`, so `kind=preliminary` returns an empty list with an explanatory note.",
|
|
1100
|
+
summary: "List recent financial reports for one security.",
|
|
1135
1101
|
positional: [],
|
|
1136
1102
|
outputDefault: "json",
|
|
1137
1103
|
pagination: "none",
|
|
@@ -1182,8 +1148,8 @@ Phase 5.2 (server endpoint).
|
|
|
1182
1148
|
cliName: "financials series",
|
|
1183
1149
|
method: "GET",
|
|
1184
1150
|
path: "/v1/financials/series",
|
|
1185
|
-
description: "
|
|
1186
|
-
summary: "
|
|
1151
|
+
description: "Returns the historical time series of a single financial metric for one A-share security, ordered by reporting period. `metric` is an indicator field name (e.g. `roe_simple`, `revenue`, `ni_parent`, `debt_asset_ratio`, `gross_margin`, `eps_basic`; ~150 metrics available). Use it to chart a multi-year trend for one company or to compare the same metric across several securities.",
|
|
1152
|
+
summary: "Get a time series of one financial metric.",
|
|
1187
1153
|
positional: [],
|
|
1188
1154
|
outputDefault: "json",
|
|
1189
1155
|
pagination: "none",
|
|
@@ -1241,8 +1207,8 @@ Phase 5.2 (server endpoint).
|
|
|
1241
1207
|
cliName: "index daily-bars",
|
|
1242
1208
|
method: "GET",
|
|
1243
1209
|
path: "/v1/index/bars/daily",
|
|
1244
|
-
description: "
|
|
1245
|
-
summary: "
|
|
1210
|
+
description: "Returns daily OHLC for one A-share index (e.g. 上证综指 `SSE:000001`, 深证成指 `SZSE:399001`, 沪深300 `SSE:000300`, 北证50 `BSE:899050`, CSI series such as `CSI:000922`). Same semantics as `/v1/bars/daily`, but indices have no stock-specific fields such as turnover rate or suspension flag.",
|
|
1211
|
+
summary: "List daily OHLC bars for one A-share index.",
|
|
1246
1212
|
positional: [],
|
|
1247
1213
|
outputDefault: "json",
|
|
1248
1214
|
pagination: "none",
|
|
@@ -1290,8 +1256,8 @@ Phase 5.2 (server endpoint).
|
|
|
1290
1256
|
cliName: "index minute-bars",
|
|
1291
1257
|
method: "GET",
|
|
1292
1258
|
path: "/v1/index/bars/minute",
|
|
1293
|
-
description: "
|
|
1294
|
-
summary: "
|
|
1259
|
+
description: "Returns 1-minute OHLC for one A-share index over a date range of up to 7 days. Each bar includes bar time, trade date, OHLC, volume, amount, and percent change.",
|
|
1260
|
+
summary: "List minute OHLC bars for one A-share index.",
|
|
1295
1261
|
positional: [],
|
|
1296
1262
|
outputDefault: "json",
|
|
1297
1263
|
pagination: "none",
|
|
@@ -1337,8 +1303,8 @@ Phase 5.2 (server endpoint).
|
|
|
1337
1303
|
cliName: "index snapshot",
|
|
1338
1304
|
method: "GET",
|
|
1339
1305
|
path: "/v1/index/snapshot",
|
|
1340
|
-
description: "Returns the latest real-time snapshot for the 172 indices that
|
|
1341
|
-
summary: "
|
|
1306
|
+
description: "Returns the latest real-time snapshot for the 172 A-share indices that have a live quote feed (SSE / SZSE / BSE, including 北证50 `BSE:899050`). The snapshot refreshes roughly every 15 seconds during market hours; outside trading hours the last intraday snapshot is returned. Use `codes` (canonical format, e.g. `SSE:000001`) to narrow to a subset, or omit it to receive all indices. Note: CSI-series indices (e.g. `CSI:000922`) have no live quote feed and are not returned here. Requires a `quote:l1`, `quote:l2`, or `quote:delayed` scope.",
|
|
1307
|
+
summary: "Snapshot real-time quotes for A-share indices.",
|
|
1342
1308
|
positional: [],
|
|
1343
1309
|
outputDefault: "json",
|
|
1344
1310
|
pagination: "none",
|
|
@@ -1364,197 +1330,13 @@ Phase 5.2 (server endpoint).
|
|
|
1364
1330
|
additionalProperties: false
|
|
1365
1331
|
}
|
|
1366
1332
|
},
|
|
1367
|
-
"industries.alerts": {
|
|
1368
|
-
cliKey: "industries.alerts",
|
|
1369
|
-
cliName: "industries alerts",
|
|
1370
|
-
method: "GET",
|
|
1371
|
-
path: "/v1/industries/alerts",
|
|
1372
|
-
description: "Currently active industry alerts (big_move / limit_up_cluster). Same rule set as concepts.",
|
|
1373
|
-
summary: "Currently active industry alerts",
|
|
1374
|
-
positional: [],
|
|
1375
|
-
outputDefault: "json",
|
|
1376
|
-
pagination: "none",
|
|
1377
|
-
stream: false,
|
|
1378
|
-
billable: false,
|
|
1379
|
-
idempotencyRequired: false,
|
|
1380
|
-
scopesAny: [
|
|
1381
|
-
"quote:l1",
|
|
1382
|
-
"quote:l2",
|
|
1383
|
-
"quote:delayed"
|
|
1384
|
-
],
|
|
1385
|
-
sideEffect: "read",
|
|
1386
|
-
dryRunSupported: false,
|
|
1387
|
-
inputSchema: {
|
|
1388
|
-
type: "object",
|
|
1389
|
-
properties: {},
|
|
1390
|
-
additionalProperties: false
|
|
1391
|
-
}
|
|
1392
|
-
},
|
|
1393
|
-
"industries.daily-bars": {
|
|
1394
|
-
cliKey: "industries.daily-bars",
|
|
1395
|
-
cliName: "industries daily-bars",
|
|
1396
|
-
method: "GET",
|
|
1397
|
-
path: "/v1/industries/{key}/daily-bars",
|
|
1398
|
-
description: "Industry index daily OHLC (chain-linked equal-weight, base = 1000). Path key format `<sw_industry_code>:<sw_level>` (e.g. `401001:1`).",
|
|
1399
|
-
summary: "Industry index daily bars",
|
|
1400
|
-
positional: [
|
|
1401
|
-
"key"
|
|
1402
|
-
],
|
|
1403
|
-
outputDefault: "json",
|
|
1404
|
-
pagination: "none",
|
|
1405
|
-
stream: false,
|
|
1406
|
-
billable: true,
|
|
1407
|
-
idempotencyRequired: false,
|
|
1408
|
-
scopesAny: [
|
|
1409
|
-
"bars:read"
|
|
1410
|
-
],
|
|
1411
|
-
sideEffect: "read",
|
|
1412
|
-
dryRunSupported: false,
|
|
1413
|
-
inputSchema: {
|
|
1414
|
-
type: "object",
|
|
1415
|
-
properties: {
|
|
1416
|
-
key: {
|
|
1417
|
-
type: "string",
|
|
1418
|
-
description: "Industry key in `<sw_industry_code>:<sw_level>` format (e.g. `401001:1`).",
|
|
1419
|
-
example: "401001:1"
|
|
1420
|
-
},
|
|
1421
|
-
from: {
|
|
1422
|
-
type: "string",
|
|
1423
|
-
format: "date",
|
|
1424
|
-
description: "Window start. For daily/minute bars: ISO date `YYYY-MM-DD`. For alerts history: Unix milliseconds (default = now - 24h)."
|
|
1425
|
-
},
|
|
1426
|
-
to: {
|
|
1427
|
-
type: "string",
|
|
1428
|
-
format: "date",
|
|
1429
|
-
description: "Window end. For daily/minute bars: ISO date `YYYY-MM-DD`. For alerts history: Unix milliseconds (default = now)."
|
|
1430
|
-
}
|
|
1431
|
-
},
|
|
1432
|
-
additionalProperties: false,
|
|
1433
|
-
required: [
|
|
1434
|
-
"key",
|
|
1435
|
-
"from",
|
|
1436
|
-
"to"
|
|
1437
|
-
]
|
|
1438
|
-
}
|
|
1439
|
-
},
|
|
1440
|
-
"industries.list": {
|
|
1441
|
-
cliKey: "industries.list",
|
|
1442
|
-
cliName: "industries list",
|
|
1443
|
-
method: "GET",
|
|
1444
|
-
path: "/v1/industries",
|
|
1445
|
-
description: "Industry index list joining CH `v_industry_meta` with Redis snapshot.\n申万一级 (level=1) ≈ 127 industries, 申万二级 (level=2) ≈ 348.\nChain-linked equal-weight algorithm identical to concepts (PLAN §5.4).\n\nRead order per industry (mirrors `/v1/concepts`, PR #442):\n 1. `industry_snapshots:latest` (hot, TTL 5min)\n 2. `industry_snapshots:last_close` (warm, TTL 7d)\n 3. CH `v_industry_daily_bars` argMax\n9:00–9:14 reset window suppresses hot+warm (loading state).\nEach item carries `_source` ∈ {`latest`, `last_close`, `ch_daily`, `miss`}.\n",
|
|
1446
|
-
summary: "List industries (申万 L1/L2) with hot/warm fallback",
|
|
1447
|
-
positional: [],
|
|
1448
|
-
outputDefault: "json",
|
|
1449
|
-
pagination: "none",
|
|
1450
|
-
stream: false,
|
|
1451
|
-
billable: true,
|
|
1452
|
-
idempotencyRequired: false,
|
|
1453
|
-
scopesAny: [
|
|
1454
|
-
"quote:l1",
|
|
1455
|
-
"quote:l2",
|
|
1456
|
-
"quote:delayed"
|
|
1457
|
-
],
|
|
1458
|
-
sideEffect: "read",
|
|
1459
|
-
dryRunSupported: false,
|
|
1460
|
-
inputSchema: {
|
|
1461
|
-
type: "object",
|
|
1462
|
-
properties: {
|
|
1463
|
-
level: {
|
|
1464
|
-
type: "integer",
|
|
1465
|
-
enum: [
|
|
1466
|
-
1,
|
|
1467
|
-
2
|
|
1468
|
-
],
|
|
1469
|
-
default: 1,
|
|
1470
|
-
description: "申万 industry level (1 or 2)."
|
|
1471
|
-
},
|
|
1472
|
-
limit: {
|
|
1473
|
-
type: "integer",
|
|
1474
|
-
minimum: 1,
|
|
1475
|
-
maximum: 1000,
|
|
1476
|
-
default: 500,
|
|
1477
|
-
description: "Maximum number of items to return."
|
|
1478
|
-
}
|
|
1479
|
-
},
|
|
1480
|
-
additionalProperties: false
|
|
1481
|
-
}
|
|
1482
|
-
},
|
|
1483
|
-
"industries.show": {
|
|
1484
|
-
cliKey: "industries.show",
|
|
1485
|
-
cliName: "industries show",
|
|
1486
|
-
method: "GET",
|
|
1487
|
-
path: "/v1/industries/{key}",
|
|
1488
|
-
description: "Path key format: `<sw_industry_code>:<sw_level>` (e.g. `401001:1`).",
|
|
1489
|
-
summary: "Industry detail (meta + today members)",
|
|
1490
|
-
positional: [
|
|
1491
|
-
"key"
|
|
1492
|
-
],
|
|
1493
|
-
outputDefault: "json",
|
|
1494
|
-
pagination: "none",
|
|
1495
|
-
stream: false,
|
|
1496
|
-
billable: true,
|
|
1497
|
-
idempotencyRequired: false,
|
|
1498
|
-
scopesAny: [
|
|
1499
|
-
"quote:l1",
|
|
1500
|
-
"quote:l2",
|
|
1501
|
-
"quote:delayed"
|
|
1502
|
-
],
|
|
1503
|
-
sideEffect: "read",
|
|
1504
|
-
dryRunSupported: false,
|
|
1505
|
-
inputSchema: {
|
|
1506
|
-
type: "object",
|
|
1507
|
-
properties: {
|
|
1508
|
-
key: {
|
|
1509
|
-
type: "string",
|
|
1510
|
-
description: "Industry key in `<sw_industry_code>:<sw_level>` format (e.g. `401001:1`).",
|
|
1511
|
-
example: "401001:1"
|
|
1512
|
-
}
|
|
1513
|
-
},
|
|
1514
|
-
additionalProperties: false,
|
|
1515
|
-
required: [
|
|
1516
|
-
"key"
|
|
1517
|
-
]
|
|
1518
|
-
}
|
|
1519
|
-
},
|
|
1520
|
-
"industries.snapshot": {
|
|
1521
|
-
cliKey: "industries.snapshot",
|
|
1522
|
-
cliName: "industries snapshot",
|
|
1523
|
-
method: "GET",
|
|
1524
|
-
path: "/v1/industries/snapshot",
|
|
1525
|
-
description: "Mirrors `/v1/concepts/snapshot` contract (PR #442 review 二轮):\n\n- **With `codes=`** (per-key completeness): hot → warm → CH fallback\n per industry; missing keys populated.\n- **Without `codes`** (best-effort dump): union of\n `industry_snapshots:latest` and `industry_snapshots:last_close`\n Redis hashes. Missing industries are **not** backfilled from CH; use\n GET `/v1/industries` for a fully populated list.\n\n9:00–9:14 reset window suppresses both Redis hashes and CH fallback.\nEach item carries `_source` ∈ {`latest`, `last_close`, `ch_daily`}.\n申万一级 (level=1) ≈ 127 industries, 申万二级 (level=2) ≈ 348.\n",
|
|
1526
|
-
summary: "Bulk Redis snapshot of industries (hot/warm union)",
|
|
1527
|
-
positional: [],
|
|
1528
|
-
outputDefault: "json",
|
|
1529
|
-
pagination: "none",
|
|
1530
|
-
stream: false,
|
|
1531
|
-
billable: true,
|
|
1532
|
-
idempotencyRequired: false,
|
|
1533
|
-
scopesAny: [
|
|
1534
|
-
"quote:l1",
|
|
1535
|
-
"quote:l2",
|
|
1536
|
-
"quote:delayed"
|
|
1537
|
-
],
|
|
1538
|
-
sideEffect: "read",
|
|
1539
|
-
dryRunSupported: false,
|
|
1540
|
-
inputSchema: {
|
|
1541
|
-
type: "object",
|
|
1542
|
-
properties: {
|
|
1543
|
-
codes: {
|
|
1544
|
-
type: "string",
|
|
1545
|
-
description: "Comma-separated `sw_code:level` (e.g. `401001:1,401002:1`); omit for best-effort Redis union."
|
|
1546
|
-
}
|
|
1547
|
-
},
|
|
1548
|
-
additionalProperties: false
|
|
1549
|
-
}
|
|
1550
|
-
},
|
|
1551
1333
|
"limit-up.analysis": {
|
|
1552
1334
|
cliKey: "limit-up.analysis",
|
|
1553
1335
|
cliName: "limit-up analysis",
|
|
1554
1336
|
method: "GET",
|
|
1555
1337
|
path: "/v1/limit-up/analysis",
|
|
1556
|
-
description:
|
|
1557
|
-
summary: "
|
|
1338
|
+
description: "Returns LLM-generated attribution for each limit-up stock: the leading theme (`leading_concept`), concept tags, and a reason explaining why it hit the limit. Themes are inferred by an LLM from the latest research, institutional views, and news, so they may include brand-new themes; results refresh automatically at six points each trading day, with later runs refining earlier ones. This complements the limit-up pool, which tells you which stocks limited up; this endpoint tells you why and under which theme. Note: when `trade_date` is omitted, the latest attributed trading day is returned — before today's first run completes (around 09:47 Beijing time) this may be the previous trading day rather than empty, so pass an explicit `trade_date` for today and verify the `trade_date` / `generated_at` fields. Requires the `market:read` scope or any `quote:*` scope.",
|
|
1339
|
+
summary: "Get LLM attribution for limit-up stocks.",
|
|
1558
1340
|
positional: [],
|
|
1559
1341
|
outputDefault: "json",
|
|
1560
1342
|
pagination: "none",
|
|
@@ -1586,8 +1368,8 @@ Phase 5.2 (server endpoint).
|
|
|
1586
1368
|
cliName: "limit-up history",
|
|
1587
1369
|
method: "GET",
|
|
1588
1370
|
path: "/v1/limit-up/history",
|
|
1589
|
-
description: "
|
|
1590
|
-
summary: "A-share limit-up daily trend
|
|
1371
|
+
description: "Returns the daily limit-up trend over the last N trading days: per-day limit-up count, highest consecutive-board height, and seal-break count. Sorted by trade date ascending (oldest first). Requires a `quote:*` scope.",
|
|
1372
|
+
summary: "Get the A-share limit-up daily trend.",
|
|
1591
1373
|
positional: [],
|
|
1592
1374
|
outputDefault: "json",
|
|
1593
1375
|
pagination: "none",
|
|
@@ -1620,8 +1402,8 @@ Phase 5.2 (server endpoint).
|
|
|
1620
1402
|
cliName: "limit-up pool",
|
|
1621
1403
|
method: "GET",
|
|
1622
1404
|
path: "/v1/limit-up/pool",
|
|
1623
|
-
description: "
|
|
1624
|
-
summary: "A-share limit-up pool
|
|
1405
|
+
description: "Returns per-stock detail for the limit-up pool on the current (or specified `trade_date`) trading day: first/last seal time, final percent change, seal amount and seal volume, number of times the seal broke, consecutive limit-up days, in-pool statistics over N days, one-line-board flag, current status (limit_up / broken), and sector classification. Sorted by consecutive limit-up days, then in-pool board count, then seal amount (all descending). Before 9:00 the previous trading day's data is returned; during 9:00–9:14 an empty result is returned; from 9:15 today's data is available. Requires a `quote:*` scope.",
|
|
1406
|
+
summary: "List the A-share limit-up pool for a trade date.",
|
|
1625
1407
|
positional: [],
|
|
1626
1408
|
outputDefault: "json",
|
|
1627
1409
|
pagination: "none",
|
|
@@ -1666,8 +1448,8 @@ Phase 5.2 (server endpoint).
|
|
|
1666
1448
|
cliName: "limit-up summary",
|
|
1667
1449
|
method: "GET",
|
|
1668
1450
|
path: "/v1/limit-up/summary",
|
|
1669
|
-
description: "
|
|
1670
|
-
summary: "A-share limit-up
|
|
1451
|
+
description: "Returns aggregate limit-up statistics for the trade date: limit-up count, seal-break count, limit-down count, the highest consecutive-board height, and a height ladder (`ladder: [{ height, count }, ...]`). The height ladder counts only stocks currently sealed at limit-up. Pre-open fallback follows the same rules as the limit-up pool. Requires a `quote:*` scope.",
|
|
1452
|
+
summary: "Summarize A-share limit-up activity for a trade date.",
|
|
1671
1453
|
positional: [],
|
|
1672
1454
|
outputDefault: "json",
|
|
1673
1455
|
pagination: "none",
|
|
@@ -1707,8 +1489,8 @@ Phase 5.2 (server endpoint).
|
|
|
1707
1489
|
cliName: "market status",
|
|
1708
1490
|
method: "GET",
|
|
1709
1491
|
path: "/v1/market/status",
|
|
1710
|
-
description: "
|
|
1711
|
-
summary: "
|
|
1492
|
+
description: "Returns the current A-share trading session (pre-open / open / lunch / closed), the current and next trading day, and a holiday flag. Requires the `market:read` scope or any `quote:*` scope.",
|
|
1493
|
+
summary: "Get the current A-share market session state.",
|
|
1712
1494
|
positional: [],
|
|
1713
1495
|
outputDefault: "json",
|
|
1714
1496
|
pagination: "none",
|
|
@@ -1734,8 +1516,8 @@ Phase 5.2 (server endpoint).
|
|
|
1734
1516
|
cliName: "news feed",
|
|
1735
1517
|
method: "GET",
|
|
1736
1518
|
path: "/v1/news",
|
|
1737
|
-
description: "
|
|
1738
|
-
summary: "List recent news
|
|
1519
|
+
description: "Returns recent news. Equivalent to `/v1/news/list`; retained for backward compatibility.",
|
|
1520
|
+
summary: "List recent news.",
|
|
1739
1521
|
positional: [],
|
|
1740
1522
|
outputDefault: "json",
|
|
1741
1523
|
pagination: "offset",
|
|
@@ -1756,8 +1538,8 @@ Phase 5.2 (server endpoint).
|
|
|
1756
1538
|
cliName: "news get",
|
|
1757
1539
|
method: "GET",
|
|
1758
1540
|
path: "/v1/news/{news_id}",
|
|
1759
|
-
description: "
|
|
1760
|
-
summary: "
|
|
1541
|
+
description: "Returns the full content of one news item: title, content snippet, and tagged securities.",
|
|
1542
|
+
summary: "Get a single news item by id.",
|
|
1761
1543
|
positional: [
|
|
1762
1544
|
"news_id"
|
|
1763
1545
|
],
|
|
@@ -1788,8 +1570,8 @@ Phase 5.2 (server endpoint).
|
|
|
1788
1570
|
cliName: "news list",
|
|
1789
1571
|
method: "GET",
|
|
1790
1572
|
path: "/v1/news/list",
|
|
1791
|
-
description: "
|
|
1792
|
-
summary: "List news mentioning
|
|
1573
|
+
description: "Returns news items mentioning a specific A-share security, ordered by publication date descending. Requires the `news:read` scope.",
|
|
1574
|
+
summary: "List news mentioning one security.",
|
|
1793
1575
|
positional: [],
|
|
1794
1576
|
outputDefault: "json",
|
|
1795
1577
|
pagination: "none",
|
|
@@ -1852,8 +1634,8 @@ Phase 5.2 (server endpoint).
|
|
|
1852
1634
|
cliName: "news search",
|
|
1853
1635
|
method: "GET",
|
|
1854
1636
|
path: "/v1/news/search",
|
|
1855
|
-
description: "Full-text search recent news
|
|
1856
|
-
summary: "Full-text search recent news",
|
|
1637
|
+
description: "Full-text search over recent news and market briefs. Returns title, publication date, snippet, and tagged securities. Requires the `news:read` scope. Note: news fields are user-generated; `meta.untrusted_text_fields` lists fields that should be sanitized before being passed to an LLM.",
|
|
1638
|
+
summary: "Full-text search recent news.",
|
|
1857
1639
|
positional: [],
|
|
1858
1640
|
outputDefault: "json",
|
|
1859
1641
|
pagination: "none",
|
|
@@ -1917,10 +1699,8 @@ Phase 5.2 (server endpoint).
|
|
|
1917
1699
|
cliName: "ownership lockups",
|
|
1918
1700
|
method: "GET",
|
|
1919
1701
|
path: "/v1/ownership-events/lockups",
|
|
1920
|
-
description:
|
|
1921
|
-
|
|
1922
|
-
`,
|
|
1923
|
-
summary: "Scan upcoming share-lockup expirations across the whole market",
|
|
1702
|
+
description: "Scans the whole market for share lockups expiring within the next `days` days, sorted by unlock date ascending then by unlocking ratio descending — a forward-looking selling-pressure screen across all securities. Use `min_pct` to filter out small unlocks and `limit` to cap the result size. T+1 data.",
|
|
1703
|
+
summary: "Scan upcoming share-lockup expirations market-wide.",
|
|
1924
1704
|
positional: [],
|
|
1925
1705
|
outputDefault: "json",
|
|
1926
1706
|
pagination: "none",
|
|
@@ -1965,20 +1745,8 @@ digest 给不了(digest 是单 code 维度)。min_pct 过滤小额解禁,l
|
|
|
1965
1745
|
cliName: "ownership show",
|
|
1966
1746
|
method: "GET",
|
|
1967
1747
|
path: "/v1/ownership-events",
|
|
1968
|
-
description:
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
- shareholder_transactions:增减持回看 txn_days 天,含净增减股数/比例 +
|
|
1972
|
-
增减笔数 + 明细(方向/股东/均价/区间)。
|
|
1973
|
-
- share_repurchases:回购回看 repurchase_days 天,含在进行笔数 + 已执行
|
|
1974
|
-
累计金额/股数(仅计 in_progress/completed)+ 最新进度 + 明细。
|
|
1975
|
-
- lockup_expirations:解禁前瞻 lockup_days 天(unlock_date ∈ [today,
|
|
1976
|
-
today+N]),含合计解禁股数/占比 + 最近解禁日 + 明细。前瞻抛压预警。
|
|
1977
|
-
|
|
1978
|
-
枚举 slug(direction / holder_category / status / lockup_type)见
|
|
1979
|
-
docs/OWNERSHIP_EVENTS.md。
|
|
1980
|
-
`,
|
|
1981
|
-
summary: "Ownership events for one A-share (holder trades / repurchases / lockups)",
|
|
1748
|
+
description: "Returns a structured three-in-one view of ownership events for one A-share security (canonical code, e.g. `SSE:600519`): recent shareholder transactions, recent share repurchases, and upcoming lockup expirations. T+1 data. Shareholder transactions look back `txn_days` days and include net change in shares/ratio, transaction count, and per-transaction detail (direction, holder, average price, date range). Repurchases look back `repurchase_days` days and include in-progress count, cumulative executed amount/shares, latest progress, and detail. Lockup expirations look ahead `lockup_days` days and include total unlocking shares/ratio, the nearest unlock date, and detail — useful as a forward-looking selling-pressure warning. Enum values (direction, holder category, status, lockup type) are documented in the response schema.",
|
|
1749
|
+
summary: "Get ownership events for one security.",
|
|
1982
1750
|
positional: [],
|
|
1983
1751
|
outputDefault: "json",
|
|
1984
1752
|
pagination: "none",
|
|
@@ -2027,35 +1795,13 @@ docs/OWNERSHIP_EVENTS.md。
|
|
|
2027
1795
|
]
|
|
2028
1796
|
}
|
|
2029
1797
|
},
|
|
2030
|
-
"payment.plans": {
|
|
2031
|
-
cliKey: "payment.plans",
|
|
2032
|
-
cliName: "payment plans",
|
|
2033
|
-
method: "GET",
|
|
2034
|
-
path: "/v1/payment/plans",
|
|
2035
|
-
description: "返回订阅计划清单(plan_id + 价格 + 时长 + 描述)。",
|
|
2036
|
-
summary: "List subscription plans",
|
|
2037
|
-
positional: [],
|
|
2038
|
-
outputDefault: "json",
|
|
2039
|
-
pagination: "none",
|
|
2040
|
-
stream: false,
|
|
2041
|
-
billable: false,
|
|
2042
|
-
idempotencyRequired: false,
|
|
2043
|
-
scopesAny: [],
|
|
2044
|
-
sideEffect: "read",
|
|
2045
|
-
dryRunSupported: false,
|
|
2046
|
-
inputSchema: {
|
|
2047
|
-
type: "object",
|
|
2048
|
-
properties: {},
|
|
2049
|
-
additionalProperties: false
|
|
2050
|
-
}
|
|
2051
|
-
},
|
|
2052
1798
|
quote: {
|
|
2053
1799
|
cliKey: "quote",
|
|
2054
1800
|
cliName: "quote",
|
|
2055
1801
|
method: "GET",
|
|
2056
1802
|
path: "/v1/quote/realtime",
|
|
2057
|
-
description: "
|
|
2058
|
-
summary: "
|
|
1803
|
+
description: "Returns real-time quotes for one or more A-share securities (canonical codes, e.g. `SSE:600519`): last price, volume, percent change, and bid/ask. Up to 200 codes per call. Requires a `quote:l1`, `quote:l2`, or `quote:delayed` scope.",
|
|
1804
|
+
summary: "Get real-time quotes for one or more securities.",
|
|
2059
1805
|
positional: [],
|
|
2060
1806
|
outputDefault: "json",
|
|
2061
1807
|
pagination: "none",
|
|
@@ -2105,8 +1851,8 @@ docs/OWNERSHIP_EVENTS.md。
|
|
|
2105
1851
|
cliName: "quote scan",
|
|
2106
1852
|
method: "GET",
|
|
2107
1853
|
path: "/v1/quote/scan",
|
|
2108
|
-
description:
|
|
2109
|
-
summary: "
|
|
1854
|
+
description: "Returns a real-time quote for every A-share in a single call — use it for full-market scans or to discover a universe of interest when you do not yet know which codes to query. Filter with `exchange=SSE|SZSE|BSE` to narrow to one exchange. The payload is large (~3 MB, ~5,800 instruments), so pair it with `--fields`, `--jq`, or `--max-bytes` to trim it. During the 9:00–9:14 pre-open auction an empty result is returned with an explanatory note. Each item also includes `main_net_in` (current-day cumulative net main-capital inflow in CNY, which may be negative) and a companion `main_net_in_stale` flag (true when served from the last-close fallback). Requires a `quote:l1`, `quote:l2`, or `quote:delayed` scope.",
|
|
1855
|
+
summary: "Snapshot every A-share real-time quote in one call.",
|
|
2110
1856
|
positional: [],
|
|
2111
1857
|
outputDefault: "json",
|
|
2112
1858
|
pagination: "none",
|
|
@@ -2144,15 +1890,8 @@ docs/OWNERSHIP_EVENTS.md。
|
|
|
2144
1890
|
cliName: "search semantic",
|
|
2145
1891
|
method: "GET",
|
|
2146
1892
|
path: "/v1/search",
|
|
2147
|
-
description:
|
|
2148
|
-
|
|
2149
|
-
精排,叠时间衰减 + views 加权(views 主源优先)。
|
|
2150
|
-
|
|
2151
|
-
- 搜"锂电池"会带出新能源产业链(正极/负极/碳酸锂/宁德时代…)
|
|
2152
|
-
- 搜"芯片"会带出存储芯片/洁净室/晶圆代工…
|
|
2153
|
-
- mode=exact 兼容老 ILIKE 行为,仅在精确关键词命中时返回。
|
|
2154
|
-
`,
|
|
2155
|
-
summary: "Hybrid semantic search across news + analyst views",
|
|
1893
|
+
description: 'Hybrid semantic search across news and analyst views that generalizes beyond exact keywords. It combines exact entity matching (security codes, analysts), semantic (embedding-based) recall, and fuzzy matching, then fuses and re-ranks results with time decay and a weighting toward analyst views as the primary source. For example, searching "锂电池" surfaces the broader new-energy supply chain (cathode/anode materials, lithium carbonate, leading battery makers). Pass `mode=exact` for legacy exact-keyword behavior.',
|
|
1894
|
+
summary: "Semantic search across news and analyst views.",
|
|
2156
1895
|
positional: [],
|
|
2157
1896
|
outputDefault: "json",
|
|
2158
1897
|
pagination: "none",
|
|
@@ -2214,52 +1953,13 @@ docs/OWNERSHIP_EVENTS.md。
|
|
|
2214
1953
|
]
|
|
2215
1954
|
}
|
|
2216
1955
|
},
|
|
2217
|
-
"securities.industry": {
|
|
2218
|
-
cliKey: "securities.industry",
|
|
2219
|
-
cliName: "securities industry",
|
|
2220
|
-
method: "GET",
|
|
2221
|
-
path: "/v1/securities/industry",
|
|
2222
|
-
description: `返回该股票的 TDX 自定义行业代码(T1001 食品饮料等)与申万行业三级代码
|
|
2223
|
-
L1/L2/L3(X5001 食品饮料 / X500102 白酒 等)。
|
|
2224
|
-
|
|
2225
|
-
用法:
|
|
2226
|
-
- 股票详情页"申万行业:白酒 / 食品饮料"标签
|
|
2227
|
-
- 筛选器交叉过滤:行业 + ROE/营收增长率
|
|
2228
|
-
- AI agent \`find_peers(code)\` 用申万二级行业找同业
|
|
2229
|
-
`,
|
|
2230
|
-
summary: "TDX + 申万 industry classification for one A-share security",
|
|
2231
|
-
positional: [],
|
|
2232
|
-
outputDefault: "json",
|
|
2233
|
-
pagination: "none",
|
|
2234
|
-
stream: false,
|
|
2235
|
-
billable: false,
|
|
2236
|
-
idempotencyRequired: false,
|
|
2237
|
-
scopesAny: [],
|
|
2238
|
-
sideEffect: "read",
|
|
2239
|
-
dryRunSupported: false,
|
|
2240
|
-
inputSchema: {
|
|
2241
|
-
type: "object",
|
|
2242
|
-
properties: {
|
|
2243
|
-
code: {
|
|
2244
|
-
type: "string",
|
|
2245
|
-
description: "A-share canonical code (SSE/SZSE/BSE only). For quote/chart/bars/financials endpoints.",
|
|
2246
|
-
pattern: "^(SSE|SZSE|BSE|SH|SZ|BJ):[0-9]{6}$",
|
|
2247
|
-
example: "SSE:600519"
|
|
2248
|
-
}
|
|
2249
|
-
},
|
|
2250
|
-
additionalProperties: false,
|
|
2251
|
-
required: [
|
|
2252
|
-
"code"
|
|
2253
|
-
]
|
|
2254
|
-
}
|
|
2255
|
-
},
|
|
2256
1956
|
"semantic.find": {
|
|
2257
1957
|
cliKey: "semantic.find",
|
|
2258
1958
|
cliName: "semantic find",
|
|
2259
1959
|
method: "GET",
|
|
2260
1960
|
path: "/v1/securities/search",
|
|
2261
|
-
description: "
|
|
2262
|
-
summary: "
|
|
1961
|
+
description: "Finds A-share securities matching a Chinese name, a code (e.g. `600519`), or pinyin initials (e.g. `gzmt`). Use it to turn a free-form description into canonical codes (e.g. `SSE:600519`).",
|
|
1962
|
+
summary: "Resolve A-share securities by name, code, or pinyin.",
|
|
2263
1963
|
positional: [],
|
|
2264
1964
|
outputDefault: "json",
|
|
2265
1965
|
pagination: "none",
|
|
@@ -2298,8 +1998,8 @@ L1/L2/L3(X5001 食品饮料 / X500102 白酒 等)。
|
|
|
2298
1998
|
cliName: "sentiment breadth",
|
|
2299
1999
|
method: "GET",
|
|
2300
2000
|
path: "/v1/sentiment/breadth",
|
|
2301
|
-
description: "
|
|
2302
|
-
summary: "
|
|
2001
|
+
description: "Returns the intraday market-breadth time series for one trading day. Omit `trade_date` for today (returns empty before 9:00); pass `YYYY-MM-DD` for any historical trading day (sparse minutes around the lunch break are excluded; up to 241 rows per day). Requires the `sentiment:read` scope.",
|
|
2002
|
+
summary: "Get the intraday market-breadth time series.",
|
|
2303
2003
|
positional: [],
|
|
2304
2004
|
outputDefault: "json",
|
|
2305
2005
|
pagination: "none",
|
|
@@ -2341,8 +2041,8 @@ L1/L2/L3(X5001 食品饮料 / X500102 白酒 等)。
|
|
|
2341
2041
|
cliName: "sentiment overview",
|
|
2342
2042
|
method: "GET",
|
|
2343
2043
|
path: "/v1/sentiment/overview",
|
|
2344
|
-
description: "
|
|
2345
|
-
summary: "
|
|
2044
|
+
description: "Returns an aggregate sentiment snapshot for the latest minute of one trading day: limit-up/down counts, breadth, divergence index, and moving-average / 52-week breadth. Omit `trade_date` for today's real-time snapshot (returns an empty structure before 9:00); pass `YYYY-MM-DD` for any historical day (the day's final aggregated minute). Requires the `sentiment:read` scope.",
|
|
2045
|
+
summary: "Get aggregate market sentiment indicators.",
|
|
2346
2046
|
positional: [],
|
|
2347
2047
|
outputDefault: "json",
|
|
2348
2048
|
pagination: "none",
|
|
@@ -2385,8 +2085,8 @@ L1/L2/L3(X5001 食品饮料 / X500102 白酒 等)。
|
|
|
2385
2085
|
cliName: "sentiment pct-distribution",
|
|
2386
2086
|
method: "GET",
|
|
2387
2087
|
path: "/v1/sentiment/pct-distribution",
|
|
2388
|
-
description: "
|
|
2389
|
-
summary: "
|
|
2088
|
+
description: "Returns the distribution of intraday percent change across the full A-share universe, bucketed (≤-10% / -9% / ... / +10% / limit-up), for visualizing market breadth.",
|
|
2089
|
+
summary: "Get the intraday percent-change distribution.",
|
|
2390
2090
|
positional: [],
|
|
2391
2091
|
outputDefault: "json",
|
|
2392
2092
|
pagination: "none",
|
|
@@ -2409,8 +2109,8 @@ L1/L2/L3(X5001 食品饮料 / X500102 白酒 等)。
|
|
|
2409
2109
|
cliName: "sentiment turnover",
|
|
2410
2110
|
method: "GET",
|
|
2411
2111
|
path: "/v1/sentiment/turnover",
|
|
2412
|
-
description: "
|
|
2413
|
-
summary: "
|
|
2112
|
+
description: "Returns the intraday turnover time series across one or more trading days. Omit `trade_date` for today (returns empty before 9:00); pass `YYYY-MM-DD` for that day plus the preceding `days-1` days. The response includes headline fields `current_turnover`, `predicted_total`, and `delta_vs_yesterday`. Requires the `sentiment:read` scope.",
|
|
2113
|
+
summary: "Get the intraday turnover time series.",
|
|
2414
2114
|
positional: [],
|
|
2415
2115
|
outputDefault: "json",
|
|
2416
2116
|
pagination: "none",
|
|
@@ -2459,8 +2159,8 @@ L1/L2/L3(X5001 食品饮料 / X500102 白酒 等)。
|
|
|
2459
2159
|
cliName: "stocks hot",
|
|
2460
2160
|
method: "GET",
|
|
2461
2161
|
path: "/v1/stocks/hot",
|
|
2462
|
-
description: "
|
|
2463
|
-
summary: "
|
|
2162
|
+
description: "Returns today's most-popular A-share stocks, ranked by a composite score of searches, follows, and comments.",
|
|
2163
|
+
summary: "Get today's hot-stock leaderboard.",
|
|
2464
2164
|
positional: [],
|
|
2465
2165
|
outputDefault: "json",
|
|
2466
2166
|
pagination: "none",
|
|
@@ -2481,8 +2181,8 @@ L1/L2/L3(X5001 食品饮料 / X500102 白酒 等)。
|
|
|
2481
2181
|
cliName: "stocks social-hot",
|
|
2482
2182
|
method: "GET",
|
|
2483
2183
|
path: "/v1/stocks/social-hot",
|
|
2484
|
-
description: "
|
|
2485
|
-
summary: "
|
|
2184
|
+
description: "Returns a leaderboard of A-share stocks aggregated by social-media mentions across multiple platforms, ranked by mention volume and sentiment score.",
|
|
2185
|
+
summary: "Get cross-platform social-hot stocks.",
|
|
2486
2186
|
positional: [],
|
|
2487
2187
|
outputDefault: "json",
|
|
2488
2188
|
pagination: "none",
|
|
@@ -2503,8 +2203,8 @@ L1/L2/L3(X5001 食品饮料 / X500102 白酒 等)。
|
|
|
2503
2203
|
cliName: "views document",
|
|
2504
2204
|
method: "GET",
|
|
2505
2205
|
path: "/v1/views/{view_id}/document",
|
|
2506
|
-
description: "
|
|
2507
|
-
summary: "
|
|
2206
|
+
description: "Returns the full parsed text of the research report behind one view. Available only for views with `full_text_available=true`. Large documents default to `format=outline`, returning a heading-only table of contents plus total character count; use `format=full` with `offset` / `max_chars` to page through the body via the `next_offset` cursor. Requires the `views:read` scope.",
|
|
2207
|
+
summary: "Get the full research-report text behind a view.",
|
|
2508
2208
|
positional: [
|
|
2509
2209
|
"view_id"
|
|
2510
2210
|
],
|
|
@@ -2559,8 +2259,8 @@ L1/L2/L3(X5001 食品饮料 / X500102 白酒 等)。
|
|
|
2559
2259
|
cliName: "views feed",
|
|
2560
2260
|
method: "GET",
|
|
2561
2261
|
path: "/v1/views",
|
|
2562
|
-
description: "
|
|
2563
|
-
summary: "List analyst views",
|
|
2262
|
+
description: "Returns a stream of analyst views, sell-side research, and long-form opinion. Filter by institution, analyst, security, or recency (`hours`). Requires the `views:read` scope.",
|
|
2263
|
+
summary: "List analyst views.",
|
|
2564
2264
|
positional: [],
|
|
2565
2265
|
outputDefault: "json",
|
|
2566
2266
|
pagination: "offset",
|
|
@@ -2581,8 +2281,8 @@ L1/L2/L3(X5001 食品饮料 / X500102 白酒 等)。
|
|
|
2581
2281
|
cliName: "views get",
|
|
2582
2282
|
method: "GET",
|
|
2583
2283
|
path: "/v1/views/{view_id}",
|
|
2584
|
-
description: "
|
|
2585
|
-
summary: "
|
|
2284
|
+
description: "Returns the full content of one analyst view: body, attached images, tagged securities, and AI summary.",
|
|
2285
|
+
summary: "Get a single analyst view.",
|
|
2586
2286
|
positional: [
|
|
2587
2287
|
"view_id"
|
|
2588
2288
|
],
|
|
@@ -2613,8 +2313,8 @@ L1/L2/L3(X5001 食品饮料 / X500102 白酒 等)。
|
|
|
2613
2313
|
cliName: "views recent",
|
|
2614
2314
|
method: "GET",
|
|
2615
2315
|
path: "/v1/views/recent",
|
|
2616
|
-
description: "
|
|
2617
|
-
summary: "
|
|
2316
|
+
description: "Returns recent broker / analyst views (research notes, price targets, ratings). Filter by analyst, institution, or a specific security. Requires the `views:read` scope.",
|
|
2317
|
+
summary: "List recent analyst views.",
|
|
2618
2318
|
positional: [],
|
|
2619
2319
|
outputDefault: "json",
|
|
2620
2320
|
pagination: "none",
|
|
@@ -2728,7 +2428,7 @@ function attachOperation(cmd, op, dispatch) {
|
|
|
2728
2428
|
function buildCommandTree(program, dispatch) {
|
|
2729
2429
|
{
|
|
2730
2430
|
const noun = program.command("agent");
|
|
2731
|
-
noun.description("agent
|
|
2431
|
+
noun.description("Manage agent billing sessions and identity.");
|
|
2732
2432
|
{
|
|
2733
2433
|
const cmd = noun.command("session-end");
|
|
2734
2434
|
attachOperation(cmd, OPERATIONS["agent.session-end"], dispatch);
|
|
@@ -2744,7 +2444,7 @@ function buildCommandTree(program, dispatch) {
|
|
|
2744
2444
|
}
|
|
2745
2445
|
{
|
|
2746
2446
|
const noun = program.command("announcements");
|
|
2747
|
-
noun.description("
|
|
2447
|
+
noun.description("Listed-company disclosures: feed, per-stock, and full-text search.");
|
|
2748
2448
|
{
|
|
2749
2449
|
const cmd = noun.command("detail");
|
|
2750
2450
|
attachOperation(cmd, OPERATIONS["announcements.detail"], dispatch);
|
|
@@ -2764,7 +2464,7 @@ function buildCommandTree(program, dispatch) {
|
|
|
2764
2464
|
}
|
|
2765
2465
|
{
|
|
2766
2466
|
const noun = program.command("auth");
|
|
2767
|
-
noun.description("
|
|
2467
|
+
noun.description("Authentication and caller identity.");
|
|
2768
2468
|
{
|
|
2769
2469
|
const cmd = noun.command("whoami");
|
|
2770
2470
|
attachOperation(cmd, OPERATIONS["auth.whoami"], dispatch);
|
|
@@ -2772,7 +2472,7 @@ function buildCommandTree(program, dispatch) {
|
|
|
2772
2472
|
}
|
|
2773
2473
|
{
|
|
2774
2474
|
const noun = program.command("bars");
|
|
2775
|
-
noun.description("bars
|
|
2475
|
+
noun.description("Historical OHLC price bars — daily and minute, single or batch.");
|
|
2776
2476
|
{
|
|
2777
2477
|
const cmd = noun.command("daily");
|
|
2778
2478
|
attachOperation(cmd, OPERATIONS["bars.daily"], dispatch);
|
|
@@ -2792,7 +2492,7 @@ function buildCommandTree(program, dispatch) {
|
|
|
2792
2492
|
}
|
|
2793
2493
|
{
|
|
2794
2494
|
const noun = program.command("concepts");
|
|
2795
|
-
noun.description("
|
|
2495
|
+
noun.description("Thematic concept boards: constituents, quotes, and alerts.");
|
|
2796
2496
|
{
|
|
2797
2497
|
const cmd = noun.command("alerts");
|
|
2798
2498
|
attachOperation(cmd, OPERATIONS["concepts.alerts"], dispatch);
|
|
@@ -2840,7 +2540,7 @@ function buildCommandTree(program, dispatch) {
|
|
|
2840
2540
|
}
|
|
2841
2541
|
{
|
|
2842
2542
|
const noun = program.command("financials");
|
|
2843
|
-
noun.description("financials
|
|
2543
|
+
noun.description("Point-in-time fundamental financials.");
|
|
2844
2544
|
{
|
|
2845
2545
|
const cmd = noun.command("pit");
|
|
2846
2546
|
attachOperation(cmd, OPERATIONS["financials.pit"], dispatch);
|
|
@@ -2860,7 +2560,7 @@ function buildCommandTree(program, dispatch) {
|
|
|
2860
2560
|
}
|
|
2861
2561
|
{
|
|
2862
2562
|
const noun = program.command("index");
|
|
2863
|
-
noun.description("
|
|
2563
|
+
noun.description("Index quotes and snapshots.");
|
|
2864
2564
|
{
|
|
2865
2565
|
const cmd = noun.command("daily-bars");
|
|
2866
2566
|
attachOperation(cmd, OPERATIONS["index.daily-bars"], dispatch);
|
|
@@ -2874,33 +2574,9 @@ function buildCommandTree(program, dispatch) {
|
|
|
2874
2574
|
attachOperation(cmd, OPERATIONS["index.snapshot"], dispatch);
|
|
2875
2575
|
}
|
|
2876
2576
|
}
|
|
2877
|
-
{
|
|
2878
|
-
const noun = program.command("industries");
|
|
2879
|
-
noun.description("industries commands");
|
|
2880
|
-
{
|
|
2881
|
-
const cmd = noun.command("alerts");
|
|
2882
|
-
attachOperation(cmd, OPERATIONS["industries.alerts"], dispatch);
|
|
2883
|
-
}
|
|
2884
|
-
{
|
|
2885
|
-
const cmd = noun.command("daily-bars");
|
|
2886
|
-
attachOperation(cmd, OPERATIONS["industries.daily-bars"], dispatch);
|
|
2887
|
-
}
|
|
2888
|
-
{
|
|
2889
|
-
const cmd = noun.command("list");
|
|
2890
|
-
attachOperation(cmd, OPERATIONS["industries.list"], dispatch);
|
|
2891
|
-
}
|
|
2892
|
-
{
|
|
2893
|
-
const cmd = noun.command("show");
|
|
2894
|
-
attachOperation(cmd, OPERATIONS["industries.show"], dispatch);
|
|
2895
|
-
}
|
|
2896
|
-
{
|
|
2897
|
-
const cmd = noun.command("snapshot");
|
|
2898
|
-
attachOperation(cmd, OPERATIONS["industries.snapshot"], dispatch);
|
|
2899
|
-
}
|
|
2900
|
-
}
|
|
2901
2577
|
{
|
|
2902
2578
|
const noun = program.command("limit-up");
|
|
2903
|
-
noun.description("limit-up
|
|
2579
|
+
noun.description("Daily limit-up pool and attribution analysis.");
|
|
2904
2580
|
{
|
|
2905
2581
|
const cmd = noun.command("analysis");
|
|
2906
2582
|
attachOperation(cmd, OPERATIONS["limit-up.analysis"], dispatch);
|
|
@@ -2920,7 +2596,7 @@ function buildCommandTree(program, dispatch) {
|
|
|
2920
2596
|
}
|
|
2921
2597
|
{
|
|
2922
2598
|
const noun = program.command("market");
|
|
2923
|
-
noun.description("
|
|
2599
|
+
noun.description("Market-wide trading status and breadth.");
|
|
2924
2600
|
{
|
|
2925
2601
|
const cmd = noun.command("status");
|
|
2926
2602
|
attachOperation(cmd, OPERATIONS["market.status"], dispatch);
|
|
@@ -2928,7 +2604,7 @@ function buildCommandTree(program, dispatch) {
|
|
|
2928
2604
|
}
|
|
2929
2605
|
{
|
|
2930
2606
|
const noun = program.command("news");
|
|
2931
|
-
noun.description("news
|
|
2607
|
+
noun.description("Market news feed and full-text search.");
|
|
2932
2608
|
{
|
|
2933
2609
|
const cmd = noun.command("feed");
|
|
2934
2610
|
attachOperation(cmd, OPERATIONS["news.feed"], dispatch);
|
|
@@ -2948,7 +2624,7 @@ function buildCommandTree(program, dispatch) {
|
|
|
2948
2624
|
}
|
|
2949
2625
|
{
|
|
2950
2626
|
const noun = program.command("ownership");
|
|
2951
|
-
noun.description("
|
|
2627
|
+
noun.description("Insider trades, share buybacks, and lockup expirations.");
|
|
2952
2628
|
{
|
|
2953
2629
|
const cmd = noun.command("lockups");
|
|
2954
2630
|
attachOperation(cmd, OPERATIONS["ownership.lockups"], dispatch);
|
|
@@ -2958,14 +2634,6 @@ function buildCommandTree(program, dispatch) {
|
|
|
2958
2634
|
attachOperation(cmd, OPERATIONS["ownership.show"], dispatch);
|
|
2959
2635
|
}
|
|
2960
2636
|
}
|
|
2961
|
-
{
|
|
2962
|
-
const noun = program.command("payment");
|
|
2963
|
-
noun.description("payment commands");
|
|
2964
|
-
{
|
|
2965
|
-
const cmd = noun.command("plans");
|
|
2966
|
-
attachOperation(cmd, OPERATIONS["payment.plans"], dispatch);
|
|
2967
|
-
}
|
|
2968
|
-
}
|
|
2969
2637
|
{
|
|
2970
2638
|
const noun = program.command("quote");
|
|
2971
2639
|
noun.description("quote commands");
|
|
@@ -2980,23 +2648,15 @@ function buildCommandTree(program, dispatch) {
|
|
|
2980
2648
|
}
|
|
2981
2649
|
{
|
|
2982
2650
|
const noun = program.command("search");
|
|
2983
|
-
noun.description("
|
|
2651
|
+
noun.description("Search securities and content.");
|
|
2984
2652
|
{
|
|
2985
2653
|
const cmd = noun.command("semantic");
|
|
2986
2654
|
attachOperation(cmd, OPERATIONS["search.semantic"], dispatch);
|
|
2987
2655
|
}
|
|
2988
2656
|
}
|
|
2989
|
-
{
|
|
2990
|
-
const noun = program.command("securities");
|
|
2991
|
-
noun.description("securities commands");
|
|
2992
|
-
{
|
|
2993
|
-
const cmd = noun.command("industry");
|
|
2994
|
-
attachOperation(cmd, OPERATIONS["securities.industry"], dispatch);
|
|
2995
|
-
}
|
|
2996
|
-
}
|
|
2997
2657
|
{
|
|
2998
2658
|
const noun = program.command("semantic");
|
|
2999
|
-
noun.description("semantic
|
|
2659
|
+
noun.description("Meaning-based (semantic) security and content search.");
|
|
3000
2660
|
{
|
|
3001
2661
|
const cmd = noun.command("find");
|
|
3002
2662
|
attachOperation(cmd, OPERATIONS["semantic.find"], dispatch);
|
|
@@ -3004,7 +2664,7 @@ function buildCommandTree(program, dispatch) {
|
|
|
3004
2664
|
}
|
|
3005
2665
|
{
|
|
3006
2666
|
const noun = program.command("sentiment");
|
|
3007
|
-
noun.description("sentiment
|
|
2667
|
+
noun.description("Market sentiment and breadth indicators.");
|
|
3008
2668
|
{
|
|
3009
2669
|
const cmd = noun.command("breadth");
|
|
3010
2670
|
attachOperation(cmd, OPERATIONS["sentiment.breadth"], dispatch);
|
|
@@ -3024,7 +2684,7 @@ function buildCommandTree(program, dispatch) {
|
|
|
3024
2684
|
}
|
|
3025
2685
|
{
|
|
3026
2686
|
const noun = program.command("stocks");
|
|
3027
|
-
noun.description("
|
|
2687
|
+
noun.description("Per-stock overview, hot lists, and screening.");
|
|
3028
2688
|
{
|
|
3029
2689
|
const cmd = noun.command("hot");
|
|
3030
2690
|
attachOperation(cmd, OPERATIONS["stocks.hot"], dispatch);
|
|
@@ -3036,7 +2696,7 @@ function buildCommandTree(program, dispatch) {
|
|
|
3036
2696
|
}
|
|
3037
2697
|
{
|
|
3038
2698
|
const noun = program.command("views");
|
|
3039
|
-
noun.description("views
|
|
2699
|
+
noun.description("Analyst and broker research views (primary research source).");
|
|
3040
2700
|
{
|
|
3041
2701
|
const cmd = noun.command("document");
|
|
3042
2702
|
attachOperation(cmd, OPERATIONS["views.document"], dispatch);
|
|
@@ -3959,7 +3619,7 @@ import os2 from "node:os";
|
|
|
3959
3619
|
import path2 from "node:path";
|
|
3960
3620
|
|
|
3961
3621
|
// src/version.ts
|
|
3962
|
-
var CLI_VERSION = "2.
|
|
3622
|
+
var CLI_VERSION = "2.7.0";
|
|
3963
3623
|
|
|
3964
3624
|
// src/runtime/update_check.ts
|
|
3965
3625
|
var UPDATE_CACHE_PATH = path2.join(os2.homedir(), ".config", "echopai", "update_cache.json");
|
|
@@ -7526,370 +7186,273 @@ import { z as z17 } from "zod";
|
|
|
7526
7186
|
// src/_generated/help.ts
|
|
7527
7187
|
var HELP = {
|
|
7528
7188
|
"agent.session-end": {
|
|
7529
|
-
summary: "
|
|
7530
|
-
description: "
|
|
7189
|
+
summary: "Close a billable agent session.",
|
|
7190
|
+
description: "Closes a session opened by `/v1/agent/session/start` and commits its final usage.",
|
|
7531
7191
|
example: "echopai agent session-end VALUE"
|
|
7532
7192
|
},
|
|
7533
7193
|
"agent.session-start": {
|
|
7534
|
-
summary: "
|
|
7535
|
-
description: "
|
|
7194
|
+
summary: "Open a billable agent session.",
|
|
7195
|
+
description: "Opens a billable session for an agent credential and returns a session_id that groups subsequent calls into a single billable unit. Requires an `Idempotency-Key` header.",
|
|
7536
7196
|
example: "echopai agent session-start --agent-id agent-prod-1 --budget-usd 1.0"
|
|
7537
7197
|
},
|
|
7538
7198
|
"agent.session-usage": {
|
|
7539
|
-
summary: "Get cumulative usage
|
|
7540
|
-
description: "
|
|
7199
|
+
summary: "Get cumulative usage for an agent session.",
|
|
7200
|
+
description: "Returns the cumulative billable call count and per-scope quota consumption for the given session.",
|
|
7541
7201
|
example: "echopai agent session-usage VALUE"
|
|
7542
7202
|
},
|
|
7543
7203
|
"announcements.detail": {
|
|
7544
|
-
summary: "
|
|
7545
|
-
description: "
|
|
7204
|
+
summary: "Get a single announcement by id.",
|
|
7205
|
+
description: "Returns the full content of one announcement: body (markdown and plain text), metadata, and parse status.",
|
|
7546
7206
|
example: "echopai announcements detail VALUE"
|
|
7547
7207
|
},
|
|
7548
7208
|
"announcements.feed": {
|
|
7549
|
-
summary: "List recent A-share announcements",
|
|
7550
|
-
description: "
|
|
7209
|
+
summary: "List recent A-share announcements.",
|
|
7210
|
+
description: "Returns a feed of recent A-share corporate announcements, sorted by publication date descending. Filter by `type` or `since`. Requires the `announcements:read` scope.",
|
|
7551
7211
|
example: "echopai announcements feed"
|
|
7552
7212
|
},
|
|
7553
7213
|
"announcements.search": {
|
|
7554
|
-
summary: "
|
|
7555
|
-
description: "
|
|
7214
|
+
summary: "Search A-share announcements.",
|
|
7215
|
+
description: "Hybrid search over A-share announcements: structured filtering by security name or code, combined with full-text keyword search (over title, AI summary, and the first ~1500 characters of the body). A query containing a 6-digit code or an embedded security name is filtered by that security; remaining free text is ranked by relevance with time decay; a pure code or name lists results by publication date descending. Requires the `announcements:read` scope.",
|
|
7556
7216
|
example: "echopai announcements search --q 新华医疗 回购"
|
|
7557
7217
|
},
|
|
7558
7218
|
"announcements.stock": {
|
|
7559
|
-
summary: "List announcements for
|
|
7560
|
-
description: "
|
|
7219
|
+
summary: "List announcements for one security.",
|
|
7220
|
+
description: "Returns the announcement history for one A-share security over a date window. Accepts a 6-digit code or canonical form (e.g. `SSE:600519`). Requires the `announcements:read` scope.",
|
|
7561
7221
|
example: "echopai announcements stock --code SSE:600519"
|
|
7562
7222
|
},
|
|
7563
7223
|
"auth.whoami": {
|
|
7564
|
-
summary: "
|
|
7565
|
-
description:
|
|
7566
|
-
rate_limit, allowed_clients, agent_budget (if kind=agent), api_version,
|
|
7567
|
-
feature_flags. Any valid JWT can call — no specific scope required.
|
|
7568
|
-
|
|
7569
|
-
CLI/MCP call this once at startup, cache 5 minutes in-process, and use
|
|
7570
|
-
the response to derive \`verbs.available\` (intersection of curated verb
|
|
7571
|
-
scopes with token scopes) and to populate \`echopai doctor\` checks.
|
|
7572
|
-
|
|
7573
|
-
See \`docs/PLAN_CLI_V2_AGENT_SURFACE.md\` §5.1.
|
|
7574
|
-
`,
|
|
7224
|
+
summary: "Introspect the calling token (capability discovery).",
|
|
7225
|
+
description: "Returns the calling token's kind, scopes, audience, app metadata, rate limit, allowed clients, agent budget (when kind=agent), API version, and feature flags. Any valid token may call this; no specific scope is required. Clients typically call it once at startup and cache the result briefly to determine which commands are available.",
|
|
7575
7226
|
example: "echopai auth whoami"
|
|
7576
7227
|
},
|
|
7577
7228
|
"bars.daily": {
|
|
7578
|
-
summary: "
|
|
7579
|
-
description: "
|
|
7229
|
+
summary: "List daily OHLC bars for one A-share security.",
|
|
7230
|
+
description: "Returns daily open/high/low/close/volume/turnover for one A-share security over a date range (canonical code, e.g. `SSE:600519`). End-of-day data. Requires the `bars:30d` scope (last 30 trading days) or `bars:full` scope (full history).",
|
|
7580
7231
|
example: "echopai bars daily --code SSE:600519 --from 2026-01-01 --to 2026-05-01"
|
|
7581
7232
|
},
|
|
7582
7233
|
"bars.daily-batch": {
|
|
7583
|
-
summary: "Batch daily OHLC bars for up to 100
|
|
7584
|
-
description: "
|
|
7234
|
+
summary: "Batch daily OHLC bars for up to 100 securities.",
|
|
7235
|
+
description: "Returns daily OHLC bars for multiple A-share securities in one call: up to 100 codes and up to a one-year date range. Responses use a partial-success envelope: codes the token may not access are reported in `errors[]`, the rest in `items[]` (with an empty `bars[]` when no data is found), preserving input order. Requires the `bars:30d` or `bars:full` scope.",
|
|
7585
7236
|
example: "echopai bars daily-batch --codes ['SSE:600519', 'SZSE:000001']"
|
|
7586
7237
|
},
|
|
7587
7238
|
"bars.minute": {
|
|
7588
|
-
summary: "
|
|
7589
|
-
description: "
|
|
7239
|
+
summary: "List minute OHLC bars for one A-share security.",
|
|
7240
|
+
description: "Returns minute-level OHLC bars for one A-share security on a single trade date (canonical code, e.g. `SSE:600519`). Requires the `bars:30d` or `bars:full` scope.",
|
|
7590
7241
|
example: "echopai bars minute --code SSE:600519 --date 2026-05-09"
|
|
7591
7242
|
},
|
|
7592
7243
|
"bars.minute-batch": {
|
|
7593
|
-
summary: "Batch minute OHLC bars for up to 20
|
|
7594
|
-
description: "
|
|
7244
|
+
summary: "Batch minute OHLC bars for up to 20 securities.",
|
|
7245
|
+
description: "Returns minute-level OHLC bars for multiple A-share securities in one call: up to 20 codes and up to a 7 calendar-day (~5 trading-day) range. Responses use a partial-success envelope: codes the token may not access are reported in `errors[]`, the rest in `items[]` with a flat `bars[]` array where each bar carries its own `trade_date` for client-side grouping. Requires the `bars:30d` or `bars:full` scope.",
|
|
7595
7246
|
example: "echopai bars minute-batch --codes ['SSE:600519', 'SZSE:000001']"
|
|
7596
7247
|
},
|
|
7597
7248
|
"concepts.alerts": {
|
|
7598
|
-
summary: "
|
|
7599
|
-
description:
|
|
7600
|
-
- big_move: abs(pct_change) > 3%
|
|
7601
|
-
- limit_up_cluster: limit_up_count >= 3 AND stock_count >= 5
|
|
7602
|
-
See PLAN_CONCEPT_INDUSTRY_QUOTE §5.5 "异动检测与推送".
|
|
7603
|
-
`,
|
|
7249
|
+
summary: "List currently active concept alerts.",
|
|
7250
|
+
description: "Returns the live set of concept alerts. Two rules fire: `big_move` when absolute percent change exceeds 3%, and `limit_up_cluster` when a concept has at least 3 limit-up members across at least 5 member stocks.",
|
|
7604
7251
|
example: "echopai concepts alerts"
|
|
7605
7252
|
},
|
|
7606
7253
|
"concepts.alerts-history": {
|
|
7607
|
-
summary: "
|
|
7608
|
-
description: "
|
|
7254
|
+
summary: "List recent concept alert history.",
|
|
7255
|
+
description: "Returns historical concept alert events (default: last 24 hours). Filter by rule (`big_move` / `limit_up_cluster`) and time window. Useful for reviewing how concept activity evolved over a period.",
|
|
7609
7256
|
example: "echopai concepts alerts-history"
|
|
7610
7257
|
},
|
|
7611
7258
|
"concepts.daily-bars": {
|
|
7612
|
-
summary: "
|
|
7613
|
-
description:
|
|
7614
|
-
breadth fields, and is_backfilled flag. See PLAN §5.4 algorithm.
|
|
7615
|
-
`,
|
|
7259
|
+
summary: "List daily bars for a concept index.",
|
|
7260
|
+
description: "Returns daily OHLC for a concept index (index points, not an average of member stock prices), along with breadth fields and a backfill flag. The concept index is a chain-linked equal-weight return series with a base of 1000.",
|
|
7616
7261
|
example: "echopai concepts daily-bars VALUE"
|
|
7617
7262
|
},
|
|
7618
7263
|
"concepts.list": {
|
|
7619
|
-
summary: "List concepts with live snapshot
|
|
7620
|
-
description: "
|
|
7264
|
+
summary: "List concepts with their live snapshot.",
|
|
7265
|
+
description: "Lists market concepts (themes/sectors) joined with their latest real-time snapshot, falling back to the last close and then to recent daily data when live ticks are unavailable. Each item carries a `_source` freshness indicator. Live fields include percent change, index value, advancing/declining counts, limit-up count, turnover amount, 3-minute momentum, and `main_net_in` (net main-capital inflow in CNY, which may be negative for net outflow and null when unavailable). The concept index is a chain-linked equal-weight return series with a base of 1000. During the 9:00–9:14 pre-open window, live data is suppressed and a loading state is returned.",
|
|
7621
7266
|
example: "echopai concepts list"
|
|
7622
7267
|
},
|
|
7623
7268
|
"concepts.minute-bars": {
|
|
7624
|
-
summary: "
|
|
7625
|
-
description: "
|
|
7269
|
+
summary: "List minute bars for a concept index.",
|
|
7270
|
+
description: "Returns minute-level OHLC for a concept index (chain-linked equal-weight return series, base 1000), up to 7 days per request.",
|
|
7626
7271
|
example: "echopai concepts minute-bars VALUE"
|
|
7627
7272
|
},
|
|
7628
7273
|
"concepts.news": {
|
|
7629
|
-
summary: "
|
|
7630
|
-
description:
|
|
7631
|
-
concept name and full_name. Long-term: news AI tagging.
|
|
7632
|
-
`,
|
|
7274
|
+
summary: "List news related to a concept.",
|
|
7275
|
+
description: "Returns recent news whose title or body mentions the concept's name. Use it to see what is currently driving a theme.",
|
|
7633
7276
|
example: "echopai concepts news VALUE"
|
|
7634
7277
|
},
|
|
7635
7278
|
"concepts.show": {
|
|
7636
|
-
summary: "
|
|
7637
|
-
description: "
|
|
7279
|
+
summary: "Get concept detail with member securities.",
|
|
7280
|
+
description: "Returns detail for one concept: metadata (full name, source, status, approval date, first-listed date) plus its current member securities with their latest snapshots.",
|
|
7638
7281
|
example: "echopai concepts show VALUE"
|
|
7639
7282
|
},
|
|
7640
7283
|
"concepts.snapshot": {
|
|
7641
|
-
summary: "Bulk
|
|
7642
|
-
description: "
|
|
7284
|
+
summary: "Bulk real-time snapshot of concepts.",
|
|
7285
|
+
description: "Returns real-time snapshots for concepts, with two modes. With `codes=`, each requested concept id is resolved via real-time → last-close → recent-daily fallback so every requested id is populated. Without `codes`, it returns a best-effort dump of all concepts that currently have a real-time or last-close snapshot; concepts absent from both are not backfilled (use `GET /v1/concepts` if you need every known concept). Each item carries a `_source` freshness indicator. During the 9:00–9:14 pre-open window, live data is suppressed and an empty list is returned.",
|
|
7643
7286
|
example: "echopai concepts snapshot"
|
|
7644
7287
|
},
|
|
7645
7288
|
"concepts.views": {
|
|
7646
|
-
summary: "
|
|
7647
|
-
description: "
|
|
7289
|
+
summary: "List analyst views associated with a concept.",
|
|
7290
|
+
description: "Returns analyst views linked to this concept (with AI processing complete), sorted by publication date descending.",
|
|
7648
7291
|
example: "echopai concepts views VALUE"
|
|
7649
7292
|
},
|
|
7650
7293
|
"digest.get": {
|
|
7651
|
-
summary: "
|
|
7652
|
-
description:
|
|
7653
|
-
real-time quote, valuation snapshot (PE/PB/PS/换手率/股息率/量比 等 14 字段),
|
|
7654
|
-
market sentiment context, and supplementary news.
|
|
7655
|
-
Partial-failure tolerant:
|
|
7656
|
-
each bucket is independently fetched and per-bucket failures surface
|
|
7657
|
-
in \`meta.partial_failures[]\` rather than poisoning the response. If
|
|
7658
|
-
every sub-bucket fails the endpoint returns 502.
|
|
7659
|
-
|
|
7660
|
-
Bucket scopes are checked *per bucket* (not at gateway level): a
|
|
7661
|
-
token with only \`views:read\` gets the views bucket populated and the
|
|
7662
|
-
rest reported as \`scope_insufficient\` partial failures. This mirrors
|
|
7663
|
-
the CLI fan-out contract exactly so \`echopai digest\` can either call
|
|
7664
|
-
this endpoint (preferred, single round-trip) or fall back to local
|
|
7665
|
-
fan-out without behavior drift.
|
|
7666
|
-
|
|
7667
|
-
See \`docs/PLAN_CLI_V2_AGENT_SURFACE.md\` §3.3 (digest spec) and §11
|
|
7668
|
-
Phase 5.2 (server endpoint).
|
|
7669
|
-
`,
|
|
7294
|
+
summary: "Build a one-shot research digest for one security.",
|
|
7295
|
+
description: "Composite endpoint that, in a single call, returns separated sections for one security: analyst views (the primary research source), a real-time quote, a valuation snapshot (PE/PB/PS, turnover rate, dividend yield, volume ratio, and ~14 fields in total), market sentiment context, and supplementary news. Each section is fetched independently and per-section failures are reported in `meta.partial_failures[]` instead of failing the whole call; the endpoint returns 502 only if every section fails. Scopes are enforced per section, so a token with only `views:read` receives the views section and sees the rest reported as scope-insufficient. Use this when you want a single broad overview of a security (canonical code, e.g. `SSE:600519`).",
|
|
7670
7296
|
example: "echopai digest get HK:00700"
|
|
7671
7297
|
},
|
|
7672
7298
|
"financials.pit": {
|
|
7673
|
-
summary: "
|
|
7674
|
-
description: "
|
|
7299
|
+
summary: "Get point-in-time fundamentals for one security at a date.",
|
|
7300
|
+
description: "Returns the most recent financial report that was publicly available on a given date for one A-share security (canonical code, e.g. `SSE:600519`) — i.e. announcement date on or before `date`, with a conservative 90-day fallback when the announcement date is unknown. Designed to avoid look-ahead bias in backtests and quantitative strategies. Fields include EPS (basic / non-recurring / diluted), BPS, ROE, gross margin, revenue, net profit, total assets, and parent-company equity (~25 core fields).",
|
|
7675
7301
|
example: "echopai financials pit --code SSE:600519 --date 2024-11-01"
|
|
7676
7302
|
},
|
|
7677
7303
|
"financials.quote-snapshot": {
|
|
7678
|
-
summary: "
|
|
7679
|
-
description: "
|
|
7304
|
+
summary: "Get a real-time valuation snapshot for one security.",
|
|
7305
|
+
description: "Returns a one-stop valuation snapshot (14 fields) for one A-share security (canonical code, e.g. `SSE:600519`), combining real-time prices with point-in-time fundamentals so figures are free of look-ahead bias. Fields: valuation (`pe`, `pe_ttm`, `pb`, `ps`, `ps_ttm`); share counts in 10k shares (`total_share`, `float_share`, `free_share`); market cap in 10k CNY (`total_mv`, `circ_mv`); liquidity (`turnover_rate`, `turnover_rate_f` in %, `volume_ratio` as a multiple); and dividend yield (`dv_ratio`, `dv_ttm` in %). Leave `date` empty for a real-time snapshot, or pass `date=YYYY-MM-DD` to value as of that day's close (useful for historical checks and backtests).",
|
|
7680
7306
|
example: "echopai financials quote-snapshot --code SSE:600519 --date 2026-05-13"
|
|
7681
7307
|
},
|
|
7682
7308
|
"financials.reports": {
|
|
7683
|
-
summary: "
|
|
7684
|
-
description: "
|
|
7309
|
+
summary: "List recent financial reports for one security.",
|
|
7310
|
+
description: "Returns core indicators for the most recent N financial reports of one A-share security (EPS/BPS/ROE, gross margin, revenue, net profit, total assets, parent equity, operating cash flow, total shares, and ~25 fields in total). Filter by `kind` for quarterly / interim / annual reports. Each report's `announce_date` indicates when it became publicly visible, which is useful for point-in-time analysis. Note: `kind=preliminary` does not exist as a separate report row — earnings forecasts and flash reports are exposed as metric fields (e.g. `forecast_ni_lower`, `forecast_ni_upper`, `express_ni_parent`, `express_revenue`) via `financials.series`, so `kind=preliminary` returns an empty list with an explanatory note.",
|
|
7685
7311
|
example: "echopai financials reports --code SSE:600519"
|
|
7686
7312
|
},
|
|
7687
7313
|
"financials.series": {
|
|
7688
|
-
summary: "
|
|
7689
|
-
description: "
|
|
7314
|
+
summary: "Get a time series of one financial metric.",
|
|
7315
|
+
description: "Returns the historical time series of a single financial metric for one A-share security, ordered by reporting period. `metric` is an indicator field name (e.g. `roe_simple`, `revenue`, `ni_parent`, `debt_asset_ratio`, `gross_margin`, `eps_basic`; ~150 metrics available). Use it to chart a multi-year trend for one company or to compare the same metric across several securities.",
|
|
7690
7316
|
example: "echopai financials series --code SSE:600519 --metric roe_simple"
|
|
7691
7317
|
},
|
|
7692
7318
|
"index.daily-bars": {
|
|
7693
|
-
summary: "
|
|
7694
|
-
description: "
|
|
7319
|
+
summary: "List daily OHLC bars for one A-share index.",
|
|
7320
|
+
description: "Returns daily OHLC for one A-share index (e.g. 上证综指 `SSE:000001`, 深证成指 `SZSE:399001`, 沪深300 `SSE:000300`, 北证50 `BSE:899050`, CSI series such as `CSI:000922`). Same semantics as `/v1/bars/daily`, but indices have no stock-specific fields such as turnover rate or suspension flag.",
|
|
7695
7321
|
example: "echopai index daily-bars --code SSE:000001 --from 2024-01-01 --to 2024-12-31"
|
|
7696
7322
|
},
|
|
7697
7323
|
"index.minute-bars": {
|
|
7698
|
-
summary: "
|
|
7699
|
-
description: "
|
|
7324
|
+
summary: "List minute OHLC bars for one A-share index.",
|
|
7325
|
+
description: "Returns 1-minute OHLC for one A-share index over a date range of up to 7 days. Each bar includes bar time, trade date, OHLC, volume, amount, and percent change.",
|
|
7700
7326
|
example: "echopai index minute-bars --code SSE:000001"
|
|
7701
7327
|
},
|
|
7702
7328
|
"index.snapshot": {
|
|
7703
|
-
summary: "
|
|
7704
|
-
description: "Returns the latest real-time snapshot for the 172 indices that
|
|
7329
|
+
summary: "Snapshot real-time quotes for A-share indices.",
|
|
7330
|
+
description: "Returns the latest real-time snapshot for the 172 A-share indices that have a live quote feed (SSE / SZSE / BSE, including 北证50 `BSE:899050`). The snapshot refreshes roughly every 15 seconds during market hours; outside trading hours the last intraday snapshot is returned. Use `codes` (canonical format, e.g. `SSE:000001`) to narrow to a subset, or omit it to receive all indices. Note: CSI-series indices (e.g. `CSI:000922`) have no live quote feed and are not returned here. Requires a `quote:l1`, `quote:l2`, or `quote:delayed` scope.",
|
|
7705
7331
|
example: "echopai index snapshot --codes SSE:000001,SZSE:399001,BSE:899050"
|
|
7706
7332
|
},
|
|
7707
|
-
"industries.alerts": {
|
|
7708
|
-
summary: "Currently active industry alerts",
|
|
7709
|
-
description: "Currently active industry alerts (big_move / limit_up_cluster). Same rule set as concepts.",
|
|
7710
|
-
example: "echopai industries alerts"
|
|
7711
|
-
},
|
|
7712
|
-
"industries.daily-bars": {
|
|
7713
|
-
summary: "Industry index daily bars",
|
|
7714
|
-
description: "Industry index daily OHLC (chain-linked equal-weight, base = 1000). Path key format `<sw_industry_code>:<sw_level>` (e.g. `401001:1`).",
|
|
7715
|
-
example: "echopai industries daily-bars 401001:1"
|
|
7716
|
-
},
|
|
7717
|
-
"industries.list": {
|
|
7718
|
-
summary: "List industries (申万 L1/L2) with hot/warm fallback",
|
|
7719
|
-
description: "Industry index list joining CH `v_industry_meta` with Redis snapshot.\n申万一级 (level=1) ≈ 127 industries, 申万二级 (level=2) ≈ 348.\nChain-linked equal-weight algorithm identical to concepts (PLAN §5.4).\n\nRead order per industry (mirrors `/v1/concepts`, PR #442):\n 1. `industry_snapshots:latest` (hot, TTL 5min)\n 2. `industry_snapshots:last_close` (warm, TTL 7d)\n 3. CH `v_industry_daily_bars` argMax\n9:00–9:14 reset window suppresses hot+warm (loading state).\nEach item carries `_source` ∈ {`latest`, `last_close`, `ch_daily`, `miss`}.\n",
|
|
7720
|
-
example: "echopai industries list"
|
|
7721
|
-
},
|
|
7722
|
-
"industries.show": {
|
|
7723
|
-
summary: "Industry detail (meta + today members)",
|
|
7724
|
-
description: "Path key format: `<sw_industry_code>:<sw_level>` (e.g. `401001:1`).",
|
|
7725
|
-
example: "echopai industries show 401001:1"
|
|
7726
|
-
},
|
|
7727
|
-
"industries.snapshot": {
|
|
7728
|
-
summary: "Bulk Redis snapshot of industries (hot/warm union)",
|
|
7729
|
-
description: "Mirrors `/v1/concepts/snapshot` contract (PR #442 review 二轮):\n\n- **With `codes=`** (per-key completeness): hot → warm → CH fallback\n per industry; missing keys populated.\n- **Without `codes`** (best-effort dump): union of\n `industry_snapshots:latest` and `industry_snapshots:last_close`\n Redis hashes. Missing industries are **not** backfilled from CH; use\n GET `/v1/industries` for a fully populated list.\n\n9:00–9:14 reset window suppresses both Redis hashes and CH fallback.\nEach item carries `_source` ∈ {`latest`, `last_close`, `ch_daily`}.\n申万一级 (level=1) ≈ 127 industries, 申万二级 (level=2) ≈ 348.\n",
|
|
7730
|
-
example: "echopai industries snapshot"
|
|
7731
|
-
},
|
|
7732
7333
|
"limit-up.analysis": {
|
|
7733
|
-
summary: "
|
|
7734
|
-
description:
|
|
7334
|
+
summary: "Get LLM attribution for limit-up stocks.",
|
|
7335
|
+
description: "Returns LLM-generated attribution for each limit-up stock: the leading theme (`leading_concept`), concept tags, and a reason explaining why it hit the limit. Themes are inferred by an LLM from the latest research, institutional views, and news, so they may include brand-new themes; results refresh automatically at six points each trading day, with later runs refining earlier ones. This complements the limit-up pool, which tells you which stocks limited up; this endpoint tells you why and under which theme. Note: when `trade_date` is omitted, the latest attributed trading day is returned — before today's first run completes (around 09:47 Beijing time) this may be the previous trading day rather than empty, so pass an explicit `trade_date` for today and verify the `trade_date` / `generated_at` fields. Requires the `market:read` scope or any `quote:*` scope.",
|
|
7735
7336
|
example: "echopai limit-up analysis"
|
|
7736
7337
|
},
|
|
7737
7338
|
"limit-up.history": {
|
|
7738
|
-
summary: "A-share limit-up daily trend
|
|
7739
|
-
description: "
|
|
7339
|
+
summary: "Get the A-share limit-up daily trend.",
|
|
7340
|
+
description: "Returns the daily limit-up trend over the last N trading days: per-day limit-up count, highest consecutive-board height, and seal-break count. Sorted by trade date ascending (oldest first). Requires a `quote:*` scope.",
|
|
7740
7341
|
example: "echopai limit-up history"
|
|
7741
7342
|
},
|
|
7742
7343
|
"limit-up.pool": {
|
|
7743
|
-
summary: "A-share limit-up pool
|
|
7744
|
-
description: "
|
|
7344
|
+
summary: "List the A-share limit-up pool for a trade date.",
|
|
7345
|
+
description: "Returns per-stock detail for the limit-up pool on the current (or specified `trade_date`) trading day: first/last seal time, final percent change, seal amount and seal volume, number of times the seal broke, consecutive limit-up days, in-pool statistics over N days, one-line-board flag, current status (limit_up / broken), and sector classification. Sorted by consecutive limit-up days, then in-pool board count, then seal amount (all descending). Before 9:00 the previous trading day's data is returned; during 9:00–9:14 an empty result is returned; from 9:15 today's data is available. Requires a `quote:*` scope.",
|
|
7745
7346
|
example: "echopai limit-up pool"
|
|
7746
7347
|
},
|
|
7747
7348
|
"limit-up.summary": {
|
|
7748
|
-
summary: "A-share limit-up
|
|
7749
|
-
description: "
|
|
7349
|
+
summary: "Summarize A-share limit-up activity for a trade date.",
|
|
7350
|
+
description: "Returns aggregate limit-up statistics for the trade date: limit-up count, seal-break count, limit-down count, the highest consecutive-board height, and a height ladder (`ladder: [{ height, count }, ...]`). The height ladder counts only stocks currently sealed at limit-up. Pre-open fallback follows the same rules as the limit-up pool. Requires a `quote:*` scope.",
|
|
7750
7351
|
example: "echopai limit-up summary"
|
|
7751
7352
|
},
|
|
7752
7353
|
"market.status": {
|
|
7753
|
-
summary: "
|
|
7754
|
-
description: "
|
|
7354
|
+
summary: "Get the current A-share market session state.",
|
|
7355
|
+
description: "Returns the current A-share trading session (pre-open / open / lunch / closed), the current and next trading day, and a holiday flag. Requires the `market:read` scope or any `quote:*` scope.",
|
|
7755
7356
|
example: "echopai market status"
|
|
7756
7357
|
},
|
|
7757
7358
|
"news.feed": {
|
|
7758
|
-
summary: "List recent news
|
|
7759
|
-
description: "
|
|
7359
|
+
summary: "List recent news.",
|
|
7360
|
+
description: "Returns recent news. Equivalent to `/v1/news/list`; retained for backward compatibility.",
|
|
7760
7361
|
example: "echopai news feed"
|
|
7761
7362
|
},
|
|
7762
7363
|
"news.get": {
|
|
7763
|
-
summary: "
|
|
7764
|
-
description: "
|
|
7364
|
+
summary: "Get a single news item by id.",
|
|
7365
|
+
description: "Returns the full content of one news item: title, content snippet, and tagged securities.",
|
|
7765
7366
|
example: "echopai news get VALUE"
|
|
7766
7367
|
},
|
|
7767
7368
|
"news.list": {
|
|
7768
|
-
summary: "List news mentioning
|
|
7769
|
-
description: "
|
|
7369
|
+
summary: "List news mentioning one security.",
|
|
7370
|
+
description: "Returns news items mentioning a specific A-share security, ordered by publication date descending. Requires the `news:read` scope.",
|
|
7770
7371
|
example: "echopai news list --security HK:00700"
|
|
7771
7372
|
},
|
|
7772
7373
|
"news.search": {
|
|
7773
|
-
summary: "Full-text search recent news",
|
|
7774
|
-
description: "Full-text search recent news
|
|
7374
|
+
summary: "Full-text search recent news.",
|
|
7375
|
+
description: "Full-text search over recent news and market briefs. Returns title, publication date, snippet, and tagged securities. Requires the `news:read` scope. Note: news fields are user-generated; `meta.untrusted_text_fields` lists fields that should be sanitized before being passed to an LLM.",
|
|
7775
7376
|
example: "echopai news search --query 光伏龙头"
|
|
7776
7377
|
},
|
|
7777
7378
|
"ownership.lockups": {
|
|
7778
|
-
summary: "Scan upcoming share-lockup expirations
|
|
7779
|
-
description:
|
|
7780
|
-
digest 给不了(digest 是单 code 维度)。min_pct 过滤小额解禁,limit 控量。
|
|
7781
|
-
`,
|
|
7379
|
+
summary: "Scan upcoming share-lockup expirations market-wide.",
|
|
7380
|
+
description: "Scans the whole market for share lockups expiring within the next `days` days, sorted by unlock date ascending then by unlocking ratio descending — a forward-looking selling-pressure screen across all securities. Use `min_pct` to filter out small unlocks and `limit` to cap the result size. T+1 data.",
|
|
7782
7381
|
example: "echopai ownership lockups"
|
|
7783
7382
|
},
|
|
7784
7383
|
"ownership.show": {
|
|
7785
|
-
summary: "
|
|
7786
|
-
description:
|
|
7787
|
-
+ 未来 30 天限售解禁」。源 Tushare(T+1),落 PG 专表幂等同步。
|
|
7788
|
-
|
|
7789
|
-
- shareholder_transactions:增减持回看 txn_days 天,含净增减股数/比例 +
|
|
7790
|
-
增减笔数 + 明细(方向/股东/均价/区间)。
|
|
7791
|
-
- share_repurchases:回购回看 repurchase_days 天,含在进行笔数 + 已执行
|
|
7792
|
-
累计金额/股数(仅计 in_progress/completed)+ 最新进度 + 明细。
|
|
7793
|
-
- lockup_expirations:解禁前瞻 lockup_days 天(unlock_date ∈ [today,
|
|
7794
|
-
today+N]),含合计解禁股数/占比 + 最近解禁日 + 明细。前瞻抛压预警。
|
|
7795
|
-
|
|
7796
|
-
枚举 slug(direction / holder_category / status / lockup_type)见
|
|
7797
|
-
docs/OWNERSHIP_EVENTS.md。
|
|
7798
|
-
`,
|
|
7384
|
+
summary: "Get ownership events for one security.",
|
|
7385
|
+
description: "Returns a structured three-in-one view of ownership events for one A-share security (canonical code, e.g. `SSE:600519`): recent shareholder transactions, recent share repurchases, and upcoming lockup expirations. T+1 data. Shareholder transactions look back `txn_days` days and include net change in shares/ratio, transaction count, and per-transaction detail (direction, holder, average price, date range). Repurchases look back `repurchase_days` days and include in-progress count, cumulative executed amount/shares, latest progress, and detail. Lockup expirations look ahead `lockup_days` days and include total unlocking shares/ratio, the nearest unlock date, and detail — useful as a forward-looking selling-pressure warning. Enum values (direction, holder category, status, lockup type) are documented in the response schema.",
|
|
7799
7386
|
example: "echopai ownership show --code SSE:600519"
|
|
7800
7387
|
},
|
|
7801
|
-
"payment.plans": {
|
|
7802
|
-
summary: "List subscription plans",
|
|
7803
|
-
description: "返回订阅计划清单(plan_id + 价格 + 时长 + 描述)。",
|
|
7804
|
-
example: "echopai payment plans"
|
|
7805
|
-
},
|
|
7806
7388
|
quote: {
|
|
7807
|
-
summary: "
|
|
7808
|
-
description: "
|
|
7389
|
+
summary: "Get real-time quotes for one or more securities.",
|
|
7390
|
+
description: "Returns real-time quotes for one or more A-share securities (canonical codes, e.g. `SSE:600519`): last price, volume, percent change, and bid/ask. Up to 200 codes per call. Requires a `quote:l1`, `quote:l2`, or `quote:delayed` scope.",
|
|
7809
7391
|
example: "echopai quote --codes ['SSE:600519', 'SZSE:000001']"
|
|
7810
7392
|
},
|
|
7811
7393
|
"quote.scan": {
|
|
7812
|
-
summary: "
|
|
7813
|
-
description:
|
|
7394
|
+
summary: "Snapshot every A-share real-time quote in one call.",
|
|
7395
|
+
description: "Returns a real-time quote for every A-share in a single call — use it for full-market scans or to discover a universe of interest when you do not yet know which codes to query. Filter with `exchange=SSE|SZSE|BSE` to narrow to one exchange. The payload is large (~3 MB, ~5,800 instruments), so pair it with `--fields`, `--jq`, or `--max-bytes` to trim it. During the 9:00–9:14 pre-open auction an empty result is returned with an explanatory note. Each item also includes `main_net_in` (current-day cumulative net main-capital inflow in CNY, which may be negative) and a companion `main_net_in_stale` flag (true when served from the last-close fallback). Requires a `quote:l1`, `quote:l2`, or `quote:delayed` scope.",
|
|
7814
7396
|
example: "echopai quote scan"
|
|
7815
7397
|
},
|
|
7816
7398
|
"search.semantic": {
|
|
7817
|
-
summary: "
|
|
7818
|
-
description:
|
|
7819
|
-
+ DashScope embedding)、trigram 模糊、ILIKE 精确四路召回,RRF 融合后用 reranker
|
|
7820
|
-
精排,叠时间衰减 + views 加权(views 主源优先)。
|
|
7821
|
-
|
|
7822
|
-
- 搜"锂电池"会带出新能源产业链(正极/负极/碳酸锂/宁德时代…)
|
|
7823
|
-
- 搜"芯片"会带出存储芯片/洁净室/晶圆代工…
|
|
7824
|
-
- mode=exact 兼容老 ILIKE 行为,仅在精确关键词命中时返回。
|
|
7825
|
-
`,
|
|
7399
|
+
summary: "Semantic search across news and analyst views.",
|
|
7400
|
+
description: 'Hybrid semantic search across news and analyst views that generalizes beyond exact keywords. It combines exact entity matching (security codes, analysts), semantic (embedding-based) recall, and fuzzy matching, then fuses and re-ranks results with time decay and a weighting toward analyst views as the primary source. For example, searching "锂电池" surfaces the broader new-energy supply chain (cathode/anode materials, lithium carbonate, leading battery makers). Pass `mode=exact` for legacy exact-keyword behavior.',
|
|
7826
7401
|
example: "echopai search semantic --q 锂电池"
|
|
7827
7402
|
},
|
|
7828
|
-
"securities.industry": {
|
|
7829
|
-
summary: "TDX + 申万 industry classification for one A-share security",
|
|
7830
|
-
description: `返回该股票的 TDX 自定义行业代码(T1001 食品饮料等)与申万行业三级代码
|
|
7831
|
-
L1/L2/L3(X5001 食品饮料 / X500102 白酒 等)。
|
|
7832
|
-
|
|
7833
|
-
用法:
|
|
7834
|
-
- 股票详情页"申万行业:白酒 / 食品饮料"标签
|
|
7835
|
-
- 筛选器交叉过滤:行业 + ROE/营收增长率
|
|
7836
|
-
- AI agent \`find_peers(code)\` 用申万二级行业找同业
|
|
7837
|
-
`,
|
|
7838
|
-
example: "echopai securities industry --code SSE:600519"
|
|
7839
|
-
},
|
|
7840
7403
|
"semantic.find": {
|
|
7841
|
-
summary: "
|
|
7842
|
-
description: "
|
|
7404
|
+
summary: "Resolve A-share securities by name, code, or pinyin.",
|
|
7405
|
+
description: "Finds A-share securities matching a Chinese name, a code (e.g. `600519`), or pinyin initials (e.g. `gzmt`). Use it to turn a free-form description into canonical codes (e.g. `SSE:600519`).",
|
|
7843
7406
|
example: "echopai semantic find --query 贵州茅台"
|
|
7844
7407
|
},
|
|
7845
7408
|
"sentiment.breadth": {
|
|
7846
|
-
summary: "
|
|
7847
|
-
description: "
|
|
7409
|
+
summary: "Get the intraday market-breadth time series.",
|
|
7410
|
+
description: "Returns the intraday market-breadth time series for one trading day. Omit `trade_date` for today (returns empty before 9:00); pass `YYYY-MM-DD` for any historical trading day (sparse minutes around the lunch break are excluded; up to 241 rows per day). Requires the `sentiment:read` scope.",
|
|
7848
7411
|
example: "echopai sentiment breadth"
|
|
7849
7412
|
},
|
|
7850
7413
|
"sentiment.overview": {
|
|
7851
|
-
summary: "
|
|
7852
|
-
description: "
|
|
7414
|
+
summary: "Get aggregate market sentiment indicators.",
|
|
7415
|
+
description: "Returns an aggregate sentiment snapshot for the latest minute of one trading day: limit-up/down counts, breadth, divergence index, and moving-average / 52-week breadth. Omit `trade_date` for today's real-time snapshot (returns an empty structure before 9:00); pass `YYYY-MM-DD` for any historical day (the day's final aggregated minute). Requires the `sentiment:read` scope.",
|
|
7853
7416
|
example: "echopai sentiment overview --scope main_board"
|
|
7854
7417
|
},
|
|
7855
7418
|
"sentiment.pct-distribution": {
|
|
7856
|
-
summary: "
|
|
7857
|
-
description: "
|
|
7419
|
+
summary: "Get the intraday percent-change distribution.",
|
|
7420
|
+
description: "Returns the distribution of intraday percent change across the full A-share universe, bucketed (≤-10% / -9% / ... / +10% / limit-up), for visualizing market breadth.",
|
|
7858
7421
|
example: "echopai sentiment pct-distribution"
|
|
7859
7422
|
},
|
|
7860
7423
|
"sentiment.turnover": {
|
|
7861
|
-
summary: "
|
|
7862
|
-
description: "
|
|
7424
|
+
summary: "Get the intraday turnover time series.",
|
|
7425
|
+
description: "Returns the intraday turnover time series across one or more trading days. Omit `trade_date` for today (returns empty before 9:00); pass `YYYY-MM-DD` for that day plus the preceding `days-1` days. The response includes headline fields `current_turnover`, `predicted_total`, and `delta_vs_yesterday`. Requires the `sentiment:read` scope.",
|
|
7863
7426
|
example: "echopai sentiment turnover"
|
|
7864
7427
|
},
|
|
7865
7428
|
"stocks.hot": {
|
|
7866
|
-
summary: "
|
|
7867
|
-
description: "
|
|
7429
|
+
summary: "Get today's hot-stock leaderboard.",
|
|
7430
|
+
description: "Returns today's most-popular A-share stocks, ranked by a composite score of searches, follows, and comments.",
|
|
7868
7431
|
example: "echopai stocks hot"
|
|
7869
7432
|
},
|
|
7870
7433
|
"stocks.social-hot": {
|
|
7871
|
-
summary: "
|
|
7872
|
-
description: "
|
|
7434
|
+
summary: "Get cross-platform social-hot stocks.",
|
|
7435
|
+
description: "Returns a leaderboard of A-share stocks aggregated by social-media mentions across multiple platforms, ranked by mention volume and sentiment score.",
|
|
7873
7436
|
example: "echopai stocks social-hot"
|
|
7874
7437
|
},
|
|
7875
7438
|
"views.document": {
|
|
7876
|
-
summary: "
|
|
7877
|
-
description: "
|
|
7439
|
+
summary: "Get the full research-report text behind a view.",
|
|
7440
|
+
description: "Returns the full parsed text of the research report behind one view. Available only for views with `full_text_available=true`. Large documents default to `format=outline`, returning a heading-only table of contents plus total character count; use `format=full` with `offset` / `max_chars` to page through the body via the `next_offset` cursor. Requires the `views:read` scope.",
|
|
7878
7441
|
example: "echopai views document VALUE"
|
|
7879
7442
|
},
|
|
7880
7443
|
"views.feed": {
|
|
7881
|
-
summary: "List analyst views",
|
|
7882
|
-
description: "
|
|
7444
|
+
summary: "List analyst views.",
|
|
7445
|
+
description: "Returns a stream of analyst views, sell-side research, and long-form opinion. Filter by institution, analyst, security, or recency (`hours`). Requires the `views:read` scope.",
|
|
7883
7446
|
example: "echopai views feed"
|
|
7884
7447
|
},
|
|
7885
7448
|
"views.get": {
|
|
7886
|
-
summary: "
|
|
7887
|
-
description: "
|
|
7449
|
+
summary: "Get a single analyst view.",
|
|
7450
|
+
description: "Returns the full content of one analyst view: body, attached images, tagged securities, and AI summary.",
|
|
7888
7451
|
example: "echopai views get VALUE"
|
|
7889
7452
|
},
|
|
7890
7453
|
"views.recent": {
|
|
7891
|
-
summary: "
|
|
7892
|
-
description: "
|
|
7454
|
+
summary: "List recent analyst views.",
|
|
7455
|
+
description: "Returns recent broker / analyst views (research notes, price targets, ratings). Filter by analyst, institution, or a specific security. Requires the `views:read` scope.",
|
|
7893
7456
|
example: "echopai views recent --security HK:00700"
|
|
7894
7457
|
}
|
|
7895
7458
|
};
|
|
@@ -8410,26 +7973,27 @@ try {
|
|
|
8410
7973
|
}
|
|
8411
7974
|
} catch {}
|
|
8412
7975
|
var program = new Command31;
|
|
8413
|
-
program.name("echopai").description(`
|
|
8414
|
-
` + `and
|
|
7976
|
+
program.name("echopai").description(`Command-line access to the EchoPai market-data platform: quotes, news,
|
|
7977
|
+
` + `analyst research, fundamentals, and sentiment.
|
|
8415
7978
|
|
|
8416
|
-
` + `
|
|
8417
|
-
` + `codes (0 success / 1 user error / 2 service
|
|
8418
|
-
` +
|
|
8419
|
-
|
|
8420
|
-
|
|
8421
|
-
` + `Curated verbs: echopai <verb>
|
|
8422
|
-
` + `
|
|
8423
|
-
` + `Market
|
|
8424
|
-
` + `
|
|
8425
|
-
` + `
|
|
8426
|
-
` + `
|
|
8427
|
-
` + `
|
|
7979
|
+
` + `Machine-readable by design — a JSON envelope on stdout, JSON errors on
|
|
7980
|
+
` + `stderr, and three-state exit codes (0 success / 1 user error / 2 service
|
|
7981
|
+
` + `error) — built for AI agents and scripts. Authenticate with the
|
|
7982
|
+
` + "ECHOPAI_KEY environment variable or `echopai login`.").version(CLI_VERSION, "-V, --version").addOption(new Option23("--debug", "Print HTTP wire trace to stderr (Bearer redacted)")).addOption(new Option23("--raw", "Pass through raw response body (skip envelope wrap)")).addOption(new Option23("--jq <jmespath>", "Filter or transform output with a JMESPath expression.")).addOption(new Option23("--fields <a,b,c>", "Keep only listed top-level fields per item")).addOption(new Option23("--max-bytes <n>", "Truncate serialized envelope to N bytes (sets meta.truncated)")).addOption(new Option23("--yes", "Confirm a write op in non-TTY mode (required for sideEffect=write in agents / CI)")).addOption(new Option23("--dry-run", "Send X-Dry-Run:1 on write ops where the server advertises dry-run support")).addHelpText("after", `
|
|
7983
|
+
Authentication: ECHOPAI_KEY=<eps_live_...> echopai <command>
|
|
7984
|
+
` + `Curated verbs: echopai <verb> # task-level commands (recommended)
|
|
7985
|
+
` + `Raw operations: echopai raw <noun> <verb> # low-level access to every API operation
|
|
7986
|
+
` + `Market session: echopai market status # trading phase + next trading day
|
|
7987
|
+
` + `Market movers: echopai market movers --sort pct --top 20 # ranked movers (pct / speed / amount / turnover / total_mv)
|
|
7988
|
+
` + `Announcements: echopai announcements stock --code SSE:600519 # listed-company disclosures
|
|
7989
|
+
` + `Concepts: echopai concepts alerts # active concept-board alerts
|
|
7990
|
+
` + `Limit-up: echopai limit-up summary # limit-up / failed-board / consecutive-board ladder
|
|
7991
|
+
` + `Fundamentals: echopai financials quote-snapshot --code SSE:600519 # 14-field valuation snapshot
|
|
8428
7992
|
` + `Capability: echopai whoami | echopai doctor
|
|
8429
|
-
` + `Schema dump: echopai schema export
|
|
7993
|
+
` + `Schema dump: echopai schema export # machine-readable command surface for agents
|
|
8430
7994
|
` + `Profile: echopai config profile add prod --base-url https://api.echopai.com
|
|
8431
|
-
` + `Self-update: echopai upgrade [--check] [--exec]
|
|
8432
|
-
` + `MCP: echopai mcp install
|
|
7995
|
+
` + `Self-update: echopai upgrade [--check] [--exec]
|
|
7996
|
+
` + `MCP: echopai mcp install # register with Claude Code
|
|
8433
7997
|
`);
|
|
8434
7998
|
var dispatch = async (op, args) => {
|
|
8435
7999
|
const globals = program.opts();
|
|
@@ -8458,7 +8022,7 @@ function applyAiFirstHooks(cmd) {
|
|
|
8458
8022
|
for (const sub of cmd.commands)
|
|
8459
8023
|
applyAiFirstHooks(sub);
|
|
8460
8024
|
}
|
|
8461
|
-
var rawCmd = new Command31("raw").description("
|
|
8025
|
+
var rawCmd = new Command31("raw").description("Low-level access to every API operation (advanced; bypasses the curated verbs).");
|
|
8462
8026
|
buildCommandTree(rawCmd, dispatch);
|
|
8463
8027
|
rawCmd.addCommand(buildRawCallCommand());
|
|
8464
8028
|
program.addCommand(rawCmd);
|