@aexol/opencode-wizard 0.4.0 → 0.4.2

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.
@@ -6,4 +6,6 @@ export declare const WIZARD_ARTIFACT_DETAIL_QUERY = "\n query PluginWizardArtif
6
6
  export declare const CURRENT_USER_ROLE_QUERY = "\n query PluginCurrentUserRole {\n user {\n me {\n _id\n email\n role\n }\n }\n }\n";
7
7
  export declare const SET_WIZARD_ARTIFACT_PREFERENCE_MUTATION = "\n mutation SetWizardArtifactPreference($input: SetWizardArtifactPreferenceInput!) {\n setWizardArtifactPreference(input: $input) {\n scopeKey\n userKey\n ignoredArtifacts {\n \n assignmentSource\n assignmentType\n scopePath\n includeChildren\n relevance\n recommendationReason\n \n artifact {\n id\n kind\n slug\n name\n summary\n whenToUse\n status\n installPolicy\n }\n artifactVersion {\n id\n version\n title\n summary\n status\n frontmatterName\n frontmatterDescription\n checksum\n revision\n updatedAtCursor\n canonicalFilePath\n publishedAt\n fileCount\n }\n\n\n }\n }\n }\n";
8
8
  export declare const CREATE_OR_UPDATE_SKILL_FROM_MARKDOWN_MUTATION = "\n mutation CreateOrUpdateSkillFromMarkdown($markdownContent: String!) {\n admin {\n createOrUpdateSkillFromMarkdown(markdownContent: $markdownContent) {\n success\n skillSlug\n skillVersionId\n artifactSlug\n artifactVersionId\n errors\n }\n }\n }\n";
9
- export declare const IMPORT_WIZARD_ARTIFACT_SNAPSHOT_MUTATION = "\n mutation ImportWizardArtifactSnapshot($input: ImportWizardArtifactSnapshotInput!) {\n importWizardArtifactSnapshot(input: $input) {\n success\n skillSlug\n skillVersionId\n artifactSlug\n artifactVersionId\n errors\n }\n }\n";
9
+ export declare const EDITOR_SKILL_WORKSPACE_ASSIGNMENT_LOOKUP_QUERY = "\n query EditorSkillWorkspaceAssignmentLookup($skillSlug: String!, $workspaceSlug: String!) {\n admin {\n skill(slug: $skillSlug) {\n id\n slug\n }\n workspace(slug: $workspaceSlug) {\n id\n slug\n }\n }\n }\n";
10
+ export declare const BULK_CREATE_SKILL_ASSIGNMENTS_MUTATION = "\n mutation BulkCreateSkillAssignments($input: BulkCreateSkillAssignmentsInput!) {\n admin {\n bulkCreateSkillAssignments(input: $input) {\n scopePathAssignments {\n id\n }\n skippedScopePathAssignments {\n id\n }\n conflicts {\n target\n inputIndex\n reason\n message\n }\n }\n }\n }\n";
11
+ export declare const IMPORT_WIZARD_ARTIFACT_SNAPSHOT_MUTATION = "\n mutation ImportWizardArtifactSnapshot($input: ImportWizardArtifactSnapshotInput!) {\n admin {\n importWizardArtifactSnapshot(input: $input) {\n success\n skillSlug\n skillVersionId\n artifactSlug\n artifactVersionId\n errors\n }\n }\n }\n";
@@ -260,15 +260,51 @@ export const CREATE_OR_UPDATE_SKILL_FROM_MARKDOWN_MUTATION = `
260
260
  }
261
261
  }
262
262
  `;
263
+ export const EDITOR_SKILL_WORKSPACE_ASSIGNMENT_LOOKUP_QUERY = `
264
+ query EditorSkillWorkspaceAssignmentLookup($skillSlug: String!, $workspaceSlug: String!) {
265
+ admin {
266
+ skill(slug: $skillSlug) {
267
+ id
268
+ slug
269
+ }
270
+ workspace(slug: $workspaceSlug) {
271
+ id
272
+ slug
273
+ }
274
+ }
275
+ }
276
+ `;
277
+ export const BULK_CREATE_SKILL_ASSIGNMENTS_MUTATION = `
278
+ mutation BulkCreateSkillAssignments($input: BulkCreateSkillAssignmentsInput!) {
279
+ admin {
280
+ bulkCreateSkillAssignments(input: $input) {
281
+ scopePathAssignments {
282
+ id
283
+ }
284
+ skippedScopePathAssignments {
285
+ id
286
+ }
287
+ conflicts {
288
+ target
289
+ inputIndex
290
+ reason
291
+ message
292
+ }
293
+ }
294
+ }
295
+ }
296
+ `;
263
297
  export const IMPORT_WIZARD_ARTIFACT_SNAPSHOT_MUTATION = `
264
298
  mutation ImportWizardArtifactSnapshot($input: ImportWizardArtifactSnapshotInput!) {
265
- importWizardArtifactSnapshot(input: $input) {
266
- success
267
- skillSlug
268
- skillVersionId
269
- artifactSlug
270
- artifactVersionId
271
- errors
299
+ admin {
300
+ importWizardArtifactSnapshot(input: $input) {
301
+ success
302
+ skillSlug
303
+ skillVersionId
304
+ artifactSlug
305
+ artifactVersionId
306
+ errors
307
+ }
272
308
  }
273
309
  }
274
310
  `;
