@aexol/opencode-wizard 0.3.9 → 0.3.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,14 +1,15 @@
1
1
  import { type PublishedSkillDetail, type PublishedSkillsSuccessState } from '../published-skills-transform.js';
2
2
  import type { AiFacingPluginStatusSnapshot, AuthState, FilteredPublishedSkillsResult, LoginBootstrapSnapshot, PluginAuthStateSummary, PluginStatusSnapshot, PublishedSkillCatalogPayload, PublishedSkillsResult, ResolvedConfig } from './types.js';
3
- export declare const toPublishedSkillCatalog: (payload: PublishedSkillCatalogPayload) => PublishedSkillsSuccessState;
3
+ export declare const toPublishedSkillCatalog: (payload: PublishedSkillCatalogPayload, availableTools?: string[]) => PublishedSkillsSuccessState;
4
4
  export declare const filterIgnoredPublishedSkills: (config: ResolvedConfig, result: PublishedSkillsResult) => Promise<FilteredPublishedSkillsResult>;
5
5
  export declare const buildSystemNote: (result: PublishedSkillsResult, _config: ResolvedConfig, details: PublishedSkillDetail[]) => string | null;
6
6
  export declare const formatStatusOutput: (worktree: string, config: ResolvedConfig, publishedSkillsResult: PublishedSkillsResult, loginBootstrapSnapshot: LoginBootstrapSnapshot) => Promise<string>;
7
7
  export declare const toPluginAuthStateSummary: (authState: AuthState | null) => PluginAuthStateSummary;
