seshat-scribe 0.9.2 → 2.0.0
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 +47 -58
- package/dist/commands/generate.d.ts +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +41 -86
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +73 -338
- package/dist/commands/init.js.map +1 -1
- package/dist/config.d.ts +10 -179
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -112
- package/dist/config.js.map +1 -1
- package/dist/core/analyzer.d.ts +1 -1
- package/dist/core/analyzer.d.ts.map +1 -1
- package/dist/core/analyzer.js +2 -115
- package/dist/core/analyzer.js.map +1 -1
- package/dist/core/artist.d.ts +1 -2
- package/dist/core/artist.d.ts.map +1 -1
- package/dist/core/artist.js +2 -5
- package/dist/core/artist.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +6 -8
- package/dist/core/writer.d.ts +0 -7
- package/dist/core/writer.d.ts.map +0 -1
- package/dist/core/writer.js +0 -126
- package/dist/core/writer.js.map +0 -1
- package/dist/lib/detection.d.ts +0 -13
- package/dist/lib/detection.d.ts.map +0 -1
- package/dist/lib/detection.js +0 -158
- package/dist/lib/detection.js.map +0 -1
- package/dist/lib/frontmatter.d.ts +0 -28
- package/dist/lib/frontmatter.d.ts.map +0 -1
- package/dist/lib/frontmatter.js +0 -114
- package/dist/lib/frontmatter.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
# Seshat
|
|
2
2
|
|
|
3
|
-
AI-powered automatic content generation for
|
|
3
|
+
AI-powered automatic content generation for Sanity CMS. Seshat analyzes your existing content, generates new blog posts using Google Gemini, and publishes directly to Sanity. Automatic generation and publication via GitHub Actions on a schedule.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
7
|
- **Free to Use**: Works with Google's free Gemini API tier for text generation, use paid tier for image generation
|
|
8
8
|
- **AI-Powered Planning**: Analyzes existing content to generate unique, non-duplicate topics
|
|
9
9
|
- **BYOK** - Bring Your Own Key, it will use your Gemini key to generate posts
|
|
10
|
-
- **
|
|
11
|
-
- **Smart Generation**: Creates complete articles
|
|
12
|
-
- **Framework Support**: Optional presets for Remix, Next.js, and Astro (or custom configuration)
|
|
13
|
-
- **Flexible Configuration**: Customizable frontmatter, file naming, and content generation options
|
|
10
|
+
- **Sanity Integration**: Automatic image upload and document creation in Portable Text format
|
|
11
|
+
- **Smart Generation**: Creates complete articles as Portable Text with optional hero images
|
|
14
12
|
- **GitHub Actions Integration**: Automate content creation on a schedule
|
|
15
13
|
- **Type-Safe**: Built with TypeScript and Zod for runtime validation
|
|
16
14
|
|
|
@@ -35,11 +33,10 @@ cd your-blog-project
|
|
|
35
33
|
seshat init
|
|
36
34
|
```
|
|
37
35
|
|
|
38
|
-
The interactive wizard will guide you through
|
|
36
|
+
The interactive wizard will guide you through Sanity CMS configuration:
|
|
39
37
|
- Choose between quick setup (recommended defaults) or custom configuration
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
- Auto-detect existing blog structure if available
|
|
38
|
+
- Enter your Sanity project ID, dataset, and API version
|
|
39
|
+
- Configure content generation options (optional)
|
|
43
40
|
|
|
44
41
|
### 2. Configure API Keys
|
|
45
42
|
|
|
@@ -55,7 +52,7 @@ export GEMINI_API_KEY="your_api_key_here"
|
|
|
55
52
|
|
|
56
53
|
By default, Seshat will attempt to generate images. To create text-only posts (for free tier), set `enableImageGeneration: false` in your config (see [Configuration](#content-generation) below).
|
|
57
54
|
|
|
58
|
-
|
|
55
|
+
**Sanity Write Token** (required):
|
|
59
56
|
|
|
60
57
|
```bash
|
|
61
58
|
export SANITY_WRITE_TOKEN="your_sanity_token_here"
|
|
@@ -77,64 +74,37 @@ seshat write --dry-run
|
|
|
77
74
|
|
|
78
75
|
Seshat uses `seshat.config.json` for configuration. The wizard creates this automatically, but you can also edit it manually.
|
|
79
76
|
|
|
80
|
-
###
|
|
77
|
+
### Example Configuration
|
|
81
78
|
|
|
82
79
|
```json
|
|
83
80
|
{
|
|
84
81
|
"topic": "Software Engineering and Technology",
|
|
85
82
|
"tone": "Professional yet approachable",
|
|
86
|
-
"framework": "remix",
|
|
87
|
-
"outputMode": "local"
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
- `topic`: Global topic constraint for content generation
|
|
92
|
-
- `tone`: Writing style and voice
|
|
93
|
-
- `framework`: Optional preset - one of `remix`, `next`, `astro`, or `custom` for manual configuration. Framework presets configure frontmatter fields automatically, but are not required
|
|
94
|
-
- `outputMode`: `local` or `sanity`
|
|
95
|
-
|
|
96
|
-
### Local File Output
|
|
97
|
-
|
|
98
|
-
Required when `outputMode` is `local`:
|
|
99
|
-
|
|
100
|
-
```json
|
|
101
|
-
{
|
|
102
|
-
"contentDir": "app/routes/blog",
|
|
103
|
-
"assetsDir": "public/images/generated",
|
|
104
|
-
"publicAssetPath": "/images/generated"
|
|
105
|
-
}
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### Sanity CMS Output
|
|
109
|
-
|
|
110
|
-
Required when `outputMode` is `sanity`:
|
|
111
|
-
|
|
112
|
-
```json
|
|
113
|
-
{
|
|
114
83
|
"sanity": {
|
|
115
84
|
"projectId": "your-project-id",
|
|
116
85
|
"dataset": "production",
|
|
117
86
|
"apiVersion": "2024-01-01",
|
|
118
87
|
"documentType": "post"
|
|
88
|
+
},
|
|
89
|
+
"generation": {
|
|
90
|
+
"enableImageGeneration": true,
|
|
91
|
+
"targetWordCount": 1500
|
|
119
92
|
}
|
|
120
93
|
}
|
|
121
94
|
```
|
|
122
95
|
|
|
123
|
-
###
|
|
96
|
+
### Core Settings
|
|
124
97
|
|
|
125
|
-
|
|
126
|
-
- `
|
|
127
|
-
- `
|
|
128
|
-
- `
|
|
129
|
-
- `
|
|
98
|
+
- `topic`: Global topic constraint for content generation
|
|
99
|
+
- `tone`: Writing style and voice
|
|
100
|
+
- `sanity`: Sanity CMS configuration (required)
|
|
101
|
+
- `projectId`: Your Sanity project ID
|
|
102
|
+
- `dataset`: Dataset name (default: "production")
|
|
103
|
+
- `apiVersion`: API version (default: "2024-01-01")
|
|
104
|
+
- `documentType`: Document type to create (default: "post")
|
|
130
105
|
|
|
131
|
-
|
|
132
|
-
- `frontmatter.dateField`: Field name for date (e.g., `date`, `pubDate`)
|
|
133
|
-
- `frontmatter.dateFormat`: `iso`, `date-only`, or custom format
|
|
134
|
-
- `frontmatter.imageField`: Field name for image
|
|
135
|
-
- `frontmatter.additionalFields`: Custom metadata as key-value pairs
|
|
106
|
+
### Content Generation
|
|
136
107
|
|
|
137
|
-
**Content Generation**
|
|
138
108
|
- `generation.enableImageGeneration`: Enable/disable AI image generation (default: `true`). Set to `false` for text-only posts if using free Gemini API tier
|
|
139
109
|
- `generation.targetWordCount`: Target word count (optional)
|
|
140
110
|
- `generation.includeCodeExamples`: Emphasize code examples
|
|
@@ -152,6 +122,9 @@ Example for free tier (text-only):
|
|
|
152
122
|
}
|
|
153
123
|
```
|
|
154
124
|
|
|
125
|
+
### Image Format
|
|
126
|
+
|
|
127
|
+
- `imageFormat`: `png`, `jpg`, or `svg` (default: `png`)
|
|
155
128
|
|
|
156
129
|
## GitHub Actions Automation
|
|
157
130
|
|
|
@@ -169,12 +142,12 @@ This creates `.github/workflows/seshat.yml` based on your configuration.
|
|
|
169
142
|
|
|
170
143
|
Add these to your repository secrets (Settings → Secrets and Variables → Actions):
|
|
171
144
|
|
|
172
|
-
- `GEMINI_API_KEY`: Your Google Gemini API key
|
|
173
|
-
- `SANITY_WRITE_TOKEN`: Your Sanity write token (
|
|
145
|
+
- `GEMINI_API_KEY`: Your Google Gemini API key (required)
|
|
146
|
+
- `SANITY_WRITE_TOKEN`: Your Sanity write token (required)
|
|
174
147
|
|
|
175
148
|
### Customize Schedule
|
|
176
149
|
|
|
177
|
-
This will run the
|
|
150
|
+
This will run the GitHub action workflow to generate and publish posts automatically according to the defined schedule.
|
|
178
151
|
|
|
179
152
|
Edit the `schedule` field in `seshat.config.json`:
|
|
180
153
|
|
|
@@ -203,6 +176,7 @@ Generate a new blog post:
|
|
|
203
176
|
```bash
|
|
204
177
|
seshat write
|
|
205
178
|
seshat write --dry-run # Preview without saving
|
|
179
|
+
seshat write -t "Custom Topic" # Override topic for this post
|
|
206
180
|
```
|
|
207
181
|
|
|
208
182
|
### `seshat setup-workflow`
|
|
@@ -215,11 +189,11 @@ seshat setup-workflow
|
|
|
215
189
|
|
|
216
190
|
## How It Works
|
|
217
191
|
|
|
218
|
-
1. **Analysis**: Scans existing content
|
|
192
|
+
1. **Analysis**: Scans existing content from Sanity CMS to understand what you've written
|
|
219
193
|
2. **Planning**: Uses Google Gemini to propose a new, non-duplicate topic
|
|
220
|
-
3. **Writing**: Generates complete article
|
|
194
|
+
3. **Writing**: Generates complete article as Portable Text
|
|
221
195
|
4. **Illustration** (optional): Creates a hero image using Gemini's image generation (if enabled and API supports it)
|
|
222
|
-
5. **Publishing**:
|
|
196
|
+
5. **Publishing**: Uploads content and images to Sanity CMS
|
|
223
197
|
|
|
224
198
|
## Requirements
|
|
225
199
|
|
|
@@ -227,4 +201,19 @@ seshat setup-workflow
|
|
|
227
201
|
- **Free** Google Gemini API key ([Get one here](https://aistudio.google.com/app/apikey) - no credit card required)
|
|
228
202
|
- Free tier: Text generation only
|
|
229
203
|
- Paid tier: Text + AI image generation
|
|
230
|
-
- Sanity write token (
|
|
204
|
+
- Sanity write token (required)
|
|
205
|
+
- Sanity CMS project
|
|
206
|
+
|
|
207
|
+
## Migrating from 0.x
|
|
208
|
+
|
|
209
|
+
Version 1.0.0 is a breaking change that removes local file support and focuses exclusively on Sanity CMS.
|
|
210
|
+
|
|
211
|
+
If you're upgrading from 0.x:
|
|
212
|
+
1. Run `seshat init` to create a new Sanity-only configuration
|
|
213
|
+
2. Remove old config fields: `outputMode`, `contentDir`, `assetsDir`, `publicAssetPath`, `framework`, `fileExtension`, `fileNameTemplate`, `nestedDirectories`, `frontmatter`
|
|
214
|
+
3. Ensure `sanity` configuration is present and valid
|
|
215
|
+
4. Set `SANITY_WRITE_TOKEN` environment variable
|
|
216
|
+
|
|
217
|
+
## License
|
|
218
|
+
|
|
219
|
+
MIT
|
|
@@ -3,7 +3,7 @@ export interface GenerateOptions {
|
|
|
3
3
|
topic?: string;
|
|
4
4
|
}
|
|
5
5
|
/**
|
|
6
|
-
* Main command: Generate a new blog post with image
|
|
6
|
+
* Main command: Generate a new blog post with image and upload to Sanity
|
|
7
7
|
*/
|
|
8
8
|
export declare function generate(options?: GenerateOptions): Promise<void>;
|
|
9
9
|
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqK3E"}
|
|
@@ -4,15 +4,13 @@ import os from 'os';
|
|
|
4
4
|
import ora from 'ora';
|
|
5
5
|
import { scanRepository } from '../core/analyzer.js';
|
|
6
6
|
import { planBlogPost } from '../core/planner.js';
|
|
7
|
-
import { writeBlogPost } from '../core/writer.js';
|
|
8
7
|
import { writePortableTextContent } from '../core/portable-writer.js';
|
|
9
8
|
import { generateImage } from '../core/artist.js';
|
|
10
9
|
import { uploadToSanity } from '../core/sanity.js';
|
|
11
10
|
import { gold, cyan, error, info, scrollWritten } from '../lib/output.js';
|
|
12
11
|
import { resetUsage, formatUsageSummary } from '../lib/usage.js';
|
|
13
|
-
import { buildFileName, buildNestedPath } from '../lib/frontmatter.js';
|
|
14
12
|
/**
|
|
15
|
-
* Main command: Generate a new blog post with image
|
|
13
|
+
* Main command: Generate a new blog post with image and upload to Sanity
|
|
16
14
|
*/
|
|
17
15
|
export async function generate(options = {}) {
|
|
18
16
|
const configPath = path.join(process.cwd(), 'seshat.config.json');
|
|
@@ -38,7 +36,7 @@ export async function generate(options = {}) {
|
|
|
38
36
|
}
|
|
39
37
|
console.log('');
|
|
40
38
|
resetUsage();
|
|
41
|
-
// Step 1: Analyze existing content
|
|
39
|
+
// Step 1: Analyze existing content from Sanity
|
|
42
40
|
const analyzeSpinner = ora({
|
|
43
41
|
text: cyan('Reading the archives...'),
|
|
44
42
|
color: 'cyan',
|
|
@@ -71,35 +69,19 @@ export async function generate(options = {}) {
|
|
|
71
69
|
process.exit(1);
|
|
72
70
|
}
|
|
73
71
|
const postDate = new Date();
|
|
74
|
-
const outputMode = config.outputMode || 'local';
|
|
75
|
-
let mdxContent;
|
|
76
|
-
let portableTextBody;
|
|
77
72
|
// Step 3: Generate the image (if enabled)
|
|
78
73
|
const enableImageGeneration = config.generation?.enableImageGeneration ?? true;
|
|
79
74
|
let imagePath = null;
|
|
80
|
-
let isTemporaryImage = false;
|
|
81
75
|
if (enableImageGeneration) {
|
|
82
76
|
const imageSpinner = ora({
|
|
83
77
|
text: cyan('Seshat is painting...'),
|
|
84
78
|
color: 'cyan',
|
|
85
79
|
}).start();
|
|
86
80
|
try {
|
|
87
|
-
//
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const tempImagePath = path.join(tempDir, `seshat-${plan.slug}.${imageExtension}`);
|
|
92
|
-
// Temporarily override config to save to temp
|
|
93
|
-
const tempConfig = { ...config, assetsDir: tempDir };
|
|
94
|
-
imagePath = await generateImage(tempConfig, plan.imagePrompt, plan.slug);
|
|
95
|
-
isTemporaryImage = true;
|
|
96
|
-
imageSpinner.succeed('Image created (temporary)');
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
imagePath = await generateImage(config, plan.imagePrompt, plan.slug);
|
|
100
|
-
const relativeImagePath = path.relative(process.cwd(), imagePath);
|
|
101
|
-
imageSpinner.succeed(`Image created: ${relativeImagePath}`);
|
|
102
|
-
}
|
|
81
|
+
// Save to temp directory for Sanity upload
|
|
82
|
+
const tempDir = os.tmpdir();
|
|
83
|
+
imagePath = await generateImage(plan.imagePrompt, plan.slug, tempDir);
|
|
84
|
+
imageSpinner.succeed('Image created');
|
|
103
85
|
}
|
|
104
86
|
catch (err) {
|
|
105
87
|
imageSpinner.fail('Image generation failed');
|
|
@@ -110,23 +92,14 @@ export async function generate(options = {}) {
|
|
|
110
92
|
else {
|
|
111
93
|
info('Image generation disabled - creating text-only post');
|
|
112
94
|
}
|
|
113
|
-
// Step 4: Write
|
|
95
|
+
// Step 4: Write Portable Text content
|
|
114
96
|
const writeSpinner = ora({
|
|
115
97
|
text: cyan('Seshat is writing...'),
|
|
116
98
|
color: 'cyan',
|
|
117
99
|
}).start();
|
|
100
|
+
let portableTextBody;
|
|
118
101
|
try {
|
|
119
|
-
|
|
120
|
-
// Determine public image path for frontmatter
|
|
121
|
-
const imageExtension = config.imageFormat === 'jpg' ? 'jpg' : (config.imageFormat === 'svg' ? 'svg' : 'png');
|
|
122
|
-
const publicImagePath = imagePath && config.publicAssetPath
|
|
123
|
-
? `${config.publicAssetPath}/${plan.slug}.${imageExtension}`
|
|
124
|
-
: null;
|
|
125
|
-
mdxContent = await writeBlogPost(config, plan, postDate, publicImagePath);
|
|
126
|
-
}
|
|
127
|
-
if (outputMode === 'sanity') {
|
|
128
|
-
portableTextBody = await writePortableTextContent(config, plan);
|
|
129
|
-
}
|
|
102
|
+
portableTextBody = await writePortableTextContent(config, plan);
|
|
130
103
|
writeSpinner.succeed('Content written');
|
|
131
104
|
}
|
|
132
105
|
catch (err) {
|
|
@@ -134,68 +107,50 @@ export async function generate(options = {}) {
|
|
|
134
107
|
error(err instanceof Error ? err.message : 'Unknown error');
|
|
135
108
|
process.exit(1);
|
|
136
109
|
}
|
|
137
|
-
// Step 5:
|
|
110
|
+
// Step 5: Upload to Sanity
|
|
138
111
|
const saveSpinner = ora({
|
|
139
112
|
text: cyan('Inscribing the scroll...'),
|
|
140
113
|
color: 'cyan',
|
|
141
114
|
}).start();
|
|
142
115
|
try {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
catch (cleanupErr) {
|
|
159
|
-
// Ignore cleanup errors
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
116
|
+
if (options.dryRun) {
|
|
117
|
+
saveSpinner.info('Dry run: skipping Sanity upload');
|
|
118
|
+
console.log('');
|
|
119
|
+
console.log(gold('--- Generated Content Preview ---'));
|
|
120
|
+
console.log(`Title: ${plan.title}`);
|
|
121
|
+
console.log(`Slug: ${plan.slug}`);
|
|
122
|
+
console.log(`Description: ${plan.description}`);
|
|
123
|
+
console.log(`Tags: ${plan.tags.join(', ')}`);
|
|
124
|
+
console.log(`Blocks: ${portableTextBody.length}`);
|
|
125
|
+
console.log('');
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
const result = await uploadToSanity(config, plan, portableTextBody, imagePath, postDate);
|
|
129
|
+
saveSpinner.succeed(`Uploaded to Sanity: ${result.documentId}`);
|
|
130
|
+
info(` View in studio: /studio/intent/edit/id=${result.documentId};type=post`);
|
|
163
131
|
}
|
|
164
|
-
//
|
|
165
|
-
if (
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
const fileNameTemplate = config.fileNameTemplate || '{{slug}}';
|
|
169
|
-
const fileName = buildFileName(fileNameTemplate, plan.slug, postDate, fileExtension);
|
|
170
|
-
if (options.dryRun) {
|
|
171
|
-
saveSpinner.info('Dry run: skipping file write');
|
|
172
|
-
console.log('');
|
|
173
|
-
console.log(gold('--- Generated Content Preview ---'));
|
|
174
|
-
console.log(mdxContent.substring(0, 500) + '...');
|
|
175
|
-
console.log('');
|
|
132
|
+
// Clean up temporary image
|
|
133
|
+
if (imagePath) {
|
|
134
|
+
try {
|
|
135
|
+
await fs.unlink(imagePath);
|
|
176
136
|
}
|
|
177
|
-
|
|
178
|
-
//
|
|
179
|
-
if (!config.contentDir) {
|
|
180
|
-
throw new Error('contentDir is required for local output mode');
|
|
181
|
-
}
|
|
182
|
-
let contentPath = path.resolve(process.cwd(), config.contentDir);
|
|
183
|
-
if (config.nestedDirectories) {
|
|
184
|
-
contentPath = buildNestedPath(postDate, contentPath);
|
|
185
|
-
}
|
|
186
|
-
// Ensure content directory exists
|
|
187
|
-
await fs.mkdir(contentPath, { recursive: true });
|
|
188
|
-
// Write the MDX file
|
|
189
|
-
const mdxFilePath = path.join(contentPath, fileName);
|
|
190
|
-
await fs.writeFile(mdxFilePath, mdxContent, 'utf-8');
|
|
191
|
-
const relativeMdxPath = path.relative(process.cwd(), mdxFilePath);
|
|
192
|
-
saveSpinner.succeed(`Saved: ${relativeMdxPath}`);
|
|
137
|
+
catch (cleanupErr) {
|
|
138
|
+
// Ignore cleanup errors
|
|
193
139
|
}
|
|
194
140
|
}
|
|
195
141
|
}
|
|
196
142
|
catch (err) {
|
|
197
|
-
saveSpinner.fail('Failed to
|
|
143
|
+
saveSpinner.fail('Failed to upload to Sanity');
|
|
198
144
|
error(err instanceof Error ? err.message : 'Unknown error');
|
|
145
|
+
// Clean up temporary image on error
|
|
146
|
+
if (imagePath) {
|
|
147
|
+
try {
|
|
148
|
+
await fs.unlink(imagePath);
|
|
149
|
+
}
|
|
150
|
+
catch (cleanupErr) {
|
|
151
|
+
// Ignore cleanup errors
|
|
152
|
+
}
|
|
153
|
+
}
|
|
199
154
|
process.exit(1);
|
|
200
155
|
}
|
|
201
156
|
// Usage summary
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,GAAG,MAAM,KAAK,CAAC;AAGtB,OAAO,EAAE,cAAc,EAA0B,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAMA,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0MnE"}
|