@graphit/cli 0.1.1 → 0.1.2

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.
Files changed (53) hide show
  1. package/package.json +1 -1
  2. package/skill/SKILL.md +68 -23
  3. package/skill/cursor/graphit-chart-patterns.mdc +67 -129
  4. package/skill/graphit.mdc +62 -80
  5. package/skill/references/chart-patterns.md +41 -218
  6. package/dist/api/client.d.ts +0 -16
  7. package/dist/api/client.js +0 -67
  8. package/dist/api/client.js.map +0 -1
  9. package/dist/auth/credentials.d.ts +0 -15
  10. package/dist/auth/credentials.js +0 -34
  11. package/dist/auth/credentials.js.map +0 -1
  12. package/dist/auth/login.d.ts +0 -2
  13. package/dist/auth/login.js +0 -230
  14. package/dist/auth/login.js.map +0 -1
  15. package/dist/auth/token.d.ts +0 -5
  16. package/dist/auth/token.js +0 -42
  17. package/dist/auth/token.js.map +0 -1
  18. package/dist/commands/auth.d.ts +0 -2
  19. package/dist/commands/auth.js +0 -68
  20. package/dist/commands/auth.js.map +0 -1
  21. package/dist/commands/connector.d.ts +0 -2
  22. package/dist/commands/connector.js +0 -97
  23. package/dist/commands/connector.js.map +0 -1
  24. package/dist/commands/dashboard.d.ts +0 -2
  25. package/dist/commands/dashboard.js +0 -124
  26. package/dist/commands/dashboard.js.map +0 -1
  27. package/dist/commands/ds.d.ts +0 -2
  28. package/dist/commands/ds.js +0 -53
  29. package/dist/commands/ds.js.map +0 -1
  30. package/dist/commands/kb.d.ts +0 -2
  31. package/dist/commands/kb.js +0 -259
  32. package/dist/commands/kb.js.map +0 -1
  33. package/dist/commands/query.d.ts +0 -2
  34. package/dist/commands/query.js +0 -61
  35. package/dist/commands/query.js.map +0 -1
  36. package/dist/commands/setup.d.ts +0 -2
  37. package/dist/commands/setup.js +0 -173
  38. package/dist/commands/setup.js.map +0 -1
  39. package/dist/config.d.ts +0 -4
  40. package/dist/config.js +0 -9
  41. package/dist/config.js.map +0 -1
  42. package/dist/index.d.ts +0 -2
  43. package/dist/index.js +0 -24
  44. package/dist/index.js.map +0 -1
  45. package/dist/output/format.d.ts +0 -8
  46. package/dist/output/format.js +0 -30
  47. package/dist/output/format.js.map +0 -1
  48. package/dist/output/json.d.ts +0 -1
  49. package/dist/output/json.js +0 -4
  50. package/dist/output/json.js.map +0 -1
  51. package/dist/output/table.d.ts +0 -2
  52. package/dist/output/table.js +0 -17
  53. package/dist/output/table.js.map +0 -1
