@gobing-ai/knowledge-kit 0.0.12 → 0.0.14

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 (152) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/dist/index.js +120 -26
  3. package/package.json +1 -1
  4. package/plugins/generations/content-gen/dist/index.js +22187 -0
  5. package/plugins/generations/content-gen/plugin.json +1 -1
  6. package/plugins/generations/core-facts-gen/dist/index.js +22068 -0
  7. package/plugins/generations/core-facts-gen/plugin.json +1 -1
  8. package/plugins/generations/daily-article-gen/dist/index.js +22050 -0
  9. package/plugins/generations/daily-article-gen/plugin.json +1 -1
  10. package/plugins/generations/daily-article-gen/src/index.ts +13 -1
  11. package/plugins/generations/dailynews-gen/dist/index.js +22344 -0
  12. package/plugins/generations/dailynews-gen/plugin.json +1 -1
  13. package/plugins/generations/episode-plan-gen/dist/index.js +22503 -0
  14. package/plugins/generations/episode-plan-gen/plugin.json +1 -1
  15. package/plugins/generations/episode-plan-gen/src/index.ts +11 -0
  16. package/plugins/generations/image-gen/config.example.yaml +75 -0
  17. package/plugins/generations/image-gen/dist/index.js +24862 -0
  18. package/plugins/generations/image-gen/package.json +17 -0
  19. package/plugins/generations/image-gen/plugin.json +7 -0
  20. package/plugins/generations/image-gen/presets/formats/cover.yaml +57 -0
  21. package/plugins/generations/image-gen/presets/formats/free.yaml +46 -0
  22. package/plugins/generations/image-gen/presets/formats/illustration.yaml +48 -0
  23. package/plugins/generations/image-gen/presets/styles/clean-webapp-ui.yaml +28 -0
  24. package/plugins/generations/image-gen/presets/styles/cute.yaml +3 -0
  25. package/plugins/generations/image-gen/presets/styles/editorial.yaml +3 -0
  26. package/plugins/generations/image-gen/presets/styles/fresh.yaml +3 -0
  27. package/plugins/generations/image-gen/presets/styles/minimalist.yaml +3 -0
  28. package/plugins/generations/image-gen/presets/styles/photorealistic.yaml +3 -0
  29. package/plugins/generations/image-gen/presets/styles/sketch.yaml +3 -0
  30. package/plugins/generations/image-gen/presets/styles/technical-diagram.yaml +3 -0
  31. package/plugins/generations/image-gen/presets/styles/vibrant.yaml +3 -0
  32. package/plugins/generations/image-gen/presets/styles/warm.yaml +3 -0
  33. package/plugins/generations/image-gen/src/bytes.ts +19 -0
  34. package/plugins/generations/image-gen/src/index.ts +319 -0
  35. package/plugins/generations/image-gen/src/job.ts +143 -0
  36. package/plugins/generations/image-gen/src/paths.ts +31 -0
  37. package/plugins/generations/image-gen/src/presets.ts +344 -0
  38. package/plugins/generations/image-gen/src/providers/agnes.ts +110 -0
  39. package/plugins/generations/image-gen/src/providers/azure.ts +153 -0
  40. package/plugins/generations/image-gen/src/providers/codex-cli.ts +170 -0
  41. package/plugins/generations/image-gen/src/providers/dashscope.ts +485 -0
  42. package/plugins/generations/image-gen/src/providers/google.ts +268 -0
  43. package/plugins/generations/image-gen/src/providers/huggingface.ts +59 -0
  44. package/plugins/generations/image-gen/src/providers/jimeng.ts +259 -0
  45. package/plugins/generations/image-gen/src/providers/minimax.ts +171 -0
  46. package/plugins/generations/image-gen/src/providers/openai.ts +319 -0
  47. package/plugins/generations/image-gen/src/providers/openrouter.ts +257 -0
  48. package/plugins/generations/image-gen/src/providers/refs.ts +24 -0
  49. package/plugins/generations/image-gen/src/providers/replicate.ts +279 -0
  50. package/plugins/generations/image-gen/src/providers/seedream.ts +128 -0
  51. package/plugins/generations/image-gen/src/providers/types.ts +286 -0
  52. package/plugins/generations/image-gen/src/providers/zai.ts +237 -0
  53. package/plugins/generations/image-gen/tsconfig.json +8 -0
  54. package/plugins/generations/news-report-gen/dist/index.js +22193 -0
  55. package/plugins/generations/news-report-gen/package.json +17 -0
  56. package/plugins/generations/news-report-gen/plugin.json +7 -0
  57. package/plugins/generations/news-report-gen/src/index.ts +308 -0
  58. package/plugins/generations/news-report-gen/tsconfig.json +4 -0
  59. package/plugins/generations/omni-voice-gen/Makefile +14 -0
  60. package/plugins/generations/omni-voice-gen/README.md +112 -0
  61. package/plugins/generations/omni-voice-gen/bin/omni-voice-gen +2 -0
  62. package/plugins/generations/omni-voice-gen/dist/omni-voice-gen-prr8skpb. +2 -0
  63. package/plugins/generations/omni-voice-gen/dist/omni-voice-gen.js +6 -0
  64. package/plugins/generations/omni-voice-gen/plugin.json +6 -0
  65. package/plugins/generations/omni-voice-gen/profiles.json +12 -0
  66. package/plugins/generations/omni-voice-gen/pyproject.toml +25 -0
  67. package/plugins/generations/omni-voice-gen/scripts/coverage_gate.py +74 -0
  68. package/plugins/generations/omni-voice-gen/src/omni_voice_gen/__init__.py +1 -0
  69. package/plugins/generations/omni-voice-gen/src/omni_voice_gen/__main__.py +39 -0
  70. package/plugins/generations/omni-voice-gen/src/omni_voice_gen/audio.py +190 -0
  71. package/plugins/generations/omni-voice-gen/src/omni_voice_gen/backend.py +150 -0
  72. package/plugins/generations/omni-voice-gen/src/omni_voice_gen/contract.py +76 -0
  73. package/plugins/generations/omni-voice-gen/src/omni_voice_gen/mp3.py +60 -0
  74. package/plugins/generations/omni-voice-gen/src/omni_voice_gen/pipeline.py +289 -0
  75. package/plugins/generations/omni-voice-gen/src/omni_voice_gen/profiles.py +100 -0
  76. package/plugins/generations/omni-voice-gen/src/omni_voice_gen/qc.py +234 -0
  77. package/plugins/generations/omni-voice-gen/src/omni_voice_gen/voicescript.py +352 -0
  78. package/plugins/generations/omni-voice-gen/uv.lock +3510 -0
  79. package/plugins/generations/voice-gen/dist/index.js +23055 -0
  80. package/plugins/generations/voice-gen/plugin.json +1 -1
  81. package/plugins/generations/voice-gen/src/index.ts +16 -1
  82. package/plugins/generations/voice-gen/src/voicebox-client.ts +3 -1
  83. package/plugins/ingestions/aihot-ingest/dist/index.js +22378 -0
  84. package/plugins/ingestions/aihot-ingest/plugin.json +1 -1
  85. package/plugins/ingestions/horizon-ingest/dist/index.js +22125 -0
  86. package/plugins/ingestions/horizon-ingest/plugin.json +1 -1
  87. package/plugins/ingestions/karakeep-local/dist/index.js +24204 -0
  88. package/plugins/ingestions/karakeep-local/plugin.json +1 -1
  89. package/plugins/ingestions/last30days-ingest/dist/index.js +22070 -0
  90. package/plugins/ingestions/last30days-ingest/plugin.json +1 -1
  91. package/plugins/ingestions/web-search/dist/index.js +24399 -0
  92. package/plugins/ingestions/web-search/plugin.json +1 -1
  93. package/plugins/kk/commands/image-extract.md +40 -0
  94. package/plugins/kk/commands/image-generate.md +32 -0
  95. package/plugins/kk/config.example.yaml +80 -0
  96. package/plugins/kk/plugin.json +1 -1
  97. package/plugins/kk/skills/image-authoring/SKILL.md +257 -0
  98. package/plugins/kk/skills/image-authoring/references/format-drafting.md +57 -0
  99. package/plugins/kk/skills/image-authoring/references/illustration-positions.md +87 -0
  100. package/plugins/kk/skills/image-authoring/references/migrating-from-wt.md +31 -0
  101. package/plugins/kk/skills/image-authoring/references/providers.md +52 -0
  102. package/plugins/kk/skills/image-authoring/references/style-extraction.md +139 -0
  103. package/plugins/kk/workflows/kk-daily-ai-voice.yaml +130 -30
  104. package/plugins/publishings/emdash-pub/dist/index.js +22263 -0
  105. package/plugins/publishings/emdash-pub/plugin.json +1 -1
  106. package/plugins/publishings/podcast-pub/dist/index.js +22650 -0
  107. package/plugins/publishings/podcast-pub/plugin.json +8 -2
  108. package/plugins/publishings/podcast-pub/src/index.ts +18 -2
  109. package/plugins/publishings/podcast-pub/src/show-notes.ts +56 -9
  110. package/plugins/publishings/qiita-pub/dist/index.js +22101 -0
  111. package/plugins/publishings/qiita-pub/plugin.json +1 -1
  112. package/plugins/publishings/surfdash-pub/dist/index.js +22323 -0
  113. package/plugins/publishings/surfdash-pub/plugin.json +1 -1
  114. package/plugins/publishings/surfdash-pub/src/index.ts +109 -9
  115. package/plugins/publishings/zenn-pub/dist/index.js +22142 -0
  116. package/plugins/publishings/zenn-pub/plugin.json +1 -1
  117. package/plugins/sp/scripts/batch-preflight.mjs +346 -0
  118. package/plugins/sp/scripts/batch-preflight.ts +459 -0
  119. package/plugins/sp/scripts/daily-summary/daily-summary.mjs +615 -0
  120. package/plugins/sp/scripts/daily-summary/daily-summary.ts +846 -0
  121. package/plugins/sp/scripts/daily-summary/logger.ts +28 -0
  122. package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.mjs +223 -0
  123. package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.ts +367 -0
  124. package/plugins/sp/scripts/dogfood-testing/validate-report.mjs +132 -0
  125. package/plugins/sp/scripts/dogfood-testing/validate-report.ts +169 -0
  126. package/plugins/sp/scripts/feature-dev-precheck.mjs +171 -0
  127. package/plugins/sp/scripts/feature-dev-precheck.ts +238 -0
  128. package/plugins/sp/scripts/feature-sync-bounded.mjs +285 -0
  129. package/plugins/sp/scripts/feature-sync-bounded.ts +478 -0
  130. package/plugins/sp/scripts/history-anatomy-cache.mjs +902 -0
  131. package/plugins/sp/scripts/history-anatomy-cache.ts +1028 -0
  132. package/plugins/sp/scripts/idea-handoff.mjs +22 -0
  133. package/plugins/sp/scripts/idea-handoff.ts +44 -0
  134. package/plugins/sp/scripts/inline-pipeline-parity-check.ts +185 -0
  135. package/plugins/sp/scripts/inline-run-setup.ts +198 -0
  136. package/plugins/sp/scripts/pr-reviewing.mjs +769 -0
  137. package/plugins/sp/scripts/pr-reviewing.ts +925 -0
  138. package/plugins/sp/scripts/quality-gate.mjs +179 -0
  139. package/plugins/sp/scripts/quality-gate.ts +217 -0
  140. package/plugins/sp/scripts/script-contract-check.ts +319 -0
  141. package/plugins/sp/scripts/stage-registry-adapter.ts +1533 -0
  142. package/plugins/sp/scripts/surface-drift-inventory.ts +929 -0
  143. package/plugins/sp/scripts/task-evidence-precheck.ts +181 -0
  144. package/plugins/sp/scripts/task-size-precheck.ts +175 -0
  145. package/plugins/sp/scripts/transition-shim-check.ts +238 -0
  146. package/plugins/sp/scripts/validate-commands.ts +689 -0
  147. package/plugins/sp/scripts/validate-flag-contracts.ts +878 -0
  148. package/plugins/sp/scripts/verify-answer-lint.ts +530 -0
  149. package/plugins/sp/scripts/workflow-step-profile.mjs +316 -0
  150. package/plugins/sp/scripts/workflow-step-profile.ts +456 -0
  151. package/plugins/sp/scripts/wrapup-steps.mjs +373 -0
  152. package/plugins/sp/scripts/wrapup-steps.ts +466 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "surfdash-pub",
