@wubaoqi/guancopilot 0.0.0-stage → 0.2.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.
Files changed (239) hide show
  1. package/NOTICE.md +17 -0
  2. package/README.md +146 -2
  3. package/assets/coreutils.wasm +0 -0
  4. package/assets/find.wasm +0 -0
  5. package/assets/guanbi.wasm +4 -0
  6. package/assets/guancli.wasm +0 -0
  7. package/assets/guanhelm.wasm +0 -0
  8. package/assets/jq.wasm +0 -0
  9. package/assets/openskills.wasm +0 -0
  10. package/assets/rg.wasm +0 -0
  11. package/assets/sed.wasm +0 -0
  12. package/bin/guancopilot +0 -0
  13. package/bin/guanvm +0 -0
  14. package/bin/platforms.cjs +6 -0
  15. package/bin/run.cjs +39 -0
  16. package/bin/runtime.cjs +44 -0
  17. package/licenses/Go-LICENSE +27 -0
  18. package/licenses/browser-_speed-highlight_core-LICENSE +121 -0
  19. package/licenses/browser-_speed-highlight_core-package.json +14 -0
  20. package/licenses/browser-dompurify-LICENSE +202 -0
  21. package/licenses/browser-dompurify-LICENSE-MPL +373 -0
  22. package/licenses/browser-dompurify-package.json +10 -0
  23. package/licenses/browser-marked-LICENSE +44 -0
  24. package/licenses/browser-marked-package.json +10 -0
  25. package/licenses/coreutils-LICENSE +18 -0
  26. package/licenses/findutils-LICENSE +18 -0
  27. package/licenses/github.com_BurntSushi_toml_v1.6.0-COPYING +21 -0
  28. package/licenses/github.com_dustin_go-humanize_v1.0.1-LICENSE +21 -0
  29. package/licenses/github.com_google_jsonschema-go_v0.4.3-LICENSE +21 -0
  30. package/licenses/github.com_google_uuid_v1.6.0-LICENSE +27 -0
  31. package/licenses/github.com_jackc_pgpassfile_v1.0.0-LICENSE +22 -0
  32. package/licenses/github.com_jackc_pgservicefile_v0.0.0-20240606120523-5a60cdf6a761-LICENSE +22 -0
  33. package/licenses/github.com_jackc_pgx_v5_v5.11.0-LICENSE +22 -0
  34. package/licenses/github.com_jackc_puddle_v2_v2.2.2-LICENSE +22 -0
  35. package/licenses/github.com_mattn_go-isatty_v0.0.20-LICENSE +9 -0
  36. package/licenses/github.com_modelcontextprotocol_go-sdk_v1.8.0-LICENSE +216 -0
  37. package/licenses/github.com_ncruces_go-strftime_v1.0.0-LICENSE +21 -0
  38. package/licenses/github.com_remyoudompheng_bigfft_v0.0.0-20230129092748-24d4a6f8daec-LICENSE +27 -0
  39. package/licenses/github.com_santhosh-tekuri_jsonschema_v6_v6.0.3-LICENSE +175 -0
  40. package/licenses/github.com_segmentio_asm_v1.1.3-LICENSE +21 -0
  41. package/licenses/github.com_segmentio_encoding_v0.5.4-LICENSE +21 -0
  42. package/licenses/github.com_tetratelabs_wazero_v1.12.0-LICENSE +201 -0
  43. package/licenses/github.com_tetratelabs_wazero_v1.12.0-NOTICE +2 -0
  44. package/licenses/github.com_yosida95_uritemplate_v3_v3.0.2-LICENSE +25 -0
  45. package/licenses/golang.org_x_image_v0.44.0-LICENSE +27 -0
  46. package/licenses/golang.org_x_net_v0.58.0-LICENSE +27 -0
  47. package/licenses/golang.org_x_oauth2_v0.36.0-LICENSE +27 -0
  48. package/licenses/golang.org_x_sync_v0.22.0-LICENSE +27 -0
  49. package/licenses/golang.org_x_sys_v0.47.0-LICENSE +27 -0
  50. package/licenses/golang.org_x_text_v0.41.0-LICENSE +27 -0
  51. package/licenses/golang.org_x_time_v0.15.0-LICENSE +27 -0
  52. package/licenses/guanbi-skills-LICENSE +133 -0
  53. package/licenses/guanbi-skills-LICENSE.README.md +28 -0
  54. package/licenses/guanbi-skills-LICENSE.zh-CN +82 -0
  55. package/licenses/jq-COPYING +176 -0
  56. package/licenses/modernc.org_libc_v1.73.4-LICENSE +27 -0
  57. package/licenses/modernc.org_libc_v1.73.4-LICENSE-3RD-PARTY.md +305 -0
  58. package/licenses/modernc.org_mathutil_v1.7.1-LICENSE +27 -0
  59. package/licenses/modernc.org_memory_v1.11.0-LICENSE +27 -0
  60. package/licenses/modernc.org_memory_v1.11.0-LICENSE-GO +27 -0
  61. package/licenses/modernc.org_memory_v1.11.0-LICENSE-LOGO +1 -0
  62. package/licenses/modernc.org_memory_v1.11.0-LICENSE-MMAP-GO +25 -0
  63. package/licenses/modernc.org_sqlite_v1.53.0-LICENSE +26 -0
  64. package/licenses/mvdan.cc_sh_v3_v3.13.1-LICENSE +27 -0
  65. package/licenses/ripgrep-COPYING +3 -0
  66. package/licenses/ripgrep-LICENSE-MIT +21 -0
  67. package/licenses/sed-LICENSE +21 -0
  68. package/manifest.json +972 -0
  69. package/package.json +30 -4
  70. package/plugin/guancopilot.js +193 -0
  71. package/skills-bundle/.guanvm-skills-bundle +0 -0
  72. package/skills-bundle/_recipes/dashboard/gates/page_check.js +16 -0
  73. package/skills-bundle/_recipes/dashboard/gates/report_check.js +4 -0
  74. package/skills-bundle/_recipes/dashboard/knowledge/01.md +1 -0
  75. package/skills-bundle/_recipes/dashboard/knowledge/02.md +1 -0
  76. package/skills-bundle/_recipes/dashboard/knowledge/03.md +1 -0
  77. package/skills-bundle/_recipes/dashboard/knowledge/04.md +1 -0
  78. package/skills-bundle/_recipes/dashboard/knowledge/05.md +1 -0
  79. package/skills-bundle/_recipes/dashboard/knowledge/06.md +1 -0
  80. package/skills-bundle/_recipes/dashboard/template.json +41 -0
  81. package/skills-bundle/_recipes/etl/gates/etl_live_check.js +10 -0
  82. package/skills-bundle/_recipes/etl/gates/etl_report_check.js +3 -0
  83. package/skills-bundle/_recipes/etl/knowledge/01.md +1 -0
  84. package/skills-bundle/_recipes/etl/knowledge/02.md +9 -0
  85. package/skills-bundle/_recipes/etl/knowledge/03.md +1 -0
  86. package/skills-bundle/_recipes/etl/knowledge/04.md +1 -0
  87. package/skills-bundle/_recipes/etl/knowledge/05.md +1 -0
  88. package/skills-bundle/_recipes/etl/template.json +39 -0
  89. package/skills-bundle/_recipes/hints.json +46 -0
  90. package/skills-bundle/guancli/.commandface.json +155 -0
  91. package/skills-bundle/guancli/SKILL.md +342 -0
  92. package/skills-bundle/guancli/evals/evals.json +156 -0
  93. package/skills-bundle/guancli/evals/fixtures/metric-candidate-empty-search.json +13 -0
  94. package/skills-bundle/guancli/evals/fixtures/metric-candidate-prior-request.json +13 -0
  95. package/skills-bundle/guancli/evals/fixtures/metric-consumption-columns.json +46 -0
  96. package/skills-bundle/guancli/evals/fixtures/metric-consumption-metadata.json +36 -0
  97. package/skills-bundle/guancli/evals/fixtures/metric-consumption-query.json +18 -0
  98. package/skills-bundle/guancli/references/analysis-primitives.md +95 -0
  99. package/skills-bundle/guancli/references/auth-and-config.md +131 -0
  100. package/skills-bundle/guancli/references/examples/metric-date-in.json +7 -0
  101. package/skills-bundle/guancli/references/examples/metric-query-rows.py +83 -0
  102. package/skills-bundle/guancli/references/examples/metric-query.sh +6 -0
  103. package/skills-bundle/guancli/references/form-chatbi.md +199 -0
  104. package/skills-bundle/guancli/references/gateway.md +148 -0
  105. package/skills-bundle/guancli/references/metric-batch-query.md +82 -0
  106. package/skills-bundle/guancli/references/metric-commands.md +562 -0
  107. package/skills-bundle/guancli/references/metric-generic-query.md +215 -0
  108. package/skills-bundle/guancli/references/metric-json-migration.md +18 -0
  109. package/skills-bundle/guancli/references/metric-query-recipes.md +358 -0
  110. package/skills-bundle/guancli/references/preview-and-output.md +192 -0
  111. package/skills-bundle/guancli/references/resource-query.md +101 -0
  112. package/skills-bundle/guands/SKILL.md +281 -0
  113. package/skills-bundle/guands/references/calc-fields-boundaries-and-pitfalls.md +160 -0
  114. package/skills-bundle/guands/references/command-reference.md +267 -0
  115. package/skills-bundle/guands/references/incremental-and-schedule.md +157 -0
  116. package/skills-bundle/guands/references/workflows.md +256 -0
  117. package/skills-bundle/guanetl/SKILL.md +391 -0
  118. package/skills-bundle/guanetl/evals/evals.json +41 -0
  119. package/skills-bundle/guanetl/references/ETL_AI_DEVELOP.md +456 -0
  120. package/skills-bundle/guanmetric/SKILL.md +144 -0
  121. package/skills-bundle/guanmetric/evals/evals.json +117 -0
  122. package/skills-bundle/guanmetric/evals/fixtures/atomic-detail-read-model.json +18 -0
  123. package/skills-bundle/guanmetric/evals/fixtures/confirmed-template-summary.json +12 -0
  124. package/skills-bundle/guanmetric/evals/fixtures/create-result-unknown-state.json +13 -0
  125. package/skills-bundle/guanmetric/evals/forward-eval-2026-09-21.json +62 -0
  126. package/skills-bundle/guanmetric/references/metric-api-contract-examples.json +690 -0
  127. package/skills-bundle/guanmetric/references/metric-api-contract.schema.json +349 -0
  128. package/skills-bundle/guanmetric/references/metric-api-contracts.md +436 -0
  129. package/skills-bundle/guanmetric/references/metric-atomic-mutation.md +238 -0
  130. package/skills-bundle/guanmetric/references/metric-batch-status.md +71 -0
  131. package/skills-bundle/guanmetric/references/metric-business-dictionary-api-contract-examples.json +53 -0
  132. package/skills-bundle/guanmetric/references/metric-business-dictionary-api-contract.schema.json +26 -0
  133. package/skills-bundle/guanmetric/references/metric-business-dictionary.md +76 -0
  134. package/skills-bundle/guanmetric/references/metric-common-fields.md +246 -0
  135. package/skills-bundle/guanmetric/references/metric-composite-mutation.md +165 -0
  136. package/skills-bundle/guanmetric/references/metric-delete-mutation.md +70 -0
  137. package/skills-bundle/guanmetric/references/metric-derived-mutation.md +453 -0
  138. package/skills-bundle/guanmetric/references/metric-excel-template.md +365 -0
  139. package/skills-bundle/guanmetric/references/metric-expression-rules.md +146 -0
  140. package/skills-bundle/guanmetric/references/metric-flow-generate-example.json +79 -0
  141. package/skills-bundle/guanmetric/references/metric-flow-generate.schema.json +93 -0
  142. package/skills-bundle/guanmetric/references/metric-flow.md +218 -0
  143. package/skills-bundle/guanmetric/references/metric-hierarchy-api-contract-examples.json +171 -0
  144. package/skills-bundle/guanmetric/references/metric-hierarchy-api-contract.schema.json +167 -0
  145. package/skills-bundle/guanmetric/references/metric-hierarchy-api-contracts.md +193 -0
  146. package/skills-bundle/guanmetric/references/metric-mutation.md +155 -0
  147. package/skills-bundle/guanmetric/references/metric-public-dimension-api-contract-examples.json +62 -0
  148. package/skills-bundle/guanmetric/references/metric-public-dimension-api-contract.schema.json +47 -0
  149. package/skills-bundle/guanmetric/references/metric-public-dimension.md +155 -0
  150. package/skills-bundle/guanmetric/references/metric-tree-api-contract-examples.json +277 -0
  151. package/skills-bundle/guanmetric/references/metric-tree-api-contract.schema.json +263 -0
  152. package/skills-bundle/guanmetric/references/metric-tree-api-contracts.md +53 -0
  153. package/skills-bundle/guanmetric/references/metric-tree-mutation.md +500 -0
  154. package/skills-bundle/guanmetric/references/metric-validation-ownership.md +74 -0
  155. package/skills-bundle/guanvis/SKILL.md +333 -0
  156. package/skills-bundle/guanvis/evals/china_map/card_01_basic_map.js +13 -0
  157. package/skills-bundle/guanvis/evals/china_map/card_02_world_map.js +10 -0
  158. package/skills-bundle/guanvis/evals/china_map/card_03_point_map.js +12 -0
  159. package/skills-bundle/guanvis/evals/china_map/page.js +10 -0
  160. package/skills-bundle/guanvis/evals/china_map/schema.js +10 -0
  161. package/skills-bundle/guanvis/evals/comparative_mvp_roundtrip/README.md +30 -0
  162. package/skills-bundle/guanvis/evals/comparative_mvp_roundtrip/card_01_comparative_mvp.js +72 -0
  163. package/skills-bundle/guanvis/evals/comparative_mvp_roundtrip/page.js +6 -0
  164. package/skills-bundle/guanvis/evals/comparative_mvp_roundtrip/schema.js +22 -0
  165. package/skills-bundle/guanvis/evals/comparative_mvp_roundtrip/verify_default_roundtrip.sh +92 -0
  166. package/skills-bundle/guanvis/evals/complex_report_pro/card_01_monthly.js +63 -0
  167. package/skills-bundle/guanvis/evals/complex_report_pro/page.js +6 -0
  168. package/skills-bundle/guanvis/evals/complex_report_pro/schema.js +6 -0
  169. package/skills-bundle/guanvis/evals/custom_chart_echarts/card_01_bar.js +13 -0
  170. package/skills-bundle/guanvis/evals/custom_chart_echarts/card_02_pie.js +13 -0
  171. package/skills-bundle/guanvis/evals/custom_chart_echarts/charts/bar.js +11 -0
  172. package/skills-bundle/guanvis/evals/custom_chart_echarts/charts/pie.js +15 -0
  173. package/skills-bundle/guanvis/evals/custom_chart_echarts/page.js +5 -0
  174. package/skills-bundle/guanvis/evals/custom_chart_echarts/schema.js +9 -0
  175. package/skills-bundle/guanvis/evals/custom_chart_sdk/card_01_level_nodes.js +19 -0
  176. package/skills-bundle/guanvis/evals/custom_chart_sdk/charts/level_nodes.css +51 -0
  177. package/skills-bundle/guanvis/evals/custom_chart_sdk/charts/level_nodes.html +1 -0
  178. package/skills-bundle/guanvis/evals/custom_chart_sdk/charts/level_nodes.js +28 -0
  179. package/skills-bundle/guanvis/evals/custom_chart_sdk/page.js +5 -0
  180. package/skills-bundle/guanvis/evals/custom_chart_sdk/schema.js +7 -0
  181. package/skills-bundle/guanvis/evals/dynamic_fields/card_01_dynamic_dataset.js +20 -0
  182. package/skills-bundle/guanvis/evals/dynamic_fields/card_02_dynamic_metric_chart.js +16 -0
  183. package/skills-bundle/guanvis/evals/dynamic_fields/metrics.js +19 -0
  184. package/skills-bundle/guanvis/evals/dynamic_fields/page.js +9 -0
  185. package/skills-bundle/guanvis/evals/dynamic_fields/schema.js +7 -0
  186. package/skills-bundle/guanvis/evals/dynamic_fields/verify_default_roundtrip.sh +137 -0
  187. package/skills-bundle/guanvis/evals/percentage_advcalc_roundtrip/README.md +26 -0
  188. package/skills-bundle/guanvis/evals/percentage_advcalc_roundtrip/card_01_percentage_advcalc.js +44 -0
  189. package/skills-bundle/guanvis/evals/percentage_advcalc_roundtrip/card_02_scroll_percentage.js +12 -0
  190. package/skills-bundle/guanvis/evals/percentage_advcalc_roundtrip/page.js +6 -0
  191. package/skills-bundle/guanvis/evals/percentage_advcalc_roundtrip/schema.js +22 -0
  192. package/skills-bundle/guanvis/evals/rank_advcalc_roundtrip/README.md +28 -0
  193. package/skills-bundle/guanvis/evals/rank_advcalc_roundtrip/card_01_rank_advcalc.js +59 -0
  194. package/skills-bundle/guanvis/evals/rank_advcalc_roundtrip/page.js +6 -0
  195. package/skills-bundle/guanvis/evals/rank_advcalc_roundtrip/schema.js +22 -0
  196. package/skills-bundle/guanvis/evals/rank_advcalc_roundtrip/verify_default_roundtrip.sh +135 -0
  197. package/skills-bundle/guanvis/evals/running_total_advcalc_roundtrip/README.md +15 -0
  198. package/skills-bundle/guanvis/evals/running_total_advcalc_roundtrip/card_01_running_total_advcalc.js +74 -0
  199. package/skills-bundle/guanvis/evals/running_total_advcalc_roundtrip/page.js +6 -0
  200. package/skills-bundle/guanvis/evals/running_total_advcalc_roundtrip/schema.js +22 -0
  201. package/skills-bundle/guanvis/evals/sales_dashboard/card_01_revenue_column.js +10 -0
  202. package/skills-bundle/guanvis/evals/sales_dashboard/card_02_trend_line.js +9 -0
  203. package/skills-bundle/guanvis/evals/sales_dashboard/card_03_kpi.js +6 -0
  204. package/skills-bundle/guanvis/evals/sales_dashboard/card_04_pie.js +9 -0
  205. package/skills-bundle/guanvis/evals/sales_dashboard/card_05_calc_field_test.js +12 -0
  206. package/skills-bundle/guanvis/evals/sales_dashboard/page.js +11 -0
  207. package/skills-bundle/guanvis/evals/sales_dashboard/schema.js +14 -0
  208. package/skills-bundle/guanvis/evals/sales_dashboard/selector_01_region.js +10 -0
  209. package/skills-bundle/guanvis/evals/split_charts/card_01_column_split.js +10 -0
  210. package/skills-bundle/guanvis/evals/split_charts/card_02_line_split.js +10 -0
  211. package/skills-bundle/guanvis/evals/split_charts/card_03_combo_split.js +11 -0
  212. package/skills-bundle/guanvis/evals/split_charts/page.js +10 -0
  213. package/skills-bundle/guanvis/evals/split_charts/schema.js +14 -0
  214. package/skills-bundle/guanvis/evals/tab_layout/card_00_total_revenue.js +6 -0
  215. package/skills-bundle/guanvis/evals/tab_layout/card_01_revenue.js +10 -0
  216. package/skills-bundle/guanvis/evals/tab_layout/card_02_trend.js +9 -0
  217. package/skills-bundle/guanvis/evals/tab_layout/card_03_story.js +11 -0
  218. package/skills-bundle/guanvis/evals/tab_layout/page.js +23 -0
  219. package/skills-bundle/guanvis/evals/tab_layout/schema.js +11 -0
  220. package/skills-bundle/guanvis/evals/tab_layout/selector_01_region.js +8 -0
  221. package/skills-bundle/guanvis/references/api-reference.md +476 -0
  222. package/skills-bundle/guanvis/references/builder-reference.md +1676 -0
  223. package/skills-bundle/guanvis/references/chart-properties.md +2101 -0
  224. package/skills-bundle/guanvis/references/checkout-editing.md +53 -0
  225. package/skills-bundle/guanvis/references/complex-report-pro-patterns.md +398 -0
  226. package/skills-bundle/guanvis/references/dir-and-page-management.md +48 -0
  227. package/skills-bundle/guanvis/references/metric-chart-reference.md +258 -0
  228. package/skills-bundle/guanvis/references/publish-and-constraints.md +60 -0
  229. package/skills-bundle/guanvis/references/selector-reference.md +431 -0
  230. package/skills-bundle/guanvis/references/tableau-migration.md +73 -0
  231. package/skills-bundle/guanvis/references/theme.md +123 -0
  232. package/skills-bundle/guanvis/references/troubleshooting.md +25 -0
  233. package/skills-bundle/guanvis/references/validation-and-chart-patterns.md +205 -0
  234. package/skills-bundle/guanwf/SKILL.md +543 -0
  235. package/skills-bundle/guanwf/references/ETL_AI_DEVELOP.md +456 -0
  236. package/skills-bundle/guanwf/references/TASK_NODE_CONTRACTS.md +64 -0
  237. package/skills-bundle/guanwf/references/WORKFLOW_DSL.md +536 -0
  238. package/skills-bundle/guanwf/references/WORKFLOW_NODES.md +166 -0
  239. package/skills-bundle/js/SKILL.md +145 -0
