@graphit/cli 0.2.73 → 0.2.88
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/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/bin/graphit +1 -1
- package/bin/graphit.ps1 +1 -1
- package/dist/api/client.d.ts +1 -0
- package/dist/api/client.js +9 -0
- package/dist/api/client.js.map +1 -1
- package/dist/commands/ds.d.ts +28 -0
- package/dist/commands/ds.js +127 -0
- package/dist/commands/ds.js.map +1 -1
- package/dist/commands/kb-create.d.ts +2 -0
- package/dist/commands/kb-create.js +290 -0
- package/dist/commands/kb-create.js.map +1 -0
- package/dist/commands/kb-delete.d.ts +2 -0
- package/dist/commands/kb-delete.js +25 -0
- package/dist/commands/kb-delete.js.map +1 -0
- package/dist/commands/kb-read.d.ts +2 -0
- package/dist/commands/kb-read.js +201 -0
- package/dist/commands/kb-read.js.map +1 -0
- package/dist/commands/kb-shared.d.ts +25 -0
- package/dist/commands/kb-shared.js +41 -0
- package/dist/commands/kb-shared.js.map +1 -0
- package/dist/commands/kb-update.d.ts +2 -0
- package/dist/commands/kb-update.js +231 -0
- package/dist/commands/kb-update.js.map +1 -0
- package/dist/commands/kb.js +14 -751
- package/dist/commands/kb.js.map +1 -1
- package/dist/commands/query.d.ts +10 -0
- package/dist/commands/query.js +30 -22
- package/dist/commands/query.js.map +1 -1
- package/dist/output/styled.d.ts +4 -0
- package/dist/output/styled.js +12 -0
- package/dist/output/styled.js.map +1 -1
- package/package.json +1 -1
- package/scripts/generate-commands-doc.mjs +3 -0
- package/skills/graphit/SKILL.md +8 -7
- package/skills/graphit/VERSION.json +1 -1
- package/skills/graphit/references/data-sources.md +32 -20
- package/skills/graphit/references/governance.md +2 -2
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { apiClient } from "../api/client.js";
|
|
3
|
+
import { output, errorOutput } from "../output/format.js";
|
|
4
|
+
import { parseConstraintFlags, parseApplyOnFlags } from "./kb-constraints.js";
|
|
5
|
+
// Project #254 Phase 1: kb update verbs (metric/dimension/rule/template/table/
|
|
6
|
+
// domain/synonym/relationship/topic). Null fields are left unchanged server-side.
|
|
7
|
+
export function addKBUpdateCommands(kb) {
|
|
8
|
+
const update = kb.command("update").description("Update KB entities");
|
|
9
|
+
update
|
|
10
|
+
.command("metric <name>")
|
|
11
|
+
.description("Update a metric. --owner sets the accountable owner (email or user id); pass \"\" to clear.")
|
|
12
|
+
.option("--sql <expr>", "New SQL calculation")
|
|
13
|
+
.option("--table <table>", "New primary table")
|
|
14
|
+
.option("--description <desc>", "New description")
|
|
15
|
+
.option("--topics <topics>", "Comma-separated topic names (replaces existing)")
|
|
16
|
+
.option("--default-dimensions <dims>", "Comma-separated dimension names (replaces existing)")
|
|
17
|
+
.option("--secondary-tables <tables>", "Comma-separated secondary table names (replaces existing)")
|
|
18
|
+
.option("--parameters <json>", "JSON array of parameter definitions (replaces existing)")
|
|
19
|
+
.option("--parameters-file <path>", "Read parameters JSON from file")
|
|
20
|
+
.option("--owner <user>", "Accountable owner (email or user id); pass \"\" to clear")
|
|
21
|
+
.action(async function (name) {
|
|
22
|
+
try {
|
|
23
|
+
const opts = this.opts();
|
|
24
|
+
const topics = opts.topics !== undefined ? opts.topics.split(",").map((s) => s.trim()).filter(Boolean) : undefined;
|
|
25
|
+
const defaultDimensions = opts.defaultDimensions !== undefined ? opts.defaultDimensions.split(",").map((s) => s.trim()).filter(Boolean) : undefined;
|
|
26
|
+
const secondaryTables = opts.secondaryTables !== undefined ? opts.secondaryTables.split(",").map((s) => s.trim()).filter(Boolean) : undefined;
|
|
27
|
+
let parameters;
|
|
28
|
+
if (opts.parametersFile) {
|
|
29
|
+
parameters = JSON.parse(await readFile(opts.parametersFile, "utf-8"));
|
|
30
|
+
}
|
|
31
|
+
else if (opts.parameters) {
|
|
32
|
+
parameters = JSON.parse(opts.parameters);
|
|
33
|
+
}
|
|
34
|
+
const resp = await apiClient.put(`/api/v1/cli/kb/metric/${encodeURIComponent(name)}`, {
|
|
35
|
+
calculation: opts.sql ?? null,
|
|
36
|
+
table: opts.table ?? null,
|
|
37
|
+
description: opts.description ?? null,
|
|
38
|
+
topics: topics ?? null,
|
|
39
|
+
default_dimensions: defaultDimensions ?? null,
|
|
40
|
+
secondary_tables: secondaryTables ?? null,
|
|
41
|
+
parameters: parameters ?? null,
|
|
42
|
+
owner: opts.owner ?? null,
|
|
43
|
+
});
|
|
44
|
+
output(this, resp.entity, { keyValue: true });
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
errorOutput(err);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
update
|
|
51
|
+
.command("dimension <name>")
|
|
52
|
+
.description("Update a dimension. --owner sets the accountable owner (email or user id); pass \"\" to clear.")
|
|
53
|
+
.option("--expr <expr>", "New SQL expression")
|
|
54
|
+
.option("--table <table>", "New primary table")
|
|
55
|
+
.option("--description <desc>", "New description")
|
|
56
|
+
.option("--topics <topics>", "Comma-separated topic names (replaces existing)")
|
|
57
|
+
.option("--secondary-tables <tables>", "Comma-separated secondary table names (replaces existing)")
|
|
58
|
+
.option("--owner <user>", "Accountable owner (email or user id); pass \"\" to clear")
|
|
59
|
+
.action(async function (name) {
|
|
60
|
+
try {
|
|
61
|
+
const opts = this.opts();
|
|
62
|
+
const topics = opts.topics !== undefined ? opts.topics.split(",").map((s) => s.trim()).filter(Boolean) : undefined;
|
|
63
|
+
const secondaryTables = opts.secondaryTables !== undefined ? opts.secondaryTables.split(",").map((s) => s.trim()).filter(Boolean) : undefined;
|
|
64
|
+
const resp = await apiClient.put(`/api/v1/cli/kb/dimension/${encodeURIComponent(name)}`, {
|
|
65
|
+
expression: opts.expr ?? null,
|
|
66
|
+
table: opts.table ?? null,
|
|
67
|
+
description: opts.description ?? null,
|
|
68
|
+
topics: topics ?? null,
|
|
69
|
+
secondary_tables: secondaryTables ?? null,
|
|
70
|
+
owner: opts.owner ?? null,
|
|
71
|
+
});
|
|
72
|
+
output(this, resp.entity, { keyValue: true });
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
errorOutput(err);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
update
|
|
79
|
+
.command("rule <name>")
|
|
80
|
+
.description("Update a rule. Broadening a verified rule's targeting requires org admin. --owner sets the accountable owner (email or user id); pass \"\" to clear.")
|
|
81
|
+
.option("--sql <expr>", "New rule content")
|
|
82
|
+
.option("--description <desc>", "New description")
|
|
83
|
+
.option("--topics <topics>", "Comma-separated topic names (replaces existing)")
|
|
84
|
+
.option("--constraint <spec...>", "Enforceable constraints (replaces existing)")
|
|
85
|
+
.option("--apply-on <targets...>", "What the rule governs (replaces existing). table:NAME governs whole table(s) and cascades to all their metrics/dimensions; metric:NAME / dimension:NAME governs only those assets. Cannot mix table + metric/dimension targets.")
|
|
86
|
+
.option("--override-policy <policy>", "Override policy: anyone|analyst_only|admin_only|never")
|
|
87
|
+
.option("--owner <user>", "Accountable owner (email or user id); pass \"\" to clear")
|
|
88
|
+
.action(async function (name) {
|
|
89
|
+
try {
|
|
90
|
+
const opts = this.opts();
|
|
91
|
+
const topics = opts.topics !== undefined ? opts.topics.split(",").map((s) => s.trim()).filter(Boolean) : undefined;
|
|
92
|
+
const constraints = opts.constraint ? parseConstraintFlags(opts.constraint) : undefined;
|
|
93
|
+
const applyOn = opts.applyOn ? parseApplyOnFlags(opts.applyOn) : undefined;
|
|
94
|
+
const resp = await apiClient.put(`/api/v1/cli/kb/rule/${encodeURIComponent(name)}`, {
|
|
95
|
+
content: opts.sql ?? null,
|
|
96
|
+
description: opts.description ?? null,
|
|
97
|
+
topics: topics ?? null,
|
|
98
|
+
constraints: constraints ?? null,
|
|
99
|
+
apply_on: applyOn ?? null,
|
|
100
|
+
override_policy: opts.overridePolicy ?? null,
|
|
101
|
+
owner: opts.owner ?? null,
|
|
102
|
+
});
|
|
103
|
+
output(this, resp.entity, { keyValue: true });
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
errorOutput(err);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
update
|
|
110
|
+
.command("template <name>")
|
|
111
|
+
.description("Update a template")
|
|
112
|
+
.option("--render-code <code>", "New JS function body")
|
|
113
|
+
.option("--file <path>", "Read render code from a local file")
|
|
114
|
+
.option("--description <desc>", "New description")
|
|
115
|
+
.action(async function (name) {
|
|
116
|
+
try {
|
|
117
|
+
const opts = this.opts();
|
|
118
|
+
let renderCode = opts.renderCode ?? null;
|
|
119
|
+
if (opts.file) {
|
|
120
|
+
renderCode = await readFile(opts.file, "utf-8");
|
|
121
|
+
}
|
|
122
|
+
const resp = await apiClient.put(`/api/v1/cli/kb/template/${encodeURIComponent(name)}`, {
|
|
123
|
+
render_code: renderCode,
|
|
124
|
+
description: opts.description ?? null,
|
|
125
|
+
});
|
|
126
|
+
output(this, resp.entity, { keyValue: true });
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
errorOutput(err);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
update
|
|
133
|
+
.command("table <name>")
|
|
134
|
+
.description("Update a table's description or domain")
|
|
135
|
+
.option("--description <desc>", "New description")
|
|
136
|
+
.option("--domain <domain_id>", "New domain ID")
|
|
137
|
+
.action(async function (name) {
|
|
138
|
+
try {
|
|
139
|
+
const opts = this.opts();
|
|
140
|
+
const resp = await apiClient.put(`/api/v1/cli/kb/table/${encodeURIComponent(name)}`, {
|
|
141
|
+
description: opts.description ?? null,
|
|
142
|
+
domain_id: opts.domain ?? null,
|
|
143
|
+
});
|
|
144
|
+
output(this, resp.entity, { keyValue: true });
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
errorOutput(err);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
update
|
|
151
|
+
.command("domain <name>")
|
|
152
|
+
.description("Update a domain. --owner sets the governance owner (the person accountable for the domain and the fallback owner for its assets); pass an empty string to clear it.")
|
|
153
|
+
.option("--description <desc>", "New description")
|
|
154
|
+
.option("--color <hex>", "New hex color")
|
|
155
|
+
.option("--owner <user>", "Governance owner (email or user id); pass \"\" to clear")
|
|
156
|
+
.action(async function (name) {
|
|
157
|
+
try {
|
|
158
|
+
const opts = this.opts();
|
|
159
|
+
const resp = await apiClient.put(`/api/v1/cli/kb/domain/${encodeURIComponent(name)}`, {
|
|
160
|
+
description: opts.description ?? null,
|
|
161
|
+
color: opts.color ?? null,
|
|
162
|
+
owner: opts.owner ?? null,
|
|
163
|
+
});
|
|
164
|
+
output(this, resp.entity, { keyValue: true });
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
errorOutput(err);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
update
|
|
171
|
+
.command("synonym <term>")
|
|
172
|
+
.description("Update a synonym")
|
|
173
|
+
.option("--canonical <name>", "New canonical asset name")
|
|
174
|
+
.option("--type <type>", "New canonical type: metric, column, or table")
|
|
175
|
+
.option("--description <desc>", "New description")
|
|
176
|
+
.action(async function (term) {
|
|
177
|
+
try {
|
|
178
|
+
const opts = this.opts();
|
|
179
|
+
const resp = await apiClient.put(`/api/v1/cli/kb/synonym/${encodeURIComponent(term)}`, {
|
|
180
|
+
canonical: opts.canonical ?? null,
|
|
181
|
+
canonical_type: opts.type ?? null,
|
|
182
|
+
description: opts.description ?? null,
|
|
183
|
+
});
|
|
184
|
+
output(this, resp.entity, { keyValue: true });
|
|
185
|
+
}
|
|
186
|
+
catch (err) {
|
|
187
|
+
errorOutput(err);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
update
|
|
191
|
+
.command("relationship <name>")
|
|
192
|
+
.description("Update a relationship")
|
|
193
|
+
.option("--description <desc>", "New description")
|
|
194
|
+
.option("--primary-table <table>", "New primary table")
|
|
195
|
+
.option("--primary-column <col>", "New primary column")
|
|
196
|
+
.option("--related-table <table>", "New related table")
|
|
197
|
+
.option("--related-column <col>", "New related column")
|
|
198
|
+
.action(async function (name) {
|
|
199
|
+
try {
|
|
200
|
+
const opts = this.opts();
|
|
201
|
+
const resp = await apiClient.put(`/api/v1/cli/kb/relationship/${encodeURIComponent(name)}`, {
|
|
202
|
+
description: opts.description ?? null,
|
|
203
|
+
primary_table: opts.primaryTable ?? null,
|
|
204
|
+
primary_column: opts.primaryColumn ?? null,
|
|
205
|
+
related_table: opts.relatedTable ?? null,
|
|
206
|
+
related_column: opts.relatedColumn ?? null,
|
|
207
|
+
});
|
|
208
|
+
output(this, resp.entity, { keyValue: true });
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
errorOutput(err);
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
update
|
|
215
|
+
.command("topic <name>")
|
|
216
|
+
.description("Update a topic")
|
|
217
|
+
.option("--description <desc>", "New description")
|
|
218
|
+
.action(async function (name) {
|
|
219
|
+
try {
|
|
220
|
+
const opts = this.opts();
|
|
221
|
+
const resp = await apiClient.put(`/api/v1/cli/kb/topic/${encodeURIComponent(name)}`, {
|
|
222
|
+
description: opts.description ?? null,
|
|
223
|
+
});
|
|
224
|
+
output(this, resp.entity, { keyValue: true });
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
errorOutput(err);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=kb-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kb-update.js","sourceRoot":"","sources":["../../src/commands/kb-update.ts"],"names":[],"mappings":"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"}
|