@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,277 @@
1
+ {
2
+ "schemaVersion": "1.0",
3
+ "source": {
4
+ "environment": "test71",
5
+ "capturedAt": "2026-09-21",
6
+ "authentication": "account-password",
7
+ "note": "由隔离临时指标树真实请求采集后脱敏;示例 ID、名称和日期不可直接用于调用。PAT 未验证。"
8
+ },
9
+ "createRequest": {
10
+ "metricId": "metric_root_example",
11
+ "name": "销售额指标树",
12
+ "parentDirId": "metric_tree_dir_root",
13
+ "config": {
14
+ "timeComparisonSetting": {
15
+ "advType": "COMPARATIVE",
16
+ "advValue": {
17
+ "advType": "COMPARATIVE",
18
+ "dateFdId": "fd_order_date",
19
+ "valueType": "RAWDATA",
20
+ "offset": 1,
21
+ "offsetType": "DAY",
22
+ "granularity": "DAY",
23
+ "window": { "period": ["2026-09-21"], "withMacro": false },
24
+ "mode": "NORMAL"
25
+ }
26
+ },
27
+ "comparisonEnabled": true,
28
+ "contributionCalcEnabled": true,
29
+ "dimensionDecompositionContent": {
30
+ "decomposableDimensionIds": [],
31
+ "multipleDimensionEnabled": false,
32
+ "multipleDimensionList": [],
33
+ "nodeNum": 5,
34
+ "orderBy": "valueDesc",
35
+ "drillDownLevels": []
36
+ },
37
+ "metricDecompositionContent": {
38
+ "metricRelationTree": [
39
+ { "operation": "", "metricId": "metric_root_example", "decomposeMode": "calculation" }
40
+ ]
41
+ }
42
+ }
43
+ },
44
+ "createResponse": {
45
+ "result": "ok",
46
+ "response": {
47
+ "success": true,
48
+ "message": "指标树创建成功",
49
+ "metricTreeId": "metric_tree_example"
50
+ }
51
+ },
52
+ "renameRequest": { "name": "销售经营分析指标树" },
53
+ "renameResponse": {
54
+ "result": "ok",
55
+ "response": {
56
+ "success": true,
57
+ "message": "指标树名称更新成功",
58
+ "data": {
59
+ "domId": "example_domain",
60
+ "metricId": "metric_root_example",
61
+ "metricTreeId": "metric_tree_example",
62
+ "name": "销售经营分析指标树",
63
+ "config": {},
64
+ "parentDirId": "metric_tree_dir_root",
65
+ "uId": "user_example",
66
+ "ctime": "2026-09-21 11:18:16+0800",
67
+ "utime": "2026-09-21 11:19:01+0800",
68
+ "isDel": false
69
+ }
70
+ }
71
+ },
72
+ "moveRequest": { "newParentDirId": "metric_tree_dir_sales" },
73
+ "moveResponse": {
74
+ "result": "ok",
75
+ "response": { "success": true, "message": "指标树移动成功" }
76
+ },
77
+ "updateConfigRequest": {
78
+ "config": {
79
+ "comparisonEnabled": true,
80
+ "contributionCalcEnabled": true,
81
+ "dimensionDecompositionContent": {
82
+ "decomposableDimensionIds": [],
83
+ "multipleDimensionEnabled": false,
84
+ "multipleDimensionList": [],
85
+ "nodeNum": 5,
86
+ "orderBy": "valueDesc",
87
+ "drillDownLevels": []
88
+ },
89
+ "metricDecompositionContent": {
90
+ "metricRelationTree": [
91
+ { "operation": "", "metricId": "metric_root_example", "decomposeMode": "calculation" }
92
+ ]
93
+ }
94
+ }
95
+ },
96
+ "updateConfigResponse": {
97
+ "result": "ok",
98
+ "response": {
99
+ "success": true,
100
+ "message": "指标树配置更新成功",
101
+ "data": {
102
+ "domId": "example_domain",
103
+ "metricId": "metric_root_example",
104
+ "metricTreeId": "metric_tree_example",
105
+ "name": "销售经营分析指标树",
106
+ "config": {},
107
+ "parentDirId": "metric_tree_dir_root",
108
+ "uId": "user_example",
109
+ "ctime": "2026-09-21 11:18:16+0800",
110
+ "utime": "2026-09-21 11:19:43+0800",
111
+ "isDel": false
112
+ }
113
+ }
114
+ },
115
+ "detailResponse": {
116
+ "result": "ok",
117
+ "response": {
118
+ "domId": "example_domain",
119
+ "metricTreeId": "metric_tree_example",
120
+ "metricTreeName": "销售经营分析指标树",
121
+ "config": {},
122
+ "parentDirId": "metric_tree_dir_root",
123
+ "ctime": "2026-09-21 11:18:16",
124
+ "utime": "2026-09-21 11:19:43",
125
+ "isDel": false,
126
+ "metricId": "metric_root_example",
127
+ "metricName": "销售额",
128
+ "projectId": "project_example",
129
+ "projectName": "经营指标",
130
+ "creatorId": "user_example",
131
+ "creatorName": "示例用户",
132
+ "canUse": true,
133
+ "canManage": true,
134
+ "dirPath": [
135
+ { "dirId": "metric_tree_dir_root", "dirName": "根目录" }
136
+ ]
137
+ }
138
+ },
139
+ "listByParentResponse": {
140
+ "result": "ok",
141
+ "response": {
142
+ "success": true,
143
+ "data": [
144
+ {
145
+ "domId": "example_domain",
146
+ "metricId": "metric_root_example",
147
+ "metricTreeId": "metric_tree_example",
148
+ "name": "销售经营分析指标树",
149
+ "config": {},
150
+ "parentDirId": "metric_tree_dir_root",
151
+ "uId": "user_example",
152
+ "ctime": "2026-09-21 11:18:16+0800",
153
+ "utime": "2026-09-21 11:19:43+0800",
154
+ "isDel": false
155
+ }
156
+ ],
157
+ "total": 1
158
+ }
159
+ },
160
+ "searchResponse": {
161
+ "result": "ok",
162
+ "response": {
163
+ "success": true,
164
+ "data": [
165
+ {
166
+ "metricTreeId": "metric_tree_example",
167
+ "metricTreeName": "销售经营分析指标树",
168
+ "metricId": "metric_root_example",
169
+ "metricName": "销售额",
170
+ "projectId": "project_example",
171
+ "projectName": "经营指标",
172
+ "creatorId": "user_example",
173
+ "creatorName": "示例用户",
174
+ "parentDirId": "metric_tree_dir_root",
175
+ "canUse": true,
176
+ "canManage": true,
177
+ "dirPath": [
178
+ { "dirId": "metric_tree_dir_root", "dirName": "根目录" }
179
+ ]
180
+ }
181
+ ],
182
+ "total": 1
183
+ }
184
+ },
185
+ "deleteResponse": {
186
+ "result": "ok",
187
+ "response": { "success": true, "message": "指标树删除成功" }
188
+ },
189
+ "directory": {
190
+ "createRequest": {
191
+ "name": "经营分析",
192
+ "parentDirId": "metric_tree_dir_root",
193
+ "dirType": "METRIC_TREE"
194
+ },
195
+ "createResponse": {
196
+ "result": "ok",
197
+ "response": {
198
+ "dirId": "metric_tree_dir_sales",
199
+ "dirName": "经营分析",
200
+ "dirType": "METRIC_TREE",
201
+ "parentDirId": "metric_tree_dir_root",
202
+ "parentDirName": "根目录",
203
+ "dirPath": [
204
+ { "dirId": "metric_tree_dir_root", "dirName": "根目录" },
205
+ { "dirId": "metric_tree_dir_sales", "dirName": "经营分析" }
206
+ ]
207
+ }
208
+ },
209
+ "updateRequest": {
210
+ "name": "销售经营分析",
211
+ "parentDirId": "metric_tree_dir_root",
212
+ "dirType": "METRIC_TREE"
213
+ },
214
+ "updateResponse": {
215
+ "result": "ok",
216
+ "response": {
217
+ "dirId": "metric_tree_dir_sales",
218
+ "dirName": "销售经营分析",
219
+ "dirType": "METRIC_TREE",
220
+ "parentDirId": "metric_tree_dir_root",
221
+ "parentDirName": "根目录",
222
+ "dirPath": [
223
+ { "dirId": "metric_tree_dir_root", "dirName": "根目录" },
224
+ { "dirId": "metric_tree_dir_sales", "dirName": "销售经营分析" }
225
+ ]
226
+ }
227
+ },
228
+ "detailResponse": {
229
+ "result": "ok",
230
+ "response": {
231
+ "count": 0,
232
+ "parentDirId": "metric_tree_dir_root",
233
+ "parentDirName": "根目录",
234
+ "dirType": "METRIC_TREE",
235
+ "dirId": "metric_tree_dir_sales",
236
+ "dirName": "销售经营分析",
237
+ "canManage": true,
238
+ "canUse": true,
239
+ "contents": [],
240
+ "dirPath": [
241
+ { "dirId": "metric_tree_dir_root", "dirName": "根目录" },
242
+ { "dirId": "metric_tree_dir_sales", "dirName": "销售经营分析" }
243
+ ],
244
+ "hasChildDir": false
245
+ }
246
+ },
247
+ "treeResponse": {
248
+ "result": "ok",
249
+ "response": {
250
+ "id": "metric_tree_dir_root",
251
+ "parentDirId": "",
252
+ "name": "根目录",
253
+ "type": "DIRECTORY",
254
+ "contents": [
255
+ {
256
+ "id": "metric_tree_dir_sales",
257
+ "parentDirId": "metric_tree_dir_root",
258
+ "name": "销售经营分析",
259
+ "type": "DIRECTORY",
260
+ "canManage": true,
261
+ "canUse": true,
262
+ "ctime": "2026-09-21T11:31:51.00Z",
263
+ "utime": "2026-09-21T11:32:55.00Z"
264
+ }
265
+ ],
266
+ "canManage": true,
267
+ "canUse": true,
268
+ "ctime": "2025-12-25T17:02:08.00Z",
269
+ "utime": "2026-09-21T11:32:55.00Z"
270
+ }
271
+ },
272
+ "deleteResponse": {
273
+ "result": "ok",
274
+ "response": "Directory deleted"
275
+ }
276
+ }
277
+ }
@@ -0,0 +1,263 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://guandata.dev/schemas/guanmetric/metric-tree-api-contract-1.0.json",
4
+ "title": "GuanData metric tree API contract",
5
+ "description": "用于 Agent 构造指标树写请求并解析真实后端响应。响应允许后端新增字段。",
6
+ "oneOf": [
7
+ { "$ref": "#/$defs/createRequest" },
8
+ { "$ref": "#/$defs/renameRequest" },
9
+ { "$ref": "#/$defs/moveRequest" },
10
+ { "$ref": "#/$defs/updateConfigRequest" },
11
+ { "$ref": "#/$defs/createResponse" },
12
+ { "$ref": "#/$defs/mutationResponse" },
13
+ { "$ref": "#/$defs/detailResponse" },
14
+ { "$ref": "#/$defs/listResponse" },
15
+ { "$ref": "#/$defs/searchResponse" },
16
+ { "$ref": "#/$defs/deleteResponse" },
17
+ { "$ref": "#/$defs/directoryWriteRequest" },
18
+ { "$ref": "#/$defs/directoryMutationResponse" },
19
+ { "$ref": "#/$defs/directoryDetailResponse" },
20
+ { "$ref": "#/$defs/directoryTreeResponse" },
21
+ { "$ref": "#/$defs/directoryDeleteResponse" }
22
+ ],
23
+ "$defs": {
24
+ "nonEmptyString": { "type": "string", "minLength": 1 },
25
+ "config": { "type": "object", "additionalProperties": true },
26
+ "createRequest": {
27
+ "type": "object",
28
+ "required": ["metricId", "name", "parentDirId"],
29
+ "properties": {
30
+ "metricId": { "$ref": "#/$defs/nonEmptyString" },
31
+ "name": { "$ref": "#/$defs/nonEmptyString" },
32
+ "parentDirId": { "$ref": "#/$defs/nonEmptyString" },
33
+ "config": { "$ref": "#/$defs/config" }
34
+ },
35
+ "additionalProperties": false
36
+ },
37
+ "renameRequest": {
38
+ "type": "object",
39
+ "required": ["name"],
40
+ "properties": { "name": { "$ref": "#/$defs/nonEmptyString" } },
41
+ "additionalProperties": false
42
+ },
43
+ "moveRequest": {
44
+ "type": "object",
45
+ "required": ["newParentDirId"],
46
+ "properties": { "newParentDirId": { "$ref": "#/$defs/nonEmptyString" } },
47
+ "additionalProperties": false
48
+ },
49
+ "updateConfigRequest": {
50
+ "type": "object",
51
+ "required": ["config"],
52
+ "properties": { "config": { "$ref": "#/$defs/config" } },
53
+ "additionalProperties": false
54
+ },
55
+ "pathItem": {
56
+ "type": "object",
57
+ "required": ["dirId", "dirName"],
58
+ "properties": {
59
+ "dirId": { "$ref": "#/$defs/nonEmptyString" },
60
+ "dirName": { "type": "string" }
61
+ },
62
+ "additionalProperties": true
63
+ },
64
+ "listItem": {
65
+ "type": "object",
66
+ "required": ["domId", "metricId", "metricTreeId", "name", "parentDirId", "isDel"],
67
+ "properties": {
68
+ "domId": { "$ref": "#/$defs/nonEmptyString" },
69
+ "metricId": { "$ref": "#/$defs/nonEmptyString" },
70
+ "metricTreeId": { "$ref": "#/$defs/nonEmptyString" },
71
+ "name": { "$ref": "#/$defs/nonEmptyString" },
72
+ "config": { "$ref": "#/$defs/config" },
73
+ "parentDirId": { "$ref": "#/$defs/nonEmptyString" },
74
+ "uId": { "type": "string" },
75
+ "ctime": { "type": "string" },
76
+ "utime": { "type": "string" },
77
+ "isDel": { "type": "boolean" }
78
+ },
79
+ "additionalProperties": true
80
+ },
81
+ "detail": {
82
+ "type": "object",
83
+ "required": ["metricTreeId", "metricTreeName", "metricId", "parentDirId", "canUse", "canManage"],
84
+ "properties": {
85
+ "metricTreeId": { "$ref": "#/$defs/nonEmptyString" },
86
+ "metricTreeName": { "$ref": "#/$defs/nonEmptyString" },
87
+ "metricId": { "$ref": "#/$defs/nonEmptyString" },
88
+ "metricName": { "type": "string" },
89
+ "parentDirId": { "$ref": "#/$defs/nonEmptyString" },
90
+ "config": { "$ref": "#/$defs/config" },
91
+ "canUse": { "type": "boolean" },
92
+ "canManage": { "type": "boolean" },
93
+ "dirPath": { "type": "array", "items": { "$ref": "#/$defs/pathItem" } }
94
+ },
95
+ "additionalProperties": true
96
+ },
97
+ "successPayload": {
98
+ "type": "object",
99
+ "required": ["success", "message"],
100
+ "properties": {
101
+ "success": { "const": true },
102
+ "message": { "$ref": "#/$defs/nonEmptyString" },
103
+ "data": { "$ref": "#/$defs/listItem" }
104
+ },
105
+ "additionalProperties": true
106
+ },
107
+ "envelope": {
108
+ "type": "object",
109
+ "required": ["result", "response"],
110
+ "properties": { "result": { "const": "ok" } },
111
+ "additionalProperties": true
112
+ },
113
+ "createResponse": {
114
+ "allOf": [
115
+ { "$ref": "#/$defs/envelope" },
116
+ {
117
+ "properties": {
118
+ "response": {
119
+ "allOf": [
120
+ { "$ref": "#/$defs/successPayload" },
121
+ { "required": ["metricTreeId"], "properties": { "metricTreeId": { "$ref": "#/$defs/nonEmptyString" } } }
122
+ ]
123
+ }
124
+ }
125
+ }
126
+ ]
127
+ },
128
+ "mutationResponse": {
129
+ "allOf": [
130
+ { "$ref": "#/$defs/envelope" },
131
+ { "properties": { "response": { "$ref": "#/$defs/successPayload" } } }
132
+ ]
133
+ },
134
+ "detailResponse": {
135
+ "allOf": [
136
+ { "$ref": "#/$defs/envelope" },
137
+ { "properties": { "response": { "$ref": "#/$defs/detail" } } }
138
+ ]
139
+ },
140
+ "pagedListPayload": {
141
+ "type": "object",
142
+ "required": ["success", "data", "total"],
143
+ "properties": {
144
+ "success": { "const": true },
145
+ "data": { "type": "array", "items": { "$ref": "#/$defs/listItem" } },
146
+ "total": { "type": "integer", "minimum": 0 }
147
+ },
148
+ "additionalProperties": true
149
+ },
150
+ "listResponse": {
151
+ "allOf": [
152
+ { "$ref": "#/$defs/envelope" },
153
+ { "properties": { "response": { "$ref": "#/$defs/pagedListPayload" } } }
154
+ ]
155
+ },
156
+ "searchResponse": {
157
+ "allOf": [
158
+ { "$ref": "#/$defs/envelope" },
159
+ {
160
+ "properties": {
161
+ "response": {
162
+ "type": "object",
163
+ "required": ["success", "data", "total"],
164
+ "properties": {
165
+ "success": { "const": true },
166
+ "data": { "type": "array", "items": { "$ref": "#/$defs/detail" } },
167
+ "total": { "type": "integer", "minimum": 0 }
168
+ },
169
+ "additionalProperties": true
170
+ }
171
+ }
172
+ }
173
+ ]
174
+ },
175
+ "deleteResponse": {
176
+ "allOf": [
177
+ { "$ref": "#/$defs/envelope" },
178
+ { "properties": { "response": { "$ref": "#/$defs/successPayload" } } }
179
+ ]
180
+ },
181
+ "directoryWriteRequest": {
182
+ "type": "object",
183
+ "required": ["name", "parentDirId", "dirType"],
184
+ "properties": {
185
+ "name": { "$ref": "#/$defs/nonEmptyString" },
186
+ "parentDirId": { "$ref": "#/$defs/nonEmptyString" },
187
+ "dirType": { "const": "METRIC_TREE" }
188
+ },
189
+ "additionalProperties": false
190
+ },
191
+ "directoryMutationPayload": {
192
+ "type": "object",
193
+ "required": ["dirId", "dirName", "dirType", "parentDirId", "parentDirName", "dirPath"],
194
+ "properties": {
195
+ "dirId": { "$ref": "#/$defs/nonEmptyString" },
196
+ "dirName": { "$ref": "#/$defs/nonEmptyString" },
197
+ "dirType": { "const": "METRIC_TREE" },
198
+ "parentDirId": { "$ref": "#/$defs/nonEmptyString" },
199
+ "parentDirName": { "type": "string" },
200
+ "dirPath": { "type": "array", "items": { "$ref": "#/$defs/pathItem" } }
201
+ },
202
+ "additionalProperties": true
203
+ },
204
+ "directoryMutationResponse": {
205
+ "allOf": [
206
+ { "$ref": "#/$defs/envelope" },
207
+ { "properties": { "response": { "$ref": "#/$defs/directoryMutationPayload" } } }
208
+ ]
209
+ },
210
+ "directoryDetail": {
211
+ "type": "object",
212
+ "required": ["count", "parentDirId", "dirType", "dirId", "dirName", "canManage", "canUse", "contents", "dirPath", "hasChildDir"],
213
+ "properties": {
214
+ "count": { "type": "integer", "minimum": 0 },
215
+ "parentDirId": { "type": "string" },
216
+ "parentDirName": { "type": ["string", "null"] },
217
+ "dirType": { "const": "METRIC_TREE" },
218
+ "dirId": { "$ref": "#/$defs/nonEmptyString" },
219
+ "dirName": { "type": "string" },
220
+ "canManage": { "type": "boolean" },
221
+ "canUse": { "type": "boolean" },
222
+ "contents": { "type": "array" },
223
+ "dirPath": { "type": "array", "items": { "$ref": "#/$defs/pathItem" } },
224
+ "hasChildDir": { "type": "boolean" }
225
+ },
226
+ "additionalProperties": true
227
+ },
228
+ "directoryDetailResponse": {
229
+ "allOf": [
230
+ { "$ref": "#/$defs/envelope" },
231
+ { "properties": { "response": { "$ref": "#/$defs/directoryDetail" } } }
232
+ ]
233
+ },
234
+ "directoryTreeNode": {
235
+ "type": "object",
236
+ "required": ["id", "parentDirId", "name", "type"],
237
+ "properties": {
238
+ "id": { "$ref": "#/$defs/nonEmptyString" },
239
+ "parentDirId": { "type": "string" },
240
+ "name": { "type": "string" },
241
+ "type": { "const": "DIRECTORY" },
242
+ "contents": { "type": "array", "items": { "$ref": "#/$defs/directoryTreeNode" } },
243
+ "canManage": { "type": "boolean" },
244
+ "canUse": { "type": "boolean" },
245
+ "ctime": { "type": "string" },
246
+ "utime": { "type": "string" }
247
+ },
248
+ "additionalProperties": true
249
+ },
250
+ "directoryTreeResponse": {
251
+ "allOf": [
252
+ { "$ref": "#/$defs/envelope" },
253
+ { "properties": { "response": { "$ref": "#/$defs/directoryTreeNode" } } }
254
+ ]
255
+ },
256
+ "directoryDeleteResponse": {
257
+ "allOf": [
258
+ { "$ref": "#/$defs/envelope" },
259
+ { "properties": { "response": { "type": "string" } } }
260
+ ]
261
+ }
262
+ }
263
+ }
@@ -0,0 +1,53 @@
1
+ # 指标树 API 真实契约
2
+
3
+ 本文记录指标树及其 `METRIC_TREE` 目录的创建、原地编辑、详情、列表和删除接口真实形态,供 Agent 构造请求和解析返回。完整脱敏样例见 `metric-tree-api-contract-examples.json`,JSON Schema 见 `metric-tree-api-contract.schema.json`。
4
+
5
+ 样例于 2026-09-21 使用 test71 隔离临时指标树和账号密码认证实测。PAT 尚未验证,不能据此声明这些接口已完成 PAT 兼容验证。
6
+
7
+ ## 接口矩阵
8
+
9
+ | 操作 | Method / Path | 请求体 | 关键响应 |
10
+ | --- | --- | --- | --- |
11
+ | 创建 | `POST /api/metric-platform/metric-tree/add` | `metricId/name/parentDirId`,可选 `config` | `success/message/metricTreeId` |
12
+ | 详情 | `GET /api/metric-platform/metric-tree/{id}` | 无 | 详情读模型,名称字段为 `metricTreeName` |
13
+ | 父目录列表 | `GET /api/metric-platform/metric-tree/by-parent/{parentDirId}` | 无 | `{success,data,total}`;列表项名称字段为 `name` |
14
+ | 搜索 | `GET /api/metric-platform/metric-tree/search?nameLike=...` | 无 | `{success,data,total}`;搜索项更接近详情模型,名称字段为 `metricTreeName` |
15
+ | 改名 | `POST /api/metric-platform/metric-tree/{id}/rename` | 仅 `{name}` | `success/message/data`,`data` 是列表态对象 |
16
+ | 移动 | `POST /api/metric-platform/metric-tree/{id}/move` | 仅 `{newParentDirId}` | `success/message`;移到当前目录会返回业务码 `1012` |
17
+ | 更新配置 | `POST /api/metric-platform/metric-tree/{id}/update-config` | 仅 `{config}` | `success/message/data`,`data` 是列表态对象 |
18
+ | 删除 | `POST /api/metric-platform/metric-tree/{id}/delete` | 无 | `{success:true,message:"指标树删除成功"}` |
19
+
20
+ ### METRIC_TREE 目录接口
21
+
22
+ | 操作 | Method / Path | 请求体 | 关键响应 |
23
+ | --- | --- | --- | --- |
24
+ | 目录树 | `GET /api/directory/METRIC_TREE/authorized-tree` | 无 | 递归目录节点,字段为 `id/name/type/contents` |
25
+ | 目录详情 | `GET /api/directory/METRIC_TREE?dirId=...&dirType=METRIC_TREE&folderOnly=true&offset=0&limit=0` | 无 | 详情字段为 `dirId/dirName/dirPath/hasChildDir/count` |
26
+ | 创建目录 | `POST /api/metric-platform/directory/create` | `{name,parentDirId,dirType:"METRIC_TREE"}` | 目录路径对象 |
27
+ | 编辑目录 | `POST /api/metric-platform/directory/{id}/update` | 完整 `{name,parentDirId,dirType:"METRIC_TREE"}` | 目录路径对象 |
28
+ | 删除目录 | `POST /api/metric-platform/directory/{id}/delete` | 无 | 字符串 `Directory deleted` |
29
+
30
+ Spring Controller 已确认上述路由真实存在:目录树和详情要求 `BASE.READ`;创建、编辑、删除分别要求 `METRIC_PLATFORM.CREATE`、`METRIC_PLATFORM.UPDATE`、`METRIC_PLATFORM.DELETE`。这是服务端最终权限判断,CLI 不在本地复制权限规则。PAT 默认授权及有权/无权对照尚未实测。
31
+
32
+ ## 读写模型必须分离
33
+
34
+ - 详情响应的 `metricTreeName`、`metricName`、`projectName`、`creatorName`、`canUse`、`canManage`、`dirPath`、`ctime`、`utime` 和 `isDel` 都是读模型字段,不能把详情整体提交给任一写接口。
35
+ - 父目录列表、rename 和 update-config 返回的对象用 `name`,详情与搜索用 `metricTreeName`。解析器不能假设二者同名。
36
+ - 改名只提交 `{name}`;移动只提交 `{newParentDirId}`;配置编辑只提交 `{config}`。不要用详情对象 merge 后整体回写。
37
+ - 创建的最小写模型是 `{metricId,name,parentDirId}`。CLI 会读取根指标并补齐默认配置;根指标没有时间维度时会拒绝创建。
38
+ - 指标树目录写模型必须固定 `dirType=METRIC_TREE`。目录树节点的 `id/name` 与详情/写响应的 `dirId/dirName` 是两套读模型字段,不能整体回写。
39
+ - 目录 edit 即使只改名称,也要先读详情并提交完整 `{name,parentDirId,dirType}`;根目录不能编辑或删除,目录不能移动到自身或后代。
40
+
41
+ ## 删除安全语义
42
+
43
+ `guanmetric metric-tree delete <id>` 默认先读取详情,展示根指标、项目、目录路径和配置,不真实删除。只有明确追加 `--confirm` 才调用删除接口;`--confirm --dry-run` 只展示 GET + POST 计划。删除由 BI 服务端最终校验权限,当前后端权限项为 `METRIC_PLATFORM.DELETE`。
44
+
45
+ 删除会使原指标树 ID、归因入口和外部链接失效,不可用“删除 + 同名创建”模拟编辑。改名、移动和配置变化必须使用对应原地编辑命令。
46
+
47
+ `guanmetric metric-tree directory delete <dir_id>` 同样默认只展示目录详情;`--confirm` 才删除。前端明确要求先清空目录,目录非空时由后端拒绝。
48
+
49
+ ## 验证边界
50
+
51
+ - 本轮账号密码实测覆盖:指标树创建、详情、父目录列表、搜索、改名、移动、更新配置、删除;以及指标树目录 tree、detail、create、rename、move、delete 和写后回读。
52
+ - PAT 未实测;在完成同用户同 Domain 的有权、无权、资源不存在及写后回读对照前,PAT 状态必须标记为“未验证”。
53
+ - JSON Schema 对请求体使用严格白名单;响应允许服务端新增字段,以降低只增加返回字段造成的漂移风险。