@gobing-ai/knowledge-kit 0.0.33 → 0.0.35

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 (69) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/dist/index.js +25191 -24167
  3. package/package.json +4 -4
  4. package/plugins/generations/content-gen/dist/index.js +9 -9
  5. package/plugins/generations/core-facts-gen/dist/index.js +12 -12
  6. package/plugins/generations/daily-article-gen/dist/index.js +31 -23
  7. package/plugins/generations/daily-article-gen/src/index.ts +39 -14
  8. package/plugins/generations/dailynews-gen/dist/index.js +23 -21
  9. package/plugins/generations/dailynews-gen/src/script-builder.ts +30 -26
  10. package/plugins/generations/episode-plan-gen/dist/index.js +12 -12
  11. package/plugins/generations/gemini-tts/dist/index.js +13 -12
  12. package/plugins/generations/image-gen/dist/index.js +26 -11
  13. package/plugins/generations/image-gen/presets/formats/xhs-card.yaml +16 -14
  14. package/plugins/generations/image-gen/presets/styles/xhs-knowledge.yaml +2 -2
  15. package/plugins/generations/image-gen/src/compose/card.ts +17 -2
  16. package/plugins/generations/news-report-gen/dist/index.js +12 -12
  17. package/plugins/generations/omni-voice-gen/plugin.json +1 -1
  18. package/plugins/generations/voice-gen/dist/index.js +13 -12
  19. package/plugins/generations/voice-gen/src/index.ts +9 -3
  20. package/plugins/ingestions/aihot-ingest/dist/index.js +12 -12
  21. package/plugins/ingestions/horizon-ingest/dist/index.js +12 -12
  22. package/plugins/ingestions/karakeep-local/dist/index.js +13 -13
  23. package/plugins/ingestions/last30days-ingest/dist/index.js +12 -12
  24. package/plugins/ingestions/web-search/dist/index.js +10 -10
  25. package/plugins/kk/decisions/extract/ai-news.yaml +6 -0
  26. package/plugins/kk/decisions/kk-items.yaml +69 -3
  27. package/plugins/kk/plugin.json +1 -1
  28. package/plugins/kk/scripts/daily-stages.ts +834 -87
  29. package/plugins/kk/scripts/daily-voice-style.zh.md +15 -10
  30. package/plugins/kk/scripts/kk-workflow-stages.ts +46 -3
  31. package/plugins/kk/skills/content-safety/SKILL.md +1 -1
  32. package/plugins/kk/skills/content-safety/references/platforms/apple-podcasts.md +2 -2
  33. package/plugins/kk/skills/content-safety/references/platforms/wechatmp.md +2 -2
  34. package/plugins/kk/skills/content-safety/references/platforms/xiaoyuzhou.md +4 -2
  35. package/plugins/kk/workflows/kk-collect.yaml +7 -9
  36. package/plugins/kk/workflows/kk-daily-ai-voice.yaml +32 -7
  37. package/plugins/kk/workflows/kk-daily-ai-voice2.yaml +169 -47
  38. package/plugins/kk/workflows/kk-daily-safety.yaml +9 -12
  39. package/plugins/publishings/emdash-pub/dist/index.js +9 -9
  40. package/plugins/publishings/infoq-pub/dist/index.js +22 -22
  41. package/plugins/publishings/infoq-pub/dist/profile-check.js +30336 -0
  42. package/plugins/publishings/infoq-pub/plugin.json +1 -1
  43. package/plugins/publishings/juejin-pub/dist/index.js +22 -22
  44. package/plugins/publishings/juejin-pub/dist/profile-check.js +30322 -0
  45. package/plugins/publishings/juejin-pub/plugin.json +1 -1
  46. package/plugins/publishings/medium-pub/dist/index.js +9 -9
  47. package/plugins/publishings/podcast-pub/dist/index.js +9 -9
  48. package/plugins/publishings/qiita-pub/dist/index.js +9 -9
  49. package/plugins/publishings/substack-pub/dist/index.js +22 -22
  50. package/plugins/publishings/substack-pub/dist/profile-check.js +30392 -0
  51. package/plugins/publishings/substack-pub/plugin.json +1 -1
  52. package/plugins/publishings/surfdash-pub/dist/index.js +9 -9
  53. package/plugins/publishings/wechatmp-pub/dist/index.js +329 -154
  54. package/plugins/publishings/wechatmp-pub/dist/profile-check.js +30271 -0
  55. package/plugins/publishings/wechatmp-pub/plugin.json +1 -1
  56. package/plugins/publishings/wechatmp-pub/src/enrich.ts +106 -145
  57. package/plugins/publishings/wechatmp-pub/src/flow.ts +283 -42
  58. package/plugins/publishings/wechatmp-pub/src/page.ts +20 -0
  59. package/plugins/publishings/x-pub/dist/index.js +22 -22
  60. package/plugins/publishings/x-pub/dist/profile-check.js +30328 -0
  61. package/plugins/publishings/x-pub/plugin.json +1 -1
  62. package/plugins/publishings/xhs-pub/dist/index.js +76 -27
  63. package/plugins/publishings/xhs-pub/dist/profile-check.js +30538 -0
  64. package/plugins/publishings/xhs-pub/plugin.json +1 -1
  65. package/plugins/publishings/xhs-pub/src/flow.ts +9 -3
  66. package/plugins/publishings/xhs-pub/src/index.ts +111 -5
  67. package/plugins/publishings/zenn-pub/dist/index.js +9 -9
  68. package/plugins/generations/omni-voice-gen/dist/omni-voice-gen-prr8skpb. +0 -2
  69. package/plugins/generations/omni-voice-gen/dist/omni-voice-gen.js +0 -6