@@ -0,0 +1,258 @@
1
+ # 指标平台指标卡片(MetricChart)创建指引
2
+
3
+ 本指引用于创建“用指标平台已有指标创建的卡片”,后端类型为 `CARD_TYPE.METRIC_CHART` / `cdType=13`。它不同于普通数据集字段的 `SINGLE_VALUE` / `KPI_CARD`。
4
+
5
+ ## 固定流程
6
+
7
+ 1. 查询指标 ID:
8
+
9
+ ```bash
10
+ guancli metric search '销售额年同比增长率'
11
+ ```
12
+
13
+ `guancli metric search --name-like ...` 不是当前 CLI 参数;搜索词用位置参数。
14
+
15
+ 2. 生成指标快照:
16
+
17
+ ```bash
18
+ guanvis metric-init <metricId1> <metricId2> -d ./my_dashboard/
19
+ ```
20
+
21
+ 3. 编写 `card_*.js`:
22
+
23
+ ```javascript
24
+ var card = createMetricChart(ChartType.PIVOT_TABLE, "销售指标分析")
25
+ .setId("card12345678901234567890")
26
+ .addRow(metricDim("销售额", "区域"))
27
+ .addMetric(metric("销售额"));
28
+
29
+ registerMetricChart(card.build());
30
+ ```
31
+
32
+ 4. 本地验证用 `guanvis preview/pack`。发布后若 `guancli card get/preview` 对 `METRIC_CHART` 报 `None.get`,不要据此判断卡片失败;优先使用指标卡编辑态数据接口或页面访问验证数据返回。
33
+
34
+ ## 兼容约束
35
+
36
+ - `MetricChartMeta.defaultView` 不要写 `"chart"`;后端 `ChartView` 不包含该值,导入后查询会报 `ChartView does not contain 'chart'`。
37
+ - `PIVOT_TABLE` 的 `column` 区域必须包含 `metaType: "MPH"` 的“度量名”占位列。guanvis 会在未显式添加 column 时自动补齐。
38
+ - `PIVOT_TABLE` 的 `metric` / `sorting` zoneInfo 需要 `needAggregation: true`;普通维度、筛选 zone 不聚合。
39
+ - 指标字段使用 `id` 表示 metric id;维度字段使用 `fdId` + `dsId` / `publicDimensionId`。不要把 metric id 当普通数据集 `fdId` 使用。
40
+ - `preview` / `pack` / `publish` 会像普通数据集卡片一样给 MetricChart 注入主题视觉配置,只写 `settings` 与 `meta.chartMain.props`,不会修改 `zoneData`、`dsInfo`、`defaultView`。显式通过 `.setProps()` / `.setTableSetting()` / `.setAxis()` 等写入的配置优先保留。
41
+
42
+ ## 顶层内容参数
43
+
44
+ | 路径 | 中文含义 | 说明 |
45
+ |---|---|---|
46
+ | `chartType` | 图表类型 | 使用 `ChartType.PIVOT_TABLE`、`BASIC_COLUMN`、`BASIC_LINE` 等枚举 |
47
+ | `metricIds` | 卡片引用的指标 ID 列表 | 由 `.addMetric(metric(...))` 自动收集;后端用它维护 card-metric 关系 |
48
+ | `metrics` | 指标详情列表 | 后端编辑态会补充;资源包创建通常不手写 |
49
+ | `columns` | 卡片级字段列表 | 指标卡片临时/动态字段可放这里;默认空数组 |
50
+ | `meta.chartMain.zoneInfo` | 区域规格 | 描述 row/column/metric/filter/sort 等区域的标题、数量限制、是否聚合 |
51
+ | `meta.chartMain.zoneData` | 区域字段 | 真实拖入的维度、指标、筛选、排序等字段 |
52
+ | `meta.chartMain.props` | 图表属性 | 透视表设置、图例、数据标签、坐标轴、主题色、辅助线等 |
53
+ | `meta.chartMain.config` | 图表配置 | 汇总阈值、自由钻取、KPI 趋势默认值等 |
54
+ | `meta.chartMain.dynamicZoneInfo` | 动态字段配置 | 动态维度/指标映射;复杂场景可通过 `.setRawConfig` / `.setProps` 透传 |
55
+ | `meta.summary` | 汇总配置 | 汇总字段、标签、位置和汇总类型 |
56
+ | `hasDrill` / `drillViews` | 钻取配置 | 是否有钻取与钻取路径;普通创建可先不写 |
57
+
58
+ ## zoneData 区域
59
+
60
+ | 区域 | 中文 | 可放字段 | 常见用途 |
61
+ |---|---|---|---|
62
+ | `row` | 维度/行 | 公共维度、适用维度、动态维度、MPH | 分组维度、X 轴、透视表行 |
63
+ | `column` | 对比/列 | 公共维度、适用维度、动态维度、MPH | 透视表列、系列拆分;透视表默认需要 MPH |
64
+ | `metric` | 数值 | 指标字段 | 主指标 |
65
+ | `metric_additional` | 副轴数值 | 指标字段 | 组合图副轴、双轴图 |
66
+ | `colorBy` | 颜色 | 指标字段 | 数值渐变着色 |
67
+ | `sizeBy` | 大小 | 指标字段 | 气泡大小 |
68
+ | `tooltip` | 更多提示 | 指标字段 | tooltip 附加指标 |
69
+ | `filters` | 筛选 | 维度或指标 | 明细筛选、聚合筛选、结果筛选 |
70
+ | `sorting` | 排序 | 维度或指标 | 升序/降序、自定义排序 |
71
+ | `split` | 拆分 | 公共维度 | 小多图拆分 |
72
+ | `ignoreFilters` | 忽略筛选 | 筛选字段 | 忽略外部联动筛选 |
73
+
74
+ ## 字段参数
75
+
76
+ ### 维度字段(DimensionZoneObj)
77
+
78
+ | 参数 | 中文含义 |
79
+ |---|---|
80
+ | `dsId` | 数据集 ID |
81
+ | `fdId` | 字段 ID |
82
+ | `name` / `alias` | 字段名 / 显示别名 |
83
+ | `fdType` | 字段类型,如 `STRING`、`DATE`、`LONG` |
84
+ | `metaType` | 元类型,维度为 `DIM`,度量名占位为 `MPH` |
85
+ | `granularity` / `parentFdName` | 日期粒度 / 原日期字段名 |
86
+ | `formula` | 卡片级字段公式 |
87
+ | `consolidation` | 公共维度归并信息 |
88
+ | `alignedDimension` | 指标 level 计算字段的对齐维度 |
89
+ | `baseFdType` / `timeFormat` | 技术字段类型 / 字符串时间解析格式 |
90
+ | `fieldFormat.numberFormat` | 数值格式 |
91
+ | `fieldFormat.headerFormat` | 表头格式 |
92
+ | `fieldFormat.conditionFormat` | 条件格式 |
93
+ | `fieldFormat.linkFormat` | 链接格式 |
94
+ | `hasSubTotal` | 是否显示小计 |
95
+ | `key` | 前端字段实例 key;guanvis 自动生成 |
96
+ | `subZoneId` / `dzId` | 子区域 ID / 动态字段 ID |
97
+ | `publicDimensionId` | 公共维度 ID |
98
+ | `isDrill` | 是否为自由钻取字段 |
99
+ | `annotation` | 字段释义 |
100
+ | `isHidden` | 是否隐藏 |
101
+
102
+ ### 指标字段(MetricZoneObj)
103
+
104
+ | 参数 | 中文含义 |
105
+ |---|---|
106
+ | `id` | 指标 ID |
107
+ | `name` / `alias` | 指标名 / 显示别名 |
108
+ | `fdType` | 值类型 |
109
+ | `metaType` | 固定为 `METRIC` |
110
+ | `fieldFormat.numberFormat` | 数据格式 |
111
+ | `fieldFormat.conditionFormat` | 条件格式 |
112
+ | `fieldFormat.headerFormat` | 表头格式 |
113
+ | `fieldFormat.itemSetting` | 颜色/项目设置,常用于 `colorBy` |
114
+ | `subtotalSetting.isDisplayed` | 小计/总计是否显示 |
115
+ | `subtotalSetting.isAggrDsBased` | 小计是否基于聚合数据集 |
116
+ | `subtotalSetting.aggrType` | 小计聚合方式 |
117
+ | `advCalc` | 高级计算,如排名、占比 |
118
+ | `filter` | 指标业务限定 |
119
+ | `miniChart` | 表格内迷你图的前端字段配置;不要直接手写,使用 `.setMiniChart()`,样式使用 `.setMiniChartSetting()` |
120
+ | `formula` / `formulaField` | 复合/原子拆分公式 |
121
+ | `parentFdName` / `granularity` | 日期派生字段信息 |
122
+ | `key` / `subZoneId` / `dzId` | 字段实例 key / 子区域 / 动态字段 |
123
+ | `isDrill` | 是否钻取字段 |
124
+ | `isHidden` | 是否隐藏 |
125
+
126
+ ### 筛选字段(FilterZoneObj)
127
+
128
+ | 参数 | 中文含义 |
129
+ |---|---|
130
+ | `id` | 指标 ID;当筛选指标时使用 |
131
+ | `dsId` / `fdId` | 数据集 ID / 字段 ID;当筛选维度时使用 |
132
+ | `filterType` | 筛选类型,如 `IN`、`NI`、`GT`、`GE`、`LT`、`LE`、`EQ`、`NE`、`BT` |
133
+ | `filterValue` | 筛选值数组;`BT` 需要两个值 |
134
+ | `filterLevel` | 筛选层级:`DETAIL` 明细、`AGGREGATION` 聚合、`RESULT` 结果 |
135
+ | `fieldFilterSettings` | 字段筛选器设置 |
136
+ | `compareColumn` | 是否对比列 |
137
+ | `advFilter` / `advFilterContent` | 高级筛选表达式及内容 |
138
+ | `refKey` | 关联来源 metric 字段 key,用于带业务限定指标筛选 |
139
+
140
+ ### 排序字段(SortingZoneObj)
141
+
142
+ | 参数 | 中文含义 |
143
+ |---|---|
144
+ | `id` | 指标 ID;指标排序时使用 |
145
+ | `dsId` / `fdId` | 维度字段来源 |
146
+ | `ordering` | 排序方向:`ASC` / `DESC` |
147
+ | `customSort.turnedOn` | 是否启用自定义排序 |
148
+ | `customSort.sortOrder` | 自定义排序值列表 |
149
+ | `isPinYinOrder` | 是否按拼音排序 |
150
+ | `associateFieldSorting` | 关联字段排序 |
151
+ | `advCalc` | 按高级计算结果排序 |
152
+ | `refKey` | 关联来源 metric 字段 key |
153
+
154
+ ## DSL 方法
155
+
156
+ | 方法 | 中文含义 |
157
+ |---|---|
158
+ | `createMetricChart(chartType, name)` | 创建指标卡片 |
159
+ | `.addMetric(metric(...))` | 添加主指标 |
160
+ | `.addMetricGroup(createMetricGroup(...))` | 添加数值组或嵌套数值组 |
161
+ | `.addMainViceGroup(createMainViceGroup(...))` | 添加主副指标组,仅透视表 |
162
+ | `.addMetricAdditional(metric(...))` | 添加副轴指标 |
163
+ | `.addRow(metricDim(...))` | 添加行/类目维度 |
164
+ | `.addColumn(metricDim(...))` | 添加列/对比维度 |
165
+ | `.addDynamicRow(name, fields, options?)` | 添加动态维度组,候选字段写入 row |
166
+ | `.addDynamicColumn(name, fields, options?)` | 添加动态维度组,候选字段写入 column |
167
+ | `.addDynamicMetric(name, fields, options?)` | 添加动态指标组,候选指标写入 metric |
168
+ | `.addDynamicMetricAdditional(name, fields, options?)` | 添加动态指标组,候选指标写入副轴 |
169
+ | `.addFilter(field, type, values)` | 添加筛选 |
170
+ | `.addSort(field)` | 添加排序;字段排序方向用 `sortType: SortOrder.ASC/DESC` |
171
+ | `.addColorBy(metric(...))` | 添加颜色指标 |
172
+ | `.addSize(metric(...))` | 添加大小指标 |
173
+ | `.addTooltip(metric(...))` | 添加 tooltip 指标 |
174
+ | `.addSplit(metricDim(...))` | 添加拆分维度 |
175
+ | `.setProps(obj)` | 设置 `chartMain.props` |
176
+ | `.setConfig(obj)` / `.setRawConfig(key, value)` | 设置 `chartMain.config` |
177
+ | `.setSummary(metric(...), options?)` | 设置 `meta.summary`;`options` 支持 `label`、`position`,旧的原始对象签名继续兼容 |
178
+ | `.setSummaryStyle(config)` | 设置汇总指标名称与数值样式 |
179
+ | `.setSpecialValue(config)` | 设置特殊值显示;仅支持前端开放该属性的图表类型 |
180
+ | `.setShowTitle(show)` / `.setCardTitleStyle(config)` | 设置卡片标题显隐与样式 |
181
+ | `.setColumns(columns)` | 设置 `content.columns` 与 dsInfo.columns |
182
+ | `.setTableSetting(obj)` | 设置表格行为与视觉样式 |
183
+ | `.setTableCellMerge(obj)` | 设置透视表单元格合并 |
184
+ | `.setPieSetting(obj)` / `.setPieCenterText(obj)` | 设置饼图属性 |
185
+ | `.setTreemapDataLabel(obj)` / `.setFunnelDataLabel(obj)` | 设置矩形树图分层数据标签、漏斗图各类数据标签 |
186
+ | `.setSplitSetting(obj)` | 设置拆分图属性 |
187
+ | `.setBarSetting(obj)` | 设置柱形图/条形图的柱体宽度、间距和圆角;帕累托图还支持数据点显隐 |
188
+ | `.setStackSplitSetting(obj)` | 设置分组堆积柱形图/条形图的堆积分组模式 |
189
+ | `.setWaterfallSetting(obj)` | 设置瀑布图的正负值颜色和累计值 |
190
+ | `.setParetoSetting(obj)` | 设置帕累托图的累计曲线名称和百分比精度 |
191
+ | `.setMapSetting(obj)` | 设置地图专属属性 |
192
+ | `.setBubbleSetting(obj)` | 设置气泡半径 |
193
+ | `.setRadarSetting(obj)` | 设置雷达图显示属性 |
194
+ | `.setBoxPlotSetting(obj)` | 设置箱线图属性 |
195
+ | `.setHeatMapSetting(obj)` | 设置热力图属性 |
196
+ | `.setShapeColorType(type)` | 设置图形填充 |
197
+ | `.setLineSetting(obj)` | 设置折线显示 |
198
+ | `.setComboSetting(obj)` | 设置组合图的显示方式、折线或符号样式 |
199
+ | `.setAuxiliaryLine(obj)` | 设置辅助线 |
200
+ | `.setGrandTotal(obj)` | 设置透视表/分组表行列总计及样式;字段小计通过 `metricDim()` / `metric()` overrides 配置 |
201
+ | `.setFreeDrill(enabled, position)` | 设置 `config.freeDrillConfig` |
202
+ | `.setRowThreshold(thresholds)` | 设置 `config.rowThreshold` |
203
+
204
+ ## 动态维度 / 动态指标
205
+
206
+ 动态字段是显式能力。只有调用 `.addDynamicRow()` / `.addDynamicColumn()` / `.addDynamicMetric()` / `.addDynamicMetricAdditional()` 时,guanvis 才会生成候选字段的 `dzId` 和 `meta.chartMain.dynamicZoneInfo`;普通 `.addRow()` / `.addMetric()` 仍生成静态字段。
207
+
208
+ ```javascript
209
+ var region = metricDim("销售额", "区域");
210
+ var city = metricDim("销售额", "城市");
211
+ var sales = metric("销售额");
212
+ var profit = metric("利润");
213
+
214
+ var card = createMetricChart(ChartType.PIVOT_TABLE, "指标动态分析")
215
+ .setId("metriccard12345678901234")
216
+ .addDynamicRow("分析维度", [region, city], {
217
+ defaultValue: [region],
218
+ multiSelect: false
219
+ })
220
+ .addDynamicMetric("分析指标", [sales, profit], {
221
+ defaultValue: [sales],
222
+ multiSelect: true,
223
+ orderType: DynamicFieldOrder.CLICK
224
+ });
225
+
226
+ registerMetricChart(card.build());
227
+ ```
228
+
229
+ `options`:
230
+
231
+ | 字段 | 默认值 | 说明 |
232
+ |---|---|---|
233
+ | `defaultValue` | 第一个候选字段 | 推荐传候选数组里的字段对象;字符串只在唯一命中 `name` / `alias` / `fdId` / `id` 时可用 |
234
+ | `multiSelect` | 根据 zone `maxCount` 推断 | `maxCount=1` 时强制单选;指标卡 row 默认单选 |
235
+ | `orderType` | `DynamicFieldOrder.PRESET` | `PRESET` 按候选顺序,`CLICK` 按用户点击顺序 |
236
+ | `id` | 自动生成 | 可选,显式指定 `dzId`,用于稳定 diff |
237
+
238
+ `hidden` 和 `selectType` 不开放配置;资源包固定写 `hidden: false`、`selectType: "SEARCHBOX"`。动态字段不写 `stateValue.dzFieldValues`,前端加载卡片时会根据 `dynamicZoneInfo.dzMappings.defaultValue` 初始化默认选中值。
239
+
240
+ 复杂配置可直接放到 `metric()` / `metricDim()` 的 overrides 中:
241
+
242
+ ```javascript
243
+ var card = createMetricChart(ChartType.PIVOT_TABLE, "复杂指标透视表")
244
+ .addRow(metricDim("销售额", "区域", {
245
+ hasSubTotal: true,
246
+ fieldFormat: { headerFormat: { alignment: "center" } }
247
+ }))
248
+ .addMetric(metric("销售额", {
249
+ alias: "销售额",
250
+ subtotalSetting: { isDisplayed: true, isAggrDsBased: true, aggrType: "SUM" },
251
+ fieldFormat: { numberFormat: NumberFormat.currency("¥", 0) }
252
+ }))
253
+ .addSort(metric("销售额", { sortType: SortOrder.DESC }))
254
+ .setTableSetting({ fixedHeaderInfo: { X: false } })
255
+ .setConfig({ rowThreshold: [] });
256
+
257
+ registerMetricChart(card.build());
258
+ ```
@@ -0,0 +1,60 @@
1
+ ## 在线同步机制
2
+
3
+ `publish` 和 `upload` 命令通过 BI 的 transfer API 直接将资源包上传到目标系统:
4
+
5
+ - **接口**:`POST /api/manual/template/transfer`(标准 multipart/form-data,表单字段名 `new-file`)
6
+ - **认证**:随底层 BI 请求通道使用 `Cookie: uIdToken=...`
7
+ - **关键 header**:`raw-backend-response: TRUE`(绕过前端代理层,直达后端)
8
+ - **ID 策略**:`needIdMapping=false`,保持资源 ID 不变。同 ID 资源会被覆盖更新。为避免部分 BI 版本在导入前探测 Card 时缓存"找不到相关卡片",`guanvis publish/upload` 的在线覆盖检查只探测目标环境已有 Page ID;检测到同 ID Page 时默认拒绝上传,只有明确加 `--allow-overwrite` 才允许覆盖。加 `--allow-overwrite` 后,CLI 会先调用资源包导出为冲突 Page 生成备份记录,并等待导出成功;`/api/task/{taskId}` 是备份成功或失败的权威终态,资源包列表只在任务成功但结果未直接返回 packageId 时用于补齐 packageId,不用列表状态覆盖任务结论。目标 BI 不支持通过该 taskId 查询任务或响应缺少任务状态时,兼容回退到资源包列表判定。备份失败或超时则中止上传。Card/Selector ID 不做在线探测。checkout 工程表示修改指定 Page,不在 CLI 内复制新版本或手写 ID 映射。
9
+ - **Page 归属校验**:资源包只要包含 Card/Selector,就必须同时包含 Page,且每个 Card/Selector 的 ID 必须出现在至少一个 Page 的 `cdIds` 中。只有 Card/Selector、没有 Page,或包内存在未被任何 Page 引用的 Card/Selector 时,`preview/pack/publish/upload` 会提示在 `page.js` 中放置对应资源并将 Page 与 Card/Selector 同包发布。该约束用于避免导入端生成 `pg_id` 为空、无法访问且会与页面草稿 `origin_cd_id` 冲突的孤儿卡片。
10
+ - **通用性**:不需要目标系统开启"一键迁移"开关,所有客户环境可用
11
+ - **异步执行**:上传成功后返回 `taskId`,后端异步完成导入
12
+
13
+ `upload` 只是上传器,不是自定义资源包制作入口。默认只允许上传由 `guanvis pack` 原样生成的 ZIP;禁止手工生成、解包修改或重打包资源包。
14
+
15
+ 若用户要求批量重绑资源、迁移已有页面或复用线上页面结构,先说明风险并确认方案;不要直接修改 ZIP 内部文件后上传。
16
+
17
+ checkout 工程表示“基于线上快照修改指定 Page”,不会新建 Page,也不要通过复制 checkout JSON、改 ID 或自建 ID map 来生成新版本。若用户要求保留原页面并另存新版本,用 `guanvis page save-as <pgId> --suffix _guanvis`(或 `--name <新名>`)做 BI 原生整页另存为,由服务端处理资源 ID 映射,再对副本 Page 执行 checkout/edit(细节见 `checkout-editing.md` §5)。用户可能已经在 BI 上手工改过页面布局、卡片配置、筛选器或说明文本;如果按旧 checkout 工程同 ID `publish`,线上改动会被覆盖。发布前应使用 `--dry-run` 检查覆盖对象,只有用户明确要求覆盖原资源时,才允许加 `--allow-overwrite` 同 ID 发布。
18
+
19
+ ## 认证与 CLI 集成
20
+
21
+ - 所有 API 调用通过底层 CLI 代理执行
22
+ - 认证由底层 CLI 负责:guancli 使用 `GUANCLI_PROFILE=<profile>` 固定本次任务环境,认证检查和后续发布使用同一值;未指定环境时沿用当前默认,仅用户明确要求修改默认环境时才用 `auth use`;guancli-lite 使用 `GUANCLI_BASE_URL`/`GUANCLI_TOKEN` 环境变量
23
+ - CLI 二进制路径通过 `GUANCLI_PATH` 环境变量指定,或自动在 PATH 中查找 `guancli-lite`/`guancli`
24
+
25
+ ## 硬约束
26
+
27
+ - `schema.js` 由 `init` 命令生成;`checkout` 会尽量生成 schema,但数据集无权限、已删除或跨环境残留时只提示 warning 并继续生成可编辑工程。不允许 AI 或人工修改 `schema.js`。只有目标 `schema.js` 是普通文件时才允许跳过或覆盖;同名目录及其他特殊文件会明确报错。目标文件已存在且未传 `--force` 时,`init` 不解析 `--alias`、不校验 dsId/权限、不调用认证或 BI API,保留原文件,向 stderr 输出“WARNING: schema.js 未更新,如需重刷请加 `--force`”并以成功状态退出,使调用方继续后续步骤;stdout 同时标记“已跳过”。缺失字段或需要重刷时用 `guanvis init <dsId> -d <dir> --force` 显式覆盖。
28
+ - `dynamic-parameters.js` 由 `guanvis parameter` 或 `checkout` 生成,不手改;`publish` 只校验项目实际引用的参数,不创建或更新线上参数。
29
+ - `charts/` 下的自定义图表内容文件(`<cdId>.js/.html/.css` 与 `<cdId>_assets/` 内嵌资源)是**可编辑事实源**:checkout 从线上卡片反编译生成,直接编辑即可修改图表,pack/publish 通过 `loadContent` 自动回填。重跑 checkout 会用线上版本重建这些文件(`--refresh-base` 不触碰 charts/)。
30
+ - card 脚本必须调用 `registerCard(card.build())`(目录模式)或返回 `card.build()`(单文件模式)。
31
+ - metric chart 脚本必须调用 `registerMetricChart(card.build())`。
32
+ - text card 脚本必须调用 `registerTextCard(textCard.build())`。
33
+ - image card 脚本必须调用 `registerImageCard(imageCard.build())`。
34
+ - custom chart 脚本必须调用 `registerCustomChart(chart.build())`。
35
+ - selector 脚本必须调用 `registerSelector(selector.build())`。
36
+ - `fdId` 和 `dsId` 必须匹配目标 BI 系统的真实值(通过 schema.js 保证)。
37
+ - card 文件名建议 `card_NN_xxx.js` 控制执行顺序。
38
+ - selector 文件名建议 `selector_NN_xxx.js`,在 card 之后执行。
39
+ - page 文件必须命名为 `page.js`。
40
+ - 包含 Card/Selector 时必须提供 `page.js`,并把包内每个 Card/Selector 放入至少一个 Page;禁止 Card-only 或孤儿 Card/Selector 资源包。
41
+ - 筛选器的 `linkTo(cardIndex)` 中 cardIndex 基于过滤后的可联动目标序列(0-based):普通图表和 MetricChart 按注册/布局顺序,文本/图片等不可联动资源不占序号,杜邦子图追加在末尾。
42
+ - 资源包 ZIP 是派生产物,不是可编辑源文件;不要手工编辑或重打包 ZIP。
43
+ - **文件访问边界**:只允许访问以下路径,不要主动探索或读取用户未明确授权的其他目录:
44
+ - 当前工作目录(`-d` 指定的目录或 cwd)
45
+ - `guancli` / `guanvis` CLI 工具的输出
46
+ - 用户在对话中明确提到或授权的路径
47
+ - 禁止为了"查找参考代码""寻找类似实现"而主动扫描用户机器上的其他项目目录,这会引起安全顾虑。
48
+
49
+ ### ID 管理
50
+
51
+ 所有 Card、Selector 和 Page **必须**调用 `.setId(id)` 设置显式 ID。未设置 ID 会在 JS 校验和 Go 校验两层报错,阻止生成。
52
+
53
+ - **新建资源 ID** 应使用 `guanvis genid` 生成;`genid` 输出格式为 `^[a-z][0-9a-f]{23}$`。新建校验接受字母开头的 24 位小写字母数字 ID(`^[a-z][a-z0-9]{23}$`),因此已有的固定小写测试 ID 仍可使用,但混合大小写和数字开头 ID 会被拦截。
54
+ - **已有资源兼容**:checkout/attach 把线上 ID 视为不透明标识并原样保留,不校验格式;只检查非空、唯一和引用关系,避免已有资源因历史或未来 ID 形态变化而无法原地编辑。
55
+ - 存量本地源码工程若包含已发布的非规范 ID,不要按新建校验提示替换 ID;应 checkout/attach 后继续使用线上原 ID,避免收藏、订阅、权限和外部引用断链。
56
+ - **生成 ID**:先运行 `guanvis genid <数量>` 生成足够的 ID,在编写脚本时直接填入每个 card/selector/page 的 `.setId()` 调用中。
57
+ - **布局组件 ID 例外**:Tab、Panel、AreaTitle、CardGroup、SelGroup 使用 `guanvis gen-layout-id <prefix>` 生成,形如 `tab_AbCdEf`、`panel_AbCdEf`、`areaTitle_AbCdEf`、`cardGroup_AbCdEf`、`selGroup_AbCdEf`,不适用 24 位 `genid` 规则。
58
+ - **线上更新默认策略**:新建工程发布新 Page;checkout 工程只修改 checkout 指定的 Page,不负责复制新版本。
59
+ - **覆盖前检查**:发布前可先运行 `guanvis publish <dir> --dry-run` 或 `guanvis upload <zip> --dry-run`,只构建/解析资源并列出将被覆盖的线上 Page,不提交 transfer 任务。
60
+ - **显式覆盖场景**:checkout 工程发布时保持 `.setId()` 不变,并在用户确认覆盖后加 `--allow-overwrite` 允许同 ID Page 覆盖;多次同 ID 发布会覆盖资源(因为 transfer API 的 `needIdMapping=false`),其中 Card/Selector ID 不做在线覆盖检查。覆盖前备份包含 Page 及其组成资源,但不会沿血缘额外导出数据集、数据账户等上游资源;备份只创建资源迁移导出记录并打印 packageId,不自动下载资源包。需要回滚时,用户应到 BI 资源迁移导出记录中下载该资源包,再手动导入覆盖回去。