@graphit/cli 0.2.114 → 0.2.140
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/README.md +2 -0
- package/bin/graphit +1 -1
- package/bin/graphit.ps1 +1 -1
- package/commands/doctor.md +14 -0
- package/commands/help.md +26 -0
- package/commands/login.md +13 -0
- package/commands/logout.md +11 -0
- package/commands/update.md +16 -0
- package/dist/commands/dashboard.js +126 -3
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/ds-config.d.ts +45 -0
- package/dist/commands/ds-config.js +122 -0
- package/dist/commands/ds-config.js.map +1 -0
- package/dist/commands/ds.d.ts +0 -45
- package/dist/commands/ds.js +2 -126
- package/dist/commands/ds.js.map +1 -1
- package/dist/commands/governance.js +1 -17
- package/dist/commands/governance.js.map +1 -1
- package/dist/commands/kb-create.js +2 -2
- package/dist/commands/kb-create.js.map +1 -1
- package/dist/commands/kb-update.js +2 -2
- package/dist/commands/kb-update.js.map +1 -1
- package/dist/commands/query.d.ts +38 -0
- package/dist/commands/query.js +138 -11
- package/dist/commands/query.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/skill-guard.d.ts +4 -0
- package/dist/skill-guard.js +75 -0
- package/dist/skill-guard.js.map +1 -0
- package/package.json +2 -1
- package/scripts/plugin-status.mjs +49 -0
- package/skills/graphit/SKILL.md +15 -12
- package/skills/graphit/VERSION.json +1 -1
- package/skills/graphit/cursor/graphit-sql-reference.mdc +2 -2
- package/skills/graphit/graphit.mdc +6 -9
- package/skills/graphit/references/governance-explained.md +2 -2
- package/skills/graphit/references/governance.md +22 -17
- package/skills/graphit/references/kb-actions.md +2 -3
- package/skills/graphit/references/kb-traversal.md +1 -1
- package/skills/graphit/references/operations.md +1 -1
- package/skills/graphit/references/runtime.md +5 -1
package/dist/commands/query.js
CHANGED
|
@@ -11,6 +11,108 @@ export function adhocGateDetail(err) {
|
|
|
11
11
|
}
|
|
12
12
|
return null;
|
|
13
13
|
}
|
|
14
|
+
// Exported for unit testing the conditional-gate parsing.
|
|
15
|
+
export function unresolvedConditionalDetail(err) {
|
|
16
|
+
const e = err;
|
|
17
|
+
if (e?.status === 422 &&
|
|
18
|
+
e.detailStructured &&
|
|
19
|
+
typeof e.detailStructured === "object" &&
|
|
20
|
+
e.detailStructured.block_type === "unresolved_conditional") {
|
|
21
|
+
return e.detailStructured;
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
// Build the request declarations from --apply-conditional / --skip-conditional.
|
|
26
|
+
// A skip spec is RULE:"reason"; a missing reason throws (a skip needs a reason).
|
|
27
|
+
export function buildConditionalDeclarations(apply, skip) {
|
|
28
|
+
const out = [];
|
|
29
|
+
for (const rule of apply || []) {
|
|
30
|
+
const name = rule.trim();
|
|
31
|
+
if (name)
|
|
32
|
+
out.push({ rule: name, decision: "apply" });
|
|
33
|
+
}
|
|
34
|
+
for (const spec of skip || []) {
|
|
35
|
+
const idx = spec.indexOf(":");
|
|
36
|
+
const name = (idx >= 0 ? spec.slice(0, idx) : spec).trim();
|
|
37
|
+
const reason = (idx >= 0 ? spec.slice(idx + 1) : "").trim().replace(/^"|"$/g, "");
|
|
38
|
+
if (!name)
|
|
39
|
+
continue;
|
|
40
|
+
if (!reason) {
|
|
41
|
+
throw new Error(`--skip-conditional needs a reason: ${name}:"why it does not apply"`);
|
|
42
|
+
}
|
|
43
|
+
out.push({ rule: name, decision: "skip", reason });
|
|
44
|
+
}
|
|
45
|
+
return out;
|
|
46
|
+
}
|
|
47
|
+
function printUnresolvedConditional(detail, fmt) {
|
|
48
|
+
const rules = detail.unresolved_conditionals || [];
|
|
49
|
+
const howTo = detail.how_to_declare ||
|
|
50
|
+
"Re-run with --apply-conditional RULE or --skip-conditional RULE:\"reason\" for each rule.";
|
|
51
|
+
if (fmt === "styled") {
|
|
52
|
+
styledWarn(detail.reason || "This query touches conditionally-enforced rules you must declare.");
|
|
53
|
+
for (const r of rules) {
|
|
54
|
+
styledMessage(`${formatBold(r.rule_name || r.rule_id || "rule")}${formatSeparator()}${formatDim(r.condition || "")}`);
|
|
55
|
+
}
|
|
56
|
+
styledMessage(howTo);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
note(detail.reason || "This query touches conditionally-enforced rules you must declare.");
|
|
60
|
+
for (const r of rules) {
|
|
61
|
+
note(`- ${r.rule_name || r.rule_id}: ${r.condition || ""}`);
|
|
62
|
+
}
|
|
63
|
+
note(howTo);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const OUTCOME_LABEL = {
|
|
67
|
+
rewritten: "rewrote",
|
|
68
|
+
validated: "validated",
|
|
69
|
+
blocked: "blocked",
|
|
70
|
+
overridden: "overridden",
|
|
71
|
+
conditional_applied: "applied (conditional)",
|
|
72
|
+
conditional_skipped: "skipped (conditional)",
|
|
73
|
+
conditional_default_fire: "applied by default (conditional)",
|
|
74
|
+
};
|
|
75
|
+
// Outcomes that actually mutated the SQL (vs. merely validated / skipped).
|
|
76
|
+
const CHANGED_OUTCOMES = new Set(["rewritten", "conditional_applied", "conditional_default_fire"]);
|
|
77
|
+
function injectionSubject(inj) {
|
|
78
|
+
if (inj.source === "deprecated_asset")
|
|
79
|
+
return inj.source_id || "deprecated asset";
|
|
80
|
+
return inj.rule_name || inj.source_id || "rule";
|
|
81
|
+
}
|
|
82
|
+
// Human- and agent-legible lines for the injection summary. Empty when nothing
|
|
83
|
+
// fired (the honest "no rules applied" state is printed by the caller).
|
|
84
|
+
export function formatInjectionSummary(summary, styled) {
|
|
85
|
+
const injections = summary?.injections || [];
|
|
86
|
+
const denied = summary?.override_denied || [];
|
|
87
|
+
if (!injections.length && !denied.length)
|
|
88
|
+
return [];
|
|
89
|
+
const changed = injections.filter((i) => CHANGED_OUTCOMES.has(i.outcome || "") &&
|
|
90
|
+
((i.added_clauses?.length || 0) > 0 || (i.transformations?.length || 0) > 0)).length;
|
|
91
|
+
const header = `Governed - ${changed} rule${changed === 1 ? "" : "s"} changed this query`;
|
|
92
|
+
const lines = [styled ? formatBold(header) : header];
|
|
93
|
+
for (const inj of injections) {
|
|
94
|
+
const label = OUTCOME_LABEL[inj.outcome || ""] || inj.outcome || "applied";
|
|
95
|
+
const subject = ` - ${injectionSubject(inj)}${formatSeparator()}${label}`;
|
|
96
|
+
lines.push(styled ? subject : ` - ${injectionSubject(inj)}: ${label}`);
|
|
97
|
+
if (inj.why)
|
|
98
|
+
lines.push(` ${styled ? formatDim(inj.why) : inj.why}`);
|
|
99
|
+
for (const clause of inj.added_clauses || [])
|
|
100
|
+
lines.push(` + ${clause}`);
|
|
101
|
+
for (const t of inj.transformations || []) {
|
|
102
|
+
const col = t.column;
|
|
103
|
+
if (col)
|
|
104
|
+
lines.push(` ~ ${col} hidden`);
|
|
105
|
+
}
|
|
106
|
+
if (inj.evidence)
|
|
107
|
+
lines.push(` ok ${inj.evidence}`);
|
|
108
|
+
if (inj.reason)
|
|
109
|
+
lines.push(` ${styled ? formatDim(inj.reason) : inj.reason}`);
|
|
110
|
+
}
|
|
111
|
+
for (const d of denied) {
|
|
112
|
+
lines.push(` - override denied: ${d.rule_name || "rule"}${d.reason ? ` - ${d.reason}` : ""}`);
|
|
113
|
+
}
|
|
114
|
+
return lines;
|
|
115
|
+
}
|
|
14
116
|
// Returns the justification to re-run with, or null to cancel (caller exits 1).
|
|
15
117
|
async function promptAdhocGate(gate, fmt) {
|
|
16
118
|
const reason = gate.reason || "This ad-hoc query runs on a governed data source.";
|
|
@@ -53,6 +155,8 @@ export function registerQueryCommands(program) {
|
|
|
53
155
|
.option("--override-rules <names...>", "Governance rule names to override")
|
|
54
156
|
.option("--verbose", "Show expanded SQL after macro resolution")
|
|
55
157
|
.option("--adhoc-reason <text>", "Justify running an ad-hoc query on a governed source (what you searched in governance, what you found, why it does not fit). Required for any ad-hoc query; prefer governed {{metric:X}}/{{dim:X}} references instead")
|
|
158
|
+
.option("--apply-conditional <rules...>", "Enforce a conditionally-enforced rule for this query (by rule name). Repeatable")
|
|
159
|
+
.option("--skip-conditional <specs...>", "Skip a conditionally-enforced rule: RULE:\"reason\" (a reason is required). Repeatable")
|
|
56
160
|
.option("--timeout <seconds>", "Request timeout in seconds (default 120; backend caps at 900)")
|
|
57
161
|
.action(async function (sql) {
|
|
58
162
|
const cmd = this;
|
|
@@ -66,6 +170,17 @@ export function registerQueryCommands(program) {
|
|
|
66
170
|
errorOutput(err);
|
|
67
171
|
return;
|
|
68
172
|
}
|
|
173
|
+
// Project #262: build the per-rule conditional declarations from
|
|
174
|
+
// --apply-conditional RULE and --skip-conditional RULE:"reason".
|
|
175
|
+
let conditionalDeclarations = [];
|
|
176
|
+
try {
|
|
177
|
+
conditionalDeclarations = buildConditionalDeclarations(opts.applyConditional, opts.skipConditional);
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
errorOutput(err);
|
|
181
|
+
process.exitCode = 1;
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
69
184
|
const makeBody = (adhocReason) => ({
|
|
70
185
|
sql,
|
|
71
186
|
data_source_id: opts.ds || null,
|
|
@@ -74,6 +189,7 @@ export function registerQueryCommands(program) {
|
|
|
74
189
|
limit: parseInt(opts.limit, 10),
|
|
75
190
|
override_rules: opts.overrideRules || null,
|
|
76
191
|
adhoc_reason: adhocReason,
|
|
192
|
+
conditional_declarations: conditionalDeclarations.length ? conditionalDeclarations : null,
|
|
77
193
|
});
|
|
78
194
|
const renderResult = (resp) => {
|
|
79
195
|
if (fmt === "styled") {
|
|
@@ -105,10 +221,14 @@ export function registerQueryCommands(program) {
|
|
|
105
221
|
if (prov.max_rows_cap != null)
|
|
106
222
|
parts.push(`max rows: ${prov.max_rows_cap}`);
|
|
107
223
|
styledMessage(parts.join(formatSeparator()));
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
224
|
+
// Project #262: which rules changed the query and how.
|
|
225
|
+
const summaryLines = formatInjectionSummary(prov.injection_summary, true);
|
|
226
|
+
if (summaryLines.length) {
|
|
227
|
+
for (const l of summaryLines)
|
|
228
|
+
styledMessage(l);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
styledMessage(formatDim("no governance rules applied"));
|
|
112
232
|
}
|
|
113
233
|
}
|
|
114
234
|
styledOutro();
|
|
@@ -125,8 +245,6 @@ export function registerQueryCommands(program) {
|
|
|
125
245
|
const tierIcons = { governed: "[governed]", verified: "[verified]", ad_hoc: "[ad-hoc]" };
|
|
126
246
|
const icon = tierIcons[prov.tier] || `[${prov.tier}]`;
|
|
127
247
|
const parts = [icon];
|
|
128
|
-
if (prov.governed_mode)
|
|
129
|
-
parts.push("governed DS");
|
|
130
248
|
if (prov.max_rows_cap != null)
|
|
131
249
|
parts.push(`max_rows=${prov.max_rows_cap}`);
|
|
132
250
|
if (prov.kb_refs > 0)
|
|
@@ -137,11 +255,10 @@ export function registerQueryCommands(program) {
|
|
|
137
255
|
if (ruleNames?.length)
|
|
138
256
|
parts.push(`(${ruleNames.join(", ")})`);
|
|
139
257
|
note(`\n${parts.join(", ")}`);
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}
|
|
258
|
+
// Project #262: the per-rule attribution for the driving coding agent.
|
|
259
|
+
// The full structured summary also rides resp.provenance.injection_summary.
|
|
260
|
+
const summaryLines = formatInjectionSummary(prov.injection_summary, false);
|
|
261
|
+
note(summaryLines.length ? `\n${summaryLines.join("\n")}` : "\nno governance rules applied");
|
|
145
262
|
}
|
|
146
263
|
}
|
|
147
264
|
};
|
|
@@ -150,6 +267,16 @@ export function registerQueryCommands(program) {
|
|
|
150
267
|
renderResult(resp);
|
|
151
268
|
}
|
|
152
269
|
catch (err) {
|
|
270
|
+
// Project #262: a 422 unresolved_conditional lists the conditionally-
|
|
271
|
+
// enforced rules to declare. Print each rule's condition + how to declare,
|
|
272
|
+
// then exit non-zero so the caller re-runs with --apply-conditional /
|
|
273
|
+
// --skip-conditional. This is the retryable ask, not the ad-hoc gate.
|
|
274
|
+
const cond = unresolvedConditionalDetail(err);
|
|
275
|
+
if (cond) {
|
|
276
|
+
printUnresolvedConditional(cond, fmt);
|
|
277
|
+
process.exitCode = 1;
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
153
280
|
// Feature #616/#685: a 422 is the ad-hoc measure gate - prompt for a
|
|
154
281
|
// justification (TTY) or print a rejection + the four-part WHY (agent/CI),
|
|
155
282
|
// then re-run with --adhoc-reason if a reason was given.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,7 @@ import { registerGovernanceCommands } from "./commands/governance.js";
|
|
|
15
15
|
import { registerTeamCommands } from "./commands/team.js";
|
|
16
16
|
import { registerPluginCommands } from "./commands/plugin.js";
|
|
17
17
|
import { getCurrentVersion, printUpdateBanner, printMigrationNoticeIfGlobal, printPluginHealthPreflight, fireBackgroundCheck, } from "./update-check.js";
|
|
18
|
+
import { printSkillNotLoadedWarning } from "./skill-guard.js";
|
|
18
19
|
const program = new Command();
|
|
19
20
|
const args = process.argv.slice(2);
|
|
20
21
|
const pluginArgIndex = args.indexOf("plugin");
|
|
@@ -39,6 +40,7 @@ if (!isPluginStatusCommand) {
|
|
|
39
40
|
printMigrationNoticeIfGlobal();
|
|
40
41
|
printUpdateBanner();
|
|
41
42
|
printPluginHealthPreflight();
|
|
43
|
+
printSkillNotLoadedWarning();
|
|
42
44
|
}
|
|
43
45
|
program.parse();
|
|
44
46
|
fireBackgroundCheck();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,iFAAiF;AACjF,oFAAoF;AACpF,oEAAoE;AACpE,OAAO,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,4BAA4B,EAC5B,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,iFAAiF;AACjF,oFAAoF;AACpF,oEAAoE;AACpE,OAAO,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,4BAA4B,EAC5B,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC9C,MAAM,qBAAqB,GAAG,cAAc,IAAI,CAAC,IAAI,cAAc,KAAK,cAAc,GAAG,CAAC,CAAC;AAE3F,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,oEAAoE,CAAC;KACjF,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,MAAM,CAAC,mBAAmB,EAAE,iDAAiD,EAAE,MAAM,CAAC,CAAC;AAE1F,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC3B,4BAA4B,EAAE,CAAC;IAC/B,iBAAiB,EAAE,CAAC;IACpB,0BAA0B,EAAE,CAAC;IAC7B,0BAA0B,EAAE,CAAC;AAC/B,CAAC;AACD,OAAO,CAAC,KAAK,EAAE,CAAC;AAChB,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function isPluginInstalledButNotLoaded(env?: NodeJS.ProcessEnv): boolean;
|
|
2
|
+
export declare const SKILL_NOT_LOADED_MESSAGE: string;
|
|
3
|
+
/** Print the not-loaded warning to stderr (decoration channel). No-op otherwise. */
|
|
4
|
+
export declare function printSkillNotLoadedWarning(env?: NodeJS.ProcessEnv): void;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
// Feature #743: warn when the Graphit plugin is installed but its SKILL did not load
|
|
5
|
+
// in THIS session (a mid-session plugin install). Claude Code loads plugin skills,
|
|
6
|
+
// slash commands, hooks, and the `graphit` PATH entry at SESSION START; the skill
|
|
7
|
+
// cannot load into a running session, so the only remedy is a new session. Without a
|
|
8
|
+
// signal the agent silently improvises off the raw CLI (observed in a real first-time
|
|
9
|
+
// demo). We warn loudly on every command rather than block, so a false positive can
|
|
10
|
+
// never break a working session.
|
|
11
|
+
//
|
|
12
|
+
// Primary signal (best CLI-side proxy): the plugin's SessionStart hook runs ONLY when
|
|
13
|
+
// Claude Code loaded the plugin at this session's start, and it stamps a marker keyed
|
|
14
|
+
// by the session id (`~/.graphit/sessions/<id>`). The CLI checks for a marker matching
|
|
15
|
+
// CLAUDE_CODE_SESSION_ID - the Bash tool and the hook receive the SAME id (both from
|
|
16
|
+
// Claude Code's getSessionId()). Marker present => the plugin's machinery loaded this
|
|
17
|
+
// exact session - a better proxy than PATH, which only proves the bin is reachable and
|
|
18
|
+
// is shared across all installed plugins.
|
|
19
|
+
//
|
|
20
|
+
// Honest limit: neither the marker nor PATH can see the agent's skill REGISTRY (that
|
|
21
|
+
// lives in the agent's context, not visible to a CLI subprocess). Both prove "the
|
|
22
|
+
// plugin loaded this session," not "the skill is invocable" - so this cannot catch the
|
|
23
|
+
// rarer case where hooks load but the skill silently does not (a Claude Code bug,
|
|
24
|
+
// anthropics/claude-code#42471). It DOES reliably catch the target case - a genuine
|
|
25
|
+
// mid-session install, where nothing loaded (no marker, bin not on PATH). Warn-only,
|
|
26
|
+
// so any miss/false-positive costs at most one harmless stderr line.
|
|
27
|
+
//
|
|
28
|
+
// Legacy fallback (rollout window): sessions that loaded an older, pre-marker plugin
|
|
29
|
+
// build have no marker. So the plugin bin being on PATH still counts as loaded - a
|
|
30
|
+
// suppress-only signal that can never *cause* a warning, only prevent a false one.
|
|
31
|
+
function pluginDataDir(env) {
|
|
32
|
+
return env.GRAPHIT_PLUGIN_DATA ?? join(homedir(), ".graphit");
|
|
33
|
+
}
|
|
34
|
+
function loadedThisSession(env) {
|
|
35
|
+
// Reliable: the SessionStart hook stamped a marker for this exact session id.
|
|
36
|
+
const sid = env.CLAUDE_CODE_SESSION_ID;
|
|
37
|
+
if (sid && existsSync(join(pluginDataDir(env), "sessions", sid)))
|
|
38
|
+
return true;
|
|
39
|
+
// Fallback (suppress-only): the plugin bin on PATH means Claude Code injected it at
|
|
40
|
+
// session start - covers sessions still on a pre-marker plugin build.
|
|
41
|
+
return /graphit-plugin/.test(env.PATH ?? "");
|
|
42
|
+
}
|
|
43
|
+
function pluginInstalledOnDisk(env) {
|
|
44
|
+
const pluginsRoot = env.CLAUDE_PLUGINS_ROOT ?? join(homedir(), ".claude", "plugins");
|
|
45
|
+
return (existsSync(join(pluginsRoot, "marketplaces", "graphit-plugin")) ||
|
|
46
|
+
existsSync(join(pluginsRoot, "cache", "graphit-plugin")));
|
|
47
|
+
}
|
|
48
|
+
export function isPluginInstalledButNotLoaded(env = process.env) {
|
|
49
|
+
// Scope to Claude Code. Other surfaces (Codex, a plain terminal, CI) load skills
|
|
50
|
+
// differently or legitimately have none, so the "restart Claude Code" remedy does
|
|
51
|
+
// not apply and could mislead.
|
|
52
|
+
if (!env.CLAUDE_CODE_ENTRYPOINT)
|
|
53
|
+
return false;
|
|
54
|
+
if (loadedThisSession(env))
|
|
55
|
+
return false;
|
|
56
|
+
// Not loaded this session: warn only if the plugin is actually installed on disk
|
|
57
|
+
// (else this is a genuine no-plugin surface, where the CLI itself is the interface).
|
|
58
|
+
return pluginInstalledOnDisk(env);
|
|
59
|
+
}
|
|
60
|
+
export const SKILL_NOT_LOADED_MESSAGE = [
|
|
61
|
+
"The Graphit skill is NOT loaded in this session.",
|
|
62
|
+
"The plugin is installed, but Claude Code loads plugin skills and commands only at",
|
|
63
|
+
"session start - so a mid-session install leaves this session without the Graphit",
|
|
64
|
+
"skill, /graphit, or the guided workflow (scope gates, KB governance, quality).",
|
|
65
|
+
"Tell the user to start a NEW session, then continue there. Do not build dashboards,",
|
|
66
|
+
"create KB assets, or run analysis without the skill - the CLI runs, but the",
|
|
67
|
+
"workflow that makes the output correct and governed lives in the skill.",
|
|
68
|
+
].join("\n");
|
|
69
|
+
/** Print the not-loaded warning to stderr (decoration channel). No-op otherwise. */
|
|
70
|
+
export function printSkillNotLoadedWarning(env = process.env) {
|
|
71
|
+
if (isPluginInstalledButNotLoaded(env)) {
|
|
72
|
+
console.error(SKILL_NOT_LOADED_MESSAGE);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=skill-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-guard.js","sourceRoot":"","sources":["../src/skill-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,qFAAqF;AACrF,mFAAmF;AACnF,kFAAkF;AAClF,qFAAqF;AACrF,sFAAsF;AACtF,oFAAoF;AACpF,iCAAiC;AACjC,EAAE;AACF,sFAAsF;AACtF,sFAAsF;AACtF,uFAAuF;AACvF,qFAAqF;AACrF,sFAAsF;AACtF,uFAAuF;AACvF,0CAA0C;AAC1C,EAAE;AACF,qFAAqF;AACrF,kFAAkF;AAClF,uFAAuF;AACvF,kFAAkF;AAClF,oFAAoF;AACpF,qFAAqF;AACrF,qEAAqE;AACrE,EAAE;AACF,qFAAqF;AACrF,mFAAmF;AACnF,mFAAmF;AAEnF,SAAS,aAAa,CAAC,GAAsB;IAC3C,OAAO,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAsB;IAC/C,8EAA8E;IAC9E,MAAM,GAAG,GAAG,GAAG,CAAC,sBAAsB,CAAC;IACvC,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9E,oFAAoF;IACpF,sEAAsE;IACtE,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAsB;IACnD,MAAM,WAAW,GACf,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACnE,OAAO,CACL,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;QAC/D,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,MAAyB,OAAO,CAAC,GAAG;IAEpC,iFAAiF;IACjF,kFAAkF;IAClF,+BAA+B;IAC/B,IAAI,CAAC,GAAG,CAAC,sBAAsB;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,iBAAiB,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,iFAAiF;IACjF,qFAAqF;IACrF,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,kDAAkD;IAClD,mFAAmF;IACnF,kFAAkF;IAClF,gFAAgF;IAChF,qFAAqF;IACrF,6EAA6E;IAC7E,yEAAyE;CAC1E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,oFAAoF;AACpF,MAAM,UAAU,0BAA0B,CACxC,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,6BAA6B,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@graphit/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.140",
|
|
4
4
|
"description": "Graphit CLI - Build custom dashboards from any AI coding assistant",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"skills",
|
|
31
31
|
"hooks",
|
|
32
32
|
"scripts",
|
|
33
|
+
"commands",
|
|
33
34
|
".claude-plugin",
|
|
34
35
|
".codex-plugin"
|
|
35
36
|
],
|
|
@@ -5,10 +5,13 @@ import {
|
|
|
5
5
|
cpSync,
|
|
6
6
|
existsSync,
|
|
7
7
|
mkdirSync,
|
|
8
|
+
readdirSync,
|
|
8
9
|
readFileSync,
|
|
9
10
|
realpathSync,
|
|
10
11
|
renameSync,
|
|
11
12
|
rmSync,
|
|
13
|
+
statSync,
|
|
14
|
+
unlinkSync,
|
|
12
15
|
writeFileSync,
|
|
13
16
|
} from "node:fs";
|
|
14
17
|
import { homedir } from "node:os";
|
|
@@ -29,6 +32,7 @@ const REPAIRABLE_BUNDLE_ENTRIES = [
|
|
|
29
32
|
"skills",
|
|
30
33
|
"hooks",
|
|
31
34
|
"scripts",
|
|
35
|
+
"commands",
|
|
32
36
|
"bin",
|
|
33
37
|
"README.md",
|
|
34
38
|
"package.json",
|
|
@@ -513,6 +517,47 @@ function tryParseJson(value) {
|
|
|
513
517
|
}
|
|
514
518
|
}
|
|
515
519
|
|
|
520
|
+
// Feature #743: stamp a per-session marker so the CLI can tell whether the plugin
|
|
521
|
+
// actually loaded THIS session. This SessionStart hook only runs when Claude Code
|
|
522
|
+
// loaded the plugin at session start - a mid-session install never runs it, so the
|
|
523
|
+
// marker is absent and the CLI can warn. The SessionStart payload carries session_id
|
|
524
|
+
// (the same value as the Bash tool's CLAUDE_CODE_SESSION_ID - both from getSessionId()),
|
|
525
|
+
// and the marker is keyed by it so concurrent sessions never clobber each other.
|
|
526
|
+
function stampSessionMarker() {
|
|
527
|
+
if (hookEvent !== "SessionStart") return;
|
|
528
|
+
let sessionId = "";
|
|
529
|
+
try {
|
|
530
|
+
sessionId = String(tryParseJson(readFileSync(0, "utf-8"))?.session_id ?? "").trim();
|
|
531
|
+
} catch {
|
|
532
|
+
return;
|
|
533
|
+
}
|
|
534
|
+
// The id becomes a filename, so accept only an id-shaped token (path-safety).
|
|
535
|
+
if (!/^[A-Za-z0-9._-]{1,128}$/.test(sessionId)) return;
|
|
536
|
+
const dir = join(cacheRoot, "sessions");
|
|
537
|
+
try {
|
|
538
|
+
mkdirSync(dir, { recursive: true });
|
|
539
|
+
writeFileSync(join(dir, sessionId), String(Date.now()), "utf-8");
|
|
540
|
+
pruneOldSessionMarkers(dir);
|
|
541
|
+
} catch {
|
|
542
|
+
// Best-effort: a missing marker only costs an extra (harmless) CLI warning.
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
function pruneOldSessionMarkers(dir) {
|
|
547
|
+
const cutoff = Date.now() - 48 * 60 * 60 * 1000;
|
|
548
|
+
try {
|
|
549
|
+
for (const name of readdirSync(dir)) {
|
|
550
|
+
try {
|
|
551
|
+
if (statSync(join(dir, name)).mtimeMs < cutoff) unlinkSync(join(dir, name));
|
|
552
|
+
} catch {
|
|
553
|
+
/* skip an unreadable entry */
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
} catch {
|
|
557
|
+
/* dir missing or unreadable - nothing to prune */
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
|
|
516
561
|
// Feature #675: read session liveness locally (zero network) so the single
|
|
517
562
|
// startup check covers version AND auth. logged_in = a credentials file holding
|
|
518
563
|
// a refresh_token is present; email powers the greeting. The real token refresh
|
|
@@ -730,6 +775,10 @@ if (isMainModule()) {
|
|
|
730
775
|
process.exit(0);
|
|
731
776
|
}
|
|
732
777
|
|
|
778
|
+
// Feature #743: record that the plugin loaded this session (SessionStart only;
|
|
779
|
+
// reads stdin before anything else would consume it).
|
|
780
|
+
stampSessionMarker();
|
|
781
|
+
|
|
733
782
|
const status = await collectStatus();
|
|
734
783
|
|
|
735
784
|
if (args.has("--json")) {
|
package/skills/graphit/SKILL.md
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
name: graphit
|
|
3
3
|
description: >-
|
|
4
4
|
Use Graphit for ANY question about the user's business or product data: metrics, KPIs, revenue, retention, spend, users, cohorts, funnels, trends, comparisons, "why did X change", "how are we doing on Y", analysis, reports, or dashboards. Activate even when the user does not say "Graphit" or name any tool: if someone wants to understand their numbers, this is the tool. Graphit answers through a governed semantic layer (computed the team's way, reusable and safe to share) and delivers the answer as a fast cached-data query or a hand-authored interactive HTML dashboard, and can create the metrics, dimensions, and rules an answer needs. Prefer Graphit over hand-rolled one-off analysis whenever the data is, or could be, the user's business data. Skip only for pure software tasks (code, logs, config, infra) or data with nothing to do with the user's business.
|
|
5
|
-
skill_version: "0.2.
|
|
5
|
+
skill_version: "0.2.140"
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
<!-- SIZE EXEMPTION (SKILL.md): standard hard limit 12,288 chars, exempted ceiling
|
|
8
|
+
<!-- SIZE EXEMPTION (SKILL.md): standard hard limit 12,288 chars, exempted ceiling 28,672. This router always-loads the collaboration/pace spine (brainstorm, ask-user, present-result, plan-next), the hard constraints + scope gate, the investigation loop, and the generated command table (between the COMMANDS markers, written by scripts/generate-commands-doc.mjs) - all needed every turn, so they cannot defer to a reference. The marker sits after the YAML frontmatter so the loader and sync-plugin-version.mjs still parse it. Reviewed 2026-07-11. -->
|
|
9
9
|
|
|
10
10
|
# Graphit CLI
|
|
11
11
|
|
|
@@ -33,11 +33,12 @@ Two interlocking jobs: use the knowledge base (investigate, then build the dashb
|
|
|
33
33
|
|
|
34
34
|
- Never hardcode or invent numbers. Live data comes from graphit.resolve against governed SQL.
|
|
35
35
|
- Never silently substitute ad-hoc SQL for a measure that should be a governed metric. Ad-hoc is the frontier: fine for genuine new questions, always provenance-tagged.
|
|
36
|
+
- Never render business-data charts inline in chat; deliver dashboards in Graphit.
|
|
36
37
|
|
|
37
38
|
### MUST
|
|
38
39
|
|
|
39
40
|
- Govern first: if the dashboard needs a business measure the KB lacks, create the governed metric or dimension before building (the gate).
|
|
40
|
-
-
|
|
41
|
+
- Mutating a shared dashboard needs an active edit session - catch one with `graphit dashboard edit <id>` (acquires the session, starts a draft, opens it in the browser in edit mode). Edits land in that draft until `graphit dashboard publish <id>` makes them live, or `graphit dashboard release <id> --yes` discards them. Gated: 409 if someone else is editing, 423 if locked, 403 if view-only. Private dashboards need no session - edit directly.
|
|
41
42
|
- Confirm destructive actions (deleting a KB asset or a dashboard) with the user before running them.
|
|
42
43
|
- Honor the canvas render contracts: the `percent` format only appends `%` (it does not multiply by 100), so multiply 0-1 ratios in SQL (`AVG(x) * 100.0 ... AS x_pct`); `graphit.table` formats per column via `columnFormats`; and each resolving container wraps in `class="gh-loading"` with the baked overlay (`gh-loading-overlay`, `gh-loading-spin`, `@keyframes gh-spin`) so first paint shows a spinner until resolves settle (detail in references/runtime.md and chart-patterns.md).
|
|
43
44
|
|
|
@@ -86,7 +87,7 @@ Soft narration is what "just build it" drops. These hard stops hold even then: c
|
|
|
86
87
|
|
|
87
88
|
### Handoffs, failure, truthful reporting
|
|
88
89
|
|
|
89
|
-
- Name the handoffs. Some actions live on the platform, not the CLI:
|
|
90
|
+
- Name the handoffs. Some actions live on the platform, not the CLI: visiting a data source's verification link, deleting a source from the Sources Hub. Say when a step hands control back to the user, and move between building the dashboard and building the knowledge base through the gate.
|
|
90
91
|
- Keep local files ephemeral. Any file you create - scratch HTML, an export, throwaway SQL - goes in one `./.graphit/` working dir, never scattered in the repo; the platform dashboard is the source of truth and re-exports on demand. When a piece of work is done, offer to remove `.graphit/` (nothing of value is lost). Mechanics: operations.md.
|
|
91
92
|
- On failure: retry once if it looks transient (timeout, rate limit); on a real error (missing column, permission, validation) stop, say what failed and the next step, never a bare "something went wrong".
|
|
92
93
|
- Report truthfully: what worked, what did not, what you are unsure of. If only part succeeded, say which part and why the rest did not. Done means the answer is delivered and every dashboard element resolves on real data with no entity_sql_warnings.
|
|
@@ -143,7 +144,7 @@ Read the one that matches what you are doing now. Do not preload them. Exact com
|
|
|
143
144
|
|
|
144
145
|
## Commands
|
|
145
146
|
|
|
146
|
-
Graphit is one CLI, but how you invoke it depends on your environment. On Claude Code the plugin provides a `graphit` wrapper, so `graphit <command>` runs the current CLI. On Codex, Cursor, a terminal, or CI there is no `graphit` wrapper - invoke the CLI explicitly with `npx -y @graphit/cli@0.2.
|
|
147
|
+
Graphit is one CLI, but how you invoke it depends on your environment. On Claude Code the plugin provides a `graphit` wrapper, so `graphit <command>` runs the current CLI. On Codex, Cursor, a terminal, or CI there is no `graphit` wrapper - invoke the CLI explicitly with `npx -y @graphit/cli@0.2.140 <command>` (a stamped version, kept current automatically by the build), or pin an exact one - `npx -y @graphit/cli@<exact> <command>` - for a reproducible run. The table below is the always-loaded command map, generated from the CLI itself, so it is the source of truth for which commands, subcommands, and flags exist. For exact flag values and full descriptions, run `graphit <command> --help` - never guess a flag.
|
|
147
148
|
|
|
148
149
|
<!-- COMMANDS:START -->
|
|
149
150
|
|
|
@@ -164,7 +165,7 @@ _Generated from the CLI by `npm run gen:commands` - do not hand-edit between the
|
|
|
164
165
|
- `kb unverify <type> <name>` - Unverify a KB asset (mark as draft); cascades to metric variants
|
|
165
166
|
- `kb create metric` - Create a new metric - `--name --sql --table --description --topics --default-dimensions --parameters --parameters-file --skip-validate --unverified`
|
|
166
167
|
- `kb create dimension` - Create a new dimension - `--name --expr --table --type --output-type --description --topics --skip-validate --unverified`
|
|
167
|
-
- `kb create rule` - Create a new rule. Without --apply-on the rule governs the whole --table, which cascades to every metric and dimension on it. Use --apply-on metric:NAME / dimension:NAME to govern only specific assets instead. A rule must apply to at least one asset (targetless rules are rejected). - `--name --sql --table --description --topics --constraint --
|
|
168
|
+
- `kb create rule` - Create a new rule. Without --apply-on the rule governs the whole --table, which cascades to every metric and dimension on it. Use --apply-on metric:NAME / dimension:NAME to govern only specific assets instead. A rule must apply to at least one asset (targetless rules are rejected). - `--name --sql --table --description --topics --constraint --enforcement-mode --apply-on --skip-validate --unverified`
|
|
168
169
|
- `kb create domain` - Create a new domain - `--name --description --color`
|
|
169
170
|
- `kb create synonym` - Create a new synonym - `--term --canonical --type --description --unverified`
|
|
170
171
|
- `kb create relationship` - Create a new relationship (JOIN between tables) - `--name --primary-table --primary-column --related-table --related-column --description`
|
|
@@ -172,7 +173,7 @@ _Generated from the CLI by `npm run gen:commands` - do not hand-edit between the
|
|
|
172
173
|
- `kb create template` - Create a reusable template (chart, KPI, or filter control) - `--name --render-code --file --description --chart-types`
|
|
173
174
|
- `kb update metric <name>` - Update a metric. - `--sql --table --description --topics --default-dimensions --secondary-tables --parameters --parameters-file`
|
|
174
175
|
- `kb update dimension <name>` - Update a dimension. - `--expr --table --description --topics --secondary-tables`
|
|
175
|
-
- `kb update rule <name>` - Update a rule. Broadening a verified rule's targeting requires org admin. - `--sql --description --topics --constraint --
|
|
176
|
+
- `kb update rule <name>` - Update a rule. Broadening a verified rule's targeting requires org admin. - `--sql --description --topics --constraint --enforcement-mode --apply-on`
|
|
176
177
|
- `kb update template <name>` - Update a template - `--render-code --file --description`
|
|
177
178
|
- `kb update table <name>` - Update a table's description or domain - `--description --domain`
|
|
178
179
|
- `kb update domain <name>` - 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. - `--description --color --owner`
|
|
@@ -182,7 +183,7 @@ _Generated from the CLI by `npm run gen:commands` - do not hand-edit between the
|
|
|
182
183
|
- `kb delete <type> <name>` - Delete a KB entity (requires --yes flag) - `--yes`
|
|
183
184
|
|
|
184
185
|
**query** - Run SQL against a cached data source or a live warehouse (Snowflake / BigQuery)
|
|
185
|
-
- `query <sql>` - Run SQL against a cached data source or a live warehouse (Snowflake / BigQuery) - `--ds --warehouse --connection --limit --override-rules --verbose --adhoc-reason --timeout`
|
|
186
|
+
- `query <sql>` - Run SQL against a cached data source or a live warehouse (Snowflake / BigQuery) - `--ds --warehouse --connection --limit --override-rules --verbose --adhoc-reason --apply-conditional --skip-conditional --timeout`
|
|
186
187
|
|
|
187
188
|
**metadata** - Warehouse metadata (Snowflake schemas / BigQuery datasets)
|
|
188
189
|
- `metadata schemas` - List schemas (Snowflake) or datasets (BigQuery) - `--connection`
|
|
@@ -194,7 +195,7 @@ _Generated from the CLI by `npm run gen:commands` - do not hand-edit between the
|
|
|
194
195
|
- `ds create` - Create a data source from a SQL query (--sql) or a local Excel/CSV file (--file) - `--sql --name --connection --schema --skip-scan --detect-tables --source-tables --file --domain --sheet`
|
|
195
196
|
- `ds refresh [ids...]` - Refresh data sources (use --all for all, or pass one or more IDs). On a breaking schema change a refresh is paused (status 'schema_changed') and the old data keeps serving; re-run with --force to accept the new schema. - `--all --no-wait --skip-empty --force`
|
|
196
197
|
- `ds verify <id>` - Scan an unverified data source's schema and review it. Warehouse/SQL sources print a verification link; add --accept-schema to accept the AI schema and activate from the CLI. File uploads activate automatically. - `--force --accept-schema`
|
|
197
|
-
- `ds update <id>` - Update data source
|
|
198
|
+
- `ds update <id>` - Update a data source row cap - `--max-rows`
|
|
198
199
|
- `ds refresh-config <id>` - Configure a data source's refresh mode (full or incremental/watermark) and settings. Sets the complete incremental config each call - omitted flags reset to server defaults (e.g. omitting --table-lookback clears existing lookback windows). - `--mode --watermark-column --watermark-type --merge-key --merge-window --table-lookback --reconciliation`
|
|
199
200
|
|
|
200
201
|
**dashboard** - Custom dashboard management
|
|
@@ -205,8 +206,11 @@ _Generated from the CLI by `npm run gen:commands` - do not hand-edit between the
|
|
|
205
206
|
- `dashboard update-entity <id> <entityId>` - Update a single entity's inner HTML without replacing the full page - `--file --stdin --title --label`
|
|
206
207
|
- `dashboard get-html <id>` - Get the current HTML content of a dashboard
|
|
207
208
|
- `dashboard list-entities <id>` - List the entities on a dashboard (id, label, KB refs, data source)
|
|
208
|
-
- `dashboard get-entity <id> <entityId>` - Get a single entity's
|
|
209
|
+
- `dashboard get-entity <id> <entityId>` - Get a single entity's structured context (label, SQL, KB refs, data source, HTML). Use --with-data to also execute the governed query and return resolved data inline. Use --image for a local PNG of the graph (as last viewed) to Read - `--with-data --params --image --raw`
|
|
209
210
|
- `dashboard export <id>` - Export dashboard as PNG or PDF - `--format --output`
|
|
211
|
+
- `dashboard edit <id>` - Enter edit mode on a shared dashboard: catch the editing session + start a draft, then open it in your browser. Gated (409) if someone else is editing, (423) if locked, (403) if view-only. Private dashboards need no session - edit directly. - `--no-open`
|
|
212
|
+
- `dashboard publish <id>` - Publish your draft edits on a shared dashboard (makes them live) and release the editing session
|
|
213
|
+
- `dashboard release <id>` - Discard your unpublished draft edits on a shared dashboard and release the editing session (requires --yes) - `--yes`
|
|
210
214
|
- `dashboard delete <id>` - Delete a custom dashboard (requires --yes) - `--yes`
|
|
211
215
|
|
|
212
216
|
**connector** - Connection management. OAuth and GitHub connections are set up in the Graphit web app.
|
|
@@ -217,8 +221,7 @@ _Generated from the CLI by `npm run gen:commands` - do not hand-edit between the
|
|
|
217
221
|
- `connector remove <id>` - Remove a connection (requires --yes) - `--yes`
|
|
218
222
|
|
|
219
223
|
**governance** - Query governance management
|
|
220
|
-
- `governance status` - Show governance
|
|
221
|
-
- `governance set` - Set governance mode - `--mode`
|
|
224
|
+
- `governance status` - Show governance conformance summary
|
|
222
225
|
- `governance audit` - Query the governance audit log - `--last --tier --user --channel --limit`
|
|
223
226
|
|
|
224
227
|
**team** - Team management
|
|
@@ -157,8 +157,8 @@ Ground every query in the KB. When using `{{metric:X}}`/`{{dim:X}}` references,
|
|
|
157
157
|
|
|
158
158
|
For inline SQL (no KB refs): show query + results + governance, and suggest the KB reference equivalent to nudge toward governed tier.
|
|
159
159
|
|
|
160
|
-
On a
|
|
160
|
+
On the CLI, every ad-hoc query needs a substantive `--adhoc-reason` when no KB definition fits. An ad-hoc **business measure** (aggregate / `GROUP BY` without `{{metric:X}}`) is hard-blocked when the caller lacks EXPLORE access to any queried scope; a reason never bypasses that access denial.
|
|
161
161
|
|
|
162
162
|
## Presenting Data Source Results
|
|
163
163
|
|
|
164
|
-
After `graphit ds list`: table with **bold Name**, ID, Rows (right-aligned), Status,
|
|
164
|
+
After `graphit ds list`: table with **bold Name**, ID, Rows (right-aligned), Status, Row cap. End with DS recommendation for current task.
|