@@ -1 +1 @@
1
- {"version":3,"names":["PUBLISHED_SKILL_CORE_FIELDS","PUBLISHED_SKILL_ASSIGNMENT_FIELDS","PUBLISHED_SKILL_INSTALLABLE_FIELDS","PUBLISHED_SKILLS_CATALOG_QUERY","SET_PUBLISHED_SKILL_PREFERENCE_MUTATION","PUBLISHED_SKILL_DETAIL_QUERY","WIZARD_ARTIFACT_CORE_FIELDS","WIZARD_ARTIFACT_ASSIGNMENT_FIELDS","WIZARD_ARTIFACT_INSTALLABLE_FIELDS","WIZARD_ARTIFACTS_CATALOG_QUERY","WIZARD_ARTIFACT_DETAIL_QUERY","CURRENT_USER_ROLE_QUERY","SET_WIZARD_ARTIFACT_PREFERENCE_MUTATION","CREATE_OR_UPDATE_SKILL_FROM_MARKDOWN_MUTATION","IMPORT_WIZARD_ARTIFACT_SNAPSHOT_MUTATION"],"sources":["../src/graphql-operations.ts"],"sourcesContent":["const PUBLISHED_SKILL_CORE_FIELDS = `\n skill {\n id\n slug\n name\n summary\n whenToUse\n status\n installPolicy\n tags {\n id\n slug\n label\n description\n facet {\n id\n slug\n label\n description\n }\n }\n }\n skillVersion {\n id\n version\n title\n summary\n status\n }\n publishedArtifact {\n id\n frontmatterName\n frontmatterDescription\n checksum\n publishedAt\n fileCount\n }\n`;\n\nconst PUBLISHED_SKILL_ASSIGNMENT_FIELDS = `\n assignmentSource\n assignmentType\n scopePath\n includeChildren\n relevance\n recommendationReason\n ${PUBLISHED_SKILL_CORE_FIELDS}\n`;\n\nconst PUBLISHED_SKILL_INSTALLABLE_FIELDS = `\n relevance\n recommendationReason\n ${PUBLISHED_SKILL_CORE_FIELDS}\n`;\n\nexport const PUBLISHED_SKILLS_CATALOG_QUERY = `\n query PluginPublishedSkills($input: PublishedSkillsDeliveryInput!) {\n pluginPublishedSkills(input: $input) {\n workspace {\n id\n slug\n name\n repositoryUrl\n defaultBranch\n status\n }\n directoryPath\n skills {\n ${PUBLISHED_SKILL_ASSIGNMENT_FIELDS}\n }\n catalogSkills {\n ${PUBLISHED_SKILL_INSTALLABLE_FIELDS}\n }\n userPreferences {\n scopeKey\n userKey\n ignoredSkills {\n ${PUBLISHED_SKILL_ASSIGNMENT_FIELDS}\n }\n }\n }\n }\n`;\n\nexport const SET_PUBLISHED_SKILL_PREFERENCE_MUTATION = `\n mutation SetPublishedSkillPreference($input: SetPublishedSkillPreferenceInput!) {\n setPublishedSkillPreference(input: $input) {\n scopeKey\n userKey\n ignoredSkills {\n ${PUBLISHED_SKILL_ASSIGNMENT_FIELDS}\n }\n }\n }\n`;\n\nexport const PUBLISHED_SKILL_DETAIL_QUERY = `\n query PluginPublishedSkillVersionArtifact($input: PublishedSkillArtifactDetailInput!) {\n pluginPublishedSkillVersionArtifact(input: $input) {\n id\n frontmatterName\n frontmatterDescription\n markdownBody\n renderedContent\n checksum\n publishedAt\n fileCount\n files {\n id\n relativePath\n contentType\n content\n checksum\n size\n sortOrder\n }\n }\n }\n`;\n\nconst WIZARD_ARTIFACT_CORE_FIELDS = `\n artifact {\n id\n kind\n slug\n name\n summary\n whenToUse\n status\n installPolicy\n }\n artifactVersion {\n id\n version\n title\n summary\n status\n frontmatterName\n frontmatterDescription\n checksum\n revision\n updatedAtCursor\n canonicalFilePath\n publishedAt\n fileCount\n }\n`;\n\nconst WIZARD_ARTIFACT_ASSIGNMENT_FIELDS = `\n assignmentSource\n assignmentType\n scopePath\n includeChildren\n relevance\n recommendationReason\n ${WIZARD_ARTIFACT_CORE_FIELDS}\n`;\n\nconst WIZARD_ARTIFACT_INSTALLABLE_FIELDS = `\n relevance\n recommendationReason\n ${WIZARD_ARTIFACT_CORE_FIELDS}\n`;\n\nexport const WIZARD_ARTIFACTS_CATALOG_QUERY = `\n query PluginWizardArtifacts($input: WizardArtifactsDeliveryInput!) {\n pluginWizardArtifacts(input: $input) {\n artifactKind\n workspace {\n id\n slug\n name\n repositoryUrl\n defaultBranch\n status\n }\n directoryPath\n artifacts {\n ${WIZARD_ARTIFACT_ASSIGNMENT_FIELDS}\n }\n catalogArtifacts {\n ${WIZARD_ARTIFACT_INSTALLABLE_FIELDS}\n }\n artifactPreferences {\n scopeKey\n userKey\n ignoredArtifacts {\n ${WIZARD_ARTIFACT_ASSIGNMENT_FIELDS}\n }\n }\n unsupportedReason\n message\n }\n }\n`;\n\nexport const WIZARD_ARTIFACT_DETAIL_QUERY = `\n query PluginWizardArtifactVersion($input: WizardArtifactDetailInput!) {\n pluginWizardArtifactVersion(input: $input) {\n id\n artifact {\n id\n kind\n slug\n name\n summary\n whenToUse\n status\n installPolicy\n }\n version\n title\n summary\n status\n frontmatterName\n frontmatterDescription\n markdownBody\n renderedContent\n checksum\n revision\n updatedAtCursor\n canonicalFilePath\n publishedAt\n fileCount\n files {\n id\n relativePath\n contentType\n content\n checksum\n size\n sortOrder\n }\n }\n }\n`;\n\nexport const CURRENT_USER_ROLE_QUERY = `\n query PluginCurrentUserRole {\n user {\n me {\n _id\n email\n role\n }\n }\n }\n`;\n\nexport const SET_WIZARD_ARTIFACT_PREFERENCE_MUTATION = `\n mutation SetWizardArtifactPreference($input: SetWizardArtifactPreferenceInput!) {\n setWizardArtifactPreference(input: $input) {\n scopeKey\n userKey\n ignoredArtifacts {\n ${WIZARD_ARTIFACT_ASSIGNMENT_FIELDS}\n }\n }\n }\n`;\n\nexport const CREATE_OR_UPDATE_SKILL_FROM_MARKDOWN_MUTATION = `\n mutation CreateOrUpdateSkillFromMarkdown($markdownContent: String!) {\n admin {\n createOrUpdateSkillFromMarkdown(markdownContent: $markdownContent) {\n success\n skillSlug\n skillVersionId\n artifactSlug\n artifactVersionId\n errors\n }\n }\n }\n`;\n\nexport const IMPORT_WIZARD_ARTIFACT_SNAPSHOT_MUTATION = `\n mutation ImportWizardArtifactSnapshot($input: ImportWizardArtifactSnapshotInput!) {\n importWizardArtifactSnapshot(input: $input) {\n success\n skillSlug\n skillVersionId\n artifactSlug\n artifactVersionId\n errors\n }\n }\n`;\n"],"mappings":"AAAA,MAAMA,2BAA2B,GAAG;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,iCAAiC,GAAG;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,IAAID,2BAA2B;AAC/B,CAAC;AAED,MAAME,kCAAkC,GAAG;AAC3C;AACA;AACA,IAAIF,2BAA2B;AAC/B,CAAC;AAED,OAAO,MAAMG,8BAA8B,GAAG;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAUF,iCAAiC;AAC3C;AACA;AACA,UAAUC,kCAAkC;AAC5C;AACA;AACA;AACA;AACA;AACA,YAAYD,iCAAiC;AAC7C;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMG,uCAAuC,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA,UAAUH,iCAAiC;AAC3C;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMI,4BAA4B,GAAG;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,2BAA2B,GAAG;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,iCAAiC,GAAG;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,IAAID,2BAA2B;AAC/B,CAAC;AAED,MAAME,kCAAkC,GAAG;AAC3C;AACA;AACA,IAAIF,2BAA2B;AAC/B,CAAC;AAED,OAAO,MAAMG,8BAA8B,GAAG;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAUF,iCAAiC;AAC3C;AACA;AACA,UAAUC,kCAAkC;AAC5C;AACA;AACA;AACA;AACA;AACA,YAAYD,iCAAiC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMG,4BAA4B,GAAG;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMC,uBAAuB,GAAG;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMC,uCAAuC,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA,UAAUL,iCAAiC;AAC3C;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMM,6CAA6C,GAAG;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMC,wCAAwC,GAAG;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["PUBLISHED_SKILL_CORE_FIELDS","PUBLISHED_SKILL_ASSIGNMENT_FIELDS","PUBLISHED_SKILL_INSTALLABLE_FIELDS","PUBLISHED_SKILLS_CATALOG_QUERY","SET_PUBLISHED_SKILL_PREFERENCE_MUTATION","PUBLISHED_SKILL_DETAIL_QUERY","WIZARD_ARTIFACT_CORE_FIELDS","WIZARD_ARTIFACT_ASSIGNMENT_FIELDS","WIZARD_ARTIFACT_INSTALLABLE_FIELDS","WIZARD_ARTIFACTS_CATALOG_QUERY","WIZARD_ARTIFACT_DETAIL_QUERY","CURRENT_USER_ROLE_QUERY","SET_WIZARD_ARTIFACT_PREFERENCE_MUTATION","CREATE_OR_UPDATE_SKILL_FROM_MARKDOWN_MUTATION","EDITOR_SKILL_WORKSPACE_ASSIGNMENT_LOOKUP_QUERY","BULK_CREATE_SKILL_ASSIGNMENTS_MUTATION","IMPORT_WIZARD_ARTIFACT_SNAPSHOT_MUTATION"],"sources":["../src/graphql-operations.ts"],"sourcesContent":["const PUBLISHED_SKILL_CORE_FIELDS = `\n skill {\n id\n slug\n name\n summary\n whenToUse\n status\n installPolicy\n tags {\n id\n slug\n label\n description\n facet {\n id\n slug\n label\n description\n }\n }\n }\n skillVersion {\n id\n version\n title\n summary\n status\n }\n publishedArtifact {\n id\n frontmatterName\n frontmatterDescription\n checksum\n publishedAt\n fileCount\n }\n`;\n\nconst PUBLISHED_SKILL_ASSIGNMENT_FIELDS = `\n assignmentSource\n assignmentType\n scopePath\n includeChildren\n relevance\n recommendationReason\n ${PUBLISHED_SKILL_CORE_FIELDS}\n`;\n\nconst PUBLISHED_SKILL_INSTALLABLE_FIELDS = `\n relevance\n recommendationReason\n ${PUBLISHED_SKILL_CORE_FIELDS}\n`;\n\nexport const PUBLISHED_SKILLS_CATALOG_QUERY = `\n query PluginPublishedSkills($input: PublishedSkillsDeliveryInput!) {\n pluginPublishedSkills(input: $input) {\n workspace {\n id\n slug\n name\n repositoryUrl\n defaultBranch\n status\n }\n directoryPath\n skills {\n ${PUBLISHED_SKILL_ASSIGNMENT_FIELDS}\n }\n catalogSkills {\n ${PUBLISHED_SKILL_INSTALLABLE_FIELDS}\n }\n userPreferences {\n scopeKey\n userKey\n ignoredSkills {\n ${PUBLISHED_SKILL_ASSIGNMENT_FIELDS}\n }\n }\n }\n }\n`;\n\nexport const SET_PUBLISHED_SKILL_PREFERENCE_MUTATION = `\n mutation SetPublishedSkillPreference($input: SetPublishedSkillPreferenceInput!) {\n setPublishedSkillPreference(input: $input) {\n scopeKey\n userKey\n ignoredSkills {\n ${PUBLISHED_SKILL_ASSIGNMENT_FIELDS}\n }\n }\n }\n`;\n\nexport const PUBLISHED_SKILL_DETAIL_QUERY = `\n query PluginPublishedSkillVersionArtifact($input: PublishedSkillArtifactDetailInput!) {\n pluginPublishedSkillVersionArtifact(input: $input) {\n id\n frontmatterName\n frontmatterDescription\n markdownBody\n renderedContent\n checksum\n publishedAt\n fileCount\n files {\n id\n relativePath\n contentType\n content\n checksum\n size\n sortOrder\n }\n }\n }\n`;\n\nconst WIZARD_ARTIFACT_CORE_FIELDS = `\n artifact {\n id\n kind\n slug\n name\n summary\n whenToUse\n status\n installPolicy\n }\n artifactVersion {\n id\n version\n title\n summary\n status\n frontmatterName\n frontmatterDescription\n checksum\n revision\n updatedAtCursor\n canonicalFilePath\n publishedAt\n fileCount\n }\n`;\n\nconst WIZARD_ARTIFACT_ASSIGNMENT_FIELDS = `\n assignmentSource\n assignmentType\n scopePath\n includeChildren\n relevance\n recommendationReason\n ${WIZARD_ARTIFACT_CORE_FIELDS}\n`;\n\nconst WIZARD_ARTIFACT_INSTALLABLE_FIELDS = `\n relevance\n recommendationReason\n ${WIZARD_ARTIFACT_CORE_FIELDS}\n`;\n\nexport const WIZARD_ARTIFACTS_CATALOG_QUERY = `\n query PluginWizardArtifacts($input: WizardArtifactsDeliveryInput!) {\n pluginWizardArtifacts(input: $input) {\n artifactKind\n workspace {\n id\n slug\n name\n repositoryUrl\n defaultBranch\n status\n }\n directoryPath\n artifacts {\n ${WIZARD_ARTIFACT_ASSIGNMENT_FIELDS}\n }\n catalogArtifacts {\n ${WIZARD_ARTIFACT_INSTALLABLE_FIELDS}\n }\n artifactPreferences {\n scopeKey\n userKey\n ignoredArtifacts {\n ${WIZARD_ARTIFACT_ASSIGNMENT_FIELDS}\n }\n }\n unsupportedReason\n message\n }\n }\n`;\n\nexport const WIZARD_ARTIFACT_DETAIL_QUERY = `\n query PluginWizardArtifactVersion($input: WizardArtifactDetailInput!) {\n pluginWizardArtifactVersion(input: $input) {\n id\n artifact {\n id\n kind\n slug\n name\n summary\n whenToUse\n status\n installPolicy\n }\n version\n title\n summary\n status\n frontmatterName\n frontmatterDescription\n markdownBody\n renderedContent\n checksum\n revision\n updatedAtCursor\n canonicalFilePath\n publishedAt\n fileCount\n files {\n id\n relativePath\n contentType\n content\n checksum\n size\n sortOrder\n }\n }\n }\n`;\n\nexport const CURRENT_USER_ROLE_QUERY = `\n query PluginCurrentUserRole {\n user {\n me {\n _id\n email\n role\n }\n }\n }\n`;\n\nexport const SET_WIZARD_ARTIFACT_PREFERENCE_MUTATION = `\n mutation SetWizardArtifactPreference($input: SetWizardArtifactPreferenceInput!) {\n setWizardArtifactPreference(input: $input) {\n scopeKey\n userKey\n ignoredArtifacts {\n ${WIZARD_ARTIFACT_ASSIGNMENT_FIELDS}\n }\n }\n }\n`;\n\nexport const CREATE_OR_UPDATE_SKILL_FROM_MARKDOWN_MUTATION = `\n mutation CreateOrUpdateSkillFromMarkdown($markdownContent: String!) {\n admin {\n createOrUpdateSkillFromMarkdown(markdownContent: $markdownContent) {\n success\n skillSlug\n skillVersionId\n artifactSlug\n artifactVersionId\n errors\n }\n }\n }\n`;\n\nexport const EDITOR_SKILL_WORKSPACE_ASSIGNMENT_LOOKUP_QUERY = `\n query EditorSkillWorkspaceAssignmentLookup($skillSlug: String!, $workspaceSlug: String!) {\n admin {\n skill(slug: $skillSlug) {\n id\n slug\n }\n workspace(slug: $workspaceSlug) {\n id\n slug\n }\n }\n }\n`;\n\nexport const BULK_CREATE_SKILL_ASSIGNMENTS_MUTATION = `\n mutation BulkCreateSkillAssignments($input: BulkCreateSkillAssignmentsInput!) {\n admin {\n bulkCreateSkillAssignments(input: $input) {\n scopePathAssignments {\n id\n }\n skippedScopePathAssignments {\n id\n }\n conflicts {\n target\n inputIndex\n reason\n message\n }\n }\n }\n }\n`;\n\nexport const IMPORT_WIZARD_ARTIFACT_SNAPSHOT_MUTATION = `\n mutation ImportWizardArtifactSnapshot($input: ImportWizardArtifactSnapshotInput!) {\n admin {\n importWizardArtifactSnapshot(input: $input) {\n success\n skillSlug\n skillVersionId\n artifactSlug\n artifactVersionId\n errors\n }\n }\n }\n`;\n"],"mappings":"AAAA,MAAMA,2BAA2B,GAAG;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,iCAAiC,GAAG;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,IAAID,2BAA2B;AAC/B,CAAC;AAED,MAAME,kCAAkC,GAAG;AAC3C;AACA;AACA,IAAIF,2BAA2B;AAC/B,CAAC;AAED,OAAO,MAAMG,8BAA8B,GAAG;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAUF,iCAAiC;AAC3C;AACA;AACA,UAAUC,kCAAkC;AAC5C;AACA;AACA;AACA;AACA;AACA,YAAYD,iCAAiC;AAC7C;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMG,uCAAuC,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA,UAAUH,iCAAiC;AAC3C;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMI,4BAA4B,GAAG;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,2BAA2B,GAAG;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,iCAAiC,GAAG;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,IAAID,2BAA2B;AAC/B,CAAC;AAED,MAAME,kCAAkC,GAAG;AAC3C;AACA;AACA,IAAIF,2BAA2B;AAC/B,CAAC;AAED,OAAO,MAAMG,8BAA8B,GAAG;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAUF,iCAAiC;AAC3C;AACA;AACA,UAAUC,kCAAkC;AAC5C;AACA;AACA;AACA;AACA;AACA,YAAYD,iCAAiC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMG,4BAA4B,GAAG;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMC,uBAAuB,GAAG;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMC,uCAAuC,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA,UAAUL,iCAAiC;AAC3C;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMM,6CAA6C,GAAG;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMC,8CAA8C,GAAG;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMC,sCAAsC,GAAG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMC,wCAAwC,GAAG;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
@@ -91,6 +91,7 @@ type PublishedSkillToolHandlers = {
91
91
  importWizardArtifact: (args: WizardArtifactImportArgs, context: ToolExecuteContext) => Promise<unknown>;
92
92
  };
93
93
  export declare const AVAILABLE_PUBLISHED_SKILL_TOOLS: string[];
94
+ export declare const hasPrivilegedWizardToolRole: (role: string | null | undefined) => boolean;
94
95
  export declare const resolveAvailableTools: (role: string | null | undefined) => string[];
95
96
  export declare const createPublishedSkillToolDefinitions: (tool: ToolFactory, handlers: PublishedSkillToolHandlers) => {
96
97
  sharedTools: {
@@ -1,7 +1,8 @@
1
1
  export const AVAILABLE_PUBLISHED_SKILL_TOOLS = ['opencode_wizard_catalog_fetch', 'opencode_wizard_artifact_fetch', 'opencode_wizard_artifact_preference_set', 'opencode_wizard_published_skills_fetch', 'opencode_wizard_published_skill_preference_set', 'opencode_wizard_status', 'opencode_wizard_editor_create_or_update_skill', 'opencode_wizard_editor_publish_skill', 'opencode_wizard_artifact_import'];
2
2
  const SHARED_PUBLISHED_SKILL_TOOLS = AVAILABLE_PUBLISHED_SKILL_TOOLS.slice(0, 6);
3
+ export const hasPrivilegedWizardToolRole = role => role === 'ADMIN' || role === 'EDITOR';
3
4
  export const resolveAvailableTools = role => {
4
- if (role === 'EDITOR') return [...AVAILABLE_PUBLISHED_SKILL_TOOLS];
5
+ if (hasPrivilegedWizardToolRole(role)) return [...AVAILABLE_PUBLISHED_SKILL_TOOLS];
5
6
  return [...SHARED_PUBLISHED_SKILL_TOOLS];
6
7
  };
7
8
  export const createPublishedSkillToolDefinitions = (tool, handlers) => ({
@@ -82,7 +83,7 @@ export const createPublishedSkillToolDefinitions = (tool, handlers) => ({
82
83
  },
83
84
  editorOnlyTools: {
84
85
  opencode_wizard_editor_create_or_update_skill: tool({
85
- description: 'Canonical EDITOR-only skill creation/update tool. Sends direct SKILL.md markdown content to the backend createOrUpdateSkillFromMarkdown mutation without requiring a local .opencode/skills seed file first.',
86
+ description: 'Canonical privileged skill creation/update tool for ADMIN or EDITOR sessions. Sends direct SKILL.md markdown content to the backend createOrUpdateSkillFromMarkdown mutation and creates a workspace assignment when the directory resolves to a backend workspace.',
86
87
  args: {
87
88
  markdownContent: tool.schema.string().describe('Complete SKILL.md markdown content, including frontmatter when the backend skill contract requires it'),
88
89
  directory: tool.schema.string().optional().describe('Optional absolute or relative directory override')
@@ -92,7 +93,7 @@ export const createPublishedSkillToolDefinitions = (tool, handlers) => ({
92
93
  }
93
94
  }),
94
95
  opencode_wizard_editor_publish_skill: tool({
95
- description: 'Read skill markdown files from .opencode/skills/ and publish them to the backend via the createOrUpdateSkillFromMarkdown mutation. Requires EDITOR role.',
96
+ description: 'Read skill markdown files from .opencode/skills/ and publish them to the backend via the createOrUpdateSkillFromMarkdown mutation, then assign them to the resolved workspace when available. Requires ADMIN or EDITOR role.',
96
97
  args: {
97
98
  skillSlug: tool.schema.string().describe('Skill slug matching a directory under .opencode/skills/'),
98
99
  directory: tool.schema.string().optional().describe('Optional absolute or relative directory override')
@@ -102,7 +103,7 @@ export const createPublishedSkillToolDefinitions = (tool, handlers) => ({
102
103
  }
103
104
  }),
104
105
  opencode_wizard_artifact_import: tool({
105
- description: 'Editor-only import tool for external wizard artifacts. Supports SKILL from GitHub/raw SKILL.md sources and DESIGN_DOC from direct URLs or command-like inputs such as `npx getdesign@latest add bmw-m`. Imported backend artifacts become the plugin runtime authority; no project files are written.',
106
+ description: 'Privileged ADMIN/EDITOR import tool for external wizard artifacts. Supports SKILL from GitHub/raw SKILL.md sources and DESIGN_DOC from direct URLs or command-like inputs such as `npx getdesign@latest add bmw-m`. Imported backend artifacts become the plugin runtime authority; no project files are written.',
106
107
  args: {
107
108
  artifactKind: tool.schema.string().optional().describe('Wizard artifact kind to import: SKILL or DESIGN_DOC; inferred from source when omitted'),
108
109
  source: tool.schema.string().describe('Direct URL or command-like input, e.g. `https://github.com/vercel-labs/skills --skill find-skills` or `npx getdesign@latest add bmw-m`'),
@@ -1 +1 @@
1
- {"version":3,"names":["AVAILABLE_PUBLISHED_SKILL_TOOLS","SHARED_PUBLISHED_SKILL_TOOLS","slice","resolveAvailableTools","role","createPublishedSkillToolDefinitions","tool","handlers","sharedTools","opencode_wizard_catalog_fetch","description","args","artifactKind","schema","string","optional","describe","directory","refresh","boolean","recommendationContext","execute","context","fetchWizardArtifactCatalog","opencode_wizard_artifact_fetch","artifact","artifacts","fetchWizardArtifacts","opencode_wizard_artifact_preference_set","action","preferenceScope","updateWizardArtifactPreference","opencode_wizard_published_skills_fetch","skill","skills","fetchPublishedSkills","opencode_wizard_published_skill_preference_set","updatePublishedSkillPreference","opencode_wizard_status","getStatus","editorOnlyTools","opencode_wizard_editor_create_or_update_skill","markdownContent","createOrUpdateEditorSkill","opencode_wizard_editor_publish_skill","skillSlug","publishEditorSkill","opencode_wizard_artifact_import","source","slug","name","summary","importWizardArtifact"],"sources":["../src/plugin-tools.ts"],"sourcesContent":["export type PublishedSkillFetchArgs = {\n skill?: string;\n skills?: string;\n directory?: string;\n refresh?: boolean;\n recommendationContext?: string;\n};\n\nexport type WizardArtifactKind = 'SKILL' | 'DESIGN_DOC';\n\nexport type WizardArtifactCatalogFetchArgs = {\n artifactKind?: string;\n directory?: string;\n refresh?: boolean;\n recommendationContext?: string;\n};\n\nexport type WizardArtifactFetchArgs = {\n artifactKind?: string;\n artifact?: string;\n artifacts?: string;\n directory?: string;\n refresh?: boolean;\n recommendationContext?: string;\n};\n\nexport type PluginStatusArgs = {\n directory?: string;\n};\n\nexport type PublishedSkillPreferenceArgs = {\n skill: string;\n action: string;\n preferenceScope?: string;\n directory?: string;\n};\n\nexport type WizardArtifactPreferenceArgs = {\n artifactKind?: string;\n artifact: string;\n action: string;\n preferenceScope?: string;\n directory?: string;\n};\n\nexport type EditorPublishSkillArgs = {\n skillSlug: string;\n directory?: string;\n};\n\nexport type EditorCreateOrUpdateSkillArgs = {\n markdownContent: string;\n directory?: string;\n};\n\nexport type WizardArtifactImportArgs = {\n artifactKind?: string;\n source: string;\n slug?: string;\n skill?: string;\n name?: string;\n summary?: string;\n directory?: string;\n};\n\ntype ToolSchemaValue<TSelf> = {\n optional: () => TSelf;\n describe: (description: string) => TSelf;\n};\n\ntype ToolSchema = {\n string: () => ToolSchemaValue<ToolSchemaValue<unknown>>;\n boolean: () => ToolSchemaValue<ToolSchemaValue<unknown>>;\n};\n\nexport type ToolExecuteContext = {\n directory: string;\n abort: AbortSignal;\n metadata: (payload: { title: string; metadata: Record<string, string> }) => void;\n};\n\ntype ToolDefinition<TArgs extends object> = {\n description: string;\n args: { [K in keyof TArgs]-?: unknown };\n execute: (args: TArgs, context: ToolExecuteContext) => Promise<unknown>;\n};\n\nexport type ToolFactory = (<TArgs extends object>(definition: ToolDefinition<TArgs>) => unknown) & {\n schema: ToolSchema;\n};\n\ntype PublishedSkillToolHandlers = {\n fetchPublishedSkills: (args: PublishedSkillFetchArgs, context: ToolExecuteContext) => Promise<unknown>;\n fetchWizardArtifactCatalog: (args: WizardArtifactCatalogFetchArgs, context: ToolExecuteContext) => Promise<unknown>;\n fetchWizardArtifacts: (args: WizardArtifactFetchArgs, context: ToolExecuteContext) => Promise<unknown>;\n updatePublishedSkillPreference: (args: PublishedSkillPreferenceArgs, context: ToolExecuteContext) => Promise<unknown>;\n updateWizardArtifactPreference: (args: WizardArtifactPreferenceArgs, context: ToolExecuteContext) => Promise<unknown>;\n getStatus: (args: PluginStatusArgs, context: ToolExecuteContext) => Promise<unknown>;\n createOrUpdateEditorSkill: (args: EditorCreateOrUpdateSkillArgs, context: ToolExecuteContext) => Promise<unknown>;\n publishEditorSkill: (args: EditorPublishSkillArgs, context: ToolExecuteContext) => Promise<unknown>;\n importWizardArtifact: (args: WizardArtifactImportArgs, context: ToolExecuteContext) => Promise<unknown>;\n};\n\nexport const AVAILABLE_PUBLISHED_SKILL_TOOLS = [\n 'opencode_wizard_catalog_fetch',\n 'opencode_wizard_artifact_fetch',\n 'opencode_wizard_artifact_preference_set',\n 'opencode_wizard_published_skills_fetch',\n 'opencode_wizard_published_skill_preference_set',\n 'opencode_wizard_status',\n 'opencode_wizard_editor_create_or_update_skill',\n 'opencode_wizard_editor_publish_skill',\n 'opencode_wizard_artifact_import',\n];\n\nconst SHARED_PUBLISHED_SKILL_TOOLS = AVAILABLE_PUBLISHED_SKILL_TOOLS.slice(0, 6);\n\nexport const resolveAvailableTools = (role: string | null | undefined): string[] => {\n if (role === 'EDITOR') return [...AVAILABLE_PUBLISHED_SKILL_TOOLS];\n return [...SHARED_PUBLISHED_SKILL_TOOLS];\n};\n\nexport const createPublishedSkillToolDefinitions = (\n tool: ToolFactory,\n handlers: PublishedSkillToolHandlers,\n) => ({\n sharedTools: {\n opencode_wizard_catalog_fetch: tool<WizardArtifactCatalogFetchArgs>({\n description:\n 'Always-available canonical wizard artifact catalog tool. Supports artifactKind SKILL and DESIGN_DOC; catalog metadata is candidate discovery only, and bodies/files should be fetched before using a matching wizard artifact as guidance.',\n args: {\n artifactKind: tool.schema\n .string()\n .optional()\n .describe('Wizard artifact kind to catalog: SKILL or DESIGN_DOC; defaults to SKILL'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n refresh: tool.schema.boolean().optional().describe('Bypass the local plugin cache for this request'),\n recommendationContext: tool.schema\n .string()\n .optional()\n .describe(\n 'Optional metadata-only relevance/ranking context for catalog recommendations; fetched artifact bodies/files remain the authority.',\n ),\n },\n async execute(args, context) {\n return handlers.fetchWizardArtifactCatalog(args, context);\n },\n }),\n opencode_wizard_artifact_fetch: tool<WizardArtifactFetchArgs>({\n description:\n 'Always-available canonical wizard artifact detail tool. Supports artifactKind SKILL and DESIGN_DOC; fetched backend-authorized bodies/files are the reference content when a matching effective artifact is used.',\n args: {\n artifactKind: tool.schema\n .string()\n .optional()\n .describe('Wizard artifact kind to fetch: SKILL or DESIGN_DOC; defaults to SKILL'),\n artifact: tool.schema\n .string()\n .optional()\n .describe('Single artifact identifier; for SKILL this is a skill slug, artifact name, or skill name'),\n artifacts: tool.schema\n .string()\n .optional()\n .describe('One or more comma-separated or newline-separated artifact identifiers'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n refresh: tool.schema.boolean().optional().describe('Bypass the local plugin cache for this request'),\n recommendationContext: tool.schema\n .string()\n .optional()\n .describe(\n 'Optional metadata-only relevance/ranking context for artifact discovery and suggestions; fetched bodies/files remain the authority.',\n ),\n },\n async execute(args, context) {\n return handlers.fetchWizardArtifacts(args, context);\n },\n }),\n opencode_wizard_artifact_preference_set: tool<WizardArtifactPreferenceArgs>({\n description:\n 'Always-available canonical wizard artifact preference tool. Supports SKILL and DESIGN_DOC install/uninstall/ignore/unignore through server-backed artifact preference APIs. To disable a per-user global starter/global skill, call artifactKind=SKILL action=ignore preferenceScope=global; use action=unignore preferenceScope=global to enable it again.',\n args: {\n artifactKind: tool.schema\n .string()\n .optional()\n .describe('Wizard artifact kind to update: SKILL or DESIGN_DOC; defaults to SKILL'),\n artifact: tool.schema.string().describe('Artifact identifier; for SKILL this is the published skill slug'),\n action: tool.schema\n .string()\n .describe('Preference action: install, uninstall, ignore, or unignore'),\n preferenceScope: tool.schema\n .string()\n .optional()\n .describe('Preference scope for the action: project/workspace or global; defaults to project. Use global with ignore/unignore to disable or enable starter/global skills for the current user.'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n },\n async execute(args, context) {\n return handlers.updateWizardArtifactPreference(args, context);\n },\n }),\n opencode_wizard_published_skills_fetch: tool<PublishedSkillFetchArgs>({\n description:\n 'Always-available tool to fetch one or multiple wizard-published SKILL.md bodies/details for the current scope. When a backend-published wizard-listed skill matches the task, use the fetched body as reference guidance; catalog/status metadata only identifies candidates. Use this for wizard-listed/private/scoped/backend-published skill slugs instead of the native OpenCode skill tool; auth/catalog failures are returned in tool output. Prefer `skills` for multiple identifiers, call with no args to discover/bootstrap auth, and pass `refresh: true` before clearing plugin/OpenCode caches',\n args: {\n skill: tool.schema\n .string()\n .optional()\n .describe(\n 'Single skill slug, artifact name, or skill name; backward-compatible with comma/newline-delimited lists',\n ),\n skills: tool.schema\n .string()\n .optional()\n .describe('One or more comma-separated or newline-separated skill slugs, artifact names, or skill names'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n refresh: tool.schema.boolean().optional().describe('Bypass the local plugin cache for this request'),\n recommendationContext: tool.schema\n .string()\n .optional()\n .describe(\n 'Optional metadata-only relevance/ranking context for skill recommendations; fetched SKILL.md bodies remain the authority.',\n ),\n },\n async execute(args, context) {\n return handlers.fetchPublishedSkills(args, context);\n },\n }),\n opencode_wizard_published_skill_preference_set: tool<PublishedSkillPreferenceArgs>({\n description:\n 'Always-available tool to install, uninstall, ignore, or unignore a backend-published wizard skill for non-TUI workflows using the shared server-backed preference API; auth/catalog failures are returned in tool output. Disable a per-user global starter/global skill with skill=<slug> action=ignore preferenceScope=global; enable it again with action=unignore preferenceScope=global.',\n args: {\n skill: tool.schema.string().describe('Published skill slug, artifact name, or skill name to update'),\n action: tool.schema\n .string()\n .describe('Preference action: install, uninstall, ignore, or unignore'),\n preferenceScope: tool.schema\n .string()\n .optional()\n .describe('Preference scope for the action: project/workspace or global; defaults to project. Use global with ignore/unignore to turn starter/global skills off or on for the current user.'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n },\n async execute(args, context) {\n return handlers.updatePublishedSkillPreference(args, context);\n },\n }),\n opencode_wizard_status: tool<PluginStatusArgs>({\n description:\n 'Always-available tool to report opencode-wizard plugin status, bootstrap auth when missing, and return safe auth/catalog/source/cache/workspace metadata without exposing tokens; fetch matching wizard skill bodies before using them as guidance',\n args: {\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n },\n async execute(args, context) {\n return handlers.getStatus(args, context);\n },\n }),\n },\n editorOnlyTools: {\n opencode_wizard_editor_create_or_update_skill: tool<EditorCreateOrUpdateSkillArgs>({\n description:\n 'Canonical EDITOR-only skill creation/update tool. Sends direct SKILL.md markdown content to the backend createOrUpdateSkillFromMarkdown mutation without requiring a local .opencode/skills seed file first.',\n args: {\n markdownContent: tool.schema\n .string()\n .describe('Complete SKILL.md markdown content, including frontmatter when the backend skill contract requires it'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n },\n async execute(args, context) {\n return handlers.createOrUpdateEditorSkill(args, context);\n },\n }),\n opencode_wizard_editor_publish_skill: tool<EditorPublishSkillArgs>({\n description:\n 'Read skill markdown files from .opencode/skills/ and publish them to the backend via the createOrUpdateSkillFromMarkdown mutation. Requires EDITOR role.',\n args: {\n skillSlug: tool.schema\n .string()\n .describe('Skill slug matching a directory under .opencode/skills/'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n },\n async execute(args, context) {\n return handlers.publishEditorSkill(args, context);\n },\n }),\n opencode_wizard_artifact_import: tool<WizardArtifactImportArgs>({\n description:\n 'Editor-only import tool for external wizard artifacts. Supports SKILL from GitHub/raw SKILL.md sources and DESIGN_DOC from direct URLs or command-like inputs such as `npx getdesign@latest add bmw-m`. Imported backend artifacts become the plugin runtime authority; no project files are written.',\n args: {\n artifactKind: tool.schema\n .string()\n .optional()\n .describe('Wizard artifact kind to import: SKILL or DESIGN_DOC; inferred from source when omitted'),\n source: tool.schema\n .string()\n .describe('Direct URL or command-like input, e.g. `https://github.com/vercel-labs/skills --skill find-skills` or `npx getdesign@latest add bmw-m`'),\n slug: tool.schema.string().optional().describe('Artifact slug; required for DESIGN_DOC unless inferable'),\n skill: tool.schema.string().optional().describe('Skill directory/name for SKILL repo imports'),\n name: tool.schema.string().optional().describe('Optional display name override'),\n summary: tool.schema.string().optional().describe('Optional summary/description override'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n },\n async execute(args, context) {\n return handlers.importWizardArtifact(args, context);\n },\n }),\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["AVAILABLE_PUBLISHED_SKILL_TOOLS","SHARED_PUBLISHED_SKILL_TOOLS","slice","hasPrivilegedWizardToolRole","role","resolveAvailableTools","createPublishedSkillToolDefinitions","tool","handlers","sharedTools","opencode_wizard_catalog_fetch","description","args","artifactKind","schema","string","optional","describe","directory","refresh","boolean","recommendationContext","execute","context","fetchWizardArtifactCatalog","opencode_wizard_artifact_fetch","artifact","artifacts","fetchWizardArtifacts","opencode_wizard_artifact_preference_set","action","preferenceScope","updateWizardArtifactPreference","opencode_wizard_published_skills_fetch","skill","skills","fetchPublishedSkills","opencode_wizard_published_skill_preference_set","updatePublishedSkillPreference","opencode_wizard_status","getStatus","editorOnlyTools","opencode_wizard_editor_create_or_update_skill","markdownContent","createOrUpdateEditorSkill","opencode_wizard_editor_publish_skill","skillSlug","publishEditorSkill","opencode_wizard_artifact_import","source","slug","name","summary","importWizardArtifact"],"sources":["../src/plugin-tools.ts"],"sourcesContent":["export type PublishedSkillFetchArgs = {\n skill?: string;\n skills?: string;\n directory?: string;\n refresh?: boolean;\n recommendationContext?: string;\n};\n\nexport type WizardArtifactKind = 'SKILL' | 'DESIGN_DOC';\n\nexport type WizardArtifactCatalogFetchArgs = {\n artifactKind?: string;\n directory?: string;\n refresh?: boolean;\n recommendationContext?: string;\n};\n\nexport type WizardArtifactFetchArgs = {\n artifactKind?: string;\n artifact?: string;\n artifacts?: string;\n directory?: string;\n refresh?: boolean;\n recommendationContext?: string;\n};\n\nexport type PluginStatusArgs = {\n directory?: string;\n};\n\nexport type PublishedSkillPreferenceArgs = {\n skill: string;\n action: string;\n preferenceScope?: string;\n directory?: string;\n};\n\nexport type WizardArtifactPreferenceArgs = {\n artifactKind?: string;\n artifact: string;\n action: string;\n preferenceScope?: string;\n directory?: string;\n};\n\nexport type EditorPublishSkillArgs = {\n skillSlug: string;\n directory?: string;\n};\n\nexport type EditorCreateOrUpdateSkillArgs = {\n markdownContent: string;\n directory?: string;\n};\n\nexport type WizardArtifactImportArgs = {\n artifactKind?: string;\n source: string;\n slug?: string;\n skill?: string;\n name?: string;\n summary?: string;\n directory?: string;\n};\n\ntype ToolSchemaValue<TSelf> = {\n optional: () => TSelf;\n describe: (description: string) => TSelf;\n};\n\ntype ToolSchema = {\n string: () => ToolSchemaValue<ToolSchemaValue<unknown>>;\n boolean: () => ToolSchemaValue<ToolSchemaValue<unknown>>;\n};\n\nexport type ToolExecuteContext = {\n directory: string;\n abort: AbortSignal;\n metadata: (payload: { title: string; metadata: Record<string, string> }) => void;\n};\n\ntype ToolDefinition<TArgs extends object> = {\n description: string;\n args: { [K in keyof TArgs]-?: unknown };\n execute: (args: TArgs, context: ToolExecuteContext) => Promise<unknown>;\n};\n\nexport type ToolFactory = (<TArgs extends object>(definition: ToolDefinition<TArgs>) => unknown) & {\n schema: ToolSchema;\n};\n\ntype PublishedSkillToolHandlers = {\n fetchPublishedSkills: (args: PublishedSkillFetchArgs, context: ToolExecuteContext) => Promise<unknown>;\n fetchWizardArtifactCatalog: (args: WizardArtifactCatalogFetchArgs, context: ToolExecuteContext) => Promise<unknown>;\n fetchWizardArtifacts: (args: WizardArtifactFetchArgs, context: ToolExecuteContext) => Promise<unknown>;\n updatePublishedSkillPreference: (args: PublishedSkillPreferenceArgs, context: ToolExecuteContext) => Promise<unknown>;\n updateWizardArtifactPreference: (args: WizardArtifactPreferenceArgs, context: ToolExecuteContext) => Promise<unknown>;\n getStatus: (args: PluginStatusArgs, context: ToolExecuteContext) => Promise<unknown>;\n createOrUpdateEditorSkill: (args: EditorCreateOrUpdateSkillArgs, context: ToolExecuteContext) => Promise<unknown>;\n publishEditorSkill: (args: EditorPublishSkillArgs, context: ToolExecuteContext) => Promise<unknown>;\n importWizardArtifact: (args: WizardArtifactImportArgs, context: ToolExecuteContext) => Promise<unknown>;\n};\n\nexport const AVAILABLE_PUBLISHED_SKILL_TOOLS = [\n 'opencode_wizard_catalog_fetch',\n 'opencode_wizard_artifact_fetch',\n 'opencode_wizard_artifact_preference_set',\n 'opencode_wizard_published_skills_fetch',\n 'opencode_wizard_published_skill_preference_set',\n 'opencode_wizard_status',\n 'opencode_wizard_editor_create_or_update_skill',\n 'opencode_wizard_editor_publish_skill',\n 'opencode_wizard_artifact_import',\n];\n\nconst SHARED_PUBLISHED_SKILL_TOOLS = AVAILABLE_PUBLISHED_SKILL_TOOLS.slice(0, 6);\n\nexport const hasPrivilegedWizardToolRole = (role: string | null | undefined): boolean =>\n role === 'ADMIN' || role === 'EDITOR';\n\nexport const resolveAvailableTools = (role: string | null | undefined): string[] => {\n if (hasPrivilegedWizardToolRole(role)) return [...AVAILABLE_PUBLISHED_SKILL_TOOLS];\n return [...SHARED_PUBLISHED_SKILL_TOOLS];\n};\n\nexport const createPublishedSkillToolDefinitions = (\n tool: ToolFactory,\n handlers: PublishedSkillToolHandlers,\n) => ({\n sharedTools: {\n opencode_wizard_catalog_fetch: tool<WizardArtifactCatalogFetchArgs>({\n description:\n 'Always-available canonical wizard artifact catalog tool. Supports artifactKind SKILL and DESIGN_DOC; catalog metadata is candidate discovery only, and bodies/files should be fetched before using a matching wizard artifact as guidance.',\n args: {\n artifactKind: tool.schema\n .string()\n .optional()\n .describe('Wizard artifact kind to catalog: SKILL or DESIGN_DOC; defaults to SKILL'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n refresh: tool.schema.boolean().optional().describe('Bypass the local plugin cache for this request'),\n recommendationContext: tool.schema\n .string()\n .optional()\n .describe(\n 'Optional metadata-only relevance/ranking context for catalog recommendations; fetched artifact bodies/files remain the authority.',\n ),\n },\n async execute(args, context) {\n return handlers.fetchWizardArtifactCatalog(args, context);\n },\n }),\n opencode_wizard_artifact_fetch: tool<WizardArtifactFetchArgs>({\n description:\n 'Always-available canonical wizard artifact detail tool. Supports artifactKind SKILL and DESIGN_DOC; fetched backend-authorized bodies/files are the reference content when a matching effective artifact is used.',\n args: {\n artifactKind: tool.schema\n .string()\n .optional()\n .describe('Wizard artifact kind to fetch: SKILL or DESIGN_DOC; defaults to SKILL'),\n artifact: tool.schema\n .string()\n .optional()\n .describe('Single artifact identifier; for SKILL this is a skill slug, artifact name, or skill name'),\n artifacts: tool.schema\n .string()\n .optional()\n .describe('One or more comma-separated or newline-separated artifact identifiers'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n refresh: tool.schema.boolean().optional().describe('Bypass the local plugin cache for this request'),\n recommendationContext: tool.schema\n .string()\n .optional()\n .describe(\n 'Optional metadata-only relevance/ranking context for artifact discovery and suggestions; fetched bodies/files remain the authority.',\n ),\n },\n async execute(args, context) {\n return handlers.fetchWizardArtifacts(args, context);\n },\n }),\n opencode_wizard_artifact_preference_set: tool<WizardArtifactPreferenceArgs>({\n description:\n 'Always-available canonical wizard artifact preference tool. Supports SKILL and DESIGN_DOC install/uninstall/ignore/unignore through server-backed artifact preference APIs. To disable a per-user global starter/global skill, call artifactKind=SKILL action=ignore preferenceScope=global; use action=unignore preferenceScope=global to enable it again.',\n args: {\n artifactKind: tool.schema\n .string()\n .optional()\n .describe('Wizard artifact kind to update: SKILL or DESIGN_DOC; defaults to SKILL'),\n artifact: tool.schema.string().describe('Artifact identifier; for SKILL this is the published skill slug'),\n action: tool.schema\n .string()\n .describe('Preference action: install, uninstall, ignore, or unignore'),\n preferenceScope: tool.schema\n .string()\n .optional()\n .describe('Preference scope for the action: project/workspace or global; defaults to project. Use global with ignore/unignore to disable or enable starter/global skills for the current user.'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n },\n async execute(args, context) {\n return handlers.updateWizardArtifactPreference(args, context);\n },\n }),\n opencode_wizard_published_skills_fetch: tool<PublishedSkillFetchArgs>({\n description:\n 'Always-available tool to fetch one or multiple wizard-published SKILL.md bodies/details for the current scope. When a backend-published wizard-listed skill matches the task, use the fetched body as reference guidance; catalog/status metadata only identifies candidates. Use this for wizard-listed/private/scoped/backend-published skill slugs instead of the native OpenCode skill tool; auth/catalog failures are returned in tool output. Prefer `skills` for multiple identifiers, call with no args to discover/bootstrap auth, and pass `refresh: true` before clearing plugin/OpenCode caches',\n args: {\n skill: tool.schema\n .string()\n .optional()\n .describe(\n 'Single skill slug, artifact name, or skill name; backward-compatible with comma/newline-delimited lists',\n ),\n skills: tool.schema\n .string()\n .optional()\n .describe('One or more comma-separated or newline-separated skill slugs, artifact names, or skill names'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n refresh: tool.schema.boolean().optional().describe('Bypass the local plugin cache for this request'),\n recommendationContext: tool.schema\n .string()\n .optional()\n .describe(\n 'Optional metadata-only relevance/ranking context for skill recommendations; fetched SKILL.md bodies remain the authority.',\n ),\n },\n async execute(args, context) {\n return handlers.fetchPublishedSkills(args, context);\n },\n }),\n opencode_wizard_published_skill_preference_set: tool<PublishedSkillPreferenceArgs>({\n description:\n 'Always-available tool to install, uninstall, ignore, or unignore a backend-published wizard skill for non-TUI workflows using the shared server-backed preference API; auth/catalog failures are returned in tool output. Disable a per-user global starter/global skill with skill=<slug> action=ignore preferenceScope=global; enable it again with action=unignore preferenceScope=global.',\n args: {\n skill: tool.schema.string().describe('Published skill slug, artifact name, or skill name to update'),\n action: tool.schema\n .string()\n .describe('Preference action: install, uninstall, ignore, or unignore'),\n preferenceScope: tool.schema\n .string()\n .optional()\n .describe('Preference scope for the action: project/workspace or global; defaults to project. Use global with ignore/unignore to turn starter/global skills off or on for the current user.'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n },\n async execute(args, context) {\n return handlers.updatePublishedSkillPreference(args, context);\n },\n }),\n opencode_wizard_status: tool<PluginStatusArgs>({\n description:\n 'Always-available tool to report opencode-wizard plugin status, bootstrap auth when missing, and return safe auth/catalog/source/cache/workspace metadata without exposing tokens; fetch matching wizard skill bodies before using them as guidance',\n args: {\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n },\n async execute(args, context) {\n return handlers.getStatus(args, context);\n },\n }),\n },\n editorOnlyTools: {\n opencode_wizard_editor_create_or_update_skill: tool<EditorCreateOrUpdateSkillArgs>({\n description:\n 'Canonical privileged skill creation/update tool for ADMIN or EDITOR sessions. Sends direct SKILL.md markdown content to the backend createOrUpdateSkillFromMarkdown mutation and creates a workspace assignment when the directory resolves to a backend workspace.',\n args: {\n markdownContent: tool.schema\n .string()\n .describe('Complete SKILL.md markdown content, including frontmatter when the backend skill contract requires it'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n },\n async execute(args, context) {\n return handlers.createOrUpdateEditorSkill(args, context);\n },\n }),\n opencode_wizard_editor_publish_skill: tool<EditorPublishSkillArgs>({\n description:\n 'Read skill markdown files from .opencode/skills/ and publish them to the backend via the createOrUpdateSkillFromMarkdown mutation, then assign them to the resolved workspace when available. Requires ADMIN or EDITOR role.',\n args: {\n skillSlug: tool.schema\n .string()\n .describe('Skill slug matching a directory under .opencode/skills/'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n },\n async execute(args, context) {\n return handlers.publishEditorSkill(args, context);\n },\n }),\n opencode_wizard_artifact_import: tool<WizardArtifactImportArgs>({\n description:\n 'Privileged ADMIN/EDITOR import tool for external wizard artifacts. Supports SKILL from GitHub/raw SKILL.md sources and DESIGN_DOC from direct URLs or command-like inputs such as `npx getdesign@latest add bmw-m`. Imported backend artifacts become the plugin runtime authority; no project files are written.',\n args: {\n artifactKind: tool.schema\n .string()\n .optional()\n .describe('Wizard artifact kind to import: SKILL or DESIGN_DOC; inferred from source when omitted'),\n source: tool.schema\n .string()\n .describe('Direct URL or command-like input, e.g. `https://github.com/vercel-labs/skills --skill find-skills` or `npx getdesign@latest add bmw-m`'),\n slug: tool.schema.string().optional().describe('Artifact slug; required for DESIGN_DOC unless inferable'),\n skill: tool.schema.string().optional().describe('Skill directory/name for SKILL repo imports'),\n name: tool.schema.string().optional().describe('Optional display name override'),\n summary: tool.schema.string().optional().describe('Optional summary/description override'),\n directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),\n },\n async execute(args, context) {\n return handlers.importWizardArtifact(args, context);\n },\n }),\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -5,13 +5,14 @@ export declare const hydrateStoredAuthStateRole: ({ worktree, config, signal, on
5
5
  signal: AbortSignal;
6
6
  onAuthStateChanged?: () => void;
7
7
  }) => Promise<AuthState | null>;
8
- export declare const fetchPublishedSkillsGraphQl: <TData>({ worktree, config, query, variables, signal, onAuthStateChanged, }: {
8
+ export declare const fetchPublishedSkillsGraphQl: <TData>({ worktree, config, query, variables, signal, onAuthStateChanged, operationName, }: {
9
9
  worktree: string;
10
10
  config: ResolvedConfig;
11
11
  query: string;
12
12
  variables: Record<string, unknown>;
13
13
  signal: AbortSignal;
14
14
  onAuthStateChanged?: () => void;
15
+ operationName?: string;
15
16
  }) => Promise<{
16
17
  ok: true;
17
18
  data: TData;
@@ -9,6 +9,10 @@ const isUnauthorizedGraphQlMessage = message => {
9
9
  const isPluginEditorRole = value => {
10
10
  return value === 'ADMIN' || value === 'EDITOR';
11
11
  };
12
+ const formatGraphQlError = error => {
13
+ const details = [error.path && error.path.length > 0 ? `path=${error.path.join('.')}` : null, error.extensions?.code ? `code=${error.extensions.code}` : null].filter(Boolean);
14
+ return details.length > 0 ? `${error.message} (${details.join(', ')})` : error.message;
15
+ };
12
16
  export const hydrateStoredAuthStateRole = async ({
13
17
  worktree,
14
18
  config,
@@ -69,7 +73,8 @@ export const fetchPublishedSkillsGraphQl = async ({
69
73
  query,
70
74
  variables,
71
75
  signal,
72
- onAuthStateChanged
76
+ onAuthStateChanged,
77
+ operationName
73
78
  }) => {
74
79
  const authState = await resolveStoredAuthState(worktree, config);
75
80
  const fetchedAt = new Date().toISOString();
@@ -158,7 +163,9 @@ export const fetchPublishedSkillsGraphQl = async ({
158
163
  };
159
164
  }
160
165
  if (body.errors?.length) {
161
- const message = body.errors.map(error => error.message).join('; ');
166
+ const graphQlErrors = body.errors.map(formatGraphQlError);
167
+ const operationPrefix = operationName ? `${operationName}: ` : '';
168
+ const message = `${operationPrefix}${graphQlErrors.join('; ')}`;
162
169
  if (body.errors.some(error => isUnauthorizedGraphQlMessage(error.message))) {
163
170
  await clearAuthState(config.authStatePath);
164
171
  onAuthStateChanged?.();
@@ -181,6 +188,7 @@ export const fetchPublishedSkillsGraphQl = async ({
181
188
  status: 'request_failed',
182
189
  authMode: 'session',
183
190
  message,
191
+ graphQlErrors,
184
192
  fetchedAt,
185
193
  source: 'network'
186
194
  }
@@ -217,7 +225,8 @@ export const fetchPublishedSkillsCatalog = async (worktree, config, resolution,
217
225
  }
218
226
  },
219
227
  signal,
220
- onAuthStateChanged
228
+ onAuthStateChanged,
229
+ operationName: 'pluginPublishedSkills'
221
230
  });
222
231
  if (!response.ok) return response.result;
223
232
  const payload = response.data.pluginPublishedSkills;
@@ -253,7 +262,8 @@ export const fetchWizardArtifactsCatalog = async (worktree, config, resolution,
253
262
  }
254
263
  },
255
264
  signal,
256
- onAuthStateChanged
265
+ onAuthStateChanged,
266
+ operationName: 'pluginWizardArtifacts'
257
267
  });
258
268
  if (!response.ok) return response.result;
259
269
  const payload = response.data.pluginWizardArtifacts;
@@ -317,14 +327,19 @@ export const fetchPublishedSkillDetail = async ({
317
327
  }
318
328
  },
319
329
  signal,
320
- onAuthStateChanged
330
+ onAuthStateChanged,
331
+ operationName: 'pluginWizardArtifactVersion'
321
332
  });
322
- if (!wizardArtifactResponse.ok) return wizardArtifactResponse;
323
- const wizardArtifact = wizardArtifactResponse.data.pluginWizardArtifactVersion;
324
- if (wizardArtifact) return {
325
- ok: true,
326
- artifact: wizardArtifact
327
- };
333
+ if (!wizardArtifactResponse.ok && wizardArtifactResponse.result.status === 'missing_auth') {
334
+ return wizardArtifactResponse;
335
+ }
336
+ if (wizardArtifactResponse.ok) {
337
+ const wizardArtifact = wizardArtifactResponse.data.pluginWizardArtifactVersion;
338
+ if (wizardArtifact) return {
339
+ ok: true,
340
+ artifact: wizardArtifact
341
+ };
342
+ }
328
343
  const response = await fetchPublishedSkillsGraphQl({
329
344
  worktree,
330
345
  config,
@@ -337,9 +352,10 @@ export const fetchPublishedSkillDetail = async ({
337
352
  }
338
353
  },
339
354
  signal,
340
- onAuthStateChanged
355
+ onAuthStateChanged,
356
+ operationName: 'pluginPublishedSkillVersionArtifact'
341
357
  });
342
- if (!response.ok) return response;
358
+ if (!response.ok) return wizardArtifactResponse.ok ? response : wizardArtifactResponse;
343
359
  const artifact = response.data.pluginPublishedSkillVersionArtifact;
344
360
  if (!artifact) {
345
361
  return {
@@ -382,7 +398,8 @@ export const fetchWizardArtifactDetail = async ({
382
398
  }
383
399
  },
384
400
  signal,
385
- onAuthStateChanged
401
+ onAuthStateChanged,
402
+ operationName: 'pluginWizardArtifactVersion'
386
403
  });
387
404
  if (!response.ok) return response;
388
405
  const artifact = response.data.pluginWizardArtifactVersion;
@@ -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","recommendationContext","input","payload","pluginPublishedSkills","fetchWizardArtifactsCatalog","artifactKind","pluginWizardArtifacts","maybePersistWorkspaceSlugFromCatalog","fetchResult","backendWorkspaceSlug","workspace","slug","normalizedWorkspaceSlug","workspaceSlug","workspaceSlugSource","configFile","repositoryUrl","repositoryRoot","fetchPublishedSkillDetail","skillVersionId","artifactVersionId","purpose","wizardArtifactResponse","wizardArtifact","pluginWizardArtifactVersion","artifact","pluginPublishedSkillVersionArtifact","fetchWizardArtifactDetail"],"sources":["../../src/server/client.ts"],"sourcesContent":["import {\n CURRENT_USER_ROLE_QUERY,\n PUBLISHED_SKILL_DETAIL_QUERY,\n PUBLISHED_SKILLS_CATALOG_QUERY,\n WIZARD_ARTIFACT_DETAIL_QUERY,\n WIZARD_ARTIFACTS_CATALOG_QUERY,\n} from '../graphql-operations.js';\nimport { clearAuthState, resolveStoredAuthState, upsertWorkspaceSlugMapping, writeAuthState } from './auth-store.js';\nimport { toWorkspaceSlug } from './path-utils.js';\nimport { toDeliveryInput } from './workspace.js';\nimport type {\n AuthState,\n CurrentUserRoleResponse,\n FetchResult,\n GraphQLResponse,\n PublishedSkillArtifactDetailPayload,\n PublishedSkillArtifactDetailPurpose,\n PublishedSkillCatalogResponse,\n PublishedSkillDetailResponse,\n ResolvedConfig,\n WizardArtifactCatalogResponse,\n WizardArtifactDetailPayload,\n WizardArtifactDetailResponse,\n WizardArtifactFetchResult,\n WizardArtifactKind,\n WorkspaceResolution,\n} from './types.js';\n\nconst isUnauthorizedGraphQlMessage = (message: string): boolean => {\n const normalizedMessage = message.toLowerCase();\n return normalizedMessage.includes('not authorized') || normalizedMessage.includes('unauthorized');\n};\n\nconst isPluginEditorRole = (value: unknown): value is NonNullable<AuthState['role']> => {\n return value === 'ADMIN' || value === 'EDITOR';\n};\n\nexport const hydrateStoredAuthStateRole = async ({\n worktree,\n config,\n signal,\n onAuthStateChanged,\n}: {\n worktree: string;\n config: ResolvedConfig;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n}): Promise<AuthState | null> => {\n const authState = await resolveStoredAuthState(worktree, config);\n if (!authState) return null;\n if (authState.role) return authState;\n\n let response: Response;\n\n try {\n response = await fetch(config.graphqlUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${authState.sessionToken}`,\n },\n body: JSON.stringify({ query: CURRENT_USER_ROLE_QUERY, variables: {} }),\n signal,\n });\n } catch {\n return authState;\n }\n\n if (response.status === 401 || response.status === 403) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return null;\n }\n\n if (!response.ok) return authState;\n\n let body: GraphQLResponse<CurrentUserRoleResponse>;\n\n try {\n body = (await response.json()) as GraphQLResponse<CurrentUserRoleResponse>;\n } catch {\n return authState;\n }\n\n if (body.errors?.some((error) => isUnauthorizedGraphQlMessage(error.message))) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return null;\n }\n\n const me = body.data?.user?.me;\n if (!isPluginEditorRole(me?.role)) return authState;\n\n const hydratedAuthState: AuthState = {\n ...authState,\n userId: typeof me._id === 'string' && me._id.trim().length > 0 ? me._id : authState.userId,\n email: typeof me.email === 'string' && me.email.trim().length > 0 ? me.email : authState.email,\n role: me.role,\n };\n\n await writeAuthState(config.authStatePath, hydratedAuthState);\n return hydratedAuthState;\n};\n\nexport const fetchPublishedSkillsGraphQl = async <TData>({\n worktree,\n config,\n query,\n variables,\n signal,\n onAuthStateChanged,\n}: {\n worktree: string;\n config: ResolvedConfig;\n query: string;\n variables: Record<string, unknown>;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n}): Promise<\n | { ok: true; data: TData; fetchedAt: string }\n | { ok: false; result: Extract<FetchResult, { ok: false }> }\n> => {\n const authState = await resolveStoredAuthState(worktree, config);\n const fetchedAt = new Date().toISOString();\n\n if (!authState) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'missing_auth',\n authMode: 'missing',\n message:\n 'No plugin session is stored. Interactive opencode_wizard_published_skills_fetch can bootstrap browser login automatically when needed. Configured backend and GraphQL URLs are shown for visibility, but no GraphQL request was made because auth is missing.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n let response: Response;\n\n try {\n response = await fetch(config.graphqlUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${authState.sessionToken}`,\n },\n body: JSON.stringify({ query, variables }),\n signal,\n });\n } catch (error) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: error instanceof Error ? error.message : 'Unknown fetch error',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (response.status === 401 || response.status === 403) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return {\n ok: false,\n result: {\n ok: false,\n status: 'missing_auth',\n authMode: 'session',\n message:\n 'Stored plugin session was rejected by the backend. Retry opencode_wizard_published_skills_fetch to bootstrap a fresh browser login automatically.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (!response.ok) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: `GraphQL request failed with HTTP ${response.status}.`,\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n let body: GraphQLResponse<TData>;\n\n try {\n body = (await response.json()) as GraphQLResponse<TData>;\n } catch (error) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: `GraphQL response was not valid JSON: ${error instanceof Error ? error.message : 'Unknown parse error'}`,\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (body.errors?.length) {\n const message = body.errors.map((error) => error.message).join('; ');\n\n if (body.errors.some((error) => isUnauthorizedGraphQlMessage(error.message))) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return {\n ok: false,\n result: {\n ok: false,\n status: 'missing_auth',\n authMode: 'session',\n message:\n 'Stored plugin session is no longer valid. Retry opencode_wizard_published_skills_fetch to bootstrap a fresh browser login automatically.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n return {\n ok: false,\n result: { ok: false, status: 'request_failed', authMode: 'session', message, fetchedAt, source: 'network' },\n };\n }\n\n if (!body.data) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include data.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n return { ok: true, data: body.data, fetchedAt };\n};\n\nexport const fetchPublishedSkillsCatalog = async (\n worktree: string,\n config: ResolvedConfig,\n resolution: WorkspaceResolution,\n signal: AbortSignal,\n recommendationContext?: string | null,\n onAuthStateChanged?: () => void,\n): Promise<FetchResult> => {\n const response = await fetchPublishedSkillsGraphQl<PublishedSkillCatalogResponse>({\n worktree,\n config,\n query: PUBLISHED_SKILLS_CATALOG_QUERY,\n variables: { input: { ...toDeliveryInput(resolution), recommendationContext } },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response.result;\n\n const payload = response.data.pluginPublishedSkills;\n\n if (!payload) {\n return {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include pluginPublishedSkills.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n }\n\n return {\n ok: true,\n status: 'ready',\n authMode: 'session',\n payload,\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n};\n\nexport const fetchWizardArtifactsCatalog = async (\n worktree: string,\n config: ResolvedConfig,\n resolution: WorkspaceResolution,\n artifactKind: WizardArtifactKind,\n signal: AbortSignal,\n recommendationContext?: string | null,\n onAuthStateChanged?: () => void,\n): Promise<WizardArtifactFetchResult> => {\n const response = await fetchPublishedSkillsGraphQl<WizardArtifactCatalogResponse>({\n worktree,\n config,\n query: WIZARD_ARTIFACTS_CATALOG_QUERY,\n variables: { input: { ...toDeliveryInput(resolution), artifactKind, recommendationContext } },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response.result;\n\n const payload = response.data.pluginWizardArtifacts;\n if (!payload) {\n return {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include pluginWizardArtifacts.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n }\n\n return {\n ok: true,\n status: 'ready',\n authMode: 'session',\n payload,\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n};\n\nexport const maybePersistWorkspaceSlugFromCatalog = async ({\n config,\n resolution,\n fetchResult,\n}: {\n config: ResolvedConfig;\n resolution: WorkspaceResolution;\n fetchResult: FetchResult;\n}): Promise<void> => {\n if (!fetchResult.ok) return;\n\n const backendWorkspaceSlug = fetchResult.payload.workspace?.slug?.trim();\n if (!backendWorkspaceSlug) return;\n\n const normalizedWorkspaceSlug = toWorkspaceSlug(backendWorkspaceSlug);\n if (!normalizedWorkspaceSlug) return;\n\n if (resolution.workspaceSlug === normalizedWorkspaceSlug && resolution.workspaceSlugSource !== 'fallback') return;\n\n await upsertWorkspaceSlugMapping({\n configFile: config.authStatePath,\n repositoryUrl: resolution.repositoryUrl,\n repositoryRoot: resolution.repositoryRoot,\n workspaceSlug: normalizedWorkspaceSlug,\n });\n};\n\nexport const fetchPublishedSkillDetail = async ({\n worktree,\n config,\n resolution,\n skillVersionId,\n artifactVersionId,\n signal,\n onAuthStateChanged,\n purpose,\n}: {\n worktree: string;\n config: ResolvedConfig;\n resolution: WorkspaceResolution;\n skillVersionId: string;\n artifactVersionId: string;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n purpose: PublishedSkillArtifactDetailPurpose;\n}): Promise<\n | { ok: true; artifact: PublishedSkillArtifactDetailPayload }\n | {\n ok: false;\n result: {\n ok: false;\n status: 'not_found';\n authMode: 'session';\n message: string;\n fetchedAt: string;\n source: 'network';\n };\n }\n | { ok: false; result: Extract<FetchResult, { ok: false }> }\n> => {\n const wizardArtifactResponse = await fetchPublishedSkillsGraphQl<WizardArtifactDetailResponse>({\n worktree,\n config,\n query: WIZARD_ARTIFACT_DETAIL_QUERY,\n variables: {\n input: { ...toDeliveryInput(resolution), artifactKind: 'SKILL', artifactVersionId, purpose },\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!wizardArtifactResponse.ok) return wizardArtifactResponse;\n\n const wizardArtifact = wizardArtifactResponse.data.pluginWizardArtifactVersion;\n if (wizardArtifact) return { ok: true, artifact: wizardArtifact };\n\n const response = await fetchPublishedSkillsGraphQl<PublishedSkillDetailResponse>({\n worktree,\n config,\n query: PUBLISHED_SKILL_DETAIL_QUERY,\n variables: {\n input: { ...toDeliveryInput(resolution), skillVersionId, purpose },\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response;\n\n const artifact = response.data.pluginPublishedSkillVersionArtifact;\n\n if (!artifact) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'not_found',\n authMode: 'session',\n message: 'Published skill detail is not effective for the current scope.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n },\n };\n }\n\n return { ok: true, artifact };\n};\n\nexport const fetchWizardArtifactDetail = async ({\n worktree,\n config,\n resolution,\n artifactKind,\n artifactVersionId,\n signal,\n onAuthStateChanged,\n purpose,\n}: {\n worktree: string;\n config: ResolvedConfig;\n resolution: WorkspaceResolution;\n artifactKind: WizardArtifactKind;\n artifactVersionId: string;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n purpose: PublishedSkillArtifactDetailPurpose;\n}): Promise<\n | { ok: true; artifact: WizardArtifactDetailPayload }\n | {\n ok: false;\n result: {\n ok: false;\n status: 'not_found';\n authMode: 'session';\n message: string;\n fetchedAt: string;\n source: 'network';\n };\n }\n | { ok: false; result: Extract<FetchResult, { ok: false }> }\n> => {\n const response = await fetchPublishedSkillsGraphQl<WizardArtifactDetailResponse>({\n worktree,\n config,\n query: WIZARD_ARTIFACT_DETAIL_QUERY,\n variables: {\n input: { ...toDeliveryInput(resolution), artifactKind, artifactVersionId, purpose },\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response;\n\n const artifact = response.data.pluginWizardArtifactVersion;\n if (!artifact) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'not_found',\n authMode: 'session',\n message: 'Wizard artifact detail is not effective for the current scope.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n },\n };\n }\n\n return { ok: true, artifact };\n};\n"],"mappings":"AAAA,SACEA,uBAAuB,EACvBC,4BAA4B,EAC5BC,8BAA8B,EAC9BC,4BAA4B,EAC5BC,8BAA8B,QACzB,0BAA0B;AACjC,SAASC,cAAc,EAAEC,sBAAsB,EAAEC,0BAA0B,EAAEC,cAAc,QAAQ,iBAAiB;AACpH,SAASC,eAAe,QAAQ,iBAAiB;AACjD,SAASC,eAAe,QAAQ,gBAAgB;AAmBhD,MAAMC,4BAA4B,GAAIC,OAAe,IAAc;EACjE,MAAMC,iBAAiB,GAAGD,OAAO,CAACE,WAAW,CAAC,CAAC;EAC/C,OAAOD,iBAAiB,CAACE,QAAQ,CAAC,gBAAgB,CAAC,IAAIF,iBAAiB,CAACE,QAAQ,CAAC,cAAc,CAAC;AACnG,CAAC;AAED,MAAMC,kBAAkB,GAAIC,KAAc,IAA8C;EACtF,OAAOA,KAAK,KAAK,OAAO,IAAIA,KAAK,KAAK,QAAQ;AAChD,CAAC;AAED,OAAO,MAAMC,0BAA0B,GAAG,MAAAA,CAAO;EAC/CC,QAAQ;EACRC,MAAM;EACNC,MAAM;EACNC;AAMF,CAAC,KAAgC;EAC/B,MAAMC,SAAS,GAAG,MAAMjB,sBAAsB,CAACa,QAAQ,EAAEC,MAAM,CAAC;EAChE,IAAI,CAACG,SAAS,EAAE,OAAO,IAAI;EAC3B,IAAIA,SAAS,CAACC,IAAI,EAAE,OAAOD,SAAS;EAEpC,IAAIE,QAAkB;EAEtB,IAAI;IACFA,QAAQ,GAAG,MAAMC,KAAK,CAACN,MAAM,CAACO,UAAU,EAAE;MACxCC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QACP,cAAc,EAAE,kBAAkB;QAClCC,aAAa,EAAE,UAAUP,SAAS,CAACQ,YAAY;MACjD,CAAC;MACDC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;QAAEC,KAAK,EAAEnC,uBAAuB;QAAEoC,SAAS,EAAE,CAAC;MAAE,CAAC,CAAC;MACvEf;IACF,CAAC,CAAC;EACJ,CAAC,CAAC,MAAM;IACN,OAAOE,SAAS;EAClB;EAEA,IAAIE,QAAQ,CAACY,MAAM,KAAK,GAAG,IAAIZ,QAAQ,CAACY,MAAM,KAAK,GAAG,EAAE;IACtD,MAAMhC,cAAc,CAACe,MAAM,CAACkB,aAAa,CAAC;IAC1ChB,kBAAkB,GAAG,CAAC;IACtB,OAAO,IAAI;EACb;EAEA,IAAI,CAACG,QAAQ,CAACc,EAAE,EAAE,OAAOhB,SAAS;EAElC,IAAIS,IAA8C;EAElD,IAAI;IACFA,IAAI,GAAI,MAAMP,QAAQ,CAACe,IAAI,CAAC,CAA8C;EAC5E,CAAC,CAAC,MAAM;IACN,OAAOjB,SAAS;EAClB;EAEA,IAAIS,IAAI,CAACS,MAAM,EAAEC,IAAI,CAAEC,KAAK,IAAKhC,4BAA4B,CAACgC,KAAK,CAAC/B,OAAO,CAAC,CAAC,EAAE;IAC7E,MAAMP,cAAc,CAACe,MAAM,CAACkB,aAAa,CAAC;IAC1ChB,kBAAkB,GAAG,CAAC;IACtB,OAAO,IAAI;EACb;EAEA,MAAMsB,EAAE,GAAGZ,IAAI,CAACa,IAAI,EAAEC,IAAI,EAAEF,EAAE;EAC9B,IAAI,CAAC5B,kBAAkB,CAAC4B,EAAE,EAAEpB,IAAI,CAAC,EAAE,OAAOD,SAAS;EAEnD,MAAMwB,iBAA4B,GAAG;IACnC,GAAGxB,SAAS;IACZyB,MAAM,EAAE,OAAOJ,EAAE,CAACK,GAAG,KAAK,QAAQ,IAAIL,EAAE,CAACK,GAAG,CAACC,IAAI,CAAC,CAAC,CAACC,MAAM,GAAG,CAAC,GAAGP,EAAE,CAACK,GAAG,GAAG1B,SAAS,CAACyB,MAAM;IAC1FI,KAAK,EAAE,OAAOR,EAAE,CAACQ,KAAK,KAAK,QAAQ,IAAIR,EAAE,CAACQ,KAAK,CAACF,IAAI,CAAC,CAAC,CAACC,MAAM,GAAG,CAAC,GAAGP,EAAE,CAACQ,KAAK,GAAG7B,SAAS,CAAC6B,KAAK;IAC9F5B,IAAI,EAAEoB,EAAE,CAACpB;EACX,CAAC;EAED,MAAMhB,cAAc,CAACY,MAAM,CAACkB,aAAa,EAAES,iBAAiB,CAAC;EAC7D,OAAOA,iBAAiB;AAC1B,CAAC;AAED,OAAO,MAAMM,2BAA2B,GAAG,MAAAA,CAAc;EACvDlC,QAAQ;EACRC,MAAM;EACNe,KAAK;EACLC,SAAS;EACTf,MAAM;EACNC;AAQF,CAAC,KAGI;EACH,MAAMC,SAAS,GAAG,MAAMjB,sBAAsB,CAACa,QAAQ,EAAEC,MAAM,CAAC;EAChE,MAAMkC,SAAS,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;EAE1C,IAAI,CAACjC,SAAS,EAAE;IACd,OAAO;MACLgB,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,cAAc;QACtBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EACL,+PAA+P;QACjQ0C,SAAS;QACTK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,IAAIlC,QAAkB;EAEtB,IAAI;IACFA,QAAQ,GAAG,MAAMC,KAAK,CAACN,MAAM,CAACO,UAAU,EAAE;MACxCC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QACP,cAAc,EAAE,kBAAkB;QAClCC,aAAa,EAAE,UAAUP,SAAS,CAACQ,YAAY;MACjD,CAAC;MACDC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;QAAEC,KAAK;QAAEC;MAAU,CAAC,CAAC;MAC1Cf;IACF,CAAC,CAAC;EACJ,CAAC,CAAC,OAAOsB,KAAK,EAAE;IACd,OAAO;MACLJ,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,gBAAgB;QACxBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EAAE+B,KAAK,YAAYiB,KAAK,GAAGjB,KAAK,CAAC/B,OAAO,GAAG,qBAAqB;QACvE0C,SAAS;QACTK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,IAAIlC,QAAQ,CAACY,MAAM,KAAK,GAAG,IAAIZ,QAAQ,CAACY,MAAM,KAAK,GAAG,EAAE;IACtD,MAAMhC,cAAc,CAACe,MAAM,CAACkB,aAAa,CAAC;IAC1ChB,kBAAkB,GAAG,CAAC;IACtB,OAAO;MACLiB,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,cAAc;QACtBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EACL,mJAAmJ;QACrJ0C,SAAS;QACTK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,IAAI,CAAClC,QAAQ,CAACc,EAAE,EAAE;IAChB,OAAO;MACLA,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,gBAAgB;QACxBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EAAE,oCAAoCa,QAAQ,CAACY,MAAM,GAAG;QAC/DiB,SAAS;QACTK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,IAAI3B,IAA4B;EAEhC,IAAI;IACFA,IAAI,GAAI,MAAMP,QAAQ,CAACe,IAAI,CAAC,CAA4B;EAC1D,CAAC,CAAC,OAAOG,KAAK,EAAE;IACd,OAAO;MACLJ,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,gBAAgB;QACxBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EAAE,wCAAwC+B,KAAK,YAAYiB,KAAK,GAAGjB,KAAK,CAAC/B,OAAO,GAAG,qBAAqB,EAAE;QACjH0C,SAAS;QACTK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,IAAI3B,IAAI,CAACS,MAAM,EAAEU,MAAM,EAAE;IACvB,MAAMvC,OAAO,GAAGoB,IAAI,CAACS,MAAM,CAACoB,GAAG,CAAElB,KAAK,IAAKA,KAAK,CAAC/B,OAAO,CAAC,CAACkD,IAAI,CAAC,IAAI,CAAC;IAEpE,IAAI9B,IAAI,CAACS,MAAM,CAACC,IAAI,CAAEC,KAAK,IAAKhC,4BAA4B,CAACgC,KAAK,CAAC/B,OAAO,CAAC,CAAC,EAAE;MAC5E,MAAMP,cAAc,CAACe,MAAM,CAACkB,aAAa,CAAC;MAC1ChB,kBAAkB,GAAG,CAAC;MACtB,OAAO;QACLiB,EAAE,EAAE,KAAK;QACTkB,MAAM,EAAE;UACNlB,EAAE,EAAE,KAAK;UACTF,MAAM,EAAE,cAAc;UACtBqB,QAAQ,EAAE,SAAS;UACnB9C,OAAO,EACL,0IAA0I;UAC5I0C,SAAS;UACTK,MAAM,EAAE;QACV;MACF,CAAC;IACH;IAEA,OAAO;MACLpB,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QAAElB,EAAE,EAAE,KAAK;QAAEF,MAAM,EAAE,gBAAgB;QAAEqB,QAAQ,EAAE,SAAS;QAAE9C,OAAO;QAAE0C,SAAS;QAAEK,MAAM,EAAE;MAAU;IAC5G,CAAC;EACH;EAEA,IAAI,CAAC3B,IAAI,CAACa,IAAI,EAAE;IACd,OAAO;MACLN,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,gBAAgB;QACxBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EAAE,wCAAwC;QACjD0C,SAAS;QACTK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,OAAO;IAAEpB,EAAE,EAAE,IAAI;IAAEM,IAAI,EAAEb,IAAI,CAACa,IAAI;IAAES;EAAU,CAAC;AACjD,CAAC;AAED,OAAO,MAAMS,2BAA2B,GAAG,MAAAA,CACzC5C,QAAgB,EAChBC,MAAsB,EACtB4C,UAA+B,EAC/B3C,MAAmB,EACnB4C,qBAAqC,EACrC3C,kBAA+B,KACN;EACzB,MAAMG,QAAQ,GAAG,MAAM4B,2BAA2B,CAAgC;IAChFlC,QAAQ;IACRC,MAAM;IACNe,KAAK,EAAEjC,8BAA8B;IACrCkC,SAAS,EAAE;MAAE8B,KAAK,EAAE;QAAE,GAAGxD,eAAe,CAACsD,UAAU,CAAC;QAAEC;MAAsB;IAAE,CAAC;IAC/E5C,MAAM;IACNC;EACF,CAAC,CAAC;EAEF,IAAI,CAACG,QAAQ,CAACc,EAAE,EAAE,OAAOd,QAAQ,CAACgC,MAAM;EAExC,MAAMU,OAAO,GAAG1C,QAAQ,CAACoB,IAAI,CAACuB,qBAAqB;EAEnD,IAAI,CAACD,OAAO,EAAE;IACZ,OAAO;MACL5B,EAAE,EAAE,KAAK;MACTF,MAAM,EAAE,gBAAgB;MACxBqB,QAAQ,EAAE,SAAS;MACnB9C,OAAO,EAAE,yDAAyD;MAClE0C,SAAS,EAAE7B,QAAQ,CAAC6B,SAAS;MAC7BK,MAAM,EAAE;IACV,CAAC;EACH;EAEA,OAAO;IACLpB,EAAE,EAAE,IAAI;IACRF,MAAM,EAAE,OAAO;IACfqB,QAAQ,EAAE,SAAS;IACnBS,OAAO;IACPb,SAAS,EAAE7B,QAAQ,CAAC6B,SAAS;IAC7BK,MAAM,EAAE;EACV,CAAC;AACH,CAAC;AAED,OAAO,MAAMU,2BAA2B,GAAG,MAAAA,CACzClD,QAAgB,EAChBC,MAAsB,EACtB4C,UAA+B,EAC/BM,YAAgC,EAChCjD,MAAmB,EACnB4C,qBAAqC,EACrC3C,kBAA+B,KACQ;EACvC,MAAMG,QAAQ,GAAG,MAAM4B,2BAA2B,CAAgC;IAChFlC,QAAQ;IACRC,MAAM;IACNe,KAAK,EAAE/B,8BAA8B;IACrCgC,SAAS,EAAE;MAAE8B,KAAK,EAAE;QAAE,GAAGxD,eAAe,CAACsD,UAAU,CAAC;QAAEM,YAAY;QAAEL;MAAsB;IAAE,CAAC;IAC7F5C,MAAM;IACNC;EACF,CAAC,CAAC;EAEF,IAAI,CAACG,QAAQ,CAACc,EAAE,EAAE,OAAOd,QAAQ,CAACgC,MAAM;EAExC,MAAMU,OAAO,GAAG1C,QAAQ,CAACoB,IAAI,CAAC0B,qBAAqB;EACnD,IAAI,CAACJ,OAAO,EAAE;IACZ,OAAO;MACL5B,EAAE,EAAE,KAAK;MACTF,MAAM,EAAE,gBAAgB;MACxBqB,QAAQ,EAAE,SAAS;MACnB9C,OAAO,EAAE,yDAAyD;MAClE0C,SAAS,EAAE7B,QAAQ,CAAC6B,SAAS;MAC7BK,MAAM,EAAE;IACV,CAAC;EACH;EAEA,OAAO;IACLpB,EAAE,EAAE,IAAI;IACRF,MAAM,EAAE,OAAO;IACfqB,QAAQ,EAAE,SAAS;IACnBS,OAAO;IACPb,SAAS,EAAE7B,QAAQ,CAAC6B,SAAS;IAC7BK,MAAM,EAAE;EACV,CAAC;AACH,CAAC;AAED,OAAO,MAAMa,oCAAoC,GAAG,MAAAA,CAAO;EACzDpD,MAAM;EACN4C,UAAU;EACVS;AAKF,CAAC,KAAoB;EACnB,IAAI,CAACA,WAAW,CAAClC,EAAE,EAAE;EAErB,MAAMmC,oBAAoB,GAAGD,WAAW,CAACN,OAAO,CAACQ,SAAS,EAAEC,IAAI,EAAE1B,IAAI,CAAC,CAAC;EACxE,IAAI,CAACwB,oBAAoB,EAAE;EAE3B,MAAMG,uBAAuB,GAAGpE,eAAe,CAACiE,oBAAoB,CAAC;EACrE,IAAI,CAACG,uBAAuB,EAAE;EAE9B,IAAIb,UAAU,CAACc,aAAa,KAAKD,uBAAuB,IAAIb,UAAU,CAACe,mBAAmB,KAAK,UAAU,EAAE;EAE3G,MAAMxE,0BAA0B,CAAC;IAC/ByE,UAAU,EAAE5D,MAAM,CAACkB,aAAa;IAChC2C,aAAa,EAAEjB,UAAU,CAACiB,aAAa;IACvCC,cAAc,EAAElB,UAAU,CAACkB,cAAc;IACzCJ,aAAa,EAAED;EACjB,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,MAAMM,yBAAyB,GAAG,MAAAA,CAAO;EAC9ChE,QAAQ;EACRC,MAAM;EACN4C,UAAU;EACVoB,cAAc;EACdC,iBAAiB;EACjBhE,MAAM;EACNC,kBAAkB;EAClBgE;AAUF,CAAC,KAcI;EACH,MAAMC,sBAAsB,GAAG,MAAMlC,2BAA2B,CAA+B;IAC7FlC,QAAQ;IACRC,MAAM;IACNe,KAAK,EAAEhC,4BAA4B;IACnCiC,SAAS,EAAE;MACT8B,KAAK,EAAE;QAAE,GAAGxD,eAAe,CAACsD,UAAU,CAAC;QAAEM,YAAY,EAAE,OAAO;QAAEe,iBAAiB;QAAEC;MAAQ;IAC7F,CAAC;IACDjE,MAAM;IACNC;EACF,CAAC,CAAC;EAEF,IAAI,CAACiE,sBAAsB,CAAChD,EAAE,EAAE,OAAOgD,sBAAsB;EAE7D,MAAMC,cAAc,GAAGD,sBAAsB,CAAC1C,IAAI,CAAC4C,2BAA2B;EAC9E,IAAID,cAAc,EAAE,OAAO;IAAEjD,EAAE,EAAE,IAAI;IAAEmD,QAAQ,EAAEF;EAAe,CAAC;EAEjE,MAAM/D,QAAQ,GAAG,MAAM4B,2BAA2B,CAA+B;IAC/ElC,QAAQ;IACRC,MAAM;IACNe,KAAK,EAAElC,4BAA4B;IACnCmC,SAAS,EAAE;MACT8B,KAAK,EAAE;QAAE,GAAGxD,eAAe,CAACsD,UAAU,CAAC;QAAEoB,cAAc;QAAEE;MAAQ;IACnE,CAAC;IACDjE,MAAM;IACNC;EACF,CAAC,CAAC;EAEF,IAAI,CAACG,QAAQ,CAACc,EAAE,EAAE,OAAOd,QAAQ;EAEjC,MAAMiE,QAAQ,GAAGjE,QAAQ,CAACoB,IAAI,CAAC8C,mCAAmC;EAElE,IAAI,CAACD,QAAQ,EAAE;IACb,OAAO;MACLnD,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,WAAW;QACnBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EAAE,gEAAgE;QACzE0C,SAAS,EAAE7B,QAAQ,CAAC6B,SAAS;QAC7BK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,OAAO;IAAEpB,EAAE,EAAE,IAAI;IAAEmD;EAAS,CAAC;AAC/B,CAAC;AAED,OAAO,MAAME,yBAAyB,GAAG,MAAAA,CAAO;EAC9CzE,QAAQ;EACRC,MAAM;EACN4C,UAAU;EACVM,YAAY;EACZe,iBAAiB;EACjBhE,MAAM;EACNC,kBAAkB;EAClBgE;AAUF,CAAC,KAcI;EACH,MAAM7D,QAAQ,GAAG,MAAM4B,2BAA2B,CAA+B;IAC/ElC,QAAQ;IACRC,MAAM;IACNe,KAAK,EAAEhC,4BAA4B;IACnCiC,SAAS,EAAE;MACT8B,KAAK,EAAE;QAAE,GAAGxD,eAAe,CAACsD,UAAU,CAAC;QAAEM,YAAY;QAAEe,iBAAiB;QAAEC;MAAQ;IACpF,CAAC;IACDjE,MAAM;IACNC;EACF,CAAC,CAAC;EAEF,IAAI,CAACG,QAAQ,CAACc,EAAE,EAAE,OAAOd,QAAQ;EAEjC,MAAMiE,QAAQ,GAAGjE,QAAQ,CAACoB,IAAI,CAAC4C,2BAA2B;EAC1D,IAAI,CAACC,QAAQ,EAAE;IACb,OAAO;MACLnD,EAAE,EAAE,KAAK;MACTkB,MAAM,EAAE;QACNlB,EAAE,EAAE,KAAK;QACTF,MAAM,EAAE,WAAW;QACnBqB,QAAQ,EAAE,SAAS;QACnB9C,OAAO,EAAE,gEAAgE;QACzE0C,SAAS,EAAE7B,QAAQ,CAAC6B,SAAS;QAC7BK,MAAM,EAAE;MACV;IACF,CAAC;EACH;EAEA,OAAO;IAAEpB,EAAE,EAAE,IAAI;IAAEmD;EAAS,CAAC;AAC/B,CAAC","ignoreList":[]}
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","formatGraphQlError","error","details","path","length","join","extensions","code","filter","Boolean","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","me","data","user","hydratedAuthState","userId","_id","trim","email","fetchPublishedSkillsGraphQl","operationName","fetchedAt","Date","toISOString","result","authMode","source","Error","graphQlErrors","map","operationPrefix","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\nconst formatGraphQlError = (error: { message: string; path?: Array<string | number>; extensions?: { code?: string } }): string => {\n const details = [\n error.path && error.path.length > 0 ? `path=${error.path.join('.')}` : null,\n error.extensions?.code ? `code=${error.extensions.code}` : null,\n ].filter(Boolean);\n\n return details.length > 0 ? `${error.message} (${details.join(', ')})` : error.message;\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 operationName,\n}: {\n worktree: string;\n config: ResolvedConfig;\n query: string;\n variables: Record<string, unknown>;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n operationName?: string;\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 graphQlErrors = body.errors.map(formatGraphQlError);\n const operationPrefix = operationName ? `${operationName}: ` : '';\n const message = `${operationPrefix}${graphQlErrors.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: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message,\n graphQlErrors,\n fetchedAt,\n source: 'network',\n },\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 operationName: 'pluginPublishedSkills',\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 operationName: 'pluginWizardArtifacts',\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 operationName: 'pluginWizardArtifactVersion',\n });\n\n if (!wizardArtifactResponse.ok && wizardArtifactResponse.result.status === 'missing_auth') {\n return wizardArtifactResponse;\n }\n\n if (wizardArtifactResponse.ok) {\n const wizardArtifact = wizardArtifactResponse.data.pluginWizardArtifactVersion;\n if (wizardArtifact) return { ok: true, artifact: wizardArtifact };\n }\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 operationName: 'pluginPublishedSkillVersionArtifact',\n });\n\n if (!response.ok) return wizardArtifactResponse.ok ? response : wizardArtifactResponse;\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 operationName: 'pluginWizardArtifactVersion',\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":[]}