@@ -313,32 +313,46 @@ export function buildNewsVoiceScript(docs: Doc[], options?: ScriptBuilderOptions
313
313
  const defaultEffectPreset = options?.effectPreset;
314
314
  const broadcastDate = options?.date ?? new Date();
315
315
  const dateStr = formatBroadcastDate(broadcastDate, language);
316
+ // Canonical episode identifier: date-only, matching daily-article-gen's `episodeTitle`. One
317
+ // title has to cover the post body, ID3, RSS and the show notes, so the voicescript default
318
+ // must not invent its own form (it used to be `共N条`, which disagreed with the article title
319
+ // on every path where the workflow passes no explicit title).
320
+ const episodeDate = `${broadcastDate.getFullYear()}-${String(broadcastDate.getMonth() + 1).padStart(2, '0')}-${String(broadcastDate.getDate()).padStart(2, '0')}`;
321
+ // Column of 咸话咸说. The show is not the speaker; the host is.
322
+ const showName = '咸话咸说之每日AI乱炖';
323
+ let hostName =
324
+ (options?.speakers?.host?.name as string) ||
325
+ voiceProfile.replace(/[-_]?(news|voice|bot|profile)$/i, '') ||
326
+ voiceProfile;
327
+ if (hostName.length > 0) {
328
+ hostName = hostName.charAt(0).toUpperCase() + hostName.slice(1);
329
+ }
316
330
 
317
331
  if (docs.length === 0) {
318
- const title = options?.title || (isZh ? 'AI 乱炖(暂无更新)' : 'AI 乱炖 (No Updates)');
332
+ const title = options?.title || (isZh ? '每日AI乱炖(暂无更新)' : '每日AI乱炖 (No Updates)');
319
333
  const segments: VoiceScriptSegment[] = isZh
320
334
  ? [
321
335
  {
322
- // Task 0189 R1/R4: honest no-content episode — the copy names the show
323
- // (咸话咸说) and the column (AI 乱炖), and never claims a news digest happened.
324
- text: `大家好,今天是${dateStr}。欢迎收听「咸话咸说」的「AI 乱炖」栏目,我是${voiceProfile}。今天没有足够扎实的可聊内容。`,
336
+ // Honest no-content episode: names the show and the host, and never claims
337
+ // a news digest happened.
338
+ text: `大家好,今天是${dateStr}。这里是由${hostName}为你带来的${showName}。今天没有足够扎实的可聊内容。`,
325
339
  gap_ms: 400,
326
340
  emotion: 'calm',
327
341
  },
328
342
  {
329
- text: `感谢您的收听,我是${voiceProfile},我们下期节目再见。`,
343
+ text: `感谢您的收听,我是${hostName},我们下期节目再见。`,
330
344
  gap_ms: 200,
331
345
  emotion: 'warm',
332
346
  },
333
347
  ]
334
348
  : [
335
349
  {
336
- text: `Hello and welcome. Today is ${dateStr}. This is ${voiceProfile} with AI 乱炖, our chat about AI tools, papers, and hands-on practice. There is nothing solid enough to share today.`,
350
+ text: `Hello. Today is ${dateStr}. This is ${hostName}, bringing you ${showName}, our chat about AI tools, papers, and hands-on practice. There is nothing solid enough to share today.`,
337
351
  gap_ms: 400,
338
352
  emotion: 'calm',
339
353
  },
340
354
  {
341
- text: `Thank you for listening. This is ${voiceProfile}, and have a great day.`,
355
+ text: `Thank you for listening. This is ${hostName}, and have a great day.`,
342
356
  gap_ms: 200,
343
357
  emotion: 'warm',
344
358
  },
@@ -356,17 +370,9 @@ export function buildNewsVoiceScript(docs: Doc[], options?: ScriptBuilderOptions
356
370
  });
357
371
  }
358
372
 
359
- const title = options?.title || (isZh ? `AI 乱炖(共${docs.length}条)` : `AI 乱炖 (${docs.length} stories)`);
373
+ const title = options?.title || `每日AI乱炖 · ${episodeDate}`;
360
374
  const segments: VoiceScriptSegment[] = [];
361
375
 
362
- let hostName =
363
- (options?.speakers?.host?.name as string) ||
364
- voiceProfile.replace(/[-_]?(news|voice|bot|profile)$/i, '') ||
365
- voiceProfile;
366
- if (hostName.length > 0) {
367
- hostName = hostName.charAt(0).toUpperCase() + hostName.slice(1);
368
- }
369
-
370
376
  // F613: the plan owns the words on the zh path; en keeps templates (design: substitution is
371
377
  // zh-only). Items are matched to docs by id and doc order wins; plan item order is ignored.
372
378
  const scriptPlan = isZh ? options?.scriptPlan : undefined;
@@ -384,10 +390,9 @@ export function buildNewsVoiceScript(docs: Doc[], options?: ScriptBuilderOptions
384
390
  ? scriptPlan
385
391
  ? // F613: fixed greeting stays builder-owned; the plan only fills the slot between
386
392
  // greeting and first story (the template tail 从「今天科技圈有几条…正题。」 is replaced).
387
- // Task 0189 R1: the greeting names the show (咸话咸说) and the column (AI 乱炖).
388
- `大家好,今天是${dateStr},欢迎收听「咸话咸说」的「AI 乱炖」栏目,我是${hostName}。${scriptPlan.intro}`
389
- : `大家好,今天是${dateStr},欢迎收听「咸话咸说」的「AI 乱炖」栏目,我是${hostName}。今天我从 AI 工具、论文和实践中整理了${countText}值得聊的内容${titlesSummary ? `,包括${titlesSummary}` : ''},咱们一条条来聊。`
390
- : `Hello and welcome. Today is ${dateStr}. This is ${hostName} with AI 乱炖, where we talk about AI tools, papers, and hands-on practice. In today's episode, we have ${countText} stories. Let's dive straight in.`;
393
+ `大家好,今天是${dateStr}。这里是由${hostName}为你带来的${showName}。${scriptPlan.intro}`
394
+ : `大家好,今天是${dateStr}。这里是由${hostName}为你带来的${showName}。今天我从 AI 工具、论文和实践中整理了${countText}值得聊的内容${titlesSummary ? `,包括${titlesSummary}` : ''},咱们一条条来聊。`
395
+ : `Hello. Today is ${dateStr}. This is ${hostName}, bringing you ${showName}, where we talk about AI tools, papers, and hands-on practice. In today's episode, we have ${countText} stories. Let's dive straight in.`;
391
396
 
392
397
  segments.push({
393
398
  text: normalizeBroadcastText(introText, isZh),
@@ -451,14 +456,13 @@ export function buildNewsVoiceScript(docs: Doc[], options?: ScriptBuilderOptions
451
456
  });
452
457
 
453
458
  // 3. Outro segment: Warm, conversational wrap-up. F613: the plan outro replaces the template
454
- // wrap-up head; the fixed sign-off stays builder-owned.
455
- // Task 0189 R1: the AI-voice disclosure is part of the builder-owned sign-off (not the plan),
456
- // so it is spoken in every episode — Apple Podcasts guideline 1.11 requires it in the content.
459
+ // wrap-up head; the fixed sign-off stays builder-owned. The column settings already state
460
+ // how the episode is produced, so the sign-off does not repeat an AI-production closer.
457
461
  const outroText = isZh
458
462
  ? scriptPlan
459
- ? `${scriptPlan.outro}本期音频为 AI 合成配音。感谢您的收听,我是${hostName},祝您拥有充实高效的一天,我们下期节目不见不散!`
460
- : `好了,本期AI乱炖就聊到这里。希望今天这些工具、论文和实践的经验对您有启发。本期音频为 AI 合成配音。感谢您的收听,我是${hostName},祝您拥有充实高效的一天,我们下期节目不见不散!`
461
- : `That wraps up this episode of AI 乱炖. I hope today's takeaways were useful. The audio in this episode is AI-synthesized. Thank you for listening. This is ${hostName}, wishing you a productive and wonderful day. Until next time!`;
463
+ ? `${scriptPlan.outro}感谢您的收听,我是${hostName},祝您拥有充实高效的一天,我们下期节目不见不散!`
464
+ : `好了,本期每日AI乱炖就聊到这里。希望今天这些工具、论文和实践的经验对您有启发。感谢您的收听,我是${hostName},祝您拥有充实高效的一天,我们下期节目不见不散!`
465
+ : `That wraps up this episode of 每日AI乱炖. I hope today's takeaways were useful. Thank you for listening. This is ${hostName}, wishing you a productive and wonderful day. Until next time!`;
462
466
 
463
467
  segments.push({
464
468
  text: normalizeBroadcastText(outroText, isZh),
@@ -14642,7 +14642,7 @@ var init_zod = __esm(() => {
14642
14642
  init_external();
14643
14643
  });
14644
14644
 
14645
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/errors.js
14645
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/errors.js
14646
14646
  var ErrorCode;
14647
14647
  var init_errors3 = __esm(() => {
14648
14648
  ErrorCode = {
@@ -14653,7 +14653,7 @@ var init_errors3 = __esm(() => {
14653
14653
  };
14654
14654
  });
14655
14655
 
14656
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/api-response.js
14656
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/api-response.js
14657
14657
  var API_ERROR_CODES, ERROR_CODE_TO_HTTP, CLIENT_SAFE_CODES;
14658
14658
  var init_api_response = __esm(() => {
14659
14659
  init_errors3();
@@ -14676,13 +14676,13 @@ var init_api_response = __esm(() => {
14676
14676
  CLIENT_SAFE_CODES = new Set([ErrorCode.NotFound, ErrorCode.Validation, ErrorCode.Conflict]);
14677
14677
  });
14678
14678
 
14679
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/cursor.js
14679
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/cursor.js
14680
14680
  var init_cursor = () => {};
14681
14681
 
14682
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/event-severity.js
14682
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/event-severity.js
14683
14683
  var init_event_severity = () => {};
14684
14684
 
14685
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/output.js
14685
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/output.js
14686
14686
  function processStream(name) {
14687
14687
  const proc = globalThis.process;
14688
14688
  const stream = proc?.[name];
@@ -14700,7 +14700,7 @@ function echoError(message, target = defaultStderrTarget ?? processStream("stder
14700
14700
  }
14701
14701
  var defaultStderrTarget;
14702
14702
 
14703
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/index.js
14703
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/index.js
14704
14704
  var init_dist = __esm(() => {
14705
14705
  init_api_response();
14706
14706
  init_cursor();
@@ -21698,7 +21698,7 @@ var init_dist2 = __esm(() => {
21698
21698
  $visitAsync = visit.visitAsync;
21699
21699
  });
21700
21700
 
21701
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/config.js
21701
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/config.js
21702
21702
  var configSchema;
21703
21703
  var init_config = __esm(() => {
21704
21704
  init_dist2();
@@ -21722,7 +21722,7 @@ var init_config = __esm(() => {
21722
21722
  });
21723
21723
  });
21724
21724
 
21725
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/file-system-node.js
21725
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/file-system-node.js
21726
21726
  import { appendFileSync, cpSync, createReadStream, createWriteStream, existsSync, mkdirSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "fs";
21727
21727
  import { dirname, resolve as resolvePath } from "path";
21728
21728
  function createNodeFileSystem(root, paths) {
@@ -21901,14 +21901,14 @@ var PluginManifestSchema = exports_external.looseObject({
21901
21901
  description: exports_external.string().optional(),
21902
21902
  operations: exports_external.record(exports_external.string(), PluginOperationSchema).optional()
21903
21903
  });
21904
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/index.js
21904
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/index.js
21905
21905
  init_file_system_node();
21906
21906
  init_config();
21907
21907
 
21908
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/fs.js
21908
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/fs.js
21909
21909
  init_file_system_node();
21910
21910
 
21911
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/path.js
21911
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/path.js
21912
21912
  function normalizeSeparators(path) {
21913
21913
  return path.replaceAll("\\", "/");
21914
21914
  }
@@ -21942,7 +21942,7 @@ function dirnamePath(path) {
21942
21942
  return normalized.slice(0, index);
21943
21943
  }
21944
21944
 
21945
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/fs.js
21945
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/fs.js
21946
21946
  async function ensureDirForFile(path, fs = createNodeFileSystem()) {
21947
21947
  await fs.ensureDir(dirnamePath(path));
21948
21948
  }
@@ -17,7 +17,7 @@ var __export = (target, all) => {
17
17
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
18
18
  var __require = import.meta.require;
19
19
 
20
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/errors.js
20
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/errors.js
21
21
  var ErrorCode;
22
22
  var init_errors = __esm(() => {
23
23
  ErrorCode = {
@@ -28,7 +28,7 @@ var init_errors = __esm(() => {
28
28
  };
29
29
  });
30
30
 
31
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/api-response.js
31
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/api-response.js
32
32
  var API_ERROR_CODES, ERROR_CODE_TO_HTTP, CLIENT_SAFE_CODES;
33
33
  var init_api_response = __esm(() => {
34
34
  init_errors();
@@ -51,13 +51,13 @@ var init_api_response = __esm(() => {
51
51
  CLIENT_SAFE_CODES = new Set([ErrorCode.NotFound, ErrorCode.Validation, ErrorCode.Conflict]);
52
52
  });
53
53
 
54
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/cursor.js
54
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/cursor.js
55
55
  var init_cursor = () => {};
56
56
 
57
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/event-severity.js
57
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/event-severity.js
58
58
  var init_event_severity = () => {};
59
59
 
60
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/output.js
60
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/output.js
61
61
  function processStream(name) {
62
62
  const proc = globalThis.process;
63
63
  const stream = proc?.[name];
@@ -75,7 +75,7 @@ function echoError(message, target = defaultStderrTarget ?? processStream("stder
75
75
  }
76
76
  var defaultStderrTarget;
77
77
 
78
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/index.js
78
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/index.js
79
79
  var init_dist = __esm(() => {
80
80
  init_api_response();
81
81
  init_cursor();
@@ -21698,7 +21698,7 @@ var init_dist2 = __esm(() => {
21698
21698
  $visitAsync = visit.visitAsync;
21699
21699
  });
21700
21700
 
21701
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/config.js
21701
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/config.js
21702
21702
  var configSchema;
21703
21703
  var init_config = __esm(() => {
21704
21704
  init_dist2();
@@ -21722,7 +21722,7 @@ var init_config = __esm(() => {
21722
21722
  });
21723
21723
  });
21724
21724
 
21725
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/file-system-node.js
21725
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/file-system-node.js
21726
21726
  import { appendFileSync, cpSync, createReadStream, createWriteStream, existsSync, mkdirSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "fs";
21727
21727
  import { dirname, resolve as resolvePath } from "path";
21728
21728
  function createNodeFileSystem(root, paths) {
@@ -21904,7 +21904,7 @@ var PluginManifestSchema = exports_external.looseObject({
21904
21904
  description: exports_external.string().optional(),
21905
21905
  operations: exports_external.record(exports_external.string(), PluginOperationSchema).optional()
21906
21906
  });
21907
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/index.js
21907
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/index.js
21908
21908
  init_file_system_node();
21909
21909
  init_config();
21910
21910
 
@@ -23041,7 +23041,8 @@ async function processGeneratorIO(inputPath, outputPath, clientOverride, transco
23041
23041
  let loudnessDip = false;
23042
23042
  let lastError;
23043
23043
  let attemptBody = generateBody;
23044
- for (let verifyAttempt = 0;verifyAttempt <= 2 && wavBytes === undefined; verifyAttempt++) {
23044
+ const maxVerifyAttempts = Number.parseInt(process.env.VOICEBOX_MAX_VERIFY_ATTEMPTS ?? "2", 10) || 0;
23045
+ for (let verifyAttempt = 0;verifyAttempt <= maxVerifyAttempts && wavBytes === undefined; verifyAttempt++) {
23045
23046
  if (verifyAttempt > 0) {
23046
23047
  verifyRetries = verifyAttempt;
23047
23048
  const chunkChars = Math.max(VOICEBOX_CHUNK_CHARS_MIN, Math.floor(attemptBody.max_chunk_chars / 2));
@@ -23079,7 +23080,7 @@ async function processGeneratorIO(inputPath, outputPath, clientOverride, transco
23079
23080
  try {
23080
23081
  const trans = await client.transcribe(attemptBytes, language);
23081
23082
  const fidelity = transcriptionFidelity(segment.text, trans.text);
23082
- if (fidelity < TRANSCRIPTION_FIDELITY_FLOOR && verifyAttempt < 2) {
23083
+ if (fidelity < TRANSCRIPTION_FIDELITY_FLOOR && verifyAttempt < maxVerifyAttempts) {
23083
23084
  echoError(`voice-gen: transcription fidelity ${fidelity.toFixed(2)} below ${TRANSCRIPTION_FIDELITY_FLOOR} (looped/garbage audio): "${trans.text.slice(0, 80)}..."`);
23084
23085
  continue;
23085
23086
  }
@@ -23088,7 +23089,7 @@ async function processGeneratorIO(inputPath, outputPath, clientOverride, transco
23088
23089
  }
23089
23090
  const dip = detectLoudnessDip(attemptBytes);
23090
23091
  loudnessDip = dip.dip;
23091
- if (dip.dip && verifyAttempt < 2) {
23092
+ if (dip.dip && verifyAttempt < maxVerifyAttempts) {
23092
23093
  echoError(`voice-gen: loudness dip detected at ${dip.dipAtSec ?? "?"}s \u2014 regenerating segment`);
23093
23094
  continue;
23094
23095
  }
@@ -14642,7 +14642,7 @@ var init_zod = __esm(() => {
14642
14642
  init_external();
14643
14643
  });
14644
14644
 
14645
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/errors.js
14645
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/errors.js
14646
14646
  var ErrorCode;
14647
14647
  var init_errors3 = __esm(() => {
14648
14648
  ErrorCode = {
@@ -14653,7 +14653,7 @@ var init_errors3 = __esm(() => {
14653
14653
  };
14654
14654
  });
14655
14655
 
14656
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/api-response.js
14656
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/api-response.js
14657
14657
  var API_ERROR_CODES, ERROR_CODE_TO_HTTP, CLIENT_SAFE_CODES;
14658
14658
  var init_api_response = __esm(() => {
14659
14659
  init_errors3();
@@ -14676,13 +14676,13 @@ var init_api_response = __esm(() => {
14676
14676
  CLIENT_SAFE_CODES = new Set([ErrorCode.NotFound, ErrorCode.Validation, ErrorCode.Conflict]);
14677
14677
  });
14678
14678
 
14679
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/cursor.js
14679
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/cursor.js
14680
14680
  var init_cursor = () => {};
14681
14681
 
14682
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/event-severity.js
14682
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/event-severity.js
14683
14683
  var init_event_severity = () => {};
14684
14684
 
14685
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/output.js
14685
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/output.js
14686
14686
  function processStream(name) {
14687
14687
  const proc = globalThis.process;
14688
14688
  const stream = proc?.[name];
@@ -14700,7 +14700,7 @@ function echoError(message, target = defaultStderrTarget ?? processStream("stder
14700
14700
  }
14701
14701
  var defaultStderrTarget;
14702
14702
 
14703
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/index.js
14703
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/index.js
14704
14704
  var init_dist = __esm(() => {
14705
14705
  init_api_response();
14706
14706
  init_cursor();
@@ -21698,7 +21698,7 @@ var init_dist2 = __esm(() => {
21698
21698
  $visitAsync = visit.visitAsync;
21699
21699
  });
21700
21700
 
21701
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/config.js
21701
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/config.js
21702
21702
  var configSchema;
21703
21703
  var init_config = __esm(() => {
21704
21704
  init_dist2();
@@ -21722,7 +21722,7 @@ var init_config = __esm(() => {
21722
21722
  });
21723
21723
  });
21724
21724
 
21725
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/file-system-node.js
21725
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/file-system-node.js
21726
21726
  import { appendFileSync, cpSync, createReadStream, createWriteStream, existsSync, mkdirSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "fs";
21727
21727
  import { dirname, resolve as resolvePath } from "path";
21728
21728
  function createNodeFileSystem(root, paths) {
@@ -21933,6 +21933,7 @@ html, body {
21933
21933
  justify-content: flex-start;
21934
21934
  overflow: hidden;
21935
21935
  background: ${palette.background};
21936
+ border-top: 8px solid ${palette.accent};
21936
21937
  }
21937
21938
  .headline {
21938
21939
  font-family: 'NotoSansSC-Bold', sans-serif;
@@ -21940,6 +21941,8 @@ html, body {
21940
21941
  color: ${palette.text};
21941
21942
  line-height: 1.3;
21942
21943
  margin-bottom: ${Math.round(safeArea / 2)}px;
21944
+ padding-bottom: 12px;
21945
+ border-bottom: 4px solid ${palette.accent};
21943
21946
  word-break: break-all;
21944
21947
  white-space: normal;
21945
21948
  /* font-size is set inline with JS fit-step */
@@ -21948,15 +21951,27 @@ html, body {
21948
21951
  .points-container {
21949
21952
  display: flex;
21950
21953
  flex-direction: column;
21951
- gap: ${Math.round(bodyMinPx * 0.5)}px;
21954
+ gap: ${Math.round(bodyMinPx * 0.55)}px;
21952
21955
  }
21953
21956
  .point {
21954
21957
  font-family: 'NotoSansSC-Regular', sans-serif;
21955
21958
  font-weight: normal;
21956
21959
  color: ${palette.text};
21957
- line-height: 1.5;
21960
+ line-height: 1.45;
21958
21961
  word-break: break-all;
21959
21962
  white-space: normal;
21963
+ padding-left: 28px;
21964
+ position: relative;
21965
+ }
21966
+ .point::before {
21967
+ content: '';
21968
+ position: absolute;
21969
+ left: 0;
21970
+ top: 0.45em;
21971
+ width: 14px;
21972
+ height: 14px;
21973
+ border-radius: 50%;
21974
+ background: ${palette.accent};
21960
21975
  }
21961
21976
  .safe-area-sentinel {
21962
21977
  position: absolute;
@@ -22208,7 +22223,7 @@ var PluginManifestSchema = exports_external.looseObject({
22208
22223
  description: exports_external.string().optional(),
22209
22224
  operations: exports_external.record(exports_external.string(), PluginOperationSchema).optional()
22210
22225
  });
22211
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/index.js
22226
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/index.js
22212
22227
  init_file_system_node();
22213
22228
  init_config();
22214
22229
 
@@ -1,20 +1,21 @@
1
1
  name: xhs-card
2
2
  description: >-
3
- Xiaohongshu (XHS) knowledge card — 3:4 portrait image-text card with large
4
- Chinese headline and short bullet points. Adapted from baoyu-xhs-images
5
- (MIT © Jim Liu); see plugins/kk/skills/xhs-images/references/card-layouts.md.
6
- Task 0180: card copy is typeset from Noto Sans SC via headless Chromium;
7
- the provider prompt generates the illustration only.
3
+ Xiaohongshu (XHS) knowledge card — 3:4 portrait card. Chinese headline and
4
+ bullets are typeset from Noto Sans SC via headless Chromium; the provider
5
+ prompt is the illustration only and must not ask for writing. Adapted from
6
+ baoyu-xhs-images (MIT © Jim Liu); see
7
+ plugins/kk/skills/xhs-images/references/card-layouts.md.
8
8
  job: free
9
9
  aspectRatio: '3:4'
10
10
  width: 1080
11
11
  height: 1440
12
12
  defaultStyle: xhs-knowledge
13
13
  keywords:
14
- - xiaohongshu-style
15
- - image-text card layout
14
+ - text-free flat illustration
15
+ - blank unlabeled surfaces
16
+ - empty screens and empty signs
16
17
  - fresh clean design
17
- - flat illustration accents with geometric decorations
18
+ - flat geometric accents
18
19
  - professional color grading
19
20
  outputFilename: 'card-{{index | 01}}.png'
20
21
  compose:
@@ -22,7 +23,7 @@ compose:
22
23
  safeArea: 72
23
24
  headlineMinPx: 64
24
25
  bodyMinPx: 36
25
- illustrationHeight: 640
26
+ illustrationHeight: 880
26
27
  palette:
27
28
  background: '#FFFFFF'
28
29
  text: '#1F2328'
@@ -53,11 +54,12 @@ variables:
53
54
  description: Additional context (use --content)
54
55
  default: ''
55
56
  template: |-
56
- Xiaohongshu-style knowledge card, portrait 3:4, for a card series.
57
+ Portrait illustration, 3:4, one scene for a card series.
57
58
  Card role: {{role | content}}. Layout: {{layout | definition}}.
58
59
  Visual scene: {{subject | clean flat illustration of the core concept}},
59
- rendered as flat illustration accents with subtle geometric decorations.
60
- Pure illustration, no text, no letters, no numerals, no captions — the text
61
- band is typeset separately. Fresh clean design, comfortable margins, no
62
- watermark, no extra UI chrome. 8K quality, crisp details, professional color
60
+ rendered as a flat illustration with subtle geometric decorations.
61
+ Illustration only. Every surface stays blank: empty screens, empty signs,
62
+ empty labels. No writing, no letters, no numerals, no captions, no logos,
63
+ no watermark, no UI chrome. Words are typeset later, outside this image.
64
+ Fresh clean design, comfortable margins, crisp details, professional color
63
65
  grading. {{content}}
@@ -4,5 +4,5 @@ description: >-
4
4
  background, clean information layout, soft accent colors, rounded card zones.
5
5
  Adapted from baoyu-xhs-images "knowledge card" style guidance (MIT © Jim Liu);
6
6
  see plugins/kk/skills/xhs-images/references/card-layouts.md.
7
- modifiers: simple clean light background, rounded rectangle card zones, soft pastel accent colors, generous whitespace, flat geometric decorations, subtle drop shadows, fresh and professional
8
- negative: text, letters, numbers, Chinese characters, captions, watermark, logo
7
+ modifiers: simple clean light background, soft pastel accent colors, generous whitespace, flat geometric decorations, subtle drop shadows, fresh and professional, unlabeled surfaces
8
+ negative: text, letters, words, numbers, Chinese characters, calligraphy, signage, captions, watermark, logo, screen glyphs, vertical script, stamps
@@ -220,6 +220,7 @@ html, body {
220
220
  justify-content: flex-start;
221
221
  overflow: hidden;
222
222
  background: ${palette.background};
223
+ border-top: 8px solid ${palette.accent};
223
224
  }
224
225
  .headline {
225
226
  font-family: 'NotoSansSC-Bold', sans-serif;
@@ -227,6 +228,8 @@ html, body {
227
228
  color: ${palette.text};
228
229
  line-height: 1.3;
229
230
  margin-bottom: ${Math.round(safeArea / 2)}px;
231
+ padding-bottom: 12px;
232
+ border-bottom: 4px solid ${palette.accent};
230
233
  word-break: break-all;
231
234
  white-space: normal;
232
235
  /* font-size is set inline with JS fit-step */
@@ -235,15 +238,27 @@ html, body {
235
238
  .points-container {
236
239
  display: flex;
237
240
  flex-direction: column;
238
- gap: ${Math.round(bodyMinPx * 0.5)}px;
241
+ gap: ${Math.round(bodyMinPx * 0.55)}px;
239
242
  }
240
243
  .point {
241
244
  font-family: 'NotoSansSC-Regular', sans-serif;
242
245
  font-weight: normal;
243
246
  color: ${palette.text};
244
- line-height: 1.5;
247
+ line-height: 1.45;
245
248
  word-break: break-all;
246
249
  white-space: normal;
250
+ padding-left: 28px;
251
+ position: relative;
252
+ }
253
+ .point::before {
254
+ content: '';
255
+ position: absolute;
256
+ left: 0;
257
+ top: 0.45em;
258
+ width: 14px;
259
+ height: 14px;
260
+ border-radius: 50%;
261
+ background: ${palette.accent};
247
262
  }
248
263
  .safe-area-sentinel {
249
264
  position: absolute;
@@ -14642,7 +14642,7 @@ var init_zod = __esm(() => {
14642
14642
  init_external();
14643
14643
  });
14644
14644
 
14645
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/errors.js
14645
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/errors.js
14646
14646
  var ErrorCode;
14647
14647
  var init_errors3 = __esm(() => {
14648
14648
  ErrorCode = {
@@ -14653,7 +14653,7 @@ var init_errors3 = __esm(() => {
14653
14653
  };
14654
14654
  });
14655
14655
 
14656
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/api-response.js
14656
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/api-response.js
14657
14657
  var API_ERROR_CODES, ERROR_CODE_TO_HTTP, CLIENT_SAFE_CODES;
14658
14658
  var init_api_response = __esm(() => {
14659
14659
  init_errors3();
@@ -14676,13 +14676,13 @@ var init_api_response = __esm(() => {
14676
14676
  CLIENT_SAFE_CODES = new Set([ErrorCode.NotFound, ErrorCode.Validation, ErrorCode.Conflict]);
14677
14677
  });
14678
14678
 
14679
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/cursor.js
14679
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/cursor.js
14680
14680
  var init_cursor = () => {};
14681
14681
 
14682
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/event-severity.js
14682
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/event-severity.js
14683
14683
  var init_event_severity = () => {};
14684
14684
 
14685
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/output.js
14685
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/output.js
14686
14686
  function processStream(name) {
14687
14687
  const proc = globalThis.process;
14688
14688
  const stream = proc?.[name];
@@ -14700,7 +14700,7 @@ function echoError(message, target = defaultStderrTarget ?? processStream("stder
14700
14700
  }
14701
14701
  var defaultStderrTarget;
14702
14702
 
14703
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.18/node_modules/@gobing-ai/ts-utils/dist/index.js
14703
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.21/node_modules/@gobing-ai/ts-utils/dist/index.js
14704
14704
  var init_dist = __esm(() => {
14705
14705
  init_api_response();
14706
14706
  init_cursor();
@@ -21698,7 +21698,7 @@ var init_dist2 = __esm(() => {
21698
21698
  $visitAsync = visit.visitAsync;
21699
21699
  });
21700
21700
 
21701
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/config.js
21701
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/config.js
21702
21702
  var configSchema;
21703
21703
  var init_config = __esm(() => {
21704
21704
  init_dist2();
@@ -21722,7 +21722,7 @@ var init_config = __esm(() => {
21722
21722
  });
21723
21723
  });
21724
21724
 
21725
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/file-system-node.js
21725
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/file-system-node.js
21726
21726
  import { appendFileSync, cpSync, createReadStream, createWriteStream, existsSync, mkdirSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "fs";
21727
21727
  import { dirname, resolve as resolvePath } from "path";
21728
21728
  function createNodeFileSystem(root, paths) {
@@ -21901,14 +21901,14 @@ var PluginManifestSchema = exports_external.looseObject({
21901
21901
  description: exports_external.string().optional(),
21902
21902
  operations: exports_external.record(exports_external.string(), PluginOperationSchema).optional()
21903
21903
  });
21904
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/index.js
21904
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/index.js
21905
21905
  init_file_system_node();
21906
21906
  init_config();
21907
21907
 
21908
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/fs.js
21908
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/fs.js
21909
21909
  init_file_system_node();
21910
21910
 
21911
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/path.js
21911
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/path.js
21912
21912
  function normalizeSeparators(path) {
21913
21913
  return path.replaceAll("\\", "/");
21914
21914
  }
@@ -21942,7 +21942,7 @@ function dirnamePath(path) {
21942
21942
  return normalized.slice(0, index);
21943
21943
  }
21944
21944
 
21945
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.18+ea28d47622d670ff/node_modules/@gobing-ai/ts-runtime/dist/fs.js
21945
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/fs.js
21946
21946
  async function ensureDirForFile(path, fs = createNodeFileSystem()) {
21947
21947
  await fs.ensureDir(dirnamePath(path));
21948
21948
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omni-voice-gen",
3
3
  "kind": "generator",
4
- "entry": "./dist/index.js",
4
+ "entry": "./bin/omni-voice-gen",
5
5
  "version": "1.0.0"
6
6
  }