@aexol/opencode-wizard 0.4.8 → 0.5.1

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.
@@ -12,6 +12,7 @@ export type ResolvedConfig = {
12
12
  rootSkillSeedPath: string;
13
13
  authStatePath: string;
14
14
  };
15
+ export type PluginEventSource = 'OPENCODE' | 'PI';
15
16
  export type WorkspaceResolution = {
16
17
  requestedDirectory: string;
17
18
  repositoryRoot: string;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../src/server/types.ts"],"sourcesContent":["import type { ToolFactory } from '../plugin-tools.js';\nimport type { PublishedSkillDetail, PublishedSkillSummary, PublishedSkillsSuccessState } from '../published-skills-transform.js';\nimport type { NativeSkillsUrlCompatibility } from './constants.js';\n\nexport type ResolvedConfig = {\n backendOrigin: string;\n graphqlUrl: string;\n authSessionUrl: string;\n presenceUrl: string;\n actionsUrl: string;\n configuredWorkspaceSlug: string | null;\n fallbackWorkspaceSlug: string;\n rootSkillSeedPath: string;\n authStatePath: string;\n};\n\nexport type WorkspaceResolution = {\n requestedDirectory: string;\n repositoryRoot: string;\n repositoryUrl: string | null;\n workspaceSlug?: string | null;\n workspaceSlugSource?: 'configured' | 'learned' | 'backend' | 'fallback' | 'repositoryUrl' | 'placeholder';\n fallbackWorkspaceSlug: string | null;\n directoryPath: string;\n cacheKey: string;\n};\n\nexport type WorkspaceResolutionOutput = {\n requestedDirectory: string;\n repositoryRoot: string;\n repositoryUrl: string | null;\n workspaceSlug?: string | null;\n workspaceSlugSource?: WorkspaceResolution['workspaceSlugSource'];\n fallbackWorkspaceSlug: string | null;\n directoryPath: string;\n};\n\nexport type StoredWorkspaceSlugMapping = {\n repositoryUrl: string | null;\n repositoryRoot: string | null;\n workspaceSlug: string;\n updatedAt: string;\n};\n\nexport type PublishedSkillCatalogResponse = {\n pluginPublishedSkills: PublishedSkillCatalogPayload;\n};\n\nexport type PublishedSkillDetailResponse = {\n pluginPublishedSkillVersionArtifact: PublishedSkillArtifactDetailPayload | null;\n};\n\nexport type WizardArtifactKind = 'SKILL' | 'DESIGN_DOC';\n\nexport type WizardArtifactCatalogResponse = {\n pluginWizardArtifacts: WizardArtifactCatalogPayload;\n};\n\nexport type WizardArtifactDetailResponse = {\n pluginWizardArtifactVersion: WizardArtifactDetailPayload | 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\nexport type RecommendationMetadata = {\n relevance?: number | null;\n recommendationReason?: string | null;\n};\n\nexport type WizardArtifactCatalogPayload = {\n artifactKind: WizardArtifactKind;\n workspace: PublishedSkillCatalogPayload['workspace'];\n directoryPath: string;\n artifacts: WizardArtifactCatalogItem[];\n catalogArtifacts: WizardArtifactInstallableCatalogItem[];\n artifactPreferences: WizardArtifactUserPreferences;\n unsupportedReason?: string | null;\n message?: string | null;\n};\n\nexport type WizardArtifactUserPreferences = {\n scopeKey: string;\n userKey: string;\n ignoredArtifacts: WizardArtifactCatalogItem[];\n};\n\nexport type PublishedSkillUserPreferences = {\n scopeKey: string;\n userKey: string;\n ignoredSkills: PublishedSkillCatalogItem[];\n};\n\nexport type PublishedSkillPreferenceScope = 'GLOBAL' | 'WORKSPACE';\n\nexport type CreateOrUpdateSkillFromMarkdownResponse = {\n admin: {\n createOrUpdateSkillFromMarkdown: {\n success: boolean;\n skillSlug: string | null;\n skillVersionId: string | null;\n artifactSlug: string | null;\n artifactVersionId: string | null;\n errors: string[];\n };\n };\n};\n\nexport type EditorSkillWorkspaceAssignmentLookupResponse = {\n admin: {\n skill: { id: string; slug: string } | null;\n workspace: { id: string; slug: string } | null;\n };\n};\n\nexport type BulkCreateSkillAssignmentsResponse = {\n admin: {\n bulkCreateSkillAssignments: {\n scopePathAssignments: Array<{ id: string }>;\n skippedScopePathAssignments: Array<{ id: string }>;\n conflicts: Array<{\n target: string;\n inputIndex: number;\n reason: string;\n message: string;\n }>;\n };\n };\n};\n\nexport type EditorSkillWorkspaceAssignmentResult = {\n status: 'created' | 'already_exists' | 'skipped' | 'failed';\n workspaceSlug?: string | null;\n workspaceId?: string | null;\n directoryPath: string;\n assignmentId?: string | null;\n message?: string | null;\n};\n\nexport type ImportWizardArtifactSnapshotResponse = {\n admin: {\n importWizardArtifactSnapshot: {\n success: boolean;\n skillSlug: string | null;\n skillVersionId: string | null;\n artifactSlug: string | null;\n artifactVersionId: string | null;\n errors: string[];\n };\n };\n};\n\nexport type SetPublishedSkillPreferenceResponse = {\n setPublishedSkillPreference: PublishedSkillUserPreferences;\n};\n\nexport type PublishedSkillInstallableCatalogItem = RecommendationMetadata &\n Pick<PublishedSkillCatalogItem, 'skill' | 'skillVersion' | 'publishedArtifact'>;\n\nexport type PublishedSkillCatalogItem = RecommendationMetadata & {\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 revision?: string | null;\n updatedAtCursor?: string | null;\n publishedAt?: string | null;\n fileCount: number;\n };\n};\n\nexport type WizardArtifactInstallableCatalogItem = RecommendationMetadata &\n Pick<WizardArtifactCatalogItem, 'artifact' | 'artifactVersion'>;\n\nexport type WizardArtifactCatalogItem = RecommendationMetadata & {\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren?: boolean | null;\n artifact: {\n id: string;\n kind: WizardArtifactKind;\n slug: string;\n name: string;\n summary?: string | null;\n whenToUse?: string | null;\n status: string;\n installPolicy: PublishedSkillInstallPolicy;\n };\n artifactVersion: {\n id: string;\n version: string;\n title?: string | null;\n summary?: string | null;\n status: string;\n frontmatterName: string;\n frontmatterDescription: string;\n checksum: string;\n revision?: string | null;\n updatedAtCursor?: string | null;\n canonicalFilePath: string;\n publishedAt?: string | null;\n fileCount: number;\n };\n};\n\nexport type PublishedSkillArtifactFilePayload = {\n id: string;\n relativePath: string;\n contentType: string;\n content: string;\n checksum: string;\n size: number;\n sortOrder: number;\n};\n\nexport type PublishedSkillFacet = {\n id: string;\n slug: string;\n label: string;\n description?: string | null;\n};\n\nexport type PublishedSkillTag = {\n id: string;\n slug: string;\n label: string;\n description?: string | null;\n facet?: PublishedSkillFacet | null;\n};\n\nexport type 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\nexport type WizardArtifactDetailItem = WizardArtifactCatalogItem & {\n artifactVersion: WizardArtifactCatalogItem['artifactVersion'] & {\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFilePayload[];\n };\n};\n\nexport type PublishedSkillArtifactDetailPayload = PublishedSkillCatalogItem['publishedArtifact'] & {\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFilePayload[];\n};\n\nexport type WizardArtifactDetailPayload = WizardArtifactCatalogItem['artifactVersion'] & {\n artifact: WizardArtifactCatalogItem['artifact'];\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFilePayload[];\n};\n\nexport type PublishedSkillArtifactDetailPurpose = 'TOOL_FETCH';\n\nexport type GraphQLErrorItem = {\n message: string;\n path?: Array<string | number>;\n extensions?: {\n code?: string;\n } & Record<string, unknown>;\n};\n\nexport type GraphQLResponse<TData> = {\n data?: TData;\n errors?: GraphQLErrorItem[];\n};\n\nexport type AuthState = {\n pluginId: string;\n sessionToken: string;\n expiresAt: string;\n authenticatedAt: string;\n userId: string;\n email: string;\n role?: 'ADMIN' | 'EDITOR' | null;\n};\n\nexport type CurrentUserRoleResponse = {\n user?: {\n me?: {\n _id: string;\n email: string;\n role: 'ADMIN' | 'EDITOR';\n } | null;\n } | null;\n};\n\nexport type PresenceEventType = 'START' | 'STOP';\n\nexport type PluginActionEventType =\n | PresenceEventType\n | 'FETCH_SUCCESS'\n | 'FETCH_FAILED'\n | 'LOGIN_SUCCESS'\n | 'LOGIN_FAILED'\n | 'PREFERENCE_SUCCESS'\n | 'PREFERENCE_FAILED';\n\nexport type LoginBootstrapTrigger = 'fetch' | 'status';\n\nexport type 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\nexport type StatusPathLoginBootstrap = {\n promise: Promise<AuthState> | null;\n status: 'idle' | 'pending' | 'authenticated' | 'failed';\n message: string | null;\n failedAt: number | null;\n};\n\nexport type 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 graphQlErrors?: string[];\n fetchedAt: string;\n source: 'network' | 'cache';\n };\n\nexport type CacheEntry = {\n result: FetchResult;\n expiresAt: number;\n cursor: string;\n};\n\nexport type WizardArtifactFetchResult =\n | {\n ok: true;\n status: 'ready';\n authMode: 'session';\n payload: WizardArtifactCatalogPayload;\n fetchedAt: string;\n source: 'network' | 'cache';\n }\n | Extract<FetchResult, { ok: false }>;\n\nexport type DetailCacheEntry = {\n artifact: PublishedSkillArtifactDetailPayload;\n expiresAt: number;\n revision: string;\n};\n\nexport type WizardArtifactDetailCacheEntry = {\n artifact: WizardArtifactDetailPayload;\n expiresAt: number;\n revision: string;\n};\n\nexport type PublishedSkillPreferenceAction = 'install' | 'uninstall' | 'ignore' | 'unignore';\n\nexport type OpencodePluginModule = {\n tool: ToolFactory;\n};\n\nexport type OpencodePluginServerInput = {\n worktree: string;\n directory: string;\n};\n\nexport type OpencodePluginSystemTransformOutput = {\n system: string[];\n};\n\nexport type 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\nexport type PublishedSkillsResult = {\n directoryPath: string;\n workspaceResolution: WorkspaceResolution;\n fetchResult: FetchResult;\n};\n\nexport type PublishedSkillsIgnoreState = {\n scopeKey: string;\n userKey: string;\n ignoredSkillSlugs: string[];\n installedGlobalSkillSlugs: string[];\n installedWorkspaceSkillSlugs: string[];\n globalSkillManagementHint: string;\n};\n\nexport type PublishedSkillPreferenceCacheContext = {\n userKey: string;\n preferenceVersion: number;\n};\n\nexport type FilteredPublishedSkillsResult = PublishedSkillsResult & {\n ignoreState: PublishedSkillsIgnoreState;\n ignoredSkills: PublishedSkillSummary[];\n};\n\nexport type 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 role: 'ADMIN' | 'EDITOR' | 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: WorkspaceResolutionOutput;\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: string[];\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\nexport type AiFacingIgnoredPublishedSkillsSummary = {\n scopeKey: string;\n count: number;\n};\n\nexport type AiFacingPluginStatusSnapshot = Omit<PluginStatusSnapshot, 'ignoredPublishedSkills' | 'installableCatalog'> & {\n ignoredPublishedSkills: AiFacingIgnoredPublishedSkillsSummary;\n};\n\nexport type OidcDiscoveryDocument = {\n authorization_endpoint: string;\n};\n\nexport type PluginSessionResponse = {\n success: true;\n session: {\n jwtToken: string;\n expiresAt: string;\n user: {\n id: string;\n email: string;\n role?: 'ADMIN' | 'EDITOR';\n };\n };\n};\n\nexport type OidcCallbackPayload =\n | {\n status: 'success';\n code: string;\n state: string;\n }\n | {\n status: 'error';\n message: string;\n };\n\nexport type OidcLoginStart = {\n browserUrl: string;\n expiresAt: string;\n codeVerifier: string;\n expectedState: string;\n callbackPromise: Promise<OidcCallbackPayload>;\n closeCallbackServer: () => Promise<void>;\n};\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["../../src/server/types.ts"],"sourcesContent":["import type { ToolFactory } from '../plugin-tools.js';\nimport type { PublishedSkillDetail, PublishedSkillSummary, PublishedSkillsSuccessState } from '../published-skills-transform.js';\nimport type { NativeSkillsUrlCompatibility } from './constants.js';\n\nexport type ResolvedConfig = {\n backendOrigin: string;\n graphqlUrl: string;\n authSessionUrl: string;\n presenceUrl: string;\n actionsUrl: string;\n configuredWorkspaceSlug: string | null;\n fallbackWorkspaceSlug: string;\n rootSkillSeedPath: string;\n authStatePath: string;\n};\n\nexport type PluginEventSource = 'OPENCODE' | 'PI';\n\nexport type WorkspaceResolution = {\n requestedDirectory: string;\n repositoryRoot: string;\n repositoryUrl: string | null;\n workspaceSlug?: string | null;\n workspaceSlugSource?: 'configured' | 'learned' | 'backend' | 'fallback' | 'repositoryUrl' | 'placeholder';\n fallbackWorkspaceSlug: string | null;\n directoryPath: string;\n cacheKey: string;\n};\n\nexport type WorkspaceResolutionOutput = {\n requestedDirectory: string;\n repositoryRoot: string;\n repositoryUrl: string | null;\n workspaceSlug?: string | null;\n workspaceSlugSource?: WorkspaceResolution['workspaceSlugSource'];\n fallbackWorkspaceSlug: string | null;\n directoryPath: string;\n};\n\nexport type StoredWorkspaceSlugMapping = {\n repositoryUrl: string | null;\n repositoryRoot: string | null;\n workspaceSlug: string;\n updatedAt: string;\n};\n\nexport type PublishedSkillCatalogResponse = {\n pluginPublishedSkills: PublishedSkillCatalogPayload;\n};\n\nexport type PublishedSkillDetailResponse = {\n pluginPublishedSkillVersionArtifact: PublishedSkillArtifactDetailPayload | null;\n};\n\nexport type WizardArtifactKind = 'SKILL' | 'DESIGN_DOC';\n\nexport type WizardArtifactCatalogResponse = {\n pluginWizardArtifacts: WizardArtifactCatalogPayload;\n};\n\nexport type WizardArtifactDetailResponse = {\n pluginWizardArtifactVersion: WizardArtifactDetailPayload | 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\nexport type RecommendationMetadata = {\n relevance?: number | null;\n recommendationReason?: string | null;\n};\n\nexport type WizardArtifactCatalogPayload = {\n artifactKind: WizardArtifactKind;\n workspace: PublishedSkillCatalogPayload['workspace'];\n directoryPath: string;\n artifacts: WizardArtifactCatalogItem[];\n catalogArtifacts: WizardArtifactInstallableCatalogItem[];\n artifactPreferences: WizardArtifactUserPreferences;\n unsupportedReason?: string | null;\n message?: string | null;\n};\n\nexport type WizardArtifactUserPreferences = {\n scopeKey: string;\n userKey: string;\n ignoredArtifacts: WizardArtifactCatalogItem[];\n};\n\nexport type PublishedSkillUserPreferences = {\n scopeKey: string;\n userKey: string;\n ignoredSkills: PublishedSkillCatalogItem[];\n};\n\nexport type PublishedSkillPreferenceScope = 'GLOBAL' | 'WORKSPACE';\n\nexport type CreateOrUpdateSkillFromMarkdownResponse = {\n admin: {\n createOrUpdateSkillFromMarkdown: {\n success: boolean;\n skillSlug: string | null;\n skillVersionId: string | null;\n artifactSlug: string | null;\n artifactVersionId: string | null;\n errors: string[];\n };\n };\n};\n\nexport type EditorSkillWorkspaceAssignmentLookupResponse = {\n admin: {\n skill: { id: string; slug: string } | null;\n workspace: { id: string; slug: string } | null;\n };\n};\n\nexport type BulkCreateSkillAssignmentsResponse = {\n admin: {\n bulkCreateSkillAssignments: {\n scopePathAssignments: Array<{ id: string }>;\n skippedScopePathAssignments: Array<{ id: string }>;\n conflicts: Array<{\n target: string;\n inputIndex: number;\n reason: string;\n message: string;\n }>;\n };\n };\n};\n\nexport type EditorSkillWorkspaceAssignmentResult = {\n status: 'created' | 'already_exists' | 'skipped' | 'failed';\n workspaceSlug?: string | null;\n workspaceId?: string | null;\n directoryPath: string;\n assignmentId?: string | null;\n message?: string | null;\n};\n\nexport type ImportWizardArtifactSnapshotResponse = {\n admin: {\n importWizardArtifactSnapshot: {\n success: boolean;\n skillSlug: string | null;\n skillVersionId: string | null;\n artifactSlug: string | null;\n artifactVersionId: string | null;\n errors: string[];\n };\n };\n};\n\nexport type SetPublishedSkillPreferenceResponse = {\n setPublishedSkillPreference: PublishedSkillUserPreferences;\n};\n\nexport type PublishedSkillInstallableCatalogItem = RecommendationMetadata &\n Pick<PublishedSkillCatalogItem, 'skill' | 'skillVersion' | 'publishedArtifact'>;\n\nexport type PublishedSkillCatalogItem = RecommendationMetadata & {\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 revision?: string | null;\n updatedAtCursor?: string | null;\n publishedAt?: string | null;\n fileCount: number;\n };\n};\n\nexport type WizardArtifactInstallableCatalogItem = RecommendationMetadata &\n Pick<WizardArtifactCatalogItem, 'artifact' | 'artifactVersion'>;\n\nexport type WizardArtifactCatalogItem = RecommendationMetadata & {\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren?: boolean | null;\n artifact: {\n id: string;\n kind: WizardArtifactKind;\n slug: string;\n name: string;\n summary?: string | null;\n whenToUse?: string | null;\n status: string;\n installPolicy: PublishedSkillInstallPolicy;\n };\n artifactVersion: {\n id: string;\n version: string;\n title?: string | null;\n summary?: string | null;\n status: string;\n frontmatterName: string;\n frontmatterDescription: string;\n checksum: string;\n revision?: string | null;\n updatedAtCursor?: string | null;\n canonicalFilePath: string;\n publishedAt?: string | null;\n fileCount: number;\n };\n};\n\nexport type PublishedSkillArtifactFilePayload = {\n id: string;\n relativePath: string;\n contentType: string;\n content: string;\n checksum: string;\n size: number;\n sortOrder: number;\n};\n\nexport type PublishedSkillFacet = {\n id: string;\n slug: string;\n label: string;\n description?: string | null;\n};\n\nexport type PublishedSkillTag = {\n id: string;\n slug: string;\n label: string;\n description?: string | null;\n facet?: PublishedSkillFacet | null;\n};\n\nexport type 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\nexport type WizardArtifactDetailItem = WizardArtifactCatalogItem & {\n artifactVersion: WizardArtifactCatalogItem['artifactVersion'] & {\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFilePayload[];\n };\n};\n\nexport type PublishedSkillArtifactDetailPayload = PublishedSkillCatalogItem['publishedArtifact'] & {\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFilePayload[];\n};\n\nexport type WizardArtifactDetailPayload = WizardArtifactCatalogItem['artifactVersion'] & {\n artifact: WizardArtifactCatalogItem['artifact'];\n markdownBody: string;\n renderedContent: string;\n files: PublishedSkillArtifactFilePayload[];\n};\n\nexport type PublishedSkillArtifactDetailPurpose = 'TOOL_FETCH';\n\nexport type GraphQLErrorItem = {\n message: string;\n path?: Array<string | number>;\n extensions?: {\n code?: string;\n } & Record<string, unknown>;\n};\n\nexport type GraphQLResponse<TData> = {\n data?: TData;\n errors?: GraphQLErrorItem[];\n};\n\nexport type AuthState = {\n pluginId: string;\n sessionToken: string;\n expiresAt: string;\n authenticatedAt: string;\n userId: string;\n email: string;\n role?: 'ADMIN' | 'EDITOR' | null;\n};\n\nexport type CurrentUserRoleResponse = {\n user?: {\n me?: {\n _id: string;\n email: string;\n role: 'ADMIN' | 'EDITOR';\n } | null;\n } | null;\n};\n\nexport type PresenceEventType = 'START' | 'STOP';\n\nexport type PluginActionEventType =\n | PresenceEventType\n | 'FETCH_SUCCESS'\n | 'FETCH_FAILED'\n | 'LOGIN_SUCCESS'\n | 'LOGIN_FAILED'\n | 'PREFERENCE_SUCCESS'\n | 'PREFERENCE_FAILED';\n\nexport type LoginBootstrapTrigger = 'fetch' | 'status';\n\nexport type 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\nexport type StatusPathLoginBootstrap = {\n promise: Promise<AuthState> | null;\n status: 'idle' | 'pending' | 'authenticated' | 'failed';\n message: string | null;\n failedAt: number | null;\n};\n\nexport type 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 graphQlErrors?: string[];\n fetchedAt: string;\n source: 'network' | 'cache';\n };\n\nexport type CacheEntry = {\n result: FetchResult;\n expiresAt: number;\n cursor: string;\n};\n\nexport type WizardArtifactFetchResult =\n | {\n ok: true;\n status: 'ready';\n authMode: 'session';\n payload: WizardArtifactCatalogPayload;\n fetchedAt: string;\n source: 'network' | 'cache';\n }\n | Extract<FetchResult, { ok: false }>;\n\nexport type DetailCacheEntry = {\n artifact: PublishedSkillArtifactDetailPayload;\n expiresAt: number;\n revision: string;\n};\n\nexport type WizardArtifactDetailCacheEntry = {\n artifact: WizardArtifactDetailPayload;\n expiresAt: number;\n revision: string;\n};\n\nexport type PublishedSkillPreferenceAction = 'install' | 'uninstall' | 'ignore' | 'unignore';\n\nexport type OpencodePluginModule = {\n tool: ToolFactory;\n};\n\nexport type OpencodePluginServerInput = {\n worktree: string;\n directory: string;\n};\n\nexport type OpencodePluginSystemTransformOutput = {\n system: string[];\n};\n\nexport type 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\nexport type PublishedSkillsResult = {\n directoryPath: string;\n workspaceResolution: WorkspaceResolution;\n fetchResult: FetchResult;\n};\n\nexport type PublishedSkillsIgnoreState = {\n scopeKey: string;\n userKey: string;\n ignoredSkillSlugs: string[];\n installedGlobalSkillSlugs: string[];\n installedWorkspaceSkillSlugs: string[];\n globalSkillManagementHint: string;\n};\n\nexport type PublishedSkillPreferenceCacheContext = {\n userKey: string;\n preferenceVersion: number;\n};\n\nexport type FilteredPublishedSkillsResult = PublishedSkillsResult & {\n ignoreState: PublishedSkillsIgnoreState;\n ignoredSkills: PublishedSkillSummary[];\n};\n\nexport type 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 role: 'ADMIN' | 'EDITOR' | 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: WorkspaceResolutionOutput;\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: string[];\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\nexport type AiFacingIgnoredPublishedSkillsSummary = {\n scopeKey: string;\n count: number;\n};\n\nexport type AiFacingPluginStatusSnapshot = Omit<PluginStatusSnapshot, 'ignoredPublishedSkills' | 'installableCatalog'> & {\n ignoredPublishedSkills: AiFacingIgnoredPublishedSkillsSummary;\n};\n\nexport type OidcDiscoveryDocument = {\n authorization_endpoint: string;\n};\n\nexport type PluginSessionResponse = {\n success: true;\n session: {\n jwtToken: string;\n expiresAt: string;\n user: {\n id: string;\n email: string;\n role?: 'ADMIN' | 'EDITOR';\n };\n };\n};\n\nexport type OidcCallbackPayload =\n | {\n status: 'success';\n code: string;\n state: string;\n }\n | {\n status: 'error';\n message: string;\n };\n\nexport type OidcLoginStart = {\n browserUrl: string;\n expiresAt: string;\n codeVerifier: string;\n expectedState: string;\n callbackPromise: Promise<OidcCallbackPayload>;\n closeCallbackServer: () => Promise<void>;\n};\n"],"mappings":"","ignoreList":[]}
