@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.
- package/README.md +4 -1
- package/dist/graphql-operations.d.ts +4 -4
- package/dist/graphql-operations.js +16 -2
- package/dist/graphql-operations.js.map +1 -1
- package/dist/plugin-tools.d.ts +3 -0
- package/dist/plugin-tools.js +10 -7
- package/dist/plugin-tools.js.map +1 -1
- package/dist/published-skills-transform.d.ts +22 -4
- package/dist/published-skills-transform.js +21 -5
- package/dist/published-skills-transform.js.map +1 -1
- package/dist/server/client.d.ts +4 -3
- package/dist/server/client.js +30 -4
- package/dist/server/client.js.map +1 -1
- package/dist/server/preferences.d.ts +1 -0
- package/dist/server/preferences.js +5 -2
- package/dist/server/preferences.js.map +1 -1
- package/dist/server/runtime.d.ts +1 -1
- package/dist/server/runtime.js +169 -23
- package/dist/server/runtime.js.map +1 -1
- package/dist/server/status.js +7 -3
- package/dist/server/status.js.map +1 -1
- package/dist/server/types.d.ts +9 -4
- package/dist/server/types.js.map +1 -1
- package/dist/smoke-published-skills.js +3 -1
- package/dist/smoke-published-skills.js.map +1 -1
- package/dist/tui/components/skill-picker-dialog.d.ts +7 -0
- package/dist/tui/components/skill-picker-dialog.js +94 -0
- package/dist/tui/components/skill-picker-dialog.js.map +1 -0
- package/dist/tui/components/status-content.js +6 -1
- package/dist/tui/components/status-content.js.map +1 -1
- package/dist/tui/plugin.js +36 -69
- package/dist/tui/plugin.js.map +1 -1
- package/dist/tui/skill-helpers.d.ts +14 -2
- package/dist/tui/skill-helpers.js +76 -19
- package/dist/tui/skill-helpers.js.map +1 -1
- 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":[]}
|
package/dist/server/client.d.ts
CHANGED
|
@@ -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;
|
package/dist/server/client.js
CHANGED
|
@@ -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:
|
|
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":"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","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
|
-
|
|
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":[]}
|
package/dist/server/runtime.d.ts
CHANGED
|
@@ -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;
|