@aexol/opencode-wizard 0.3.13 → 0.4.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.
@@ -5,6 +5,7 @@ import { readGlobalAuthState, resolveStoredAuthState, toStoredUserKey } from './
5
5
  import { fetchPublishedSkillsCatalog, hydrateStoredAuthStateRole } from './client.js';
6
6
  import { NATIVE_SKILLS_URL_COMPATIBILITY, PLUGIN_ID, ROOT_SKILL_SEED_PATH } from './constants.js';
7
7
  import { resolveConfig } from './config.js';
8
+ import { GLOBAL_SKILL_MANAGEMENT_HINT } from './preferences.js';
8
9
  import { getPublishedSkillIgnoreScopeKey, resolveWorkspace, toWorkspaceResolutionMetadata, toWorkspaceResolutionOutput } from './workspace.js';
9
10
  export const toPublishedSkillCatalog = (payload, availableTools = resolveAvailableTools(null)) => buildPublishedSkillCatalog(payload, {
10
11
  pluginId: PLUGIN_ID,
@@ -22,7 +23,8 @@ export const filterIgnoredPublishedSkills = async (config, result) => {
22
23
  userKey,
23
24
  ignoredSkillSlugs: [],
24
25
  installedGlobalSkillSlugs: [],
25
- installedWorkspaceSkillSlugs: []
26
+ installedWorkspaceSkillSlugs: [],
27
+ globalSkillManagementHint: GLOBAL_SKILL_MANAGEMENT_HINT
26
28
  },
27
29
  ignoredSkills: []
28
30
  };
@@ -36,7 +38,8 @@ export const filterIgnoredPublishedSkills = async (config, result) => {
36
38
  userKey: result.fetchResult.payload.userPreferences.userKey || userKey,
37
39
  ignoredSkillSlugs,
38
40
  installedGlobalSkillSlugs: [],
39
- installedWorkspaceSkillSlugs: []
41
+ installedWorkspaceSkillSlugs: [],
42
+ globalSkillManagementHint: GLOBAL_SKILL_MANAGEMENT_HINT
40
43
  },
41
44
  ignoredSkills
42
45
  };
@@ -94,7 +97,8 @@ export const formatStatusOutput = async (worktree, config, publishedSkillsResult
94
97
  ignoredPublishedSkills: {
95
98
  scopeKey: filteredResult.ignoreState.scopeKey,
96
99
  userKey: filteredResult.ignoreState.userKey,
97
- count: filteredResult.ignoreState.ignoredSkillSlugs.length
100
+ count: filteredResult.ignoreState.ignoredSkillSlugs.length,
101
+ globalSkillManagementHint: filteredResult.ignoreState.globalSkillManagementHint
98
102
  }
99
103
  };
