@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.
- package/.claude-plugin/marketplace.json +1 -1
- package/dist/index.js +25191 -24167
- package/package.json +4 -4
- package/plugins/generations/content-gen/dist/index.js +9 -9
- package/plugins/generations/core-facts-gen/dist/index.js +12 -12
- package/plugins/generations/daily-article-gen/dist/index.js +31 -23
- package/plugins/generations/daily-article-gen/src/index.ts +39 -14
- package/plugins/generations/dailynews-gen/dist/index.js +23 -21
- package/plugins/generations/dailynews-gen/src/script-builder.ts +30 -26
- package/plugins/generations/episode-plan-gen/dist/index.js +12 -12
- package/plugins/generations/gemini-tts/dist/index.js +13 -12
- package/plugins/generations/image-gen/dist/index.js +26 -11
- package/plugins/generations/image-gen/presets/formats/xhs-card.yaml +16 -14
- package/plugins/generations/image-gen/presets/styles/xhs-knowledge.yaml +2 -2
- package/plugins/generations/image-gen/src/compose/card.ts +17 -2
- package/plugins/generations/news-report-gen/dist/index.js +12 -12
- package/plugins/generations/omni-voice-gen/plugin.json +1 -1
- package/plugins/generations/voice-gen/dist/index.js +13 -12
- package/plugins/generations/voice-gen/src/index.ts +9 -3
- package/plugins/ingestions/aihot-ingest/dist/index.js +12 -12
- package/plugins/ingestions/horizon-ingest/dist/index.js +12 -12
- package/plugins/ingestions/karakeep-local/dist/index.js +13 -13
- package/plugins/ingestions/last30days-ingest/dist/index.js +12 -12
- package/plugins/ingestions/web-search/dist/index.js +10 -10
- package/plugins/kk/decisions/extract/ai-news.yaml +6 -0
- package/plugins/kk/decisions/kk-items.yaml +69 -3
- package/plugins/kk/plugin.json +1 -1
- package/plugins/kk/scripts/daily-stages.ts +834 -87
- package/plugins/kk/scripts/daily-voice-style.zh.md +15 -10
- package/plugins/kk/scripts/kk-workflow-stages.ts +46 -3
- package/plugins/kk/skills/content-safety/SKILL.md +1 -1
- package/plugins/kk/skills/content-safety/references/platforms/apple-podcasts.md +2 -2
- package/plugins/kk/skills/content-safety/references/platforms/wechatmp.md +2 -2
- package/plugins/kk/skills/content-safety/references/platforms/xiaoyuzhou.md +4 -2
- package/plugins/kk/workflows/kk-collect.yaml +7 -9
- package/plugins/kk/workflows/kk-daily-ai-voice.yaml +32 -7
- package/plugins/kk/workflows/kk-daily-ai-voice2.yaml +169 -47
- package/plugins/kk/workflows/kk-daily-safety.yaml +9 -12
- package/plugins/publishings/emdash-pub/dist/index.js +9 -9
- package/plugins/publishings/infoq-pub/dist/index.js +22 -22
- package/plugins/publishings/infoq-pub/dist/profile-check.js +30336 -0
- package/plugins/publishings/infoq-pub/plugin.json +1 -1
- package/plugins/publishings/juejin-pub/dist/index.js +22 -22
- package/plugins/publishings/juejin-pub/dist/profile-check.js +30322 -0
- package/plugins/publishings/juejin-pub/plugin.json +1 -1
- package/plugins/publishings/medium-pub/dist/index.js +9 -9
- package/plugins/publishings/podcast-pub/dist/index.js +9 -9
- package/plugins/publishings/qiita-pub/dist/index.js +9 -9
- package/plugins/publishings/substack-pub/dist/index.js +22 -22
- package/plugins/publishings/substack-pub/dist/profile-check.js +30392 -0
- package/plugins/publishings/substack-pub/plugin.json +1 -1
- package/plugins/publishings/surfdash-pub/dist/index.js +9 -9
- package/plugins/publishings/wechatmp-pub/dist/index.js +329 -154
- package/plugins/publishings/wechatmp-pub/dist/profile-check.js +30271 -0
- package/plugins/publishings/wechatmp-pub/plugin.json +1 -1
- package/plugins/publishings/wechatmp-pub/src/enrich.ts +106 -145
- package/plugins/publishings/wechatmp-pub/src/flow.ts +283 -42
- package/plugins/publishings/wechatmp-pub/src/page.ts +20 -0
- package/plugins/publishings/x-pub/dist/index.js +22 -22
- package/plugins/publishings/x-pub/dist/profile-check.js +30328 -0
- package/plugins/publishings/x-pub/plugin.json +1 -1
- package/plugins/publishings/xhs-pub/dist/index.js +76 -27
- package/plugins/publishings/xhs-pub/dist/profile-check.js +30538 -0
- package/plugins/publishings/xhs-pub/plugin.json +1 -1
- package/plugins/publishings/xhs-pub/src/flow.ts +9 -3
- package/plugins/publishings/xhs-pub/src/index.ts +111 -5
- package/plugins/publishings/zenn-pub/dist/index.js +9 -9
- package/plugins/generations/omni-voice-gen/dist/omni-voice-gen-prr8skpb. +0 -2
- package/plugins/generations/omni-voice-gen/dist/omni-voice-gen.js +0 -6
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gobing-ai/knowledge-kit",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.35",
|
|
4
4
|
"description": "An ingest → create → publish content pipeline CLI (Bun).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -46,9 +46,9 @@
|
|
|
46
46
|
"typecheck": "tsc --noEmit"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@gobing-ai/ts-infra": "^0.5.
|
|
50
|
-
"@gobing-ai/ts-runtime": "^0.5.
|
|
51
|
-
"@gobing-ai/ts-utils": "^0.5.
|
|
49
|
+
"@gobing-ai/ts-infra": "^0.5.21",
|
|
50
|
+
"@gobing-ai/ts-runtime": "^0.5.21",
|
|
51
|
+
"@gobing-ai/ts-utils": "^0.5.21",
|
|
52
52
|
"commander": "15.0.0"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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) {
|
|
@@ -21900,7 +21900,7 @@ var PluginManifestSchema = exports_external.looseObject({
|
|
|
21900
21900
|
description: exports_external.string().optional(),
|
|
21901
21901
|
operations: exports_external.record(exports_external.string(), PluginOperationSchema).optional()
|
|
21902
21902
|
});
|
|
21903
|
-
// ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.
|
|
21903
|
+
// ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.21+44edd5c4d6372504/node_modules/@gobing-ai/ts-runtime/dist/index.js
|
|
21904
21904
|
init_file_system_node();
|
|
21905
21905
|
init_config();
|
|
21906
21906
|
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
}
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
}
|
|
@@ -22037,13 +22037,13 @@ ${metaLine ? `${metaLine}
|
|
|
22037
22037
|
` : ""}${stripScaffold(doc2.body ?? "").trim()}`;
|
|
22038
22038
|
}
|
|
22039
22039
|
function episodeTitle(date6) {
|
|
22040
|
-
return
|
|
22040
|
+
return `\u6BCF\u65E5AI\u4E71\u7096 \xB7 ${date6}`;
|
|
22041
22041
|
}
|
|
22042
22042
|
function renderDailyArticle(docs, date6) {
|
|
22043
22043
|
const items = docs.map(renderDoc).join(`
|
|
22044
22044
|
|
|
22045
22045
|
`);
|
|
22046
|
-
const intro = docs.length > 0 ? `\
|
|
22046
|
+
const intro = docs.length > 0 ? `\u8FD9\u91CC\u662F\u7531Robin\u4E3A\u4F60\u5E26\u6765\u7684\u54B8\u8BDD\u54B8\u8BF4\u4E4B\u6BCF\u65E5AI\u4E71\u7096\u3002\u672C\u671F\u5171 ${docs.length} \u6761\u5185\u5BB9\uFF0C\u5747\u9644\u53EF\u70B9\u51FB\u6765\u6E90\u94FE\u63A5\u3002` : "\u8FD9\u91CC\u662F\u7531Robin\u4E3A\u4F60\u5E26\u6765\u7684\u54B8\u8BDD\u54B8\u8BF4\u4E4B\u6BCF\u65E5AI\u4E71\u7096\u3002\u672C\u671F\u6CA1\u6709\u8DB3\u591F\u624E\u5B9E\u7684\u53EF\u804A\u5185\u5BB9\u3002";
|
|
22047
22047
|
return `# ${episodeTitle(date6)}
|
|
22048
22048
|
|
|
22049
22049
|
${intro}
|
|
@@ -22062,6 +22062,10 @@ function tagsFor(docs) {
|
|
|
22062
22062
|
var LEADING_H1_RE = /^#(?!#)\s*[^\n]+\n+/.source;
|
|
22063
22063
|
var NOTE_EXCLUDED_RE = /\u672A\u5199\u5165[\uFF1A:](.*)/g;
|
|
22064
22064
|
var HEX_ID_RE = /(?:[a-zA-Z0-9_-]+:)?[0-9a-f]{16,64}/g;
|
|
22065
|
+
var BOUNDARY_NOTE_RE = /^>[^\n]*(?:\u9009\u9898\u8FB9\u754C|\u672A\u5199\u5165)[^\n]*\n?/gm;
|
|
22066
|
+
function stripBoundaryNote(body) {
|
|
22067
|
+
return body.replace(BOUNDARY_NOTE_RE, "");
|
|
22068
|
+
}
|
|
22065
22069
|
function excludedIdsFromNote(body) {
|
|
22066
22070
|
const ids = new Set;
|
|
22067
22071
|
if (!body)
|
|
@@ -22080,24 +22084,27 @@ function docsToContent(docs, date6, bodyOverride) {
|
|
|
22080
22084
|
const title = episodeTitle(date6);
|
|
22081
22085
|
let body = renderDailyArticle(docs, date6);
|
|
22082
22086
|
if (bodyOverride) {
|
|
22083
|
-
const
|
|
22087
|
+
const cleaned = stripBoundaryNote(stripScaffold(bodyOverride.trim()).trim().replace(new RegExp(LEADING_H1_RE), "")).trim();
|
|
22084
22088
|
body = `# ${title}
|
|
22085
22089
|
|
|
22086
|
-
${
|
|
22090
|
+
${cleaned}
|
|
22087
22091
|
`;
|
|
22092
|
+
} else {
|
|
22093
|
+
body = stripBoundaryNote(body);
|
|
22088
22094
|
}
|
|
22089
|
-
|
|
22090
|
-
|
|
22091
|
-
---
|
|
22092
|
-
|
|
22093
|
-
*\u6587\u5B57\u7531 AI \u8F85\u52A9\u6574\u7406\uFF0C\u97F3\u9891\u4E3A AI \u5408\u6210\u914D\u97F3\u3002*
|
|
22094
|
-
`;
|
|
22095
|
+
const excludedIds = [...excludedIdsFromNote(bodyOverride)];
|
|
22095
22096
|
return ContentSchema.parse({
|
|
22096
22097
|
title,
|
|
22097
22098
|
body,
|
|
22098
22099
|
format: "markdown",
|
|
22099
22100
|
references: docs.filter((d) => d.sourceUri).map((d) => ({ url: d.sourceUri, title: d.title, cite: d.id })),
|
|
22100
|
-
metadata: {
|
|
22101
|
+
metadata: {
|
|
22102
|
+
generator: "kk:daily-article",
|
|
22103
|
+
date: date6,
|
|
22104
|
+
doc_count: docs.length,
|
|
22105
|
+
tags: tagsFor(docs),
|
|
22106
|
+
...excludedIds.length > 0 ? { excludedIds } : {}
|
|
22107
|
+
}
|
|
22101
22108
|
});
|
|
22102
22109
|
}
|
|
22103
22110
|
async function processGeneratorIO(inputPath, outputPath) {
|
|
@@ -22146,6 +22153,7 @@ if (import.meta.main) {
|
|
|
22146
22153
|
}
|
|
22147
22154
|
export {
|
|
22148
22155
|
stripScaffold,
|
|
22156
|
+
stripBoundaryNote,
|
|
22149
22157
|
renderDailyArticle,
|
|
22150
22158
|
processGeneratorIO,
|
|
22151
22159
|
main2 as main,
|
|
@@ -103,14 +103,13 @@ function renderDoc(doc: Doc, index: number): string {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
/**
|
|
106
|
-
* Episode title for the
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
* derive one identical title.
|
|
106
|
+
* Episode title for the 「每日AI乱炖」 column of 「咸话咸说」: fixed `每日AI乱炖 · YYYY-MM-DD`
|
|
107
|
+
* (2026-10-08 operator rename, keeping the 2026-10-02 date-only pattern). The date identifies
|
|
108
|
+
* the episode; the day's stories live in the show notes, cards and post body. Pure function so
|
|
109
|
+
* the agent-written and template article paths, ID3, RSS and show notes all derive one title.
|
|
111
110
|
*/
|
|
112
111
|
export function episodeTitle(date: string): string {
|
|
113
|
-
return
|
|
112
|
+
return `每日AI乱炖 · ${date}`;
|
|
114
113
|
}
|
|
115
114
|
|
|
116
115
|
/** Render the article markdown for a merged Doc[] (pure — exported for tests). */
|
|
@@ -118,8 +117,8 @@ export function renderDailyArticle(docs: Doc[], date: string): string {
|
|
|
118
117
|
const items = docs.map(renderDoc).join('\n\n');
|
|
119
118
|
const intro =
|
|
120
119
|
docs.length > 0
|
|
121
|
-
?
|
|
122
|
-
: '
|
|
120
|
+
? `这里是由Robin为你带来的咸话咸说之每日AI乱炖。本期共 ${docs.length} 条内容,均附可点击来源链接。`
|
|
121
|
+
: '这里是由Robin为你带来的咸话咸说之每日AI乱炖。本期没有足够扎实的可聊内容。';
|
|
123
122
|
return `# ${episodeTitle(date)}\n\n${intro}\n\n${items}\n`;
|
|
124
123
|
}
|
|
125
124
|
|
|
@@ -142,6 +141,20 @@ const LEADING_H1_RE = /^#(?!#)\s*[^\n]+\n+/.source;
|
|
|
142
141
|
const NOTE_EXCLUDED_RE = /未写入[::](.*)/g;
|
|
143
142
|
const HEX_ID_RE = /(?:[a-zA-Z0-9_-]+:)?[0-9a-f]{16,64}/g;
|
|
144
143
|
|
|
144
|
+
/**
|
|
145
|
+
* The 选题边界 note is pipeline bookkeeping: it names dropped doc ids and the rule that dropped them.
|
|
146
|
+
* It is the machine-readable exclusion signal (`excludedIdsFromNote`), so it stays in the agent's body
|
|
147
|
+
* file — but it must never reach a published body, where it printed an internal doc id and pipeline
|
|
148
|
+
* vocabulary to readers (operator report 2026-10-10). Matches only blockquote lines, which the article
|
|
149
|
+
* body reserves for exactly this note, so ordinary prose is untouched.
|
|
150
|
+
*/
|
|
151
|
+
const BOUNDARY_NOTE_RE = /^>[^\n]*(?:选题边界|未写入)[^\n]*\n?/gm;
|
|
152
|
+
|
|
153
|
+
/** Strip the internal boundary note from a body destined for a customer-visible surface. */
|
|
154
|
+
export function stripBoundaryNote(body: string): string {
|
|
155
|
+
return body.replace(BOUNDARY_NOTE_RE, '');
|
|
156
|
+
}
|
|
157
|
+
|
|
145
158
|
/** Parse the boundary-note ids out of an article body so references/metadata never cite excluded docs (judge finding 2026-10-02). */
|
|
146
159
|
export function excludedIdsFromNote(body: string | undefined): Set<string> {
|
|
147
160
|
const ids = new Set<string>();
|
|
@@ -163,18 +176,30 @@ export function docsToContent(docs: Doc[], date: string, bodyOverride?: string):
|
|
|
163
176
|
if (bodyOverride) {
|
|
164
177
|
// The canonical episode title is computed from the lead item; a leading H1 the agent may
|
|
165
178
|
// still have written is replaced (not duplicated) so body and metadata agree on every path.
|
|
166
|
-
|
|
167
|
-
|
|
179
|
+
// The boundary note is stripped here, not dropped upstream: the agent's body file keeps it as
|
|
180
|
+
// the exclusion signal, this Content is what readers see.
|
|
181
|
+
const cleaned = stripBoundaryNote(
|
|
182
|
+
stripScaffold(bodyOverride.trim()).trim().replace(new RegExp(LEADING_H1_RE), ''),
|
|
183
|
+
).trim();
|
|
184
|
+
body = `# ${title}\n\n${cleaned}\n`;
|
|
185
|
+
} else {
|
|
186
|
+
body = stripBoundaryNote(body);
|
|
168
187
|
}
|
|
169
|
-
//
|
|
170
|
-
//
|
|
171
|
-
|
|
188
|
+
// The ids the note named become metadata, so consumers that must filter excluded docs (show-notes
|
|
189
|
+
// plan copies) read a field instead of re-parsing a note that no longer exists.
|
|
190
|
+
const excludedIds = [...excludedIdsFromNote(bodyOverride)];
|
|
172
191
|
return ContentSchema.parse({
|
|
173
192
|
title,
|
|
174
193
|
body,
|
|
175
194
|
format: 'markdown',
|
|
176
195
|
references: docs.filter((d) => d.sourceUri).map((d) => ({ url: d.sourceUri, title: d.title, cite: d.id })),
|
|
177
|
-
metadata: {
|
|
196
|
+
metadata: {
|
|
197
|
+
generator: 'kk:daily-article',
|
|
198
|
+
date,
|
|
199
|
+
doc_count: docs.length,
|
|
200
|
+
tags: tagsFor(docs),
|
|
201
|
+
...(excludedIds.length > 0 ? { excludedIds } : {}),
|
|
202
|
+
},
|
|
178
203
|
});
|
|
179
204
|
}
|
|
180
205
|
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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,7 +21901,7 @@ 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.
|
|
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
|
|
|
@@ -22116,27 +22116,33 @@ function buildNewsVoiceScript(docs, options) {
|
|
|
22116
22116
|
const defaultEffectPreset = options?.effectPreset;
|
|
22117
22117
|
const broadcastDate = options?.date ?? new Date;
|
|
22118
22118
|
const dateStr = formatBroadcastDate(broadcastDate, language);
|
|
22119
|
+
const episodeDate = `${broadcastDate.getFullYear()}-${String(broadcastDate.getMonth() + 1).padStart(2, "0")}-${String(broadcastDate.getDate()).padStart(2, "0")}`;
|
|
22120
|
+
const showName = "\u54B8\u8BDD\u54B8\u8BF4\u4E4B\u6BCF\u65E5AI\u4E71\u7096";
|
|
22121
|
+
let hostName = options?.speakers?.host?.name || voiceProfile.replace(/[-_]?(news|voice|bot|profile)$/i, "") || voiceProfile;
|
|
22122
|
+
if (hostName.length > 0) {
|
|
22123
|
+
hostName = hostName.charAt(0).toUpperCase() + hostName.slice(1);
|
|
22124
|
+
}
|
|
22119
22125
|
if (docs.length === 0) {
|
|
22120
|
-
const title2 = options?.title || (isZh ? "
|
|
22126
|
+
const title2 = options?.title || (isZh ? "\u6BCF\u65E5AI\u4E71\u7096\uFF08\u6682\u65E0\u66F4\u65B0\uFF09" : "\u6BCF\u65E5AI\u4E71\u7096 (No Updates)");
|
|
22121
22127
|
const segments2 = isZh ? [
|
|
22122
22128
|
{
|
|
22123
|
-
text: `\u5927\u5BB6\u597D\uFF0C\u4ECA\u5929\u662F${dateStr}\u3002\
|
|
22129
|
+
text: `\u5927\u5BB6\u597D\uFF0C\u4ECA\u5929\u662F${dateStr}\u3002\u8FD9\u91CC\u662F\u7531${hostName}\u4E3A\u4F60\u5E26\u6765\u7684${showName}\u3002\u4ECA\u5929\u6CA1\u6709\u8DB3\u591F\u624E\u5B9E\u7684\u53EF\u804A\u5185\u5BB9\u3002`,
|
|
22124
22130
|
gap_ms: 400,
|
|
22125
22131
|
emotion: "calm"
|
|
22126
22132
|
},
|
|
22127
22133
|
{
|
|
22128
|
-
text: `\u611F\u8C22\u60A8\u7684\u6536\u542C\uFF0C\u6211\u662F${
|
|
22134
|
+
text: `\u611F\u8C22\u60A8\u7684\u6536\u542C\uFF0C\u6211\u662F${hostName}\uFF0C\u6211\u4EEC\u4E0B\u671F\u8282\u76EE\u518D\u89C1\u3002`,
|
|
22129
22135
|
gap_ms: 200,
|
|
22130
22136
|
emotion: "warm"
|
|
22131
22137
|
}
|
|
22132
22138
|
] : [
|
|
22133
22139
|
{
|
|
22134
|
-
text: `Hello
|
|
22140
|
+
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.`,
|
|
22135
22141
|
gap_ms: 400,
|
|
22136
22142
|
emotion: "calm"
|
|
22137
22143
|
},
|
|
22138
22144
|
{
|
|
22139
|
-
text: `Thank you for listening. This is ${
|
|
22145
|
+
text: `Thank you for listening. This is ${hostName}, and have a great day.`,
|
|
22140
22146
|
gap_ms: 200,
|
|
22141
22147
|
emotion: "warm"
|
|
22142
22148
|
}
|
|
@@ -22152,17 +22158,13 @@ function buildNewsVoiceScript(docs, options) {
|
|
|
22152
22158
|
segments: segments2
|
|
22153
22159
|
});
|
|
22154
22160
|
}
|
|
22155
|
-
const title = options?.title ||
|
|
22161
|
+
const title = options?.title || `\u6BCF\u65E5AI\u4E71\u7096 \xB7 ${episodeDate}`;
|
|
22156
22162
|
const segments = [];
|
|
22157
|
-
let hostName = options?.speakers?.host?.name || voiceProfile.replace(/[-_]?(news|voice|bot|profile)$/i, "") || voiceProfile;
|
|
22158
|
-
if (hostName.length > 0) {
|
|
22159
|
-
hostName = hostName.charAt(0).toUpperCase() + hostName.slice(1);
|
|
22160
|
-
}
|
|
22161
22163
|
const scriptPlan = isZh ? options?.scriptPlan : undefined;
|
|
22162
22164
|
const planItems = new Map((scriptPlan?.items ?? []).map((item) => [item.id, item]));
|
|
22163
22165
|
const countText = isZh ? `${formatChineseCount(docs.length)}\u6761` : `${docs.length}`;
|
|
22164
22166
|
const titlesSummary = docs.slice(0, 3).map((d) => (d.title ?? "").trim()).filter(Boolean).join("\u3001");
|
|
22165
|
-
const introText = isZh ? scriptPlan ? `\u5927\u5BB6\u597D\uFF0C\u4ECA\u5929\u662F${dateStr}\
|
|
22167
|
+
const introText = isZh ? scriptPlan ? `\u5927\u5BB6\u597D\uFF0C\u4ECA\u5929\u662F${dateStr}\u3002\u8FD9\u91CC\u662F\u7531${hostName}\u4E3A\u4F60\u5E26\u6765\u7684${showName}\u3002${scriptPlan.intro}` : `\u5927\u5BB6\u597D\uFF0C\u4ECA\u5929\u662F${dateStr}\u3002\u8FD9\u91CC\u662F\u7531${hostName}\u4E3A\u4F60\u5E26\u6765\u7684${showName}\u3002\u4ECA\u5929\u6211\u4ECE AI \u5DE5\u5177\u3001\u8BBA\u6587\u548C\u5B9E\u8DF5\u4E2D\u6574\u7406\u4E86${countText}\u503C\u5F97\u804A\u7684\u5185\u5BB9${titlesSummary ? `\uFF0C\u5305\u62EC${titlesSummary}` : ""}\uFF0C\u54B1\u4EEC\u4E00\u6761\u6761\u6765\u804A\u3002` : `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.`;
|
|
22166
22168
|
segments.push({
|
|
22167
22169
|
text: normalizeBroadcastText(introText, isZh),
|
|
22168
22170
|
gap_ms: 700,
|
|
@@ -22197,7 +22199,7 @@ function buildNewsVoiceScript(docs, options) {
|
|
|
22197
22199
|
});
|
|
22198
22200
|
}
|
|
22199
22201
|
});
|
|
22200
|
-
const outroText = isZh ? scriptPlan ? `${scriptPlan.outro}\
|
|
22202
|
+
const outroText = isZh ? scriptPlan ? `${scriptPlan.outro}\u611F\u8C22\u60A8\u7684\u6536\u542C\uFF0C\u6211\u662F${hostName}\uFF0C\u795D\u60A8\u62E5\u6709\u5145\u5B9E\u9AD8\u6548\u7684\u4E00\u5929\uFF0C\u6211\u4EEC\u4E0B\u671F\u8282\u76EE\u4E0D\u89C1\u4E0D\u6563\uFF01` : `\u597D\u4E86\uFF0C\u672C\u671F\u6BCF\u65E5AI\u4E71\u7096\u5C31\u804A\u5230\u8FD9\u91CC\u3002\u5E0C\u671B\u4ECA\u5929\u8FD9\u4E9B\u5DE5\u5177\u3001\u8BBA\u6587\u548C\u5B9E\u8DF5\u7684\u7ECF\u9A8C\u5BF9\u60A8\u6709\u542F\u53D1\u3002\u611F\u8C22\u60A8\u7684\u6536\u542C\uFF0C\u6211\u662F${hostName}\uFF0C\u795D\u60A8\u62E5\u6709\u5145\u5B9E\u9AD8\u6548\u7684\u4E00\u5929\uFF0C\u6211\u4EEC\u4E0B\u671F\u8282\u76EE\u4E0D\u89C1\u4E0D\u6563\uFF01` : `That wraps up this episode of \u6BCF\u65E5AI\u4E71\u7096. I hope today's takeaways were useful. Thank you for listening. This is ${hostName}, wishing you a productive and wonderful day. Until next time!`;
|
|
22201
22203
|
segments.push({
|
|
22202
22204
|
text: normalizeBroadcastText(outroText, isZh),
|
|
22203
22205
|
gap_ms: 300,
|