@aexol/opencode-wizard 0.3.10 → 0.3.11

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.
@@ -3,6 +3,7 @@ export declare const SET_PUBLISHED_SKILL_PREFERENCE_MUTATION = "\n mutation Set
3
3
  export declare 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";
4
4
  export declare 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 \n assignmentSource\n assignmentType\n scopePath\n includeChildren\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 catalogArtifacts {\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 artifactPreferences {\n scopeKey\n userKey\n ignoredArtifacts {\n \n assignmentSource\n assignmentType\n scopePath\n includeChildren\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 unsupportedReason\n message\n }\n }\n";
5
5
  export declare 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";
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";
6
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 \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";
7
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";
8
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";
@@ -210,6 +210,17 @@ export const WIZARD_ARTIFACT_DETAIL_QUERY = `
210
210
  }
211
211
  }
212
212
  `;
213
+ export const CURRENT_USER_ROLE_QUERY = `
214
+ query PluginCurrentUserRole {
215
+ user {
216
+ me {
217
+ _id
218
+ email
219
+ role
220
+ }
221
+ }
222
+ }
223
+ `;
213
224
  export const SET_WIZARD_ARTIFACT_PREFERENCE_MUTATION = `
214
225
  mutation SetWizardArtifactPreference($input: SetWizardArtifactPreferenceInput!) {
215
226
  setWizardArtifactPreference(input: $input) {
@@ -1 +1 @@
1
- {"version":3,"names":["PUBLISHED_SKILL_CORE_FIELDS","PUBLISHED_SKILL_ASSIGNMENT_FIELDS","PUBLISHED_SKILLS_CATALOG_QUERY","SET_PUBLISHED_SKILL_PREFERENCE_MUTATION","PUBLISHED_SKILL_DETAIL_QUERY","WIZARD_ARTIFACT_CORE_FIELDS","WIZARD_ARTIFACT_ASSIGNMENT_FIELDS","WIZARD_ARTIFACTS_CATALOG_QUERY","WIZARD_ARTIFACT_DETAIL_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 ${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_CORE_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 ${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_CORE_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 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,IAAID,2BAA2B;AAC/B,CAAC;AAED,OAAO,MAAME,8BAA8B,GAAG;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAUD,iCAAiC;AAC3C;AACA;AACA,UAAUD,2BAA2B;AACrC;AACA;AACA;AACA;AACA;AACA,YAAYC,iCAAiC;AAC7C;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAME,uCAAuC,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA,UAAUF,iCAAiC;AAC3C;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,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,IAAID,2BAA2B;AAC/B,CAAC;AAED,OAAO,MAAME,8BAA8B,GAAG;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAUD,iCAAiC;AAC3C;AACA;AACA,UAAUD,2BAA2B;AACrC;AACA;AACA;AACA;AACA;AACA,YAAYC,iCAAiC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAME,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,uCAAuC,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA,UAAUH,iCAAiC;AAC3C;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMI,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_SKILLS_CATALOG_QUERY","SET_PUBLISHED_SKILL_PREFERENCE_MUTATION","PUBLISHED_SKILL_DETAIL_QUERY","WIZARD_ARTIFACT_CORE_FIELDS","WIZARD_ARTIFACT_ASSIGNMENT_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 ${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_CORE_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 ${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_CORE_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,IAAID,2BAA2B;AAC/B,CAAC;AAED,OAAO,MAAME,8BAA8B,GAAG;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAUD,iCAAiC;AAC3C;AACA;AACA,UAAUD,2BAA2B;AACrC;AACA;AACA;AACA;AACA;AACA,YAAYC,iCAAiC;AAC7C;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAME,uCAAuC,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA,UAAUF,iCAAiC;AAC3C;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,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,IAAID,2BAA2B;AAC/B,CAAC;AAED,OAAO,MAAME,8BAA8B,GAAG;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAUD,iCAAiC;AAC3C;AACA;AACA,UAAUD,2BAA2B;AACrC;AACA;AACA;AACA;AACA;AACA,YAAYC,iCAAiC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAME,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,UAAUJ,iCAAiC;AAC3C;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMK,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":[]}
@@ -7,7 +7,7 @@ export const resolveAvailableTools = role => {
7
7
  export const createPublishedSkillToolDefinitions = (tool, handlers) => ({
8
8
  sharedTools: {
9
9
  opencode_wizard_catalog_fetch: tool({
10
- description: 'Always-available canonical wizard artifact catalog tool. Supports artifactKind SKILL and DESIGN_DOC; catalogs are metadata-only and bodies/files require explicit artifact fetch.',
10
+ description: '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.',
11
11
  args: {
12
12
  artifactKind: tool.schema.string().optional().describe('Wizard artifact kind to catalog: SKILL or DESIGN_DOC; defaults to SKILL'),
13
13
  directory: tool.schema.string().optional().describe('Optional absolute or relative directory override'),
@@ -18,7 +18,7 @@ export const createPublishedSkillToolDefinitions = (tool, handlers) => ({
18
18
  }
19
19
  }),
20
20
  opencode_wizard_artifact_fetch: tool({
21
- description: 'Always-available canonical wizard artifact detail tool. Supports artifactKind SKILL and DESIGN_DOC; fetches explicit backend-authorized bodies/files for effective artifacts.',
21
+ description: '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.',
22
22
  args: {
23
23
  artifactKind: tool.schema.string().optional().describe('Wizard artifact kind to fetch: SKILL or DESIGN_DOC; defaults to SKILL'),
24
24
  artifact: tool.schema.string().optional().describe('Single artifact identifier; for SKILL this is a skill slug, artifact name, or skill name'),
@@ -44,7 +44,7 @@ export const createPublishedSkillToolDefinitions = (tool, handlers) => ({
44
44
  }
45
45
  }),
46
46
  opencode_wizard_published_skills_fetch: tool({
47
- description: 'Always-available tool to fetch one or multiple wizard-published skill bodies/details for the current scope. 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',
47
+ description: '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',
48
48
  args: {
49
49
  skill: tool.schema.string().optional().describe('Single skill slug, artifact name, or skill name; backward-compatible with comma/newline-delimited lists'),
50
50
  skills: tool.schema.string().optional().describe('One or more comma-separated or newline-separated skill slugs, artifact names, or skill names'),
@@ -68,7 +68,7 @@ export const createPublishedSkillToolDefinitions = (tool, handlers) => ({
68
68
  }
69
69
  }),
70
70
  opencode_wizard_status: tool({
71
- description: 'Always-available tool to report opencode-wizard plugin status, bootstrap auth when missing, and return safe auth/catalog/source/cache/workspace guidance without exposing tokens',
71
+ description: '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',
72
72
  args: {
73
73
  directory: tool.schema.string().optional().describe('Optional absolute or relative directory override')
74
74
  },
@@ -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","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};\n\nexport type WizardArtifactKind = 'SKILL' | 'DESIGN_DOC';\n\nexport type WizardArtifactCatalogFetchArgs = {\n artifactKind?: string;\n directory?: string;\n refresh?: boolean;\n};\n\nexport type WizardArtifactFetchArgs = {\n artifactKind?: string;\n artifact?: string;\n artifacts?: string;\n directory?: string;\n refresh?: boolean;\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; catalogs are metadata-only and bodies/files require explicit artifact fetch.',\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 },\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; fetches explicit backend-authorized bodies/files for effective artifacts.',\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 },\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.',\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 or global; defaults to project'),\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 bodies/details for the current scope. 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 },\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 same shared server-backed preference API as the TUI overlay; auth/catalog failures are returned in tool output',\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 or global; defaults to project'),\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 guidance without exposing tokens',\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":"AAoGA,OAAO,MAAMA,+BAA+B,GAAG,CAC7C,+BAA+B,EAC/B,gCAAgC,EAChC,yCAAyC,EACzC,wCAAwC,EACxC,gDAAgD,EAChD,wBAAwB,EACxB,+CAA+C,EAC/C,sCAAsC,EACtC,iCAAiC,CAClC;AAED,MAAMC,4BAA4B,GAAGD,+BAA+B,CAACE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAEhF,OAAO,MAAMC,qBAAqB,GAAIC,IAA+B,IAAe;EAClF,IAAIA,IAAI,KAAK,QAAQ,EAAE,OAAO,CAAC,GAAGJ,+BAA+B,CAAC;EAClE,OAAO,CAAC,GAAGC,4BAA4B,CAAC;AAC1C,CAAC;AAED,OAAO,MAAMI,mCAAmC,GAAGA,CACjDC,IAAiB,EACjBC,QAAoC,MAChC;EACJC,WAAW,EAAE;IACXC,6BAA6B,EAAEH,IAAI,CAAiC;MAClEI,WAAW,EACT,mLAAmL;MACrLC,IAAI,EAAE;QACJC,YAAY,EAAEN,IAAI,CAACO,MAAM,CACtBC,MAAM,CAAC,CAAC,CACRC,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,yEAAyE,CAAC;QACtFC,SAAS,EAAEX,IAAI,CAACO,MAAM,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,kDAAkD,CAAC;QACvGE,OAAO,EAAEZ,IAAI,CAACO,MAAM,CAACM,OAAO,CAAC,CAAC,CAACJ,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,gDAAgD;MACrG,CAAC;MACD,MAAMI,OAAOA,CAACT,IAAI,EAAEU,OAAO,EAAE;QAC3B,OAAOd,QAAQ,CAACe,0BAA0B,CAACX,IAAI,EAAEU,OAAO,CAAC;MAC3D;IACF,CAAC,CAAC;IACFE,8BAA8B,EAAEjB,IAAI,CAA0B;MAC5DI,WAAW,EACT,+KAA+K;MACjLC,IAAI,EAAE;QACJC,YAAY,EAAEN,IAAI,CAACO,MAAM,CACtBC,MAAM,CAAC,CAAC,CACRC,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,uEAAuE,CAAC;QACpFQ,QAAQ,EAAElB,IAAI,CAACO,MAAM,CAClBC,MAAM,CAAC,CAAC,CACRC,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,0FAA0F,CAAC;QACvGS,SAAS,EAAEnB,IAAI,CAACO,MAAM,CACnBC,MAAM,CAAC,CAAC,CACRC,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,uEAAuE,CAAC;QACpFC,SAAS,EAAEX,IAAI,CAACO,MAAM,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,kDAAkD,CAAC;QACvGE,OAAO,EAAEZ,IAAI,CAACO,MAAM,CAACM,OAAO,CAAC,CAAC,CAACJ,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,gDAAgD;MACrG,CAAC;MACD,MAAMI,OAAOA,CAACT,IAAI,EAAEU,OAAO,EAAE;QAC3B,OAAOd,QAAQ,CAACmB,oBAAoB,CAACf,IAAI,EAAEU,OAAO,CAAC;MACrD;IACF,CAAC,CAAC;IACFM,uCAAuC,EAAErB,IAAI,CAA+B;MAC1EI,WAAW,EACT,6KAA6K;MAC/KC,IAAI,EAAE;QACJC,YAAY,EAAEN,IAAI,CAACO,MAAM,CACtBC,MAAM,CAAC,CAAC,CACRC,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,wEAAwE,CAAC;QACrFQ,QAAQ,EAAElB,IAAI,CAACO,MAAM,CAACC,MAAM,CAAC,CAAC,CAACE,QAAQ,CAAC,iEAAiE,CAAC;QAC1GY,MAAM,EAAEtB,IAAI,CAACO,MAAM,CAChBC,MAAM,CAAC,CAAC,CACRE,QAAQ,CAAC,4DAA4D,CAAC;QACzEa,eAAe,EAAEvB,IAAI,CAACO,MAAM,CACzBC,MAAM,CAAC,CAAC,CACRC,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,yEAAyE,CAAC;QACtFC,SAAS,EAAEX,IAAI,CAACO,MAAM,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,kDAAkD;MACxG,CAAC;MACD,MAAMI,OAAOA,CAACT,IAAI,EAAEU,OAAO,EAAE;QAC3B,OAAOd,QAAQ,CAACuB,8BAA8B,CAACnB,IAAI,EAAEU,OAAO,CAAC;MAC/D;IACF,CAAC,CAAC;IACFU,sCAAsC,EAAEzB,IAAI,CAA0B;MACpEI,WAAW,EACT,2aAA2a;MAC7aC,IAAI,EAAE;QACJqB,KAAK,EAAE1B,IAAI,CAACO,MAAM,CACfC,MAAM,CAAC,CAAC,CACRC,QAAQ,CAAC,CAAC,CACVC,QAAQ,CACP,yGACF,CAAC;QACHiB,MAAM,EAAE3B,IAAI,CAACO,MAAM,CAChBC,MAAM,CAAC,CAAC,CACRC,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,8FAA8F,CAAC;QAC3GC,SAAS,EAAEX,IAAI,CAACO,MAAM,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,kDAAkD,CAAC;QACvGE,OAAO,EAAEZ,IAAI,CAACO,MAAM,CAACM,OAAO,CAAC,CAAC,CAACJ,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,gDAAgD;MACrG,CAAC;MACD,MAAMI,OAAOA,CAACT,IAAI,EAAEU,OAAO,EAAE;QAC3B,OAAOd,QAAQ,CAAC2B,oBAAoB,CAACvB,IAAI,EAAEU,OAAO,CAAC;MACrD;IACF,CAAC,CAAC;IACFc,8CAA8C,EAAE7B,IAAI,CAA+B;MACjFI,WAAW,EACT,kPAAkP;MACpPC,IAAI,EAAE;QACJqB,KAAK,EAAE1B,IAAI,CAACO,MAAM,CAACC,MAAM,CAAC,CAAC,CAACE,QAAQ,CAAC,8DAA8D,CAAC;QACpGY,MAAM,EAAEtB,IAAI,CAACO,MAAM,CAChBC,MAAM,CAAC,CAAC,CACRE,QAAQ,CAAC,4DAA4D,CAAC;QACzEa,eAAe,EAAEvB,IAAI,CAACO,MAAM,CACzBC,MAAM,CAAC,CAAC,CACRC,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,yEAAyE,CAAC;QACtFC,SAAS,EAAEX,IAAI,CAACO,MAAM,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,kDAAkD;MACxG,CAAC;MACD,MAAMI,OAAOA,CAACT,IAAI,EAAEU,OAAO,EAAE;QAC3B,OAAOd,QAAQ,CAAC6B,8BAA8B,CAACzB,IAAI,EAAEU,OAAO,CAAC;MAC/D;IACF,CAAC,CAAC;IACFgB,sBAAsB,EAAE/B,IAAI,CAAmB;MAC7CI,WAAW,EACT,kLAAkL;MACpLC,IAAI,EAAE;QACJM,SAAS,EAAEX,IAAI,CAACO,MAAM,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,kDAAkD;MACxG,CAAC;MACD,MAAMI,OAAOA,CAACT,IAAI,EAAEU,OAAO,EAAE;QAC3B,OAAOd,QAAQ,CAAC+B,SAAS,CAAC3B,IAAI,EAAEU,OAAO,CAAC;MAC1C;IACF,CAAC;EACH,CAAC;EACDkB,eAAe,EAAE;IACfC,6CAA6C,EAAElC,IAAI,CAAgC;MACjFI,WAAW,EACT,8MAA8M;MAChNC,IAAI,EAAE;QACJ8B,eAAe,EAAEnC,IAAI,CAACO,MAAM,CACzBC,MAAM,CAAC,CAAC,CACRE,QAAQ,CAAC,uGAAuG,CAAC;QACpHC,SAAS,EAAEX,IAAI,CAACO,MAAM,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,kDAAkD;MACxG,CAAC;MACD,MAAMI,OAAOA,CAACT,IAAI,EAAEU,OAAO,EAAE;QAC3B,OAAOd,QAAQ,CAACmC,yBAAyB,CAAC/B,IAAI,EAAEU,OAAO,CAAC;MAC1D;IACF,CAAC,CAAC;IACFsB,oCAAoC,EAAErC,IAAI,CAAyB;MACjEI,WAAW,EACT,0JAA0J;MAC5JC,IAAI,EAAE;QACJiC,SAAS,EAAEtC,IAAI,CAACO,MAAM,CACnBC,MAAM,CAAC,CAAC,CACRE,QAAQ,CAAC,yDAAyD,CAAC;QACtEC,SAAS,EAAEX,IAAI,CAACO,MAAM,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,kDAAkD;MACxG,CAAC;MACD,MAAMI,OAAOA,CAACT,IAAI,EAAEU,OAAO,EAAE;QAC3B,OAAOd,QAAQ,CAACsC,kBAAkB,CAAClC,IAAI,EAAEU,OAAO,CAAC;MACnD;IACF,CAAC,CAAC;IACFyB,+BAA+B,EAAExC,IAAI,CAA2B;MAC9DI,WAAW,EACT,uSAAuS;MACzSC,IAAI,EAAE;QACJC,YAAY,EAAEN,IAAI,CAACO,MAAM,CACtBC,MAAM,CAAC,CAAC,CACRC,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,wFAAwF,CAAC;QACrG+B,MAAM,EAAEzC,IAAI,CAACO,MAAM,CAChBC,MAAM,CAAC,CAAC,CACRE,QAAQ,CAAC,wIAAwI,CAAC;QACrJgC,IAAI,EAAE1C,IAAI,CAACO,MAAM,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,yDAAyD,CAAC;QACzGgB,KAAK,EAAE1B,IAAI,CAACO,MAAM,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,6CAA6C,CAAC;QAC9FiC,IAAI,EAAE3C,IAAI,CAACO,MAAM,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,gCAAgC,CAAC;QAChFkC,OAAO,EAAE5C,IAAI,CAACO,MAAM,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,uCAAuC,CAAC;QAC1FC,SAAS,EAAEX,IAAI,CAACO,MAAM,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,kDAAkD;MACxG,CAAC;MACD,MAAMI,OAAOA,CAACT,IAAI,EAAEU,OAAO,EAAE;QAC3B,OAAOd,QAAQ,CAAC4C,oBAAoB,CAACxC,IAAI,EAAEU,OAAO,CAAC;MACrD;IACF,CAAC;EACH;AACF,CAAC,CAAC","ignoreList":[]}
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","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};\n\nexport type WizardArtifactKind = 'SKILL' | 'DESIGN_DOC';\n\nexport type WizardArtifactCatalogFetchArgs = {\n artifactKind?: string;\n directory?: string;\n refresh?: boolean;\n};\n\nexport type WizardArtifactFetchArgs = {\n artifactKind?: string;\n artifact?: string;\n artifacts?: string;\n directory?: string;\n refresh?: boolean;\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 },\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 },\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.',\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 or global; defaults to project'),\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 },\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 same shared server-backed preference API as the TUI overlay; auth/catalog failures are returned in tool output',\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 or global; defaults to project'),\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":[]}
@@ -9,6 +9,6 @@ export const buildPublishedSkillsSystemNote = ({
9
9
  const renderedSkillNames = skillNames.length > 0 ? skillNames.slice(0, SYSTEM_NOTE_SKILL_NAME_LIMIT).join(', ') : 'none';
10
10
  const remainingCount = Math.max(skillNames.length - SYSTEM_NOTE_SKILL_NAME_LIMIT, 0);
11
11
  const renderedCountSuffix = remainingCount > 0 ? ` (+${remainingCount} more)` : '';
12
- return [workspace ? `Workspace: ${workspace.slug}.` : 'Workspace not found; workspace-scoped wizard skills are unavailable.', `Current directory: ${directoryPath}.`, `Active wizard skills (${skillNames.length}): ${renderedSkillNames}${renderedCountSuffix}.`, 'Fetch rule: wizard-listed skill bodies are backend-published and tool-fetch-only; fetch bodies with `opencode_wizard_published_skills_fetch` before use.', 'Status hint: use no-arg fetch/status for auth and catalog state; pass `refresh: true` before cache deletion.'].filter(Boolean).join(' ');
12
+ return [workspace ? `Workspace: ${workspace.slug}.` : 'Workspace not found; workspace-scoped wizard skills are unavailable.', `Current directory: ${directoryPath}.`, `Active wizard skills (${skillNames.length}): ${renderedSkillNames}${renderedCountSuffix}.`, 'Fetch rule: when a backend-published wizard-listed skill is relevant, fetch it with `opencode_wizard_published_skills_fetch` before using that skill.', 'Use fetched `SKILL.md` as reference for matching wizard-listed skills.', 'Catalog/status output is candidate discovery metadata, not executable skill instructions.', 'Status hint: use no-arg fetch/status for auth and catalog state; pass `refresh: true` before cache deletion. Use `opencode_wizard_artifact_fetch` for non-skill wizard artifacts.'].filter(Boolean).join(' ');
13
13
  };
14
14
  //# sourceMappingURL=published-skills-system-note.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["SYSTEM_NOTE_SKILL_NAME_LIMIT","buildPublishedSkillsSystemNote","workspace","directoryPath","catalog","details","_details","skillNames","skills","map","skill","artifactName","skillName","skillSlug","renderedSkillNames","length","slice","join","remainingCount","Math","max","renderedCountSuffix","slug","filter","Boolean"],"sources":["../src/published-skills-system-note.ts"],"sourcesContent":["import type { PublishedSkillsSuccessState } from './published-skills-transform.js';\n\nconst SYSTEM_NOTE_SKILL_NAME_LIMIT = 10;\n\nexport const buildPublishedSkillsSystemNote = ({\n workspace,\n directoryPath,\n catalog,\n details: _details,\n}: {\n workspace: { slug: string } | null;\n directoryPath: string;\n catalog: PublishedSkillsSuccessState;\n details: unknown[];\n}): string => {\n const skillNames = catalog.skills.map((skill) => skill.artifactName || skill.skillName || skill.skillSlug);\n const renderedSkillNames =\n skillNames.length > 0 ? skillNames.slice(0, SYSTEM_NOTE_SKILL_NAME_LIMIT).join(', ') : 'none';\n const remainingCount = Math.max(skillNames.length - SYSTEM_NOTE_SKILL_NAME_LIMIT, 0);\n const renderedCountSuffix = remainingCount > 0 ? ` (+${remainingCount} more)` : '';\n\n return [\n workspace ? `Workspace: ${workspace.slug}.` : 'Workspace not found; workspace-scoped wizard skills are unavailable.',\n `Current directory: ${directoryPath}.`,\n `Active wizard skills (${skillNames.length}): ${renderedSkillNames}${renderedCountSuffix}.`,\n 'Fetch rule: wizard-listed skill bodies are backend-published and tool-fetch-only; fetch bodies with `opencode_wizard_published_skills_fetch` before use.',\n 'Status hint: use no-arg fetch/status for auth and catalog state; pass `refresh: true` before cache deletion.',\n ]\n .filter(Boolean)\n .join(' ');\n};\n"],"mappings":"AAEA,MAAMA,4BAA4B,GAAG,EAAE;AAEvC,OAAO,MAAMC,8BAA8B,GAAGA,CAAC;EAC7CC,SAAS;EACTC,aAAa;EACbC,OAAO;EACPC,OAAO,EAAEC;AAMX,CAAC,KAAa;EACZ,MAAMC,UAAU,GAAGH,OAAO,CAACI,MAAM,CAACC,GAAG,CAAEC,KAAK,IAAKA,KAAK,CAACC,YAAY,IAAID,KAAK,CAACE,SAAS,IAAIF,KAAK,CAACG,SAAS,CAAC;EAC1G,MAAMC,kBAAkB,GACtBP,UAAU,CAACQ,MAAM,GAAG,CAAC,GAAGR,UAAU,CAACS,KAAK,CAAC,CAAC,EAAEhB,4BAA4B,CAAC,CAACiB,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM;EAC/F,MAAMC,cAAc,GAAGC,IAAI,CAACC,GAAG,CAACb,UAAU,CAACQ,MAAM,GAAGf,4BAA4B,EAAE,CAAC,CAAC;EACpF,MAAMqB,mBAAmB,GAAGH,cAAc,GAAG,CAAC,GAAG,MAAMA,cAAc,QAAQ,GAAG,EAAE;EAElF,OAAO,CACLhB,SAAS,GAAG,cAAcA,SAAS,CAACoB,IAAI,GAAG,GAAG,sEAAsE,EACpH,sBAAsBnB,aAAa,GAAG,EACtC,yBAAyBI,UAAU,CAACQ,MAAM,MAAMD,kBAAkB,GAAGO,mBAAmB,GAAG,EAC3F,0JAA0J,EAC1J,8GAA8G,CAC/G,CACEE,MAAM,CAACC,OAAO,CAAC,CACfP,IAAI,CAAC,GAAG,CAAC;AACd,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["SYSTEM_NOTE_SKILL_NAME_LIMIT","buildPublishedSkillsSystemNote","workspace","directoryPath","catalog","details","_details","skillNames","skills","map","skill","artifactName","skillName","skillSlug","renderedSkillNames","length","slice","join","remainingCount","Math","max","renderedCountSuffix","slug","filter","Boolean"],"sources":["../src/published-skills-system-note.ts"],"sourcesContent":["import type { PublishedSkillsSuccessState } from './published-skills-transform.js';\n\nconst SYSTEM_NOTE_SKILL_NAME_LIMIT = 10;\n\nexport const buildPublishedSkillsSystemNote = ({\n workspace,\n directoryPath,\n catalog,\n details: _details,\n}: {\n workspace: { slug: string } | null;\n directoryPath: string;\n catalog: PublishedSkillsSuccessState;\n details: unknown[];\n}): string => {\n const skillNames = catalog.skills.map((skill) => skill.artifactName || skill.skillName || skill.skillSlug);\n const renderedSkillNames =\n skillNames.length > 0 ? skillNames.slice(0, SYSTEM_NOTE_SKILL_NAME_LIMIT).join(', ') : 'none';\n const remainingCount = Math.max(skillNames.length - SYSTEM_NOTE_SKILL_NAME_LIMIT, 0);\n const renderedCountSuffix = remainingCount > 0 ? ` (+${remainingCount} more)` : '';\n\n return [\n workspace ? `Workspace: ${workspace.slug}.` : 'Workspace not found; workspace-scoped wizard skills are unavailable.',\n `Current directory: ${directoryPath}.`,\n `Active wizard skills (${skillNames.length}): ${renderedSkillNames}${renderedCountSuffix}.`,\n 'Fetch rule: when a backend-published wizard-listed skill is relevant, fetch it with `opencode_wizard_published_skills_fetch` before using that skill.',\n 'Use fetched `SKILL.md` as reference for matching wizard-listed skills.',\n 'Catalog/status output is candidate discovery metadata, not executable skill instructions.',\n 'Status hint: use no-arg fetch/status for auth and catalog state; pass `refresh: true` before cache deletion. Use `opencode_wizard_artifact_fetch` for non-skill wizard artifacts.',\n ]\n .filter(Boolean)\n .join(' ');\n};\n"],"mappings":"AAEA,MAAMA,4BAA4B,GAAG,EAAE;AAEvC,OAAO,MAAMC,8BAA8B,GAAGA,CAAC;EAC7CC,SAAS;EACTC,aAAa;EACbC,OAAO;EACPC,OAAO,EAAEC;AAMX,CAAC,KAAa;EACZ,MAAMC,UAAU,GAAGH,OAAO,CAACI,MAAM,CAACC,GAAG,CAAEC,KAAK,IAAKA,KAAK,CAACC,YAAY,IAAID,KAAK,CAACE,SAAS,IAAIF,KAAK,CAACG,SAAS,CAAC;EAC1G,MAAMC,kBAAkB,GACtBP,UAAU,CAACQ,MAAM,GAAG,CAAC,GAAGR,UAAU,CAACS,KAAK,CAAC,CAAC,EAAEhB,4BAA4B,CAAC,CAACiB,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM;EAC/F,MAAMC,cAAc,GAAGC,IAAI,CAACC,GAAG,CAACb,UAAU,CAACQ,MAAM,GAAGf,4BAA4B,EAAE,CAAC,CAAC;EACpF,MAAMqB,mBAAmB,GAAGH,cAAc,GAAG,CAAC,GAAG,MAAMA,cAAc,QAAQ,GAAG,EAAE;EAElF,OAAO,CACLhB,SAAS,GAAG,cAAcA,SAAS,CAACoB,IAAI,GAAG,GAAG,sEAAsE,EACpH,sBAAsBnB,aAAa,GAAG,EACtC,yBAAyBI,UAAU,CAACQ,MAAM,MAAMD,kBAAkB,GAAGO,mBAAmB,GAAG,EAC3F,uJAAuJ,EACvJ,wEAAwE,EACxE,2FAA2F,EAC3F,mLAAmL,CACpL,CACEE,MAAM,CAACC,OAAO,CAAC,CACfP,IAAI,CAAC,GAAG,CAAC;AACd,CAAC","ignoreList":[]}
@@ -1,4 +1,10 @@
1
- import type { FetchResult, PublishedSkillArtifactDetailPayload, PublishedSkillArtifactDetailPurpose, ResolvedConfig, WizardArtifactDetailPayload, WizardArtifactFetchResult, WizardArtifactKind, WorkspaceResolution } from './types.js';
1
+ import type { AuthState, FetchResult, PublishedSkillArtifactDetailPayload, PublishedSkillArtifactDetailPurpose, ResolvedConfig, WizardArtifactDetailPayload, WizardArtifactFetchResult, WizardArtifactKind, WorkspaceResolution } from './types.js';
2
+ export declare const hydrateStoredAuthStateRole: ({ worktree, config, signal, onAuthStateChanged, }: {
3
+ worktree: string;
4
+ config: ResolvedConfig;
5
+ signal: AbortSignal;
6
+ onAuthStateChanged?: () => void;
7
+ }) => Promise<AuthState | null>;
2
8
  export declare const fetchPublishedSkillsGraphQl: <TData>({ worktree, config, query, variables, signal, onAuthStateChanged, }: {
3
9
  worktree: string;
4
10
  config: ResolvedConfig;
@@ -1,11 +1,68 @@
1
- import { PUBLISHED_SKILL_DETAIL_QUERY, PUBLISHED_SKILLS_CATALOG_QUERY, WIZARD_ARTIFACT_DETAIL_QUERY, WIZARD_ARTIFACTS_CATALOG_QUERY } from '../graphql-operations.js';
2
- import { clearAuthState, resolveStoredAuthState, upsertWorkspaceSlugMapping } from './auth-store.js';
1
+ import { CURRENT_USER_ROLE_QUERY, PUBLISHED_SKILL_DETAIL_QUERY, PUBLISHED_SKILLS_CATALOG_QUERY, WIZARD_ARTIFACT_DETAIL_QUERY, WIZARD_ARTIFACTS_CATALOG_QUERY } from '../graphql-operations.js';
2
+ import { clearAuthState, resolveStoredAuthState, upsertWorkspaceSlugMapping, writeAuthState } from './auth-store.js';
3
3
  import { toWorkspaceSlug } from './path-utils.js';
4
4
  import { toDeliveryInput } from './workspace.js';
5
5
  const isUnauthorizedGraphQlMessage = message => {
6
6
  const normalizedMessage = message.toLowerCase();
7
7
  return normalizedMessage.includes('not authorized') || normalizedMessage.includes('unauthorized');
8
8
  };
9
+ const isPluginEditorRole = value => {
10
+ return value === 'ADMIN' || value === 'EDITOR';
11
+ };
12
+ export const hydrateStoredAuthStateRole = async ({
13
+ worktree,
14
+ config,
15
+ signal,
16
+ onAuthStateChanged
17
+ }) => {
18
+ const authState = await resolveStoredAuthState(worktree, config);
19
+ if (!authState) return null;
20
+ if (authState.role) return authState;
21
+ let response;
22
+ try {
23
+ response = await fetch(config.graphqlUrl, {
24
+ method: 'POST',
25
+ headers: {
26
+ 'content-type': 'application/json',
27
+ authorization: `Bearer ${authState.sessionToken}`
28
+ },
29
+ body: JSON.stringify({
30
+ query: CURRENT_USER_ROLE_QUERY,
31
+ variables: {}
32
+ }),
33
+ signal
34
+ });
35
+ } catch {
36
+ return authState;
37
+ }
38
+ if (response.status === 401 || response.status === 403) {
39
+ await clearAuthState(config.authStatePath);
40
+ onAuthStateChanged?.();
41
+ return null;
42
+ }
43
+ if (!response.ok) return authState;
44
+ let body;
45
+ try {
46
+ body = await response.json();
47
+ } catch {
48
+ return authState;
49
+ }
50
+ if (body.errors?.some(error => isUnauthorizedGraphQlMessage(error.message))) {
51
+ await clearAuthState(config.authStatePath);
52
+ onAuthStateChanged?.();
53
+ return null;
54
+ }
55
+ const me = body.data?.user?.me;
56
+ if (!isPluginEditorRole(me?.role)) return authState;
57
+ const hydratedAuthState = {
58
+ ...authState,
59
+ userId: typeof me._id === 'string' && me._id.trim().length > 0 ? me._id : authState.userId,
60
+ email: typeof me.email === 'string' && me.email.trim().length > 0 ? me.email : authState.email,
61
+ role: me.role
62
+ };
63
+ await writeAuthState(config.authStatePath, hydratedAuthState);
64
+ return hydratedAuthState;
65
+ };
9
66
  export const fetchPublishedSkillsGraphQl = async ({
10
67
  worktree,
11
68
  config,
@@ -1 +1 @@
1
- {"version":3,"names":["PUBLISHED_SKILL_DETAIL_QUERY","PUBLISHED_SKILLS_CATALOG_QUERY","WIZARD_ARTIFACT_DETAIL_QUERY","WIZARD_ARTIFACTS_CATALOG_QUERY","clearAuthState","resolveStoredAuthState","upsertWorkspaceSlugMapping","toWorkspaceSlug","toDeliveryInput","isUnauthorizedGraphQlMessage","message","normalizedMessage","toLowerCase","includes","fetchPublishedSkillsGraphQl","worktree","config","query","variables","signal","onAuthStateChanged","authState","fetchedAt","Date","toISOString","ok","result","status","authMode","source","response","fetch","graphqlUrl","method","headers","authorization","sessionToken","body","JSON","stringify","error","Error","authStatePath","json","errors","length","map","join","some","data","fetchPublishedSkillsCatalog","resolution","input","payload","pluginPublishedSkills","fetchWizardArtifactsCatalog","artifactKind","pluginWizardArtifacts","maybePersistWorkspaceSlugFromCatalog","fetchResult","backendWorkspaceSlug","workspace","slug","trim","normalizedWorkspaceSlug","workspaceSlug","workspaceSlugSource","configFile","repositoryUrl","repositoryRoot","fetchPublishedSkillDetail","skillVersionId","purpose","artifact","pluginPublishedSkillVersionArtifact","fetchWizardArtifactDetail","artifactVersionId","pluginWizardArtifactVersion"],"sources":["../../src/server/client.ts"],"sourcesContent":["import {\n PUBLISHED_SKILL_DETAIL_QUERY,\n PUBLISHED_SKILLS_CATALOG_QUERY,\n WIZARD_ARTIFACT_DETAIL_QUERY,\n WIZARD_ARTIFACTS_CATALOG_QUERY,\n} from '../graphql-operations.js';\nimport { clearAuthState, resolveStoredAuthState, upsertWorkspaceSlugMapping } from './auth-store.js';\nimport { toWorkspaceSlug } from './path-utils.js';\nimport { toDeliveryInput } from './workspace.js';\nimport type {\n FetchResult,\n GraphQLResponse,\n PublishedSkillArtifactDetailPayload,\n PublishedSkillArtifactDetailPurpose,\n PublishedSkillCatalogResponse,\n PublishedSkillDetailResponse,\n ResolvedConfig,\n WizardArtifactCatalogResponse,\n WizardArtifactDetailPayload,\n WizardArtifactDetailResponse,\n WizardArtifactFetchResult,\n WizardArtifactKind,\n WorkspaceResolution,\n} from './types.js';\n\nconst isUnauthorizedGraphQlMessage = (message: string): boolean => {\n const normalizedMessage = message.toLowerCase();\n return normalizedMessage.includes('not authorized') || normalizedMessage.includes('unauthorized');\n};\n\nexport const fetchPublishedSkillsGraphQl = async <TData>({\n worktree,\n config,\n query,\n variables,\n signal,\n onAuthStateChanged,\n}: {\n worktree: string;\n config: ResolvedConfig;\n query: string;\n variables: Record<string, unknown>;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n}): Promise<\n | { ok: true; data: TData; fetchedAt: string }\n | { ok: false; result: Extract<FetchResult, { ok: false }> }\n> => {\n const authState = await resolveStoredAuthState(worktree, config);\n const fetchedAt = new Date().toISOString();\n\n if (!authState) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'missing_auth',\n authMode: 'missing',\n message:\n 'No plugin session is stored. Interactive opencode_wizard_published_skills_fetch can bootstrap browser login automatically when needed. Configured backend and GraphQL URLs are shown for visibility, but no GraphQL request was made because auth is missing.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n let response: Response;\n\n try {\n response = await fetch(config.graphqlUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${authState.sessionToken}`,\n },\n body: JSON.stringify({ query, variables }),\n signal,\n });\n } catch (error) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: error instanceof Error ? error.message : 'Unknown fetch error',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (response.status === 401 || response.status === 403) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return {\n ok: false,\n result: {\n ok: false,\n status: 'missing_auth',\n authMode: 'session',\n message:\n 'Stored plugin session was rejected by the backend. Retry opencode_wizard_published_skills_fetch to bootstrap a fresh browser login automatically.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (!response.ok) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: `GraphQL request failed with HTTP ${response.status}.`,\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n let body: GraphQLResponse<TData>;\n\n try {\n body = (await response.json()) as GraphQLResponse<TData>;\n } catch (error) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: `GraphQL response was not valid JSON: ${error instanceof Error ? error.message : 'Unknown parse error'}`,\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (body.errors?.length) {\n const message = body.errors.map((error) => error.message).join('; ');\n\n if (body.errors.some((error) => isUnauthorizedGraphQlMessage(error.message))) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return {\n ok: false,\n result: {\n ok: false,\n status: 'missing_auth',\n authMode: 'session',\n message:\n 'Stored plugin session is no longer valid. Retry opencode_wizard_published_skills_fetch to bootstrap a fresh browser login automatically.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n return {\n ok: false,\n result: { ok: false, status: 'request_failed', authMode: 'session', message, fetchedAt, source: 'network' },\n };\n }\n\n if (!body.data) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include data.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n return { ok: true, data: body.data, fetchedAt };\n};\n\nexport const fetchPublishedSkillsCatalog = async (\n worktree: string,\n config: ResolvedConfig,\n resolution: WorkspaceResolution,\n signal: AbortSignal,\n onAuthStateChanged?: () => void,\n): Promise<FetchResult> => {\n const response = await fetchPublishedSkillsGraphQl<PublishedSkillCatalogResponse>({\n worktree,\n config,\n query: PUBLISHED_SKILLS_CATALOG_QUERY,\n variables: { input: toDeliveryInput(resolution) },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response.result;\n\n const payload = response.data.pluginPublishedSkills;\n\n if (!payload) {\n return {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include pluginPublishedSkills.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n }\n\n return {\n ok: true,\n status: 'ready',\n authMode: 'session',\n payload,\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n};\n\nexport const fetchWizardArtifactsCatalog = async (\n worktree: string,\n config: ResolvedConfig,\n resolution: WorkspaceResolution,\n artifactKind: WizardArtifactKind,\n signal: AbortSignal,\n onAuthStateChanged?: () => void,\n): Promise<WizardArtifactFetchResult> => {\n const response = await fetchPublishedSkillsGraphQl<WizardArtifactCatalogResponse>({\n worktree,\n config,\n query: WIZARD_ARTIFACTS_CATALOG_QUERY,\n variables: { input: { ...toDeliveryInput(resolution), artifactKind } },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response.result;\n\n const payload = response.data.pluginWizardArtifacts;\n if (!payload) {\n return {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include pluginWizardArtifacts.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n }\n\n return {\n ok: true,\n status: 'ready',\n authMode: 'session',\n payload,\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n};\n\nexport const maybePersistWorkspaceSlugFromCatalog = async ({\n config,\n resolution,\n fetchResult,\n}: {\n config: ResolvedConfig;\n resolution: WorkspaceResolution;\n fetchResult: FetchResult;\n}): Promise<void> => {\n if (!fetchResult.ok) return;\n\n const backendWorkspaceSlug = fetchResult.payload.workspace?.slug?.trim();\n if (!backendWorkspaceSlug) return;\n\n const normalizedWorkspaceSlug = toWorkspaceSlug(backendWorkspaceSlug);\n if (!normalizedWorkspaceSlug) return;\n\n if (resolution.workspaceSlug === normalizedWorkspaceSlug && resolution.workspaceSlugSource !== 'fallback') return;\n\n await upsertWorkspaceSlugMapping({\n configFile: config.authStatePath,\n repositoryUrl: resolution.repositoryUrl,\n repositoryRoot: resolution.repositoryRoot,\n workspaceSlug: normalizedWorkspaceSlug,\n });\n};\n\nexport const fetchPublishedSkillDetail = async ({\n worktree,\n config,\n resolution,\n skillVersionId,\n signal,\n onAuthStateChanged,\n purpose,\n}: {\n worktree: string;\n config: ResolvedConfig;\n resolution: WorkspaceResolution;\n skillVersionId: string;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n purpose: PublishedSkillArtifactDetailPurpose;\n}): Promise<\n | { ok: true; artifact: PublishedSkillArtifactDetailPayload }\n | {\n ok: false;\n result: {\n ok: false;\n status: 'not_found';\n authMode: 'session';\n message: string;\n fetchedAt: string;\n source: 'network';\n };\n }\n | { ok: false; result: Extract<FetchResult, { ok: false }> }\n> => {\n const response = await fetchPublishedSkillsGraphQl<PublishedSkillDetailResponse>({\n worktree,\n config,\n query: PUBLISHED_SKILL_DETAIL_QUERY,\n variables: {\n input: { ...toDeliveryInput(resolution), skillVersionId, purpose },\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response;\n\n const artifact = response.data.pluginPublishedSkillVersionArtifact;\n\n if (!artifact) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'not_found',\n authMode: 'session',\n message: 'Published skill detail is not effective for the current scope.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n },\n };\n }\n\n return { ok: true, artifact };\n};\n\nexport const fetchWizardArtifactDetail = async ({\n worktree,\n config,\n resolution,\n artifactKind,\n artifactVersionId,\n signal,\n onAuthStateChanged,\n purpose,\n}: {\n worktree: string;\n config: ResolvedConfig;\n resolution: WorkspaceResolution;\n artifactKind: WizardArtifactKind;\n artifactVersionId: string;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n purpose: PublishedSkillArtifactDetailPurpose;\n}): Promise<\n | { ok: true; artifact: WizardArtifactDetailPayload }\n | {\n ok: false;\n result: {\n ok: false;\n status: 'not_found';\n authMode: 'session';\n message: string;\n fetchedAt: string;\n source: 'network';\n };\n }\n | { ok: false; result: Extract<FetchResult, { ok: false }> }\n> => {\n const response = await fetchPublishedSkillsGraphQl<WizardArtifactDetailResponse>({\n worktree,\n config,\n query: WIZARD_ARTIFACT_DETAIL_QUERY,\n variables: {\n input: { ...toDeliveryInput(resolution), artifactKind, artifactVersionId, purpose },\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response;\n\n const artifact = response.data.pluginWizardArtifactVersion;\n if (!artifact) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'not_found',\n authMode: 'session',\n message: 'Wizard artifact detail is not effective for the current scope.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n },\n };\n }\n\n return { ok: true, artifact };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["CURRENT_USER_ROLE_QUERY","PUBLISHED_SKILL_DETAIL_QUERY","PUBLISHED_SKILLS_CATALOG_QUERY","WIZARD_ARTIFACT_DETAIL_QUERY","WIZARD_ARTIFACTS_CATALOG_QUERY","clearAuthState","resolveStoredAuthState","upsertWorkspaceSlugMapping","writeAuthState","toWorkspaceSlug","toDeliveryInput","isUnauthorizedGraphQlMessage","message","normalizedMessage","toLowerCase","includes","isPluginEditorRole","value","hydrateStoredAuthStateRole","worktree","config","signal","onAuthStateChanged","authState","role","response","fetch","graphqlUrl","method","headers","authorization","sessionToken","body","JSON","stringify","query","variables","status","authStatePath","ok","json","errors","some","error","me","data","user","hydratedAuthState","userId","_id","trim","length","email","fetchPublishedSkillsGraphQl","fetchedAt","Date","toISOString","result","authMode","source","Error","map","join","fetchPublishedSkillsCatalog","resolution","input","payload","pluginPublishedSkills","fetchWizardArtifactsCatalog","artifactKind","pluginWizardArtifacts","maybePersistWorkspaceSlugFromCatalog","fetchResult","backendWorkspaceSlug","workspace","slug","normalizedWorkspaceSlug","workspaceSlug","workspaceSlugSource","configFile","repositoryUrl","repositoryRoot","fetchPublishedSkillDetail","skillVersionId","purpose","artifact","pluginPublishedSkillVersionArtifact","fetchWizardArtifactDetail","artifactVersionId","pluginWizardArtifactVersion"],"sources":["../../src/server/client.ts"],"sourcesContent":["import {\n CURRENT_USER_ROLE_QUERY,\n PUBLISHED_SKILL_DETAIL_QUERY,\n PUBLISHED_SKILLS_CATALOG_QUERY,\n WIZARD_ARTIFACT_DETAIL_QUERY,\n WIZARD_ARTIFACTS_CATALOG_QUERY,\n} from '../graphql-operations.js';\nimport { clearAuthState, resolveStoredAuthState, upsertWorkspaceSlugMapping, writeAuthState } from './auth-store.js';\nimport { toWorkspaceSlug } from './path-utils.js';\nimport { toDeliveryInput } from './workspace.js';\nimport type {\n AuthState,\n CurrentUserRoleResponse,\n FetchResult,\n GraphQLResponse,\n PublishedSkillArtifactDetailPayload,\n PublishedSkillArtifactDetailPurpose,\n PublishedSkillCatalogResponse,\n PublishedSkillDetailResponse,\n ResolvedConfig,\n WizardArtifactCatalogResponse,\n WizardArtifactDetailPayload,\n WizardArtifactDetailResponse,\n WizardArtifactFetchResult,\n WizardArtifactKind,\n WorkspaceResolution,\n} from './types.js';\n\nconst isUnauthorizedGraphQlMessage = (message: string): boolean => {\n const normalizedMessage = message.toLowerCase();\n return normalizedMessage.includes('not authorized') || normalizedMessage.includes('unauthorized');\n};\n\nconst isPluginEditorRole = (value: unknown): value is NonNullable<AuthState['role']> => {\n return value === 'ADMIN' || value === 'EDITOR';\n};\n\nexport const hydrateStoredAuthStateRole = async ({\n worktree,\n config,\n signal,\n onAuthStateChanged,\n}: {\n worktree: string;\n config: ResolvedConfig;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n}): Promise<AuthState | null> => {\n const authState = await resolveStoredAuthState(worktree, config);\n if (!authState) return null;\n if (authState.role) return authState;\n\n let response: Response;\n\n try {\n response = await fetch(config.graphqlUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${authState.sessionToken}`,\n },\n body: JSON.stringify({ query: CURRENT_USER_ROLE_QUERY, variables: {} }),\n signal,\n });\n } catch {\n return authState;\n }\n\n if (response.status === 401 || response.status === 403) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return null;\n }\n\n if (!response.ok) return authState;\n\n let body: GraphQLResponse<CurrentUserRoleResponse>;\n\n try {\n body = (await response.json()) as GraphQLResponse<CurrentUserRoleResponse>;\n } catch {\n return authState;\n }\n\n if (body.errors?.some((error) => isUnauthorizedGraphQlMessage(error.message))) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return null;\n }\n\n const me = body.data?.user?.me;\n if (!isPluginEditorRole(me?.role)) return authState;\n\n const hydratedAuthState: AuthState = {\n ...authState,\n userId: typeof me._id === 'string' && me._id.trim().length > 0 ? me._id : authState.userId,\n email: typeof me.email === 'string' && me.email.trim().length > 0 ? me.email : authState.email,\n role: me.role,\n };\n\n await writeAuthState(config.authStatePath, hydratedAuthState);\n return hydratedAuthState;\n};\n\nexport const fetchPublishedSkillsGraphQl = async <TData>({\n worktree,\n config,\n query,\n variables,\n signal,\n onAuthStateChanged,\n}: {\n worktree: string;\n config: ResolvedConfig;\n query: string;\n variables: Record<string, unknown>;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n}): Promise<\n | { ok: true; data: TData; fetchedAt: string }\n | { ok: false; result: Extract<FetchResult, { ok: false }> }\n> => {\n const authState = await resolveStoredAuthState(worktree, config);\n const fetchedAt = new Date().toISOString();\n\n if (!authState) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'missing_auth',\n authMode: 'missing',\n message:\n 'No plugin session is stored. Interactive opencode_wizard_published_skills_fetch can bootstrap browser login automatically when needed. Configured backend and GraphQL URLs are shown for visibility, but no GraphQL request was made because auth is missing.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n let response: Response;\n\n try {\n response = await fetch(config.graphqlUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${authState.sessionToken}`,\n },\n body: JSON.stringify({ query, variables }),\n signal,\n });\n } catch (error) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: error instanceof Error ? error.message : 'Unknown fetch error',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (response.status === 401 || response.status === 403) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return {\n ok: false,\n result: {\n ok: false,\n status: 'missing_auth',\n authMode: 'session',\n message:\n 'Stored plugin session was rejected by the backend. Retry opencode_wizard_published_skills_fetch to bootstrap a fresh browser login automatically.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (!response.ok) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: `GraphQL request failed with HTTP ${response.status}.`,\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n let body: GraphQLResponse<TData>;\n\n try {\n body = (await response.json()) as GraphQLResponse<TData>;\n } catch (error) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: `GraphQL response was not valid JSON: ${error instanceof Error ? error.message : 'Unknown parse error'}`,\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (body.errors?.length) {\n const message = body.errors.map((error) => error.message).join('; ');\n\n if (body.errors.some((error) => isUnauthorizedGraphQlMessage(error.message))) {\n await clearAuthState(config.authStatePath);\n onAuthStateChanged?.();\n return {\n ok: false,\n result: {\n ok: false,\n status: 'missing_auth',\n authMode: 'session',\n message:\n 'Stored plugin session is no longer valid. Retry opencode_wizard_published_skills_fetch to bootstrap a fresh browser login automatically.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n return {\n ok: false,\n result: { ok: false, status: 'request_failed', authMode: 'session', message, fetchedAt, source: 'network' },\n };\n }\n\n if (!body.data) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include data.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n return { ok: true, data: body.data, fetchedAt };\n};\n\nexport const fetchPublishedSkillsCatalog = async (\n worktree: string,\n config: ResolvedConfig,\n resolution: WorkspaceResolution,\n signal: AbortSignal,\n onAuthStateChanged?: () => void,\n): Promise<FetchResult> => {\n const response = await fetchPublishedSkillsGraphQl<PublishedSkillCatalogResponse>({\n worktree,\n config,\n query: PUBLISHED_SKILLS_CATALOG_QUERY,\n variables: { input: toDeliveryInput(resolution) },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response.result;\n\n const payload = response.data.pluginPublishedSkills;\n\n if (!payload) {\n return {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include pluginPublishedSkills.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n }\n\n return {\n ok: true,\n status: 'ready',\n authMode: 'session',\n payload,\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n};\n\nexport const fetchWizardArtifactsCatalog = async (\n worktree: string,\n config: ResolvedConfig,\n resolution: WorkspaceResolution,\n artifactKind: WizardArtifactKind,\n signal: AbortSignal,\n onAuthStateChanged?: () => void,\n): Promise<WizardArtifactFetchResult> => {\n const response = await fetchPublishedSkillsGraphQl<WizardArtifactCatalogResponse>({\n worktree,\n config,\n query: WIZARD_ARTIFACTS_CATALOG_QUERY,\n variables: { input: { ...toDeliveryInput(resolution), artifactKind } },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response.result;\n\n const payload = response.data.pluginWizardArtifacts;\n if (!payload) {\n return {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include pluginWizardArtifacts.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n }\n\n return {\n ok: true,\n status: 'ready',\n authMode: 'session',\n payload,\n fetchedAt: response.fetchedAt,\n source: 'network',\n };\n};\n\nexport const maybePersistWorkspaceSlugFromCatalog = async ({\n config,\n resolution,\n fetchResult,\n}: {\n config: ResolvedConfig;\n resolution: WorkspaceResolution;\n fetchResult: FetchResult;\n}): Promise<void> => {\n if (!fetchResult.ok) return;\n\n const backendWorkspaceSlug = fetchResult.payload.workspace?.slug?.trim();\n if (!backendWorkspaceSlug) return;\n\n const normalizedWorkspaceSlug = toWorkspaceSlug(backendWorkspaceSlug);\n if (!normalizedWorkspaceSlug) return;\n\n if (resolution.workspaceSlug === normalizedWorkspaceSlug && resolution.workspaceSlugSource !== 'fallback') return;\n\n await upsertWorkspaceSlugMapping({\n configFile: config.authStatePath,\n repositoryUrl: resolution.repositoryUrl,\n repositoryRoot: resolution.repositoryRoot,\n workspaceSlug: normalizedWorkspaceSlug,\n });\n};\n\nexport const fetchPublishedSkillDetail = async ({\n worktree,\n config,\n resolution,\n skillVersionId,\n signal,\n onAuthStateChanged,\n purpose,\n}: {\n worktree: string;\n config: ResolvedConfig;\n resolution: WorkspaceResolution;\n skillVersionId: string;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n purpose: PublishedSkillArtifactDetailPurpose;\n}): Promise<\n | { ok: true; artifact: PublishedSkillArtifactDetailPayload }\n | {\n ok: false;\n result: {\n ok: false;\n status: 'not_found';\n authMode: 'session';\n message: string;\n fetchedAt: string;\n source: 'network';\n };\n }\n | { ok: false; result: Extract<FetchResult, { ok: false }> }\n> => {\n const response = await fetchPublishedSkillsGraphQl<PublishedSkillDetailResponse>({\n worktree,\n config,\n query: PUBLISHED_SKILL_DETAIL_QUERY,\n variables: {\n input: { ...toDeliveryInput(resolution), skillVersionId, purpose },\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response;\n\n const artifact = response.data.pluginPublishedSkillVersionArtifact;\n\n if (!artifact) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'not_found',\n authMode: 'session',\n message: 'Published skill detail is not effective for the current scope.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n },\n };\n }\n\n return { ok: true, artifact };\n};\n\nexport const fetchWizardArtifactDetail = async ({\n worktree,\n config,\n resolution,\n artifactKind,\n artifactVersionId,\n signal,\n onAuthStateChanged,\n purpose,\n}: {\n worktree: string;\n config: ResolvedConfig;\n resolution: WorkspaceResolution;\n artifactKind: WizardArtifactKind;\n artifactVersionId: string;\n signal: AbortSignal;\n onAuthStateChanged?: () => void;\n purpose: PublishedSkillArtifactDetailPurpose;\n}): Promise<\n | { ok: true; artifact: WizardArtifactDetailPayload }\n | {\n ok: false;\n result: {\n ok: false;\n status: 'not_found';\n authMode: 'session';\n message: string;\n fetchedAt: string;\n source: 'network';\n };\n }\n | { ok: false; result: Extract<FetchResult, { ok: false }> }\n> => {\n const response = await fetchPublishedSkillsGraphQl<WizardArtifactDetailResponse>({\n worktree,\n config,\n query: WIZARD_ARTIFACT_DETAIL_QUERY,\n variables: {\n input: { ...toDeliveryInput(resolution), artifactKind, artifactVersionId, purpose },\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) return response;\n\n const artifact = response.data.pluginWizardArtifactVersion;\n if (!artifact) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'not_found',\n authMode: 'session',\n message: 'Wizard artifact detail is not effective for the current scope.',\n fetchedAt: response.fetchedAt,\n source: 'network',\n },\n };\n }\n\n return { ok: true, artifact };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -6,7 +6,7 @@ import { resolveStoredAuthState, toAuthState, writeAuthState } from './auth-stor
6
6
  import { resolveConfig } from './config.js';
7
7
  export { resolveConfig } from './config.js';
8
8
  import { createPluginSession, openBrowser, startLoginFlow } from './auth-flow.js';
9
- import { fetchPublishedSkillDetail, fetchPublishedSkillsCatalog, fetchPublishedSkillsGraphQl, fetchWizardArtifactDetail, fetchWizardArtifactsCatalog, maybePersistWorkspaceSlugFromCatalog } from './client.js';
9
+ import { fetchPublishedSkillDetail, fetchPublishedSkillsCatalog, fetchPublishedSkillsGraphQl, fetchWizardArtifactDetail, fetchWizardArtifactsCatalog, hydrateStoredAuthStateRole, maybePersistWorkspaceSlugFromCatalog } from './client.js';
10
10
  import { normalizeAbsolutePath } from './path-utils.js';
11
11
  import { emitPluginActionEvent, emitPresenceEvent } from './presence.js';
12
12
  import { normalizeDirectoryArg, normalizeRepositoryPath, resolveWorkspace, toWorkspaceResolutionMetadata, toWorkspaceResolutionOutput } from './workspace.js';
@@ -130,7 +130,12 @@ export const OpencodeWizardSkillsPlugin = async input => {
130
130
  const wizardArtifactDetailCache = new Map();
131
131
  const detailInflight = new Map();
132
132
  const wizardArtifactDetailInflight = new Map();
133
- const initialAuthState = await resolveStoredAuthState(input.worktree, config);
133
+ const initialAuthState = await hydrateStoredAuthStateRole({
134
+ worktree: input.worktree,
135
+ config,
136
+ signal: AbortSignal.timeout(5_000),
137
+ onAuthStateChanged: clearPublishedSkillState
138
+ });
134
139
  const registeredTools = resolveAvailableTools(initialAuthState?.role ?? null);
135
140
  const loginBootstrap = {
136
141
  promise: null,
@@ -221,14 +226,14 @@ export const OpencodeWizardSkillsPlugin = async input => {
221
226
  continue;
222
227
  }
223
228
  }
224
- const clearPublishedSkillState = () => {
229
+ function clearPublishedSkillState() {
225
230
  cache.clear();
226
231
  catalogInflight.clear();
227
232
  detailCache.clear();
228
233
  wizardArtifactDetailCache.clear();
229
234
  detailInflight.clear();
230
235
  wizardArtifactDetailInflight.clear();
231
- };
236
+ }
232
237
  const persistAuthState = async session => {
233
238
  const authState = toAuthState(session);
234
239
  await writeAuthState(config.authStatePath, authState);