100
104
  if (!filteredResult.fetchResult.ok) {
@@ -1 +1 @@
1
- {"version":3,"names":["resolveAvailableTools","buildPublishedSkillsSystemNote","toPublishedSkillCatalog","buildPublishedSkillCatalog","toInstallableSkillSummary","toPublishedSkillSummary","readGlobalAuthState","resolveStoredAuthState","toStoredUserKey","fetchPublishedSkillsCatalog","hydrateStoredAuthStateRole","NATIVE_SKILLS_URL_COMPATIBILITY","PLUGIN_ID","ROOT_SKILL_SEED_PATH","resolveConfig","getPublishedSkillIgnoreScopeKey","resolveWorkspace","toWorkspaceResolutionMetadata","toWorkspaceResolutionOutput","payload","availableTools","pluginId","rootSkillSeedPath","filterIgnoredPublishedSkills","config","result","authState","authStatePath","userKey","fetchResult","ok","ignoreState","scopeKey","workspaceResolution","ignoredSkillSlugs","installedGlobalSkillSlugs","installedWorkspaceSkillSlugs","ignoredSkills","userPreferences","map","skill","skillSlug","getWorkspaceUnavailableMessage","workspace","buildSystemNote","_config","details","catalog","directoryPath","formatStatusOutput","worktree","publishedSkillsResult","loginBootstrapSnapshot","filteredResult","base","runtimeMode","nativeSkillsUrlCompatibility","backendOrigin","graphqlUrl","fallbackWorkspaceSlug","requestedDirectoryPath","authMode","email","userId","role","authenticatedAt","expiresAt","loginBootstrap","status","trigger","startedAt","browserUrl","browserOpenError","message","fetchedAt","source","ignoredPublishedSkills","count","length","JSON","stringify","toPluginAuthStateSummary","resolvePluginStatusSnapshot","directory","signal","registeredTools","installableCatalog","catalogSkills","skills","withStatusMessage","snapshot","toAiFacingPluginStatusSnapshot","_installableCatalog","safeSnapshot","toPluginStatusMetadata","pluginStatus","authStatus","authEmail","authUserId","authRole","repositoryUrl","workspaceSlug","workspaceSlugSource","toFetchFailureOutput","output","metadata"],"sources":["../../src/server/status.ts"],"sourcesContent":["import { resolveAvailableTools } from '../plugin-tools.js';\nimport { buildPublishedSkillsSystemNote } from '../published-skills-system-note.js';\nimport {\n toPublishedSkillCatalog as buildPublishedSkillCatalog,\n toInstallableSkillSummary,\n toPublishedSkillSummary,\n type PublishedSkillDetail,\n type PublishedSkillsSuccessState,\n} from '../published-skills-transform.js';\nimport { readGlobalAuthState, resolveStoredAuthState, toStoredUserKey } from './auth-store.js';\nimport { fetchPublishedSkillsCatalog, hydrateStoredAuthStateRole } from './client.js';\nimport { NATIVE_SKILLS_URL_COMPATIBILITY, PLUGIN_ID, ROOT_SKILL_SEED_PATH } from './constants.js';\nimport { resolveConfig } from './config.js';\nimport { getPublishedSkillIgnoreScopeKey, resolveWorkspace, toWorkspaceResolutionMetadata, toWorkspaceResolutionOutput } from './workspace.js';\nimport type {\n AiFacingPluginStatusSnapshot,\n AuthState,\n FilteredPublishedSkillsResult,\n LoginBootstrapSnapshot,\n PluginAuthStateSummary,\n PluginStatusSnapshot,\n PublishedSkillCatalogPayload,\n PublishedSkillsResult,\n ResolvedConfig,\n} from './types.js';\n\nexport const toPublishedSkillCatalog = (\n payload: PublishedSkillCatalogPayload,\n availableTools: string[] = resolveAvailableTools(null),\n): PublishedSkillsSuccessState =>\n buildPublishedSkillCatalog(payload, {\n pluginId: PLUGIN_ID,\n rootSkillSeedPath: ROOT_SKILL_SEED_PATH,\n availableTools,\n });\n\nexport const filterIgnoredPublishedSkills = async (\n config: ResolvedConfig,\n result: PublishedSkillsResult,\n): Promise<FilteredPublishedSkillsResult> => {\n const authState = await readGlobalAuthState(config.authStatePath);\n const userKey = toStoredUserKey(authState);\n\n if (!result.fetchResult.ok) {\n return {\n ...result,\n ignoreState: {\n scopeKey: getPublishedSkillIgnoreScopeKey(result.workspaceResolution),\n userKey,\n ignoredSkillSlugs: [],\n installedGlobalSkillSlugs: [],\n installedWorkspaceSkillSlugs: [],\n },\n ignoredSkills: [],\n };\n }\n\n const ignoredSkills = result.fetchResult.payload.userPreferences.ignoredSkills.map(toPublishedSkillSummary);\n const ignoredSkillSlugs = ignoredSkills.map((skill) => skill.skillSlug);\n\n return {\n ...result,\n ignoreState: {\n scopeKey: result.fetchResult.payload.userPreferences.scopeKey,\n userKey: result.fetchResult.payload.userPreferences.userKey || userKey,\n ignoredSkillSlugs,\n installedGlobalSkillSlugs: [],\n installedWorkspaceSkillSlugs: [],\n },\n ignoredSkills,\n };\n};\n\nconst getWorkspaceUnavailableMessage = (payload: PublishedSkillCatalogPayload): string | null => {\n if (payload.workspace) return null;\n return 'Workspace-specific skills are unavailable because the workspace was not found; global skills are still loaded.';\n};\n\nexport const buildSystemNote = (\n result: PublishedSkillsResult,\n _config: ResolvedConfig,\n details: PublishedSkillDetail[],\n): string | null => {\n if (!result.fetchResult.ok) return null;\n\n const catalog = toPublishedSkillCatalog(result.fetchResult.payload);\n return buildPublishedSkillsSystemNote({\n workspace: result.fetchResult.payload.workspace,\n directoryPath: result.directoryPath,\n catalog,\n details,\n });\n};\n\nexport const formatStatusOutput = async (\n worktree: string,\n config: ResolvedConfig,\n publishedSkillsResult: PublishedSkillsResult,\n loginBootstrapSnapshot: LoginBootstrapSnapshot,\n) => {\n const authState = await resolveStoredAuthState(worktree, config);\n const filteredResult = await filterIgnoredPublishedSkills(config, publishedSkillsResult);\n const base = {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n nativeSkillsUrlCompatibility: NATIVE_SKILLS_URL_COMPATIBILITY,\n backendOrigin: config.backendOrigin,\n graphqlUrl: config.graphqlUrl,\n fallbackWorkspaceSlug: config.fallbackWorkspaceSlug,\n workspaceResolution: toWorkspaceResolutionOutput(publishedSkillsResult.workspaceResolution),\n rootSkillSeedPath: config.rootSkillSeedPath,\n authStatePath: config.authStatePath,\n requestedDirectoryPath: publishedSkillsResult.directoryPath,\n authMode: publishedSkillsResult.fetchResult.authMode,\n authState:\n authState === null\n ? null\n : {\n email: authState.email,\n userId: authState.userId,\n role: authState.role ?? null,\n authenticatedAt: authState.authenticatedAt,\n expiresAt: authState.expiresAt,\n },\n loginBootstrap:\n loginBootstrapSnapshot.status === 'idle'\n ? null\n : {\n status: loginBootstrapSnapshot.status,\n trigger: loginBootstrapSnapshot.trigger,\n startedAt: loginBootstrapSnapshot.startedAt,\n expiresAt: loginBootstrapSnapshot.expiresAt,\n browserUrl: loginBootstrapSnapshot.browserUrl,\n browserOpenError: loginBootstrapSnapshot.browserOpenError,\n email: loginBootstrapSnapshot.email,\n message: loginBootstrapSnapshot.message,\n },\n status: filteredResult.fetchResult.status,\n fetchedAt: filteredResult.fetchResult.fetchedAt,\n source: filteredResult.fetchResult.source,\n availableTools: resolveAvailableTools(authState?.role ?? null),\n ignoredPublishedSkills: {\n scopeKey: filteredResult.ignoreState.scopeKey,\n userKey: filteredResult.ignoreState.userKey,\n count: filteredResult.ignoreState.ignoredSkillSlugs.length,\n },\n };\n\n if (!filteredResult.fetchResult.ok) {\n return JSON.stringify({ ...base, message: filteredResult.fetchResult.message }, null, 2);\n }\n\n return JSON.stringify(\n {\n ...base,\n ...toPublishedSkillCatalog(filteredResult.fetchResult.payload, base.availableTools),\n message: getWorkspaceUnavailableMessage(filteredResult.fetchResult.payload),\n },\n null,\n 2,\n );\n};\n\nexport const toPluginAuthStateSummary = (authState: AuthState | null): PluginAuthStateSummary => {\n if (!authState) {\n return {\n status: 'missing',\n email: null,\n userId: null,\n role: null,\n authenticatedAt: null,\n expiresAt: null,\n };\n }\n\n return {\n status: 'authenticated',\n email: authState.email,\n userId: authState.userId,\n role: authState.role ?? null,\n authenticatedAt: authState.authenticatedAt,\n expiresAt: authState.expiresAt,\n };\n};\n\nexport const resolvePluginStatusSnapshot = async ({\n worktree,\n directory,\n signal,\n registeredTools,\n}: {\n worktree: string;\n directory: string;\n signal: AbortSignal;\n registeredTools?: string[];\n}): Promise<PluginStatusSnapshot> => {\n const config = await resolveConfig(worktree);\n const workspaceResolution = await resolveWorkspace({ config, directory });\n const fetchResult = await fetchPublishedSkillsCatalog(worktree, config, workspaceResolution, signal);\n const filteredResult = await filterIgnoredPublishedSkills(config, {\n directoryPath: workspaceResolution.directoryPath,\n workspaceResolution,\n fetchResult,\n });\n const authState = await hydrateStoredAuthStateRole({ worktree, config, signal });\n const availableTools = registeredTools ?? resolveAvailableTools(authState?.role ?? null);\n\n return {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n nativeSkillsUrlCompatibility: NATIVE_SKILLS_URL_COMPATIBILITY,\n backendOrigin: config.backendOrigin,\n graphqlUrl: config.graphqlUrl,\n fallbackWorkspaceSlug: config.fallbackWorkspaceSlug,\n workspaceResolution: toWorkspaceResolutionOutput(workspaceResolution),\n rootSkillSeedPath: config.rootSkillSeedPath,\n authStatePath: config.authStatePath,\n authState: toPluginAuthStateSummary(authState),\n status: filteredResult.fetchResult.status,\n authMode: filteredResult.fetchResult.authMode,\n fetchedAt: filteredResult.fetchResult.fetchedAt,\n source: filteredResult.fetchResult.source,\n availableTools,\n message: filteredResult.fetchResult.ok\n ? getWorkspaceUnavailableMessage(filteredResult.fetchResult.payload)\n : filteredResult.fetchResult.message,\n catalog: filteredResult.fetchResult.ok ? toPublishedSkillCatalog(filteredResult.fetchResult.payload, availableTools) : null,\n installableCatalog: filteredResult.fetchResult.ok\n ? {\n count: filteredResult.fetchResult.payload.catalogSkills.length,\n skills: filteredResult.fetchResult.payload.catalogSkills.map(toInstallableSkillSummary),\n }\n : null,\n ignoredPublishedSkills: {\n scopeKey: filteredResult.ignoreState.scopeKey,\n userKey: filteredResult.ignoreState.userKey,\n count: filteredResult.ignoreState.ignoredSkillSlugs.length,\n skills: filteredResult.ignoredSkills,\n },\n };\n};\n\nexport const withStatusMessage = (snapshot: PluginStatusSnapshot, message: string): PluginStatusSnapshot => ({\n ...snapshot,\n message,\n});\n\nexport const toAiFacingPluginStatusSnapshot = (snapshot: PluginStatusSnapshot): AiFacingPluginStatusSnapshot => {\n const { ignoredPublishedSkills, installableCatalog: _installableCatalog, ...safeSnapshot } = snapshot;\n\n return {\n ...safeSnapshot,\n ignoredPublishedSkills: {\n scopeKey: ignoredPublishedSkills.scopeKey,\n count: ignoredPublishedSkills.count,\n },\n };\n};\n\nexport const toPluginStatusMetadata = (snapshot: PluginStatusSnapshot): Record<string, string> => ({\n backendOrigin: snapshot.backendOrigin,\n graphqlUrl: snapshot.graphqlUrl,\n pluginStatus: snapshot.status,\n authStatus: snapshot.authState.status,\n authEmail: snapshot.authState.email ?? '',\n authUserId: snapshot.authState.userId ?? '',\n authRole: snapshot.authState.role ?? '',\n directoryPath: snapshot.workspaceResolution.directoryPath,\n repositoryUrl: snapshot.workspaceResolution.repositoryUrl ?? '',\n source: snapshot.source,\n workspaceSlug: snapshot.workspaceResolution.workspaceSlug ?? '',\n workspaceSlugSource: snapshot.workspaceResolution.workspaceSlugSource ?? 'placeholder',\n});\n\nexport const toFetchFailureOutput = async ({\n worktree,\n config,\n publishedSkillsResult,\n loginBootstrapSnapshot,\n}: {\n worktree: string;\n config: ResolvedConfig;\n publishedSkillsResult: PublishedSkillsResult;\n loginBootstrapSnapshot: LoginBootstrapSnapshot;\n}) => ({\n output: await formatStatusOutput(worktree, config, publishedSkillsResult, loginBootstrapSnapshot),\n metadata: {\n status: publishedSkillsResult.fetchResult.status,\n ...toWorkspaceResolutionMetadata(publishedSkillsResult.workspaceResolution),\n source: publishedSkillsResult.fetchResult.source,\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["resolveAvailableTools","buildPublishedSkillsSystemNote","toPublishedSkillCatalog","buildPublishedSkillCatalog","toInstallableSkillSummary","toPublishedSkillSummary","readGlobalAuthState","resolveStoredAuthState","toStoredUserKey","fetchPublishedSkillsCatalog","hydrateStoredAuthStateRole","NATIVE_SKILLS_URL_COMPATIBILITY","PLUGIN_ID","ROOT_SKILL_SEED_PATH","resolveConfig","GLOBAL_SKILL_MANAGEMENT_HINT","getPublishedSkillIgnoreScopeKey","resolveWorkspace","toWorkspaceResolutionMetadata","toWorkspaceResolutionOutput","payload","availableTools","pluginId","rootSkillSeedPath","filterIgnoredPublishedSkills","config","result","authState","authStatePath","userKey","fetchResult","ok","ignoreState","scopeKey","workspaceResolution","ignoredSkillSlugs","installedGlobalSkillSlugs","installedWorkspaceSkillSlugs","globalSkillManagementHint","ignoredSkills","userPreferences","map","skill","skillSlug","getWorkspaceUnavailableMessage","workspace","buildSystemNote","_config","details","catalog","directoryPath","formatStatusOutput","worktree","publishedSkillsResult","loginBootstrapSnapshot","filteredResult","base","runtimeMode","nativeSkillsUrlCompatibility","backendOrigin","graphqlUrl","fallbackWorkspaceSlug","requestedDirectoryPath","authMode","email","userId","role","authenticatedAt","expiresAt","loginBootstrap","status","trigger","startedAt","browserUrl","browserOpenError","message","fetchedAt","source","ignoredPublishedSkills","count","length","JSON","stringify","toPluginAuthStateSummary","resolvePluginStatusSnapshot","directory","signal","registeredTools","installableCatalog","catalogSkills","skills","withStatusMessage","snapshot","toAiFacingPluginStatusSnapshot","_installableCatalog","safeSnapshot","toPluginStatusMetadata","pluginStatus","authStatus","authEmail","authUserId","authRole","repositoryUrl","workspaceSlug","workspaceSlugSource","toFetchFailureOutput","output","metadata"],"sources":["../../src/server/status.ts"],"sourcesContent":["import { resolveAvailableTools } from '../plugin-tools.js';\nimport { buildPublishedSkillsSystemNote } from '../published-skills-system-note.js';\nimport {\n toPublishedSkillCatalog as buildPublishedSkillCatalog,\n toInstallableSkillSummary,\n toPublishedSkillSummary,\n type PublishedSkillDetail,\n type PublishedSkillsSuccessState,\n} from '../published-skills-transform.js';\nimport { readGlobalAuthState, resolveStoredAuthState, toStoredUserKey } from './auth-store.js';\nimport { fetchPublishedSkillsCatalog, hydrateStoredAuthStateRole } from './client.js';\nimport { NATIVE_SKILLS_URL_COMPATIBILITY, PLUGIN_ID, ROOT_SKILL_SEED_PATH } from './constants.js';\nimport { resolveConfig } from './config.js';\nimport { GLOBAL_SKILL_MANAGEMENT_HINT } from './preferences.js';\nimport { getPublishedSkillIgnoreScopeKey, resolveWorkspace, toWorkspaceResolutionMetadata, toWorkspaceResolutionOutput } from './workspace.js';\nimport type {\n AiFacingPluginStatusSnapshot,\n AuthState,\n FilteredPublishedSkillsResult,\n LoginBootstrapSnapshot,\n PluginAuthStateSummary,\n PluginStatusSnapshot,\n PublishedSkillCatalogPayload,\n PublishedSkillsResult,\n ResolvedConfig,\n} from './types.js';\n\nexport const toPublishedSkillCatalog = (\n payload: PublishedSkillCatalogPayload,\n availableTools: string[] = resolveAvailableTools(null),\n): PublishedSkillsSuccessState =>\n buildPublishedSkillCatalog(payload, {\n pluginId: PLUGIN_ID,\n rootSkillSeedPath: ROOT_SKILL_SEED_PATH,\n availableTools,\n });\n\nexport const filterIgnoredPublishedSkills = async (\n config: ResolvedConfig,\n result: PublishedSkillsResult,\n): Promise<FilteredPublishedSkillsResult> => {\n const authState = await readGlobalAuthState(config.authStatePath);\n const userKey = toStoredUserKey(authState);\n\n if (!result.fetchResult.ok) {\n return {\n ...result,\n ignoreState: {\n scopeKey: getPublishedSkillIgnoreScopeKey(result.workspaceResolution),\n userKey,\n ignoredSkillSlugs: [],\n installedGlobalSkillSlugs: [],\n installedWorkspaceSkillSlugs: [],\n globalSkillManagementHint: GLOBAL_SKILL_MANAGEMENT_HINT,\n },\n ignoredSkills: [],\n };\n }\n\n const ignoredSkills = result.fetchResult.payload.userPreferences.ignoredSkills.map(toPublishedSkillSummary);\n const ignoredSkillSlugs = ignoredSkills.map((skill) => skill.skillSlug);\n\n return {\n ...result,\n ignoreState: {\n scopeKey: result.fetchResult.payload.userPreferences.scopeKey,\n userKey: result.fetchResult.payload.userPreferences.userKey || userKey,\n ignoredSkillSlugs,\n installedGlobalSkillSlugs: [],\n installedWorkspaceSkillSlugs: [],\n globalSkillManagementHint: GLOBAL_SKILL_MANAGEMENT_HINT,\n },\n ignoredSkills,\n };\n};\n\nconst getWorkspaceUnavailableMessage = (payload: PublishedSkillCatalogPayload): string | null => {\n if (payload.workspace) return null;\n return 'Workspace-specific skills are unavailable because the workspace was not found; global skills are still loaded.';\n};\n\nexport const buildSystemNote = (\n result: PublishedSkillsResult,\n _config: ResolvedConfig,\n details: PublishedSkillDetail[],\n): string | null => {\n if (!result.fetchResult.ok) return null;\n\n const catalog = toPublishedSkillCatalog(result.fetchResult.payload);\n return buildPublishedSkillsSystemNote({\n workspace: result.fetchResult.payload.workspace,\n directoryPath: result.directoryPath,\n catalog,\n details,\n });\n};\n\nexport const formatStatusOutput = async (\n worktree: string,\n config: ResolvedConfig,\n publishedSkillsResult: PublishedSkillsResult,\n loginBootstrapSnapshot: LoginBootstrapSnapshot,\n) => {\n const authState = await resolveStoredAuthState(worktree, config);\n const filteredResult = await filterIgnoredPublishedSkills(config, publishedSkillsResult);\n const base = {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n nativeSkillsUrlCompatibility: NATIVE_SKILLS_URL_COMPATIBILITY,\n backendOrigin: config.backendOrigin,\n graphqlUrl: config.graphqlUrl,\n fallbackWorkspaceSlug: config.fallbackWorkspaceSlug,\n workspaceResolution: toWorkspaceResolutionOutput(publishedSkillsResult.workspaceResolution),\n rootSkillSeedPath: config.rootSkillSeedPath,\n authStatePath: config.authStatePath,\n requestedDirectoryPath: publishedSkillsResult.directoryPath,\n authMode: publishedSkillsResult.fetchResult.authMode,\n authState:\n authState === null\n ? null\n : {\n email: authState.email,\n userId: authState.userId,\n role: authState.role ?? null,\n authenticatedAt: authState.authenticatedAt,\n expiresAt: authState.expiresAt,\n },\n loginBootstrap:\n loginBootstrapSnapshot.status === 'idle'\n ? null\n : {\n status: loginBootstrapSnapshot.status,\n trigger: loginBootstrapSnapshot.trigger,\n startedAt: loginBootstrapSnapshot.startedAt,\n expiresAt: loginBootstrapSnapshot.expiresAt,\n browserUrl: loginBootstrapSnapshot.browserUrl,\n browserOpenError: loginBootstrapSnapshot.browserOpenError,\n email: loginBootstrapSnapshot.email,\n message: loginBootstrapSnapshot.message,\n },\n status: filteredResult.fetchResult.status,\n fetchedAt: filteredResult.fetchResult.fetchedAt,\n source: filteredResult.fetchResult.source,\n availableTools: resolveAvailableTools(authState?.role ?? null),\n ignoredPublishedSkills: {\n scopeKey: filteredResult.ignoreState.scopeKey,\n userKey: filteredResult.ignoreState.userKey,\n count: filteredResult.ignoreState.ignoredSkillSlugs.length,\n globalSkillManagementHint: filteredResult.ignoreState.globalSkillManagementHint,\n },\n };\n\n if (!filteredResult.fetchResult.ok) {\n return JSON.stringify({ ...base, message: filteredResult.fetchResult.message }, null, 2);\n }\n\n return JSON.stringify(\n {\n ...base,\n ...toPublishedSkillCatalog(filteredResult.fetchResult.payload, base.availableTools),\n message: getWorkspaceUnavailableMessage(filteredResult.fetchResult.payload),\n },\n null,\n 2,\n );\n};\n\nexport const toPluginAuthStateSummary = (authState: AuthState | null): PluginAuthStateSummary => {\n if (!authState) {\n return {\n status: 'missing',\n email: null,\n userId: null,\n role: null,\n authenticatedAt: null,\n expiresAt: null,\n };\n }\n\n return {\n status: 'authenticated',\n email: authState.email,\n userId: authState.userId,\n role: authState.role ?? null,\n authenticatedAt: authState.authenticatedAt,\n expiresAt: authState.expiresAt,\n };\n};\n\nexport const resolvePluginStatusSnapshot = async ({\n worktree,\n directory,\n signal,\n registeredTools,\n}: {\n worktree: string;\n directory: string;\n signal: AbortSignal;\n registeredTools?: string[];\n}): Promise<PluginStatusSnapshot> => {\n const config = await resolveConfig(worktree);\n const workspaceResolution = await resolveWorkspace({ config, directory });\n const fetchResult = await fetchPublishedSkillsCatalog(worktree, config, workspaceResolution, signal);\n const filteredResult = await filterIgnoredPublishedSkills(config, {\n directoryPath: workspaceResolution.directoryPath,\n workspaceResolution,\n fetchResult,\n });\n const authState = await hydrateStoredAuthStateRole({ worktree, config, signal });\n const availableTools = registeredTools ?? resolveAvailableTools(authState?.role ?? null);\n\n return {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n nativeSkillsUrlCompatibility: NATIVE_SKILLS_URL_COMPATIBILITY,\n backendOrigin: config.backendOrigin,\n graphqlUrl: config.graphqlUrl,\n fallbackWorkspaceSlug: config.fallbackWorkspaceSlug,\n workspaceResolution: toWorkspaceResolutionOutput(workspaceResolution),\n rootSkillSeedPath: config.rootSkillSeedPath,\n authStatePath: config.authStatePath,\n authState: toPluginAuthStateSummary(authState),\n status: filteredResult.fetchResult.status,\n authMode: filteredResult.fetchResult.authMode,\n fetchedAt: filteredResult.fetchResult.fetchedAt,\n source: filteredResult.fetchResult.source,\n availableTools,\n message: filteredResult.fetchResult.ok\n ? getWorkspaceUnavailableMessage(filteredResult.fetchResult.payload)\n : filteredResult.fetchResult.message,\n catalog: filteredResult.fetchResult.ok ? toPublishedSkillCatalog(filteredResult.fetchResult.payload, availableTools) : null,\n installableCatalog: filteredResult.fetchResult.ok\n ? {\n count: filteredResult.fetchResult.payload.catalogSkills.length,\n skills: filteredResult.fetchResult.payload.catalogSkills.map(toInstallableSkillSummary),\n }\n : null,\n ignoredPublishedSkills: {\n scopeKey: filteredResult.ignoreState.scopeKey,\n userKey: filteredResult.ignoreState.userKey,\n count: filteredResult.ignoreState.ignoredSkillSlugs.length,\n skills: filteredResult.ignoredSkills,\n },\n };\n};\n\nexport const withStatusMessage = (snapshot: PluginStatusSnapshot, message: string): PluginStatusSnapshot => ({\n ...snapshot,\n message,\n});\n\nexport const toAiFacingPluginStatusSnapshot = (snapshot: PluginStatusSnapshot): AiFacingPluginStatusSnapshot => {\n const { ignoredPublishedSkills, installableCatalog: _installableCatalog, ...safeSnapshot } = snapshot;\n\n return {\n ...safeSnapshot,\n ignoredPublishedSkills: {\n scopeKey: ignoredPublishedSkills.scopeKey,\n count: ignoredPublishedSkills.count,\n },\n };\n};\n\nexport const toPluginStatusMetadata = (snapshot: PluginStatusSnapshot): Record<string, string> => ({\n backendOrigin: snapshot.backendOrigin,\n graphqlUrl: snapshot.graphqlUrl,\n pluginStatus: snapshot.status,\n authStatus: snapshot.authState.status,\n authEmail: snapshot.authState.email ?? '',\n authUserId: snapshot.authState.userId ?? '',\n authRole: snapshot.authState.role ?? '',\n directoryPath: snapshot.workspaceResolution.directoryPath,\n repositoryUrl: snapshot.workspaceResolution.repositoryUrl ?? '',\n source: snapshot.source,\n workspaceSlug: snapshot.workspaceResolution.workspaceSlug ?? '',\n workspaceSlugSource: snapshot.workspaceResolution.workspaceSlugSource ?? 'placeholder',\n});\n\nexport const toFetchFailureOutput = async ({\n worktree,\n config,\n publishedSkillsResult,\n loginBootstrapSnapshot,\n}: {\n worktree: string;\n config: ResolvedConfig;\n publishedSkillsResult: PublishedSkillsResult;\n loginBootstrapSnapshot: LoginBootstrapSnapshot;\n}) => ({\n output: await formatStatusOutput(worktree, config, publishedSkillsResult, loginBootstrapSnapshot),\n metadata: {\n status: publishedSkillsResult.fetchResult.status,\n ...toWorkspaceResolutionMetadata(publishedSkillsResult.workspaceResolution),\n source: publishedSkillsResult.fetchResult.source,\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -101,6 +101,44 @@ export type CreateOrUpdateSkillFromMarkdownResponse = {
101
101
  };
102
102
  };
103
103
  };
104
+ export type EditorSkillWorkspaceAssignmentLookupResponse = {
105
+ admin: {
106
+ skill: {
107
+ id: string;
108
+ slug: string;
109
+ } | null;
110
+ workspace: {
111
+ id: string;
112
+ slug: string;
113
+ } | null;
114
+ };
115
+ };
116
+ export type BulkCreateSkillAssignmentsResponse = {
117
+ admin: {
118
+ bulkCreateSkillAssignments: {
119
+ scopePathAssignments: Array<{
120
+ id: string;
121
+ }>;
122
+ skippedScopePathAssignments: Array<{
123
+ id: string;
124
+ }>;
125
+ conflicts: Array<{
126
+ target: string;
127
+ inputIndex: number;
128
+ reason: string;
129
+ message: string;
130
+ }>;
131
+ };
132
+ };
133
+ };
134
+ export type EditorSkillWorkspaceAssignmentResult = {
135
+ status: 'created' | 'already_exists' | 'skipped' | 'failed';
136
+ workspaceSlug?: string | null;
137
+ workspaceId?: string | null;
138
+ directoryPath: string;
139
+ assignmentId?: string | null;
140
+ message?: string | null;
141
+ };
104
142
  export type ImportWizardArtifactSnapshotResponse = {
105
143
  importWizardArtifactSnapshot: {
106
144
  success: boolean;
@@ -231,6 +269,10 @@ export type WizardArtifactDetailPayload = WizardArtifactCatalogItem['artifactVer
231
269
  export type PublishedSkillArtifactDetailPurpose = 'TOOL_FETCH';
232
270
  export type GraphQLErrorItem = {
233
271
  message: string;
272
+ path?: Array<string | number>;
273
+ extensions?: {
274
+ code?: string;
275
+ } & Record<string, unknown>;
234
276
  };
235
277
  export type GraphQLResponse<TData> = {
236
278
  data?: TData;
@@ -285,6 +327,7 @@ export type FetchResult = {
285
327
  status: 'missing_auth' | 'request_failed';
286
328
  authMode: 'missing' | 'session';
287
329
  message: string;
330
+ graphQlErrors?: string[];
288
331
  fetchedAt: string;
289
332
  source: 'network' | 'cache';
290
333
  };
@@ -339,6 +382,7 @@ export type PublishedSkillsIgnoreState = {
339
382
  ignoredSkillSlugs: string[];
340
383
  installedGlobalSkillSlugs: string[];
341
384
  installedWorkspaceSkillSlugs: string[];
385
+ globalSkillManagementHint: string;
342
386
  };
343
387
  export type PublishedSkillPreferenceCacheContext = {
344
388
  userKey: 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 ImportWizardArtifactSnapshotResponse = {\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\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};\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 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};\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 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 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\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":[]}
@@ -60,7 +60,10 @@ const getSkillToolHint = (skill, label) => {
60
60
  return `read-only: install with opencode_wizard_published_skill_preference_set skill=${skill.skillSlug}`;
61
61
  }
62
62
  if (label === 'ignored') {
63
- return `read-only: unignore with opencode_wizard_published_skill_preference_set skill=${skill.skillSlug}`;
63
+ return `read-only: unignore with opencode_wizard_published_skill_preference_set skill=${skill.skillSlug}; use preferenceScope=global for global starter skills`;
64
+ }
65
+ if (skill.contextKind === 'global') {
66
+ return `read-only: disable global with opencode_wizard_published_skill_preference_set skill=${skill.skillSlug} action=ignore preferenceScope=global`;
64
67
  }
65
68
  return `read-only: fetch body with opencode_wizard_published_skills_fetch skill=${skill.skillSlug}`;
66
69
  };
@@ -1 +1 @@
1
- {"version":3,"names":["MAX_PICKER_SKILLS","getInstallableNotInstalledSkills","snapshot","installableSkills","installableCatalog","skills","length","activeSkillSlugs","Set","catalog","map","skill","skillSlug","ignoredSkillSlugs","ignoredPublishedSkills","filter","has","getSkillCatalogSummary","loadedSkillCount","publishedSkillCount","workspaceSkillCount","assignmentCounts","project","userSkillCount","user","globalSkillCount","global","getUserRoleLabel","authState","role","status","getUserRoleRow","label","value","compactSkillName","name","skillName","trim","artifactName","toEffectiveSkillLabel","assignmentSource","includes","contextKind","getSkillListRows","options","rows","canOpenPicker","getSkillActionRows","normalizePickerText","toLowerCase","getSkillSearchText","artifactDescription","whenToUse","recommendationReason","identifiers","tags","flatMap","tag","slug","facet","Boolean","join","getPickerLabel","getSkillToolHint","toPickerRow","description","item","find","toolHint","relevance","getPickerSkills","getSkillPickerRows","query","normalizedQuery","tokens","split","searchText","every","token","sort","left","right","leftRelevance","rightRelevance","localeCompare","slice","getSkillPickerCommands","onSelect","row","title","category","suggested","undefined"],"sources":["../../src/tui/skill-helpers.ts"],"sourcesContent":["import type { PluginStatusSnapshot } from '../server.js';\nimport type { PublishedSkillSummary, TuiCommand } from './types.js';\n\nconst MAX_PICKER_SKILLS = 24;\n\ntype SkillListOptions = {\n canOpenPicker?: boolean;\n};\n\nexport const getInstallableNotInstalledSkills = (snapshot: PluginStatusSnapshot): PublishedSkillSummary[] => {\n const installableSkills = snapshot.installableCatalog?.skills ?? [];\n if (installableSkills.length === 0) return [];\n\n const activeSkillSlugs = new Set(snapshot.catalog?.skills.map((skill) => skill.skillSlug) ?? []);\n const ignoredSkillSlugs = new Set(snapshot.ignoredPublishedSkills.skills.map((skill) => skill.skillSlug));\n\n return installableSkills.filter(\n (skill) => !activeSkillSlugs.has(skill.skillSlug) && !ignoredSkillSlugs.has(skill.skillSlug),\n );\n};\n\nexport type SkillListRow = {\n label: string;\n value: string;\n};\n\nexport type SkillPickerRow = SkillListRow & {\n skillSlug: string;\n description: string;\n toolHint: string;\n relevance: number | null;\n};\n\nexport const getSkillCatalogSummary = (snapshot: PluginStatusSnapshot): string => {\n const catalog = snapshot.catalog;\n const loadedSkillCount = catalog?.publishedSkillCount ?? 0;\n const workspaceSkillCount = catalog?.assignmentCounts?.project ?? 0;\n const userSkillCount = catalog?.assignmentCounts?.user ?? 0;\n const globalSkillCount = catalog?.assignmentCounts?.global ?? 0;\n\n return `${loadedSkillCount} loaded · ${workspaceSkillCount} workspace · ${userSkillCount} user · ${globalSkillCount} global`;\n};\n\nconst getUserRoleLabel = (snapshot: PluginStatusSnapshot): string => {\n if (snapshot.authState.role) return snapshot.authState.role;\n if (snapshot.authState.status === 'authenticated') return 'unknown';\n\n return 'none';\n};\n\nexport const getUserRoleRow = (snapshot: PluginStatusSnapshot): SkillListRow => ({\n label: 'role',\n value: getUserRoleLabel(snapshot),\n});\n\nconst compactSkillName = (skill: PublishedSkillSummary): string => {\n const name = skill.skillName.trim() || skill.artifactName.trim() || skill.skillSlug;\n if (name === skill.skillSlug) return name;\n\n return `${name} (${skill.skillSlug})`;\n};\n\nconst toEffectiveSkillLabel = (skill: PublishedSkillSummary): string => {\n if (skill.assignmentSource.includes('USER')) return 'user';\n if (skill.contextKind === 'global') return 'global';\n if (skill.contextKind === 'project') return 'project';\n\n return 'active';\n};\n\nexport const getSkillListRows = (snapshot: PluginStatusSnapshot, options: SkillListOptions = {}): SkillListRow[] => {\n const rows: SkillListRow[] = [\n options.canOpenPicker\n ? { label: 'open', value: '/wizard-skills' }\n : { label: 'fetch', value: 'opencode_wizard_published_skills_fetch' },\n ];\n\n if (getInstallableNotInstalledSkills(snapshot).length === 0 && snapshot.ignoredPublishedSkills.skills.length === 0) return rows;\n\n return [\n ...rows,\n {\n label: 'manage',\n value: 'opencode_wizard_published_skill_preference_set',\n },\n ];\n};\n\nexport const getSkillActionRows = (snapshot: PluginStatusSnapshot): SkillListRow[] => [getUserRoleRow(snapshot)];\n\nconst normalizePickerText = (value: string | null | undefined): string => value?.trim().toLowerCase() ?? '';\n\nconst getSkillSearchText = (skill: PublishedSkillSummary): string =>\n [\n skill.skillSlug,\n skill.skillName,\n skill.artifactName,\n skill.artifactDescription,\n skill.whenToUse,\n skill.recommendationReason,\n ...skill.identifiers,\n ...skill.tags.flatMap((tag) => [tag.slug, tag.label, tag.facet?.slug, tag.facet?.label]),\n ]\n .map(normalizePickerText)\n .filter(Boolean)\n .join(' ');\n\nconst getPickerLabel = (skill: PublishedSkillSummary): string => {\n if (skill.contextKind === 'installable') return 'available';\n return toEffectiveSkillLabel(skill);\n};\n\nconst getSkillToolHint = (skill: PublishedSkillSummary, label: string): string => {\n if (label === 'available') {\n return `read-only: install with opencode_wizard_published_skill_preference_set skill=${skill.skillSlug}`;\n }\n\n if (label === 'ignored') {\n return `read-only: unignore with opencode_wizard_published_skill_preference_set skill=${skill.skillSlug}`;\n }\n\n return `read-only: fetch body with opencode_wizard_published_skills_fetch skill=${skill.skillSlug}`;\n};\n\nconst toPickerRow = (skill: PublishedSkillSummary, label: string): SkillPickerRow => ({\n label,\n value: compactSkillName(skill),\n skillSlug: skill.skillSlug,\n description: [skill.recommendationReason, skill.whenToUse, skill.artifactDescription]\n .map((item) => item?.trim())\n .find((item): item is string => Boolean(item)) ?? '',\n toolHint: getSkillToolHint(skill, label),\n relevance: skill.relevance ?? null,\n});\n\nconst getPickerSkills = (snapshot: PluginStatusSnapshot): Array<{ skill: PublishedSkillSummary; label: string }> => [\n ...(snapshot.catalog?.skills ?? []).map((skill) => ({ skill, label: getPickerLabel(skill) })),\n ...getInstallableNotInstalledSkills(snapshot).map((skill) => ({ skill, label: 'available' })),\n ...snapshot.ignoredPublishedSkills.skills.map((skill) => ({ skill, label: 'ignored' })),\n];\n\nexport const getSkillPickerRows = (snapshot: PluginStatusSnapshot, query = ''): SkillPickerRow[] => {\n const normalizedQuery = normalizePickerText(query);\n const tokens = normalizedQuery.split(/\\s+/u).filter(Boolean);\n\n return getPickerSkills(snapshot)\n .filter(({ skill }) => {\n if (tokens.length === 0) return true;\n const searchText = getSkillSearchText(skill);\n return tokens.every((token) => searchText.includes(token));\n })\n .sort((left, right) => {\n const leftRelevance = left.skill.relevance ?? -1;\n const rightRelevance = right.skill.relevance ?? -1;\n if (leftRelevance !== rightRelevance) return rightRelevance - leftRelevance;\n return left.skill.skillSlug.localeCompare(right.skill.skillSlug);\n })\n .slice(0, MAX_PICKER_SKILLS)\n .map(({ skill, label }) => toPickerRow(skill, label));\n};\n\nexport const getSkillPickerCommands = (snapshot: PluginStatusSnapshot, onSelect?: (row: SkillPickerRow) => void): TuiCommand[] =>\n getSkillPickerRows(snapshot).map((row) => ({\n value: `opencode-wizard.skill-picker.${row.label}.${row.skillSlug}`,\n title: `Wizard skill: ${row.value}`,\n description: [row.label, row.relevance === null ? null : `relevance ${row.relevance}`, row.description, row.toolHint]\n .filter((item): item is string => Boolean(item))\n .join(' · '),\n category: 'Wizard skills',\n suggested: row.relevance !== null && row.relevance >= 80,\n onSelect: onSelect ? () => onSelect(row) : undefined,\n }));\n"],"mappings":"AAGA,MAAMA,iBAAiB,GAAG,EAAE;AAM5B,OAAO,MAAMC,gCAAgC,GAAIC,QAA8B,IAA8B;EAC3G,MAAMC,iBAAiB,GAAGD,QAAQ,CAACE,kBAAkB,EAAEC,MAAM,IAAI,EAAE;EACnE,IAAIF,iBAAiB,CAACG,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE;EAE7C,MAAMC,gBAAgB,GAAG,IAAIC,GAAG,CAACN,QAAQ,CAACO,OAAO,EAAEJ,MAAM,CAACK,GAAG,CAAEC,KAAK,IAAKA,KAAK,CAACC,SAAS,CAAC,IAAI,EAAE,CAAC;EAChG,MAAMC,iBAAiB,GAAG,IAAIL,GAAG,CAACN,QAAQ,CAACY,sBAAsB,CAACT,MAAM,CAACK,GAAG,CAAEC,KAAK,IAAKA,KAAK,CAACC,SAAS,CAAC,CAAC;EAEzG,OAAOT,iBAAiB,CAACY,MAAM,CAC5BJ,KAAK,IAAK,CAACJ,gBAAgB,CAACS,GAAG,CAACL,KAAK,CAACC,SAAS,CAAC,IAAI,CAACC,iBAAiB,CAACG,GAAG,CAACL,KAAK,CAACC,SAAS,CAC7F,CAAC;AACH,CAAC;AAcD,OAAO,MAAMK,sBAAsB,GAAIf,QAA8B,IAAa;EAChF,MAAMO,OAAO,GAAGP,QAAQ,CAACO,OAAO;EAChC,MAAMS,gBAAgB,GAAGT,OAAO,EAAEU,mBAAmB,IAAI,CAAC;EAC1D,MAAMC,mBAAmB,GAAGX,OAAO,EAAEY,gBAAgB,EAAEC,OAAO,IAAI,CAAC;EACnE,MAAMC,cAAc,GAAGd,OAAO,EAAEY,gBAAgB,EAAEG,IAAI,IAAI,CAAC;EAC3D,MAAMC,gBAAgB,GAAGhB,OAAO,EAAEY,gBAAgB,EAAEK,MAAM,IAAI,CAAC;EAE/D,OAAO,GAAGR,gBAAgB,aAAaE,mBAAmB,gBAAgBG,cAAc,WAAWE,gBAAgB,SAAS;AAC9H,CAAC;AAED,MAAME,gBAAgB,GAAIzB,QAA8B,IAAa;EACnE,IAAIA,QAAQ,CAAC0B,SAAS,CAACC,IAAI,EAAE,OAAO3B,QAAQ,CAAC0B,SAAS,CAACC,IAAI;EAC3D,IAAI3B,QAAQ,CAAC0B,SAAS,CAACE,MAAM,KAAK,eAAe,EAAE,OAAO,SAAS;EAEnE,OAAO,MAAM;AACf,CAAC;AAED,OAAO,MAAMC,cAAc,GAAI7B,QAA8B,KAAoB;EAC/E8B,KAAK,EAAE,MAAM;EACbC,KAAK,EAAEN,gBAAgB,CAACzB,QAAQ;AAClC,CAAC,CAAC;AAEF,MAAMgC,gBAAgB,GAAIvB,KAA4B,IAAa;EACjE,MAAMwB,IAAI,GAAGxB,KAAK,CAACyB,SAAS,CAACC,IAAI,CAAC,CAAC,IAAI1B,KAAK,CAAC2B,YAAY,CAACD,IAAI,CAAC,CAAC,IAAI1B,KAAK,CAACC,SAAS;EACnF,IAAIuB,IAAI,KAAKxB,KAAK,CAACC,SAAS,EAAE,OAAOuB,IAAI;EAEzC,OAAO,GAAGA,IAAI,KAAKxB,KAAK,CAACC,SAAS,GAAG;AACvC,CAAC;AAED,MAAM2B,qBAAqB,GAAI5B,KAA4B,IAAa;EACtE,IAAIA,KAAK,CAAC6B,gBAAgB,CAACC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,MAAM;EAC1D,IAAI9B,KAAK,CAAC+B,WAAW,KAAK,QAAQ,EAAE,OAAO,QAAQ;EACnD,IAAI/B,KAAK,CAAC+B,WAAW,KAAK,SAAS,EAAE,OAAO,SAAS;EAErD,OAAO,QAAQ;AACjB,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAGA,CAACzC,QAA8B,EAAE0C,OAAyB,GAAG,CAAC,CAAC,KAAqB;EAClH,MAAMC,IAAoB,GAAG,CAC3BD,OAAO,CAACE,aAAa,GACjB;IAAEd,KAAK,EAAE,MAAM;IAAEC,KAAK,EAAE;EAAiB,CAAC,GAC1C;IAAED,KAAK,EAAE,OAAO;IAAEC,KAAK,EAAE;EAAyC,CAAC,CACxE;EAED,IAAIhC,gCAAgC,CAACC,QAAQ,CAAC,CAACI,MAAM,KAAK,CAAC,IAAIJ,QAAQ,CAACY,sBAAsB,CAACT,MAAM,CAACC,MAAM,KAAK,CAAC,EAAE,OAAOuC,IAAI;EAE/H,OAAO,CACL,GAAGA,IAAI,EACP;IACEb,KAAK,EAAE,QAAQ;IACfC,KAAK,EAAE;EACT,CAAC,CACF;AACH,CAAC;AAED,OAAO,MAAMc,kBAAkB,GAAI7C,QAA8B,IAAqB,CAAC6B,cAAc,CAAC7B,QAAQ,CAAC,CAAC;AAEhH,MAAM8C,mBAAmB,GAAIf,KAAgC,IAAaA,KAAK,EAAEI,IAAI,CAAC,CAAC,CAACY,WAAW,CAAC,CAAC,IAAI,EAAE;AAE3G,MAAMC,kBAAkB,GAAIvC,KAA4B,IACtD,CACEA,KAAK,CAACC,SAAS,EACfD,KAAK,CAACyB,SAAS,EACfzB,KAAK,CAAC2B,YAAY,EAClB3B,KAAK,CAACwC,mBAAmB,EACzBxC,KAAK,CAACyC,SAAS,EACfzC,KAAK,CAAC0C,oBAAoB,EAC1B,GAAG1C,KAAK,CAAC2C,WAAW,EACpB,GAAG3C,KAAK,CAAC4C,IAAI,CAACC,OAAO,CAAEC,GAAG,IAAK,CAACA,GAAG,CAACC,IAAI,EAAED,GAAG,CAACzB,KAAK,EAAEyB,GAAG,CAACE,KAAK,EAAED,IAAI,EAAED,GAAG,CAACE,KAAK,EAAE3B,KAAK,CAAC,CAAC,CACzF,CACEtB,GAAG,CAACsC,mBAAmB,CAAC,CACxBjC,MAAM,CAAC6C,OAAO,CAAC,CACfC,IAAI,CAAC,GAAG,CAAC;AAEd,MAAMC,cAAc,GAAInD,KAA4B,IAAa;EAC/D,IAAIA,KAAK,CAAC+B,WAAW,KAAK,aAAa,EAAE,OAAO,WAAW;EAC3D,OAAOH,qBAAqB,CAAC5B,KAAK,CAAC;AACrC,CAAC;AAED,MAAMoD,gBAAgB,GAAGA,CAACpD,KAA4B,EAAEqB,KAAa,KAAa;EAChF,IAAIA,KAAK,KAAK,WAAW,EAAE;IACzB,OAAO,gFAAgFrB,KAAK,CAACC,SAAS,EAAE;EAC1G;EAEA,IAAIoB,KAAK,KAAK,SAAS,EAAE;IACvB,OAAO,iFAAiFrB,KAAK,CAACC,SAAS,EAAE;EAC3G;EAEA,OAAO,2EAA2ED,KAAK,CAACC,SAAS,EAAE;AACrG,CAAC;AAED,MAAMoD,WAAW,GAAGA,CAACrD,KAA4B,EAAEqB,KAAa,MAAsB;EACpFA,KAAK;EACLC,KAAK,EAAEC,gBAAgB,CAACvB,KAAK,CAAC;EAC9BC,SAAS,EAAED,KAAK,CAACC,SAAS;EAC1BqD,WAAW,EAAE,CAACtD,KAAK,CAAC0C,oBAAoB,EAAE1C,KAAK,CAACyC,SAAS,EAAEzC,KAAK,CAACwC,mBAAmB,CAAC,CAClFzC,GAAG,CAAEwD,IAAI,IAAKA,IAAI,EAAE7B,IAAI,CAAC,CAAC,CAAC,CAC3B8B,IAAI,CAAED,IAAI,IAAqBN,OAAO,CAACM,IAAI,CAAC,CAAC,IAAI,EAAE;EACtDE,QAAQ,EAAEL,gBAAgB,CAACpD,KAAK,EAAEqB,KAAK,CAAC;EACxCqC,SAAS,EAAE1D,KAAK,CAAC0D,SAAS,IAAI;AAChC,CAAC,CAAC;AAEF,MAAMC,eAAe,GAAIpE,QAA8B,IAA6D,CAClH,GAAG,CAACA,QAAQ,CAACO,OAAO,EAAEJ,MAAM,IAAI,EAAE,EAAEK,GAAG,CAAEC,KAAK,KAAM;EAAEA,KAAK;EAAEqB,KAAK,EAAE8B,cAAc,CAACnD,KAAK;AAAE,CAAC,CAAC,CAAC,EAC7F,GAAGV,gCAAgC,CAACC,QAAQ,CAAC,CAACQ,GAAG,CAAEC,KAAK,KAAM;EAAEA,KAAK;EAAEqB,KAAK,EAAE;AAAY,CAAC,CAAC,CAAC,EAC7F,GAAG9B,QAAQ,CAACY,sBAAsB,CAACT,MAAM,CAACK,GAAG,CAAEC,KAAK,KAAM;EAAEA,KAAK;EAAEqB,KAAK,EAAE;AAAU,CAAC,CAAC,CAAC,CACxF;AAED,OAAO,MAAMuC,kBAAkB,GAAGA,CAACrE,QAA8B,EAAEsE,KAAK,GAAG,EAAE,KAAuB;EAClG,MAAMC,eAAe,GAAGzB,mBAAmB,CAACwB,KAAK,CAAC;EAClD,MAAME,MAAM,GAAGD,eAAe,CAACE,KAAK,CAAC,MAAM,CAAC,CAAC5D,MAAM,CAAC6C,OAAO,CAAC;EAE5D,OAAOU,eAAe,CAACpE,QAAQ,CAAC,CAC7Ba,MAAM,CAAC,CAAC;IAAEJ;EAAM,CAAC,KAAK;IACrB,IAAI+D,MAAM,CAACpE,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;IACpC,MAAMsE,UAAU,GAAG1B,kBAAkB,CAACvC,KAAK,CAAC;IAC5C,OAAO+D,MAAM,CAACG,KAAK,CAAEC,KAAK,IAAKF,UAAU,CAACnC,QAAQ,CAACqC,KAAK,CAAC,CAAC;EAC5D,CAAC,CAAC,CACDC,IAAI,CAAC,CAACC,IAAI,EAAEC,KAAK,KAAK;IACrB,MAAMC,aAAa,GAAGF,IAAI,CAACrE,KAAK,CAAC0D,SAAS,IAAI,CAAC,CAAC;IAChD,MAAMc,cAAc,GAAGF,KAAK,CAACtE,KAAK,CAAC0D,SAAS,IAAI,CAAC,CAAC;IAClD,IAAIa,aAAa,KAAKC,cAAc,EAAE,OAAOA,cAAc,GAAGD,aAAa;IAC3E,OAAOF,IAAI,CAACrE,KAAK,CAACC,SAAS,CAACwE,aAAa,CAACH,KAAK,CAACtE,KAAK,CAACC,SAAS,CAAC;EAClE,CAAC,CAAC,CACDyE,KAAK,CAAC,CAAC,EAAErF,iBAAiB,CAAC,CAC3BU,GAAG,CAAC,CAAC;IAAEC,KAAK;IAAEqB;EAAM,CAAC,KAAKgC,WAAW,CAACrD,KAAK,EAAEqB,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,OAAO,MAAMsD,sBAAsB,GAAGA,CAACpF,QAA8B,EAAEqF,QAAwC,KAC7GhB,kBAAkB,CAACrE,QAAQ,CAAC,CAACQ,GAAG,CAAE8E,GAAG,KAAM;EACzCvD,KAAK,EAAE,gCAAgCuD,GAAG,CAACxD,KAAK,IAAIwD,GAAG,CAAC5E,SAAS,EAAE;EACnE6E,KAAK,EAAE,iBAAiBD,GAAG,CAACvD,KAAK,EAAE;EACnCgC,WAAW,EAAE,CAACuB,GAAG,CAACxD,KAAK,EAAEwD,GAAG,CAACnB,SAAS,KAAK,IAAI,GAAG,IAAI,GAAG,aAAamB,GAAG,CAACnB,SAAS,EAAE,EAAEmB,GAAG,CAACvB,WAAW,EAAEuB,GAAG,CAACpB,QAAQ,CAAC,CAClHrD,MAAM,CAAEmD,IAAI,IAAqBN,OAAO,CAACM,IAAI,CAAC,CAAC,CAC/CL,IAAI,CAAC,KAAK,CAAC;EACd6B,QAAQ,EAAE,eAAe;EACzBC,SAAS,EAAEH,GAAG,CAACnB,SAAS,KAAK,IAAI,IAAImB,GAAG,CAACnB,SAAS,IAAI,EAAE;EACxDkB,QAAQ,EAAEA,QAAQ,GAAG,MAAMA,QAAQ,CAACC,GAAG,CAAC,GAAGI;AAC7C,CAAC,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["MAX_PICKER_SKILLS","getInstallableNotInstalledSkills","snapshot","installableSkills","installableCatalog","skills","length","activeSkillSlugs","Set","catalog","map","skill","skillSlug","ignoredSkillSlugs","ignoredPublishedSkills","filter","has","getSkillCatalogSummary","loadedSkillCount","publishedSkillCount","workspaceSkillCount","assignmentCounts","project","userSkillCount","user","globalSkillCount","global","getUserRoleLabel","authState","role","status","getUserRoleRow","label","value","compactSkillName","name","skillName","trim","artifactName","toEffectiveSkillLabel","assignmentSource","includes","contextKind","getSkillListRows","options","rows","canOpenPicker","getSkillActionRows","normalizePickerText","toLowerCase","getSkillSearchText","artifactDescription","whenToUse","recommendationReason","identifiers","tags","flatMap","tag","slug","facet","Boolean","join","getPickerLabel","getSkillToolHint","toPickerRow","description","item","find","toolHint","relevance","getPickerSkills","getSkillPickerRows","query","normalizedQuery","tokens","split","searchText","every","token","sort","left","right","leftRelevance","rightRelevance","localeCompare","slice","getSkillPickerCommands","onSelect","row","title","category","suggested","undefined"],"sources":["../../src/tui/skill-helpers.ts"],"sourcesContent":["import type { PluginStatusSnapshot } from '../server.js';\nimport type { PublishedSkillSummary, TuiCommand } from './types.js';\n\nconst MAX_PICKER_SKILLS = 24;\n\ntype SkillListOptions = {\n canOpenPicker?: boolean;\n};\n\nexport const getInstallableNotInstalledSkills = (snapshot: PluginStatusSnapshot): PublishedSkillSummary[] => {\n const installableSkills = snapshot.installableCatalog?.skills ?? [];\n if (installableSkills.length === 0) return [];\n\n const activeSkillSlugs = new Set(snapshot.catalog?.skills.map((skill) => skill.skillSlug) ?? []);\n const ignoredSkillSlugs = new Set(snapshot.ignoredPublishedSkills.skills.map((skill) => skill.skillSlug));\n\n return installableSkills.filter(\n (skill) => !activeSkillSlugs.has(skill.skillSlug) && !ignoredSkillSlugs.has(skill.skillSlug),\n );\n};\n\nexport type SkillListRow = {\n label: string;\n value: string;\n};\n\nexport type SkillPickerRow = SkillListRow & {\n skillSlug: string;\n description: string;\n toolHint: string;\n relevance: number | null;\n};\n\nexport const getSkillCatalogSummary = (snapshot: PluginStatusSnapshot): string => {\n const catalog = snapshot.catalog;\n const loadedSkillCount = catalog?.publishedSkillCount ?? 0;\n const workspaceSkillCount = catalog?.assignmentCounts?.project ?? 0;\n const userSkillCount = catalog?.assignmentCounts?.user ?? 0;\n const globalSkillCount = catalog?.assignmentCounts?.global ?? 0;\n\n return `${loadedSkillCount} loaded · ${workspaceSkillCount} workspace · ${userSkillCount} user · ${globalSkillCount} global`;\n};\n\nconst getUserRoleLabel = (snapshot: PluginStatusSnapshot): string => {\n if (snapshot.authState.role) return snapshot.authState.role;\n if (snapshot.authState.status === 'authenticated') return 'unknown';\n\n return 'none';\n};\n\nexport const getUserRoleRow = (snapshot: PluginStatusSnapshot): SkillListRow => ({\n label: 'role',\n value: getUserRoleLabel(snapshot),\n});\n\nconst compactSkillName = (skill: PublishedSkillSummary): string => {\n const name = skill.skillName.trim() || skill.artifactName.trim() || skill.skillSlug;\n if (name === skill.skillSlug) return name;\n\n return `${name} (${skill.skillSlug})`;\n};\n\nconst toEffectiveSkillLabel = (skill: PublishedSkillSummary): string => {\n if (skill.assignmentSource.includes('USER')) return 'user';\n if (skill.contextKind === 'global') return 'global';\n if (skill.contextKind === 'project') return 'project';\n\n return 'active';\n};\n\nexport const getSkillListRows = (snapshot: PluginStatusSnapshot, options: SkillListOptions = {}): SkillListRow[] => {\n const rows: SkillListRow[] = [\n options.canOpenPicker\n ? { label: 'open', value: '/wizard-skills' }\n : { label: 'fetch', value: 'opencode_wizard_published_skills_fetch' },\n ];\n\n if (getInstallableNotInstalledSkills(snapshot).length === 0 && snapshot.ignoredPublishedSkills.skills.length === 0) return rows;\n\n return [\n ...rows,\n {\n label: 'manage',\n value: 'opencode_wizard_published_skill_preference_set',\n },\n ];\n};\n\nexport const getSkillActionRows = (snapshot: PluginStatusSnapshot): SkillListRow[] => [getUserRoleRow(snapshot)];\n\nconst normalizePickerText = (value: string | null | undefined): string => value?.trim().toLowerCase() ?? '';\n\nconst getSkillSearchText = (skill: PublishedSkillSummary): string =>\n [\n skill.skillSlug,\n skill.skillName,\n skill.artifactName,\n skill.artifactDescription,\n skill.whenToUse,\n skill.recommendationReason,\n ...skill.identifiers,\n ...skill.tags.flatMap((tag) => [tag.slug, tag.label, tag.facet?.slug, tag.facet?.label]),\n ]\n .map(normalizePickerText)\n .filter(Boolean)\n .join(' ');\n\nconst getPickerLabel = (skill: PublishedSkillSummary): string => {\n if (skill.contextKind === 'installable') return 'available';\n return toEffectiveSkillLabel(skill);\n};\n\nconst getSkillToolHint = (skill: PublishedSkillSummary, label: string): string => {\n if (label === 'available') {\n return `read-only: install with opencode_wizard_published_skill_preference_set skill=${skill.skillSlug}`;\n }\n\n if (label === 'ignored') {\n return `read-only: unignore with opencode_wizard_published_skill_preference_set skill=${skill.skillSlug}; use preferenceScope=global for global starter skills`;\n }\n\n if (skill.contextKind === 'global') {\n return `read-only: disable global with opencode_wizard_published_skill_preference_set skill=${skill.skillSlug} action=ignore preferenceScope=global`;\n }\n\n return `read-only: fetch body with opencode_wizard_published_skills_fetch skill=${skill.skillSlug}`;\n};\n\nconst toPickerRow = (skill: PublishedSkillSummary, label: string): SkillPickerRow => ({\n label,\n value: compactSkillName(skill),\n skillSlug: skill.skillSlug,\n description: [skill.recommendationReason, skill.whenToUse, skill.artifactDescription]\n .map((item) => item?.trim())\n .find((item): item is string => Boolean(item)) ?? '',\n toolHint: getSkillToolHint(skill, label),\n relevance: skill.relevance ?? null,\n});\n\nconst getPickerSkills = (snapshot: PluginStatusSnapshot): Array<{ skill: PublishedSkillSummary; label: string }> => [\n ...(snapshot.catalog?.skills ?? []).map((skill) => ({ skill, label: getPickerLabel(skill) })),\n ...getInstallableNotInstalledSkills(snapshot).map((skill) => ({ skill, label: 'available' })),\n ...snapshot.ignoredPublishedSkills.skills.map((skill) => ({ skill, label: 'ignored' })),\n];\n\nexport const getSkillPickerRows = (snapshot: PluginStatusSnapshot, query = ''): SkillPickerRow[] => {\n const normalizedQuery = normalizePickerText(query);\n const tokens = normalizedQuery.split(/\\s+/u).filter(Boolean);\n\n return getPickerSkills(snapshot)\n .filter(({ skill }) => {\n if (tokens.length === 0) return true;\n const searchText = getSkillSearchText(skill);\n return tokens.every((token) => searchText.includes(token));\n })\n .sort((left, right) => {\n const leftRelevance = left.skill.relevance ?? -1;\n const rightRelevance = right.skill.relevance ?? -1;\n if (leftRelevance !== rightRelevance) return rightRelevance - leftRelevance;\n return left.skill.skillSlug.localeCompare(right.skill.skillSlug);\n })\n .slice(0, MAX_PICKER_SKILLS)\n .map(({ skill, label }) => toPickerRow(skill, label));\n};\n\nexport const getSkillPickerCommands = (snapshot: PluginStatusSnapshot, onSelect?: (row: SkillPickerRow) => void): TuiCommand[] =>\n getSkillPickerRows(snapshot).map((row) => ({\n value: `opencode-wizard.skill-picker.${row.label}.${row.skillSlug}`,\n title: `Wizard skill: ${row.value}`,\n description: [row.label, row.relevance === null ? null : `relevance ${row.relevance}`, row.description, row.toolHint]\n .filter((item): item is string => Boolean(item))\n .join(' · '),\n category: 'Wizard skills',\n suggested: row.relevance !== null && row.relevance >= 80,\n onSelect: onSelect ? () => onSelect(row) : undefined,\n }));\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aexol/opencode-wizard",
3
- "version": "0.3.13",
3
+ "version": "0.4.1",
4
4
  "description": "OpenCode plugin for opencode-wizard published skills",
5
5
  "type": "module",
6
6
  "oc-plugin": [