3
3
  "kind": "publish",
4
- "entry": "./src/index.ts",
4
+ "entry": "./dist/index.js",
5
5
  "version": "1.0.0",
6
6
  "description": "Publish plugin for Surfdash (Surfing SSG) invoking postsurfing CLI via FileCli transport"
7
7
  }
@@ -210,9 +210,85 @@ async function spawnCli(cmd: string[], cwd: string): Promise<CliSpawnResult> {
210
210
  return { exitCode, stdout, stderr };
211
211
  }
212
212
 
213
- /** Stderr-first error text for a failed CLI spawn (stderr may be empty → fall back to stdout). */
213
+ /** Error text for a failed CLI spawn — both streams concatenated: postsurfing streams the
214
+ * failing stage's API error (e.g. 401 INVALID_TOKEN) on stdout while bun stacks land on stderr. */
214
215
  function cliErrorText(spawned: CliSpawnResult): string {
215
- return spawned.stderr.trim() || spawned.stdout.trim() || 'Unknown error';
216
+ return [spawned.stderr.trim(), spawned.stdout.trim()].filter((part) => part !== '').join('\n') || 'Unknown error';
217
+ }
218
+
219
+ /** The EmDash CMS token in kk config expires periodically; map the API's 401 to the fix. */
220
+ export function withEmdashTokenHint(errText: string): string {
221
+ return /INVALID_TOKEN|API error 401/.test(errText)
222
+ ? `${errText} — hint: regenerate the EmDash token (surfing.salty.vip admin console) and update EMDASH_API_TOKEN in ~/.config/kk/config.yaml`
223
+ : errText;
224
+ }
225
+
226
+ /** Outcome of {@link pushPostGit} — the union keeps fail-loud errors typed at the call site. */
227
+ export type GitPushOutcome = { ok: true; hash: string } | { ok: false; error: string };
228
+
229
+ /**
230
+ * Commits the published post path and pushes to the remote. Production deploys run
231
+ * from surfdash's `deploy.yml` on every push to `main` — the publishing FSM itself
232
+ * never touches git, so without this step the article 404s until a manual commit.
233
+ * Committing with a pathspec (`git commit -- <path>`) keeps unrelated staged files
234
+ * out of the publish commit. Fails loud on branch/commit/push errors.
235
+ */
236
+ export async function pushPostGit(surfdashRoot: string, relPostDir: string, message: string): Promise<GitPushOutcome> {
237
+ const branch = await spawnCli(['git', 'rev-parse', '--abbrev-ref', 'HEAD'], surfdashRoot);
238
+ if (branch.exitCode !== 0) return { ok: false, error: `surfdash git branch check failed: ${cliErrorText(branch)}` };
239
+ const branchName = branch.stdout.trim();
240
+ if (branchName !== 'main') {
241
+ return {
242
+ ok: false,
243
+ error: `surfdash checkout is on '${branchName}', not 'main' — deploy.yml only builds main; refusing to push from a feature branch`,
244
+ };
245
+ }
246
+ const add = await spawnCli(['git', 'add', '--', relPostDir], surfdashRoot);
247
+ if (add.exitCode !== 0) return { ok: false, error: `surfdash git add failed: ${cliErrorText(add)}` };
248
+ // Idempotent retry: post content identical to HEAD stages nothing. Only push when
249
+ // origin lacks commits touching this post; a clean post means it's already live.
250
+ const staged = await spawnCli(['git', 'diff', '--cached', '--quiet', '--', relPostDir], surfdashRoot);
251
+ if (staged.exitCode === 0) {
252
+ const unpushed = await spawnCli(
253
+ ['git', 'diff', '--quiet', 'origin/main..HEAD', '--', relPostDir],
254
+ surfdashRoot,
255
+ );
256
+ if (unpushed.exitCode === 0) {
257
+ const hash = await spawnCli(['git', 'rev-parse', '--short', 'HEAD'], surfdashRoot);
258
+ return { ok: true, hash: hash.stdout.trim() || 'unknown' };
259
+ }
260
+ } else {
261
+ const commit = await spawnCli(['git', 'commit', '-m', message, '--', relPostDir], surfdashRoot);
262
+ if (commit.exitCode !== 0) return { ok: false, error: `surfdash git commit failed: ${cliErrorText(commit)}` };
263
+ }
264
+ const push = await spawnCli(['git', 'push', 'origin', 'main'], surfdashRoot);
265
+ if (push.exitCode !== 0) {
266
+ return {
267
+ ok: false,
268
+ error: `surfdash git push failed (deploy.yml deploys on push to main): ${cliErrorText(push)}`,
269
+ };
270
+ }
271
+ const hash = await spawnCli(['git', 'rev-parse', '--short', 'HEAD'], surfdashRoot);
272
+ return { ok: true, hash: hash.stdout.trim() || 'unknown' };
273
+ }
274
+
275
+ /**
276
+ * Polls the article URL until the CDN serves it (deploy.yml build latency). Push
277
+ * acceptance is the authoritative publish signal, so an unverified URL is reported
278
+ * in the result message rather than failing the publish.
279
+ */
280
+ export async function awaitArticleLive(url: string, timeoutMs = 180_000, intervalMs = 10_000): Promise<boolean> {
281
+ const deadline = Date.now() + timeoutMs;
282
+ while (Date.now() < deadline) {
283
+ try {
284
+ const resp = await fetch(url, { redirect: 'follow', signal: AbortSignal.timeout(5_000) });
285
+ if (resp.ok) return true;
286
+ } catch {
287
+ // network blips during CI deploy — keep polling until the deadline
288
+ }
289
+ await Bun.sleep(intervalMs);
290
+ }
291
+ return false;
216
292
  }
