seshat-scribe 0.2.6 → 0.3.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/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +51 -28
- package/dist/commands/generate.js.map +1 -1
- package/dist/config.d.ts +59 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -0
- package/dist/config.js.map +1 -1
- package/dist/core/portable-writer.d.ts +7 -0
- package/dist/core/portable-writer.d.ts.map +1 -0
- package/dist/core/portable-writer.js +247 -0
- package/dist/core/portable-writer.js.map +1 -0
- package/dist/core/sanity.d.ts +35 -0
- package/dist/core/sanity.d.ts.map +1 -0
- package/dist/core/sanity.js +76 -0
- package/dist/core/sanity.js.map +1 -0
- package/package.json +2 -1
|
@@ -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":"AAeA,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0K3E"}
|
|
@@ -4,7 +4,9 @@ import ora from 'ora';
|
|
|
4
4
|
import { scanRepository } from '../core/analyzer.js';
|
|
5
5
|
import { planBlogPost } from '../core/planner.js';
|
|
6
6
|
import { writeBlogPost } from '../core/writer.js';
|
|
7
|
+
import { writePortableTextContent } from '../core/portable-writer.js';
|
|
7
8
|
import { generateImage } from '../core/artist.js';
|
|
9
|
+
import { uploadToSanity } from '../core/sanity.js';
|
|
8
10
|
import { gold, cyan, error, info, scrollWritten } from '../lib/output.js';
|
|
9
11
|
import { resetUsage, formatUsageSummary } from '../lib/usage.js';
|
|
10
12
|
import { buildFileName, buildNestedPath } from '../lib/frontmatter.js';
|
|
@@ -66,9 +68,16 @@ export async function generate(options = {}) {
|
|
|
66
68
|
color: 'cyan',
|
|
67
69
|
}).start();
|
|
68
70
|
const postDate = new Date();
|
|
71
|
+
const outputMode = config.outputMode || 'local';
|
|
69
72
|
let mdxContent;
|
|
73
|
+
let portableTextBody;
|
|
70
74
|
try {
|
|
71
|
-
|
|
75
|
+
if (outputMode === 'local' || outputMode === 'both') {
|
|
76
|
+
mdxContent = await writeBlogPost(config, plan, postDate);
|
|
77
|
+
}
|
|
78
|
+
if (outputMode === 'sanity' || outputMode === 'both') {
|
|
79
|
+
portableTextBody = await writePortableTextContent(config, plan);
|
|
80
|
+
}
|
|
72
81
|
writeSpinner.succeed('Content written');
|
|
73
82
|
}
|
|
74
83
|
catch (err) {
|
|
@@ -92,44 +101,58 @@ export async function generate(options = {}) {
|
|
|
92
101
|
error(err instanceof Error ? err.message : 'Unknown error');
|
|
93
102
|
process.exit(1);
|
|
94
103
|
}
|
|
95
|
-
// Step 5:
|
|
104
|
+
// Step 5: Save to local files and/or upload to Sanity
|
|
96
105
|
const saveSpinner = ora({
|
|
97
106
|
text: cyan('Inscribing the scroll...'),
|
|
98
107
|
color: 'cyan',
|
|
99
108
|
}).start();
|
|
100
109
|
try {
|
|
101
|
-
// Build file name from template
|
|
102
|
-
const fileExtension = config.fileExtension || 'mdx';
|
|
103
110
|
const imageExtension = config.imageFormat === 'jpg' ? 'jpg' : (config.imageFormat === 'svg' ? 'svg' : 'png');
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
console.log('');
|
|
111
|
+
// Upload to Sanity if configured
|
|
112
|
+
if ((outputMode === 'sanity' || outputMode === 'both') && portableTextBody) {
|
|
113
|
+
if (options.dryRun) {
|
|
114
|
+
saveSpinner.info('Dry run: skipping Sanity upload');
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
const result = await uploadToSanity(config, plan, portableTextBody, imagePath, postDate);
|
|
118
|
+
saveSpinner.succeed(`Uploaded to Sanity: ${result.documentId}`);
|
|
119
|
+
info(` View in studio: /studio/intent/edit/id=${result.documentId};type=post`);
|
|
120
|
+
}
|
|
115
121
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
122
|
+
// Save to local files if configured
|
|
123
|
+
if ((outputMode === 'local' || outputMode === 'both') && mdxContent) {
|
|
124
|
+
// Build file name from template
|
|
125
|
+
const fileExtension = config.fileExtension || 'mdx';
|
|
126
|
+
const fileNameTemplate = config.fileNameTemplate || '{{slug}}';
|
|
127
|
+
const fileName = buildFileName(fileNameTemplate, plan.slug, postDate, fileExtension);
|
|
128
|
+
// Replace the placeholder image path with the actual path
|
|
129
|
+
const publicImagePath = `${config.publicAssetPath}/${plan.slug}.${imageExtension}`;
|
|
130
|
+
mdxContent = mdxContent.replace(/PLACEHOLDER_IMAGE/g, publicImagePath);
|
|
131
|
+
if (options.dryRun) {
|
|
132
|
+
saveSpinner.info('Dry run: skipping file write');
|
|
133
|
+
console.log('');
|
|
134
|
+
console.log(gold('--- Generated Content Preview ---'));
|
|
135
|
+
console.log(mdxContent.substring(0, 500) + '...');
|
|
136
|
+
console.log('');
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
// Determine content directory (with optional nested structure)
|
|
140
|
+
let contentPath = path.resolve(process.cwd(), config.contentDir);
|
|
141
|
+
if (config.nestedDirectories) {
|
|
142
|
+
contentPath = buildNestedPath(postDate, contentPath);
|
|
143
|
+
}
|
|
144
|
+
// Ensure content directory exists
|
|
145
|
+
await fs.mkdir(contentPath, { recursive: true });
|
|
146
|
+
// Write the MDX file
|
|
147
|
+
const mdxFilePath = path.join(contentPath, fileName);
|
|
148
|
+
await fs.writeFile(mdxFilePath, mdxContent, 'utf-8');
|
|
149
|
+
const relativeMdxPath = path.relative(process.cwd(), mdxFilePath);
|
|
150
|
+
saveSpinner.succeed(`Saved: ${relativeMdxPath}`);
|
|
121
151
|
}
|
|
122
|
-
// Ensure content directory exists
|
|
123
|
-
await fs.mkdir(contentPath, { recursive: true });
|
|
124
|
-
// Write the MDX file
|
|
125
|
-
const mdxFilePath = path.join(contentPath, fileName);
|
|
126
|
-
await fs.writeFile(mdxFilePath, mdxContent, 'utf-8');
|
|
127
|
-
const relativeMdxPath = path.relative(process.cwd(), mdxFilePath);
|
|
128
|
-
saveSpinner.succeed(`Saved: ${relativeMdxPath}`);
|
|
129
152
|
}
|
|
130
153
|
}
|
|
131
154
|
catch (err) {
|
|
132
|
-
saveSpinner.fail('Failed to save
|
|
155
|
+
saveSpinner.fail('Failed to save');
|
|
133
156
|
error(err instanceof Error ? err.message : 'Unknown error');
|
|
134
157
|
process.exit(1);
|
|
135
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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
|
|
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,GAAG,MAAM,KAAK,CAAC;AAGtB,OAAO,EAAE,cAAc,EAA0B,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAMvE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,UAA2B,EAAE;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAElE,qBAAqB;IACrB,IAAI,MAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACpD,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC3C,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,UAAU,EAAE,CAAC;IAEb,mCAAmC;IACnC,MAAM,cAAc,GAAG,GAAG,CAAC;QACzB,IAAI,EAAE,IAAI,CAAC,yBAAyB,CAAC;QACrC,KAAK,EAAE,MAAM;KACd,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,OAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;QACvC,cAAc,CAAC,OAAO,CACpB,SAAS,OAAO,CAAC,UAAU,iBAAiB,OAAO,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAClF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,cAAc,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACjD,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,MAAM,WAAW,GAAG,GAAG,CAAC;QACtB,IAAI,EAAE,IAAI,CAAC,4BAA4B,CAAC;QACxC,KAAK,EAAE,MAAM;KACd,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,WAAW,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC3C,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,4BAA4B;IAC5B,MAAM,YAAY,GAAG,GAAG,CAAC;QACvB,IAAI,EAAE,IAAI,CAAC,sBAAsB,CAAC;QAClC,KAAK,EAAE,MAAM;KACd,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC;IAChD,IAAI,UAA8B,CAAC;IACnC,IAAI,gBAAmC,CAAC;IAExC,IAAI,CAAC;QACH,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YACpD,UAAU,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YACrD,gBAAgB,GAAG,MAAM,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAClE,CAAC;QACD,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC7C,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,6BAA6B;IAC7B,MAAM,YAAY,GAAG,GAAG,CAAC;QACvB,IAAI,EAAE,IAAI,CAAC,uBAAuB,CAAC;QACnC,KAAK,EAAE,MAAM;KACd,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,SAAiB,CAAC;IACtB,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QAClE,YAAY,CAAC,OAAO,CAAC,kBAAkB,iBAAiB,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC9C,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,sDAAsD;IACtD,MAAM,WAAW,GAAG,GAAG,CAAC;QACtB,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAC;QACtC,KAAK,EAAE,MAAM;KACd,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAE7G,iCAAiC;QACjC,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;YAC3E,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,WAAW,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;gBACzF,WAAW,CAAC,OAAO,CAAC,uBAAuB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;gBAChE,IAAI,CAAC,4CAA4C,MAAM,CAAC,UAAU,YAAY,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YACpE,gCAAgC;YAChC,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC;YACpD,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,UAAU,CAAC;YAC/D,MAAM,QAAQ,GAAG,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;YAErF,0DAA0D;YAC1D,MAAM,eAAe,GAAG,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC;YACnF,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;YAEvE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,WAAW,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;gBACvD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,+DAA+D;gBAC/D,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;gBACjE,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;oBAC7B,WAAW,GAAG,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;gBACvD,CAAC;gBAED,kCAAkC;gBAClC,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEjD,qBAAqB;gBACrB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBACrD,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;gBAErD,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;gBAClE,WAAW,CAAC,OAAO,CAAC,UAAU,eAAe,EAAE,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACnC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gBAAgB;IAChB,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC;IACxC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IAED,WAAW;IACX,aAAa,EAAE,CAAC;AAClB,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -45,6 +45,29 @@ export declare const GenerationConfigSchema: z.ZodObject<{
|
|
|
45
45
|
customInstructions?: string | undefined;
|
|
46
46
|
}>;
|
|
47
47
|
export type GenerationConfig = z.infer<typeof GenerationConfigSchema>;
|
|
48
|
+
/**
|
|
49
|
+
* Sanity CMS configuration schema
|
|
50
|
+
*/
|
|
51
|
+
export declare const SanityConfigSchema: z.ZodObject<{
|
|
52
|
+
projectId: z.ZodString;
|
|
53
|
+
dataset: z.ZodString;
|
|
54
|
+
token: z.ZodOptional<z.ZodString>;
|
|
55
|
+
apiVersion: z.ZodOptional<z.ZodString>;
|
|
56
|
+
documentType: z.ZodOptional<z.ZodString>;
|
|
57
|
+
}, "strip", z.ZodTypeAny, {
|
|
58
|
+
projectId: string;
|
|
59
|
+
dataset: string;
|
|
60
|
+
token?: string | undefined;
|
|
61
|
+
apiVersion?: string | undefined;
|
|
62
|
+
documentType?: string | undefined;
|
|
63
|
+
}, {
|
|
64
|
+
projectId: string;
|
|
65
|
+
dataset: string;
|
|
66
|
+
token?: string | undefined;
|
|
67
|
+
apiVersion?: string | undefined;
|
|
68
|
+
documentType?: string | undefined;
|
|
69
|
+
}>;
|
|
70
|
+
export type SanityConfig = z.infer<typeof SanityConfigSchema>;
|
|
48
71
|
/**
|
|
49
72
|
* Zod schema for Seshat configuration
|
|
50
73
|
*/
|
|
@@ -98,6 +121,26 @@ export declare const SeshatConfigSchema: z.ZodObject<{
|
|
|
98
121
|
seoOptimized?: boolean | undefined;
|
|
99
122
|
customInstructions?: string | undefined;
|
|
100
123
|
}>>;
|
|
124
|
+
outputMode: z.ZodOptional<z.ZodEnum<["local", "sanity", "both"]>>;
|
|
125
|
+
sanity: z.ZodOptional<z.ZodObject<{
|
|
126
|
+
projectId: z.ZodString;
|
|
127
|
+
dataset: z.ZodString;
|
|
128
|
+
token: z.ZodOptional<z.ZodString>;
|
|
129
|
+
apiVersion: z.ZodOptional<z.ZodString>;
|
|
130
|
+
documentType: z.ZodOptional<z.ZodString>;
|
|
131
|
+
}, "strip", z.ZodTypeAny, {
|
|
132
|
+
projectId: string;
|
|
133
|
+
dataset: string;
|
|
134
|
+
token?: string | undefined;
|
|
135
|
+
apiVersion?: string | undefined;
|
|
136
|
+
documentType?: string | undefined;
|
|
137
|
+
}, {
|
|
138
|
+
projectId: string;
|
|
139
|
+
dataset: string;
|
|
140
|
+
token?: string | undefined;
|
|
141
|
+
apiVersion?: string | undefined;
|
|
142
|
+
documentType?: string | undefined;
|
|
143
|
+
}>>;
|
|
101
144
|
}, "strip", z.ZodTypeAny, {
|
|
102
145
|
contentDir: string;
|
|
103
146
|
assetsDir: string;
|
|
@@ -124,6 +167,14 @@ export declare const SeshatConfigSchema: z.ZodObject<{
|
|
|
124
167
|
seoOptimized?: boolean | undefined;
|
|
125
168
|
customInstructions?: string | undefined;
|
|
126
169
|
} | undefined;
|
|
170
|
+
sanity?: {
|
|
171
|
+
projectId: string;
|
|
172
|
+
dataset: string;
|
|
173
|
+
token?: string | undefined;
|
|
174
|
+
apiVersion?: string | undefined;
|
|
175
|
+
documentType?: string | undefined;
|
|
176
|
+
} | undefined;
|
|
177
|
+
outputMode?: "local" | "sanity" | "both" | undefined;
|
|
127
178
|
}, {
|
|
128
179
|
contentDir: string;
|
|
129
180
|
assetsDir: string;
|
|
@@ -150,6 +201,14 @@ export declare const SeshatConfigSchema: z.ZodObject<{
|
|
|
150
201
|
seoOptimized?: boolean | undefined;
|
|
151
202
|
customInstructions?: string | undefined;
|
|
152
203
|
} | undefined;
|
|
204
|
+
sanity?: {
|
|
205
|
+
projectId: string;
|
|
206
|
+
dataset: string;
|
|
207
|
+
token?: string | undefined;
|
|
208
|
+
apiVersion?: string | undefined;
|
|
209
|
+
documentType?: string | undefined;
|
|
210
|
+
} | undefined;
|
|
211
|
+
outputMode?: "local" | "sanity" | "both" | undefined;
|
|
153
212
|
}>;
|
|
154
213
|
export type SeshatConfig = z.infer<typeof SeshatConfigSchema>;
|
|
155
214
|
/**
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;EAOlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;EAKjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;GAEG;AACH,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;EAOlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;EAKjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;EAM7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2B7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CA+BvF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,YAW5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CA8BhE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAM1E"}
|
package/dist/config.js
CHANGED
|
@@ -19,6 +19,16 @@ export const GenerationConfigSchema = z.object({
|
|
|
19
19
|
seoOptimized: z.boolean().optional().describe('Generate SEO-optimized content'),
|
|
20
20
|
customInstructions: z.string().optional().describe('Additional custom instructions for content generation'),
|
|
21
21
|
});
|
|
22
|
+
/**
|
|
23
|
+
* Sanity CMS configuration schema
|
|
24
|
+
*/
|
|
25
|
+
export const SanityConfigSchema = z.object({
|
|
26
|
+
projectId: z.string().describe('Sanity project ID'),
|
|
27
|
+
dataset: z.string().describe('Sanity dataset name'),
|
|
28
|
+
token: z.string().optional().describe('Sanity write token (or environment variable name)'),
|
|
29
|
+
apiVersion: z.string().optional().describe('Sanity API version (default: 2024-01-01)'),
|
|
30
|
+
documentType: z.string().optional().describe('Sanity document type to create (default: post)'),
|
|
31
|
+
});
|
|
22
32
|
/**
|
|
23
33
|
* Zod schema for Seshat configuration
|
|
24
34
|
*/
|
|
@@ -42,6 +52,9 @@ export const SeshatConfigSchema = z.object({
|
|
|
42
52
|
frontmatter: FrontmatterConfigSchema.optional().describe('Custom frontmatter configuration'),
|
|
43
53
|
// Content generation options
|
|
44
54
|
generation: GenerationConfigSchema.optional().describe('Content generation options'),
|
|
55
|
+
// Output mode and Sanity CMS integration
|
|
56
|
+
outputMode: z.enum(['local', 'sanity', 'both']).optional().describe('Output mode: local files, Sanity CMS, or both (default: local)'),
|
|
57
|
+
sanity: SanityConfigSchema.optional().describe('Sanity CMS configuration (required when outputMode includes "sanity")'),
|
|
45
58
|
});
|
|
46
59
|
/**
|
|
47
60
|
* Framework preset configurations
|
|
@@ -112,6 +125,7 @@ export function resolveConfig(config) {
|
|
|
112
125
|
resolved.imageFormat = resolved.imageFormat || DEFAULT_CONFIG.imageFormat;
|
|
113
126
|
resolved.fileNameTemplate = resolved.fileNameTemplate || DEFAULT_CONFIG.fileNameTemplate;
|
|
114
127
|
resolved.nestedDirectories = resolved.nestedDirectories ?? DEFAULT_CONFIG.nestedDirectories;
|
|
128
|
+
resolved.outputMode = resolved.outputMode || 'local';
|
|
115
129
|
// Default frontmatter config if none provided
|
|
116
130
|
if (!resolved.frontmatter) {
|
|
117
131
|
resolved.frontmatter = {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BlogPlan } from './planner.js';
|
|
2
|
+
import type { SeshatConfig } from '../config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Use Gemini to write content as structured markdown that we'll parse into Portable Text
|
|
5
|
+
*/
|
|
6
|
+
export declare function writePortableTextContent(config: SeshatConfig, plan: BlogPlan): Promise<any[]>;
|
|
7
|
+
//# sourceMappingURL=portable-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-writer.d.ts","sourceRoot":"","sources":["../../src/core/portable-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAmBjD;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,GAAG,EAAE,CAAC,CAiFhB"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { createGenAIClient } from '../lib/gemini.js';
|
|
2
|
+
import { addUsage, fromGenerateContentResponse } from '../lib/usage.js';
|
|
3
|
+
const WRITE_MODEL = 'gemini-3-flash-preview';
|
|
4
|
+
function pickOne(arr) {
|
|
5
|
+
return arr[Math.floor(Math.random() * arr.length)];
|
|
6
|
+
}
|
|
7
|
+
const OPENING_STYLES = [
|
|
8
|
+
{ instruction: 'Start with 1–2 sentences on why this matters to the reader.' },
|
|
9
|
+
{ instruction: 'Open with a question that the post will answer.' },
|
|
10
|
+
{ instruction: 'Open with a bold or surprising claim, then back it up.' },
|
|
11
|
+
{ instruction: 'Open with a very short anecdote or moment (2–3 sentences) that leads into the topic.' },
|
|
12
|
+
{ instruction: 'Dive straight into the technical content; no preamble. Start with a concrete example or definition.' },
|
|
13
|
+
{ instruction: 'Start with an understated, almost casual observation that draws the reader in.' },
|
|
14
|
+
{ instruction: 'Start by contradicting a common belief or practice, then explain.' },
|
|
15
|
+
{ instruction: 'Start with a specific frustration or "this used to confuse me" and then resolve it.' },
|
|
16
|
+
];
|
|
17
|
+
/**
|
|
18
|
+
* Use Gemini to write content as structured markdown that we'll parse into Portable Text
|
|
19
|
+
*/
|
|
20
|
+
export async function writePortableTextContent(config, plan) {
|
|
21
|
+
const ai = createGenAIClient();
|
|
22
|
+
const primaryTag = plan.tags[0] || 'general';
|
|
23
|
+
const opening = pickOne(OPENING_STYLES);
|
|
24
|
+
// Build generation instructions
|
|
25
|
+
let generationInstructions = '';
|
|
26
|
+
if (config.generation) {
|
|
27
|
+
if (config.generation.targetWordCount) {
|
|
28
|
+
generationInstructions += `\n- Target length: approximately ${config.generation.targetWordCount} words`;
|
|
29
|
+
}
|
|
30
|
+
if (config.generation.includeCodeExamples) {
|
|
31
|
+
generationInstructions += '\n- Include multiple practical code examples throughout the post';
|
|
32
|
+
}
|
|
33
|
+
if (config.generation.seoOptimized) {
|
|
34
|
+
generationInstructions += '\n- Optimize for SEO: use keywords naturally, clear headings, scannable structure';
|
|
35
|
+
}
|
|
36
|
+
if (config.generation.customInstructions) {
|
|
37
|
+
generationInstructions += `\n- Additional instructions: ${config.generation.customInstructions}`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const prompt = `Write a technical blog post in clean markdown format. Clear, valuable, focused on helping readers understand. Vary your voice — avoid sounding like a generic AI or a template.
|
|
41
|
+
|
|
42
|
+
**Post Details:**
|
|
43
|
+
- Title: ${plan.title}
|
|
44
|
+
- Description: ${plan.description}
|
|
45
|
+
- Tag: ${primaryTag}${generationInstructions}
|
|
46
|
+
|
|
47
|
+
**Opening (follow this for the first paragraph):**
|
|
48
|
+
${opening.instruction}
|
|
49
|
+
Do NOT start with "In this article we will...", "In today's post...", or similar. Each post should feel like it was written on a different day.
|
|
50
|
+
|
|
51
|
+
**Writing Style:**
|
|
52
|
+
- Prose that delivers value without fluff or filler
|
|
53
|
+
- First-person when it fits ("I found", "I learned"); not every sentence
|
|
54
|
+
- Vary sentence length and rhythm — short and long, not uniform
|
|
55
|
+
- It's okay to be a bit idiosyncratic or opinionated
|
|
56
|
+
- Use examples and code to clarify; show real code, not pseudo-code
|
|
57
|
+
- Explain the "why" behind decisions; include edge cases or gotchas when relevant
|
|
58
|
+
- Don't use perfect grammar, just write like a human.
|
|
59
|
+
|
|
60
|
+
**Structure:**
|
|
61
|
+
- Use clear headings, but don't follow a cookie-cutter pattern
|
|
62
|
+
- Let the topic dictate structure: some posts need a long setup, others can jump in
|
|
63
|
+
- Include practical code examples where helpful
|
|
64
|
+
|
|
65
|
+
**Technical Quality:**
|
|
66
|
+
- Be accurate and specific
|
|
67
|
+
- Avoid formulaic transitions ("Furthermore", "Moreover", "It's worth noting that" as crutches)
|
|
68
|
+
|
|
69
|
+
**Tone: ${config.tone}**
|
|
70
|
+
|
|
71
|
+
**Format Requirements:**
|
|
72
|
+
- Use markdown headings (##, ###, ####) for structure
|
|
73
|
+
- Use code blocks with language tags (\`\`\`javascript, \`\`\`python, etc.)
|
|
74
|
+
- Use **bold** for emphasis, \`code\` for inline code
|
|
75
|
+
- Use [link text](url) for links
|
|
76
|
+
- Do NOT include frontmatter
|
|
77
|
+
- Start directly with the content
|
|
78
|
+
|
|
79
|
+
Write a focused, valuable post that helps developers understand ${plan.title}.`;
|
|
80
|
+
const response = await ai.models.generateContent({
|
|
81
|
+
model: WRITE_MODEL,
|
|
82
|
+
contents: prompt,
|
|
83
|
+
});
|
|
84
|
+
const u = fromGenerateContentResponse(WRITE_MODEL, response.usageMetadata);
|
|
85
|
+
if (u)
|
|
86
|
+
addUsage(u);
|
|
87
|
+
let content = response.text?.trim() || '';
|
|
88
|
+
// Clean up: remove wrapping code blocks if Gemini added them
|
|
89
|
+
if (content.startsWith('```')) {
|
|
90
|
+
content = content.replace(/^```(?:markdown|md)?\\n/, '').replace(/\\n```$/, '');
|
|
91
|
+
}
|
|
92
|
+
// Convert markdown to Portable Text blocks
|
|
93
|
+
return parseMarkdownToPortableText(content);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Parse markdown content into Portable Text blocks
|
|
97
|
+
*/
|
|
98
|
+
function parseMarkdownToPortableText(markdown) {
|
|
99
|
+
const blocks = [];
|
|
100
|
+
const lines = markdown.split('\n');
|
|
101
|
+
let currentParagraph = [];
|
|
102
|
+
let inCodeBlock = false;
|
|
103
|
+
let codeBlockContent = [];
|
|
104
|
+
let codeBlockLanguage = '';
|
|
105
|
+
const flushParagraph = () => {
|
|
106
|
+
if (currentParagraph.length > 0) {
|
|
107
|
+
const text = currentParagraph.join('\n').trim();
|
|
108
|
+
if (text) {
|
|
109
|
+
blocks.push(createTextBlock(text, 'normal'));
|
|
110
|
+
}
|
|
111
|
+
currentParagraph = [];
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
for (const line of lines) {
|
|
115
|
+
// Handle code blocks
|
|
116
|
+
if (line.startsWith('```')) {
|
|
117
|
+
if (!inCodeBlock) {
|
|
118
|
+
flushParagraph();
|
|
119
|
+
inCodeBlock = true;
|
|
120
|
+
codeBlockLanguage = line.slice(3).trim() || 'javascript';
|
|
121
|
+
codeBlockContent = [];
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// End of code block
|
|
125
|
+
blocks.push({
|
|
126
|
+
_type: 'code',
|
|
127
|
+
language: codeBlockLanguage,
|
|
128
|
+
code: codeBlockContent.join('\n'),
|
|
129
|
+
});
|
|
130
|
+
inCodeBlock = false;
|
|
131
|
+
codeBlockContent = [];
|
|
132
|
+
codeBlockLanguage = '';
|
|
133
|
+
}
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
if (inCodeBlock) {
|
|
137
|
+
codeBlockContent.push(line);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
// Handle headings
|
|
141
|
+
if (line.startsWith('#### ')) {
|
|
142
|
+
flushParagraph();
|
|
143
|
+
blocks.push(createTextBlock(line.slice(5), 'h4'));
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if (line.startsWith('### ')) {
|
|
147
|
+
flushParagraph();
|
|
148
|
+
blocks.push(createTextBlock(line.slice(4), 'h3'));
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (line.startsWith('## ')) {
|
|
152
|
+
flushParagraph();
|
|
153
|
+
blocks.push(createTextBlock(line.slice(3), 'h2'));
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (line.startsWith('# ')) {
|
|
157
|
+
flushParagraph();
|
|
158
|
+
blocks.push(createTextBlock(line.slice(2), 'h1'));
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
// Handle blockquotes
|
|
162
|
+
if (line.startsWith('> ')) {
|
|
163
|
+
flushParagraph();
|
|
164
|
+
blocks.push(createTextBlock(line.slice(2), 'blockquote'));
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
// Empty lines separate paragraphs
|
|
168
|
+
if (line.trim() === '') {
|
|
169
|
+
flushParagraph();
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
// Regular paragraph text
|
|
173
|
+
currentParagraph.push(line);
|
|
174
|
+
}
|
|
175
|
+
// Flush any remaining content
|
|
176
|
+
flushParagraph();
|
|
177
|
+
return blocks;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Create a Portable Text block with inline formatting
|
|
181
|
+
*/
|
|
182
|
+
function createTextBlock(text, style) {
|
|
183
|
+
const children = parseInlineFormatting(text);
|
|
184
|
+
return {
|
|
185
|
+
_type: 'block',
|
|
186
|
+
style,
|
|
187
|
+
children,
|
|
188
|
+
markDefs: [],
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Parse inline formatting (bold, italic, code, links)
|
|
193
|
+
*/
|
|
194
|
+
function parseInlineFormatting(text) {
|
|
195
|
+
const children = [];
|
|
196
|
+
// Split by formatting markers
|
|
197
|
+
const parts = text.split(/(\*\*.*?\*\*|__.*?__|`.*?`|\[.*?\]\(.*?\))/g);
|
|
198
|
+
for (const part of parts) {
|
|
199
|
+
if (!part)
|
|
200
|
+
continue;
|
|
201
|
+
if (part.startsWith('**') && part.endsWith('**')) {
|
|
202
|
+
// Bold
|
|
203
|
+
children.push({
|
|
204
|
+
_type: 'span',
|
|
205
|
+
text: part.slice(2, -2),
|
|
206
|
+
marks: ['strong'],
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
else if (part.startsWith('__') && part.endsWith('__')) {
|
|
210
|
+
// Bold (alternative)
|
|
211
|
+
children.push({
|
|
212
|
+
_type: 'span',
|
|
213
|
+
text: part.slice(2, -2),
|
|
214
|
+
marks: ['strong'],
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
else if (part.startsWith('`') && part.endsWith('`')) {
|
|
218
|
+
// Inline code
|
|
219
|
+
children.push({
|
|
220
|
+
_type: 'span',
|
|
221
|
+
text: part.slice(1, -1),
|
|
222
|
+
marks: ['code'],
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
else if (part.match(/\[(.*?)\]\((.*?)\)/)) {
|
|
226
|
+
// Link - simplified, would need markDefs in production
|
|
227
|
+
const match = part.match(/\[(.*?)\]\((.*?)\)/);
|
|
228
|
+
if (match) {
|
|
229
|
+
children.push({
|
|
230
|
+
_type: 'span',
|
|
231
|
+
text: match[1],
|
|
232
|
+
marks: [],
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
// Regular text
|
|
238
|
+
children.push({
|
|
239
|
+
_type: 'span',
|
|
240
|
+
text: part,
|
|
241
|
+
marks: [],
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return children.length > 0 ? children : [{ _type: 'span', text, marks: [] }];
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=portable-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-writer.js","sourceRoot":"","sources":["../../src/core/portable-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type SanityClient } from '@sanity/client';
|
|
2
|
+
import type { SeshatConfig } from '../config.js';
|
|
3
|
+
import type { BlogPlan } from './planner.js';
|
|
4
|
+
/**
|
|
5
|
+
* Get or create a Sanity client instance
|
|
6
|
+
*/
|
|
7
|
+
export declare function getSanityClient(config: SeshatConfig): SanityClient;
|
|
8
|
+
/**
|
|
9
|
+
* Upload an image file to Sanity assets
|
|
10
|
+
*/
|
|
11
|
+
export declare function uploadImageToSanity(client: SanityClient, imagePath: string, imageAlt: string): Promise<{
|
|
12
|
+
_type: 'image';
|
|
13
|
+
asset: {
|
|
14
|
+
_type: 'reference';
|
|
15
|
+
_ref: string;
|
|
16
|
+
};
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Create a post document in Sanity
|
|
20
|
+
*/
|
|
21
|
+
export declare function createSanityPost(client: SanityClient, plan: BlogPlan, portableTextBody: any[], imageRef: {
|
|
22
|
+
_type: 'image';
|
|
23
|
+
asset: {
|
|
24
|
+
_type: 'reference';
|
|
25
|
+
_ref: string;
|
|
26
|
+
};
|
|
27
|
+
}, postDate: Date, documentType?: string): Promise<any>;
|
|
28
|
+
/**
|
|
29
|
+
* Upload a complete blog post with image to Sanity
|
|
30
|
+
*/
|
|
31
|
+
export declare function uploadToSanity(config: SeshatConfig, plan: BlogPlan, portableTextBody: any[], imagePath: string, postDate: Date): Promise<{
|
|
32
|
+
documentId: string;
|
|
33
|
+
slug: string;
|
|
34
|
+
}>;
|
|
35
|
+
//# sourceMappingURL=sanity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanity.d.ts","sourceRoot":"","sources":["../../src/core/sanity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAkBlE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAe1E;AAGD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,QAAQ,EACd,gBAAgB,EAAE,GAAG,EAAE,EACvB,QAAQ,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EACzE,QAAQ,EAAE,IAAI,EACd,YAAY,GAAE,MAAe,GAC5B,OAAO,CAAC,GAAG,CAAC,CAkBd;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,QAAQ,EACd,gBAAgB,EAAE,GAAG,EAAE,EACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,IAAI,GACb,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAyB/C"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { createClient } from '@sanity/client';
|
|
2
|
+
import fs from 'fs/promises';
|
|
3
|
+
/**
|
|
4
|
+
* Get or create a Sanity client instance
|
|
5
|
+
*/
|
|
6
|
+
export function getSanityClient(config) {
|
|
7
|
+
if (!config.sanity) {
|
|
8
|
+
throw new Error('Sanity configuration is missing');
|
|
9
|
+
}
|
|
10
|
+
// Get token from environment variable
|
|
11
|
+
const token = process.env.SANITY_WRITE_TOKEN;
|
|
12
|
+
if (!token) {
|
|
13
|
+
throw new Error('SANITY_WRITE_TOKEN environment variable is required for Sanity uploads');
|
|
14
|
+
}
|
|
15
|
+
return createClient({
|
|
16
|
+
projectId: config.sanity.projectId,
|
|
17
|
+
dataset: config.sanity.dataset,
|
|
18
|
+
apiVersion: config.sanity.apiVersion || '2024-01-01',
|
|
19
|
+
token,
|
|
20
|
+
useCdn: false, // For write operations, never use CDN
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Upload an image file to Sanity assets
|
|
25
|
+
*/
|
|
26
|
+
export async function uploadImageToSanity(client, imagePath, imageAlt) {
|
|
27
|
+
const imageBuffer = await fs.readFile(imagePath);
|
|
28
|
+
// Upload to Sanity assets
|
|
29
|
+
const asset = await client.assets.upload('image', imageBuffer, {
|
|
30
|
+
filename: imagePath.split('/').pop() || 'image.png',
|
|
31
|
+
});
|
|
32
|
+
return {
|
|
33
|
+
_type: 'image',
|
|
34
|
+
asset: {
|
|
35
|
+
_type: 'reference',
|
|
36
|
+
_ref: asset._id,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create a post document in Sanity
|
|
42
|
+
*/
|
|
43
|
+
export async function createSanityPost(client, plan, portableTextBody, imageRef, postDate, documentType = 'post') {
|
|
44
|
+
const doc = {
|
|
45
|
+
_type: documentType,
|
|
46
|
+
title: plan.title,
|
|
47
|
+
slug: {
|
|
48
|
+
_type: 'slug',
|
|
49
|
+
current: plan.slug,
|
|
50
|
+
},
|
|
51
|
+
description: plan.description,
|
|
52
|
+
date: postDate.toISOString().split('T')[0], // YYYY-MM-DD format
|
|
53
|
+
tag: plan.tags[0] || 'general',
|
|
54
|
+
published: false, // Default to unpublished for review
|
|
55
|
+
image: imageRef,
|
|
56
|
+
imageAlt: `Header image for ${plan.title}`,
|
|
57
|
+
body: portableTextBody,
|
|
58
|
+
};
|
|
59
|
+
return await client.create(doc);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Upload a complete blog post with image to Sanity
|
|
63
|
+
*/
|
|
64
|
+
export async function uploadToSanity(config, plan, portableTextBody, imagePath, postDate) {
|
|
65
|
+
const client = getSanityClient(config);
|
|
66
|
+
// Upload the image
|
|
67
|
+
const imageRef = await uploadImageToSanity(client, imagePath, `Header image for ${plan.title}`);
|
|
68
|
+
// Create the post document
|
|
69
|
+
const documentType = config.sanity?.documentType || 'post';
|
|
70
|
+
const result = await createSanityPost(client, plan, portableTextBody, imageRef, postDate, documentType);
|
|
71
|
+
return {
|
|
72
|
+
documentId: result._id,
|
|
73
|
+
slug: plan.slug,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=sanity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanity.js","sourceRoot":"","sources":["../../src/core/sanity.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "seshat-scribe",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "The Autonomous Scribe for Static Blogs - AI-powered content generation using Google Gemini",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@google/genai": "^1.37.0",
|
|
50
50
|
"@inquirer/prompts": "^8.2.0",
|
|
51
|
+
"@sanity/client": "^7.14.0",
|
|
51
52
|
"chalk": "^5.3.0",
|
|
52
53
|
"commander": "^12.1.0",
|
|
53
54
|
"dotenv": "^16.4.7",
|