@aexol/opencode-wizard 0.3.11 → 0.4.0

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 (36) hide show
  1. package/README.md +4 -1
  2. package/dist/graphql-operations.d.ts +4 -4
  3. package/dist/graphql-operations.js +16 -2
  4. package/dist/graphql-operations.js.map +1 -1
  5. package/dist/plugin-tools.d.ts +3 -0
  6. package/dist/plugin-tools.js +10 -7
  7. package/dist/plugin-tools.js.map +1 -1
  8. package/dist/published-skills-transform.d.ts +22 -4
  9. package/dist/published-skills-transform.js +21 -5
  10. package/dist/published-skills-transform.js.map +1 -1
  11. package/dist/server/client.d.ts +4 -3
  12. package/dist/server/client.js +30 -4
  13. package/dist/server/client.js.map +1 -1
  14. package/dist/server/preferences.d.ts +1 -0
  15. package/dist/server/preferences.js +5 -2
  16. package/dist/server/preferences.js.map +1 -1
  17. package/dist/server/runtime.d.ts +1 -1
  18. package/dist/server/runtime.js +169 -23
  19. package/dist/server/runtime.js.map +1 -1
  20. package/dist/server/status.js +7 -3
  21. package/dist/server/status.js.map +1 -1
  22. package/dist/server/types.d.ts +9 -4
  23. package/dist/server/types.js.map +1 -1
  24. package/dist/smoke-published-skills.js +3 -1
  25. package/dist/smoke-published-skills.js.map +1 -1
  26. package/dist/tui/components/skill-picker-dialog.d.ts +7 -0
  27. package/dist/tui/components/skill-picker-dialog.js +94 -0
  28. package/dist/tui/components/skill-picker-dialog.js.map +1 -0
  29. package/dist/tui/components/status-content.js +6 -1
  30. package/dist/tui/components/status-content.js.map +1 -1
  31. package/dist/tui/plugin.js +36 -69
  32. package/dist/tui/plugin.js.map +1 -1
  33. package/dist/tui/skill-helpers.d.ts +14 -2
  34. package/dist/tui/skill-helpers.js +76 -19
  35. package/dist/tui/skill-helpers.js.map +1 -1
  36. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"names":["getPublishedSkillAssignmentLabel","getPublishedSkillPolicyLabel","isUserPublishedSkillAssignment","toFrontmatterString","value","JSON","stringify","formatSkillLabel","item","artifactName","publishedArtifact","frontmatterName","trim","length","skill","name","buildSkillMarkdown","artifactBody","markdownBody","fallbackBody","renderedContent","body","startsWith","endsWith","description","frontmatterDescription","summary","frontmatter","join","getSkillIdentifiers","candidates","slug","seen","Set","reduce","all","candidate","normalized","cacheKey","toLowerCase","has","add","push","toPublishedSkillFacetSummary","facet","label","toPublishedSkillTagSummary","tag","getPublishedSkillFacets","items","facetsBySlug","Map","tags","set","values","sort","left","right","localeCompare","getPublishedSkillAssignmentCounts","counts","assignmentSource","user","global","project","other","getSkillContextKind","getRevision","checksum","updatedAtCursor","fallbackTimestamp","toPublishedSkillSummary","contextKind","skillSlug","skillName","artifactDescription","whenToUse","version","skillVersion","assignmentType","scopePath","includeChildren","revision","publishedAt","fileCount","identifiers","map","installPolicy","assignmentLabel","policyLabel","policy","toPublishedSkillDetail","skillId","id","skillVersionId","artifactId","markdownDocument","files","resources","filter","file","relativePath","getWizardArtifactContextKind","getWizardArtifactIdentifiers","artifact","artifactVersion","toWizardArtifactSummary","artifactKind","kind","artifactSlug","canonicalFilePath","buildWizardArtifactMarkdown","toWizardArtifactDetail","artifactVersionId","toWizardArtifactCatalog","payload","options","pluginId","runtimeMode","deliveryModel","workspace","directoryPath","availableTools","artifactCount","artifacts","catalogArtifacts","toInstallableSkillSummary","toPublishedSkillCatalog","rootSkillSeedPath","publishedSkillCount","skills","assignmentCounts","facets","normalizeSkillIdentifier","parseSkillIdentifiers","split","mergeSkillIdentifiers","parseRequestedSkillArgs","args","requestedSkills","selectPublishedSkills","itemsByIdentifier","identifier","selectedItems","selectedKeys","missingIdentifiers","matched","get"],"sources":["../src/published-skills-transform.ts"],"sourcesContent":["import {\n getPublishedSkillAssignmentLabel,\n getPublishedSkillPolicyLabel,\n isUserPublishedSkillAssignment,\n} from './published-skills-terminology.js';\n\nexport { isUserPublishedSkillAssignment } from './published-skills-terminology.js';\n\ntype PublishedSkillFacetLike = {\n slug: string;\n label: string;\n description?: string | null;\n};\n\ntype PublishedSkillTagLike = {\n slug: string;\n label: string;\n description?: string | null;\n facet?: PublishedSkillFacetLike | null;\n};\n\ntype PublishedSkillInstallPolicy = 'GLOBAL_CONTEXT' | 'PROJECT_INSTALLABLE';\n\ntype PublishedSkillCatalogItemLike = {\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren?: boolean | null;\n skill: {\n id: string;\n slug: string;\n name: string;\n summary?: string | null;\n whenToUse?: string | null;\n status: string;\n installPolicy: PublishedSkillInstallPolicy;\n tags: PublishedSkillTagLike[];\n };\n skillVersion: {\n id: string;\n version: string;\n title?: string | null;\n summary?: string | null;\n status: string;\n };\n publishedArtifact: {\n id: string;\n frontmatterName: string;\n frontmatterDescription: string;\n checksum: string;\n revision?: string | null;\n updatedAtCursor?: string | null;\n publishedAt?: string | null;\n fileCount: number;\n };\n};\n\ntype PublishedSkillArtifactFileLike = {\n id: string;\n relativePath: string;\n contentType: string;\n content: string;\n checksum: string;\n size: number;\n sortOrder: number;\n};\n\ntype PublishedSkillDetailItemLike = PublishedSkillCatalogItemLike & {\n publishedArtifact: PublishedSkillCatalogItemLike['publishedArtifact'] & {\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFileLike[];\n };\n};\n\ntype PublishedSkillInstallableCatalogItemLike = Pick<\n PublishedSkillCatalogItemLike,\n 'skill' | 'skillVersion' | 'publishedArtifact'\n>;\n\ntype PublishedSkillCatalogPayloadLike<TItem extends PublishedSkillCatalogItemLike = PublishedSkillCatalogItemLike> = {\n workspace: {\n id: string;\n slug: string;\n name: string;\n repositoryUrl?: string | null;\n defaultBranch?: string | null;\n status: string;\n } | null;\n directoryPath: string;\n skills: TItem[];\n catalogSkills: PublishedSkillInstallableCatalogItemLike[];\n userPreferences: {\n scopeKey: string;\n userKey: string;\n ignoredSkills: PublishedSkillCatalogItemLike[];\n };\n};\n\nexport type PublishedSkillFacetSummary = {\n slug: string;\n label: string;\n description: string | null;\n};\n\nexport type PublishedSkillTagSummary = {\n slug: string;\n label: string;\n description: string | null;\n facet: PublishedSkillFacetSummary | null;\n};\n\nexport type PublishedSkillSummary = {\n skillSlug: string;\n skillName: string;\n artifactName: string;\n artifactDescription: string;\n whenToUse: string | null;\n version: string;\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren: boolean | null;\n checksum: string;\n revision: string;\n updatedAtCursor: string;\n publishedAt: string;\n fileCount: number;\n identifiers: string[];\n tags: PublishedSkillTagSummary[];\n contextKind: 'global' | 'project' | 'installable';\n installPolicy: PublishedSkillInstallPolicy;\n assignmentLabel: string;\n policyLabel: string;\n};\n\nexport type PublishedSkillDetail = PublishedSkillSummary & {\n skillId: string;\n skillVersionId: string;\n artifactId: string;\n markdownDocument: string;\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFileLike[];\n resources: PublishedSkillArtifactFileLike[];\n};\n\ntype WizardArtifactKind = 'SKILL' | 'DESIGN_DOC';\n\ntype WizardArtifactCatalogItemLike = {\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren?: boolean | null;\n artifact: {\n id: string;\n kind: WizardArtifactKind;\n slug: string;\n name: string;\n summary?: string | null;\n whenToUse?: string | null;\n status: string;\n installPolicy: PublishedSkillInstallPolicy;\n };\n artifactVersion: {\n id: string;\n version: string;\n title?: string | null;\n summary?: string | null;\n status: string;\n frontmatterName: string;\n frontmatterDescription: string;\n checksum: string;\n revision?: string | null;\n updatedAtCursor?: string | null;\n canonicalFilePath: string;\n publishedAt?: string | null;\n fileCount: number;\n };\n};\n\ntype WizardArtifactDetailLike = WizardArtifactCatalogItemLike & {\n artifactVersion: WizardArtifactCatalogItemLike['artifactVersion'] & {\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFileLike[];\n };\n};\n\ntype WizardArtifactCatalogPayloadLike = {\n artifactKind: WizardArtifactKind;\n workspace: PublishedSkillCatalogPayloadLike['workspace'];\n directoryPath: string;\n artifacts: WizardArtifactCatalogItemLike[];\n catalogArtifacts: Pick<WizardArtifactCatalogItemLike, 'artifact' | 'artifactVersion'>[];\n artifactPreferences: {\n scopeKey: string;\n userKey: string;\n ignoredArtifacts: WizardArtifactCatalogItemLike[];\n };\n};\n\nexport type WizardArtifactSummary = {\n artifactKind: WizardArtifactKind;\n artifactSlug: string;\n artifactName: string;\n artifactDescription: string;\n whenToUse: string | null;\n version: string;\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren: boolean | null;\n checksum: string;\n revision: string;\n updatedAtCursor: string;\n publishedAt: string;\n fileCount: number;\n canonicalFilePath: string;\n identifiers: string[];\n contextKind: 'global' | 'project' | 'installable';\n installPolicy: PublishedSkillInstallPolicy;\n assignmentLabel: string;\n policyLabel: string;\n};\n\nexport type WizardArtifactDetail = WizardArtifactSummary & {\n artifactId: string;\n artifactVersionId: string;\n markdownDocument: string;\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFileLike[];\n resources: PublishedSkillArtifactFileLike[];\n};\n\nexport type WizardArtifactCatalogState = {\n pluginId: string;\n runtimeMode: 'tool_fetch_only';\n deliveryModel: 'backend_published_generic_artifacts';\n artifactKind: WizardArtifactKind;\n workspace: PublishedSkillCatalogPayloadLike['workspace'];\n directoryPath: string;\n availableTools: string[];\n artifactCount: number;\n artifacts: WizardArtifactSummary[];\n catalogArtifacts: WizardArtifactSummary[];\n};\n\nexport type PublishedSkillsSuccessState = {\n pluginId: string;\n runtimeMode: 'tool_fetch_only';\n deliveryModel: 'backend_published_installed_effective_skills';\n workspace: PublishedSkillCatalogPayloadLike['workspace'];\n directoryPath: string;\n rootSkillSeedPath: string;\n availableTools: string[];\n publishedSkillCount: number;\n assignmentCounts: {\n global: number;\n project: number;\n user: number;\n other: number;\n };\n facets: PublishedSkillFacetSummary[];\n skills: PublishedSkillSummary[];\n};\n\ntype PublishedSkillCatalogOptions = {\n pluginId: string;\n rootSkillSeedPath: string;\n availableTools: string[];\n};\n\nconst toFrontmatterString = (value: string): string => JSON.stringify(value);\n\nexport const formatSkillLabel = (item: PublishedSkillCatalogItemLike): string => {\n const artifactName = item.publishedArtifact.frontmatterName.trim();\n if (artifactName.length > 0) return artifactName;\n return item.skill.name;\n};\n\nexport const buildSkillMarkdown = (item: PublishedSkillDetailItemLike): string => {\n const artifactBody = item.publishedArtifact.markdownBody.trim();\n const fallbackBody = item.publishedArtifact.renderedContent.trim();\n const body = artifactBody || fallbackBody;\n\n if (body.startsWith('---')) {\n return body.endsWith('\\n') ? body : `${body}\\n`;\n }\n\n const name = formatSkillLabel(item);\n const description = item.publishedArtifact.frontmatterDescription.trim() || item.skill.summary?.trim() || '';\n const frontmatter = ['---', `name: ${toFrontmatterString(name)}`, `description: ${toFrontmatterString(description)}`, '---'].join(\n '\\n',\n );\n\n if (!body) {\n return `${frontmatter}\\n`;\n }\n\n return `${frontmatter}\\n\\n${body.endsWith('\\n') ? body : `${body}\\n`}`;\n};\n\nconst getSkillIdentifiers = (item: PublishedSkillCatalogItemLike): string[] => {\n const candidates = [item.skill.slug, item.publishedArtifact.frontmatterName, item.skill.name];\n const seen = new Set<string>();\n\n return candidates.reduce<string[]>((all, candidate) => {\n const normalized = candidate.trim();\n if (!normalized) return all;\n\n const cacheKey = normalized.toLowerCase();\n if (seen.has(cacheKey)) return all;\n\n seen.add(cacheKey);\n all.push(normalized);\n return all;\n }, []);\n};\n\nconst toPublishedSkillFacetSummary = (facet: PublishedSkillFacetLike): PublishedSkillFacetSummary => ({\n slug: facet.slug,\n label: facet.label,\n description: facet.description ?? null,\n});\n\nconst toPublishedSkillTagSummary = (tag: PublishedSkillTagLike): PublishedSkillTagSummary => ({\n slug: tag.slug,\n label: tag.label,\n description: tag.description ?? null,\n facet: tag.facet ? toPublishedSkillFacetSummary(tag.facet) : null,\n});\n\nconst getPublishedSkillFacets = (items: PublishedSkillCatalogItemLike[]): PublishedSkillFacetSummary[] => {\n const facetsBySlug = new Map<string, PublishedSkillFacetSummary>();\n\n for (const item of items) {\n for (const tag of item.skill.tags) {\n if (!tag.facet) continue;\n if (facetsBySlug.has(tag.facet.slug)) continue;\n facetsBySlug.set(tag.facet.slug, toPublishedSkillFacetSummary(tag.facet));\n }\n }\n\n return [...facetsBySlug.values()].sort((left, right) => left.slug.localeCompare(right.slug));\n};\n\nconst getPublishedSkillAssignmentCounts = (\n items: PublishedSkillCatalogItemLike[],\n): PublishedSkillsSuccessState['assignmentCounts'] =>\n items.reduce<PublishedSkillsSuccessState['assignmentCounts']>(\n (counts, item) => {\n if (isUserPublishedSkillAssignment(item.assignmentSource)) {\n return {\n ...counts,\n user: counts.user + 1,\n };\n }\n\n if (item.assignmentSource === 'GLOBAL') {\n return {\n ...counts,\n global: counts.global + 1,\n };\n }\n\n if (item.assignmentSource === 'WORKSPACE') {\n return {\n ...counts,\n project: counts.project + 1,\n };\n }\n\n return {\n ...counts,\n other: counts.other + 1,\n };\n },\n {\n global: 0,\n project: 0,\n user: 0,\n other: 0,\n },\n );\n\nconst getSkillContextKind = (item: PublishedSkillCatalogItemLike): PublishedSkillSummary['contextKind'] => {\n if (item.assignmentSource === 'GLOBAL') return 'global';\n return 'project';\n};\n\nconst getRevision = (checksum: string, updatedAtCursor: string | null | undefined, fallbackTimestamp: string | null | undefined): string => {\n return `${checksum}:${updatedAtCursor ?? fallbackTimestamp ?? 'unpublished'}`;\n};\n\nexport const toPublishedSkillSummary = (item: PublishedSkillCatalogItemLike): PublishedSkillSummary => {\n const contextKind = getSkillContextKind(item);\n\n return {\n skillSlug: item.skill.slug,\n skillName: item.skill.name,\n artifactName: item.publishedArtifact.frontmatterName,\n artifactDescription: item.publishedArtifact.frontmatterDescription,\n whenToUse: item.skill.whenToUse ?? null,\n version: item.skillVersion.version,\n assignmentSource: item.assignmentSource,\n assignmentType: item.assignmentType,\n scopePath: item.scopePath,\n includeChildren: item.includeChildren ?? null,\n checksum: item.publishedArtifact.checksum,\n revision:\n item.publishedArtifact.revision ??\n getRevision(item.publishedArtifact.checksum, item.publishedArtifact.updatedAtCursor, item.publishedArtifact.publishedAt),\n updatedAtCursor: item.publishedArtifact.updatedAtCursor ?? item.publishedArtifact.publishedAt ?? 'unpublished',\n publishedAt: item.publishedArtifact.publishedAt ?? 'unpublished',\n fileCount: item.publishedArtifact.fileCount,\n identifiers: getSkillIdentifiers(item),\n tags: item.skill.tags.map(toPublishedSkillTagSummary),\n contextKind,\n installPolicy: item.skill.installPolicy,\n assignmentLabel: getPublishedSkillAssignmentLabel(item.assignmentSource),\n policyLabel: getPublishedSkillPolicyLabel({\n assignmentSource: item.assignmentSource,\n contextKind,\n policy: item.skill.installPolicy,\n }),\n };\n};\n\nexport const toPublishedSkillDetail = (item: PublishedSkillDetailItemLike): PublishedSkillDetail => ({\n ...toPublishedSkillSummary(item),\n skillId: item.skill.id,\n skillVersionId: item.skillVersion.id,\n artifactId: item.publishedArtifact.id,\n markdownDocument: buildSkillMarkdown(item),\n markdownBody: item.publishedArtifact.markdownBody,\n renderedContent: item.publishedArtifact.renderedContent,\n files: item.publishedArtifact.files,\n resources: item.publishedArtifact.files.filter((file) => file.relativePath !== 'SKILL.md'),\n});\n\nconst getWizardArtifactContextKind = (item: WizardArtifactCatalogItemLike): WizardArtifactSummary['contextKind'] => {\n if (item.assignmentSource === 'GLOBAL') return 'global';\n if (item.assignmentSource === 'CATALOG') return 'installable';\n return 'project';\n};\n\nconst getWizardArtifactIdentifiers = (item: WizardArtifactCatalogItemLike): string[] => {\n const candidates = [item.artifact.slug, item.artifactVersion.frontmatterName, item.artifact.name];\n const seen = new Set<string>();\n return candidates.reduce<string[]>((all, candidate) => {\n const normalized = candidate.trim();\n if (!normalized) return all;\n const cacheKey = normalized.toLowerCase();\n if (seen.has(cacheKey)) return all;\n seen.add(cacheKey);\n all.push(normalized);\n return all;\n }, []);\n};\n\nexport const toWizardArtifactSummary = (item: WizardArtifactCatalogItemLike): WizardArtifactSummary => {\n const contextKind = getWizardArtifactContextKind(item);\n return {\n artifactKind: item.artifact.kind,\n artifactSlug: item.artifact.slug,\n artifactName: item.artifactVersion.frontmatterName || item.artifact.name,\n artifactDescription: item.artifactVersion.frontmatterDescription || item.artifact.summary || '',\n whenToUse: item.artifact.whenToUse ?? null,\n version: item.artifactVersion.version,\n assignmentSource: item.assignmentSource,\n assignmentType: item.assignmentType,\n scopePath: item.scopePath,\n includeChildren: item.includeChildren ?? null,\n checksum: item.artifactVersion.checksum,\n revision:\n item.artifactVersion.revision ??\n getRevision(item.artifactVersion.checksum, item.artifactVersion.updatedAtCursor, item.artifactVersion.publishedAt),\n updatedAtCursor: item.artifactVersion.updatedAtCursor ?? item.artifactVersion.publishedAt ?? 'unpublished',\n publishedAt: item.artifactVersion.publishedAt ?? 'unpublished',\n fileCount: item.artifactVersion.fileCount,\n canonicalFilePath: item.artifactVersion.canonicalFilePath,\n identifiers: getWizardArtifactIdentifiers(item),\n contextKind,\n installPolicy: item.artifact.installPolicy,\n assignmentLabel: getPublishedSkillAssignmentLabel(item.assignmentSource),\n policyLabel: getPublishedSkillPolicyLabel({\n assignmentSource: item.assignmentSource,\n contextKind,\n policy: item.artifact.installPolicy,\n }),\n };\n};\n\nexport const buildWizardArtifactMarkdown = (item: WizardArtifactDetailLike): string => {\n const body = item.artifactVersion.markdownBody.trim() || item.artifactVersion.renderedContent.trim();\n if (body.endsWith('\\n')) return body;\n return `${body}\\n`;\n};\n\nexport const toWizardArtifactDetail = (item: WizardArtifactDetailLike): WizardArtifactDetail => ({\n ...toWizardArtifactSummary(item),\n artifactId: item.artifact.id,\n artifactVersionId: item.artifactVersion.id,\n markdownDocument: buildWizardArtifactMarkdown(item),\n markdownBody: item.artifactVersion.markdownBody,\n renderedContent: item.artifactVersion.renderedContent,\n files: item.artifactVersion.files,\n resources: item.artifactVersion.files.filter((file) => file.relativePath !== item.artifactVersion.canonicalFilePath),\n});\n\nexport const toWizardArtifactCatalog = (\n payload: WizardArtifactCatalogPayloadLike,\n options: { pluginId: string; availableTools: string[] },\n): WizardArtifactCatalogState => ({\n pluginId: options.pluginId,\n runtimeMode: 'tool_fetch_only',\n deliveryModel: 'backend_published_generic_artifacts',\n artifactKind: payload.artifactKind,\n workspace: payload.workspace,\n directoryPath: payload.directoryPath,\n availableTools: options.availableTools,\n artifactCount: payload.artifacts.length,\n artifacts: payload.artifacts.map(toWizardArtifactSummary),\n catalogArtifacts: payload.catalogArtifacts.map((item) =>\n toWizardArtifactSummary({\n ...item,\n assignmentSource: 'CATALOG',\n assignmentType: 'PATH',\n scopePath: '',\n includeChildren: true,\n }),\n ),\n});\n\nexport const toInstallableSkillSummary = (item: PublishedSkillInstallableCatalogItemLike): PublishedSkillSummary => ({\n skillSlug: item.skill.slug,\n skillName: item.skill.name,\n artifactName: item.publishedArtifact.frontmatterName,\n artifactDescription: item.publishedArtifact.frontmatterDescription,\n whenToUse: item.skill.whenToUse ?? null,\n version: item.skillVersion.version,\n assignmentSource: 'CATALOG',\n assignmentType: 'PATH',\n scopePath: '',\n includeChildren: true,\n checksum: item.publishedArtifact.checksum,\n revision:\n item.publishedArtifact.revision ??\n getRevision(item.publishedArtifact.checksum, item.publishedArtifact.updatedAtCursor, item.publishedArtifact.publishedAt),\n updatedAtCursor: item.publishedArtifact.updatedAtCursor ?? item.publishedArtifact.publishedAt ?? 'unpublished',\n publishedAt: item.publishedArtifact.publishedAt ?? 'unpublished',\n fileCount: item.publishedArtifact.fileCount,\n identifiers: getSkillIdentifiers({\n ...item,\n assignmentSource: 'CATALOG',\n assignmentType: 'PATH',\n scopePath: '',\n includeChildren: true,\n }),\n tags: item.skill.tags.map(toPublishedSkillTagSummary),\n contextKind: 'installable',\n installPolicy: item.skill.installPolicy,\n assignmentLabel: 'catalog skill',\n policyLabel: getPublishedSkillPolicyLabel({\n assignmentSource: 'CATALOG',\n contextKind: 'installable',\n policy: item.skill.installPolicy,\n }),\n});\n\nexport const toPublishedSkillCatalog = (\n payload: PublishedSkillCatalogPayloadLike,\n options: PublishedSkillCatalogOptions,\n): PublishedSkillsSuccessState => ({\n pluginId: options.pluginId,\n runtimeMode: 'tool_fetch_only',\n deliveryModel: 'backend_published_installed_effective_skills',\n workspace: payload.workspace,\n directoryPath: payload.directoryPath,\n rootSkillSeedPath: options.rootSkillSeedPath,\n availableTools: options.availableTools,\n publishedSkillCount: payload.skills.length,\n assignmentCounts: getPublishedSkillAssignmentCounts(payload.skills),\n facets: getPublishedSkillFacets(payload.skills),\n skills: payload.skills.map(toPublishedSkillSummary),\n});\n\nconst normalizeSkillIdentifier = (value: string): string => value.trim().toLowerCase();\n\nconst parseSkillIdentifiers = (value: string): string[] => {\n const seen = new Set<string>();\n\n return value\n .split(/[\\n,]/)\n .map((item) => item.trim())\n .filter((item) => item.length > 0)\n .filter((item) => {\n const normalized = normalizeSkillIdentifier(item);\n if (seen.has(normalized)) return false;\n seen.add(normalized);\n return true;\n });\n};\n\nconst mergeSkillIdentifiers = (values: string[]): string[] => {\n const seen = new Set<string>();\n\n return values.filter((value) => {\n const normalized = normalizeSkillIdentifier(value);\n if (!normalized || seen.has(normalized)) return false;\n seen.add(normalized);\n return true;\n });\n};\n\nexport const parseRequestedSkillArgs = (args: { skill?: string; skills?: string }): string[] => {\n const requestedSkills: string[] = [];\n\n if (typeof args.skill === 'string') {\n requestedSkills.push(...parseSkillIdentifiers(args.skill));\n }\n\n if (typeof args.skills === 'string') {\n requestedSkills.push(...parseSkillIdentifiers(args.skills));\n }\n\n return mergeSkillIdentifiers(requestedSkills);\n};\n\nexport const selectPublishedSkills = <TItem extends PublishedSkillCatalogItemLike>(\n payload: Omit<PublishedSkillCatalogPayloadLike<TItem>, 'skills'> & { skills: TItem[] },\n identifiers: string[],\n) => {\n const itemsByIdentifier = new Map<string, TItem>();\n\n for (const item of payload.skills) {\n for (const identifier of getSkillIdentifiers(item)) {\n itemsByIdentifier.set(normalizeSkillIdentifier(identifier), item);\n }\n }\n\n const selectedItems: TItem[] = [];\n const selectedKeys = new Set<string>();\n const missingIdentifiers: string[] = [];\n\n for (const identifier of identifiers) {\n const matched = itemsByIdentifier.get(normalizeSkillIdentifier(identifier));\n if (!matched) {\n missingIdentifiers.push(identifier);\n continue;\n }\n\n if (selectedKeys.has(matched.publishedArtifact.id)) {\n continue;\n }\n\n selectedKeys.add(matched.publishedArtifact.id);\n selectedItems.push(matched);\n }\n\n return {\n selectedItems,\n missingIdentifiers,\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getPublishedSkillAssignmentLabel","getPublishedSkillPolicyLabel","isUserPublishedSkillAssignment","toFrontmatterString","value","JSON","stringify","formatSkillLabel","item","artifactName","publishedArtifact","frontmatterName","trim","length","skill","name","buildSkillMarkdown","artifactBody","markdownBody","fallbackBody","renderedContent","body","startsWith","endsWith","description","frontmatterDescription","summary","frontmatter","join","toSupportingFileMetadata","files","count","paths","map","file","relativePath","contentType","size","getSkillIdentifiers","candidates","slug","seen","Set","reduce","all","candidate","normalized","cacheKey","toLowerCase","has","add","push","toPublishedSkillFacetSummary","facet","label","toPublishedSkillTagSummary","tag","getPublishedSkillFacets","items","facetsBySlug","Map","tags","set","values","sort","left","right","localeCompare","getPublishedSkillAssignmentCounts","counts","assignmentSource","user","global","project","other","getSkillContextKind","getRevision","checksum","updatedAtCursor","fallbackTimestamp","toPublishedSkillSummary","contextKind","skillSlug","skillName","artifactDescription","whenToUse","version","skillVersion","assignmentType","scopePath","includeChildren","revision","publishedAt","fileCount","identifiers","installPolicy","assignmentLabel","policyLabel","policy","relevance","recommendationReason","toPublishedSkillDetail","skillId","id","skillVersionId","artifactId","markdownDocument","resources","filter","supportingFiles","getWizardArtifactContextKind","getWizardArtifactIdentifiers","artifact","artifactVersion","toWizardArtifactSummary","artifactKind","kind","artifactSlug","canonicalFilePath","buildWizardArtifactMarkdown","toWizardArtifactDetail","artifactVersionId","toWizardArtifactCatalog","payload","options","pluginId","runtimeMode","deliveryModel","workspace","directoryPath","availableTools","artifactCount","artifacts","catalogArtifacts","toInstallableSkillSummary","toPublishedSkillCatalog","rootSkillSeedPath","publishedSkillCount","skills","assignmentCounts","facets","normalizeSkillIdentifier","parseSkillIdentifiers","split","mergeSkillIdentifiers","parseRequestedSkillArgs","args","requestedSkills","selectPublishedSkills","itemsByIdentifier","identifier","selectedItems","selectedKeys","missingIdentifiers","matched","get"],"sources":["../src/published-skills-transform.ts"],"sourcesContent":["import {\n getPublishedSkillAssignmentLabel,\n getPublishedSkillPolicyLabel,\n isUserPublishedSkillAssignment,\n} from './published-skills-terminology.js';\n\nexport { isUserPublishedSkillAssignment } from './published-skills-terminology.js';\n\ntype PublishedSkillFacetLike = {\n slug: string;\n label: string;\n description?: string | null;\n};\n\ntype PublishedSkillTagLike = {\n slug: string;\n label: string;\n description?: string | null;\n facet?: PublishedSkillFacetLike | null;\n};\n\ntype PublishedSkillInstallPolicy = 'GLOBAL_CONTEXT' | 'PROJECT_INSTALLABLE';\n\ntype RecommendationMetadataLike = {\n relevance?: number | null;\n recommendationReason?: string | null;\n};\n\ntype PublishedSkillCatalogItemLike = RecommendationMetadataLike & {\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren?: boolean | null;\n skill: {\n id: string;\n slug: string;\n name: string;\n summary?: string | null;\n whenToUse?: string | null;\n status: string;\n installPolicy: PublishedSkillInstallPolicy;\n tags: PublishedSkillTagLike[];\n };\n skillVersion: {\n id: string;\n version: string;\n title?: string | null;\n summary?: string | null;\n status: string;\n };\n publishedArtifact: {\n id: string;\n frontmatterName: string;\n frontmatterDescription: string;\n checksum: string;\n revision?: string | null;\n updatedAtCursor?: string | null;\n publishedAt?: string | null;\n fileCount: number;\n };\n};\n\ntype PublishedSkillArtifactFileLike = {\n id: string;\n relativePath: string;\n contentType: string;\n content: string;\n checksum: string;\n size: number;\n sortOrder: number;\n};\n\nexport type PublishedSkillSupportingFileMetadata = {\n count: number;\n paths: Array<{\n relativePath: string;\n contentType: string;\n size: number;\n }>;\n};\n\ntype PublishedSkillDetailItemLike = PublishedSkillCatalogItemLike & {\n publishedArtifact: PublishedSkillCatalogItemLike['publishedArtifact'] & {\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFileLike[];\n };\n};\n\ntype PublishedSkillInstallableCatalogItemLike = Pick<\n PublishedSkillCatalogItemLike,\n 'skill' | 'skillVersion' | 'publishedArtifact'\n> &\n RecommendationMetadataLike;\n\ntype PublishedSkillCatalogPayloadLike<TItem extends PublishedSkillCatalogItemLike = PublishedSkillCatalogItemLike> = {\n workspace: {\n id: string;\n slug: string;\n name: string;\n repositoryUrl?: string | null;\n defaultBranch?: string | null;\n status: string;\n } | null;\n directoryPath: string;\n skills: TItem[];\n catalogSkills: PublishedSkillInstallableCatalogItemLike[];\n userPreferences: {\n scopeKey: string;\n userKey: string;\n ignoredSkills: PublishedSkillCatalogItemLike[];\n };\n};\n\nexport type PublishedSkillFacetSummary = {\n slug: string;\n label: string;\n description: string | null;\n};\n\nexport type PublishedSkillTagSummary = {\n slug: string;\n label: string;\n description: string | null;\n facet: PublishedSkillFacetSummary | null;\n};\n\nexport type PublishedSkillSummary = {\n skillSlug: string;\n skillName: string;\n artifactName: string;\n artifactDescription: string;\n whenToUse: string | null;\n version: string;\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren: boolean | null;\n checksum: string;\n revision: string;\n updatedAtCursor: string;\n publishedAt: string;\n fileCount: number;\n identifiers: string[];\n tags: PublishedSkillTagSummary[];\n contextKind: 'global' | 'project' | 'installable';\n installPolicy: PublishedSkillInstallPolicy;\n assignmentLabel: string;\n policyLabel: string;\n relevance: number | null;\n recommendationReason: string | null;\n};\n\nexport type PublishedSkillDetail = PublishedSkillSummary & {\n skillId: string;\n skillVersionId: string;\n artifactId: string;\n markdownDocument: string;\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFileLike[];\n resources: PublishedSkillArtifactFileLike[];\n supportingFiles: PublishedSkillSupportingFileMetadata;\n};\n\ntype WizardArtifactKind = 'SKILL' | 'DESIGN_DOC';\n\ntype WizardArtifactCatalogItemLike = RecommendationMetadataLike & {\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren?: boolean | null;\n artifact: {\n id: string;\n kind: WizardArtifactKind;\n slug: string;\n name: string;\n summary?: string | null;\n whenToUse?: string | null;\n status: string;\n installPolicy: PublishedSkillInstallPolicy;\n };\n artifactVersion: {\n id: string;\n version: string;\n title?: string | null;\n summary?: string | null;\n status: string;\n frontmatterName: string;\n frontmatterDescription: string;\n checksum: string;\n revision?: string | null;\n updatedAtCursor?: string | null;\n canonicalFilePath: string;\n publishedAt?: string | null;\n fileCount: number;\n };\n};\n\ntype WizardArtifactDetailLike = WizardArtifactCatalogItemLike & {\n artifactVersion: WizardArtifactCatalogItemLike['artifactVersion'] & {\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFileLike[];\n };\n};\n\ntype WizardArtifactCatalogPayloadLike = {\n artifactKind: WizardArtifactKind;\n workspace: PublishedSkillCatalogPayloadLike['workspace'];\n directoryPath: string;\n artifacts: WizardArtifactCatalogItemLike[];\n catalogArtifacts: (Pick<WizardArtifactCatalogItemLike, 'artifact' | 'artifactVersion'> & RecommendationMetadataLike)[];\n artifactPreferences: {\n scopeKey: string;\n userKey: string;\n ignoredArtifacts: WizardArtifactCatalogItemLike[];\n };\n};\n\nexport type WizardArtifactSummary = {\n artifactKind: WizardArtifactKind;\n artifactSlug: string;\n artifactName: string;\n artifactDescription: string;\n whenToUse: string | null;\n version: string;\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren: boolean | null;\n checksum: string;\n revision: string;\n updatedAtCursor: string;\n publishedAt: string;\n fileCount: number;\n canonicalFilePath: string;\n identifiers: string[];\n contextKind: 'global' | 'project' | 'installable';\n installPolicy: PublishedSkillInstallPolicy;\n assignmentLabel: string;\n policyLabel: string;\n relevance: number | null;\n recommendationReason: string | null;\n};\n\nexport type WizardArtifactDetail = WizardArtifactSummary & {\n artifactId: string;\n artifactVersionId: string;\n markdownDocument: string;\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFileLike[];\n resources: PublishedSkillArtifactFileLike[];\n supportingFiles: PublishedSkillSupportingFileMetadata;\n};\n\nexport type WizardArtifactCatalogState = {\n pluginId: string;\n runtimeMode: 'tool_fetch_only';\n deliveryModel: 'backend_published_generic_artifacts';\n artifactKind: WizardArtifactKind;\n workspace: PublishedSkillCatalogPayloadLike['workspace'];\n directoryPath: string;\n availableTools: string[];\n artifactCount: number;\n artifacts: WizardArtifactSummary[];\n catalogArtifacts: WizardArtifactSummary[];\n};\n\nexport type PublishedSkillsSuccessState = {\n pluginId: string;\n runtimeMode: 'tool_fetch_only';\n deliveryModel: 'backend_published_installed_effective_skills';\n workspace: PublishedSkillCatalogPayloadLike['workspace'];\n directoryPath: string;\n rootSkillSeedPath: string;\n availableTools: string[];\n publishedSkillCount: number;\n assignmentCounts: {\n global: number;\n project: number;\n user: number;\n other: number;\n };\n facets: PublishedSkillFacetSummary[];\n skills: PublishedSkillSummary[];\n};\n\ntype PublishedSkillCatalogOptions = {\n pluginId: string;\n rootSkillSeedPath: string;\n availableTools: string[];\n};\n\nconst toFrontmatterString = (value: string): string => JSON.stringify(value);\n\nexport const formatSkillLabel = (item: PublishedSkillCatalogItemLike): string => {\n const artifactName = item.publishedArtifact.frontmatterName.trim();\n if (artifactName.length > 0) return artifactName;\n return item.skill.name;\n};\n\nexport const buildSkillMarkdown = (item: PublishedSkillDetailItemLike): string => {\n const artifactBody = item.publishedArtifact.markdownBody.trim();\n const fallbackBody = item.publishedArtifact.renderedContent.trim();\n const body = artifactBody || fallbackBody;\n\n if (body.startsWith('---')) {\n return body.endsWith('\\n') ? body : `${body}\\n`;\n }\n\n const name = formatSkillLabel(item);\n const description = item.publishedArtifact.frontmatterDescription.trim() || item.skill.summary?.trim() || '';\n const frontmatter = ['---', `name: ${toFrontmatterString(name)}`, `description: ${toFrontmatterString(description)}`, '---'].join(\n '\\n',\n );\n\n if (!body) {\n return `${frontmatter}\\n`;\n }\n\n return `${frontmatter}\\n\\n${body.endsWith('\\n') ? body : `${body}\\n`}`;\n};\n\nconst toSupportingFileMetadata = (files: PublishedSkillArtifactFileLike[]): PublishedSkillSupportingFileMetadata => ({\n count: files.length,\n paths: files.map((file) => ({\n relativePath: file.relativePath,\n contentType: file.contentType,\n size: file.size,\n })),\n});\n\nconst getSkillIdentifiers = (item: PublishedSkillCatalogItemLike): string[] => {\n const candidates = [item.skill.slug, item.publishedArtifact.frontmatterName, item.skill.name];\n const seen = new Set<string>();\n\n return candidates.reduce<string[]>((all, candidate) => {\n const normalized = candidate.trim();\n if (!normalized) return all;\n\n const cacheKey = normalized.toLowerCase();\n if (seen.has(cacheKey)) return all;\n\n seen.add(cacheKey);\n all.push(normalized);\n return all;\n }, []);\n};\n\nconst toPublishedSkillFacetSummary = (facet: PublishedSkillFacetLike): PublishedSkillFacetSummary => ({\n slug: facet.slug,\n label: facet.label,\n description: facet.description ?? null,\n});\n\nconst toPublishedSkillTagSummary = (tag: PublishedSkillTagLike): PublishedSkillTagSummary => ({\n slug: tag.slug,\n label: tag.label,\n description: tag.description ?? null,\n facet: tag.facet ? toPublishedSkillFacetSummary(tag.facet) : null,\n});\n\nconst getPublishedSkillFacets = (items: PublishedSkillCatalogItemLike[]): PublishedSkillFacetSummary[] => {\n const facetsBySlug = new Map<string, PublishedSkillFacetSummary>();\n\n for (const item of items) {\n for (const tag of item.skill.tags) {\n if (!tag.facet) continue;\n if (facetsBySlug.has(tag.facet.slug)) continue;\n facetsBySlug.set(tag.facet.slug, toPublishedSkillFacetSummary(tag.facet));\n }\n }\n\n return [...facetsBySlug.values()].sort((left, right) => left.slug.localeCompare(right.slug));\n};\n\nconst getPublishedSkillAssignmentCounts = (\n items: PublishedSkillCatalogItemLike[],\n): PublishedSkillsSuccessState['assignmentCounts'] =>\n items.reduce<PublishedSkillsSuccessState['assignmentCounts']>(\n (counts, item) => {\n if (isUserPublishedSkillAssignment(item.assignmentSource)) {\n return {\n ...counts,\n user: counts.user + 1,\n };\n }\n\n if (item.assignmentSource === 'GLOBAL') {\n return {\n ...counts,\n global: counts.global + 1,\n };\n }\n\n if (item.assignmentSource === 'WORKSPACE') {\n return {\n ...counts,\n project: counts.project + 1,\n };\n }\n\n return {\n ...counts,\n other: counts.other + 1,\n };\n },\n {\n global: 0,\n project: 0,\n user: 0,\n other: 0,\n },\n );\n\nconst getSkillContextKind = (item: PublishedSkillCatalogItemLike): PublishedSkillSummary['contextKind'] => {\n if (item.assignmentSource === 'GLOBAL') return 'global';\n return 'project';\n};\n\nconst getRevision = (checksum: string, updatedAtCursor: string | null | undefined, fallbackTimestamp: string | null | undefined): string => {\n return `${checksum}:${updatedAtCursor ?? fallbackTimestamp ?? 'unpublished'}`;\n};\n\nexport const toPublishedSkillSummary = (item: PublishedSkillCatalogItemLike): PublishedSkillSummary => {\n const contextKind = getSkillContextKind(item);\n\n return {\n skillSlug: item.skill.slug,\n skillName: item.skill.name,\n artifactName: item.publishedArtifact.frontmatterName,\n artifactDescription: item.publishedArtifact.frontmatterDescription,\n whenToUse: item.skill.whenToUse ?? null,\n version: item.skillVersion.version,\n assignmentSource: item.assignmentSource,\n assignmentType: item.assignmentType,\n scopePath: item.scopePath,\n includeChildren: item.includeChildren ?? null,\n checksum: item.publishedArtifact.checksum,\n revision:\n item.publishedArtifact.revision ??\n getRevision(item.publishedArtifact.checksum, item.publishedArtifact.updatedAtCursor, item.publishedArtifact.publishedAt),\n updatedAtCursor: item.publishedArtifact.updatedAtCursor ?? item.publishedArtifact.publishedAt ?? 'unpublished',\n publishedAt: item.publishedArtifact.publishedAt ?? 'unpublished',\n fileCount: item.publishedArtifact.fileCount,\n identifiers: getSkillIdentifiers(item),\n tags: item.skill.tags.map(toPublishedSkillTagSummary),\n contextKind,\n installPolicy: item.skill.installPolicy,\n assignmentLabel: getPublishedSkillAssignmentLabel(item.assignmentSource),\n policyLabel: getPublishedSkillPolicyLabel({\n assignmentSource: item.assignmentSource,\n contextKind,\n policy: item.skill.installPolicy,\n }),\n relevance: item.relevance ?? null,\n recommendationReason: item.recommendationReason ?? null,\n };\n};\n\nexport const toPublishedSkillDetail = (item: PublishedSkillDetailItemLike): PublishedSkillDetail => ({\n ...toPublishedSkillSummary(item),\n skillId: item.skill.id,\n skillVersionId: item.skillVersion.id,\n artifactId: item.publishedArtifact.id,\n markdownDocument: buildSkillMarkdown(item),\n markdownBody: item.publishedArtifact.markdownBody,\n renderedContent: item.publishedArtifact.renderedContent,\n files: item.publishedArtifact.files,\n resources: item.publishedArtifact.files.filter((file) => file.relativePath !== 'SKILL.md'),\n supportingFiles: toSupportingFileMetadata(item.publishedArtifact.files.filter((file) => file.relativePath !== 'SKILL.md')),\n});\n\nconst getWizardArtifactContextKind = (item: WizardArtifactCatalogItemLike): WizardArtifactSummary['contextKind'] => {\n if (item.assignmentSource === 'GLOBAL') return 'global';\n if (item.assignmentSource === 'CATALOG') return 'installable';\n return 'project';\n};\n\nconst getWizardArtifactIdentifiers = (item: WizardArtifactCatalogItemLike): string[] => {\n const candidates = [item.artifact.slug, item.artifactVersion.frontmatterName, item.artifact.name];\n const seen = new Set<string>();\n return candidates.reduce<string[]>((all, candidate) => {\n const normalized = candidate.trim();\n if (!normalized) return all;\n const cacheKey = normalized.toLowerCase();\n if (seen.has(cacheKey)) return all;\n seen.add(cacheKey);\n all.push(normalized);\n return all;\n }, []);\n};\n\nexport const toWizardArtifactSummary = (item: WizardArtifactCatalogItemLike): WizardArtifactSummary => {\n const contextKind = getWizardArtifactContextKind(item);\n return {\n artifactKind: item.artifact.kind,\n artifactSlug: item.artifact.slug,\n artifactName: item.artifactVersion.frontmatterName || item.artifact.name,\n artifactDescription: item.artifactVersion.frontmatterDescription || item.artifact.summary || '',\n whenToUse: item.artifact.whenToUse ?? null,\n version: item.artifactVersion.version,\n assignmentSource: item.assignmentSource,\n assignmentType: item.assignmentType,\n scopePath: item.scopePath,\n includeChildren: item.includeChildren ?? null,\n checksum: item.artifactVersion.checksum,\n revision:\n item.artifactVersion.revision ??\n getRevision(item.artifactVersion.checksum, item.artifactVersion.updatedAtCursor, item.artifactVersion.publishedAt),\n updatedAtCursor: item.artifactVersion.updatedAtCursor ?? item.artifactVersion.publishedAt ?? 'unpublished',\n publishedAt: item.artifactVersion.publishedAt ?? 'unpublished',\n fileCount: item.artifactVersion.fileCount,\n canonicalFilePath: item.artifactVersion.canonicalFilePath,\n identifiers: getWizardArtifactIdentifiers(item),\n contextKind,\n installPolicy: item.artifact.installPolicy,\n assignmentLabel: getPublishedSkillAssignmentLabel(item.assignmentSource),\n policyLabel: getPublishedSkillPolicyLabel({\n assignmentSource: item.assignmentSource,\n contextKind,\n policy: item.artifact.installPolicy,\n }),\n relevance: item.relevance ?? null,\n recommendationReason: item.recommendationReason ?? null,\n };\n};\n\nexport const buildWizardArtifactMarkdown = (item: WizardArtifactDetailLike): string => {\n const body = item.artifactVersion.markdownBody.trim() || item.artifactVersion.renderedContent.trim();\n if (body.endsWith('\\n')) return body;\n return `${body}\\n`;\n};\n\nexport const toWizardArtifactDetail = (item: WizardArtifactDetailLike): WizardArtifactDetail => ({\n ...toWizardArtifactSummary(item),\n artifactId: item.artifact.id,\n artifactVersionId: item.artifactVersion.id,\n markdownDocument: buildWizardArtifactMarkdown(item),\n markdownBody: item.artifactVersion.markdownBody,\n renderedContent: item.artifactVersion.renderedContent,\n files: item.artifactVersion.files,\n resources: item.artifactVersion.files.filter((file) => file.relativePath !== item.artifactVersion.canonicalFilePath),\n supportingFiles: toSupportingFileMetadata(\n item.artifactVersion.files.filter((file) => file.relativePath !== item.artifactVersion.canonicalFilePath),\n ),\n});\n\nexport const toWizardArtifactCatalog = (\n payload: WizardArtifactCatalogPayloadLike,\n options: { pluginId: string; availableTools: string[] },\n): WizardArtifactCatalogState => ({\n pluginId: options.pluginId,\n runtimeMode: 'tool_fetch_only',\n deliveryModel: 'backend_published_generic_artifacts',\n artifactKind: payload.artifactKind,\n workspace: payload.workspace,\n directoryPath: payload.directoryPath,\n availableTools: options.availableTools,\n artifactCount: payload.artifacts.length,\n artifacts: payload.artifacts.map(toWizardArtifactSummary),\n catalogArtifacts: payload.catalogArtifacts.map((item) =>\n toWizardArtifactSummary({\n ...item,\n assignmentSource: 'CATALOG',\n assignmentType: 'PATH',\n scopePath: '',\n includeChildren: true,\n }),\n ),\n});\n\nexport const toInstallableSkillSummary = (item: PublishedSkillInstallableCatalogItemLike): PublishedSkillSummary => ({\n skillSlug: item.skill.slug,\n skillName: item.skill.name,\n artifactName: item.publishedArtifact.frontmatterName,\n artifactDescription: item.publishedArtifact.frontmatterDescription,\n whenToUse: item.skill.whenToUse ?? null,\n version: item.skillVersion.version,\n assignmentSource: 'CATALOG',\n assignmentType: 'PATH',\n scopePath: '',\n includeChildren: true,\n checksum: item.publishedArtifact.checksum,\n revision:\n item.publishedArtifact.revision ??\n getRevision(item.publishedArtifact.checksum, item.publishedArtifact.updatedAtCursor, item.publishedArtifact.publishedAt),\n updatedAtCursor: item.publishedArtifact.updatedAtCursor ?? item.publishedArtifact.publishedAt ?? 'unpublished',\n publishedAt: item.publishedArtifact.publishedAt ?? 'unpublished',\n fileCount: item.publishedArtifact.fileCount,\n identifiers: getSkillIdentifiers({\n ...item,\n assignmentSource: 'CATALOG',\n assignmentType: 'PATH',\n scopePath: '',\n includeChildren: true,\n }),\n tags: item.skill.tags.map(toPublishedSkillTagSummary),\n contextKind: 'installable',\n installPolicy: item.skill.installPolicy,\n assignmentLabel: 'catalog skill',\n policyLabel: getPublishedSkillPolicyLabel({\n assignmentSource: 'CATALOG',\n contextKind: 'installable',\n policy: item.skill.installPolicy,\n }),\n relevance: item.relevance ?? null,\n recommendationReason: item.recommendationReason ?? null,\n});\n\nexport const toPublishedSkillCatalog = (\n payload: PublishedSkillCatalogPayloadLike,\n options: PublishedSkillCatalogOptions,\n): PublishedSkillsSuccessState => ({\n pluginId: options.pluginId,\n runtimeMode: 'tool_fetch_only',\n deliveryModel: 'backend_published_installed_effective_skills',\n workspace: payload.workspace,\n directoryPath: payload.directoryPath,\n rootSkillSeedPath: options.rootSkillSeedPath,\n availableTools: options.availableTools,\n publishedSkillCount: payload.skills.length,\n assignmentCounts: getPublishedSkillAssignmentCounts(payload.skills),\n facets: getPublishedSkillFacets(payload.skills),\n skills: payload.skills.map(toPublishedSkillSummary),\n});\n\nconst normalizeSkillIdentifier = (value: string): string => value.trim().toLowerCase();\n\nconst parseSkillIdentifiers = (value: string): string[] => {\n const seen = new Set<string>();\n\n return value\n .split(/[\\n,]/)\n .map((item) => item.trim())\n .filter((item) => item.length > 0)\n .filter((item) => {\n const normalized = normalizeSkillIdentifier(item);\n if (seen.has(normalized)) return false;\n seen.add(normalized);\n return true;\n });\n};\n\nconst mergeSkillIdentifiers = (values: string[]): string[] => {\n const seen = new Set<string>();\n\n return values.filter((value) => {\n const normalized = normalizeSkillIdentifier(value);\n if (!normalized || seen.has(normalized)) return false;\n seen.add(normalized);\n return true;\n });\n};\n\nexport const parseRequestedSkillArgs = (args: { skill?: string; skills?: string }): string[] => {\n const requestedSkills: string[] = [];\n\n if (typeof args.skill === 'string') {\n requestedSkills.push(...parseSkillIdentifiers(args.skill));\n }\n\n if (typeof args.skills === 'string') {\n requestedSkills.push(...parseSkillIdentifiers(args.skills));\n }\n\n return mergeSkillIdentifiers(requestedSkills);\n};\n\nexport const selectPublishedSkills = <TItem extends PublishedSkillCatalogItemLike>(\n payload: Omit<PublishedSkillCatalogPayloadLike<TItem>, 'skills'> & { skills: TItem[] },\n identifiers: string[],\n) => {\n const itemsByIdentifier = new Map<string, TItem>();\n\n for (const item of payload.skills) {\n for (const identifier of getSkillIdentifiers(item)) {\n itemsByIdentifier.set(normalizeSkillIdentifier(identifier), item);\n }\n }\n\n const selectedItems: TItem[] = [];\n const selectedKeys = new Set<string>();\n const missingIdentifiers: string[] = [];\n\n for (const identifier of identifiers) {\n const matched = itemsByIdentifier.get(normalizeSkillIdentifier(identifier));\n if (!matched) {\n missingIdentifiers.push(identifier);\n continue;\n }\n\n if (selectedKeys.has(matched.publishedArtifact.id)) {\n continue;\n }\n\n selectedKeys.add(matched.publishedArtifact.id);\n selectedItems.push(matched);\n }\n\n return {\n selectedItems,\n missingIdentifiers,\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -22,18 +22,19 @@ export declare const fetchPublishedSkillsGraphQl: <TData>({ worktree, config, qu
22
22
  ok: false;
23
23
  }>;
