@aexol/opencode-wizard 0.3.4 → 0.3.6

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.
Files changed (71) hide show
  1. package/README.md +11 -7
  2. package/dist/graphql-operations.d.ts +6 -2
  3. package/dist/graphql-operations.js +173 -156
  4. package/dist/graphql-operations.js.map +1 -1
  5. package/dist/plugin-tools.d.ts +37 -0
  6. package/dist/plugin-tools.js +58 -7
  7. package/dist/plugin-tools.js.map +1 -1
  8. package/dist/published-skills-system-note.js +3 -7
  9. package/dist/published-skills-system-note.js.map +1 -1
  10. package/dist/published-skills-terminology.d.ts +21 -0
  11. package/dist/published-skills-terminology.js +38 -0
  12. package/dist/published-skills-terminology.js.map +1 -0
  13. package/dist/published-skills-transform.d.ts +99 -2
  14. package/dist/published-skills-transform.js +91 -19
  15. package/dist/published-skills-transform.js.map +1 -1
  16. package/dist/server/auth-bootstrap.d.ts +7 -0
  17. package/dist/server/auth-bootstrap.js +89 -0
  18. package/dist/server/auth-bootstrap.js.map +1 -0
  19. package/dist/server/client.d.ts +30 -1
  20. package/dist/server/client.js +81 -1
  21. package/dist/server/client.js.map +1 -1
  22. package/dist/server/import-sources.d.ts +27 -0
  23. package/dist/server/import-sources.js +115 -0
  24. package/dist/server/import-sources.js.map +1 -0
  25. package/dist/server/preferences.d.ts +22 -0
  26. package/dist/server/preferences.js +121 -0
  27. package/dist/server/preferences.js.map +1 -0
  28. package/dist/server/runtime.d.ts +3 -22
  29. package/dist/server/runtime.js +567 -242
  30. package/dist/server/runtime.js.map +1 -1
  31. package/dist/server/types.d.ts +87 -0
  32. package/dist/server/types.js.map +1 -1
  33. package/dist/server.d.ts +1 -0
  34. package/dist/server.js +1 -0
  35. package/dist/server.js.map +1 -1
  36. package/dist/smoke-published-skills.js +4 -4
  37. package/dist/smoke-published-skills.js.map +1 -1
  38. package/dist/tui/components/common.d.ts +0 -1
  39. package/dist/tui/components/common.js +6 -29
  40. package/dist/tui/components/common.js.map +1 -1
  41. package/dist/tui/components/status-content.js +1 -1
  42. package/dist/tui/components/status-content.js.map +1 -1
  43. package/dist/tui/constants.d.ts +0 -5
  44. package/dist/tui/constants.js +0 -5
  45. package/dist/tui/constants.js.map +1 -1
  46. package/dist/tui/formatting.d.ts +0 -3
  47. package/dist/tui/formatting.js +1 -13
  48. package/dist/tui/formatting.js.map +1 -1
  49. package/dist/tui/skill-helpers.d.ts +1 -11
  50. package/dist/tui/skill-helpers.js +0 -41
  51. package/dist/tui/skill-helpers.js.map +1 -1
  52. package/dist/tui/slots.d.ts +1 -1
  53. package/dist/tui/slots.js +1 -24
  54. package/dist/tui/slots.js.map +1 -1
  55. package/dist/tui/status.js +2 -2
  56. package/dist/tui/status.js.map +1 -1
  57. package/dist/tui/types.d.ts +0 -19
  58. package/dist/tui/types.js.map +1 -1
  59. package/package.json +1 -1
  60. package/dist/tui/components/preference-action-notice-row.d.ts +0 -5
  61. package/dist/tui/components/preference-action-notice-row.js +0 -17
  62. package/dist/tui/components/preference-action-notice-row.js.map +0 -1
  63. package/dist/tui/components/skill-catalog-row.d.ts +0 -8
  64. package/dist/tui/components/skill-catalog-row.js +0 -124
  65. package/dist/tui/components/skill-catalog-row.js.map +0 -1
  66. package/dist/tui/components/wizard-skills-dialog-content.d.ts +0 -9
  67. package/dist/tui/components/wizard-skills-dialog-content.js +0 -219
  68. package/dist/tui/components/wizard-skills-dialog-content.js.map +0 -1
  69. package/dist/tui/components/wizard-skills-dialog.d.ts +0 -7
  70. package/dist/tui/components/wizard-skills-dialog.js +0 -156
  71. package/dist/tui/components/wizard-skills-dialog.js.map +0 -1
