@revos/cli 0.1.2 → 0.1.4
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/README.md +17 -13
- package/dist/adapters/oclif/commands/auth/login.mjs +2 -2
- package/dist/adapters/oclif/commands/auth/logout.mjs +2 -2
- package/dist/adapters/oclif/commands/auth/status.mjs +2 -2
- package/dist/adapters/oclif/commands/init.mjs +2 -2
- package/dist/adapters/oclif/commands/org/current.mjs +2 -2
- package/dist/adapters/oclif/commands/org/list.mjs +2 -2
- package/dist/adapters/oclif/commands/org/switch.mjs +2 -2
- package/dist/adapters/oclif/commands/overlays/diff.d.mts +1 -1
- package/dist/adapters/oclif/commands/overlays/diff.mjs +3 -3
- package/dist/adapters/oclif/commands/overlays/pull.d.mts +1 -1
- package/dist/adapters/oclif/commands/overlays/pull.mjs +3 -3
- package/dist/adapters/oclif/commands/overlays/push.d.mts +1 -1
- package/dist/adapters/oclif/commands/overlays/push.mjs +3 -3
- package/dist/adapters/oclif/commands/overlays/status.d.mts +1 -1
- package/dist/adapters/oclif/commands/overlays/status.mjs +3 -3
- package/dist/{base.command-DDSLyx5v.mjs → base.command-DlVQ9Cqa.mjs} +1 -1
- package/dist/{core-EJgxP-x5.mjs → core-gKJ_V-K5.mjs} +43 -18
- package/dist/{index-DH6vy050.d.mts → index-B8n2GxTc.d.mts} +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +1 -1
- package/dist/templates/AGENTS.md +1 -1
- package/dist/templates/dbt/profiles.yml +12 -0
- package/dist/templates/gitignore +19 -0
- package/dist/templates/skills/create-dbt-transformations/SKILL.md +214 -0
- package/dist/templates/skills/create-dbt-transformations/references/edge-cases.md +46 -0
- package/dist/templates/skills/create-dbt-transformations/references/schema-conventions.md +128 -0
- package/dist/templates/skills/create-dbt-transformations/references/sql-templates.md +73 -0
- package/dist/templates/skills/create-semantic-model/SKILL.md +126 -1432
- package/dist/templates/skills/create-semantic-model/references/cube-examples.md +267 -0
- package/dist/templates/skills/create-semantic-model/references/key-patterns.md +150 -0
- package/dist/templates/skills/create-semantic-model/references/validation-queries.md +209 -0
- package/dist/templates/skills/explore-lakehouse/SKILL.md +8 -1
- package/dist/{types-DZssnweO.d.mts → types-DmuJzN0Z.d.mts} +5 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -61,7 +61,7 @@ If the destination already exists and is not empty, you will be prompted to conf
|
|
|
61
61
|
4. Generates `.devcontainer/devcontainer.json` with Python 3.11, Node.js, Google Cloud SDK (`bq`), and dbt pre-installed. The Dev Container mounts `~/.revos/{project-name}-gsa-creds.json` automatically.
|
|
62
62
|
5. Generates `dbt/profiles.yml` pre-configured for BigQuery.
|
|
63
63
|
6. Generates `.gitignore` and `README.md`.
|
|
64
|
-
7. Scaffolds AI companion files: `CLAUDE.md`, `AGENTS.md`, and `.claude/skills
|
|
64
|
+
7. Scaffolds AI companion files: `CLAUDE.md`, `AGENTS.md`, and `.claude/skills/` with three pre-installed skills: `explore-lakehouse`, `create-semantic-model`, and `create-dbt-transformations`.
|
|
65
65
|
|
|
66
66
|
**Requires:** `revos auth login` first.
|
|
67
67
|
|
|
@@ -117,18 +117,22 @@ revos org switch <org-id>
|
|
|
117
117
|
|
|
118
118
|
### Overlays Management
|
|
119
119
|
|
|
120
|
-
Overlay files
|
|
120
|
+
Overlay files are Cube.dev semantic model definitions stored as YAML in `semantic/`. The overlay name is taken from the `name` field inside the file (or derived from the filename as a fallback). A `description` field is synced with the overlay's description on push.
|
|
121
121
|
|
|
122
|
-
Example `
|
|
122
|
+
Example `semantic/my_table.yml`:
|
|
123
123
|
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
124
|
+
```yaml
|
|
125
|
+
name: my_table
|
|
126
|
+
description: My custom overlay
|
|
127
|
+
sql_table: my_table
|
|
128
|
+
dimensions:
|
|
129
|
+
id:
|
|
130
|
+
sql: "${CUBE}.id"
|
|
131
|
+
type: number
|
|
132
|
+
primary_key: true
|
|
133
|
+
measures:
|
|
134
|
+
count:
|
|
135
|
+
type: count
|
|
132
136
|
```
|
|
133
137
|
|
|
134
138
|
#### Push overlays to API
|
|
@@ -137,7 +141,7 @@ Example `my-overlay.json`:
|
|
|
137
141
|
revos overlays push [files...] [-d <dir>] [-f] [--json]
|
|
138
142
|
|
|
139
143
|
Options:
|
|
140
|
-
-d, --dir <path> Directory containing overlay files (default: "./
|
|
144
|
+
-d, --dir <path> Directory containing overlay files (default: "./semantic")
|
|
141
145
|
-f, --force Force push even if remote is newer
|
|
142
146
|
```
|
|
143
147
|
|
|
@@ -147,7 +151,7 @@ Options:
|
|
|
147
151
|
revos overlays pull [-d <dir>] [-n <name>...] [--json]
|
|
148
152
|
|
|
149
153
|
Options:
|
|
150
|
-
-d, --dir <path> Directory to save overlay files (default: "./
|
|
154
|
+
-d, --dir <path> Directory to save overlay files (default: "./semantic")
|
|
151
155
|
-n, --name <name> Specific overlay names to pull (repeatable)
|
|
152
156
|
```
|
|
153
157
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { A as getCredentialsPath, C as getUserInfo, D as tokenResponseToCredentials, N as saveCredentials, O as startOAuthServer, S as generatePKCEChallenge, T as setClerkConfig, b as buildAuthorizationUrl, m as unwrap, n as selectOrganization, p as createApiClient, x as exchangeCodeForTokens } from "../../../../core-
|
|
2
|
-
import { t as BaseCommand } from "../../../../base.command-
|
|
1
|
+
import { A as getCredentialsPath, C as getUserInfo, D as tokenResponseToCredentials, N as saveCredentials, O as startOAuthServer, S as generatePKCEChallenge, T as setClerkConfig, b as buildAuthorizationUrl, m as unwrap, n as selectOrganization, p as createApiClient, x as exchangeCodeForTokens } from "../../../../core-gKJ_V-K5.mjs";
|
|
2
|
+
import { t as BaseCommand } from "../../../../base.command-DlVQ9Cqa.mjs";
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
import { Flags } from "@oclif/core";
|
|
5
5
|
import open from "open";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { k as deleteCredentials } from "../../../../core-
|
|
2
|
-
import { t as BaseCommand } from "../../../../base.command-
|
|
1
|
+
import { k as deleteCredentials } from "../../../../core-gKJ_V-K5.mjs";
|
|
2
|
+
import { t as BaseCommand } from "../../../../base.command-DlVQ9Cqa.mjs";
|
|
3
3
|
//#region src/adapters/oclif/commands/auth/logout.ts
|
|
4
4
|
var AuthLogout = class extends BaseCommand {
|
|
5
5
|
static description = "Remove stored authentication credentials";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { A as getCredentialsPath, M as loadCredentials, j as isTokenExpired } from "../../../../core-
|
|
2
|
-
import { t as BaseCommand } from "../../../../base.command-
|
|
1
|
+
import { A as getCredentialsPath, M as loadCredentials, j as isTokenExpired } from "../../../../core-gKJ_V-K5.mjs";
|
|
2
|
+
import { t as BaseCommand } from "../../../../base.command-DlVQ9Cqa.mjs";
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
//#region src/adapters/oclif/commands/auth/status.ts
|
|
5
5
|
var AuthStatus = class extends BaseCommand {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { P as ApiError, t as InitService, y as getConfig } from "../../../core-
|
|
1
|
+
import { P as ApiError, t as InitService, y as getConfig } from "../../../core-gKJ_V-K5.mjs";
|
|
2
2
|
import { TEMPLATES_DIR } from "../../../templates/index.mjs";
|
|
3
|
-
import { t as BaseCommand } from "../../../base.command-
|
|
3
|
+
import { t as BaseCommand } from "../../../base.command-DlVQ9Cqa.mjs";
|
|
4
4
|
import * as fs from "fs";
|
|
5
5
|
import * as path from "path";
|
|
6
6
|
import select from "@inquirer/select";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { M as loadCredentials, m as unwrap, p as createApiClient, y as getConfig } from "../../../../core-
|
|
2
|
-
import { t as BaseCommand } from "../../../../base.command-
|
|
1
|
+
import { M as loadCredentials, m as unwrap, p as createApiClient, y as getConfig } from "../../../../core-gKJ_V-K5.mjs";
|
|
2
|
+
import { t as BaseCommand } from "../../../../base.command-DlVQ9Cqa.mjs";
|
|
3
3
|
//#region src/adapters/oclif/commands/org/current.ts
|
|
4
4
|
var OrgCurrent = class extends BaseCommand {
|
|
5
5
|
static description = "Show currently selected organization";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { m as unwrap, p as createApiClient, y as getConfig } from "../../../../core-
|
|
2
|
-
import { t as BaseCommand } from "../../../../base.command-
|
|
1
|
+
import { m as unwrap, p as createApiClient, y as getConfig } from "../../../../core-gKJ_V-K5.mjs";
|
|
2
|
+
import { t as BaseCommand } from "../../../../base.command-DlVQ9Cqa.mjs";
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
import { Flags } from "@oclif/core";
|
|
5
5
|
//#region src/adapters/oclif/commands/org/list.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { M as loadCredentials, N as saveCredentials, m as unwrap, n as selectOrganization, p as createApiClient, y as getConfig } from "../../../../core-
|
|
2
|
-
import { t as BaseCommand } from "../../../../base.command-
|
|
1
|
+
import { M as loadCredentials, N as saveCredentials, m as unwrap, n as selectOrganization, p as createApiClient, y as getConfig } from "../../../../core-gKJ_V-K5.mjs";
|
|
2
|
+
import { t as BaseCommand } from "../../../../base.command-DlVQ9Cqa.mjs";
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
import { Args } from "@oclif/core";
|
|
5
5
|
//#region src/adapters/oclif/commands/org/switch.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { o as DiffResult } from "../../../../types-
|
|
1
|
+
import { o as DiffResult } from "../../../../types-DmuJzN0Z.mjs";
|
|
2
2
|
import { t as BaseCommand } from "../../../../base.command-BjFWMIzL.mjs";
|
|
3
3
|
import * as _$_oclif_core_interfaces0 from "@oclif/core/interfaces";
|
|
4
4
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { p as createApiClient, r as DiffService, y as getConfig } from "../../../../core-
|
|
2
|
-
import { t as BaseCommand } from "../../../../base.command-
|
|
1
|
+
import { p as createApiClient, r as DiffService, y as getConfig } from "../../../../core-gKJ_V-K5.mjs";
|
|
2
|
+
import { t as BaseCommand } from "../../../../base.command-DlVQ9Cqa.mjs";
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
import { Args, Flags } from "@oclif/core";
|
|
5
5
|
//#region src/adapters/oclif/commands/overlays/diff.ts
|
|
@@ -8,7 +8,7 @@ var OverlaysDiff = class extends BaseCommand {
|
|
|
8
8
|
static flags = { dir: Flags.string({
|
|
9
9
|
char: "d",
|
|
10
10
|
description: "Directory containing overlay files",
|
|
11
|
-
default: "./
|
|
11
|
+
default: "./semantic"
|
|
12
12
|
}) };
|
|
13
13
|
static args = { files: Args.string({
|
|
14
14
|
description: "Specific files to diff (optional)",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { u as PullResult } from "../../../../types-DmuJzN0Z.mjs";
|
|
2
2
|
import { t as BaseCommand } from "../../../../base.command-BjFWMIzL.mjs";
|
|
3
3
|
import * as _$_oclif_core_interfaces0 from "@oclif/core/interfaces";
|
|
4
4
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as PullService, p as createApiClient, y as getConfig } from "../../../../core-
|
|
2
|
-
import { t as BaseCommand } from "../../../../base.command-
|
|
1
|
+
import { a as PullService, p as createApiClient, y as getConfig } from "../../../../core-gKJ_V-K5.mjs";
|
|
2
|
+
import { t as BaseCommand } from "../../../../base.command-DlVQ9Cqa.mjs";
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
import { Flags } from "@oclif/core";
|
|
5
5
|
//#region src/adapters/oclif/commands/overlays/pull.ts
|
|
@@ -9,7 +9,7 @@ var OverlaysPull = class extends BaseCommand {
|
|
|
9
9
|
dir: Flags.string({
|
|
10
10
|
char: "d",
|
|
11
11
|
description: "Directory to save overlay files",
|
|
12
|
-
default: "./
|
|
12
|
+
default: "./semantic"
|
|
13
13
|
}),
|
|
14
14
|
name: Flags.string({
|
|
15
15
|
char: "n",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { d as PushResult } from "../../../../types-DmuJzN0Z.mjs";
|
|
2
2
|
import { t as BaseCommand } from "../../../../base.command-BjFWMIzL.mjs";
|
|
3
3
|
import * as _$_oclif_core_interfaces0 from "@oclif/core/interfaces";
|
|
4
4
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { o as PushService, p as createApiClient, y as getConfig } from "../../../../core-
|
|
2
|
-
import { t as BaseCommand } from "../../../../base.command-
|
|
1
|
+
import { o as PushService, p as createApiClient, y as getConfig } from "../../../../core-gKJ_V-K5.mjs";
|
|
2
|
+
import { t as BaseCommand } from "../../../../base.command-DlVQ9Cqa.mjs";
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
import { Args, Flags } from "@oclif/core";
|
|
5
5
|
//#region src/adapters/oclif/commands/overlays/push.ts
|
|
@@ -9,7 +9,7 @@ var OverlaysPush = class extends BaseCommand {
|
|
|
9
9
|
dir: Flags.string({
|
|
10
10
|
char: "d",
|
|
11
11
|
description: "Directory containing overlay files",
|
|
12
|
-
default: "./
|
|
12
|
+
default: "./semantic"
|
|
13
13
|
}),
|
|
14
14
|
force: Flags.boolean({
|
|
15
15
|
char: "f",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { f as StatusResult } from "../../../../types-DmuJzN0Z.mjs";
|
|
2
2
|
import { t as BaseCommand } from "../../../../base.command-BjFWMIzL.mjs";
|
|
3
3
|
import * as _$_oclif_core_interfaces0 from "@oclif/core/interfaces";
|
|
4
4
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { i as StatusService, p as createApiClient, y as getConfig } from "../../../../core-
|
|
2
|
-
import { t as BaseCommand } from "../../../../base.command-
|
|
1
|
+
import { i as StatusService, p as createApiClient, y as getConfig } from "../../../../core-gKJ_V-K5.mjs";
|
|
2
|
+
import { t as BaseCommand } from "../../../../base.command-DlVQ9Cqa.mjs";
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
import { Args, Flags } from "@oclif/core";
|
|
5
5
|
//#region src/adapters/oclif/commands/overlays/status.ts
|
|
@@ -17,7 +17,7 @@ var OverlaysStatus = class extends BaseCommand {
|
|
|
17
17
|
dir: Flags.string({
|
|
18
18
|
char: "d",
|
|
19
19
|
description: "Directory containing overlay files",
|
|
20
|
-
default: "./
|
|
20
|
+
default: "./semantic"
|
|
21
21
|
}),
|
|
22
22
|
columns: Flags.string({
|
|
23
23
|
description: `Columns to display (comma-separated). Available: ${ALL_COLUMNS.join(", ")}`,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as setClerkEnv, P as ApiError } from "./core-
|
|
1
|
+
import { E as setClerkEnv, P as ApiError } from "./core-gKJ_V-K5.mjs";
|
|
2
2
|
import { Command, Flags } from "@oclif/core";
|
|
3
3
|
import { makeTable } from "@oclif/table";
|
|
4
4
|
//#region src/adapters/oclif/base.command.ts
|
|
@@ -4,6 +4,7 @@ import * as os from "os";
|
|
|
4
4
|
import { createServer } from "node:http";
|
|
5
5
|
import * as crypto from "crypto";
|
|
6
6
|
import { Client, client } from "@revos/api-client";
|
|
7
|
+
import { parse, stringify } from "yaml";
|
|
7
8
|
import search from "@inquirer/search";
|
|
8
9
|
//#region src/core/errors.ts
|
|
9
10
|
var ApiError = class extends Error {
|
|
@@ -423,20 +424,20 @@ function loadOverlayFile(filePath) {
|
|
|
423
424
|
const absolutePath = path.resolve(filePath);
|
|
424
425
|
const stats = fs.statSync(absolutePath);
|
|
425
426
|
const content = fs.readFileSync(absolutePath, "utf-8");
|
|
426
|
-
let
|
|
427
|
+
let parsed;
|
|
427
428
|
try {
|
|
428
|
-
|
|
429
|
+
parsed = parse(content) ?? {};
|
|
429
430
|
} catch (e) {
|
|
430
|
-
throw new Error(`Invalid
|
|
431
|
+
throw new Error(`Invalid YAML in ${filePath}: ${e instanceof Error ? e.message : String(e)}`, { cause: e });
|
|
431
432
|
}
|
|
432
433
|
const fileName = path.basename(filePath);
|
|
433
434
|
return {
|
|
434
435
|
filePath: absolutePath,
|
|
435
436
|
fileName,
|
|
436
437
|
overlay: {
|
|
437
|
-
name: fileName.replace(/\.
|
|
438
|
-
description:
|
|
439
|
-
data
|
|
438
|
+
name: parsed.name || fileName.replace(/\.yml$/, "").replace(/\.yaml$/, ""),
|
|
439
|
+
description: parsed.description || "",
|
|
440
|
+
data: parsed
|
|
440
441
|
},
|
|
441
442
|
mtime: stats.mtime
|
|
442
443
|
};
|
|
@@ -447,7 +448,7 @@ function loadOverlaysFromDir(dirPath) {
|
|
|
447
448
|
const files = fs.readdirSync(absoluteDir);
|
|
448
449
|
const overlays = [];
|
|
449
450
|
for (const file of files) {
|
|
450
|
-
if (!file.endsWith(".
|
|
451
|
+
if (!file.endsWith(".yml") && !file.endsWith(".yaml")) continue;
|
|
451
452
|
const filePath = path.join(absoluteDir, file);
|
|
452
453
|
if (!fs.statSync(filePath).isFile()) continue;
|
|
453
454
|
try {
|
|
@@ -464,7 +465,13 @@ function loadOverlaysByNames(dirPath, names) {
|
|
|
464
465
|
const overlays = [];
|
|
465
466
|
for (const name of names) {
|
|
466
467
|
let filePath = path.join(absoluteDir, name);
|
|
467
|
-
if (!fs.existsSync(filePath)
|
|
468
|
+
if (!fs.existsSync(filePath)) {
|
|
469
|
+
if (!name.endsWith(".yml") && !name.endsWith(".yaml")) {
|
|
470
|
+
const withYml = path.join(absoluteDir, `${name}.yml`);
|
|
471
|
+
if (fs.existsSync(withYml)) filePath = withYml;
|
|
472
|
+
else filePath = path.join(absoluteDir, `${name}.yaml`);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
468
475
|
if (!fs.existsSync(filePath)) throw new Error(`Overlay file not found: ${name}`);
|
|
469
476
|
overlays.push(loadOverlayFile(filePath));
|
|
470
477
|
}
|
|
@@ -476,13 +483,14 @@ function loadOverlays(dir, files) {
|
|
|
476
483
|
function saveOverlayToFile(dirPath, overlay) {
|
|
477
484
|
const absoluteDir = path.resolve(dirPath);
|
|
478
485
|
if (!fs.existsSync(absoluteDir)) fs.mkdirSync(absoluteDir, { recursive: true });
|
|
479
|
-
const fileName = `${sanitizeFileName(overlay.name)}.
|
|
486
|
+
const fileName = `${sanitizeFileName(overlay.name)}.yml`;
|
|
480
487
|
const filePath = path.join(absoluteDir, fileName);
|
|
481
|
-
const
|
|
488
|
+
const content = stringify({
|
|
482
489
|
...overlay.data,
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
490
|
+
name: overlay.name,
|
|
491
|
+
description: overlay.description
|
|
492
|
+
});
|
|
493
|
+
fs.writeFileSync(filePath, content);
|
|
486
494
|
const updatedAt = new Date(overlay.updatedAt);
|
|
487
495
|
fs.utimesSync(filePath, updatedAt, updatedAt);
|
|
488
496
|
return filePath;
|
|
@@ -493,7 +501,7 @@ function getLocalOverlayNames(dirPath) {
|
|
|
493
501
|
const files = fs.readdirSync(absoluteDir);
|
|
494
502
|
const names = [];
|
|
495
503
|
for (const file of files) {
|
|
496
|
-
if (!file.endsWith(".
|
|
504
|
+
if (!file.endsWith(".yml") && !file.endsWith(".yaml")) continue;
|
|
497
505
|
const filePath = path.join(absoluteDir, file);
|
|
498
506
|
try {
|
|
499
507
|
const loaded = loadOverlayFile(filePath);
|
|
@@ -806,10 +814,13 @@ var InitService = class InitService {
|
|
|
806
814
|
".devcontainer",
|
|
807
815
|
".claude/skills/explore-lakehouse",
|
|
808
816
|
".claude/skills/create-semantic-model",
|
|
817
|
+
".claude/skills/create-semantic-model/references",
|
|
818
|
+
".claude/skills/create-dbt-transformations",
|
|
819
|
+
".claude/skills/create-dbt-transformations/references",
|
|
809
820
|
"dbt/models/bronze",
|
|
810
821
|
"dbt/models/silver",
|
|
811
822
|
"dbt/models/gold",
|
|
812
|
-
"semantic
|
|
823
|
+
"semantic"
|
|
813
824
|
];
|
|
814
825
|
static PROJECT_FILES = [
|
|
815
826
|
".devcontainer/devcontainer.json",
|
|
@@ -823,10 +834,17 @@ var InitService = class InitService {
|
|
|
823
834
|
"AGENTS.md",
|
|
824
835
|
".claude/skills/explore-lakehouse/SKILL.md",
|
|
825
836
|
".claude/skills/create-semantic-model/SKILL.md",
|
|
837
|
+
".claude/skills/create-semantic-model/references/cube-examples.md",
|
|
838
|
+
".claude/skills/create-semantic-model/references/key-patterns.md",
|
|
839
|
+
".claude/skills/create-semantic-model/references/validation-queries.md",
|
|
840
|
+
".claude/skills/create-dbt-transformations/SKILL.md",
|
|
841
|
+
".claude/skills/create-dbt-transformations/references/sql-templates.md",
|
|
842
|
+
".claude/skills/create-dbt-transformations/references/schema-conventions.md",
|
|
843
|
+
".claude/skills/create-dbt-transformations/references/edge-cases.md",
|
|
826
844
|
"dbt/models/bronze/.gitkeep",
|
|
827
845
|
"dbt/models/silver/.gitkeep",
|
|
828
846
|
"dbt/models/gold/.gitkeep",
|
|
829
|
-
"semantic
|
|
847
|
+
"semantic/.gitkeep"
|
|
830
848
|
];
|
|
831
849
|
constructor(templatesDir) {
|
|
832
850
|
this.templatesDir = templatesDir;
|
|
@@ -906,7 +924,7 @@ var InitService = class InitService {
|
|
|
906
924
|
}),
|
|
907
925
|
".devcontainer/Dockerfile": this.renderTemplate(".devcontainer/Dockerfile", {}),
|
|
908
926
|
".devcontainer/setup.sh": this.renderTemplate(".devcontainer/setup.sh", {}),
|
|
909
|
-
".gitignore": this.renderTemplate("
|
|
927
|
+
".gitignore": this.renderTemplate("gitignore", {}),
|
|
910
928
|
"README.md": this.renderTemplate("README.md", {
|
|
911
929
|
projectName,
|
|
912
930
|
orgName: org.name
|
|
@@ -923,10 +941,17 @@ var InitService = class InitService {
|
|
|
923
941
|
bqDataset: org.bqDataset
|
|
924
942
|
}),
|
|
925
943
|
".claude/skills/create-semantic-model/SKILL.md": this.renderTemplate("skills/create-semantic-model/SKILL.md", {}),
|
|
944
|
+
".claude/skills/create-semantic-model/references/cube-examples.md": this.renderTemplate("skills/create-semantic-model/references/cube-examples.md", {}),
|
|
945
|
+
".claude/skills/create-semantic-model/references/key-patterns.md": this.renderTemplate("skills/create-semantic-model/references/key-patterns.md", {}),
|
|
946
|
+
".claude/skills/create-semantic-model/references/validation-queries.md": this.renderTemplate("skills/create-semantic-model/references/validation-queries.md", {}),
|
|
947
|
+
".claude/skills/create-dbt-transformations/SKILL.md": this.renderTemplate("skills/create-dbt-transformations/SKILL.md", {}),
|
|
948
|
+
".claude/skills/create-dbt-transformations/references/sql-templates.md": this.renderTemplate("skills/create-dbt-transformations/references/sql-templates.md", {}),
|
|
949
|
+
".claude/skills/create-dbt-transformations/references/schema-conventions.md": this.renderTemplate("skills/create-dbt-transformations/references/schema-conventions.md", {}),
|
|
950
|
+
".claude/skills/create-dbt-transformations/references/edge-cases.md": this.renderTemplate("skills/create-dbt-transformations/references/edge-cases.md", {}),
|
|
926
951
|
"dbt/models/bronze/.gitkeep": "",
|
|
927
952
|
"dbt/models/silver/.gitkeep": "",
|
|
928
953
|
"dbt/models/gold/.gitkeep": "",
|
|
929
|
-
"semantic
|
|
954
|
+
"semantic/.gitkeep": ""
|
|
930
955
|
};
|
|
931
956
|
for (const [rel, content] of Object.entries(files)) {
|
|
932
957
|
const full = path.join(projectDir, rel);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { d as
|
|
1
|
+
import { d as PushResult, f as StatusResult, o as DiffResult, r as CubeOverlay, s as OverlayFile, t as Config, u as PullResult } from "./types-DmuJzN0Z.mjs";
|
|
2
2
|
import { c as StoredCredentials, i as OAuthCallbackResult, l as TokenResponse, r as ClerkUserInfo, s as OrganizationInfo } from "./types-DsQtGF-c.mjs";
|
|
3
3
|
import { Client } from "@revos/api-client";
|
|
4
4
|
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as DiffEntry, c as
|
|
2
|
-
import { A as ClerkEnv, B as tokenResponseToCredentials, C as LoadedOverlay, D as loadOverlaysByNames, E as loadOverlays, F as generatePKCEChallenge, G as isTokenExpired, H as startOAuthServer, I as getUserInfo, J as getConfig, K as loadCredentials, L as refreshAccessToken, M as PKCEChallenge, N as buildAuthorizationUrl, O as loadOverlaysFromDir, P as exchangeCodeForTokens, R as setClerkConfig, S as sanitizeFileName, T as loadOverlayFile, U as deleteCredentials, V as OAuthServerResult, W as getCredentialsPath, Y as ApiError, _ as createApiClient, a as DiffOptions, b as formatError, c as StatusOptions, d as PullOptions, f as PullService, g as ApiClient, h as PushService, i as DiffContext, j as ClerkOAuthConfig, k as saveOverlayToFile, l as StatusService, m as PushOptions, n as InitResult, o as DiffService, p as PushContext, q as saveCredentials, r as InitService, s as StatusContext, t as InitOptions, u as PullContext, v as unwrap, w as getLocalOverlayNames, x as isContentEqual, y as findRemoteOnlyOverlays, z as setClerkEnv } from "./index-
|
|
1
|
+
import { a as DiffEntry, c as OverlayFileData, d as PushResult, f as StatusResult, i as DiffChange, l as OverlayStatusInfo, n as CubeDefinition, o as DiffResult, p as SyncStatus, r as CubeOverlay, s as OverlayFile, t as Config, u as PullResult } from "./types-DmuJzN0Z.mjs";
|
|
2
|
+
import { A as ClerkEnv, B as tokenResponseToCredentials, C as LoadedOverlay, D as loadOverlaysByNames, E as loadOverlays, F as generatePKCEChallenge, G as isTokenExpired, H as startOAuthServer, I as getUserInfo, J as getConfig, K as loadCredentials, L as refreshAccessToken, M as PKCEChallenge, N as buildAuthorizationUrl, O as loadOverlaysFromDir, P as exchangeCodeForTokens, R as setClerkConfig, S as sanitizeFileName, T as loadOverlayFile, U as deleteCredentials, V as OAuthServerResult, W as getCredentialsPath, Y as ApiError, _ as createApiClient, a as DiffOptions, b as formatError, c as StatusOptions, d as PullOptions, f as PullService, g as ApiClient, h as PushService, i as DiffContext, j as ClerkOAuthConfig, k as saveOverlayToFile, l as StatusService, m as PushOptions, n as InitResult, o as DiffService, p as PushContext, q as saveCredentials, r as InitService, s as StatusContext, t as InitOptions, u as PullContext, v as unwrap, w as getLocalOverlayNames, x as isContentEqual, y as findRemoteOnlyOverlays, z as setClerkEnv } from "./index-B8n2GxTc.mjs";
|
|
3
3
|
import { a as OrgListResult, c as StoredCredentials, i as OAuthCallbackResult, l as TokenResponse, n as AuthStatusInfo, o as OrgSwitchResult, r as ClerkUserInfo, s as OrganizationInfo, t as AuthResult } from "./types-DsQtGF-c.mjs";
|
|
4
|
-
export { ApiClient, ApiError, AuthResult, AuthStatusInfo, ClerkEnv, ClerkOAuthConfig, ClerkUserInfo, Config, CubeDefinition, CubeOverlay, DiffChange, DiffContext, DiffEntry, DiffOptions, DiffResult, DiffService, InitOptions, InitResult, InitService, LoadedOverlay, OAuthCallbackResult, OAuthServerResult, OrgListResult, OrgSwitchResult, OrganizationInfo, OverlayFile, OverlayStatusInfo, PKCEChallenge, PullContext, PullOptions, PullResult, PullService, PushContext, PushOptions, PushResult, PushService, StatusContext, StatusOptions, StatusResult, StatusService, StoredCredentials, SyncStatus, TokenResponse, buildAuthorizationUrl, createApiClient, deleteCredentials, exchangeCodeForTokens, findRemoteOnlyOverlays, formatError, generatePKCEChallenge, getConfig, getCredentialsPath, getLocalOverlayNames, getUserInfo, isContentEqual, isTokenExpired, loadCredentials, loadOverlayFile, loadOverlays, loadOverlaysByNames, loadOverlaysFromDir, refreshAccessToken, sanitizeFileName, saveCredentials, saveOverlayToFile, setClerkConfig, setClerkEnv, startOAuthServer, tokenResponseToCredentials, unwrap };
|
|
4
|
+
export { ApiClient, ApiError, AuthResult, AuthStatusInfo, ClerkEnv, ClerkOAuthConfig, ClerkUserInfo, Config, CubeDefinition, CubeOverlay, DiffChange, DiffContext, DiffEntry, DiffOptions, DiffResult, DiffService, InitOptions, InitResult, InitService, LoadedOverlay, OAuthCallbackResult, OAuthServerResult, OrgListResult, OrgSwitchResult, OrganizationInfo, OverlayFile, OverlayFileData, OverlayStatusInfo, PKCEChallenge, PullContext, PullOptions, PullResult, PullService, PushContext, PushOptions, PushResult, PushService, StatusContext, StatusOptions, StatusResult, StatusService, StoredCredentials, SyncStatus, TokenResponse, buildAuthorizationUrl, createApiClient, deleteCredentials, exchangeCodeForTokens, findRemoteOnlyOverlays, formatError, generatePKCEChallenge, getConfig, getCredentialsPath, getLocalOverlayNames, getUserInfo, isContentEqual, isTokenExpired, loadCredentials, loadOverlayFile, loadOverlays, loadOverlaysByNames, loadOverlaysFromDir, refreshAccessToken, sanitizeFileName, saveCredentials, saveOverlayToFile, setClerkConfig, setClerkEnv, startOAuthServer, tokenResponseToCredentials, unwrap };
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { A as getCredentialsPath, C as getUserInfo, D as tokenResponseToCredentials, E as setClerkEnv, M as loadCredentials, N as saveCredentials, O as startOAuthServer, P as ApiError, S as generatePKCEChallenge, T as setClerkConfig, _ as isContentEqual, a as PullService, b as buildAuthorizationUrl, c as loadOverlayFile, d as loadOverlaysFromDir, f as saveOverlayToFile, g as formatError, h as findRemoteOnlyOverlays, i as StatusService, j as isTokenExpired, k as deleteCredentials, l as loadOverlays, m as unwrap, o as PushService, p as createApiClient, r as DiffService, s as getLocalOverlayNames, t as InitService, u as loadOverlaysByNames, v as sanitizeFileName, w as refreshAccessToken, x as exchangeCodeForTokens, y as getConfig } from "./core-
|
|
1
|
+
import { A as getCredentialsPath, C as getUserInfo, D as tokenResponseToCredentials, E as setClerkEnv, M as loadCredentials, N as saveCredentials, O as startOAuthServer, P as ApiError, S as generatePKCEChallenge, T as setClerkConfig, _ as isContentEqual, a as PullService, b as buildAuthorizationUrl, c as loadOverlayFile, d as loadOverlaysFromDir, f as saveOverlayToFile, g as formatError, h as findRemoteOnlyOverlays, i as StatusService, j as isTokenExpired, k as deleteCredentials, l as loadOverlays, m as unwrap, o as PushService, p as createApiClient, r as DiffService, s as getLocalOverlayNames, t as InitService, u as loadOverlaysByNames, v as sanitizeFileName, w as refreshAccessToken, x as exchangeCodeForTokens, y as getConfig } from "./core-gKJ_V-K5.mjs";
|
|
2
2
|
export { ApiError, DiffService, InitService, PullService, PushService, StatusService, buildAuthorizationUrl, createApiClient, deleteCredentials, exchangeCodeForTokens, findRemoteOnlyOverlays, formatError, generatePKCEChallenge, getConfig, getCredentialsPath, getLocalOverlayNames, getUserInfo, isContentEqual, isTokenExpired, loadCredentials, loadOverlayFile, loadOverlays, loadOverlaysByNames, loadOverlaysFromDir, refreshAccessToken, sanitizeFileName, saveCredentials, saveOverlayToFile, setClerkConfig, setClerkEnv, startOAuthServer, tokenResponseToCredentials, unwrap };
|
package/dist/templates/AGENTS.md
CHANGED
|
@@ -7,7 +7,7 @@ This is a RevOS data engineering project for **<%=orgName%>** organization.
|
|
|
7
7
|
- `dbt/models/bronze/` — raw ingested data
|
|
8
8
|
- `dbt/models/silver/` — cleaned & conformed
|
|
9
9
|
- `dbt/models/gold/` — business-ready marts
|
|
10
|
-
- `semantic
|
|
10
|
+
- `semantic/` — Cube.dev cube definitions
|
|
11
11
|
|
|
12
12
|
## Key Commands
|
|
13
13
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
revos:
|
|
2
|
+
target: dev
|
|
3
|
+
outputs:
|
|
4
|
+
dev:
|
|
5
|
+
type: bigquery
|
|
6
|
+
method: service-account
|
|
7
|
+
project: "{{ env_var('GOOGLE_CLOUD_PROJECT') }}"
|
|
8
|
+
dataset: "{{ env_var('REVOS_BQ_DATASET') }}"
|
|
9
|
+
keyfile: "{{ env_var('GOOGLE_APPLICATION_CREDENTIALS') }}"
|
|
10
|
+
threads: 4
|
|
11
|
+
timeout_seconds: 300
|
|
12
|
+
location: <%=bqLocation%>
|