@@ -4,7 +4,9 @@ export const OpencodeWizardSkillsPlugin = async input => {
4
4
  const {
5
5
  tool
6
6
  } = await importOpencodePluginModule('@opencode-ai/plugin');
7
- return createWizardRuntime(input, tool);
7
+ return createWizardRuntime(input, tool, {
8
+ eventSource: 'OPENCODE'
9
+ });
8
10
  };
9
11
  export default {
10
12
  id: PLUGIN_ID,
@@ -1 +1 @@
1
- {"version":3,"names":["createWizardRuntime","PLUGIN_ID","importOpencodePluginModule","Function","OpencodeWizardSkillsPlugin","input","tool","id","server"],"sources":["../src/server-opencode.ts"],"sourcesContent":["import { createWizardRuntime, PLUGIN_ID } from './server/runtime.js';\nimport type { OpencodePluginModule, OpencodePluginServer } from './server/types.js';\n\nconst importOpencodePluginModule = new Function('specifier', 'return import(specifier)') as (\n specifier: string,\n) => Promise<OpencodePluginModule>;\n\nexport const OpencodeWizardSkillsPlugin: OpencodePluginServer = async (input) => {\n const { tool } = await importOpencodePluginModule('@opencode-ai/plugin');\n return createWizardRuntime(input, tool);\n};\n\nexport default {\n id: PLUGIN_ID,\n server: OpencodeWizardSkillsPlugin,\n};\n"],"mappings":"AAAA,SAASA,mBAAmB,EAAEC,SAAS,QAAQ,qBAAqB;AAGpE,MAAMC,0BAA0B,GAAG,IAAIC,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAErD;AAElC,OAAO,MAAMC,0BAAgD,GAAG,MAAOC,KAAK,IAAK;EAC/E,MAAM;IAAEC;EAAK,CAAC,GAAG,MAAMJ,0BAA0B,CAAC,qBAAqB,CAAC;EACxE,OAAOF,mBAAmB,CAACK,KAAK,EAAEC,IAAI,CAAC;AACzC,CAAC;AAED,eAAe;EACbC,EAAE,EAAEN,SAAS;EACbO,MAAM,EAAEJ;AACV,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createWizardRuntime","PLUGIN_ID","importOpencodePluginModule","Function","OpencodeWizardSkillsPlugin","input","tool","eventSource","id","server"],"sources":["../src/server-opencode.ts"],"sourcesContent":["import { createWizardRuntime, PLUGIN_ID } from './server/runtime.js';\nimport type { OpencodePluginModule, OpencodePluginServer } from './server/types.js';\n\nconst importOpencodePluginModule = new Function('specifier', 'return import(specifier)') as (\n specifier: string,\n) => Promise<OpencodePluginModule>;\n\nexport const OpencodeWizardSkillsPlugin: OpencodePluginServer = async (input) => {\n const { tool } = await importOpencodePluginModule('@opencode-ai/plugin');\n return createWizardRuntime(input, tool, { eventSource: 'OPENCODE' });\n};\n\nexport default {\n id: PLUGIN_ID,\n server: OpencodeWizardSkillsPlugin,\n};\n"],"mappings":"AAAA,SAASA,mBAAmB,EAAEC,SAAS,QAAQ,qBAAqB;AAGpE,MAAMC,0BAA0B,GAAG,IAAIC,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAErD;AAElC,OAAO,MAAMC,0BAAgD,GAAG,MAAOC,KAAK,IAAK;EAC/E,MAAM;IAAEC;EAAK,CAAC,GAAG,MAAMJ,0BAA0B,CAAC,qBAAqB,CAAC;EACxE,OAAOF,mBAAmB,CAACK,KAAK,EAAEC,IAAI,EAAE;IAAEC,WAAW,EAAE;EAAW,CAAC,CAAC;AACtE,CAAC;AAED,eAAe;EACbC,EAAE,EAAEP,SAAS;EACbQ,MAAM,EAAEL;AACV,CAAC","ignoreList":[]}
package/dist/server-pi.js CHANGED
@@ -150,7 +150,9 @@ const getRuntime = directory => {
150
150
  const runtime = createWizardRuntime({
151
151
  worktree: directory,
152
152
  directory
153
- }, createPiRuntimeToolFactory());
153
+ }, createPiRuntimeToolFactory(), {
154
+ eventSource: 'PI'
155
+ });
154
156
  runtimeCache.set(key, runtime);
155
157
  return runtime;
156
158
  };
