@loom-framework/core 0.1.0-alpha.9 → 0.1.0-alpha.90
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/builtin-skills/antd/SKILL.md +266 -0
- package/builtin-skills/antv-g2-chart/SKILL.md +1067 -0
- package/builtin-skills/antv-g2-chart/references/animations/g2-animation-intro.md +176 -0
- package/builtin-skills/antv-g2-chart/references/animations/g2-animation-keyframe.md +149 -0
- package/builtin-skills/antv-g2-chart/references/animations/g2-animation-types.md +253 -0
- package/builtin-skills/antv-g2-chart/references/components/g2-comp-annotation.md +237 -0
- package/builtin-skills/antv-g2-chart/references/components/g2-comp-axis-config.md +648 -0
- package/builtin-skills/antv-g2-chart/references/components/g2-comp-axis-radar.md +219 -0
- package/builtin-skills/antv-g2-chart/references/components/g2-comp-label-config.md +174 -0
- package/builtin-skills/antv-g2-chart/references/components/g2-comp-legend-category.md +278 -0
- package/builtin-skills/antv-g2-chart/references/components/g2-comp-legend-config.md +363 -0
- package/builtin-skills/antv-g2-chart/references/components/g2-comp-legend-continuous.md +264 -0
- package/builtin-skills/antv-g2-chart/references/components/g2-comp-scrollbar.md +276 -0
- package/builtin-skills/antv-g2-chart/references/components/g2-comp-slider.md +333 -0
- package/builtin-skills/antv-g2-chart/references/components/g2-comp-title.md +149 -0
- package/builtin-skills/antv-g2-chart/references/components/g2-comp-tooltip-config.md +358 -0
- package/builtin-skills/antv-g2-chart/references/compositions/g2-comp-facet-circle.md +97 -0
- package/builtin-skills/antv-g2-chart/references/compositions/g2-comp-facet-rect.md +241 -0
- package/builtin-skills/antv-g2-chart/references/compositions/g2-comp-geo-map.md +210 -0
- package/builtin-skills/antv-g2-chart/references/compositions/g2-comp-geoview.md +143 -0
- package/builtin-skills/antv-g2-chart/references/compositions/g2-comp-repeat-matrix.md +171 -0
- package/builtin-skills/antv-g2-chart/references/compositions/g2-comp-space-flex.md +142 -0
- package/builtin-skills/antv-g2-chart/references/compositions/g2-comp-space-layer.md +149 -0
- package/builtin-skills/antv-g2-chart/references/compositions/g2-comp-timing-keyframe.md +91 -0
- package/builtin-skills/antv-g2-chart/references/compositions/g2-comp-view.md +309 -0
- package/builtin-skills/antv-g2-chart/references/concepts/g2-concept-chart-selection.md +235 -0
- package/builtin-skills/antv-g2-chart/references/concepts/g2-concept-color-theory.md +287 -0
- package/builtin-skills/antv-g2-chart/references/concepts/g2-concept-visual-channels.md +180 -0
- package/builtin-skills/antv-g2-chart/references/coordinates/g2-coord-cartesian.md +131 -0
- package/builtin-skills/antv-g2-chart/references/coordinates/g2-coord-fisheye.md +131 -0
- package/builtin-skills/antv-g2-chart/references/coordinates/g2-coord-helix.md +141 -0
- package/builtin-skills/antv-g2-chart/references/coordinates/g2-coord-parallel.md +129 -0
- package/builtin-skills/antv-g2-chart/references/coordinates/g2-coord-polar.md +143 -0
- package/builtin-skills/antv-g2-chart/references/coordinates/g2-coord-radial.md +214 -0
- package/builtin-skills/antv-g2-chart/references/coordinates/g2-coord-theta.md +171 -0
- package/builtin-skills/antv-g2-chart/references/coordinates/g2-coord-transpose.md +195 -0
- package/builtin-skills/antv-g2-chart/references/core/g2-core-chart-init.md +266 -0
- package/builtin-skills/antv-g2-chart/references/core/g2-core-encode-channel.md +197 -0
- package/builtin-skills/antv-g2-chart/references/core/g2-core-view-composition.md +224 -0
- package/builtin-skills/antv-g2-chart/references/data/g2-data-ema.md +190 -0
- package/builtin-skills/antv-g2-chart/references/data/g2-data-fetch.md +167 -0
- package/builtin-skills/antv-g2-chart/references/data/g2-data-filter.md +212 -0
- package/builtin-skills/antv-g2-chart/references/data/g2-data-fold.md +260 -0
- package/builtin-skills/antv-g2-chart/references/data/g2-data-format-tabular.md +280 -0
- package/builtin-skills/antv-g2-chart/references/data/g2-data-kde.md +426 -0
- package/builtin-skills/antv-g2-chart/references/data/g2-data-log.md +140 -0
- package/builtin-skills/antv-g2-chart/references/data/g2-data-slice.md +147 -0
- package/builtin-skills/antv-g2-chart/references/data/g2-data-sort.md +251 -0
- package/builtin-skills/antv-g2-chart/references/data/g2-data-sortby.md +183 -0
- package/builtin-skills/antv-g2-chart/references/data/g2-data-transform-patterns.md +394 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-adaptive-filter.md +118 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-brush-axis.md +112 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-brush-filter.md +122 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-brush-x-y-highlight.md +127 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-brush-xy.md +118 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-brush.md +184 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-brushx-filter.md +170 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-brushx-highlight.md +186 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-brushy-filter.md +170 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-brushy-highlight.md +185 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-chart-index.md +127 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-drilldown.md +149 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-element-highlight-by.md +125 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-element-highlight.md +235 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-element-hover-scale.md +109 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-element-point-move.md +152 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-element-select-by.md +133 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-element-select.md +249 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-fisheye.md +117 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-legend-filter.md +130 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-legend-highlight.md +130 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-poptip.md +105 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-scrollbar-filter.md +144 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-slider-filter.md +231 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-slider-wheel.md +138 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-tooltip.md +192 -0
- package/builtin-skills/antv-g2-chart/references/interactions/g2-interaction-treemap-drilldown.md +152 -0
- package/builtin-skills/antv-g2-chart/references/label-transform/g2-label-transform-contrast-reverse.md +170 -0
- package/builtin-skills/antv-g2-chart/references/label-transform/g2-label-transform-exceed-adjust.md +146 -0
- package/builtin-skills/antv-g2-chart/references/label-transform/g2-label-transform-overflow-hide.md +185 -0
- package/builtin-skills/antv-g2-chart/references/label-transform/g2-label-transform-overflow-stroke.md +147 -0
- package/builtin-skills/antv-g2-chart/references/label-transform/g2-label-transform-overlap-dodge-y.md +225 -0
- package/builtin-skills/antv-g2-chart/references/label-transform/g2-label-transform-overlap-hide.md +213 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-arc-diagram.md +196 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-arc-donut.md +148 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-arc-pie.md +212 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-area-basic.md +168 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-area-stacked.md +150 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-beeswarm.md +134 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-bi-directional-bar.md +297 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-box-boxplot.md +163 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-boxplot.md +340 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-bullet.md +203 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-cell-heatmap.md +370 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-chord.md +341 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-connector.md +126 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-contourline.md +243 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-density.md +457 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-distribution-curve.md +298 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-funnel.md +329 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-gantt.md +208 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-gauge.md +247 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-heatmap.md +130 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-histogram.md +186 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-image.md +129 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-interval-basic.md +528 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-interval-grouped.md +161 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-interval-normalized.md +147 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-interval-stacked.md +183 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-k-chart.md +237 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-line-basic.md +353 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-line-multi.md +156 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-linex-liney.md +176 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-link.md +134 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-liquid.md +125 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-mosaic.md +257 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-pack.md +424 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-parallel.md +195 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-partition.md +275 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-path.md +135 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-point-bubble.md +138 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-point-scatter.md +177 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-polygon.md +130 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-radar.md +231 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-radial-bar.md +226 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-range-rangey.md +253 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-rangex.md +293 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-rect.md +115 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-regression-curve.md +276 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-rose.md +182 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-sankey.md +217 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-shape.md +160 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-spiral.md +257 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-sunburst.md +327 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-text.md +309 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-tree.md +235 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-treemap.md +426 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-vector.md +108 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-venn.md +204 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-violin.md +307 -0
- package/builtin-skills/antv-g2-chart/references/marks/g2-mark-wordcloud.md +155 -0
- package/builtin-skills/antv-g2-chart/references/palette/g2-palette-category10.md +196 -0
- package/builtin-skills/antv-g2-chart/references/palette/g2-palette-category20.md +238 -0
- package/builtin-skills/antv-g2-chart/references/patterns/g2-pattern-performance.md +181 -0
- package/builtin-skills/antv-g2-chart/references/patterns/g2-pattern-responsive.md +232 -0
- package/builtin-skills/antv-g2-chart/references/patterns/g2-pattern-v4-to-v5.md +223 -0
- package/builtin-skills/antv-g2-chart/references/scales/g2-scale-band.md +127 -0
- package/builtin-skills/antv-g2-chart/references/scales/g2-scale-linear.md +259 -0
- package/builtin-skills/antv-g2-chart/references/scales/g2-scale-log.md +226 -0
- package/builtin-skills/antv-g2-chart/references/scales/g2-scale-ordinal.md +135 -0
- package/builtin-skills/antv-g2-chart/references/scales/g2-scale-point.md +242 -0
- package/builtin-skills/antv-g2-chart/references/scales/g2-scale-pow-sqrt.md +124 -0
- package/builtin-skills/antv-g2-chart/references/scales/g2-scale-quantile-quantize.md +119 -0
- package/builtin-skills/antv-g2-chart/references/scales/g2-scale-sequential.md +267 -0
- package/builtin-skills/antv-g2-chart/references/scales/g2-scale-threshold.md +133 -0
- package/builtin-skills/antv-g2-chart/references/scales/g2-scale-time.md +159 -0
- package/builtin-skills/antv-g2-chart/references/themes/g2-theme-builtin.md +192 -0
- package/builtin-skills/antv-g2-chart/references/themes/g2-theme-custom.md +183 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-bin.md +153 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-binx.md +133 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-diffy.md +130 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-dodgex.md +90 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-flexx.md +115 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-group.md +233 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-groupcolor.md +182 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-groupx.md +265 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-groupy.md +167 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-jitter.md +149 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-jitterx.md +177 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-jittery.md +177 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-normalizey.md +83 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-pack.md +164 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-sample.md +143 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-select.md +147 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-selectx.md +179 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-selecty.md +179 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-sort-color.md +115 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-sortx.md +285 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-sorty.md +117 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-stack-enter.md +158 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-stacky.md +218 -0
- package/builtin-skills/antv-g2-chart/references/transforms/g2-transform-symmetryy.md +122 -0
- package/builtin-skills/app-skill/SKILL.md +27 -0
- package/builtin-skills/app-skill/references/data-semantics.md +44 -0
- package/builtin-skills/app-skill/references/models.md +31 -0
- package/builtin-skills/chart-visualization/SKILL.md +101 -0
- package/builtin-skills/loom/SKILL.md +168 -0
- package/builtin-skills/loom/references/README.md +128 -0
- package/builtin-skills/loom/references/dashboard.md +196 -0
- package/builtin-skills/loom/references/data-model.md +78 -0
- package/dist/adapter-base.d.ts +29 -0
- package/dist/adapter-base.d.ts.map +1 -0
- package/dist/adapter-base.js +62 -0
- package/dist/adapter-base.js.map +1 -0
- package/dist/adapter-factory.d.ts +8 -0
- package/dist/adapter-factory.d.ts.map +1 -0
- package/dist/adapter-factory.js +25 -0
- package/dist/adapter-factory.js.map +1 -0
- package/dist/adapter-filesystem.d.ts +6 -11
- package/dist/adapter-filesystem.d.ts.map +1 -1
- package/dist/adapter-filesystem.js +56 -41
- package/dist/adapter-filesystem.js.map +1 -1
- package/dist/adapter-sqlite.d.ts +6 -23
- package/dist/adapter-sqlite.d.ts.map +1 -1
- package/dist/adapter-sqlite.js +65 -50
- package/dist/adapter-sqlite.js.map +1 -1
- package/dist/backend/ai/button-resolver.d.ts +18 -0
- package/dist/backend/ai/button-resolver.d.ts.map +1 -0
- package/dist/backend/ai/button-resolver.js +58 -0
- package/dist/backend/ai/button-resolver.js.map +1 -0
- package/dist/backend/ai/engine.d.ts +52 -0
- package/dist/backend/ai/engine.d.ts.map +1 -0
- package/dist/backend/ai/engine.js +186 -0
- package/dist/backend/ai/engine.js.map +1 -0
- package/dist/backend/ai/index.d.ts +11 -0
- package/dist/backend/ai/index.d.ts.map +1 -0
- package/dist/backend/ai/index.js +8 -0
- package/dist/backend/ai/index.js.map +1 -0
- package/dist/backend/ai/output-parser.d.ts +29 -0
- package/dist/backend/ai/output-parser.d.ts.map +1 -0
- package/dist/backend/ai/output-parser.js +247 -0
- package/dist/backend/ai/output-parser.js.map +1 -0
- package/dist/backend/ai/session-manager.d.ts +103 -0
- package/dist/backend/ai/session-manager.d.ts.map +1 -0
- package/dist/backend/ai/session-manager.js +298 -0
- package/dist/backend/ai/session-manager.js.map +1 -0
- package/dist/backend/index.d.ts +61 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +161 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/observe/index.d.ts +6 -0
- package/dist/backend/observe/index.d.ts.map +1 -0
- package/dist/backend/observe/index.js +5 -0
- package/dist/backend/observe/index.js.map +1 -0
- package/dist/backend/observe/logger.d.ts +28 -0
- package/dist/backend/observe/logger.d.ts.map +1 -0
- package/dist/backend/observe/logger.js +80 -0
- package/dist/backend/observe/logger.js.map +1 -0
- package/dist/backend/observe/types.d.ts +26 -0
- package/dist/backend/observe/types.d.ts.map +1 -0
- package/dist/backend/observe/types.js +7 -0
- package/dist/backend/observe/types.js.map +1 -0
- package/dist/backend/routes/chat.d.ts +31 -0
- package/dist/backend/routes/chat.d.ts.map +1 -0
- package/dist/backend/routes/chat.js +426 -0
- package/dist/backend/routes/chat.js.map +1 -0
- package/dist/backend/routes/data.d.ts +13 -0
- package/dist/backend/routes/data.d.ts.map +1 -0
- package/dist/backend/routes/data.js +134 -0
- package/dist/backend/routes/data.js.map +1 -0
- package/dist/backend/routes/health.d.ts +7 -0
- package/dist/backend/routes/health.d.ts.map +1 -0
- package/dist/backend/routes/health.js +15 -0
- package/dist/backend/routes/health.js.map +1 -0
- package/dist/backend/routes/index.d.ts +11 -0
- package/dist/backend/routes/index.d.ts.map +1 -0
- package/dist/backend/routes/index.js +9 -0
- package/dist/backend/routes/index.js.map +1 -0
- package/dist/backend/routes/skills.d.ts +16 -0
- package/dist/backend/routes/skills.d.ts.map +1 -0
- package/dist/backend/routes/skills.js +590 -0
- package/dist/backend/routes/skills.js.map +1 -0
- package/dist/backend/routes/upload.d.ts +24 -0
- package/dist/backend/routes/upload.d.ts.map +1 -0
- package/dist/backend/routes/upload.js +67 -0
- package/dist/backend/routes/upload.js.map +1 -0
- package/dist/bin.d.ts +8 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +12 -0
- package/dist/bin.js.map +1 -0
- package/dist/capability-generator.d.ts +21 -6
- package/dist/capability-generator.d.ts.map +1 -1
- package/dist/capability-generator.js +88 -261
- package/dist/capability-generator.js.map +1 -1
- package/dist/cli/commands/build.d.ts +11 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +170 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/data.d.ts +12 -0
- package/dist/cli/commands/data.d.ts.map +1 -0
- package/dist/cli/commands/data.js +158 -0
- package/dist/cli/commands/data.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +9 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +114 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/generate-capabilities.d.ts +8 -0
- package/dist/cli/commands/generate-capabilities.d.ts.map +1 -0
- package/dist/cli/commands/generate-capabilities.js +40 -0
- package/dist/cli/commands/generate-capabilities.js.map +1 -0
- package/dist/cli/commands/generate-cli-command.d.ts +8 -0
- package/dist/cli/commands/generate-cli-command.d.ts.map +1 -0
- package/dist/cli/commands/generate-cli-command.js +64 -0
- package/dist/cli/commands/generate-cli-command.js.map +1 -0
- package/dist/cli/commands/generate-dashboard.d.ts +9 -0
- package/dist/cli/commands/generate-dashboard.d.ts.map +1 -0
- package/dist/cli/commands/generate-dashboard.js +466 -0
- package/dist/cli/commands/generate-dashboard.js.map +1 -0
- package/dist/cli/commands/generate-page.d.ts +9 -0
- package/dist/cli/commands/generate-page.d.ts.map +1 -0
- package/dist/cli/commands/generate-page.js +356 -0
- package/dist/cli/commands/generate-page.js.map +1 -0
- package/dist/cli/commands/generate-skill.d.ts +8 -0
- package/dist/cli/commands/generate-skill.d.ts.map +1 -0
- package/dist/cli/commands/generate-skill.js +75 -0
- package/dist/cli/commands/generate-skill.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +6 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +19 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/init.d.ts +8 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +301 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/observe.d.ts +9 -0
- package/dist/cli/commands/observe.d.ts.map +1 -0
- package/dist/cli/commands/observe.js +142 -0
- package/dist/cli/commands/observe.js.map +1 -0
- package/dist/cli/commands/skill.d.ts +9 -0
- package/dist/cli/commands/skill.d.ts.map +1 -0
- package/dist/cli/commands/skill.js +186 -0
- package/dist/cli/commands/skill.js.map +1 -0
- package/dist/cli/generators/capability-generator.d.ts +35 -0
- package/dist/cli/generators/capability-generator.d.ts.map +1 -0
- package/dist/cli/generators/capability-generator.js +115 -0
- package/dist/cli/generators/capability-generator.js.map +1 -0
- package/dist/cli/helpers/app-tsx-wiring.d.ts +19 -0
- package/dist/cli/helpers/app-tsx-wiring.d.ts.map +1 -0
- package/dist/cli/helpers/app-tsx-wiring.js +143 -0
- package/dist/cli/helpers/app-tsx-wiring.js.map +1 -0
- package/dist/cli/helpers/column-template.d.ts +18 -0
- package/dist/cli/helpers/column-template.d.ts.map +1 -0
- package/dist/cli/helpers/column-template.js +151 -0
- package/dist/cli/helpers/column-template.js.map +1 -0
- package/dist/cli/helpers/duration.d.ts +5 -0
- package/dist/cli/helpers/duration.d.ts.map +1 -0
- package/dist/cli/helpers/duration.js +19 -0
- package/dist/cli/helpers/duration.js.map +1 -0
- package/dist/cli/helpers/field-template.d.ts +14 -0
- package/dist/cli/helpers/field-template.d.ts.map +1 -0
- package/dist/cli/helpers/field-template.js +101 -0
- package/dist/cli/helpers/field-template.js.map +1 -0
- package/dist/cli/helpers/naming.d.ts +12 -0
- package/dist/cli/helpers/naming.d.ts.map +1 -0
- package/dist/cli/helpers/naming.js +25 -0
- package/dist/cli/helpers/naming.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +33 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/templates/backend-entry.d.ts +5 -0
- package/dist/cli/templates/backend-entry.d.ts.map +1 -0
- package/dist/cli/templates/backend-entry.js +17 -0
- package/dist/cli/templates/backend-entry.js.map +1 -0
- package/dist/cli/templates/frontend-entry.d.ts +11 -0
- package/dist/cli/templates/frontend-entry.d.ts.map +1 -0
- package/dist/cli/templates/frontend-entry.js +77 -0
- package/dist/cli/templates/frontend-entry.js.map +1 -0
- package/dist/cli/templates/gitignore.d.ts +5 -0
- package/dist/cli/templates/gitignore.d.ts.map +1 -0
- package/dist/cli/templates/gitignore.js +13 -0
- package/dist/cli/templates/gitignore.js.map +1 -0
- package/dist/cli/templates/index.d.ts +12 -0
- package/dist/cli/templates/index.d.ts.map +1 -0
- package/dist/cli/templates/index.js +12 -0
- package/dist/cli/templates/index.js.map +1 -0
- package/dist/cli/templates/loom-config.d.ts +10 -0
- package/dist/cli/templates/loom-config.d.ts.map +1 -0
- package/dist/cli/templates/loom-config.js +31 -0
- package/dist/cli/templates/loom-config.js.map +1 -0
- package/dist/cli/templates/package-json.d.ts +9 -0
- package/dist/cli/templates/package-json.d.ts.map +1 -0
- package/dist/cli/templates/package-json.js +40 -0
- package/dist/cli/templates/package-json.js.map +1 -0
- package/dist/cli/templates/readme.d.ts +9 -0
- package/dist/cli/templates/readme.d.ts.map +1 -0
- package/dist/cli/templates/readme.js +47 -0
- package/dist/cli/templates/readme.js.map +1 -0
- package/dist/cli/templates/tsconfig.d.ts +6 -0
- package/dist/cli/templates/tsconfig.d.ts.map +1 -0
- package/dist/cli/templates/tsconfig.js +41 -0
- package/dist/cli/templates/tsconfig.js.map +1 -0
- package/dist/cli/templates/vite-config.d.ts +5 -0
- package/dist/cli/templates/vite-config.d.ts.map +1 -0
- package/dist/cli/templates/vite-config.js +24 -0
- package/dist/cli/templates/vite-config.js.map +1 -0
- package/dist/cli/utils.d.ts +10 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cli/utils.js +31 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/commands.d.ts +1 -5
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +0 -11
- package/dist/commands.js.map +1 -1
- package/dist/config.d.ts +21 -52
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -9
- package/dist/config.js.map +1 -1
- package/dist/dashboard-config.d.ts +117 -0
- package/dist/dashboard-config.d.ts.map +1 -0
- package/dist/dashboard-config.js +59 -0
- package/dist/dashboard-config.js.map +1 -0
- package/dist/index.d.ts +9 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/server-bin.d.ts +12 -0
- package/dist/server-bin.d.ts.map +1 -0
- package/dist/server-bin.js +43 -0
- package/dist/server-bin.js.map +1 -0
- package/dist/types/adapter.d.ts +28 -0
- package/dist/types/adapter.d.ts.map +1 -0
- package/dist/types/adapter.js +5 -0
- package/dist/types/adapter.js.map +1 -0
- package/dist/types/ai.d.ts +52 -0
- package/dist/types/ai.d.ts.map +1 -0
- package/dist/types/ai.js +5 -0
- package/dist/types/ai.js.map +1 -0
- package/dist/types/chat.d.ts +46 -0
- package/dist/types/chat.d.ts.map +1 -0
- package/dist/types/chat.js +5 -0
- package/dist/types/chat.js.map +1 -0
- package/dist/types/command.d.ts +25 -0
- package/dist/types/command.d.ts.map +1 -0
- package/dist/types/command.js +5 -0
- package/dist/types/command.js.map +1 -0
- package/dist/types/config.d.ts +30 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +5 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/dashboard.d.ts +42 -0
- package/dist/types/dashboard.d.ts.map +1 -0
- package/dist/types/dashboard.js +5 -0
- package/dist/types/dashboard.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/model.d.ts +59 -0
- package/dist/types/model.d.ts.map +1 -0
- package/dist/types/model.js +5 -0
- package/dist/types/model.js.map +1 -0
- package/dist/types.d.ts +4 -199
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -3
- package/dist/types.js.map +1 -1
- package/package.json +18 -3
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: chart-visualization
|
|
3
|
+
description: 将数据可视化为图表。当用户需要生成柱状图、折线图、饼图、散点图、雷达图、桑基图、思维导图、流程图等图表时调用此技能,通过 curl 工具调用 AntV API 生成图表图片
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
请根据用户输入的内容,将数据可视化为图表。
|
|
7
|
+
|
|
8
|
+
## 步骤
|
|
9
|
+
1. 分析用户数据和需求,选择最合适的图表类型
|
|
10
|
+
2. 构造符合规范的 JSON 请求体
|
|
11
|
+
3. 使用 curl 工具调用 API 生成图表图片
|
|
12
|
+
4. 将返回的图片 URL 以 Markdown 图片格式输出
|
|
13
|
+
|
|
14
|
+
## 图表选择指南
|
|
15
|
+
|
|
16
|
+
根据用户的数据特征和需求,选择最合适的图表类型:
|
|
17
|
+
|
|
18
|
+
- **时间序列**:用 `line`(趋势)或 `area`(累计趋势);两个不同量纲用 `dual-axes`
|
|
19
|
+
- **比较类**:用 `bar`(横向分类对比)或 `column`(纵向分类对比);频率分布用 `histogram`
|
|
20
|
+
- **占比类**:用 `pie`(比例构成)或 `treemap`(层级占比)
|
|
21
|
+
- **关系与流程**:用 `scatter`(相关性)、`sankey`(流向)或 `venn`(集合重叠)
|
|
22
|
+
- **层级与树形**:用 `organization-chart` 或 `mind-map`
|
|
23
|
+
- **专用类型**:
|
|
24
|
+
- `radar`:多维度对比
|
|
25
|
+
- `funnel`:流程阶段转化
|
|
26
|
+
- `liquid`:百分比/进度
|
|
27
|
+
- `word-cloud`:文本词频
|
|
28
|
+
- `boxplot` / `violin`:统计分布
|
|
29
|
+
- `network-graph`:复杂节点关系
|
|
30
|
+
- `fishbone-diagram`:因果分析
|
|
31
|
+
- `flow-diagram`:流程图
|
|
32
|
+
- `spreadsheet`:结构化数据表或透视表
|
|
33
|
+
|
|
34
|
+
## API 接口
|
|
35
|
+
|
|
36
|
+
POST https://antv-studio.alipay.com/api/gpt-vis
|
|
37
|
+
|
|
38
|
+
请求体为 JSON,必须包含 `type` 和 `source: "chart-visualization-skills"` 字段。
|
|
39
|
+
|
|
40
|
+
示例:
|
|
41
|
+
```bash
|
|
42
|
+
curl -X POST https://antv-studio.alipay.com/api/gpt-vis \
|
|
43
|
+
-H "Content-Type: application/json" \
|
|
44
|
+
-d '{"type":"line","source":"chart-visualization-skills","data":[{"time":"2025-01","value":100}],"title":"示例图表"}'
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
返回示例:
|
|
48
|
+
```json
|
|
49
|
+
{"success":true,"resultObj":"https://..."}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
将 `resultObj` 中的 URL 以 Markdown 图片格式输出:``
|
|
53
|
+
|
|
54
|
+
## 支持的图表类型
|
|
55
|
+
|
|
56
|
+
| 分类 | 图表类型 |
|
|
57
|
+
|------|---------|
|
|
58
|
+
| 比较类 | 条形图(bar)、柱状图(column)、瀑布图(waterfall)、双轴图(dual-axes) |
|
|
59
|
+
| 趋势类 | 面积图(area)、折线图(line)、散点图(scatter) |
|
|
60
|
+
| 分布类 | 箱线图(boxplot)、直方图(histogram)、小提琴图(violin)、漏斗图(funnel) |
|
|
61
|
+
| 占比类 | 饼图(pie)、水波图(liquid)、词云(word-cloud) |
|
|
62
|
+
| 层级类 | 组织架构图(organization-chart)、思维导图(mind-map)、矩形树图(treemap)、桑基图(sankey) |
|
|
63
|
+
| 关系类 | 关系图(network-graph)、韦恩图(venn) |
|
|
64
|
+
| 流程类 | 流程图(flow-diagram)、鱼骨图(fishbone-diagram) |
|
|
65
|
+
| 多维类 | 雷达图(radar) |
|
|
66
|
+
| 表格类 | 表格/透视表(spreadsheet) |
|
|
67
|
+
|
|
68
|
+
## 通用可选参数
|
|
69
|
+
|
|
70
|
+
| 参数 | 类型 | 默认值 | 说明 |
|
|
71
|
+
|------|------|--------|------|
|
|
72
|
+
| theme | string | "default" | 主题:"default" / "academy" / "dark" |
|
|
73
|
+
| width | number | 600 | 图表宽度 |
|
|
74
|
+
| height | number | 400 | 图表高度 |
|
|
75
|
+
| title | string | "" | 图表标题 |
|
|
76
|
+
| style.texture | string | "default" | 纹理:"default" / "rough"(手绘风格) |
|
|
77
|
+
|
|
78
|
+
带坐标轴的图表还支持:axisXTitle、axisYTitle。
|
|
79
|
+
|
|
80
|
+
## 各图表 data 格式
|
|
81
|
+
|
|
82
|
+
- **area / line**: `{time: string, value: number, group?: string}[]`,可选 stack: boolean
|
|
83
|
+
- **bar**: `{category: string, value: number, group?: string}[]`,可选 group / stack (默认 stack: true)
|
|
84
|
+
- **column**: `{category: string, value: number, group?: string}[]`,可选 group (默认 true) / stack
|
|
85
|
+
- **scatter**: `{x: number, y: number, group?: string}[]`
|
|
86
|
+
- **pie**: `{category: string, value: number}[]`,可选 innerRadius: number (0-1)
|
|
87
|
+
- **radar**: `{name: string, value: number, group?: string}[]`
|
|
88
|
+
- **funnel**: `{category: string, value: number}[]`
|
|
89
|
+
- **waterfall**: `{category: string, value?: number, isTotal?: boolean, isIntermediateTotal?: boolean}[]`
|
|
90
|
+
- **dual-axes**: categories: string[], series: {type: "column"|"line", data: number[], axisYTitle?: string}[]
|
|
91
|
+
- **histogram**: `number[]`,可选 binNumber: number
|
|
92
|
+
- **boxplot / violin**: `{category: string, value: number, group?: string}[]`
|
|
93
|
+
- **liquid**: percent: number (0-1),可选 shape: "circle"|"rect"|"pin"|"triangle"
|
|
94
|
+
- **word-cloud**: `{text: string, value: number}[]`
|
|
95
|
+
- **sankey**: `{source: string, target: string, value: number}[]`,可选 nodeAlign
|
|
96
|
+
- **treemap**: `{name: string, value: number, children?: ...}[]` (最深 3 层)
|
|
97
|
+
- **venn**: `{sets: string[], value: number, label?: string}[]`
|
|
98
|
+
- **network-graph / flow-diagram**: `{nodes: {name: string}[], edges: {source: string, target: string, name?: string}[]}`
|
|
99
|
+
- **fishbone-diagram / mind-map**: `{name: string, children?: ...}` (最深 3 层)
|
|
100
|
+
- **organization-chart**: `{name: string, description?: string, children?: ...}` (最深 3 层),可选 orient: "horizontal"|"vertical"
|
|
101
|
+
- **spreadsheet**: `Record<string, string | number>[]`,可选 rows / columns / values(透视表字段)
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Loom
|
|
3
|
+
description: |
|
|
4
|
+
Use this skill when the user asks to "create a new loom project", "用loom开发一个系统",
|
|
5
|
+
"开发一个AI平台应用", "为系统添加页面", "为项目配置 AI 按钮功能", or any Loom framework task.
|
|
6
|
+
Loom is an AI-Native full-stack framework.
|
|
7
|
+
version: 0.1.0
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Loom - AI 原生全栈框架技能
|
|
11
|
+
|
|
12
|
+
## 框架工作方式
|
|
13
|
+
|
|
14
|
+
Loom 是**配置驱动、自动生成**的框架。工作流程为:
|
|
15
|
+
|
|
16
|
+
1. **写配置** — 编辑 `loom.config.ts`,定义数据模型和 AI 按钮
|
|
17
|
+
2. **跑命令** — CLI 读取配置,自动生成页面、API 和路由接线
|
|
18
|
+
|
|
19
|
+
`loom generate page` 会自动生成:CRUD 页面(含 AI 按钮)、App.tsx 路由接线、后端 API + 应用 Skill。
|
|
20
|
+
生成的页面自带 AI 助手浮动按钮,支持流式对话、多会话和数据自动刷新。
|
|
21
|
+
|
|
22
|
+
技术架构细节见 `references/README.md`。
|
|
23
|
+
|
|
24
|
+
## 开发流程
|
|
25
|
+
|
|
26
|
+
**重要:** 始终在项目目录下运行命令(不是 loom monorepo 根目录)。
|
|
27
|
+
|
|
28
|
+
### 1. 创建项目
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npx -p @loom-framework/core loom init <name> --description <desc> --adapter <filesystem|sqlite>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
项目初始化时自动安装以下内置 Skill:
|
|
35
|
+
|
|
36
|
+
| Skill | 触发场景 | 说明 |
|
|
37
|
+
|-------|---------|------|
|
|
38
|
+
| **antd** | 开发前端页面、丰富 UI 功能 | 通过 `@ant-design/cli` 查询组件 API、语义化样式、示例;编写前端代码前先用此 Skill 确认用法 |
|
|
39
|
+
| **antv-g2-chart** | 添加自定义可视化图表 | 生成 G2 v5 Spec 代码;配合 `useChartData` / `DashboardChart`,详见 `references/dashboard.md` |
|
|
40
|
+
| **chart-visualization** | 对话中快速生成图表 | 通过 API 生成图表图片返回 Markdown 链接,适合快速展示数据分析结果 |
|
|
41
|
+
|
|
42
|
+
### 2. 编辑配置
|
|
43
|
+
|
|
44
|
+
编辑 `loom.config.ts`,定义数据模型(`data.models`)和 AI 按钮(`aiButtons`),Schema 见下方。高级选项见 `references/data-model.md`。
|
|
45
|
+
|
|
46
|
+
### 3. 生成页面
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
loom generate page <Name> --model <model-name>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
此命令自动生成:CRUD 页面(含 AI 按钮)、App.tsx 路由接线、后端 API、应用 Skill。模型立即可通过 `loom data` CLI 和 AI 对话使用。
|
|
53
|
+
|
|
54
|
+
### 4. 生成 Dashboard(数据概览)
|
|
55
|
+
|
|
56
|
+
Dashboard 采用**两阶段**工作流:AI 生成配置 → CLI 生成页面。
|
|
57
|
+
|
|
58
|
+
**阶段 1:生成 dashboard.config.json**
|
|
59
|
+
|
|
60
|
+
根据 `loom.config.ts` 中的数据模型,站在用户角度设计 Dashboard,生成 `dashboard.config.json` 到项目根目录。设计原则和配置 Schema 详见 `references/dashboard.md`。
|
|
61
|
+
|
|
62
|
+
**阶段 2:执行生成命令**
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
loom generate dashboard <name>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
此命令自动生成 Dashboard 页面并接线 App.tsx。
|
|
69
|
+
|
|
70
|
+
### 5. 完善 AI Skill(必须)
|
|
71
|
+
|
|
72
|
+
步骤 3 会自动生成应用 Skill(`.claude/skills/<项目名>/SKILL.md`),但需要补充以下 TODO,AI 对话才能正确理解项目业务语义:
|
|
73
|
+
|
|
74
|
+
1. **frontmatter `description`**:写入用户在 AI 对话中会说的触发短语。格式参考:
|
|
75
|
+
```
|
|
76
|
+
This skill should be used when the user asks to "创建XXX", "查看XXX", "删除XXX",
|
|
77
|
+
or any request about managing XXX in the <项目名> project.
|
|
78
|
+
```
|
|
79
|
+
2. **Overview 部分**:用 2-3 句话描述项目做什么、有哪些数据、用户如何与数据交互
|
|
80
|
+
3. **Usage Scenarios 部分**:列出 5-10 个典型用户请求,格式为 `- "用户说的话" → 对应的 CLI 命令`
|
|
81
|
+
|
|
82
|
+
如需添加自定义 Skill:
|
|
83
|
+
- `loom generate skill <name>` — 创建脚手架,然后编辑 `.claude/skills/<name>/SKILL.md`
|
|
84
|
+
- 或直接复制一个已有的 Skill 目录到 `.claude/skills/` 下
|
|
85
|
+
|
|
86
|
+
### 6. 启动开发
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
loom dev
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
- 前端:http://localhost:5173
|
|
93
|
+
- 后端:http://localhost:3000
|
|
94
|
+
|
|
95
|
+
### 迭代:修改配置 → 重新生成
|
|
96
|
+
|
|
97
|
+
编辑 `loom.config.ts`(添加/修改模型或 AI 按钮)→ 重新执行步骤 3。
|
|
98
|
+
|
|
99
|
+
### 内置 Skill 使用原则
|
|
100
|
+
|
|
101
|
+
- 涉及前端页面开发 → 先用 `/antd` 查询组件 API,不要凭记忆写代码
|
|
102
|
+
- 需要在 Dashboard 追加图表 → 参考 `references/dashboard.md` + `/antv-g2-chart` 生成代码
|
|
103
|
+
- 对话中需展示数据可视化 → 用 `/chart-visualization` 生成图片
|
|
104
|
+
|
|
105
|
+
### CLI 命令速查
|
|
106
|
+
|
|
107
|
+
| 命令 | 说明 |
|
|
108
|
+
|------|------|
|
|
109
|
+
| `loom dev` | 启动开发环境(`--skip-generate` `--backend-only` `--frontend-only`) |
|
|
110
|
+
| `loom build` | 生产构建 |
|
|
111
|
+
| `loom generate page <name> --model <model>` | 生成 CRUD 页面 + 应用 Skill(含 aiButtons 则自动集成) |
|
|
112
|
+
| `loom generate dashboard <name>` | 从 dashboard.config.json 生成 Dashboard 数据概览页面 |
|
|
113
|
+
| `loom generate capabilities` | 仅重新生成应用 Skill 的 `references/models.md` |
|
|
114
|
+
| `loom generate skill <name>` | 生成自定义 Skill 脚架 |
|
|
115
|
+
|
|
116
|
+
## loom.config.ts Schema(核心)
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
import { defineConfig } from '@loom-framework/core';
|
|
120
|
+
|
|
121
|
+
export default defineConfig({
|
|
122
|
+
project: {
|
|
123
|
+
name: 'my-app', // 必填
|
|
124
|
+
description: '...',', // 可选
|
|
125
|
+
},
|
|
126
|
+
data: {
|
|
127
|
+
defaultAdapter: 'filesystem', // 'filesystem' | 'sqlite'
|
|
128
|
+
models: [{
|
|
129
|
+
name: 'items', // 将作为 React 组件名生成页面,字母开头,字母/数字/下划线
|
|
130
|
+
description: '...',', // 可选:显示在生成页面中
|
|
131
|
+
fields: [{
|
|
132
|
+
name: 'status', // 字母/下划线开头,字母数字下划线
|
|
133
|
+
type: 'string', // 'string' | 'number' | 'boolean' | 'date' | 'string[]' | 'number[]' | 'json'
|
|
134
|
+
required: true, // 可选,默认 false
|
|
135
|
+
description: '...,', // 可选:显示在表单中
|
|
136
|
+
default: 'active', // 可选:写入时自动填充
|
|
137
|
+
enum: ['active', 'inactive'], // 可选:限制可选值
|
|
138
|
+
}],
|
|
139
|
+
}],
|
|
140
|
+
},
|
|
141
|
+
aiButtons: [{ // 可选
|
|
142
|
+
id: 'summarize', // 必填:唯一标识
|
|
143
|
+
label: '总结', // 必填:按钮文本
|
|
144
|
+
prompt: '请总结以下内容', // 必填:支持 {{var}} 引用当前行字段值
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
id: 'analyze', // 带变量的示例
|
|
148
|
+
label: '分析',
|
|
149
|
+
prompt: '分析{{questionContent}},错误答案:{{wrongAnswer}}',
|
|
150
|
+
placement: 'wrong_questions', // 可选:限制按钮只出现在指定模型页面,逗号分隔多个模型名;省略则出现在所有页面
|
|
151
|
+
}],
|
|
152
|
+
});
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
高级配置(`ai.claudeCode`、`server`、按模型 `adapters`、`indexes`)见 `references/data-model.md`。
|
|
156
|
+
|
|
157
|
+
## API 路由格式
|
|
158
|
+
|
|
159
|
+
后端 REST API 路径为 `/api/v1/data/<model-name>`,支持:`GET`(列表)、`GET /:id`(单条)、`POST`(创建)、`PUT /:id`(更新)、`DELETE /:id`(删除)。
|
|
160
|
+
AI 相关:`POST /api/v1/chat`(SSE 流式对话)、`GET /api/v1/sessions`(会话列表)。
|
|
161
|
+
前端通过 `useData('<model-name>')` 自动访问,无需手动拼接。
|
|
162
|
+
|
|
163
|
+
**注意:** `sqlite` 适配器在 Node.js ≥ 25 时可能因 `better-sqlite3` 原生模块未编译而报错,改用 `filesystem` 即可。
|
|
164
|
+
|
|
165
|
+
## 常见问题
|
|
166
|
+
|
|
167
|
+
- **better-sqlite3 加载失败**:Node.js 版本缺少预编译包。修复:(1) `cd node_modules/better-sqlite3 && npx node-gyp rebuild`,或 (2) 将 `defaultAdapter` 改为 `'filesystem'`
|
|
168
|
+
- **`loom` 命令报错 "No loom.config.ts found"**:在项目目录下运行命令
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Loom - AI-Native Full-Stack Framework
|
|
2
|
+
|
|
3
|
+
编织 AI 能力为应用织物
|
|
4
|
+
|
|
5
|
+
## 快速上手
|
|
6
|
+
|
|
7
|
+
### 1. 安装 npm 包
|
|
8
|
+
|
|
9
|
+
Loom 包含两个包:
|
|
10
|
+
|
|
11
|
+
- `@loom-framework/core` — CLI + 后端(全局安装以使用 `loom` 命令)
|
|
12
|
+
- `@loom-framework/frontend-antd` — 前端组件库(项目运行时依赖,`loom init` 自动添加)
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install -g @loom-framework/core
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### 2. 配置 Skill 到 Claude Code
|
|
19
|
+
|
|
20
|
+
Loom Skill 随 npm 包发布,位于 `builtin-skills/loom/` 目录。复制到 Claude Code 的 skill 目录:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# 从全局安装复制
|
|
24
|
+
cp -r $(npm root -g)/@loom-framework/core/builtin-skills/loom ~/.claude/skills/loom
|
|
25
|
+
|
|
26
|
+
# 或从项目内复制
|
|
27
|
+
cp -r node_modules/@loom-framework/core/builtin-skills/loom ~/.claude/skills/loom
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 3. 打开 Claude Code
|
|
31
|
+
|
|
32
|
+
启动 Claude Code,Skill 会被自动加载。
|
|
33
|
+
|
|
34
|
+
### 4. 开始使用
|
|
35
|
+
|
|
36
|
+
在 Claude Code 中输入以下内容触发 Loom Skill:
|
|
37
|
+
|
|
38
|
+
### 开始开发
|
|
39
|
+
|
|
40
|
+
在 Claude Code 中输入以下内容即可触发 Loom Skill:
|
|
41
|
+
|
|
42
|
+
- "用 loom 开发一个 AI 平台"
|
|
43
|
+
- "创建一个 loom 项目"
|
|
44
|
+
- "为系统添加页面"
|
|
45
|
+
- "配置 AI 按钮"
|
|
46
|
+
|
|
47
|
+
示例对话:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
用户: 用 loom 开发一个笔记管理系统,用 sqlite 存储,
|
|
51
|
+
需要 AI 总结和翻译功能
|
|
52
|
+
Claude: [读取 SKILL.md] → 运行 loom init → 编辑 config →
|
|
53
|
+
loom generate page → loom dev
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 开发流程
|
|
57
|
+
|
|
58
|
+
1. **创建项目**:`npx -p @loom-framework/core loom init <name> --description <desc> --adapter <adapter>`
|
|
59
|
+
2. **编辑配置**:在 `loom.config.ts` 中定义数据模型和 AI 按钮
|
|
60
|
+
3. **生成页面**:`loom generate page <Name> --model <model>`
|
|
61
|
+
4. **启动开发**:`loom dev` → http://localhost:5173
|
|
62
|
+
|
|
63
|
+
## 核心理念
|
|
64
|
+
|
|
65
|
+
- **Prompt as Code**: 业务逻辑写在 Skill 的 Markdown 中,而非后端代码
|
|
66
|
+
- **Schema-driven**: 一个数据实体定义 → Skill + CLI 命令 + REST API(自动同步)
|
|
67
|
+
- **Zero Backend Logic**: 后端是透明代理,所有智能在 Skill 中
|
|
68
|
+
|
|
69
|
+
## 三种交互类型
|
|
70
|
+
|
|
71
|
+
| 类型 | 说明 | 用户入口 | 自动化程度 |
|
|
72
|
+
|------|------|---------|-----------|
|
|
73
|
+
| AI Chat | 自然语言对话 | AppShell 右下角浮动按钮 | 开箱即用,无需配置 |
|
|
74
|
+
| AI Buttons | 一键 AI 动作 | CRUD 页面操作列的 AI 下拉菜单 | 配置 aiButtons + generate page,自动集成 |
|
|
75
|
+
| CRUD | 结构化数据管理 | 导航菜单页面 | 配置 model + generate page,自动生成 |
|
|
76
|
+
|
|
77
|
+
## 组件架构
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
AppShell
|
|
81
|
+
├── Layout (Sider + Content)
|
|
82
|
+
└── AIBubble → ChatDrawer → ChatPanel
|
|
83
|
+
├── LoomChatProvider + useXChat
|
|
84
|
+
├── MessageContent (thinking / content / tool_call)
|
|
85
|
+
└── Sender (输入框 + 文件上传)
|
|
86
|
+
|
|
87
|
+
AIActionButton → AIContext.triggerAI() → ChatDrawer 自动提交
|
|
88
|
+
useData → 监听 loom:data-changed 事件自动刷新
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### AI 按钮工作流
|
|
92
|
+
|
|
93
|
+
1. 点击 AI 按钮 → `AIContext.triggerAI({ query, buttonId, context })`
|
|
94
|
+
2. ChatDrawer 打开并自动提交 prompt
|
|
95
|
+
3. AI 可能通过工具调用进行 CRUD 操作
|
|
96
|
+
4. done 事件触发 `loom:data-changed` → useData 自动 refresh
|
|
97
|
+
|
|
98
|
+
### 前端组件导出
|
|
99
|
+
|
|
100
|
+
| 组件/Hook | 说明 |
|
|
101
|
+
|-----------|------|
|
|
102
|
+
| `AppShell` | 应用布局框架,内含 AIBubble |
|
|
103
|
+
| `ChatDrawer` | AI 对话抽屉(多会话、流式、thinking/tool_call) |
|
|
104
|
+
| `AIBubble` | AI 浮动按钮(imperativeHandle: openWithQuery) |
|
|
105
|
+
| `AIActionButton` | AI 动作按钮(通过 AIContext 触发 ChatDrawer) |
|
|
106
|
+
| `AIContext` | AI 上下文(AppShell 提供 triggerAI) |
|
|
107
|
+
| `useData` | 数据 CRUD hook(自动响应 loom:data-changed 事件) |
|
|
108
|
+
|
|
109
|
+
## 项目结构
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
my-loom-app/
|
|
113
|
+
├── loom.config.ts # 配置源
|
|
114
|
+
├── frontend/src/components/pages/ # 业务页面
|
|
115
|
+
├── backend/src/ # Fastify + AI 通信
|
|
116
|
+
├── .claude/skills/ # Skills
|
|
117
|
+
├── cli/src/commands/ # CLI 命令扩展
|
|
118
|
+
├── data/ # 数据存储
|
|
119
|
+
└── .loom/ # 自动生成(gitignore)
|
|
120
|
+
└── sessions/ # AI 会话持久化
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## 两个包
|
|
124
|
+
|
|
125
|
+
| 包 | 说明 |
|
|
126
|
+
|---|---|
|
|
127
|
+
| `@loom-framework/core` | DataAdapter、LoomServer、CLI(loom / loom-server) |
|
|
128
|
+
| `@loom-framework/frontend-antd` | 前端组件库:AppShell、ChatDrawer、AIActionButton、useData、AIContext |
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# 生成 Dashboard(数据概览页面)
|
|
2
|
+
|
|
3
|
+
Dashboard 采用**两阶段**工作流:AI 设计配置 → 代码生成页面。
|
|
4
|
+
|
|
5
|
+
## 阶段 1:生成 dashboard.config.json
|
|
6
|
+
|
|
7
|
+
根据项目的 `loom.config.ts` 中的数据模型,站在用户角度设计 Dashboard,生成 `dashboard.config.json` 到项目根目录。
|
|
8
|
+
|
|
9
|
+
**设计原则:**
|
|
10
|
+
- 统计卡片放第一行(一眼看到关键数字)
|
|
11
|
+
- 分布图表按业务重要性排列
|
|
12
|
+
- 趋势图放最后一行(需要更多空间)
|
|
13
|
+
- 每行不超过 4 个元素
|
|
14
|
+
- 标题用业务语言,不用字段名
|
|
15
|
+
|
|
16
|
+
### 配置 Schema
|
|
17
|
+
|
|
18
|
+
```jsonc
|
|
19
|
+
{
|
|
20
|
+
"name": "overview", // 必填:Dashboard 标识(同模型命名规则)
|
|
21
|
+
"description": "数据概览", // 可选:侧边栏展示名
|
|
22
|
+
"models": ["model_a", "model_b"], // 必填:关联的数据模型名列表
|
|
23
|
+
"layout": [ // 必填:布局定义,数组每项代表一行
|
|
24
|
+
{
|
|
25
|
+
"row": [ // 每行包含一组 widget
|
|
26
|
+
{
|
|
27
|
+
"type": "stat", // 图表类型,见下方图表类型表
|
|
28
|
+
"title": "总数", // 业务语言标题
|
|
29
|
+
"model": "model_a", // 数据模型名
|
|
30
|
+
"span": 6, // 可选:Col 宽度(1-24),省略则自动均分
|
|
31
|
+
"aggregate": "count", // 可选:count|sum|avg|min|max|ratio(默认 count)
|
|
32
|
+
"field": "score", // aggregate 为 sum/avg/min/max 时必填:数值字段名
|
|
33
|
+
"filter": { "status": "active" }, // 可选:聚合前筛选条件
|
|
34
|
+
"groupBy": "category", // 可选:分组字段(string/enum/date/boolean)
|
|
35
|
+
"crossGroupBy": "grade", // 可选:第二分组字段,用于二维图表
|
|
36
|
+
"interval": "month" // 可选:date 字段分组粒度 day|week|month(默认 month)
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 字段说明
|
|
45
|
+
|
|
46
|
+
| 字段 | 类型 | 说明 |
|
|
47
|
+
|------|------|------|
|
|
48
|
+
| `aggregate` | `count\|sum\|avg\|min\|max\|ratio` | 聚合方式。`ratio` = 符合 filter 条件的记录数/总记录数,用于 gauge/liquid/stat 百分比 |
|
|
49
|
+
| `field` | string | 聚合目标字段。仅 aggregate 为 sum/avg/min/max 时需要 |
|
|
50
|
+
| `filter` | object | 筛选条件,键值对。如 `{"isMastered": true}` 筛选已掌握的记录 |
|
|
51
|
+
| `groupBy` | string | 主分组字段。string/enum 字段按值分组计数;boolean 字段自动映射为"是/否";date 字段按 interval 分段 |
|
|
52
|
+
| `crossGroupBy` | string | 第二分组维度。配合 groupBy 使用,产生交叉分组数据,用于二维图表 |
|
|
53
|
+
| `interval` | `day\|week\|month` | date 字段的分组粒度,仅 groupBy 指向 date 字段时有效 |
|
|
54
|
+
|
|
55
|
+
### 图表类型与配置要点
|
|
56
|
+
|
|
57
|
+
#### 数值类 — 展示关键指标
|
|
58
|
+
|
|
59
|
+
| type | 中文名称 | 必填字段 | 典型配置 | 生成效果 |
|
|
60
|
+
|------|---------|---------|---------|---------|
|
|
61
|
+
| `stat` | 统计卡片 | — | `{ aggregate: "count" }` 或 `{ aggregate: "avg", field: "score" }` 或 `{ aggregate: "ratio", filter: { passed: true } }` | Ant Design Statistic 数值卡片 |
|
|
62
|
+
| `gauge` | 仪表盘 | `aggregate: "ratio"` + `filter` | `{ aggregate: "ratio", filter: { isMastered: true } }` | G2 仪表盘(百分比进度) |
|
|
63
|
+
| `liquid` | 水波图 | `aggregate: "ratio"` + `filter` | `{ aggregate: "ratio", filter: { isMastered: true } }` | G2 水波图(百分比进度) |
|
|
64
|
+
|
|
65
|
+
> **说明**:gauge 和 liquid 使用 `aggregate: "ratio"` + `filter` 来计算百分比(如掌握率 = 已掌握数/总数),ratio 自动算出 0-1 之间的值。
|
|
66
|
+
|
|
67
|
+
#### 占比类 — 展示分布构成
|
|
68
|
+
|
|
69
|
+
| type | 中文名称 | 必填字段 | 典型配置 | 生成效果 |
|
|
70
|
+
|------|---------|---------|---------|---------|
|
|
71
|
+
| `pie` | 饼图 | `groupBy` (enum/string) | `{ groupBy: "subject" }` | G2 饼图(分布占比) |
|
|
72
|
+
| `ring` | 环形图 | `groupBy` (boolean/enum) | `{ groupBy: "difficulty" }` 或 `{ groupBy: "isMastered" }` | G2 环形图(占比对比,boolean 自动映射"是/否") |
|
|
73
|
+
| `treemap` | 矩形树图 | `groupBy` + 可选 `crossGroupBy` | `{ groupBy: "subject" }` 或 `{ groupBy: "subject", crossGroupBy: "difficulty" }` | G2 矩形树图(层级占比,有 crossGroupBy 则两层) |
|
|
74
|
+
|
|
75
|
+
#### 对比类 — 跨类别比较
|
|
76
|
+
|
|
77
|
+
| type | 中文名称 | 必填字段 | 典型配置 | 生成效果 |
|
|
78
|
+
|------|---------|---------|---------|---------|
|
|
79
|
+
| `bar` | 条形图 | `groupBy` | `{ groupBy: "errorType" }` | G2 条形图(横向分类对比) |
|
|
80
|
+
| `stacked_bar` | 堆叠条形图 | `groupBy` + `crossGroupBy` | `{ groupBy: "subject", crossGroupBy: "errorType" }` | G2 堆叠条形图(组成+对比) |
|
|
81
|
+
| `grouped_bar` | 分组条形图 | `groupBy` + `crossGroupBy` | `{ groupBy: "subject", crossGroupBy: "difficulty" }` | G2 分组条形图(并列对比) |
|
|
82
|
+
| `radar` | 雷达图 | `groupBy` | `{ groupBy: "subject" }` | G2 雷达图(多维度闭合多边形) |
|
|
83
|
+
| `funnel` | 漏斗图 | `groupBy` | `{ groupBy: "errorType" }` | G2 漏斗图(阶段转化,柱条宽度反映数值) |
|
|
84
|
+
|
|
85
|
+
#### 趋势类 — 时间维度变化
|
|
86
|
+
|
|
87
|
+
| type | 中文名称 | 必填字段 | 典型配置 | 生成效果 |
|
|
88
|
+
|------|---------|---------|---------|---------|
|
|
89
|
+
| `line` | 折线图 | `groupBy` (date 字段) + `interval` | `{ groupBy: "createdAt", interval: "month" }` | G2 折线图(时间趋势) |
|
|
90
|
+
| `area` | 面积图 | `groupBy` (date 字段) + `interval` | `{ groupBy: "createdAt", interval: "month" }` | G2 面积图(累计趋势) |
|
|
91
|
+
|
|
92
|
+
#### 分布类 — 交叉/密度分析
|
|
93
|
+
|
|
94
|
+
| type | 中文名称 | 必填字段 | 典型配置 | 生成效果 |
|
|
95
|
+
|------|---------|---------|---------|---------|
|
|
96
|
+
| `scatter` | 散点图 | `groupBy` | `{ groupBy: "subject" }` | G2 散点图(相关性/分布) |
|
|
97
|
+
| `heatmap` | 热力图 | `groupBy` + `crossGroupBy` | `{ groupBy: "subject", crossGroupBy: "grade" }` | G2 热力图(密度/交叉分析,颜色深浅表示数量) |
|
|
98
|
+
|
|
99
|
+
## 阶段 2:执行 generate dashboard
|
|
100
|
+
|
|
101
|
+
用户审查 `dashboard.config.json` 后,运行命令生成页面:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
loom generate dashboard <name>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
此命令会:
|
|
108
|
+
1. 读取并校验 `dashboard.config.json`
|
|
109
|
+
2. 验证引用的模型是否存在于 `loom.config.ts`
|
|
110
|
+
3. 生成 Dashboard TSX 页面(含 `useData` + `useChartData` + `DashboardChart`)
|
|
111
|
+
4. 自动接线 App.tsx(添加 import、navItem、switch case)
|
|
112
|
+
5. 检测 `@antv/g2` 是否已安装,未安装则提示
|
|
113
|
+
|
|
114
|
+
**前置依赖:** Dashboard 使用 @antv/g2 渲染图表,需在 frontend 目录安装:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
cd frontend && pnpm add @antv/g2
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## 完整配置示例
|
|
121
|
+
|
|
122
|
+
以小学生错题管理平台为例,展示所有 15 种图表的配置:
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"name": "overview",
|
|
127
|
+
"description": "错题数据概览",
|
|
128
|
+
"models": ["wrong_questions", "review_plans"],
|
|
129
|
+
"layout": [
|
|
130
|
+
{
|
|
131
|
+
"row": [
|
|
132
|
+
{ "type": "stat", "title": "错题总数", "model": "wrong_questions", "aggregate": "count", "span": 4 },
|
|
133
|
+
{ "type": "stat", "title": "掌握率", "model": "wrong_questions", "aggregate": "ratio", "filter": { "isMastered": true }, "span": 4 },
|
|
134
|
+
{ "type": "gauge", "title": "掌握率仪表盘", "model": "wrong_questions", "aggregate": "ratio", "filter": { "isMastered": true }, "span": 6 },
|
|
135
|
+
{ "type": "liquid", "title": "掌握率水波图", "model": "wrong_questions", "aggregate": "ratio", "filter": { "isMastered": true }, "span": 5 },
|
|
136
|
+
{ "type": "stat", "title": "平均复习次数", "model": "wrong_questions", "aggregate": "avg", "field": "reviewCount", "span": 5 }
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"row": [
|
|
141
|
+
{ "type": "pie", "title": "科目分布", "model": "wrong_questions", "groupBy": "subject", "span": 8 },
|
|
142
|
+
{ "type": "ring", "title": "难度分布", "model": "wrong_questions", "groupBy": "difficulty", "span": 8 },
|
|
143
|
+
{ "type": "bar", "title": "错误类型分布", "model": "wrong_questions", "groupBy": "errorType", "span": 8 }
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"row": [
|
|
148
|
+
{ "type": "line", "title": "错题录入趋势", "model": "wrong_questions", "groupBy": "createdAt", "interval": "month", "span": 12 },
|
|
149
|
+
{ "type": "area", "title": "复习计划趋势", "model": "review_plans", "groupBy": "createdAt", "interval": "month", "span": 12 }
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"row": [
|
|
154
|
+
{ "type": "radar", "title": "各科目概览", "model": "wrong_questions", "groupBy": "subject", "span": 8 },
|
|
155
|
+
{ "type": "stacked_bar", "title": "科目×错误类型", "model": "wrong_questions", "groupBy": "subject", "crossGroupBy": "errorType", "span": 8 },
|
|
156
|
+
{ "type": "grouped_bar", "title": "科目×难度", "model": "wrong_questions", "groupBy": "subject", "crossGroupBy": "difficulty", "span": 8 }
|
|
157
|
+
]
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"row": [
|
|
161
|
+
{ "type": "scatter", "title": "科目分布散点", "model": "wrong_questions", "groupBy": "subject", "span": 8 },
|
|
162
|
+
{ "type": "funnel", "title": "错误类型漏斗", "model": "wrong_questions", "groupBy": "errorType", "span": 8 },
|
|
163
|
+
{ "type": "treemap", "title": "科目×难度树图", "model": "wrong_questions", "groupBy": "subject", "crossGroupBy": "difficulty", "span": 8 }
|
|
164
|
+
]
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"row": [
|
|
168
|
+
{ "type": "heatmap", "title": "科目×年级热力图", "model": "wrong_questions", "groupBy": "subject", "crossGroupBy": "grade", "span": 24 }
|
|
169
|
+
]
|
|
170
|
+
}
|
|
171
|
+
]
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## 追加自定义图表
|
|
176
|
+
|
|
177
|
+
生成后的 Dashboard 页面是普通 TSX,可直接编辑追加图表:
|
|
178
|
+
|
|
179
|
+
1. 使用 `useChartData` / `useCrossGroupChartData` / `useTreemapChartData` 准备数据
|
|
180
|
+
2. 使用 `/antv-g2-chart` skill 生成 G2 v5 Spec 代码
|
|
181
|
+
3. 添加 `<DashboardChart spec={...} />` 组件
|
|
182
|
+
|
|
183
|
+
示例——追加一个科目×年级的堆叠柱状图:
|
|
184
|
+
|
|
185
|
+
```tsx
|
|
186
|
+
// 在已有的 Dashboard 页面中追加
|
|
187
|
+
const subjectGradeData = useCrossGroupChartData(wrongQuestionsList, { groupBy: 'subject', crossGroupBy: 'grade' });
|
|
188
|
+
|
|
189
|
+
<DashboardChart spec={{
|
|
190
|
+
type: 'interval',
|
|
191
|
+
data: subjectGradeData,
|
|
192
|
+
encode: { x: 'group', y: 'value', color: 'name' },
|
|
193
|
+
coordinate: { transform: [{ type: 'transpose' }] },
|
|
194
|
+
transform: [{ type: 'stackY' }],
|
|
195
|
+
}} />
|
|
196
|
+
```
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Data Model Reference
|
|
2
|
+
|
|
3
|
+
Advanced configuration for `loom.config.ts`. Full type definitions from `packages/core/src/types.ts`.
|
|
4
|
+
|
|
5
|
+
## FieldDefinition
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
{
|
|
9
|
+
name: 'status', // ^[a-zA-Z_][a-zA-Z0-9_]*$
|
|
10
|
+
type: 'string', // 'string' | 'number' | 'boolean' | 'date' | 'string[]' | 'number[]' | 'json'
|
|
11
|
+
required: true, // optional, default false
|
|
12
|
+
description: '...', // optional: shown in generated forms
|
|
13
|
+
default: 'active', // optional: auto-filled on write if not provided
|
|
14
|
+
enum: ['active', 'inactive', 'archived'], // optional: restrict string field to allowed values
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## ModelSchema
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
{
|
|
22
|
+
name: 'orders', // ^[a-zA-Z][a-zA-Z0-9_]*$, will be used as React component name
|
|
23
|
+
description: 'Order records', // optional: shown in generated page heading
|
|
24
|
+
fields: [...],
|
|
25
|
+
indexes?: [{ fields: ['userId', 'status'], unique: false }],
|
|
26
|
+
adapters?: { // optional: per-model adapter override
|
|
27
|
+
filesystem: { dir: 'orders', format: 'json' | 'yaml', datePattern: 'YYYY-MM' },
|
|
28
|
+
sqlite: { table: 'orders' },
|
|
29
|
+
},
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## AIButtonConfig
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
aiButtons: [{
|
|
37
|
+
id: 'summarize', // required: unique identifier
|
|
38
|
+
label: '总结', // required: button text
|
|
39
|
+
icon: 'FileTextOutlined', // optional: Ant Design icon component name
|
|
40
|
+
prompt: '请总结以下内容', // required: supports {{var}} placeholders, replaced with current row field values
|
|
41
|
+
placement: 'wrong_questions', // optional: limit to specific model pages, comma-separated; omit for all pages
|
|
42
|
+
}]
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## AIConfig
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
ai: {
|
|
49
|
+
engine: 'claude-code', // default 'claude-code'
|
|
50
|
+
claudeCode: {
|
|
51
|
+
path: '/usr/local/bin/claude', // optional: custom claude binary path
|
|
52
|
+
pluginRoot: '.claude', // optional: plugin root directory
|
|
53
|
+
timeout: 120000, // optional: command timeout in ms
|
|
54
|
+
skipPermissions: false, // optional: skip permission prompts
|
|
55
|
+
},
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## ServerConfig
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
server: {
|
|
63
|
+
port: 3000, // default 3000
|
|
64
|
+
host: '0.0.0.0',
|
|
65
|
+
cors: true, // default true
|
|
66
|
+
staticDir: './dist/frontend',
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## DataConfig
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
data: {
|
|
74
|
+
defaultAdapter: 'filesystem' | 'sqlite',
|
|
75
|
+
models: [...],
|
|
76
|
+
sqlite: { filename: 'loom.db' }, // optional, default 'loom.db'
|
|
77
|
+
}
|
|
78
|
+
```
|