24
24
  }>;
25
- export declare const fetchPublishedSkillsCatalog: (worktree: string, config: ResolvedConfig, resolution: WorkspaceResolution, signal: AbortSignal, onAuthStateChanged?: () => void) => Promise<FetchResult>;
26
- export declare const fetchWizardArtifactsCatalog: (worktree: string, config: ResolvedConfig, resolution: WorkspaceResolution, artifactKind: WizardArtifactKind, signal: AbortSignal, onAuthStateChanged?: () => void) => Promise<WizardArtifactFetchResult>;
25
+ export declare const fetchPublishedSkillsCatalog: (worktree: string, config: ResolvedConfig, resolution: WorkspaceResolution, signal: AbortSignal, recommendationContext?: string | null, onAuthStateChanged?: () => void) => Promise<FetchResult>;
26
+ export declare const fetchWizardArtifactsCatalog: (worktree: string, config: ResolvedConfig, resolution: WorkspaceResolution, artifactKind: WizardArtifactKind, signal: AbortSignal, recommendationContext?: string | null, onAuthStateChanged?: () => void) => Promise<WizardArtifactFetchResult>;
27
27
  export declare const maybePersistWorkspaceSlugFromCatalog: ({ config, resolution, fetchResult, }: {
28
28
  config: ResolvedConfig;
29
29
  resolution: WorkspaceResolution;
30
30
  fetchResult: FetchResult;
31
31
  }) => Promise<void>;
