@adminforth/agent 1.29.0 → 1.30.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/build.log
CHANGED
|
@@ -33,10 +33,12 @@ custom/incremark_code_renderers/renderIncremarkMarkdown.ts
|
|
|
33
33
|
custom/skills/
|
|
34
34
|
custom/skills/analyze_data/
|
|
35
35
|
custom/skills/analyze_data/SKILL.md
|
|
36
|
+
custom/skills/charts/
|
|
37
|
+
custom/skills/charts/SKILL.md
|
|
36
38
|
custom/skills/fetch_data/
|
|
37
39
|
custom/skills/fetch_data/SKILL.md
|
|
38
40
|
custom/skills/mutate_data/
|
|
39
41
|
custom/skills/mutate_data/SKILL.md
|
|
40
42
|
|
|
41
|
-
sent 208,
|
|
42
|
-
total size is
|
|
43
|
+
sent 208,510 bytes received 585 bytes 418,190.00 bytes/sec
|
|
44
|
+
total size is 206,100 speedup is 0.99
|
|
@@ -1,209 +1,22 @@
|
|
|
1
1
|
name: analyze_data
|
|
2
|
-
description: Analyze AdminForth resource data, summarize trends, and
|
|
2
|
+
description: Analyze AdminForth resource data, summarize trends, and compare distributions from fetched rows.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# Involved tools
|
|
6
6
|
|
|
7
7
|
Use `get_resource` first if you need to inspect resource structure and column names.
|
|
8
8
|
|
|
9
|
-
Use `
|
|
9
|
+
Use `aggregate` to fetch data for analytics whenever possible. This is the main tool for fast server-side aggregations, including filtered data, grouped metrics, and date buckets such as day, week, or month.
|
|
10
|
+
|
|
11
|
+
Use `get_resource_data` only when the requested analysis cannot be answered with `aggregate`. This is heavier because it returns original rows with all fields, but it allows complex calculations, comparisons, and custom groupings in-memory.
|
|
10
12
|
|
|
11
13
|
# Instructions
|
|
12
14
|
|
|
13
15
|
When the user asks for analytics, reports, trends, comparisons, or distributions:
|
|
14
16
|
|
|
15
|
-
- Fetch the requested data using `aggregate`
|
|
16
|
-
-
|
|
17
|
+
- Fetch the requested data using `aggregate` whenever possible.
|
|
18
|
+
- If it is not possible to get the required aggregates using `aggregate`, fetch the underlying rows with `get_resource_data`.
|
|
17
19
|
- Prefer narrow requests: use filters, sorting, pagination, and date ranges whenever possible.
|
|
18
20
|
- If the request is ambiguous, clarify the resource, metric, grouping, or date range before fetching data.
|
|
19
21
|
- Return a short written summary with the key finding and most important numbers.
|
|
20
|
-
- If a chart would help
|
|
21
|
-
|
|
22
|
-
# Charts
|
|
23
|
-
|
|
24
|
-
Use Vega-Lite syntax for charts.
|
|
25
|
-
|
|
26
|
-
Return every chart as valid JSON inside a `vega-lite` fenced code block.
|
|
27
|
-
|
|
28
|
-
Every chart spec should include:
|
|
29
|
-
- `title.text`
|
|
30
|
-
- `title.subtitle`
|
|
31
|
-
- explicit axis titles when axes are used
|
|
32
|
-
- tooltips for the key fields
|
|
33
|
-
|
|
34
|
-
### Line chart
|
|
35
|
-
|
|
36
|
-
```vega-lite
|
|
37
|
-
{
|
|
38
|
-
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
39
|
-
"title": {
|
|
40
|
-
"text": "Orders by Day",
|
|
41
|
-
"subtitle": "Daily order count for the selected date range"
|
|
42
|
-
},
|
|
43
|
-
"data": {
|
|
44
|
-
"values": [
|
|
45
|
-
{ "date": "2026-04-01", "orders": 18 },
|
|
46
|
-
{ "date": "2026-04-02", "orders": 25 },
|
|
47
|
-
{ "date": "2026-04-03", "orders": 21 },
|
|
48
|
-
{ "date": "2026-04-04", "orders": 29 }
|
|
49
|
-
]
|
|
50
|
-
},
|
|
51
|
-
"mark": { "type": "line", "point": true },
|
|
52
|
-
"encoding": {
|
|
53
|
-
"x": { "field": "date", "type": "temporal", "title": "Date" },
|
|
54
|
-
"y": { "field": "orders", "type": "quantitative", "title": "Orders" },
|
|
55
|
-
"tooltip": [
|
|
56
|
-
{ "field": "date", "type": "temporal", "title": "Date" },
|
|
57
|
-
{ "field": "orders", "type": "quantitative", "title": "Orders" }
|
|
58
|
-
]
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
### Bar chart
|
|
64
|
-
|
|
65
|
-
```vega-lite
|
|
66
|
-
{
|
|
67
|
-
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
68
|
-
"title": {
|
|
69
|
-
"text": "Revenue by Category",
|
|
70
|
-
"subtitle": "Top categories in the current filtered dataset"
|
|
71
|
-
},
|
|
72
|
-
"data": {
|
|
73
|
-
"values": [
|
|
74
|
-
{ "category": "Hardware", "revenue": 42000 },
|
|
75
|
-
{ "category": "Software", "revenue": 31500 },
|
|
76
|
-
{ "category": "Services", "revenue": 22750 }
|
|
77
|
-
]
|
|
78
|
-
},
|
|
79
|
-
"mark": "bar",
|
|
80
|
-
"encoding": {
|
|
81
|
-
"x": { "field": "category", "type": "nominal", "title": "Category", "sort": "-y" },
|
|
82
|
-
"y": { "field": "revenue", "type": "quantitative", "title": "Revenue" },
|
|
83
|
-
"tooltip": [
|
|
84
|
-
{ "field": "category", "type": "nominal", "title": "Category" },
|
|
85
|
-
{ "field": "revenue", "type": "quantitative", "title": "Revenue" }
|
|
86
|
-
]
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### Area chart
|
|
92
|
-
|
|
93
|
-
```vega-lite
|
|
94
|
-
{
|
|
95
|
-
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
96
|
-
"title": {
|
|
97
|
-
"text": "Monthly Signups",
|
|
98
|
-
"subtitle": "New users accumulated across the last six months"
|
|
99
|
-
},
|
|
100
|
-
"data": {
|
|
101
|
-
"values": [
|
|
102
|
-
{ "month": "2025-11-01", "signups": 120 },
|
|
103
|
-
{ "month": "2025-12-01", "signups": 155 },
|
|
104
|
-
{ "month": "2026-01-01", "signups": 168 },
|
|
105
|
-
{ "month": "2026-02-01", "signups": 190 },
|
|
106
|
-
{ "month": "2026-03-01", "signups": 214 },
|
|
107
|
-
{ "month": "2026-04-01", "signups": 238 }
|
|
108
|
-
]
|
|
109
|
-
},
|
|
110
|
-
"mark": { "type": "area", "line": true, "point": true },
|
|
111
|
-
"encoding": {
|
|
112
|
-
"x": { "field": "month", "type": "temporal", "title": "Month" },
|
|
113
|
-
"y": { "field": "signups", "type": "quantitative", "title": "Signups" },
|
|
114
|
-
"tooltip": [
|
|
115
|
-
{ "field": "month", "type": "temporal", "title": "Month" },
|
|
116
|
-
{ "field": "signups", "type": "quantitative", "title": "Signups" }
|
|
117
|
-
]
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Scatter plot
|
|
123
|
-
|
|
124
|
-
```vega-lite
|
|
125
|
-
{
|
|
126
|
-
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
127
|
-
"title": {
|
|
128
|
-
"text": "Ad Spend vs Revenue",
|
|
129
|
-
"subtitle": "Campaign-level correlation for the selected month"
|
|
130
|
-
},
|
|
131
|
-
"data": {
|
|
132
|
-
"values": [
|
|
133
|
-
{ "campaign": "Search", "spend": 1200, "revenue": 5400 },
|
|
134
|
-
{ "campaign": "Social", "spend": 900, "revenue": 3100 },
|
|
135
|
-
{ "campaign": "Email", "spend": 350, "revenue": 2200 },
|
|
136
|
-
{ "campaign": "Affiliates", "spend": 700, "revenue": 3600 }
|
|
137
|
-
]
|
|
138
|
-
},
|
|
139
|
-
"mark": { "type": "point", "filled": true, "size": 120 },
|
|
140
|
-
"encoding": {
|
|
141
|
-
"x": { "field": "spend", "type": "quantitative", "title": "Ad Spend" },
|
|
142
|
-
"y": { "field": "revenue", "type": "quantitative", "title": "Revenue" },
|
|
143
|
-
"tooltip": [
|
|
144
|
-
{ "field": "campaign", "type": "nominal", "title": "Campaign" },
|
|
145
|
-
{ "field": "spend", "type": "quantitative", "title": "Ad Spend" },
|
|
146
|
-
{ "field": "revenue", "type": "quantitative", "title": "Revenue" }
|
|
147
|
-
]
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
### Pie chart
|
|
153
|
-
|
|
154
|
-
```vega-lite
|
|
155
|
-
{
|
|
156
|
-
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
157
|
-
"title": {
|
|
158
|
-
"text": "Tickets by Status",
|
|
159
|
-
"subtitle": "Share of tickets in each workflow state"
|
|
160
|
-
},
|
|
161
|
-
"data": {
|
|
162
|
-
"values": [
|
|
163
|
-
{ "status": "Open", "count": 42 },
|
|
164
|
-
{ "status": "In Progress", "count": 27 },
|
|
165
|
-
{ "status": "Resolved", "count": 58 }
|
|
166
|
-
]
|
|
167
|
-
},
|
|
168
|
-
"mark": { "type": "arc", "innerRadius": 40 },
|
|
169
|
-
"encoding": {
|
|
170
|
-
"theta": { "field": "count", "type": "quantitative", "title": "Tickets" },
|
|
171
|
-
"color": { "field": "status", "type": "nominal", "title": "Status" },
|
|
172
|
-
"tooltip": [
|
|
173
|
-
{ "field": "status", "type": "nominal", "title": "Status" },
|
|
174
|
-
{ "field": "count", "type": "quantitative", "title": "Tickets" }
|
|
175
|
-
]
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
### Histogram
|
|
181
|
-
|
|
182
|
-
```vega-lite
|
|
183
|
-
{
|
|
184
|
-
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
185
|
-
"title": {
|
|
186
|
-
"text": "Order Value Distribution",
|
|
187
|
-
"subtitle": "Histogram of order totals in the filtered result set"
|
|
188
|
-
},
|
|
189
|
-
"data": {
|
|
190
|
-
"values": [
|
|
191
|
-
{ "order_total": 24 },
|
|
192
|
-
{ "order_total": 31 },
|
|
193
|
-
{ "order_total": 39 },
|
|
194
|
-
{ "order_total": 42 },
|
|
195
|
-
{ "order_total": 63 },
|
|
196
|
-
{ "order_total": 78 },
|
|
197
|
-
{ "order_total": 95 }
|
|
198
|
-
]
|
|
199
|
-
},
|
|
200
|
-
"mark": "bar",
|
|
201
|
-
"encoding": {
|
|
202
|
-
"x": { "bin": true, "field": "order_total", "type": "quantitative", "title": "Order Total" },
|
|
203
|
-
"y": { "aggregate": "count", "type": "quantitative", "title": "Count" },
|
|
204
|
-
"tooltip": [
|
|
205
|
-
{ "aggregate": "count", "type": "quantitative", "title": "Count" }
|
|
206
|
-
]
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
```
|
|
22
|
+
- If the user asks for a chart, or if a chart would help and you decide to produce one, invoke the `charts` skill for chart formatting and Vega-Lite requirements.
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
name: charts
|
|
2
|
+
description: Create Vega-Lite chart specs for AdminForth analytics responses. Always use this skill when the user asks for a chart or when a chart would help illustrate the insights from an analytics query.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Instructions
|
|
6
|
+
|
|
7
|
+
Use Vega-Lite syntax for charts.
|
|
8
|
+
|
|
9
|
+
Return every chart as valid JSON inside a `vega-lite` fenced code block.
|
|
10
|
+
|
|
11
|
+
Every chart spec should include:
|
|
12
|
+
|
|
13
|
+
- `title.text`
|
|
14
|
+
- `title.subtitle`
|
|
15
|
+
- explicit axis titles when axes are used
|
|
16
|
+
- tooltips for the key fields
|
|
17
|
+
|
|
18
|
+
### Line chart
|
|
19
|
+
|
|
20
|
+
```vega-lite
|
|
21
|
+
{
|
|
22
|
+
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
23
|
+
"title": {
|
|
24
|
+
"text": "Orders by Day",
|
|
25
|
+
"subtitle": "Daily order count for the selected date range"
|
|
26
|
+
},
|
|
27
|
+
"data": {
|
|
28
|
+
"values": [
|
|
29
|
+
{ "date": "2026-04-01", "orders": 18 },
|
|
30
|
+
{ "date": "2026-04-02", "orders": 25 },
|
|
31
|
+
{ "date": "2026-04-03", "orders": 21 },
|
|
32
|
+
{ "date": "2026-04-04", "orders": 29 }
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"mark": { "type": "line", "point": true },
|
|
36
|
+
"encoding": {
|
|
37
|
+
"x": { "field": "date", "type": "temporal", "title": "Date" },
|
|
38
|
+
"y": { "field": "orders", "type": "quantitative", "title": "Orders" },
|
|
39
|
+
"tooltip": [
|
|
40
|
+
{ "field": "date", "type": "temporal", "title": "Date" },
|
|
41
|
+
{ "field": "orders", "type": "quantitative", "title": "Orders" }
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Bar chart
|
|
48
|
+
|
|
49
|
+
```vega-lite
|
|
50
|
+
{
|
|
51
|
+
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
52
|
+
"title": {
|
|
53
|
+
"text": "Revenue by Category",
|
|
54
|
+
"subtitle": "Top categories in the current filtered dataset"
|
|
55
|
+
},
|
|
56
|
+
"data": {
|
|
57
|
+
"values": [
|
|
58
|
+
{ "category": "Hardware", "revenue": 42000 },
|
|
59
|
+
{ "category": "Software", "revenue": 31500 },
|
|
60
|
+
{ "category": "Services", "revenue": 22750 }
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
"mark": "bar",
|
|
64
|
+
"encoding": {
|
|
65
|
+
"x": { "field": "category", "type": "nominal", "title": "Category", "sort": "-y" },
|
|
66
|
+
"y": { "field": "revenue", "type": "quantitative", "title": "Revenue" },
|
|
67
|
+
"tooltip": [
|
|
68
|
+
{ "field": "category", "type": "nominal", "title": "Category" },
|
|
69
|
+
{ "field": "revenue", "type": "quantitative", "title": "Revenue" }
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Area chart
|
|
76
|
+
|
|
77
|
+
```vega-lite
|
|
78
|
+
{
|
|
79
|
+
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
80
|
+
"title": {
|
|
81
|
+
"text": "Monthly Signups",
|
|
82
|
+
"subtitle": "New users accumulated across the last six months"
|
|
83
|
+
},
|
|
84
|
+
"data": {
|
|
85
|
+
"values": [
|
|
86
|
+
{ "month": "2025-11-01", "signups": 120 },
|
|
87
|
+
{ "month": "2025-12-01", "signups": 155 },
|
|
88
|
+
{ "month": "2026-01-01", "signups": 168 },
|
|
89
|
+
{ "month": "2026-02-01", "signups": 190 },
|
|
90
|
+
{ "month": "2026-03-01", "signups": 214 },
|
|
91
|
+
{ "month": "2026-04-01", "signups": 238 }
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
"mark": { "type": "area", "line": true, "point": true },
|
|
95
|
+
"encoding": {
|
|
96
|
+
"x": { "field": "month", "type": "temporal", "title": "Month" },
|
|
97
|
+
"y": { "field": "signups", "type": "quantitative", "title": "Signups" },
|
|
98
|
+
"tooltip": [
|
|
99
|
+
{ "field": "month", "type": "temporal", "title": "Month" },
|
|
100
|
+
{ "field": "signups", "type": "quantitative", "title": "Signups" }
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Scatter plot
|
|
107
|
+
|
|
108
|
+
```vega-lite
|
|
109
|
+
{
|
|
110
|
+
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
111
|
+
"title": {
|
|
112
|
+
"text": "Ad Spend vs Revenue",
|
|
113
|
+
"subtitle": "Campaign-level correlation for the selected month"
|
|
114
|
+
},
|
|
115
|
+
"data": {
|
|
116
|
+
"values": [
|
|
117
|
+
{ "campaign": "Search", "spend": 1200, "revenue": 5400 },
|
|
118
|
+
{ "campaign": "Social", "spend": 900, "revenue": 3100 },
|
|
119
|
+
{ "campaign": "Email", "spend": 350, "revenue": 2200 },
|
|
120
|
+
{ "campaign": "Affiliates", "spend": 700, "revenue": 3600 }
|
|
121
|
+
]
|
|
122
|
+
},
|
|
123
|
+
"mark": { "type": "point", "filled": true, "size": 120 },
|
|
124
|
+
"encoding": {
|
|
125
|
+
"x": { "field": "spend", "type": "quantitative", "title": "Ad Spend" },
|
|
126
|
+
"y": { "field": "revenue", "type": "quantitative", "title": "Revenue" },
|
|
127
|
+
"tooltip": [
|
|
128
|
+
{ "field": "campaign", "type": "nominal", "title": "Campaign" },
|
|
129
|
+
{ "field": "spend", "type": "quantitative", "title": "Ad Spend" },
|
|
130
|
+
{ "field": "revenue", "type": "quantitative", "title": "Revenue" }
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Pie chart
|
|
137
|
+
|
|
138
|
+
```vega-lite
|
|
139
|
+
{
|
|
140
|
+
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
141
|
+
"title": {
|
|
142
|
+
"text": "Tickets by Status",
|
|
143
|
+
"subtitle": "Share of tickets in each workflow state"
|
|
144
|
+
},
|
|
145
|
+
"data": {
|
|
146
|
+
"values": [
|
|
147
|
+
{ "status": "Open", "count": 42 },
|
|
148
|
+
{ "status": "In Progress", "count": 27 },
|
|
149
|
+
{ "status": "Resolved", "count": 58 }
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
"mark": { "type": "arc", "innerRadius": 40 },
|
|
153
|
+
"encoding": {
|
|
154
|
+
"theta": { "field": "count", "type": "quantitative", "title": "Tickets" },
|
|
155
|
+
"color": { "field": "status", "type": "nominal", "title": "Status" },
|
|
156
|
+
"tooltip": [
|
|
157
|
+
{ "field": "status", "type": "nominal", "title": "Status" },
|
|
158
|
+
{ "field": "count", "type": "quantitative", "title": "Tickets" }
|
|
159
|
+
]
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Histogram
|
|
165
|
+
|
|
166
|
+
```vega-lite
|
|
167
|
+
{
|
|
168
|
+
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
169
|
+
"title": {
|
|
170
|
+
"text": "Order Value Distribution",
|
|
171
|
+
"subtitle": "Histogram of order totals in the filtered result set"
|
|
172
|
+
},
|
|
173
|
+
"data": {
|
|
174
|
+
"values": [
|
|
175
|
+
{ "order_total": 24 },
|
|
176
|
+
{ "order_total": 31 },
|
|
177
|
+
{ "order_total": 39 },
|
|
178
|
+
{ "order_total": 42 },
|
|
179
|
+
{ "order_total": 63 },
|
|
180
|
+
{ "order_total": 78 },
|
|
181
|
+
{ "order_total": 95 }
|
|
182
|
+
]
|
|
183
|
+
},
|
|
184
|
+
"mark": "bar",
|
|
185
|
+
"encoding": {
|
|
186
|
+
"x": { "bin": true, "field": "order_total", "type": "quantitative", "title": "Order Total" },
|
|
187
|
+
"y": { "aggregate": "count", "type": "quantitative", "title": "Count" },
|
|
188
|
+
"tooltip": [
|
|
189
|
+
{ "aggregate": "count", "type": "quantitative", "title": "Count" }
|
|
190
|
+
]
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
```
|
|
@@ -1,209 +1,22 @@
|
|
|
1
1
|
name: analyze_data
|
|
2
|
-
description: Analyze AdminForth resource data, summarize trends, and
|
|
2
|
+
description: Analyze AdminForth resource data, summarize trends, and compare distributions from fetched rows.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# Involved tools
|
|
6
6
|
|
|
7
7
|
Use `get_resource` first if you need to inspect resource structure and column names.
|
|
8
8
|
|
|
9
|
-
Use `
|
|
9
|
+
Use `aggregate` to fetch data for analytics whenever possible. This is the main tool for fast server-side aggregations, including filtered data, grouped metrics, and date buckets such as day, week, or month.
|
|
10
|
+
|
|
11
|
+
Use `get_resource_data` only when the requested analysis cannot be answered with `aggregate`. This is heavier because it returns original rows with all fields, but it allows complex calculations, comparisons, and custom groupings in-memory.
|
|
10
12
|
|
|
11
13
|
# Instructions
|
|
12
14
|
|
|
13
15
|
When the user asks for analytics, reports, trends, comparisons, or distributions:
|
|
14
16
|
|
|
15
|
-
- Fetch the requested data using `aggregate`
|
|
16
|
-
-
|
|
17
|
+
- Fetch the requested data using `aggregate` whenever possible.
|
|
18
|
+
- If it is not possible to get the required aggregates using `aggregate`, fetch the underlying rows with `get_resource_data`.
|
|
17
19
|
- Prefer narrow requests: use filters, sorting, pagination, and date ranges whenever possible.
|
|
18
20
|
- If the request is ambiguous, clarify the resource, metric, grouping, or date range before fetching data.
|
|
19
21
|
- Return a short written summary with the key finding and most important numbers.
|
|
20
|
-
- If a chart would help
|
|
21
|
-
|
|
22
|
-
# Charts
|
|
23
|
-
|
|
24
|
-
Use Vega-Lite syntax for charts.
|
|
25
|
-
|
|
26
|
-
Return every chart as valid JSON inside a `vega-lite` fenced code block.
|
|
27
|
-
|
|
28
|
-
Every chart spec should include:
|
|
29
|
-
- `title.text`
|
|
30
|
-
- `title.subtitle`
|
|
31
|
-
- explicit axis titles when axes are used
|
|
32
|
-
- tooltips for the key fields
|
|
33
|
-
|
|
34
|
-
### Line chart
|
|
35
|
-
|
|
36
|
-
```vega-lite
|
|
37
|
-
{
|
|
38
|
-
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
39
|
-
"title": {
|
|
40
|
-
"text": "Orders by Day",
|
|
41
|
-
"subtitle": "Daily order count for the selected date range"
|
|
42
|
-
},
|
|
43
|
-
"data": {
|
|
44
|
-
"values": [
|
|
45
|
-
{ "date": "2026-04-01", "orders": 18 },
|
|
46
|
-
{ "date": "2026-04-02", "orders": 25 },
|
|
47
|
-
{ "date": "2026-04-03", "orders": 21 },
|
|
48
|
-
{ "date": "2026-04-04", "orders": 29 }
|
|
49
|
-
]
|
|
50
|
-
},
|
|
51
|
-
"mark": { "type": "line", "point": true },
|
|
52
|
-
"encoding": {
|
|
53
|
-
"x": { "field": "date", "type": "temporal", "title": "Date" },
|
|
54
|
-
"y": { "field": "orders", "type": "quantitative", "title": "Orders" },
|
|
55
|
-
"tooltip": [
|
|
56
|
-
{ "field": "date", "type": "temporal", "title": "Date" },
|
|
57
|
-
{ "field": "orders", "type": "quantitative", "title": "Orders" }
|
|
58
|
-
]
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
### Bar chart
|
|
64
|
-
|
|
65
|
-
```vega-lite
|
|
66
|
-
{
|
|
67
|
-
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
68
|
-
"title": {
|
|
69
|
-
"text": "Revenue by Category",
|
|
70
|
-
"subtitle": "Top categories in the current filtered dataset"
|
|
71
|
-
},
|
|
72
|
-
"data": {
|
|
73
|
-
"values": [
|
|
74
|
-
{ "category": "Hardware", "revenue": 42000 },
|
|
75
|
-
{ "category": "Software", "revenue": 31500 },
|
|
76
|
-
{ "category": "Services", "revenue": 22750 }
|
|
77
|
-
]
|
|
78
|
-
},
|
|
79
|
-
"mark": "bar",
|
|
80
|
-
"encoding": {
|
|
81
|
-
"x": { "field": "category", "type": "nominal", "title": "Category", "sort": "-y" },
|
|
82
|
-
"y": { "field": "revenue", "type": "quantitative", "title": "Revenue" },
|
|
83
|
-
"tooltip": [
|
|
84
|
-
{ "field": "category", "type": "nominal", "title": "Category" },
|
|
85
|
-
{ "field": "revenue", "type": "quantitative", "title": "Revenue" }
|
|
86
|
-
]
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### Area chart
|
|
92
|
-
|
|
93
|
-
```vega-lite
|
|
94
|
-
{
|
|
95
|
-
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
96
|
-
"title": {
|
|
97
|
-
"text": "Monthly Signups",
|
|
98
|
-
"subtitle": "New users accumulated across the last six months"
|
|
99
|
-
},
|
|
100
|
-
"data": {
|
|
101
|
-
"values": [
|
|
102
|
-
{ "month": "2025-11-01", "signups": 120 },
|
|
103
|
-
{ "month": "2025-12-01", "signups": 155 },
|
|
104
|
-
{ "month": "2026-01-01", "signups": 168 },
|
|
105
|
-
{ "month": "2026-02-01", "signups": 190 },
|
|
106
|
-
{ "month": "2026-03-01", "signups": 214 },
|
|
107
|
-
{ "month": "2026-04-01", "signups": 238 }
|
|
108
|
-
]
|
|
109
|
-
},
|
|
110
|
-
"mark": { "type": "area", "line": true, "point": true },
|
|
111
|
-
"encoding": {
|
|
112
|
-
"x": { "field": "month", "type": "temporal", "title": "Month" },
|
|
113
|
-
"y": { "field": "signups", "type": "quantitative", "title": "Signups" },
|
|
114
|
-
"tooltip": [
|
|
115
|
-
{ "field": "month", "type": "temporal", "title": "Month" },
|
|
116
|
-
{ "field": "signups", "type": "quantitative", "title": "Signups" }
|
|
117
|
-
]
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Scatter plot
|
|
123
|
-
|
|
124
|
-
```vega-lite
|
|
125
|
-
{
|
|
126
|
-
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
127
|
-
"title": {
|
|
128
|
-
"text": "Ad Spend vs Revenue",
|
|
129
|
-
"subtitle": "Campaign-level correlation for the selected month"
|
|
130
|
-
},
|
|
131
|
-
"data": {
|
|
132
|
-
"values": [
|
|
133
|
-
{ "campaign": "Search", "spend": 1200, "revenue": 5400 },
|
|
134
|
-
{ "campaign": "Social", "spend": 900, "revenue": 3100 },
|
|
135
|
-
{ "campaign": "Email", "spend": 350, "revenue": 2200 },
|
|
136
|
-
{ "campaign": "Affiliates", "spend": 700, "revenue": 3600 }
|
|
137
|
-
]
|
|
138
|
-
},
|
|
139
|
-
"mark": { "type": "point", "filled": true, "size": 120 },
|
|
140
|
-
"encoding": {
|
|
141
|
-
"x": { "field": "spend", "type": "quantitative", "title": "Ad Spend" },
|
|
142
|
-
"y": { "field": "revenue", "type": "quantitative", "title": "Revenue" },
|
|
143
|
-
"tooltip": [
|
|
144
|
-
{ "field": "campaign", "type": "nominal", "title": "Campaign" },
|
|
145
|
-
{ "field": "spend", "type": "quantitative", "title": "Ad Spend" },
|
|
146
|
-
{ "field": "revenue", "type": "quantitative", "title": "Revenue" }
|
|
147
|
-
]
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
### Pie chart
|
|
153
|
-
|
|
154
|
-
```vega-lite
|
|
155
|
-
{
|
|
156
|
-
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
157
|
-
"title": {
|
|
158
|
-
"text": "Tickets by Status",
|
|
159
|
-
"subtitle": "Share of tickets in each workflow state"
|
|
160
|
-
},
|
|
161
|
-
"data": {
|
|
162
|
-
"values": [
|
|
163
|
-
{ "status": "Open", "count": 42 },
|
|
164
|
-
{ "status": "In Progress", "count": 27 },
|
|
165
|
-
{ "status": "Resolved", "count": 58 }
|
|
166
|
-
]
|
|
167
|
-
},
|
|
168
|
-
"mark": { "type": "arc", "innerRadius": 40 },
|
|
169
|
-
"encoding": {
|
|
170
|
-
"theta": { "field": "count", "type": "quantitative", "title": "Tickets" },
|
|
171
|
-
"color": { "field": "status", "type": "nominal", "title": "Status" },
|
|
172
|
-
"tooltip": [
|
|
173
|
-
{ "field": "status", "type": "nominal", "title": "Status" },
|
|
174
|
-
{ "field": "count", "type": "quantitative", "title": "Tickets" }
|
|
175
|
-
]
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
### Histogram
|
|
181
|
-
|
|
182
|
-
```vega-lite
|
|
183
|
-
{
|
|
184
|
-
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
185
|
-
"title": {
|
|
186
|
-
"text": "Order Value Distribution",
|
|
187
|
-
"subtitle": "Histogram of order totals in the filtered result set"
|
|
188
|
-
},
|
|
189
|
-
"data": {
|
|
190
|
-
"values": [
|
|
191
|
-
{ "order_total": 24 },
|
|
192
|
-
{ "order_total": 31 },
|
|
193
|
-
{ "order_total": 39 },
|
|
194
|
-
{ "order_total": 42 },
|
|
195
|
-
{ "order_total": 63 },
|
|
196
|
-
{ "order_total": 78 },
|
|
197
|
-
{ "order_total": 95 }
|
|
198
|
-
]
|
|
199
|
-
},
|
|
200
|
-
"mark": "bar",
|
|
201
|
-
"encoding": {
|
|
202
|
-
"x": { "bin": true, "field": "order_total", "type": "quantitative", "title": "Order Total" },
|
|
203
|
-
"y": { "aggregate": "count", "type": "quantitative", "title": "Count" },
|
|
204
|
-
"tooltip": [
|
|
205
|
-
{ "aggregate": "count", "type": "quantitative", "title": "Count" }
|
|
206
|
-
]
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
```
|
|
22
|
+
- If the user asks for a chart, or if a chart would help and you decide to produce one, invoke the `charts` skill for chart formatting and Vega-Lite requirements.
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
name: charts
|
|
2
|
+
description: Create Vega-Lite chart specs for AdminForth analytics responses. Always use this skill when the user asks for a chart or when a chart would help illustrate the insights from an analytics query.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Instructions
|
|
6
|
+
|
|
7
|
+
Use Vega-Lite syntax for charts.
|
|
8
|
+
|
|
9
|
+
Return every chart as valid JSON inside a `vega-lite` fenced code block.
|
|
10
|
+
|
|
11
|
+
Every chart spec should include:
|
|
12
|
+
|
|
13
|
+
- `title.text`
|
|
14
|
+
- `title.subtitle`
|
|
15
|
+
- explicit axis titles when axes are used
|
|
16
|
+
- tooltips for the key fields
|
|
17
|
+
|
|
18
|
+
### Line chart
|
|
19
|
+
|
|
20
|
+
```vega-lite
|
|
21
|
+
{
|
|
22
|
+
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
23
|
+
"title": {
|
|
24
|
+
"text": "Orders by Day",
|
|
25
|
+
"subtitle": "Daily order count for the selected date range"
|
|
26
|
+
},
|
|
27
|
+
"data": {
|
|
28
|
+
"values": [
|
|
29
|
+
{ "date": "2026-04-01", "orders": 18 },
|
|
30
|
+
{ "date": "2026-04-02", "orders": 25 },
|
|
31
|
+
{ "date": "2026-04-03", "orders": 21 },
|
|
32
|
+
{ "date": "2026-04-04", "orders": 29 }
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"mark": { "type": "line", "point": true },
|
|
36
|
+
"encoding": {
|
|
37
|
+
"x": { "field": "date", "type": "temporal", "title": "Date" },
|
|
38
|
+
"y": { "field": "orders", "type": "quantitative", "title": "Orders" },
|
|
39
|
+
"tooltip": [
|
|
40
|
+
{ "field": "date", "type": "temporal", "title": "Date" },
|
|
41
|
+
{ "field": "orders", "type": "quantitative", "title": "Orders" }
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Bar chart
|
|
48
|
+
|
|
49
|
+
```vega-lite
|
|
50
|
+
{
|
|
51
|
+
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
52
|
+
"title": {
|
|
53
|
+
"text": "Revenue by Category",
|
|
54
|
+
"subtitle": "Top categories in the current filtered dataset"
|
|
55
|
+
},
|
|
56
|
+
"data": {
|
|
57
|
+
"values": [
|
|
58
|
+
{ "category": "Hardware", "revenue": 42000 },
|
|
59
|
+
{ "category": "Software", "revenue": 31500 },
|
|
60
|
+
{ "category": "Services", "revenue": 22750 }
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
"mark": "bar",
|
|
64
|
+
"encoding": {
|
|
65
|
+
"x": { "field": "category", "type": "nominal", "title": "Category", "sort": "-y" },
|
|
66
|
+
"y": { "field": "revenue", "type": "quantitative", "title": "Revenue" },
|
|
67
|
+
"tooltip": [
|
|
68
|
+
{ "field": "category", "type": "nominal", "title": "Category" },
|
|
69
|
+
{ "field": "revenue", "type": "quantitative", "title": "Revenue" }
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Area chart
|
|
76
|
+
|
|
77
|
+
```vega-lite
|
|
78
|
+
{
|
|
79
|
+
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
80
|
+
"title": {
|
|
81
|
+
"text": "Monthly Signups",
|
|
82
|
+
"subtitle": "New users accumulated across the last six months"
|
|
83
|
+
},
|
|
84
|
+
"data": {
|
|
85
|
+
"values": [
|
|
86
|
+
{ "month": "2025-11-01", "signups": 120 },
|
|
87
|
+
{ "month": "2025-12-01", "signups": 155 },
|
|
88
|
+
{ "month": "2026-01-01", "signups": 168 },
|
|
89
|
+
{ "month": "2026-02-01", "signups": 190 },
|
|
90
|
+
{ "month": "2026-03-01", "signups": 214 },
|
|
91
|
+
{ "month": "2026-04-01", "signups": 238 }
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
"mark": { "type": "area", "line": true, "point": true },
|
|
95
|
+
"encoding": {
|
|
96
|
+
"x": { "field": "month", "type": "temporal", "title": "Month" },
|
|
97
|
+
"y": { "field": "signups", "type": "quantitative", "title": "Signups" },
|
|
98
|
+
"tooltip": [
|
|
99
|
+
{ "field": "month", "type": "temporal", "title": "Month" },
|
|
100
|
+
{ "field": "signups", "type": "quantitative", "title": "Signups" }
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Scatter plot
|
|
107
|
+
|
|
108
|
+
```vega-lite
|
|
109
|
+
{
|
|
110
|
+
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
111
|
+
"title": {
|
|
112
|
+
"text": "Ad Spend vs Revenue",
|
|
113
|
+
"subtitle": "Campaign-level correlation for the selected month"
|
|
114
|
+
},
|
|
115
|
+
"data": {
|
|
116
|
+
"values": [
|
|
117
|
+
{ "campaign": "Search", "spend": 1200, "revenue": 5400 },
|
|
118
|
+
{ "campaign": "Social", "spend": 900, "revenue": 3100 },
|
|
119
|
+
{ "campaign": "Email", "spend": 350, "revenue": 2200 },
|
|
120
|
+
{ "campaign": "Affiliates", "spend": 700, "revenue": 3600 }
|
|
121
|
+
]
|
|
122
|
+
},
|
|
123
|
+
"mark": { "type": "point", "filled": true, "size": 120 },
|
|
124
|
+
"encoding": {
|
|
125
|
+
"x": { "field": "spend", "type": "quantitative", "title": "Ad Spend" },
|
|
126
|
+
"y": { "field": "revenue", "type": "quantitative", "title": "Revenue" },
|
|
127
|
+
"tooltip": [
|
|
128
|
+
{ "field": "campaign", "type": "nominal", "title": "Campaign" },
|
|
129
|
+
{ "field": "spend", "type": "quantitative", "title": "Ad Spend" },
|
|
130
|
+
{ "field": "revenue", "type": "quantitative", "title": "Revenue" }
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Pie chart
|
|
137
|
+
|
|
138
|
+
```vega-lite
|
|
139
|
+
{
|
|
140
|
+
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
141
|
+
"title": {
|
|
142
|
+
"text": "Tickets by Status",
|
|
143
|
+
"subtitle": "Share of tickets in each workflow state"
|
|
144
|
+
},
|
|
145
|
+
"data": {
|
|
146
|
+
"values": [
|
|
147
|
+
{ "status": "Open", "count": 42 },
|
|
148
|
+
{ "status": "In Progress", "count": 27 },
|
|
149
|
+
{ "status": "Resolved", "count": 58 }
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
"mark": { "type": "arc", "innerRadius": 40 },
|
|
153
|
+
"encoding": {
|
|
154
|
+
"theta": { "field": "count", "type": "quantitative", "title": "Tickets" },
|
|
155
|
+
"color": { "field": "status", "type": "nominal", "title": "Status" },
|
|
156
|
+
"tooltip": [
|
|
157
|
+
{ "field": "status", "type": "nominal", "title": "Status" },
|
|
158
|
+
{ "field": "count", "type": "quantitative", "title": "Tickets" }
|
|
159
|
+
]
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Histogram
|
|
165
|
+
|
|
166
|
+
```vega-lite
|
|
167
|
+
{
|
|
168
|
+
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
|
|
169
|
+
"title": {
|
|
170
|
+
"text": "Order Value Distribution",
|
|
171
|
+
"subtitle": "Histogram of order totals in the filtered result set"
|
|
172
|
+
},
|
|
173
|
+
"data": {
|
|
174
|
+
"values": [
|
|
175
|
+
{ "order_total": 24 },
|
|
176
|
+
{ "order_total": 31 },
|
|
177
|
+
{ "order_total": 39 },
|
|
178
|
+
{ "order_total": 42 },
|
|
179
|
+
{ "order_total": 63 },
|
|
180
|
+
{ "order_total": 78 },
|
|
181
|
+
{ "order_total": 95 }
|
|
182
|
+
]
|
|
183
|
+
},
|
|
184
|
+
"mark": "bar",
|
|
185
|
+
"encoding": {
|
|
186
|
+
"x": { "bin": true, "field": "order_total", "type": "quantitative", "title": "Order Total" },
|
|
187
|
+
"y": { "aggregate": "count", "type": "quantitative", "title": "Count" },
|
|
188
|
+
"tooltip": [
|
|
189
|
+
{ "aggregate": "count", "type": "quantitative", "title": "Count" }
|
|
190
|
+
]
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
```
|