@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.
- package/NOTICE.md +17 -0
- package/README.md +146 -2
- package/assets/coreutils.wasm +0 -0
- package/assets/find.wasm +0 -0
- package/assets/guanbi.wasm +4 -0
- package/assets/guancli.wasm +0 -0
- package/assets/guanhelm.wasm +0 -0
- package/assets/jq.wasm +0 -0
- package/assets/openskills.wasm +0 -0
- package/assets/rg.wasm +0 -0
- package/assets/sed.wasm +0 -0
- package/bin/guancopilot +0 -0
- package/bin/guanvm +0 -0
- package/bin/platforms.cjs +6 -0
- package/bin/run.cjs +39 -0
- package/bin/runtime.cjs +44 -0
- package/licenses/Go-LICENSE +27 -0
- package/licenses/browser-_speed-highlight_core-LICENSE +121 -0
- package/licenses/browser-_speed-highlight_core-package.json +14 -0
- package/licenses/browser-dompurify-LICENSE +202 -0
- package/licenses/browser-dompurify-LICENSE-MPL +373 -0
- package/licenses/browser-dompurify-package.json +10 -0
- package/licenses/browser-marked-LICENSE +44 -0
- package/licenses/browser-marked-package.json +10 -0
- package/licenses/coreutils-LICENSE +18 -0
- package/licenses/findutils-LICENSE +18 -0
- package/licenses/github.com_BurntSushi_toml_v1.6.0-COPYING +21 -0
- package/licenses/github.com_dustin_go-humanize_v1.0.1-LICENSE +21 -0
- package/licenses/github.com_google_jsonschema-go_v0.4.3-LICENSE +21 -0
- package/licenses/github.com_google_uuid_v1.6.0-LICENSE +27 -0
- package/licenses/github.com_jackc_pgpassfile_v1.0.0-LICENSE +22 -0
- package/licenses/github.com_jackc_pgservicefile_v0.0.0-20240606120523-5a60cdf6a761-LICENSE +22 -0
- package/licenses/github.com_jackc_pgx_v5_v5.11.0-LICENSE +22 -0
- package/licenses/github.com_jackc_puddle_v2_v2.2.2-LICENSE +22 -0
- package/licenses/github.com_mattn_go-isatty_v0.0.20-LICENSE +9 -0
- package/licenses/github.com_modelcontextprotocol_go-sdk_v1.8.0-LICENSE +216 -0
- package/licenses/github.com_ncruces_go-strftime_v1.0.0-LICENSE +21 -0
- package/licenses/github.com_remyoudompheng_bigfft_v0.0.0-20230129092748-24d4a6f8daec-LICENSE +27 -0
- package/licenses/github.com_santhosh-tekuri_jsonschema_v6_v6.0.3-LICENSE +175 -0
- package/licenses/github.com_segmentio_asm_v1.1.3-LICENSE +21 -0
- package/licenses/github.com_segmentio_encoding_v0.5.4-LICENSE +21 -0
- package/licenses/github.com_tetratelabs_wazero_v1.12.0-LICENSE +201 -0
- package/licenses/github.com_tetratelabs_wazero_v1.12.0-NOTICE +2 -0
- package/licenses/github.com_yosida95_uritemplate_v3_v3.0.2-LICENSE +25 -0
- package/licenses/golang.org_x_image_v0.44.0-LICENSE +27 -0
- package/licenses/golang.org_x_net_v0.58.0-LICENSE +27 -0
- package/licenses/golang.org_x_oauth2_v0.36.0-LICENSE +27 -0
- package/licenses/golang.org_x_sync_v0.22.0-LICENSE +27 -0
- package/licenses/golang.org_x_sys_v0.47.0-LICENSE +27 -0
- package/licenses/golang.org_x_text_v0.41.0-LICENSE +27 -0
- package/licenses/golang.org_x_time_v0.15.0-LICENSE +27 -0
- package/licenses/guanbi-skills-LICENSE +133 -0
- package/licenses/guanbi-skills-LICENSE.README.md +28 -0
- package/licenses/guanbi-skills-LICENSE.zh-CN +82 -0
- package/licenses/jq-COPYING +176 -0
- package/licenses/modernc.org_libc_v1.73.4-LICENSE +27 -0
- package/licenses/modernc.org_libc_v1.73.4-LICENSE-3RD-PARTY.md +305 -0
- package/licenses/modernc.org_mathutil_v1.7.1-LICENSE +27 -0
- package/licenses/modernc.org_memory_v1.11.0-LICENSE +27 -0
- package/licenses/modernc.org_memory_v1.11.0-LICENSE-GO +27 -0
- package/licenses/modernc.org_memory_v1.11.0-LICENSE-LOGO +1 -0
- package/licenses/modernc.org_memory_v1.11.0-LICENSE-MMAP-GO +25 -0
- package/licenses/modernc.org_sqlite_v1.53.0-LICENSE +26 -0
- package/licenses/mvdan.cc_sh_v3_v3.13.1-LICENSE +27 -0
- package/licenses/ripgrep-COPYING +3 -0
- package/licenses/ripgrep-LICENSE-MIT +21 -0
- package/licenses/sed-LICENSE +21 -0
- package/manifest.json +972 -0
- package/package.json +30 -4
- package/plugin/guancopilot.js +193 -0
- package/skills-bundle/.guanvm-skills-bundle +0 -0
- package/skills-bundle/_recipes/dashboard/gates/page_check.js +16 -0
- package/skills-bundle/_recipes/dashboard/gates/report_check.js +4 -0
- package/skills-bundle/_recipes/dashboard/knowledge/01.md +1 -0
- package/skills-bundle/_recipes/dashboard/knowledge/02.md +1 -0
- package/skills-bundle/_recipes/dashboard/knowledge/03.md +1 -0
- package/skills-bundle/_recipes/dashboard/knowledge/04.md +1 -0
- package/skills-bundle/_recipes/dashboard/knowledge/05.md +1 -0
- package/skills-bundle/_recipes/dashboard/knowledge/06.md +1 -0
- package/skills-bundle/_recipes/dashboard/template.json +41 -0
- package/skills-bundle/_recipes/etl/gates/etl_live_check.js +10 -0
- package/skills-bundle/_recipes/etl/gates/etl_report_check.js +3 -0
- package/skills-bundle/_recipes/etl/knowledge/01.md +1 -0
- package/skills-bundle/_recipes/etl/knowledge/02.md +9 -0
- package/skills-bundle/_recipes/etl/knowledge/03.md +1 -0
- package/skills-bundle/_recipes/etl/knowledge/04.md +1 -0
- package/skills-bundle/_recipes/etl/knowledge/05.md +1 -0
- package/skills-bundle/_recipes/etl/template.json +39 -0
- package/skills-bundle/_recipes/hints.json +46 -0
- package/skills-bundle/guancli/.commandface.json +155 -0
- package/skills-bundle/guancli/SKILL.md +342 -0
- package/skills-bundle/guancli/evals/evals.json +156 -0
- package/skills-bundle/guancli/evals/fixtures/metric-candidate-empty-search.json +13 -0
- package/skills-bundle/guancli/evals/fixtures/metric-candidate-prior-request.json +13 -0
- package/skills-bundle/guancli/evals/fixtures/metric-consumption-columns.json +46 -0
- package/skills-bundle/guancli/evals/fixtures/metric-consumption-metadata.json +36 -0
- package/skills-bundle/guancli/evals/fixtures/metric-consumption-query.json +18 -0
- package/skills-bundle/guancli/references/analysis-primitives.md +95 -0
- package/skills-bundle/guancli/references/auth-and-config.md +131 -0
- package/skills-bundle/guancli/references/examples/metric-date-in.json +7 -0
- package/skills-bundle/guancli/references/examples/metric-query-rows.py +83 -0
- package/skills-bundle/guancli/references/examples/metric-query.sh +6 -0
- package/skills-bundle/guancli/references/form-chatbi.md +199 -0
- package/skills-bundle/guancli/references/gateway.md +148 -0
- package/skills-bundle/guancli/references/metric-batch-query.md +82 -0
- package/skills-bundle/guancli/references/metric-commands.md +562 -0
- package/skills-bundle/guancli/references/metric-generic-query.md +215 -0
- package/skills-bundle/guancli/references/metric-json-migration.md +18 -0
- package/skills-bundle/guancli/references/metric-query-recipes.md +358 -0
- package/skills-bundle/guancli/references/preview-and-output.md +192 -0
- package/skills-bundle/guancli/references/resource-query.md +101 -0
- package/skills-bundle/guands/SKILL.md +281 -0
- package/skills-bundle/guands/references/calc-fields-boundaries-and-pitfalls.md +160 -0
- package/skills-bundle/guands/references/command-reference.md +267 -0
- package/skills-bundle/guands/references/incremental-and-schedule.md +157 -0
- package/skills-bundle/guands/references/workflows.md +256 -0
- package/skills-bundle/guanetl/SKILL.md +391 -0
- package/skills-bundle/guanetl/evals/evals.json +41 -0
- package/skills-bundle/guanetl/references/ETL_AI_DEVELOP.md +456 -0
- package/skills-bundle/guanmetric/SKILL.md +144 -0
- package/skills-bundle/guanmetric/evals/evals.json +117 -0
- package/skills-bundle/guanmetric/evals/fixtures/atomic-detail-read-model.json +18 -0
- package/skills-bundle/guanmetric/evals/fixtures/confirmed-template-summary.json +12 -0
- package/skills-bundle/guanmetric/evals/fixtures/create-result-unknown-state.json +13 -0
- package/skills-bundle/guanmetric/evals/forward-eval-2026-09-21.json +62 -0
- package/skills-bundle/guanmetric/references/metric-api-contract-examples.json +690 -0
- package/skills-bundle/guanmetric/references/metric-api-contract.schema.json +349 -0
- package/skills-bundle/guanmetric/references/metric-api-contracts.md +436 -0
- package/skills-bundle/guanmetric/references/metric-atomic-mutation.md +238 -0
- package/skills-bundle/guanmetric/references/metric-batch-status.md +71 -0
- package/skills-bundle/guanmetric/references/metric-business-dictionary-api-contract-examples.json +53 -0
- package/skills-bundle/guanmetric/references/metric-business-dictionary-api-contract.schema.json +26 -0
- package/skills-bundle/guanmetric/references/metric-business-dictionary.md +76 -0
- package/skills-bundle/guanmetric/references/metric-common-fields.md +246 -0
- package/skills-bundle/guanmetric/references/metric-composite-mutation.md +165 -0
- package/skills-bundle/guanmetric/references/metric-delete-mutation.md +70 -0
- package/skills-bundle/guanmetric/references/metric-derived-mutation.md +453 -0
- package/skills-bundle/guanmetric/references/metric-excel-template.md +365 -0
- package/skills-bundle/guanmetric/references/metric-expression-rules.md +146 -0
- package/skills-bundle/guanmetric/references/metric-flow-generate-example.json +79 -0
- package/skills-bundle/guanmetric/references/metric-flow-generate.schema.json +93 -0
- package/skills-bundle/guanmetric/references/metric-flow.md +218 -0
- package/skills-bundle/guanmetric/references/metric-hierarchy-api-contract-examples.json +171 -0
- package/skills-bundle/guanmetric/references/metric-hierarchy-api-contract.schema.json +167 -0
- package/skills-bundle/guanmetric/references/metric-hierarchy-api-contracts.md +193 -0
- package/skills-bundle/guanmetric/references/metric-mutation.md +155 -0
- package/skills-bundle/guanmetric/references/metric-public-dimension-api-contract-examples.json +62 -0
- package/skills-bundle/guanmetric/references/metric-public-dimension-api-contract.schema.json +47 -0
- package/skills-bundle/guanmetric/references/metric-public-dimension.md +155 -0
- package/skills-bundle/guanmetric/references/metric-tree-api-contract-examples.json +277 -0
- package/skills-bundle/guanmetric/references/metric-tree-api-contract.schema.json +263 -0
- package/skills-bundle/guanmetric/references/metric-tree-api-contracts.md +53 -0
- package/skills-bundle/guanmetric/references/metric-tree-mutation.md +500 -0
- package/skills-bundle/guanmetric/references/metric-validation-ownership.md +74 -0
- package/skills-bundle/guanvis/SKILL.md +333 -0
- package/skills-bundle/guanvis/evals/china_map/card_01_basic_map.js +13 -0
- package/skills-bundle/guanvis/evals/china_map/card_02_world_map.js +10 -0
- package/skills-bundle/guanvis/evals/china_map/card_03_point_map.js +12 -0
- package/skills-bundle/guanvis/evals/china_map/page.js +10 -0
- package/skills-bundle/guanvis/evals/china_map/schema.js +10 -0
- package/skills-bundle/guanvis/evals/comparative_mvp_roundtrip/README.md +30 -0
- package/skills-bundle/guanvis/evals/comparative_mvp_roundtrip/card_01_comparative_mvp.js +72 -0
- package/skills-bundle/guanvis/evals/comparative_mvp_roundtrip/page.js +6 -0
- package/skills-bundle/guanvis/evals/comparative_mvp_roundtrip/schema.js +22 -0
- package/skills-bundle/guanvis/evals/comparative_mvp_roundtrip/verify_default_roundtrip.sh +92 -0
- package/skills-bundle/guanvis/evals/complex_report_pro/card_01_monthly.js +63 -0
- package/skills-bundle/guanvis/evals/complex_report_pro/page.js +6 -0
- package/skills-bundle/guanvis/evals/complex_report_pro/schema.js +6 -0
- package/skills-bundle/guanvis/evals/custom_chart_echarts/card_01_bar.js +13 -0
- package/skills-bundle/guanvis/evals/custom_chart_echarts/card_02_pie.js +13 -0
- package/skills-bundle/guanvis/evals/custom_chart_echarts/charts/bar.js +11 -0
- package/skills-bundle/guanvis/evals/custom_chart_echarts/charts/pie.js +15 -0
- package/skills-bundle/guanvis/evals/custom_chart_echarts/page.js +5 -0
- package/skills-bundle/guanvis/evals/custom_chart_echarts/schema.js +9 -0
- package/skills-bundle/guanvis/evals/custom_chart_sdk/card_01_level_nodes.js +19 -0
- package/skills-bundle/guanvis/evals/custom_chart_sdk/charts/level_nodes.css +51 -0
- package/skills-bundle/guanvis/evals/custom_chart_sdk/charts/level_nodes.html +1 -0
- package/skills-bundle/guanvis/evals/custom_chart_sdk/charts/level_nodes.js +28 -0
- package/skills-bundle/guanvis/evals/custom_chart_sdk/page.js +5 -0
- package/skills-bundle/guanvis/evals/custom_chart_sdk/schema.js +7 -0
- package/skills-bundle/guanvis/evals/dynamic_fields/card_01_dynamic_dataset.js +20 -0
- package/skills-bundle/guanvis/evals/dynamic_fields/card_02_dynamic_metric_chart.js +16 -0
- package/skills-bundle/guanvis/evals/dynamic_fields/metrics.js +19 -0
- package/skills-bundle/guanvis/evals/dynamic_fields/page.js +9 -0
- package/skills-bundle/guanvis/evals/dynamic_fields/schema.js +7 -0
- package/skills-bundle/guanvis/evals/dynamic_fields/verify_default_roundtrip.sh +137 -0
- package/skills-bundle/guanvis/evals/percentage_advcalc_roundtrip/README.md +26 -0
- package/skills-bundle/guanvis/evals/percentage_advcalc_roundtrip/card_01_percentage_advcalc.js +44 -0
- package/skills-bundle/guanvis/evals/percentage_advcalc_roundtrip/card_02_scroll_percentage.js +12 -0
- package/skills-bundle/guanvis/evals/percentage_advcalc_roundtrip/page.js +6 -0
- package/skills-bundle/guanvis/evals/percentage_advcalc_roundtrip/schema.js +22 -0
- package/skills-bundle/guanvis/evals/rank_advcalc_roundtrip/README.md +28 -0
- package/skills-bundle/guanvis/evals/rank_advcalc_roundtrip/card_01_rank_advcalc.js +59 -0
- package/skills-bundle/guanvis/evals/rank_advcalc_roundtrip/page.js +6 -0
- package/skills-bundle/guanvis/evals/rank_advcalc_roundtrip/schema.js +22 -0
- package/skills-bundle/guanvis/evals/rank_advcalc_roundtrip/verify_default_roundtrip.sh +135 -0
- package/skills-bundle/guanvis/evals/running_total_advcalc_roundtrip/README.md +15 -0
- package/skills-bundle/guanvis/evals/running_total_advcalc_roundtrip/card_01_running_total_advcalc.js +74 -0
- package/skills-bundle/guanvis/evals/running_total_advcalc_roundtrip/page.js +6 -0
- package/skills-bundle/guanvis/evals/running_total_advcalc_roundtrip/schema.js +22 -0
- package/skills-bundle/guanvis/evals/sales_dashboard/card_01_revenue_column.js +10 -0
- package/skills-bundle/guanvis/evals/sales_dashboard/card_02_trend_line.js +9 -0
- package/skills-bundle/guanvis/evals/sales_dashboard/card_03_kpi.js +6 -0
- package/skills-bundle/guanvis/evals/sales_dashboard/card_04_pie.js +9 -0
- package/skills-bundle/guanvis/evals/sales_dashboard/card_05_calc_field_test.js +12 -0
- package/skills-bundle/guanvis/evals/sales_dashboard/page.js +11 -0
- package/skills-bundle/guanvis/evals/sales_dashboard/schema.js +14 -0
- package/skills-bundle/guanvis/evals/sales_dashboard/selector_01_region.js +10 -0
- package/skills-bundle/guanvis/evals/split_charts/card_01_column_split.js +10 -0
- package/skills-bundle/guanvis/evals/split_charts/card_02_line_split.js +10 -0
- package/skills-bundle/guanvis/evals/split_charts/card_03_combo_split.js +11 -0
- package/skills-bundle/guanvis/evals/split_charts/page.js +10 -0
- package/skills-bundle/guanvis/evals/split_charts/schema.js +14 -0
- package/skills-bundle/guanvis/evals/tab_layout/card_00_total_revenue.js +6 -0
- package/skills-bundle/guanvis/evals/tab_layout/card_01_revenue.js +10 -0
- package/skills-bundle/guanvis/evals/tab_layout/card_02_trend.js +9 -0
- package/skills-bundle/guanvis/evals/tab_layout/card_03_story.js +11 -0
- package/skills-bundle/guanvis/evals/tab_layout/page.js +23 -0
- package/skills-bundle/guanvis/evals/tab_layout/schema.js +11 -0
- package/skills-bundle/guanvis/evals/tab_layout/selector_01_region.js +8 -0
- package/skills-bundle/guanvis/references/api-reference.md +476 -0
- package/skills-bundle/guanvis/references/builder-reference.md +1676 -0
- package/skills-bundle/guanvis/references/chart-properties.md +2101 -0
- package/skills-bundle/guanvis/references/checkout-editing.md +53 -0
- package/skills-bundle/guanvis/references/complex-report-pro-patterns.md +398 -0
- package/skills-bundle/guanvis/references/dir-and-page-management.md +48 -0
- package/skills-bundle/guanvis/references/metric-chart-reference.md +258 -0
- package/skills-bundle/guanvis/references/publish-and-constraints.md +60 -0
- package/skills-bundle/guanvis/references/selector-reference.md +431 -0
- package/skills-bundle/guanvis/references/tableau-migration.md +73 -0
- package/skills-bundle/guanvis/references/theme.md +123 -0
- package/skills-bundle/guanvis/references/troubleshooting.md +25 -0
- package/skills-bundle/guanvis/references/validation-and-chart-patterns.md +205 -0
- package/skills-bundle/guanwf/SKILL.md +543 -0
- package/skills-bundle/guanwf/references/ETL_AI_DEVELOP.md +456 -0
- package/skills-bundle/guanwf/references/TASK_NODE_CONTRACTS.md +64 -0
- package/skills-bundle/guanwf/references/WORKFLOW_DSL.md +536 -0
- package/skills-bundle/guanwf/references/WORKFLOW_NODES.md +166 -0
- package/skills-bundle/js/SKILL.md +145 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# 请求转发创建与调用辅助
|
|
2
|
+
|
|
3
|
+
用于把第三方或客户内部接口文档转换为观远 BI 请求转发配置,并通过 `guancli gateway create` 创建。产品语义以[请求转发 / API Gateway](https://docs.guandata.com/product/bi/api-gateway)为准。
|
|
4
|
+
|
|
5
|
+
## 从接口文档生成配置
|
|
6
|
+
|
|
7
|
+
先提取并向用户展示配置草案,至少标明每项来自文档的哪一段:
|
|
8
|
+
|
|
9
|
+
- 目标方法、URL、超时时间。
|
|
10
|
+
- Header、Query、Body 入参及必填性。
|
|
11
|
+
- 鉴权方式;需要登录或换 token 时转成前置请求。
|
|
12
|
+
- 前置响应 JSONPath 与主请求 `${PRE_REQ.xxx}` 引用。
|
|
13
|
+
- 网关入口方法、路由识别符、登录要求、用户/用户组、调用方 Host 和日志脱敏 Header。
|
|
14
|
+
- 文档地址与调用说明 `usageMarkdown`。
|
|
15
|
+
|
|
16
|
+
不确定的权限范围、Host 白名单、Secret key 和启用状态必须列为待确认项。不要猜用户 ID、用户组 ID 或把凭据明文放入 JSON。用户确认后再生成配置文件。
|
|
17
|
+
|
|
18
|
+
## JSON 契约
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"basicInfo": {
|
|
23
|
+
"name": "CRM 查询用户",
|
|
24
|
+
"routes": "crm-query-user",
|
|
25
|
+
"gatewayMethod": "GET",
|
|
26
|
+
"targetMethod": "GET",
|
|
27
|
+
"documentUrl": "https://docs.example.com/crm/users",
|
|
28
|
+
"usageMarkdown": "Query: keyword;返回 CRM 用户列表。",
|
|
29
|
+
"enabled": true,
|
|
30
|
+
"loginRequired": true,
|
|
31
|
+
"allowedUsers": [{"id": "user-id"}],
|
|
32
|
+
"allowedUserGroups": [{"id": "group-id"}],
|
|
33
|
+
"targetUrl": "https://crm.example.com/api/users",
|
|
34
|
+
"allowedCallerHosts": ["app.example.com"],
|
|
35
|
+
"maskHeaders": ["Authorization", "Cookie", "X-Auth-Token"]
|
|
36
|
+
},
|
|
37
|
+
"config": {
|
|
38
|
+
"request": {
|
|
39
|
+
"timeoutSeconds": 120,
|
|
40
|
+
"headers": [
|
|
41
|
+
{
|
|
42
|
+
"paramName": "Authorization",
|
|
43
|
+
"paramValueOrExpr": "Bearer ${PRE_REQ.accessToken}",
|
|
44
|
+
"paramDescription": "前置登录返回的 token"
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"query": [
|
|
48
|
+
{
|
|
49
|
+
"paramName": "keyword",
|
|
50
|
+
"paramValueOrExpr": "${REQUEST.query.keyword}",
|
|
51
|
+
"paramDescription": "搜索关键词"
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
"preRequestList": [
|
|
56
|
+
{
|
|
57
|
+
"name": "获取 CRM Token",
|
|
58
|
+
"requestMethod": "POST",
|
|
59
|
+
"url": "https://crm.example.com/oauth/token",
|
|
60
|
+
"timeoutSeconds": 30,
|
|
61
|
+
"documentUrl": "https://docs.example.com/crm/auth",
|
|
62
|
+
"headers": [{"paramName": "Content-Type", "paramValueOrExpr": "application/json"}],
|
|
63
|
+
"query": [],
|
|
64
|
+
"body": "{\"clientId\":\"${SECRET.crm_client_id}\",\"clientSecret\":\"${SECRET.crm_client_secret}\"}",
|
|
65
|
+
"responseExtractors": [{"name": "accessToken", "jsonPath": "$.accessToken"}]
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
规则:
|
|
73
|
+
|
|
74
|
+
- `routes` 只能包含字母、数字和中划线;创建后不要修改识别符。
|
|
75
|
+
- `gatewayMethod` 只支持 `GET`、`POST`;`targetMethod` 支持 `GET`、`POST`、`PUT`、`DELETE`、`PATCH`。
|
|
76
|
+
- 主请求及前置请求超时为 1–300 秒。
|
|
77
|
+
- `allowedUsers`、`allowedUserGroups` 传资源 ID,不传名称代替 ID。登录开启但两者为空时,所有已登录用户可访问。
|
|
78
|
+
- Header 和 Query 只有显式配置的参数才转发;Body 由调用方整体透传并执行占位符替换。
|
|
79
|
+
- Header 和 Query 配置通过 `required: true|false` 保留原接口的必填性;省略时按可选处理。`gateway get` 只对必填入参生成缺失检查,可选 Query/Header 未传时不会被序列化为 `undefined`。
|
|
80
|
+
- CLI 会在输出 dry-run 计划前检查 Header、Query、前置请求 Body、目标/前置请求 URL 的 query 与 userinfo。`Authorization`、`token`、`password`、`AK/SK`、`API Key`、`client secret` 等敏感参数只能由 `${SECRET.xxx}` 或 `${PRE_REQ.xxx}` 服务端引用组成;明文及 `${REQUEST.xxx}` 会被拒绝,且不会回显配置。自定义 Header 固定值默认拒绝;只有确认为公开非凭据值时才在该参数上显式设置 `allowPlaintext: true`,例如 `X-API-Version: 2026-09`、`X-Client-Type: superapp`、`Prefer: return=representation`。敏感 Header 名或 Bearer/Basic/API-key/JWT 等凭据形式不允许用 `allowPlaintext` 绕过。`allowPlaintext` 只是 CLI 本地确认字段,dry-run 的 `request` 和真实 POST body 都会在提交投影中剔除它,两者保持一致。
|
|
81
|
+
- JSON Body 任意层级出现重复字段时会在 dry-run 和真实创建前直接拒绝,避免校验器只检查最后一个值、却把未规范化的原始 Body 提交给 BI。
|
|
82
|
+
- `enabled`、`loginRequired` 省略时服务端默认 `true`,配置草案中仍应显式写出,便于用户确认。
|
|
83
|
+
|
|
84
|
+
常用占位符:`${REQUEST.path.n}`、`${REQUEST.query.xxx}`、`${REQUEST.header.xxx}`、`${REQUEST.body.xxx}`、`${CURRENT_USER.xxx}`、`${PRE_REQ.xxx}`、`${SECRET.xxx}`、`${SYSTEM.xxx}`。
|
|
85
|
+
|
|
86
|
+
## 创建流程
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
guancli auth status
|
|
90
|
+
guancli gateway create ./gateway.json --dry-run
|
|
91
|
+
guancli gateway create ./gateway.json
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
先检查 dry-run 输出中的目标地址、权限、Secret key、参数映射和 `enabled`。真实创建是外部写操作;只有用户确认草案后才执行。dry-run 计划和创建结果均使用 `schemaVersion: "1.0"`;创建成功返回 `id`、`name`、`routeCode`、`gatewayPath` 和 `enabled`。
|
|
95
|
+
|
|
96
|
+
服务端仍会最终校验权限、商业授权、路由重名、用户/用户组、Secret 与配置合法性。创建端点为 `POST /api/gateway/manage/routes`,权限资源为 `GATEWAY_ROUTE.UPDATE`;自 2026-09-01 起还需要超级应用商业授权。
|
|
97
|
+
|
|
98
|
+
## 查找路由并读取调用契约
|
|
99
|
+
|
|
100
|
+
当用户只给出自然语言需求(例如“调用 CRM 查询客户信息接口”),不要要求用户预先提供识别符,也不要从创建文件或历史对话猜测:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
guancli gateway search CRM --enabled --limit 20
|
|
104
|
+
guancli gateway get 42
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
- `search [keyword]` 调用 `POST /api/gateway/manage/routes/query`,关键词由服务端匹配名称或识别符;支持 `--enabled=true|false`、`--offset`、`--limit`。输出为 `schemaVersion: "1.0"` 的脱敏摘要,包含路由 ID、名称、识别符、BI 网关路径、方法、启用状态、访问约束、文档地址和业务说明。
|
|
108
|
+
- 查询结果只代表当前分页。`total` 大于 `items` 数量时仍有后续页;无候选时缩短关键词或省略关键词继续查询。多个候选的名称、说明和方法不足以唯一判断时,列出候选并请用户确认。
|
|
109
|
+
- `get <id>` 调用 `GET /api/gateway/manage/routes/{id}`,默认把后端详情投影成 `schemaVersion: "1.0"` 的稳定调用契约:`gatewayUrlTemplate`、网关方法、追加路径占位符、Query/Header/Body 输入映射、是否必填、访问约束、原始文档/业务说明、CLI 与 SuperApp 示例。
|
|
110
|
+
- 默认输出不包含第三方目标 URL、前置请求 URL 或 `${SECRET.xxx}` 引用。`--raw` 只用于管理员诊断,会原样显示后端详情;不要把 raw 输出放进对话、日志或 SuperApp 代码。
|
|
111
|
+
|
|
112
|
+
管理查询需要 `GATEWAY_ROUTE.READ`。CLI 的本地契约测试只能验证请求构造和字段投影;最终权限、资源存在性和当前配置仍由 BI 服务端裁决。
|
|
113
|
+
|
|
114
|
+
## 生成 SuperApp 调用
|
|
115
|
+
|
|
116
|
+
必须先以 `gateway get` 的返回值为事实源。生成前逐项检查:
|
|
117
|
+
|
|
118
|
+
- `route.enabled` 必须为 `true`;否则提示管理员启用。
|
|
119
|
+
- 调用方法必须等于 `invocation.method`,不可用目标请求方法代替网关请求方法。
|
|
120
|
+
- 按 `appendPathPlaceholders` 顺序追加并 URL 编码路径;`${REQUEST.path.1}` 对应第一段。若配置引用 `${REQUEST.path.3}`,前两段也必须提供,即使第二段没有被目标模板直接引用。
|
|
121
|
+
- 为所有 `inputMappings[].required=true` 的 Query、Header、Body 输入组装值;缺少时在调用前报出具体参数名。
|
|
122
|
+
- POST 路由的 `bodyMode=passthrough` 表示调用方提供请求体时应原样透传;`bodyRequired=false` 只表示请求体可省略,不得据此从生成代码中删除 body 支持。字符串请求体直接发送,对象请求体再做 JSON 序列化。
|
|
123
|
+
- 响应保持上游语义:204/205 返回 `null`;JSON Content-Type(`application/json` 或 `+json`)调用 `json()`;文本、XML、JavaScript 和表单响应调用 `text()`;其余文件或二进制响应调用 `blob()`。不得无条件执行 `response.json()`。
|
|
124
|
+
- `loginRequired`、`allowedUsers`、`allowedUserGroups` 和 `allowedCallerHosts` 是访问约束。当前用户或来源不满足时提示申请权限或调整白名单。
|
|
125
|
+
- 代码只调用 `/api/gateway/routes/{routeCode}`,不得出现目标服务 URL、前置请求 URL 或敏感凭据。
|
|
126
|
+
|
|
127
|
+
示例:
|
|
128
|
+
|
|
129
|
+
```js
|
|
130
|
+
const response = await fetch(
|
|
131
|
+
`/api/gateway/routes/crm-query-user?keyword=${encodeURIComponent(keyword)}`,
|
|
132
|
+
{ method: "GET", credentials: "include" },
|
|
133
|
+
);
|
|
134
|
+
if (!response.ok) {
|
|
135
|
+
throw new Error(`请求转发调用失败:${response.status}`);
|
|
136
|
+
}
|
|
137
|
+
const data = await response.json();
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
追加路径按顺序映射为 `${REQUEST.path.1}`、`${REQUEST.path.2}`。CLI 调试调用示例:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
guancli gateway invoke crm-query-user --method GET --query keyword=张三 --verbose
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
出现未授权、路由停用、方法不匹配或参数缺失时,结合返回状态和错误体说明具体修复动作,不要改为绕过网关直连目标服务。
|
|
147
|
+
|
|
148
|
+
`gateway invoke` 无论成功或失败都会先输出目标响应体;`--verbose` 还会输出状态码和脱敏响应头。HTTP 4xx/5xx 等非 2xx 响应在完成输出后返回错误,进程退出码非零,脚本必须同时保留输出并检查退出码。
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# 同轮指标批量查询
|
|
2
|
+
|
|
3
|
+
`guancli metric batch-query --input queries.json`。完整原生 guancli 也可用 `--input -` 从 stdin 读取 JSON 数组;kit/lite 的 stdin 用于宿主协议,必须使用文件输入。
|
|
4
|
+
同一轮已经确定的独立查询一次提交,CLI 管理并发;读完结果才能确定的下一轮单独提交。
|
|
5
|
+
不要编写循环逐个 `metric query` 或自行安排 Shell 并发。
|
|
6
|
+
|
|
7
|
+
已确认输入契约时直接复用;缺少必要信息或遇到参数错误时再看 `guancli metric batch-query --help`;多条件筛选示例见 [metric-commands.md](metric-commands.md) 的“结构化条件树示例”。筛选组使用 `conditions` 数组,不使用资源 tree 的 `children`。只使用已确认的指标字段及取值;按错误指出的字段修正,不连续猜键名。
|
|
8
|
+
|
|
9
|
+
参数确定后将所有独立查询写入同一批次并直接执行;dry-run 仅用于检查计划或排查复杂参数,不作为每批取数的前置步骤。需要 dry-run 时,加 `--fail-on-error` 可让任一计划失败返回非零;全部通过后可用 `&&` 执行同一输入。默认模式仍需检查每项 `status=planned`。正式执行默认模式先检查各项状态;使用 `--fail-on-error` 且退出成功时可直接处理结果,无需重复逐项检查状态。只读查询允许与结果保存、检查和计算组合执行;无法生成结构化运行轨迹时接受降级,不为轨迹增加调用。
|
|
10
|
+
|
|
11
|
+
批量查询的“保存 + 成功后摘要”示例(queries.json 使用已确认参数):
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
guancli metric batch-query --input queries.json --fail-on-error -f json > results.json &&
|
|
15
|
+
python3 - <<'PYTHON'
|
|
16
|
+
import json
|
|
17
|
+
with open("results.json") as source:
|
|
18
|
+
items = json.load(source)["results"]
|
|
19
|
+
print(json.dumps([{"id": item["id"], "columns": item["result"]["columns"],
|
|
20
|
+
"rowCount": item["result"]["rowCount"],
|
|
21
|
+
"sampleRows": item["result"]["rows"][:5]} for item in items], ensure_ascii=False))
|
|
22
|
+
PYTHON
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
摘要只展示样例;需要全量计算时在同一本地步骤中使用 results.json 的完整结果,并核对 limit 与完整性。
|
|
26
|
+
仅需直接阅读且输出已足够精简时直接消费 CLI 输出。已有结果的状态检查、完整性检查和计算也在一次本地执行中完成;字段缺失、多义或结果不完整时返回证据,不猜字段、不删筛选。不要为缩短往返扩大数据范围或省略业务校验。
|
|
27
|
+
|
|
28
|
+
每项必填唯一非空 `id` 和真实 `metricId`。时间范围通过 `filters` 表达,省略表示不额外筛选;支持现有结构化条件树和操作符,不支持需要拆分聚合的多分支 OR。基础查询与 `metric query` 一样,使用指标关联的趋势图卡片,缺失时回退指标值卡片;每项创建独立编辑会话。日期粒度筛选、日期子粒度分组和排序沿用 `metric query` 的能力。错误或不支持的条件显式失败,禁止删除条件后重试以伪装成功。
|
|
29
|
+
|
|
30
|
+
- `dimensions`:非空维度名称数组;省略时沿用关联卡片的默认分组,显式提供时覆盖该项独立编辑会话的分组。空数组会被拒绝;支持 `日期 toMonth` 等现有粒度语法。
|
|
31
|
+
- `sortAsc` / `sortDesc`:互斥;解析和执行语义与 `metric query` 一致。日期子粒度排序使用同一限定表达式,例如 `日期 toMonth`。
|
|
32
|
+
- `limit`:默认 50,必须为正数。`offset` 默认 0,非负;`offset + limit` 最多 10000。非零 offset 必须显式排序。后端无 offset,CLI 请求至 offset+limit 后截取,不代表全量遍历;排序相同值和跨请求数据变化可能使跨页不稳定,严格分页需选择能唯一定位顺序的分组。
|
|
33
|
+
- `valueFormat`:支持 `raw`(默认)、`formatted` 和 `both`。`raw` 保留 JSON 数字、null 和维度值;`formatted` 沿用 `metric query --value-format formatted` 的指标格式规则,把指标列输出为带精度、千分位、百分号或单位的字符串,维度列保持原值。排序和分页始终基于格式化前的原始值。需要计算并展示同一结果时使用 `both`,一次取数返回原始 `rows` 和位置完全对应的 `formattedRows`,不要为两种格式提交重复查询。
|
|
34
|
+
- `--dry-run`:读取指标详情后生成每项取数请求计划,不执行指标取数,不代表权限、执行或数据完整性已经通过。
|
|
35
|
+
|
|
36
|
+
完整 guancli 固定并发 10,不限制查询项数量,输入文件至多 1 MiB;超过 10 项的部分排队。batch 不设置整批超时,每个底层接口沿用 `metric query` 的 HTTP 单请求超时。结果逐项写入临时 spool,最终按输入顺序流式输出,内存占用随并发度而不是查询项总数增长;命令取消会传到底层 HTTP 并等待在途 worker 收口。无缓存、无跨批结果复用。每项使用后端生成的独立 UUID 编辑会话,不保存关联卡片;编辑会话生命周期沿用现有 `metric query` 和 BI 后端策略。kit/lite 入口还受宿主实际请求预算约束,超过预算时由 dispatcher 按真实请求数停止。
|
|
37
|
+
|
|
38
|
+
## 稳定 JSON 协议 v1
|
|
39
|
+
|
|
40
|
+
顶层 `schemaVersion: "1.0"`、`command: "metric.batch-query"`、`status`、`results`。全部完成成功为 `success`,存在失败为 `partial_failure`。默认有效批次输出完整汇总后退出 0,包括含失败项的批次。使用 `--fail-on-error` 时,任一项为 error 都在输出完整 JSON 后以非零退出,成功项仍保留;适用于正式查询和 dry-run,全部 success 或全部 planned 时退出 0。输入/认证初始化等批次级错误退出非零。
|
|
41
|
+
|
|
42
|
+
每项保留输入 `id`、`metricId`,按输入顺序返回。`status` 为 `success` / `error` / `planned`;成功时 `result` 包含 `resultMode: "inline"`、实际采用的 `valueFormat`、`columns: [{name,role}]`、`rows` 二维数组、`rowCount`、`offset`、`limit`。raw 模式的指标值保持 JSON 数字;formatted 模式的指标值为展示字符串。both 模式的 `rows` 与 raw 相同,并额外提供 `formattedRows`(包括空结果时的 `[]`),与 rows 共用列、排序和分页;计算读取 rows,展示读取 formattedRows。其它模式不输出 formattedRows。列名直接来自 BI,角色为 dimension/metric,位置与行值一一对应;不存在以本地化展示字段反推新协议的转换。错误为 `error: {code,message,httpStatus?,businessStatus?}`,已有 HTTP/业务状态直接透传,检查每项错误再分析其余成功结果;后端必需字段缺失、类型或行宽变化报 `METRIC_RESPONSE_INVALID`。
|
|
43
|
+
|
|
44
|
+
原生执行 `timingScope: "native"`,顶层提供 `durationMs`、`concurrencyLimit`、`requestCount`(逻辑 BI 调用数,包含详情、会话和取数,认证重试不计);每项基础查询通常 3 次调用,显式维度或排序时通常 5 次。每项提供 UTC `startedAt`、`finishedAt`、`durationMs`,可据此检查重叠。
|
|
45
|
+
|
|
46
|
+
lite/kit 执行会在 replay 轮汇集独立请求;只读请求可标为 parallel,编辑会话 modify 按现有 mutating 契约串行。实际执行并发/时间由宿主负责,`timingScope: "host"` 时不返回原生计时、请求数和并发字段,不能把 kit 重放耗时当成 BI 耗时。现有原生 lite 宿主最多 8 路,WASI 宿主为单路,WASI 不提供本次并发性能保证;完整 guancli 是本次性能验收入口。宿主的总时限沿用其现有策略。
|
|
47
|
+
|
|
48
|
+
## 服务端与权限边界
|
|
49
|
+
|
|
50
|
+
复用 `metric query` 的接口链:`GET /api/metric-platform/metrics/{metricId}`、`GET /api/card/{cardId}/edit/session`、`POST /api/card/{cardId}/edit/{sessionId}/data`;显式维度或排序时还会调用 `GET /api/card/{cardId}/edit` 和 `POST /api/oriput/card/{cardId}/edit/{sessionId}/modify`。代理还原后的 Spring 路由均已确认存在。指标详情要求 `METRIC_PLATFORM/read`(PAT pId 90/read);卡片会话、modify 和取数要求 `BASE/read`,读取编辑配置还要求 `PAGE/update`(PAT 仪表板 pId 1/update)。所以仅查询卡片保存配置时 pId 90/read 可用,显式 dimensions 或 sorting 时 PAT 还要包含仪表板 update;权限不足会逐项返回 403,不能扩大用户资源权限。
|
|
51
|
+
|
|
52
|
+
每项读取指标关联卡片并在独立编辑会话中取数,不拼接多个聚合结果。未显式提供 dimensions 时保留卡片默认分组;提供 dimensions 或 sorting 时只覆盖该项会话中的对应配置,filters 作为本次取数条件传入。指标详情、卡片配置与取数之间不保证快照;改名、发布或权限变化由服务端最终裁决。当前 batch 输入不包含同比、XTD、recent、占比和排名等高级计算;这些仍由单条 `metric query` 的 v2 分支处理,后续若加入 batch 必须沿用相同分流。
|
|
53
|
+
|
|
54
|
+
## 指标数值等价对比
|
|
55
|
+
|
|
56
|
+
仅当用户明确要求比较新旧指标、迁移前后指标或两组候选指标的数值时使用本节;普通 `guanmetric flow verify` 的“可用”验收只需证明指标能成功查询,不默认承担数值等价证明。
|
|
57
|
+
|
|
58
|
+
对每一对指标构造参数完全对称的查询:
|
|
59
|
+
|
|
60
|
+
- 使用相同的显式 `dimensions`;日期维度必须使用双方都支持的相同粒度,如 `日期 toMonth`。
|
|
61
|
+
- 对所有分组维度设置确定性排序;单个日期维度通常使用同一表达式作为 `sortAsc`。没有稳定排序时禁止按数组位置比较。
|
|
62
|
+
- 使用相同的 `filters` 固定业务范围和时间范围。涉及“今天”、动态窗口或卡片默认筛选时,优先改成双方相同的固定区间,避免执行时点和默认卡片配置影响结果。
|
|
63
|
+
- 使用 `valueFormat: "raw"`,避免格式、精度、千分位或单位换算制造展示差异。
|
|
64
|
+
- 显式设置足够的 `limit`,但不要把“传了 10000”理解为结果一定完整;后端或关联卡片仍可能存在更小的返回上限。
|
|
65
|
+
|
|
66
|
+
消费结果时:
|
|
67
|
+
|
|
68
|
+
1. 逐项检查 `status=success`,任一侧失败则该对为 `query_error`,不能继续比较。
|
|
69
|
+
2. 从 `columns` 找出维度列和指标列,不能按固定列名或固定位置猜测业务列。
|
|
70
|
+
3. 用全部维度值组成复合键,把双方行转换为 `dimensionKey -> raw metric value` 后比较;指标展示名称不同不影响比较。维度键重复、缺失或多指标列无法唯一选择时停止并报告实际列。
|
|
71
|
+
4. 双方键集合相同后再比较相同键的原始值。未获得用户认可时不要擅自增加浮点容差;确需容差时在结论中写明绝对/相对阈值。
|
|
72
|
+
5. 若行数达到已知/疑似服务端或卡片上限、双方行数不同且较短一侧是较长一侧的精确前缀,或无法证明查询覆盖完整范围,状态必须为 `inconclusive_truncated`,不能判为 `different`。按日期等稳定维度拆成不重叠固定区间,确保每个分片低于返回上限后再合并比较。
|
|
73
|
+
|
|
74
|
+
禁止使用以下证据直接下“数值不一致”结论:
|
|
75
|
+
|
|
76
|
+
- 未排序的默认前 50 行顺序不同;
|
|
77
|
+
- 仅第一行、前 N 行或数组位置不同;
|
|
78
|
+
- 一侧结果是另一侧的精确前缀;
|
|
79
|
+
- 指标列标题、关联卡片配置或默认展示维度不同;
|
|
80
|
+
- 只观察到指标引用了某个旧 ID,而没有对相同维度键的实际值做比较。
|
|
81
|
+
|
|
82
|
+
最终结果至少区分 `same`、`different`、`query_error`、`inconclusive_truncated`。汇报 `different` 时给出第一个真正相同维度键下的值差异;汇报 `inconclusive_truncated` 时给出双方行数、限制参数和建议的分片方式。
|