@@ -1,53 +0,0 @@
1
- import { apiClient } from "../api/client.js";
2
- import { output, errorOutput } from "../output/format.js";
3
- export function registerDSCommands(program) {
4
- const ds = program.command("ds").description("Data source management");
5
- ds.command("list")
6
- .description("List data sources")
7
- .option("--limit <n>", "Max results", "50")
8
- .action(async function () {
9
- try {
10
- const opts = this.opts();
11
- const resp = await apiClient.get(`/api/v1/cli/ds?limit=${opts.limit}`);
12
- output(this, resp.data_sources, {
13
- columns: ["id", "name", "status", "row_count", "verified"],
14
- });
15
- }
16
- catch (err) {
17
- errorOutput(err);
18
- }
19
- });
20
- ds.command("create")
21
- .description("Create a data source from a SQL query")
22
- .requiredOption("--sql <query>", "Source SQL query")
23
- .requiredOption("--name <name>", "Data source name")
24
- .option("--connection <id>", "Snowflake connection ID")
25
- .option("--schema <name>", "Schema name")
26
- .action(async function () {
27
- try {
28
- const opts = this.opts();
29
- const resp = await apiClient.post("/api/v1/cli/ds", {
30
- name: opts.name,
31
- sql: opts.sql,
32
- connection_id: opts.connection || null,
33
- schema_name: opts.schema || null,
34
- });
35
- output(this, resp, { keyValue: true });
36
- }
37
- catch (err) {
38
- errorOutput(err);
39
- }
40
- });
41
- ds.command("refresh <id>")
42
- .description("Trigger a data source refresh")
43
- .action(async function (id) {
44
- try {
45
- const resp = await apiClient.post(`/api/v1/cli/ds/${id}/refresh`, {});
46
- output(this, resp, { keyValue: true });
47
- }
48
- catch (err) {
49
- errorOutput(err);
50
- }
51
- });
52
- }
53
- //# sourceMappingURL=ds.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ds.js","sourceRoot":"","sources":["../../src/commands/ds.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAEvE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC;SAC1C,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,wBAAwB,IAAI,CAAC,KAAK,EAAE,CACrC,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;gBAC9B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC;aAC3D,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uCAAuC,CAAC;SACpD,cAAc,CAAC,eAAe,EAAE,kBAAkB,CAAC;SACnD,cAAc,CAAC,eAAe,EAAE,kBAAkB,CAAC;SACnD,MAAM,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;SACtD,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAA0B,gBAAgB,EAAE;gBAC3E,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,aAAa,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;gBACtC,WAAW,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;aACjC,CAAC,CAAC;YACH,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,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,KAAK,WAA0B,EAAU;QAC/C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAC/B,kBAAkB,EAAE,UAAU,EAC9B,EAAE,CACH,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;AACP,CAAC"}
@@ -1,2 +0,0 @@
1
- import { Command } from "commander";
2
- export declare function registerKBCommands(program: Command): void;
@@ -1,259 +0,0 @@
1
- import { apiClient } from "../api/client.js";
2
- import { output, errorOutput } from "../output/format.js";
3
- const ENTITY_COLUMNS = {
4
- metric: ["id", "name", "description", "calculation", "verified"],
5
- dimension: ["id", "name", "description", "expression", "verified"],
6
- table: ["id", "name", "description", "verified"],
7
- rule: ["id", "name", "description", "verified"],
8
- domain: ["id", "name", "description"],
9
- synonym: ["id", "name", "target_name", "target_type"],
10
- };
11
- export function registerKBCommands(program) {
12
- const kb = program.command("kb").description("Knowledge Base operations");
13
- kb.command("list <type>")
14
- .description("List KB entities (metric, dimension, table, rule, domain, synonym)")
15
- .option("--limit <n>", "Max results", "50")
16
- .option("--verified", "Only verified entities")
17
- .option("--unverified", "Only unverified entities")
18
- .action(async function (type) {
19
- try {
20
- const opts = this.opts();
21
- const params = new URLSearchParams({ limit: opts.limit });
22
- if (opts.verified)
23
- params.set("verified", "true");
24
- if (opts.unverified)
25
- params.set("verified", "false");
26
- const resp = await apiClient.get(`/api/v1/cli/kb/${type}?${params}`);
27
- output(this, resp.entities, { columns: ENTITY_COLUMNS[type] });
28
- }
29
- catch (err) {
30
- errorOutput(err);
31
- }
32
- });
33
- kb.command("get <type> <name>")
34
- .description("Get a KB entity by name")
35
- .action(async function (type, name) {
36
- try {
37
- const resp = await apiClient.get(`/api/v1/cli/kb/${type}/by-name/${encodeURIComponent(name)}`);
38
- output(this, resp.entity, { keyValue: true });
39
- }
40
- catch (err) {
41
- errorOutput(err);
42
- }
43
- });
44
- kb.command("search <query>")
45
- .description("Search KB assets across all types")
46
- .option("--type <type>", "Filter by entity type")
47
- .option("--limit <n>", "Max results", "20")
48
- .action(async function (query) {
49
- try {
50
- const opts = this.opts();
51
- const params = new URLSearchParams({ q: query, limit: opts.limit });
52
- if (opts.type)
53
- params.set("type", opts.type);
54
- const resp = await apiClient.get(`/api/v1/cli/kb/search?${params}`);
55
- output(this, resp.results, { columns: ["type", "name", "description"] });
56
- }
57
- catch (err) {
58
- errorOutput(err);
59
- }
60
- });
61
- kb.command("explore <type> <name>")
62
- .description("Traverse KB graph (metric -> tables -> dimensions)")
63
- .action(async function (type, name) {
64
- try {
65
- const resp = await apiClient.get(`/api/v1/cli/kb/explore/${type}/${encodeURIComponent(name)}`);
66
- output(this, resp, { keyValue: true });
67
- }
68
- catch (err) {
69
- errorOutput(err);
70
- }
71
- });
72
- // -- Create commands --
73
- const create = kb.command("create").description("Create KB entities");
74
- create
75
- .command("metric")
76
- .description("Create a new metric")
77
- .requiredOption("--name <name>", "Metric name (UPPER_SNAKE_CASE)")
78
- .requiredOption("--sql <expr>", "SQL calculation expression")
79
- .requiredOption("--table <table>", "Primary table")
80
- .option("--description <desc>", "Description", "")
81
- .action(async function () {
82
- try {
83
- const opts = this.opts();
84
- const resp = await apiClient.post("/api/v1/cli/kb/metric", {
85
- name: opts.name,
86
- calculation: opts.sql,
87
- table: opts.table,
88
- description: opts.description,
89
- });
90
- output(this, resp.entity, { keyValue: true });
91
- }
92
- catch (err) {
93
- errorOutput(err);
94
- }
95
- });
96
- create
97
- .command("dimension")
98
- .description("Create a new dimension")
99
- .requiredOption("--name <name>", "Dimension name (UPPER_SNAKE_CASE)")
100
- .requiredOption("--expr <expr>", "SQL expression")
101
- .requiredOption("--table <table>", "Primary table")
102
- .option("--type <type>", "Dimension type", "categorical")
103
- .option("--description <desc>", "Description", "")
104
- .action(async function () {
105
- try {
106
- const opts = this.opts();
107
- const resp = await apiClient.post("/api/v1/cli/kb/dimension", {
108
- name: opts.name,
109
- expression: opts.expr,
110
- table: opts.table,
111
- type: opts.type,
112
- description: opts.description,
113
- });
114
- output(this, resp.entity, { keyValue: true });
115
- }
116
- catch (err) {
117
- errorOutput(err);
118
- }
119
- });
120
- create
121
- .command("rule")
122
- .description("Create a new rule")
123
- .requiredOption("--name <name>", "Rule name (UPPER_SNAKE_CASE)")
124
- .requiredOption("--sql <expr>", "Rule content/SQL")
125
- .requiredOption("--table <table>", "Referenced table")
126
- .option("--description <desc>", "Description", "")
127
- .action(async function () {
128
- try {
129
- const opts = this.opts();
130
- const resp = await apiClient.post("/api/v1/cli/kb/rule", {
131
- name: opts.name,
132
- content: opts.sql,
133
- table: opts.table,
134
- description: opts.description,
135
- });
136
- output(this, resp.entity, { keyValue: true });
137
- }
138
- catch (err) {
139
- errorOutput(err);
140
- }
141
- });
142
- create
143
- .command("table")
144
- .description("Tables are created via data sources. Use `graphit ds create`.")
145
- .action(function () {
146
- console.error(JSON.stringify({
147
- error: "Tables are created via data sources. Use `graphit ds create` instead.",
148
- }));
149
- process.exit(1);
150
- });
151
- create
152
- .command("domain")
153
- .description("Domains are managed via the web app.")
154
- .action(function () {
155
- console.error(JSON.stringify({
156
- error: "Domains are managed via the Graphit web app.",
157
- }));
158
- process.exit(1);
159
- });
160
- // -- Update commands --
161
- const update = kb.command("update").description("Update KB entities");
162
- update
163
- .command("metric <name>")
164
- .description("Update a metric")
165
- .option("--sql <expr>", "New SQL calculation")
166
- .option("--table <table>", "New primary table")
167
- .option("--description <desc>", "New description")
168
- .action(async function (name) {
169
- try {
170
- const opts = this.opts();
171
- const resp = await apiClient.put(`/api/v1/cli/kb/metric/${encodeURIComponent(name)}`, {
172
- calculation: opts.sql ?? null,
173
- table: opts.table ?? null,
174
- description: opts.description ?? null,
175
- });
176
- output(this, resp.entity, { keyValue: true });
177
- }
178
- catch (err) {
179
- errorOutput(err);
180
- }
181
- });
182
- update
183
- .command("dimension <name>")
184
- .description("Update a dimension")
185
- .option("--expr <expr>", "New SQL expression")
186
- .option("--table <table>", "New primary table")
187
- .option("--description <desc>", "New description")
188
- .action(async function (name) {
189
- try {
190
- const opts = this.opts();
191
- const resp = await apiClient.put(`/api/v1/cli/kb/dimension/${encodeURIComponent(name)}`, {
192
- expression: opts.expr ?? null,
193
- table: opts.table ?? null,
194
- description: opts.description ?? null,
195
- });
196
- output(this, resp.entity, { keyValue: true });
197
- }
198
- catch (err) {
199
- errorOutput(err);
200
- }
201
- });
202
- update
203
- .command("rule <name>")
204
- .description("Update a rule")
205
- .option("--sql <expr>", "New rule content")
206
- .option("--description <desc>", "New description")
207
- .action(async function (name) {
208
- try {
209
- const opts = this.opts();
210
- const resp = await apiClient.put(`/api/v1/cli/kb/rule/${encodeURIComponent(name)}`, {
211
- content: opts.sql ?? null,
212
- description: opts.description ?? null,
213
- });
214
- output(this, resp.entity, { keyValue: true });
215
- }
216
- catch (err) {
217
- errorOutput(err);
218
- }
219
- });
220
- update
221
- .command("table <name>")
222
- .description("Update a table's description or domain")
223
- .option("--description <desc>", "New description")
224
- .option("--domain <domain_id>", "New domain ID")
225
- .action(async function (name) {
226
- try {
227
- const opts = this.opts();
228
- const resp = await apiClient.put(`/api/v1/cli/kb/table/${encodeURIComponent(name)}`, {
229
- description: opts.description ?? null,
230
- domain_id: opts.domain ?? null,
231
- });
232
- output(this, resp.entity, { keyValue: true });
233
- }
234
- catch (err) {
235
- errorOutput(err);
236
- }
237
- });
238
- // -- Delete command --
239
- kb.command("delete <type> <name>")
240
- .description("Delete a KB entity (requires --yes flag)")
241
- .requiredOption("--yes", "Confirm deletion")
242
- .action(async function (type, name) {
243
- try {
244
- const validTypes = ["metric", "dimension", "rule"];
245
- if (!validTypes.includes(type)) {
246
- console.error(JSON.stringify({
247
- error: `Delete not supported for '${type}'. Supported: ${validTypes.join(", ")}`,
248
- }));
249
- process.exit(1);
250
- }
251
- await apiClient.delete(`/api/v1/cli/kb/${type}/${encodeURIComponent(name)}`);
252
- console.log(JSON.stringify({ status: "deleted", type, name: name.toUpperCase() }));
253
- }
254
- catch (err) {
255
- errorOutput(err);
256
- }
257
- });
258
- }
259
- //# sourceMappingURL=kb.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kb.js","sourceRoot":"","sources":["../../src/commands/kb.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import { Command } from "commander";
2
- export declare function registerQueryCommands(program: Command): void;
@@ -1,61 +0,0 @@
1
- import { apiClient } from "../api/client.js";
2
- import { output, errorOutput } from "../output/format.js";
3
- export function registerQueryCommands(program) {
4
- program
5
- .command("query <sql>")
6
- .description("Run SQL against a cached data source or live Snowflake")
7
- .option("--ds <id>", "Data source ID (cached, ~100ms)")
8
- .option("--warehouse", "Query live Snowflake (~10s)")
9
- .option("--connection <id>", "Snowflake connection ID (for --warehouse)")
10
- .option("--limit <n>", "Max rows returned", "50")
11
- .action(async function (sql) {
12
- try {
13
- const opts = this.opts();
14
- const resp = await apiClient.post("/api/v1/cli/query", {
15
- sql,
16
- data_source_id: opts.ds || null,
17
- warehouse: !!opts.warehouse,
18
- connection_id: opts.connection || null,
19
- limit: parseInt(opts.limit, 10),
20
- });
21
- output(this, resp);
22
- }
23
- catch (err) {
24
- errorOutput(err);
25
- }
26
- });
27
- const metadata = program.command("metadata").description("Snowflake metadata");
28
- metadata
29
- .command("schemas")
30
- .description("List Snowflake schemas")
31
- .requiredOption("--connection <id>", "Connection ID")
32
- .action(async function () {
33
- try {
34
- const opts = this.opts();
35
- const resp = await apiClient.get(`/api/v1/cli/metadata/schemas?connection_id=${opts.connection}`);
36
- output(this, resp.schemas.map((s) => ({ schema: s })), { columns: ["schema"] });
37
- }
38
- catch (err) {
39
- errorOutput(err);
40
- }
41
- });
42
- metadata
43
- .command("tables")
44
- .description("List tables in a Snowflake schema")
45
- .requiredOption("--connection <id>", "Connection ID")
46
- .option("--schema <name>", "Schema name")
47
- .action(async function () {
48
- try {
49
- const opts = this.opts();
50
- const params = new URLSearchParams({ connection_id: opts.connection });
51
- if (opts.schema)
52
- params.set("schema", opts.schema);
53
- const resp = await apiClient.get(`/api/v1/cli/metadata/tables?${params}`);
54
- output(this, resp.tables.map((t) => ({ table: t })), { columns: ["table"] });
55
- }
56
- catch (err) {
57
- errorOutput(err);
58
- }
59
- });
60
- }
61
- //# sourceMappingURL=query.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,WAAW,EAAE,iCAAiC,CAAC;SACtD,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;SACpD,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,CAAC;SACxE,MAAM,CAAC,aAAa,EAAE,mBAAmB,EAAE,IAAI,CAAC;SAChD,MAAM,CAAC,KAAK,WAA0B,GAAW;QAChD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAA0B,mBAAmB,EAAE;gBAC9E,GAAG;gBACH,cAAc,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI;gBAC/B,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS;gBAC3B,aAAa,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;gBACtC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;aAChC,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAE/E,QAAQ;SACL,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,wBAAwB,CAAC;SACrC,cAAc,CAAC,mBAAmB,EAAE,eAAe,CAAC;SACpD,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,8CAA8C,IAAI,CAAC,UAAU,EAAE,CAChE,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,QAAQ;SACL,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,mCAAmC,CAAC;SAChD,cAAc,CAAC,mBAAmB,EAAE,eAAe,CAAC;SACpD,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAEnD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9B,+BAA+B,MAAM,EAAE,CACxC,CAAC;YACF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,2 +0,0 @@
1
- import { Command } from "commander";
2
- export declare function registerSetupCommand(program: Command): void;
@@ -1,173 +0,0 @@
1
- import { existsSync, readdirSync } from "node:fs";
2
- import { readFile, writeFile, mkdir, copyFile } from "node:fs/promises";
3
- import { homedir } from "node:os";
4
- import { join, dirname } from "node:path";
5
- import { execFileSync } from "node:child_process";
6
- import { readCredentials } from "../auth/credentials.js";
7
- function resolveSkillDir() {
8
- const fromDist = join(dirname(new URL(import.meta.url).pathname), "..", "..", "skill");
9
- if (existsSync(join(fromDist, "SKILL.md")))
10
- return fromDist;
11
- return join(dirname(dirname(dirname(import.meta.url.replace("file://", "")))), "skill");
12
- }
13
- function detectEditors() {
14
- const editors = [];
15
- if (existsSync(".claude") || commandExists("claude"))
16
- editors.push("claude-code");
17
- if (existsSync(".cursor"))
18
- editors.push("cursor");
19
- if (existsSync(".codex") || commandExists("codex"))
20
- editors.push("codex");
21
- if (existsSync(".vscode"))
22
- editors.push("vscode");
23
- return editors;
24
- }
25
- function commandExists(cmd) {
26
- try {
27
- execFileSync("which", [cmd], { stdio: "ignore" });
28
- return true;
29
- }
30
- catch {
31
- return false;
32
- }
33
- }
34
- function getInstallTargets(editors, project, skillMd, cursorMdc) {
35
- const targets = [];
36
- const home = homedir();
37
- for (const editor of editors) {
38
- switch (editor) {
39
- case "claude-code": {
40
- const base = project
41
- ? join(".claude", "skills", "graphit")
42
- : join(home, ".claude", "skills", "graphit");
43
- targets.push({
44
- editor,
45
- path: join(base, "SKILL.md"),
46
- content: skillMd,
47
- refsDir: join(base, "references"),
48
- });
49
- break;
50
- }
51
- case "codex": {
52
- const base = project
53
- ? join(".codex", "skills", "graphit")
54
- : join(home, ".codex", "skills", "graphit");
55
- targets.push({
56
- editor,
57
- path: join(base, "SKILL.md"),
58
- content: skillMd,
59
- refsDir: join(base, "references"),
60
- });
61
- break;
62
- }
63
- case "cursor":
64
- targets.push({
65
- editor,
66
- path: project
67
- ? join(".cursor", "rules", "graphit.mdc")
68
- : join(home, ".cursor", "rules", "graphit.mdc"),
69
- content: cursorMdc,
70
- });
71
- break;
72
- case "vscode":
73
- if (project) {
74
- targets.push({ editor, path: "AGENTS.md", content: skillMd });
75
- }
76
- break;
77
- }
78
- }
79
- return targets;
80
- }
81
- async function installReferences(sourceRefsDir, targetRefsDir, update) {
82
- if (!existsSync(sourceRefsDir))
83
- return [];
84
- const files = readdirSync(sourceRefsDir).filter((f) => f.endsWith(".md"));
85
- if (files.length === 0)
86
- return [];
87
- await mkdir(targetRefsDir, { recursive: true });
88
- const written = [];
89
- for (const file of files) {
90
- const targetPath = join(targetRefsDir, file);
91
- if (existsSync(targetPath) && !update)
92
- continue;
93
- if (existsSync(targetPath) && update) {
94
- await copyFile(targetPath, `${targetPath}.bak`);
95
- }
96
- const content = await readFile(join(sourceRefsDir, file), "utf-8");
97
- await writeFile(targetPath, content, "utf-8");
98
- written.push(targetPath);
99
- }
100
- return written;
101
- }
102
- export function registerSetupCommand(program) {
103
- program
104
- .command("setup")
105
- .description("Install Graphit skill for your AI coding assistant")
106
- .option("--editor <name>", "Override editor detection (claude-code, cursor, codex, vscode)")
107
- .option("--project", "Install at project level (in repo, committable)")
108
- .option("--update", "Overwrite existing skill files")
109
- .option("--dry-run", "Show what would be installed without writing")
110
- .action(async function () {
111
- const opts = this.opts();
112
- const creds = await readCredentials();
113
- if (!creds) {
114
- console.log("Warning: Not logged in. Run `graphit auth login` first for full functionality.\n");
115
- }
116
- let editors;
117
- if (opts.editor) {
118
- editors = [opts.editor];
119
- }
120
- else {
121
- editors = detectEditors();
122
- if (editors.length === 0) {
123
- console.error(JSON.stringify({
124
- error: "No supported editor detected. Use --editor to specify one.",
125
- }));
126
- process.exit(1);
127
- }
128
- }
129
- const skillDir = resolveSkillDir();
130
- const skillMd = await readFile(join(skillDir, "SKILL.md"), "utf-8");
131
- const cursorMdc = await readFile(join(skillDir, "graphit.mdc"), "utf-8");
132
- const sourceRefsDir = join(skillDir, "references");
133
- const targets = getInstallTargets(editors, !!opts.project, skillMd, cursorMdc);
134
- if (targets.length === 0) {
135
- console.error(JSON.stringify({ error: "No install targets found." }));
136
- process.exit(1);
137
- }
138
- if (opts.dryRun) {
139
- console.log("Dry run - would install:\n");
140
- for (const t of targets) {
141
- console.log(` ${t.editor}: ${t.path}`);
142
- if (t.refsDir && existsSync(sourceRefsDir)) {
143
- const refs = readdirSync(sourceRefsDir).filter((f) => f.endsWith(".md"));
144
- refs.forEach((r) => console.log(` ${t.editor}: ${join(t.refsDir, r)}`));
145
- }
146
- }
147
- return;
148
- }
149
- for (const target of targets) {
150
- if (existsSync(target.path) && !opts.update) {
151
- console.log(`Skill file already exists at ${target.path}. Use --update to overwrite.`);
152
- continue;
153
- }
154
- if (existsSync(target.path) && opts.update) {
155
- await copyFile(target.path, `${target.path}.bak`);
156
- }
157
- await mkdir(dirname(target.path), { recursive: true });
158
- await writeFile(target.path, target.content, "utf-8");
159
- console.log(`Written: ${target.path}`);
160
- if (target.refsDir) {
161
- const refFiles = await installReferences(sourceRefsDir, target.refsDir, !!opts.update);
162
- if (refFiles.length > 0) {
163
- console.log(`Written: ${refFiles.length} reference files to ${target.refsDir}/`);
164
- }
165
- }
166
- }
167
- const mode = opts.project ? "project" : "global";
168
- const editorNames = editors.join(", ");
169
- console.log(`\nGraphit skill installed for ${editorNames} (${mode}).`);
170
- console.log('\nTry: "Explore the Graphit KB and build a revenue dashboard"');
171
- });
172
- }
173
- //# sourceMappingURL=setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts DELETED
@@ -1,4 +0,0 @@
1
- export declare const DEFAULT_API_BASE_URL = "https://api.graphit-app.com";
2
- export declare const DEFAULT_FRONTEND_URL = "https://graphit-app.com";
3
- export declare function getApiBaseUrl(): string;
4
- export declare function getFrontendUrl(): string;
package/dist/config.js DELETED
@@ -1,9 +0,0 @@
1
- export const DEFAULT_API_BASE_URL = "https://api.graphit-app.com";
2
- export const DEFAULT_FRONTEND_URL = "https://graphit-app.com";
3
- export function getApiBaseUrl() {
4
- return process.env.GRAPHIT_API_URL || DEFAULT_API_BASE_URL;
5
- }
6
- export function getFrontendUrl() {
7
- return process.env.GRAPHIT_FRONTEND_URL || DEFAULT_FRONTEND_URL;
8
- }
9
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,6BAA6B,CAAC;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;AAE9D,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,oBAAoB,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,oBAAoB,CAAC;AAClE,CAAC"}
package/dist/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
package/dist/index.js DELETED
@@ -1,24 +0,0 @@
1
- #!/usr/bin/env node
2
- import { Command } from "commander";
3
- import { registerAuthCommands } from "./commands/auth.js";
4
- import { registerKBCommands } from "./commands/kb.js";
5
- import { registerQueryCommands } from "./commands/query.js";
6
- import { registerDSCommands } from "./commands/ds.js";
7
- import { registerDashboardCommands } from "./commands/dashboard.js";
8
- import { registerConnectorCommands } from "./commands/connector.js";
9
- import { registerSetupCommand } from "./commands/setup.js";
10
- const program = new Command();
11
- program
12
- .name("graphit")
13
- .description("Graphit CLI - Build custom dashboards from any AI coding assistant")
14
- .version("0.1.1")
15
- .option("--output <format>", "Output format: json (default) or table", "json");
16
- registerAuthCommands(program);
17
- registerKBCommands(program);
18
- registerQueryCommands(program);
19
- registerDSCommands(program);
20
- registerDashboardCommands(program);
21
- registerConnectorCommands(program);
22
- registerSetupCommand(program);
23
- program.parse();
24
- //# sourceMappingURL=index.js.map