@aexol/opencode-wizard 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"names":["fs","http","os","path","crypto","execFile","promisify","URL","fileURLToPath","resolveBackendOriginFromValues","deleteFileIfExists","readJsonFile","writePrivateJsonFile","execFileAsync","MODULE_FILE_PATH","import","meta","url","PACKAGE_ROOT_PATH","resolve","dirname","PLUGIN_ID","CACHE_TTL_MS","ROOT_SKILL_SEED_PATH","GLOBAL_CONFIG_PATH","join","homedir","LEGACY_AUTH_STATE_PATH","OIDC_ISSUER","OIDC_CLIENT_ID","OIDC_CALLBACK_ORIGIN","OIDC_CALLBACK_PATH","OIDC_CALLBACK_URL","OIDC_SCOPES","LOGIN_TIMEOUT_MS","SYSTEM_NOTE_SKILL_NAME_LIMIT","SYSTEM_NOTE_DETAIL_LIMIT","SYSTEM_NOTE_DETAIL_CHAR_LIMIT","SYSTEM_NOTE_SKILL_DESCRIPTION_LIMIT","PRESENCE_EVENT_TIMEOUT_MS","PRESENCE_EVENT_MAX_ATTEMPTS","PRESENCE_EVENT_RETRY_DELAY_MS","PRESENCE_SHUTDOWN_SIGNALS","PRESENCE_SIGNAL_EXIT_CODES","SIGINT","SIGTERM","SIGHUP","createIdleLoginBootstrapSnapshot","status","trigger","startedAt","expiresAt","browserUrl","browserOpenError","email","message","STATUS_PATH_LOGIN_RETRY_COOLDOWN_MS","statusPathLoginBootstrap","promise","failedAt","importOpencodePluginModule","Function","AVAILABLE_PUBLISHED_SKILL_TOOLS","publishedSkillPreferenceCacheVersion","NATIVE_SKILLS_URL_COMPATIBILITY","configKey","deliveryMode","wizardPrivateDelivery","authSupport","guidance","PUBLISHED_SKILLS_CATALOG_QUERY","SET_PUBLISHED_SKILL_PREFERENCE_MUTATION","PUBLISHED_SKILL_DETAIL_QUERY","parseDotEnvValue","value","trimmedValue","trim","startsWith","endsWith","slice","parseDotEnv","raw","values","Map","line","split","trimmedLine","separatorIndex","indexOf","key","rawValue","set","findUpwardFile","startDirectory","fileName","currentDirectory","normalizeAbsolutePath","candidatePath","access","parentDirectory","readLocalEnvValues","envPath","readFile","resolveBackendOrigin","worktree","envValues","environmentBackendOrigin","process","env","OPENCODE_WIZARD_BACKEND_ORIGIN","localBackendOrigin","get","toWorkspaceSlug","normalized","toLowerCase","replace","resolveFallbackWorkspaceSlug","configuredWorkspaceSlug","OPENCODE_WIZARD_SKILLS_WORKSPACE_SLUG","basename","resolveConfig","backendOrigin","graphqlUrl","authSessionUrl","presenceUrl","actionsUrl","fallbackWorkspaceSlug","rootSkillSeedPath","authStatePath","normalizeRepositoryPath","directory","absoluteWorktree","absoluteDirectory","relativePath","relative","isAbsolute","sep","tryExecGit","args","stdout","encoding","normalizedOutput","resolveGitRoot","gitRoot","normalizeGitRemoteUrl","remoteUrl","trimmedRemoteUrl","scpLikeMatch","exec","parsedUrl","toString","resolveGitRemoteOriginUrl","repositoryRoot","resolveWorkspace","config","requestedDirectory","repositoryUrl","directoryPath","workspaceIdentity","cacheKey","JSON","stringify","toDeliveryInput","resolution","workspaceSlug","formatSkillLabel","item","artifactName","publishedArtifact","frontmatterName","length","skill","name","toFrontmatterString","isRecord","Array","isArray","isValidIsoDateString","Number","isFinite","Date","parse","isAuthState","pluginId","sessionToken","authenticatedAt","userId","readGlobalConfig","configFile","storedConfig","writeGlobalConfig","withoutLegacyPublishedSkillPreferences","publishedSkillPreferences","ignoredPublishedSkills","safeConfig","hasLegacyPublishedSkillPreferences","Object","prototype","hasOwnProperty","call","readGlobalAuthState","storedAuthState","auth","undefined","readLegacyAuthState","authStateFile","writeAuthState","authState","clearAuthState","toIgnoredSkillSlug","getPublishedSkillIgnoreScopeKey","payload","workspace","slug","toStoredUserKey","resolvePublishedSkillPreferenceCacheContext","userKey","preferenceVersion","getCatalogCacheKey","workspaceResolution","preferenceContext","toAuthState","session","jwtToken","toISOString","user","id","resolveStoredAuthState","now","legacyAuthStateFile","legacyAuthState","buildSkillMarkdown","artifactBody","markdownBody","fallbackBody","renderedContent","body","description","frontmatterDescription","summary","frontmatter","getSkillIdentifiers","candidates","seen","Set","reduce","all","candidate","has","add","push","toPublishedSkillFacetSummary","facet","label","toPublishedSkillTagSummary","tag","getPublishedSkillFacets","items","facetsBySlug","tags","sort","left","right","localeCompare","isUserPublishedSkillAssignment","assignmentSource","getPublishedSkillAssignmentLabel","toUpperCase","getPublishedSkillAssignmentCounts","counts","global","project","other","getSkillContextKind","getSkillPolicyLabel","policy","contextKind","toPublishedSkillSummary","skillSlug","skillName","artifactDescription","whenToUse","version","skillVersion","assignmentType","scopePath","includeChildren","checksum","publishedAt","fileCount","identifiers","map","installPolicy","assignmentLabel","policyLabel","toPublishedSkillDetail","skillId","skillVersionId","artifactId","markdownDocument","files","resources","filter","file","toInstallableSkillSummary","toPublishedSkillCatalog","runtimeMode","deliveryModel","availableTools","publishedSkillCount","skills","assignmentCounts","facets","filterIgnoredPublishedSkills","result","fetchResult","ok","ignoreState","scopeKey","ignoredSkillSlugs","installedGlobalSkillSlugs","installedWorkspaceSkillSlugs","ignoredSkills","userPreferences","getWorkspaceUnavailableMessage","normalizeSkillIdentifier","parseSkillIdentifiers","mergeSkillIdentifiers","parseRequestedSkillArgs","requestedSkills","normalizedSkill","selectPublishedSkills","itemsByIdentifier","identifier","selectedItems","selectedKeys","missingIdentifiers","matched","truncateText","maxLength","Math","max","trimEnd","buildSkillCatalogLine","scopeLabel","buildSkillDetailSnippetLine","detail","buildSystemNote","details","catalog","skillNames","renderedSkillNames","remainingCount","renderedCountSuffix","globalSkills","projectSkills","userSkills","detailLines","detailBlock","toWorkspaceResolutionOutput","toWorkspaceResolutionMetadata","formatStatusOutput","publishedSkillsResult","loginBootstrapSnapshot","filteredResult","base","nativeSkillsUrlCompatibility","requestedDirectoryPath","authMode","loginBootstrap","fetchedAt","source","count","toPluginAuthStateSummary","resolvePluginStatusSnapshot","signal","fetchPublishedSkillsCatalog","installableCatalog","catalogSkills","withStatusMessage","snapshot","toAiFacingPluginStatusSnapshot","_installableCatalog","safeSnapshot","startStatusPathLoginBootstrap","loginSignal","AbortSignal","timeout","loginStart","startLoginFlow","openBrowser","callbackPayload","callbackPromise","Error","state","expectedState","pluginSession","createPluginSession","code","codeVerifier","redirectUri","closeCallbackServer","catch","error","finally","resolvePluginStatusSnapshotWithAuthBootstrap","toBackendPreferenceScope","preferenceScope","setPublishedSkillPreference","installed","ignored","response","fetchPublishedSkillsGraphQl","query","variables","input","preferences","data","setPublishedSkillIgnored","normalizedSkillSlug","setPublishedSkillInstalled","toPluginStatusMetadata","pluginStatus","authStatus","authEmail","authUserId","isUnauthorizedGraphQlMessage","normalizedMessage","includes","createRandomBase64Url","bytes","randomBytes","createCodeChallenge","createHash","update","digest","getMessageFromUnknownPayload","wait","milliseconds","Promise","setTimeout","shouldRetryPresenceEvent","fetchOidcDiscoveryDocument","discoveryUrl","fetch","method","json","isCallbackPortInUseError","toCallbackServerStartError","escapeHtml","character","replacements","sendHtmlResponse","statusCode","title","escapedTitle","escapedMessage","isSuccess","pageState","cardTitle","escapedCardTitle","eyebrow","actionText","autoCloseScript","stateIcon","writeHead","end","startLocalCallbackServer","settled","resolvePayload","rejectPayload","reject","finalize","fail","reason","server","createServer","request","requestUrl","pathname","searchParams","errorDescription","close","rejectStart","once","listen","off","on","addEventListener","onAuthStateChanged","headers","authorization","errors","some","pluginPublishedSkills","fetchPublishedSkillDetail","purpose","artifact","pluginPublishedSkillVersionArtifact","toFetchFailureOutput","output","metadata","discovery","codeChallenge","authorization_endpoint","success","emitPresenceEvent","event","workspacePath","attempt","occurredAt","keepalive","emitPluginActionEvent","platform","normalizeDirectoryArg","contextDirectory","getDetailCacheKey","catalogCacheKey","getDetailInflightKey","OpencodeWizardSkillsPlugin","tool","cache","catalogInflight","detailCache","detailInflight","initialAuthState","lastAuthenticatedAuthState","didEmitStart","didScheduleStop","presenceStartPromise","presenceStopPromise","lastInteractiveDirectoryPath","resolveActionAuthState","emitActionEventForCurrentSession","schedulePresenceStart","then","schedulePresenceStop","scheduleInteractivePresenceStart","shutdownSignal","exit","clearPublishedSkillState","clear","persistAuthState","startLoginCompletion","loginPromise","loadPublishedSkillCatalog","useCache","cached","inflight","requestPromise","delete","loadPublishedSkillDetail","inflightKey","detailResult","requestedSkillVersionId","loadSystemNoteDetails","prioritizedItems","leftSummary","rightSummary","detailResults","executePublishedSkillsFetchTool","context","fetchActionDirectoryPath","emitFetchOutcome","refresh","abort","filteredPublishedSkillsResult","selection","isSingleRequest","globalAssignmentCount","projectAssignmentCount","userAssignmentCount","ignoredSkillCount","requestedSkill","availableSkills","skillDetailResults","failedSkillDetail","find","skillDetails","requestedCount","matchedCount","missingSkills","executeStatusTool","opencode_wizard_published_skills_fetch","schema","string","optional","describe","boolean","execute","opencode_wizard_status","experimental.chat.system.transform","_hookInput","loginMessage","system","systemNote"],"sources":["../src/server.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport http from 'node:http';\nimport os from 'node:os';\nimport path from 'node:path';\nimport crypto from 'node:crypto';\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { URL, fileURLToPath } from 'node:url';\nimport { resolveBackendOriginFromValues } from './config.js';\nimport { deleteFileIfExists, readJsonFile, writePrivateJsonFile } from './storage.js';\n\nconst execFileAsync = promisify(execFile);\nconst MODULE_FILE_PATH = fileURLToPath(import.meta.url);\nconst PACKAGE_ROOT_PATH = path.resolve(path.dirname(MODULE_FILE_PATH), '..');\n\nexport const PLUGIN_ID = 'opencode-wizard';\nconst CACHE_TTL_MS = 30_000;\nconst ROOT_SKILL_SEED_PATH = '.opencode/skills';\nconst GLOBAL_CONFIG_PATH = path.join(os.homedir(), '.config', 'opencode', 'opencode-wizard.json');\nconst LEGACY_AUTH_STATE_PATH = 'plugin/opencode-wizard/.generated/auth-state.json';\nconst OIDC_ISSUER = 'https://login.microsoftonline.com/86f4caf4-0d6f-4682-9a06-ea57f3e4e76c/v2.0';\nconst OIDC_CLIENT_ID = 'da963901-2375-442b-9e99-14e59f43eda2';\nconst OIDC_CALLBACK_ORIGIN = 'http://localhost:24953';\nconst OIDC_CALLBACK_PATH = '/oauth/callback';\nconst OIDC_CALLBACK_URL = `${OIDC_CALLBACK_ORIGIN}${OIDC_CALLBACK_PATH}`;\nconst OIDC_SCOPES = ['openid', 'profile', 'email'];\nconst LOGIN_TIMEOUT_MS = 5 * 60_000;\nconst SYSTEM_NOTE_SKILL_NAME_LIMIT = 10;\nconst SYSTEM_NOTE_DETAIL_LIMIT = 3;\nconst SYSTEM_NOTE_DETAIL_CHAR_LIMIT = 2_400;\nconst SYSTEM_NOTE_SKILL_DESCRIPTION_LIMIT = 140;\nconst PRESENCE_EVENT_TIMEOUT_MS = 3_000;\nconst PRESENCE_EVENT_MAX_ATTEMPTS = 2;\nconst PRESENCE_EVENT_RETRY_DELAY_MS = 250;\nconst PRESENCE_SHUTDOWN_SIGNALS = ['SIGINT', 'SIGTERM', 'SIGHUP'] as const satisfies readonly NodeJS.Signals[];\nconst PRESENCE_SIGNAL_EXIT_CODES: Record<(typeof PRESENCE_SHUTDOWN_SIGNALS)[number], number> = {\n SIGINT: 130,\n SIGTERM: 143,\n SIGHUP: 129,\n};\n\ntype ResolvedConfig = {\n backendOrigin: string;\n graphqlUrl: string;\n authSessionUrl: string;\n presenceUrl: string;\n actionsUrl: string;\n fallbackWorkspaceSlug: string;\n rootSkillSeedPath: string;\n authStatePath: string;\n};\n\ntype WorkspaceResolution = {\n requestedDirectory: string;\n repositoryRoot: string;\n repositoryUrl: string | null;\n fallbackWorkspaceSlug: string | null;\n directoryPath: string;\n cacheKey: string;\n};\n\ntype PublishedSkillCatalogResponse = {\n pluginPublishedSkills: PublishedSkillCatalogPayload;\n};\n\ntype PublishedSkillDetailResponse = {\n pluginPublishedSkillVersionArtifact: PublishedSkillArtifactDetailPayload | null;\n};\n\nexport type PublishedSkillCatalogPayload = {\n workspace: {\n id: string;\n slug: string;\n name: string;\n repositoryUrl?: string | null;\n defaultBranch?: string | null;\n status: string;\n } | null;\n directoryPath: string;\n skills: PublishedSkillCatalogItem[];\n catalogSkills: PublishedSkillInstallableCatalogItem[];\n userPreferences: PublishedSkillUserPreferences;\n};\n\ntype PublishedSkillUserPreferences = {\n scopeKey: string;\n userKey: string;\n ignoredSkills: PublishedSkillCatalogItem[];\n};\n\ntype PublishedSkillPreferenceScope = 'GLOBAL' | 'WORKSPACE';\n\ntype SetPublishedSkillPreferenceResponse = {\n setPublishedSkillPreference: PublishedSkillUserPreferences;\n};\n\nexport type PublishedSkillInstallableCatalogItem = Pick<\n PublishedSkillCatalogItem,\n 'skill' | 'skillVersion' | 'publishedArtifact'\n>;\n\nexport type PublishedSkillCatalogItem = {\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren?: boolean | null;\n skill: {\n id: string;\n slug: string;\n name: string;\n summary?: string | null;\n whenToUse?: string | null;\n status: string;\n installPolicy: PublishedSkillInstallPolicy;\n tags: PublishedSkillTag[];\n };\n skillVersion: {\n id: string;\n version: string;\n title?: string | null;\n summary?: string | null;\n status: string;\n };\n publishedArtifact: {\n id: string;\n frontmatterName: string;\n frontmatterDescription: string;\n checksum: string;\n publishedAt: string;\n fileCount: number;\n };\n};\n\ntype PublishedSkillArtifactFilePayload = {\n id: string;\n relativePath: string;\n contentType: string;\n content: string;\n checksum: string;\n size: number;\n sortOrder: number;\n};\n\ntype PublishedSkillFacet = {\n id: string;\n slug: string;\n label: string;\n description?: string | null;\n};\n\ntype PublishedSkillTag = {\n id: string;\n slug: string;\n label: string;\n description?: string | null;\n facet?: PublishedSkillFacet | null;\n};\n\ntype PublishedSkillFacetSummary = {\n slug: string;\n label: string;\n description: string | null;\n};\n\ntype PublishedSkillTagSummary = {\n slug: string;\n label: string;\n description: string | null;\n facet: PublishedSkillFacetSummary | null;\n};\n\ntype PublishedSkillInstallPolicy = 'GLOBAL_CONTEXT' | 'PROJECT_INSTALLABLE';\n\nexport type PublishedSkillDetailItem = PublishedSkillCatalogItem & {\n publishedArtifact: PublishedSkillCatalogItem['publishedArtifact'] & {\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFilePayload[];\n };\n};\n\ntype PublishedSkillArtifactDetailPayload = PublishedSkillCatalogItem['publishedArtifact'] & {\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFilePayload[];\n};\n\ntype PublishedSkillArtifactDetailPurpose = 'TOOL_FETCH' | 'SYSTEM_CONTEXT';\n\ntype GraphQLErrorItem = {\n message: string;\n};\n\ntype GraphQLResponse<TData> = {\n data?: TData;\n errors?: GraphQLErrorItem[];\n};\n\ntype AuthState = {\n pluginId: string;\n sessionToken: string;\n expiresAt: string;\n authenticatedAt: string;\n userId: string;\n email: string;\n};\n\ntype PresenceEventType = 'START' | 'STOP';\n\ntype PluginActionEventType = PresenceEventType | 'FETCH_SUCCESS' | 'FETCH_FAILED' | 'LOGIN_SUCCESS' | 'LOGIN_FAILED';\n\ntype LoginBootstrapTrigger = 'fetch' | 'status';\n\ntype LoginBootstrapSnapshot = {\n status: 'idle' | 'starting' | 'pending' | 'authenticated' | 'failed';\n trigger: LoginBootstrapTrigger | null;\n startedAt: string | null;\n expiresAt: string | null;\n browserUrl: string | null;\n browserOpenError: string | null;\n email: string | null;\n message: string | null;\n};\n\ntype StatusPathLoginBootstrap = {\n promise: Promise<AuthState> | null;\n status: 'idle' | 'pending' | 'authenticated' | 'failed';\n message: string | null;\n failedAt: number | null;\n};\n\nconst createIdleLoginBootstrapSnapshot = (): LoginBootstrapSnapshot => ({\n status: 'idle',\n trigger: null,\n startedAt: null,\n expiresAt: null,\n browserUrl: null,\n browserOpenError: null,\n email: null,\n message: null,\n});\n\nconst STATUS_PATH_LOGIN_RETRY_COOLDOWN_MS = 60_000;\n\nconst statusPathLoginBootstrap: StatusPathLoginBootstrap = {\n promise: null,\n status: 'idle',\n message: null,\n failedAt: null,\n};\n\ntype FetchResult =\n | {\n ok: true;\n status: 'ready';\n authMode: 'session';\n payload: PublishedSkillCatalogPayload;\n fetchedAt: string;\n source: 'network' | 'cache';\n }\n | {\n ok: false;\n status: 'missing_auth' | 'request_failed';\n authMode: 'missing' | 'session';\n message: string;\n fetchedAt: string;\n source: 'network' | 'cache';\n };\n\ntype CacheEntry = {\n result: FetchResult;\n expiresAt: number;\n};\n\ntype DetailCacheEntry = {\n artifact: PublishedSkillArtifactDetailPayload;\n expiresAt: number;\n};\n\ntype PublishedSkillSummary = {\n skillSlug: string;\n skillName: string;\n artifactName: string;\n artifactDescription: string;\n whenToUse: string | null;\n version: string;\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren: boolean | null;\n checksum: string;\n publishedAt: string;\n fileCount: number;\n identifiers: string[];\n tags: PublishedSkillTagSummary[];\n contextKind: 'global' | 'project' | 'installable';\n installPolicy: PublishedSkillInstallPolicy;\n assignmentLabel: string;\n policyLabel: string;\n};\n\ntype PublishedSkillDetail = PublishedSkillSummary & {\n skillId: string;\n skillVersionId: string;\n artifactId: string;\n markdownDocument: string;\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFilePayload[];\n resources: PublishedSkillArtifactFilePayload[];\n};\n\ntype PublishedSkillFetchArgs = {\n skill?: string;\n skills?: string;\n directory?: string;\n refresh?: boolean;\n};\n\ntype PluginStatusArgs = {\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\ntype 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\ntype ToolFactory = (<TArgs extends object>(definition: ToolDefinition<TArgs>) => unknown) & {\n schema: ToolSchema;\n};\n\ntype OpencodePluginModule = {\n tool: ToolFactory;\n};\n\ntype OpencodePluginServerInput = {\n worktree: string;\n directory: string;\n};\n\ntype OpencodePluginSystemTransformOutput = {\n system: string[];\n};\n\ntype OpencodePluginServer = (input: OpencodePluginServerInput) => Promise<{\n tool: Record<string, unknown>;\n 'experimental.chat.system.transform': (\n hookInput: unknown,\n output: OpencodePluginSystemTransformOutput,\n ) => Promise<void>;\n}>;\n\nconst importOpencodePluginModule = new Function('specifier', 'return import(specifier)') as (\n specifier: string,\n) => Promise<OpencodePluginModule>;\n\ntype PublishedSkillsSuccessState = {\n pluginId: string;\n runtimeMode: 'tool_fetch_only';\n deliveryModel: 'backend_published_installed_effective_skills';\n workspace: PublishedSkillCatalogPayload['workspace'];\n directoryPath: string;\n rootSkillSeedPath: string;\n availableTools: string[];\n publishedSkillCount: number;\n assignmentCounts: {\n global: number;\n project: number;\n user: number;\n other: number;\n };\n facets: PublishedSkillFacetSummary[];\n skills: PublishedSkillSummary[];\n};\n\nexport const AVAILABLE_PUBLISHED_SKILL_TOOLS = ['opencode_wizard_published_skills_fetch', 'opencode_wizard_status'];\nlet publishedSkillPreferenceCacheVersion = 0;\n\nexport type NativeSkillsUrlCompatibility = {\n configKey: 'skills.urls';\n deliveryMode: 'public_static_registry';\n wizardPrivateDelivery: 'authenticated_scoped_fetch_tool';\n authSupport: 'none';\n guidance: string;\n};\n\nexport const NATIVE_SKILLS_URL_COMPATIBILITY: NativeSkillsUrlCompatibility = {\n configKey: 'skills.urls',\n deliveryMode: 'public_static_registry',\n wizardPrivateDelivery: 'authenticated_scoped_fetch_tool',\n authSupport: 'none',\n guidance:\n 'OpenCode skills.urls is for public/static registries and complements opencode-wizard; private workspace-scoped skills stay available through the authenticated fetch tool only.',\n};\n\ntype PublishedSkillsResult = {\n directoryPath: string;\n workspaceResolution: WorkspaceResolution;\n fetchResult: FetchResult;\n};\n\ntype PublishedSkillsIgnoreState = {\n scopeKey: string;\n userKey: string;\n ignoredSkillSlugs: string[];\n installedGlobalSkillSlugs: string[];\n installedWorkspaceSkillSlugs: string[];\n};\n\ntype PublishedSkillPreferenceCacheContext = {\n userKey: string;\n preferenceVersion: number;\n};\n\ntype FilteredPublishedSkillsResult = PublishedSkillsResult & {\n ignoreState: PublishedSkillsIgnoreState;\n ignoredSkills: PublishedSkillSummary[];\n};\n\ntype PublishedSkillDetailResult =\n | {\n ok: true;\n detail: PublishedSkillDetail;\n }\n | {\n ok: false;\n status: 'not_found' | 'missing_auth' | 'request_failed';\n output: string;\n metadata: Record<string, string>;\n };\n\nexport type PluginAuthStateSummary = {\n status: 'missing' | 'authenticated';\n email: string | null;\n userId: string | null;\n authenticatedAt: string | null;\n expiresAt: string | null;\n};\n\nexport type PluginStatusSnapshot = {\n pluginId: string;\n runtimeMode: 'tool_fetch_only';\n nativeSkillsUrlCompatibility: NativeSkillsUrlCompatibility;\n backendOrigin: string;\n graphqlUrl: string;\n fallbackWorkspaceSlug: string;\n workspaceResolution: ReturnType<typeof toWorkspaceResolutionOutput>;\n rootSkillSeedPath: string;\n authStatePath: string;\n authState: PluginAuthStateSummary;\n status: FetchResult['status'];\n authMode: FetchResult['authMode'];\n fetchedAt: string;\n source: FetchResult['source'];\n availableTools: typeof AVAILABLE_PUBLISHED_SKILL_TOOLS;\n message: string | null;\n catalog: PublishedSkillsSuccessState | null;\n installableCatalog: {\n count: number;\n skills: PublishedSkillSummary[];\n } | null;\n ignoredPublishedSkills: {\n scopeKey: string;\n userKey: string;\n count: number;\n skills: PublishedSkillSummary[];\n };\n};\n\ntype AiFacingIgnoredPublishedSkillsSummary = {\n scopeKey: string;\n count: number;\n};\n\ntype AiFacingPluginStatusSnapshot = Omit<PluginStatusSnapshot, 'ignoredPublishedSkills' | 'installableCatalog'> & {\n ignoredPublishedSkills: AiFacingIgnoredPublishedSkillsSummary;\n};\n\ntype OidcDiscoveryDocument = {\n authorization_endpoint: string;\n};\n\ntype PluginSessionResponse = {\n success: true;\n session: {\n jwtToken: string;\n expiresAt: string;\n user: {\n id: string;\n email: string;\n };\n };\n};\n\ntype OidcCallbackPayload =\n | {\n status: 'success';\n code: string;\n state: string;\n }\n | {\n status: 'error';\n message: string;\n };\n\ntype OidcLoginStart = {\n browserUrl: string;\n expiresAt: string;\n codeVerifier: string;\n expectedState: string;\n callbackPromise: Promise<OidcCallbackPayload>;\n closeCallbackServer: () => Promise<void>;\n};\n\nconst 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 assignmentSource\n assignmentType\n scopePath\n includeChildren\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 catalogSkills {\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 userPreferences {\n scopeKey\n userKey\n ignoredSkills {\n assignmentSource\n assignmentType\n scopePath\n includeChildren\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 }\n }\n }\n`;\n\nconst SET_PUBLISHED_SKILL_PREFERENCE_MUTATION = `\n mutation SetPublishedSkillPreference($input: SetPublishedSkillPreferenceInput!) {\n setPublishedSkillPreference(input: $input) {\n scopeKey\n userKey\n ignoredSkills {\n assignmentSource\n assignmentType\n scopePath\n includeChildren\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 }\n }\n`;\n\nconst 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 parseDotEnvValue = (value: string): string => {\n const trimmedValue = value.trim();\n\n if (\n (trimmedValue.startsWith('\"') && trimmedValue.endsWith('\"')) ||\n (trimmedValue.startsWith(\"'\") && trimmedValue.endsWith(\"'\"))\n ) {\n return trimmedValue.slice(1, -1);\n }\n\n return trimmedValue;\n};\n\nconst parseDotEnv = (raw: string): Map<string, string> => {\n const values = new Map<string, string>();\n\n for (const line of raw.split(/\\r?\\n/u)) {\n const trimmedLine = line.trim();\n if (!trimmedLine || trimmedLine.startsWith('#')) continue;\n\n const separatorIndex = trimmedLine.indexOf('=');\n if (separatorIndex <= 0) continue;\n\n const key = trimmedLine.slice(0, separatorIndex).trim();\n if (!key) continue;\n\n const rawValue = trimmedLine.slice(separatorIndex + 1);\n values.set(key, parseDotEnvValue(rawValue));\n }\n\n return values;\n};\n\nconst findUpwardFile = async (startDirectory: string, fileName: string): Promise<string | null> => {\n let currentDirectory = normalizeAbsolutePath(startDirectory);\n\n while (true) {\n const candidatePath = path.join(currentDirectory, fileName);\n\n try {\n await fs.access(candidatePath);\n return candidatePath;\n } catch {\n const parentDirectory = path.dirname(currentDirectory);\n if (parentDirectory === currentDirectory) return null;\n currentDirectory = parentDirectory;\n }\n }\n};\n\nconst readLocalEnvValues = async (startDirectory: string): Promise<Map<string, string>> => {\n const envPath = await findUpwardFile(startDirectory, '.env');\n if (!envPath) return new Map<string, string>();\n\n try {\n const raw = await fs.readFile(envPath, 'utf8');\n return parseDotEnv(raw);\n } catch {\n return new Map<string, string>();\n }\n};\n\nconst resolveBackendOrigin = async (worktree: string): Promise<string> => {\n const envValues = await readLocalEnvValues(worktree);\n\n return resolveBackendOriginFromValues({\n environmentBackendOrigin: process.env.OPENCODE_WIZARD_BACKEND_ORIGIN,\n localBackendOrigin: envValues.get('OPENCODE_WIZARD_BACKEND_ORIGIN'),\n });\n};\n\nconst toWorkspaceSlug = (value: string): string => {\n const normalized = value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]+/gu, '-')\n .replace(/^-+|-+$/gu, '');\n\n if (normalized) return normalized;\n return 'workspace';\n};\n\nconst resolveFallbackWorkspaceSlug = (worktree: string): string => {\n const configuredWorkspaceSlug = process.env.OPENCODE_WIZARD_SKILLS_WORKSPACE_SLUG?.trim();\n if (configuredWorkspaceSlug) return toWorkspaceSlug(configuredWorkspaceSlug);\n return toWorkspaceSlug(path.basename(path.resolve(worktree)));\n};\n\nexport const resolveConfig = async (worktree: string): Promise<ResolvedConfig> => {\n const backendOrigin = await resolveBackendOrigin(worktree);\n\n return {\n backendOrigin,\n graphqlUrl: `${backendOrigin}/graphql`,\n authSessionUrl: `${backendOrigin}/api/opencode-plugin/oauth/session`,\n presenceUrl: `${backendOrigin}/api/opencode-plugin/presence`,\n actionsUrl: `${backendOrigin}/api/opencode-plugin/actions`,\n fallbackWorkspaceSlug: resolveFallbackWorkspaceSlug(worktree),\n rootSkillSeedPath: ROOT_SKILL_SEED_PATH,\n authStatePath: GLOBAL_CONFIG_PATH,\n };\n};\n\nconst normalizeAbsolutePath = (value: string): string => path.resolve(value);\n\nconst normalizeRepositoryPath = (worktree: string, directory: string): string => {\n const absoluteWorktree = normalizeAbsolutePath(worktree);\n const absoluteDirectory = normalizeAbsolutePath(directory);\n const relativePath = path.relative(absoluteWorktree, absoluteDirectory);\n\n if (!relativePath || relativePath === '') return '.';\n if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) return '.';\n\n return relativePath.split(path.sep).join('/');\n};\n\nconst tryExecGit = async (args: string[]): Promise<string | null> => {\n try {\n const { stdout } = await execFileAsync('git', args, {\n encoding: 'utf8',\n });\n const normalizedOutput = stdout.trim();\n if (normalizedOutput) return normalizedOutput;\n return null;\n } catch {\n return null;\n }\n};\n\nconst resolveGitRoot = async (directory: string): Promise<string | null> => {\n const gitRoot = await tryExecGit(['-C', directory, 'rev-parse', '--show-toplevel']);\n if (!gitRoot) return null;\n return normalizeAbsolutePath(gitRoot);\n};\n\nconst normalizeGitRemoteUrl = (remoteUrl: string | null): string | null => {\n if (!remoteUrl) return null;\n\n const trimmedRemoteUrl = remoteUrl.trim();\n if (!trimmedRemoteUrl) return null;\n\n const scpLikeMatch = /^git@([^:]+):(.+)$/u.exec(trimmedRemoteUrl);\n if (scpLikeMatch) {\n return `ssh://git@${scpLikeMatch[1]}/${scpLikeMatch[2].replace(/^\\/+/, '')}`;\n }\n\n try {\n const parsedUrl = new URL(trimmedRemoteUrl);\n return parsedUrl.toString().replace(/\\/+$/u, '');\n } catch {\n return null;\n }\n};\n\nconst resolveGitRemoteOriginUrl = async (repositoryRoot: string): Promise<string | null> => {\n const remoteUrl = await tryExecGit(['-C', repositoryRoot, 'remote', 'get-url', 'origin']);\n return normalizeGitRemoteUrl(remoteUrl);\n};\n\nconst resolveWorkspace = async ({\n config,\n directory,\n}: {\n config: ResolvedConfig;\n directory: string;\n}): Promise<WorkspaceResolution> => {\n const requestedDirectory = normalizeAbsolutePath(directory);\n const gitRoot = await resolveGitRoot(requestedDirectory);\n const repositoryRoot = gitRoot ?? requestedDirectory;\n const repositoryUrl = gitRoot ? await resolveGitRemoteOriginUrl(gitRoot) : null;\n const fallbackWorkspaceSlug = config.fallbackWorkspaceSlug;\n const directoryPath = normalizeRepositoryPath(repositoryRoot, requestedDirectory);\n const workspaceIdentity = `workspaceSlug:${fallbackWorkspaceSlug}`;\n\n return {\n requestedDirectory,\n repositoryRoot,\n repositoryUrl,\n fallbackWorkspaceSlug,\n directoryPath,\n cacheKey: JSON.stringify([workspaceIdentity, directoryPath]),\n };\n};\n\nconst toDeliveryInput = (resolution: WorkspaceResolution): Record<string, string> => {\n if (resolution.fallbackWorkspaceSlug) {\n return {\n workspaceSlug: resolution.fallbackWorkspaceSlug,\n directoryPath: resolution.directoryPath,\n };\n }\n\n if (resolution.repositoryUrl) {\n return {\n repositoryUrl: resolution.repositoryUrl,\n directoryPath: resolution.directoryPath,\n };\n }\n\n return {\n workspaceSlug: 'workspace',\n directoryPath: resolution.directoryPath,\n };\n};\n\nconst formatSkillLabel = (item: PublishedSkillCatalogItem): string => {\n const artifactName = item.publishedArtifact.frontmatterName.trim();\n if (artifactName.length > 0) return artifactName;\n return item.skill.name;\n};\n\nconst toFrontmatterString = (value: string): string => JSON.stringify(value);\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n};\n\nconst isValidIsoDateString = (value: unknown): value is string => {\n return typeof value === 'string' && Number.isFinite(Date.parse(value));\n};\n\nconst isAuthState = (value: unknown): value is AuthState => {\n if (!isRecord(value)) return false;\n\n return (\n value.pluginId === PLUGIN_ID &&\n typeof value.sessionToken === 'string' &&\n isValidIsoDateString(value.expiresAt) &&\n isValidIsoDateString(value.authenticatedAt) &&\n typeof value.userId === 'string' &&\n typeof value.email === 'string'\n );\n};\n\nconst readGlobalConfig = async (configFile: string): Promise<Record<string, unknown>> => {\n const storedConfig = await readJsonFile(configFile);\n if (isRecord(storedConfig)) return storedConfig;\n return {};\n};\n\nconst writeGlobalConfig = async (configFile: string, config: Record<string, unknown>) => {\n await writePrivateJsonFile(configFile, config);\n};\n\nconst withoutLegacyPublishedSkillPreferences = (config: Record<string, unknown>): Record<string, unknown> => {\n const { publishedSkillPreferences, ignoredPublishedSkills, ...safeConfig } = config;\n void publishedSkillPreferences;\n void ignoredPublishedSkills;\n return safeConfig;\n};\n\nconst hasLegacyPublishedSkillPreferences = (config: Record<string, unknown>): boolean => {\n return (\n Object.prototype.hasOwnProperty.call(config, 'publishedSkillPreferences') ||\n Object.prototype.hasOwnProperty.call(config, 'ignoredPublishedSkills')\n );\n};\n\nconst readGlobalAuthState = async (configFile: string): Promise<AuthState | null> => {\n const storedConfig = await readGlobalConfig(configFile);\n const storedAuthState = storedConfig.auth;\n if (storedAuthState === undefined || storedAuthState === null) return null;\n if (isAuthState(storedAuthState)) {\n if (hasLegacyPublishedSkillPreferences(storedConfig)) {\n await writeGlobalConfig(configFile, withoutLegacyPublishedSkillPreferences(storedConfig));\n }\n return storedAuthState;\n }\n\n await writeGlobalConfig(configFile, {\n ...withoutLegacyPublishedSkillPreferences(storedConfig),\n auth: null,\n });\n return null;\n};\n\nconst readLegacyAuthState = async (authStateFile: string): Promise<AuthState | null> => {\n const storedAuthState = await readJsonFile(authStateFile);\n if (storedAuthState === null) return null;\n if (isAuthState(storedAuthState)) return storedAuthState;\n\n await deleteFileIfExists(authStateFile);\n return null;\n};\n\nconst writeAuthState = async (configFile: string, authState: AuthState) => {\n const storedConfig = await readGlobalConfig(configFile);\n await writeGlobalConfig(configFile, {\n ...withoutLegacyPublishedSkillPreferences(storedConfig),\n auth: authState,\n });\n};\n\nconst clearAuthState = async (configFile: string) => {\n const storedConfig = await readGlobalConfig(configFile);\n await writeGlobalConfig(configFile, {\n ...withoutLegacyPublishedSkillPreferences(storedConfig),\n auth: null,\n });\n};\n\nconst toIgnoredSkillSlug = (value: string): string | null => {\n const normalized = value.trim().toLowerCase();\n if (!normalized) return null;\n return normalized;\n};\n\nconst getPublishedSkillIgnoreScopeKey = (\n resolution: WorkspaceResolution,\n payload?: PublishedSkillCatalogPayload,\n): string => {\n const workspaceSlug = payload?.workspace?.slug ?? resolution.fallbackWorkspaceSlug;\n if (workspaceSlug) return `workspace:${toWorkspaceSlug(workspaceSlug)}`;\n if (resolution.repositoryUrl) return `repository:${resolution.repositoryUrl}`;\n return `path:${toWorkspaceSlug(path.basename(resolution.repositoryRoot))}`;\n};\n\nconst toStoredUserKey = (authState: AuthState | null): string => {\n if (authState?.userId) return authState.userId;\n if (authState?.email) return authState.email.toLowerCase();\n return 'anonymous';\n};\n\nconst resolvePublishedSkillPreferenceCacheContext = async (\n config: ResolvedConfig,\n): Promise<PublishedSkillPreferenceCacheContext> => {\n const authState = await readGlobalAuthState(config.authStatePath);\n\n return {\n userKey: toStoredUserKey(authState),\n preferenceVersion: publishedSkillPreferenceCacheVersion,\n };\n};\n\nconst getCatalogCacheKey = (\n workspaceResolution: WorkspaceResolution,\n preferenceContext: PublishedSkillPreferenceCacheContext,\n): string => {\n return JSON.stringify([\n workspaceResolution.cacheKey,\n preferenceContext.userKey,\n preferenceContext.preferenceVersion,\n ]);\n};\n\nconst toAuthState = (session: PluginSessionResponse['session']): AuthState => ({\n pluginId: PLUGIN_ID,\n sessionToken: session.jwtToken,\n expiresAt: session.expiresAt,\n authenticatedAt: new Date().toISOString(),\n userId: session.user.id,\n email: session.user.email,\n});\n\nconst resolveStoredAuthState = async (worktree: string, config: ResolvedConfig): Promise<AuthState | null> => {\n const authState = await readGlobalAuthState(config.authStatePath);\n\n if (authState && Date.parse(authState.expiresAt) > Date.now()) {\n return authState;\n }\n\n if (authState) {\n await clearAuthState(config.authStatePath);\n return null;\n }\n\n const legacyAuthStateFile = path.resolve(worktree, LEGACY_AUTH_STATE_PATH);\n const legacyAuthState = await readLegacyAuthState(legacyAuthStateFile);\n\n if (!legacyAuthState) return null;\n\n if (Date.parse(legacyAuthState.expiresAt) <= Date.now()) {\n await deleteFileIfExists(legacyAuthStateFile);\n return null;\n }\n\n await writeAuthState(config.authStatePath, legacyAuthState);\n await deleteFileIfExists(legacyAuthStateFile);\n return legacyAuthState;\n};\n\nexport const buildSkillMarkdown = (item: PublishedSkillDetailItem): string => {\n const artifactBody = item.publishedArtifact.markdownBody.trim();\n const fallbackBody = item.publishedArtifact.renderedContent.trim();\n const body = artifactBody || fallbackBody;\n\n if (body.startsWith('---')) {\n return body.endsWith('\\n') ? body : `${body}\\n`;\n }\n\n const name = formatSkillLabel(item);\n const description = item.publishedArtifact.frontmatterDescription.trim() || item.skill.summary?.trim() || '';\n const frontmatter = [\n '---',\n `name: ${toFrontmatterString(name)}`,\n `description: ${toFrontmatterString(description)}`,\n '---',\n ].join('\\n');\n\n if (!body) {\n return `${frontmatter}\\n`;\n }\n\n return `${frontmatter}\\n\\n${body.endsWith('\\n') ? body : `${body}\\n`}`;\n};\n\nconst getSkillIdentifiers = (item: PublishedSkillCatalogItem): string[] => {\n const candidates = [item.skill.slug, item.publishedArtifact.frontmatterName, item.skill.name];\n const seen = new Set<string>();\n\n return candidates.reduce<string[]>((all, candidate) => {\n const normalized = candidate.trim();\n if (!normalized) return all;\n\n const cacheKey = normalized.toLowerCase();\n if (seen.has(cacheKey)) return all;\n\n seen.add(cacheKey);\n all.push(normalized);\n return all;\n }, []);\n};\n\nconst toPublishedSkillFacetSummary = (facet: PublishedSkillFacet): PublishedSkillFacetSummary => ({\n slug: facet.slug,\n label: facet.label,\n description: facet.description ?? null,\n});\n\nconst toPublishedSkillTagSummary = (tag: PublishedSkillTag): PublishedSkillTagSummary => ({\n slug: tag.slug,\n label: tag.label,\n description: tag.description ?? null,\n facet: tag.facet ? toPublishedSkillFacetSummary(tag.facet) : null,\n});\n\nconst getPublishedSkillFacets = (items: PublishedSkillCatalogItem[]): PublishedSkillFacetSummary[] => {\n const facetsBySlug = new Map<string, PublishedSkillFacetSummary>();\n\n for (const item of items) {\n for (const tag of item.skill.tags) {\n if (!tag.facet) continue;\n if (facetsBySlug.has(tag.facet.slug)) continue;\n facetsBySlug.set(tag.facet.slug, toPublishedSkillFacetSummary(tag.facet));\n }\n }\n\n return [...facetsBySlug.values()].sort((left, right) => left.slug.localeCompare(right.slug));\n};\n\nconst isUserPublishedSkillAssignment = (assignmentSource: string): boolean =>\n assignmentSource === 'USER' || assignmentSource === 'USER_GLOBAL' || assignmentSource === 'USER_WORKSPACE';\n\nconst getPublishedSkillAssignmentLabel = (assignmentSource: string): string => {\n if (assignmentSource === 'GLOBAL') return 'GLOBAL SCOPE assignment';\n if (assignmentSource === 'WORKSPACE') return 'PROJECT SCOPE assignment';\n if (assignmentSource === 'USER_GLOBAL') return 'USER SCOPE preference (global target)';\n if (assignmentSource === 'USER_WORKSPACE') return 'USER SCOPE preference (project target)';\n if (assignmentSource === 'USER') return 'USER SCOPE assignment';\n\n return `${assignmentSource.toUpperCase().replace(/_/gu, ' ')} assignment`;\n};\n\nconst getPublishedSkillAssignmentCounts = (\n items: PublishedSkillCatalogItem[],\n): PublishedSkillsSuccessState['assignmentCounts'] =>\n items.reduce<PublishedSkillsSuccessState['assignmentCounts']>(\n (counts, item) => {\n if (isUserPublishedSkillAssignment(item.assignmentSource)) {\n return {\n ...counts,\n user: counts.user + 1,\n };\n }\n\n if (item.assignmentSource === 'GLOBAL') {\n return {\n ...counts,\n global: counts.global + 1,\n };\n }\n\n if (item.assignmentSource === 'WORKSPACE') {\n return {\n ...counts,\n project: counts.project + 1,\n };\n }\n\n return {\n ...counts,\n other: counts.other + 1,\n };\n },\n {\n global: 0,\n project: 0,\n user: 0,\n other: 0,\n },\n );\n\nconst getSkillContextKind = (item: PublishedSkillCatalogItem): PublishedSkillSummary['contextKind'] => {\n if (item.assignmentSource === 'GLOBAL' || item.assignmentSource === 'USER_GLOBAL') return 'global';\n return 'project';\n};\n\nconst getSkillPolicyLabel = (\n policy: PublishedSkillInstallPolicy,\n contextKind: PublishedSkillSummary['contextKind'],\n assignmentSource: string,\n): string => {\n if (isUserPublishedSkillAssignment(assignmentSource) && policy === 'GLOBAL_CONTEXT') {\n return 'GLOBAL_CONTEXT · active USER SCOPE context';\n }\n\n if (isUserPublishedSkillAssignment(assignmentSource)) return 'PROJECT_INSTALLABLE · active USER SCOPE preference';\n if (policy === 'GLOBAL_CONTEXT') return 'GLOBAL_CONTEXT · active context only, not project-installable';\n if (contextKind === 'installable') return 'PROJECT_INSTALLABLE · available to install';\n if (contextKind === 'global') return 'PROJECT_INSTALLABLE · active GLOBAL SCOPE assignment';\n return 'PROJECT_INSTALLABLE · active PROJECT SCOPE assignment';\n};\n\nconst toPublishedSkillSummary = (item: PublishedSkillCatalogItem): PublishedSkillSummary => {\n const contextKind = getSkillContextKind(item);\n\n return {\n skillSlug: item.skill.slug,\n skillName: item.skill.name,\n artifactName: item.publishedArtifact.frontmatterName,\n artifactDescription: item.publishedArtifact.frontmatterDescription,\n whenToUse: item.skill.whenToUse ?? null,\n version: item.skillVersion.version,\n assignmentSource: item.assignmentSource,\n assignmentType: item.assignmentType,\n scopePath: item.scopePath,\n includeChildren: item.includeChildren ?? null,\n checksum: item.publishedArtifact.checksum,\n publishedAt: item.publishedArtifact.publishedAt,\n fileCount: item.publishedArtifact.fileCount,\n identifiers: getSkillIdentifiers(item),\n tags: item.skill.tags.map(toPublishedSkillTagSummary),\n contextKind,\n installPolicy: item.skill.installPolicy,\n assignmentLabel: getPublishedSkillAssignmentLabel(item.assignmentSource),\n policyLabel: getSkillPolicyLabel(item.skill.installPolicy, contextKind, item.assignmentSource),\n };\n};\n\nexport const toPublishedSkillDetail = (item: PublishedSkillDetailItem): PublishedSkillDetail => ({\n ...toPublishedSkillSummary(item),\n skillId: item.skill.id,\n skillVersionId: item.skillVersion.id,\n artifactId: item.publishedArtifact.id,\n markdownDocument: buildSkillMarkdown(item),\n markdownBody: item.publishedArtifact.markdownBody,\n renderedContent: item.publishedArtifact.renderedContent,\n files: item.publishedArtifact.files,\n resources: item.publishedArtifact.files.filter((file) => file.relativePath !== 'SKILL.md'),\n});\n\nconst toInstallableSkillSummary = (item: PublishedSkillInstallableCatalogItem): PublishedSkillSummary => ({\n skillSlug: item.skill.slug,\n skillName: item.skill.name,\n artifactName: item.publishedArtifact.frontmatterName,\n artifactDescription: item.publishedArtifact.frontmatterDescription,\n whenToUse: item.skill.whenToUse ?? null,\n version: item.skillVersion.version,\n assignmentSource: 'CATALOG',\n assignmentType: 'PATH',\n scopePath: '',\n includeChildren: true,\n checksum: item.publishedArtifact.checksum,\n publishedAt: item.publishedArtifact.publishedAt,\n fileCount: item.publishedArtifact.fileCount,\n identifiers: getSkillIdentifiers({\n ...item,\n assignmentSource: 'CATALOG',\n assignmentType: 'PATH',\n scopePath: '',\n includeChildren: true,\n }),\n tags: item.skill.tags.map(toPublishedSkillTagSummary),\n contextKind: 'installable',\n installPolicy: item.skill.installPolicy,\n assignmentLabel: 'catalog skill',\n policyLabel: getSkillPolicyLabel(item.skill.installPolicy, 'installable', 'CATALOG'),\n});\n\nexport const toPublishedSkillCatalog = (payload: PublishedSkillCatalogPayload): PublishedSkillsSuccessState => ({\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n deliveryModel: 'backend_published_installed_effective_skills',\n workspace: payload.workspace,\n directoryPath: payload.directoryPath,\n rootSkillSeedPath: ROOT_SKILL_SEED_PATH,\n availableTools: AVAILABLE_PUBLISHED_SKILL_TOOLS,\n publishedSkillCount: payload.skills.length,\n assignmentCounts: getPublishedSkillAssignmentCounts(payload.skills),\n facets: getPublishedSkillFacets(payload.skills),\n skills: payload.skills.map(toPublishedSkillSummary),\n});\n\nconst filterIgnoredPublishedSkills = async (\n config: ResolvedConfig,\n result: PublishedSkillsResult,\n): Promise<FilteredPublishedSkillsResult> => {\n const authState = await readGlobalAuthState(config.authStatePath);\n const userKey = toStoredUserKey(authState);\n\n if (!result.fetchResult.ok) {\n return {\n ...result,\n ignoreState: {\n scopeKey: getPublishedSkillIgnoreScopeKey(result.workspaceResolution),\n userKey,\n ignoredSkillSlugs: [],\n installedGlobalSkillSlugs: [],\n installedWorkspaceSkillSlugs: [],\n },\n ignoredSkills: [],\n };\n }\n\n const ignoredSkills = result.fetchResult.payload.userPreferences.ignoredSkills.map(toPublishedSkillSummary);\n const ignoredSkillSlugs = ignoredSkills.map((skill) => skill.skillSlug);\n\n return {\n ...result,\n ignoreState: {\n scopeKey: result.fetchResult.payload.userPreferences.scopeKey,\n userKey: result.fetchResult.payload.userPreferences.userKey || userKey,\n ignoredSkillSlugs,\n installedGlobalSkillSlugs: [],\n installedWorkspaceSkillSlugs: [],\n },\n ignoredSkills,\n };\n};\n\nconst getWorkspaceUnavailableMessage = (payload: PublishedSkillCatalogPayload): string | null => {\n if (payload.workspace) return null;\n return 'Workspace-specific skills are unavailable because the workspace was not found; global skills are still loaded.';\n};\n\nconst normalizeSkillIdentifier = (value: string): string => value.trim().toLowerCase();\n\nconst parseSkillIdentifiers = (value: string): string[] => {\n const seen = new Set<string>();\n\n return value\n .split(/[\\n,]/)\n .map((item) => item.trim())\n .filter((item) => item.length > 0)\n .filter((item) => {\n const normalized = normalizeSkillIdentifier(item);\n if (seen.has(normalized)) return false;\n seen.add(normalized);\n return true;\n });\n};\n\nconst mergeSkillIdentifiers = (values: string[]): string[] => {\n const seen = new Set<string>();\n\n return values.filter((value) => {\n const normalized = normalizeSkillIdentifier(value);\n if (!normalized || seen.has(normalized)) return false;\n seen.add(normalized);\n return true;\n });\n};\n\nconst parseRequestedSkillArgs = (args: PublishedSkillFetchArgs): string[] => {\n const requestedSkills: string[] = [];\n\n if (typeof args.skill === 'string') {\n const normalizedSkill = args.skill.trim();\n if (normalizedSkill) requestedSkills.push(normalizedSkill);\n }\n\n if (typeof args.skills === 'string') {\n requestedSkills.push(...parseSkillIdentifiers(args.skills));\n }\n\n return mergeSkillIdentifiers(requestedSkills);\n};\n\nexport const selectPublishedSkills = <TItem extends PublishedSkillCatalogItem>(\n payload: Omit<PublishedSkillCatalogPayload, 'skills'> & { skills: TItem[] },\n identifiers: string[],\n) => {\n const itemsByIdentifier = new Map<string, TItem>();\n\n for (const item of payload.skills) {\n for (const identifier of getSkillIdentifiers(item)) {\n itemsByIdentifier.set(normalizeSkillIdentifier(identifier), item);\n }\n }\n\n const selectedItems: TItem[] = [];\n const selectedKeys = new Set<string>();\n const missingIdentifiers: string[] = [];\n\n for (const identifier of identifiers) {\n const matched = itemsByIdentifier.get(normalizeSkillIdentifier(identifier));\n if (!matched) {\n missingIdentifiers.push(identifier);\n continue;\n }\n\n if (selectedKeys.has(matched.publishedArtifact.id)) {\n continue;\n }\n\n selectedKeys.add(matched.publishedArtifact.id);\n selectedItems.push(matched);\n }\n\n return {\n selectedItems,\n missingIdentifiers,\n };\n};\n\nconst truncateText = (value: string, maxLength: number): string => {\n const normalized = value.replace(/\\s+/gu, ' ').trim();\n if (normalized.length <= maxLength) return normalized;\n return `${normalized.slice(0, Math.max(maxLength - 1, 0)).trimEnd()}…`;\n};\n\nconst buildSkillCatalogLine = (skill: PublishedSkillSummary): string => {\n const description = truncateText(\n skill.whenToUse || skill.artifactDescription || skill.skillName || skill.skillSlug,\n SYSTEM_NOTE_SKILL_DESCRIPTION_LIMIT,\n );\n const scopeLabel = isUserPublishedSkillAssignment(skill.assignmentSource)\n ? 'USER SCOPE'\n : skill.contextKind === 'global'\n ? 'GLOBAL SCOPE'\n : 'PROJECT SCOPE';\n const assignmentLabel = skill.assignmentSource.toLowerCase().replace(/_/gu, ' ');\n return `- ${skill.artifactName || skill.skillName} (${skill.skillSlug}, ${assignmentLabel} assignment) [${scopeLabel}]: ${description}`;\n};\n\nconst buildSkillDetailSnippetLine = (detail: PublishedSkillDetail): string => {\n const body = detail.markdownBody || detail.renderedContent || detail.markdownDocument;\n return `- ${detail.artifactName || detail.skillName}: ${truncateText(body, 700)}`;\n};\n\nexport const buildSystemNote = (\n result: PublishedSkillsResult,\n config: ResolvedConfig,\n details: PublishedSkillDetail[],\n): string | null => {\n if (!result.fetchResult.ok) return null;\n\n const catalog = toPublishedSkillCatalog(result.fetchResult.payload);\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 const globalSkills = catalog.skills\n .filter((skill) => skill.contextKind === 'global' && !isUserPublishedSkillAssignment(skill.assignmentSource))\n .slice(0, 8)\n .map(buildSkillCatalogLine);\n const projectSkills = catalog.skills\n .filter((skill) => skill.contextKind === 'project' && !isUserPublishedSkillAssignment(skill.assignmentSource))\n .slice(0, 5)\n .map(buildSkillCatalogLine);\n const userSkills = catalog.skills\n .filter((skill) => isUserPublishedSkillAssignment(skill.assignmentSource))\n .slice(0, 5)\n .map(buildSkillCatalogLine);\n const detailLines = details.slice(0, SYSTEM_NOTE_DETAIL_LIMIT).map(buildSkillDetailSnippetLine);\n const detailBlock =\n detailLines.length > 0\n ? ` Loaded body snippets (capped):\\n${truncateText(detailLines.join('\\n'), SYSTEM_NOTE_DETAIL_CHAR_LIMIT)}`\n : '';\n\n return [\n result.fetchResult.payload.workspace\n ? `Prefer opencode-wizard backend-published fetched skill bodies for scoped/private wizard skills in workspace ${result.fetchResult.payload.workspace.slug}.`\n : 'Prefer opencode-wizard backend-published global fetched skill bodies; workspace-specific skills are unavailable because the workspace was not found.',\n `Current directory: ${result.directoryPath}.`,\n `Published skills for this scope: ${renderedSkillNames}${renderedCountSuffix}; counts: ${catalog.assignmentCounts.global} global, ${catalog.assignmentCounts.project} workspace, ${catalog.assignmentCounts.user} user, ${catalog.assignmentCounts.other} other (GLOBAL SCOPE: ${catalog.assignmentCounts.global}, PROJECT SCOPE: ${catalog.assignmentCounts.project}, USER SCOPE: ${catalog.assignmentCounts.user}).`,\n 'Use catalog whenToUse guidance to decide applicability; when it matches the task, fetch full bodies with opencode_wizard_published_skills_fetch and prefer those fetched bodies for current scoped/private wizard guidance.',\n 'GLOBAL_CONTEXT skills are active context skills and are not project-installable; PROJECT_INSTALLABLE skills can be assigned to GLOBAL SCOPE, PROJECT SCOPE, or USER SCOPE; assignment rows decide which scope is active here.',\n globalSkills.length > 0\n ? `GLOBAL SCOPE / Global context skills:\\n${globalSkills.join('\\n')}`\n : 'GLOBAL SCOPE / Global context skills: none.',\n projectSkills.length > 0\n ? `PROJECT SCOPE / Project-scoped active skills:\\n${projectSkills.join('\\n')}`\n : 'PROJECT SCOPE / Project-scoped active skills: none.',\n userSkills.length > 0\n ? `USER SCOPE / User-scoped active skills:\\n${userSkills.join('\\n')}`\n : 'USER SCOPE / User-scoped active skills: none.',\n detailBlock,\n 'Local/native sources can still complement wizard skills: .opencode/skills is source seed content, skills.urls is a public/static complement, and backend-published fetched bodies are preferred for private/scoped wizard guidance.',\n `Root source seed path remains seed/source content: ${config.rootSkillSeedPath}/**.`,\n ]\n .filter((line) => line.length > 0)\n .join(' ');\n};\n\nconst toWorkspaceResolutionOutput = (resolution: WorkspaceResolution) => ({\n requestedDirectory: resolution.requestedDirectory,\n repositoryRoot: resolution.repositoryRoot,\n repositoryUrl: resolution.repositoryUrl,\n fallbackWorkspaceSlug: resolution.fallbackWorkspaceSlug,\n directoryPath: resolution.directoryPath,\n});\n\nconst toWorkspaceResolutionMetadata = (resolution: WorkspaceResolution): Record<string, string> => ({\n directoryPath: resolution.directoryPath,\n repositoryRoot: resolution.repositoryRoot,\n repositoryUrl: resolution.repositoryUrl ?? '',\n fallbackWorkspaceSlug: resolution.fallbackWorkspaceSlug ?? '',\n});\n\nconst formatStatusOutput = async (\n worktree: string,\n config: ResolvedConfig,\n publishedSkillsResult: PublishedSkillsResult,\n loginBootstrapSnapshot: LoginBootstrapSnapshot,\n) => {\n const authState = await resolveStoredAuthState(worktree, config);\n const filteredResult = await filterIgnoredPublishedSkills(config, publishedSkillsResult);\n const base = {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n nativeSkillsUrlCompatibility: NATIVE_SKILLS_URL_COMPATIBILITY,\n backendOrigin: config.backendOrigin,\n graphqlUrl: config.graphqlUrl,\n fallbackWorkspaceSlug: config.fallbackWorkspaceSlug,\n workspaceResolution: toWorkspaceResolutionOutput(publishedSkillsResult.workspaceResolution),\n rootSkillSeedPath: config.rootSkillSeedPath,\n authStatePath: config.authStatePath,\n requestedDirectoryPath: publishedSkillsResult.directoryPath,\n authMode: publishedSkillsResult.fetchResult.authMode,\n authState:\n authState === null\n ? null\n : {\n email: authState.email,\n userId: authState.userId,\n authenticatedAt: authState.authenticatedAt,\n expiresAt: authState.expiresAt,\n },\n loginBootstrap:\n loginBootstrapSnapshot.status === 'idle'\n ? null\n : {\n status: loginBootstrapSnapshot.status,\n trigger: loginBootstrapSnapshot.trigger,\n startedAt: loginBootstrapSnapshot.startedAt,\n expiresAt: loginBootstrapSnapshot.expiresAt,\n browserUrl: loginBootstrapSnapshot.browserUrl,\n browserOpenError: loginBootstrapSnapshot.browserOpenError,\n email: loginBootstrapSnapshot.email,\n message: loginBootstrapSnapshot.message,\n },\n status: filteredResult.fetchResult.status,\n fetchedAt: filteredResult.fetchResult.fetchedAt,\n source: filteredResult.fetchResult.source,\n availableTools: AVAILABLE_PUBLISHED_SKILL_TOOLS,\n ignoredPublishedSkills: {\n scopeKey: filteredResult.ignoreState.scopeKey,\n userKey: filteredResult.ignoreState.userKey,\n count: filteredResult.ignoreState.ignoredSkillSlugs.length,\n },\n };\n\n if (!filteredResult.fetchResult.ok) {\n return JSON.stringify(\n {\n ...base,\n message: filteredResult.fetchResult.message,\n },\n null,\n 2,\n );\n }\n\n return JSON.stringify(\n {\n ...base,\n ...toPublishedSkillCatalog(filteredResult.fetchResult.payload),\n message: getWorkspaceUnavailableMessage(filteredResult.fetchResult.payload),\n },\n null,\n 2,\n );\n};\n\nexport const toPluginAuthStateSummary = (authState: AuthState | null): PluginAuthStateSummary => {\n if (!authState) {\n return {\n status: 'missing',\n email: null,\n userId: null,\n authenticatedAt: null,\n expiresAt: null,\n };\n }\n\n return {\n status: 'authenticated',\n email: authState.email,\n userId: authState.userId,\n authenticatedAt: authState.authenticatedAt,\n expiresAt: authState.expiresAt,\n };\n};\n\nexport const resolvePluginStatusSnapshot = async ({\n worktree,\n directory,\n signal,\n}: {\n worktree: string;\n directory: string;\n signal: AbortSignal;\n}): Promise<PluginStatusSnapshot> => {\n const config = await resolveConfig(worktree);\n const workspaceResolution = await resolveWorkspace({\n config,\n directory,\n });\n const fetchResult = await fetchPublishedSkillsCatalog(worktree, config, workspaceResolution, signal);\n const filteredResult = await filterIgnoredPublishedSkills(config, {\n directoryPath: workspaceResolution.directoryPath,\n workspaceResolution,\n fetchResult,\n });\n const authState = await resolveStoredAuthState(worktree, config);\n\n return {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n nativeSkillsUrlCompatibility: NATIVE_SKILLS_URL_COMPATIBILITY,\n backendOrigin: config.backendOrigin,\n graphqlUrl: config.graphqlUrl,\n fallbackWorkspaceSlug: config.fallbackWorkspaceSlug,\n workspaceResolution: toWorkspaceResolutionOutput(workspaceResolution),\n rootSkillSeedPath: config.rootSkillSeedPath,\n authStatePath: config.authStatePath,\n authState: toPluginAuthStateSummary(authState),\n status: filteredResult.fetchResult.status,\n authMode: filteredResult.fetchResult.authMode,\n fetchedAt: filteredResult.fetchResult.fetchedAt,\n source: filteredResult.fetchResult.source,\n availableTools: AVAILABLE_PUBLISHED_SKILL_TOOLS,\n message: filteredResult.fetchResult.ok\n ? getWorkspaceUnavailableMessage(filteredResult.fetchResult.payload)\n : filteredResult.fetchResult.message,\n catalog: filteredResult.fetchResult.ok ? toPublishedSkillCatalog(filteredResult.fetchResult.payload) : null,\n installableCatalog: filteredResult.fetchResult.ok\n ? {\n count: filteredResult.fetchResult.payload.catalogSkills.length,\n skills: filteredResult.fetchResult.payload.catalogSkills.map(toInstallableSkillSummary),\n }\n : null,\n ignoredPublishedSkills: {\n scopeKey: filteredResult.ignoreState.scopeKey,\n userKey: filteredResult.ignoreState.userKey,\n count: filteredResult.ignoreState.ignoredSkillSlugs.length,\n skills: filteredResult.ignoredSkills,\n },\n };\n};\n\nconst withStatusMessage = (snapshot: PluginStatusSnapshot, message: string): PluginStatusSnapshot => ({\n ...snapshot,\n message,\n});\n\nconst toAiFacingPluginStatusSnapshot = (snapshot: PluginStatusSnapshot): AiFacingPluginStatusSnapshot => {\n const { ignoredPublishedSkills, installableCatalog: _installableCatalog, ...safeSnapshot } = snapshot;\n\n return {\n ...safeSnapshot,\n ignoredPublishedSkills: {\n scopeKey: ignoredPublishedSkills.scopeKey,\n count: ignoredPublishedSkills.count,\n },\n };\n};\n\nconst startStatusPathLoginBootstrap = (worktree: string, config: ResolvedConfig): void => {\n if (statusPathLoginBootstrap.promise) return;\n\n if (\n statusPathLoginBootstrap.status === 'failed' &&\n statusPathLoginBootstrap.failedAt &&\n Date.now() - statusPathLoginBootstrap.failedAt < STATUS_PATH_LOGIN_RETRY_COOLDOWN_MS\n ) {\n return;\n }\n\n statusPathLoginBootstrap.status = 'pending';\n statusPathLoginBootstrap.message = 'Browser login started automatically from the TUI/status path.';\n statusPathLoginBootstrap.failedAt = null;\n\n statusPathLoginBootstrap.promise = (async () => {\n const loginSignal = AbortSignal.timeout(LOGIN_TIMEOUT_MS);\n const loginStart = await startLoginFlow(loginSignal);\n const browserOpenError = await openBrowser(loginStart.browserUrl);\n\n if (browserOpenError) {\n statusPathLoginBootstrap.message = `Automatic browser open failed. Open ${loginStart.browserUrl} manually.`;\n }\n\n try {\n const callbackPayload = await loginStart.callbackPromise;\n\n if (callbackPayload.status === 'error') {\n throw new Error(callbackPayload.message);\n }\n\n if (callbackPayload.state !== loginStart.expectedState) {\n throw new Error('OAuth callback state did not match the original login request.');\n }\n\n const pluginSession = await createPluginSession({\n code: callbackPayload.code,\n codeVerifier: loginStart.codeVerifier,\n redirectUri: OIDC_CALLBACK_URL,\n config,\n signal: loginSignal,\n });\n const authState = toAuthState(pluginSession);\n await writeAuthState(config.authStatePath, authState);\n\n statusPathLoginBootstrap.status = 'authenticated';\n statusPathLoginBootstrap.message = `Browser login completed successfully for ${authState.email}.`;\n return authState;\n } finally {\n await loginStart.closeCallbackServer().catch(() => undefined);\n }\n })()\n .catch((error: unknown) => {\n statusPathLoginBootstrap.status = 'failed';\n statusPathLoginBootstrap.failedAt = Date.now();\n statusPathLoginBootstrap.message = error instanceof Error ? error.message : 'Browser login failed.';\n throw error;\n })\n .finally(() => {\n statusPathLoginBootstrap.promise = null;\n });\n\n statusPathLoginBootstrap.promise.catch(() => undefined);\n};\n\nexport const resolvePluginStatusSnapshotWithAuthBootstrap = async ({\n worktree,\n directory,\n signal,\n}: {\n worktree: string;\n directory: string;\n signal: AbortSignal;\n}): Promise<PluginStatusSnapshot> => {\n const snapshot = await resolvePluginStatusSnapshot({\n worktree,\n directory,\n signal,\n });\n\n if (snapshot.status !== 'missing_auth') return snapshot;\n\n const config = await resolveConfig(worktree);\n startStatusPathLoginBootstrap(worktree, config);\n\n if (statusPathLoginBootstrap.message) {\n return withStatusMessage(snapshot, statusPathLoginBootstrap.message);\n }\n\n return withStatusMessage(snapshot, 'Browser login is pending from the TUI/status path.');\n};\n\nconst toBackendPreferenceScope = (preferenceScope: 'global' | 'project'): PublishedSkillPreferenceScope => {\n if (preferenceScope === 'global') return 'GLOBAL';\n return 'WORKSPACE';\n};\n\nconst setPublishedSkillPreference = async ({\n worktree,\n directory,\n config,\n skillSlug,\n preferenceScope,\n installed,\n ignored,\n}: {\n worktree: string;\n directory: string;\n config: ResolvedConfig;\n skillSlug: string;\n preferenceScope: 'global' | 'project';\n installed?: boolean;\n ignored?: boolean;\n}): Promise<PublishedSkillsIgnoreState> => {\n const workspaceResolution = await resolveWorkspace({ config, directory });\n const response = await fetchPublishedSkillsGraphQl<SetPublishedSkillPreferenceResponse>({\n worktree,\n config,\n query: SET_PUBLISHED_SKILL_PREFERENCE_MUTATION,\n variables: {\n input: {\n ...toDeliveryInput(workspaceResolution),\n skillSlug,\n preferenceScope: toBackendPreferenceScope(preferenceScope),\n installed,\n ignored,\n },\n },\n signal: AbortSignal.timeout(PRESENCE_EVENT_TIMEOUT_MS),\n });\n\n if (!response.ok) {\n throw new Error(response.result.message);\n }\n\n const preferences = response.data.setPublishedSkillPreference;\n publishedSkillPreferenceCacheVersion += 1;\n\n return {\n scopeKey: preferences.scopeKey,\n userKey: preferences.userKey,\n ignoredSkillSlugs: preferences.ignoredSkills.map((item) => item.skill.slug),\n installedGlobalSkillSlugs: [],\n installedWorkspaceSkillSlugs: [],\n };\n};\n\nexport const setPublishedSkillIgnored = async ({\n worktree,\n directory,\n skillSlug,\n ignored,\n preferenceScope,\n}: {\n worktree: string;\n directory: string;\n scopeKey?: string;\n skillSlug: string;\n ignored: boolean;\n preferenceScope?: 'global' | 'project';\n}): Promise<PublishedSkillsIgnoreState> => {\n const config = await resolveConfig(worktree);\n const normalizedSkillSlug = toIgnoredSkillSlug(skillSlug);\n\n if (!normalizedSkillSlug) {\n throw new Error('Cannot toggle an empty published skill slug.');\n }\n\n return setPublishedSkillPreference({\n worktree,\n directory,\n config,\n skillSlug: normalizedSkillSlug,\n preferenceScope: preferenceScope ?? 'project',\n ignored,\n });\n};\n\nexport const setPublishedSkillInstalled = async ({\n worktree,\n directory,\n skillSlug,\n installed,\n preferenceScope,\n}: {\n worktree: string;\n directory: string;\n scopeKey?: string;\n skillSlug: string;\n installed: boolean;\n preferenceScope: 'global' | 'project';\n}): Promise<PublishedSkillsIgnoreState> => {\n const config = await resolveConfig(worktree);\n const normalizedSkillSlug = toIgnoredSkillSlug(skillSlug);\n\n if (!normalizedSkillSlug) {\n throw new Error('Cannot toggle an empty published skill slug.');\n }\n\n return setPublishedSkillPreference({\n worktree,\n directory,\n config,\n skillSlug: normalizedSkillSlug,\n preferenceScope,\n installed,\n });\n};\n\nconst toPluginStatusMetadata = (snapshot: PluginStatusSnapshot): Record<string, string> => ({\n backendOrigin: snapshot.backendOrigin,\n graphqlUrl: snapshot.graphqlUrl,\n pluginStatus: snapshot.status,\n authStatus: snapshot.authState.status,\n authEmail: snapshot.authState.email ?? '',\n authUserId: snapshot.authState.userId ?? '',\n});\n\nconst isUnauthorizedGraphQlMessage = (message: string): boolean => {\n const normalizedMessage = message.toLowerCase();\n return normalizedMessage.includes('not authorized') || normalizedMessage.includes('unauthorized');\n};\n\nconst createRandomBase64Url = (bytes: number): string => {\n return crypto.randomBytes(bytes).toString('base64url');\n};\n\nconst createCodeChallenge = (codeVerifier: string): string => {\n return crypto.createHash('sha256').update(codeVerifier).digest('base64url');\n};\n\nconst getMessageFromUnknownPayload = (value: unknown): string | null => {\n if (!value || typeof value !== 'object') return null;\n\n const candidate = 'message' in value ? value.message : null;\n return typeof candidate === 'string' ? candidate : null;\n};\n\nconst wait = async (milliseconds: number): Promise<void> => {\n await new Promise<void>((resolve) => {\n setTimeout(resolve, milliseconds);\n });\n};\n\nconst shouldRetryPresenceEvent = (status: number): boolean => {\n return status === 408 || status === 429 || status >= 500;\n};\n\nconst fetchOidcDiscoveryDocument = async (signal: AbortSignal): Promise<OidcDiscoveryDocument> => {\n const discoveryUrl = `${OIDC_ISSUER.replace(/\\/+$/, '')}/.well-known/openid-configuration`;\n const response = await fetch(discoveryUrl, {\n method: 'GET',\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`OIDC discovery failed with HTTP ${response.status}.`);\n }\n\n return (await response.json()) as OidcDiscoveryDocument;\n};\n\nconst isCallbackPortInUseError = (error: unknown): boolean => {\n if (!error || typeof error !== 'object') return false;\n if (!('code' in error)) return false;\n return error.code === 'EADDRINUSE';\n};\n\nconst toCallbackServerStartError = (error: unknown): Error => {\n if (!isCallbackPortInUseError(error)) {\n return error instanceof Error ? error : new Error('Failed to start local OAuth callback server.');\n }\n\n return new Error(\n 'OAuth login cannot start because localhost:24953 is already in use. Another OpenCode login is likely in progress; finish it or close the other instance, then retry.',\n );\n};\n\nconst escapeHtml = (value: string): string => {\n return value.replace(/[&<>'\"]/g, (character) => {\n const replacements: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n \"'\": '&#39;',\n '\"': '&quot;',\n };\n\n return replacements[character] ?? character;\n });\n};\n\nconst sendHtmlResponse = (response: http.ServerResponse, statusCode: number, title: string, message: string) => {\n const escapedTitle = escapeHtml(title);\n const escapedMessage = escapeHtml(message);\n const isSuccess = statusCode >= 200 && statusCode < 300;\n const pageState = isSuccess ? 'success' : statusCode === 404 ? 'not-found' : 'error';\n const cardTitle = isSuccess ? 'Authorization successful' : statusCode === 404 ? 'Callback not found' : 'Authorization failed';\n const escapedCardTitle = escapeHtml(cardTitle);\n const eyebrow = isSuccess ? 'Authorization complete' : statusCode === 404 ? 'Callback route not found' : 'Authorization needs attention';\n const actionText = isSuccess\n ? 'This window will close automatically in a moment. You can also close it now and return to OpenCode.'\n : 'You can close this window and return to OpenCode to try again.';\n const autoCloseScript = isSuccess\n ? `<script>\n window.setTimeout(() => window.close(), 2000);\n </script>`\n : '';\n const stateIcon = isSuccess\n ? '<path d=\"M7 12.5l3.1 3.1L17.5 8\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>'\n : statusCode === 404\n ? '<path d=\"M10.5 17a6.5 6.5 0 1 0 0-13 6.5 6.5 0 0 0 0 13Z\" stroke=\"currentColor\" stroke-width=\"2.2\"/><path d=\"m15.5 15.5 4 4\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\"/>'\n : '<path d=\"M12 7v6\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\"/><path d=\"M12 17.2v.1\" stroke=\"currentColor\" stroke-width=\"3.2\" stroke-linecap=\"round\"/>';\n\n response.writeHead(statusCode, {\n 'content-type': 'text/html; charset=utf-8',\n 'cache-control': 'no-store',\n });\n response.end(\n `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta name=\"color-scheme\" content=\"light dark\">\n <title>${escapedTitle}</title>\n <style>\n :root {\n color-scheme: light dark;\n --page-bg: #f2efe7;\n --page-ink: #211d18;\n --muted: #6c6258;\n --panel: rgba(255, 252, 245, 0.82);\n --panel-border: rgba(78, 66, 52, 0.16);\n --success: #167848;\n --error: #ba3329;\n --not-found: #986614;\n --glow: rgba(22, 120, 72, 0.18);\n }\n\n @media (prefers-color-scheme: dark) {\n :root {\n --page-bg: #12100d;\n --page-ink: #f7efe2;\n --muted: #b8aa98;\n --panel: rgba(30, 26, 22, 0.78);\n --panel-border: rgba(255, 244, 224, 0.14);\n --success: #71e0a6;\n --error: #ff897e;\n --not-found: #f7c96f;\n --glow: rgba(113, 224, 166, 0.2);\n }\n }\n\n * {\n box-sizing: border-box;\n }\n\n body {\n min-height: 100vh;\n margin: 0;\n display: grid;\n place-items: center;\n padding: 24px;\n overflow: hidden;\n background:\n radial-gradient(circle at 18% 18%, var(--glow), transparent 34rem),\n radial-gradient(circle at 82% 12%, rgba(209, 142, 72, 0.18), transparent 30rem),\n linear-gradient(135deg, var(--page-bg), color-mix(in srgb, var(--page-bg) 76%, #000 24%));\n color: var(--page-ink);\n font-family: ui-rounded, \"SF Pro Rounded\", \"Segoe UI\", system-ui, sans-serif;\n }\n\n body::before {\n content: \"\";\n position: fixed;\n inset: -20%;\n pointer-events: none;\n background-image:\n linear-gradient(rgba(128, 104, 74, 0.08) 1px, transparent 1px),\n linear-gradient(90deg, rgba(128, 104, 74, 0.08) 1px, transparent 1px);\n background-size: 42px 42px;\n mask-image: radial-gradient(circle at center, black, transparent 68%);\n }\n\n main {\n position: relative;\n width: min(100%, 560px);\n padding: clamp(28px, 7vw, 56px);\n border: 1px solid var(--panel-border);\n border-radius: 32px;\n background: var(--panel);\n box-shadow: 0 24px 90px rgba(0, 0, 0, 0.24);\n text-align: center;\n backdrop-filter: blur(18px) saturate(1.2);\n }\n\n .mark {\n width: 72px;\n height: 72px;\n margin: 0 auto 24px;\n display: grid;\n place-items: center;\n border-radius: 24px;\n color: var(--state-color);\n background: color-mix(in srgb, var(--state-color) 16%, transparent);\n box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--state-color) 28%, transparent);\n }\n\n [data-state=\"success\"] { --state-color: var(--success); }\n [data-state=\"error\"] { --state-color: var(--error); }\n [data-state=\"not-found\"] { --state-color: var(--not-found); }\n\n .eyebrow {\n margin: 0 0 10px;\n color: var(--state-color);\n font-size: 0.78rem;\n font-weight: 800;\n letter-spacing: 0.14em;\n text-transform: uppercase;\n }\n\n h1 {\n margin: 0;\n font-size: clamp(2rem, 7vw, 3.35rem);\n line-height: 0.95;\n letter-spacing: -0.06em;\n }\n\n .message {\n margin: 22px auto 0;\n max-width: 38rem;\n color: var(--muted);\n font-size: clamp(1rem, 2.5vw, 1.1rem);\n line-height: 1.65;\n }\n\n .next-step {\n margin: 26px 0 0;\n padding: 14px 18px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--state-color) 12%, transparent);\n color: var(--page-ink);\n font-size: 0.94rem;\n line-height: 1.5;\n }\n\n @media (max-width: 520px) {\n body {\n padding: 16px;\n }\n\n main {\n border-radius: 24px;\n }\n\n .next-step {\n border-radius: 18px;\n }\n }\n </style>\n </head>\n <body>\n <main data-state=\"${pageState}\" aria-labelledby=\"callback-title\">\n <div class=\"mark\" aria-hidden=\"true\">\n <svg width=\"34\" height=\"34\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n ${stateIcon}\n </svg>\n </div>\n <p class=\"eyebrow\">${eyebrow}</p>\n <h1 id=\"callback-title\">${escapedCardTitle}</h1>\n <p class=\"message\">${escapedMessage}</p>\n <p class=\"next-step\">${actionText}</p>\n </main>\n ${autoCloseScript}\n </body>\n</html>`,\n );\n};\n\nconst startLocalCallbackServer = async ({\n expectedState,\n signal,\n}: {\n expectedState: string;\n signal: AbortSignal;\n}): Promise<{\n callbackPromise: Promise<OidcCallbackPayload>;\n close: () => Promise<void>;\n}> => {\n let settled = false;\n let resolvePayload: (value: OidcCallbackPayload) => void = () => undefined;\n let rejectPayload: (reason?: unknown) => void = () => undefined;\n\n const callbackPromise = new Promise<OidcCallbackPayload>((resolve, reject) => {\n resolvePayload = resolve;\n rejectPayload = reject;\n });\n\n const finalize = (payload: OidcCallbackPayload) => {\n if (settled) return;\n settled = true;\n resolvePayload(payload);\n };\n\n const fail = (reason: unknown) => {\n if (settled) return;\n settled = true;\n rejectPayload(reason);\n };\n\n const server = http.createServer((request, response) => {\n const requestUrl = new URL(request.url ?? '/', OIDC_CALLBACK_ORIGIN);\n\n if (requestUrl.pathname !== OIDC_CALLBACK_PATH) {\n sendHtmlResponse(response, 404, 'opencode-wizard plugin login', 'Unknown callback path.');\n return;\n }\n\n const error = requestUrl.searchParams.get('error');\n const errorDescription = requestUrl.searchParams.get('error_description');\n\n if (error) {\n const message = errorDescription ?? error;\n sendHtmlResponse(response, 400, 'opencode-wizard plugin login failed', message);\n finalize({\n status: 'error',\n message,\n });\n return;\n }\n\n const state = requestUrl.searchParams.get('state');\n const code = requestUrl.searchParams.get('code');\n\n if (!state || state !== expectedState) {\n sendHtmlResponse(\n response,\n 400,\n 'opencode-wizard plugin login failed',\n 'OAuth state did not match the login request.',\n );\n finalize({\n status: 'error',\n message: 'OAuth state did not match the login request.',\n });\n return;\n }\n\n if (!code) {\n sendHtmlResponse(\n response,\n 400,\n 'opencode-wizard plugin login failed',\n 'OAuth callback did not include an authorization code.',\n );\n finalize({\n status: 'error',\n message: 'OAuth callback did not include an authorization code.',\n });\n return;\n }\n\n sendHtmlResponse(\n response,\n 200,\n 'opencode-wizard plugin callback received',\n 'Callback received. OpenCode is finalizing the backend session now.',\n );\n finalize({\n status: 'success',\n code,\n state,\n });\n });\n\n const close = async () => {\n await new Promise<void>((resolve, reject) => {\n server.close((error) => {\n if (error) {\n reject(error);\n return;\n }\n\n resolve();\n });\n });\n };\n\n await new Promise<void>((resolve, reject) => {\n const rejectStart = (error: unknown) => {\n reject(toCallbackServerStartError(error));\n };\n\n server.once('error', rejectStart);\n server.listen(24953, 'localhost', () => {\n server.off('error', rejectStart);\n server.on('error', (error) => {\n fail(error instanceof Error ? error : new Error('Local OAuth callback server failed.'));\n });\n resolve();\n });\n });\n\n signal.addEventListener(\n 'abort',\n () => {\n fail(signal.reason instanceof Error ? signal.reason : new Error('OAuth login aborted.'));\n void close().catch(() => undefined);\n },\n { once: true },\n );\n\n return {\n callbackPromise,\n close,\n };\n};\n\nconst 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 | {\n ok: true;\n data: TData;\n fetchedAt: string;\n }\n | {\n ok: false;\n result: Extract<FetchResult, { ok: false }>;\n }\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({\n query,\n variables,\n }),\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: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message,\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (!body.data) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include data.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n return {\n ok: true,\n data: body.data,\n fetchedAt,\n };\n};\n\nconst 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: {\n input: toDeliveryInput(resolution),\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) {\n return response.result;\n }\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\nconst 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 | {\n ok: true;\n artifact: PublishedSkillArtifactDetailPayload;\n }\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 | {\n ok: false;\n result: Extract<FetchResult, { ok: false }>;\n }\n> => {\n const response = await fetchPublishedSkillsGraphQl<PublishedSkillDetailResponse>({\n worktree,\n config,\n query: PUBLISHED_SKILL_DETAIL_QUERY,\n variables: {\n input: {\n ...toDeliveryInput(resolution),\n skillVersionId,\n purpose,\n },\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) {\n return response;\n }\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 {\n ok: true,\n artifact,\n };\n};\n\nconst toFetchFailureOutput = async ({\n worktree,\n config,\n publishedSkillsResult,\n loginBootstrapSnapshot,\n}: {\n worktree: string;\n config: ResolvedConfig;\n publishedSkillsResult: PublishedSkillsResult;\n loginBootstrapSnapshot: LoginBootstrapSnapshot;\n}) => ({\n output: await formatStatusOutput(worktree, config, publishedSkillsResult, loginBootstrapSnapshot),\n metadata: {\n status: publishedSkillsResult.fetchResult.status,\n ...toWorkspaceResolutionMetadata(publishedSkillsResult.workspaceResolution),\n source: publishedSkillsResult.fetchResult.source,\n },\n});\n\nconst startLoginFlow = async (signal: AbortSignal): Promise<OidcLoginStart> => {\n const discovery = await fetchOidcDiscoveryDocument(signal);\n const codeVerifier = createRandomBase64Url(64);\n const expectedState = createRandomBase64Url(32);\n const codeChallenge = createCodeChallenge(codeVerifier);\n const expiresAt = new Date(Date.now() + LOGIN_TIMEOUT_MS).toISOString();\n const { callbackPromise, close } = await startLocalCallbackServer({\n expectedState,\n signal,\n });\n\n const browserUrl = new URL(discovery.authorization_endpoint);\n browserUrl.searchParams.set('client_id', OIDC_CLIENT_ID);\n browserUrl.searchParams.set('response_type', 'code');\n browserUrl.searchParams.set('redirect_uri', OIDC_CALLBACK_URL);\n browserUrl.searchParams.set('response_mode', 'query');\n browserUrl.searchParams.set('scope', OIDC_SCOPES.join(' '));\n browserUrl.searchParams.set('code_challenge', codeChallenge);\n browserUrl.searchParams.set('code_challenge_method', 'S256');\n browserUrl.searchParams.set('state', expectedState);\n\n return {\n browserUrl: browserUrl.toString(),\n expiresAt,\n codeVerifier,\n expectedState,\n callbackPromise,\n closeCallbackServer: close,\n };\n};\n\nconst createPluginSession = async ({\n code,\n codeVerifier,\n redirectUri,\n config,\n signal,\n}: {\n code: string;\n codeVerifier: string;\n redirectUri: string;\n config: ResolvedConfig;\n signal: AbortSignal;\n}): Promise<PluginSessionResponse['session']> => {\n const response = await fetch(config.authSessionUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n code,\n codeVerifier,\n redirectUri,\n }),\n signal,\n });\n\n const payload = (await response.json().catch(() => null)) as PluginSessionResponse | { message?: string } | null;\n\n if (!response.ok) {\n throw new Error(\n getMessageFromUnknownPayload(payload) ?? `Plugin session exchange failed with HTTP ${response.status}.`,\n );\n }\n\n if (!payload || !('success' in payload) || payload.success !== true) {\n throw new Error('Plugin session exchange returned an unexpected payload.');\n }\n\n return payload.session;\n};\n\nconst emitPresenceEvent = async ({\n config,\n authState,\n event,\n workspacePath,\n}: {\n config: ResolvedConfig;\n authState: AuthState;\n event: PresenceEventType;\n workspacePath: string;\n}): Promise<void> => {\n for (let attempt = 1; attempt <= PRESENCE_EVENT_MAX_ATTEMPTS; attempt += 1) {\n try {\n const response = await fetch(config.presenceUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${authState.sessionToken}`,\n },\n body: JSON.stringify({\n event,\n occurredAt: new Date().toISOString(),\n workspacePath,\n }),\n keepalive: event === 'STOP',\n signal: AbortSignal.timeout(PRESENCE_EVENT_TIMEOUT_MS),\n });\n\n if (response.ok) return;\n if (!shouldRetryPresenceEvent(response.status) || attempt === PRESENCE_EVENT_MAX_ATTEMPTS) return;\n } catch {\n if (attempt === PRESENCE_EVENT_MAX_ATTEMPTS) return;\n }\n\n await wait(PRESENCE_EVENT_RETRY_DELAY_MS * attempt);\n }\n};\n\nconst emitPluginActionEvent = async ({\n config,\n authState,\n event,\n workspacePath,\n directoryPath,\n}: {\n config: ResolvedConfig;\n authState: AuthState | null;\n event: PluginActionEventType;\n workspacePath: string;\n directoryPath?: string;\n}): Promise<void> => {\n if (!authState) return;\n\n try {\n await fetch(config.actionsUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${authState.sessionToken}`,\n },\n body: JSON.stringify({\n event,\n occurredAt: new Date().toISOString(),\n workspacePath,\n directoryPath,\n }),\n keepalive: event === 'STOP',\n signal: AbortSignal.timeout(PRESENCE_EVENT_TIMEOUT_MS),\n });\n } catch {\n return;\n }\n};\n\nconst openBrowser = async (url: string): Promise<string | null> => {\n try {\n if (process.platform === 'darwin') {\n await execFileAsync('open', [url]);\n return null;\n }\n\n if (process.platform === 'win32') {\n await execFileAsync('cmd', ['/c', 'start', '', url]);\n return null;\n }\n\n await execFileAsync('xdg-open', [url]);\n return null;\n } catch (error) {\n return error instanceof Error ? error.message : 'Failed to open browser automatically';\n }\n};\n\nconst normalizeDirectoryArg = (contextDirectory: string, directory?: string): string => {\n return normalizeAbsolutePath(directory ? path.resolve(contextDirectory, directory) : contextDirectory);\n};\n\nconst getDetailCacheKey = (catalogCacheKey: string, skillVersionId: string): string => {\n return JSON.stringify([catalogCacheKey, skillVersionId]);\n};\n\nconst getDetailInflightKey = (\n catalogCacheKey: string,\n skillVersionId: string,\n purpose: PublishedSkillArtifactDetailPurpose,\n): string => {\n return JSON.stringify([catalogCacheKey, skillVersionId, purpose]);\n};\n\nconst OpencodeWizardSkillsPlugin: OpencodePluginServer = async (input) => {\n const { tool } = await importOpencodePluginModule('@opencode-ai/plugin');\n const config = await resolveConfig(input.worktree);\n const workspacePath = normalizeAbsolutePath(input.worktree);\n const cache = new Map<string, CacheEntry>();\n const catalogInflight = new Map<string, Promise<PublishedSkillsResult>>();\n const detailCache = new Map<string, DetailCacheEntry>();\n const detailInflight = new Map<string, Promise<PublishedSkillDetailResult>>();\n const initialAuthState = await resolveStoredAuthState(input.worktree, config);\n const loginBootstrap = {\n promise: null as Promise<AuthState> | null,\n snapshot: createIdleLoginBootstrapSnapshot(),\n };\n let lastAuthenticatedAuthState: AuthState | null = initialAuthState;\n let didEmitStart = false;\n let didScheduleStop = false;\n let presenceStartPromise: Promise<void> | null = null;\n let presenceStopPromise: Promise<void> | null = null;\n let lastInteractiveDirectoryPath: string | null = null;\n\n const resolveActionAuthState = async (): Promise<AuthState | null> => {\n const storedAuthState = await resolveStoredAuthState(input.worktree, config);\n if (storedAuthState) return storedAuthState;\n return lastAuthenticatedAuthState;\n };\n\n const emitActionEventForCurrentSession = async ({\n event,\n authState,\n directoryPath,\n }: {\n event: PluginActionEventType;\n authState?: AuthState | null;\n directoryPath?: string;\n }): Promise<void> => {\n await emitPluginActionEvent({\n config,\n authState: authState ?? (await resolveActionAuthState()),\n event,\n workspacePath,\n directoryPath,\n });\n };\n\n const schedulePresenceStart = (authState: AuthState): Promise<void> => {\n lastAuthenticatedAuthState = authState;\n if (didEmitStart) {\n return presenceStartPromise ?? Promise.resolve();\n }\n\n didEmitStart = true;\n presenceStartPromise = Promise.all([\n emitPresenceEvent({\n config,\n authState,\n event: 'START',\n workspacePath,\n }),\n emitActionEventForCurrentSession({\n event: 'START',\n authState,\n directoryPath: lastInteractiveDirectoryPath ?? undefined,\n }),\n ]).then(() => undefined);\n return presenceStartPromise;\n };\n\n const schedulePresenceStop = (): Promise<void> => {\n if (didScheduleStop) {\n return presenceStopPromise ?? Promise.resolve();\n }\n\n didScheduleStop = true;\n if (!didEmitStart || !lastAuthenticatedAuthState) {\n presenceStopPromise = Promise.resolve();\n return presenceStopPromise;\n }\n\n presenceStopPromise = (async () => {\n await presenceStartPromise?.catch(() => undefined);\n await Promise.all([\n emitPresenceEvent({\n config,\n authState: lastAuthenticatedAuthState,\n event: 'STOP',\n workspacePath,\n }),\n emitActionEventForCurrentSession({\n event: 'STOP',\n authState: lastAuthenticatedAuthState,\n directoryPath: lastInteractiveDirectoryPath ?? undefined,\n }),\n ]);\n })();\n\n return presenceStopPromise;\n };\n\n const scheduleInteractivePresenceStart = async (): Promise<void> => {\n const authState = await resolveStoredAuthState(input.worktree, config);\n if (!authState) return;\n await schedulePresenceStart(authState);\n };\n\n process.once('beforeExit', () => {\n void schedulePresenceStop();\n });\n\n for (const shutdownSignal of PRESENCE_SHUTDOWN_SIGNALS) {\n try {\n process.once(shutdownSignal, () => {\n void schedulePresenceStop().finally(() => {\n process.exit(PRESENCE_SIGNAL_EXIT_CODES[shutdownSignal]);\n });\n });\n } catch {\n continue;\n }\n }\n\n const clearPublishedSkillState = () => {\n cache.clear();\n catalogInflight.clear();\n detailCache.clear();\n detailInflight.clear();\n };\n\n const persistAuthState = async (session: PluginSessionResponse['session']): Promise<AuthState> => {\n const authState = toAuthState(session);\n await writeAuthState(config.authStatePath, authState);\n clearPublishedSkillState();\n return authState;\n };\n\n const startLoginCompletion = (trigger: LoginBootstrapTrigger): Promise<AuthState> => {\n if (loginBootstrap.promise) {\n return loginBootstrap.promise;\n }\n\n const startedAt = new Date().toISOString();\n\n loginBootstrap.snapshot = {\n status: 'starting',\n trigger,\n startedAt,\n expiresAt: null,\n browserUrl: null,\n browserOpenError: null,\n email: null,\n message: null,\n };\n\n const loginPromise = (async () => {\n const loginSignal = AbortSignal.timeout(LOGIN_TIMEOUT_MS);\n let loginStart: OidcLoginStart | null = null;\n\n try {\n loginStart = await startLoginFlow(loginSignal);\n const browserOpenError = await openBrowser(loginStart.browserUrl);\n\n loginBootstrap.snapshot = {\n status: 'pending',\n trigger,\n startedAt,\n expiresAt: loginStart.expiresAt,\n browserUrl: loginStart.browserUrl,\n browserOpenError,\n email: null,\n message: browserOpenError\n ? `Automatic browser open failed. Open ${loginStart.browserUrl} manually.`\n : `Browser login started for published skill ${trigger}.`,\n };\n\n const callbackPayload = await loginStart.callbackPromise;\n\n if (callbackPayload.status === 'error') {\n throw new Error(callbackPayload.message);\n }\n\n if (callbackPayload.state !== loginStart.expectedState) {\n throw new Error('OAuth callback state did not match the original login request.');\n }\n\n loginBootstrap.snapshot = {\n status: 'pending',\n trigger,\n startedAt,\n expiresAt: loginStart.expiresAt,\n browserUrl: loginStart.browserUrl,\n browserOpenError,\n email: null,\n message: 'OAuth callback received. Finalizing backend session exchange.',\n };\n\n const pluginSession = await createPluginSession({\n code: callbackPayload.code,\n codeVerifier: loginStart.codeVerifier,\n redirectUri: OIDC_CALLBACK_URL,\n config,\n signal: loginSignal,\n });\n const authState = await persistAuthState(pluginSession);\n await emitActionEventForCurrentSession({\n event: 'LOGIN_SUCCESS',\n authState,\n directoryPath: lastInteractiveDirectoryPath ?? undefined,\n });\n\n loginBootstrap.snapshot = {\n status: 'authenticated',\n trigger,\n startedAt,\n expiresAt: authState.expiresAt,\n browserUrl: loginStart.browserUrl,\n browserOpenError,\n email: authState.email,\n message: `Browser login completed successfully for published skill ${trigger}.`,\n };\n\n return authState;\n } catch (error) {\n await emitActionEventForCurrentSession({\n event: 'LOGIN_FAILED',\n directoryPath: lastInteractiveDirectoryPath ?? undefined,\n });\n loginBootstrap.snapshot = {\n status: 'failed',\n trigger,\n startedAt,\n expiresAt: loginBootstrap.snapshot.expiresAt,\n browserUrl: loginBootstrap.snapshot.browserUrl,\n browserOpenError: loginBootstrap.snapshot.browserOpenError,\n email: null,\n message: error instanceof Error ? error.message : 'Browser login failed.',\n };\n throw error;\n } finally {\n await loginStart?.closeCallbackServer().catch(() => undefined);\n loginBootstrap.promise = null;\n }\n })();\n\n loginBootstrap.promise = loginPromise;\n return loginPromise;\n };\n\n const loadPublishedSkillCatalog = async ({\n directory,\n useCache,\n signal,\n }: {\n directory: string;\n useCache: boolean;\n signal: AbortSignal;\n }): Promise<PublishedSkillsResult> => {\n const workspaceResolution = await resolveWorkspace({\n config,\n directory,\n });\n const directoryPath = workspaceResolution.directoryPath;\n const preferenceContext = await resolvePublishedSkillPreferenceCacheContext(config);\n const cacheKey = getCatalogCacheKey(workspaceResolution, preferenceContext);\n const cached = cache.get(cacheKey);\n\n if (useCache && cached && cached.expiresAt > Date.now()) {\n return {\n directoryPath,\n workspaceResolution,\n fetchResult: {\n ...cached.result,\n source: 'cache',\n },\n };\n }\n\n const inflight = catalogInflight.get(cacheKey);\n if (inflight) {\n return inflight;\n }\n\n const requestPromise = (async (): Promise<PublishedSkillsResult> => {\n const fetchResult = await fetchPublishedSkillsCatalog(\n input.worktree,\n config,\n workspaceResolution,\n signal,\n clearPublishedSkillState,\n );\n\n cache.set(cacheKey, {\n result: fetchResult,\n expiresAt: Date.now() + CACHE_TTL_MS,\n });\n\n return {\n directoryPath,\n workspaceResolution,\n fetchResult,\n };\n })();\n\n catalogInflight.set(cacheKey, requestPromise);\n\n try {\n return await requestPromise;\n } finally {\n catalogInflight.delete(cacheKey);\n }\n };\n\n const loadPublishedSkillDetail = async ({\n workspaceResolution,\n item,\n signal,\n useCache,\n purpose,\n }: {\n workspaceResolution: WorkspaceResolution;\n item: PublishedSkillCatalogItem;\n signal: AbortSignal;\n useCache: boolean;\n purpose: PublishedSkillArtifactDetailPurpose;\n }): Promise<PublishedSkillDetailResult> => {\n const directoryPath = workspaceResolution.directoryPath;\n const preferenceContext = await resolvePublishedSkillPreferenceCacheContext(config);\n const catalogCacheKey = getCatalogCacheKey(workspaceResolution, preferenceContext);\n const cacheKey = getDetailCacheKey(catalogCacheKey, item.skillVersion.id);\n const inflightKey = getDetailInflightKey(catalogCacheKey, item.skillVersion.id, purpose);\n const cached = detailCache.get(cacheKey);\n\n if (purpose === 'SYSTEM_CONTEXT' && useCache && cached && cached.expiresAt > Date.now()) {\n return {\n ok: true,\n detail: toPublishedSkillDetail({\n ...item,\n publishedArtifact: cached.artifact,\n }),\n };\n }\n\n const inflight = detailInflight.get(inflightKey);\n if (inflight) {\n return inflight;\n }\n\n const requestPromise = (async (): Promise<PublishedSkillDetailResult> => {\n const detailResult = await fetchPublishedSkillDetail({\n worktree: input.worktree,\n config,\n resolution: workspaceResolution,\n skillVersionId: item.skillVersion.id,\n signal,\n onAuthStateChanged: clearPublishedSkillState,\n purpose,\n });\n\n if (!detailResult.ok) {\n return {\n ok: false,\n status: detailResult.result.status,\n output: JSON.stringify(\n {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n status: detailResult.result.status,\n requestedDirectoryPath: directoryPath,\n workspaceResolution: toWorkspaceResolutionOutput(workspaceResolution),\n requestedSkillVersionId: item.skillVersion.id,\n message: detailResult.result.message,\n fetchedAt: detailResult.result.fetchedAt,\n source: detailResult.result.source,\n },\n null,\n 2,\n ),\n metadata: {\n status: detailResult.result.status,\n ...toWorkspaceResolutionMetadata(workspaceResolution),\n source: detailResult.result.source,\n },\n };\n }\n\n detailCache.set(cacheKey, {\n artifact: detailResult.artifact,\n expiresAt: Date.now() + CACHE_TTL_MS,\n });\n\n return {\n ok: true,\n detail: toPublishedSkillDetail({\n ...item,\n publishedArtifact: detailResult.artifact,\n }),\n };\n })();\n\n detailInflight.set(inflightKey, requestPromise);\n\n try {\n return await requestPromise;\n } finally {\n detailInflight.delete(inflightKey);\n }\n };\n\n const loadSystemNoteDetails = async ({\n publishedSkillsResult,\n signal,\n }: {\n publishedSkillsResult: PublishedSkillsResult;\n signal: AbortSignal;\n }): Promise<PublishedSkillDetail[]> => {\n if (!publishedSkillsResult.fetchResult.ok) return [];\n\n const prioritizedItems = [...publishedSkillsResult.fetchResult.payload.skills].sort((left, right) => {\n const leftSummary = toPublishedSkillSummary(left);\n const rightSummary = toPublishedSkillSummary(right);\n if (leftSummary.contextKind === rightSummary.contextKind)\n return formatSkillLabel(left).localeCompare(formatSkillLabel(right));\n if (leftSummary.contextKind === 'global') return -1;\n if (rightSummary.contextKind === 'global') return 1;\n return 0;\n });\n const detailResults = await Promise.all(\n prioritizedItems.slice(0, SYSTEM_NOTE_DETAIL_LIMIT).map((item) =>\n loadPublishedSkillDetail({\n workspaceResolution: publishedSkillsResult.workspaceResolution,\n item,\n signal,\n useCache: true,\n purpose: 'SYSTEM_CONTEXT',\n }),\n ),\n );\n\n return detailResults.reduce<PublishedSkillDetail[]>((details, result) => {\n if (!result.ok) return details;\n details.push(result.detail);\n return details;\n }, []);\n };\n\n const executePublishedSkillsFetchTool = async ({\n args,\n context,\n }: {\n args: PublishedSkillFetchArgs;\n context: {\n directory: string;\n abort: AbortSignal;\n metadata: (payload: { title: string; metadata: Record<string, string> }) => void;\n };\n }) => {\n const requestedDirectory = normalizeDirectoryArg(context.directory, args.directory);\n const requestedSkills = parseRequestedSkillArgs(args);\n\n const fetchActionDirectoryPath = normalizeRepositoryPath(workspacePath, requestedDirectory);\n lastInteractiveDirectoryPath = fetchActionDirectoryPath;\n\n const emitFetchOutcome = async (\n event: Extract<PluginActionEventType, 'FETCH_SUCCESS' | 'FETCH_FAILED'>,\n ): Promise<void> => {\n await emitActionEventForCurrentSession({\n event,\n directoryPath: fetchActionDirectoryPath,\n });\n };\n\n let publishedSkillsResult = await loadPublishedSkillCatalog({\n directory: requestedDirectory,\n useCache: !args.refresh,\n signal: context.abort,\n });\n\n if (publishedSkillsResult.fetchResult.ok) {\n await scheduleInteractivePresenceStart();\n }\n\n if (!publishedSkillsResult.fetchResult.ok && publishedSkillsResult.fetchResult.status === 'missing_auth') {\n try {\n await startLoginCompletion('fetch').then(async (authState) => {\n await schedulePresenceStart(authState);\n });\n publishedSkillsResult = await loadPublishedSkillCatalog({\n directory: requestedDirectory,\n useCache: false,\n signal: context.abort,\n });\n\n if (publishedSkillsResult.fetchResult.ok) {\n await scheduleInteractivePresenceStart();\n }\n } catch {\n // Return the original fetch failure with the latest login bootstrap snapshot attached.\n }\n }\n\n if (!publishedSkillsResult.fetchResult.ok) {\n await emitFetchOutcome('FETCH_FAILED');\n return toFetchFailureOutput({\n worktree: input.worktree,\n config,\n publishedSkillsResult,\n loginBootstrapSnapshot: loginBootstrap.snapshot,\n });\n }\n\n const filteredPublishedSkillsResult = await filterIgnoredPublishedSkills(config, publishedSkillsResult);\n if (!filteredPublishedSkillsResult.fetchResult.ok) {\n await emitFetchOutcome('FETCH_FAILED');\n return toFetchFailureOutput({\n worktree: input.worktree,\n config,\n publishedSkillsResult: filteredPublishedSkillsResult,\n loginBootstrapSnapshot: loginBootstrap.snapshot,\n });\n }\n\n const selection = selectPublishedSkills(filteredPublishedSkillsResult.fetchResult.payload, requestedSkills);\n const isSingleRequest = requestedSkills.length === 1;\n\n if (requestedSkills.length === 0) {\n const catalog = toPublishedSkillCatalog(filteredPublishedSkillsResult.fetchResult.payload);\n\n context.metadata({\n title: `opencode-wizard published skills catalog: ${catalog.publishedSkillCount} active`,\n metadata: {\n ...toWorkspaceResolutionMetadata(filteredPublishedSkillsResult.workspaceResolution),\n status: 'ready',\n publishedSkillCount: catalog.publishedSkillCount.toString(),\n globalAssignmentCount: catalog.assignmentCounts.global.toString(),\n projectAssignmentCount: catalog.assignmentCounts.project.toString(),\n userAssignmentCount: catalog.assignmentCounts.user.toString(),\n ignoredSkillCount: filteredPublishedSkillsResult.ignoreState.ignoredSkillSlugs.length.toString(),\n },\n });\n\n await emitFetchOutcome('FETCH_SUCCESS');\n\n return {\n output: JSON.stringify(\n {\n ...catalog,\n status: 'ready',\n requestedDirectoryPath: filteredPublishedSkillsResult.directoryPath,\n workspaceResolution: toWorkspaceResolutionOutput(filteredPublishedSkillsResult.workspaceResolution),\n ignoredPublishedSkills: {\n scopeKey: filteredPublishedSkillsResult.ignoreState.scopeKey,\n count: filteredPublishedSkillsResult.ignoreState.ignoredSkillSlugs.length,\n },\n fetchedAt: filteredPublishedSkillsResult.fetchResult.fetchedAt,\n source: filteredPublishedSkillsResult.fetchResult.source,\n message:\n 'Catalog discovery only. Provide `skill` or `skills` to fetch markdown bodies/details for selected skills.',\n },\n null,\n 2,\n ),\n metadata: {\n status: 'ready',\n ...toWorkspaceResolutionMetadata(filteredPublishedSkillsResult.workspaceResolution),\n publishedSkillCount: catalog.publishedSkillCount.toString(),\n globalAssignmentCount: catalog.assignmentCounts.global.toString(),\n projectAssignmentCount: catalog.assignmentCounts.project.toString(),\n userAssignmentCount: catalog.assignmentCounts.user.toString(),\n ignoredSkillCount: filteredPublishedSkillsResult.ignoreState.ignoredSkillSlugs.length.toString(),\n },\n };\n }\n\n if (selection.selectedItems.length === 0 && isSingleRequest) {\n await emitFetchOutcome('FETCH_FAILED');\n return {\n output: JSON.stringify(\n {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n status: 'not_found',\n requestedDirectoryPath: filteredPublishedSkillsResult.directoryPath,\n workspaceResolution: toWorkspaceResolutionOutput(filteredPublishedSkillsResult.workspaceResolution),\n requestedSkill: requestedSkills[0],\n availableSkills: filteredPublishedSkillsResult.fetchResult.payload.skills.map(toPublishedSkillSummary),\n ignoredPublishedSkills: {\n scopeKey: filteredPublishedSkillsResult.ignoreState.scopeKey,\n count: filteredPublishedSkillsResult.ignoreState.ignoredSkillSlugs.length,\n },\n },\n null,\n 2,\n ),\n metadata: {\n status: 'not_found',\n ...toWorkspaceResolutionMetadata(filteredPublishedSkillsResult.workspaceResolution),\n },\n };\n }\n\n let skillDetailResults = await Promise.all(\n selection.selectedItems.map((item) =>\n loadPublishedSkillDetail({\n workspaceResolution: filteredPublishedSkillsResult.workspaceResolution,\n item,\n signal: context.abort,\n useCache: !args.refresh,\n purpose: 'TOOL_FETCH',\n }),\n ),\n );\n\n if (skillDetailResults.some((result) => !result.ok && result.status === 'missing_auth')) {\n try {\n await startLoginCompletion('fetch').then(async (authState) => {\n await schedulePresenceStart(authState);\n });\n skillDetailResults = await Promise.all(\n selection.selectedItems.map((item) =>\n loadPublishedSkillDetail({\n workspaceResolution: filteredPublishedSkillsResult.workspaceResolution,\n item,\n signal: context.abort,\n useCache: false,\n purpose: 'TOOL_FETCH',\n }),\n ),\n );\n } catch {\n // Return the original detail failure after the login bootstrap attempt updates snapshot state.\n }\n }\n\n const failedSkillDetail = skillDetailResults.find((result) => !result.ok);\n\n if (failedSkillDetail && !failedSkillDetail.ok) {\n await emitFetchOutcome('FETCH_FAILED');\n return failedSkillDetail;\n }\n\n const skillDetails = skillDetailResults.map((result) => {\n if (!result.ok) {\n throw new Error('Published skill detail result unexpectedly missing after success guard.');\n }\n\n return result.detail;\n });\n\n if (isSingleRequest && skillDetails[0]) {\n const detail = skillDetails[0];\n\n context.metadata({\n title: `opencode-wizard published skill: ${detail.artifactName || detail.skillName}`,\n metadata: {\n ...toWorkspaceResolutionMetadata(filteredPublishedSkillsResult.workspaceResolution),\n skillSlug: detail.skillSlug,\n version: detail.version,\n },\n });\n\n await emitFetchOutcome('FETCH_SUCCESS');\n\n return {\n output: JSON.stringify(\n {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n requestedDirectoryPath: filteredPublishedSkillsResult.directoryPath,\n workspaceResolution: toWorkspaceResolutionOutput(filteredPublishedSkillsResult.workspaceResolution),\n workspace: filteredPublishedSkillsResult.fetchResult.payload.workspace,\n fetchedAt: filteredPublishedSkillsResult.fetchResult.fetchedAt,\n source: filteredPublishedSkillsResult.fetchResult.source,\n skill: detail,\n },\n null,\n 2,\n ),\n metadata: {\n status: 'ready',\n ...toWorkspaceResolutionMetadata(filteredPublishedSkillsResult.workspaceResolution),\n skillSlug: detail.skillSlug,\n },\n };\n }\n\n context.metadata({\n title: `opencode-wizard published skills fetch: ${skillDetails.length}`,\n metadata: {\n ...toWorkspaceResolutionMetadata(filteredPublishedSkillsResult.workspaceResolution),\n requestedCount: requestedSkills.length.toString(),\n matchedCount: skillDetails.length.toString(),\n },\n });\n\n await emitFetchOutcome('FETCH_SUCCESS');\n\n return {\n output: JSON.stringify(\n {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n requestedDirectoryPath: filteredPublishedSkillsResult.directoryPath,\n workspaceResolution: toWorkspaceResolutionOutput(filteredPublishedSkillsResult.workspaceResolution),\n workspace: filteredPublishedSkillsResult.fetchResult.payload.workspace,\n fetchedAt: filteredPublishedSkillsResult.fetchResult.fetchedAt,\n source: filteredPublishedSkillsResult.fetchResult.source,\n requestedSkills,\n missingSkills: selection.missingIdentifiers,\n skills: skillDetails,\n },\n null,\n 2,\n ),\n metadata: {\n status: selection.missingIdentifiers.length > 0 ? 'partial' : 'ready',\n ...toWorkspaceResolutionMetadata(filteredPublishedSkillsResult.workspaceResolution),\n matchedCount: skillDetails.length.toString(),\n },\n };\n };\n\n const executeStatusTool = async ({\n args,\n context,\n }: {\n args: PluginStatusArgs;\n context: ToolExecuteContext;\n }) => {\n const requestedDirectory = normalizeDirectoryArg(context.directory, args.directory);\n let snapshot = await resolvePluginStatusSnapshot({\n worktree: input.worktree,\n directory: requestedDirectory,\n signal: context.abort,\n });\n\n if (snapshot.status === 'missing_auth') {\n try {\n await startLoginCompletion('status').then(async (authState) => {\n await schedulePresenceStart(authState);\n });\n snapshot = await resolvePluginStatusSnapshot({\n worktree: input.worktree,\n directory: requestedDirectory,\n signal: context.abort,\n });\n } catch {\n // Keep returning the safe missing-auth snapshot when interactive login is cancelled or fails.\n }\n }\n\n const metadata = toPluginStatusMetadata(snapshot);\n\n context.metadata({\n title: `opencode-wizard status: ${snapshot.status} / auth ${snapshot.authState.status}`,\n metadata,\n });\n\n return {\n output: JSON.stringify(toAiFacingPluginStatusSnapshot(snapshot), null, 2),\n metadata,\n };\n };\n\n return {\n tool: {\n opencode_wizard_published_skills_fetch: tool<PublishedSkillFetchArgs>({\n description:\n 'Fetch one or multiple published skill bodies/details for the current scope; call with no args to discover the catalog and bootstrap auth when needed',\n args: {\n skill: tool.schema.string().optional().describe('Single skill slug, artifact name, or skill name'),\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 executePublishedSkillsFetchTool({\n args,\n context,\n });\n },\n }),\n opencode_wizard_status: tool<PluginStatusArgs>({\n description:\n 'Report opencode-wizard plugin status, bootstrap auth when missing, and return a safe auth summary 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 executeStatusTool({\n args,\n context,\n });\n },\n }),\n },\n 'experimental.chat.system.transform': async (_hookInput, output) => {\n let publishedSkillsResult = await loadPublishedSkillCatalog({\n directory: input.directory,\n useCache: true,\n signal: AbortSignal.timeout(5_000),\n });\n\n if (!publishedSkillsResult.fetchResult.ok && publishedSkillsResult.fetchResult.status === 'missing_auth') {\n try {\n await startLoginCompletion('status').then(async (authState) => {\n await schedulePresenceStart(authState);\n });\n publishedSkillsResult = await loadPublishedSkillCatalog({\n directory: input.directory,\n useCache: false,\n signal: AbortSignal.timeout(5_000),\n });\n } catch {\n const loginMessage = loginBootstrap.snapshot.message\n ? ` Last login status: ${loginBootstrap.snapshot.message}`\n : '';\n output.system.push(\n `opencode-wizard plugin stored auth is missing, expired, or rejected. Startup browser login was started but did not complete successfully.${loginMessage} Use opencode_wizard_status or opencode_wizard_published_skills_fetch to retry authentication when published skills are needed. No tokens are exposed.`,\n );\n return;\n }\n\n if (!publishedSkillsResult.fetchResult.ok) {\n output.system.push(\n `opencode-wizard plugin startup login completed, but published skills are still unavailable: ${publishedSkillsResult.fetchResult.message} No tokens are exposed.`,\n );\n return;\n }\n }\n\n const filteredPublishedSkillsResult = await filterIgnoredPublishedSkills(config, publishedSkillsResult);\n const details = await loadSystemNoteDetails({\n publishedSkillsResult: filteredPublishedSkillsResult,\n signal: AbortSignal.timeout(5_000),\n });\n const systemNote = buildSystemNote(filteredPublishedSkillsResult, config, details);\n\n if (!systemNote) return;\n\n output.system.push(systemNote);\n },\n };\n};\n\nexport default {\n id: PLUGIN_ID,\n server: OpencodeWizardSkillsPlugin,\n};\n"],"mappings":"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ACA;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;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,uCAAuC,GAAG;AAChD;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,4BAA4B,GAAG;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,gBAAgB,GAAIC,KAAa,IAAa;EAClD,MAAMC,YAAY,GAAGD,KAAK,CAACE,IAAI,CAAC,CAAC;EAEjC,IACGD,YAAY,CAACE,UAAU,CAAC,GAAG,CAAC,IAAIF,YAAY,CAACG,QAAQ,CAAC,GAAG,CAAC,IAC1DH,YAAY,CAACE,UAAU,CAAC,GAAG,CAAC,IAAIF,YAAY,CAACG,QAAQ,CAAC,GAAG,CAAE,EAC5D;IACA,OAAOH,YAAY,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAClC;EAEA,OAAOJ,YAAY;AACrB,CAAC;AAED,MAAMK,WAAW,GAAIC,GAAW,IAA0B;EACxD,MAAMC,MAAM,GAAG,IAAIC,GAAG,CAAiB,CA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","ignoreList":[]}
1
+ {"version":3,"names":["fs","http","os","path","crypto","execFile","promisify","URL","fileURLToPath","resolveBackendOriginFromValues","deleteFileIfExists","readJsonFile","writePrivateJsonFile","execFileAsync","MODULE_FILE_PATH","import","meta","url","PACKAGE_ROOT_PATH","resolve","dirname","PLUGIN_ID","CACHE_TTL_MS","ROOT_SKILL_SEED_PATH","GLOBAL_CONFIG_PATH","join","homedir","LEGACY_AUTH_STATE_PATH","OIDC_ISSUER","OIDC_CLIENT_ID","OIDC_CALLBACK_ORIGIN","OIDC_CALLBACK_PATH","OIDC_CALLBACK_URL","OIDC_SCOPES","LOGIN_TIMEOUT_MS","SYSTEM_NOTE_SKILL_NAME_LIMIT","SYSTEM_NOTE_DETAIL_LIMIT","SYSTEM_NOTE_DETAIL_CHAR_LIMIT","SYSTEM_NOTE_SKILL_DESCRIPTION_LIMIT","PRESENCE_EVENT_TIMEOUT_MS","PRESENCE_EVENT_MAX_ATTEMPTS","PRESENCE_EVENT_RETRY_DELAY_MS","PRESENCE_SHUTDOWN_SIGNALS","PRESENCE_SIGNAL_EXIT_CODES","SIGINT","SIGTERM","SIGHUP","createIdleLoginBootstrapSnapshot","status","trigger","startedAt","expiresAt","browserUrl","browserOpenError","email","message","STATUS_PATH_LOGIN_RETRY_COOLDOWN_MS","statusPathLoginBootstrap","promise","failedAt","importOpencodePluginModule","Function","AVAILABLE_PUBLISHED_SKILL_TOOLS","publishedSkillPreferenceCacheVersion","NATIVE_SKILLS_URL_COMPATIBILITY","configKey","deliveryMode","wizardPrivateDelivery","authSupport","guidance","PUBLISHED_SKILLS_CATALOG_QUERY","SET_PUBLISHED_SKILL_PREFERENCE_MUTATION","PUBLISHED_SKILL_DETAIL_QUERY","parseDotEnvValue","value","trimmedValue","trim","startsWith","endsWith","slice","parseDotEnv","raw","values","Map","line","split","trimmedLine","separatorIndex","indexOf","key","rawValue","set","findUpwardFile","startDirectory","fileName","currentDirectory","normalizeAbsolutePath","candidatePath","access","parentDirectory","readLocalEnvValues","envPath","readFile","resolveBackendOrigin","worktree","envValues","environmentBackendOrigin","process","env","OPENCODE_WIZARD_BACKEND_ORIGIN","localBackendOrigin","get","toWorkspaceSlug","normalized","toLowerCase","replace","resolveFallbackWorkspaceSlug","configuredWorkspaceSlug","OPENCODE_WIZARD_SKILLS_WORKSPACE_SLUG","basename","resolveConfig","backendOrigin","graphqlUrl","authSessionUrl","presenceUrl","actionsUrl","fallbackWorkspaceSlug","rootSkillSeedPath","authStatePath","normalizeRepositoryPath","directory","absoluteWorktree","absoluteDirectory","relativePath","relative","isAbsolute","sep","tryExecGit","args","stdout","encoding","normalizedOutput","resolveGitRoot","gitRoot","normalizeGitRemoteUrl","remoteUrl","trimmedRemoteUrl","scpLikeMatch","exec","parsedUrl","toString","resolveGitRemoteOriginUrl","repositoryRoot","resolveWorkspace","config","requestedDirectory","repositoryUrl","directoryPath","workspaceIdentity","cacheKey","JSON","stringify","toDeliveryInput","resolution","workspaceSlug","formatSkillLabel","item","artifactName","publishedArtifact","frontmatterName","length","skill","name","toFrontmatterString","isRecord","Array","isArray","isValidIsoDateString","Number","isFinite","Date","parse","isAuthState","pluginId","sessionToken","authenticatedAt","userId","readGlobalConfig","configFile","storedConfig","writeGlobalConfig","withoutLegacyPublishedSkillPreferences","publishedSkillPreferences","ignoredPublishedSkills","safeConfig","hasLegacyPublishedSkillPreferences","Object","prototype","hasOwnProperty","call","readGlobalAuthState","storedAuthState","auth","undefined","readLegacyAuthState","authStateFile","writeAuthState","authState","clearAuthState","toIgnoredSkillSlug","getPublishedSkillIgnoreScopeKey","payload","workspace","slug","toStoredUserKey","resolvePublishedSkillPreferenceCacheContext","userKey","preferenceVersion","getCatalogCacheKey","workspaceResolution","preferenceContext","toAuthState","session","jwtToken","toISOString","user","id","resolveStoredAuthState","now","legacyAuthStateFile","legacyAuthState","buildSkillMarkdown","artifactBody","markdownBody","fallbackBody","renderedContent","body","description","frontmatterDescription","summary","frontmatter","getSkillIdentifiers","candidates","seen","Set","reduce","all","candidate","has","add","push","toPublishedSkillFacetSummary","facet","label","toPublishedSkillTagSummary","tag","getPublishedSkillFacets","items","facetsBySlug","tags","sort","left","right","localeCompare","isUserPublishedSkillAssignment","assignmentSource","getPublishedSkillAssignmentLabel","toUpperCase","getPublishedSkillAssignmentCounts","counts","global","project","other","getSkillContextKind","getSkillPolicyLabel","policy","contextKind","toPublishedSkillSummary","skillSlug","skillName","artifactDescription","whenToUse","version","skillVersion","assignmentType","scopePath","includeChildren","checksum","publishedAt","fileCount","identifiers","map","installPolicy","assignmentLabel","policyLabel","toPublishedSkillDetail","skillId","skillVersionId","artifactId","markdownDocument","files","resources","filter","file","toInstallableSkillSummary","toPublishedSkillCatalog","runtimeMode","deliveryModel","availableTools","publishedSkillCount","skills","assignmentCounts","facets","filterIgnoredPublishedSkills","result","fetchResult","ok","ignoreState","scopeKey","ignoredSkillSlugs","installedGlobalSkillSlugs","installedWorkspaceSkillSlugs","ignoredSkills","userPreferences","getWorkspaceUnavailableMessage","normalizeSkillIdentifier","parseSkillIdentifiers","mergeSkillIdentifiers","parseRequestedSkillArgs","requestedSkills","selectPublishedSkills","itemsByIdentifier","identifier","selectedItems","selectedKeys","missingIdentifiers","matched","truncateText","maxLength","Math","max","trimEnd","buildSkillCatalogLine","scopeLabel","buildSkillDetailSnippetLine","detail","buildSystemNote","details","catalog","skillNames","renderedSkillNames","remainingCount","renderedCountSuffix","globalSkills","projectSkills","userSkills","detailLines","detailBlock","toWorkspaceResolutionOutput","toWorkspaceResolutionMetadata","formatStatusOutput","publishedSkillsResult","loginBootstrapSnapshot","filteredResult","base","nativeSkillsUrlCompatibility","requestedDirectoryPath","authMode","loginBootstrap","fetchedAt","source","count","toPluginAuthStateSummary","resolvePluginStatusSnapshot","signal","fetchPublishedSkillsCatalog","installableCatalog","catalogSkills","withStatusMessage","snapshot","toAiFacingPluginStatusSnapshot","_installableCatalog","safeSnapshot","startStatusPathLoginBootstrap","loginSignal","AbortSignal","timeout","loginStart","startLoginFlow","openBrowser","callbackPayload","callbackPromise","Error","state","expectedState","pluginSession","createPluginSession","code","codeVerifier","redirectUri","closeCallbackServer","catch","error","finally","resolvePluginStatusSnapshotWithAuthBootstrap","toBackendPreferenceScope","preferenceScope","setPublishedSkillPreference","installed","ignored","response","fetchPublishedSkillsGraphQl","query","variables","input","preferences","data","setPublishedSkillIgnored","normalizedSkillSlug","setPublishedSkillInstalled","toPluginStatusMetadata","pluginStatus","authStatus","authEmail","authUserId","isUnauthorizedGraphQlMessage","normalizedMessage","includes","createRandomBase64Url","bytes","randomBytes","createCodeChallenge","createHash","update","digest","getMessageFromUnknownPayload","wait","milliseconds","Promise","setTimeout","shouldRetryPresenceEvent","fetchOidcDiscoveryDocument","discoveryUrl","fetch","method","json","isCallbackPortInUseError","toCallbackServerStartError","escapeHtml","character","replacements","sendHtmlResponse","statusCode","title","escapedTitle","escapedMessage","isSuccess","pageState","cardTitle","escapedCardTitle","eyebrow","actionText","autoCloseScript","stateIcon","writeHead","end","startLocalCallbackServer","settled","resolvePayload","rejectPayload","reject","finalize","fail","reason","server","createServer","request","requestUrl","pathname","searchParams","errorDescription","close","rejectStart","once","listen","off","on","addEventListener","onAuthStateChanged","headers","authorization","errors","some","pluginPublishedSkills","fetchPublishedSkillDetail","purpose","artifact","pluginPublishedSkillVersionArtifact","toFetchFailureOutput","output","metadata","discovery","codeChallenge","authorization_endpoint","success","emitPresenceEvent","event","workspacePath","attempt","occurredAt","keepalive","emitPluginActionEvent","platform","normalizeDirectoryArg","contextDirectory","getDetailCacheKey","catalogCacheKey","getDetailInflightKey","OpencodeWizardSkillsPlugin","tool","cache","catalogInflight","detailCache","detailInflight","initialAuthState","lastAuthenticatedAuthState","didEmitStart","didScheduleStop","presenceStartPromise","presenceStopPromise","lastInteractiveDirectoryPath","resolveActionAuthState","emitActionEventForCurrentSession","schedulePresenceStart","then","schedulePresenceStop","scheduleInteractivePresenceStart","shutdownSignal","exit","clearPublishedSkillState","clear","persistAuthState","startLoginCompletion","loginPromise","loadPublishedSkillCatalog","useCache","cached","inflight","requestPromise","delete","loadPublishedSkillDetail","inflightKey","detailResult","requestedSkillVersionId","loadSystemNoteDetails","prioritizedItems","leftSummary","rightSummary","detailResults","executePublishedSkillsFetchTool","context","fetchActionDirectoryPath","emitFetchOutcome","refresh","abort","filteredPublishedSkillsResult","selection","isSingleRequest","globalAssignmentCount","projectAssignmentCount","userAssignmentCount","ignoredSkillCount","requestedSkill","availableSkills","skillDetailResults","failedSkillDetail","find","skillDetails","requestedCount","matchedCount","missingSkills","executeStatusTool","opencode_wizard_published_skills_fetch","schema","string","optional","describe","boolean","execute","opencode_wizard_status","experimental.chat.system.transform","_hookInput","loginMessage","system","systemNote"],"sources":["../src/server.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport http from 'node:http';\nimport os from 'node:os';\nimport path from 'node:path';\nimport crypto from 'node:crypto';\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { URL, fileURLToPath } from 'node:url';\nimport { resolveBackendOriginFromValues } from './config.js';\nimport { deleteFileIfExists, readJsonFile, writePrivateJsonFile } from './storage.js';\n\nconst execFileAsync = promisify(execFile);\nconst MODULE_FILE_PATH = fileURLToPath(import.meta.url);\nconst PACKAGE_ROOT_PATH = path.resolve(path.dirname(MODULE_FILE_PATH), '..');\n\nexport const PLUGIN_ID = 'opencode-wizard';\nconst CACHE_TTL_MS = 30_000;\nconst ROOT_SKILL_SEED_PATH = '.opencode/skills';\nconst GLOBAL_CONFIG_PATH = path.join(os.homedir(), '.config', 'opencode', 'opencode-wizard.json');\nconst LEGACY_AUTH_STATE_PATH = 'plugin/opencode-wizard/.generated/auth-state.json';\nconst OIDC_ISSUER = 'https://login.microsoftonline.com/86f4caf4-0d6f-4682-9a06-ea57f3e4e76c/v2.0';\nconst OIDC_CLIENT_ID = 'da963901-2375-442b-9e99-14e59f43eda2';\nconst OIDC_CALLBACK_ORIGIN = 'http://localhost:24953';\nconst OIDC_CALLBACK_PATH = '/oauth/callback';\nconst OIDC_CALLBACK_URL = `${OIDC_CALLBACK_ORIGIN}${OIDC_CALLBACK_PATH}`;\nconst OIDC_SCOPES = ['openid', 'profile', 'email'];\nconst LOGIN_TIMEOUT_MS = 5 * 60_000;\nconst SYSTEM_NOTE_SKILL_NAME_LIMIT = 10;\nconst SYSTEM_NOTE_DETAIL_LIMIT = 3;\nconst SYSTEM_NOTE_DETAIL_CHAR_LIMIT = 2_400;\nconst SYSTEM_NOTE_SKILL_DESCRIPTION_LIMIT = 140;\nconst PRESENCE_EVENT_TIMEOUT_MS = 3_000;\nconst PRESENCE_EVENT_MAX_ATTEMPTS = 2;\nconst PRESENCE_EVENT_RETRY_DELAY_MS = 250;\nconst PRESENCE_SHUTDOWN_SIGNALS = ['SIGINT', 'SIGTERM', 'SIGHUP'] as const satisfies readonly NodeJS.Signals[];\nconst PRESENCE_SIGNAL_EXIT_CODES: Record<(typeof PRESENCE_SHUTDOWN_SIGNALS)[number], number> = {\n SIGINT: 130,\n SIGTERM: 143,\n SIGHUP: 129,\n};\n\ntype ResolvedConfig = {\n backendOrigin: string;\n graphqlUrl: string;\n authSessionUrl: string;\n presenceUrl: string;\n actionsUrl: string;\n fallbackWorkspaceSlug: string;\n rootSkillSeedPath: string;\n authStatePath: string;\n};\n\ntype WorkspaceResolution = {\n requestedDirectory: string;\n repositoryRoot: string;\n repositoryUrl: string | null;\n fallbackWorkspaceSlug: string | null;\n directoryPath: string;\n cacheKey: string;\n};\n\ntype PublishedSkillCatalogResponse = {\n pluginPublishedSkills: PublishedSkillCatalogPayload;\n};\n\ntype PublishedSkillDetailResponse = {\n pluginPublishedSkillVersionArtifact: PublishedSkillArtifactDetailPayload | null;\n};\n\nexport type PublishedSkillCatalogPayload = {\n workspace: {\n id: string;\n slug: string;\n name: string;\n repositoryUrl?: string | null;\n defaultBranch?: string | null;\n status: string;\n } | null;\n directoryPath: string;\n skills: PublishedSkillCatalogItem[];\n catalogSkills: PublishedSkillInstallableCatalogItem[];\n userPreferences: PublishedSkillUserPreferences;\n};\n\ntype PublishedSkillUserPreferences = {\n scopeKey: string;\n userKey: string;\n ignoredSkills: PublishedSkillCatalogItem[];\n};\n\ntype PublishedSkillPreferenceScope = 'GLOBAL' | 'WORKSPACE';\n\ntype SetPublishedSkillPreferenceResponse = {\n setPublishedSkillPreference: PublishedSkillUserPreferences;\n};\n\nexport type PublishedSkillInstallableCatalogItem = Pick<\n PublishedSkillCatalogItem,\n 'skill' | 'skillVersion' | 'publishedArtifact'\n>;\n\nexport type PublishedSkillCatalogItem = {\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren?: boolean | null;\n skill: {\n id: string;\n slug: string;\n name: string;\n summary?: string | null;\n whenToUse?: string | null;\n status: string;\n installPolicy: PublishedSkillInstallPolicy;\n tags: PublishedSkillTag[];\n };\n skillVersion: {\n id: string;\n version: string;\n title?: string | null;\n summary?: string | null;\n status: string;\n };\n publishedArtifact: {\n id: string;\n frontmatterName: string;\n frontmatterDescription: string;\n checksum: string;\n publishedAt: string;\n fileCount: number;\n };\n};\n\ntype PublishedSkillArtifactFilePayload = {\n id: string;\n relativePath: string;\n contentType: string;\n content: string;\n checksum: string;\n size: number;\n sortOrder: number;\n};\n\ntype PublishedSkillFacet = {\n id: string;\n slug: string;\n label: string;\n description?: string | null;\n};\n\ntype PublishedSkillTag = {\n id: string;\n slug: string;\n label: string;\n description?: string | null;\n facet?: PublishedSkillFacet | null;\n};\n\ntype PublishedSkillFacetSummary = {\n slug: string;\n label: string;\n description: string | null;\n};\n\ntype PublishedSkillTagSummary = {\n slug: string;\n label: string;\n description: string | null;\n facet: PublishedSkillFacetSummary | null;\n};\n\ntype PublishedSkillInstallPolicy = 'GLOBAL_CONTEXT' | 'PROJECT_INSTALLABLE';\n\nexport type PublishedSkillDetailItem = PublishedSkillCatalogItem & {\n publishedArtifact: PublishedSkillCatalogItem['publishedArtifact'] & {\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFilePayload[];\n };\n};\n\ntype PublishedSkillArtifactDetailPayload = PublishedSkillCatalogItem['publishedArtifact'] & {\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFilePayload[];\n};\n\ntype PublishedSkillArtifactDetailPurpose = 'TOOL_FETCH' | 'SYSTEM_CONTEXT';\n\ntype GraphQLErrorItem = {\n message: string;\n};\n\ntype GraphQLResponse<TData> = {\n data?: TData;\n errors?: GraphQLErrorItem[];\n};\n\ntype AuthState = {\n pluginId: string;\n sessionToken: string;\n expiresAt: string;\n authenticatedAt: string;\n userId: string;\n email: string;\n};\n\ntype PresenceEventType = 'START' | 'STOP';\n\ntype PluginActionEventType = PresenceEventType | 'FETCH_SUCCESS' | 'FETCH_FAILED' | 'LOGIN_SUCCESS' | 'LOGIN_FAILED';\n\ntype LoginBootstrapTrigger = 'fetch' | 'status';\n\ntype LoginBootstrapSnapshot = {\n status: 'idle' | 'starting' | 'pending' | 'authenticated' | 'failed';\n trigger: LoginBootstrapTrigger | null;\n startedAt: string | null;\n expiresAt: string | null;\n browserUrl: string | null;\n browserOpenError: string | null;\n email: string | null;\n message: string | null;\n};\n\ntype StatusPathLoginBootstrap = {\n promise: Promise<AuthState> | null;\n status: 'idle' | 'pending' | 'authenticated' | 'failed';\n message: string | null;\n failedAt: number | null;\n};\n\nconst createIdleLoginBootstrapSnapshot = (): LoginBootstrapSnapshot => ({\n status: 'idle',\n trigger: null,\n startedAt: null,\n expiresAt: null,\n browserUrl: null,\n browserOpenError: null,\n email: null,\n message: null,\n});\n\nconst STATUS_PATH_LOGIN_RETRY_COOLDOWN_MS = 60_000;\n\nconst statusPathLoginBootstrap: StatusPathLoginBootstrap = {\n promise: null,\n status: 'idle',\n message: null,\n failedAt: null,\n};\n\ntype FetchResult =\n | {\n ok: true;\n status: 'ready';\n authMode: 'session';\n payload: PublishedSkillCatalogPayload;\n fetchedAt: string;\n source: 'network' | 'cache';\n }\n | {\n ok: false;\n status: 'missing_auth' | 'request_failed';\n authMode: 'missing' | 'session';\n message: string;\n fetchedAt: string;\n source: 'network' | 'cache';\n };\n\ntype CacheEntry = {\n result: FetchResult;\n expiresAt: number;\n};\n\ntype DetailCacheEntry = {\n artifact: PublishedSkillArtifactDetailPayload;\n expiresAt: number;\n};\n\ntype PublishedSkillSummary = {\n skillSlug: string;\n skillName: string;\n artifactName: string;\n artifactDescription: string;\n whenToUse: string | null;\n version: string;\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren: boolean | null;\n checksum: string;\n publishedAt: string;\n fileCount: number;\n identifiers: string[];\n tags: PublishedSkillTagSummary[];\n contextKind: 'global' | 'project' | 'installable';\n installPolicy: PublishedSkillInstallPolicy;\n assignmentLabel: string;\n policyLabel: string;\n};\n\ntype PublishedSkillDetail = PublishedSkillSummary & {\n skillId: string;\n skillVersionId: string;\n artifactId: string;\n markdownDocument: string;\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFilePayload[];\n resources: PublishedSkillArtifactFilePayload[];\n};\n\nexport type PublishedSkillFetchArgs = {\n skill?: string;\n skills?: string;\n directory?: string;\n refresh?: boolean;\n};\n\ntype PluginStatusArgs = {\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\ntype 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\ntype ToolFactory = (<TArgs extends object>(definition: ToolDefinition<TArgs>) => unknown) & {\n schema: ToolSchema;\n};\n\ntype OpencodePluginModule = {\n tool: ToolFactory;\n};\n\ntype OpencodePluginServerInput = {\n worktree: string;\n directory: string;\n};\n\ntype OpencodePluginSystemTransformOutput = {\n system: string[];\n};\n\ntype OpencodePluginServer = (input: OpencodePluginServerInput) => Promise<{\n tool: Record<string, unknown>;\n 'experimental.chat.system.transform': (\n hookInput: unknown,\n output: OpencodePluginSystemTransformOutput,\n ) => Promise<void>;\n}>;\n\nconst importOpencodePluginModule = new Function('specifier', 'return import(specifier)') as (\n specifier: string,\n) => Promise<OpencodePluginModule>;\n\ntype PublishedSkillsSuccessState = {\n pluginId: string;\n runtimeMode: 'tool_fetch_only';\n deliveryModel: 'backend_published_installed_effective_skills';\n workspace: PublishedSkillCatalogPayload['workspace'];\n directoryPath: string;\n rootSkillSeedPath: string;\n availableTools: string[];\n publishedSkillCount: number;\n assignmentCounts: {\n global: number;\n project: number;\n user: number;\n other: number;\n };\n facets: PublishedSkillFacetSummary[];\n skills: PublishedSkillSummary[];\n};\n\nexport const AVAILABLE_PUBLISHED_SKILL_TOOLS = ['opencode_wizard_published_skills_fetch', 'opencode_wizard_status'];\nlet publishedSkillPreferenceCacheVersion = 0;\n\nexport type NativeSkillsUrlCompatibility = {\n configKey: 'skills.urls';\n deliveryMode: 'public_static_registry';\n wizardPrivateDelivery: 'authenticated_scoped_fetch_tool';\n authSupport: 'none';\n guidance: string;\n};\n\nexport const NATIVE_SKILLS_URL_COMPATIBILITY: NativeSkillsUrlCompatibility = {\n configKey: 'skills.urls',\n deliveryMode: 'public_static_registry',\n wizardPrivateDelivery: 'authenticated_scoped_fetch_tool',\n authSupport: 'none',\n guidance:\n 'OpenCode skills.urls is for public/static registries and complements opencode-wizard; private workspace-scoped skills stay available through the authenticated fetch tool only.',\n};\n\ntype PublishedSkillsResult = {\n directoryPath: string;\n workspaceResolution: WorkspaceResolution;\n fetchResult: FetchResult;\n};\n\ntype PublishedSkillsIgnoreState = {\n scopeKey: string;\n userKey: string;\n ignoredSkillSlugs: string[];\n installedGlobalSkillSlugs: string[];\n installedWorkspaceSkillSlugs: string[];\n};\n\ntype PublishedSkillPreferenceCacheContext = {\n userKey: string;\n preferenceVersion: number;\n};\n\ntype FilteredPublishedSkillsResult = PublishedSkillsResult & {\n ignoreState: PublishedSkillsIgnoreState;\n ignoredSkills: PublishedSkillSummary[];\n};\n\ntype PublishedSkillDetailResult =\n | {\n ok: true;\n detail: PublishedSkillDetail;\n }\n | {\n ok: false;\n status: 'not_found' | 'missing_auth' | 'request_failed';\n output: string;\n metadata: Record<string, string>;\n };\n\nexport type PluginAuthStateSummary = {\n status: 'missing' | 'authenticated';\n email: string | null;\n userId: string | null;\n authenticatedAt: string | null;\n expiresAt: string | null;\n};\n\nexport type PluginStatusSnapshot = {\n pluginId: string;\n runtimeMode: 'tool_fetch_only';\n nativeSkillsUrlCompatibility: NativeSkillsUrlCompatibility;\n backendOrigin: string;\n graphqlUrl: string;\n fallbackWorkspaceSlug: string;\n workspaceResolution: ReturnType<typeof toWorkspaceResolutionOutput>;\n rootSkillSeedPath: string;\n authStatePath: string;\n authState: PluginAuthStateSummary;\n status: FetchResult['status'];\n authMode: FetchResult['authMode'];\n fetchedAt: string;\n source: FetchResult['source'];\n availableTools: typeof AVAILABLE_PUBLISHED_SKILL_TOOLS;\n message: string | null;\n catalog: PublishedSkillsSuccessState | null;\n installableCatalog: {\n count: number;\n skills: PublishedSkillSummary[];\n } | null;\n ignoredPublishedSkills: {\n scopeKey: string;\n userKey: string;\n count: number;\n skills: PublishedSkillSummary[];\n };\n};\n\ntype AiFacingIgnoredPublishedSkillsSummary = {\n scopeKey: string;\n count: number;\n};\n\ntype AiFacingPluginStatusSnapshot = Omit<PluginStatusSnapshot, 'ignoredPublishedSkills' | 'installableCatalog'> & {\n ignoredPublishedSkills: AiFacingIgnoredPublishedSkillsSummary;\n};\n\ntype OidcDiscoveryDocument = {\n authorization_endpoint: string;\n};\n\ntype PluginSessionResponse = {\n success: true;\n session: {\n jwtToken: string;\n expiresAt: string;\n user: {\n id: string;\n email: string;\n };\n };\n};\n\ntype OidcCallbackPayload =\n | {\n status: 'success';\n code: string;\n state: string;\n }\n | {\n status: 'error';\n message: string;\n };\n\ntype OidcLoginStart = {\n browserUrl: string;\n expiresAt: string;\n codeVerifier: string;\n expectedState: string;\n callbackPromise: Promise<OidcCallbackPayload>;\n closeCallbackServer: () => Promise<void>;\n};\n\nconst 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 assignmentSource\n assignmentType\n scopePath\n includeChildren\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 catalogSkills {\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 userPreferences {\n scopeKey\n userKey\n ignoredSkills {\n assignmentSource\n assignmentType\n scopePath\n includeChildren\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 }\n }\n }\n`;\n\nconst SET_PUBLISHED_SKILL_PREFERENCE_MUTATION = `\n mutation SetPublishedSkillPreference($input: SetPublishedSkillPreferenceInput!) {\n setPublishedSkillPreference(input: $input) {\n scopeKey\n userKey\n ignoredSkills {\n assignmentSource\n assignmentType\n scopePath\n includeChildren\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 }\n }\n`;\n\nconst 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 parseDotEnvValue = (value: string): string => {\n const trimmedValue = value.trim();\n\n if (\n (trimmedValue.startsWith('\"') && trimmedValue.endsWith('\"')) ||\n (trimmedValue.startsWith(\"'\") && trimmedValue.endsWith(\"'\"))\n ) {\n return trimmedValue.slice(1, -1);\n }\n\n return trimmedValue;\n};\n\nconst parseDotEnv = (raw: string): Map<string, string> => {\n const values = new Map<string, string>();\n\n for (const line of raw.split(/\\r?\\n/u)) {\n const trimmedLine = line.trim();\n if (!trimmedLine || trimmedLine.startsWith('#')) continue;\n\n const separatorIndex = trimmedLine.indexOf('=');\n if (separatorIndex <= 0) continue;\n\n const key = trimmedLine.slice(0, separatorIndex).trim();\n if (!key) continue;\n\n const rawValue = trimmedLine.slice(separatorIndex + 1);\n values.set(key, parseDotEnvValue(rawValue));\n }\n\n return values;\n};\n\nconst findUpwardFile = async (startDirectory: string, fileName: string): Promise<string | null> => {\n let currentDirectory = normalizeAbsolutePath(startDirectory);\n\n while (true) {\n const candidatePath = path.join(currentDirectory, fileName);\n\n try {\n await fs.access(candidatePath);\n return candidatePath;\n } catch {\n const parentDirectory = path.dirname(currentDirectory);\n if (parentDirectory === currentDirectory) return null;\n currentDirectory = parentDirectory;\n }\n }\n};\n\nconst readLocalEnvValues = async (startDirectory: string): Promise<Map<string, string>> => {\n const envPath = await findUpwardFile(startDirectory, '.env');\n if (!envPath) return new Map<string, string>();\n\n try {\n const raw = await fs.readFile(envPath, 'utf8');\n return parseDotEnv(raw);\n } catch {\n return new Map<string, string>();\n }\n};\n\nconst resolveBackendOrigin = async (worktree: string): Promise<string> => {\n const envValues = await readLocalEnvValues(worktree);\n\n return resolveBackendOriginFromValues({\n environmentBackendOrigin: process.env.OPENCODE_WIZARD_BACKEND_ORIGIN,\n localBackendOrigin: envValues.get('OPENCODE_WIZARD_BACKEND_ORIGIN'),\n });\n};\n\nconst toWorkspaceSlug = (value: string): string => {\n const normalized = value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]+/gu, '-')\n .replace(/^-+|-+$/gu, '');\n\n if (normalized) return normalized;\n return 'workspace';\n};\n\nconst resolveFallbackWorkspaceSlug = (worktree: string): string => {\n const configuredWorkspaceSlug = process.env.OPENCODE_WIZARD_SKILLS_WORKSPACE_SLUG?.trim();\n if (configuredWorkspaceSlug) return toWorkspaceSlug(configuredWorkspaceSlug);\n return toWorkspaceSlug(path.basename(path.resolve(worktree)));\n};\n\nexport const resolveConfig = async (worktree: string): Promise<ResolvedConfig> => {\n const backendOrigin = await resolveBackendOrigin(worktree);\n\n return {\n backendOrigin,\n graphqlUrl: `${backendOrigin}/graphql`,\n authSessionUrl: `${backendOrigin}/api/opencode-plugin/oauth/session`,\n presenceUrl: `${backendOrigin}/api/opencode-plugin/presence`,\n actionsUrl: `${backendOrigin}/api/opencode-plugin/actions`,\n fallbackWorkspaceSlug: resolveFallbackWorkspaceSlug(worktree),\n rootSkillSeedPath: ROOT_SKILL_SEED_PATH,\n authStatePath: GLOBAL_CONFIG_PATH,\n };\n};\n\nconst normalizeAbsolutePath = (value: string): string => path.resolve(value);\n\nconst normalizeRepositoryPath = (worktree: string, directory: string): string => {\n const absoluteWorktree = normalizeAbsolutePath(worktree);\n const absoluteDirectory = normalizeAbsolutePath(directory);\n const relativePath = path.relative(absoluteWorktree, absoluteDirectory);\n\n if (!relativePath || relativePath === '') return '.';\n if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) return '.';\n\n return relativePath.split(path.sep).join('/');\n};\n\nconst tryExecGit = async (args: string[]): Promise<string | null> => {\n try {\n const { stdout } = await execFileAsync('git', args, {\n encoding: 'utf8',\n });\n const normalizedOutput = stdout.trim();\n if (normalizedOutput) return normalizedOutput;\n return null;\n } catch {\n return null;\n }\n};\n\nconst resolveGitRoot = async (directory: string): Promise<string | null> => {\n const gitRoot = await tryExecGit(['-C', directory, 'rev-parse', '--show-toplevel']);\n if (!gitRoot) return null;\n return normalizeAbsolutePath(gitRoot);\n};\n\nconst normalizeGitRemoteUrl = (remoteUrl: string | null): string | null => {\n if (!remoteUrl) return null;\n\n const trimmedRemoteUrl = remoteUrl.trim();\n if (!trimmedRemoteUrl) return null;\n\n const scpLikeMatch = /^git@([^:]+):(.+)$/u.exec(trimmedRemoteUrl);\n if (scpLikeMatch) {\n return `ssh://git@${scpLikeMatch[1]}/${scpLikeMatch[2].replace(/^\\/+/, '')}`;\n }\n\n try {\n const parsedUrl = new URL(trimmedRemoteUrl);\n return parsedUrl.toString().replace(/\\/+$/u, '');\n } catch {\n return null;\n }\n};\n\nconst resolveGitRemoteOriginUrl = async (repositoryRoot: string): Promise<string | null> => {\n const remoteUrl = await tryExecGit(['-C', repositoryRoot, 'remote', 'get-url', 'origin']);\n return normalizeGitRemoteUrl(remoteUrl);\n};\n\nconst resolveWorkspace = async ({\n config,\n directory,\n}: {\n config: ResolvedConfig;\n directory: string;\n}): Promise<WorkspaceResolution> => {\n const requestedDirectory = normalizeAbsolutePath(directory);\n const gitRoot = await resolveGitRoot(requestedDirectory);\n const repositoryRoot = gitRoot ?? requestedDirectory;\n const repositoryUrl = gitRoot ? await resolveGitRemoteOriginUrl(gitRoot) : null;\n const fallbackWorkspaceSlug = config.fallbackWorkspaceSlug;\n const directoryPath = normalizeRepositoryPath(repositoryRoot, requestedDirectory);\n const workspaceIdentity = `workspaceSlug:${fallbackWorkspaceSlug}`;\n\n return {\n requestedDirectory,\n repositoryRoot,\n repositoryUrl,\n fallbackWorkspaceSlug,\n directoryPath,\n cacheKey: JSON.stringify([workspaceIdentity, directoryPath]),\n };\n};\n\nconst toDeliveryInput = (resolution: WorkspaceResolution): Record<string, string> => {\n if (resolution.fallbackWorkspaceSlug) {\n return {\n workspaceSlug: resolution.fallbackWorkspaceSlug,\n directoryPath: resolution.directoryPath,\n };\n }\n\n if (resolution.repositoryUrl) {\n return {\n repositoryUrl: resolution.repositoryUrl,\n directoryPath: resolution.directoryPath,\n };\n }\n\n return {\n workspaceSlug: 'workspace',\n directoryPath: resolution.directoryPath,\n };\n};\n\nconst formatSkillLabel = (item: PublishedSkillCatalogItem): string => {\n const artifactName = item.publishedArtifact.frontmatterName.trim();\n if (artifactName.length > 0) return artifactName;\n return item.skill.name;\n};\n\nconst toFrontmatterString = (value: string): string => JSON.stringify(value);\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n};\n\nconst isValidIsoDateString = (value: unknown): value is string => {\n return typeof value === 'string' && Number.isFinite(Date.parse(value));\n};\n\nconst isAuthState = (value: unknown): value is AuthState => {\n if (!isRecord(value)) return false;\n\n return (\n value.pluginId === PLUGIN_ID &&\n typeof value.sessionToken === 'string' &&\n isValidIsoDateString(value.expiresAt) &&\n isValidIsoDateString(value.authenticatedAt) &&\n typeof value.userId === 'string' &&\n typeof value.email === 'string'\n );\n};\n\nconst readGlobalConfig = async (configFile: string): Promise<Record<string, unknown>> => {\n const storedConfig = await readJsonFile(configFile);\n if (isRecord(storedConfig)) return storedConfig;\n return {};\n};\n\nconst writeGlobalConfig = async (configFile: string, config: Record<string, unknown>) => {\n await writePrivateJsonFile(configFile, config);\n};\n\nconst withoutLegacyPublishedSkillPreferences = (config: Record<string, unknown>): Record<string, unknown> => {\n const { publishedSkillPreferences, ignoredPublishedSkills, ...safeConfig } = config;\n void publishedSkillPreferences;\n void ignoredPublishedSkills;\n return safeConfig;\n};\n\nconst hasLegacyPublishedSkillPreferences = (config: Record<string, unknown>): boolean => {\n return (\n Object.prototype.hasOwnProperty.call(config, 'publishedSkillPreferences') ||\n Object.prototype.hasOwnProperty.call(config, 'ignoredPublishedSkills')\n );\n};\n\nconst readGlobalAuthState = async (configFile: string): Promise<AuthState | null> => {\n const storedConfig = await readGlobalConfig(configFile);\n const storedAuthState = storedConfig.auth;\n if (storedAuthState === undefined || storedAuthState === null) return null;\n if (isAuthState(storedAuthState)) {\n if (hasLegacyPublishedSkillPreferences(storedConfig)) {\n await writeGlobalConfig(configFile, withoutLegacyPublishedSkillPreferences(storedConfig));\n }\n return storedAuthState;\n }\n\n await writeGlobalConfig(configFile, {\n ...withoutLegacyPublishedSkillPreferences(storedConfig),\n auth: null,\n });\n return null;\n};\n\nconst readLegacyAuthState = async (authStateFile: string): Promise<AuthState | null> => {\n const storedAuthState = await readJsonFile(authStateFile);\n if (storedAuthState === null) return null;\n if (isAuthState(storedAuthState)) return storedAuthState;\n\n await deleteFileIfExists(authStateFile);\n return null;\n};\n\nconst writeAuthState = async (configFile: string, authState: AuthState) => {\n const storedConfig = await readGlobalConfig(configFile);\n await writeGlobalConfig(configFile, {\n ...withoutLegacyPublishedSkillPreferences(storedConfig),\n auth: authState,\n });\n};\n\nconst clearAuthState = async (configFile: string) => {\n const storedConfig = await readGlobalConfig(configFile);\n await writeGlobalConfig(configFile, {\n ...withoutLegacyPublishedSkillPreferences(storedConfig),\n auth: null,\n });\n};\n\nconst toIgnoredSkillSlug = (value: string): string | null => {\n const normalized = value.trim().toLowerCase();\n if (!normalized) return null;\n return normalized;\n};\n\nconst getPublishedSkillIgnoreScopeKey = (\n resolution: WorkspaceResolution,\n payload?: PublishedSkillCatalogPayload,\n): string => {\n const workspaceSlug = payload?.workspace?.slug ?? resolution.fallbackWorkspaceSlug;\n if (workspaceSlug) return `workspace:${toWorkspaceSlug(workspaceSlug)}`;\n if (resolution.repositoryUrl) return `repository:${resolution.repositoryUrl}`;\n return `path:${toWorkspaceSlug(path.basename(resolution.repositoryRoot))}`;\n};\n\nconst toStoredUserKey = (authState: AuthState | null): string => {\n if (authState?.userId) return authState.userId;\n if (authState?.email) return authState.email.toLowerCase();\n return 'anonymous';\n};\n\nconst resolvePublishedSkillPreferenceCacheContext = async (\n config: ResolvedConfig,\n): Promise<PublishedSkillPreferenceCacheContext> => {\n const authState = await readGlobalAuthState(config.authStatePath);\n\n return {\n userKey: toStoredUserKey(authState),\n preferenceVersion: publishedSkillPreferenceCacheVersion,\n };\n};\n\nconst getCatalogCacheKey = (\n workspaceResolution: WorkspaceResolution,\n preferenceContext: PublishedSkillPreferenceCacheContext,\n): string => {\n return JSON.stringify([workspaceResolution.cacheKey, preferenceContext.userKey, preferenceContext.preferenceVersion]);\n};\n\nconst toAuthState = (session: PluginSessionResponse['session']): AuthState => ({\n pluginId: PLUGIN_ID,\n sessionToken: session.jwtToken,\n expiresAt: session.expiresAt,\n authenticatedAt: new Date().toISOString(),\n userId: session.user.id,\n email: session.user.email,\n});\n\nconst resolveStoredAuthState = async (worktree: string, config: ResolvedConfig): Promise<AuthState | null> => {\n const authState = await readGlobalAuthState(config.authStatePath);\n\n if (authState && Date.parse(authState.expiresAt) > Date.now()) {\n return authState;\n }\n\n if (authState) {\n await clearAuthState(config.authStatePath);\n return null;\n }\n\n const legacyAuthStateFile = path.resolve(worktree, LEGACY_AUTH_STATE_PATH);\n const legacyAuthState = await readLegacyAuthState(legacyAuthStateFile);\n\n if (!legacyAuthState) return null;\n\n if (Date.parse(legacyAuthState.expiresAt) <= Date.now()) {\n await deleteFileIfExists(legacyAuthStateFile);\n return null;\n }\n\n await writeAuthState(config.authStatePath, legacyAuthState);\n await deleteFileIfExists(legacyAuthStateFile);\n return legacyAuthState;\n};\n\nexport const buildSkillMarkdown = (item: PublishedSkillDetailItem): string => {\n const artifactBody = item.publishedArtifact.markdownBody.trim();\n const fallbackBody = item.publishedArtifact.renderedContent.trim();\n const body = artifactBody || fallbackBody;\n\n if (body.startsWith('---')) {\n return body.endsWith('\\n') ? body : `${body}\\n`;\n }\n\n const name = formatSkillLabel(item);\n const description = item.publishedArtifact.frontmatterDescription.trim() || item.skill.summary?.trim() || '';\n const frontmatter = [\n '---',\n `name: ${toFrontmatterString(name)}`,\n `description: ${toFrontmatterString(description)}`,\n '---',\n ].join('\\n');\n\n if (!body) {\n return `${frontmatter}\\n`;\n }\n\n return `${frontmatter}\\n\\n${body.endsWith('\\n') ? body : `${body}\\n`}`;\n};\n\nconst getSkillIdentifiers = (item: PublishedSkillCatalogItem): string[] => {\n const candidates = [item.skill.slug, item.publishedArtifact.frontmatterName, item.skill.name];\n const seen = new Set<string>();\n\n return candidates.reduce<string[]>((all, candidate) => {\n const normalized = candidate.trim();\n if (!normalized) return all;\n\n const cacheKey = normalized.toLowerCase();\n if (seen.has(cacheKey)) return all;\n\n seen.add(cacheKey);\n all.push(normalized);\n return all;\n }, []);\n};\n\nconst toPublishedSkillFacetSummary = (facet: PublishedSkillFacet): PublishedSkillFacetSummary => ({\n slug: facet.slug,\n label: facet.label,\n description: facet.description ?? null,\n});\n\nconst toPublishedSkillTagSummary = (tag: PublishedSkillTag): PublishedSkillTagSummary => ({\n slug: tag.slug,\n label: tag.label,\n description: tag.description ?? null,\n facet: tag.facet ? toPublishedSkillFacetSummary(tag.facet) : null,\n});\n\nconst getPublishedSkillFacets = (items: PublishedSkillCatalogItem[]): PublishedSkillFacetSummary[] => {\n const facetsBySlug = new Map<string, PublishedSkillFacetSummary>();\n\n for (const item of items) {\n for (const tag of item.skill.tags) {\n if (!tag.facet) continue;\n if (facetsBySlug.has(tag.facet.slug)) continue;\n facetsBySlug.set(tag.facet.slug, toPublishedSkillFacetSummary(tag.facet));\n }\n }\n\n return [...facetsBySlug.values()].sort((left, right) => left.slug.localeCompare(right.slug));\n};\n\nconst isUserPublishedSkillAssignment = (assignmentSource: string): boolean =>\n assignmentSource === 'USER' || assignmentSource === 'USER_GLOBAL' || assignmentSource === 'USER_WORKSPACE';\n\nconst getPublishedSkillAssignmentLabel = (assignmentSource: string): string => {\n if (assignmentSource === 'GLOBAL') return 'GLOBAL SCOPE assignment';\n if (assignmentSource === 'WORKSPACE') return 'PROJECT SCOPE assignment';\n if (assignmentSource === 'USER_GLOBAL') return 'USER SCOPE preference (global target)';\n if (assignmentSource === 'USER_WORKSPACE') return 'USER SCOPE preference (project target)';\n if (assignmentSource === 'USER') return 'USER SCOPE assignment';\n\n return `${assignmentSource.toUpperCase().replace(/_/gu, ' ')} assignment`;\n};\n\nconst getPublishedSkillAssignmentCounts = (\n items: PublishedSkillCatalogItem[],\n): PublishedSkillsSuccessState['assignmentCounts'] =>\n items.reduce<PublishedSkillsSuccessState['assignmentCounts']>(\n (counts, item) => {\n if (isUserPublishedSkillAssignment(item.assignmentSource)) {\n return {\n ...counts,\n user: counts.user + 1,\n };\n }\n\n if (item.assignmentSource === 'GLOBAL') {\n return {\n ...counts,\n global: counts.global + 1,\n };\n }\n\n if (item.assignmentSource === 'WORKSPACE') {\n return {\n ...counts,\n project: counts.project + 1,\n };\n }\n\n return {\n ...counts,\n other: counts.other + 1,\n };\n },\n {\n global: 0,\n project: 0,\n user: 0,\n other: 0,\n },\n );\n\nconst getSkillContextKind = (item: PublishedSkillCatalogItem): PublishedSkillSummary['contextKind'] => {\n if (item.assignmentSource === 'GLOBAL' || item.assignmentSource === 'USER_GLOBAL') return 'global';\n return 'project';\n};\n\nconst getSkillPolicyLabel = (\n policy: PublishedSkillInstallPolicy,\n contextKind: PublishedSkillSummary['contextKind'],\n assignmentSource: string,\n): string => {\n if (isUserPublishedSkillAssignment(assignmentSource) && policy === 'GLOBAL_CONTEXT') {\n return 'GLOBAL_CONTEXT · active USER SCOPE context';\n }\n\n if (isUserPublishedSkillAssignment(assignmentSource)) return 'PROJECT_INSTALLABLE · active USER SCOPE preference';\n if (policy === 'GLOBAL_CONTEXT') return 'GLOBAL_CONTEXT · active context only, not project-installable';\n if (contextKind === 'installable') return 'PROJECT_INSTALLABLE · available to install';\n if (contextKind === 'global') return 'PROJECT_INSTALLABLE · active GLOBAL SCOPE assignment';\n return 'PROJECT_INSTALLABLE · active PROJECT SCOPE assignment';\n};\n\nconst toPublishedSkillSummary = (item: PublishedSkillCatalogItem): PublishedSkillSummary => {\n const contextKind = getSkillContextKind(item);\n\n return {\n skillSlug: item.skill.slug,\n skillName: item.skill.name,\n artifactName: item.publishedArtifact.frontmatterName,\n artifactDescription: item.publishedArtifact.frontmatterDescription,\n whenToUse: item.skill.whenToUse ?? null,\n version: item.skillVersion.version,\n assignmentSource: item.assignmentSource,\n assignmentType: item.assignmentType,\n scopePath: item.scopePath,\n includeChildren: item.includeChildren ?? null,\n checksum: item.publishedArtifact.checksum,\n publishedAt: item.publishedArtifact.publishedAt,\n fileCount: item.publishedArtifact.fileCount,\n identifiers: getSkillIdentifiers(item),\n tags: item.skill.tags.map(toPublishedSkillTagSummary),\n contextKind,\n installPolicy: item.skill.installPolicy,\n assignmentLabel: getPublishedSkillAssignmentLabel(item.assignmentSource),\n policyLabel: getSkillPolicyLabel(item.skill.installPolicy, contextKind, item.assignmentSource),\n };\n};\n\nexport const toPublishedSkillDetail = (item: PublishedSkillDetailItem): PublishedSkillDetail => ({\n ...toPublishedSkillSummary(item),\n skillId: item.skill.id,\n skillVersionId: item.skillVersion.id,\n artifactId: item.publishedArtifact.id,\n markdownDocument: buildSkillMarkdown(item),\n markdownBody: item.publishedArtifact.markdownBody,\n renderedContent: item.publishedArtifact.renderedContent,\n files: item.publishedArtifact.files,\n resources: item.publishedArtifact.files.filter((file) => file.relativePath !== 'SKILL.md'),\n});\n\nconst toInstallableSkillSummary = (item: PublishedSkillInstallableCatalogItem): PublishedSkillSummary => ({\n skillSlug: item.skill.slug,\n skillName: item.skill.name,\n artifactName: item.publishedArtifact.frontmatterName,\n artifactDescription: item.publishedArtifact.frontmatterDescription,\n whenToUse: item.skill.whenToUse ?? null,\n version: item.skillVersion.version,\n assignmentSource: 'CATALOG',\n assignmentType: 'PATH',\n scopePath: '',\n includeChildren: true,\n checksum: item.publishedArtifact.checksum,\n publishedAt: item.publishedArtifact.publishedAt,\n fileCount: item.publishedArtifact.fileCount,\n identifiers: getSkillIdentifiers({\n ...item,\n assignmentSource: 'CATALOG',\n assignmentType: 'PATH',\n scopePath: '',\n includeChildren: true,\n }),\n tags: item.skill.tags.map(toPublishedSkillTagSummary),\n contextKind: 'installable',\n installPolicy: item.skill.installPolicy,\n assignmentLabel: 'catalog skill',\n policyLabel: getSkillPolicyLabel(item.skill.installPolicy, 'installable', 'CATALOG'),\n});\n\nexport const toPublishedSkillCatalog = (payload: PublishedSkillCatalogPayload): PublishedSkillsSuccessState => ({\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n deliveryModel: 'backend_published_installed_effective_skills',\n workspace: payload.workspace,\n directoryPath: payload.directoryPath,\n rootSkillSeedPath: ROOT_SKILL_SEED_PATH,\n availableTools: AVAILABLE_PUBLISHED_SKILL_TOOLS,\n publishedSkillCount: payload.skills.length,\n assignmentCounts: getPublishedSkillAssignmentCounts(payload.skills),\n facets: getPublishedSkillFacets(payload.skills),\n skills: payload.skills.map(toPublishedSkillSummary),\n});\n\nconst filterIgnoredPublishedSkills = async (\n config: ResolvedConfig,\n result: PublishedSkillsResult,\n): Promise<FilteredPublishedSkillsResult> => {\n const authState = await readGlobalAuthState(config.authStatePath);\n const userKey = toStoredUserKey(authState);\n\n if (!result.fetchResult.ok) {\n return {\n ...result,\n ignoreState: {\n scopeKey: getPublishedSkillIgnoreScopeKey(result.workspaceResolution),\n userKey,\n ignoredSkillSlugs: [],\n installedGlobalSkillSlugs: [],\n installedWorkspaceSkillSlugs: [],\n },\n ignoredSkills: [],\n };\n }\n\n const ignoredSkills = result.fetchResult.payload.userPreferences.ignoredSkills.map(toPublishedSkillSummary);\n const ignoredSkillSlugs = ignoredSkills.map((skill) => skill.skillSlug);\n\n return {\n ...result,\n ignoreState: {\n scopeKey: result.fetchResult.payload.userPreferences.scopeKey,\n userKey: result.fetchResult.payload.userPreferences.userKey || userKey,\n ignoredSkillSlugs,\n installedGlobalSkillSlugs: [],\n installedWorkspaceSkillSlugs: [],\n },\n ignoredSkills,\n };\n};\n\nconst getWorkspaceUnavailableMessage = (payload: PublishedSkillCatalogPayload): string | null => {\n if (payload.workspace) return null;\n return 'Workspace-specific skills are unavailable because the workspace was not found; global skills are still loaded.';\n};\n\nconst normalizeSkillIdentifier = (value: string): string => value.trim().toLowerCase();\n\nconst parseSkillIdentifiers = (value: string): string[] => {\n const seen = new Set<string>();\n\n return value\n .split(/[\\n,]/)\n .map((item) => item.trim())\n .filter((item) => item.length > 0)\n .filter((item) => {\n const normalized = normalizeSkillIdentifier(item);\n if (seen.has(normalized)) return false;\n seen.add(normalized);\n return true;\n });\n};\n\nconst mergeSkillIdentifiers = (values: string[]): string[] => {\n const seen = new Set<string>();\n\n return values.filter((value) => {\n const normalized = normalizeSkillIdentifier(value);\n if (!normalized || seen.has(normalized)) return false;\n seen.add(normalized);\n return true;\n });\n};\n\nexport const parseRequestedSkillArgs = (args: PublishedSkillFetchArgs): string[] => {\n const requestedSkills: string[] = [];\n\n if (typeof args.skill === 'string') {\n requestedSkills.push(...parseSkillIdentifiers(args.skill));\n }\n\n if (typeof args.skills === 'string') {\n requestedSkills.push(...parseSkillIdentifiers(args.skills));\n }\n\n return mergeSkillIdentifiers(requestedSkills);\n};\n\nexport const selectPublishedSkills = <TItem extends PublishedSkillCatalogItem>(\n payload: Omit<PublishedSkillCatalogPayload, 'skills'> & { skills: TItem[] },\n identifiers: string[],\n) => {\n const itemsByIdentifier = new Map<string, TItem>();\n\n for (const item of payload.skills) {\n for (const identifier of getSkillIdentifiers(item)) {\n itemsByIdentifier.set(normalizeSkillIdentifier(identifier), item);\n }\n }\n\n const selectedItems: TItem[] = [];\n const selectedKeys = new Set<string>();\n const missingIdentifiers: string[] = [];\n\n for (const identifier of identifiers) {\n const matched = itemsByIdentifier.get(normalizeSkillIdentifier(identifier));\n if (!matched) {\n missingIdentifiers.push(identifier);\n continue;\n }\n\n if (selectedKeys.has(matched.publishedArtifact.id)) {\n continue;\n }\n\n selectedKeys.add(matched.publishedArtifact.id);\n selectedItems.push(matched);\n }\n\n return {\n selectedItems,\n missingIdentifiers,\n };\n};\n\nconst truncateText = (value: string, maxLength: number): string => {\n const normalized = value.replace(/\\s+/gu, ' ').trim();\n if (normalized.length <= maxLength) return normalized;\n return `${normalized.slice(0, Math.max(maxLength - 1, 0)).trimEnd()}…`;\n};\n\nconst buildSkillCatalogLine = (skill: PublishedSkillSummary): string => {\n const description = truncateText(\n skill.whenToUse || skill.artifactDescription || skill.skillName || skill.skillSlug,\n SYSTEM_NOTE_SKILL_DESCRIPTION_LIMIT,\n );\n const scopeLabel = isUserPublishedSkillAssignment(skill.assignmentSource)\n ? 'USER SCOPE'\n : skill.contextKind === 'global'\n ? 'GLOBAL SCOPE'\n : 'PROJECT SCOPE';\n const assignmentLabel = skill.assignmentSource.toLowerCase().replace(/_/gu, ' ');\n return `- ${skill.artifactName || skill.skillName} (${skill.skillSlug}, ${assignmentLabel} assignment) [${scopeLabel}]: ${description}`;\n};\n\nconst buildSkillDetailSnippetLine = (detail: PublishedSkillDetail): string => {\n const body = detail.markdownBody || detail.renderedContent || detail.markdownDocument;\n return `- ${detail.artifactName || detail.skillName}: ${truncateText(body, 700)}`;\n};\n\nexport const buildSystemNote = (\n result: PublishedSkillsResult,\n config: ResolvedConfig,\n details: PublishedSkillDetail[],\n): string | null => {\n if (!result.fetchResult.ok) return null;\n\n const catalog = toPublishedSkillCatalog(result.fetchResult.payload);\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 const globalSkills = catalog.skills\n .filter((skill) => skill.contextKind === 'global' && !isUserPublishedSkillAssignment(skill.assignmentSource))\n .slice(0, 8)\n .map(buildSkillCatalogLine);\n const projectSkills = catalog.skills\n .filter((skill) => skill.contextKind === 'project' && !isUserPublishedSkillAssignment(skill.assignmentSource))\n .slice(0, 5)\n .map(buildSkillCatalogLine);\n const userSkills = catalog.skills\n .filter((skill) => isUserPublishedSkillAssignment(skill.assignmentSource))\n .slice(0, 5)\n .map(buildSkillCatalogLine);\n const detailLines = details.slice(0, SYSTEM_NOTE_DETAIL_LIMIT).map(buildSkillDetailSnippetLine);\n const detailBlock =\n detailLines.length > 0\n ? ` Loaded body snippets (capped):\\n${truncateText(detailLines.join('\\n'), SYSTEM_NOTE_DETAIL_CHAR_LIMIT)}`\n : '';\n\n return [\n result.fetchResult.payload.workspace\n ? `Prefer opencode-wizard backend-published fetched skill bodies for scoped/private wizard skills in workspace ${result.fetchResult.payload.workspace.slug}.`\n : 'Prefer opencode-wizard backend-published global fetched skill bodies; workspace-specific skills are unavailable because the workspace was not found.',\n `Current directory: ${result.directoryPath}.`,\n `Published skills for this scope: ${renderedSkillNames}${renderedCountSuffix}; counts: ${catalog.assignmentCounts.global} global, ${catalog.assignmentCounts.project} workspace, ${catalog.assignmentCounts.user} user, ${catalog.assignmentCounts.other} other (GLOBAL SCOPE: ${catalog.assignmentCounts.global}, PROJECT SCOPE: ${catalog.assignmentCounts.project}, USER SCOPE: ${catalog.assignmentCounts.user}).`,\n 'Wizard-published skills listed in this note/catalog are not necessarily native OpenCode skills; they may be private, scoped, or backend-published records that only the opencode-wizard fetch tool can load.',\n 'Use the native OpenCode skill tool only for local/native skills that appear in native available_skills; do not use it for wizard-private/scoped/backend-published skill slugs unless that same skill is also listed by native available_skills.',\n 'If a native skill call fails with an error like `Skill \"diagnose\" not found. Available skills: ...` and `diagnose` (or the requested slug/name) is wizard-listed here, treat that failure as evidence to call opencode_wizard_published_skills_fetch for the wizard skill body instead.',\n 'Use catalog whenToUse guidance to decide applicability; fetch full bodies with opencode_wizard_published_skills_fetch and prefer those fetched bodies for current scoped/private wizard guidance, preferring the `skills` field with comma/newline-separated identifiers for multiple bodies; `skill` is for one identifier but remains backward-compatible with delimited lists.',\n 'GLOBAL_CONTEXT skills are active context skills and are not project-installable; PROJECT_INSTALLABLE skills can be assigned to GLOBAL SCOPE, PROJECT SCOPE, or USER SCOPE; assignment rows decide which scope is active here.',\n globalSkills.length > 0\n ? `GLOBAL SCOPE / Global context skills:\\n${globalSkills.join('\\n')}`\n : 'GLOBAL SCOPE / Global context skills: none.',\n projectSkills.length > 0\n ? `PROJECT SCOPE / Project-scoped active skills:\\n${projectSkills.join('\\n')}`\n : 'PROJECT SCOPE / Project-scoped active skills: none.',\n userSkills.length > 0\n ? `USER SCOPE / User-scoped active skills:\\n${userSkills.join('\\n')}`\n : 'USER SCOPE / User-scoped active skills: none.',\n detailBlock,\n 'Local/native sources can still complement wizard skills: .opencode/skills is source seed content, skills.urls is a public/static complement, and backend-published fetched bodies are preferred for private/scoped wizard guidance.',\n `Root source seed path remains seed/source content: ${config.rootSkillSeedPath}/**.`,\n ]\n .filter((line) => line.length > 0)\n .join(' ');\n};\n\nconst toWorkspaceResolutionOutput = (resolution: WorkspaceResolution) => ({\n requestedDirectory: resolution.requestedDirectory,\n repositoryRoot: resolution.repositoryRoot,\n repositoryUrl: resolution.repositoryUrl,\n fallbackWorkspaceSlug: resolution.fallbackWorkspaceSlug,\n directoryPath: resolution.directoryPath,\n});\n\nconst toWorkspaceResolutionMetadata = (resolution: WorkspaceResolution): Record<string, string> => ({\n directoryPath: resolution.directoryPath,\n repositoryRoot: resolution.repositoryRoot,\n repositoryUrl: resolution.repositoryUrl ?? '',\n fallbackWorkspaceSlug: resolution.fallbackWorkspaceSlug ?? '',\n});\n\nconst formatStatusOutput = async (\n worktree: string,\n config: ResolvedConfig,\n publishedSkillsResult: PublishedSkillsResult,\n loginBootstrapSnapshot: LoginBootstrapSnapshot,\n) => {\n const authState = await resolveStoredAuthState(worktree, config);\n const filteredResult = await filterIgnoredPublishedSkills(config, publishedSkillsResult);\n const base = {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n nativeSkillsUrlCompatibility: NATIVE_SKILLS_URL_COMPATIBILITY,\n backendOrigin: config.backendOrigin,\n graphqlUrl: config.graphqlUrl,\n fallbackWorkspaceSlug: config.fallbackWorkspaceSlug,\n workspaceResolution: toWorkspaceResolutionOutput(publishedSkillsResult.workspaceResolution),\n rootSkillSeedPath: config.rootSkillSeedPath,\n authStatePath: config.authStatePath,\n requestedDirectoryPath: publishedSkillsResult.directoryPath,\n authMode: publishedSkillsResult.fetchResult.authMode,\n authState:\n authState === null\n ? null\n : {\n email: authState.email,\n userId: authState.userId,\n authenticatedAt: authState.authenticatedAt,\n expiresAt: authState.expiresAt,\n },\n loginBootstrap:\n loginBootstrapSnapshot.status === 'idle'\n ? null\n : {\n status: loginBootstrapSnapshot.status,\n trigger: loginBootstrapSnapshot.trigger,\n startedAt: loginBootstrapSnapshot.startedAt,\n expiresAt: loginBootstrapSnapshot.expiresAt,\n browserUrl: loginBootstrapSnapshot.browserUrl,\n browserOpenError: loginBootstrapSnapshot.browserOpenError,\n email: loginBootstrapSnapshot.email,\n message: loginBootstrapSnapshot.message,\n },\n status: filteredResult.fetchResult.status,\n fetchedAt: filteredResult.fetchResult.fetchedAt,\n source: filteredResult.fetchResult.source,\n availableTools: AVAILABLE_PUBLISHED_SKILL_TOOLS,\n ignoredPublishedSkills: {\n scopeKey: filteredResult.ignoreState.scopeKey,\n userKey: filteredResult.ignoreState.userKey,\n count: filteredResult.ignoreState.ignoredSkillSlugs.length,\n },\n };\n\n if (!filteredResult.fetchResult.ok) {\n return JSON.stringify(\n {\n ...base,\n message: filteredResult.fetchResult.message,\n },\n null,\n 2,\n );\n }\n\n return JSON.stringify(\n {\n ...base,\n ...toPublishedSkillCatalog(filteredResult.fetchResult.payload),\n message: getWorkspaceUnavailableMessage(filteredResult.fetchResult.payload),\n },\n null,\n 2,\n );\n};\n\nexport const toPluginAuthStateSummary = (authState: AuthState | null): PluginAuthStateSummary => {\n if (!authState) {\n return {\n status: 'missing',\n email: null,\n userId: null,\n authenticatedAt: null,\n expiresAt: null,\n };\n }\n\n return {\n status: 'authenticated',\n email: authState.email,\n userId: authState.userId,\n authenticatedAt: authState.authenticatedAt,\n expiresAt: authState.expiresAt,\n };\n};\n\nexport const resolvePluginStatusSnapshot = async ({\n worktree,\n directory,\n signal,\n}: {\n worktree: string;\n directory: string;\n signal: AbortSignal;\n}): Promise<PluginStatusSnapshot> => {\n const config = await resolveConfig(worktree);\n const workspaceResolution = await resolveWorkspace({\n config,\n directory,\n });\n const fetchResult = await fetchPublishedSkillsCatalog(worktree, config, workspaceResolution, signal);\n const filteredResult = await filterIgnoredPublishedSkills(config, {\n directoryPath: workspaceResolution.directoryPath,\n workspaceResolution,\n fetchResult,\n });\n const authState = await resolveStoredAuthState(worktree, config);\n\n return {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n nativeSkillsUrlCompatibility: NATIVE_SKILLS_URL_COMPATIBILITY,\n backendOrigin: config.backendOrigin,\n graphqlUrl: config.graphqlUrl,\n fallbackWorkspaceSlug: config.fallbackWorkspaceSlug,\n workspaceResolution: toWorkspaceResolutionOutput(workspaceResolution),\n rootSkillSeedPath: config.rootSkillSeedPath,\n authStatePath: config.authStatePath,\n authState: toPluginAuthStateSummary(authState),\n status: filteredResult.fetchResult.status,\n authMode: filteredResult.fetchResult.authMode,\n fetchedAt: filteredResult.fetchResult.fetchedAt,\n source: filteredResult.fetchResult.source,\n availableTools: AVAILABLE_PUBLISHED_SKILL_TOOLS,\n message: filteredResult.fetchResult.ok\n ? getWorkspaceUnavailableMessage(filteredResult.fetchResult.payload)\n : filteredResult.fetchResult.message,\n catalog: filteredResult.fetchResult.ok ? toPublishedSkillCatalog(filteredResult.fetchResult.payload) : null,\n installableCatalog: filteredResult.fetchResult.ok\n ? {\n count: filteredResult.fetchResult.payload.catalogSkills.length,\n skills: filteredResult.fetchResult.payload.catalogSkills.map(toInstallableSkillSummary),\n }\n : null,\n ignoredPublishedSkills: {\n scopeKey: filteredResult.ignoreState.scopeKey,\n userKey: filteredResult.ignoreState.userKey,\n count: filteredResult.ignoreState.ignoredSkillSlugs.length,\n skills: filteredResult.ignoredSkills,\n },\n };\n};\n\nconst withStatusMessage = (snapshot: PluginStatusSnapshot, message: string): PluginStatusSnapshot => ({\n ...snapshot,\n message,\n});\n\nconst toAiFacingPluginStatusSnapshot = (snapshot: PluginStatusSnapshot): AiFacingPluginStatusSnapshot => {\n const { ignoredPublishedSkills, installableCatalog: _installableCatalog, ...safeSnapshot } = snapshot;\n\n return {\n ...safeSnapshot,\n ignoredPublishedSkills: {\n scopeKey: ignoredPublishedSkills.scopeKey,\n count: ignoredPublishedSkills.count,\n },\n };\n};\n\nconst startStatusPathLoginBootstrap = (worktree: string, config: ResolvedConfig): void => {\n if (statusPathLoginBootstrap.promise) return;\n\n if (\n statusPathLoginBootstrap.status === 'failed' &&\n statusPathLoginBootstrap.failedAt &&\n Date.now() - statusPathLoginBootstrap.failedAt < STATUS_PATH_LOGIN_RETRY_COOLDOWN_MS\n ) {\n return;\n }\n\n statusPathLoginBootstrap.status = 'pending';\n statusPathLoginBootstrap.message = 'Browser login started automatically from the TUI/status path.';\n statusPathLoginBootstrap.failedAt = null;\n\n statusPathLoginBootstrap.promise = (async () => {\n const loginSignal = AbortSignal.timeout(LOGIN_TIMEOUT_MS);\n const loginStart = await startLoginFlow(loginSignal);\n const browserOpenError = await openBrowser(loginStart.browserUrl);\n\n if (browserOpenError) {\n statusPathLoginBootstrap.message = `Automatic browser open failed. Open ${loginStart.browserUrl} manually.`;\n }\n\n try {\n const callbackPayload = await loginStart.callbackPromise;\n\n if (callbackPayload.status === 'error') {\n throw new Error(callbackPayload.message);\n }\n\n if (callbackPayload.state !== loginStart.expectedState) {\n throw new Error('OAuth callback state did not match the original login request.');\n }\n\n const pluginSession = await createPluginSession({\n code: callbackPayload.code,\n codeVerifier: loginStart.codeVerifier,\n redirectUri: OIDC_CALLBACK_URL,\n config,\n signal: loginSignal,\n });\n const authState = toAuthState(pluginSession);\n await writeAuthState(config.authStatePath, authState);\n\n statusPathLoginBootstrap.status = 'authenticated';\n statusPathLoginBootstrap.message = `Browser login completed successfully for ${authState.email}.`;\n return authState;\n } finally {\n await loginStart.closeCallbackServer().catch(() => undefined);\n }\n })()\n .catch((error: unknown) => {\n statusPathLoginBootstrap.status = 'failed';\n statusPathLoginBootstrap.failedAt = Date.now();\n statusPathLoginBootstrap.message = error instanceof Error ? error.message : 'Browser login failed.';\n throw error;\n })\n .finally(() => {\n statusPathLoginBootstrap.promise = null;\n });\n\n statusPathLoginBootstrap.promise.catch(() => undefined);\n};\n\nexport const resolvePluginStatusSnapshotWithAuthBootstrap = async ({\n worktree,\n directory,\n signal,\n}: {\n worktree: string;\n directory: string;\n signal: AbortSignal;\n}): Promise<PluginStatusSnapshot> => {\n const snapshot = await resolvePluginStatusSnapshot({\n worktree,\n directory,\n signal,\n });\n\n if (snapshot.status !== 'missing_auth') return snapshot;\n\n const config = await resolveConfig(worktree);\n startStatusPathLoginBootstrap(worktree, config);\n\n if (statusPathLoginBootstrap.message) {\n return withStatusMessage(snapshot, statusPathLoginBootstrap.message);\n }\n\n return withStatusMessage(snapshot, 'Browser login is pending from the TUI/status path.');\n};\n\nconst toBackendPreferenceScope = (preferenceScope: 'global' | 'project'): PublishedSkillPreferenceScope => {\n if (preferenceScope === 'global') return 'GLOBAL';\n return 'WORKSPACE';\n};\n\nconst setPublishedSkillPreference = async ({\n worktree,\n directory,\n config,\n skillSlug,\n preferenceScope,\n installed,\n ignored,\n}: {\n worktree: string;\n directory: string;\n config: ResolvedConfig;\n skillSlug: string;\n preferenceScope: 'global' | 'project';\n installed?: boolean;\n ignored?: boolean;\n}): Promise<PublishedSkillsIgnoreState> => {\n const workspaceResolution = await resolveWorkspace({ config, directory });\n const response = await fetchPublishedSkillsGraphQl<SetPublishedSkillPreferenceResponse>({\n worktree,\n config,\n query: SET_PUBLISHED_SKILL_PREFERENCE_MUTATION,\n variables: {\n input: {\n ...toDeliveryInput(workspaceResolution),\n skillSlug,\n preferenceScope: toBackendPreferenceScope(preferenceScope),\n installed,\n ignored,\n },\n },\n signal: AbortSignal.timeout(PRESENCE_EVENT_TIMEOUT_MS),\n });\n\n if (!response.ok) {\n throw new Error(response.result.message);\n }\n\n const preferences = response.data.setPublishedSkillPreference;\n publishedSkillPreferenceCacheVersion += 1;\n\n return {\n scopeKey: preferences.scopeKey,\n userKey: preferences.userKey,\n ignoredSkillSlugs: preferences.ignoredSkills.map((item) => item.skill.slug),\n installedGlobalSkillSlugs: [],\n installedWorkspaceSkillSlugs: [],\n };\n};\n\nexport const setPublishedSkillIgnored = async ({\n worktree,\n directory,\n skillSlug,\n ignored,\n preferenceScope,\n}: {\n worktree: string;\n directory: string;\n scopeKey?: string;\n skillSlug: string;\n ignored: boolean;\n preferenceScope?: 'global' | 'project';\n}): Promise<PublishedSkillsIgnoreState> => {\n const config = await resolveConfig(worktree);\n const normalizedSkillSlug = toIgnoredSkillSlug(skillSlug);\n\n if (!normalizedSkillSlug) {\n throw new Error('Cannot toggle an empty published skill slug.');\n }\n\n return setPublishedSkillPreference({\n worktree,\n directory,\n config,\n skillSlug: normalizedSkillSlug,\n preferenceScope: preferenceScope ?? 'project',\n ignored,\n });\n};\n\nexport const setPublishedSkillInstalled = async ({\n worktree,\n directory,\n skillSlug,\n installed,\n preferenceScope,\n}: {\n worktree: string;\n directory: string;\n scopeKey?: string;\n skillSlug: string;\n installed: boolean;\n preferenceScope: 'global' | 'project';\n}): Promise<PublishedSkillsIgnoreState> => {\n const config = await resolveConfig(worktree);\n const normalizedSkillSlug = toIgnoredSkillSlug(skillSlug);\n\n if (!normalizedSkillSlug) {\n throw new Error('Cannot toggle an empty published skill slug.');\n }\n\n return setPublishedSkillPreference({\n worktree,\n directory,\n config,\n skillSlug: normalizedSkillSlug,\n preferenceScope,\n installed,\n });\n};\n\nconst toPluginStatusMetadata = (snapshot: PluginStatusSnapshot): Record<string, string> => ({\n backendOrigin: snapshot.backendOrigin,\n graphqlUrl: snapshot.graphqlUrl,\n pluginStatus: snapshot.status,\n authStatus: snapshot.authState.status,\n authEmail: snapshot.authState.email ?? '',\n authUserId: snapshot.authState.userId ?? '',\n});\n\nconst isUnauthorizedGraphQlMessage = (message: string): boolean => {\n const normalizedMessage = message.toLowerCase();\n return normalizedMessage.includes('not authorized') || normalizedMessage.includes('unauthorized');\n};\n\nconst createRandomBase64Url = (bytes: number): string => {\n return crypto.randomBytes(bytes).toString('base64url');\n};\n\nconst createCodeChallenge = (codeVerifier: string): string => {\n return crypto.createHash('sha256').update(codeVerifier).digest('base64url');\n};\n\nconst getMessageFromUnknownPayload = (value: unknown): string | null => {\n if (!value || typeof value !== 'object') return null;\n\n const candidate = 'message' in value ? value.message : null;\n return typeof candidate === 'string' ? candidate : null;\n};\n\nconst wait = async (milliseconds: number): Promise<void> => {\n await new Promise<void>((resolve) => {\n setTimeout(resolve, milliseconds);\n });\n};\n\nconst shouldRetryPresenceEvent = (status: number): boolean => {\n return status === 408 || status === 429 || status >= 500;\n};\n\nconst fetchOidcDiscoveryDocument = async (signal: AbortSignal): Promise<OidcDiscoveryDocument> => {\n const discoveryUrl = `${OIDC_ISSUER.replace(/\\/+$/, '')}/.well-known/openid-configuration`;\n const response = await fetch(discoveryUrl, {\n method: 'GET',\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`OIDC discovery failed with HTTP ${response.status}.`);\n }\n\n return (await response.json()) as OidcDiscoveryDocument;\n};\n\nconst isCallbackPortInUseError = (error: unknown): boolean => {\n if (!error || typeof error !== 'object') return false;\n if (!('code' in error)) return false;\n return error.code === 'EADDRINUSE';\n};\n\nconst toCallbackServerStartError = (error: unknown): Error => {\n if (!isCallbackPortInUseError(error)) {\n return error instanceof Error ? error : new Error('Failed to start local OAuth callback server.');\n }\n\n return new Error(\n 'OAuth login cannot start because localhost:24953 is already in use. Another OpenCode login is likely in progress; finish it or close the other instance, then retry.',\n );\n};\n\nconst escapeHtml = (value: string): string => {\n return value.replace(/[&<>'\"]/g, (character) => {\n const replacements: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n \"'\": '&#39;',\n '\"': '&quot;',\n };\n\n return replacements[character] ?? character;\n });\n};\n\nconst sendHtmlResponse = (response: http.ServerResponse, statusCode: number, title: string, message: string) => {\n const escapedTitle = escapeHtml(title);\n const escapedMessage = escapeHtml(message);\n const isSuccess = statusCode >= 200 && statusCode < 300;\n const pageState = isSuccess ? 'success' : statusCode === 404 ? 'not-found' : 'error';\n const cardTitle = isSuccess\n ? 'Authorization successful'\n : statusCode === 404\n ? 'Callback not found'\n : 'Authorization failed';\n const escapedCardTitle = escapeHtml(cardTitle);\n const eyebrow = isSuccess\n ? 'Authorization complete'\n : statusCode === 404\n ? 'Callback route not found'\n : 'Authorization needs attention';\n const actionText = isSuccess\n ? 'This window will close automatically in a moment. You can also close it now and return to OpenCode.'\n : 'You can close this window and return to OpenCode to try again.';\n const autoCloseScript = isSuccess\n ? `<script>\n window.setTimeout(() => window.close(), 2000);\n </script>`\n : '';\n const stateIcon = isSuccess\n ? '<path d=\"M7 12.5l3.1 3.1L17.5 8\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>'\n : statusCode === 404\n ? '<path d=\"M10.5 17a6.5 6.5 0 1 0 0-13 6.5 6.5 0 0 0 0 13Z\" stroke=\"currentColor\" stroke-width=\"2.2\"/><path d=\"m15.5 15.5 4 4\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\"/>'\n : '<path d=\"M12 7v6\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\"/><path d=\"M12 17.2v.1\" stroke=\"currentColor\" stroke-width=\"3.2\" stroke-linecap=\"round\"/>';\n\n response.writeHead(statusCode, {\n 'content-type': 'text/html; charset=utf-8',\n 'cache-control': 'no-store',\n });\n response.end(\n `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta name=\"color-scheme\" content=\"light dark\">\n <title>${escapedTitle}</title>\n <style>\n :root {\n color-scheme: light dark;\n --page-bg: #f2efe7;\n --page-ink: #211d18;\n --muted: #6c6258;\n --panel: rgba(255, 252, 245, 0.82);\n --panel-border: rgba(78, 66, 52, 0.16);\n --success: #167848;\n --error: #ba3329;\n --not-found: #986614;\n --glow: rgba(22, 120, 72, 0.18);\n }\n\n @media (prefers-color-scheme: dark) {\n :root {\n --page-bg: #12100d;\n --page-ink: #f7efe2;\n --muted: #b8aa98;\n --panel: rgba(30, 26, 22, 0.78);\n --panel-border: rgba(255, 244, 224, 0.14);\n --success: #71e0a6;\n --error: #ff897e;\n --not-found: #f7c96f;\n --glow: rgba(113, 224, 166, 0.2);\n }\n }\n\n * {\n box-sizing: border-box;\n }\n\n body {\n min-height: 100vh;\n margin: 0;\n display: grid;\n place-items: center;\n padding: 24px;\n overflow: hidden;\n background:\n radial-gradient(circle at 18% 18%, var(--glow), transparent 34rem),\n radial-gradient(circle at 82% 12%, rgba(209, 142, 72, 0.18), transparent 30rem),\n linear-gradient(135deg, var(--page-bg), color-mix(in srgb, var(--page-bg) 76%, #000 24%));\n color: var(--page-ink);\n font-family: ui-rounded, \"SF Pro Rounded\", \"Segoe UI\", system-ui, sans-serif;\n }\n\n body::before {\n content: \"\";\n position: fixed;\n inset: -20%;\n pointer-events: none;\n background-image:\n linear-gradient(rgba(128, 104, 74, 0.08) 1px, transparent 1px),\n linear-gradient(90deg, rgba(128, 104, 74, 0.08) 1px, transparent 1px);\n background-size: 42px 42px;\n mask-image: radial-gradient(circle at center, black, transparent 68%);\n }\n\n main {\n position: relative;\n width: min(100%, 560px);\n padding: clamp(28px, 7vw, 56px);\n border: 1px solid var(--panel-border);\n border-radius: 32px;\n background: var(--panel);\n box-shadow: 0 24px 90px rgba(0, 0, 0, 0.24);\n text-align: center;\n backdrop-filter: blur(18px) saturate(1.2);\n }\n\n .mark {\n width: 72px;\n height: 72px;\n margin: 0 auto 24px;\n display: grid;\n place-items: center;\n border-radius: 24px;\n color: var(--state-color);\n background: color-mix(in srgb, var(--state-color) 16%, transparent);\n box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--state-color) 28%, transparent);\n }\n\n [data-state=\"success\"] { --state-color: var(--success); }\n [data-state=\"error\"] { --state-color: var(--error); }\n [data-state=\"not-found\"] { --state-color: var(--not-found); }\n\n .eyebrow {\n margin: 0 0 10px;\n color: var(--state-color);\n font-size: 0.78rem;\n font-weight: 800;\n letter-spacing: 0.14em;\n text-transform: uppercase;\n }\n\n h1 {\n margin: 0;\n font-size: clamp(2rem, 7vw, 3.35rem);\n line-height: 0.95;\n letter-spacing: -0.06em;\n }\n\n .message {\n margin: 22px auto 0;\n max-width: 38rem;\n color: var(--muted);\n font-size: clamp(1rem, 2.5vw, 1.1rem);\n line-height: 1.65;\n }\n\n .next-step {\n margin: 26px 0 0;\n padding: 14px 18px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--state-color) 12%, transparent);\n color: var(--page-ink);\n font-size: 0.94rem;\n line-height: 1.5;\n }\n\n @media (max-width: 520px) {\n body {\n padding: 16px;\n }\n\n main {\n border-radius: 24px;\n }\n\n .next-step {\n border-radius: 18px;\n }\n }\n </style>\n </head>\n <body>\n <main data-state=\"${pageState}\" aria-labelledby=\"callback-title\">\n <div class=\"mark\" aria-hidden=\"true\">\n <svg width=\"34\" height=\"34\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n ${stateIcon}\n </svg>\n </div>\n <p class=\"eyebrow\">${eyebrow}</p>\n <h1 id=\"callback-title\">${escapedCardTitle}</h1>\n <p class=\"message\">${escapedMessage}</p>\n <p class=\"next-step\">${actionText}</p>\n </main>\n ${autoCloseScript}\n </body>\n</html>`,\n );\n};\n\nconst startLocalCallbackServer = async ({\n expectedState,\n signal,\n}: {\n expectedState: string;\n signal: AbortSignal;\n}): Promise<{\n callbackPromise: Promise<OidcCallbackPayload>;\n close: () => Promise<void>;\n}> => {\n let settled = false;\n let resolvePayload: (value: OidcCallbackPayload) => void = () => undefined;\n let rejectPayload: (reason?: unknown) => void = () => undefined;\n\n const callbackPromise = new Promise<OidcCallbackPayload>((resolve, reject) => {\n resolvePayload = resolve;\n rejectPayload = reject;\n });\n\n const finalize = (payload: OidcCallbackPayload) => {\n if (settled) return;\n settled = true;\n resolvePayload(payload);\n };\n\n const fail = (reason: unknown) => {\n if (settled) return;\n settled = true;\n rejectPayload(reason);\n };\n\n const server = http.createServer((request, response) => {\n const requestUrl = new URL(request.url ?? '/', OIDC_CALLBACK_ORIGIN);\n\n if (requestUrl.pathname !== OIDC_CALLBACK_PATH) {\n sendHtmlResponse(response, 404, 'opencode-wizard plugin login', 'Unknown callback path.');\n return;\n }\n\n const error = requestUrl.searchParams.get('error');\n const errorDescription = requestUrl.searchParams.get('error_description');\n\n if (error) {\n const message = errorDescription ?? error;\n sendHtmlResponse(response, 400, 'opencode-wizard plugin login failed', message);\n finalize({\n status: 'error',\n message,\n });\n return;\n }\n\n const state = requestUrl.searchParams.get('state');\n const code = requestUrl.searchParams.get('code');\n\n if (!state || state !== expectedState) {\n sendHtmlResponse(\n response,\n 400,\n 'opencode-wizard plugin login failed',\n 'OAuth state did not match the login request.',\n );\n finalize({\n status: 'error',\n message: 'OAuth state did not match the login request.',\n });\n return;\n }\n\n if (!code) {\n sendHtmlResponse(\n response,\n 400,\n 'opencode-wizard plugin login failed',\n 'OAuth callback did not include an authorization code.',\n );\n finalize({\n status: 'error',\n message: 'OAuth callback did not include an authorization code.',\n });\n return;\n }\n\n sendHtmlResponse(\n response,\n 200,\n 'opencode-wizard plugin callback received',\n 'Callback received. OpenCode is finalizing the backend session now.',\n );\n finalize({\n status: 'success',\n code,\n state,\n });\n });\n\n const close = async () => {\n await new Promise<void>((resolve, reject) => {\n server.close((error) => {\n if (error) {\n reject(error);\n return;\n }\n\n resolve();\n });\n });\n };\n\n await new Promise<void>((resolve, reject) => {\n const rejectStart = (error: unknown) => {\n reject(toCallbackServerStartError(error));\n };\n\n server.once('error', rejectStart);\n server.listen(24953, 'localhost', () => {\n server.off('error', rejectStart);\n server.on('error', (error) => {\n fail(error instanceof Error ? error : new Error('Local OAuth callback server failed.'));\n });\n resolve();\n });\n });\n\n signal.addEventListener(\n 'abort',\n () => {\n fail(signal.reason instanceof Error ? signal.reason : new Error('OAuth login aborted.'));\n void close().catch(() => undefined);\n },\n { once: true },\n );\n\n return {\n callbackPromise,\n close,\n };\n};\n\nconst 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 | {\n ok: true;\n data: TData;\n fetchedAt: string;\n }\n | {\n ok: false;\n result: Extract<FetchResult, { ok: false }>;\n }\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({\n query,\n variables,\n }),\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: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message,\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n if (!body.data) {\n return {\n ok: false,\n result: {\n ok: false,\n status: 'request_failed',\n authMode: 'session',\n message: 'GraphQL response did not include data.',\n fetchedAt,\n source: 'network',\n },\n };\n }\n\n return {\n ok: true,\n data: body.data,\n fetchedAt,\n };\n};\n\nconst 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: {\n input: toDeliveryInput(resolution),\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) {\n return response.result;\n }\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\nconst 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 | {\n ok: true;\n artifact: PublishedSkillArtifactDetailPayload;\n }\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 | {\n ok: false;\n result: Extract<FetchResult, { ok: false }>;\n }\n> => {\n const response = await fetchPublishedSkillsGraphQl<PublishedSkillDetailResponse>({\n worktree,\n config,\n query: PUBLISHED_SKILL_DETAIL_QUERY,\n variables: {\n input: {\n ...toDeliveryInput(resolution),\n skillVersionId,\n purpose,\n },\n },\n signal,\n onAuthStateChanged,\n });\n\n if (!response.ok) {\n return response;\n }\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 {\n ok: true,\n artifact,\n };\n};\n\nconst toFetchFailureOutput = async ({\n worktree,\n config,\n publishedSkillsResult,\n loginBootstrapSnapshot,\n}: {\n worktree: string;\n config: ResolvedConfig;\n publishedSkillsResult: PublishedSkillsResult;\n loginBootstrapSnapshot: LoginBootstrapSnapshot;\n}) => ({\n output: await formatStatusOutput(worktree, config, publishedSkillsResult, loginBootstrapSnapshot),\n metadata: {\n status: publishedSkillsResult.fetchResult.status,\n ...toWorkspaceResolutionMetadata(publishedSkillsResult.workspaceResolution),\n source: publishedSkillsResult.fetchResult.source,\n },\n});\n\nconst startLoginFlow = async (signal: AbortSignal): Promise<OidcLoginStart> => {\n const discovery = await fetchOidcDiscoveryDocument(signal);\n const codeVerifier = createRandomBase64Url(64);\n const expectedState = createRandomBase64Url(32);\n const codeChallenge = createCodeChallenge(codeVerifier);\n const expiresAt = new Date(Date.now() + LOGIN_TIMEOUT_MS).toISOString();\n const { callbackPromise, close } = await startLocalCallbackServer({\n expectedState,\n signal,\n });\n\n const browserUrl = new URL(discovery.authorization_endpoint);\n browserUrl.searchParams.set('client_id', OIDC_CLIENT_ID);\n browserUrl.searchParams.set('response_type', 'code');\n browserUrl.searchParams.set('redirect_uri', OIDC_CALLBACK_URL);\n browserUrl.searchParams.set('response_mode', 'query');\n browserUrl.searchParams.set('scope', OIDC_SCOPES.join(' '));\n browserUrl.searchParams.set('code_challenge', codeChallenge);\n browserUrl.searchParams.set('code_challenge_method', 'S256');\n browserUrl.searchParams.set('state', expectedState);\n\n return {\n browserUrl: browserUrl.toString(),\n expiresAt,\n codeVerifier,\n expectedState,\n callbackPromise,\n closeCallbackServer: close,\n };\n};\n\nconst createPluginSession = async ({\n code,\n codeVerifier,\n redirectUri,\n config,\n signal,\n}: {\n code: string;\n codeVerifier: string;\n redirectUri: string;\n config: ResolvedConfig;\n signal: AbortSignal;\n}): Promise<PluginSessionResponse['session']> => {\n const response = await fetch(config.authSessionUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n code,\n codeVerifier,\n redirectUri,\n }),\n signal,\n });\n\n const payload = (await response.json().catch(() => null)) as PluginSessionResponse | { message?: string } | null;\n\n if (!response.ok) {\n throw new Error(\n getMessageFromUnknownPayload(payload) ?? `Plugin session exchange failed with HTTP ${response.status}.`,\n );\n }\n\n if (!payload || !('success' in payload) || payload.success !== true) {\n throw new Error('Plugin session exchange returned an unexpected payload.');\n }\n\n return payload.session;\n};\n\nconst emitPresenceEvent = async ({\n config,\n authState,\n event,\n workspacePath,\n}: {\n config: ResolvedConfig;\n authState: AuthState;\n event: PresenceEventType;\n workspacePath: string;\n}): Promise<void> => {\n for (let attempt = 1; attempt <= PRESENCE_EVENT_MAX_ATTEMPTS; attempt += 1) {\n try {\n const response = await fetch(config.presenceUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${authState.sessionToken}`,\n },\n body: JSON.stringify({\n event,\n occurredAt: new Date().toISOString(),\n workspacePath,\n }),\n keepalive: event === 'STOP',\n signal: AbortSignal.timeout(PRESENCE_EVENT_TIMEOUT_MS),\n });\n\n if (response.ok) return;\n if (!shouldRetryPresenceEvent(response.status) || attempt === PRESENCE_EVENT_MAX_ATTEMPTS) return;\n } catch {\n if (attempt === PRESENCE_EVENT_MAX_ATTEMPTS) return;\n }\n\n await wait(PRESENCE_EVENT_RETRY_DELAY_MS * attempt);\n }\n};\n\nconst emitPluginActionEvent = async ({\n config,\n authState,\n event,\n workspacePath,\n directoryPath,\n}: {\n config: ResolvedConfig;\n authState: AuthState | null;\n event: PluginActionEventType;\n workspacePath: string;\n directoryPath?: string;\n}): Promise<void> => {\n if (!authState) return;\n\n try {\n await fetch(config.actionsUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${authState.sessionToken}`,\n },\n body: JSON.stringify({\n event,\n occurredAt: new Date().toISOString(),\n workspacePath,\n directoryPath,\n }),\n keepalive: event === 'STOP',\n signal: AbortSignal.timeout(PRESENCE_EVENT_TIMEOUT_MS),\n });\n } catch {\n return;\n }\n};\n\nconst openBrowser = async (url: string): Promise<string | null> => {\n try {\n if (process.platform === 'darwin') {\n await execFileAsync('open', [url]);\n return null;\n }\n\n if (process.platform === 'win32') {\n await execFileAsync('cmd', ['/c', 'start', '', url]);\n return null;\n }\n\n await execFileAsync('xdg-open', [url]);\n return null;\n } catch (error) {\n return error instanceof Error ? error.message : 'Failed to open browser automatically';\n }\n};\n\nconst normalizeDirectoryArg = (contextDirectory: string, directory?: string): string => {\n return normalizeAbsolutePath(directory ? path.resolve(contextDirectory, directory) : contextDirectory);\n};\n\nconst getDetailCacheKey = (catalogCacheKey: string, skillVersionId: string): string => {\n return JSON.stringify([catalogCacheKey, skillVersionId]);\n};\n\nconst getDetailInflightKey = (\n catalogCacheKey: string,\n skillVersionId: string,\n purpose: PublishedSkillArtifactDetailPurpose,\n): string => {\n return JSON.stringify([catalogCacheKey, skillVersionId, purpose]);\n};\n\nconst OpencodeWizardSkillsPlugin: OpencodePluginServer = async (input) => {\n const { tool } = await importOpencodePluginModule('@opencode-ai/plugin');\n const config = await resolveConfig(input.worktree);\n const workspacePath = normalizeAbsolutePath(input.worktree);\n const cache = new Map<string, CacheEntry>();\n const catalogInflight = new Map<string, Promise<PublishedSkillsResult>>();\n const detailCache = new Map<string, DetailCacheEntry>();\n const detailInflight = new Map<string, Promise<PublishedSkillDetailResult>>();\n const initialAuthState = await resolveStoredAuthState(input.worktree, config);\n const loginBootstrap = {\n promise: null as Promise<AuthState> | null,\n snapshot: createIdleLoginBootstrapSnapshot(),\n };\n let lastAuthenticatedAuthState: AuthState | null = initialAuthState;\n let didEmitStart = false;\n let didScheduleStop = false;\n let presenceStartPromise: Promise<void> | null = null;\n let presenceStopPromise: Promise<void> | null = null;\n let lastInteractiveDirectoryPath: string | null = null;\n\n const resolveActionAuthState = async (): Promise<AuthState | null> => {\n const storedAuthState = await resolveStoredAuthState(input.worktree, config);\n if (storedAuthState) return storedAuthState;\n return lastAuthenticatedAuthState;\n };\n\n const emitActionEventForCurrentSession = async ({\n event,\n authState,\n directoryPath,\n }: {\n event: PluginActionEventType;\n authState?: AuthState | null;\n directoryPath?: string;\n }): Promise<void> => {\n await emitPluginActionEvent({\n config,\n authState: authState ?? (await resolveActionAuthState()),\n event,\n workspacePath,\n directoryPath,\n });\n };\n\n const schedulePresenceStart = (authState: AuthState): Promise<void> => {\n lastAuthenticatedAuthState = authState;\n if (didEmitStart) {\n return presenceStartPromise ?? Promise.resolve();\n }\n\n didEmitStart = true;\n presenceStartPromise = Promise.all([\n emitPresenceEvent({\n config,\n authState,\n event: 'START',\n workspacePath,\n }),\n emitActionEventForCurrentSession({\n event: 'START',\n authState,\n directoryPath: lastInteractiveDirectoryPath ?? undefined,\n }),\n ]).then(() => undefined);\n return presenceStartPromise;\n };\n\n const schedulePresenceStop = (): Promise<void> => {\n if (didScheduleStop) {\n return presenceStopPromise ?? Promise.resolve();\n }\n\n didScheduleStop = true;\n if (!didEmitStart || !lastAuthenticatedAuthState) {\n presenceStopPromise = Promise.resolve();\n return presenceStopPromise;\n }\n\n presenceStopPromise = (async () => {\n await presenceStartPromise?.catch(() => undefined);\n await Promise.all([\n emitPresenceEvent({\n config,\n authState: lastAuthenticatedAuthState,\n event: 'STOP',\n workspacePath,\n }),\n emitActionEventForCurrentSession({\n event: 'STOP',\n authState: lastAuthenticatedAuthState,\n directoryPath: lastInteractiveDirectoryPath ?? undefined,\n }),\n ]);\n })();\n\n return presenceStopPromise;\n };\n\n const scheduleInteractivePresenceStart = async (): Promise<void> => {\n const authState = await resolveStoredAuthState(input.worktree, config);\n if (!authState) return;\n await schedulePresenceStart(authState);\n };\n\n process.once('beforeExit', () => {\n void schedulePresenceStop();\n });\n\n for (const shutdownSignal of PRESENCE_SHUTDOWN_SIGNALS) {\n try {\n process.once(shutdownSignal, () => {\n void schedulePresenceStop().finally(() => {\n process.exit(PRESENCE_SIGNAL_EXIT_CODES[shutdownSignal]);\n });\n });\n } catch {\n continue;\n }\n }\n\n const clearPublishedSkillState = () => {\n cache.clear();\n catalogInflight.clear();\n detailCache.clear();\n detailInflight.clear();\n };\n\n const persistAuthState = async (session: PluginSessionResponse['session']): Promise<AuthState> => {\n const authState = toAuthState(session);\n await writeAuthState(config.authStatePath, authState);\n clearPublishedSkillState();\n return authState;\n };\n\n const startLoginCompletion = (trigger: LoginBootstrapTrigger): Promise<AuthState> => {\n if (loginBootstrap.promise) {\n return loginBootstrap.promise;\n }\n\n const startedAt = new Date().toISOString();\n\n loginBootstrap.snapshot = {\n status: 'starting',\n trigger,\n startedAt,\n expiresAt: null,\n browserUrl: null,\n browserOpenError: null,\n email: null,\n message: null,\n };\n\n const loginPromise = (async () => {\n const loginSignal = AbortSignal.timeout(LOGIN_TIMEOUT_MS);\n let loginStart: OidcLoginStart | null = null;\n\n try {\n loginStart = await startLoginFlow(loginSignal);\n const browserOpenError = await openBrowser(loginStart.browserUrl);\n\n loginBootstrap.snapshot = {\n status: 'pending',\n trigger,\n startedAt,\n expiresAt: loginStart.expiresAt,\n browserUrl: loginStart.browserUrl,\n browserOpenError,\n email: null,\n message: browserOpenError\n ? `Automatic browser open failed. Open ${loginStart.browserUrl} manually.`\n : `Browser login started for published skill ${trigger}.`,\n };\n\n const callbackPayload = await loginStart.callbackPromise;\n\n if (callbackPayload.status === 'error') {\n throw new Error(callbackPayload.message);\n }\n\n if (callbackPayload.state !== loginStart.expectedState) {\n throw new Error('OAuth callback state did not match the original login request.');\n }\n\n loginBootstrap.snapshot = {\n status: 'pending',\n trigger,\n startedAt,\n expiresAt: loginStart.expiresAt,\n browserUrl: loginStart.browserUrl,\n browserOpenError,\n email: null,\n message: 'OAuth callback received. Finalizing backend session exchange.',\n };\n\n const pluginSession = await createPluginSession({\n code: callbackPayload.code,\n codeVerifier: loginStart.codeVerifier,\n redirectUri: OIDC_CALLBACK_URL,\n config,\n signal: loginSignal,\n });\n const authState = await persistAuthState(pluginSession);\n await emitActionEventForCurrentSession({\n event: 'LOGIN_SUCCESS',\n authState,\n directoryPath: lastInteractiveDirectoryPath ?? undefined,\n });\n\n loginBootstrap.snapshot = {\n status: 'authenticated',\n trigger,\n startedAt,\n expiresAt: authState.expiresAt,\n browserUrl: loginStart.browserUrl,\n browserOpenError,\n email: authState.email,\n message: `Browser login completed successfully for published skill ${trigger}.`,\n };\n\n return authState;\n } catch (error) {\n await emitActionEventForCurrentSession({\n event: 'LOGIN_FAILED',\n directoryPath: lastInteractiveDirectoryPath ?? undefined,\n });\n loginBootstrap.snapshot = {\n status: 'failed',\n trigger,\n startedAt,\n expiresAt: loginBootstrap.snapshot.expiresAt,\n browserUrl: loginBootstrap.snapshot.browserUrl,\n browserOpenError: loginBootstrap.snapshot.browserOpenError,\n email: null,\n message: error instanceof Error ? error.message : 'Browser login failed.',\n };\n throw error;\n } finally {\n await loginStart?.closeCallbackServer().catch(() => undefined);\n loginBootstrap.promise = null;\n }\n })();\n\n loginBootstrap.promise = loginPromise;\n return loginPromise;\n };\n\n const loadPublishedSkillCatalog = async ({\n directory,\n useCache,\n signal,\n }: {\n directory: string;\n useCache: boolean;\n signal: AbortSignal;\n }): Promise<PublishedSkillsResult> => {\n const workspaceResolution = await resolveWorkspace({\n config,\n directory,\n });\n const directoryPath = workspaceResolution.directoryPath;\n const preferenceContext = await resolvePublishedSkillPreferenceCacheContext(config);\n const cacheKey = getCatalogCacheKey(workspaceResolution, preferenceContext);\n const cached = cache.get(cacheKey);\n\n if (useCache && cached && cached.expiresAt > Date.now()) {\n return {\n directoryPath,\n workspaceResolution,\n fetchResult: {\n ...cached.result,\n source: 'cache',\n },\n };\n }\n\n const inflight = catalogInflight.get(cacheKey);\n if (inflight) {\n return inflight;\n }\n\n const requestPromise = (async (): Promise<PublishedSkillsResult> => {\n const fetchResult = await fetchPublishedSkillsCatalog(\n input.worktree,\n config,\n workspaceResolution,\n signal,\n clearPublishedSkillState,\n );\n\n cache.set(cacheKey, {\n result: fetchResult,\n expiresAt: Date.now() + CACHE_TTL_MS,\n });\n\n return {\n directoryPath,\n workspaceResolution,\n fetchResult,\n };\n })();\n\n catalogInflight.set(cacheKey, requestPromise);\n\n try {\n return await requestPromise;\n } finally {\n catalogInflight.delete(cacheKey);\n }\n };\n\n const loadPublishedSkillDetail = async ({\n workspaceResolution,\n item,\n signal,\n useCache,\n purpose,\n }: {\n workspaceResolution: WorkspaceResolution;\n item: PublishedSkillCatalogItem;\n signal: AbortSignal;\n useCache: boolean;\n purpose: PublishedSkillArtifactDetailPurpose;\n }): Promise<PublishedSkillDetailResult> => {\n const directoryPath = workspaceResolution.directoryPath;\n const preferenceContext = await resolvePublishedSkillPreferenceCacheContext(config);\n const catalogCacheKey = getCatalogCacheKey(workspaceResolution, preferenceContext);\n const cacheKey = getDetailCacheKey(catalogCacheKey, item.skillVersion.id);\n const inflightKey = getDetailInflightKey(catalogCacheKey, item.skillVersion.id, purpose);\n const cached = detailCache.get(cacheKey);\n\n if (purpose === 'SYSTEM_CONTEXT' && useCache && cached && cached.expiresAt > Date.now()) {\n return {\n ok: true,\n detail: toPublishedSkillDetail({\n ...item,\n publishedArtifact: cached.artifact,\n }),\n };\n }\n\n const inflight = detailInflight.get(inflightKey);\n if (inflight) {\n return inflight;\n }\n\n const requestPromise = (async (): Promise<PublishedSkillDetailResult> => {\n const detailResult = await fetchPublishedSkillDetail({\n worktree: input.worktree,\n config,\n resolution: workspaceResolution,\n skillVersionId: item.skillVersion.id,\n signal,\n onAuthStateChanged: clearPublishedSkillState,\n purpose,\n });\n\n if (!detailResult.ok) {\n return {\n ok: false,\n status: detailResult.result.status,\n output: JSON.stringify(\n {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n status: detailResult.result.status,\n requestedDirectoryPath: directoryPath,\n workspaceResolution: toWorkspaceResolutionOutput(workspaceResolution),\n requestedSkillVersionId: item.skillVersion.id,\n message: detailResult.result.message,\n fetchedAt: detailResult.result.fetchedAt,\n source: detailResult.result.source,\n },\n null,\n 2,\n ),\n metadata: {\n status: detailResult.result.status,\n ...toWorkspaceResolutionMetadata(workspaceResolution),\n source: detailResult.result.source,\n },\n };\n }\n\n detailCache.set(cacheKey, {\n artifact: detailResult.artifact,\n expiresAt: Date.now() + CACHE_TTL_MS,\n });\n\n return {\n ok: true,\n detail: toPublishedSkillDetail({\n ...item,\n publishedArtifact: detailResult.artifact,\n }),\n };\n })();\n\n detailInflight.set(inflightKey, requestPromise);\n\n try {\n return await requestPromise;\n } finally {\n detailInflight.delete(inflightKey);\n }\n };\n\n const loadSystemNoteDetails = async ({\n publishedSkillsResult,\n signal,\n }: {\n publishedSkillsResult: PublishedSkillsResult;\n signal: AbortSignal;\n }): Promise<PublishedSkillDetail[]> => {\n if (!publishedSkillsResult.fetchResult.ok) return [];\n\n const prioritizedItems = [...publishedSkillsResult.fetchResult.payload.skills].sort((left, right) => {\n const leftSummary = toPublishedSkillSummary(left);\n const rightSummary = toPublishedSkillSummary(right);\n if (leftSummary.contextKind === rightSummary.contextKind)\n return formatSkillLabel(left).localeCompare(formatSkillLabel(right));\n if (leftSummary.contextKind === 'global') return -1;\n if (rightSummary.contextKind === 'global') return 1;\n return 0;\n });\n const detailResults = await Promise.all(\n prioritizedItems.slice(0, SYSTEM_NOTE_DETAIL_LIMIT).map((item) =>\n loadPublishedSkillDetail({\n workspaceResolution: publishedSkillsResult.workspaceResolution,\n item,\n signal,\n useCache: true,\n purpose: 'SYSTEM_CONTEXT',\n }),\n ),\n );\n\n return detailResults.reduce<PublishedSkillDetail[]>((details, result) => {\n if (!result.ok) return details;\n details.push(result.detail);\n return details;\n }, []);\n };\n\n const executePublishedSkillsFetchTool = async ({\n args,\n context,\n }: {\n args: PublishedSkillFetchArgs;\n context: {\n directory: string;\n abort: AbortSignal;\n metadata: (payload: { title: string; metadata: Record<string, string> }) => void;\n };\n }) => {\n const requestedDirectory = normalizeDirectoryArg(context.directory, args.directory);\n const requestedSkills = parseRequestedSkillArgs(args);\n\n const fetchActionDirectoryPath = normalizeRepositoryPath(workspacePath, requestedDirectory);\n lastInteractiveDirectoryPath = fetchActionDirectoryPath;\n\n const emitFetchOutcome = async (\n event: Extract<PluginActionEventType, 'FETCH_SUCCESS' | 'FETCH_FAILED'>,\n ): Promise<void> => {\n await emitActionEventForCurrentSession({\n event,\n directoryPath: fetchActionDirectoryPath,\n });\n };\n\n let publishedSkillsResult = await loadPublishedSkillCatalog({\n directory: requestedDirectory,\n useCache: !args.refresh,\n signal: context.abort,\n });\n\n if (publishedSkillsResult.fetchResult.ok) {\n await scheduleInteractivePresenceStart();\n }\n\n if (!publishedSkillsResult.fetchResult.ok && publishedSkillsResult.fetchResult.status === 'missing_auth') {\n try {\n await startLoginCompletion('fetch').then(async (authState) => {\n await schedulePresenceStart(authState);\n });\n publishedSkillsResult = await loadPublishedSkillCatalog({\n directory: requestedDirectory,\n useCache: false,\n signal: context.abort,\n });\n\n if (publishedSkillsResult.fetchResult.ok) {\n await scheduleInteractivePresenceStart();\n }\n } catch {\n // Return the original fetch failure with the latest login bootstrap snapshot attached.\n }\n }\n\n if (!publishedSkillsResult.fetchResult.ok) {\n await emitFetchOutcome('FETCH_FAILED');\n return toFetchFailureOutput({\n worktree: input.worktree,\n config,\n publishedSkillsResult,\n loginBootstrapSnapshot: loginBootstrap.snapshot,\n });\n }\n\n const filteredPublishedSkillsResult = await filterIgnoredPublishedSkills(config, publishedSkillsResult);\n if (!filteredPublishedSkillsResult.fetchResult.ok) {\n await emitFetchOutcome('FETCH_FAILED');\n return toFetchFailureOutput({\n worktree: input.worktree,\n config,\n publishedSkillsResult: filteredPublishedSkillsResult,\n loginBootstrapSnapshot: loginBootstrap.snapshot,\n });\n }\n\n const selection = selectPublishedSkills(filteredPublishedSkillsResult.fetchResult.payload, requestedSkills);\n const isSingleRequest = requestedSkills.length === 1;\n\n if (requestedSkills.length === 0) {\n const catalog = toPublishedSkillCatalog(filteredPublishedSkillsResult.fetchResult.payload);\n\n context.metadata({\n title: `opencode-wizard published skills catalog: ${catalog.publishedSkillCount} active`,\n metadata: {\n ...toWorkspaceResolutionMetadata(filteredPublishedSkillsResult.workspaceResolution),\n status: 'ready',\n publishedSkillCount: catalog.publishedSkillCount.toString(),\n globalAssignmentCount: catalog.assignmentCounts.global.toString(),\n projectAssignmentCount: catalog.assignmentCounts.project.toString(),\n userAssignmentCount: catalog.assignmentCounts.user.toString(),\n ignoredSkillCount: filteredPublishedSkillsResult.ignoreState.ignoredSkillSlugs.length.toString(),\n },\n });\n\n await emitFetchOutcome('FETCH_SUCCESS');\n\n return {\n output: JSON.stringify(\n {\n ...catalog,\n status: 'ready',\n requestedDirectoryPath: filteredPublishedSkillsResult.directoryPath,\n workspaceResolution: toWorkspaceResolutionOutput(filteredPublishedSkillsResult.workspaceResolution),\n ignoredPublishedSkills: {\n scopeKey: filteredPublishedSkillsResult.ignoreState.scopeKey,\n count: filteredPublishedSkillsResult.ignoreState.ignoredSkillSlugs.length,\n },\n fetchedAt: filteredPublishedSkillsResult.fetchResult.fetchedAt,\n source: filteredPublishedSkillsResult.fetchResult.source,\n message:\n 'Catalog discovery only. Provide `skill` for one identifier or prefer `skills` for comma/newline-separated multiple identifiers to fetch markdown bodies/details.',\n },\n null,\n 2,\n ),\n metadata: {\n status: 'ready',\n ...toWorkspaceResolutionMetadata(filteredPublishedSkillsResult.workspaceResolution),\n publishedSkillCount: catalog.publishedSkillCount.toString(),\n globalAssignmentCount: catalog.assignmentCounts.global.toString(),\n projectAssignmentCount: catalog.assignmentCounts.project.toString(),\n userAssignmentCount: catalog.assignmentCounts.user.toString(),\n ignoredSkillCount: filteredPublishedSkillsResult.ignoreState.ignoredSkillSlugs.length.toString(),\n },\n };\n }\n\n if (selection.selectedItems.length === 0 && isSingleRequest) {\n await emitFetchOutcome('FETCH_FAILED');\n return {\n output: JSON.stringify(\n {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n status: 'not_found',\n requestedDirectoryPath: filteredPublishedSkillsResult.directoryPath,\n workspaceResolution: toWorkspaceResolutionOutput(filteredPublishedSkillsResult.workspaceResolution),\n requestedSkill: requestedSkills[0],\n availableSkills: filteredPublishedSkillsResult.fetchResult.payload.skills.map(toPublishedSkillSummary),\n ignoredPublishedSkills: {\n scopeKey: filteredPublishedSkillsResult.ignoreState.scopeKey,\n count: filteredPublishedSkillsResult.ignoreState.ignoredSkillSlugs.length,\n },\n },\n null,\n 2,\n ),\n metadata: {\n status: 'not_found',\n ...toWorkspaceResolutionMetadata(filteredPublishedSkillsResult.workspaceResolution),\n },\n };\n }\n\n let skillDetailResults = await Promise.all(\n selection.selectedItems.map((item) =>\n loadPublishedSkillDetail({\n workspaceResolution: filteredPublishedSkillsResult.workspaceResolution,\n item,\n signal: context.abort,\n useCache: !args.refresh,\n purpose: 'TOOL_FETCH',\n }),\n ),\n );\n\n if (skillDetailResults.some((result) => !result.ok && result.status === 'missing_auth')) {\n try {\n await startLoginCompletion('fetch').then(async (authState) => {\n await schedulePresenceStart(authState);\n });\n skillDetailResults = await Promise.all(\n selection.selectedItems.map((item) =>\n loadPublishedSkillDetail({\n workspaceResolution: filteredPublishedSkillsResult.workspaceResolution,\n item,\n signal: context.abort,\n useCache: false,\n purpose: 'TOOL_FETCH',\n }),\n ),\n );\n } catch {\n // Return the original detail failure after the login bootstrap attempt updates snapshot state.\n }\n }\n\n const failedSkillDetail = skillDetailResults.find((result) => !result.ok);\n\n if (failedSkillDetail && !failedSkillDetail.ok) {\n await emitFetchOutcome('FETCH_FAILED');\n return failedSkillDetail;\n }\n\n const skillDetails = skillDetailResults.map((result) => {\n if (!result.ok) {\n throw new Error('Published skill detail result unexpectedly missing after success guard.');\n }\n\n return result.detail;\n });\n\n if (isSingleRequest && skillDetails[0]) {\n const detail = skillDetails[0];\n\n context.metadata({\n title: `opencode-wizard published skill: ${detail.artifactName || detail.skillName}`,\n metadata: {\n ...toWorkspaceResolutionMetadata(filteredPublishedSkillsResult.workspaceResolution),\n skillSlug: detail.skillSlug,\n version: detail.version,\n },\n });\n\n await emitFetchOutcome('FETCH_SUCCESS');\n\n return {\n output: JSON.stringify(\n {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n requestedDirectoryPath: filteredPublishedSkillsResult.directoryPath,\n workspaceResolution: toWorkspaceResolutionOutput(filteredPublishedSkillsResult.workspaceResolution),\n workspace: filteredPublishedSkillsResult.fetchResult.payload.workspace,\n fetchedAt: filteredPublishedSkillsResult.fetchResult.fetchedAt,\n source: filteredPublishedSkillsResult.fetchResult.source,\n skill: detail,\n },\n null,\n 2,\n ),\n metadata: {\n status: 'ready',\n ...toWorkspaceResolutionMetadata(filteredPublishedSkillsResult.workspaceResolution),\n skillSlug: detail.skillSlug,\n },\n };\n }\n\n context.metadata({\n title: `opencode-wizard published skills fetch: ${skillDetails.length}`,\n metadata: {\n ...toWorkspaceResolutionMetadata(filteredPublishedSkillsResult.workspaceResolution),\n requestedCount: requestedSkills.length.toString(),\n matchedCount: skillDetails.length.toString(),\n },\n });\n\n await emitFetchOutcome('FETCH_SUCCESS');\n\n return {\n output: JSON.stringify(\n {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n requestedDirectoryPath: filteredPublishedSkillsResult.directoryPath,\n workspaceResolution: toWorkspaceResolutionOutput(filteredPublishedSkillsResult.workspaceResolution),\n workspace: filteredPublishedSkillsResult.fetchResult.payload.workspace,\n fetchedAt: filteredPublishedSkillsResult.fetchResult.fetchedAt,\n source: filteredPublishedSkillsResult.fetchResult.source,\n requestedSkills,\n missingSkills: selection.missingIdentifiers,\n skills: skillDetails,\n },\n null,\n 2,\n ),\n metadata: {\n status: selection.missingIdentifiers.length > 0 ? 'partial' : 'ready',\n ...toWorkspaceResolutionMetadata(filteredPublishedSkillsResult.workspaceResolution),\n matchedCount: skillDetails.length.toString(),\n },\n };\n };\n\n const executeStatusTool = async ({ args, context }: { args: PluginStatusArgs; context: ToolExecuteContext }) => {\n const requestedDirectory = normalizeDirectoryArg(context.directory, args.directory);\n let snapshot = await resolvePluginStatusSnapshot({\n worktree: input.worktree,\n directory: requestedDirectory,\n signal: context.abort,\n });\n\n if (snapshot.status === 'missing_auth') {\n try {\n await startLoginCompletion('status').then(async (authState) => {\n await schedulePresenceStart(authState);\n });\n snapshot = await resolvePluginStatusSnapshot({\n worktree: input.worktree,\n directory: requestedDirectory,\n signal: context.abort,\n });\n } catch {\n // Keep returning the safe missing-auth snapshot when interactive login is cancelled or fails.\n }\n }\n\n const metadata = toPluginStatusMetadata(snapshot);\n\n context.metadata({\n title: `opencode-wizard status: ${snapshot.status} / auth ${snapshot.authState.status}`,\n metadata,\n });\n\n return {\n output: JSON.stringify(toAiFacingPluginStatusSnapshot(snapshot), null, 2),\n metadata,\n };\n };\n\n return {\n tool: {\n opencode_wizard_published_skills_fetch: tool<PublishedSkillFetchArgs>({\n description:\n '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, and after native errors like `Skill \"...\" not found`; prefer `skills` for multiple identifiers and call with no args to discover the catalog and bootstrap auth when needed',\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 executePublishedSkillsFetchTool({\n args,\n context,\n });\n },\n }),\n opencode_wizard_status: tool<PluginStatusArgs>({\n description:\n 'Report opencode-wizard plugin status, bootstrap auth when missing, and return a safe auth summary 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 executeStatusTool({\n args,\n context,\n });\n },\n }),\n },\n 'experimental.chat.system.transform': async (_hookInput, output) => {\n let publishedSkillsResult = await loadPublishedSkillCatalog({\n directory: input.directory,\n useCache: true,\n signal: AbortSignal.timeout(5_000),\n });\n\n if (!publishedSkillsResult.fetchResult.ok && publishedSkillsResult.fetchResult.status === 'missing_auth') {\n try {\n await startLoginCompletion('status').then(async (authState) => {\n await schedulePresenceStart(authState);\n });\n publishedSkillsResult = await loadPublishedSkillCatalog({\n directory: input.directory,\n useCache: false,\n signal: AbortSignal.timeout(5_000),\n });\n } catch {\n const loginMessage = loginBootstrap.snapshot.message\n ? ` Last login status: ${loginBootstrap.snapshot.message}`\n : '';\n output.system.push(\n `opencode-wizard plugin stored auth is missing, expired, or rejected. Startup browser login was started but did not complete successfully.${loginMessage} Use opencode_wizard_status or opencode_wizard_published_skills_fetch to retry authentication when published skills are needed. No tokens are exposed.`,\n );\n return;\n }\n\n if (!publishedSkillsResult.fetchResult.ok) {\n output.system.push(\n `opencode-wizard plugin startup login completed, but published skills are still unavailable: ${publishedSkillsResult.fetchResult.message} No tokens are exposed.`,\n );\n return;\n }\n }\n\n const filteredPublishedSkillsResult = await filterIgnoredPublishedSkills(config, publishedSkillsResult);\n const details = await loadSystemNoteDetails({\n publishedSkillsResult: filteredPublishedSkillsResult,\n signal: AbortSignal.timeout(5_000),\n });\n const systemNote = buildSystemNote(filteredPublishedSkillsResult, config, details);\n\n if (!systemNote) return;\n\n output.system.push(systemNote);\n },\n };\n};\n\nexport default {\n id: PLUGIN_ID,\n server: OpencodeWizardSkillsPlugin,\n};\n"],"mappings":"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ACA;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;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,uCAAuC,GAAG;AAChD;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,4BAA4B,GAAG;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMC,gBAAgB,GAAIC,KAAa,IAAa;EAClD,MAAMC,YAAY,GAAGD,KAAK,CAACE,IAAI,CAAC,CAAC;EAEjC,IACGD,YAAY,CAACE,UAAU,CAAC,GAAG,CAAC,IAAIF,YAAY,CAACG,QAAQ,CAAC,GAAG,CAAC,IAC1DH,YAAY,CAACE,UAAU,CAAC,GAAG,CAAC,IAAIF,YAAY,CAACG,QAAQ,CAAC,GAAG,CAAE,EAC5D;IACA,OAAOH,YAAY,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAClC;EAEA,OAAOJ,YAAY;AACrB,CAAC;AAED,MAAMK,WAAW,GAAIC,GAAW,IAA0B;EACxD,MAAMC,MAAM,GAAG,IAAIC,GAAG,CAAiB,CA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,cAAc,GAAGP,UAAU,CAACzY,OAAO,CAAC;EAC1C,MAAMiZ,SAAS,GAAGJ,UAAU,IAAI,GAAG,IAAIA,UAAU,GAAG,GAAG;EACvD,MAAMK,SAAS,GAAGD,SAAS,GAAG,SAAS,GAAGJ,UAAU,KAAK,GAAG,GAAG,WAAW,GAAG,OAAO;EACpF,MAAMM,SAAS,GAAGF,SAAS,GACvB,0BAA0B,GAC1BJ,UAAU,KAAK,GAAG,GAChB,oBAAoB,GACpB,sBAAsB;EAC5B,MAAMO,gBAAgB,GAAGX,UAAU,CAACU,SAAS,CAAC;EAC9C,MAAME,OAAO,GAAGJ,SAAS,GACrB,wBAAwB,GACxBJ,UAAU,KAAK,GAAG,GAChB,0BAA0B,GAC1B,+BAA+B;EACrC,MAAMS,UAAU,GAAGL,SAAS,GACxB,qGAAqG,GACrG,gEAAgE;EACpE,MAAMM,eAAe,GAAGN,SAAS,GAC7B;AACN;AACA,cAAc,GACR,EAAE;EACN,MAAMO,SAAS,GAAGP,SAAS,GACvB,4HAA4H,GAC5HJ,UAAU,KAAK,GAAG,GAChB,gMAAgM,GAChM,4KAA4K;EAElL1C,QAAQ,CAACsD,SAAS,CAACZ,UAAU,EAAE;IAC7B,cAAc,EAAE,0BAA0B;IAC1C,eAAe,EAAE;EACnB,CAAC,CAAC;EACF1C,QAAQ,CAACuD,GAAG,CACV;AACJ;AACA;AACA;AACA;AACA;AACA,aAAaX,YAAY;AACzB;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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","ignoreList":[]}