217
293
 
218
294
  /**
@@ -291,7 +367,9 @@ async function syncPost(options: SurfdashPubOptions): Promise<Result> {
291
367
  surfdashRoot,
292
368
  );
293
369
  if (spawned.exitCode !== 0) {
294
- return fail(`publish-orchestrator sync failed (exit ${spawned.exitCode}): ${cliErrorText(spawned)}`);
370
+ return fail(
371
+ `publish-orchestrator sync failed (exit ${spawned.exitCode}): ${withEmdashTokenHint(cliErrorText(spawned))}`,
372
+ );
295
373
  }
296
374
  return ResultSchema.parse({
297
375
  ok: true,
@@ -352,17 +430,39 @@ async function publishPost(payload: PublishTransportPayload): Promise<Result> {
352
430
  const spawned = await spawnCli([postsurfingBin, 'publish', filePath], surfdashRoot);
353
431
 
354
432
  if (spawned.exitCode !== 0) {
355
- return fail(`postsurfing CLI failed (exit ${spawned.exitCode}): ${cliErrorText(spawned)}`);
433
+ return fail(
434
+ `postsurfing CLI failed (exit ${spawned.exitCode}): ${withEmdashTokenHint(cliErrorText(spawned))}`,
435
+ );
436
+ }
437
+
438
+ // Deploy seam: commit + push the post so deploy.yml builds it, then wait for
439
+ // the live URL — downstream show-notes advertise a real page, not a 404.
440
+ // Tests (and offline runs) opt out via SURFDASH_AUTO_PUSH=0.
441
+ const articleUrl = `${(process.env.SURFDASH_URL ?? 'https://surfing.salty.vip').replace(/\/$/, '')}/${locale}/posts/${slug}`;
442
+ if (process.env.SURFDASH_AUTO_PUSH === '0') {
443
+ return ResultSchema.parse({
444
+ ok: true,
445
+ target: TARGET,
446
+ url: articleUrl,
447
+ message: 'Published via postsurfing CLI (auto-push disabled)',
448
+ // Absolute post path lets downstream steps (locale translation + CMS sync)
449
+ // derive the surfdash checkout root without extra configuration.
450
+ metadata: { postPath: filePath },
451
+ });
356
452
  }
453
+ const relPostDir = join('content', 'posts', 'articles', locale, slug);
454
+ const pushed = await pushPostGit(surfdashRoot, relPostDir, `content: daily AI news ${dateStamp} (zh)`);
455
+ if (!pushed.ok) return fail(pushed.error);
456
+ const live = await awaitArticleLive(articleUrl);
357
457
 
358
458
  return ResultSchema.parse({
359
459
  ok: true,
360
460
  target: TARGET,
361
- url: `https://surfdash.local/${locale}/posts/${slug}`,
362
- message: 'Published successfully to Surfdash via postsurfing CLI',
363
- // Absolute post path lets downstream steps (locale translation + CMS sync)
364
- // derive the surfdash checkout root without extra configuration.
365
- metadata: { postPath: filePath },
461
+ url: articleUrl,
462
+ message: live
463
+ ? 'Published, committed, pushed, and live on the site'
464
+ : 'Published and pushed; URL not live within the verify window — check the surfdash deploy workflow',
465
+ metadata: { postPath: filePath, gitCommit: pushed.hash, live },
366
466
  });
367
467
  } catch (err: unknown) {
368
468
  return fail(`Postsurfing transport error: ${err instanceof Error ? err.message : String(err)}`);