@@ -43,6 +43,13 @@ export type PublishedSkillCatalogResponse = {
43
43
  export type PublishedSkillDetailResponse = {
44
44
  pluginPublishedSkillVersionArtifact: PublishedSkillArtifactDetailPayload | null;
45
45
  };
46
+ export type WizardArtifactKind = 'SKILL' | 'DESIGN_DOC';
47
+ export type WizardArtifactCatalogResponse = {
48
+ pluginWizardArtifacts: WizardArtifactCatalogPayload;
49
+ };
50
+ export type WizardArtifactDetailResponse = {
51
+ pluginWizardArtifactVersion: WizardArtifactDetailPayload | null;
52
+ };
46
53
  export type PublishedSkillCatalogPayload = {
47
54
  workspace: {
48
55
  id: string;
@@ -57,6 +64,21 @@ export type PublishedSkillCatalogPayload = {
57
64
  catalogSkills: PublishedSkillInstallableCatalogItem[];
58
65
  userPreferences: PublishedSkillUserPreferences;
59
66
  };
67
+ export type WizardArtifactCatalogPayload = {
68
+ artifactKind: WizardArtifactKind;
69
+ workspace: PublishedSkillCatalogPayload['workspace'];
70
+ directoryPath: string;
71
+ artifacts: WizardArtifactCatalogItem[];
72
+ catalogArtifacts: WizardArtifactInstallableCatalogItem[];
73
+ artifactPreferences: WizardArtifactUserPreferences;
74
+ unsupportedReason?: string | null;
75
+ message?: string | null;
76
+ };
77
+ export type WizardArtifactUserPreferences = {
78
+ scopeKey: string;
79
+ userKey: string;
80
+ ignoredArtifacts: WizardArtifactCatalogItem[];
81
+ };
60
82
  export type PublishedSkillUserPreferences = {
61
83
  scopeKey: string;
62
84
  userKey: string;
@@ -68,6 +90,18 @@ export type CreateOrUpdateSkillFromMarkdownResponse = {
68
90
  success: boolean;
69
91
  skillSlug: string;
70
92
  skillVersionId: string | null;
93
+ artifactSlug: string | null;
94
+ artifactVersionId: string | null;
95
+ errors: string[];
96
+ };
97
+ };
98
+ export type ImportWizardArtifactSnapshotResponse = {
99
+ importWizardArtifactSnapshot: {
100
+ success: boolean;
101
+ skillSlug: string | null;
102
+ skillVersionId: string | null;
103
+ artifactSlug: string | null;
104
+ artifactVersionId: string | null;
71
105
  errors: string[];
72
106
  };
73
107
  };
@@ -106,6 +140,36 @@ export type PublishedSkillCatalogItem = {
106
140
  fileCount: number;
107
141
  };
108
142
  };
143
+ export type WizardArtifactInstallableCatalogItem = Pick<WizardArtifactCatalogItem, 'artifact' | 'artifactVersion'>;
144
+ export type WizardArtifactCatalogItem = {
145
+ assignmentSource: string;
146
+ assignmentType: string;
147
+ scopePath: string;
148
+ includeChildren?: boolean | null;
149
+ artifact: {
150
+ id: string;
151
+ kind: WizardArtifactKind;
152
+ slug: string;
153
+ name: string;
154
+ summary?: string | null;
155
+ whenToUse?: string | null;
156
+ status: string;
157
+ installPolicy: PublishedSkillInstallPolicy;
158
+ };
159
+ artifactVersion: {
160
+ id: string;
161
+ version: string;
162
+ title?: string | null;
163
+ summary?: string | null;
164
+ status: string;
165
+ frontmatterName: string;
166
+ frontmatterDescription: string;
167
+ checksum: string;
168
+ canonicalFilePath: string;
169
+ publishedAt: string;
170
+ fileCount: number;
171
+ };
172
+ };
109
173
  export type PublishedSkillArtifactFilePayload = {
110
174
  id: string;
111
175
  relativePath: string;
@@ -136,11 +200,24 @@ export type PublishedSkillDetailItem = PublishedSkillCatalogItem & {
136
200
  files: PublishedSkillArtifactFilePayload[];
137
201
  };
138
202
  };
203
+ export type WizardArtifactDetailItem = WizardArtifactCatalogItem & {
204
+ artifactVersion: WizardArtifactCatalogItem['artifactVersion'] & {
205
+ markdownBody: string;
206
+ renderedContent: string;
207
+ files: PublishedSkillArtifactFilePayload[];
208
+ };
209
+ };
139
210
  export type PublishedSkillArtifactDetailPayload = PublishedSkillCatalogItem['publishedArtifact'] & {
140
211
  markdownBody: string;
141
212
  renderedContent: string;
142
213
  files: PublishedSkillArtifactFilePayload[];
143
214
  };
215
+ export type WizardArtifactDetailPayload = WizardArtifactCatalogItem['artifactVersion'] & {
216
+ artifact: WizardArtifactCatalogItem['artifact'];
217
+ markdownBody: string;
218
+ renderedContent: string;
219
+ files: PublishedSkillArtifactFilePayload[];
220
+ };
144
221
  export type PublishedSkillArtifactDetailPurpose = 'TOOL_FETCH';
145
222
  export type GraphQLErrorItem = {
146
223
  message: string;
@@ -196,6 +273,16 @@ export type CacheEntry = {
196
273
  result: FetchResult;
197
274
  expiresAt: number;
198
275
  };
276
+ export type WizardArtifactFetchResult = {
277
+ ok: true;
278
+ status: 'ready';
279
+ authMode: 'session';
280
+ payload: WizardArtifactCatalogPayload;
281
+ fetchedAt: string;
282
+ source: 'network' | 'cache';
283
+ } | Extract<FetchResult, {
284
+ ok: false;
285
+ }>;
199
286
  export type DetailCacheEntry = {
200
287
  artifact: PublishedSkillArtifactDetailPayload;
201
288
  expiresAt: number;
@@ -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 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 PublishedSkillUserPreferences = {\n scopeKey: string;\n userKey: string;\n ignoredSkills: PublishedSkillCatalogItem[];\n};\n\nexport type PublishedSkillPreferenceScope = 'GLOBAL' | 'WORKSPACE';\n\nexport type CreateOrUpdateSkillFromMarkdownResponse = {\n createOrUpdateSkillFromMarkdown: {\n success: boolean;\n skillSlug: string;\n skillVersionId: string | null;\n errors: string[];\n };\n};\n\nexport type SetPublishedSkillPreferenceResponse = {\n setPublishedSkillPreference: PublishedSkillUserPreferences;\n};\n\nexport type PublishedSkillInstallableCatalogItem = Pick<\n PublishedSkillCatalogItem,\n 'skill' | 'skillVersion' | 'publishedArtifact'\n>;\n\nexport type PublishedSkillCatalogItem = {\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren?: boolean | null;\n skill: {\n id: string;\n slug: string;\n name: string;\n summary?: string | null;\n whenToUse?: string | null;\n status: string;\n installPolicy: PublishedSkillInstallPolicy;\n tags: PublishedSkillTag[];\n };\n skillVersion: {\n id: string;\n version: string;\n title?: string | null;\n summary?: string | null;\n status: string;\n };\n publishedArtifact: {\n id: string;\n frontmatterName: string;\n frontmatterDescription: string;\n checksum: string;\n publishedAt: string;\n fileCount: number;\n };\n};\n\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 PublishedSkillArtifactDetailPayload = PublishedSkillCatalogItem['publishedArtifact'] & {\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 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};\n\nexport type DetailCacheEntry = {\n artifact: PublishedSkillArtifactDetailPayload;\n expiresAt: number;\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 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 createOrUpdateSkillFromMarkdown: {\n success: boolean;\n skillSlug: string;\n skillVersionId: string | null;\n artifactSlug: string | null;\n artifactVersionId: string | null;\n errors: string[];\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 = Pick<\n PublishedSkillCatalogItem,\n 'skill' | 'skillVersion' | 'publishedArtifact'\n>;\n\nexport type PublishedSkillCatalogItem = {\n assignmentSource: string;\n assignmentType: string;\n scopePath: string;\n includeChildren?: boolean | null;\n skill: {\n id: string;\n slug: string;\n name: string;\n summary?: string | null;\n whenToUse?: string | null;\n status: string;\n installPolicy: PublishedSkillInstallPolicy;\n tags: PublishedSkillTag[];\n };\n skillVersion: {\n id: string;\n version: string;\n title?: string | null;\n summary?: string | null;\n status: string;\n };\n publishedArtifact: {\n id: string;\n frontmatterName: string;\n frontmatterDescription: string;\n checksum: string;\n publishedAt: string;\n fileCount: number;\n };\n};\n\nexport type WizardArtifactInstallableCatalogItem = Pick<\n WizardArtifactCatalogItem,\n 'artifact' | 'artifactVersion'\n>;\n\nexport type WizardArtifactCatalogItem = {\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 canonicalFilePath: string;\n publishedAt: string;\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 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};\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};\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":[]}
package/dist/server.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { AVAILABLE_PUBLISHED_SKILL_TOOLS, resolveAvailableTools, type PublishedSkillFetchArgs, } from './plugin-tools.js';
2
2
  export { buildSkillMarkdown, parseRequestedSkillArgs, selectPublishedSkills, toPublishedSkillDetail, } from './published-skills-transform.js';
3
+ export { planWizardArtifactImport } from './server/import-sources.js';
3
4
  export { PLUGIN_ID, NATIVE_SKILLS_URL_COMPATIBILITY, buildSystemNote, resolveConfig, resolvePluginStatusSnapshot, resolvePluginStatusSnapshotWithAuthBootstrap, setPublishedSkillIgnored, setPublishedSkillInstalled, toPluginAuthStateSummary, toPublishedSkillCatalog, type NativeSkillsUrlCompatibility, type PluginAuthStateSummary, type PluginStatusSnapshot, type PublishedSkillCatalogItem, type PublishedSkillCatalogPayload, type PublishedSkillDetailItem, type PublishedSkillInstallableCatalogItem, } from './server/runtime.js';
4
5
  declare const _default: {
5
6
  id: string;
package/dist/server.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { AVAILABLE_PUBLISHED_SKILL_TOOLS, resolveAvailableTools } from './plugin-tools.js';
2
2
  export { buildSkillMarkdown, parseRequestedSkillArgs, selectPublishedSkills, toPublishedSkillDetail } from './published-skills-transform.js';
3
+ export { planWizardArtifactImport } from './server/import-sources.js';
3
4
  export { PLUGIN_ID, NATIVE_SKILLS_URL_COMPATIBILITY, buildSystemNote, resolveConfig, resolvePluginStatusSnapshot, resolvePluginStatusSnapshotWithAuthBootstrap, setPublishedSkillIgnored, setPublishedSkillInstalled, toPluginAuthStateSummary, toPublishedSkillCatalog } from './server/runtime.js';
4
5
  import { PLUGIN_ID, OpencodeWizardSkillsPlugin } from './server/runtime.js';
5
6
  export default {
@@ -1 +1 @@
1
- {"version":3,"names":["AVAILABLE_PUBLISHED_SKILL_TOOLS","resolveAvailableTools","buildSkillMarkdown","parseRequestedSkillArgs","selectPublishedSkills","toPublishedSkillDetail","PLUGIN_ID","NATIVE_SKILLS_URL_COMPATIBILITY","buildSystemNote","resolveConfig","resolvePluginStatusSnapshot","resolvePluginStatusSnapshotWithAuthBootstrap","setPublishedSkillIgnored","setPublishedSkillInstalled","toPluginAuthStateSummary","toPublishedSkillCatalog","OpencodeWizardSkillsPlugin","id","server"],"sources":["../src/server.ts"],"sourcesContent":["export {\n AVAILABLE_PUBLISHED_SKILL_TOOLS,\n resolveAvailableTools,\n type PublishedSkillFetchArgs,\n} from './plugin-tools.js';\nexport {\n buildSkillMarkdown,\n parseRequestedSkillArgs,\n selectPublishedSkills,\n toPublishedSkillDetail,\n} from './published-skills-transform.js';\nexport {\n PLUGIN_ID,\n NATIVE_SKILLS_URL_COMPATIBILITY,\n buildSystemNote,\n resolveConfig,\n resolvePluginStatusSnapshot,\n resolvePluginStatusSnapshotWithAuthBootstrap,\n setPublishedSkillIgnored,\n setPublishedSkillInstalled,\n toPluginAuthStateSummary,\n toPublishedSkillCatalog,\n type NativeSkillsUrlCompatibility,\n type PluginAuthStateSummary,\n type PluginStatusSnapshot,\n type PublishedSkillCatalogItem,\n type PublishedSkillCatalogPayload,\n type PublishedSkillDetailItem,\n type PublishedSkillInstallableCatalogItem,\n} from './server/runtime.js';\nimport { PLUGIN_ID, OpencodeWizardSkillsPlugin } from './server/runtime.js';\n\nexport default {\n id: PLUGIN_ID,\n server: OpencodeWizardSkillsPlugin,\n};\n"],"mappings":"AAAA,SACEA,+BAA+B,EAC/BC,qBAAqB,QAEhB,mBAAmB;AAC1B,SACEC,kBAAkB,EAClBC,uBAAuB,EACvBC,qBAAqB,EACrBC,sBAAsB,QACjB,iCAAiC;AACxC,SACEC,SAAS,EACTC,+BAA+B,EAC/BC,eAAe,EACfC,aAAa,EACbC,2BAA2B,EAC3BC,4CAA4C,EAC5CC,wBAAwB,EACxBC,0BAA0B,EAC1BC,wBAAwB,EACxBC,uBAAuB,QAQlB,qBAAqB;AAC5B,SAAST,SAAS,EAAEU,0BAA0B,QAAQ,qBAAqB;AAE3E,eAAe;EACbC,EAAE,EAAEX,SAAS;EACbY,MAAM,EAAEF;AACV,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["AVAILABLE_PUBLISHED_SKILL_TOOLS","resolveAvailableTools","buildSkillMarkdown","parseRequestedSkillArgs","selectPublishedSkills","toPublishedSkillDetail","planWizardArtifactImport","PLUGIN_ID","NATIVE_SKILLS_URL_COMPATIBILITY","buildSystemNote","resolveConfig","resolvePluginStatusSnapshot","resolvePluginStatusSnapshotWithAuthBootstrap","setPublishedSkillIgnored","setPublishedSkillInstalled","toPluginAuthStateSummary","toPublishedSkillCatalog","OpencodeWizardSkillsPlugin","id","server"],"sources":["../src/server.ts"],"sourcesContent":["export {\n AVAILABLE_PUBLISHED_SKILL_TOOLS,\n resolveAvailableTools,\n type PublishedSkillFetchArgs,\n} from './plugin-tools.js';\nexport {\n buildSkillMarkdown,\n parseRequestedSkillArgs,\n selectPublishedSkills,\n toPublishedSkillDetail,\n} from './published-skills-transform.js';\nexport { planWizardArtifactImport } from './server/import-sources.js';\nexport {\n PLUGIN_ID,\n NATIVE_SKILLS_URL_COMPATIBILITY,\n buildSystemNote,\n resolveConfig,\n resolvePluginStatusSnapshot,\n resolvePluginStatusSnapshotWithAuthBootstrap,\n setPublishedSkillIgnored,\n setPublishedSkillInstalled,\n toPluginAuthStateSummary,\n toPublishedSkillCatalog,\n type NativeSkillsUrlCompatibility,\n type PluginAuthStateSummary,\n type PluginStatusSnapshot,\n type PublishedSkillCatalogItem,\n type PublishedSkillCatalogPayload,\n type PublishedSkillDetailItem,\n type PublishedSkillInstallableCatalogItem,\n} from './server/runtime.js';\nimport { PLUGIN_ID, OpencodeWizardSkillsPlugin } from './server/runtime.js';\n\nexport default {\n id: PLUGIN_ID,\n server: OpencodeWizardSkillsPlugin,\n};\n"],"mappings":"AAAA,SACEA,+BAA+B,EAC/BC,qBAAqB,QAEhB,mBAAmB;AAC1B,SACEC,kBAAkB,EAClBC,uBAAuB,EACvBC,qBAAqB,EACrBC,sBAAsB,QACjB,iCAAiC;AACxC,SAASC,wBAAwB,QAAQ,4BAA4B;AACrE,SACEC,SAAS,EACTC,+BAA+B,EAC/BC,eAAe,EACfC,aAAa,EACbC,2BAA2B,EAC3BC,4CAA4C,EAC5CC,wBAAwB,EACxBC,0BAA0B,EAC1BC,wBAAwB,EACxBC,uBAAuB,QAQlB,qBAAqB;AAC5B,SAAST,SAAS,EAAEU,0BAA0B,QAAQ,qBAAqB;AAE3E,eAAe;EACbC,EAAE,EAAEX,SAAS;EACbY,MAAM,EAAEF;AACV,CAAC","ignoreList":[]}
@@ -74,7 +74,7 @@ const assertEffectiveSkillGrouping = payload => {
74
74
  const catalog = toPublishedSkillCatalog(payload);
75
75
  const globalSkills = catalog.skills.filter(skill => skill.contextKind === 'global' && skill.assignmentSource === 'GLOBAL');
76
76
  const projectSkills = catalog.skills.filter(skill => skill.contextKind === 'project' && skill.assignmentSource === 'WORKSPACE');
77
- const userSkills = catalog.skills.filter(skill => skill.assignmentLabel === 'USER SCOPE assignment');
77
+ const userSkills = catalog.skills.filter(skill => skill.assignmentSource.startsWith('USER'));
78
78
  const userSkillsWithGlobalContextKind = userSkills.filter(skill => skill.contextKind === 'global');
79
79
  const installableSkillCount = payload.catalogSkills.length;
80
80
  assertEqual('published skill count', catalog.publishedSkillCount, 24);
@@ -190,14 +190,14 @@ const assertSystemNoteWizardFetchContract = (payload, config, detail) => {
190
190
  if (!systemNote) {
191
191
  throw new Error('Expected system note to be generated for published skills payload');
192
192
  }
193
- const requiredFragments = ['Workspace: opencode-wizard.', 'Active wizard skills:', 'Counts: 19 global, 1 project, 4 user, 0 other.', 'Wizard-listed skills are backend-published; fetch body via `opencode_wizard_published_skills_fetch` before use (`skills`/`skill` for multiple/single).', 'If native skill loading fails for a wizard name, fetch it.', 'Fetched wizard bodies are authoritative over local seed/native sources.', 'Global skills:', 'Project skills:', 'User skills:', 'opencode_wizard_published_skills_fetch'];
193
+ const requiredFragments = ['Workspace: opencode-wizard.', 'Active wizard skills:', 'Runtime: runtimeMode=tool_fetch_only; deliveryModel=backend_published_installed_effective_skills;', 'Counts: 19 wizard global, 1 wizard project, 4 wizard user, 0 other.', 'Wizard artifacts support artifact kinds `SKILL` and `DESIGN_DOC`;', 'Canonical wizard artifact tools are `opencode_wizard_catalog_fetch`, `opencode_wizard_artifact_fetch`, and `opencode_wizard_artifact_preference_set`;', 'Wizard-listed skills are backend-published and tool-fetch-only; MUST fetch the body via `opencode_wizard_published_skills_fetch` before use (`skills`/`skill` for multiple/single).', 'Same-named native OpenCode skills or local `.opencode/skills` seed bodies are not authoritative for wizard-listed skills;', 'Action recipe: call `opencode_wizard_published_skills_fetch` with no args for auth/catalog bootstrap', 'Source/cache/workspace hints:', 'Wizard global skills:', 'Wizard project skills:', 'Wizard user skills:', 'opencode_wizard_published_skills_fetch'];
194
194
  for (const fragment of requiredFragments) {
195
195
  if (systemNote.includes(fragment)) continue;
196
196
  throw new Error(`Expected system note to include prompt contract fragment: ${fragment}`);
197
197
  }
198
198
  return {
199
- includesNativeOpenCodeSkillRoute: systemNote.includes('fetch body via `opencode_wizard_published_skills_fetch` before use'),
200
- includesNativeSkillNotFoundEvidence: systemNote.includes('native skill loading fails'),
199
+ includesNativeOpenCodeSkillRoute: systemNote.includes('MUST fetch the body via `opencode_wizard_published_skills_fetch` before use'),
200
+ includesNativeSkillNotFoundEvidence: systemNote.includes('not authoritative for wizard-listed skills'),
201
201
  includesWizardFetchToolRoute: systemNote.includes('opencode_wizard_published_skills_fetch')
202
202
  };
203
203
  };
@@ -1 +1 @@
1
- {"version":3,"names":["buildSystemNote","buildSkillMarkdown","parseRequestedSkillArgs","resolveConfig","selectPublishedSkills","toPublishedSkillCatalog","toPublishedSkillDetail","fs","os","path","DEPLOY_BACKEND_ORIGIN","LOCAL_OVERRIDE_BACKEND_ORIGIN","BACKEND_ENV_KEYS","assertEqual","label","actual","expected","Error","String","createSkillItem","index","assignmentSource","slugPrefix","assignmentType","scopePath","includeChildren","skill","id","slug","name","summary","whenToUse","status","installPolicy","tags","skillVersion","version","title","publishedArtifact","frontmatterName","frontmatterDescription","checksum","publishedAt","fileCount","createInstallableSkillItem","item","createEffectiveSkillsSmokePayload","workspace","repositoryUrl","defaultBranch","directoryPath","skills","Array","from","length","_","catalogSkills","userPreferences","scopeKey","userKey","ignoredSkills","assertEffectiveSkillGrouping","payload","catalog","globalSkills","filter","contextKind","projectSkills","userSkills","assignmentLabel","userSkillsWithGlobalContextKind","installableSkillCount","publishedSkillCount","assignmentCounts","global","project","user","other","globalAssignmentCount","projectAssignmentCount","userAssignmentCount","installableNotInstalledCount","assertRequestedSkillArgParsing","expectedSkills","skillFieldSelection","skillsFieldSelection","mixedSelection","join","withBackendEnv","env","callback","previousValues","Map","key","set","process","value","Object","entries","undefined","assertBackendOriginResolution","isolatedWorktree","mkdtemp","tmpdir","defaultConfig","backendOrigin","portOnlyConfig","PORT","appUrlPlaceholderConfig","APP_URL","overrideConfig","OPENCODE_WIZARD_BACKEND_ORIGIN","defaultBackendOrigin","portOnlyBackendOrigin","appUrlPlaceholderBackendOrigin","explicitOverrideBackendOrigin","assertSystemNoteWizardFetchContract","config","detail","systemNote","workspaceResolution","requestedDirectory","repositoryRoot","fallbackWorkspaceSlug","cacheKey","fetchResult","ok","authMode","fetchedAt","source","requiredFragments","fragment","includes","includesNativeOpenCodeSkillRoute","includesNativeSkillNotFoundEvidence","includesWizardFetchToolRoute","run","detailSkillItem","detailItem","markdownBody","renderedContent","files","relativePath","contentType","content","size","sortOrder","cwd","backendOriginSmoke","requestedSkillArgParsingSmoke","effectiveSkillGroupingSmoke","selection","selectedItems","systemNoteWizardFetchContractSmoke","preview","split","slice","console","log","JSON","stringify","runtimeMode","graphqlUrl","availableTools","facets","selectedSkillCount","missingSkills","missingIdentifiers","selectedSkillSlug","skillSlug","selectedSkillTags","markdownDocumentIncludesFrontmatter","markdownDocument","startsWith","resourceFileCount","resources","markdownBodyIncludesContent"],"sources":["../src/smoke-published-skills.ts"],"sourcesContent":["import {\n buildSystemNote,\n buildSkillMarkdown,\n parseRequestedSkillArgs,\n resolveConfig,\n selectPublishedSkills,\n toPublishedSkillCatalog,\n toPublishedSkillDetail,\n type PublishedSkillCatalogPayload,\n type PublishedSkillCatalogItem,\n type PublishedSkillDetailItem,\n type PublishedSkillInstallableCatalogItem,\n} from './server.js';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst DEPLOY_BACKEND_ORIGIN = 'https://opencode-wizard.aexol.work';\nconst LOCAL_OVERRIDE_BACKEND_ORIGIN = 'http://localhost:19876';\n\ntype BackendEnvKey = 'OPENCODE_WIZARD_BACKEND_ORIGIN' | 'APP_URL' | 'PORT';\n\nconst BACKEND_ENV_KEYS: BackendEnvKey[] = ['OPENCODE_WIZARD_BACKEND_ORIGIN', 'APP_URL', 'PORT'];\n\nconst assertEqual = <TValue>(label: string, actual: TValue, expected: TValue): void => {\n if (actual === expected) return;\n\n throw new Error(`${label} mismatch: expected ${String(expected)}, received ${String(actual)}`);\n};\n\nconst createSkillItem = (index: number, assignmentSource: string, slugPrefix: string): PublishedSkillCatalogItem => ({\n assignmentSource,\n assignmentType: 'PATH',\n scopePath: '.',\n includeChildren: true,\n skill: {\n id: `skill-${slugPrefix}-${index}`,\n slug: `${slugPrefix}-${index}`,\n name: `${slugPrefix}-${index}`,\n summary: `${slugPrefix} skill ${index}`,\n whenToUse: `Use for ${slugPrefix} smoke coverage ${index}.`,\n status: 'ACTIVE',\n installPolicy: assignmentSource === 'GLOBAL' ? 'GLOBAL_CONTEXT' : 'PROJECT_INSTALLABLE',\n tags: [],\n },\n skillVersion: {\n id: `version-${slugPrefix}-${index}`,\n version: '1.0.0',\n title: 'Initial',\n summary: 'Initial publish',\n status: 'PUBLISHED',\n },\n publishedArtifact: {\n id: `artifact-${slugPrefix}-${index}`,\n frontmatterName: `${slugPrefix}-${index}`,\n frontmatterDescription: `${slugPrefix} smoke skill`,\n checksum: `checksum-${slugPrefix}-${index}`,\n publishedAt: '2026-04-22T00:00:00.000Z',\n fileCount: 1,\n },\n});\n\nconst createInstallableSkillItem = (index: number): PublishedSkillInstallableCatalogItem => {\n const item = createSkillItem(index, 'CATALOG', 'installable-skill');\n\n return {\n skill: item.skill,\n skillVersion: item.skillVersion,\n publishedArtifact: item.publishedArtifact,\n };\n};\n\nconst createEffectiveSkillsSmokePayload = (): PublishedSkillCatalogPayload => ({\n workspace: {\n id: 'workspace-effective-counts',\n slug: 'opencode-wizard',\n name: 'opencode-wizard',\n repositoryUrl: 'https://example.com/opencode-wizard.git',\n defaultBranch: 'main',\n status: 'ACTIVE',\n },\n directoryPath: '.',\n skills: [\n ...Array.from({ length: 19 }, (_, index) => createSkillItem(index + 1, 'GLOBAL', 'global-skill')),\n createSkillItem(1, 'WORKSPACE', 'workspace-skill'),\n createSkillItem(1, 'USER', 'user-skill'),\n createSkillItem(2, 'USER_GLOBAL', 'user-skill'),\n createSkillItem(3, 'USER_WORKSPACE', 'user-skill'),\n createSkillItem(4, 'USER_GLOBAL', 'user-skill'),\n ],\n catalogSkills: Array.from({ length: 11 }, (_, index) => createInstallableSkillItem(index + 1)),\n userPreferences: {\n scopeKey: 'workspace:workspace-effective-counts',\n userKey: 'user-1',\n ignoredSkills: [],\n },\n});\n\nconst assertEffectiveSkillGrouping = (payload: PublishedSkillCatalogPayload) => {\n const catalog = toPublishedSkillCatalog(payload);\n const globalSkills = catalog.skills.filter(\n (skill) => skill.contextKind === 'global' && skill.assignmentSource === 'GLOBAL',\n );\n const projectSkills = catalog.skills.filter(\n (skill) => skill.contextKind === 'project' && skill.assignmentSource === 'WORKSPACE',\n );\n const userSkills = catalog.skills.filter((skill) => skill.assignmentLabel === 'USER SCOPE assignment');\n const userSkillsWithGlobalContextKind = userSkills.filter((skill) => skill.contextKind === 'global');\n const installableSkillCount = payload.catalogSkills.length;\n\n assertEqual('published skill count', catalog.publishedSkillCount, 24);\n assertEqual('global assignment count', catalog.assignmentCounts.global, 19);\n assertEqual('project assignment count', catalog.assignmentCounts.project, 1);\n assertEqual('user assignment count', catalog.assignmentCounts.user, 4);\n assertEqual('other assignment count', catalog.assignmentCounts.other, 0);\n assertEqual('global grouped skill count', globalSkills.length, 19);\n assertEqual('project grouped skill count', projectSkills.length, 1);\n assertEqual('user grouped skill count', userSkills.length, 4);\n assertEqual('user grouped global context kind count', userSkillsWithGlobalContextKind.length, 0);\n assertEqual('installable/not installed catalog count', installableSkillCount, 11);\n\n return {\n globalAssignmentCount: catalog.assignmentCounts.global,\n projectAssignmentCount: catalog.assignmentCounts.project,\n userAssignmentCount: catalog.assignmentCounts.user,\n installableNotInstalledCount: installableSkillCount,\n };\n};\n\nconst assertRequestedSkillArgParsing = () => {\n const expectedSkills = ['frontend-components', 'frontend-styles', 'frontend-navigation'];\n const skillFieldSelection = parseRequestedSkillArgs({\n skill: 'frontend-components,frontend-styles\\nfrontend-navigation',\n });\n const skillsFieldSelection = parseRequestedSkillArgs({\n skills: 'frontend-components,frontend-styles\\nfrontend-navigation',\n });\n const mixedSelection = parseRequestedSkillArgs({\n skill: 'frontend-components, frontend-styles',\n skills: 'frontend-styles\\nfrontend-navigation',\n });\n\n assertEqual('skill field delimited selection', skillFieldSelection.join('|'), expectedSkills.join('|'));\n assertEqual('skills field delimited selection', skillsFieldSelection.join('|'), expectedSkills.join('|'));\n assertEqual('mixed field deduplicated selection', mixedSelection.join('|'), expectedSkills.join('|'));\n\n return {\n skillFieldSelection,\n skillsFieldSelection,\n mixedSelection,\n };\n};\n\nconst withBackendEnv = async <TResult>(\n env: Partial<Record<BackendEnvKey, string>>,\n callback: () => Promise<TResult>,\n): Promise<TResult> => {\n const previousValues = new Map<BackendEnvKey, string | undefined>();\n\n for (const key of BACKEND_ENV_KEYS) {\n previousValues.set(key, process.env[key]);\n delete process.env[key];\n }\n\n for (const [key, value] of Object.entries(env)) {\n process.env[key as BackendEnvKey] = value;\n }\n\n try {\n return await callback();\n } finally {\n for (const [key, value] of previousValues) {\n if (value === undefined) {\n delete process.env[key];\n continue;\n }\n\n process.env[key] = value;\n }\n }\n};\n\nconst assertBackendOriginResolution = async () => {\n const isolatedWorktree = await fs.mkdtemp(path.join(os.tmpdir(), 'opencode-wizard-plugin-smoke-'));\n\n const defaultConfig = await withBackendEnv({}, () => resolveConfig(isolatedWorktree));\n if (defaultConfig.backendOrigin !== DEPLOY_BACKEND_ORIGIN) {\n throw new Error(\n `Expected default backend origin ${DEPLOY_BACKEND_ORIGIN}, received ${defaultConfig.backendOrigin}`,\n );\n }\n\n const portOnlyConfig = await withBackendEnv({ PORT: '19876' }, () => resolveConfig(isolatedWorktree));\n if (portOnlyConfig.backendOrigin !== DEPLOY_BACKEND_ORIGIN) {\n throw new Error(\n `Expected PORT-only backend origin to stay ${DEPLOY_BACKEND_ORIGIN}, received ${portOnlyConfig.backendOrigin}`,\n );\n }\n\n const appUrlPlaceholderConfig = await withBackendEnv({ APP_URL: 'https://yourdomain.com' }, () =>\n resolveConfig(isolatedWorktree),\n );\n if (appUrlPlaceholderConfig.backendOrigin !== DEPLOY_BACKEND_ORIGIN) {\n throw new Error(\n `Expected APP_URL placeholder backend origin to stay ${DEPLOY_BACKEND_ORIGIN}, received ${appUrlPlaceholderConfig.backendOrigin}`,\n );\n }\n\n const overrideConfig = await withBackendEnv({ OPENCODE_WIZARD_BACKEND_ORIGIN: LOCAL_OVERRIDE_BACKEND_ORIGIN }, () =>\n resolveConfig(isolatedWorktree),\n );\n if (overrideConfig.backendOrigin !== LOCAL_OVERRIDE_BACKEND_ORIGIN) {\n throw new Error(\n `Expected explicit backend override ${LOCAL_OVERRIDE_BACKEND_ORIGIN}, received ${overrideConfig.backendOrigin}`,\n );\n }\n\n return {\n defaultBackendOrigin: defaultConfig.backendOrigin,\n portOnlyBackendOrigin: portOnlyConfig.backendOrigin,\n appUrlPlaceholderBackendOrigin: appUrlPlaceholderConfig.backendOrigin,\n explicitOverrideBackendOrigin: overrideConfig.backendOrigin,\n };\n};\n\nconst assertSystemNoteWizardFetchContract = (\n payload: PublishedSkillCatalogPayload,\n config: Awaited<ReturnType<typeof resolveConfig>>,\n detail: NonNullable<ReturnType<typeof toPublishedSkillDetail>>,\n) => {\n const systemNote = buildSystemNote(\n {\n directoryPath: '.',\n workspaceResolution: {\n requestedDirectory: '.',\n repositoryRoot: '.',\n repositoryUrl: 'https://example.com/opencode-wizard.git',\n fallbackWorkspaceSlug: null,\n directoryPath: '.',\n cacheKey: 'smoke-cache-key',\n },\n fetchResult: {\n ok: true,\n status: 'ready',\n authMode: 'session',\n payload,\n fetchedAt: '2026-04-22T00:00:00.000Z',\n source: 'cache',\n },\n },\n config,\n [detail],\n );\n\n if (!systemNote) {\n throw new Error('Expected system note to be generated for published skills payload');\n }\n\n const requiredFragments = [\n 'Workspace: opencode-wizard.',\n 'Active wizard skills:',\n 'Counts: 19 global, 1 project, 4 user, 0 other.',\n 'Wizard-listed skills are backend-published; fetch body via `opencode_wizard_published_skills_fetch` before use (`skills`/`skill` for multiple/single).',\n 'If native skill loading fails for a wizard name, fetch it.',\n 'Fetched wizard bodies are authoritative over local seed/native sources.',\n 'Global skills:',\n 'Project skills:',\n 'User skills:',\n 'opencode_wizard_published_skills_fetch',\n ];\n\n for (const fragment of requiredFragments) {\n if (systemNote.includes(fragment)) continue;\n\n throw new Error(`Expected system note to include prompt contract fragment: ${fragment}`);\n }\n\n return {\n includesNativeOpenCodeSkillRoute: systemNote.includes('fetch body via `opencode_wizard_published_skills_fetch` before use'),\n includesNativeSkillNotFoundEvidence: systemNote.includes('native skill loading fails'),\n includesWizardFetchToolRoute: systemNote.includes('opencode_wizard_published_skills_fetch'),\n };\n};\n\nconst run = async () => {\n const payload: PublishedSkillCatalogPayload = createEffectiveSkillsSmokePayload();\n const detailSkillItem = payload.skills[0];\n detailSkillItem.skill.slug = 'backend-auth';\n detailSkillItem.skill.name = 'backend-auth';\n detailSkillItem.skill.summary = 'Backend auth skill';\n detailSkillItem.skill.whenToUse = 'Use for JWT cookie sessions and protected backend resolver work.';\n detailSkillItem.publishedArtifact.frontmatterName = 'backend-auth';\n detailSkillItem.publishedArtifact.frontmatterDescription = 'JWT auth skill';\n detailSkillItem.publishedArtifact.fileCount = 2;\n const detailItem: PublishedSkillDetailItem = {\n ...detailSkillItem,\n publishedArtifact: {\n ...detailSkillItem.publishedArtifact,\n markdownBody: '## Mock skill\\n\\nThis is a mock published skill.',\n renderedContent: '<h2>Mock skill</h2>',\n files: [\n {\n id: 'artifact-file-1',\n relativePath: 'SKILL.md',\n contentType: 'text/markdown; charset=utf-8',\n content: '---\\nname: \"backend-auth\"\\ndescription: \"JWT auth skill\"\\n---\\n\\n## Mock skill\\n',\n checksum: 'file-checksum-1',\n size: 74,\n sortOrder: 0,\n },\n {\n id: 'artifact-file-2',\n relativePath: 'resource.md',\n contentType: 'text/markdown; charset=utf-8',\n content: '# Resource\\n',\n checksum: 'file-checksum-2',\n size: 11,\n sortOrder: 1,\n },\n ],\n },\n };\n\n const config = await resolveConfig(process.cwd());\n const backendOriginSmoke = await assertBackendOriginResolution();\n const requestedSkillArgParsingSmoke = assertRequestedSkillArgParsing();\n\n const catalog = toPublishedSkillCatalog(payload);\n const effectiveSkillGroupingSmoke = assertEffectiveSkillGrouping(createEffectiveSkillsSmokePayload());\n const selection = selectPublishedSkills(payload, ['backend-auth', 'missing-skill']);\n const detail = selection.selectedItems[0] ? toPublishedSkillDetail(detailItem) : null;\n if (!detail) {\n throw new Error('Expected backend-auth detail to be selected for smoke test');\n }\n\n const systemNoteWizardFetchContractSmoke = assertSystemNoteWizardFetchContract(payload, config, detail);\n const preview = buildSkillMarkdown(detailItem).split('\\n').slice(0, 6);\n\n console.log(\n JSON.stringify(\n {\n runtimeMode: catalog.runtimeMode,\n graphqlUrl: config.graphqlUrl,\n backendOriginSmoke,\n requestedSkillArgParsingSmoke,\n systemNoteWizardFetchContractSmoke,\n effectiveSkillGroupingSmoke,\n publishedSkillCount: catalog.publishedSkillCount,\n availableTools: catalog.availableTools,\n facets: catalog.facets,\n selectedSkillCount: selection.selectedItems.length,\n missingSkills: selection.missingIdentifiers,\n selectedSkillSlug: detail.skillSlug,\n selectedSkillTags: detail.tags,\n markdownDocumentIncludesFrontmatter: detail.markdownDocument.startsWith('---'),\n resourceFileCount: detail.resources.length,\n preview,\n markdownBodyIncludesContent: detail.markdownBody.includes('This is a mock published skill.'),\n },\n null,\n 2,\n ),\n );\n};\n\nvoid run();\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["buildSystemNote","buildSkillMarkdown","parseRequestedSkillArgs","resolveConfig","selectPublishedSkills","toPublishedSkillCatalog","toPublishedSkillDetail","fs","os","path","DEPLOY_BACKEND_ORIGIN","LOCAL_OVERRIDE_BACKEND_ORIGIN","BACKEND_ENV_KEYS","assertEqual","label","actual","expected","Error","String","createSkillItem","index","assignmentSource","slugPrefix","assignmentType","scopePath","includeChildren","skill","id","slug","name","summary","whenToUse","status","installPolicy","tags","skillVersion","version","title","publishedArtifact","frontmatterName","frontmatterDescription","checksum","publishedAt","fileCount","createInstallableSkillItem","item","createEffectiveSkillsSmokePayload","workspace","repositoryUrl","defaultBranch","directoryPath","skills","Array","from","length","_","catalogSkills","userPreferences","scopeKey","userKey","ignoredSkills","assertEffectiveSkillGrouping","payload","catalog","globalSkills","filter","contextKind","projectSkills","userSkills","startsWith","userSkillsWithGlobalContextKind","installableSkillCount","publishedSkillCount","assignmentCounts","global","project","user","other","globalAssignmentCount","projectAssignmentCount","userAssignmentCount","installableNotInstalledCount","assertRequestedSkillArgParsing","expectedSkills","skillFieldSelection","skillsFieldSelection","mixedSelection","join","withBackendEnv","env","callback","previousValues","Map","key","set","process","value","Object","entries","undefined","assertBackendOriginResolution","isolatedWorktree","mkdtemp","tmpdir","defaultConfig","backendOrigin","portOnlyConfig","PORT","appUrlPlaceholderConfig","APP_URL","overrideConfig","OPENCODE_WIZARD_BACKEND_ORIGIN","defaultBackendOrigin","portOnlyBackendOrigin","appUrlPlaceholderBackendOrigin","explicitOverrideBackendOrigin","assertSystemNoteWizardFetchContract","config","detail","systemNote","workspaceResolution","requestedDirectory","repositoryRoot","fallbackWorkspaceSlug","cacheKey","fetchResult","ok","authMode","fetchedAt","source","requiredFragments","fragment","includes","includesNativeOpenCodeSkillRoute","includesNativeSkillNotFoundEvidence","includesWizardFetchToolRoute","run","detailSkillItem","detailItem","markdownBody","renderedContent","files","relativePath","contentType","content","size","sortOrder","cwd","backendOriginSmoke","requestedSkillArgParsingSmoke","effectiveSkillGroupingSmoke","selection","selectedItems","systemNoteWizardFetchContractSmoke","preview","split","slice","console","log","JSON","stringify","runtimeMode","graphqlUrl","availableTools","facets","selectedSkillCount","missingSkills","missingIdentifiers","selectedSkillSlug","skillSlug","selectedSkillTags","markdownDocumentIncludesFrontmatter","markdownDocument","resourceFileCount","resources","markdownBodyIncludesContent"],"sources":["../src/smoke-published-skills.ts"],"sourcesContent":["import {\n buildSystemNote,\n buildSkillMarkdown,\n parseRequestedSkillArgs,\n resolveConfig,\n selectPublishedSkills,\n toPublishedSkillCatalog,\n toPublishedSkillDetail,\n type PublishedSkillCatalogPayload,\n type PublishedSkillCatalogItem,\n type PublishedSkillDetailItem,\n type PublishedSkillInstallableCatalogItem,\n} from './server.js';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst DEPLOY_BACKEND_ORIGIN = 'https://opencode-wizard.aexol.work';\nconst LOCAL_OVERRIDE_BACKEND_ORIGIN = 'http://localhost:19876';\n\ntype BackendEnvKey = 'OPENCODE_WIZARD_BACKEND_ORIGIN' | 'APP_URL' | 'PORT';\n\nconst BACKEND_ENV_KEYS: BackendEnvKey[] = ['OPENCODE_WIZARD_BACKEND_ORIGIN', 'APP_URL', 'PORT'];\n\nconst assertEqual = <TValue>(label: string, actual: TValue, expected: TValue): void => {\n if (actual === expected) return;\n\n throw new Error(`${label} mismatch: expected ${String(expected)}, received ${String(actual)}`);\n};\n\nconst createSkillItem = (index: number, assignmentSource: string, slugPrefix: string): PublishedSkillCatalogItem => ({\n assignmentSource,\n assignmentType: 'PATH',\n scopePath: '.',\n includeChildren: true,\n skill: {\n id: `skill-${slugPrefix}-${index}`,\n slug: `${slugPrefix}-${index}`,\n name: `${slugPrefix}-${index}`,\n summary: `${slugPrefix} skill ${index}`,\n whenToUse: `Use for ${slugPrefix} smoke coverage ${index}.`,\n status: 'ACTIVE',\n installPolicy: assignmentSource === 'GLOBAL' ? 'GLOBAL_CONTEXT' : 'PROJECT_INSTALLABLE',\n tags: [],\n },\n skillVersion: {\n id: `version-${slugPrefix}-${index}`,\n version: '1.0.0',\n title: 'Initial',\n summary: 'Initial publish',\n status: 'PUBLISHED',\n },\n publishedArtifact: {\n id: `artifact-${slugPrefix}-${index}`,\n frontmatterName: `${slugPrefix}-${index}`,\n frontmatterDescription: `${slugPrefix} smoke skill`,\n checksum: `checksum-${slugPrefix}-${index}`,\n publishedAt: '2026-04-22T00:00:00.000Z',\n fileCount: 1,\n },\n});\n\nconst createInstallableSkillItem = (index: number): PublishedSkillInstallableCatalogItem => {\n const item = createSkillItem(index, 'CATALOG', 'installable-skill');\n\n return {\n skill: item.skill,\n skillVersion: item.skillVersion,\n publishedArtifact: item.publishedArtifact,\n };\n};\n\nconst createEffectiveSkillsSmokePayload = (): PublishedSkillCatalogPayload => ({\n workspace: {\n id: 'workspace-effective-counts',\n slug: 'opencode-wizard',\n name: 'opencode-wizard',\n repositoryUrl: 'https://example.com/opencode-wizard.git',\n defaultBranch: 'main',\n status: 'ACTIVE',\n },\n directoryPath: '.',\n skills: [\n ...Array.from({ length: 19 }, (_, index) => createSkillItem(index + 1, 'GLOBAL', 'global-skill')),\n createSkillItem(1, 'WORKSPACE', 'workspace-skill'),\n createSkillItem(1, 'USER', 'user-skill'),\n createSkillItem(2, 'USER_GLOBAL', 'user-skill'),\n createSkillItem(3, 'USER_WORKSPACE', 'user-skill'),\n createSkillItem(4, 'USER_GLOBAL', 'user-skill'),\n ],\n catalogSkills: Array.from({ length: 11 }, (_, index) => createInstallableSkillItem(index + 1)),\n userPreferences: {\n scopeKey: 'workspace:workspace-effective-counts',\n userKey: 'user-1',\n ignoredSkills: [],\n },\n});\n\nconst assertEffectiveSkillGrouping = (payload: PublishedSkillCatalogPayload) => {\n const catalog = toPublishedSkillCatalog(payload);\n const globalSkills = catalog.skills.filter(\n (skill) => skill.contextKind === 'global' && skill.assignmentSource === 'GLOBAL',\n );\n const projectSkills = catalog.skills.filter(\n (skill) => skill.contextKind === 'project' && skill.assignmentSource === 'WORKSPACE',\n );\n const userSkills = catalog.skills.filter((skill) => skill.assignmentSource.startsWith('USER'));\n const userSkillsWithGlobalContextKind = userSkills.filter((skill) => skill.contextKind === 'global');\n const installableSkillCount = payload.catalogSkills.length;\n\n assertEqual('published skill count', catalog.publishedSkillCount, 24);\n assertEqual('global assignment count', catalog.assignmentCounts.global, 19);\n assertEqual('project assignment count', catalog.assignmentCounts.project, 1);\n assertEqual('user assignment count', catalog.assignmentCounts.user, 4);\n assertEqual('other assignment count', catalog.assignmentCounts.other, 0);\n assertEqual('global grouped skill count', globalSkills.length, 19);\n assertEqual('project grouped skill count', projectSkills.length, 1);\n assertEqual('user grouped skill count', userSkills.length, 4);\n assertEqual('user grouped global context kind count', userSkillsWithGlobalContextKind.length, 0);\n assertEqual('installable/not installed catalog count', installableSkillCount, 11);\n\n return {\n globalAssignmentCount: catalog.assignmentCounts.global,\n projectAssignmentCount: catalog.assignmentCounts.project,\n userAssignmentCount: catalog.assignmentCounts.user,\n installableNotInstalledCount: installableSkillCount,\n };\n};\n\nconst assertRequestedSkillArgParsing = () => {\n const expectedSkills = ['frontend-components', 'frontend-styles', 'frontend-navigation'];\n const skillFieldSelection = parseRequestedSkillArgs({\n skill: 'frontend-components,frontend-styles\\nfrontend-navigation',\n });\n const skillsFieldSelection = parseRequestedSkillArgs({\n skills: 'frontend-components,frontend-styles\\nfrontend-navigation',\n });\n const mixedSelection = parseRequestedSkillArgs({\n skill: 'frontend-components, frontend-styles',\n skills: 'frontend-styles\\nfrontend-navigation',\n });\n\n assertEqual('skill field delimited selection', skillFieldSelection.join('|'), expectedSkills.join('|'));\n assertEqual('skills field delimited selection', skillsFieldSelection.join('|'), expectedSkills.join('|'));\n assertEqual('mixed field deduplicated selection', mixedSelection.join('|'), expectedSkills.join('|'));\n\n return {\n skillFieldSelection,\n skillsFieldSelection,\n mixedSelection,\n };\n};\n\nconst withBackendEnv = async <TResult>(\n env: Partial<Record<BackendEnvKey, string>>,\n callback: () => Promise<TResult>,\n): Promise<TResult> => {\n const previousValues = new Map<BackendEnvKey, string | undefined>();\n\n for (const key of BACKEND_ENV_KEYS) {\n previousValues.set(key, process.env[key]);\n delete process.env[key];\n }\n\n for (const [key, value] of Object.entries(env)) {\n process.env[key as BackendEnvKey] = value;\n }\n\n try {\n return await callback();\n } finally {\n for (const [key, value] of previousValues) {\n if (value === undefined) {\n delete process.env[key];\n continue;\n }\n\n process.env[key] = value;\n }\n }\n};\n\nconst assertBackendOriginResolution = async () => {\n const isolatedWorktree = await fs.mkdtemp(path.join(os.tmpdir(), 'opencode-wizard-plugin-smoke-'));\n\n const defaultConfig = await withBackendEnv({}, () => resolveConfig(isolatedWorktree));\n if (defaultConfig.backendOrigin !== DEPLOY_BACKEND_ORIGIN) {\n throw new Error(\n `Expected default backend origin ${DEPLOY_BACKEND_ORIGIN}, received ${defaultConfig.backendOrigin}`,\n );\n }\n\n const portOnlyConfig = await withBackendEnv({ PORT: '19876' }, () => resolveConfig(isolatedWorktree));\n if (portOnlyConfig.backendOrigin !== DEPLOY_BACKEND_ORIGIN) {\n throw new Error(\n `Expected PORT-only backend origin to stay ${DEPLOY_BACKEND_ORIGIN}, received ${portOnlyConfig.backendOrigin}`,\n );\n }\n\n const appUrlPlaceholderConfig = await withBackendEnv({ APP_URL: 'https://yourdomain.com' }, () =>\n resolveConfig(isolatedWorktree),\n );\n if (appUrlPlaceholderConfig.backendOrigin !== DEPLOY_BACKEND_ORIGIN) {\n throw new Error(\n `Expected APP_URL placeholder backend origin to stay ${DEPLOY_BACKEND_ORIGIN}, received ${appUrlPlaceholderConfig.backendOrigin}`,\n );\n }\n\n const overrideConfig = await withBackendEnv({ OPENCODE_WIZARD_BACKEND_ORIGIN: LOCAL_OVERRIDE_BACKEND_ORIGIN }, () =>\n resolveConfig(isolatedWorktree),\n );\n if (overrideConfig.backendOrigin !== LOCAL_OVERRIDE_BACKEND_ORIGIN) {\n throw new Error(\n `Expected explicit backend override ${LOCAL_OVERRIDE_BACKEND_ORIGIN}, received ${overrideConfig.backendOrigin}`,\n );\n }\n\n return {\n defaultBackendOrigin: defaultConfig.backendOrigin,\n portOnlyBackendOrigin: portOnlyConfig.backendOrigin,\n appUrlPlaceholderBackendOrigin: appUrlPlaceholderConfig.backendOrigin,\n explicitOverrideBackendOrigin: overrideConfig.backendOrigin,\n };\n};\n\nconst assertSystemNoteWizardFetchContract = (\n payload: PublishedSkillCatalogPayload,\n config: Awaited<ReturnType<typeof resolveConfig>>,\n detail: NonNullable<ReturnType<typeof toPublishedSkillDetail>>,\n) => {\n const systemNote = buildSystemNote(\n {\n directoryPath: '.',\n workspaceResolution: {\n requestedDirectory: '.',\n repositoryRoot: '.',\n repositoryUrl: 'https://example.com/opencode-wizard.git',\n fallbackWorkspaceSlug: null,\n directoryPath: '.',\n cacheKey: 'smoke-cache-key',\n },\n fetchResult: {\n ok: true,\n status: 'ready',\n authMode: 'session',\n payload,\n fetchedAt: '2026-04-22T00:00:00.000Z',\n source: 'cache',\n },\n },\n config,\n [detail],\n );\n\n if (!systemNote) {\n throw new Error('Expected system note to be generated for published skills payload');\n }\n\n const requiredFragments = [\n 'Workspace: opencode-wizard.',\n 'Active wizard skills:',\n 'Runtime: runtimeMode=tool_fetch_only; deliveryModel=backend_published_installed_effective_skills;',\n 'Counts: 19 wizard global, 1 wizard project, 4 wizard user, 0 other.',\n 'Wizard artifacts support artifact kinds `SKILL` and `DESIGN_DOC`;',\n 'Canonical wizard artifact tools are `opencode_wizard_catalog_fetch`, `opencode_wizard_artifact_fetch`, and `opencode_wizard_artifact_preference_set`;',\n 'Wizard-listed skills are backend-published and tool-fetch-only; MUST fetch the body via `opencode_wizard_published_skills_fetch` before use (`skills`/`skill` for multiple/single).',\n 'Same-named native OpenCode skills or local `.opencode/skills` seed bodies are not authoritative for wizard-listed skills;',\n 'Action recipe: call `opencode_wizard_published_skills_fetch` with no args for auth/catalog bootstrap',\n 'Source/cache/workspace hints:',\n 'Wizard global skills:',\n 'Wizard project skills:',\n 'Wizard user skills:',\n 'opencode_wizard_published_skills_fetch',\n ];\n\n for (const fragment of requiredFragments) {\n if (systemNote.includes(fragment)) continue;\n\n throw new Error(`Expected system note to include prompt contract fragment: ${fragment}`);\n }\n\n return {\n includesNativeOpenCodeSkillRoute: systemNote.includes(\n 'MUST fetch the body via `opencode_wizard_published_skills_fetch` before use',\n ),\n includesNativeSkillNotFoundEvidence: systemNote.includes('not authoritative for wizard-listed skills'),\n includesWizardFetchToolRoute: systemNote.includes('opencode_wizard_published_skills_fetch'),\n };\n};\n\nconst run = async () => {\n const payload: PublishedSkillCatalogPayload = createEffectiveSkillsSmokePayload();\n const detailSkillItem = payload.skills[0];\n detailSkillItem.skill.slug = 'backend-auth';\n detailSkillItem.skill.name = 'backend-auth';\n detailSkillItem.skill.summary = 'Backend auth skill';\n detailSkillItem.skill.whenToUse = 'Use for JWT cookie sessions and protected backend resolver work.';\n detailSkillItem.publishedArtifact.frontmatterName = 'backend-auth';\n detailSkillItem.publishedArtifact.frontmatterDescription = 'JWT auth skill';\n detailSkillItem.publishedArtifact.fileCount = 2;\n const detailItem: PublishedSkillDetailItem = {\n ...detailSkillItem,\n publishedArtifact: {\n ...detailSkillItem.publishedArtifact,\n markdownBody: '## Mock skill\\n\\nThis is a mock published skill.',\n renderedContent: '<h2>Mock skill</h2>',\n files: [\n {\n id: 'artifact-file-1',\n relativePath: 'SKILL.md',\n contentType: 'text/markdown; charset=utf-8',\n content: '---\\nname: \"backend-auth\"\\ndescription: \"JWT auth skill\"\\n---\\n\\n## Mock skill\\n',\n checksum: 'file-checksum-1',\n size: 74,\n sortOrder: 0,\n },\n {\n id: 'artifact-file-2',\n relativePath: 'resource.md',\n contentType: 'text/markdown; charset=utf-8',\n content: '# Resource\\n',\n checksum: 'file-checksum-2',\n size: 11,\n sortOrder: 1,\n },\n ],\n },\n };\n\n const config = await resolveConfig(process.cwd());\n const backendOriginSmoke = await assertBackendOriginResolution();\n const requestedSkillArgParsingSmoke = assertRequestedSkillArgParsing();\n\n const catalog = toPublishedSkillCatalog(payload);\n const effectiveSkillGroupingSmoke = assertEffectiveSkillGrouping(createEffectiveSkillsSmokePayload());\n const selection = selectPublishedSkills(payload, ['backend-auth', 'missing-skill']);\n const detail = selection.selectedItems[0] ? toPublishedSkillDetail(detailItem) : null;\n if (!detail) {\n throw new Error('Expected backend-auth detail to be selected for smoke test');\n }\n\n const systemNoteWizardFetchContractSmoke = assertSystemNoteWizardFetchContract(payload, config, detail);\n const preview = buildSkillMarkdown(detailItem).split('\\n').slice(0, 6);\n\n console.log(\n JSON.stringify(\n {\n runtimeMode: catalog.runtimeMode,\n graphqlUrl: config.graphqlUrl,\n backendOriginSmoke,\n requestedSkillArgParsingSmoke,\n systemNoteWizardFetchContractSmoke,\n effectiveSkillGroupingSmoke,\n publishedSkillCount: catalog.publishedSkillCount,\n availableTools: catalog.availableTools,\n facets: catalog.facets,\n selectedSkillCount: selection.selectedItems.length,\n missingSkills: selection.missingIdentifiers,\n selectedSkillSlug: detail.skillSlug,\n selectedSkillTags: detail.tags,\n markdownDocumentIncludesFrontmatter: detail.markdownDocument.startsWith('---'),\n resourceFileCount: detail.resources.length,\n preview,\n markdownBodyIncludesContent: detail.markdownBody.includes('This is a mock published skill.'),\n },\n null,\n 2,\n ),\n );\n};\n\nvoid run();\n"],"mappings":"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","ignoreList":[]}
@@ -10,6 +10,5 @@ export declare const Row: (props: {
10
10
  export declare const Panel: (props: {
11
11
  title: string;
12
12
  theme: TuiPluginApi["theme"]["current"];
13
- onOpen: () => void;
14
13
  children: JSX.Element;
15
14
  }) => any;
@@ -37,45 +37,22 @@ export const Row = props => (() => {
37
37
  export const Panel = props => (() => {
38
38
  var _el$5 = _$createElement("box"),
39
39
  _el$6 = _$createElement("box"),
40
- _el$7 = _$createElement("box"),
41
- _el$8 = _$createElement("text"),
42
- _el$9 = _$createElement("b"),
43
- _el$0 = _$createElement("box"),
44
- _el$1 = _$createElement("text");
40
+ _el$7 = _$createElement("text"),
41
+ _el$8 = _$createElement("b");
45
42
  _$insertNode(_el$5, _el$6);
46
43
  _$setProp(_el$5, "width", "100%");
47
44
  _$setProp(_el$5, "flexDirection", "column");
48
45
  _$setProp(_el$5, "paddingRight", 1);
49
46
  _$insertNode(_el$6, _el$7);
50
- _$insertNode(_el$6, _el$0);
51
47
  _$setProp(_el$6, "width", "100%");
52
48
  _$setProp(_el$6, "flexDirection", "row");
53
- _$setProp(_el$6, "justifyContent", "space-between");
54
49
  _$setProp(_el$6, "overflow", "hidden");
55
50
  _$insertNode(_el$7, _el$8);
56
- _$setProp(_el$7, "flexShrink", 0);
57
- _$insertNode(_el$8, _el$9);
58
- _$setProp(_el$8, "wrapMode", "none");
59
- _$setProp(_el$8, "overflow", "hidden");
60
- _$insert(_el$9, () => props.title);
61
- _$insertNode(_el$0, _el$1);
62
- _$setProp(_el$0, "flexShrink", 0);
63
- _$insertNode(_el$1, _$createTextNode(`open`));
64
- _$setProp(_el$1, "wrapMode", "none");
51
+ _$setProp(_el$7, "wrapMode", "none");
52
+ _$setProp(_el$7, "overflow", "hidden");
53
+ _$insert(_el$8, () => props.title);
65
54
  _$insert(_el$5, () => props.children, null);
66
- _$effect(_p$ => {
67
- var _v$3 = props.onOpen,
68
- _v$4 = props.theme.text,
69
- _v$5 = props.theme.textMuted;
70
- _v$3 !== _p$.e && (_p$.e = _$setProp(_el$5, "onMouseUp", _v$3, _p$.e));
71
- _v$4 !== _p$.t && (_p$.t = _$setProp(_el$8, "fg", _v$4, _p$.t));
72
- _v$5 !== _p$.a && (_p$.a = _$setProp(_el$1, "fg", _v$5, _p$.a));
73
- return _p$;
74
- }, {
75
- e: undefined,
76
- t: undefined,
77
- a: undefined
78
- });
55
+ _$effect(_$p => _$setProp(_el$7, "fg", props.theme.text, _$p));
79
56
  return _el$5;
80
57
  })();
81
58
  //# sourceMappingURL=common.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Row","props","_el$","_$createElement","_el$2","_el$3","_$createTextNode","_el$4","_$insertNode","_$setProp","_$insert","label","value","_$effect","_p$","_v$","labelColor","_v$2","valueColor","e","t","undefined","Panel","_el$5","_el$6","_el$7","_el$8","_el$9","_el$0","_el$1","title","children","_v$3","onOpen","_v$4","theme","text","_v$5","textMuted","a"],"sources":["../../../src/tui/components/common.tsx"],"sourcesContent":["import type { RGBA } from '@opentui/core';\nimport type { JSX } from 'solid-js';\nimport type { TuiPluginApi } from '../types.js';\n\nexport const Row = (props: {\n label: string;\n value: string;\n labelColor: string | RGBA | undefined;\n valueColor: string | RGBA | undefined;\n}) => (\n <box width=\"100%\" flexDirection=\"row\" overflow=\"hidden\">\n <text fg={props.labelColor} flexShrink={0} wrapMode=\"none\">\n {props.label}:&nbsp;\n </text>\n <text fg={props.valueColor} flexGrow={1} overflow=\"hidden\" wrapMode=\"none\">\n {props.value}\n </text>\n </box>\n);\n\nexport const Panel = (props: {\n title: string;\n theme: TuiPluginApi['theme']['current'];\n onOpen: () => void;\n children: JSX.Element;\n}) => (\n <box width=\"100%\" flexDirection=\"column\" paddingRight={1} onMouseUp={props.onOpen}>\n <box width=\"100%\" flexDirection=\"row\" justifyContent=\"space-between\" overflow=\"hidden\">\n <box flexShrink={0}>\n <text fg={props.theme.text} wrapMode=\"none\" overflow=\"hidden\">\n <b>{props.title}</b>\n </text>\n </box>\n <box flexShrink={0}>\n <text fg={props.theme.textMuted} wrapMode=\"none\">\n open\n </text>\n </box>\n </box>\n {props.children}\n </box>\n);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Row","props","_el$","_$createElement","_el$2","_el$3","_$createTextNode","_el$4","_$insertNode","_$setProp","_$insert","label","value","_$effect","_p$","_v$","labelColor","_v$2","valueColor","e","t","undefined","Panel","_el$5","_el$6","_el$7","_el$8","title","children","_$p","theme","text"],"sources":["../../../src/tui/components/common.tsx"],"sourcesContent":["import type { RGBA } from '@opentui/core';\nimport type { JSX } from 'solid-js';\nimport type { TuiPluginApi } from '../types.js';\n\nexport const Row = (props: {\n label: string;\n value: string;\n labelColor: string | RGBA | undefined;\n valueColor: string | RGBA | undefined;\n}) => (\n <box width=\"100%\" flexDirection=\"row\" overflow=\"hidden\">\n <text fg={props.labelColor} flexShrink={0} wrapMode=\"none\">\n {props.label}:&nbsp;\n </text>\n <text fg={props.valueColor} flexGrow={1} overflow=\"hidden\" wrapMode=\"none\">\n {props.value}\n </text>\n </box>\n);\n\nexport const Panel = (props: {\n title: string;\n theme: TuiPluginApi['theme']['current'];\n children: JSX.Element;\n}) => (\n <box width=\"100%\" flexDirection=\"column\" paddingRight={1}>\n <box width=\"100%\" flexDirection=\"row\" overflow=\"hidden\">\n <text fg={props.theme.text} wrapMode=\"none\" overflow=\"hidden\">\n <b>{props.title}</b>\n </text>\n </box>\n {props.children}\n </box>\n);\n"],"mappings":";;;;;;AAIA,OAAO,MAAMA,GAAG,GAAIC,KAKnB;EAAA,IAAAC,IAAA,GAAAC,eAAA;IAAAC,KAAA,GAAAD,eAAA;IAAAE,KAAA,GAAAC,gBAAA;IAAAC,KAAA,GAAAJ,eAAA;EAAAK,YAAA,CAAAN,IAAA,EAAAE,KAAA;EAAAI,YAAA,CAAAN,IAAA,EAAAK,KAAA;EAAAE,SAAA,CAAAP,IAAA,WACY,MAAM;EAAAO,SAAA,CAAAP,IAAA,mBAAe,KAAK;EAAAO,SAAA,CAAAP,IAAA,cAAU,QAAQ;EAAAM,YAAA,CAAAJ,KAAA,EAAAC,KAAA;EAAAI,SAAA,CAAAL,KAAA,gBACb,CAAC;EAAAK,SAAA,CAAAL,KAAA,cAAW,MAAM;EAAAM,QAAA,CAAAN,KAAA,QACvDH,KAAK,CAACU,KAAK,EAAAN,KAAA;EAAAI,SAAA,CAAAF,KAAA,cAEwB,CAAC;EAAAE,SAAA,CAAAF,KAAA,cAAW,QAAQ;EAAAE,SAAA,CAAAF,KAAA,cAAU,MAAM;EAAAG,QAAA,CAAAH,KAAA,QACvEN,KAAK,CAACW,KAAK;EAAAC,QAAA,CAAAC,GAAA;IAAA,IAAAC,GAAA,GAJJd,KAAK,CAACe,UAAU;MAAAC,IAAA,GAGhBhB,KAAK,CAACiB,UAAU;IAAAH,GAAA,KAAAD,GAAA,CAAAK,CAAA,KAAAL,GAAA,CAAAK,CAAA,GAAAV,SAAA,CAAAL,KAAA,QAAAW,GAAA,EAAAD,GAAA,CAAAK,CAAA;IAAAF,IAAA,KAAAH,GAAA,CAAAM,CAAA,KAAAN,GAAA,CAAAM,CAAA,GAAAX,SAAA,CAAAF,KAAA,QAAAU,IAAA,EAAAH,GAAA,CAAAM,CAAA;IAAA,OAAAN,GAAA;EAAA;IAAAK,CAAA,EAAAE,SAAA;IAAAD,CAAA,EAAAC;EAAA;EAAA,OAAAnB,IAAA;AAAA,IAI7B;AAED,OAAO,MAAMoB,KAAK,GAAIrB,KAIrB;EAAA,IAAAsB,KAAA,GAAApB,eAAA;IAAAqB,KAAA,GAAArB,eAAA;IAAAsB,KAAA,GAAAtB,eAAA;IAAAuB,KAAA,GAAAvB,eAAA;EAAAK,YAAA,CAAAe,KAAA,EAAAC,KAAA;EAAAf,SAAA,CAAAc,KAAA,WACY,MAAM;EAAAd,SAAA,CAAAc,KAAA,mBAAe,QAAQ;EAAAd,SAAA,CAAAc,KAAA,kBAAe,CAAC;EAAAf,YAAA,CAAAgB,KAAA,EAAAC,KAAA;EAAAhB,SAAA,CAAAe,KAAA,WAC3C,MAAM;EAAAf,SAAA,CAAAe,KAAA,mBAAe,KAAK;EAAAf,SAAA,CAAAe,KAAA,cAAU,QAAQ;EAAAhB,YAAA,CAAAiB,KAAA,EAAAC,KAAA;EAAAjB,SAAA,CAAAgB,KAAA,cAChB,MAAM;EAAAhB,SAAA,CAAAgB,KAAA,cAAU,QAAQ;EAAAf,QAAA,CAAAgB,KAAA,QACvDzB,KAAK,CAAC0B,KAAK;EAAAjB,QAAA,CAAAa,KAAA,QAGlBtB,KAAK,CAAC2B,QAAQ;EAAAf,QAAA,CAAAgB,GAAA,IAAApB,SAAA,CAAAgB,KAAA,QAJHxB,KAAK,CAAC6B,KAAK,CAACC,IAAI,EAAAF,GAAA;EAAA,OAAAN,KAAA;AAAA,IAM/B","ignoreList":[]}
@@ -108,7 +108,7 @@ export const ReadyRows = props => {
108
108
  })();
109
109
  }
110
110
  const installableNotInstalledCount = getInstallableNotInstalledSkills(props.snapshot).length;
111
- const catalogStatus = `${props.snapshot.catalog.publishedSkillCount} loaded · ${installableNotInstalledCount} installable · ${props.snapshot.ignoredPublishedSkills.count} ignored · open for details`;
111
+ const catalogStatus = `${props.snapshot.catalog.publishedSkillCount} loaded · ${installableNotInstalledCount} installable · ${props.snapshot.ignoredPublishedSkills.count} ignored`;
112
112
  return (() => {
113
113
  var _el$7 = _$createElement("box");
114
114
  _$setProp(_el$7, "width", "100%");
@@ -1 +1 @@
1
- {"version":3,"names":["createMemo","compactStatusMessage","formatAuthStatus","formatBackendOriginLabel","formatSkillsCatalogUnavailableMessage","getInstallableNotInstalledSkills","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","statusRows","label","value","backendOrigin","labelColor","valueColor","text","catalog","_el$6","installableNotInstalledCount","length","catalogStatus","publishedSkillCount","ignoredPublishedSkills","count","_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 } 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 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 </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 · open for details`;\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 </box>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createMemo","compactStatusMessage","formatAuthStatus","formatBackendOriginLabel","formatSkillsCatalogUnavailableMessage","getInstallableNotInstalledSkills","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","statusRows","label","value","backendOrigin","labelColor","valueColor","text","catalog","_el$6","installableNotInstalledCount","length","catalogStatus","publishedSkillCount","ignoredPublishedSkills","count","_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 } 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 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 </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\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 </box>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,3 @@
1
1
  export declare const STATUS_TIMEOUT_MS = 5000;
2
2
  export declare const STATUS_REFRESH_INTERVAL_MS = 5000;
3
3
  export declare const MAX_STATUS_MESSAGE_LENGTH = 80;
4
- export declare const MAX_SKILL_DESCRIPTION_LENGTH = 96;
5
- export declare const MAX_SKILL_NAME_LENGTH = 48;
6
- export declare const MAX_SKILL_META_LENGTH = 72;
7
- export declare const MAX_SKILL_TAGS = 4;
8
- export declare const SKILLS_PAGE_SIZE = 5;
@@ -1,9 +1,4 @@
1
1
  export const STATUS_TIMEOUT_MS = 5_000;
2
2
  export const STATUS_REFRESH_INTERVAL_MS = 5_000;
3
3
  export const MAX_STATUS_MESSAGE_LENGTH = 80;
4
- export const MAX_SKILL_DESCRIPTION_LENGTH = 96;
5
- export const MAX_SKILL_NAME_LENGTH = 48;
6
- export const MAX_SKILL_META_LENGTH = 72;
7
- export const MAX_SKILL_TAGS = 4;
8
- export const SKILLS_PAGE_SIZE = 5;
9
4
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["STATUS_TIMEOUT_MS","STATUS_REFRESH_INTERVAL_MS","MAX_STATUS_MESSAGE_LENGTH","MAX_SKILL_DESCRIPTION_LENGTH","MAX_SKILL_NAME_LENGTH","MAX_SKILL_META_LENGTH","MAX_SKILL_TAGS","SKILLS_PAGE_SIZE"],"sources":["../../src/tui/constants.ts"],"sourcesContent":["export const STATUS_TIMEOUT_MS = 5_000;\nexport const STATUS_REFRESH_INTERVAL_MS = 5_000;\nexport const MAX_STATUS_MESSAGE_LENGTH = 80;\nexport const MAX_SKILL_DESCRIPTION_LENGTH = 96;\nexport const MAX_SKILL_NAME_LENGTH = 48;\nexport const MAX_SKILL_META_LENGTH = 72;\nexport const MAX_SKILL_TAGS = 4;\nexport const SKILLS_PAGE_SIZE = 5;\n"],"mappings":"AAAA,OAAO,MAAMA,iBAAiB,GAAG,KAAK;AACtC,OAAO,MAAMC,0BAA0B,GAAG,KAAK;AAC/C,OAAO,MAAMC,yBAAyB,GAAG,EAAE;AAC3C,OAAO,MAAMC,4BAA4B,GAAG,EAAE;AAC9C,OAAO,MAAMC,qBAAqB,GAAG,EAAE;AACvC,OAAO,MAAMC,qBAAqB,GAAG,EAAE;AACvC,OAAO,MAAMC,cAAc,GAAG,CAAC;AAC/B,OAAO,MAAMC,gBAAgB,GAAG,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["STATUS_TIMEOUT_MS","STATUS_REFRESH_INTERVAL_MS","MAX_STATUS_MESSAGE_LENGTH"],"sources":["../../src/tui/constants.ts"],"sourcesContent":["export const STATUS_TIMEOUT_MS = 5_000;\nexport const STATUS_REFRESH_INTERVAL_MS = 5_000;\nexport const MAX_STATUS_MESSAGE_LENGTH = 80;\n"],"mappings":"AAAA,OAAO,MAAMA,iBAAiB,GAAG,KAAK;AACtC,OAAO,MAAMC,0BAA0B,GAAG,KAAK;AAC/C,OAAO,MAAMC,yBAAyB,GAAG,EAAE","ignoreList":[]}
@@ -1,8 +1,5 @@
1
1
  import type { PluginStatusSnapshot } from '../server.js';
2
2
  export declare const compactStatusMessage: (message: string) => string;
3
- export declare const compactSkillDescription: (message: string) => string;
4
- export declare const compactSkillName: (name: string) => string;
5
- export declare const compactSkillMeta: (meta: string) => string;
6
3
  export declare const formatSkillsCatalogUnavailableMessage: (snapshot: PluginStatusSnapshot) => string;
7
4
  export declare const formatAuthStatus: (snapshot: PluginStatusSnapshot) => string;
8
5
  export declare const formatBackendOriginLabel: (backendOrigin: string) => string;
@@ -1,20 +1,8 @@
1
- import { MAX_SKILL_DESCRIPTION_LENGTH, MAX_SKILL_META_LENGTH, MAX_SKILL_NAME_LENGTH, MAX_STATUS_MESSAGE_LENGTH } from './constants.js';
1
+ import { MAX_STATUS_MESSAGE_LENGTH } from './constants.js';
2
2
  export const compactStatusMessage = message => {
3
3
  if (message.length <= MAX_STATUS_MESSAGE_LENGTH) return message;
4
4
  return `${message.slice(0, MAX_STATUS_MESSAGE_LENGTH - 1)}…`;
5
5
  };
6
- export const compactSkillDescription = message => {
7
- if (message.length <= MAX_SKILL_DESCRIPTION_LENGTH) return message;
8
- return `${message.slice(0, MAX_SKILL_DESCRIPTION_LENGTH - 1)}…`;
9
- };
10
- export const compactSkillName = name => {
11
- if (name.length <= MAX_SKILL_NAME_LENGTH) return name;
12
- return `${name.slice(0, MAX_SKILL_NAME_LENGTH - 1)}…`;
13
- };
14
- export const compactSkillMeta = meta => {
15
- if (meta.length <= MAX_SKILL_META_LENGTH) return meta;
16
- return `${meta.slice(0, MAX_SKILL_META_LENGTH - 1)}…`;
17
- };
18
6
  export const formatSkillsCatalogUnavailableMessage = snapshot => {
19
7
  if (!snapshot.catalog && snapshot.status === 'missing_auth') {
20
8
  if (snapshot.message) return compactStatusMessage(snapshot.message);