@@ -1 +1 @@
1
- {"version":3,"names":["createWizardRuntime","PLUGIN_ID","createSchemaValue","optional","describe","createPiRuntimeToolFactory","createTool","definition","description","execute","args","context","tool","Object","assign","schema","string","boolean","runtimeCache","Map","directorySchema","type","properties","directory","catalogSchema","artifactKind","refresh","recommendationContext","artifactFetchSchema","artifact","artifacts","artifactPreferenceSchema","action","preferenceScope","required","publishedSkillsFetchSchema","skill","skills","publishedSkillPreferenceSchema","piToOpencodeToolNames","wizard_status","wizard_catalog_fetch","wizard_artifact_fetch","wizard_artifact_preference_set","wizard_published_skills_fetch","wizard_published_skill_preference_set","opencodeToPiToolNames","fromEntries","entries","map","piName","opencodeName","textResult","text","details","content","getStringParam","params","key","undefined","value","trimmed","trim","toJsonObject","Array","isArray","isExecutableTool","candidate","getRuntime","existingRuntime","get","runtime","worktree","set","toToolContext","toolCallId","sessionID","process","pid","messageID","agent","abort","AbortSignal","timeout","metadata","toPiResult","toolName","result","source","outputResult","output","JSON","stringify","toErrorMessage","error","Error","message","executeOpencodeTool","opencodeToolName","cwd","status","createBridgeTool","name","label","promptSnippet","promptGuidelines","parameters","buildPiTools","appendSystemNotes","systemPrompt","notes","normalizedNotes","note","filter","Boolean","length","missingNotes","includes","trimEnd","join","toPiSystemNote","piNote","replaceAll","buildSystemPrompt","event","system","failureNote","opencodeWizardPiExtension","pi","registerTool","on"],"sources":["../src/server-pi.ts"],"sourcesContent":["import { createWizardRuntime, PLUGIN_ID } from './server/runtime.js';\nimport type { ToolDefinition, ToolFactory } from './plugin-tools.js';\n\ntype JsonObject = Record<string, unknown>;\n\ntype PiToolResult = {\n content: Array<{ type: 'text'; text: string }>;\n details: JsonObject;\n};\n\ntype PiParamSchema = {\n type: 'object';\n properties: Record<string, unknown>;\n required?: string[];\n};\n\ntype PiToolDefinition = {\n name: string;\n label: string;\n description: string;\n promptSnippet?: string;\n promptGuidelines?: string[];\n parameters: PiParamSchema;\n execute: (toolCallId: string, params: unknown) => Promise<PiToolResult>;\n};\n\ntype BeforeAgentStartEvent = {\n systemPrompt: string;\n};\n\ntype PiExtensionApi = {\n registerTool: (tool: PiToolDefinition) => void;\n on: (event: 'before_agent_start', handler: (event: BeforeAgentStartEvent) => Promise<{ systemPrompt: string }>) => void;\n};\n\ntype OpencodeToolResult =\n | string\n | {\n output: string;\n metadata?: JsonObject;\n };\n\ntype OpencodeToolContext = {\n sessionID: string;\n messageID: string;\n agent: string;\n directory: string;\n worktree: string;\n abort: AbortSignal;\n metadata: (input: { title?: string; metadata?: JsonObject }) => void;\n};\n\ntype OpencodeExecutableTool = {\n description: string;\n execute: (args: JsonObject, context: OpencodeToolContext) => Promise<unknown>;\n};\n\ntype RuntimeEntry = Awaited<ReturnType<typeof createWizardRuntime>>;\n\ntype SchemaValue = {\n optional: () => SchemaValue;\n describe: (description: string) => SchemaValue;\n};\n\nconst createSchemaValue = (): SchemaValue => ({\n optional: createSchemaValue,\n describe: createSchemaValue,\n});\n\nconst createPiRuntimeToolFactory = (): ToolFactory => {\n const createTool = <TArgs extends object>(definition: ToolDefinition<TArgs>) => ({\n description: definition.description,\n execute: (args: JsonObject, context: OpencodeToolContext) => definition.execute(args as TArgs, context),\n });\n\n const tool = Object.assign(createTool, {\n schema: {\n string: createSchemaValue,\n boolean: createSchemaValue,\n },\n });\n\n return tool;\n};\n\nconst runtimeCache = new Map<string, Promise<RuntimeEntry>>();\n\nconst directorySchema: PiParamSchema = {\n type: 'object',\n properties: {\n directory: {\n type: 'string',\n description: 'Optional absolute or relative directory override for workspace-scoped wizard resolution.',\n },\n },\n};\n\nconst catalogSchema: PiParamSchema = {\n type: 'object',\n properties: {\n artifactKind: {\n type: 'string',\n description: 'Wizard artifact kind to catalog: SKILL or DESIGN_DOC; defaults to SKILL.',\n },\n directory: directorySchema.properties.directory,\n refresh: {\n type: 'boolean',\n description: 'Bypass the local plugin cache for this request.',\n },\n recommendationContext: {\n type: 'string',\n description: 'Optional metadata-only relevance/ranking context for catalog recommendations.',\n },\n },\n};\n\nconst artifactFetchSchema: PiParamSchema = {\n type: 'object',\n properties: {\n artifactKind: catalogSchema.properties.artifactKind,\n artifact: {\n type: 'string',\n description: 'Single artifact identifier; for SKILL this is a skill slug, artifact name, or skill name.',\n },\n artifacts: {\n type: 'string',\n description: 'One or more comma-separated or newline-separated artifact identifiers.',\n },\n directory: directorySchema.properties.directory,\n refresh: catalogSchema.properties.refresh,\n recommendationContext: catalogSchema.properties.recommendationContext,\n },\n};\n\nconst artifactPreferenceSchema: PiParamSchema = {\n type: 'object',\n properties: {\n artifactKind: catalogSchema.properties.artifactKind,\n artifact: {\n type: 'string',\n description: 'Artifact identifier; for SKILL this is the published skill slug.',\n },\n action: {\n type: 'string',\n description: 'Preference action: install, uninstall, ignore, or unignore.',\n },\n preferenceScope: {\n type: 'string',\n description: 'Preference scope: project/workspace or global; defaults to project.',\n },\n directory: directorySchema.properties.directory,\n },\n required: ['artifact', 'action'],\n};\n\nconst publishedSkillsFetchSchema: PiParamSchema = {\n type: 'object',\n properties: {\n skill: {\n type: 'string',\n description: 'Single skill slug, artifact name, or skill name; comma-separated values are accepted.',\n },\n skills: {\n type: 'string',\n description: 'One or more comma-separated or newline-separated skill slugs, artifact names, or skill names.',\n },\n directory: directorySchema.properties.directory,\n refresh: catalogSchema.properties.refresh,\n recommendationContext: catalogSchema.properties.recommendationContext,\n },\n};\n\nconst publishedSkillPreferenceSchema: PiParamSchema = {\n type: 'object',\n properties: {\n skill: {\n type: 'string',\n description: 'Published skill slug, artifact name, or skill name to update.',\n },\n action: artifactPreferenceSchema.properties.action,\n preferenceScope: artifactPreferenceSchema.properties.preferenceScope,\n directory: directorySchema.properties.directory,\n },\n required: ['skill', 'action'],\n};\n\nconst piToOpencodeToolNames = {\n wizard_status: 'opencode_wizard_status',\n wizard_catalog_fetch: 'opencode_wizard_catalog_fetch',\n wizard_artifact_fetch: 'opencode_wizard_artifact_fetch',\n wizard_artifact_preference_set: 'opencode_wizard_artifact_preference_set',\n wizard_published_skills_fetch: 'opencode_wizard_published_skills_fetch',\n wizard_published_skill_preference_set: 'opencode_wizard_published_skill_preference_set',\n} as const;\n\nconst opencodeToPiToolNames = Object.fromEntries(\n Object.entries(piToOpencodeToolNames).map(([piName, opencodeName]) => [opencodeName, piName]),\n) as Record<(typeof piToOpencodeToolNames)[keyof typeof piToOpencodeToolNames], keyof typeof piToOpencodeToolNames>;\n\nconst textResult = (text: string, details: JsonObject = {}): PiToolResult => ({\n content: [{ type: 'text', text }],\n details,\n});\n\nconst getStringParam = (params: unknown, key: string): string | undefined => {\n if (!params || typeof params !== 'object') return undefined;\n const value = (params as JsonObject)[key];\n if (typeof value !== 'string') return undefined;\n const trimmed = value.trim();\n if (!trimmed) return undefined;\n return trimmed;\n};\n\nconst toJsonObject = (value: unknown): JsonObject => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return {};\n return value as JsonObject;\n};\n\nconst isExecutableTool = (value: unknown): value is OpencodeExecutableTool => {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as { description?: unknown; execute?: unknown };\n return typeof candidate.description === 'string' && typeof candidate.execute === 'function';\n};\n\nconst getRuntime = (directory: string): Promise<RuntimeEntry> => {\n const key = directory;\n const existingRuntime = runtimeCache.get(key);\n if (existingRuntime) return existingRuntime;\n\n const runtime = createWizardRuntime({ worktree: directory, directory }, createPiRuntimeToolFactory());\n runtimeCache.set(key, runtime);\n return runtime;\n};\n\nconst toToolContext = (directory: string, toolCallId: string): OpencodeToolContext => ({\n sessionID: `pi-${process.pid}`,\n messageID: toolCallId,\n agent: 'pi',\n directory,\n worktree: directory,\n abort: AbortSignal.timeout(30_000),\n metadata: () => undefined,\n});\n\nconst toPiResult = (toolName: string, result: unknown): PiToolResult => {\n if (typeof result === 'string') return textResult(result, { toolName, source: PLUGIN_ID });\n if (result && typeof result === 'object' && 'output' in result) {\n const outputResult = result as Exclude<OpencodeToolResult, string>;\n return textResult(outputResult.output, { ...(outputResult.metadata ?? {}), toolName, source: PLUGIN_ID });\n }\n return textResult(JSON.stringify(result ?? null), { toolName, source: PLUGIN_ID });\n};\n\nconst toErrorMessage = (error: unknown): string => {\n if (error instanceof Error) return error.message;\n if (typeof error === 'string') return error;\n return 'Unknown Wizard Pi runtime failure.';\n};\n\nconst executeOpencodeTool = async ({\n opencodeToolName,\n toolCallId,\n params,\n}: {\n opencodeToolName: string;\n toolCallId: string;\n params: unknown;\n}): Promise<PiToolResult> => {\n try {\n const args = toJsonObject(params);\n const directory = getStringParam(args, 'directory') ?? process.cwd();\n const runtime = await getRuntime(directory);\n const tool = runtime.tool[opencodeToolName];\n\n if (!isExecutableTool(tool)) {\n return textResult(`Wizard Pi tool bridge could not find executable backend tool ${opencodeToolName}.`, {\n status: 'tool_unavailable',\n opencodeToolName,\n source: PLUGIN_ID,\n });\n }\n\n const result = await tool.execute(args, toToolContext(directory, toolCallId));\n return toPiResult(opencodeToolName, result);\n } catch (error) {\n return textResult(`Wizard Pi backend-backed tool request failed: ${toErrorMessage(error)}`, {\n status: 'request_failed',\n opencodeToolName,\n source: PLUGIN_ID,\n });\n }\n};\n\nconst createBridgeTool = ({\n name,\n label,\n description,\n promptSnippet,\n promptGuidelines,\n parameters,\n}: {\n name: keyof typeof piToOpencodeToolNames;\n label: string;\n description: string;\n promptSnippet: string;\n promptGuidelines?: string[];\n parameters: PiParamSchema;\n}): PiToolDefinition => ({\n name,\n label,\n description,\n promptSnippet,\n promptGuidelines,\n parameters,\n execute: (toolCallId, params) => executeOpencodeTool({ opencodeToolName: piToOpencodeToolNames[name], toolCallId, params }),\n});\n\nexport const buildPiTools = (): PiToolDefinition[] => [\n createBridgeTool({\n name: 'wizard_status',\n label: 'Wizard Status',\n description:\n 'Report Wizard backend auth, catalog, cache, source, and workspace-resolution status through the Pi Wizard runtime.',\n promptSnippet: 'Inspect real Wizard backend/auth/catalog status before relying on wizard-listed artifacts.',\n promptGuidelines: [\n 'Use wizard_status when you need to verify Wizard Pi backend/auth/catalog state before relying on fetched artifacts.',\n 'Missing auth, forbidden role, backend, or catalog problems are operational states reported by the backend-backed runtime.',\n ],\n parameters: directorySchema,\n }),\n createBridgeTool({\n name: 'wizard_catalog_fetch',\n label: 'Wizard Catalog Fetch',\n description:\n 'Fetch real backend wizard artifact catalog metadata for SKILL or DESIGN_DOC artifacts; metadata is discovery-only until a body is fetched.',\n promptSnippet: 'List backend wizard artifacts for this workspace/directory; fetch bodies before using artifact instructions.',\n promptGuidelines: ['Treat catalog metadata as discovery-only; call wizard_artifact_fetch or wizard_published_skills_fetch for authoritative bodies.'],\n parameters: catalogSchema,\n }),\n createBridgeTool({\n name: 'wizard_artifact_fetch',\n label: 'Wizard Artifact Fetch',\n description:\n 'Fetch real backend-authorized wizard artifact detail/body for SKILL or DESIGN_DOC artifacts through the Pi Wizard runtime.',\n promptSnippet: 'Fetch a backend wizard artifact body/detail before treating it as authoritative.',\n parameters: artifactFetchSchema,\n }),\n createBridgeTool({\n name: 'wizard_artifact_preference_set',\n label: 'Wizard Artifact Preference Set',\n description:\n 'Install, uninstall, ignore, or unignore a backend wizard artifact through the Pi Wizard preference runtime.',\n promptSnippet: 'Set backend wizard artifact preference through the real wizard runtime.',\n parameters: artifactPreferenceSchema,\n }),\n createBridgeTool({\n name: 'wizard_published_skills_fetch',\n label: 'Wizard Published Skills Fetch',\n description:\n 'Compatibility Pi tool to fetch one or more backend-published SKILL.md bodies/details through the Pi Wizard runtime.',\n promptSnippet: 'Fetch backend-published skill bodies before using wizard-listed skill guidance.',\n promptGuidelines: ['Only rely on Wizard skill instructions when this tool returns an explicit backend-fetched body/detail.'],\n parameters: publishedSkillsFetchSchema,\n }),\n createBridgeTool({\n name: 'wizard_published_skill_preference_set',\n label: 'Wizard Published Skill Preference Set',\n description:\n 'Compatibility Pi tool to install, uninstall, ignore, or unignore a backend-published skill through the Pi Wizard runtime.',\n promptSnippet: 'Set backend-published Wizard skill preference through the real wizard runtime.',\n parameters: publishedSkillPreferenceSchema,\n }),\n];\n\nconst appendSystemNotes = (systemPrompt: string, notes: string[]): string => {\n const normalizedNotes = notes.map((note) => note.trim()).filter(Boolean);\n if (normalizedNotes.length === 0) return systemPrompt;\n const missingNotes = normalizedNotes.filter((note) => !systemPrompt.includes(note));\n if (missingNotes.length === 0) return systemPrompt;\n return `${systemPrompt.trimEnd()}\\n\\n${missingNotes.join('\\n\\n')}`;\n};\n\nconst toPiSystemNote = (note: string): string => {\n let piNote = note;\n for (const [opencodeName, piName] of Object.entries(opencodeToPiToolNames)) {\n piNote = piNote.replaceAll(opencodeName, piName);\n }\n return piNote;\n};\n\nconst buildSystemPrompt = async (event: BeforeAgentStartEvent): Promise<{ systemPrompt: string }> => {\n try {\n const directory = process.cwd();\n const runtime = await getRuntime(directory);\n const output = { system: [] as string[] };\n await runtime['experimental.chat.system.transform']({}, output);\n return { systemPrompt: appendSystemNotes(event.systemPrompt, output.system.map(toPiSystemNote)) };\n } catch (error) {\n const failureNote = [\n 'Wizard Pi context:',\n 'status=request_failed',\n `source=${PLUGIN_ID}`,\n `message=${toErrorMessage(error)}`,\n ].join(' ');\n return { systemPrompt: appendSystemNotes(event.systemPrompt, [failureNote]) };\n }\n};\n\nexport default async function opencodeWizardPiExtension(pi: PiExtensionApi): Promise<void> {\n for (const tool of buildPiTools()) {\n pi.registerTool(tool);\n }\n\n pi.on('before_agent_start', buildSystemPrompt);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createWizardRuntime","PLUGIN_ID","createSchemaValue","optional","describe","createPiRuntimeToolFactory","createTool","definition","description","execute","args","context","tool","Object","assign","schema","string","boolean","runtimeCache","Map","directorySchema","type","properties","directory","catalogSchema","artifactKind","refresh","recommendationContext","artifactFetchSchema","artifact","artifacts","artifactPreferenceSchema","action","preferenceScope","required","publishedSkillsFetchSchema","skill","skills","publishedSkillPreferenceSchema","piToOpencodeToolNames","wizard_status","wizard_catalog_fetch","wizard_artifact_fetch","wizard_artifact_preference_set","wizard_published_skills_fetch","wizard_published_skill_preference_set","opencodeToPiToolNames","fromEntries","entries","map","piName","opencodeName","textResult","text","details","content","getStringParam","params","key","undefined","value","trimmed","trim","toJsonObject","Array","isArray","isExecutableTool","candidate","getRuntime","existingRuntime","get","runtime","worktree","eventSource","set","toToolContext","toolCallId","sessionID","process","pid","messageID","agent","abort","AbortSignal","timeout","metadata","toPiResult","toolName","result","source","outputResult","output","JSON","stringify","toErrorMessage","error","Error","message","executeOpencodeTool","opencodeToolName","cwd","status","createBridgeTool","name","label","promptSnippet","promptGuidelines","parameters","buildPiTools","appendSystemNotes","systemPrompt","notes","normalizedNotes","note","filter","Boolean","length","missingNotes","includes","trimEnd","join","toPiSystemNote","piNote","replaceAll","buildSystemPrompt","event","system","failureNote","opencodeWizardPiExtension","pi","registerTool","on"],"sources":["../src/server-pi.ts"],"sourcesContent":["import { createWizardRuntime, PLUGIN_ID } from './server/runtime.js';\nimport type { ToolDefinition, ToolFactory } from './plugin-tools.js';\n\ntype JsonObject = Record<string, unknown>;\n\ntype PiToolResult = {\n content: Array<{ type: 'text'; text: string }>;\n details: JsonObject;\n};\n\ntype PiParamSchema = {\n type: 'object';\n properties: Record<string, unknown>;\n required?: string[];\n};\n\ntype PiToolDefinition = {\n name: string;\n label: string;\n description: string;\n promptSnippet?: string;\n promptGuidelines?: string[];\n parameters: PiParamSchema;\n execute: (toolCallId: string, params: unknown) => Promise<PiToolResult>;\n};\n\ntype BeforeAgentStartEvent = {\n systemPrompt: string;\n};\n\ntype PiExtensionApi = {\n registerTool: (tool: PiToolDefinition) => void;\n on: (event: 'before_agent_start', handler: (event: BeforeAgentStartEvent) => Promise<{ systemPrompt: string }>) => void;\n};\n\ntype OpencodeToolResult =\n | string\n | {\n output: string;\n metadata?: JsonObject;\n };\n\ntype OpencodeToolContext = {\n sessionID: string;\n messageID: string;\n agent: string;\n directory: string;\n worktree: string;\n abort: AbortSignal;\n metadata: (input: { title?: string; metadata?: JsonObject }) => void;\n};\n\ntype OpencodeExecutableTool = {\n description: string;\n execute: (args: JsonObject, context: OpencodeToolContext) => Promise<unknown>;\n};\n\ntype RuntimeEntry = Awaited<ReturnType<typeof createWizardRuntime>>;\n\ntype SchemaValue = {\n optional: () => SchemaValue;\n describe: (description: string) => SchemaValue;\n};\n\nconst createSchemaValue = (): SchemaValue => ({\n optional: createSchemaValue,\n describe: createSchemaValue,\n});\n\nconst createPiRuntimeToolFactory = (): ToolFactory => {\n const createTool = <TArgs extends object>(definition: ToolDefinition<TArgs>) => ({\n description: definition.description,\n execute: (args: JsonObject, context: OpencodeToolContext) => definition.execute(args as TArgs, context),\n });\n\n const tool = Object.assign(createTool, {\n schema: {\n string: createSchemaValue,\n boolean: createSchemaValue,\n },\n });\n\n return tool;\n};\n\nconst runtimeCache = new Map<string, Promise<RuntimeEntry>>();\n\nconst directorySchema: PiParamSchema = {\n type: 'object',\n properties: {\n directory: {\n type: 'string',\n description: 'Optional absolute or relative directory override for workspace-scoped wizard resolution.',\n },\n },\n};\n\nconst catalogSchema: PiParamSchema = {\n type: 'object',\n properties: {\n artifactKind: {\n type: 'string',\n description: 'Wizard artifact kind to catalog: SKILL or DESIGN_DOC; defaults to SKILL.',\n },\n directory: directorySchema.properties.directory,\n refresh: {\n type: 'boolean',\n description: 'Bypass the local plugin cache for this request.',\n },\n recommendationContext: {\n type: 'string',\n description: 'Optional metadata-only relevance/ranking context for catalog recommendations.',\n },\n },\n};\n\nconst artifactFetchSchema: PiParamSchema = {\n type: 'object',\n properties: {\n artifactKind: catalogSchema.properties.artifactKind,\n artifact: {\n type: 'string',\n description: 'Single artifact identifier; for SKILL this is a skill slug, artifact name, or skill name.',\n },\n artifacts: {\n type: 'string',\n description: 'One or more comma-separated or newline-separated artifact identifiers.',\n },\n directory: directorySchema.properties.directory,\n refresh: catalogSchema.properties.refresh,\n recommendationContext: catalogSchema.properties.recommendationContext,\n },\n};\n\nconst artifactPreferenceSchema: PiParamSchema = {\n type: 'object',\n properties: {\n artifactKind: catalogSchema.properties.artifactKind,\n artifact: {\n type: 'string',\n description: 'Artifact identifier; for SKILL this is the published skill slug.',\n },\n action: {\n type: 'string',\n description: 'Preference action: install, uninstall, ignore, or unignore.',\n },\n preferenceScope: {\n type: 'string',\n description: 'Preference scope: project/workspace or global; defaults to project.',\n },\n directory: directorySchema.properties.directory,\n },\n required: ['artifact', 'action'],\n};\n\nconst publishedSkillsFetchSchema: PiParamSchema = {\n type: 'object',\n properties: {\n skill: {\n type: 'string',\n description: 'Single skill slug, artifact name, or skill name; comma-separated values are accepted.',\n },\n skills: {\n type: 'string',\n description: 'One or more comma-separated or newline-separated skill slugs, artifact names, or skill names.',\n },\n directory: directorySchema.properties.directory,\n refresh: catalogSchema.properties.refresh,\n recommendationContext: catalogSchema.properties.recommendationContext,\n },\n};\n\nconst publishedSkillPreferenceSchema: PiParamSchema = {\n type: 'object',\n properties: {\n skill: {\n type: 'string',\n description: 'Published skill slug, artifact name, or skill name to update.',\n },\n action: artifactPreferenceSchema.properties.action,\n preferenceScope: artifactPreferenceSchema.properties.preferenceScope,\n directory: directorySchema.properties.directory,\n },\n required: ['skill', 'action'],\n};\n\nconst piToOpencodeToolNames = {\n wizard_status: 'opencode_wizard_status',\n wizard_catalog_fetch: 'opencode_wizard_catalog_fetch',\n wizard_artifact_fetch: 'opencode_wizard_artifact_fetch',\n wizard_artifact_preference_set: 'opencode_wizard_artifact_preference_set',\n wizard_published_skills_fetch: 'opencode_wizard_published_skills_fetch',\n wizard_published_skill_preference_set: 'opencode_wizard_published_skill_preference_set',\n} as const;\n\nconst opencodeToPiToolNames = Object.fromEntries(\n Object.entries(piToOpencodeToolNames).map(([piName, opencodeName]) => [opencodeName, piName]),\n) as Record<(typeof piToOpencodeToolNames)[keyof typeof piToOpencodeToolNames], keyof typeof piToOpencodeToolNames>;\n\nconst textResult = (text: string, details: JsonObject = {}): PiToolResult => ({\n content: [{ type: 'text', text }],\n details,\n});\n\nconst getStringParam = (params: unknown, key: string): string | undefined => {\n if (!params || typeof params !== 'object') return undefined;\n const value = (params as JsonObject)[key];\n if (typeof value !== 'string') return undefined;\n const trimmed = value.trim();\n if (!trimmed) return undefined;\n return trimmed;\n};\n\nconst toJsonObject = (value: unknown): JsonObject => {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return {};\n return value as JsonObject;\n};\n\nconst isExecutableTool = (value: unknown): value is OpencodeExecutableTool => {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as { description?: unknown; execute?: unknown };\n return typeof candidate.description === 'string' && typeof candidate.execute === 'function';\n};\n\nconst getRuntime = (directory: string): Promise<RuntimeEntry> => {\n const key = directory;\n const existingRuntime = runtimeCache.get(key);\n if (existingRuntime) return existingRuntime;\n\n const runtime = createWizardRuntime({ worktree: directory, directory }, createPiRuntimeToolFactory(), { eventSource: 'PI' });\n runtimeCache.set(key, runtime);\n return runtime;\n};\n\nconst toToolContext = (directory: string, toolCallId: string): OpencodeToolContext => ({\n sessionID: `pi-${process.pid}`,\n messageID: toolCallId,\n agent: 'pi',\n directory,\n worktree: directory,\n abort: AbortSignal.timeout(30_000),\n metadata: () => undefined,\n});\n\nconst toPiResult = (toolName: string, result: unknown): PiToolResult => {\n if (typeof result === 'string') return textResult(result, { toolName, source: PLUGIN_ID });\n if (result && typeof result === 'object' && 'output' in result) {\n const outputResult = result as Exclude<OpencodeToolResult, string>;\n return textResult(outputResult.output, { ...(outputResult.metadata ?? {}), toolName, source: PLUGIN_ID });\n }\n return textResult(JSON.stringify(result ?? null), { toolName, source: PLUGIN_ID });\n};\n\nconst toErrorMessage = (error: unknown): string => {\n if (error instanceof Error) return error.message;\n if (typeof error === 'string') return error;\n return 'Unknown Wizard Pi runtime failure.';\n};\n\nconst executeOpencodeTool = async ({\n opencodeToolName,\n toolCallId,\n params,\n}: {\n opencodeToolName: string;\n toolCallId: string;\n params: unknown;\n}): Promise<PiToolResult> => {\n try {\n const args = toJsonObject(params);\n const directory = getStringParam(args, 'directory') ?? process.cwd();\n const runtime = await getRuntime(directory);\n const tool = runtime.tool[opencodeToolName];\n\n if (!isExecutableTool(tool)) {\n return textResult(`Wizard Pi tool bridge could not find executable backend tool ${opencodeToolName}.`, {\n status: 'tool_unavailable',\n opencodeToolName,\n source: PLUGIN_ID,\n });\n }\n\n const result = await tool.execute(args, toToolContext(directory, toolCallId));\n return toPiResult(opencodeToolName, result);\n } catch (error) {\n return textResult(`Wizard Pi backend-backed tool request failed: ${toErrorMessage(error)}`, {\n status: 'request_failed',\n opencodeToolName,\n source: PLUGIN_ID,\n });\n }\n};\n\nconst createBridgeTool = ({\n name,\n label,\n description,\n promptSnippet,\n promptGuidelines,\n parameters,\n}: {\n name: keyof typeof piToOpencodeToolNames;\n label: string;\n description: string;\n promptSnippet: string;\n promptGuidelines?: string[];\n parameters: PiParamSchema;\n}): PiToolDefinition => ({\n name,\n label,\n description,\n promptSnippet,\n promptGuidelines,\n parameters,\n execute: (toolCallId, params) => executeOpencodeTool({ opencodeToolName: piToOpencodeToolNames[name], toolCallId, params }),\n});\n\nexport const buildPiTools = (): PiToolDefinition[] => [\n createBridgeTool({\n name: 'wizard_status',\n label: 'Wizard Status',\n description:\n 'Report Wizard backend auth, catalog, cache, source, and workspace-resolution status through the Pi Wizard runtime.',\n promptSnippet: 'Inspect real Wizard backend/auth/catalog status before relying on wizard-listed artifacts.',\n promptGuidelines: [\n 'Use wizard_status when you need to verify Wizard Pi backend/auth/catalog state before relying on fetched artifacts.',\n 'Missing auth, forbidden role, backend, or catalog problems are operational states reported by the backend-backed runtime.',\n ],\n parameters: directorySchema,\n }),\n createBridgeTool({\n name: 'wizard_catalog_fetch',\n label: 'Wizard Catalog Fetch',\n description:\n 'Fetch real backend wizard artifact catalog metadata for SKILL or DESIGN_DOC artifacts; metadata is discovery-only until a body is fetched.',\n promptSnippet: 'List backend wizard artifacts for this workspace/directory; fetch bodies before using artifact instructions.',\n promptGuidelines: ['Treat catalog metadata as discovery-only; call wizard_artifact_fetch or wizard_published_skills_fetch for authoritative bodies.'],\n parameters: catalogSchema,\n }),\n createBridgeTool({\n name: 'wizard_artifact_fetch',\n label: 'Wizard Artifact Fetch',\n description:\n 'Fetch real backend-authorized wizard artifact detail/body for SKILL or DESIGN_DOC artifacts through the Pi Wizard runtime.',\n promptSnippet: 'Fetch a backend wizard artifact body/detail before treating it as authoritative.',\n parameters: artifactFetchSchema,\n }),\n createBridgeTool({\n name: 'wizard_artifact_preference_set',\n label: 'Wizard Artifact Preference Set',\n description:\n 'Install, uninstall, ignore, or unignore a backend wizard artifact through the Pi Wizard preference runtime.',\n promptSnippet: 'Set backend wizard artifact preference through the real wizard runtime.',\n parameters: artifactPreferenceSchema,\n }),\n createBridgeTool({\n name: 'wizard_published_skills_fetch',\n label: 'Wizard Published Skills Fetch',\n description:\n 'Compatibility Pi tool to fetch one or more backend-published SKILL.md bodies/details through the Pi Wizard runtime.',\n promptSnippet: 'Fetch backend-published skill bodies before using wizard-listed skill guidance.',\n promptGuidelines: ['Only rely on Wizard skill instructions when this tool returns an explicit backend-fetched body/detail.'],\n parameters: publishedSkillsFetchSchema,\n }),\n createBridgeTool({\n name: 'wizard_published_skill_preference_set',\n label: 'Wizard Published Skill Preference Set',\n description:\n 'Compatibility Pi tool to install, uninstall, ignore, or unignore a backend-published skill through the Pi Wizard runtime.',\n promptSnippet: 'Set backend-published Wizard skill preference through the real wizard runtime.',\n parameters: publishedSkillPreferenceSchema,\n }),\n];\n\nconst appendSystemNotes = (systemPrompt: string, notes: string[]): string => {\n const normalizedNotes = notes.map((note) => note.trim()).filter(Boolean);\n if (normalizedNotes.length === 0) return systemPrompt;\n const missingNotes = normalizedNotes.filter((note) => !systemPrompt.includes(note));\n if (missingNotes.length === 0) return systemPrompt;\n return `${systemPrompt.trimEnd()}\\n\\n${missingNotes.join('\\n\\n')}`;\n};\n\nconst toPiSystemNote = (note: string): string => {\n let piNote = note;\n for (const [opencodeName, piName] of Object.entries(opencodeToPiToolNames)) {\n piNote = piNote.replaceAll(opencodeName, piName);\n }\n return piNote;\n};\n\nconst buildSystemPrompt = async (event: BeforeAgentStartEvent): Promise<{ systemPrompt: string }> => {\n try {\n const directory = process.cwd();\n const runtime = await getRuntime(directory);\n const output = { system: [] as string[] };\n await runtime['experimental.chat.system.transform']({}, output);\n return { systemPrompt: appendSystemNotes(event.systemPrompt, output.system.map(toPiSystemNote)) };\n } catch (error) {\n const failureNote = [\n 'Wizard Pi context:',\n 'status=request_failed',\n `source=${PLUGIN_ID}`,\n `message=${toErrorMessage(error)}`,\n ].join(' ');\n return { systemPrompt: appendSystemNotes(event.systemPrompt, [failureNote]) };\n }\n};\n\nexport default async function opencodeWizardPiExtension(pi: PiExtensionApi): Promise<void> {\n for (const tool of buildPiTools()) {\n pi.registerTool(tool);\n }\n\n pi.on('before_agent_start', buildSystemPrompt);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -190,15 +190,15 @@ const assertSystemNoteWizardFetchContract = (payload, config, detail) => {
190
190
  if (!systemNote) {
191
191
  throw new Error('Expected system note to be generated for published skills payload');
192
192
  }
193
- const requiredFragments = ['Workspace: opencode-wizard.', 'Directory: .', 'Wizard-listed skills (', 'Fetch rule: only when skill instructions could materially change routing, implementation, validation, or artifact structure, fetch a matching wizard-listed skill with `opencode_wizard_published_skills_fetch`; the fetched `SKILL.md` is authoritative.', 'Catalog/status metadata is discovery-only, not executable skill instructions;', 'native/local `.opencode/skills` or OpenCode skill bodies are fallback/source material only when no same-named wizard body can be fetched.', 'If fetch/auth/catalog fails, report degraded wizard-skill context and continue with normal repo evidence when safe.', 'Use `refresh: true` before cache deletion;', 'use `opencode_wizard_artifact_fetch` for non-skill wizard artifacts.', 'opencode_wizard_published_skills_fetch'];
193
+ const requiredFragments = ['Workspace: opencode-wizard.', 'Directory: .', 'Wizard-listed skills (', 'Skill rule: for every task, compare the task goal to wizard-listed skills.', 'fetch its `SKILL.md` with `opencode_wizard_published_skills_fetch` before using guidance or choosing a same-named native/local skill; the fetched `SKILL.md` is authoritative.', 'Catalog/status metadata names candidates only, not executable guidance;', 'native/local `.opencode/skills` or OpenCode skill bodies are fallback/source material only after no matching wizard body can be fetched.', 'If fetch/auth/catalog fails, report degraded wizard-skill context and continue with normal repo evidence when safe.', 'Use `refresh: true` before cache deletion;', 'use `opencode_wizard_artifact_fetch` for non-skill wizard artifacts.', 'opencode_wizard_published_skills_fetch'];
194
194
  for (const fragment of requiredFragments) {
195
195
  if (systemNote.includes(fragment)) continue;
196
196
  throw new Error(`Expected system note to include prompt contract fragment: ${fragment}`);
197
197
  }
198
198
  return {
199
- includesMaterialChangeFetchRule: systemNote.includes('materially change routing, implementation, validation'),
199
+ includesEveryTaskEvaluationRule: systemNote.includes('for every task, compare the task goal to wizard-listed skills'),
200
200
  includesAuthoritativeFetchedSkillBodyRule: systemNote.includes('fetched `SKILL.md` is authoritative'),
201
- includesCatalogDiscoveryOnlyRule: systemNote.includes('discovery-only'),
201
+ includesCatalogCandidateOnlyRule: systemNote.includes('names candidates only'),
202
202
  includesNativeLocalFallbackRule: systemNote.includes('fallback/source material only'),
203
203
  includesDegradedFallbackRule: systemNote.includes('degraded wizard-skill context'),
204
204
  includesWizardFetchToolRoute: systemNote.includes('opencode_wizard_published_skills_fetch')
@@ -1 +1 @@
1
- {"version":3,"names":["buildSystemNote","buildSkillMarkdown","parseRequestedSkillArgs","resolveConfig","selectPublishedSkills","toPublishedSkillCatalog","toPublishedSkillDetail","fs","os","path","DEPLOY_BACKEND_ORIGIN","LOCAL_OVERRIDE_BACKEND_ORIGIN","BACKEND_ENV_KEYS","assertEqual","label","actual","expected","Error","String","createSkillItem","index","assignmentSource","slugPrefix","assignmentType","scopePath","includeChildren","skill","id","slug","name","summary","whenToUse","status","installPolicy","tags","skillVersion","version","title","publishedArtifact","frontmatterName","frontmatterDescription","checksum","publishedAt","fileCount","createInstallableSkillItem","item","createEffectiveSkillsSmokePayload","workspace","repositoryUrl","defaultBranch","directoryPath","skills","Array","from","length","_","catalogSkills","userPreferences","scopeKey","userKey","ignoredSkills","assertEffectiveSkillGrouping","payload","catalog","globalSkills","filter","contextKind","projectSkills","userSkills","startsWith","userSkillsWithGlobalContextKind","installableSkillCount","publishedSkillCount","assignmentCounts","global","project","user","other","globalAssignmentCount","projectAssignmentCount","userAssignmentCount","installableNotInstalledCount","assertRequestedSkillArgParsing","expectedSkills","skillFieldSelection","skillsFieldSelection","mixedSelection","join","withBackendEnv","env","callback","previousValues","Map","key","set","process","value","Object","entries","undefined","assertBackendOriginResolution","isolatedWorktree","mkdtemp","tmpdir","defaultConfig","backendOrigin","portOnlyConfig","PORT","appUrlPlaceholderConfig","APP_URL","overrideConfig","OPENCODE_WIZARD_BACKEND_ORIGIN","defaultBackendOrigin","portOnlyBackendOrigin","appUrlPlaceholderBackendOrigin","explicitOverrideBackendOrigin","assertSystemNoteWizardFetchContract","config","detail","systemNote","workspaceResolution","requestedDirectory","repositoryRoot","fallbackWorkspaceSlug","cacheKey","fetchResult","ok","authMode","fetchedAt","source","requiredFragments","fragment","includes","includesMaterialChangeFetchRule","includesAuthoritativeFetchedSkillBodyRule","includesCatalogDiscoveryOnlyRule","includesNativeLocalFallbackRule","includesDegradedFallbackRule","includesWizardFetchToolRoute","run","detailSkillItem","detailItem","markdownBody","renderedContent","files","relativePath","contentType","content","size","sortOrder","cwd","backendOriginSmoke","requestedSkillArgParsingSmoke","effectiveSkillGroupingSmoke","selection","selectedItems","systemNoteWizardFetchContractSmoke","preview","split","slice","console","log","JSON","stringify","runtimeMode","graphqlUrl","availableTools","facets","selectedSkillCount","missingSkills","missingIdentifiers","selectedSkillSlug","skillSlug","selectedSkillTags","markdownDocumentIncludesFrontmatter","markdownDocument","resourceFileCount","resources","supportingFileCount","supportingFiles","count","supportingFilePaths","paths","map","file","markdownBodyIncludesContent"],"sources":["../src/smoke-published-skills.ts"],"sourcesContent":["import {\n buildSystemNote,\n buildSkillMarkdown,\n parseRequestedSkillArgs,\n resolveConfig,\n selectPublishedSkills,\n toPublishedSkillCatalog,\n toPublishedSkillDetail,\n type PublishedSkillCatalogPayload,\n type PublishedSkillCatalogItem,\n type PublishedSkillDetailItem,\n type PublishedSkillInstallableCatalogItem,\n} from './server.js';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst DEPLOY_BACKEND_ORIGIN = 'https://opencode-wizard.aexol.work';\nconst LOCAL_OVERRIDE_BACKEND_ORIGIN = 'http://localhost:19876';\n\ntype BackendEnvKey = 'OPENCODE_WIZARD_BACKEND_ORIGIN' | 'APP_URL' | 'PORT';\n\nconst BACKEND_ENV_KEYS: BackendEnvKey[] = ['OPENCODE_WIZARD_BACKEND_ORIGIN', 'APP_URL', 'PORT'];\n\nconst assertEqual = <TValue>(label: string, actual: TValue, expected: TValue): void => {\n if (actual === expected) return;\n\n throw new Error(`${label} mismatch: expected ${String(expected)}, received ${String(actual)}`);\n};\n\nconst createSkillItem = (index: number, assignmentSource: string, slugPrefix: string): PublishedSkillCatalogItem => ({\n assignmentSource,\n assignmentType: 'PATH',\n scopePath: '.',\n includeChildren: true,\n skill: {\n id: `skill-${slugPrefix}-${index}`,\n slug: `${slugPrefix}-${index}`,\n name: `${slugPrefix}-${index}`,\n summary: `${slugPrefix} skill ${index}`,\n whenToUse: `Use for ${slugPrefix} smoke coverage ${index}.`,\n status: 'ACTIVE',\n installPolicy: assignmentSource === 'GLOBAL' ? 'GLOBAL_CONTEXT' : 'PROJECT_INSTALLABLE',\n tags: [],\n },\n skillVersion: {\n id: `version-${slugPrefix}-${index}`,\n version: '1.0.0',\n title: 'Initial',\n summary: 'Initial publish',\n status: 'PUBLISHED',\n },\n publishedArtifact: {\n id: `artifact-${slugPrefix}-${index}`,\n frontmatterName: `${slugPrefix}-${index}`,\n frontmatterDescription: `${slugPrefix} smoke skill`,\n checksum: `checksum-${slugPrefix}-${index}`,\n publishedAt: '2026-04-22T00:00:00.000Z',\n fileCount: 1,\n },\n});\n\nconst createInstallableSkillItem = (index: number): PublishedSkillInstallableCatalogItem => {\n const item = createSkillItem(index, 'CATALOG', 'installable-skill');\n\n return {\n skill: item.skill,\n skillVersion: item.skillVersion,\n publishedArtifact: item.publishedArtifact,\n };\n};\n\nconst createEffectiveSkillsSmokePayload = (): PublishedSkillCatalogPayload => ({\n workspace: {\n id: 'workspace-effective-counts',\n slug: 'opencode-wizard',\n name: 'opencode-wizard',\n repositoryUrl: 'https://example.com/opencode-wizard.git',\n defaultBranch: 'main',\n status: 'ACTIVE',\n },\n directoryPath: '.',\n skills: [\n ...Array.from({ length: 19 }, (_, index) => createSkillItem(index + 1, 'GLOBAL', 'global-skill')),\n createSkillItem(1, 'WORKSPACE', 'workspace-skill'),\n createSkillItem(1, 'USER', 'user-skill'),\n createSkillItem(2, 'USER_GLOBAL', 'user-skill'),\n createSkillItem(3, 'USER_WORKSPACE', 'user-skill'),\n createSkillItem(4, 'USER_GLOBAL', 'user-skill'),\n ],\n catalogSkills: Array.from({ length: 11 }, (_, index) => createInstallableSkillItem(index + 1)),\n userPreferences: {\n scopeKey: 'workspace:workspace-effective-counts',\n userKey: 'user-1',\n ignoredSkills: [],\n },\n});\n\nconst assertEffectiveSkillGrouping = (payload: PublishedSkillCatalogPayload) => {\n const catalog = toPublishedSkillCatalog(payload);\n const globalSkills = catalog.skills.filter(\n (skill) => skill.contextKind === 'global' && skill.assignmentSource === 'GLOBAL',\n );\n const projectSkills = catalog.skills.filter(\n (skill) => skill.contextKind === 'project' && skill.assignmentSource === 'WORKSPACE',\n );\n const userSkills = catalog.skills.filter((skill) => skill.assignmentSource.startsWith('USER'));\n const userSkillsWithGlobalContextKind = userSkills.filter((skill) => skill.contextKind === 'global');\n const installableSkillCount = payload.catalogSkills.length;\n\n assertEqual('published skill count', catalog.publishedSkillCount, 24);\n assertEqual('global assignment count', catalog.assignmentCounts.global, 19);\n assertEqual('project assignment count', catalog.assignmentCounts.project, 1);\n assertEqual('user assignment count', catalog.assignmentCounts.user, 4);\n assertEqual('other assignment count', catalog.assignmentCounts.other, 0);\n assertEqual('global grouped skill count', globalSkills.length, 19);\n assertEqual('project grouped skill count', projectSkills.length, 1);\n assertEqual('user grouped skill count', userSkills.length, 4);\n assertEqual('user grouped global context kind count', userSkillsWithGlobalContextKind.length, 0);\n assertEqual('installable/not installed catalog count', installableSkillCount, 11);\n\n return {\n globalAssignmentCount: catalog.assignmentCounts.global,\n projectAssignmentCount: catalog.assignmentCounts.project,\n userAssignmentCount: catalog.assignmentCounts.user,\n installableNotInstalledCount: installableSkillCount,\n };\n};\n\nconst assertRequestedSkillArgParsing = () => {\n const expectedSkills = ['frontend-components', 'frontend-styles', 'frontend-navigation'];\n const skillFieldSelection = parseRequestedSkillArgs({\n skill: 'frontend-components,frontend-styles\\nfrontend-navigation',\n });\n const skillsFieldSelection = parseRequestedSkillArgs({\n skills: 'frontend-components,frontend-styles\\nfrontend-navigation',\n });\n const mixedSelection = parseRequestedSkillArgs({\n skill: 'frontend-components, frontend-styles',\n skills: 'frontend-styles\\nfrontend-navigation',\n });\n\n assertEqual('skill field delimited selection', skillFieldSelection.join('|'), expectedSkills.join('|'));\n assertEqual('skills field delimited selection', skillsFieldSelection.join('|'), expectedSkills.join('|'));\n assertEqual('mixed field deduplicated selection', mixedSelection.join('|'), expectedSkills.join('|'));\n\n return {\n skillFieldSelection,\n skillsFieldSelection,\n mixedSelection,\n };\n};\n\nconst withBackendEnv = async <TResult>(\n env: Partial<Record<BackendEnvKey, string>>,\n callback: () => Promise<TResult>,\n): Promise<TResult> => {\n const previousValues = new Map<BackendEnvKey, string | undefined>();\n\n for (const key of BACKEND_ENV_KEYS) {\n previousValues.set(key, process.env[key]);\n delete process.env[key];\n }\n\n for (const [key, value] of Object.entries(env)) {\n process.env[key as BackendEnvKey] = value;\n }\n\n try {\n return await callback();\n } finally {\n for (const [key, value] of previousValues) {\n if (value === undefined) {\n delete process.env[key];\n continue;\n }\n\n process.env[key] = value;\n }\n }\n};\n\nconst assertBackendOriginResolution = async () => {\n const isolatedWorktree = await fs.mkdtemp(path.join(os.tmpdir(), 'opencode-wizard-plugin-smoke-'));\n\n const defaultConfig = await withBackendEnv({}, () => resolveConfig(isolatedWorktree));\n if (defaultConfig.backendOrigin !== DEPLOY_BACKEND_ORIGIN) {\n throw new Error(\n `Expected default backend origin ${DEPLOY_BACKEND_ORIGIN}, received ${defaultConfig.backendOrigin}`,\n );\n }\n\n const portOnlyConfig = await withBackendEnv({ PORT: '19876' }, () => resolveConfig(isolatedWorktree));\n if (portOnlyConfig.backendOrigin !== DEPLOY_BACKEND_ORIGIN) {\n throw new Error(\n `Expected PORT-only backend origin to stay ${DEPLOY_BACKEND_ORIGIN}, received ${portOnlyConfig.backendOrigin}`,\n );\n }\n\n const appUrlPlaceholderConfig = await withBackendEnv({ APP_URL: 'https://yourdomain.com' }, () =>\n resolveConfig(isolatedWorktree),\n );\n if (appUrlPlaceholderConfig.backendOrigin !== DEPLOY_BACKEND_ORIGIN) {\n throw new Error(\n `Expected APP_URL placeholder backend origin to stay ${DEPLOY_BACKEND_ORIGIN}, received ${appUrlPlaceholderConfig.backendOrigin}`,\n );\n }\n\n const overrideConfig = await withBackendEnv({ OPENCODE_WIZARD_BACKEND_ORIGIN: LOCAL_OVERRIDE_BACKEND_ORIGIN }, () =>\n resolveConfig(isolatedWorktree),\n );\n if (overrideConfig.backendOrigin !== LOCAL_OVERRIDE_BACKEND_ORIGIN) {\n throw new Error(\n `Expected explicit backend override ${LOCAL_OVERRIDE_BACKEND_ORIGIN}, received ${overrideConfig.backendOrigin}`,\n );\n }\n\n return {\n defaultBackendOrigin: defaultConfig.backendOrigin,\n portOnlyBackendOrigin: portOnlyConfig.backendOrigin,\n appUrlPlaceholderBackendOrigin: appUrlPlaceholderConfig.backendOrigin,\n explicitOverrideBackendOrigin: overrideConfig.backendOrigin,\n };\n};\n\nconst assertSystemNoteWizardFetchContract = (\n payload: PublishedSkillCatalogPayload,\n config: Awaited<ReturnType<typeof resolveConfig>>,\n detail: NonNullable<ReturnType<typeof toPublishedSkillDetail>>,\n) => {\n const systemNote = buildSystemNote(\n {\n directoryPath: '.',\n workspaceResolution: {\n requestedDirectory: '.',\n repositoryRoot: '.',\n repositoryUrl: 'https://example.com/opencode-wizard.git',\n fallbackWorkspaceSlug: null,\n directoryPath: '.',\n cacheKey: 'smoke-cache-key',\n },\n fetchResult: {\n ok: true,\n status: 'ready',\n authMode: 'session',\n payload,\n fetchedAt: '2026-04-22T00:00:00.000Z',\n source: 'cache',\n },\n },\n config,\n [detail],\n );\n\n if (!systemNote) {\n throw new Error('Expected system note to be generated for published skills payload');\n }\n\n const requiredFragments = [\n 'Workspace: opencode-wizard.',\n 'Directory: .',\n 'Wizard-listed skills (',\n 'Fetch rule: only when skill instructions could materially change routing, implementation, validation, or artifact structure, fetch a matching wizard-listed skill with `opencode_wizard_published_skills_fetch`; the fetched `SKILL.md` is authoritative.',\n 'Catalog/status metadata is discovery-only, not executable skill instructions;',\n 'native/local `.opencode/skills` or OpenCode skill bodies are fallback/source material only when no same-named wizard body can be fetched.',\n 'If fetch/auth/catalog fails, report degraded wizard-skill context and continue with normal repo evidence when safe.',\n 'Use `refresh: true` before cache deletion;',\n 'use `opencode_wizard_artifact_fetch` for non-skill wizard artifacts.',\n 'opencode_wizard_published_skills_fetch',\n ];\n\n for (const fragment of requiredFragments) {\n if (systemNote.includes(fragment)) continue;\n\n throw new Error(`Expected system note to include prompt contract fragment: ${fragment}`);\n }\n\n return {\n includesMaterialChangeFetchRule: systemNote.includes('materially change routing, implementation, validation'),\n includesAuthoritativeFetchedSkillBodyRule: systemNote.includes('fetched `SKILL.md` is authoritative'),\n includesCatalogDiscoveryOnlyRule: systemNote.includes('discovery-only'),\n includesNativeLocalFallbackRule: systemNote.includes('fallback/source material only'),\n includesDegradedFallbackRule: systemNote.includes('degraded wizard-skill context'),\n includesWizardFetchToolRoute: systemNote.includes('opencode_wizard_published_skills_fetch'),\n };\n};\n\nconst run = async () => {\n const payload: PublishedSkillCatalogPayload = createEffectiveSkillsSmokePayload();\n const detailSkillItem = payload.skills[0];\n detailSkillItem.skill.slug = 'backend-auth';\n detailSkillItem.skill.name = 'backend-auth';\n detailSkillItem.skill.summary = 'Backend auth skill';\n detailSkillItem.skill.whenToUse = 'Use for JWT cookie sessions and protected backend resolver work.';\n detailSkillItem.publishedArtifact.frontmatterName = 'backend-auth';\n detailSkillItem.publishedArtifact.frontmatterDescription = 'JWT auth skill';\n detailSkillItem.publishedArtifact.fileCount = 2;\n const detailItem: PublishedSkillDetailItem = {\n ...detailSkillItem,\n publishedArtifact: {\n ...detailSkillItem.publishedArtifact,\n markdownBody: '## Mock skill\\n\\nThis is a mock published skill.',\n renderedContent: '<h2>Mock skill</h2>',\n files: [\n {\n id: 'artifact-file-1',\n relativePath: 'SKILL.md',\n contentType: 'text/markdown; charset=utf-8',\n content: '---\\nname: \"backend-auth\"\\ndescription: \"JWT auth skill\"\\n---\\n\\n## Mock skill\\n',\n checksum: 'file-checksum-1',\n size: 74,\n sortOrder: 0,\n },\n {\n id: 'artifact-file-2',\n relativePath: 'resource.md',\n contentType: 'text/markdown; charset=utf-8',\n content: '# Resource\\n',\n checksum: 'file-checksum-2',\n size: 11,\n sortOrder: 1,\n },\n ],\n },\n };\n\n const config = await resolveConfig(process.cwd());\n const backendOriginSmoke = await assertBackendOriginResolution();\n const requestedSkillArgParsingSmoke = assertRequestedSkillArgParsing();\n\n const catalog = toPublishedSkillCatalog(payload);\n const effectiveSkillGroupingSmoke = assertEffectiveSkillGrouping(createEffectiveSkillsSmokePayload());\n const selection = selectPublishedSkills(payload, ['backend-auth', 'missing-skill']);\n const detail = selection.selectedItems[0] ? toPublishedSkillDetail(detailItem) : null;\n if (!detail) {\n throw new Error('Expected backend-auth detail to be selected for smoke test');\n }\n\n const systemNoteWizardFetchContractSmoke = assertSystemNoteWizardFetchContract(payload, config, detail);\n const preview = buildSkillMarkdown(detailItem).split('\\n').slice(0, 6);\n\n console.log(\n JSON.stringify(\n {\n runtimeMode: catalog.runtimeMode,\n graphqlUrl: config.graphqlUrl,\n backendOriginSmoke,\n requestedSkillArgParsingSmoke,\n systemNoteWizardFetchContractSmoke,\n effectiveSkillGroupingSmoke,\n publishedSkillCount: catalog.publishedSkillCount,\n availableTools: catalog.availableTools,\n facets: catalog.facets,\n selectedSkillCount: selection.selectedItems.length,\n missingSkills: selection.missingIdentifiers,\n selectedSkillSlug: detail.skillSlug,\n selectedSkillTags: detail.tags,\n markdownDocumentIncludesFrontmatter: detail.markdownDocument.startsWith('---'),\n resourceFileCount: detail.resources.length,\n supportingFileCount: detail.supportingFiles.count,\n supportingFilePaths: detail.supportingFiles.paths.map((file) => file.relativePath),\n preview,\n markdownBodyIncludesContent: detail.markdownBody.includes('This is a mock published skill.'),\n },\n null,\n 2,\n ),\n );\n};\n\nvoid run();\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["buildSystemNote","buildSkillMarkdown","parseRequestedSkillArgs","resolveConfig","selectPublishedSkills","toPublishedSkillCatalog","toPublishedSkillDetail","fs","os","path","DEPLOY_BACKEND_ORIGIN","LOCAL_OVERRIDE_BACKEND_ORIGIN","BACKEND_ENV_KEYS","assertEqual","label","actual","expected","Error","String","createSkillItem","index","assignmentSource","slugPrefix","assignmentType","scopePath","includeChildren","skill","id","slug","name","summary","whenToUse","status","installPolicy","tags","skillVersion","version","title","publishedArtifact","frontmatterName","frontmatterDescription","checksum","publishedAt","fileCount","createInstallableSkillItem","item","createEffectiveSkillsSmokePayload","workspace","repositoryUrl","defaultBranch","directoryPath","skills","Array","from","length","_","catalogSkills","userPreferences","scopeKey","userKey","ignoredSkills","assertEffectiveSkillGrouping","payload","catalog","globalSkills","filter","contextKind","projectSkills","userSkills","startsWith","userSkillsWithGlobalContextKind","installableSkillCount","publishedSkillCount","assignmentCounts","global","project","user","other","globalAssignmentCount","projectAssignmentCount","userAssignmentCount","installableNotInstalledCount","assertRequestedSkillArgParsing","expectedSkills","skillFieldSelection","skillsFieldSelection","mixedSelection","join","withBackendEnv","env","callback","previousValues","Map","key","set","process","value","Object","entries","undefined","assertBackendOriginResolution","isolatedWorktree","mkdtemp","tmpdir","defaultConfig","backendOrigin","portOnlyConfig","PORT","appUrlPlaceholderConfig","APP_URL","overrideConfig","OPENCODE_WIZARD_BACKEND_ORIGIN","defaultBackendOrigin","portOnlyBackendOrigin","appUrlPlaceholderBackendOrigin","explicitOverrideBackendOrigin","assertSystemNoteWizardFetchContract","config","detail","systemNote","workspaceResolution","requestedDirectory","repositoryRoot","fallbackWorkspaceSlug","cacheKey","fetchResult","ok","authMode","fetchedAt","source","requiredFragments","fragment","includes","includesEveryTaskEvaluationRule","includesAuthoritativeFetchedSkillBodyRule","includesCatalogCandidateOnlyRule","includesNativeLocalFallbackRule","includesDegradedFallbackRule","includesWizardFetchToolRoute","run","detailSkillItem","detailItem","markdownBody","renderedContent","files","relativePath","contentType","content","size","sortOrder","cwd","backendOriginSmoke","requestedSkillArgParsingSmoke","effectiveSkillGroupingSmoke","selection","selectedItems","systemNoteWizardFetchContractSmoke","preview","split","slice","console","log","JSON","stringify","runtimeMode","graphqlUrl","availableTools","facets","selectedSkillCount","missingSkills","missingIdentifiers","selectedSkillSlug","skillSlug","selectedSkillTags","markdownDocumentIncludesFrontmatter","markdownDocument","resourceFileCount","resources","supportingFileCount","supportingFiles","count","supportingFilePaths","paths","map","file","markdownBodyIncludesContent"],"sources":["../src/smoke-published-skills.ts"],"sourcesContent":["import {\n buildSystemNote,\n buildSkillMarkdown,\n parseRequestedSkillArgs,\n resolveConfig,\n selectPublishedSkills,\n toPublishedSkillCatalog,\n toPublishedSkillDetail,\n type PublishedSkillCatalogPayload,\n type PublishedSkillCatalogItem,\n type PublishedSkillDetailItem,\n type PublishedSkillInstallableCatalogItem,\n} from './server.js';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst DEPLOY_BACKEND_ORIGIN = 'https://opencode-wizard.aexol.work';\nconst LOCAL_OVERRIDE_BACKEND_ORIGIN = 'http://localhost:19876';\n\ntype BackendEnvKey = 'OPENCODE_WIZARD_BACKEND_ORIGIN' | 'APP_URL' | 'PORT';\n\nconst BACKEND_ENV_KEYS: BackendEnvKey[] = ['OPENCODE_WIZARD_BACKEND_ORIGIN', 'APP_URL', 'PORT'];\n\nconst assertEqual = <TValue>(label: string, actual: TValue, expected: TValue): void => {\n if (actual === expected) return;\n\n throw new Error(`${label} mismatch: expected ${String(expected)}, received ${String(actual)}`);\n};\n\nconst createSkillItem = (index: number, assignmentSource: string, slugPrefix: string): PublishedSkillCatalogItem => ({\n assignmentSource,\n assignmentType: 'PATH',\n scopePath: '.',\n includeChildren: true,\n skill: {\n id: `skill-${slugPrefix}-${index}`,\n slug: `${slugPrefix}-${index}`,\n name: `${slugPrefix}-${index}`,\n summary: `${slugPrefix} skill ${index}`,\n whenToUse: `Use for ${slugPrefix} smoke coverage ${index}.`,\n status: 'ACTIVE',\n installPolicy: assignmentSource === 'GLOBAL' ? 'GLOBAL_CONTEXT' : 'PROJECT_INSTALLABLE',\n tags: [],\n },\n skillVersion: {\n id: `version-${slugPrefix}-${index}`,\n version: '1.0.0',\n title: 'Initial',\n summary: 'Initial publish',\n status: 'PUBLISHED',\n },\n publishedArtifact: {\n id: `artifact-${slugPrefix}-${index}`,\n frontmatterName: `${slugPrefix}-${index}`,\n frontmatterDescription: `${slugPrefix} smoke skill`,\n checksum: `checksum-${slugPrefix}-${index}`,\n publishedAt: '2026-04-22T00:00:00.000Z',\n fileCount: 1,\n },\n});\n\nconst createInstallableSkillItem = (index: number): PublishedSkillInstallableCatalogItem => {\n const item = createSkillItem(index, 'CATALOG', 'installable-skill');\n\n return {\n skill: item.skill,\n skillVersion: item.skillVersion,\n publishedArtifact: item.publishedArtifact,\n };\n};\n\nconst createEffectiveSkillsSmokePayload = (): PublishedSkillCatalogPayload => ({\n workspace: {\n id: 'workspace-effective-counts',\n slug: 'opencode-wizard',\n name: 'opencode-wizard',\n repositoryUrl: 'https://example.com/opencode-wizard.git',\n defaultBranch: 'main',\n status: 'ACTIVE',\n },\n directoryPath: '.',\n skills: [\n ...Array.from({ length: 19 }, (_, index) => createSkillItem(index + 1, 'GLOBAL', 'global-skill')),\n createSkillItem(1, 'WORKSPACE', 'workspace-skill'),\n createSkillItem(1, 'USER', 'user-skill'),\n createSkillItem(2, 'USER_GLOBAL', 'user-skill'),\n createSkillItem(3, 'USER_WORKSPACE', 'user-skill'),\n createSkillItem(4, 'USER_GLOBAL', 'user-skill'),\n ],\n catalogSkills: Array.from({ length: 11 }, (_, index) => createInstallableSkillItem(index + 1)),\n userPreferences: {\n scopeKey: 'workspace:workspace-effective-counts',\n userKey: 'user-1',\n ignoredSkills: [],\n },\n});\n\nconst assertEffectiveSkillGrouping = (payload: PublishedSkillCatalogPayload) => {\n const catalog = toPublishedSkillCatalog(payload);\n const globalSkills = catalog.skills.filter(\n (skill) => skill.contextKind === 'global' && skill.assignmentSource === 'GLOBAL',\n );\n const projectSkills = catalog.skills.filter(\n (skill) => skill.contextKind === 'project' && skill.assignmentSource === 'WORKSPACE',\n );\n const userSkills = catalog.skills.filter((skill) => skill.assignmentSource.startsWith('USER'));\n const userSkillsWithGlobalContextKind = userSkills.filter((skill) => skill.contextKind === 'global');\n const installableSkillCount = payload.catalogSkills.length;\n\n assertEqual('published skill count', catalog.publishedSkillCount, 24);\n assertEqual('global assignment count', catalog.assignmentCounts.global, 19);\n assertEqual('project assignment count', catalog.assignmentCounts.project, 1);\n assertEqual('user assignment count', catalog.assignmentCounts.user, 4);\n assertEqual('other assignment count', catalog.assignmentCounts.other, 0);\n assertEqual('global grouped skill count', globalSkills.length, 19);\n assertEqual('project grouped skill count', projectSkills.length, 1);\n assertEqual('user grouped skill count', userSkills.length, 4);\n assertEqual('user grouped global context kind count', userSkillsWithGlobalContextKind.length, 0);\n assertEqual('installable/not installed catalog count', installableSkillCount, 11);\n\n return {\n globalAssignmentCount: catalog.assignmentCounts.global,\n projectAssignmentCount: catalog.assignmentCounts.project,\n userAssignmentCount: catalog.assignmentCounts.user,\n installableNotInstalledCount: installableSkillCount,\n };\n};\n\nconst assertRequestedSkillArgParsing = () => {\n const expectedSkills = ['frontend-components', 'frontend-styles', 'frontend-navigation'];\n const skillFieldSelection = parseRequestedSkillArgs({\n skill: 'frontend-components,frontend-styles\\nfrontend-navigation',\n });\n const skillsFieldSelection = parseRequestedSkillArgs({\n skills: 'frontend-components,frontend-styles\\nfrontend-navigation',\n });\n const mixedSelection = parseRequestedSkillArgs({\n skill: 'frontend-components, frontend-styles',\n skills: 'frontend-styles\\nfrontend-navigation',\n });\n\n assertEqual('skill field delimited selection', skillFieldSelection.join('|'), expectedSkills.join('|'));\n assertEqual('skills field delimited selection', skillsFieldSelection.join('|'), expectedSkills.join('|'));\n assertEqual('mixed field deduplicated selection', mixedSelection.join('|'), expectedSkills.join('|'));\n\n return {\n skillFieldSelection,\n skillsFieldSelection,\n mixedSelection,\n };\n};\n\nconst withBackendEnv = async <TResult>(\n env: Partial<Record<BackendEnvKey, string>>,\n callback: () => Promise<TResult>,\n): Promise<TResult> => {\n const previousValues = new Map<BackendEnvKey, string | undefined>();\n\n for (const key of BACKEND_ENV_KEYS) {\n previousValues.set(key, process.env[key]);\n delete process.env[key];\n }\n\n for (const [key, value] of Object.entries(env)) {\n process.env[key as BackendEnvKey] = value;\n }\n\n try {\n return await callback();\n } finally {\n for (const [key, value] of previousValues) {\n if (value === undefined) {\n delete process.env[key];\n continue;\n }\n\n process.env[key] = value;\n }\n }\n};\n\nconst assertBackendOriginResolution = async () => {\n const isolatedWorktree = await fs.mkdtemp(path.join(os.tmpdir(), 'opencode-wizard-plugin-smoke-'));\n\n const defaultConfig = await withBackendEnv({}, () => resolveConfig(isolatedWorktree));\n if (defaultConfig.backendOrigin !== DEPLOY_BACKEND_ORIGIN) {\n throw new Error(\n `Expected default backend origin ${DEPLOY_BACKEND_ORIGIN}, received ${defaultConfig.backendOrigin}`,\n );\n }\n\n const portOnlyConfig = await withBackendEnv({ PORT: '19876' }, () => resolveConfig(isolatedWorktree));\n if (portOnlyConfig.backendOrigin !== DEPLOY_BACKEND_ORIGIN) {\n throw new Error(\n `Expected PORT-only backend origin to stay ${DEPLOY_BACKEND_ORIGIN}, received ${portOnlyConfig.backendOrigin}`,\n );\n }\n\n const appUrlPlaceholderConfig = await withBackendEnv({ APP_URL: 'https://yourdomain.com' }, () =>\n resolveConfig(isolatedWorktree),\n );\n if (appUrlPlaceholderConfig.backendOrigin !== DEPLOY_BACKEND_ORIGIN) {\n throw new Error(\n `Expected APP_URL placeholder backend origin to stay ${DEPLOY_BACKEND_ORIGIN}, received ${appUrlPlaceholderConfig.backendOrigin}`,\n );\n }\n\n const overrideConfig = await withBackendEnv({ OPENCODE_WIZARD_BACKEND_ORIGIN: LOCAL_OVERRIDE_BACKEND_ORIGIN }, () =>\n resolveConfig(isolatedWorktree),\n );\n if (overrideConfig.backendOrigin !== LOCAL_OVERRIDE_BACKEND_ORIGIN) {\n throw new Error(\n `Expected explicit backend override ${LOCAL_OVERRIDE_BACKEND_ORIGIN}, received ${overrideConfig.backendOrigin}`,\n );\n }\n\n return {\n defaultBackendOrigin: defaultConfig.backendOrigin,\n portOnlyBackendOrigin: portOnlyConfig.backendOrigin,\n appUrlPlaceholderBackendOrigin: appUrlPlaceholderConfig.backendOrigin,\n explicitOverrideBackendOrigin: overrideConfig.backendOrigin,\n };\n};\n\nconst assertSystemNoteWizardFetchContract = (\n payload: PublishedSkillCatalogPayload,\n config: Awaited<ReturnType<typeof resolveConfig>>,\n detail: NonNullable<ReturnType<typeof toPublishedSkillDetail>>,\n) => {\n const systemNote = buildSystemNote(\n {\n directoryPath: '.',\n workspaceResolution: {\n requestedDirectory: '.',\n repositoryRoot: '.',\n repositoryUrl: 'https://example.com/opencode-wizard.git',\n fallbackWorkspaceSlug: null,\n directoryPath: '.',\n cacheKey: 'smoke-cache-key',\n },\n fetchResult: {\n ok: true,\n status: 'ready',\n authMode: 'session',\n payload,\n fetchedAt: '2026-04-22T00:00:00.000Z',\n source: 'cache',\n },\n },\n config,\n [detail],\n );\n\n if (!systemNote) {\n throw new Error('Expected system note to be generated for published skills payload');\n }\n\n const requiredFragments = [\n 'Workspace: opencode-wizard.',\n 'Directory: .',\n 'Wizard-listed skills (',\n 'Skill rule: for every task, compare the task goal to wizard-listed skills.',\n 'fetch its `SKILL.md` with `opencode_wizard_published_skills_fetch` before using guidance or choosing a same-named native/local skill; the fetched `SKILL.md` is authoritative.',\n 'Catalog/status metadata names candidates only, not executable guidance;',\n 'native/local `.opencode/skills` or OpenCode skill bodies are fallback/source material only after no matching wizard body can be fetched.',\n 'If fetch/auth/catalog fails, report degraded wizard-skill context and continue with normal repo evidence when safe.',\n 'Use `refresh: true` before cache deletion;',\n 'use `opencode_wizard_artifact_fetch` for non-skill wizard artifacts.',\n 'opencode_wizard_published_skills_fetch',\n ];\n\n for (const fragment of requiredFragments) {\n if (systemNote.includes(fragment)) continue;\n\n throw new Error(`Expected system note to include prompt contract fragment: ${fragment}`);\n }\n\n return {\n includesEveryTaskEvaluationRule: systemNote.includes('for every task, compare the task goal to wizard-listed skills'),\n includesAuthoritativeFetchedSkillBodyRule: systemNote.includes('fetched `SKILL.md` is authoritative'),\n includesCatalogCandidateOnlyRule: systemNote.includes('names candidates only'),\n includesNativeLocalFallbackRule: systemNote.includes('fallback/source material only'),\n includesDegradedFallbackRule: systemNote.includes('degraded wizard-skill context'),\n includesWizardFetchToolRoute: systemNote.includes('opencode_wizard_published_skills_fetch'),\n };\n};\n\nconst run = async () => {\n const payload: PublishedSkillCatalogPayload = createEffectiveSkillsSmokePayload();\n const detailSkillItem = payload.skills[0];\n detailSkillItem.skill.slug = 'backend-auth';\n detailSkillItem.skill.name = 'backend-auth';\n detailSkillItem.skill.summary = 'Backend auth skill';\n detailSkillItem.skill.whenToUse = 'Use for JWT cookie sessions and protected backend resolver work.';\n detailSkillItem.publishedArtifact.frontmatterName = 'backend-auth';\n detailSkillItem.publishedArtifact.frontmatterDescription = 'JWT auth skill';\n detailSkillItem.publishedArtifact.fileCount = 2;\n const detailItem: PublishedSkillDetailItem = {\n ...detailSkillItem,\n publishedArtifact: {\n ...detailSkillItem.publishedArtifact,\n markdownBody: '## Mock skill\\n\\nThis is a mock published skill.',\n renderedContent: '<h2>Mock skill</h2>',\n files: [\n {\n id: 'artifact-file-1',\n relativePath: 'SKILL.md',\n contentType: 'text/markdown; charset=utf-8',\n content: '---\\nname: \"backend-auth\"\\ndescription: \"JWT auth skill\"\\n---\\n\\n## Mock skill\\n',\n checksum: 'file-checksum-1',\n size: 74,\n sortOrder: 0,\n },\n {\n id: 'artifact-file-2',\n relativePath: 'resource.md',\n contentType: 'text/markdown; charset=utf-8',\n content: '# Resource\\n',\n checksum: 'file-checksum-2',\n size: 11,\n sortOrder: 1,\n },\n ],\n },\n };\n\n const config = await resolveConfig(process.cwd());\n const backendOriginSmoke = await assertBackendOriginResolution();\n const requestedSkillArgParsingSmoke = assertRequestedSkillArgParsing();\n\n const catalog = toPublishedSkillCatalog(payload);\n const effectiveSkillGroupingSmoke = assertEffectiveSkillGrouping(createEffectiveSkillsSmokePayload());\n const selection = selectPublishedSkills(payload, ['backend-auth', 'missing-skill']);\n const detail = selection.selectedItems[0] ? toPublishedSkillDetail(detailItem) : null;\n if (!detail) {\n throw new Error('Expected backend-auth detail to be selected for smoke test');\n }\n\n const systemNoteWizardFetchContractSmoke = assertSystemNoteWizardFetchContract(payload, config, detail);\n const preview = buildSkillMarkdown(detailItem).split('\\n').slice(0, 6);\n\n console.log(\n JSON.stringify(\n {\n runtimeMode: catalog.runtimeMode,\n graphqlUrl: config.graphqlUrl,\n backendOriginSmoke,\n requestedSkillArgParsingSmoke,\n systemNoteWizardFetchContractSmoke,\n effectiveSkillGroupingSmoke,\n publishedSkillCount: catalog.publishedSkillCount,\n availableTools: catalog.availableTools,\n facets: catalog.facets,\n selectedSkillCount: selection.selectedItems.length,\n missingSkills: selection.missingIdentifiers,\n selectedSkillSlug: detail.skillSlug,\n selectedSkillTags: detail.tags,\n markdownDocumentIncludesFrontmatter: detail.markdownDocument.startsWith('---'),\n resourceFileCount: detail.resources.length,\n supportingFileCount: detail.supportingFiles.count,\n supportingFilePaths: detail.supportingFiles.paths.map((file) => file.relativePath),\n preview,\n markdownBodyIncludesContent: detail.markdownBody.includes('This is a mock published skill.'),\n },\n null,\n 2,\n ),\n );\n};\n\nvoid run();\n"],"mappings":"AAAA,SACEA,eAAe,EACfC,kBAAkB,EAClBC,uBAAuB,EACvBC,aAAa,EACbC,qBAAqB,EACrBC,uBAAuB,EACvBC,sBAAsB,QAKjB,aAAa;AACpB,OAAOC,EAAE,MAAM,kBAAkB;AACjC,OAAOC,EAAE,MAAM,SAAS;AACxB,OAAOC,IAAI,MAAM,WAAW;AAE5B,MAAMC,qBAAqB,GAAG,oCAAoC;AAClE,MAAMC,6BAA6B,GAAG,wBAAwB;AAI9D,MAAMC,gBAAiC,GAAG,CAAC,gCAAgC,EAAE,SAAS,EAAE,MAAM,CAAC;AAE/F,MAAMC,WAAW,GAAGA,CAASC,KAAa,EAAEC,MAAc,EAAEC,QAAgB,KAAW;EACrF,IAAID,MAAM,KAAKC,QAAQ,EAAE;EAEzB,MAAM,IAAIC,KAAK,CAAC,GAAGH,KAAK,uBAAuBI,MAAM,CAACF,QAAQ,CAAC,cAAcE,MAAM,CAACH,MAAM,CAAC,EAAE,CAAC;AAChG,CAAC;AAED,MAAMI,eAAe,GAAGA,CAACC,KAAa,EAAEC,gBAAwB,EAAEC,UAAkB,MAAiC;EACnHD,gBAAgB;EAChBE,cAAc,EAAE,MAAM;EACtBC,SAAS,EAAE,GAAG;EACdC,eAAe,EAAE,IAAI;EACrBC,KAAK,EAAE;IACLC,EAAE,EAAE,SAASL,UAAU,IAAIF,KAAK,EAAE;IAClCQ,IAAI,EAAE,GAAGN,UAAU,IAAIF,KAAK,EAAE;IAC9BS,IAAI,EAAE,GAAGP,UAAU,IAAIF,KAAK,EAAE;IAC9BU,OAAO,EAAE,GAAGR,UAAU,UAAUF,KAAK,EAAE;IACvCW,SAAS,EAAE,WAAWT,UAAU,mBAAmBF,KAAK,GAAG;IAC3DY,MAAM,EAAE,QAAQ;IAChBC,aAAa,EAAEZ,gBAAgB,KAAK,QAAQ,GAAG,gBAAgB,GAAG,qBAAqB;IACvFa,IAAI,EAAE;EACR,CAAC;EACDC,YAAY,EAAE;IACZR,EAAE,EAAE,WAAWL,UAAU,IAAIF,KAAK,EAAE;IACpCgB,OAAO,EAAE,OAAO;IAChBC,KAAK,EAAE,SAAS;IAChBP,OAAO,EAAE,iBAAiB;IAC1BE,MAAM,EAAE;EACV,CAAC;EACDM,iBAAiB,EAAE;IACjBX,EAAE,EAAE,YAAYL,UAAU,IAAIF,KAAK,EAAE;IACrCmB,eAAe,EAAE,GAAGjB,UAAU,IAAIF,KAAK,EAAE;IACzCoB,sBAAsB,EAAE,GAAGlB,UAAU,cAAc;IACnDmB,QAAQ,EAAE,YAAYnB,UAAU,IAAIF,KAAK,EAAE;IAC3CsB,WAAW,EAAE,0BAA0B;IACvCC,SAAS,EAAE;EACb;AACF,CAAC,CAAC;AAEF,MAAMC,0BAA0B,GAAIxB,KAAa,IAA2C;EAC1F,MAAMyB,IAAI,GAAG1B,eAAe,CAACC,KAAK,EAAE,SAAS,EAAE,mBAAmB,CAAC;EAEnE,OAAO;IACLM,KAAK,EAAEmB,IAAI,CAACnB,KAAK;IACjBS,YAAY,EAAEU,IAAI,CAACV,YAAY;IAC/BG,iBAAiB,EAAEO,IAAI,CAACP;EAC1B,CAAC;AACH,CAAC;AAED,MAAMQ,iCAAiC,GAAGA,CAAA,MAAqC;EAC7EC,SAAS,EAAE;IACTpB,EAAE,EAAE,4BAA4B;IAChCC,IAAI,EAAE,iBAAiB;IACvBC,IAAI,EAAE,iBAAiB;IACvBmB,aAAa,EAAE,yCAAyC;IACxDC,aAAa,EAAE,MAAM;IACrBjB,MAAM,EAAE;EACV,CAAC;EACDkB,aAAa,EAAE,GAAG;EAClBC,MAAM,EAAE,CACN,GAAGC,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAE;EAAG,CAAC,EAAE,CAACC,CAAC,EAAEnC,KAAK,KAAKD,eAAe,CAACC,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,EACjGD,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAClDA,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EACxCA,eAAe,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,CAAC,EAC/CA,eAAe,CAAC,CAAC,EAAE,gBAAgB,EAAE,YAAY,CAAC,EAClDA,eAAe,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,CAAC,CAChD;EACDqC,aAAa,EAAEJ,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAE;EAAG,CAAC,EAAE,CAACC,CAAC,EAAEnC,KAAK,KAAKwB,0BAA0B,CAACxB,KAAK,GAAG,CAAC,CAAC,CAAC;EAC9FqC,eAAe,EAAE;IACfC,QAAQ,EAAE,sCAAsC;IAChDC,OAAO,EAAE,QAAQ;IACjBC,aAAa,EAAE;EACjB;AACF,CAAC,CAAC;AAEF,MAAMC,4BAA4B,GAAIC,OAAqC,IAAK;EAC9E,MAAMC,OAAO,GAAG1D,uBAAuB,CAACyD,OAAO,CAAC;EAChD,MAAME,YAAY,GAAGD,OAAO,CAACZ,MAAM,CAACc,MAAM,CACvCvC,KAAK,IAAKA,KAAK,CAACwC,WAAW,KAAK,QAAQ,IAAIxC,KAAK,CAACL,gBAAgB,KAAK,QAC1E,CAAC;EACD,MAAM8C,aAAa,GAAGJ,OAAO,CAACZ,MAAM,CAACc,MAAM,CACxCvC,KAAK,IAAKA,KAAK,CAACwC,WAAW,KAAK,SAAS,IAAIxC,KAAK,CAACL,gBAAgB,KAAK,WAC3E,CAAC;EACD,MAAM+C,UAAU,GAAGL,OAAO,CAACZ,MAAM,CAACc,MAAM,CAAEvC,KAAK,IAAKA,KAAK,CAACL,gBAAgB,CAACgD,UAAU,CAAC,MAAM,CAAC,CAAC;EAC9F,MAAMC,+BAA+B,GAAGF,UAAU,CAACH,MAAM,CAAEvC,KAAK,IAAKA,KAAK,CAACwC,WAAW,KAAK,QAAQ,CAAC;EACpG,MAAMK,qBAAqB,GAAGT,OAAO,CAACN,aAAa,CAACF,MAAM;EAE1DzC,WAAW,CAAC,uBAAuB,EAAEkD,OAAO,CAACS,mBAAmB,EAAE,EAAE,CAAC;EACrE3D,WAAW,CAAC,yBAAyB,EAAEkD,OAAO,CAACU,gBAAgB,CAACC,MAAM,EAAE,EAAE,CAAC;EAC3E7D,WAAW,CAAC,0BAA0B,EAAEkD,OAAO,CAACU,gBAAgB,CAACE,OAAO,EAAE,CAAC,CAAC;EAC5E9D,WAAW,CAAC,uBAAuB,EAAEkD,OAAO,CAACU,gBAAgB,CAACG,IAAI,EAAE,CAAC,CAAC;EACtE/D,WAAW,CAAC,wBAAwB,EAAEkD,OAAO,CAACU,gBAAgB,CAACI,KAAK,EAAE,CAAC,CAAC;EACxEhE,WAAW,CAAC,4BAA4B,EAAEmD,YAAY,CAACV,MAAM,EAAE,EAAE,CAAC;EAClEzC,WAAW,CAAC,6BAA6B,EAAEsD,aAAa,CAACb,MAAM,EAAE,CAAC,CAAC;EACnEzC,WAAW,CAAC,0BAA0B,EAAEuD,UAAU,CAACd,MAAM,EAAE,CAAC,CAAC;EAC7DzC,WAAW,CAAC,wCAAwC,EAAEyD,+BAA+B,CAAChB,MAAM,EAAE,CAAC,CAAC;EAChGzC,WAAW,CAAC,yCAAyC,EAAE0D,qBAAqB,EAAE,EAAE,CAAC;EAEjF,OAAO;IACLO,qBAAqB,EAAEf,OAAO,CAACU,gBAAgB,CAACC,MAAM;IACtDK,sBAAsB,EAAEhB,OAAO,CAACU,gBAAgB,CAACE,OAAO;IACxDK,mBAAmB,EAAEjB,OAAO,CAACU,gBAAgB,CAACG,IAAI;IAClDK,4BAA4B,EAAEV;EAChC,CAAC;AACH,CAAC;AAED,MAAMW,8BAA8B,GAAGA,CAAA,KAAM;EAC3C,MAAMC,cAAc,GAAG,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,qBAAqB,CAAC;EACxF,MAAMC,mBAAmB,GAAGlF,uBAAuB,CAAC;IAClDwB,KAAK,EAAE;EACT,CAAC,CAAC;EACF,MAAM2D,oBAAoB,GAAGnF,uBAAuB,CAAC;IACnDiD,MAAM,EAAE;EACV,CAAC,CAAC;EACF,MAAMmC,cAAc,GAAGpF,uBAAuB,CAAC;IAC7CwB,KAAK,EAAE,sCAAsC;IAC7CyB,MAAM,EAAE;EACV,CAAC,CAAC;EAEFtC,WAAW,CAAC,iCAAiC,EAAEuE,mBAAmB,CAACG,IAAI,CAAC,GAAG,CAAC,EAAEJ,cAAc,CAACI,IAAI,CAAC,GAAG,CAAC,CAAC;EACvG1E,WAAW,CAAC,kCAAkC,EAAEwE,oBAAoB,CAACE,IAAI,CAAC,GAAG,CAAC,EAAEJ,cAAc,CAACI,IAAI,CAAC,GAAG,CAAC,CAAC;EACzG1E,WAAW,CAAC,oCAAoC,EAAEyE,cAAc,CAACC,IAAI,CAAC,GAAG,CAAC,EAAEJ,cAAc,CAACI,IAAI,CAAC,GAAG,CAAC,CAAC;EAErG,OAAO;IACLH,mBAAmB;IACnBC,oBAAoB;IACpBC;EACF,CAAC;AACH,CAAC;AAED,MAAME,cAAc,GAAG,MAAAA,CACrBC,GAA2C,EAC3CC,QAAgC,KACX;EACrB,MAAMC,cAAc,GAAG,IAAIC,GAAG,CAAoC,CAAC;EAEnE,KAAK,MAAMC,GAAG,IAAIjF,gBAAgB,EAAE;IAClC+E,cAAc,CAACG,GAAG,CAACD,GAAG,EAAEE,OAAO,CAACN,GAAG,CAACI,GAAG,CAAC,CAAC;IACzC,OAAOE,OAAO,CAACN,GAAG,CAACI,GAAG,CAAC;EACzB;EAEA,KAAK,MAAM,CAACA,GAAG,EAAEG,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACT,GAAG,CAAC,EAAE;IAC9CM,OAAO,CAACN,GAAG,CAACI,GAAG,CAAkB,GAAGG,KAAK;EAC3C;EAEA,IAAI;IACF,OAAO,MAAMN,QAAQ,CAAC,CAAC;EACzB,CAAC,SAAS;IACR,KAAK,MAAM,CAACG,GAAG,EAAEG,KAAK,CAAC,IAAIL,cAAc,EAAE;MACzC,IAAIK,KAAK,KAAKG,SAAS,EAAE;QACvB,OAAOJ,OAAO,CAACN,GAAG,CAACI,GAAG,CAAC;QACvB;MACF;MAEAE,OAAO,CAACN,GAAG,CAACI,GAAG,CAAC,GAAGG,KAAK;IAC1B;EACF;AACF,CAAC;AAED,MAAMI,6BAA6B,GAAG,MAAAA,CAAA,KAAY;EAChD,MAAMC,gBAAgB,GAAG,MAAM9F,EAAE,CAAC+F,OAAO,CAAC7F,IAAI,CAAC8E,IAAI,CAAC/E,EAAE,CAAC+F,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAC;EAElG,MAAMC,aAAa,GAAG,MAAMhB,cAAc,CAAC,CAAC,CAAC,EAAE,MAAMrF,aAAa,CAACkG,gBAAgB,CAAC,CAAC;EACrF,IAAIG,aAAa,CAACC,aAAa,KAAK/F,qBAAqB,EAAE;IACzD,MAAM,IAAIO,KAAK,CACb,mCAAmCP,qBAAqB,cAAc8F,aAAa,CAACC,aAAa,EACnG,CAAC;EACH;EAEA,MAAMC,cAAc,GAAG,MAAMlB,cAAc,CAAC;IAAEmB,IAAI,EAAE;EAAQ,CAAC,EAAE,MAAMxG,aAAa,CAACkG,gBAAgB,CAAC,CAAC;EACrG,IAAIK,cAAc,CAACD,aAAa,KAAK/F,qBAAqB,EAAE;IAC1D,MAAM,IAAIO,KAAK,CACb,6CAA6CP,qBAAqB,cAAcgG,cAAc,CAACD,aAAa,EAC9G,CAAC;EACH;EAEA,MAAMG,uBAAuB,GAAG,MAAMpB,cAAc,CAAC;IAAEqB,OAAO,EAAE;EAAyB,CAAC,EAAE,MAC1F1G,aAAa,CAACkG,gBAAgB,CAChC,CAAC;EACD,IAAIO,uBAAuB,CAACH,aAAa,KAAK/F,qBAAqB,EAAE;IACnE,MAAM,IAAIO,KAAK,CACb,uDAAuDP,qBAAqB,cAAckG,uBAAuB,CAACH,aAAa,EACjI,CAAC;EACH;EAEA,MAAMK,cAAc,GAAG,MAAMtB,cAAc,CAAC;IAAEuB,8BAA8B,EAAEpG;EAA8B,CAAC,EAAE,MAC7GR,aAAa,CAACkG,gBAAgB,CAChC,CAAC;EACD,IAAIS,cAAc,CAACL,aAAa,KAAK9F,6BAA6B,EAAE;IAClE,MAAM,IAAIM,KAAK,CACb,sCAAsCN,6BAA6B,cAAcmG,cAAc,CAACL,aAAa,EAC/G,CAAC;EACH;EAEA,OAAO;IACLO,oBAAoB,EAAER,aAAa,CAACC,aAAa;IACjDQ,qBAAqB,EAAEP,cAAc,CAACD,aAAa;IACnDS,8BAA8B,EAAEN,uBAAuB,CAACH,aAAa;IACrEU,6BAA6B,EAAEL,cAAc,CAACL;EAChD,CAAC;AACH,CAAC;AAED,MAAMW,mCAAmC,GAAGA,CAC1CtD,OAAqC,EACrCuD,MAAiD,EACjDC,MAA8D,KAC3D;EACH,MAAMC,UAAU,GAAGvH,eAAe,CAChC;IACEkD,aAAa,EAAE,GAAG;IAClBsE,mBAAmB,EAAE;MACnBC,kBAAkB,EAAE,GAAG;MACvBC,cAAc,EAAE,GAAG;MACnB1E,aAAa,EAAE,yCAAyC;MACxD2E,qBAAqB,EAAE,IAAI;MAC3BzE,aAAa,EAAE,GAAG;MAClB0E,QAAQ,EAAE;IACZ,CAAC;IACDC,WAAW,EAAE;MACXC,EAAE,EAAE,IAAI;MACR9F,MAAM,EAAE,OAAO;MACf+F,QAAQ,EAAE,SAAS;MACnBjE,OAAO;MACPkE,SAAS,EAAE,0BAA0B;MACrCC,MAAM,EAAE;IACV;EACF,CAAC,EACDZ,MAAM,EACN,CAACC,MAAM,CACT,CAAC;EAED,IAAI,CAACC,UAAU,EAAE;IACf,MAAM,IAAItG,KAAK,CAAC,mEAAmE,CAAC;EACtF;EAEA,MAAMiH,iBAAiB,GAAG,CACxB,6BAA6B,EAC7B,cAAc,EACd,wBAAwB,EACxB,4EAA4E,EAC5E,gLAAgL,EAChL,yEAAyE,EACzE,0IAA0I,EAC1I,qHAAqH,EACrH,4CAA4C,EAC5C,sEAAsE,EACtE,wCAAwC,CACzC;EAED,KAAK,MAAMC,QAAQ,IAAID,iBAAiB,EAAE;IACxC,IAAIX,UAAU,CAACa,QAAQ,CAACD,QAAQ,CAAC,EAAE;IAEnC,MAAM,IAAIlH,KAAK,CAAC,6DAA6DkH,QAAQ,EAAE,CAAC;EAC1F;EAEA,OAAO;IACLE,+BAA+B,EAAEd,UAAU,CAACa,QAAQ,CAAC,+DAA+D,CAAC;IACrHE,yCAAyC,EAAEf,UAAU,CAACa,QAAQ,CAAC,qCAAqC,CAAC;IACrGG,gCAAgC,EAAEhB,UAAU,CAACa,QAAQ,CAAC,uBAAuB,CAAC;IAC9EI,+BAA+B,EAAEjB,UAAU,CAACa,QAAQ,CAAC,+BAA+B,CAAC;IACrFK,4BAA4B,EAAElB,UAAU,CAACa,QAAQ,CAAC,+BAA+B,CAAC;IAClFM,4BAA4B,EAAEnB,UAAU,CAACa,QAAQ,CAAC,wCAAwC;EAC5F,CAAC;AACH,CAAC;AAED,MAAMO,GAAG,GAAG,MAAAA,CAAA,KAAY;EACtB,MAAM7E,OAAqC,GAAGhB,iCAAiC,CAAC,CAAC;EACjF,MAAM8F,eAAe,GAAG9E,OAAO,CAACX,MAAM,CAAC,CAAC,CAAC;EACzCyF,eAAe,CAAClH,KAAK,CAACE,IAAI,GAAG,cAAc;EAC3CgH,eAAe,CAAClH,KAAK,CAACG,IAAI,GAAG,cAAc;EAC3C+G,eAAe,CAAClH,KAAK,CAACI,OAAO,GAAG,oBAAoB;EACpD8G,eAAe,CAAClH,KAAK,CAACK,SAAS,GAAG,kEAAkE;EACpG6G,eAAe,CAACtG,iBAAiB,CAACC,eAAe,GAAG,cAAc;EAClEqG,eAAe,CAACtG,iBAAiB,CAACE,sBAAsB,GAAG,gBAAgB;EAC3EoG,eAAe,CAACtG,iBAAiB,CAACK,SAAS,GAAG,CAAC;EAC/C,MAAMkG,UAAoC,GAAG;IAC3C,GAAGD,eAAe;IAClBtG,iBAAiB,EAAE;MACjB,GAAGsG,eAAe,CAACtG,iBAAiB;MACpCwG,YAAY,EAAE,kDAAkD;MAChEC,eAAe,EAAE,qBAAqB;MACtCC,KAAK,EAAE,CACL;QACErH,EAAE,EAAE,iBAAiB;QACrBsH,YAAY,EAAE,UAAU;QACxBC,WAAW,EAAE,8BAA8B;QAC3CC,OAAO,EAAE,kFAAkF;QAC3F1G,QAAQ,EAAE,iBAAiB;QAC3B2G,IAAI,EAAE,EAAE;QACRC,SAAS,EAAE;MACb,CAAC,EACD;QACE1H,EAAE,EAAE,iBAAiB;QACrBsH,YAAY,EAAE,aAAa;QAC3BC,WAAW,EAAE,8BAA8B;QAC3CC,OAAO,EAAE,cAAc;QACvB1G,QAAQ,EAAE,iBAAiB;QAC3B2G,IAAI,EAAE,EAAE;QACRC,SAAS,EAAE;MACb,CAAC;IAEL;EACF,CAAC;EAED,MAAMhC,MAAM,GAAG,MAAMlH,aAAa,CAAC4F,OAAO,CAACuD,GAAG,CAAC,CAAC,CAAC;EACjD,MAAMC,kBAAkB,GAAG,MAAMnD,6BAA6B,CAAC,CAAC;EAChE,MAAMoD,6BAA6B,GAAGtE,8BAA8B,CAAC,CAAC;EAEtE,MAAMnB,OAAO,GAAG1D,uBAAuB,CAACyD,OAAO,CAAC;EAChD,MAAM2F,2BAA2B,GAAG5F,4BAA4B,CAACf,iCAAiC,CAAC,CAAC,CAAC;EACrG,MAAM4G,SAAS,GAAGtJ,qBAAqB,CAAC0D,OAAO,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;EACnF,MAAMwD,MAAM,GAAGoC,SAAS,CAACC,aAAa,CAAC,CAAC,CAAC,GAAGrJ,sBAAsB,CAACuI,UAAU,CAAC,GAAG,IAAI;EACrF,IAAI,CAACvB,MAAM,EAAE;IACX,MAAM,IAAIrG,KAAK,CAAC,4DAA4D,CAAC;EAC/E;EAEA,MAAM2I,kCAAkC,GAAGxC,mCAAmC,CAACtD,OAAO,EAAEuD,MAAM,EAAEC,MAAM,CAAC;EACvG,MAAMuC,OAAO,GAAG5J,kBAAkB,CAAC4I,UAAU,CAAC,CAACiB,KAAK,CAAC,IAAI,CAAC,CAACC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;EAEtEC,OAAO,CAACC,GAAG,CACTC,IAAI,CAACC,SAAS,CACZ;IACEC,WAAW,EAAErG,OAAO,CAACqG,WAAW;IAChCC,UAAU,EAAEhD,MAAM,CAACgD,UAAU;IAC7Bd,kBAAkB;IAClBC,6BAA6B;IAC7BI,kCAAkC;IAClCH,2BAA2B;IAC3BjF,mBAAmB,EAAET,OAAO,CAACS,mBAAmB;IAChD8F,cAAc,EAAEvG,OAAO,CAACuG,cAAc;IACtCC,MAAM,EAAExG,OAAO,CAACwG,MAAM;IACtBC,kBAAkB,EAAEd,SAAS,CAACC,aAAa,CAACrG,MAAM;IAClDmH,aAAa,EAAEf,SAAS,CAACgB,kBAAkB;IAC3CC,iBAAiB,EAAErD,MAAM,CAACsD,SAAS;IACnCC,iBAAiB,EAAEvD,MAAM,CAACpF,IAAI;IAC9B4I,mCAAmC,EAAExD,MAAM,CAACyD,gBAAgB,CAAC1G,UAAU,CAAC,KAAK,CAAC;IAC9E2G,iBAAiB,EAAE1D,MAAM,CAAC2D,SAAS,CAAC3H,MAAM;IAC1C4H,mBAAmB,EAAE5D,MAAM,CAAC6D,eAAe,CAACC,KAAK;IACjDC,mBAAmB,EAAE/D,MAAM,CAAC6D,eAAe,CAACG,KAAK,CAACC,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACvC,YAAY,CAAC;IAClFY,OAAO;IACP4B,2BAA2B,EAAEnE,MAAM,CAACwB,YAAY,CAACV,QAAQ,CAAC,iCAAiC;EAC7F,CAAC,EACD,IAAI,EACJ,CACF,CACF,CAAC;AACH,CAAC;AAED,KAAKO,GAAG,CAAC,CAAC","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aexol/opencode-wizard",
3
- "version": "0.4.8",
3
+ "version": "0.5.1",
4
4
  "description": "OpenCode plugin for opencode-wizard published skills",
5
5
  "type": "module",
6
6
  "oc-plugin": [