@gobing-ai/knowledge-kit 0.0.22 → 0.0.24
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 +137 -59
- package/package.json +4 -4
- package/plugins/generations/content-gen/dist/index.js +97 -45
- package/plugins/generations/core-facts-gen/dist/index.js +106 -57
- package/plugins/generations/daily-article-gen/dist/index.js +105 -56
- package/plugins/generations/dailynews-gen/dist/index.js +235 -57
- package/plugins/generations/dailynews-gen/src/index.ts +67 -2
- package/plugins/generations/dailynews-gen/src/script-builder.ts +36 -15
- package/plugins/generations/dailynews-gen/src/script-plan.ts +142 -0
- package/plugins/generations/episode-plan-gen/dist/index.js +115 -66
- package/plugins/generations/gemini-tts/README.md +125 -0
- package/plugins/generations/gemini-tts/dist/index.js +23348 -0
- package/plugins/generations/gemini-tts/package.json +16 -0
- package/plugins/generations/gemini-tts/plugin.json +6 -0
- package/plugins/generations/gemini-tts/profiles.json +3 -0
- package/plugins/generations/gemini-tts/src/gemini-client.ts +220 -0
- package/plugins/generations/gemini-tts/src/index.ts +33 -0
- package/plugins/generations/gemini-tts/src/voice-create.ts +180 -0
- package/plugins/generations/gemini-tts/tsconfig.json +8 -0
- package/plugins/generations/image-gen/dist/index.js +338 -117
- package/plugins/generations/image-gen/presets/formats/daily-news-cover.yaml +19 -0
- package/plugins/generations/image-gen/presets/formats/xhs-card.yaml +55 -0
- package/plugins/generations/image-gen/presets/styles/daily-news.yaml +9 -0
- package/plugins/generations/image-gen/presets/styles/xhs-knowledge.yaml +7 -0
- package/plugins/generations/image-gen/src/index.ts +148 -14
- package/plugins/generations/image-gen/src/job.ts +30 -0
- package/plugins/generations/image-gen/src/providers/errors.ts +91 -0
- package/plugins/generations/image-gen/src/providers/types.ts +79 -0
- package/plugins/generations/news-report-gen/dist/index.js +136 -55
- package/plugins/generations/news-report-gen/src/index.ts +57 -1
- package/plugins/generations/voice-gen/dist/index.js +121 -69
- package/plugins/generations/voice-gen/package.json +3 -0
- package/plugins/generations/voice-gen/src/index.ts +2 -1
- package/plugins/generations/voice-gen/src/voicebox-client.ts +2 -1
- package/plugins/ingestions/aihot-ingest/dist/index.js +103 -53
- package/plugins/ingestions/horizon-ingest/dist/index.js +102 -53
- package/plugins/ingestions/karakeep-local/dist/index.js +273 -224
- package/plugins/ingestions/last30days-ingest/dist/index.js +97 -48
- package/plugins/ingestions/web-search/dist/index.js +121 -72
- package/plugins/kk/config.example.yaml +13 -0
- package/plugins/kk/plugin.json +1 -1
- package/plugins/kk/scripts/daily-voice-style.zh.md +52 -0
- package/plugins/kk/scripts/kk-workflow-stages.ts +438 -17
- package/plugins/kk/skills/publish/SKILL.md +24 -1
- package/plugins/kk/skills/xhs-images/SKILL.md +89 -0
- package/plugins/kk/skills/xhs-images/references/card-layouts.md +35 -0
- package/plugins/kk/workflows/kk-daily-ai-voice.yaml +164 -13
- package/plugins/publishings/emdash-pub/dist/index.js +94 -45
- package/plugins/publishings/infoq-pub/dist/index.js +94 -45
- package/plugins/publishings/juejin-pub/dist/index.js +94 -45
- package/plugins/publishings/medium-pub/dist/index.js +94 -45
- package/plugins/publishings/podcast-pub/dist/index.js +115 -55
- package/plugins/publishings/podcast-pub/src/map.ts +30 -10
- package/plugins/publishings/podcast-pub/src/show-notes.ts +6 -1
- package/plugins/publishings/qiita-pub/dist/index.js +94 -45
- package/plugins/publishings/substack-pub/dist/index.js +94 -45
- package/plugins/publishings/surfdash-pub/dist/index.js +99 -63
- package/plugins/publishings/surfdash-pub/src/index.ts +10 -1
- package/plugins/publishings/wechatmp-pub/dist/index.js +94 -45
- package/plugins/publishings/x-pub/dist/index.js +94 -45
- package/plugins/publishings/xhs-pub/dist/index.js +8908 -229
- package/plugins/publishings/xhs-pub/package.json +1 -0
- package/plugins/publishings/xhs-pub/plugin.json +1 -1
- package/plugins/publishings/xhs-pub/src/automation-guard.ts +128 -0
- package/plugins/publishings/xhs-pub/src/index.ts +753 -24
- package/plugins/publishings/xhs-pub/src/profile-check.ts +133 -0
- package/plugins/publishings/zenn-pub/dist/index.js +94 -45
- package/plugins/sp/lib/env.ts +46 -0
- package/plugins/sp/lib/inline-run.generated.mjs +1489 -0
- package/plugins/sp/scripts/feature-verification-steps.ts +275 -0
- package/plugins/sp/scripts/inline-run-setup.ts +571 -47
- package/plugins/sp/scripts/wrapup-drift-probe.mjs +190 -0
- package/plugins/sp/scripts/wrapup-drift-probe.ts +258 -0
- package/plugins/sp/scripts/wrapup-steps.mjs +77 -6
- package/plugins/sp/scripts/wrapup-steps.ts +91 -5
|
@@ -14642,6 +14642,72 @@ var init_zod = __esm(() => {
|
|
|
14642
14642
|
init_external();
|
|
14643
14643
|
});
|
|
14644
14644
|
|
|
14645
|
+
// ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.11/node_modules/@gobing-ai/ts-utils/dist/errors.js
|
|
14646
|
+
var ErrorCode;
|
|
14647
|
+
var init_errors3 = __esm(() => {
|
|
14648
|
+
ErrorCode = {
|
|
14649
|
+
NotFound: "NOT_FOUND",
|
|
14650
|
+
Validation: "VALIDATION",
|
|
14651
|
+
Conflict: "CONFLICT",
|
|
14652
|
+
Internal: "INTERNAL"
|
|
14653
|
+
};
|
|
14654
|
+
});
|
|
14655
|
+
|
|
14656
|
+
// ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.11/node_modules/@gobing-ai/ts-utils/dist/api-response.js
|
|
14657
|
+
var API_ERROR_CODES, ERROR_CODE_TO_HTTP, CLIENT_SAFE_CODES;
|
|
14658
|
+
var init_api_response = __esm(() => {
|
|
14659
|
+
init_errors3();
|
|
14660
|
+
API_ERROR_CODES = {
|
|
14661
|
+
SUCCESS: 0,
|
|
14662
|
+
NOT_FOUND: 404,
|
|
14663
|
+
VALIDATION_ERROR: 422,
|
|
14664
|
+
BAD_REQUEST: 400,
|
|
14665
|
+
UNAUTHORIZED: 401,
|
|
14666
|
+
FORBIDDEN: 403,
|
|
14667
|
+
CONFLICT: 409,
|
|
14668
|
+
INTERNAL_ERROR: 500
|
|
14669
|
+
};
|
|
14670
|
+
ERROR_CODE_TO_HTTP = {
|
|
14671
|
+
[ErrorCode.NotFound]: API_ERROR_CODES.NOT_FOUND,
|
|
14672
|
+
[ErrorCode.Validation]: API_ERROR_CODES.VALIDATION_ERROR,
|
|
14673
|
+
[ErrorCode.Conflict]: API_ERROR_CODES.CONFLICT,
|
|
14674
|
+
[ErrorCode.Internal]: API_ERROR_CODES.INTERNAL_ERROR
|
|
14675
|
+
};
|
|
14676
|
+
CLIENT_SAFE_CODES = new Set([ErrorCode.NotFound, ErrorCode.Validation, ErrorCode.Conflict]);
|
|
14677
|
+
});
|
|
14678
|
+
|
|
14679
|
+
// ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.11/node_modules/@gobing-ai/ts-utils/dist/cursor.js
|
|
14680
|
+
var init_cursor = () => {};
|
|
14681
|
+
|
|
14682
|
+
// ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.11/node_modules/@gobing-ai/ts-utils/dist/event-severity.js
|
|
14683
|
+
var init_event_severity = () => {};
|
|
14684
|
+
|
|
14685
|
+
// ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.11/node_modules/@gobing-ai/ts-utils/dist/output.js
|
|
14686
|
+
function processStream(name) {
|
|
14687
|
+
const proc = globalThis.process;
|
|
14688
|
+
const stream = proc?.[name];
|
|
14689
|
+
if (stream === undefined) {
|
|
14690
|
+
throw new Error(`No ${name} target available: set one via setDefaultOutputTargets or pass an explicit target`);
|
|
14691
|
+
}
|
|
14692
|
+
return stream;
|
|
14693
|
+
}
|
|
14694
|
+
function writeLine(message, target) {
|
|
14695
|
+
target.write(`${message}
|
|
14696
|
+
`);
|
|
14697
|
+
}
|
|
14698
|
+
function echoError(message, target = defaultStderrTarget ?? processStream("stderr")) {
|
|
14699
|
+
writeLine(message, target);
|
|
14700
|
+
}
|
|
14701
|
+
var defaultStderrTarget;
|
|
14702
|
+
|
|
14703
|
+
// ../../node_modules/.bun/@gobing-ai+ts-utils@0.5.11/node_modules/@gobing-ai/ts-utils/dist/index.js
|
|
14704
|
+
var init_dist = __esm(() => {
|
|
14705
|
+
init_api_response();
|
|
14706
|
+
init_cursor();
|
|
14707
|
+
init_errors3();
|
|
14708
|
+
init_event_severity();
|
|
14709
|
+
});
|
|
14710
|
+
|
|
14645
14711
|
// ../../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/nodes/identity.js
|
|
14646
14712
|
var require_identity = __commonJS((exports) => {
|
|
14647
14713
|
var ALIAS = Symbol.for("yaml.alias");
|
|
@@ -17546,15 +17612,15 @@ var require_timestamp = __commonJS((exports) => {
|
|
|
17546
17612
|
throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");
|
|
17547
17613
|
const [, year, month, day, hour, minute, second] = match.map(Number);
|
|
17548
17614
|
const millisec = match[7] ? Number((match[7] + "00").substr(1, 3)) : 0;
|
|
17549
|
-
let
|
|
17615
|
+
let date6 = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);
|
|
17550
17616
|
const tz = match[8];
|
|
17551
17617
|
if (tz && tz !== "Z") {
|
|
17552
17618
|
let d = parseSexagesimal(tz, false);
|
|
17553
17619
|
if (Math.abs(d) < 30)
|
|
17554
17620
|
d *= 60;
|
|
17555
|
-
|
|
17621
|
+
date6 -= 60000 * d;
|
|
17556
17622
|
}
|
|
17557
|
-
return new Date(
|
|
17623
|
+
return new Date(date6);
|
|
17558
17624
|
},
|
|
17559
17625
|
stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\.000Z$/, "") ?? ""
|
|
17560
17626
|
};
|
|
@@ -19414,7 +19480,7 @@ var require_composer = __commonJS((exports) => {
|
|
|
19414
19480
|
var node_process = __require("process");
|
|
19415
19481
|
var directives = require_directives();
|
|
19416
19482
|
var Document = require_Document();
|
|
19417
|
-
var
|
|
19483
|
+
var errors4 = require_errors();
|
|
19418
19484
|
var identity = require_identity();
|
|
19419
19485
|
var composeDoc = require_compose_doc();
|
|
19420
19486
|
var resolveEnd = require_resolve_end();
|
|
@@ -19465,9 +19531,9 @@ var require_composer = __commonJS((exports) => {
|
|
|
19465
19531
|
this.onError = (source, code, message, warning) => {
|
|
19466
19532
|
const pos = getErrorPos(source);
|
|
19467
19533
|
if (warning)
|
|
19468
|
-
this.warnings.push(new
|
|
19534
|
+
this.warnings.push(new errors4.YAMLWarning(pos, code, message));
|
|
19469
19535
|
else
|
|
19470
|
-
this.errors.push(new
|
|
19536
|
+
this.errors.push(new errors4.YAMLParseError(pos, code, message));
|
|
19471
19537
|
};
|
|
19472
19538
|
this.directives = new directives.Directives({ version: options.version || "1.2" });
|
|
19473
19539
|
this.options = options;
|
|
@@ -19553,7 +19619,7 @@ ${cb}` : comment;
|
|
|
19553
19619
|
break;
|
|
19554
19620
|
case "error": {
|
|
19555
19621
|
const msg = token.source ? `${token.message}: ${JSON.stringify(token.source)}` : token.message;
|
|
19556
|
-
const error51 = new
|
|
19622
|
+
const error51 = new errors4.YAMLParseError(getErrorPos(token), "UNEXPECTED_TOKEN", msg);
|
|
19557
19623
|
if (this.atDirectives || !this.doc)
|
|
19558
19624
|
this.errors.push(error51);
|
|
19559
19625
|
else
|
|
@@ -19563,7 +19629,7 @@ ${cb}` : comment;
|
|
|
19563
19629
|
case "doc-end": {
|
|
19564
19630
|
if (!this.doc) {
|
|
19565
19631
|
const msg = "Unexpected doc-end without preceding document";
|
|
19566
|
-
this.errors.push(new
|
|
19632
|
+
this.errors.push(new errors4.YAMLParseError(getErrorPos(token), "UNEXPECTED_TOKEN", msg));
|
|
19567
19633
|
break;
|
|
19568
19634
|
}
|
|
19569
19635
|
this.doc.directives.docEnd = true;
|
|
@@ -19578,7 +19644,7 @@ ${end.comment}` : end.comment;
|
|
|
19578
19644
|
break;
|
|
19579
19645
|
}
|
|
19580
19646
|
default:
|
|
19581
|
-
this.errors.push(new
|
|
19647
|
+
this.errors.push(new errors4.YAMLParseError(getErrorPos(token), "UNEXPECTED_TOKEN", `Unsupported token ${token.type}`));
|
|
19582
19648
|
}
|
|
19583
19649
|
}
|
|
19584
19650
|
*end(forceDoc = false, endOffset = -1) {
|
|
@@ -19604,7 +19670,7 @@ ${end.comment}` : end.comment;
|
|
|
19604
19670
|
var require_cst_scalar = __commonJS((exports) => {
|
|
19605
19671
|
var resolveBlockScalar = require_resolve_block_scalar();
|
|
19606
19672
|
var resolveFlowScalar = require_resolve_flow_scalar();
|
|
19607
|
-
var
|
|
19673
|
+
var errors4 = require_errors();
|
|
19608
19674
|
var stringifyString = require_stringifyString();
|
|
19609
19675
|
function resolveAsScalar(token, strict = true, onError) {
|
|
19610
19676
|
if (token) {
|
|
@@ -19613,7 +19679,7 @@ var require_cst_scalar = __commonJS((exports) => {
|
|
|
19613
19679
|
if (onError)
|
|
19614
19680
|
onError(offset, code, message);
|
|
19615
19681
|
else
|
|
19616
|
-
throw new
|
|
19682
|
+
throw new errors4.YAMLParseError([offset, offset + 1], code, message);
|
|
19617
19683
|
};
|
|
19618
19684
|
switch (token.type) {
|
|
19619
19685
|
case "scalar":
|
|
@@ -21493,7 +21559,7 @@ var require_parser = __commonJS((exports) => {
|
|
|
21493
21559
|
var require_public_api = __commonJS((exports) => {
|
|
21494
21560
|
var composer = require_composer();
|
|
21495
21561
|
var Document = require_Document();
|
|
21496
|
-
var
|
|
21562
|
+
var errors4 = require_errors();
|
|
21497
21563
|
var log = require_log();
|
|
21498
21564
|
var identity = require_identity();
|
|
21499
21565
|
var lineCounter = require_line_counter();
|
|
@@ -21510,8 +21576,8 @@ var require_public_api = __commonJS((exports) => {
|
|
|
21510
21576
|
const docs = Array.from(composer$1.compose(parser$1.parse(source)));
|
|
21511
21577
|
if (prettyErrors && lineCounter2)
|
|
21512
21578
|
for (const doc2 of docs) {
|
|
21513
|
-
doc2.errors.forEach(
|
|
21514
|
-
doc2.warnings.forEach(
|
|
21579
|
+
doc2.errors.forEach(errors4.prettifyError(source, lineCounter2));
|
|
21580
|
+
doc2.warnings.forEach(errors4.prettifyError(source, lineCounter2));
|
|
21515
21581
|
}
|
|
21516
21582
|
if (docs.length > 0)
|
|
21517
21583
|
return docs;
|
|
@@ -21526,13 +21592,13 @@ var require_public_api = __commonJS((exports) => {
|
|
|
21526
21592
|
if (!doc2)
|
|
21527
21593
|
doc2 = _doc;
|
|
21528
21594
|
else if (doc2.options.logLevel !== "silent") {
|
|
21529
|
-
doc2.errors.push(new
|
|
21595
|
+
doc2.errors.push(new errors4.YAMLParseError(_doc.range.slice(0, 2), "MULTIPLE_DOCS", "Source contains multiple documents; please use YAML.parseAllDocuments()"));
|
|
21530
21596
|
break;
|
|
21531
21597
|
}
|
|
21532
21598
|
}
|
|
21533
21599
|
if (prettyErrors && lineCounter2) {
|
|
21534
|
-
doc2.errors.forEach(
|
|
21535
|
-
doc2.warnings.forEach(
|
|
21600
|
+
doc2.errors.forEach(errors4.prettifyError(source, lineCounter2));
|
|
21601
|
+
doc2.warnings.forEach(errors4.prettifyError(source, lineCounter2));
|
|
21536
21602
|
}
|
|
21537
21603
|
return doc2;
|
|
21538
21604
|
}
|
|
@@ -21584,12 +21650,12 @@ var require_public_api = __commonJS((exports) => {
|
|
|
21584
21650
|
});
|
|
21585
21651
|
|
|
21586
21652
|
// ../../node_modules/.bun/yaml@2.9.0/node_modules/yaml/dist/index.js
|
|
21587
|
-
var composer, Document, Schema,
|
|
21588
|
-
var
|
|
21653
|
+
var composer, Document, Schema, errors4, Alias, identity, Pair, Scalar, YAMLMap, YAMLSeq, cst, lexer, lineCounter, parser, publicApi, visit, $Composer, $Document, $Schema, $YAMLError, $YAMLParseError, $YAMLWarning, $Alias, $isAlias, $isCollection, $isDocument, $isMap, $isNode, $isPair, $isScalar, $isSeq, $Pair, $Scalar, $YAMLMap, $YAMLSeq, $Lexer, $LineCounter, $Parser, $parse, $parseAllDocuments, $parseDocument, $stringify, $visit, $visitAsync;
|
|
21654
|
+
var init_dist2 = __esm(() => {
|
|
21589
21655
|
composer = require_composer();
|
|
21590
21656
|
Document = require_Document();
|
|
21591
21657
|
Schema = require_Schema();
|
|
21592
|
-
|
|
21658
|
+
errors4 = require_errors();
|
|
21593
21659
|
Alias = require_Alias();
|
|
21594
21660
|
identity = require_identity();
|
|
21595
21661
|
Pair = require_Pair();
|
|
@@ -21605,9 +21671,9 @@ var init_dist = __esm(() => {
|
|
|
21605
21671
|
$Composer = composer.Composer;
|
|
21606
21672
|
$Document = Document.Document;
|
|
21607
21673
|
$Schema = Schema.Schema;
|
|
21608
|
-
$YAMLError =
|
|
21609
|
-
$YAMLParseError =
|
|
21610
|
-
$YAMLWarning =
|
|
21674
|
+
$YAMLError = errors4.YAMLError;
|
|
21675
|
+
$YAMLParseError = errors4.YAMLParseError;
|
|
21676
|
+
$YAMLWarning = errors4.YAMLWarning;
|
|
21611
21677
|
$Alias = Alias.Alias;
|
|
21612
21678
|
$isAlias = identity.isAlias;
|
|
21613
21679
|
$isCollection = identity.isCollection;
|
|
@@ -21632,10 +21698,10 @@ var init_dist = __esm(() => {
|
|
|
21632
21698
|
$visitAsync = visit.visitAsync;
|
|
21633
21699
|
});
|
|
21634
21700
|
|
|
21635
|
-
// ../../node_modules/.bun/@gobing-ai+ts-runtime@0.
|
|
21701
|
+
// ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.11/node_modules/@gobing-ai/ts-runtime/dist/config.js
|
|
21636
21702
|
var configSchema;
|
|
21637
21703
|
var init_config = __esm(() => {
|
|
21638
|
-
|
|
21704
|
+
init_dist2();
|
|
21639
21705
|
init_zod();
|
|
21640
21706
|
configSchema = exports_external.object({
|
|
21641
21707
|
app: exports_external.object({
|
|
@@ -21656,7 +21722,7 @@ var init_config = __esm(() => {
|
|
|
21656
21722
|
});
|
|
21657
21723
|
});
|
|
21658
21724
|
|
|
21659
|
-
// ../../node_modules/.bun/@gobing-ai+ts-runtime@0.
|
|
21725
|
+
// ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.11/node_modules/@gobing-ai/ts-runtime/dist/file-system-node.js
|
|
21660
21726
|
import { appendFileSync, cpSync, createReadStream, createWriteStream, existsSync, mkdirSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "fs";
|
|
21661
21727
|
import { dirname, resolve as resolvePath } from "path";
|
|
21662
21728
|
function createNodeFileSystem(root, paths) {
|
|
@@ -21835,28 +21901,10 @@ var PluginManifestSchema = exports_external.looseObject({
|
|
|
21835
21901
|
description: exports_external.string().optional(),
|
|
21836
21902
|
operations: exports_external.record(exports_external.string(), PluginOperationSchema).optional()
|
|
21837
21903
|
});
|
|
21838
|
-
// ../../node_modules/.bun/@gobing-ai+ts-runtime@0.
|
|
21904
|
+
// ../../node_modules/.bun/@gobing-ai+ts-runtime@0.5.11/node_modules/@gobing-ai/ts-runtime/dist/index.js
|
|
21839
21905
|
init_file_system_node();
|
|
21840
21906
|
init_config();
|
|
21841
21907
|
|
|
21842
|
-
// ../../node_modules/.bun/@gobing-ai+ts-utils@0.4.67/node_modules/@gobing-ai/ts-utils/dist/output.js
|
|
21843
|
-
var defaultStderrTarget;
|
|
21844
|
-
function processStream(name) {
|
|
21845
|
-
const proc = globalThis.process;
|
|
21846
|
-
const stream = proc?.[name];
|
|
21847
|
-
if (stream === undefined) {
|
|
21848
|
-
throw new Error(`No ${name} target available: set one via setDefaultOutputTargets or pass an explicit target`);
|
|
21849
|
-
}
|
|
21850
|
-
return stream;
|
|
21851
|
-
}
|
|
21852
|
-
function writeLine(message, target) {
|
|
21853
|
-
target.write(`${message}
|
|
21854
|
-
`);
|
|
21855
|
-
}
|
|
21856
|
-
function echoError(message, target = defaultStderrTarget ?? processStream("stderr")) {
|
|
21857
|
-
writeLine(message, target);
|
|
21858
|
-
}
|
|
21859
|
-
|
|
21860
21908
|
// ../../packages/kk-core/src/render-md.ts
|
|
21861
21909
|
if (false) {}
|
|
21862
21910
|
// ../../node_modules/.bun/@logtape+logtape@2.3.1/node_modules/@logtape/logtape/dist/context.js
|
|
@@ -23167,16 +23215,16 @@ function createTimestampFormatter(pattern, timeZone) {
|
|
|
23167
23215
|
return (ts) => new Date(ts).toISOString();
|
|
23168
23216
|
return (ts) => {
|
|
23169
23217
|
const parts = getDateParts(ts, timeZone);
|
|
23170
|
-
const
|
|
23218
|
+
const date6 = `${parts.year}-${parts.month}-${parts.day}`;
|
|
23171
23219
|
const time3 = `${parts.hour}:${parts.minute}:${parts.second}.${parts.ms}`;
|
|
23172
23220
|
const tzLong = formatOffset(parts.offsetMinutes, true);
|
|
23173
23221
|
const tzShort = formatOffset(parts.offsetMinutes, false);
|
|
23174
23222
|
if (pattern === "date-time-timezone")
|
|
23175
|
-
return `${
|
|
23223
|
+
return `${date6} ${time3} ${tzLong}`;
|
|
23176
23224
|
if (pattern === "date-time-tz")
|
|
23177
|
-
return `${
|
|
23225
|
+
return `${date6} ${time3} ${tzShort}`;
|
|
23178
23226
|
if (pattern === "date-time")
|
|
23179
|
-
return `${
|
|
23227
|
+
return `${date6} ${time3}`;
|
|
23180
23228
|
if (pattern === "time-timezone")
|
|
23181
23229
|
return `${time3} ${tzLong}`;
|
|
23182
23230
|
if (pattern === "time-tz")
|
|
@@ -23184,8 +23232,8 @@ function createTimestampFormatter(pattern, timeZone) {
|
|
|
23184
23232
|
if (pattern === "time")
|
|
23185
23233
|
return time3;
|
|
23186
23234
|
if (pattern === "date")
|
|
23187
|
-
return
|
|
23188
|
-
return `${
|
|
23235
|
+
return date6;
|
|
23236
|
+
return `${date6}T${time3}${tzLong}`;
|
|
23189
23237
|
};
|
|
23190
23238
|
}
|
|
23191
23239
|
var levelRenderersCache = {
|
|
@@ -23623,8 +23671,8 @@ function defaultConsoleFormatter(record2) {
|
|
|
23623
23671
|
msg += "%o";
|
|
23624
23672
|
values.push(record2.message[i]);
|
|
23625
23673
|
}
|
|
23626
|
-
const
|
|
23627
|
-
const time3 = `${
|
|
23674
|
+
const date6 = new Date(record2.timestamp);
|
|
23675
|
+
const time3 = `${date6.getUTCHours().toString().padStart(2, "0")}:${date6.getUTCMinutes().toString().padStart(2, "0")}:${date6.getUTCSeconds().toString().padStart(2, "0")}.${date6.getUTCMilliseconds().toString().padStart(3, "0")}`;
|
|
23628
23676
|
return [
|
|
23629
23677
|
`%c${time3} %c${levelAbbreviations[record2.level]}%c %c${record2.category.join("\xB7")} %c${msg}`,
|
|
23630
23678
|
"color: gray;",
|
|
@@ -23871,42 +23919,42 @@ function resetInternal() {
|
|
|
23871
23919
|
currentConfig = null;
|
|
23872
23920
|
}
|
|
23873
23921
|
async function disposeInternal() {
|
|
23874
|
-
const
|
|
23922
|
+
const errors5 = [];
|
|
23875
23923
|
try {
|
|
23876
23924
|
disposeSyncFilters();
|
|
23877
23925
|
} catch (error51) {
|
|
23878
|
-
|
|
23926
|
+
errors5.push(error51);
|
|
23879
23927
|
}
|
|
23880
23928
|
try {
|
|
23881
23929
|
await disposeAsyncFilters();
|
|
23882
23930
|
} catch (error51) {
|
|
23883
|
-
|
|
23931
|
+
errors5.push(error51);
|
|
23884
23932
|
}
|
|
23885
23933
|
try {
|
|
23886
23934
|
disposeSyncSinks();
|
|
23887
23935
|
} catch (error51) {
|
|
23888
|
-
|
|
23936
|
+
errors5.push(error51);
|
|
23889
23937
|
}
|
|
23890
23938
|
try {
|
|
23891
23939
|
await disposeAsyncSinks();
|
|
23892
23940
|
} catch (error51) {
|
|
23893
|
-
|
|
23941
|
+
errors5.push(error51);
|
|
23894
23942
|
}
|
|
23895
|
-
throwDisposeErrors(
|
|
23943
|
+
throwDisposeErrors(errors5);
|
|
23896
23944
|
}
|
|
23897
23945
|
function disposeSyncInternal() {
|
|
23898
|
-
const
|
|
23946
|
+
const errors5 = [];
|
|
23899
23947
|
try {
|
|
23900
23948
|
disposeSyncFilters();
|
|
23901
23949
|
} catch (error51) {
|
|
23902
|
-
|
|
23950
|
+
errors5.push(error51);
|
|
23903
23951
|
}
|
|
23904
23952
|
try {
|
|
23905
23953
|
disposeSyncSinks();
|
|
23906
23954
|
} catch (error51) {
|
|
23907
|
-
|
|
23955
|
+
errors5.push(error51);
|
|
23908
23956
|
}
|
|
23909
|
-
throwDisposeErrors(
|
|
23957
|
+
throwDisposeErrors(errors5);
|
|
23910
23958
|
}
|
|
23911
23959
|
async function runGlobalConfigMutation(functionName, callback) {
|
|
23912
23960
|
assertCanMutateGlobalConfig(functionName);
|
|
@@ -23933,20 +23981,20 @@ function disposeSyncSinks() {
|
|
|
23933
23981
|
disposeSyncDisposables(sinkDisposables);
|
|
23934
23982
|
}
|
|
23935
23983
|
function disposeSyncDisposables(disposables) {
|
|
23936
|
-
const
|
|
23984
|
+
const errors5 = [];
|
|
23937
23985
|
try {
|
|
23938
23986
|
for (const disposable of disposables)
|
|
23939
23987
|
try {
|
|
23940
23988
|
disposable[Symbol.dispose]();
|
|
23941
23989
|
} catch (error51) {
|
|
23942
|
-
|
|
23990
|
+
errors5.push(error51);
|
|
23943
23991
|
} finally {
|
|
23944
23992
|
disposables.delete(disposable);
|
|
23945
23993
|
}
|
|
23946
23994
|
} finally {
|
|
23947
23995
|
disposables.clear();
|
|
23948
23996
|
}
|
|
23949
|
-
throwDisposeErrors(
|
|
23997
|
+
throwDisposeErrors(errors5);
|
|
23950
23998
|
}
|
|
23951
23999
|
async function disposeAsyncFilters() {
|
|
23952
24000
|
await disposeAsyncDisposables(asyncFilterDisposables);
|
|
@@ -23974,12 +24022,12 @@ async function settleDisposePromises(promises) {
|
|
|
23974
24022
|
const results = await Promise.allSettled(promises);
|
|
23975
24023
|
throwDisposeErrors(results.filter((result) => result.status === "rejected").map((result) => result.reason));
|
|
23976
24024
|
}
|
|
23977
|
-
function throwDisposeErrors(
|
|
23978
|
-
if (
|
|
24025
|
+
function throwDisposeErrors(errors5) {
|
|
24026
|
+
if (errors5.length < 1)
|
|
23979
24027
|
return;
|
|
23980
|
-
if (
|
|
23981
|
-
throw
|
|
23982
|
-
throw new AggregateError(
|
|
24028
|
+
if (errors5.length === 1)
|
|
24029
|
+
throw errors5[0];
|
|
24030
|
+
throw new AggregateError(errors5, "Multiple errors occurred while disposing LogTape resources.");
|
|
23983
24031
|
}
|
|
23984
24032
|
var ConfigError = class extends Error {
|
|
23985
24033
|
constructor(message) {
|
|
@@ -23988,7 +24036,7 @@ var ConfigError = class extends Error {
|
|
|
23988
24036
|
}
|
|
23989
24037
|
};
|
|
23990
24038
|
|
|
23991
|
-
// ../../node_modules/.bun/@gobing-ai+ts-infra@0.
|
|
24039
|
+
// ../../node_modules/.bun/@gobing-ai+ts-infra@0.5.11+b4fe47d5f279554c/node_modules/@gobing-ai/ts-infra/dist/logger.js
|
|
23992
24040
|
var ROOT_CATEGORY = "app";
|
|
23993
24041
|
function toLogTapeLevel(level) {
|
|
23994
24042
|
return level === "warn" ? "warning" : level;
|
|
@@ -24058,6 +24106,7 @@ async function initializeLogger(options = {}) {
|
|
|
24058
24106
|
}
|
|
24059
24107
|
}
|
|
24060
24108
|
// ../../plugins/ingestions/web-search/src/index.ts
|
|
24109
|
+
init_dist();
|
|
24061
24110
|
var log = getLogger2("kk.ingestion.web-search");
|
|
24062
24111
|
var REQUEST_TIMEOUT_MS = 120000;
|
|
24063
24112
|
var FIXTURE_ENTRIES = [
|
|
@@ -94,6 +94,15 @@ plugins:
|
|
|
94
94
|
# -- 0104 R6 runtime seams (behavior, not credentials; placeholder values only) --
|
|
95
95
|
KK_IMAGE_MAX_IMAGES: "" # optional — per-run budget cap; default 4 (OPEN for the operator to set)
|
|
96
96
|
KK_IMAGE_DRY_RUN: "" # optional — "1" composes every prompt, selects the provider, spends nothing
|
|
97
|
+
gemini-tts:
|
|
98
|
+
env:
|
|
99
|
+
GEMINI_API_KEY: ""
|
|
100
|
+
GOOGLE_BASE_URL: "https://generativelanguage.googleapis.com"
|
|
101
|
+
GEMINI_TTS_MODEL: "gemini-3.8-flash-tts"
|
|
102
|
+
GEMINI_TTS_PROFILES: "/Users/robin/.config/kk/gemini-tts-profiles.json"
|
|
103
|
+
# A/B 2026-09-24 (robin confirmed): pinned style beats per-segment emotions —
|
|
104
|
+
# no cross-segment persona drift / mood swings on the 30s-cloned voice.
|
|
105
|
+
GEMINI_TTS_STYLE: "calm professional podcast host, steady pace, natural conversational tone"
|
|
97
106
|
publishings:
|
|
98
107
|
qiita-pub:
|
|
99
108
|
env:
|
|
@@ -104,6 +113,10 @@ plugins:
|
|
|
104
113
|
surfdash-pub:
|
|
105
114
|
env:
|
|
106
115
|
POSTSURFING_BIN: "" # optional — delete if unused; defaults to `postsurfing` on PATH
|
|
116
|
+
podcast-pub:
|
|
117
|
+
env:
|
|
118
|
+
MICROFEED_BASE_URL: ""
|
|
119
|
+
MICROFEED_API_KEY: "" # mf_… key with write scope — created in microfeed dashboard → API
|
|
107
120
|
|
|
108
121
|
# Image-authoring preferences (task 0106) — read by the kk:image-authoring skill,
|
|
109
122
|
# not by the plugin; the plugin sees only the resolved winners in its --in envelope.
|
package/plugins/kk/plugin.json
CHANGED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# 每日AI科技漫谈 · 主持风格契约(zh)
|
|
2
|
+
|
|
3
|
+
`kk-daily-ai-voice` 的每一句口播都受这份契约约束(F613 R1)。`script-write` 提示词与
|
|
4
|
+
`dailynews-gen` 的校验器读取同一份机器可读块,因此提示词与校验永远一致。
|
|
5
|
+
|
|
6
|
+
## 人设与语域
|
|
7
|
+
|
|
8
|
+
- 口语化普通话,第一人称「我」,像一位冷静、有依据的科技播客主播。
|
|
9
|
+
- 平实、克制、不炒作:不夸大单一消息的意义,不使用惊叹式渲染或营销话术。
|
|
10
|
+
- 面向普通听众说明「这件事为什么重要」,而不是堆砌术语。
|
|
11
|
+
|
|
12
|
+
## 固定开场与收尾
|
|
13
|
+
|
|
14
|
+
开场问候与收尾致谢由 builder 固定输出,计划文本只填充两者之间的内容,节目身份永不漂移:
|
|
15
|
+
|
|
16
|
+
- 开场:`大家好,今天是<日期>,欢迎收听由<主持人>为您带来的今日AI科技漫谈。`
|
|
17
|
+
- 收尾:`感谢您的收听,我是<主持人>,祝您拥有充实高效的一天,我们下期节目不见不散!`
|
|
18
|
+
|
|
19
|
+
## 段落角色
|
|
20
|
+
|
|
21
|
+
- `intro`:开场导语,串起今天几条主题,接在固定问候之后,不超过 120 字。
|
|
22
|
+
- `lead`:一句话口语桥段,引出下一条新闻的【标题】;只做铺垫,不得复述标题本身,不超过 60 字。
|
|
23
|
+
- `insight`:只基于这条新闻自身事实的 1–2 句点评,说明它为什么重要;不得挪用其他新闻的话题,不超过 160 字。
|
|
24
|
+
- `outro`:简短收束语,接在固定致谢之前,不超过 120 字。
|
|
25
|
+
|
|
26
|
+
## 机器可读契约
|
|
27
|
+
|
|
28
|
+
`caps` 是各字段的字数上限;`banned` 是任何计划字段都不得出现的短语——包括旧模板的全部罐头
|
|
29
|
+
点评、旧模板的 首先/接着/最后 开头,以及 0133 的研究脚手架标签与对冲语(校验规则
|
|
30
|
+
`banned:<短语>`)。
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"caps": { "intro": 120, "outro": 120, "lead": 60, "insight": 160 },
|
|
35
|
+
"banned": [
|
|
36
|
+
"在各种技术光环背后,正是这样专注而不知疲倦的底层攻坚者,为今天整个大模型生态奠定了最坚实的技术基石。",
|
|
37
|
+
"这其实释放了一个非常明确的信号:AI竞争的下半场,已经不再只是单纯拼模型参数,更是电力、能源和全栈工业基础设施的硬核较量。",
|
|
38
|
+
"真正被重新定义的,是硬件层承担的安全与算力责任:把能力做进硅片层更可靠、也更难绕过,但生态锁定的代价需要一起算进去。",
|
|
39
|
+
"我个人觉得,这次最大的看点是内容创作门槛的再次降低。不过正如团队提到的,如何平衡创作自由与防止低质内容泛滥,会是整个行业接下来最值得观察的关键考题。",
|
|
40
|
+
"这项进展反映出资本与产业界正在加速形成合力,后续实际业务场景的落地效果非常值得我们持续跟进。",
|
|
41
|
+
"这项新动态反映出技术演进正在进一步提速,对相关领域的实际影响也非常值得我们持续关注。",
|
|
42
|
+
"首先",
|
|
43
|
+
"接着",
|
|
44
|
+
"最后",
|
|
45
|
+
"可做角度",
|
|
46
|
+
"背景",
|
|
47
|
+
"潜在影响",
|
|
48
|
+
"读者宜另行核实",
|
|
49
|
+
"仍待验证"
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
```
|