8
- export declare const resolvePluginStatusSnapshot: ({ worktree, directory, signal, }: {
8
+ export declare const resolvePluginStatusSnapshot: ({ worktree, directory, signal, registeredTools, }: {
9
9
  worktree: string;
10
10
  directory: string;
11
11
  signal: AbortSignal;
12
+ registeredTools?: string[];
12
13
  }) => Promise<PluginStatusSnapshot>;
13
14
  export declare const withStatusMessage: (snapshot: PluginStatusSnapshot, message: string) => PluginStatusSnapshot;
14
15
  export declare const toAiFacingPluginStatusSnapshot: (snapshot: PluginStatusSnapshot) => AiFacingPluginStatusSnapshot;
@@ -1,4 +1,4 @@
1
- import { AVAILABLE_PUBLISHED_SKILL_TOOLS, resolveAvailableTools } from '../plugin-tools.js';
1
+ import { resolveAvailableTools } from '../plugin-tools.js';
2
2
  import { buildPublishedSkillsSystemNote } from '../published-skills-system-note.js';
3
3
  import { toPublishedSkillCatalog as buildPublishedSkillCatalog, toInstallableSkillSummary, toPublishedSkillSummary } from '../published-skills-transform.js';
4
4
  import { readGlobalAuthState, resolveStoredAuthState, toStoredUserKey } from './auth-store.js';
@@ -6,10 +6,10 @@ import { fetchPublishedSkillsCatalog } 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
8
  import { getPublishedSkillIgnoreScopeKey, resolveWorkspace, toWorkspaceResolutionMetadata, toWorkspaceResolutionOutput } from './workspace.js';
9
- export const toPublishedSkillCatalog = payload => buildPublishedSkillCatalog(payload, {
9
+ export const toPublishedSkillCatalog = (payload, availableTools = resolveAvailableTools(null)) => buildPublishedSkillCatalog(payload, {
10
10
  pluginId: PLUGIN_ID,
11
11
  rootSkillSeedPath: ROOT_SKILL_SEED_PATH,
12
- availableTools: AVAILABLE_PUBLISHED_SKILL_TOOLS
12
+ availableTools
13
13
  });
14
14
  export const filterIgnoredPublishedSkills = async (config, result) => {
15
15
  const authState = await readGlobalAuthState(config.authStatePath);
@@ -105,7 +105,7 @@ export const formatStatusOutput = async (worktree, config, publishedSkillsResult
105
105
  }
106
106
  return JSON.stringify({
107
107
  ...base,
108
- ...toPublishedSkillCatalog(filteredResult.fetchResult.payload),
108
+ ...toPublishedSkillCatalog(filteredResult.fetchResult.payload, base.availableTools),
109
109
  message: getWorkspaceUnavailableMessage(filteredResult.fetchResult.payload)
110
110
  }, null, 2);
111
111
  };
@@ -132,7 +132,8 @@ export const toPluginAuthStateSummary = authState => {
132
132
  export const resolvePluginStatusSnapshot = async ({
133
133
  worktree,
134
134
  directory,
135
- signal
135
+ signal,
136
+ registeredTools
136
137
  }) => {
137
138
  const config = await resolveConfig(worktree);
138
139
  const workspaceResolution = await resolveWorkspace({
@@ -146,6 +147,7 @@ export const resolvePluginStatusSnapshot = async ({
146
147
  fetchResult
147
148
  });
148
149
  const authState = await resolveStoredAuthState(worktree, config);
150
+ const availableTools = registeredTools ?? resolveAvailableTools(authState?.role ?? null);
149
151
  return {
150
152
  pluginId: PLUGIN_ID,
151
153
  runtimeMode: 'tool_fetch_only',
@@ -161,9 +163,9 @@ export const resolvePluginStatusSnapshot = async ({
161
163
  authMode: filteredResult.fetchResult.authMode,
162
164
  fetchedAt: filteredResult.fetchResult.fetchedAt,
163
165
  source: filteredResult.fetchResult.source,
164
- availableTools: resolveAvailableTools(authState?.role ?? null),
166
+ availableTools,
165
167
  message: filteredResult.fetchResult.ok ? getWorkspaceUnavailableMessage(filteredResult.fetchResult.payload) : filteredResult.fetchResult.message,
166
- catalog: filteredResult.fetchResult.ok ? toPublishedSkillCatalog(filteredResult.fetchResult.payload) : null,
168
+ catalog: filteredResult.fetchResult.ok ? toPublishedSkillCatalog(filteredResult.fetchResult.payload, availableTools) : null,
167
169
  installableCatalog: filteredResult.fetchResult.ok ? {
168
170
  count: filteredResult.fetchResult.payload.catalogSkills.length,
169
171
  skills: filteredResult.fetchResult.payload.catalogSkills.map(toInstallableSkillSummary)
@@ -1 +1 @@
1
- {"version":3,"names":["AVAILABLE_PUBLISHED_SKILL_TOOLS","resolveAvailableTools","buildPublishedSkillsSystemNote","toPublishedSkillCatalog","buildPublishedSkillCatalog","toInstallableSkillSummary","toPublishedSkillSummary","readGlobalAuthState","resolveStoredAuthState","toStoredUserKey","fetchPublishedSkillsCatalog","NATIVE_SKILLS_URL_COMPATIBILITY","PLUGIN_ID","ROOT_SKILL_SEED_PATH","resolveConfig","getPublishedSkillIgnoreScopeKey","resolveWorkspace","toWorkspaceResolutionMetadata","toWorkspaceResolutionOutput","payload","pluginId","rootSkillSeedPath","availableTools","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","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 { AVAILABLE_PUBLISHED_SKILL_TOOLS, 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 } 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 = (payload: PublishedSkillCatalogPayload): PublishedSkillsSuccessState =>\n buildPublishedSkillCatalog(payload, {\n pluginId: PLUGIN_ID,\n rootSkillSeedPath: ROOT_SKILL_SEED_PATH,\n availableTools: AVAILABLE_PUBLISHED_SKILL_TOOLS,\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),\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}: {\n worktree: string;\n directory: string;\n signal: AbortSignal;\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 resolveStoredAuthState(worktree, config);\n\n return {\n pluginId: PLUGIN_ID,\n runtimeMode: 'tool_fetch_only',\n nativeSkillsUrlCompatibility: NATIVE_SKILLS_URL_COMPATIBILITY,\n backendOrigin: config.backendOrigin,\n graphqlUrl: config.graphqlUrl,\n fallbackWorkspaceSlug: config.fallbackWorkspaceSlug,\n workspaceResolution: toWorkspaceResolutionOutput(workspaceResolution),\n rootSkillSeedPath: config.rootSkillSeedPath,\n authStatePath: config.authStatePath,\n authState: toPluginAuthStateSummary(authState),\n status: filteredResult.fetchResult.status,\n authMode: filteredResult.fetchResult.authMode,\n fetchedAt: filteredResult.fetchResult.fetchedAt,\n source: filteredResult.fetchResult.source,\n availableTools: resolveAvailableTools(authState?.role ?? null),\n message: filteredResult.fetchResult.ok\n ? getWorkspaceUnavailableMessage(filteredResult.fetchResult.payload)\n : filteredResult.fetchResult.message,\n catalog: filteredResult.fetchResult.ok ? toPublishedSkillCatalog(filteredResult.fetchResult.payload) : null,\n installableCatalog: filteredResult.fetchResult.ok\n ? {\n count: filteredResult.fetchResult.payload.catalogSkills.length,\n skills: filteredResult.fetchResult.payload.catalogSkills.map(toInstallableSkillSummary),\n }\n : null,\n ignoredPublishedSkills: {\n scopeKey: filteredResult.ignoreState.scopeKey,\n userKey: filteredResult.ignoreState.userKey,\n count: filteredResult.ignoreState.ignoredSkillSlugs.length,\n skills: filteredResult.ignoredSkills,\n },\n };\n};\n\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","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 } 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 resolveStoredAuthState(worktree, config);\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,4 +1,3 @@
1
- import { memo as _$memo } from "@opentui/solid";
2
1
  import { createComponent as _$createComponent } from "@opentui/solid";
3
2
  import { insert as _$insert } from "@opentui/solid";
4
3
  import { effect as _$effect } from "@opentui/solid";
@@ -8,7 +7,7 @@ import { setProp as _$setProp } from "@opentui/solid";
8
7
  import { createElement as _$createElement } from "@opentui/solid";
9
8
  import { createMemo } from 'solid-js';
10
9
  import { compactStatusMessage, formatAuthStatus, formatBackendOriginLabel, formatSkillsCatalogUnavailableMessage } from '../formatting.js';
11
- import { getInstallableNotInstalledSkills, getSkillActionRows, getSkillListRows } from '../skill-helpers.js';
10
+ import { getInstallableNotInstalledSkills, getUserRoleRow } from '../skill-helpers.js';
12
11
  import { Row } from './common.js';
13
12
  export const StatusContent = props => {
14
13
  if (props.status.kind === 'loading') {
@@ -63,7 +62,7 @@ export const SkillsRows = props => {
63
62
  })();
64
63
  };
65
64
  export const ReadyRows = props => {
66
- const actionRows = getSkillActionRows(props.snapshot);
65
+ const roleRow = getUserRoleRow(props.snapshot);
67
66
  const statusRows = [_$createComponent(Row, {
68
67
  label: "url",
69
68
  get value() {
@@ -86,20 +85,7 @@ export const ReadyRows = props => {
86
85
  get valueColor() {
87
86
  return props.theme.text;
88
87
  }
89
- }), _$memo(() => actionRows.map(row => _$createComponent(Row, {
90
- get label() {
91
- return row.label;
92
- },
93
- get value() {
94
- return row.value;
95
- },
96
- get labelColor() {
97
- return props.theme.textMuted;
98
- },
99
- get valueColor() {
100
- return props.theme.text;
101
- }
102
- })))];
88
+ })];
103
89
  if (!props.snapshot.catalog) {
104
90
  return (() => {
105
91
  var _el$6 = _$createElement("box");
@@ -119,12 +105,25 @@ export const ReadyRows = props => {
119
105
  return props.theme.text;
120
106
  }
121
107
  }), null);
108
+ _$insert(_el$6, _$createComponent(Row, {
109
+ get label() {
110
+ return roleRow.label;
111
+ },
112
+ get value() {
113
+ return roleRow.value;
114
+ },
115
+ get labelColor() {
116
+ return props.theme.textMuted;
117
+ },
118
+ get valueColor() {
119
+ return props.theme.text;
120
+ }
121
+ }), null);
122
122
  return _el$6;
123
123
  })();
124
124
  }
125
125
  const installableNotInstalledCount = getInstallableNotInstalledSkills(props.snapshot).length;
126
- const catalogStatus = `${props.snapshot.catalog.publishedSkillCount} loaded · ${installableNotInstalledCount} installable · ${props.snapshot.ignoredPublishedSkills.count} ignored`;
127
- const skillRows = getSkillListRows(props.snapshot);
126
+ const catalogStatus = `${props.snapshot.catalog.publishedSkillCount} loaded · ${installableNotInstalledCount} installable`;
128
127
  return (() => {
129
128
  var _el$7 = _$createElement("box");
130
129
  _$setProp(_el$7, "width", "100%");
@@ -141,32 +140,20 @@ export const ReadyRows = props => {
141
140
  return props.theme.text;
142
141
  }
143
142
  }), null);
144
- _$insert(_el$7, (() => {
145
- var _c$ = _$memo(() => skillRows.length > 0);
146
- return () => _c$() ? skillRows.map(row => _$createComponent(Row, {
147
- get label() {
148
- return row.label;
149
- },
150
- get value() {
151
- return row.value;
152
- },
153
- get labelColor() {
154
- return props.theme.textMuted;
155
- },
156
- get valueColor() {
157
- return props.theme.text;
158
- }
159
- })) : _$createComponent(Row, {
160
- label: "skills",
161
- value: "none assigned yet",
162
- get labelColor() {
163
- return props.theme.textMuted;
164
- },
165
- get valueColor() {
166
- return props.theme.text;
167
- }
168
- });
169
- })(), null);
143
+ _$insert(_el$7, _$createComponent(Row, {
144
+ get label() {
145
+ return roleRow.label;
146
+ },
147
+ get value() {
148
+ return roleRow.value;
149
+ },
150
+ get labelColor() {
151
+ return props.theme.textMuted;
152
+ },
153
+ get valueColor() {
154
+ return props.theme.text;
155
+ }
156
+ }), null);
170
157
  return _el$7;
171
158
  })();
172
159
  };
@@ -1 +1 @@
1
- {"version":3,"names":["createMemo","compactStatusMessage","formatAuthStatus","formatBackendOriginLabel","formatSkillsCatalogUnavailableMessage","getInstallableNotInstalledSkills","getSkillActionRows","getSkillListRows","Row","StatusContent","props","status","kind","_el$","_$createElement","_$insertNode","_$createTextNode","_$setProp","_$effect","_$p","theme","textMuted","_el$3","_el$4","_$insert","message","warning","_$createComponent","ReadyRows","snapshot","SkillsRows","api","current","statusContent","currentStatus","_el$5","actionRows","statusRows","label","value","backendOrigin","labelColor","valueColor","text","_$memo","map","row","catalog","_el$6","installableNotInstalledCount","length","catalogStatus","publishedSkillCount","ignoredPublishedSkills","count","skillRows","_el$7","_c$"],"sources":["../../../src/tui/components/status-content.tsx"],"sourcesContent":["import { createMemo } from 'solid-js';\nimport type { PluginStatusSnapshot } from '../../server.js';\nimport { compactStatusMessage, formatAuthStatus, formatBackendOriginLabel, formatSkillsCatalogUnavailableMessage } from '../formatting.js';\nimport { getInstallableNotInstalledSkills, getSkillActionRows, getSkillListRows } from '../skill-helpers.js';\nimport type { StatusState, TuiPluginApi } from '../types.js';\nimport { Row } from './common.js';\n\nexport const StatusContent = (props: { status: StatusState; theme: TuiPluginApi['theme']['current'] }) => {\n if (props.status.kind === 'loading') {\n return (\n <text fg={props.theme.textMuted} wrapMode=\"none\" overflow=\"hidden\">\n loading…\n </text>\n );\n }\n\n if (props.status.kind === 'error') {\n return (\n <text fg={props.theme.warning} wrapMode=\"none\" overflow=\"hidden\">\n unavailable: {compactStatusMessage(props.status.message)}\n </text>\n );\n }\n\n return <ReadyRows snapshot={props.status.snapshot} theme={props.theme} />;\n};\n\nexport const SkillsRows = (props: { api: TuiPluginApi; status: () => StatusState }) => {\n const theme = createMemo(() => props.api.theme.current);\n const statusContent = () => {\n const currentStatus = props.status();\n\n return <StatusContent status={currentStatus} theme={theme()} />;\n };\n\n return (\n <box width=\"100%\" flexDirection=\"column\" overflow=\"hidden\">\n {statusContent()}\n </box>\n );\n};\n\nexport const ReadyRows = (props: { snapshot: PluginStatusSnapshot; theme: TuiPluginApi['theme']['current'] }) => {\n const actionRows = getSkillActionRows(props.snapshot);\n const statusRows = (\n <>\n <Row\n label=\"url\"\n value={formatBackendOriginLabel(props.snapshot.backendOrigin)}\n labelColor={props.theme.textMuted}\n valueColor={props.theme.text}\n />\n <Row label=\"auth\" value={formatAuthStatus(props.snapshot)} labelColor={props.theme.textMuted} valueColor={props.theme.text} />\n {actionRows.map((row) => (\n <Row label={row.label} value={row.value} labelColor={props.theme.textMuted} valueColor={props.theme.text} />\n ))}\n </>\n );\n\n if (!props.snapshot.catalog) {\n return (\n <box width=\"100%\" flexDirection=\"column\" overflow=\"hidden\">\n {statusRows}\n <Row\n label=\"catalog\"\n value={formatSkillsCatalogUnavailableMessage(props.snapshot)}\n labelColor={props.theme.textMuted}\n valueColor={props.theme.text}\n />\n </box>\n );\n }\n\n const installableNotInstalledCount = getInstallableNotInstalledSkills(props.snapshot).length;\n const catalogStatus = `${props.snapshot.catalog.publishedSkillCount} loaded · ${installableNotInstalledCount} installable · ${props.snapshot.ignoredPublishedSkills.count} ignored`;\n const skillRows = getSkillListRows(props.snapshot);\n\n return (\n <box width=\"100%\" flexDirection=\"column\" overflow=\"hidden\">\n {statusRows}\n <Row label=\"catalog\" value={catalogStatus} labelColor={props.theme.textMuted} valueColor={props.theme.text} />\n {skillRows.length > 0 ? (\n skillRows.map((row) => (\n <Row label={row.label} value={row.value} labelColor={props.theme.textMuted} valueColor={props.theme.text} />\n ))\n ) : (\n <Row label=\"skills\" value=\"none assigned yet\" labelColor={props.theme.textMuted} valueColor={props.theme.text} />\n )}\n </box>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createMemo","compactStatusMessage","formatAuthStatus","formatBackendOriginLabel","formatSkillsCatalogUnavailableMessage","getInstallableNotInstalledSkills","getUserRoleRow","Row","StatusContent","props","status","kind","_el$","_$createElement","_$insertNode","_$createTextNode","_$setProp","_$effect","_$p","theme","textMuted","_el$3","_el$4","_$insert","message","warning","_$createComponent","ReadyRows","snapshot","SkillsRows","api","current","statusContent","currentStatus","_el$5","roleRow","statusRows","label","value","backendOrigin","labelColor","valueColor","text","catalog","_el$6","installableNotInstalledCount","length","catalogStatus","publishedSkillCount","_el$7"],"sources":["../../../src/tui/components/status-content.tsx"],"sourcesContent":["import { createMemo } from 'solid-js';\nimport type { PluginStatusSnapshot } from '../../server.js';\nimport { compactStatusMessage, formatAuthStatus, formatBackendOriginLabel, formatSkillsCatalogUnavailableMessage } from '../formatting.js';\nimport { getInstallableNotInstalledSkills, getUserRoleRow } from '../skill-helpers.js';\nimport type { StatusState, TuiPluginApi } from '../types.js';\nimport { Row } from './common.js';\n\nexport const StatusContent = (props: { status: StatusState; theme: TuiPluginApi['theme']['current'] }) => {\n if (props.status.kind === 'loading') {\n return (\n <text fg={props.theme.textMuted} wrapMode=\"none\" overflow=\"hidden\">\n loading…\n </text>\n );\n }\n\n if (props.status.kind === 'error') {\n return (\n <text fg={props.theme.warning} wrapMode=\"none\" overflow=\"hidden\">\n unavailable: {compactStatusMessage(props.status.message)}\n </text>\n );\n }\n\n return <ReadyRows snapshot={props.status.snapshot} theme={props.theme} />;\n};\n\nexport const SkillsRows = (props: { api: TuiPluginApi; status: () => StatusState }) => {\n const theme = createMemo(() => props.api.theme.current);\n const statusContent = () => {\n const currentStatus = props.status();\n\n return <StatusContent status={currentStatus} theme={theme()} />;\n };\n\n return (\n <box width=\"100%\" flexDirection=\"column\" overflow=\"hidden\">\n {statusContent()}\n </box>\n );\n};\n\nexport const ReadyRows = (props: { snapshot: PluginStatusSnapshot; theme: TuiPluginApi['theme']['current'] }) => {\n const roleRow = getUserRoleRow(props.snapshot);\n const statusRows = (\n <>\n <Row\n label=\"url\"\n value={formatBackendOriginLabel(props.snapshot.backendOrigin)}\n labelColor={props.theme.textMuted}\n valueColor={props.theme.text}\n />\n <Row label=\"auth\" value={formatAuthStatus(props.snapshot)} labelColor={props.theme.textMuted} valueColor={props.theme.text} />\n </>\n );\n\n if (!props.snapshot.catalog) {\n return (\n <box width=\"100%\" flexDirection=\"column\" overflow=\"hidden\">\n {statusRows}\n <Row\n label=\"catalog\"\n value={formatSkillsCatalogUnavailableMessage(props.snapshot)}\n labelColor={props.theme.textMuted}\n valueColor={props.theme.text}\n />\n <Row label={roleRow.label} value={roleRow.value} labelColor={props.theme.textMuted} valueColor={props.theme.text} />\n </box>\n );\n }\n\n const installableNotInstalledCount = getInstallableNotInstalledSkills(props.snapshot).length;\n const catalogStatus = `${props.snapshot.catalog.publishedSkillCount} loaded · ${installableNotInstalledCount} installable`;\n\n return (\n <box width=\"100%\" flexDirection=\"column\" overflow=\"hidden\">\n {statusRows}\n <Row label=\"catalog\" value={catalogStatus} labelColor={props.theme.textMuted} valueColor={props.theme.text} />\n <Row label={roleRow.label} value={roleRow.value} labelColor={props.theme.textMuted} valueColor={props.theme.text} />\n </box>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -13,10 +13,9 @@ export const formatSkillsCatalogUnavailableMessage = snapshot => {
13
13
  return 'unavailable';
14
14
  };
15
15
  export const formatAuthStatus = snapshot => {
16
- const roleLabel = snapshot.authState.role ? ` [${snapshot.authState.role}]` : '';
17
- if (snapshot.authState.status !== 'authenticated') return `${snapshot.authState.status}${roleLabel}`;
18
- if (!snapshot.authState.email) return `authenticated${roleLabel}`;
19
- return `${snapshot.authState.email}${roleLabel}`;
16
+ if (snapshot.authState.status !== 'authenticated') return snapshot.authState.status;
17
+ if (!snapshot.authState.email) return 'authenticated';
18
+ return snapshot.authState.email;
20
19
  };
21
20
  export const formatBackendOriginLabel = backendOrigin => {
22
21
  try {
@@ -1 +1 @@
1
- {"version":3,"names":["MAX_STATUS_MESSAGE_LENGTH","compactStatusMessage","message","length","slice","formatSkillsCatalogUnavailableMessage","snapshot","catalog","status","formatAuthStatus","roleLabel","authState","role","email","formatBackendOriginLabel","backendOrigin","hostname","URL","includes"],"sources":["../../src/tui/formatting.ts"],"sourcesContent":["import type { PluginStatusSnapshot } from '../server.js';\nimport { MAX_STATUS_MESSAGE_LENGTH } from './constants.js';\n\nexport const compactStatusMessage = (message: string): string => {\n if (message.length <= MAX_STATUS_MESSAGE_LENGTH) return message;\n\n return `${message.slice(0, MAX_STATUS_MESSAGE_LENGTH - 1)}…`;\n};\n\nexport const formatSkillsCatalogUnavailableMessage = (snapshot: PluginStatusSnapshot): string => {\n if (!snapshot.catalog && snapshot.status === 'missing_auth') {\n if (snapshot.message) return compactStatusMessage(snapshot.message);\n\n return 'locked (browser auth pending)';\n }\n\n if (!snapshot.catalog && snapshot.message) return compactStatusMessage(snapshot.message);\n if (!snapshot.catalog) return `unavailable (${snapshot.status})`;\n\n return 'unavailable';\n};\n\nexport const formatAuthStatus = (snapshot: PluginStatusSnapshot): string => {\n const roleLabel = snapshot.authState.role ? ` [${snapshot.authState.role}]` : '';\n if (snapshot.authState.status !== 'authenticated') return `${snapshot.authState.status}${roleLabel}`;\n if (!snapshot.authState.email) return `authenticated${roleLabel}`;\n\n return `${snapshot.authState.email}${roleLabel}`;\n};\n\nexport const formatBackendOriginLabel = (backendOrigin: string): string => {\n try {\n const { hostname } = new URL(backendOrigin);\n if (hostname === 'localhost' || hostname === '127.0.0.1') return 'localhost';\n\n return 'opencode-wizard';\n } catch {\n if (backendOrigin.includes('localhost') || backendOrigin.includes('127.0.0.1')) return 'localhost';\n\n return 'opencode-wizard';\n }\n};\n"],"mappings":"AACA,SAASA,yBAAyB,QAAQ,gBAAgB;AAE1D,OAAO,MAAMC,oBAAoB,GAAIC,OAAe,IAAa;EAC/D,IAAIA,OAAO,CAACC,MAAM,IAAIH,yBAAyB,EAAE,OAAOE,OAAO;EAE/D,OAAO,GAAGA,OAAO,CAACE,KAAK,CAAC,CAAC,EAAEJ,yBAAyB,GAAG,CAAC,CAAC,GAAG;AAC9D,CAAC;AAED,OAAO,MAAMK,qCAAqC,GAAIC,QAA8B,IAAa;EAC/F,IAAI,CAACA,QAAQ,CAACC,OAAO,IAAID,QAAQ,CAACE,MAAM,KAAK,cAAc,EAAE;IAC3D,IAAIF,QAAQ,CAACJ,OAAO,EAAE,OAAOD,oBAAoB,CAACK,QAAQ,CAACJ,OAAO,CAAC;IAEnE,OAAO,+BAA+B;EACxC;EAEA,IAAI,CAACI,QAAQ,CAACC,OAAO,IAAID,QAAQ,CAACJ,OAAO,EAAE,OAAOD,oBAAoB,CAACK,QAAQ,CAACJ,OAAO,CAAC;EACxF,IAAI,CAACI,QAAQ,CAACC,OAAO,EAAE,OAAO,gBAAgBD,QAAQ,CAACE,MAAM,GAAG;EAEhE,OAAO,aAAa;AACtB,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAIH,QAA8B,IAAa;EAC1E,MAAMI,SAAS,GAAGJ,QAAQ,CAACK,SAAS,CAACC,IAAI,GAAG,KAAKN,QAAQ,CAACK,SAAS,CAACC,IAAI,GAAG,GAAG,EAAE;EAChF,IAAIN,QAAQ,CAACK,SAAS,CAACH,MAAM,KAAK,eAAe,EAAE,OAAO,GAAGF,QAAQ,CAACK,SAAS,CAACH,MAAM,GAAGE,SAAS,EAAE;EACpG,IAAI,CAACJ,QAAQ,CAACK,SAAS,CAACE,KAAK,EAAE,OAAO,gBAAgBH,SAAS,EAAE;EAEjE,OAAO,GAAGJ,QAAQ,CAACK,SAAS,CAACE,KAAK,GAAGH,SAAS,EAAE;AAClD,CAAC;AAED,OAAO,MAAMI,wBAAwB,GAAIC,aAAqB,IAAa;EACzE,IAAI;IACF,MAAM;MAAEC;IAAS,CAAC,GAAG,IAAIC,GAAG,CAACF,aAAa,CAAC;IAC3C,IAAIC,QAAQ,KAAK,WAAW,IAAIA,QAAQ,KAAK,WAAW,EAAE,OAAO,WAAW;IAE5E,OAAO,iBAAiB;EAC1B,CAAC,CAAC,MAAM;IACN,IAAID,aAAa,CAACG,QAAQ,CAAC,WAAW,CAAC,IAAIH,aAAa,CAACG,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,WAAW;IAElG,OAAO,iBAAiB;EAC1B;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["MAX_STATUS_MESSAGE_LENGTH","compactStatusMessage","message","length","slice","formatSkillsCatalogUnavailableMessage","snapshot","catalog","status","formatAuthStatus","authState","email","formatBackendOriginLabel","backendOrigin","hostname","URL","includes"],"sources":["../../src/tui/formatting.ts"],"sourcesContent":["import type { PluginStatusSnapshot } from '../server.js';\nimport { MAX_STATUS_MESSAGE_LENGTH } from './constants.js';\n\nexport const compactStatusMessage = (message: string): string => {\n if (message.length <= MAX_STATUS_MESSAGE_LENGTH) return message;\n\n return `${message.slice(0, MAX_STATUS_MESSAGE_LENGTH - 1)}…`;\n};\n\nexport const formatSkillsCatalogUnavailableMessage = (snapshot: PluginStatusSnapshot): string => {\n if (!snapshot.catalog && snapshot.status === 'missing_auth') {\n if (snapshot.message) return compactStatusMessage(snapshot.message);\n\n return 'locked (browser auth pending)';\n }\n\n if (!snapshot.catalog && snapshot.message) return compactStatusMessage(snapshot.message);\n if (!snapshot.catalog) return `unavailable (${snapshot.status})`;\n\n return 'unavailable';\n};\n\nexport const formatAuthStatus = (snapshot: PluginStatusSnapshot): string => {\n if (snapshot.authState.status !== 'authenticated') return snapshot.authState.status;\n if (!snapshot.authState.email) return 'authenticated';\n\n return snapshot.authState.email;\n};\n\nexport const formatBackendOriginLabel = (backendOrigin: string): string => {\n try {\n const { hostname } = new URL(backendOrigin);\n if (hostname === 'localhost' || hostname === '127.0.0.1') return 'localhost';\n\n return 'opencode-wizard';\n } catch {\n if (backendOrigin.includes('localhost') || backendOrigin.includes('127.0.0.1')) return 'localhost';\n\n return 'opencode-wizard';\n }\n};\n"],"mappings":"AACA,SAASA,yBAAyB,QAAQ,gBAAgB;AAE1D,OAAO,MAAMC,oBAAoB,GAAIC,OAAe,IAAa;EAC/D,IAAIA,OAAO,CAACC,MAAM,IAAIH,yBAAyB,EAAE,OAAOE,OAAO;EAE/D,OAAO,GAAGA,OAAO,CAACE,KAAK,CAAC,CAAC,EAAEJ,yBAAyB,GAAG,CAAC,CAAC,GAAG;AAC9D,CAAC;AAED,OAAO,MAAMK,qCAAqC,GAAIC,QAA8B,IAAa;EAC/F,IAAI,CAACA,QAAQ,CAACC,OAAO,IAAID,QAAQ,CAACE,MAAM,KAAK,cAAc,EAAE;IAC3D,IAAIF,QAAQ,CAACJ,OAAO,EAAE,OAAOD,oBAAoB,CAACK,QAAQ,CAACJ,OAAO,CAAC;IAEnE,OAAO,+BAA+B;EACxC;EAEA,IAAI,CAACI,QAAQ,CAACC,OAAO,IAAID,QAAQ,CAACJ,OAAO,EAAE,OAAOD,oBAAoB,CAACK,QAAQ,CAACJ,OAAO,CAAC;EACxF,IAAI,CAACI,QAAQ,CAACC,OAAO,EAAE,OAAO,gBAAgBD,QAAQ,CAACE,MAAM,GAAG;EAEhE,OAAO,aAAa;AACtB,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAIH,QAA8B,IAAa;EAC1E,IAAIA,QAAQ,CAACI,SAAS,CAACF,MAAM,KAAK,eAAe,EAAE,OAAOF,QAAQ,CAACI,SAAS,CAACF,MAAM;EACnF,IAAI,CAACF,QAAQ,CAACI,SAAS,CAACC,KAAK,EAAE,OAAO,eAAe;EAErD,OAAOL,QAAQ,CAACI,SAAS,CAACC,KAAK;AACjC,CAAC;AAED,OAAO,MAAMC,wBAAwB,GAAIC,aAAqB,IAAa;EACzE,IAAI;IACF,MAAM;MAAEC;IAAS,CAAC,GAAG,IAAIC,GAAG,CAACF,aAAa,CAAC;IAC3C,IAAIC,QAAQ,KAAK,WAAW,IAAIA,QAAQ,KAAK,WAAW,EAAE,OAAO,WAAW;IAE5E,OAAO,iBAAiB;EAC1B,CAAC,CAAC,MAAM;IACN,IAAID,aAAa,CAACG,QAAQ,CAAC,WAAW,CAAC,IAAIH,aAAa,CAACG,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,WAAW;IAElG,OAAO,iBAAiB;EAC1B;AACF,CAAC","ignoreList":[]}
@@ -106,7 +106,7 @@ export const tui = async api => {
106
106
  void loadStatus(api).then(nextStatus => {
107
107
  setStatus(nextStatus);
108
108
  if (nextStatus.kind === 'ready') {
109
- const nextMode = nextStatus.snapshot.authState.role === 'EDITOR' ? 'editor' : 'shared';
109
+ const nextMode = nextStatus.snapshot.availableTools.includes('opencode_wizard_editor_create_or_update_skill') ? 'editor' : 'shared';
110
110
  if (registeredActionMode !== nextMode) {
111
111
  commandRegistration?.unregister?.();
112
112
  commandRegistration = registerSkillActions(api, refreshStatus, nextMode);
@@ -1 +1 @@
1
- {"version":3,"names":["createSignal","STATUS_REFRESH_INTERVAL_MS","requestRender","createWizardStatusSlot","loadStatus","registerCommandActions","api","actions","commandProvider","command","register","unregister","commands","createSharedSkillActions","refreshStatus","value","title","description","category","slash","name","onSelect","showLoading","createEditorSkillActions","registerSkillActions","mode","sharedActions","tui","status","setStatus","kind","registeredActionMode","commandRegistration","options","then","nextStatus","nextMode","snapshot","authState","role","slots","setInterval"],"sources":["../../src/tui/plugin.ts"],"sourcesContent":["import { createSignal } from 'solid-js';\nimport { STATUS_REFRESH_INTERVAL_MS } from './constants.js';\nimport { requestRender } from './rendering.js';\nimport { createWizardStatusSlot } from './slots.js';\nimport { loadStatus } from './status.js';\nimport type { RefreshStatus, StatusState, TuiCommand, TuiPlugin, TuiPluginApi } from './types.js';\n\ntype RegisteredActionMode = 'shared' | 'editor';\ntype CommandRegistration = {\n unregister: (() => void) | null;\n};\n\nconst registerCommandActions = (api: TuiPluginApi, actions: TuiCommand[]): CommandRegistration | null => {\n const commandProvider = () => actions;\n\n if (api.command?.register) {\n return { unregister: api.command.register(commandProvider) ?? null };\n }\n\n if (api.commands?.register) {\n return { unregister: api.commands.register(commandProvider) ?? null };\n }\n\n return null;\n};\n\nconst createSharedSkillActions = (refreshStatus: RefreshStatus): TuiCommand[] => [\n {\n value: 'opencode-wizard.status',\n title: 'Wizard: status',\n description: 'Refresh plugin auth, backend, catalog, source, and workspace-resolution status via opencode_wizard_status.',\n category: 'Wizard',\n slash: {\n name: 'wizard-status',\n },\n onSelect: () => refreshStatus({ showLoading: true }),\n },\n {\n value: 'opencode-wizard.fetch-published-skill',\n title: 'Wizard: fetch published skill',\n description: 'Fetch wizard-listed skill bodies/details with opencode_wizard_published_skills_fetch; pass refresh: true for fresh backend data.',\n category: 'Wizard',\n slash: {\n name: 'wizard-fetch-skill',\n },\n onSelect: () => refreshStatus({ showLoading: true }),\n },\n {\n value: 'opencode-wizard.manage-skill-preference',\n title: 'Wizard: manage skill preference',\n description:\n 'Use opencode_wizard_published_skill_preference_set to install, uninstall, ignore, or unignore a published skill for project/global scope.',\n category: 'Wizard',\n slash: {\n name: 'wizard-manage-skill',\n },\n onSelect: () => refreshStatus({ showLoading: true }),\n },\n];\n\nconst createEditorSkillActions = (refreshStatus: RefreshStatus): TuiCommand[] => [\n {\n value: 'opencode-wizard.editor.create-or-update-skill',\n title: 'Wizard: create/update skill from markdown',\n description:\n 'Canonical EDITOR flow: call opencode_wizard_editor_create_or_update_skill with complete SKILL.md markdownContent; no local seed file required.',\n category: 'Wizard',\n slash: {\n name: 'wizard-create-skill',\n },\n onSelect: () => refreshStatus({ showLoading: true }),\n },\n {\n value: 'opencode-wizard.editor.import-artifact',\n title: 'Wizard: import external artifact',\n description:\n 'External source flow: call opencode_wizard_artifact_import for SKILL or DESIGN_DOC URLs/command-like sources; no project files are written.',\n category: 'Wizard',\n slash: {\n name: 'wizard-import-artifact',\n },\n onSelect: () => refreshStatus({ showLoading: true }),\n },\n {\n value: 'opencode-wizard.editor.publish-seed-skill',\n title: 'Wizard: publish local seed skill',\n description:\n 'Legacy seed flow: call opencode_wizard_editor_publish_skill for .opencode/skills/<slug>/SKILL.md when a local seed already exists.',\n category: 'Wizard',\n slash: {\n name: 'wizard-publish-seed',\n },\n onSelect: () => refreshStatus({ showLoading: true }),\n },\n];\n\nconst registerSkillActions = (\n api: TuiPluginApi,\n refreshStatus: RefreshStatus,\n mode: RegisteredActionMode,\n): CommandRegistration | null => {\n const sharedActions = createSharedSkillActions(refreshStatus);\n const actions = mode === 'editor' ? [...sharedActions, ...createEditorSkillActions(refreshStatus)] : sharedActions;\n\n return registerCommandActions(api, actions);\n};\n\nexport const tui: TuiPlugin = async (api) => {\n const [status, setStatus] = createSignal<StatusState>({ kind: 'loading' });\n let registeredActionMode: RegisteredActionMode | null = null;\n let commandRegistration: CommandRegistration | null = null;\n const refreshStatus: RefreshStatus = (options) => {\n if (options?.showLoading) {\n setStatus({ kind: 'loading' });\n requestRender(api);\n }\n\n void loadStatus(api).then((nextStatus) => {\n setStatus(nextStatus);\n if (nextStatus.kind === 'ready') {\n const nextMode: RegisteredActionMode = nextStatus.snapshot.authState.role === 'EDITOR' ? 'editor' : 'shared';\n if (registeredActionMode !== nextMode) {\n commandRegistration?.unregister?.();\n commandRegistration = registerSkillActions(api, refreshStatus, nextMode);\n registeredActionMode = commandRegistration ? nextMode : null;\n }\n }\n requestRender(api);\n });\n };\n\n api.slots.register(createWizardStatusSlot(api, status, refreshStatus));\n refreshStatus();\n setInterval(refreshStatus, STATUS_REFRESH_INTERVAL_MS);\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createSignal","STATUS_REFRESH_INTERVAL_MS","requestRender","createWizardStatusSlot","loadStatus","registerCommandActions","api","actions","commandProvider","command","register","unregister","commands","createSharedSkillActions","refreshStatus","value","title","description","category","slash","name","onSelect","showLoading","createEditorSkillActions","registerSkillActions","mode","sharedActions","tui","status","setStatus","kind","registeredActionMode","commandRegistration","options","then","nextStatus","nextMode","snapshot","availableTools","includes","slots","setInterval"],"sources":["../../src/tui/plugin.ts"],"sourcesContent":["import { createSignal } from 'solid-js';\nimport { STATUS_REFRESH_INTERVAL_MS } from './constants.js';\nimport { requestRender } from './rendering.js';\nimport { createWizardStatusSlot } from './slots.js';\nimport { loadStatus } from './status.js';\nimport type { RefreshStatus, StatusState, TuiCommand, TuiPlugin, TuiPluginApi } from './types.js';\n\ntype RegisteredActionMode = 'shared' | 'editor';\ntype CommandRegistration = {\n unregister: (() => void) | null;\n};\n\nconst registerCommandActions = (api: TuiPluginApi, actions: TuiCommand[]): CommandRegistration | null => {\n const commandProvider = () => actions;\n\n if (api.command?.register) {\n return { unregister: api.command.register(commandProvider) ?? null };\n }\n\n if (api.commands?.register) {\n return { unregister: api.commands.register(commandProvider) ?? null };\n }\n\n return null;\n};\n\nconst createSharedSkillActions = (refreshStatus: RefreshStatus): TuiCommand[] => [\n {\n value: 'opencode-wizard.status',\n title: 'Wizard: status',\n description: 'Refresh plugin auth, backend, catalog, source, and workspace-resolution status via opencode_wizard_status.',\n category: 'Wizard',\n slash: {\n name: 'wizard-status',\n },\n onSelect: () => refreshStatus({ showLoading: true }),\n },\n {\n value: 'opencode-wizard.fetch-published-skill',\n title: 'Wizard: fetch published skill',\n description: 'Fetch wizard-listed skill bodies/details with opencode_wizard_published_skills_fetch; pass refresh: true for fresh backend data.',\n category: 'Wizard',\n slash: {\n name: 'wizard-fetch-skill',\n },\n onSelect: () => refreshStatus({ showLoading: true }),\n },\n {\n value: 'opencode-wizard.manage-skill-preference',\n title: 'Wizard: manage skill preference',\n description:\n 'Use opencode_wizard_published_skill_preference_set to install, uninstall, ignore, or unignore a published skill for project/global scope.',\n category: 'Wizard',\n slash: {\n name: 'wizard-manage-skill',\n },\n onSelect: () => refreshStatus({ showLoading: true }),\n },\n];\n\nconst createEditorSkillActions = (refreshStatus: RefreshStatus): TuiCommand[] => [\n {\n value: 'opencode-wizard.editor.create-or-update-skill',\n title: 'Wizard: create/update skill from markdown',\n description:\n 'Canonical EDITOR flow: call opencode_wizard_editor_create_or_update_skill with complete SKILL.md markdownContent; no local seed file required.',\n category: 'Wizard',\n slash: {\n name: 'wizard-create-skill',\n },\n onSelect: () => refreshStatus({ showLoading: true }),\n },\n {\n value: 'opencode-wizard.editor.import-artifact',\n title: 'Wizard: import external artifact',\n description:\n 'External source flow: call opencode_wizard_artifact_import for SKILL or DESIGN_DOC URLs/command-like sources; no project files are written.',\n category: 'Wizard',\n slash: {\n name: 'wizard-import-artifact',\n },\n onSelect: () => refreshStatus({ showLoading: true }),\n },\n {\n value: 'opencode-wizard.editor.publish-seed-skill',\n title: 'Wizard: publish local seed skill',\n description:\n 'Legacy seed flow: call opencode_wizard_editor_publish_skill for .opencode/skills/<slug>/SKILL.md when a local seed already exists.',\n category: 'Wizard',\n slash: {\n name: 'wizard-publish-seed',\n },\n onSelect: () => refreshStatus({ showLoading: true }),\n },\n];\n\nconst registerSkillActions = (\n api: TuiPluginApi,\n refreshStatus: RefreshStatus,\n mode: RegisteredActionMode,\n): CommandRegistration | null => {\n const sharedActions = createSharedSkillActions(refreshStatus);\n const actions = mode === 'editor' ? [...sharedActions, ...createEditorSkillActions(refreshStatus)] : sharedActions;\n\n return registerCommandActions(api, actions);\n};\n\nexport const tui: TuiPlugin = async (api) => {\n const [status, setStatus] = createSignal<StatusState>({ kind: 'loading' });\n let registeredActionMode: RegisteredActionMode | null = null;\n let commandRegistration: CommandRegistration | null = null;\n const refreshStatus: RefreshStatus = (options) => {\n if (options?.showLoading) {\n setStatus({ kind: 'loading' });\n requestRender(api);\n }\n\n void loadStatus(api).then((nextStatus) => {\n setStatus(nextStatus);\n if (nextStatus.kind === 'ready') {\n const nextMode: RegisteredActionMode = nextStatus.snapshot.availableTools.includes(\n 'opencode_wizard_editor_create_or_update_skill',\n )\n ? 'editor'\n : 'shared';\n if (registeredActionMode !== nextMode) {\n commandRegistration?.unregister?.();\n commandRegistration = registerSkillActions(api, refreshStatus, nextMode);\n registeredActionMode = commandRegistration ? nextMode : null;\n }\n }\n requestRender(api);\n });\n };\n\n api.slots.register(createWizardStatusSlot(api, status, refreshStatus));\n refreshStatus();\n setInterval(refreshStatus, STATUS_REFRESH_INTERVAL_MS);\n};\n"],"mappings":"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","ignoreList":[]}
@@ -5,5 +5,6 @@ export type SkillListRow = {
5
5
  label: string;
6
6
  value: string;
7
7
  };
8
+ export declare const getUserRoleRow: (snapshot: PluginStatusSnapshot) => SkillListRow;
8
9
  export declare const getSkillListRows: (snapshot: PluginStatusSnapshot) => SkillListRow[];
9
10
  export declare const getSkillActionRows: (snapshot: PluginStatusSnapshot) => SkillListRow[];
@@ -6,6 +6,15 @@ export const getInstallableNotInstalledSkills = snapshot => {
6
6
  const ignoredSkillSlugs = new Set(snapshot.ignoredPublishedSkills.skills.map(skill => skill.skillSlug));
7
7
  return installableSkills.filter(skill => !activeSkillSlugs.has(skill.skillSlug) && !ignoredSkillSlugs.has(skill.skillSlug));
8
8
  };
9
+ const getUserRoleLabel = snapshot => {
10
+ if (snapshot.authState.role) return snapshot.authState.role;
11
+ if (snapshot.authState.status === 'authenticated') return 'USER';
12
+ return 'none';
13
+ };
14
+ export const getUserRoleRow = snapshot => ({
15
+ label: 'role',
16
+ value: getUserRoleLabel(snapshot)
17
+ });
9
18
  const compactSkillName = skill => {
10
19
  const name = skill.skillName.trim() || skill.artifactName.trim() || skill.skillSlug;
11
20
  if (name === skill.skillSlug) return name;
@@ -37,18 +46,5 @@ export const getSkillListRows = snapshot => {
37
46
  value: `${rows.length - MAX_LISTED_SKILLS} hidden · use opencode_wizard_published_skills_fetch`
38
47
  }];
39
48
  };
40
- export const getSkillActionRows = snapshot => {
41
- const rows = [{
42
- label: 'commands',
43
- value: 'Wizard: status · fetch skill · manage preference'
44
- }, {
45
- label: 'manage',
46
- value: 'install/uninstall · ignore/unignore via preference_set'
47
- }];
48
- if (snapshot.authState.role !== 'EDITOR') return rows;
49
- return [...rows, {
50
- label: 'editor',
51
- value: 'create/update markdown · import external · publish seed'
52
- }];
53
- };
49
+ export const getSkillActionRows = snapshot => [getUserRoleRow(snapshot)];
54
50
  //# sourceMappingURL=skill-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MAX_LISTED_SKILLS","getInstallableNotInstalledSkills","snapshot","installableSkills","installableCatalog","skills","length","activeSkillSlugs","Set","catalog","map","skill","skillSlug","ignoredSkillSlugs","ignoredPublishedSkills","filter","has","compactSkillName","name","skillName","trim","artifactName","toEffectiveSkillLabel","assignmentSource","includes","contextKind","getSkillListRows","activeRows","label","value","availableRows","ignoredRows","rows","slice","getSkillActionRows","authState","role"],"sources":["../../src/tui/skill-helpers.ts"],"sourcesContent":["import type { PluginStatusSnapshot } from '../server.js';\nimport type { PublishedSkillSummary } from './types.js';\n\nconst MAX_LISTED_SKILLS = 6;\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\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): SkillListRow[] => {\n const activeRows = (snapshot.catalog?.skills ?? []).map((skill) => ({\n label: toEffectiveSkillLabel(skill),\n value: compactSkillName(skill),\n }));\n const availableRows = getInstallableNotInstalledSkills(snapshot).map((skill) => ({\n label: 'available',\n value: compactSkillName(skill),\n }));\n const ignoredRows = snapshot.ignoredPublishedSkills.skills.map((skill) => ({\n label: 'ignored',\n value: compactSkillName(skill),\n }));\n const rows = [...activeRows, ...availableRows, ...ignoredRows];\n if (rows.length <= MAX_LISTED_SKILLS) return rows;\n\n return [\n ...rows.slice(0, MAX_LISTED_SKILLS),\n {\n label: 'more',\n value: `${rows.length - MAX_LISTED_SKILLS} hidden · use opencode_wizard_published_skills_fetch`,\n },\n ];\n};\n\nexport const getSkillActionRows = (snapshot: PluginStatusSnapshot): SkillListRow[] => {\n const rows: SkillListRow[] = [\n {\n label: 'commands',\n value: 'Wizard: status · fetch skill · manage preference',\n },\n {\n label: 'manage',\n value: 'install/uninstall · ignore/unignore via preference_set',\n },\n ];\n\n if (snapshot.authState.role !== 'EDITOR') return rows;\n\n return [\n ...rows,\n {\n label: 'editor',\n value: 'create/update markdown · import external · publish seed',\n },\n ];\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["MAX_LISTED_SKILLS","getInstallableNotInstalledSkills","snapshot","installableSkills","installableCatalog","skills","length","activeSkillSlugs","Set","catalog","map","skill","skillSlug","ignoredSkillSlugs","ignoredPublishedSkills","filter","has","getUserRoleLabel","authState","role","status","getUserRoleRow","label","value","compactSkillName","name","skillName","trim","artifactName","toEffectiveSkillLabel","assignmentSource","includes","contextKind","getSkillListRows","activeRows","availableRows","ignoredRows","rows","slice","getSkillActionRows"],"sources":["../../src/tui/skill-helpers.ts"],"sourcesContent":["import type { PluginStatusSnapshot } from '../server.js';\nimport type { PublishedSkillSummary } from './types.js';\n\nconst MAX_LISTED_SKILLS = 6;\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\nconst getUserRoleLabel = (snapshot: PluginStatusSnapshot): string => {\n if (snapshot.authState.role) return snapshot.authState.role;\n if (snapshot.authState.status === 'authenticated') return 'USER';\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): SkillListRow[] => {\n const activeRows = (snapshot.catalog?.skills ?? []).map((skill) => ({\n label: toEffectiveSkillLabel(skill),\n value: compactSkillName(skill),\n }));\n const availableRows = getInstallableNotInstalledSkills(snapshot).map((skill) => ({\n label: 'available',\n value: compactSkillName(skill),\n }));\n const ignoredRows = snapshot.ignoredPublishedSkills.skills.map((skill) => ({\n label: 'ignored',\n value: compactSkillName(skill),\n }));\n const rows = [...activeRows, ...availableRows, ...ignoredRows];\n if (rows.length <= MAX_LISTED_SKILLS) return rows;\n\n return [\n ...rows.slice(0, MAX_LISTED_SKILLS),\n {\n label: 'more',\n value: `${rows.length - MAX_LISTED_SKILLS} hidden · use opencode_wizard_published_skills_fetch`,\n },\n ];\n};\n\nexport const getSkillActionRows = (snapshot: PluginStatusSnapshot): SkillListRow[] => [getUserRoleRow(snapshot)];\n"],"mappings":"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","ignoreList":[]}
package/dist/tui/slots.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { createElement as _$createElement } from "@opentui/solid";
1
2
  import { createComponent as _$createComponent } from "@opentui/solid";
2
3
  import { Panel } from './components/common.js';
3
4
  import { SkillsRows } from './components/status-content.js';
@@ -16,18 +17,7 @@ export const createWizardStatusSlot = (api, status, _refreshStatus) => ({
16
17
  });
17
18
  }
18
19
  }),
19
- sidebar_content: (_ctx, _value) => _$createComponent(Panel, {
20
- title: "Wizard Skills",
21
- get theme() {
22
- return api.theme.current;
23
- },
24
- get children() {
25
- return _$createComponent(SkillsRows, {
26
- api: api,
27
- status: status
28
- });
29
- }
30
- })
20
+ sidebar_content: (_ctx, _value) => _$createElement("box")
31
21
  }
32
22
  });
33
23
  //# sourceMappingURL=slots.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Panel","SkillsRows","createWizardStatusSlot","api","status","_refreshStatus","order","slots","home_bottom","_$createComponent","title","theme","current","children","sidebar_content","_ctx","_value"],"sources":["../../src/tui/slots.tsx"],"sourcesContent":["import type { RefreshStatus, StatusState, TuiPluginApi, TuiSlotContext, TuiSlotPlugin } from './types.js';\nimport { Panel } from './components/common.js';\nimport { SkillsRows } from './components/status-content.js';\n\nexport const createWizardStatusSlot = (\n api: TuiPluginApi,\n status: () => StatusState,\n _refreshStatus: RefreshStatus,\n): TuiSlotPlugin => ({\n order: 240,\n slots: {\n home_bottom: () => (\n <Panel title=\"Wizard Skills\" theme={api.theme.current}>\n <SkillsRows api={api} status={status} />\n </Panel>\n ),\n sidebar_content: (_ctx: TuiSlotContext, _value: { session_id: string }) => (\n <Panel title=\"Wizard Skills\" theme={api.theme.current}>\n <SkillsRows api={api} status={status} />\n </Panel>\n ),\n },\n});\n"],"mappings":";AACA,SAASA,KAAK,QAAQ,wBAAwB;AAC9C,SAASC,UAAU,QAAQ,gCAAgC;AAE3D,OAAO,MAAMC,sBAAsB,GAAGA,CACpCC,GAAiB,EACjBC,MAAyB,EACzBC,cAA6B,MACV;EACnBC,KAAK,EAAE,GAAG;EACVC,KAAK,EAAE;IACLC,WAAW,EAAEA,CAAA,KAAAC,iBAAA,CACVT,KAAK;MAACU,KAAK;MAAA,IAAiBC,KAAKA,CAAA;QAAA,OAAER,GAAG,CAACQ,KAAK,CAACC,OAAO;MAAA;MAAA,IAAAC,SAAA;QAAA,OAAAJ,iBAAA,CAClDR,UAAU;UAACE,GAAG,EAAEA,GAAG;UAAEC,MAAM,EAAEA;QAAM;MAAA;IAAA,EAEvC;IACDU,eAAe,EAAEA,CAACC,IAAoB,EAAEC,MAA8B,KAAAP,iBAAA,CACnET,KAAK;MAACU,KAAK;MAAA,IAAiBC,KAAKA,CAAA;QAAA,OAAER,GAAG,CAACQ,KAAK,CAACC,OAAO;MAAA;MAAA,IAAAC,SAAA;QAAA,OAAAJ,iBAAA,CAClDR,UAAU;UAACE,GAAG,EAAEA,GAAG;UAAEC,MAAM,EAAEA;QAAM;MAAA;IAAA;EAG1C;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Panel","SkillsRows","createWizardStatusSlot","api","status","_refreshStatus","order","slots","home_bottom","_$createComponent","title","theme","current","children","sidebar_content","_ctx","_value","_$createElement"],"sources":["../../src/tui/slots.tsx"],"sourcesContent":["import type { RefreshStatus, StatusState, TuiPluginApi, TuiSlotContext, TuiSlotPlugin } from './types.js';\nimport { Panel } from './components/common.js';\nimport { SkillsRows } from './components/status-content.js';\n\nexport const createWizardStatusSlot = (\n api: TuiPluginApi,\n status: () => StatusState,\n _refreshStatus: RefreshStatus,\n): TuiSlotPlugin => ({\n order: 240,\n slots: {\n home_bottom: () => (\n <Panel title=\"Wizard Skills\" theme={api.theme.current}>\n <SkillsRows api={api} status={status} />\n </Panel>\n ),\n sidebar_content: (_ctx: TuiSlotContext, _value: { session_id: string }) => <box />,\n },\n});\n"],"mappings":";;AACA,SAASA,KAAK,QAAQ,wBAAwB;AAC9C,SAASC,UAAU,QAAQ,gCAAgC;AAE3D,OAAO,MAAMC,sBAAsB,GAAGA,CACpCC,GAAiB,EACjBC,MAAyB,EACzBC,cAA6B,MACV;EACnBC,KAAK,EAAE,GAAG;EACVC,KAAK,EAAE;IACLC,WAAW,EAAEA,CAAA,KAAAC,iBAAA,CACVT,KAAK;MAACU,KAAK;MAAA,IAAiBC,KAAKA,CAAA;QAAA,OAAER,GAAG,CAACQ,KAAK,CAACC,OAAO;MAAA;MAAA,IAAAC,SAAA;QAAA,OAAAJ,iBAAA,CAClDR,UAAU;UAACE,GAAG,EAAEA,GAAG;UAAEC,MAAM,EAAEA;QAAM;MAAA;IAAA,EAEvC;IACDU,eAAe,EAAEA,CAACC,IAAoB,EAAEC,MAA8B,KAAAC,eAAA;EACxE;AACF,CAAC,CAAC","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aexol/opencode-wizard",
3
- "version": "0.3.9",
3
+ "version": "0.3.10",
4
4
  "description": "OpenCode plugin for opencode-wizard published skills",
5
5
  "type": "module",
6
6
  "oc-plugin": [