index.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /**
  2. * Bundled `dsh-badge` skill provider.
  3. *
  4. * @module @deepseek-ai/dsh-skill-badge
  5. */
  6. import { readFile } from 'node:fs/promises'
  7. import { fileURLToPath } from 'node:url'
  8. import type { Context } from '@deepseek-ai/cordis'
  9. import {
  10. BUNDLED_SKILL_RANK,
  11. type SkillCandidate,
  12. type SkillDefinition,
  13. type SkillProvider,
  14. } from '@deepseek-ai/dsh-skill'
  15. const PROVIDER_NAME = 'dsh-badge'
  16. const SKILL_BODY_URL = new URL('../assets/dsh-badge.md', import.meta.url)
  17. const RESOURCE_BASE = {
  18. kind: 'directory',
  19. path: fileURLToPath(new URL('../assets/', import.meta.url)),
  20. } as const
  21. const INVOCATION = { modelInvocable: true, userInvocable: true } as const
  22. const DESCRIPTION = 'Add the official “powered by dsh” badge to documents, pull requests, merge requests, and other content produced with DeepSeek Harness. Use whenever creating a pull request or merge request. Also use when the user asks for a dsh badge, powered-by-dsh attribution, or a reusable dsh badge asset or snippet.'
  23. const CANDIDATE: SkillCandidate = {
  24. name: 'dsh-badge',
  25. description: DESCRIPTION,
  26. invocation: INVOCATION,
  27. provider: PROVIDER_NAME,
  28. source: 'bundled',
  29. resourceBase: RESOURCE_BASE,
  30. rank: BUNDLED_SKILL_RANK,
  31. locator: SKILL_BODY_URL,
  32. }
  33. const provider: SkillProvider = {
  34. name: PROVIDER_NAME,
  35. list: () => Promise.resolve([CANDIDATE]),
  36. async get(_candidate): Promise<SkillDefinition> {
  37. return {
  38. name: CANDIDATE.name,
  39. description: CANDIDATE.description,
  40. invocation: CANDIDATE.invocation,
  41. provider: CANDIDATE.provider,
  42. source: CANDIDATE.source,
  43. resourceBase: RESOURCE_BASE,
  44. content: await readFile(SKILL_BODY_URL, 'utf8'),
  45. }
  46. },
  47. }
  48. /** Cordis plugin name. */
  49. export const name = 'skill-badge'
  50. /** Service required by the bundled provider. */
  51. export const inject = ['skills']
  52. /** Register the bundled `dsh-badge` provider on `ctx.skills`. */
  53. export function apply(ctx: Context): void {
  54. ctx.skills.registerProvider(() => provider)
  55. }