@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
File without changes
@@ -0,0 +1,16 @@
1
+ var DSID = "{{.DsID}}";
2
+ var d = JSON.parse(readFile(argv[0]));
3
+ var r = run("guancli", ["page", "get", d.pgId, "--brief"]);
4
+ if (r.code !== 0) throw new Error("page get 失败: " + r.stderr.slice(0, 300));
5
+ var out = r.stdout;
6
+ var cards = out.match(/# Card \d+:/g) || [];
7
+ if (cards.length < {{.MinCards}}) throw new Error("页面卡片数 " + cards.length + " < {{.MinCards}}");
8
+ var types = {}; var m; var re = /\*\*Type:\*\* ([A-Z_]+)/g;
9
+ while ((m = re.exec(out)) !== null) { types[m[1]] = true; }
10
+ var tc = Object.keys(types).length;
11
+ if (tc < {{.MinTypes}}) throw new Error("图表类型只有 " + Object.keys(types).join(",") + " 共 " + tc + " 种 (<{{.MinTypes}})");
12
+ var idm = out.match(/\*\*ID:\*\* ([0-9a-z]+)/);
13
+ if (!idm) throw new Error("未解析到卡片 ID");
14
+ var c = run("guancli", ["card", "get", idm[1], "--brief"]);
15
+ if (c.code !== 0 || c.stdout.indexOf(DSID) < 0) throw new Error("首卡未绑定数据集 " + DSID);
16
+ console.log("PAGE-OK cards=" + cards.length + " types=" + tc);
@@ -0,0 +1,4 @@
1
+ var d = JSON.parse(readFile(argv[0]));
2
+ if (!d.pgId || !/^[a-z][0-9a-z]{18,30}$/.test(d.pgId)) throw new Error("pgId 缺失或格式错: " + d.pgId);
3
+ if (!(d.cards >= {{.MinCards}})) throw new Error("cards 需 >={{.MinCards}}, 实际: " + d.cards);
4
+ console.log("REPORT-OK " + d.pgId + " cards=" + d.cards);
@@ -0,0 +1 @@
1
+ guanvis 工作流:guanvis init {{.DsID}} -d /dash 生成 schema.js → write_file 写 /dash/card_01_*.js…、/dash/selector_01_*.js(可选)、/dash/page.js → guanvis genid 8 生成 setId 用的 ID(每个 card/selector/page 都要 .setId(独立ID))→ guanvis preview /dash 校验 → guanvis publish /dash 发布
@@ -0,0 +1 @@
1
+ 强烈建议先 cat /skills/guanvis/evals/sales_dashboard/ 下的示例(card_*.js/selector_01_region.js/page.js 都很短),照它的模式写:字段引用 f("字段名"),聚合 f("字段",{aggrType:AggrType.SUM}),注册 registerCard(card.build());selector 用 createSelector("名").setId(id).bindField(f("维度")).setMultiSelect(true).linkToAll();page 布局 placeCard(cardIndex,x,y,w,h)(12 列栅格,selector 不占 card index)
@@ -0,0 +1 @@
1
+ guanvis 的 JS DSL 不是 Node/ESM:禁止 import/export/require/new Card()/card.build('x') 这类写法(会直接 SyntaxError);只用 var + 工厂函数链式调用,如 var card = createCard(ChartType.KPI_CARD, "标题")...(第一个参数是 ChartType,第二个是标题);每张卡一个文件 card_01_*.js…,不要合并成 cards.js;所有 .setId() 的值必须用 guanvis genid 生成的 24 位 ID
@@ -0,0 +1 @@
1
+ 卡片 zone API 只有三个:.addRow(f("维度")) 放维度/X轴、.addMetric(f("度量",{aggrType:AggrType.SUM})) 放度量、.addColumn(f("维度")) 只用于分组着色;折线/柱状/饼图的维度一律 addRow,DATA_GRID 明细也是 addRow(维度)+addMetric(度量);每张卡都必须 .bindDataset(DS)。没有 addDimension/addXAxis 这类方法
@@ -0,0 +1 @@
1
+ 不要逐个 cat 检查已有文件(任务卡已给出工作区文件列表与内容);按『guanvis init(如缺 schema.js)→写全部 JS 文件→guanvis preview /dash→按报错修正→guanvis publish /dash→写 /report/dashboard.json』直接推进
@@ -0,0 +1 @@
1
+ preview/publish 报错时按报错提示修改对应 JS 文件重试;publish 成功后 pgId 就是 page.js 里 .setId() 的值,卡片数就是 registerCard 的数量
@@ -0,0 +1,41 @@
1
+ {
2
+ "_comment": "dashboard 配方。逻辑仍在 internal/helm/planner.go:这里只有文本与阈值。占位符是 text/template 具名字段:DsName/DsID/DsIDShort/Title/EtlRootDir/MinCards/MinTypes。",
3
+ "id": "PLAN-{{.DsIDShort}}",
4
+ "default_title": "{{.DsName}} 分析看板",
5
+ "min_cards": 4,
6
+ "min_types": 3,
7
+ "goal": "用 guanvis 在 BI 上创建并发布一个基于数据集 {{.DsName}}(dsId: {{.DsID}})的仪表板(页面标题含『{{.Title}}』),发布成功后把结果写入 /report/dashboard.json,内容为 {\"pgId\":\"<page.js 里 setId 的页面ID>\",\"cards\":<卡片数量>}。数据与结构必须真实创建,禁止杜撰。",
8
+ "ideas_prefix": "\n建议的卡片构成:",
9
+ "acceptance": [
10
+ "页面已发布到 BI:至少 {{.MinCards}} 张卡片、至少 {{.MinTypes}} 种不同图表类型",
11
+ "卡片绑定数据集 {{.DsID}}",
12
+ "/report/dashboard.json 记录真实 pgId 与卡片数"
13
+ ],
14
+ "constraints": [
15
+ "工程目录用 /dash;页面标题必须含『{{.Title}}』",
16
+ "不要修改或删除 BI 上任何已有资源;只新建本任务的页面",
17
+ "不要使用 guanvis screenshot(本任务用数据回读验收)"
18
+ ],
19
+ "budgets": {
20
+ "max_iterations": 5,
21
+ "max_turns": 24,
22
+ "max_tool_calls": 32,
23
+ "max_no_progress": 3
24
+ },
25
+ "gates": [
26
+ {
27
+ "name": "report-json",
28
+ "script": "report_check.js",
29
+ "args": "/report/dashboard.json",
30
+ "expect_regex": "REPORT-OK"
31
+ },
32
+ {
33
+ "name": "page-live",
34
+ "script": "page_check.js",
35
+ "args": "/report/dashboard.json",
36
+ "expect_regex": "PAGE-OK",
37
+ "timeout_ms": 90000,
38
+ "depends_on": "report-json"
39
+ }
40
+ ]
41
+ }
@@ -0,0 +1,10 @@
1
+ var DSID = "{{.DsID}}";
2
+ var d = JSON.parse(readFile(argv[0]));
3
+ var r = run("guancli", ["etl", "get", d.etlId, "--brief"]);
4
+ if (r.code !== 0) throw new Error("etl get 失败: " + r.stderr.slice(0, 300));
5
+ var out = r.stdout;
6
+ if (out.indexOf(DSID) < 0) throw new Error("ETL 未引用输入数据集 " + DSID);
7
+ if (out.indexOf("OUTPUT_DATASET") < 0) throw new Error("ETL 无输出节点");
8
+ var m = out.match(/总节点数:\*\* (\d+)/);
9
+ if (!m || parseInt(m[1]) < 3) throw new Error("节点数不足 3(需 输入+加工+输出),实际: " + (m ? m[1] : "未解析到"));
10
+ console.log("ETL-OK nodes=" + m[1]);
@@ -0,0 +1,3 @@
1
+ var d = JSON.parse(readFile(argv[0]));
2
+ if (!d.etlId || !/^[a-z][0-9a-z]{18,30}$/.test(d.etlId)) throw new Error("etlId 缺失或格式错: " + d.etlId);
3
+ console.log("REPORT-OK " + d.etlId);
@@ -0,0 +1 @@
1
+ guanetl 工作流:guanetl create --name "<ETL名>" --dir /etlwork --parent-dir {{.EtlRootDir}}(--parent-dir 必须带上,否则 save 报『ETL路径无效』;命令输出的 dataFlowId 就是 etlId,立刻记下)→ 编写 /etlwork/etl/etl.go → guanetl export --dir /etlwork → guanetl preview <输出节点id> --dir /etlwork --require-nonempty → guanetl save --dir /etlwork → 把 {"etlId":"<dataFlowId>"} 写入 /report/etl.json。忘了 etlId 可 cat /etlwork/_guanetl_state.json 找 dataFlowId
@@ -0,0 +1,9 @@
1
+ etl.go 完整骨架(照此模式写,包导入与 DefineETL 签名不得改动):
2
+ package main
3
+ import . "guanetl/internal/framework"
4
+ func DefineETL() []Node {
5
+ in := BasicInputDataset("id_1001", "输入", "{{.DsID}}", []Field{BasicField("Region", "STRING"), BasicField("GDP", "DOUBLE")}, Position{X: 100, Y: 100})
6
+ agg := BasicGroupBy("id_1002", "按区域聚合", in, []GroupByColumn{BasicGroupByColumn("Region", "STRING")}, []AggregationColumn{BasicAggregationColumnWithAlias("GDP", "DOUBLE", "SUM", "GDP合计")}, Position{X: 340, Y: 100})
7
+ out := BasicOutputDataset("id_1003", "输出", agg, "<输出数据集名>", Position{X: 580, Y: 100})
8
+ return []Node{out}
9
+ }
@@ -0,0 +1 @@
1
+ 硬约束:节点 ID 必须 id_数字 且唯一;BasicInputDataset 的 []Field 只声明本 ETL 用到的字段、类型必须与字段清单一致(STRING 不得声明成数值);聚合类型仅 SUM/COUNT/COUNT_DISTINCT/AVG/MIN/MAX;行筛选用 BasicFilterRows、等值 JOIN 用 BasicJoinData,不要写 SQL;export 不通过就不要 preview/save
@@ -0,0 +1 @@
1
+ 顺序固定 export→preview→save,按报错修 /etlwork/etl/ 下文件后从失败步骤重跑;preview 用输出节点 id(如 guanetl preview id_1003 --dir /etlwork --require-nonempty);首次 save 出现 [save.first_save_fallback] 提示是正常路径不是错误
@@ -0,0 +1 @@
1
+ 完整 API 参考在 /skills/guanetl/references/ETL_AI_DEVELOP.md(较大,仅在骨架之外的节点用法拿不准时 cat 对应小节)
@@ -0,0 +1,39 @@
1
+ {
2
+ "_comment": "etl 配方。逻辑仍在 internal/helm/planner.go:这里只有文本与阈值。",
3
+ "id": "PLAN-ETL-{{.DsIDShort}}",
4
+ "default_title": "{{.DsName}} 加工",
5
+ "goal": "用 guanetl 基于数据集 {{.DsName}}(dsId: {{.DsID}})新建一个 ETL(名称含『{{.Title}}』):从该输入数据集经至少一个加工节点(聚合/筛选/计算列等)产出一个输出数据集定义,完成 export → preview → save 闭环;保存成功后把 {\"etlId\":\"<dataFlowId>\"} 写入 /report/etl.json。禁止杜撰;本任务只建结构并保存,不要 run、不要配置调度。",
6
+ "ideas_prefix": "\n建议的加工思路:",
7
+ "acceptance": [
8
+ "ETL 已保存到 BI(guancli etl get 可查),引用输入数据集 {{.DsID}}",
9
+ "至少 3 个节点:输入 + ≥1 个加工节点 + 输出",
10
+ "/report/etl.json 记录真实 etlId"
11
+ ],
12
+ "constraints": [
13
+ "工作目录用 /etlwork;只编辑 /etlwork/etl/ 下文件,不要手改 _exported.json/_base_etl.json 等系统文件",
14
+ "不要修改或删除 BI 上任何已有资源;不要 run、不要 schedule(本任务只建结构)",
15
+ "ETL 名称必须含『{{.Title}}』"
16
+ ],
17
+ "budgets": {
18
+ "max_iterations": 5,
19
+ "max_turns": 24,
20
+ "max_tool_calls": 32,
21
+ "max_no_progress": 3
22
+ },
23
+ "gates": [
24
+ {
25
+ "name": "report-json",
26
+ "script": "etl_report_check.js",
27
+ "args": "/report/etl.json",
28
+ "expect_regex": "REPORT-OK"
29
+ },
30
+ {
31
+ "name": "etl-live",
32
+ "script": "etl_live_check.js",
33
+ "args": "/report/etl.json",
34
+ "expect_regex": "ETL-OK",
35
+ "timeout_ms": 90000,
36
+ "depends_on": "report-json"
37
+ }
38
+ ]
39
+ }
@@ -0,0 +1,46 @@
1
+ [
2
+ {
3
+ "needle": "not a builder .build() result",
4
+ "hint": "registerCard/registerSelector/registerPage 必须传 .build() 的结果(如 registerCard(card.build()));这个报错来自加载的每个 JS 文件,不一定在你最近改的文件——逐个检查所有 card_*.js/selector_*.js 的 register 行"
5
+ },
6
+ {
7
+ "needle": "require is not defined",
8
+ "hint": "本引擎无 require/import:删除模块语法,直接顶层 var + 工厂函数(createCard/createSelector/createPage)"
9
+ },
10
+ {
11
+ "needle": "Unexpected reserved word",
12
+ "hint": "不支持 import/export 等 ESM 语法:改为 var 声明 + 工厂函数链式调用"
13
+ },
14
+ {
15
+ "needle": "has no member",
16
+ "hint": "方法名不存在:卡片 zone 只有 addRow/addColumn/addMetric/addSort;页面布局用 placeCard/addRow/addFullWidthCard/addHalfWidthCards,selector 不用 place"
17
+ },
18
+ {
19
+ "needle": "references card index",
20
+ "hint": "placeCard 的数字索引按 registerCard 注册顺序从 0 起算,registerSelector 不占索引;越界说明把 selector 也数进去了"
21
+ },
22
+ {
23
+ "needle": "invalid x position",
24
+ "hint": "页面是 12 列栅格:每个 placeCard 的 x+w 不得超过 12"
25
+ },
26
+ {
27
+ "needle": "overflows grid",
28
+ "hint": "页面是 12 列栅格:每个 placeCard 的 x+w 不得超过 12"
29
+ },
30
+ {
31
+ "needle": "No such file or directory",
32
+ "hint": "路径不存在:检查绝对路径拼写;工作区文件清单见上方「工作区现状」"
33
+ },
34
+ {
35
+ "needle": "参数缺失",
36
+ "hint": "工具调用必须带全必填参数(edit_block 需要 path/old_string/new_string),不要重复发送残缺调用"
37
+ },
38
+ {
39
+ "needle": "ETL路径无效",
40
+ "hint": "guanetl create 必须带 --parent-dir <ETL目录id>(guancli etl tree --max-depth 1 查根目录 id),重新 create 后重走 export→preview→save"
41
+ },
42
+ {
43
+ "needle": "missing properties",
44
+ "hint": "工具调用必须带全必填参数(edit_block 需要 path/old_string/new_string),不要重复发送残缺调用"
45
+ }
46
+ ]
@@ -0,0 +1,155 @@
1
+ {
2
+ "identity": "guancli",
3
+ "commands": [
4
+ {
5
+ "path": "auth",
6
+ "short": "认证自检(只读)"
7
+ },
8
+ {
9
+ "path": "auth status",
10
+ "short": "查看认证配置与服务端探测结果"
11
+ },
12
+ {
13
+ "path": "auth whoami",
14
+ "short": "查看当前 BI 登录用户信息"
15
+ },
16
+ {
17
+ "path": "card",
18
+ "short": "卡片操作",
19
+ "kitProxy": true
20
+ },
21
+ {
22
+ "path": "commandface",
23
+ "short": "输出实际生效的命令面(机器可读 JSON,供构建链路生成文档)",
24
+ "hidden": true
25
+ },
26
+ {
27
+ "path": "ds",
28
+ "short": "数据集相关操作"
29
+ },
30
+ {
31
+ "path": "ds execute-sql",
32
+ "short": "执行 SQL 查询数据集"
33
+ },
34
+ {
35
+ "path": "ds get",
36
+ "short": "获取数据集详情"
37
+ },
38
+ {
39
+ "path": "ds preview",
40
+ "short": "预览数据集数据"
41
+ },
42
+ {
43
+ "path": "ds search",
44
+ "short": "搜索数据集"
45
+ },
46
+ {
47
+ "path": "ds tree",
48
+ "short": "获取数据集目录树"
49
+ },
50
+ {
51
+ "path": "etl",
52
+ "short": "ETL 相关操作"
53
+ },
54
+ {
55
+ "path": "etl get",
56
+ "short": "获取ETL详情"
57
+ },
58
+ {
59
+ "path": "etl preview",
60
+ "short": "预览 ETL 节点数据"
61
+ },
62
+ {
63
+ "path": "etl search",
64
+ "short": "搜索ETL"
65
+ },
66
+ {
67
+ "path": "etl tree",
68
+ "short": "获取ETL目录树"
69
+ },
70
+ {
71
+ "path": "fetch",
72
+ "short": "通用 BI API 调用",
73
+ "hidden": true
74
+ },
75
+ {
76
+ "path": "form",
77
+ "short": "表单填报操作 (CRUD)"
78
+ },
79
+ {
80
+ "path": "form add",
81
+ "short": "插入数据"
82
+ },
83
+ {
84
+ "path": "form delete",
85
+ "short": "删除数据"
86
+ },
87
+ {
88
+ "path": "form list",
89
+ "short": "列出/搜索表单 (--tree 显示目录结构)"
90
+ },
91
+ {
92
+ "path": "form query",
93
+ "short": "查询表单数据"
94
+ },
95
+ {
96
+ "path": "form schema",
97
+ "short": "查看表单字段结构"
98
+ },
99
+ {
100
+ "path": "form update",
101
+ "short": "更新数据"
102
+ },
103
+ {
104
+ "path": "gateway",
105
+ "short": "请求转发路由创建与调用",
106
+ "kitProxy": true
107
+ },
108
+ {
109
+ "path": "metric",
110
+ "short": "指标相关操作",
111
+ "kitProxy": true
112
+ },
113
+ {
114
+ "path": "metric_attribution",
115
+ "short": "指标树归因相关操作",
116
+ "kitProxy": true
117
+ },
118
+ {
119
+ "path": "page",
120
+ "short": "页面相关操作"
121
+ },
122
+ {
123
+ "path": "page get",
124
+ "short": "获取页面详情"
125
+ },
126
+ {
127
+ "path": "page search",
128
+ "short": "搜索页面"
129
+ },
130
+ {
131
+ "path": "page tree",
132
+ "short": "获取页面目录树"
133
+ },
134
+ {
135
+ "path": "server-version",
136
+ "short": "查看当前 BI 版本",
137
+ "kitProxy": true
138
+ },
139
+ {
140
+ "path": "task",
141
+ "short": "任务排查相关操作",
142
+ "kitProxy": true
143
+ },
144
+ {
145
+ "path": "version",
146
+ "short": "打印版本信息"
147
+ },
148
+ {
149
+ "path": "workflow",
150
+ "short": "工作流/数据流相关操作(高级应用)",
151
+ "hidden": true,
152
+ "kitProxy": true
153
+ }
154
+ ]
155
+ }