@aexol/opencode-wizard 0.3.4 → 0.3.5
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 +9 -7
- package/dist/graphql-operations.d.ts +5 -2
- package/dist/graphql-operations.js +161 -156
- package/dist/graphql-operations.js.map +1 -1
- package/dist/plugin-tools.d.ts +26 -0
- package/dist/plugin-tools.js +43 -7
- package/dist/plugin-tools.js.map +1 -1
- package/dist/published-skills-system-note.js +3 -7
- package/dist/published-skills-system-note.js.map +1 -1
- package/dist/published-skills-terminology.d.ts +21 -0
- package/dist/published-skills-terminology.js +38 -0
- package/dist/published-skills-terminology.js.map +1 -0
- package/dist/published-skills-transform.d.ts +99 -2
- package/dist/published-skills-transform.js +91 -19
- package/dist/published-skills-transform.js.map +1 -1
- package/dist/server/auth-bootstrap.d.ts +7 -0
- package/dist/server/auth-bootstrap.js +89 -0
- package/dist/server/auth-bootstrap.js.map +1 -0
- package/dist/server/client.d.ts +30 -1
- package/dist/server/client.js +81 -1
- package/dist/server/client.js.map +1 -1
- package/dist/server/preferences.d.ts +22 -0
- package/dist/server/preferences.js +121 -0
- package/dist/server/preferences.js.map +1 -0
- package/dist/server/runtime.d.ts +3 -22
- package/dist/server/runtime.js +447 -242
- package/dist/server/runtime.js.map +1 -1
- package/dist/server/types.d.ts +75 -0
- package/dist/server/types.js.map +1 -1
- package/dist/smoke-published-skills.js +4 -4
- package/dist/smoke-published-skills.js.map +1 -1
- package/dist/tui/components/skill-catalog-row.js +45 -44
- package/dist/tui/components/skill-catalog-row.js.map +1 -1
- package/dist/tui/components/wizard-skills-dialog-content.js +73 -63
- package/dist/tui/components/wizard-skills-dialog-content.js.map +1 -1
- package/dist/tui/skill-helpers.js +7 -6
- package/dist/tui/skill-helpers.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["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","isUserPublishedSkillAssignment","assignmentSource","getPublishedSkillAssignmentLabel","toUpperCase","replace","getPublishedSkillAssignmentCounts","counts","user","global","project","other","getSkillContextKind","getSkillPolicyLabel","policy","contextKind","toPublishedSkillSummary","skillSlug","skillName","artifactDescription","whenToUse","version","skillVersion","assignmentType","scopePath","includeChildren","checksum","publishedAt","fileCount","identifiers","map","installPolicy","assignmentLabel","policyLabel","toPublishedSkillDetail","skillId","id","skillVersionId","artifactId","markdownDocument","files","resources","filter","file","relativePath","toInstallableSkillSummary","toPublishedSkillCatalog","payload","options","pluginId","runtimeMode","deliveryModel","workspace","directoryPath","rootSkillSeedPath","availableTools","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":["type 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 publishedAt: string;\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 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\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\nexport const isUserPublishedSkillAssignment = (assignmentSource: string): boolean =>\n assignmentSource === 'USER' || assignmentSource === 'USER_GLOBAL' || assignmentSource === 'USER_WORKSPACE';\n\nconst getPublishedSkillAssignmentLabel = (assignmentSource: string): string => {\n if (assignmentSource === 'GLOBAL') return 'GLOBAL SCOPE assignment';\n if (assignmentSource === 'WORKSPACE') return 'PROJECT SCOPE assignment';\n if (isUserPublishedSkillAssignment(assignmentSource)) return 'USER SCOPE assignment';\n\n return `${assignmentSource.toUpperCase().replace(/_/gu, ' ')} assignment`;\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 getSkillPolicyLabel = (\n policy: PublishedSkillInstallPolicy,\n contextKind: PublishedSkillSummary['contextKind'],\n assignmentSource: string,\n): string => {\n if (isUserPublishedSkillAssignment(assignmentSource) && policy === 'GLOBAL_CONTEXT') {\n return 'GLOBAL_CONTEXT · active USER SCOPE context';\n }\n\n if (isUserPublishedSkillAssignment(assignmentSource)) return 'PROJECT_INSTALLABLE · active USER SCOPE preference';\n if (policy === 'GLOBAL_CONTEXT') return 'GLOBAL_CONTEXT · active context only, not project-installable';\n if (contextKind === 'installable') return 'PROJECT_INSTALLABLE · available to install';\n if (contextKind === 'global') return 'PROJECT_INSTALLABLE · active GLOBAL SCOPE assignment';\n return 'PROJECT_INSTALLABLE · active PROJECT SCOPE assignment';\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 publishedAt: item.publishedArtifact.publishedAt,\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: getSkillPolicyLabel(item.skill.installPolicy, contextKind, item.assignmentSource),\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\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 publishedAt: item.publishedArtifact.publishedAt,\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: getSkillPolicyLabel(item.skill.installPolicy, 'installable', 'CATALOG'),\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","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","toPublishedSkillSummary","contextKind","skillSlug","skillName","artifactDescription","whenToUse","version","skillVersion","assignmentType","scopePath","includeChildren","checksum","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 publishedAt: string;\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 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 canonicalFilePath: string;\n publishedAt: string;\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 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\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 publishedAt: item.publishedArtifact.publishedAt,\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 publishedAt: item.artifactVersion.publishedAt,\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 publishedAt: item.publishedArtifact.publishedAt,\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":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LoginBootstrapSnapshot, PluginStatusSnapshot } from './types.js';
|
|
2
|
+
export declare const createIdleLoginBootstrapSnapshot: () => LoginBootstrapSnapshot;
|
|
3
|
+
export declare const resolvePluginStatusSnapshotWithAuthBootstrap: ({ worktree, directory, signal, }: {
|
|
4
|
+
worktree: string;
|
|
5
|
+
directory: string;
|
|
6
|
+
signal: AbortSignal;
|
|
7
|
+
}) => Promise<PluginStatusSnapshot>;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { createPluginSession, openBrowser, startLoginFlow } from './auth-flow.js';
|
|
2
|
+
import { resolveConfig } from './config.js';
|
|
3
|
+
import { LOGIN_TIMEOUT_MS, OIDC_CALLBACK_URL } from './constants.js';
|
|
4
|
+
import { toAuthState, writeAuthState } from './auth-store.js';
|
|
5
|
+
import { resolvePluginStatusSnapshot, withStatusMessage } from './status.js';
|
|
6
|
+
const STATUS_PATH_LOGIN_RETRY_COOLDOWN_MS = 60_000;
|
|
7
|
+
const statusPathLoginBootstrap = {
|
|
8
|
+
promise: null,
|
|
9
|
+
status: 'idle',
|
|
10
|
+
message: null,
|
|
11
|
+
failedAt: null
|
|
12
|
+
};
|
|
13
|
+
export const createIdleLoginBootstrapSnapshot = () => ({
|
|
14
|
+
status: 'idle',
|
|
15
|
+
trigger: null,
|
|
16
|
+
startedAt: null,
|
|
17
|
+
expiresAt: null,
|
|
18
|
+
browserUrl: null,
|
|
19
|
+
browserOpenError: null,
|
|
20
|
+
email: null,
|
|
21
|
+
message: null
|
|
22
|
+
});
|
|
23
|
+
const startStatusPathLoginBootstrap = config => {
|
|
24
|
+
if (statusPathLoginBootstrap.promise) return;
|
|
25
|
+
if (statusPathLoginBootstrap.status === 'failed' && statusPathLoginBootstrap.failedAt && Date.now() - statusPathLoginBootstrap.failedAt < STATUS_PATH_LOGIN_RETRY_COOLDOWN_MS) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
statusPathLoginBootstrap.status = 'pending';
|
|
29
|
+
statusPathLoginBootstrap.message = 'Browser login started automatically from the TUI/status path.';
|
|
30
|
+
statusPathLoginBootstrap.failedAt = null;
|
|
31
|
+
statusPathLoginBootstrap.promise = (async () => {
|
|
32
|
+
const loginSignal = AbortSignal.timeout(LOGIN_TIMEOUT_MS);
|
|
33
|
+
const loginStart = await startLoginFlow(loginSignal);
|
|
34
|
+
const browserOpenError = await openBrowser(loginStart.browserUrl);
|
|
35
|
+
if (browserOpenError) {
|
|
36
|
+
statusPathLoginBootstrap.message = `Automatic browser open failed. Open ${loginStart.browserUrl} manually.`;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const callbackPayload = await loginStart.callbackPromise;
|
|
40
|
+
if (callbackPayload.status === 'error') {
|
|
41
|
+
throw new Error(callbackPayload.message);
|
|
42
|
+
}
|
|
43
|
+
if (callbackPayload.state !== loginStart.expectedState) {
|
|
44
|
+
throw new Error('OAuth callback state did not match the original login request.');
|
|
45
|
+
}
|
|
46
|
+
const pluginSession = await createPluginSession({
|
|
47
|
+
code: callbackPayload.code,
|
|
48
|
+
codeVerifier: loginStart.codeVerifier,
|
|
49
|
+
redirectUri: OIDC_CALLBACK_URL,
|
|
50
|
+
config,
|
|
51
|
+
signal: loginSignal
|
|
52
|
+
});
|
|
53
|
+
const authState = toAuthState(pluginSession);
|
|
54
|
+
await writeAuthState(config.authStatePath, authState);
|
|
55
|
+
statusPathLoginBootstrap.status = 'authenticated';
|
|
56
|
+
statusPathLoginBootstrap.message = `Browser login completed successfully for ${authState.email}.`;
|
|
57
|
+
return authState;
|
|
58
|
+
} finally {
|
|
59
|
+
await loginStart.closeCallbackServer().catch(() => undefined);
|
|
60
|
+
}
|
|
61
|
+
})().catch(error => {
|
|
62
|
+
statusPathLoginBootstrap.status = 'failed';
|
|
63
|
+
statusPathLoginBootstrap.failedAt = Date.now();
|
|
64
|
+
statusPathLoginBootstrap.message = error instanceof Error ? error.message : 'Browser login failed.';
|
|
65
|
+
throw error;
|
|
66
|
+
}).finally(() => {
|
|
67
|
+
statusPathLoginBootstrap.promise = null;
|
|
68
|
+
});
|
|
69
|
+
statusPathLoginBootstrap.promise.catch(() => undefined);
|
|
70
|
+
};
|
|
71
|
+
export const resolvePluginStatusSnapshotWithAuthBootstrap = async ({
|
|
72
|
+
worktree,
|
|
73
|
+
directory,
|
|
74
|
+
signal
|
|
75
|
+
}) => {
|
|
76
|
+
const snapshot = await resolvePluginStatusSnapshot({
|
|
77
|
+
worktree,
|
|
78
|
+
directory,
|
|
79
|
+
signal
|
|
80
|
+
});
|
|
81
|
+
if (snapshot.status !== 'missing_auth') return snapshot;
|
|
82
|
+
const config = await resolveConfig(worktree);
|
|
83
|
+
startStatusPathLoginBootstrap(config);
|
|
84
|
+
if (statusPathLoginBootstrap.message) {
|
|
85
|
+
return withStatusMessage(snapshot, statusPathLoginBootstrap.message);
|
|
86
|
+
}
|
|
87
|
+
return withStatusMessage(snapshot, 'Browser login is pending from the TUI/status path.');
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=auth-bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createPluginSession","openBrowser","startLoginFlow","resolveConfig","LOGIN_TIMEOUT_MS","OIDC_CALLBACK_URL","toAuthState","writeAuthState","resolvePluginStatusSnapshot","withStatusMessage","STATUS_PATH_LOGIN_RETRY_COOLDOWN_MS","statusPathLoginBootstrap","promise","status","message","failedAt","createIdleLoginBootstrapSnapshot","trigger","startedAt","expiresAt","browserUrl","browserOpenError","email","startStatusPathLoginBootstrap","config","Date","now","loginSignal","AbortSignal","timeout","loginStart","callbackPayload","callbackPromise","Error","state","expectedState","pluginSession","code","codeVerifier","redirectUri","signal","authState","authStatePath","closeCallbackServer","catch","undefined","error","finally","resolvePluginStatusSnapshotWithAuthBootstrap","worktree","directory","snapshot"],"sources":["../../src/server/auth-bootstrap.ts"],"sourcesContent":["import { createPluginSession, openBrowser, startLoginFlow } from './auth-flow.js';\nimport { resolveConfig } from './config.js';\nimport { LOGIN_TIMEOUT_MS, OIDC_CALLBACK_URL } from './constants.js';\nimport { toAuthState, writeAuthState } from './auth-store.js';\nimport { resolvePluginStatusSnapshot, withStatusMessage } from './status.js';\nimport type {\n AuthState,\n LoginBootstrapSnapshot,\n PluginStatusSnapshot,\n ResolvedConfig,\n StatusPathLoginBootstrap,\n} from './types.js';\n\nconst STATUS_PATH_LOGIN_RETRY_COOLDOWN_MS = 60_000;\n\nconst statusPathLoginBootstrap: StatusPathLoginBootstrap = {\n promise: null,\n status: 'idle',\n message: null,\n failedAt: null,\n};\n\nexport const createIdleLoginBootstrapSnapshot = (): LoginBootstrapSnapshot => ({\n status: 'idle',\n trigger: null,\n startedAt: null,\n expiresAt: null,\n browserUrl: null,\n browserOpenError: null,\n email: null,\n message: null,\n});\n\nconst startStatusPathLoginBootstrap = (config: ResolvedConfig): void => {\n if (statusPathLoginBootstrap.promise) return;\n\n if (\n statusPathLoginBootstrap.status === 'failed' &&\n statusPathLoginBootstrap.failedAt &&\n Date.now() - statusPathLoginBootstrap.failedAt < STATUS_PATH_LOGIN_RETRY_COOLDOWN_MS\n ) {\n return;\n }\n\n statusPathLoginBootstrap.status = 'pending';\n statusPathLoginBootstrap.message = 'Browser login started automatically from the TUI/status path.';\n statusPathLoginBootstrap.failedAt = null;\n\n statusPathLoginBootstrap.promise = (async (): Promise<AuthState> => {\n const loginSignal = AbortSignal.timeout(LOGIN_TIMEOUT_MS);\n const loginStart = await startLoginFlow(loginSignal);\n const browserOpenError = await openBrowser(loginStart.browserUrl);\n\n if (browserOpenError) {\n statusPathLoginBootstrap.message = `Automatic browser open failed. Open ${loginStart.browserUrl} manually.`;\n }\n\n try {\n const callbackPayload = await loginStart.callbackPromise;\n\n if (callbackPayload.status === 'error') {\n throw new Error(callbackPayload.message);\n }\n\n if (callbackPayload.state !== loginStart.expectedState) {\n throw new Error('OAuth callback state did not match the original login request.');\n }\n\n const pluginSession = await createPluginSession({\n code: callbackPayload.code,\n codeVerifier: loginStart.codeVerifier,\n redirectUri: OIDC_CALLBACK_URL,\n config,\n signal: loginSignal,\n });\n const authState = toAuthState(pluginSession);\n await writeAuthState(config.authStatePath, authState);\n\n statusPathLoginBootstrap.status = 'authenticated';\n statusPathLoginBootstrap.message = `Browser login completed successfully for ${authState.email}.`;\n return authState;\n } finally {\n await loginStart.closeCallbackServer().catch(() => undefined);\n }\n })()\n .catch((error: unknown) => {\n statusPathLoginBootstrap.status = 'failed';\n statusPathLoginBootstrap.failedAt = Date.now();\n statusPathLoginBootstrap.message = error instanceof Error ? error.message : 'Browser login failed.';\n throw error;\n })\n .finally(() => {\n statusPathLoginBootstrap.promise = null;\n });\n\n statusPathLoginBootstrap.promise.catch(() => undefined);\n};\n\nexport const resolvePluginStatusSnapshotWithAuthBootstrap = async ({\n worktree,\n directory,\n signal,\n}: {\n worktree: string;\n directory: string;\n signal: AbortSignal;\n}): Promise<PluginStatusSnapshot> => {\n const snapshot = await resolvePluginStatusSnapshot({\n worktree,\n directory,\n signal,\n });\n\n if (snapshot.status !== 'missing_auth') return snapshot;\n\n const config = await resolveConfig(worktree);\n startStatusPathLoginBootstrap(config);\n\n if (statusPathLoginBootstrap.message) {\n return withStatusMessage(snapshot, statusPathLoginBootstrap.message);\n }\n\n return withStatusMessage(snapshot, 'Browser login is pending from the TUI/status path.');\n};\n"],"mappings":"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","ignoreList":[]}
|
package/dist/server/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FetchResult, PublishedSkillArtifactDetailPayload, PublishedSkillArtifactDetailPurpose, ResolvedConfig, WorkspaceResolution } from './types.js';
|
|
1
|
+
import type { FetchResult, PublishedSkillArtifactDetailPayload, PublishedSkillArtifactDetailPurpose, ResolvedConfig, WizardArtifactDetailPayload, WizardArtifactFetchResult, WizardArtifactKind, WorkspaceResolution } from './types.js';
|
|
2
2
|
export declare const fetchPublishedSkillsGraphQl: <TData>({ worktree, config, query, variables, signal, onAuthStateChanged, }: {
|
|
3
3
|
worktree: string;
|
|
4
4
|
config: ResolvedConfig;
|
|
@@ -17,6 +17,7 @@ export declare const fetchPublishedSkillsGraphQl: <TData>({ worktree, config, qu
|
|
|
17
17
|
}>;
|
|
18
18
|
}>;
|
|
19
19
|
export declare const fetchPublishedSkillsCatalog: (worktree: string, config: ResolvedConfig, resolution: WorkspaceResolution, signal: AbortSignal, onAuthStateChanged?: () => void) => Promise<FetchResult>;
|
|
20
|
+
export declare const fetchWizardArtifactsCatalog: (worktree: string, config: ResolvedConfig, resolution: WorkspaceResolution, artifactKind: WizardArtifactKind, signal: AbortSignal, onAuthStateChanged?: () => void) => Promise<WizardArtifactFetchResult>;
|
|
20
21
|
export declare const maybePersistWorkspaceSlugFromCatalog: ({ config, resolution, fetchResult, }: {
|
|
21
22
|
config: ResolvedConfig;
|
|
22
23
|
resolution: WorkspaceResolution;
|
|
@@ -49,3 +50,31 @@ export declare const fetchPublishedSkillDetail: ({ worktree, config, resolution,
|
|
|
49
50
|
ok: false;
|
|
50
51
|
}>;
|
|
51
52
|
}>;
|
|
53
|
+
export declare const fetchWizardArtifactDetail: ({ worktree, config, resolution, artifactKind, artifactVersionId, signal, onAuthStateChanged, purpose, }: {
|
|
54
|
+
worktree: string;
|
|
55
|
+
config: ResolvedConfig;
|
|
56
|
+
resolution: WorkspaceResolution;
|
|
57
|
+
artifactKind: WizardArtifactKind;
|
|
58
|
+
artifactVersionId: string;
|
|
59
|
+
signal: AbortSignal;
|
|
60
|
+
onAuthStateChanged?: () => void;
|
|
61
|
+
purpose: PublishedSkillArtifactDetailPurpose;
|
|
62
|
+
}) => Promise<{
|
|
63
|
+
ok: true;
|
|
64
|
+
artifact: WizardArtifactDetailPayload;
|
|
65
|
+
} | {
|
|
66
|
+
ok: false;
|
|
67
|
+
result: {
|
|
68
|
+
ok: false;
|
|
69
|
+
status: "not_found";
|
|
70
|
+
authMode: "session";
|
|
71
|
+
message: string;
|
|
72
|
+
fetchedAt: string;
|
|
73
|
+
source: "network";
|
|
74
|
+
};
|
|
75
|
+
} | {
|
|
76
|
+
ok: false;
|
|
77
|
+
result: Extract<FetchResult, {
|
|
78
|
+
ok: false;
|
|
79
|
+
}>;
|
|
80
|
+
}>;
|
package/dist/server/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PUBLISHED_SKILL_DETAIL_QUERY, PUBLISHED_SKILLS_CATALOG_QUERY } from '../graphql-operations.js';
|
|
1
|
+
import { PUBLISHED_SKILL_DETAIL_QUERY, PUBLISHED_SKILLS_CATALOG_QUERY, WIZARD_ARTIFACT_DETAIL_QUERY, WIZARD_ARTIFACTS_CATALOG_QUERY } from '../graphql-operations.js';
|
|
2
2
|
import { clearAuthState, resolveStoredAuthState, upsertWorkspaceSlugMapping } from './auth-store.js';
|
|
3
3
|
import { toWorkspaceSlug } from './path-utils.js';
|
|
4
4
|
import { toDeliveryInput } from './workspace.js';
|
|
@@ -180,6 +180,41 @@ export const fetchPublishedSkillsCatalog = async (worktree, config, resolution,
|
|
|
180
180
|
source: 'network'
|
|
181
181
|
};
|
|
182
182
|
};
|
|
183
|
+
export const fetchWizardArtifactsCatalog = async (worktree, config, resolution, artifactKind, signal, onAuthStateChanged) => {
|
|
184
|
+
const response = await fetchPublishedSkillsGraphQl({
|
|
185
|
+
worktree,
|
|
186
|
+
config,
|
|
187
|
+
query: WIZARD_ARTIFACTS_CATALOG_QUERY,
|
|
188
|
+
variables: {
|
|
189
|
+
input: {
|
|
190
|
+
...toDeliveryInput(resolution),
|
|
191
|
+
artifactKind
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
signal,
|
|
195
|
+
onAuthStateChanged
|
|
196
|
+
});
|
|
197
|
+
if (!response.ok) return response.result;
|
|
198
|
+
const payload = response.data.pluginWizardArtifacts;
|
|
199
|
+
if (!payload) {
|
|
200
|
+
return {
|
|
201
|
+
ok: false,
|
|
202
|
+
status: 'request_failed',
|
|
203
|
+
authMode: 'session',
|
|
204
|
+
message: 'GraphQL response did not include pluginWizardArtifacts.',
|
|
205
|
+
fetchedAt: response.fetchedAt,
|
|
206
|
+
source: 'network'
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
ok: true,
|
|
211
|
+
status: 'ready',
|
|
212
|
+
authMode: 'session',
|
|
213
|
+
payload,
|
|
214
|
+
fetchedAt: response.fetchedAt,
|
|
215
|
+
source: 'network'
|
|
216
|
+
};
|
|
217
|
+
};
|
|
183
218
|
export const maybePersistWorkspaceSlugFromCatalog = async ({
|
|
184
219
|
config,
|
|
185
220
|
resolution,
|
|
@@ -241,4 +276,49 @@ export const fetchPublishedSkillDetail = async ({
|
|
|
241
276
|
artifact
|
|
242
277
|
};
|
|
243
278
|
};
|
|
279
|
+
export const fetchWizardArtifactDetail = async ({
|
|
280
|
+
worktree,
|
|
281
|
+
config,
|
|
282
|
+
resolution,
|
|
283
|
+
artifactKind,
|
|
284
|
+
artifactVersionId,
|
|
285
|
+
signal,
|
|
286
|
+
onAuthStateChanged,
|
|
287
|
+
purpose
|
|
288
|
+
}) => {
|
|
289
|
+
const response = await fetchPublishedSkillsGraphQl({
|
|
290
|
+
worktree,
|
|
291
|
+
config,
|
|
292
|
+
query: WIZARD_ARTIFACT_DETAIL_QUERY,
|
|
293
|
+
variables: {
|
|
294
|
+
input: {
|
|
295
|
+
...toDeliveryInput(resolution),
|
|
296
|
+
artifactKind,
|
|
297
|
+
artifactVersionId,
|
|
298
|
+
purpose
|
|
299
|
+
}
|
|
300
|
+
},
|
|
301
|
+
signal,
|
|
302
|
+
onAuthStateChanged
|
|
303
|
+
});
|
|
304
|
+
if (!response.ok) return response;
|
|
305
|
+
const artifact = response.data.pluginWizardArtifactVersion;
|
|
306
|
+
if (!artifact) {
|
|
307
|
+
return {
|
|
308
|
+
ok: false,
|
|
309
|
+
result: {
|
|
310
|
+
ok: false,
|
|
311
|
+
status: 'not_found',
|
|
312
|
+
authMode: 'session',
|
|
313
|
+
message: 'Wizard artifact detail is not effective for the current scope.',
|
|
314
|
+
fetchedAt: response.fetchedAt,
|
|
315
|
+
source: 'network'
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
return {
|
|
320
|
+
ok: true,
|
|
321
|
+
artifact
|
|
322
|
+
};
|
|
323
|
+
};
|
|
244
324
|
//# sourceMappingURL=client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PUBLISHED_SKILL_DETAIL_QUERY","PUBLISHED_SKILLS_CATALOG_QUERY","clearAuthState","resolveStoredAuthState","upsertWorkspaceSlugMapping","toWorkspaceSlug","toDeliveryInput","isUnauthorizedGraphQlMessage","message","normalizedMessage","toLowerCase","includes","fetchPublishedSkillsGraphQl","worktree","config","query","variables","signal","onAuthStateChanged","authState","fetchedAt","Date","toISOString","ok","result","status","authMode","source","response","fetch","graphqlUrl","method","headers","authorization","sessionToken","body","JSON","stringify","error","Error","authStatePath","json","errors","length","map","join","some","data","fetchPublishedSkillsCatalog","resolution","input","payload","pluginPublishedSkills","maybePersistWorkspaceSlugFromCatalog","fetchResult","backendWorkspaceSlug","workspace","slug","trim","normalizedWorkspaceSlug","workspaceSlug","workspaceSlugSource","configFile","repositoryUrl","repositoryRoot","fetchPublishedSkillDetail","skillVersionId","purpose","artifact","pluginPublishedSkillVersionArtifact"],"sources":["../../src/server/client.ts"],"sourcesContent":["import {\n PUBLISHED_SKILL_DETAIL_QUERY,\n PUBLISHED_SKILLS_CATALOG_QUERY,\n} from '../graphql-operations.js';\nimport { clearAuthState, resolveStoredAuthState, upsertWorkspaceSlugMapping } from './auth-store.js';\nimport { toWorkspaceSlug } from './path-utils.js';\nimport { toDeliveryInput } from './workspace.js';\nimport type {\n FetchResult,\n GraphQLResponse,\n PublishedSkillArtifactDetailPayload,\n PublishedSkillArtifactDetailPurpose,\n PublishedSkillCatalogResponse,\n PublishedSkillDetailResponse,\n ResolvedConfig,\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\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 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"],"mappings":"AAAA,SACEA,4BAA4B,EAC5BC,8BAA8B,QACzB,0BAA0B;AACjC,SAASC,cAAc,EAAEC,sBAAsB,EAAEC,0BAA0B,QAAQ,iBAAiB;AACpG,SAASC,eAAe,QAAQ,iBAAiB;AACjD,SAASC,eAAe,QAAQ,gBAAgB;AAYhD,MAAMC,4BAA4B,GAAIC,OAAe,IAAc;EACjE,MAAMC,iBAAiB,GAAGD,OAAO,CAACE,WAAW,CAAC,CAAC;EAC/C,OAAOD,iBAAiB,CAACE,QAAQ,CAAC,gBAAgB,CAAC,IAAIF,iBAAiB,CAACE,QAAQ,CAAC,cAAc,CAAC;AACnG,CAAC;AAED,OAAO,MAAMC,2BAA2B,GAAG,MAAAA,CAAc;EACvDC,QAAQ;EACRC,MAAM;EACNC,KAAK;EACLC,SAAS;EACTC,MAAM;EACNC;AAQF,CAAC,KAGI;EACH,MAAMC,SAAS,GAAG,MAAMhB,sBAAsB,CAACU,QAAQ,EAAEC,MAAM,CAAC;EAChE,MAAMM,SAAS,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;EAE1C,IAAI,CAACH,SAAS,EAAE;IACd,OAAO;MACLI,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE;QACND,EAAE,EAAE,KAAK;QACTE,MAAM,EAAE,cAAc;QACtBC,QAAQ,EAAE,SAAS;QACnBlB,OAAO,EACL,+PAA+P;QACjQY,SAAS;QACTO,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,IAAIC,QAAkB;EAEtB,IAAI;IACFA,QAAQ,GAAG,MAAMC,KAAK,CAACf,MAAM,CAACgB,UAAU,EAAE;MACxCC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QACP,cAAc,EAAE,kBAAkB;QAClCC,aAAa,EAAE,UAAUd,SAAS,CAACe,YAAY;MACjD,CAAC;MACDC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;QAAEtB,KAAK;QAAEC;MAAU,CAAC,CAAC;MAC1CC;IACF,CAAC,CAAC;EACJ,CAAC,CAAC,OAAOqB,KAAK,EAAE;IACd,OAAO;MACLf,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE;QACND,EAAE,EAAE,KAAK;QACTE,MAAM,EAAE,gBAAgB;QACxBC,QAAQ,EAAE,SAAS;QACnBlB,OAAO,EAAE8B,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAAC9B,OAAO,GAAG,qBAAqB;QACvEY,SAAS;QACTO,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,IAAIC,QAAQ,CAACH,MAAM,KAAK,GAAG,IAAIG,QAAQ,CAACH,MAAM,KAAK,GAAG,EAAE;IACtD,MAAMvB,cAAc,CAACY,MAAM,CAAC0B,aAAa,CAAC;IAC1CtB,kBAAkB,GAAG,CAAC;IACtB,OAAO;MACLK,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE;QACND,EAAE,EAAE,KAAK;QACTE,MAAM,EAAE,cAAc;QACtBC,QAAQ,EAAE,SAAS;QACnBlB,OAAO,EACL,mJAAmJ;QACrJY,SAAS;QACTO,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,IAAI,CAACC,QAAQ,CAACL,EAAE,EAAE;IAChB,OAAO;MACLA,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE;QACND,EAAE,EAAE,KAAK;QACTE,MAAM,EAAE,gBAAgB;QACxBC,QAAQ,EAAE,SAAS;QACnBlB,OAAO,EAAE,oCAAoCoB,QAAQ,CAACH,MAAM,GAAG;QAC/DL,SAAS;QACTO,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,IAAIQ,IAA4B;EAEhC,IAAI;IACFA,IAAI,GAAI,MAAMP,QAAQ,CAACa,IAAI,CAAC,CAA4B;EAC1D,CAAC,CAAC,OAAOH,KAAK,EAAE;IACd,OAAO;MACLf,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE;QACND,EAAE,EAAE,KAAK;QACTE,MAAM,EAAE,gBAAgB;QACxBC,QAAQ,EAAE,SAAS;QACnBlB,OAAO,EAAE,wCAAwC8B,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAAC9B,OAAO,GAAG,qBAAqB,EAAE;QACjHY,SAAS;QACTO,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,IAAIQ,IAAI,CAACO,MAAM,EAAEC,MAAM,EAAE;IACvB,MAAMnC,OAAO,GAAG2B,IAAI,CAACO,MAAM,CAACE,GAAG,CAAEN,KAAK,IAAKA,KAAK,CAAC9B,OAAO,CAAC,CAACqC,IAAI,CAAC,IAAI,CAAC;IAEpE,IAAIV,IAAI,CAACO,MAAM,CAACI,IAAI,CAAER,KAAK,IAAK/B,4BAA4B,CAAC+B,KAAK,CAAC9B,OAAO,CAAC,CAAC,EAAE;MAC5E,MAAMN,cAAc,CAACY,MAAM,CAAC0B,aAAa,CAAC;MAC1CtB,kBAAkB,GAAG,CAAC;MACtB,OAAO;QACLK,EAAE,EAAE,KAAK;QACTC,MAAM,EAAE;UACND,EAAE,EAAE,KAAK;UACTE,MAAM,EAAE,cAAc;UACtBC,QAAQ,EAAE,SAAS;UACnBlB,OAAO,EACL,0IAA0I;UAC5IY,SAAS;UACTO,MAAM,EAAE;QACV;MACF,CAAC;IACH;IAEA,OAAO;MACLJ,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE;QAAED,EAAE,EAAE,KAAK;QAAEE,MAAM,EAAE,gBAAgB;QAAEC,QAAQ,EAAE,SAAS;QAAElB,OAAO;QAAEY,SAAS;QAAEO,MAAM,EAAE;MAAU;IAC5G,CAAC;EACH;EAEA,IAAI,CAACQ,IAAI,CAACY,IAAI,EAAE;IACd,OAAO;MACLxB,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE;QACND,EAAE,EAAE,KAAK;QACTE,MAAM,EAAE,gBAAgB;QACxBC,QAAQ,EAAE,SAAS;QACnBlB,OAAO,EAAE,wCAAwC;QACjDY,SAAS;QACTO,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,OAAO;IAAEJ,EAAE,EAAE,IAAI;IAAEwB,IAAI,EAAEZ,IAAI,CAACY,IAAI;IAAE3B;EAAU,CAAC;AACjD,CAAC;AAED,OAAO,MAAM4B,2BAA2B,GAAG,MAAAA,CACzCnC,QAAgB,EAChBC,MAAsB,EACtBmC,UAA+B,EAC/BhC,MAAmB,EACnBC,kBAA+B,KACN;EACzB,MAAMU,QAAQ,GAAG,MAAMhB,2BAA2B,CAAgC;IAChFC,QAAQ;IACRC,MAAM;IACNC,KAAK,EAAEd,8BAA8B;IACrCe,SAAS,EAAE;MAAEkC,KAAK,EAAE5C,eAAe,CAAC2C,UAAU;IAAE,CAAC;IACjDhC,MAAM;IACNC;EACF,CAAC,CAAC;EAEF,IAAI,CAACU,QAAQ,CAACL,EAAE,EAAE,OAAOK,QAAQ,CAACJ,MAAM;EAExC,MAAM2B,OAAO,GAAGvB,QAAQ,CAACmB,IAAI,CAACK,qBAAqB;EAEnD,IAAI,CAACD,OAAO,EAAE;IACZ,OAAO;MACL5B,EAAE,EAAE,KAAK;MACTE,MAAM,EAAE,gBAAgB;MACxBC,QAAQ,EAAE,SAAS;MACnBlB,OAAO,EAAE,yDAAyD;MAClEY,SAAS,EAAEQ,QAAQ,CAACR,SAAS;MAC7BO,MAAM,EAAE;IACV,CAAC;EACH;EAEA,OAAO;IACLJ,EAAE,EAAE,IAAI;IACRE,MAAM,EAAE,OAAO;IACfC,QAAQ,EAAE,SAAS;IACnByB,OAAO;IACP/B,SAAS,EAAEQ,QAAQ,CAACR,SAAS;IAC7BO,MAAM,EAAE;EACV,CAAC;AACH,CAAC;AAED,OAAO,MAAM0B,oCAAoC,GAAG,MAAAA,CAAO;EACzDvC,MAAM;EACNmC,UAAU;EACVK;AAKF,CAAC,KAAoB;EACnB,IAAI,CAACA,WAAW,CAAC/B,EAAE,EAAE;EAErB,MAAMgC,oBAAoB,GAAGD,WAAW,CAACH,OAAO,CAACK,SAAS,EAAEC,IAAI,EAAEC,IAAI,CAAC,CAAC;EACxE,IAAI,CAACH,oBAAoB,EAAE;EAE3B,MAAMI,uBAAuB,GAAGtD,eAAe,CAACkD,oBAAoB,CAAC;EACrE,IAAI,CAACI,uBAAuB,EAAE;EAE9B,IAAIV,UAAU,CAACW,aAAa,KAAKD,uBAAuB,IAAIV,UAAU,CAACY,mBAAmB,KAAK,UAAU,EAAE;EAE3G,MAAMzD,0BAA0B,CAAC;IAC/B0D,UAAU,EAAEhD,MAAM,CAAC0B,aAAa;IAChCuB,aAAa,EAAEd,UAAU,CAACc,aAAa;IACvCC,cAAc,EAAEf,UAAU,CAACe,cAAc;IACzCJ,aAAa,EAAED;EACjB,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,MAAMM,yBAAyB,GAAG,MAAAA,CAAO;EAC9CpD,QAAQ;EACRC,MAAM;EACNmC,UAAU;EACViB,cAAc;EACdjD,MAAM;EACNC,kBAAkB;EAClBiD;AASF,CAAC,KAcI;EACH,MAAMvC,QAAQ,GAAG,MAAMhB,2BAA2B,CAA+B;IAC/EC,QAAQ;IACRC,MAAM;IACNC,KAAK,EAAEf,4BAA4B;IACnCgB,SAAS,EAAE;MACTkC,KAAK,EAAE;QAAE,GAAG5C,eAAe,CAAC2C,UAAU,CAAC;QAAEiB,cAAc;QAAEC;MAAQ;IACnE,CAAC;IACDlD,MAAM;IACNC;EACF,CAAC,CAAC;EAEF,IAAI,CAACU,QAAQ,CAACL,EAAE,EAAE,OAAOK,QAAQ;EAEjC,MAAMwC,QAAQ,GAAGxC,QAAQ,CAACmB,IAAI,CAACsB,mCAAmC;EAElE,IAAI,CAACD,QAAQ,EAAE;IACb,OAAO;MACL7C,EAAE,EAAE,KAAK;MACTC,MAAM,EAAE;QACND,EAAE,EAAE,KAAK;QACTE,MAAM,EAAE,WAAW;QACnBC,QAAQ,EAAE,SAAS;QACnBlB,OAAO,EAAE,gEAAgE;QACzEY,SAAS,EAAEQ,QAAQ,CAACR,SAAS;QAC7BO,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,OAAO;IAAEJ,EAAE,EAAE,IAAI;IAAE6C;EAAS,CAAC;AAC/B,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["PUBLISHED_SKILL_DETAIL_QUERY","PUBLISHED_SKILLS_CATALOG_QUERY","WIZARD_ARTIFACT_DETAIL_QUERY","WIZARD_ARTIFACTS_CATALOG_QUERY","clearAuthState","resolveStoredAuthState","upsertWorkspaceSlugMapping","toWorkspaceSlug","toDeliveryInput","isUnauthorizedGraphQlMessage","message","normalizedMessage","toLowerCase","includes","fetchPublishedSkillsGraphQl","worktree","config","query","variables","signal","onAuthStateChanged","authState","fetchedAt","Date","toISOString","ok","result","status","authMode","source","response","fetch","graphqlUrl","method","headers","authorization","sessionToken","body","JSON","stringify","error","Error","authStatePath","json","errors","length","map","join","some","data","fetchPublishedSkillsCatalog","resolution","input","payload","pluginPublishedSkills","fetchWizardArtifactsCatalog","artifactKind","pluginWizardArtifacts","maybePersistWorkspaceSlugFromCatalog","fetchResult","backendWorkspaceSlug","workspace","slug","trim","normalizedWorkspaceSlug","workspaceSlug","workspaceSlugSource","configFile","repositoryUrl","repositoryRoot","fetchPublishedSkillDetail","skillVersionId","purpose","artifact","pluginPublishedSkillVersionArtifact","fetchWizardArtifactDetail","artifactVersionId","pluginWizardArtifactVersion"],"sources":["../../src/server/client.ts"],"sourcesContent":["import {\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 } from './auth-store.js';\nimport { toWorkspaceSlug } from './path-utils.js';\nimport { toDeliveryInput } from './workspace.js';\nimport type {\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\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":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { PublishedSkillPreferenceAction, PublishedSkillPreferenceCacheContext, PublishedSkillsIgnoreState, ResolvedConfig, WorkspaceResolution } from './types.js';
|
|
2
|
+
export declare const toIgnoredSkillSlug: (value: string) => string | null;
|
|
3
|
+
export declare const toPublishedSkillPreferenceAction: (value: string) => PublishedSkillPreferenceAction;
|
|
4
|
+
export declare const toPublishedSkillPreferenceScope: (value: string | undefined, defaultScope: "global" | "project") => "global" | "project";
|
|
5
|
+
export declare const resolvePublishedSkillPreferenceCacheContext: (config: ResolvedConfig) => Promise<PublishedSkillPreferenceCacheContext>;
|
|
6
|
+
export declare const getCatalogCacheKey: (workspaceResolution: WorkspaceResolution, preferenceContext: PublishedSkillPreferenceCacheContext) => string;
|
|
7
|
+
export declare const setPublishedSkillIgnored: ({ worktree, directory, skillSlug, ignored, preferenceScope, }: {
|
|
8
|
+
worktree: string;
|
|
9
|
+
directory: string;
|
|
10
|
+
scopeKey?: string;
|
|
11
|
+
skillSlug: string;
|
|
12
|
+
ignored: boolean;
|
|
13
|
+
preferenceScope?: "global" | "project";
|
|
14
|
+
}) => Promise<PublishedSkillsIgnoreState>;
|
|
15
|
+
export declare const setPublishedSkillInstalled: ({ worktree, directory, skillSlug, installed, preferenceScope, }: {
|
|
16
|
+
worktree: string;
|
|
17
|
+
directory: string;
|
|
18
|
+
scopeKey?: string;
|
|
19
|
+
skillSlug: string;
|
|
20
|
+
installed: boolean;
|
|
21
|
+
preferenceScope: "global" | "project";
|
|
22
|
+
}) => Promise<PublishedSkillsIgnoreState>;
|