@graphit/cli 0.1.5 → 0.1.6
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/dist/commands/kb.js +193 -9
- package/dist/commands/kb.js.map +1 -1
- package/package.json +1 -1
- package/skills/graphit/SKILL.md +84 -8
- package/skills/graphit/cursor/graphit-kb-actions.mdc +101 -0
- package/skills/graphit/cursor/graphit-kb-awareness.mdc +88 -0
- package/skills/graphit/cursor/graphit-kb-explanation.mdc +56 -0
- package/skills/graphit/cursor/graphit-kb-exploration.mdc +7 -13
- package/skills/graphit/cursor/graphit-kb-graph-structure.mdc +61 -0
- package/skills/graphit/cursor/graphit-kb-traversal.mdc +64 -0
- package/skills/graphit/cursor/graphit-parameterized-metrics.mdc +95 -0
- package/skills/graphit/graphit.mdc +12 -1
- package/skills/graphit/references/kb-actions.md +95 -0
- package/skills/graphit/references/kb-awareness.md +82 -0
- package/skills/graphit/references/kb-explanation.md +50 -0
- package/skills/graphit/references/kb-exploration.md +7 -13
- package/skills/graphit/references/kb-graph-structure.md +55 -0
- package/skills/graphit/references/kb-traversal.md +58 -0
- package/skills/graphit/references/parameterized-metrics.md +89 -0
package/dist/commands/kb.js
CHANGED
|
@@ -6,9 +6,11 @@ const ENTITY_COLUMNS = {
|
|
|
6
6
|
dimension: ["id", "name", "description", "expression", "verified"],
|
|
7
7
|
table: ["id", "name", "description", "verified"],
|
|
8
8
|
rule: ["id", "name", "description", "verified"],
|
|
9
|
-
domain: ["id", "name", "description"],
|
|
10
|
-
synonym: ["id", "
|
|
9
|
+
domain: ["id", "name", "description", "color"],
|
|
10
|
+
synonym: ["id", "term", "canonical", "canonical_type", "description"],
|
|
11
11
|
template: ["id", "name", "description", "chart_types"],
|
|
12
|
+
relationship: ["id", "name", "primary_table", "primary_column", "description"],
|
|
13
|
+
topic: ["id", "name", "description", "verified"],
|
|
12
14
|
};
|
|
13
15
|
export function registerKBCommands(program) {
|
|
14
16
|
const kb = program.command("kb").description("Knowledge Base operations");
|
|
@@ -80,14 +82,17 @@ export function registerKBCommands(program) {
|
|
|
80
82
|
.requiredOption("--sql <expr>", "SQL calculation expression")
|
|
81
83
|
.requiredOption("--table <table>", "Primary table")
|
|
82
84
|
.option("--description <desc>", "Description", "")
|
|
85
|
+
.option("--topics <topics>", "Comma-separated topic names")
|
|
83
86
|
.action(async function () {
|
|
84
87
|
try {
|
|
85
88
|
const opts = this.opts();
|
|
89
|
+
const topics = opts.topics ? opts.topics.split(",").map((s) => s.trim()).filter(Boolean) : [];
|
|
86
90
|
const resp = await apiClient.post("/api/v1/cli/kb/metric", {
|
|
87
91
|
name: opts.name,
|
|
88
92
|
calculation: opts.sql,
|
|
89
93
|
table: opts.table,
|
|
90
94
|
description: opts.description,
|
|
95
|
+
topics,
|
|
91
96
|
});
|
|
92
97
|
output(this, resp.entity, { keyValue: true });
|
|
93
98
|
}
|
|
@@ -103,15 +108,18 @@ export function registerKBCommands(program) {
|
|
|
103
108
|
.requiredOption("--table <table>", "Primary table")
|
|
104
109
|
.option("--type <type>", "Dimension type", "categorical")
|
|
105
110
|
.option("--description <desc>", "Description", "")
|
|
111
|
+
.option("--topics <topics>", "Comma-separated topic names")
|
|
106
112
|
.action(async function () {
|
|
107
113
|
try {
|
|
108
114
|
const opts = this.opts();
|
|
115
|
+
const topics = opts.topics ? opts.topics.split(",").map((s) => s.trim()).filter(Boolean) : [];
|
|
109
116
|
const resp = await apiClient.post("/api/v1/cli/kb/dimension", {
|
|
110
117
|
name: opts.name,
|
|
111
118
|
expression: opts.expr,
|
|
112
119
|
table: opts.table,
|
|
113
120
|
type: opts.type,
|
|
114
121
|
description: opts.description,
|
|
122
|
+
topics,
|
|
115
123
|
});
|
|
116
124
|
output(this, resp.entity, { keyValue: true });
|
|
117
125
|
}
|
|
@@ -126,14 +134,17 @@ export function registerKBCommands(program) {
|
|
|
126
134
|
.requiredOption("--sql <expr>", "Rule content/SQL")
|
|
127
135
|
.requiredOption("--table <table>", "Referenced table")
|
|
128
136
|
.option("--description <desc>", "Description", "")
|
|
137
|
+
.option("--topics <topics>", "Comma-separated topic names")
|
|
129
138
|
.action(async function () {
|
|
130
139
|
try {
|
|
131
140
|
const opts = this.opts();
|
|
141
|
+
const topics = opts.topics ? opts.topics.split(",").map((s) => s.trim()).filter(Boolean) : [];
|
|
132
142
|
const resp = await apiClient.post("/api/v1/cli/kb/rule", {
|
|
133
143
|
name: opts.name,
|
|
134
144
|
content: opts.sql,
|
|
135
145
|
table: opts.table,
|
|
136
146
|
description: opts.description,
|
|
147
|
+
topics,
|
|
137
148
|
});
|
|
138
149
|
output(this, resp.entity, { keyValue: true });
|
|
139
150
|
}
|
|
@@ -152,12 +163,89 @@ export function registerKBCommands(program) {
|
|
|
152
163
|
});
|
|
153
164
|
create
|
|
154
165
|
.command("domain")
|
|
155
|
-
.description("
|
|
156
|
-
.
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
166
|
+
.description("Create a new domain")
|
|
167
|
+
.requiredOption("--name <name>", "Domain name (UPPER_SNAKE_CASE)")
|
|
168
|
+
.option("--description <desc>", "Description", "")
|
|
169
|
+
.option("--color <hex>", "Hex color for UI", "#4DB6AC")
|
|
170
|
+
.action(async function () {
|
|
171
|
+
try {
|
|
172
|
+
const opts = this.opts();
|
|
173
|
+
const resp = await apiClient.post("/api/v1/cli/kb/domain", {
|
|
174
|
+
name: opts.name,
|
|
175
|
+
description: opts.description,
|
|
176
|
+
color: opts.color,
|
|
177
|
+
});
|
|
178
|
+
output(this, resp.entity, { keyValue: true });
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
errorOutput(err);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
create
|
|
185
|
+
.command("synonym")
|
|
186
|
+
.description("Create a new synonym")
|
|
187
|
+
.requiredOption("--term <term>", "Synonym term (e.g., GMV)")
|
|
188
|
+
.requiredOption("--canonical <name>", "Canonical asset name (e.g., TOTAL_REVENUE)")
|
|
189
|
+
.requiredOption("--type <type>", "Canonical type: metric, column, or table")
|
|
190
|
+
.option("--description <desc>", "Description", "")
|
|
191
|
+
.action(async function () {
|
|
192
|
+
try {
|
|
193
|
+
const opts = this.opts();
|
|
194
|
+
const resp = await apiClient.post("/api/v1/cli/kb/synonym", {
|
|
195
|
+
term: opts.term,
|
|
196
|
+
canonical: opts.canonical,
|
|
197
|
+
canonical_type: opts.type,
|
|
198
|
+
description: opts.description,
|
|
199
|
+
});
|
|
200
|
+
output(this, resp.entity, { keyValue: true });
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
errorOutput(err);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
create
|
|
207
|
+
.command("relationship")
|
|
208
|
+
.description("Create a new relationship (JOIN between tables)")
|
|
209
|
+
.requiredOption("--name <name>", "Relationship name (e.g., ORDERS_TO_CUSTOMERS)")
|
|
210
|
+
.requiredOption("--primary-table <table>", "Primary table")
|
|
211
|
+
.requiredOption("--primary-column <col>", "Primary column")
|
|
212
|
+
.requiredOption("--related-table <table>", "Related table")
|
|
213
|
+
.requiredOption("--related-column <col>", "Related column")
|
|
214
|
+
.option("--description <desc>", "Description", "")
|
|
215
|
+
.action(async function () {
|
|
216
|
+
try {
|
|
217
|
+
const opts = this.opts();
|
|
218
|
+
const resp = await apiClient.post("/api/v1/cli/kb/relationship", {
|
|
219
|
+
name: opts.name,
|
|
220
|
+
primary_table: opts.primaryTable,
|
|
221
|
+
primary_column: opts.primaryColumn,
|
|
222
|
+
related_table: opts.relatedTable,
|
|
223
|
+
related_column: opts.relatedColumn,
|
|
224
|
+
description: opts.description,
|
|
225
|
+
});
|
|
226
|
+
output(this, resp.entity, { keyValue: true });
|
|
227
|
+
}
|
|
228
|
+
catch (err) {
|
|
229
|
+
errorOutput(err);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
create
|
|
233
|
+
.command("topic")
|
|
234
|
+
.description("Create a new topic (business-concept tag)")
|
|
235
|
+
.requiredOption("--name <name>", "Topic name (UPPER_SNAKE_CASE)")
|
|
236
|
+
.option("--description <desc>", "Description", "")
|
|
237
|
+
.action(async function () {
|
|
238
|
+
try {
|
|
239
|
+
const opts = this.opts();
|
|
240
|
+
const resp = await apiClient.post("/api/v1/cli/kb/topic", {
|
|
241
|
+
name: opts.name,
|
|
242
|
+
description: opts.description,
|
|
243
|
+
});
|
|
244
|
+
output(this, resp.entity, { keyValue: true });
|
|
245
|
+
}
|
|
246
|
+
catch (err) {
|
|
247
|
+
errorOutput(err);
|
|
248
|
+
}
|
|
161
249
|
});
|
|
162
250
|
create
|
|
163
251
|
.command("template")
|
|
@@ -204,13 +292,19 @@ export function registerKBCommands(program) {
|
|
|
204
292
|
.option("--sql <expr>", "New SQL calculation")
|
|
205
293
|
.option("--table <table>", "New primary table")
|
|
206
294
|
.option("--description <desc>", "New description")
|
|
295
|
+
.option("--topics <topics>", "Comma-separated topic names (replaces existing)")
|
|
296
|
+
.option("--secondary-tables <tables>", "Comma-separated secondary table names (replaces existing)")
|
|
207
297
|
.action(async function (name) {
|
|
208
298
|
try {
|
|
209
299
|
const opts = this.opts();
|
|
300
|
+
const topics = opts.topics ? opts.topics.split(",").map((s) => s.trim()).filter(Boolean) : undefined;
|
|
301
|
+
const secondaryTables = opts.secondaryTables ? opts.secondaryTables.split(",").map((s) => s.trim()).filter(Boolean) : undefined;
|
|
210
302
|
const resp = await apiClient.put(`/api/v1/cli/kb/metric/${encodeURIComponent(name)}`, {
|
|
211
303
|
calculation: opts.sql ?? null,
|
|
212
304
|
table: opts.table ?? null,
|
|
213
305
|
description: opts.description ?? null,
|
|
306
|
+
topics: topics ?? null,
|
|
307
|
+
secondary_tables: secondaryTables ?? null,
|
|
214
308
|
});
|
|
215
309
|
output(this, resp.entity, { keyValue: true });
|
|
216
310
|
}
|
|
@@ -224,13 +318,19 @@ export function registerKBCommands(program) {
|
|
|
224
318
|
.option("--expr <expr>", "New SQL expression")
|
|
225
319
|
.option("--table <table>", "New primary table")
|
|
226
320
|
.option("--description <desc>", "New description")
|
|
321
|
+
.option("--topics <topics>", "Comma-separated topic names (replaces existing)")
|
|
322
|
+
.option("--secondary-tables <tables>", "Comma-separated secondary table names (replaces existing)")
|
|
227
323
|
.action(async function (name) {
|
|
228
324
|
try {
|
|
229
325
|
const opts = this.opts();
|
|
326
|
+
const topics = opts.topics ? opts.topics.split(",").map((s) => s.trim()).filter(Boolean) : undefined;
|
|
327
|
+
const secondaryTables = opts.secondaryTables ? opts.secondaryTables.split(",").map((s) => s.trim()).filter(Boolean) : undefined;
|
|
230
328
|
const resp = await apiClient.put(`/api/v1/cli/kb/dimension/${encodeURIComponent(name)}`, {
|
|
231
329
|
expression: opts.expr ?? null,
|
|
232
330
|
table: opts.table ?? null,
|
|
233
331
|
description: opts.description ?? null,
|
|
332
|
+
topics: topics ?? null,
|
|
333
|
+
secondary_tables: secondaryTables ?? null,
|
|
234
334
|
});
|
|
235
335
|
output(this, resp.entity, { keyValue: true });
|
|
236
336
|
}
|
|
@@ -243,12 +343,18 @@ export function registerKBCommands(program) {
|
|
|
243
343
|
.description("Update a rule")
|
|
244
344
|
.option("--sql <expr>", "New rule content")
|
|
245
345
|
.option("--description <desc>", "New description")
|
|
346
|
+
.option("--topics <topics>", "Comma-separated topic names (replaces existing)")
|
|
347
|
+
.option("--secondary-tables <tables>", "Comma-separated secondary table names (replaces existing)")
|
|
246
348
|
.action(async function (name) {
|
|
247
349
|
try {
|
|
248
350
|
const opts = this.opts();
|
|
351
|
+
const topics = opts.topics ? opts.topics.split(",").map((s) => s.trim()).filter(Boolean) : undefined;
|
|
352
|
+
const secondaryTables = opts.secondaryTables ? opts.secondaryTables.split(",").map((s) => s.trim()).filter(Boolean) : undefined;
|
|
249
353
|
const resp = await apiClient.put(`/api/v1/cli/kb/rule/${encodeURIComponent(name)}`, {
|
|
250
354
|
content: opts.sql ?? null,
|
|
251
355
|
description: opts.description ?? null,
|
|
356
|
+
topics: topics ?? null,
|
|
357
|
+
secondary_tables: secondaryTables ?? null,
|
|
252
358
|
});
|
|
253
359
|
output(this, resp.entity, { keyValue: true });
|
|
254
360
|
}
|
|
@@ -297,13 +403,91 @@ export function registerKBCommands(program) {
|
|
|
297
403
|
errorOutput(err);
|
|
298
404
|
}
|
|
299
405
|
});
|
|
406
|
+
update
|
|
407
|
+
.command("domain <name>")
|
|
408
|
+
.description("Update a domain")
|
|
409
|
+
.option("--description <desc>", "New description")
|
|
410
|
+
.option("--color <hex>", "New hex color")
|
|
411
|
+
.action(async function (name) {
|
|
412
|
+
try {
|
|
413
|
+
const opts = this.opts();
|
|
414
|
+
const resp = await apiClient.put(`/api/v1/cli/kb/domain/${encodeURIComponent(name)}`, {
|
|
415
|
+
description: opts.description ?? null,
|
|
416
|
+
color: opts.color ?? null,
|
|
417
|
+
});
|
|
418
|
+
output(this, resp.entity, { keyValue: true });
|
|
419
|
+
}
|
|
420
|
+
catch (err) {
|
|
421
|
+
errorOutput(err);
|
|
422
|
+
}
|
|
423
|
+
});
|
|
424
|
+
update
|
|
425
|
+
.command("synonym <term>")
|
|
426
|
+
.description("Update a synonym")
|
|
427
|
+
.option("--canonical <name>", "New canonical asset name")
|
|
428
|
+
.option("--type <type>", "New canonical type: metric, column, or table")
|
|
429
|
+
.option("--description <desc>", "New description")
|
|
430
|
+
.action(async function (term) {
|
|
431
|
+
try {
|
|
432
|
+
const opts = this.opts();
|
|
433
|
+
const resp = await apiClient.put(`/api/v1/cli/kb/synonym/${encodeURIComponent(term)}`, {
|
|
434
|
+
canonical: opts.canonical ?? null,
|
|
435
|
+
canonical_type: opts.type ?? null,
|
|
436
|
+
description: opts.description ?? null,
|
|
437
|
+
});
|
|
438
|
+
output(this, resp.entity, { keyValue: true });
|
|
439
|
+
}
|
|
440
|
+
catch (err) {
|
|
441
|
+
errorOutput(err);
|
|
442
|
+
}
|
|
443
|
+
});
|
|
444
|
+
update
|
|
445
|
+
.command("relationship <name>")
|
|
446
|
+
.description("Update a relationship")
|
|
447
|
+
.option("--description <desc>", "New description")
|
|
448
|
+
.option("--primary-table <table>", "New primary table")
|
|
449
|
+
.option("--primary-column <col>", "New primary column")
|
|
450
|
+
.option("--related-table <table>", "New related table")
|
|
451
|
+
.option("--related-column <col>", "New related column")
|
|
452
|
+
.action(async function (name) {
|
|
453
|
+
try {
|
|
454
|
+
const opts = this.opts();
|
|
455
|
+
const resp = await apiClient.put(`/api/v1/cli/kb/relationship/${encodeURIComponent(name)}`, {
|
|
456
|
+
description: opts.description ?? null,
|
|
457
|
+
primary_table: opts.primaryTable ?? null,
|
|
458
|
+
primary_column: opts.primaryColumn ?? null,
|
|
459
|
+
related_table: opts.relatedTable ?? null,
|
|
460
|
+
related_column: opts.relatedColumn ?? null,
|
|
461
|
+
});
|
|
462
|
+
output(this, resp.entity, { keyValue: true });
|
|
463
|
+
}
|
|
464
|
+
catch (err) {
|
|
465
|
+
errorOutput(err);
|
|
466
|
+
}
|
|
467
|
+
});
|
|
468
|
+
update
|
|
469
|
+
.command("topic <name>")
|
|
470
|
+
.description("Update a topic")
|
|
471
|
+
.option("--description <desc>", "New description")
|
|
472
|
+
.action(async function (name) {
|
|
473
|
+
try {
|
|
474
|
+
const opts = this.opts();
|
|
475
|
+
const resp = await apiClient.put(`/api/v1/cli/kb/topic/${encodeURIComponent(name)}`, {
|
|
476
|
+
description: opts.description ?? null,
|
|
477
|
+
});
|
|
478
|
+
output(this, resp.entity, { keyValue: true });
|
|
479
|
+
}
|
|
480
|
+
catch (err) {
|
|
481
|
+
errorOutput(err);
|
|
482
|
+
}
|
|
483
|
+
});
|
|
300
484
|
// -- Delete command --
|
|
301
485
|
kb.command("delete <type> <name>")
|
|
302
486
|
.description("Delete a KB entity (requires --yes flag)")
|
|
303
487
|
.requiredOption("--yes", "Confirm deletion")
|
|
304
488
|
.action(async function (type, name) {
|
|
305
489
|
try {
|
|
306
|
-
const validTypes = ["metric", "dimension", "rule", "template"];
|
|
490
|
+
const validTypes = ["metric", "dimension", "rule", "template", "synonym", "domain", "relationship", "topic"];
|
|
307
491
|
if (!validTypes.includes(type)) {
|
|
308
492
|
console.error(JSON.stringify({
|
|
309
493
|
error: `Delete not supported for '${type}'. Supported: ${validTypes.join(", ")}`,
|
package/dist/commands/kb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kb.js","sourceRoot":"","sources":["../../src/commands/kb.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kb.js","sourceRoot":"","sources":["../../src/commands/kb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAY1D,MAAM,cAAc,GAA6B;IAC/C,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,CAAC;IAChE,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,CAAC;IAClE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC;IAChD,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC;IAC/C,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC;IAC9C,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,CAAC;IACrE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC;IACtD,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,CAAC;IAC9E,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC;CACjD,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;IAE1E,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,oEAAoE,CAAC;SACjF,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC;SAC1C,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;SAC9C,MAAM,CAAC,cAAc,EAAE,0BAA0B,CAAC;SAClD,MAAM,CAAC,KAAK,WAA0B,IAAY;QACjD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,QAAQ;gBAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,UAAU;gBAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAErD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,kBAAkB,IAAI,IAAI,MAAM,EAAE,CACnC,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,KAAK,WAA0B,IAAY,EAAE,IAAY;QAC/D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,kBAAkB,IAAI,YAAY,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAC7D,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,eAAe,EAAE,uBAAuB,CAAC;SAChD,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC;SAC1C,MAAM,CAAC,KAAK,WAA0B,KAAa;QAClD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,yBAAyB,MAAM,EAAE,CAClC,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC;SAChC,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,KAAK,WAA0B,IAAY,EAAE,IAAY;QAC/D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,0BAA0B,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAC7D,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,wBAAwB;IAExB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAEtE,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qBAAqB,CAAC;SAClC,cAAc,CAAC,eAAe,EAAE,gCAAgC,CAAC;SACjE,cAAc,CAAC,cAAc,EAAE,4BAA4B,CAAC;SAC5D,cAAc,CAAC,iBAAiB,EAAE,eAAe,CAAC;SAClD,MAAM,CAAC,sBAAsB,EAAE,aAAa,EAAE,EAAE,CAAC;SACjD,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC;SAC1D,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtG,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAgB,uBAAuB,EAAE;gBACxE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,GAAG;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,MAAM;aACP,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,wBAAwB,CAAC;SACrC,cAAc,CAAC,eAAe,EAAE,mCAAmC,CAAC;SACpE,cAAc,CAAC,eAAe,EAAE,gBAAgB,CAAC;SACjD,cAAc,CAAC,iBAAiB,EAAE,eAAe,CAAC;SAClD,MAAM,CAAC,eAAe,EAAE,gBAAgB,EAAE,aAAa,CAAC;SACxD,MAAM,CAAC,sBAAsB,EAAE,aAAa,EAAE,EAAE,CAAC;SACjD,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC;SAC1D,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtG,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAgB,0BAA0B,EAAE;gBAC3E,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,IAAI;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,MAAM;aACP,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mBAAmB,CAAC;SAChC,cAAc,CAAC,eAAe,EAAE,8BAA8B,CAAC;SAC/D,cAAc,CAAC,cAAc,EAAE,kBAAkB,CAAC;SAClD,cAAc,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;SACrD,MAAM,CAAC,sBAAsB,EAAE,aAAa,EAAE,EAAE,CAAC;SACjD,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC;SAC1D,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtG,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAgB,qBAAqB,EAAE;gBACtE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,GAAG;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,MAAM;aACP,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,+DAA+D,CAAC;SAC5E,MAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,KAAK,EAAE,uEAAuE;SAC/E,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qBAAqB,CAAC;SAClC,cAAc,CAAC,eAAe,EAAE,gCAAgC,CAAC;SACjE,MAAM,CAAC,sBAAsB,EAAE,aAAa,EAAE,EAAE,CAAC;SACjD,MAAM,CAAC,eAAe,EAAE,kBAAkB,EAAE,SAAS,CAAC;SACtD,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAgB,uBAAuB,EAAE;gBACxE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,sBAAsB,CAAC;SACnC,cAAc,CAAC,eAAe,EAAE,0BAA0B,CAAC;SAC3D,cAAc,CAAC,oBAAoB,EAAE,4CAA4C,CAAC;SAClF,cAAc,CAAC,eAAe,EAAE,0CAA0C,CAAC;SAC3E,MAAM,CAAC,sBAAsB,EAAE,aAAa,EAAE,EAAE,CAAC;SACjD,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAgB,wBAAwB,EAAE;gBACzE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,cAAc,EAAE,IAAI,CAAC,IAAI;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,cAAc,CAAC,eAAe,EAAE,+CAA+C,CAAC;SAChF,cAAc,CAAC,yBAAyB,EAAE,eAAe,CAAC;SAC1D,cAAc,CAAC,wBAAwB,EAAE,gBAAgB,CAAC;SAC1D,cAAc,CAAC,yBAAyB,EAAE,eAAe,CAAC;SAC1D,cAAc,CAAC,wBAAwB,EAAE,gBAAgB,CAAC;SAC1D,MAAM,CAAC,sBAAsB,EAAE,aAAa,EAAE,EAAE,CAAC;SACjD,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAgB,6BAA6B,EAAE;gBAC9E,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,aAAa,EAAE,IAAI,CAAC,YAAY;gBAChC,cAAc,EAAE,IAAI,CAAC,aAAa;gBAClC,aAAa,EAAE,IAAI,CAAC,YAAY;gBAChC,cAAc,EAAE,IAAI,CAAC,aAAa;gBAClC,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,2CAA2C,CAAC;SACxD,cAAc,CAAC,eAAe,EAAE,+BAA+B,CAAC;SAChE,MAAM,CAAC,sBAAsB,EAAE,aAAa,EAAE,EAAE,CAAC;SACjD,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAgB,sBAAsB,EAAE;gBACvE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,cAAc,CAAC,eAAe,EAAE,kCAAkC,CAAC;SACnE,MAAM,CAAC,sBAAsB,EAAE,gCAAgC,CAAC;SAChE,MAAM,CAAC,eAAe,EAAE,oCAAoC,CAAC;SAC7D,MAAM,CAAC,sBAAsB,EAAE,aAAa,EAAE,EAAE,CAAC;SACjD,MAAM,CAAC,uBAAuB,EAAE,uCAAuC,EAAE,EAAE,CAAC;SAC5E,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,IAAI,UAAkB,CAAC;YACvB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,UAAU,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAClD,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC3B,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAC,CAAC;gBAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;gBAChC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBACzE,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAgB,yBAAyB,EAAE;gBAC1E,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,UAAU;gBACvB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,UAAU;aACxB,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,wBAAwB;IAExB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAEtE,MAAM;SACH,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC;SAC7C,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;SAC9C,MAAM,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;SACjD,MAAM,CAAC,mBAAmB,EAAE,iDAAiD,CAAC;SAC9E,MAAM,CAAC,6BAA6B,EAAE,2DAA2D,CAAC;SAClG,MAAM,CAAC,KAAK,WAA0B,IAAY;QACjD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7G,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxI,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,yBAAyB,kBAAkB,CAAC,IAAI,CAAC,EAAE,EACnD;gBACE,WAAW,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI;gBAC7B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;gBACrC,MAAM,EAAE,MAAM,IAAI,IAAI;gBACtB,gBAAgB,EAAE,eAAe,IAAI,IAAI;aAC1C,CACF,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,eAAe,EAAE,oBAAoB,CAAC;SAC7C,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;SAC9C,MAAM,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;SACjD,MAAM,CAAC,mBAAmB,EAAE,iDAAiD,CAAC;SAC9E,MAAM,CAAC,6BAA6B,EAAE,2DAA2D,CAAC;SAClG,MAAM,CAAC,KAAK,WAA0B,IAAY;QACjD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7G,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxI,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,4BAA4B,kBAAkB,CAAC,IAAI,CAAC,EAAE,EACtD;gBACE,UAAU,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;gBAC7B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;gBACrC,MAAM,EAAE,MAAM,IAAI,IAAI;gBACtB,gBAAgB,EAAE,eAAe,IAAI,IAAI;aAC1C,CACF,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,eAAe,CAAC;SAC5B,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC;SAC1C,MAAM,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;SACjD,MAAM,CAAC,mBAAmB,EAAE,iDAAiD,CAAC;SAC9E,MAAM,CAAC,6BAA6B,EAAE,2DAA2D,CAAC;SAClG,MAAM,CAAC,KAAK,WAA0B,IAAY;QACjD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7G,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxI,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,uBAAuB,kBAAkB,CAAC,IAAI,CAAC,EAAE,EACjD;gBACE,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;gBACrC,MAAM,EAAE,MAAM,IAAI,IAAI;gBACtB,gBAAgB,EAAE,eAAe,IAAI,IAAI;aAC1C,CACF,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,CAAC;SACtD,MAAM,CAAC,eAAe,EAAE,oCAAoC,CAAC;SAC7D,MAAM,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;SACjD,MAAM,CAAC,KAAK,WAA0B,IAAY;QACjD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;YACzC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,UAAU,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAClD,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,2BAA2B,kBAAkB,CAAC,IAAI,CAAC,EAAE,EACrD;gBACE,WAAW,EAAE,UAAU;gBACvB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;aACtC,CACF,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;SACjD,MAAM,CAAC,sBAAsB,EAAE,eAAe,CAAC;SAC/C,MAAM,CAAC,KAAK,WAA0B,IAAY;QACjD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAClD;gBACE,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;gBACrC,SAAS,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;aAC/B,CACF,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;SACjD,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC;SACxC,MAAM,CAAC,KAAK,WAA0B,IAAY;QACjD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,yBAAyB,kBAAkB,CAAC,IAAI,CAAC,EAAE,EACnD;gBACE,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;gBACrC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;aAC1B,CACF,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;SACxD,MAAM,CAAC,eAAe,EAAE,8CAA8C,CAAC;SACvE,MAAM,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;SACjD,MAAM,CAAC,KAAK,WAA0B,IAAY;QACjD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,0BAA0B,kBAAkB,CAAC,IAAI,CAAC,EAAE,EACpD;gBACE,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;gBACjC,cAAc,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;gBACjC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;aACtC,CACF,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;SACjD,MAAM,CAAC,yBAAyB,EAAE,mBAAmB,CAAC;SACtD,MAAM,CAAC,wBAAwB,EAAE,oBAAoB,CAAC;SACtD,MAAM,CAAC,yBAAyB,EAAE,mBAAmB,CAAC;SACtD,MAAM,CAAC,wBAAwB,EAAE,oBAAoB,CAAC;SACtD,MAAM,CAAC,KAAK,WAA0B,IAAY;QACjD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,+BAA+B,kBAAkB,CAAC,IAAI,CAAC,EAAE,EACzD;gBACE,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;gBACrC,aAAa,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;gBACxC,cAAc,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI;gBAC1C,aAAa,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;gBACxC,cAAc,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI;aAC3C,CACF,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,gBAAgB,CAAC;SAC7B,MAAM,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;SACjD,MAAM,CAAC,KAAK,WAA0B,IAAY;QACjD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAClD;gBACE,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;aACtC,CACF,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,uBAAuB;IAEvB,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC;SAC/B,WAAW,CAAC,0CAA0C,CAAC;SACvD,cAAc,CAAC,OAAO,EAAE,kBAAkB,CAAC;SAC3C,MAAM,CAAC,KAAK,WAA0B,IAAY,EAAE,IAAY;QAC/D,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;YAC7G,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;oBAC3B,KAAK,EAAE,6BAA6B,IAAI,iBAAiB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACjF,CAAC,CAAC,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,SAAS,CAAC,MAAM,CAAC,kBAAkB,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QACrF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/package.json
CHANGED
package/skills/graphit/SKILL.md
CHANGED
|
@@ -88,27 +88,97 @@ NEVER embed query results as static JS variables. The dashboard iframe provides
|
|
|
88
88
|
|
|
89
89
|
---
|
|
90
90
|
|
|
91
|
-
## Workflow
|
|
91
|
+
## Workflow: Dashboard Build
|
|
92
92
|
|
|
93
93
|
1. **Ask the user** what dashboard they want. Don't start querying until you know what they need.
|
|
94
|
-
2. **Explore KB** to
|
|
94
|
+
2. **Explore KB** - use `graphit kb list domains` then `graphit kb explore domain <NAME>` to traverse existing assets. Search by concept with `graphit kb search "revenue"`. See `kb-exploration.md` for KB-first discovery, `kb-traversal.md` for tool selection.
|
|
95
95
|
3. **Find a data source** (`graphit ds list`) - prefer cached data sources (~100ms) over live warehouse (~10s).
|
|
96
96
|
4. **Query data to validate** - run queries via the CLI to verify SQL and preview results. Show the user what you found.
|
|
97
97
|
5. **Build HTML** - write `graphit.resolve()` calls for live data + `graphit.chart/table/kpi` for rendering. All CSS in `<style>`, all JS in `<script>`. Write to a local `.html` file.
|
|
98
98
|
6. **Save** with `graphit dashboard update-html <id> --file <path>`.
|
|
99
99
|
7. Give the user the dashboard URL so they can open it.
|
|
100
100
|
|
|
101
|
+
## Workflow: KB Build / Onboarding
|
|
102
|
+
|
|
103
|
+
When the user wants to build or populate their KB (from files, schema descriptions, or scratch). Consult `kb-graph-structure.md` for the full graph model, `kb-traversal.md` for tool selection, `kb-actions.md` for the CLI command matrix, `kb-awareness.md` for when to propose asset creation, and `parameterized-metrics.md` for template metrics.
|
|
104
|
+
|
|
105
|
+
**Step 1: Audit current KB state.** Before proposing anything, traverse the existing KB:
|
|
106
|
+
|
|
107
|
+
1. `graphit kb list domains` - get all domains (with asset counts)
|
|
108
|
+
2. For each domain: `graphit kb explore domain <NAME>` - returns all tables and assets in that domain in one traversal (see `kb-traversal.md` depth guidelines)
|
|
109
|
+
3. `graphit kb list synonyms` and `graphit kb list relationships` - global assets not scoped to domains
|
|
110
|
+
|
|
111
|
+
Present a tree summary of what already exists, following the Domain > Table > Topic > Asset hierarchy from `kb-graph-structure.md`.
|
|
112
|
+
|
|
113
|
+
**Step 2: Analyze input.** Read the user's files, schema, or description. Classify every concept by asset type. Use `kb-explanation.md` for asset type definitions (what is a metric vs dimension vs rule). Use `kb-awareness.md` for signals (aggregation = metric, derived grouping = dimension, business constraint = rule, colloquial term = synonym).
|
|
114
|
+
|
|
115
|
+
**Step 3: Present a tree-structured plan.** Show what will be created, organized by the KB hierarchy. Mark existing assets with (exists) so the user sees what's new vs what's already there:
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
KB Plan:
|
|
119
|
+
|
|
120
|
+
MARKETING (domain) (exists)
|
|
121
|
+
MARKETING_UA (table) (exists)
|
|
122
|
+
ACQUISITION (topic) (exists)
|
|
123
|
+
- TOTAL_SPEND (metric) = SUM(APPSFLYER_COST) **NEW**
|
|
124
|
+
- CPI (metric) (exists)
|
|
125
|
+
- MEDIA_SOURCE (dimension) (exists)
|
|
126
|
+
- CAMPAIGN_NAME (dimension) **NEW**
|
|
127
|
+
ATTRIBUTION (topic) **NEW**
|
|
128
|
+
- ROAS_D7 (metric) = SUM(revenue_d7) / NULLIF(SUM(cost), 0) **NEW**
|
|
129
|
+
- ATTRIBUTION_WINDOW (dimension) **NEW**
|
|
130
|
+
Rules:
|
|
131
|
+
- EXCLUDE_ORGANIC (rule) (exists)
|
|
132
|
+
- ACTIVE_CAMPAIGNS_ONLY (rule) = "WHERE status = 'active'" **NEW**
|
|
133
|
+
MARKETING_UA_6MO (table) (exists)
|
|
134
|
+
(reference TOTAL_SPEND, CPI from MARKETING_UA via secondary_tables)
|
|
135
|
+
|
|
136
|
+
PRODUCT (domain) **NEW**
|
|
137
|
+
EVENTS (table) (exists)
|
|
138
|
+
RETENTION (topic) **NEW**
|
|
139
|
+
- DAU (metric) = COUNT(DISTINCT user_id) **NEW**
|
|
140
|
+
- RETENTION_D7 (metric) **NEW**
|
|
141
|
+
|
|
142
|
+
Global:
|
|
143
|
+
- Synonyms: GMV -> TOTAL_REVENUE (metric) **NEW**
|
|
144
|
+
- Relationships: MARKETING_UA.USER_ID -> EVENTS.USER_ID **NEW**
|
|
145
|
+
|
|
146
|
+
Summary: 5 new metrics, 2 new dimensions, 1 new rule, 1 new domain, 2 new topics, 1 synonym, 1 relationship
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
For metrics with natural variant axes (D7/D30/D90, gross/net), propose parameterized templates instead of standalone metrics (see `parameterized-metrics.md`).
|
|
150
|
+
|
|
151
|
+
**Step 4: Wait for user approval.** Do not create anything until the user confirms the plan.
|
|
152
|
+
|
|
153
|
+
**Step 5: Execute top-down.** Create in dependency order (see `kb-actions.md` for full CLI command reference):
|
|
154
|
+
1. Domains (`graphit kb create domain --name X`)
|
|
155
|
+
2. Topics (`graphit kb create topic --name X`)
|
|
156
|
+
3. Metrics and dimensions (`graphit kb create metric/dimension ... --topics "A,B"`)
|
|
157
|
+
4. Rules (`graphit kb create rule`)
|
|
158
|
+
5. Synonyms (`graphit kb create synonym --term X --canonical Y --type metric`)
|
|
159
|
+
6. Relationships (`graphit kb create relationship`)
|
|
160
|
+
7. Attachments: assign domains to tables (`graphit kb update table X --domain Y`), add secondary_tables for cross-table references (`graphit kb update metric X --secondary-tables "T1,T2"`)
|
|
161
|
+
|
|
162
|
+
**Step 6: Verify.** Re-traverse: `graphit kb explore domain <NAME>` for each domain. Show the user the final tree and confirm counts match the plan.
|
|
163
|
+
|
|
101
164
|
## Commands
|
|
102
165
|
|
|
103
166
|
| Command | Description |
|
|
104
167
|
|---------|-------------|
|
|
105
|
-
| `graphit kb list <type>` | List
|
|
168
|
+
| `graphit kb list <type>` | List entities: metric, dimension, table, rule, domain, synonym, template, relationship, topic |
|
|
106
169
|
| `graphit kb get <type> <name>` | Full entity details by name |
|
|
107
|
-
| `graphit kb search <query>` | Search across all KB types |
|
|
170
|
+
| `graphit kb search <query>` | Search across all KB types (optional `--type` filter) |
|
|
108
171
|
| `graphit kb explore metric <name>` | Metric -> tables -> dimensions graph |
|
|
109
|
-
| `graphit kb create
|
|
110
|
-
| `graphit kb
|
|
111
|
-
| `graphit kb
|
|
172
|
+
| `graphit kb create metric --name X --sql "..." --table T` | Create a metric |
|
|
173
|
+
| `graphit kb create dimension --name X --expr "..." --table T` | Create a dimension (optional `--type categorical`) |
|
|
174
|
+
| `graphit kb create rule --name X --sql "..." --table T` | Create a rule |
|
|
175
|
+
| `graphit kb create synonym --term X --canonical Y --type metric` | Create a synonym (type: metric, column, table) |
|
|
176
|
+
| `graphit kb create domain --name X` | Create a domain (optional `--color "#hex"`) |
|
|
177
|
+
| `graphit kb create relationship --name X --primary-table T --primary-column C --related-table T2 --related-column C2` | Create a JOIN relationship |
|
|
178
|
+
| `graphit kb create topic --name X` | Create a topic (business-concept tag) |
|
|
179
|
+
| `graphit kb create template --name X --file template.html` | Save a reusable chart template (--file or --render-code) |
|
|
180
|
+
| `graphit kb update <type> <name> --field value` | Update any entity (fields vary by type) |
|
|
181
|
+
| `graphit kb delete <type> <name> --yes` | Delete any entity (all types supported) |
|
|
112
182
|
| `graphit ds list` | List cached data sources (use these for fast queries) |
|
|
113
183
|
| `graphit query "<sql>" --ds <id>` | Query cached data source (~100ms) |
|
|
114
184
|
| `graphit query "<sql>" --warehouse --connection <id>` | Query live Snowflake (~10s) |
|
|
@@ -230,7 +300,13 @@ Detailed knowledge lives in `references/`. Consult the relevant file when you ne
|
|
|
230
300
|
|------|-------------|
|
|
231
301
|
| `dashboard-planning.md` | Building a multi-chart dashboard. Covers framing the question, picking archetype, mandatory rules, metric contracts, anti-patterns. |
|
|
232
302
|
| `chart-selection.md` | Choosing chart types. Full dimension/measure defaults, perception ranking, cardinality guards, hard caps. |
|
|
233
|
-
| `kb-exploration.md` | Starting a build. KB-first discovery, metric vs dimension, naming conventions,
|
|
303
|
+
| `kb-exploration.md` | Starting a build. KB-first discovery, metric vs dimension, naming conventions, formula syntax. |
|
|
304
|
+
| `kb-awareness.md` | KB-first planning. When to propose KB asset creation, reuse over reinvention, cross-table referencing, topic assignment. |
|
|
305
|
+
| `kb-graph-structure.md` | KB graph model. 9 node types, 5 edge types, multi-membership semantics, domain cascade, tree rendering order. |
|
|
306
|
+
| `kb-explanation.md` | Structural Q&A. What are domains, topics, tables, relationships, memory. Why assets appear where they do. |
|
|
307
|
+
| `kb-traversal.md` | Graph queries. Tool selection guide (search vs explore vs read), common query patterns, depth guidelines. |
|
|
308
|
+
| `kb-actions.md` | Full CRUD matrix. Asset create/edit/delete, topic management, domain assignment cascade, navigation and discovery. |
|
|
309
|
+
| `parameterized-metrics.md` | Metric templates. ${PARAM:NAME} tokens, child variant auto-generation, editing templates, using variants in queries. |
|
|
234
310
|
| `sql-reference.md` | Writing queries. DuckDB/Snowflake translation, formatting standards, gap-filling, JSON access, data source routing. |
|
|
235
311
|
| `domain-lenses.md` | Data matches a business domain. Marketing, finance, product/growth, ops, sales - signals, key metrics, must-have charts, anti-patterns. |
|
|
236
312
|
| `graphit-style.md` | Building the HTML. Design principles, typography scale, color system with usage rules, layout patterns (page structure, KPI cards, data tables). |
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
alwaysApply: false
|
|
3
|
+
description: "Graphit: Every KB action has a CLI equivalent. The tool syntax below maps to CLI commands:"
|
|
4
|
+
globs: []
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# KB Actions - CLI Parity Matrix
|
|
8
|
+
|
|
9
|
+
Every KB action has a CLI equivalent. The tool syntax below maps to CLI commands:
|
|
10
|
+
|
|
11
|
+
| Agent Tool Syntax | CLI Command |
|
|
12
|
+
|---|---|
|
|
13
|
+
| `create(entity_type="metric", name=..., calculation=...)` | `graphit kb create metric --name X --sql "..." --table T` |
|
|
14
|
+
| `create(entity_type="dimension", name=..., expression=...)` | `graphit kb create dimension --name X --expr "..." --table T` |
|
|
15
|
+
| `create(entity_type="rule", name=..., rule_text=...)` | `graphit kb create rule --name X --sql "..." --table T` |
|
|
16
|
+
| `create(entity_type="synonym", term=..., canonical=...)` | `graphit kb create synonym --term X --canonical Y --type metric` |
|
|
17
|
+
| `create(entity_type="domain", name=...)` | `graphit kb create domain --name X --description "..."` |
|
|
18
|
+
| `create(entity_type="relationship", ...)` | `graphit kb create relationship --name X --primary-table T --primary-column C --related-table T2 --related-column C2` |
|
|
19
|
+
| `create(entity_type="topic_metadata", name=...)` | `graphit kb create topic --name X --description "..."` |
|
|
20
|
+
| `edit(entity_type=..., id=..., field=value)` | `graphit kb update <type> NAME --field value` |
|
|
21
|
+
| `edit(entity_type="table", id=..., domain_id=...)` | `graphit kb update table NAME --domain DOMAIN` |
|
|
22
|
+
| `delete(entity_type=..., id=...)` | `graphit kb delete <type> NAME --yes` |
|
|
23
|
+
| `search(query="...")` | `graphit kb search "query"` |
|
|
24
|
+
| `list(entity_type="domain")` | `graphit kb list domains` |
|
|
25
|
+
| `read(entity_type="metric", name=...)` | `graphit kb get metric NAME` |
|
|
26
|
+
| `kb_explore(entity_type="table", entity_name="X")` | `graphit kb explore table X` |
|
|
27
|
+
|
|
28
|
+
Full CRUD parity: all agent actions have CLI equivalents.
|
|
29
|
+
|
|
30
|
+
## Asset CRUD
|
|
31
|
+
|
|
32
|
+
| UI Action | Agent Tool Path |
|
|
33
|
+
|-----------|----------------|
|
|
34
|
+
| Create metric | `create(entity_type="metric", name=..., calculation=..., dependencies=...)` |
|
|
35
|
+
| Create dimension | `create(entity_type="dimension", name=..., table_name=..., expression=...)` |
|
|
36
|
+
| Create rule | `create(entity_type="rule", name=..., rule_text=...)` |
|
|
37
|
+
| Create synonym | `create(entity_type="synonym", term=..., canonical=..., canonical_type=...)` |
|
|
38
|
+
| Create relationship | `create(entity_type="relationship", primary_table=..., primary_column=..., related_table=..., related_column=...)` |
|
|
39
|
+
| Edit any asset | `edit(entity_type=..., id=..., field=new_value)` |
|
|
40
|
+
| Delete any asset | `delete(entity_type=..., id=...)` |
|
|
41
|
+
| Toggle verified | `edit(entity_type=..., id=..., verified=true/false)` |
|
|
42
|
+
|
|
43
|
+
## Topic Management
|
|
44
|
+
|
|
45
|
+
| UI Action | Agent Tool Path |
|
|
46
|
+
|-----------|----------------|
|
|
47
|
+
| Create topic | `create(entity_type="topic_metadata", name=..., description=...)` |
|
|
48
|
+
| Edit topic description | `edit(entity_type="topic_metadata", id=..., description=...)` |
|
|
49
|
+
| Delete topic metadata | `delete(entity_type="topic_metadata", id=...)` |
|
|
50
|
+
| Toggle topic verified | `edit(entity_type="topic_metadata", id=..., verified=true/false)` |
|
|
51
|
+
| Add topic to asset | `edit(entity_type="metric", id=..., topics=[...existing, "NEW_TOPIC"])` - append to existing list |
|
|
52
|
+
| Remove topic from asset | `edit(entity_type="metric", id=..., topics=[...without removed])` - filter out the topic |
|
|
53
|
+
| Move asset between topics | `edit(entity_type="metric", id=..., topics=["NEW_TOPIC"])` - replace the list |
|
|
54
|
+
| Rename topic (cascade) | `edit(entity_type="topic_metadata", id=..., name=...)` then batch `edit` on each asset that references the old name |
|
|
55
|
+
| Bulk reassign topics | Present plan via `ask_user`, then execute N `edit` calls on approval |
|
|
56
|
+
|
|
57
|
+
## Domain Management
|
|
58
|
+
|
|
59
|
+
| UI Action | Agent Tool Path |
|
|
60
|
+
|-----------|----------------|
|
|
61
|
+
| Create domain | `create(entity_type="domain", name=..., description=..., color=...)` |
|
|
62
|
+
| Edit domain | `edit(entity_type="domain", id=..., description=..., color=...)` |
|
|
63
|
+
| Delete domain | `delete(entity_type="domain", id=...)` |
|
|
64
|
+
|
|
65
|
+
## Domain Assignment (Cascade Model)
|
|
66
|
+
|
|
67
|
+
Domain is a single **home** set on the table; every asset on that table inherits it. Assets never store their own home domain - set it on the table, not the asset.
|
|
68
|
+
|
|
69
|
+
| UI Action | Agent Tool Path |
|
|
70
|
+
|-----------|----------------|
|
|
71
|
+
| Set a table's home domain | `edit(entity_type="table", id=..., domain_id="MARKETING")` - cascades to every asset on that table |
|
|
72
|
+
| Clear a table's home domain | `edit(entity_type="table", id=..., domain_id=None)` - its assets fall back to Uncategorized |
|
|
73
|
+
| Reference asset onto another table | `edit(entity_type="metric", id=..., secondary_tables=["OTHER_TABLE"])` - appears under the target table as a read-only pointer (marked with `*`). Metrics/dimensions require identical columns; rules require only target existence. |
|
|
74
|
+
| Remove a table reference | `edit(entity_type="metric", id=..., secondary_tables=[...without removed])` |
|
|
75
|
+
| Mark a synonym cross-cutting to extra domains | `edit(entity_type="synonym", id=..., extra_domain_ids=["FINANCE"])` - adds badges + filter match, does NOT move it in the tree |
|
|
76
|
+
| Remove cross-cutting domains from synonym | `edit(entity_type="synonym", id=..., extra_domain_ids=[])` |
|
|
77
|
+
|
|
78
|
+
A table-backed asset's (metric, dimension, rule) domain is derived from its dependency tables plus any `secondary_tables`. A synonym can also carry `extra_domain_ids` for cross-cutting relevance. To re-home a whole table of assets, change `domain_id` on the table once - do not edit assets individually.
|
|
79
|
+
|
|
80
|
+
## Navigation and Discovery
|
|
81
|
+
|
|
82
|
+
| UI Action | Agent Tool Path |
|
|
83
|
+
|-----------|----------------|
|
|
84
|
+
| Search KB | `search(query="...", types=[...])` |
|
|
85
|
+
| Filter by topic | `search(query="...", topics=["REVENUE"])` |
|
|
86
|
+
| Filter by domain | `search(query="...", domain="MARKETING")` - matches assets whose dependency or secondary tables are in the MARKETING domain. Synonyms also match via `extra_domain_ids`. |
|
|
87
|
+
| List all domains | `list(entity_type="domain")` - returns every domain with name, description, color, and asset_count; includes an "Uncategorized" entry when tables with no domain exist. Report every domain it returns; do not drop ones with asset_count=0, and do not use `search` or `kb_explore` |
|
|
88
|
+
| List all tables | `list(entity_type="table")` - returns every table with name, domain_id (null if uncategorized), and verified status. Use to see which tables are assigned to which domain, or to find uncategorized tables |
|
|
89
|
+
| Browse by table | `search(query="...", types=["metric", "dimension"])` then filter results by table |
|
|
90
|
+
| What depends on X? | `kb_explore(entity_type="table", entity_name="X", edge_types=["depends_on"])` |
|
|
91
|
+
| What joins with table? | `kb_explore(entity_type="table", entity_name="X", edge_types=["joins"])` |
|
|
92
|
+
| What's in topic X? | `kb_explore(entity_type="topic", entity_name="X", edge_types=["tagged_with"])` |
|
|
93
|
+
| What's in domain X? | `kb_explore(entity_type="domain", entity_name="X")` |
|
|
94
|
+
|
|
95
|
+
## View Controls (UI-Only, No Agent Parity Needed)
|
|
96
|
+
|
|
97
|
+
These actions are purely UI navigation state and have no agent equivalent:
|
|
98
|
+
- Switch view mode (Tree / By Topic / By Table / Flat)
|
|
99
|
+
- Filter dropdowns (domain, table, topic, type, verified-only)
|
|
100
|
+
- Expand/collapse tree nodes
|
|
101
|
+
- Drag-drop asset onto topic (maps to "Add topic to asset" above)
|