32
- export declare const fetchPublishedSkillDetail: ({ worktree, config, resolution, skillVersionId, signal, onAuthStateChanged, purpose, }: {
32
+ export declare const fetchPublishedSkillDetail: ({ worktree, config, resolution, skillVersionId, artifactVersionId, signal, onAuthStateChanged, purpose, }: {
33
33
  worktree: string;
34
34
  config: ResolvedConfig;
35
35
  resolution: WorkspaceResolution;
36
36
  skillVersionId: string;
37
+ artifactVersionId: string;
37
38
  signal: AbortSignal;
38
39
  onAuthStateChanged?: () => void;
39
40
  purpose: PublishedSkillArtifactDetailPurpose;
@@ -205,13 +205,16 @@ export const fetchPublishedSkillsGraphQl = async ({
205
205
  fetchedAt
206
206
  };
207
207
  };
208
- export const fetchPublishedSkillsCatalog = async (worktree, config, resolution, signal, onAuthStateChanged) => {
208
+ export const fetchPublishedSkillsCatalog = async (worktree, config, resolution, signal, recommendationContext, onAuthStateChanged) => {
209
209
  const response = await fetchPublishedSkillsGraphQl({
210
210
  worktree,
211
211
  config,
212
212
  query: PUBLISHED_SKILLS_CATALOG_QUERY,
213
213
  variables: {
214
- input: toDeliveryInput(resolution)
214
+ input: {
215
+ ...toDeliveryInput(resolution),
216
+ recommendationContext
217
+ }
215
218
  },
216
219
  signal,
217
220
  onAuthStateChanged
@@ -237,7 +240,7 @@ export const fetchPublishedSkillsCatalog = async (worktree, config, resolution,
237
240
  source: 'network'
238
241
  };
239
242
  };
240
- export const fetchWizardArtifactsCatalog = async (worktree, config, resolution, artifactKind, signal, onAuthStateChanged) => {
243
+ export const fetchWizardArtifactsCatalog = async (worktree, config, resolution, artifactKind, signal, recommendationContext, onAuthStateChanged) => {
241
244
  const response = await fetchPublishedSkillsGraphQl({
242
245
  worktree,
243
246
  config,
@@ -245,7 +248,8 @@ export const fetchWizardArtifactsCatalog = async (worktree, config, resolution,
245
248
  variables: {
246
249
  input: {
247
250
  ...toDeliveryInput(resolution),
248
- artifactKind
251
+ artifactKind,
252
+ recommendationContext
249
253
  }
250
254
  },
251
255
  signal,
@@ -295,10 +299,32 @@ export const fetchPublishedSkillDetail = async ({
295
299
  config,
296
300
  resolution,
297
301
  skillVersionId,
302
+ artifactVersionId,
298
303
  signal,
299
304
  onAuthStateChanged,
300
305
  purpose
301
306
  }) => {
307
+ const wizardArtifactResponse = await fetchPublishedSkillsGraphQl({
308
+ worktree,
309
+ config,
310
+ query: WIZARD_ARTIFACT_DETAIL_QUERY,
311
+ variables: {
312
+ input: {
313
+ ...toDeliveryInput(resolution),
314
+ artifactKind: 'SKILL',
315
+ artifactVersionId,
316
+ purpose
317
+ }
318
+ },
319
+ signal,
320
+ onAuthStateChanged
321
+ });
322
+ if (!wizardArtifactResponse.ok) return wizardArtifactResponse;
323
+ const wizardArtifact = wizardArtifactResponse.data.pluginWizardArtifactVersion;
324
+ if (wizardArtifact) return {
325
+ ok: true,
326
+ artifact: wizardArtifact
327
+ };
302
328
  const response = await fetchPublishedSkillsGraphQl({
303
329
  worktree,
304
330
  config,
@@ -1 +1 @@
1
- {"version":3,"names":["CURRENT_USER_ROLE_QUERY","PUBLISHED_SKILL_DETAIL_QUERY","PUBLISHED_SKILLS_CATALOG_QUERY","WIZARD_ARTIFACT_DETAIL_QUERY","WIZARD_ARTIFACTS_CATALOG_QUERY","clearAuthState","resolveStoredAuthState","upsertWorkspaceSlugMapping","writeAuthState","toWorkspaceSlug","toDeliveryInput","isUnauthorizedGraphQlMessage","message","normalizedMessage","toLowerCase","includes","isPluginEditorRole","value","hydrateStoredAuthStateRole","worktree","config","signal","onAuthStateChanged","authState","role","response","fetch","graphqlUrl","method","headers","authorization","sessionToken","body","JSON","stringify","query","variables","status","authStatePath","ok","json","errors","some","error","me","data","user","hydratedAuthState","userId","_id","trim","length","email","fetchPublishedSkillsGraphQl","fetchedAt","Date","toISOString","result","authMode","source","Error","map","join","fetchPublishedSkillsCatalog","resolution","input","payload","pluginPublishedSkills","fetchWizardArtifactsCatalog","artifactKind","pluginWizardArtifacts","maybePersistWorkspaceSlugFromCatalog","fetchResult","backendWorkspaceSlug","workspace","slug","normalizedWorkspaceSlug","workspaceSlug","workspaceSlugSource","configFile","repositoryUrl","repositoryRoot","fetchPublishedSkillDetail","skillVersionId","purpose","artifact","pluginPublishedSkillVersionArtifact","fetchWizardArtifactDetail","artifactVersionId","pluginWizardArtifactVersion"],"sources":["../../src/server/client.ts"],"sourcesContent":["import {\n CURRENT_USER_ROLE_QUERY,\n PUBLISHED_SKILL_DETAIL_QUERY,\n PUBLISHED_SKILLS_CATALOG_QUERY,\n WIZARD_ARTIFACT_DETAIL_QUERY,\n WIZARD_ARTIFACTS_CATALOG_QUERY,\n} from '../graphql-operations.js';\nimport { clearAuthState, resolveStoredAuthState, upsertWorkspaceSlugMapping, writeAuthState } from './auth-store.js';\nimport { toWorkspaceSlug } from './path-utils.js';\nimport { toDeliveryInput } from './workspace.js';\nimport type {\n AuthState,\n CurrentUserRoleResponse,\n FetchResult,\n GraphQLResponse,\n PublishedSkillArtifactDetailPayload,\n PublishedSkillArtifactDetailPurpose,\n PublishedSkillCatalogResponse,\n PublishedSkillDetailResponse,\n ResolvedConfig,\n WizardArtifactCatalogResponse,\n WizardArtifactDetailPayload,\n WizardArtifactDetailResponse,\n WizardArtifactFetchResult,\n WizardArtifactKind,\n WorkspaceResolution,\n} from './types.js';\n\nconst isUnauthorizedGraphQlMessage = (message: string): boolean => {\n const normalizedMessage = message.toLowerCase();\n return normalizedMessage.includes('not authorized') || normalizedMessage.includes('unauthorized');\n};\n\nconst isPluginEditorRole = (value: unknown): value is NonNullable<AuthState['role']> => {\n return value === 'ADMIN' || value === 'EDITOR';\n};\n\nexport const hydrateStoredAuthStateRole = async ({\n worktree,\n config,\n signal,\n onAuthStateChanged,\n}: {\n worktree: string;\n config: ResolvedConfig;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n}): Promise<AuthState | null> => {\n const authState = await resolveStoredAuthState(worktree, config);\n if (!authState) return null;\n if (authState.role) return authState;\n\n let response: Response;\n\n try {\n response = await fetch(config.graphqlUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${authState.sessionToken}`,\n },\n body: JSON.stringify({ query: CURRENT_USER_ROLE_QUERY, variables: {} }),\n signal,\n });\n } catch {\n return authState;\n }\n\n if (response.status === 401 || response.status === 403) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return null;\n }\n\n if (!response.ok) return authState;\n\n let body: GraphQLResponse<CurrentUserRoleResponse>;\n\n try {\n body = (await response.json()) as GraphQLResponse<CurrentUserRoleResponse>;\n } catch {\n return authState;\n }\n\n if (body.errors?.some((error) => isUnauthorizedGraphQlMessage(error.message))) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return null;\n }\n\n const me = body.data?.user?.me;\n if (!isPluginEditorRole(me?.role)) return authState;\n\n const hydratedAuthState: AuthState = {\n ...authState,\n userId: typeof me._id === 'string' && me._id.trim().length > 0 ? me._id : authState.userId,\n email: typeof me.email === 'string' && me.email.trim().length > 0 ? me.email : authState.email,\n role: me.role,\n };\n\n await writeAuthState(config.authStatePath, hydratedAuthState);\n return hydratedAuthState;\n};\n\nexport const fetchPublishedSkillsGraphQl = async <TData>({\n worktree,\n config,\n query,\n variables,\n signal,\n onAuthStateChanged,\n}: {\n worktree: string;\n config: ResolvedConfig;\n query: string;\n variables: Record<string, unknown>;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n}): Promise<\n | { ok: true; data: TData; fetchedAt: string }\n | { ok: false; result: Extract<FetchResult, { ok: false }> }\n> => {\n const authState = await resolveStoredAuthState(worktree, config);\n const fetchedAt = new Date().toISOString();\n\n if (!authState) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'missing_auth',\n authMode: 'missing',\n message:\n 'No plugin session is stored. Interactive opencode_wizard_published_skills_fetch can bootstrap browser login automatically when needed. Configured backend and GraphQL URLs are shown for visibility, but no GraphQL request was made because auth is missing.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n let response: Response;\n\n try {\n response = await fetch(config.graphqlUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${authState.sessionToken}`,\n },\n body: JSON.stringify({ query, variables }),\n signal,\n });\n } catch (error) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: error instanceof Error ? error.message : 'Unknown fetch error',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (response.status === 401 || response.status === 403) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return {\n ok: false,\n result: {\n ok: false,\n status: 'missing_auth',\n authMode: 'session',\n message:\n 'Stored plugin session was rejected by the backend. Retry opencode_wizard_published_skills_fetch to bootstrap a fresh browser login automatically.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (!response.ok) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: `GraphQL request failed with HTTP ${response.status}.`,\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n let body: GraphQLResponse<TData>;\n\n try {\n body = (await response.json()) as GraphQLResponse<TData>;\n } catch (error) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: `GraphQL response was not valid JSON: ${error instanceof Error ? error.message : 'Unknown parse error'}`,\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (body.errors?.length) {\n const message = body.errors.map((error) => error.message).join('; ');\n\n if (body.errors.some((error) => isUnauthorizedGraphQlMessage(error.message))) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return {\n ok: false,\n result: {\n ok: false,\n status: 'missing_auth',\n authMode: 'session',\n message:\n 'Stored plugin session is no longer valid. Retry opencode_wizard_published_skills_fetch to bootstrap a fresh browser login automatically.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n return {\n ok: false,\n result: { ok: false, status: 'request_failed', authMode: 'session', message, fetchedAt, source: 'network' },\n };\n }\n\n if (!body.data) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include data.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n return { ok: true, data: body.data, fetchedAt };\n};\n\nexport const fetchPublishedSkillsCatalog = async (\n worktree: string,\n config: ResolvedConfig,\n resolution: WorkspaceResolution,\n signal: AbortSignal,\n onAuthStateChanged?: () => void,\n): Promise<FetchResult> => {\n const response = await fetchPublishedSkillsGraphQl<PublishedSkillCatalogResponse>({\n worktree,\n config,\n query: PUBLISHED_SKILLS_CATALOG_QUERY,\n variables: { input: toDeliveryInput(resolution) },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response.result;\n\n const payload = response.data.pluginPublishedSkills;\n\n if (!payload) {\n return {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include pluginPublishedSkills.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n }\n\n return {\n ok: true,\n status: 'ready',\n authMode: 'session',\n payload,\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n};\n\nexport const fetchWizardArtifactsCatalog = async (\n worktree: string,\n config: ResolvedConfig,\n resolution: WorkspaceResolution,\n artifactKind: WizardArtifactKind,\n signal: AbortSignal,\n onAuthStateChanged?: () => void,\n): Promise<WizardArtifactFetchResult> => {\n const response = await fetchPublishedSkillsGraphQl<WizardArtifactCatalogResponse>({\n worktree,\n config,\n query: WIZARD_ARTIFACTS_CATALOG_QUERY,\n variables: { input: { ...toDeliveryInput(resolution), artifactKind } },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response.result;\n\n const payload = response.data.pluginWizardArtifacts;\n if (!payload) {\n return {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include pluginWizardArtifacts.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n }\n\n return {\n ok: true,\n status: 'ready',\n authMode: 'session',\n payload,\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n};\n\nexport const maybePersistWorkspaceSlugFromCatalog = async ({\n config,\n resolution,\n fetchResult,\n}: {\n config: ResolvedConfig;\n resolution: WorkspaceResolution;\n fetchResult: FetchResult;\n}): Promise<void> => {\n if (!fetchResult.ok) return;\n\n const backendWorkspaceSlug = fetchResult.payload.workspace?.slug?.trim();\n if (!backendWorkspaceSlug) return;\n\n const normalizedWorkspaceSlug = toWorkspaceSlug(backendWorkspaceSlug);\n if (!normalizedWorkspaceSlug) return;\n\n if (resolution.workspaceSlug === normalizedWorkspaceSlug && resolution.workspaceSlugSource !== 'fallback') return;\n\n await upsertWorkspaceSlugMapping({\n configFile: config.authStatePath,\n repositoryUrl: resolution.repositoryUrl,\n repositoryRoot: resolution.repositoryRoot,\n workspaceSlug: normalizedWorkspaceSlug,\n });\n};\n\nexport const fetchPublishedSkillDetail = async ({\n worktree,\n config,\n resolution,\n skillVersionId,\n signal,\n onAuthStateChanged,\n purpose,\n}: {\n worktree: string;\n config: ResolvedConfig;\n resolution: WorkspaceResolution;\n skillVersionId: string;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n purpose: PublishedSkillArtifactDetailPurpose;\n}): Promise<\n | { ok: true; artifact: PublishedSkillArtifactDetailPayload }\n | {\n ok: false;\n result: {\n ok: false;\n status: 'not_found';\n authMode: 'session';\n message: string;\n fetchedAt: string;\n source: 'network';\n };\n }\n | { ok: false; result: Extract<FetchResult, { ok: false }> }\n> => {\n const response = await fetchPublishedSkillsGraphQl<PublishedSkillDetailResponse>({\n worktree,\n config,\n query: PUBLISHED_SKILL_DETAIL_QUERY,\n variables: {\n input: { ...toDeliveryInput(resolution), skillVersionId, purpose },\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response;\n\n const artifact = response.data.pluginPublishedSkillVersionArtifact;\n\n if (!artifact) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'not_found',\n authMode: 'session',\n message: 'Published skill detail is not effective for the current scope.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n },\n };\n }\n\n return { ok: true, artifact };\n};\n\nexport const fetchWizardArtifactDetail = async ({\n worktree,\n config,\n resolution,\n artifactKind,\n artifactVersionId,\n signal,\n onAuthStateChanged,\n purpose,\n}: {\n worktree: string;\n config: ResolvedConfig;\n resolution: WorkspaceResolution;\n artifactKind: WizardArtifactKind;\n artifactVersionId: string;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n purpose: PublishedSkillArtifactDetailPurpose;\n}): Promise<\n | { ok: true; artifact: WizardArtifactDetailPayload }\n | {\n ok: false;\n result: {\n ok: false;\n status: 'not_found';\n authMode: 'session';\n message: string;\n fetchedAt: string;\n source: 'network';\n };\n }\n | { ok: false; result: Extract<FetchResult, { ok: false }> }\n> => {\n const response = await fetchPublishedSkillsGraphQl<WizardArtifactDetailResponse>({\n worktree,\n config,\n query: WIZARD_ARTIFACT_DETAIL_QUERY,\n variables: {\n input: { ...toDeliveryInput(resolution), artifactKind, artifactVersionId, purpose },\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response;\n\n const artifact = response.data.pluginWizardArtifactVersion;\n if (!artifact) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'not_found',\n authMode: 'session',\n message: 'Wizard artifact detail is not effective for the current scope.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n },\n };\n }\n\n return { ok: true, artifact };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["CURRENT_USER_ROLE_QUERY","PUBLISHED_SKILL_DETAIL_QUERY","PUBLISHED_SKILLS_CATALOG_QUERY","WIZARD_ARTIFACT_DETAIL_QUERY","WIZARD_ARTIFACTS_CATALOG_QUERY","clearAuthState","resolveStoredAuthState","upsertWorkspaceSlugMapping","writeAuthState","toWorkspaceSlug","toDeliveryInput","isUnauthorizedGraphQlMessage","message","normalizedMessage","toLowerCase","includes","isPluginEditorRole","value","hydrateStoredAuthStateRole","worktree","config","signal","onAuthStateChanged","authState","role","response","fetch","graphqlUrl","method","headers","authorization","sessionToken","body","JSON","stringify","query","variables","status","authStatePath","ok","json","errors","some","error","me","data","user","hydratedAuthState","userId","_id","trim","length","email","fetchPublishedSkillsGraphQl","fetchedAt","Date","toISOString","result","authMode","source","Error","map","join","fetchPublishedSkillsCatalog","resolution","recommendationContext","input","payload","pluginPublishedSkills","fetchWizardArtifactsCatalog","artifactKind","pluginWizardArtifacts","maybePersistWorkspaceSlugFromCatalog","fetchResult","backendWorkspaceSlug","workspace","slug","normalizedWorkspaceSlug","workspaceSlug","workspaceSlugSource","configFile","repositoryUrl","repositoryRoot","fetchPublishedSkillDetail","skillVersionId","artifactVersionId","purpose","wizardArtifactResponse","wizardArtifact","pluginWizardArtifactVersion","artifact","pluginPublishedSkillVersionArtifact","fetchWizardArtifactDetail"],"sources":["../../src/server/client.ts"],"sourcesContent":["import {\n CURRENT_USER_ROLE_QUERY,\n PUBLISHED_SKILL_DETAIL_QUERY,\n PUBLISHED_SKILLS_CATALOG_QUERY,\n WIZARD_ARTIFACT_DETAIL_QUERY,\n WIZARD_ARTIFACTS_CATALOG_QUERY,\n} from '../graphql-operations.js';\nimport { clearAuthState, resolveStoredAuthState, upsertWorkspaceSlugMapping, writeAuthState } from './auth-store.js';\nimport { toWorkspaceSlug } from './path-utils.js';\nimport { toDeliveryInput } from './workspace.js';\nimport type {\n AuthState,\n CurrentUserRoleResponse,\n FetchResult,\n GraphQLResponse,\n PublishedSkillArtifactDetailPayload,\n PublishedSkillArtifactDetailPurpose,\n PublishedSkillCatalogResponse,\n PublishedSkillDetailResponse,\n ResolvedConfig,\n WizardArtifactCatalogResponse,\n WizardArtifactDetailPayload,\n WizardArtifactDetailResponse,\n WizardArtifactFetchResult,\n WizardArtifactKind,\n WorkspaceResolution,\n} from './types.js';\n\nconst isUnauthorizedGraphQlMessage = (message: string): boolean => {\n const normalizedMessage = message.toLowerCase();\n return normalizedMessage.includes('not authorized') || normalizedMessage.includes('unauthorized');\n};\n\nconst isPluginEditorRole = (value: unknown): value is NonNullable<AuthState['role']> => {\n return value === 'ADMIN' || value === 'EDITOR';\n};\n\nexport const hydrateStoredAuthStateRole = async ({\n worktree,\n config,\n signal,\n onAuthStateChanged,\n}: {\n worktree: string;\n config: ResolvedConfig;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n}): Promise<AuthState | null> => {\n const authState = await resolveStoredAuthState(worktree, config);\n if (!authState) return null;\n if (authState.role) return authState;\n\n let response: Response;\n\n try {\n response = await fetch(config.graphqlUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${authState.sessionToken}`,\n },\n body: JSON.stringify({ query: CURRENT_USER_ROLE_QUERY, variables: {} }),\n signal,\n });\n } catch {\n return authState;\n }\n\n if (response.status === 401 || response.status === 403) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return null;\n }\n\n if (!response.ok) return authState;\n\n let body: GraphQLResponse<CurrentUserRoleResponse>;\n\n try {\n body = (await response.json()) as GraphQLResponse<CurrentUserRoleResponse>;\n } catch {\n return authState;\n }\n\n if (body.errors?.some((error) => isUnauthorizedGraphQlMessage(error.message))) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return null;\n }\n\n const me = body.data?.user?.me;\n if (!isPluginEditorRole(me?.role)) return authState;\n\n const hydratedAuthState: AuthState = {\n ...authState,\n userId: typeof me._id === 'string' && me._id.trim().length > 0 ? me._id : authState.userId,\n email: typeof me.email === 'string' && me.email.trim().length > 0 ? me.email : authState.email,\n role: me.role,\n };\n\n await writeAuthState(config.authStatePath, hydratedAuthState);\n return hydratedAuthState;\n};\n\nexport const fetchPublishedSkillsGraphQl = async <TData>({\n worktree,\n config,\n query,\n variables,\n signal,\n onAuthStateChanged,\n}: {\n worktree: string;\n config: ResolvedConfig;\n query: string;\n variables: Record<string, unknown>;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n}): Promise<\n | { ok: true; data: TData; fetchedAt: string }\n | { ok: false; result: Extract<FetchResult, { ok: false }> }\n> => {\n const authState = await resolveStoredAuthState(worktree, config);\n const fetchedAt = new Date().toISOString();\n\n if (!authState) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'missing_auth',\n authMode: 'missing',\n message:\n 'No plugin session is stored. Interactive opencode_wizard_published_skills_fetch can bootstrap browser login automatically when needed. Configured backend and GraphQL URLs are shown for visibility, but no GraphQL request was made because auth is missing.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n let response: Response;\n\n try {\n response = await fetch(config.graphqlUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${authState.sessionToken}`,\n },\n body: JSON.stringify({ query, variables }),\n signal,\n });\n } catch (error) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: error instanceof Error ? error.message : 'Unknown fetch error',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (response.status === 401 || response.status === 403) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return {\n ok: false,\n result: {\n ok: false,\n status: 'missing_auth',\n authMode: 'session',\n message:\n 'Stored plugin session was rejected by the backend. Retry opencode_wizard_published_skills_fetch to bootstrap a fresh browser login automatically.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (!response.ok) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: `GraphQL request failed with HTTP ${response.status}.`,\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n let body: GraphQLResponse<TData>;\n\n try {\n body = (await response.json()) as GraphQLResponse<TData>;\n } catch (error) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: `GraphQL response was not valid JSON: ${error instanceof Error ? error.message : 'Unknown parse error'}`,\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (body.errors?.length) {\n const message = body.errors.map((error) => error.message).join('; ');\n\n if (body.errors.some((error) => isUnauthorizedGraphQlMessage(error.message))) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return {\n ok: false,\n result: {\n ok: false,\n status: 'missing_auth',\n authMode: 'session',\n message:\n 'Stored plugin session is no longer valid. Retry opencode_wizard_published_skills_fetch to bootstrap a fresh browser login automatically.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n return {\n ok: false,\n result: { ok: false, status: 'request_failed', authMode: 'session', message, fetchedAt, source: 'network' },\n };\n }\n\n if (!body.data) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include data.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n return { ok: true, data: body.data, fetchedAt };\n};\n\nexport const fetchPublishedSkillsCatalog = async (\n worktree: string,\n config: ResolvedConfig,\n resolution: WorkspaceResolution,\n signal: AbortSignal,\n recommendationContext?: string | null,\n onAuthStateChanged?: () => void,\n): Promise<FetchResult> => {\n const response = await fetchPublishedSkillsGraphQl<PublishedSkillCatalogResponse>({\n worktree,\n config,\n query: PUBLISHED_SKILLS_CATALOG_QUERY,\n variables: { input: { ...toDeliveryInput(resolution), recommendationContext } },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response.result;\n\n const payload = response.data.pluginPublishedSkills;\n\n if (!payload) {\n return {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include pluginPublishedSkills.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n }\n\n return {\n ok: true,\n status: 'ready',\n authMode: 'session',\n payload,\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n};\n\nexport const fetchWizardArtifactsCatalog = async (\n worktree: string,\n config: ResolvedConfig,\n resolution: WorkspaceResolution,\n artifactKind: WizardArtifactKind,\n signal: AbortSignal,\n recommendationContext?: string | null,\n onAuthStateChanged?: () => void,\n): Promise<WizardArtifactFetchResult> => {\n const response = await fetchPublishedSkillsGraphQl<WizardArtifactCatalogResponse>({\n worktree,\n config,\n query: WIZARD_ARTIFACTS_CATALOG_QUERY,\n variables: { input: { ...toDeliveryInput(resolution), artifactKind, recommendationContext } },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response.result;\n\n const payload = response.data.pluginWizardArtifacts;\n if (!payload) {\n return {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include pluginWizardArtifacts.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n }\n\n return {\n ok: true,\n status: 'ready',\n authMode: 'session',\n payload,\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n};\n\nexport const maybePersistWorkspaceSlugFromCatalog = async ({\n config,\n resolution,\n fetchResult,\n}: {\n config: ResolvedConfig;\n resolution: WorkspaceResolution;\n fetchResult: FetchResult;\n}): Promise<void> => {\n if (!fetchResult.ok) return;\n\n const backendWorkspaceSlug = fetchResult.payload.workspace?.slug?.trim();\n if (!backendWorkspaceSlug) return;\n\n const normalizedWorkspaceSlug = toWorkspaceSlug(backendWorkspaceSlug);\n if (!normalizedWorkspaceSlug) return;\n\n if (resolution.workspaceSlug === normalizedWorkspaceSlug && resolution.workspaceSlugSource !== 'fallback') return;\n\n await upsertWorkspaceSlugMapping({\n configFile: config.authStatePath,\n repositoryUrl: resolution.repositoryUrl,\n repositoryRoot: resolution.repositoryRoot,\n workspaceSlug: normalizedWorkspaceSlug,\n });\n};\n\nexport const fetchPublishedSkillDetail = async ({\n worktree,\n config,\n resolution,\n skillVersionId,\n artifactVersionId,\n signal,\n onAuthStateChanged,\n purpose,\n}: {\n worktree: string;\n config: ResolvedConfig;\n resolution: WorkspaceResolution;\n skillVersionId: string;\n artifactVersionId: string;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n purpose: PublishedSkillArtifactDetailPurpose;\n}): Promise<\n | { ok: true; artifact: PublishedSkillArtifactDetailPayload }\n | {\n ok: false;\n result: {\n ok: false;\n status: 'not_found';\n authMode: 'session';\n message: string;\n fetchedAt: string;\n source: 'network';\n };\n }\n | { ok: false; result: Extract<FetchResult, { ok: false }> }\n> => {\n const wizardArtifactResponse = await fetchPublishedSkillsGraphQl<WizardArtifactDetailResponse>({\n worktree,\n config,\n query: WIZARD_ARTIFACT_DETAIL_QUERY,\n variables: {\n input: { ...toDeliveryInput(resolution), artifactKind: 'SKILL', artifactVersionId, purpose },\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!wizardArtifactResponse.ok) return wizardArtifactResponse;\n\n const wizardArtifact = wizardArtifactResponse.data.pluginWizardArtifactVersion;\n if (wizardArtifact) return { ok: true, artifact: wizardArtifact };\n\n const response = await fetchPublishedSkillsGraphQl<PublishedSkillDetailResponse>({\n worktree,\n config,\n query: PUBLISHED_SKILL_DETAIL_QUERY,\n variables: {\n input: { ...toDeliveryInput(resolution), skillVersionId, purpose },\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response;\n\n const artifact = response.data.pluginPublishedSkillVersionArtifact;\n\n if (!artifact) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'not_found',\n authMode: 'session',\n message: 'Published skill detail is not effective for the current scope.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n },\n };\n }\n\n return { ok: true, artifact };\n};\n\nexport const fetchWizardArtifactDetail = async ({\n worktree,\n config,\n resolution,\n artifactKind,\n artifactVersionId,\n signal,\n onAuthStateChanged,\n purpose,\n}: {\n worktree: string;\n config: ResolvedConfig;\n resolution: WorkspaceResolution;\n artifactKind: WizardArtifactKind;\n artifactVersionId: string;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n purpose: PublishedSkillArtifactDetailPurpose;\n}): Promise<\n | { ok: true; artifact: WizardArtifactDetailPayload }\n | {\n ok: false;\n result: {\n ok: false;\n status: 'not_found';\n authMode: 'session';\n message: string;\n fetchedAt: string;\n source: 'network';\n };\n }\n | { ok: false; result: Extract<FetchResult, { ok: false }> }\n> => {\n const response = await fetchPublishedSkillsGraphQl<WizardArtifactDetailResponse>({\n worktree,\n config,\n query: WIZARD_ARTIFACT_DETAIL_QUERY,\n variables: {\n input: { ...toDeliveryInput(resolution), artifactKind, artifactVersionId, purpose },\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response;\n\n const artifact = response.data.pluginWizardArtifactVersion;\n if (!artifact) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'not_found',\n authMode: 'session',\n message: 'Wizard artifact detail is not effective for the current scope.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n },\n };\n }\n\n return { ok: true, artifact };\n};\n"],"mappings":"AAAA,SACEA,uBAAuB,EACvBC,4BAA4B,EAC5BC,8BAA8B,EAC9BC,4BAA4B,EAC5BC,8BAA8B,QACzB,0BAA0B;AACjC,SAASC,cAAc,EAAEC,sBAAsB,EAAEC,0BAA0B,EAAEC,cAAc,QAAQ,iBAAiB;AACpH,SAASC,eAAe,QAAQ,iBAAiB;AACjD,SAASC,eAAe,QAAQ,gBAAgB;AAmBhD,MAAMC,4BAA4B,GAAIC,OAAe,IAAc;EACjE,MAAMC,iBAAiB,GAAGD,OAAO,CAACE,WAAW,CAAC,CAAC;EAC/C,OAAOD,iBAAiB,CAACE,QAAQ,CAAC,gBAAgB,CAAC,IAAIF,iBAAiB,CAACE,QAAQ,CAAC,cAAc,CAAC;AACnG,CAAC;AAED,MAAMC,kBAAkB,GAAIC,KAAc,IAA8C;EACtF,OAAOA,KAAK,KAAK,OAAO,IAAIA,KAAK,KAAK,QAAQ;AAChD,CAAC;AAED,OAAO,MAAMC,0BAA0B,GAAG,MAAAA,CAAO;EAC/CC,QAAQ;EACRC,MAAM;EACNC,MAAM;EACNC;AAMF,CAAC,KAAgC;EAC/B,MAAMC,SAAS,GAAG,MAAMjB,sBAAsB,CAACa,QAAQ,EAAEC,MAAM,CAAC;EAChE,IAAI,CAACG,SAAS,EAAE,OAAO,IAAI;EAC3B,IAAIA,SAAS,CAACC,IAAI,EAAE,OAAOD,SAAS;EAEpC,IAAIE,QAAkB;EAEtB,IAAI;IACFA,QAAQ,GAAG,MAAMC,KAAK,CAACN,MAAM,CAACO,UAAU,EAAE;MACxCC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QACP,cAAc,EAAE,kBAAkB;QAClCC,aAAa,EAAE,UAAUP,SAAS,CAACQ,YAAY;MACjD,CAAC;MACDC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;QAAEC,KAAK,EAAEnC,uBAAuB;QAAEoC,SAAS,EAAE,CAAC;MAAE,CAAC,CAAC;MACvEf;IACF,CAAC,CAAC;EACJ,CAAC,CAAC,MAAM;IACN,OAAOE,SAAS;EAClB;EAEA,IAAIE,QAAQ,CAACY,MAAM,KAAK,GAAG,IAAIZ,QAAQ,CAACY,MAAM,KAAK,GAAG,EAAE;IACtD,MAAMhC,cAAc,CAACe,MAAM,CAACkB,aAAa,CAAC;IAC1ChB,kBAAkB,GAAG,CAAC;IACtB,OAAO,IAAI;EACb;EAEA,IAAI,CAACG,QAAQ,CAACc,EAAE,EAAE,OAAOhB,SAAS;EAElC,IAAIS,IAA8C;EAElD,IAAI;IACFA,IAAI,GAAI,MAAMP,QAAQ,CAACe,IAAI,CAAC,CAA8C;EAC5E,CAAC,CAAC,MAAM;IACN,OAAOjB,SAAS;EAClB;EAEA,IAAIS,IAAI,CAACS,MAAM,EAAEC,IAAI,CAAEC,KAAK,IAAKhC,4BAA4B,CAACgC,KAAK,CAAC/B,OAAO,CAAC,CAAC,EAAE;IAC7E,MAAMP,cAAc,CAACe,MAAM,CAACkB,aAAa,CAAC;IAC1ChB,kBAAkB,GAAG,CAAC;IACtB,OAAO,IAAI;EACb;EAEA,MAAMsB,EAAE,GAAGZ,IAAI,CAACa,IAAI,EAAEC,IAAI,EAAEF,EAAE;EAC9B,IAAI,CAAC5B,kBAAkB,CAAC4B,EAAE,EAAEpB,IAAI,CAAC,EAAE,OAAOD,SAAS;EAEnD,MAAMwB,iBAA4B,GAAG;IACnC,GAAGxB,SAAS;IACZyB,MAAM,EAAE,OAAOJ,EAAE,CAACK,GAAG,KAAK,QAAQ,IAAIL,EAAE,CAACK,GAAG,CAACC,IAAI,CAAC,CAAC,CAACC,MAAM,GAAG,CAAC,GAAGP,EAAE,CAACK,GAAG,GAAG1B,SAAS,CAACyB,MAAM;IAC1FI,KAAK,EAAE,OAAOR,EAAE,CAACQ,KAAK,KAAK,QAAQ,IAAIR,EAAE,CAACQ,KAAK,CAACF,IAAI,CAAC,CAAC,CAACC,MAAM,GAAG,CAAC,GAAGP,EAAE,CAACQ,KAAK,GAAG7B,SAAS,CAAC6B,KAAK;IAC9F5B,IAAI,EAAEoB,EAAE,CAACpB;EACX,CAAC;EAED,MAAMhB,cAAc,CAACY,MAAM,CAACkB,aAAa,EAAES,iBAAiB,CAAC;EAC7D,OAAOA,iBAAiB;AAC1B,CAAC;AAED,OAAO,MAAMM,2BAA2B,GAAG,MAAAA,CAAc;EACvDlC,QAAQ;EACRC,MAAM;EACNe,KAAK;EACLC,SAAS;EACTf,MAAM;EACNC;AAQF,CAAC,KAGI;EACH,MAAMC,SAAS,GAAG,MAAMjB,sBAAsB,CAACa,QAAQ,EAAEC,MAAM,CAAC;EAChE,MAAMkC,SAAS,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;EAE1C,IAAI,CAACjC,SAAS,EAAE;IACd,OAAO;MACLgB,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,cAAc;QACtBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EACL,+PAA+P;QACjQ0C,SAAS;QACTK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,IAAIlC,QAAkB;EAEtB,IAAI;IACFA,QAAQ,GAAG,MAAMC,KAAK,CAACN,MAAM,CAACO,UAAU,EAAE;MACxCC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QACP,cAAc,EAAE,kBAAkB;QAClCC,aAAa,EAAE,UAAUP,SAAS,CAACQ,YAAY;MACjD,CAAC;MACDC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;QAAEC,KAAK;QAAEC;MAAU,CAAC,CAAC;MAC1Cf;IACF,CAAC,CAAC;EACJ,CAAC,CAAC,OAAOsB,KAAK,EAAE;IACd,OAAO;MACLJ,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,gBAAgB;QACxBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EAAE+B,KAAK,YAAYiB,KAAK,GAAGjB,KAAK,CAAC/B,OAAO,GAAG,qBAAqB;QACvE0C,SAAS;QACTK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,IAAIlC,QAAQ,CAACY,MAAM,KAAK,GAAG,IAAIZ,QAAQ,CAACY,MAAM,KAAK,GAAG,EAAE;IACtD,MAAMhC,cAAc,CAACe,MAAM,CAACkB,aAAa,CAAC;IAC1ChB,kBAAkB,GAAG,CAAC;IACtB,OAAO;MACLiB,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,cAAc;QACtBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EACL,mJAAmJ;QACrJ0C,SAAS;QACTK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,IAAI,CAAClC,QAAQ,CAACc,EAAE,EAAE;IAChB,OAAO;MACLA,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,gBAAgB;QACxBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EAAE,oCAAoCa,QAAQ,CAACY,MAAM,GAAG;QAC/DiB,SAAS;QACTK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,IAAI3B,IAA4B;EAEhC,IAAI;IACFA,IAAI,GAAI,MAAMP,QAAQ,CAACe,IAAI,CAAC,CAA4B;EAC1D,CAAC,CAAC,OAAOG,KAAK,EAAE;IACd,OAAO;MACLJ,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,gBAAgB;QACxBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EAAE,wCAAwC+B,KAAK,YAAYiB,KAAK,GAAGjB,KAAK,CAAC/B,OAAO,GAAG,qBAAqB,EAAE;QACjH0C,SAAS;QACTK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,IAAI3B,IAAI,CAACS,MAAM,EAAEU,MAAM,EAAE;IACvB,MAAMvC,OAAO,GAAGoB,IAAI,CAACS,MAAM,CAACoB,GAAG,CAAElB,KAAK,IAAKA,KAAK,CAAC/B,OAAO,CAAC,CAACkD,IAAI,CAAC,IAAI,CAAC;IAEpE,IAAI9B,IAAI,CAACS,MAAM,CAACC,IAAI,CAAEC,KAAK,IAAKhC,4BAA4B,CAACgC,KAAK,CAAC/B,OAAO,CAAC,CAAC,EAAE;MAC5E,MAAMP,cAAc,CAACe,MAAM,CAACkB,aAAa,CAAC;MAC1ChB,kBAAkB,GAAG,CAAC;MACtB,OAAO;QACLiB,EAAE,EAAE,KAAK;QACTkB,MAAM,EAAE;UACNlB,EAAE,EAAE,KAAK;UACTF,MAAM,EAAE,cAAc;UACtBqB,QAAQ,EAAE,SAAS;UACnB9C,OAAO,EACL,0IAA0I;UAC5I0C,SAAS;UACTK,MAAM,EAAE;QACV;MACF,CAAC;IACH;IAEA,OAAO;MACLpB,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QAAElB,EAAE,EAAE,KAAK;QAAEF,MAAM,EAAE,gBAAgB;QAAEqB,QAAQ,EAAE,SAAS;QAAE9C,OAAO;QAAE0C,SAAS;QAAEK,MAAM,EAAE;MAAU;IAC5G,CAAC;EACH;EAEA,IAAI,CAAC3B,IAAI,CAACa,IAAI,EAAE;IACd,OAAO;MACLN,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,gBAAgB;QACxBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EAAE,wCAAwC;QACjD0C,SAAS;QACTK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,OAAO;IAAEpB,EAAE,EAAE,IAAI;IAAEM,IAAI,EAAEb,IAAI,CAACa,IAAI;IAAES;EAAU,CAAC;AACjD,CAAC;AAED,OAAO,MAAMS,2BAA2B,GAAG,MAAAA,CACzC5C,QAAgB,EAChBC,MAAsB,EACtB4C,UAA+B,EAC/B3C,MAAmB,EACnB4C,qBAAqC,EACrC3C,kBAA+B,KACN;EACzB,MAAMG,QAAQ,GAAG,MAAM4B,2BAA2B,CAAgC;IAChFlC,QAAQ;IACRC,MAAM;IACNe,KAAK,EAAEjC,8BAA8B;IACrCkC,SAAS,EAAE;MAAE8B,KAAK,EAAE;QAAE,GAAGxD,eAAe,CAACsD,UAAU,CAAC;QAAEC;MAAsB;IAAE,CAAC;IAC/E5C,MAAM;IACNC;EACF,CAAC,CAAC;EAEF,IAAI,CAACG,QAAQ,CAACc,EAAE,EAAE,OAAOd,QAAQ,CAACgC,MAAM;EAExC,MAAMU,OAAO,GAAG1C,QAAQ,CAACoB,IAAI,CAACuB,qBAAqB;EAEnD,IAAI,CAACD,OAAO,EAAE;IACZ,OAAO;MACL5B,EAAE,EAAE,KAAK;MACTF,MAAM,EAAE,gBAAgB;MACxBqB,QAAQ,EAAE,SAAS;MACnB9C,OAAO,EAAE,yDAAyD;MAClE0C,SAAS,EAAE7B,QAAQ,CAAC6B,SAAS;MAC7BK,MAAM,EAAE;IACV,CAAC;EACH;EAEA,OAAO;IACLpB,EAAE,EAAE,IAAI;IACRF,MAAM,EAAE,OAAO;IACfqB,QAAQ,EAAE,SAAS;IACnBS,OAAO;IACPb,SAAS,EAAE7B,QAAQ,CAAC6B,SAAS;IAC7BK,MAAM,EAAE;EACV,CAAC;AACH,CAAC;AAED,OAAO,MAAMU,2BAA2B,GAAG,MAAAA,CACzClD,QAAgB,EAChBC,MAAsB,EACtB4C,UAA+B,EAC/BM,YAAgC,EAChCjD,MAAmB,EACnB4C,qBAAqC,EACrC3C,kBAA+B,KACQ;EACvC,MAAMG,QAAQ,GAAG,MAAM4B,2BAA2B,CAAgC;IAChFlC,QAAQ;IACRC,MAAM;IACNe,KAAK,EAAE/B,8BAA8B;IACrCgC,SAAS,EAAE;MAAE8B,KAAK,EAAE;QAAE,GAAGxD,eAAe,CAACsD,UAAU,CAAC;QAAEM,YAAY;QAAEL;MAAsB;IAAE,CAAC;IAC7F5C,MAAM;IACNC;EACF,CAAC,CAAC;EAEF,IAAI,CAACG,QAAQ,CAACc,EAAE,EAAE,OAAOd,QAAQ,CAACgC,MAAM;EAExC,MAAMU,OAAO,GAAG1C,QAAQ,CAACoB,IAAI,CAAC0B,qBAAqB;EACnD,IAAI,CAACJ,OAAO,EAAE;IACZ,OAAO;MACL5B,EAAE,EAAE,KAAK;MACTF,MAAM,EAAE,gBAAgB;MACxBqB,QAAQ,EAAE,SAAS;MACnB9C,OAAO,EAAE,yDAAyD;MAClE0C,SAAS,EAAE7B,QAAQ,CAAC6B,SAAS;MAC7BK,MAAM,EAAE;IACV,CAAC;EACH;EAEA,OAAO;IACLpB,EAAE,EAAE,IAAI;IACRF,MAAM,EAAE,OAAO;IACfqB,QAAQ,EAAE,SAAS;IACnBS,OAAO;IACPb,SAAS,EAAE7B,QAAQ,CAAC6B,SAAS;IAC7BK,MAAM,EAAE;EACV,CAAC;AACH,CAAC;AAED,OAAO,MAAMa,oCAAoC,GAAG,MAAAA,CAAO;EACzDpD,MAAM;EACN4C,UAAU;EACVS;AAKF,CAAC,KAAoB;EACnB,IAAI,CAACA,WAAW,CAAClC,EAAE,EAAE;EAErB,MAAMmC,oBAAoB,GAAGD,WAAW,CAACN,OAAO,CAACQ,SAAS,EAAEC,IAAI,EAAE1B,IAAI,CAAC,CAAC;EACxE,IAAI,CAACwB,oBAAoB,EAAE;EAE3B,MAAMG,uBAAuB,GAAGpE,eAAe,CAACiE,oBAAoB,CAAC;EACrE,IAAI,CAACG,uBAAuB,EAAE;EAE9B,IAAIb,UAAU,CAACc,aAAa,KAAKD,uBAAuB,IAAIb,UAAU,CAACe,mBAAmB,KAAK,UAAU,EAAE;EAE3G,MAAMxE,0BAA0B,CAAC;IAC/ByE,UAAU,EAAE5D,MAAM,CAACkB,aAAa;IAChC2C,aAAa,EAAEjB,UAAU,CAACiB,aAAa;IACvCC,cAAc,EAAElB,UAAU,CAACkB,cAAc;IACzCJ,aAAa,EAAED;EACjB,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,MAAMM,yBAAyB,GAAG,MAAAA,CAAO;EAC9ChE,QAAQ;EACRC,MAAM;EACN4C,UAAU;EACVoB,cAAc;EACdC,iBAAiB;EACjBhE,MAAM;EACNC,kBAAkB;EAClBgE;AAUF,CAAC,KAcI;EACH,MAAMC,sBAAsB,GAAG,MAAMlC,2BAA2B,CAA+B;IAC7FlC,QAAQ;IACRC,MAAM;IACNe,KAAK,EAAEhC,4BAA4B;IACnCiC,SAAS,EAAE;MACT8B,KAAK,EAAE;QAAE,GAAGxD,eAAe,CAACsD,UAAU,CAAC;QAAEM,YAAY,EAAE,OAAO;QAAEe,iBAAiB;QAAEC;MAAQ;IAC7F,CAAC;IACDjE,MAAM;IACNC;EACF,CAAC,CAAC;EAEF,IAAI,CAACiE,sBAAsB,CAAChD,EAAE,EAAE,OAAOgD,sBAAsB;EAE7D,MAAMC,cAAc,GAAGD,sBAAsB,CAAC1C,IAAI,CAAC4C,2BAA2B;EAC9E,IAAID,cAAc,EAAE,OAAO;IAAEjD,EAAE,EAAE,IAAI;IAAEmD,QAAQ,EAAEF;EAAe,CAAC;EAEjE,MAAM/D,QAAQ,GAAG,MAAM4B,2BAA2B,CAA+B;IAC/ElC,QAAQ;IACRC,MAAM;IACNe,KAAK,EAAElC,4BAA4B;IACnCmC,SAAS,EAAE;MACT8B,KAAK,EAAE;QAAE,GAAGxD,eAAe,CAACsD,UAAU,CAAC;QAAEoB,cAAc;QAAEE;MAAQ;IACnE,CAAC;IACDjE,MAAM;IACNC;EACF,CAAC,CAAC;EAEF,IAAI,CAACG,QAAQ,CAACc,EAAE,EAAE,OAAOd,QAAQ;EAEjC,MAAMiE,QAAQ,GAAGjE,QAAQ,CAACoB,IAAI,CAAC8C,mCAAmC;EAElE,IAAI,CAACD,QAAQ,EAAE;IACb,OAAO;MACLnD,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,WAAW;QACnBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EAAE,gEAAgE;QACzE0C,SAAS,EAAE7B,QAAQ,CAAC6B,SAAS;QAC7BK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,OAAO;IAAEpB,EAAE,EAAE,IAAI;IAAEmD;EAAS,CAAC;AAC/B,CAAC;AAED,OAAO,MAAME,yBAAyB,GAAG,MAAAA,CAAO;EAC9CzE,QAAQ;EACRC,MAAM;EACN4C,UAAU;EACVM,YAAY;EACZe,iBAAiB;EACjBhE,MAAM;EACNC,kBAAkB;EAClBgE;AAUF,CAAC,KAcI;EACH,MAAM7D,QAAQ,GAAG,MAAM4B,2BAA2B,CAA+B;IAC/ElC,QAAQ;IACRC,MAAM;IACNe,KAAK,EAAEhC,4BAA4B;IACnCiC,SAAS,EAAE;MACT8B,KAAK,EAAE;QAAE,GAAGxD,eAAe,CAACsD,UAAU,CAAC;QAAEM,YAAY;QAAEe,iBAAiB;QAAEC;MAAQ;IACpF,CAAC;IACDjE,MAAM;IACNC;EACF,CAAC,CAAC;EAEF,IAAI,CAACG,QAAQ,CAACc,EAAE,EAAE,OAAOd,QAAQ;EAEjC,MAAMiE,QAAQ,GAAGjE,QAAQ,CAACoB,IAAI,CAAC4C,2BAA2B;EAC1D,IAAI,CAACC,QAAQ,EAAE;IACb,OAAO;MACLnD,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,WAAW;QACnBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EAAE,gEAAgE;QACzE0C,SAAS,EAAE7B,QAAQ,CAAC6B,SAAS;QAC7BK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,OAAO;IAAEpB,EAAE,EAAE,IAAI;IAAEmD;EAAS,CAAC;AAC/B,CAAC","ignoreList":[]}
@@ -4,6 +4,7 @@ export declare const toPublishedSkillPreferenceAction: (value: string) => Publis
4
4
  export declare const toPublishedSkillPreferenceScope: (value: string | undefined, defaultScope: "global" | "project") => "global" | "project";
5
5
  export declare const resolvePublishedSkillPreferenceCacheContext: (config: ResolvedConfig) => Promise<PublishedSkillPreferenceCacheContext>;
6
6
  export declare const getCatalogCacheKey: (workspaceResolution: WorkspaceResolution, preferenceContext: PublishedSkillPreferenceCacheContext) => string;
7
+ export declare const GLOBAL_SKILL_MANAGEMENT_HINT = "Per-user global starter/global skills can be disabled with opencode_wizard_published_skill_preference_set skill=<slug> action=ignore preferenceScope=global and re-enabled with action=unignore preferenceScope=global.";
7
8
  export declare const setPublishedSkillIgnored: ({ worktree, directory, skillSlug, ignored, preferenceScope, }: {
8
9
  worktree: string;
9
10
  directory: string;
@@ -21,7 +21,8 @@ export const toPublishedSkillPreferenceScope = (value, defaultScope) => {
21
21
  if (!value) return defaultScope;
22
22
  const normalized = value.trim().toLowerCase();
23
23
  if (normalized === 'global' || normalized === 'project') return normalized;
24
- throw new Error('Published skill preferenceScope must be either global or project.');
24
+ if (normalized === 'workspace') return 'project';
25
+ throw new Error('Published skill preferenceScope must be global, project, or workspace.');
25
26
  };
26
27
  export const resolvePublishedSkillPreferenceCacheContext = async config => {
27
28
  const authState = await readGlobalAuthState(config.authStatePath);
@@ -35,6 +36,7 @@ const toBackendPreferenceScope = preferenceScope => {
35
36
  if (preferenceScope === 'global') return 'GLOBAL';
36
37
  return 'WORKSPACE';
37
38
  };
39
+ export const GLOBAL_SKILL_MANAGEMENT_HINT = 'Per-user global starter/global skills can be disabled with opencode_wizard_published_skill_preference_set skill=<slug> action=ignore preferenceScope=global and re-enabled with action=unignore preferenceScope=global.';
38
40
  const setPublishedSkillPreference = async ({
39
41
  worktree,
40
42
  directory,
@@ -73,7 +75,8 @@ const setPublishedSkillPreference = async ({
73
75
  userKey: preferences.userKey,
74
76
  ignoredSkillSlugs: preferences.ignoredSkills.map(item => item.skill.slug),
75
77
  installedGlobalSkillSlugs: [],
76
- installedWorkspaceSkillSlugs: []
78
+ installedWorkspaceSkillSlugs: [],
79
+ globalSkillManagementHint: GLOBAL_SKILL_MANAGEMENT_HINT
77
80
  };
78
81
  };
79
82
  export const setPublishedSkillIgnored = async ({
@@ -1 +1 @@
1
- {"version":3,"names":["SET_PUBLISHED_SKILL_PREFERENCE_MUTATION","readGlobalAuthState","toStoredUserKey","fetchPublishedSkillsGraphQl","PRESENCE_EVENT_TIMEOUT_MS","resolveConfig","resolveWorkspace","toDeliveryInput","publishedSkillPreferenceCacheVersion","toIgnoredSkillSlug","value","normalized","trim","toLowerCase","toPublishedSkillPreferenceAction","Error","toPublishedSkillPreferenceScope","defaultScope","resolvePublishedSkillPreferenceCacheContext","config","authState","authStatePath","userKey","preferenceVersion","getCatalogCacheKey","workspaceResolution","preferenceContext","JSON","stringify","cacheKey","toBackendPreferenceScope","preferenceScope","setPublishedSkillPreference","worktree","directory","skillSlug","installed","ignored","response","query","variables","input","signal","AbortSignal","timeout","ok","result","message","preferences","data","scopeKey","ignoredSkillSlugs","ignoredSkills","map","item","skill","slug","installedGlobalSkillSlugs","installedWorkspaceSkillSlugs","setPublishedSkillIgnored","normalizedSkillSlug","setPublishedSkillInstalled"],"sources":["../../src/server/preferences.ts"],"sourcesContent":["import { SET_PUBLISHED_SKILL_PREFERENCE_MUTATION } from '../graphql-operations.js';\nimport { readGlobalAuthState, toStoredUserKey } from './auth-store.js';\nimport { fetchPublishedSkillsGraphQl } from './client.js';\nimport { PRESENCE_EVENT_TIMEOUT_MS } from './constants.js';\nimport { resolveConfig } from './config.js';\nimport { resolveWorkspace, toDeliveryInput } from './workspace.js';\nimport type {\n PublishedSkillPreferenceAction,\n PublishedSkillPreferenceCacheContext,\n PublishedSkillPreferenceScope,\n PublishedSkillsIgnoreState,\n ResolvedConfig,\n SetPublishedSkillPreferenceResponse,\n WorkspaceResolution,\n} from './types.js';\n\nlet publishedSkillPreferenceCacheVersion = 0;\n\nexport const toIgnoredSkillSlug = (value: string): string | null => {\n const normalized = value.trim().toLowerCase();\n if (!normalized) return null;\n return normalized;\n};\n\nexport const toPublishedSkillPreferenceAction = (value: string): PublishedSkillPreferenceAction => {\n const normalized = value.trim().toLowerCase();\n if (\n normalized === 'install' ||\n normalized === 'uninstall' ||\n normalized === 'ignore' ||\n normalized === 'unignore'\n ) {\n return normalized;\n }\n\n throw new Error('Published skill preference action must be one of: install, uninstall, ignore, unignore.');\n};\n\nexport const toPublishedSkillPreferenceScope = (\n value: string | undefined,\n defaultScope: 'global' | 'project',\n): 'global' | 'project' => {\n if (!value) return defaultScope;\n\n const normalized = value.trim().toLowerCase();\n if (normalized === 'global' || normalized === 'project') return normalized;\n\n throw new Error('Published skill preferenceScope must be either global or project.');\n};\n\nexport const resolvePublishedSkillPreferenceCacheContext = async (\n config: ResolvedConfig,\n): Promise<PublishedSkillPreferenceCacheContext> => {\n const authState = await readGlobalAuthState(config.authStatePath);\n\n return {\n userKey: toStoredUserKey(authState),\n preferenceVersion: publishedSkillPreferenceCacheVersion,\n };\n};\n\nexport const getCatalogCacheKey = (\n workspaceResolution: WorkspaceResolution,\n preferenceContext: PublishedSkillPreferenceCacheContext,\n): string => JSON.stringify([workspaceResolution.cacheKey, preferenceContext.userKey, preferenceContext.preferenceVersion]);\n\nconst toBackendPreferenceScope = (preferenceScope: 'global' | 'project'): PublishedSkillPreferenceScope => {\n if (preferenceScope === 'global') return 'GLOBAL';\n return 'WORKSPACE';\n};\n\nconst setPublishedSkillPreference = async ({\n worktree,\n directory,\n config,\n skillSlug,\n preferenceScope,\n installed,\n ignored,\n}: {\n worktree: string;\n directory: string;\n config: ResolvedConfig;\n skillSlug: string;\n preferenceScope: 'global' | 'project';\n installed?: boolean;\n ignored?: boolean;\n}): Promise<PublishedSkillsIgnoreState> => {\n const workspaceResolution = await resolveWorkspace({ config, directory });\n const response = await fetchPublishedSkillsGraphQl<SetPublishedSkillPreferenceResponse>({\n worktree,\n config,\n query: SET_PUBLISHED_SKILL_PREFERENCE_MUTATION,\n variables: {\n input: {\n ...toDeliveryInput(workspaceResolution),\n skillSlug,\n preferenceScope: toBackendPreferenceScope(preferenceScope),\n installed,\n ignored,\n },\n },\n signal: AbortSignal.timeout(PRESENCE_EVENT_TIMEOUT_MS),\n });\n\n if (!response.ok) {\n throw new Error(response.result.message);\n }\n\n const preferences = response.data.setPublishedSkillPreference;\n publishedSkillPreferenceCacheVersion += 1;\n\n return {\n scopeKey: preferences.scopeKey,\n userKey: preferences.userKey,\n ignoredSkillSlugs: preferences.ignoredSkills.map((item) => item.skill.slug),\n installedGlobalSkillSlugs: [],\n installedWorkspaceSkillSlugs: [],\n };\n};\n\nexport const setPublishedSkillIgnored = async ({\n worktree,\n directory,\n skillSlug,\n ignored,\n preferenceScope,\n}: {\n worktree: string;\n directory: string;\n scopeKey?: string;\n skillSlug: string;\n ignored: boolean;\n preferenceScope?: 'global' | 'project';\n}): Promise<PublishedSkillsIgnoreState> => {\n const config = await resolveConfig(worktree);\n const normalizedSkillSlug = toIgnoredSkillSlug(skillSlug);\n\n if (!normalizedSkillSlug) {\n throw new Error('Cannot toggle an empty published skill slug.');\n }\n\n return setPublishedSkillPreference({\n worktree,\n directory,\n config,\n skillSlug: normalizedSkillSlug,\n preferenceScope: preferenceScope ?? 'project',\n ignored,\n });\n};\n\nexport const setPublishedSkillInstalled = async ({\n worktree,\n directory,\n skillSlug,\n installed,\n preferenceScope,\n}: {\n worktree: string;\n directory: string;\n scopeKey?: string;\n skillSlug: string;\n installed: boolean;\n preferenceScope: 'global' | 'project';\n}): Promise<PublishedSkillsIgnoreState> => {\n const config = await resolveConfig(worktree);\n const normalizedSkillSlug = toIgnoredSkillSlug(skillSlug);\n\n if (!normalizedSkillSlug) {\n throw new Error('Cannot toggle an empty published skill slug.');\n }\n\n return setPublishedSkillPreference({\n worktree,\n directory,\n config,\n skillSlug: normalizedSkillSlug,\n preferenceScope,\n installed,\n });\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["SET_PUBLISHED_SKILL_PREFERENCE_MUTATION","readGlobalAuthState","toStoredUserKey","fetchPublishedSkillsGraphQl","PRESENCE_EVENT_TIMEOUT_MS","resolveConfig","resolveWorkspace","toDeliveryInput","publishedSkillPreferenceCacheVersion","toIgnoredSkillSlug","value","normalized","trim","toLowerCase","toPublishedSkillPreferenceAction","Error","toPublishedSkillPreferenceScope","defaultScope","resolvePublishedSkillPreferenceCacheContext","config","authState","authStatePath","userKey","preferenceVersion","getCatalogCacheKey","workspaceResolution","preferenceContext","JSON","stringify","cacheKey","toBackendPreferenceScope","preferenceScope","GLOBAL_SKILL_MANAGEMENT_HINT","setPublishedSkillPreference","worktree","directory","skillSlug","installed","ignored","response","query","variables","input","signal","AbortSignal","timeout","ok","result","message","preferences","data","scopeKey","ignoredSkillSlugs","ignoredSkills","map","item","skill","slug","installedGlobalSkillSlugs","installedWorkspaceSkillSlugs","globalSkillManagementHint","setPublishedSkillIgnored","normalizedSkillSlug","setPublishedSkillInstalled"],"sources":["../../src/server/preferences.ts"],"sourcesContent":["import { SET_PUBLISHED_SKILL_PREFERENCE_MUTATION } from '../graphql-operations.js';\nimport { readGlobalAuthState, toStoredUserKey } from './auth-store.js';\nimport { fetchPublishedSkillsGraphQl } from './client.js';\nimport { PRESENCE_EVENT_TIMEOUT_MS } from './constants.js';\nimport { resolveConfig } from './config.js';\nimport { resolveWorkspace, toDeliveryInput } from './workspace.js';\nimport type {\n PublishedSkillPreferenceAction,\n PublishedSkillPreferenceCacheContext,\n PublishedSkillPreferenceScope,\n PublishedSkillsIgnoreState,\n ResolvedConfig,\n SetPublishedSkillPreferenceResponse,\n WorkspaceResolution,\n} from './types.js';\n\nlet publishedSkillPreferenceCacheVersion = 0;\n\nexport const toIgnoredSkillSlug = (value: string): string | null => {\n const normalized = value.trim().toLowerCase();\n if (!normalized) return null;\n return normalized;\n};\n\nexport const toPublishedSkillPreferenceAction = (value: string): PublishedSkillPreferenceAction => {\n const normalized = value.trim().toLowerCase();\n if (\n normalized === 'install' ||\n normalized === 'uninstall' ||\n normalized === 'ignore' ||\n normalized === 'unignore'\n ) {\n return normalized;\n }\n\n throw new Error('Published skill preference action must be one of: install, uninstall, ignore, unignore.');\n};\n\nexport const toPublishedSkillPreferenceScope = (\n value: string | undefined,\n defaultScope: 'global' | 'project',\n): 'global' | 'project' => {\n if (!value) return defaultScope;\n\n const normalized = value.trim().toLowerCase();\n if (normalized === 'global' || normalized === 'project') return normalized;\n if (normalized === 'workspace') return 'project';\n\n throw new Error('Published skill preferenceScope must be global, project, or workspace.');\n};\n\nexport const resolvePublishedSkillPreferenceCacheContext = async (\n config: ResolvedConfig,\n): Promise<PublishedSkillPreferenceCacheContext> => {\n const authState = await readGlobalAuthState(config.authStatePath);\n\n return {\n userKey: toStoredUserKey(authState),\n preferenceVersion: publishedSkillPreferenceCacheVersion,\n };\n};\n\nexport const getCatalogCacheKey = (\n workspaceResolution: WorkspaceResolution,\n preferenceContext: PublishedSkillPreferenceCacheContext,\n): string => JSON.stringify([workspaceResolution.cacheKey, preferenceContext.userKey, preferenceContext.preferenceVersion]);\n\nconst toBackendPreferenceScope = (preferenceScope: 'global' | 'project'): PublishedSkillPreferenceScope => {\n if (preferenceScope === 'global') return 'GLOBAL';\n return 'WORKSPACE';\n};\n\nexport const GLOBAL_SKILL_MANAGEMENT_HINT =\n 'Per-user global starter/global skills can be disabled with opencode_wizard_published_skill_preference_set skill=<slug> action=ignore preferenceScope=global and re-enabled with action=unignore preferenceScope=global.';\n\nconst setPublishedSkillPreference = async ({\n worktree,\n directory,\n config,\n skillSlug,\n preferenceScope,\n installed,\n ignored,\n}: {\n worktree: string;\n directory: string;\n config: ResolvedConfig;\n skillSlug: string;\n preferenceScope: 'global' | 'project';\n installed?: boolean;\n ignored?: boolean;\n}): Promise<PublishedSkillsIgnoreState> => {\n const workspaceResolution = await resolveWorkspace({ config, directory });\n const response = await fetchPublishedSkillsGraphQl<SetPublishedSkillPreferenceResponse>({\n worktree,\n config,\n query: SET_PUBLISHED_SKILL_PREFERENCE_MUTATION,\n variables: {\n input: {\n ...toDeliveryInput(workspaceResolution),\n skillSlug,\n preferenceScope: toBackendPreferenceScope(preferenceScope),\n installed,\n ignored,\n },\n },\n signal: AbortSignal.timeout(PRESENCE_EVENT_TIMEOUT_MS),\n });\n\n if (!response.ok) {\n throw new Error(response.result.message);\n }\n\n const preferences = response.data.setPublishedSkillPreference;\n publishedSkillPreferenceCacheVersion += 1;\n\n return {\n scopeKey: preferences.scopeKey,\n userKey: preferences.userKey,\n ignoredSkillSlugs: preferences.ignoredSkills.map((item) => item.skill.slug),\n installedGlobalSkillSlugs: [],\n installedWorkspaceSkillSlugs: [],\n globalSkillManagementHint: GLOBAL_SKILL_MANAGEMENT_HINT,\n };\n};\n\nexport const setPublishedSkillIgnored = async ({\n worktree,\n directory,\n skillSlug,\n ignored,\n preferenceScope,\n}: {\n worktree: string;\n directory: string;\n scopeKey?: string;\n skillSlug: string;\n ignored: boolean;\n preferenceScope?: 'global' | 'project';\n}): Promise<PublishedSkillsIgnoreState> => {\n const config = await resolveConfig(worktree);\n const normalizedSkillSlug = toIgnoredSkillSlug(skillSlug);\n\n if (!normalizedSkillSlug) {\n throw new Error('Cannot toggle an empty published skill slug.');\n }\n\n return setPublishedSkillPreference({\n worktree,\n directory,\n config,\n skillSlug: normalizedSkillSlug,\n preferenceScope: preferenceScope ?? 'project',\n ignored,\n });\n};\n\nexport const setPublishedSkillInstalled = async ({\n worktree,\n directory,\n skillSlug,\n installed,\n preferenceScope,\n}: {\n worktree: string;\n directory: string;\n scopeKey?: string;\n skillSlug: string;\n installed: boolean;\n preferenceScope: 'global' | 'project';\n}): Promise<PublishedSkillsIgnoreState> => {\n const config = await resolveConfig(worktree);\n const normalizedSkillSlug = toIgnoredSkillSlug(skillSlug);\n\n if (!normalizedSkillSlug) {\n throw new Error('Cannot toggle an empty published skill slug.');\n }\n\n return setPublishedSkillPreference({\n worktree,\n directory,\n config,\n skillSlug: normalizedSkillSlug,\n preferenceScope,\n installed,\n });\n};\n"],"mappings":"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","ignoreList":[]}
@@ -4,7 +4,7 @@ export { buildSystemNote, resolvePluginStatusSnapshot, toPluginAuthStateSummary,
4
4
  import type { OpencodePluginServer } from './types.js';
5
5
  export type { PluginAuthStateSummary, PluginStatusSnapshot, PublishedSkillCatalogItem, PublishedSkillCatalogPayload, PublishedSkillDetailItem, PublishedSkillInstallableCatalogItem, } from './types.js';
6
6
  export { resolvePluginStatusSnapshotWithAuthBootstrap } from './auth-bootstrap.js';
7
- export { setPublishedSkillIgnored, setPublishedSkillInstalled } from './preferences.js';
7
+ export { setPublishedSkillIgnored, setPublishedSkillInstalled, toPublishedSkillPreferenceScope } from './preferences.js';
8
8
  export declare const OpencodeWizardSkillsPlugin: OpencodePluginServer;
9
9
  declare const _default: {
10
10
  id: string;