@aexol/opencode-wizard 0.2.0 → 0.2.2

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,10 +1,118 @@
1
- import { buildSkillMarkdown, resolveConfig, selectPublishedSkills, toPublishedSkillCatalog, toPublishedSkillDetail } from './server.js';
1
+ import { buildSkillMarkdown, parseRequestedSkillArgs, resolveConfig, selectPublishedSkills, toPublishedSkillCatalog, toPublishedSkillDetail } from './server.js';
2
2
  import fs from 'node:fs/promises';
3
3
  import os from 'node:os';
4
4
  import path from 'node:path';
5
5
  const DEPLOY_BACKEND_ORIGIN = 'https://opencode-wizard.aexol.work';
6
6
  const LOCAL_OVERRIDE_BACKEND_ORIGIN = 'http://localhost:19876';
7
7
  const BACKEND_ENV_KEYS = ['OPENCODE_WIZARD_BACKEND_ORIGIN', 'APP_URL', 'PORT'];
8
+ const assertEqual = (label, actual, expected) => {
9
+ if (actual === expected) return;
10
+ throw new Error(`${label} mismatch: expected ${String(expected)}, received ${String(actual)}`);
11
+ };
12
+ const createSkillItem = (index, assignmentSource, slugPrefix) => ({
13
+ assignmentSource,
14
+ assignmentType: 'PATH',
15
+ scopePath: '.',
16
+ includeChildren: true,
17
+ skill: {
18
+ id: `skill-${slugPrefix}-${index}`,
19
+ slug: `${slugPrefix}-${index}`,
20
+ name: `${slugPrefix}-${index}`,
21
+ summary: `${slugPrefix} skill ${index}`,
22
+ whenToUse: `Use for ${slugPrefix} smoke coverage ${index}.`,
23
+ status: 'ACTIVE',
24
+ installPolicy: assignmentSource === 'GLOBAL' ? 'GLOBAL_CONTEXT' : 'PROJECT_INSTALLABLE',
25
+ tags: []
26
+ },
27
+ skillVersion: {
28
+ id: `version-${slugPrefix}-${index}`,
29
+ version: '1.0.0',
30
+ title: 'Initial',
31
+ summary: 'Initial publish',
32
+ status: 'PUBLISHED'
33
+ },
34
+ publishedArtifact: {
35
+ id: `artifact-${slugPrefix}-${index}`,
36
+ frontmatterName: `${slugPrefix}-${index}`,
37
+ frontmatterDescription: `${slugPrefix} smoke skill`,
38
+ checksum: `checksum-${slugPrefix}-${index}`,
39
+ publishedAt: '2026-04-22T00:00:00.000Z',
40
+ fileCount: 1
41
+ }
42
+ });
43
+ const createInstallableSkillItem = index => {
44
+ const item = createSkillItem(index, 'CATALOG', 'installable-skill');
45
+ return {
46
+ skill: item.skill,
47
+ skillVersion: item.skillVersion,
48
+ publishedArtifact: item.publishedArtifact
49
+ };
50
+ };
51
+ const createEffectiveSkillsSmokePayload = () => ({
52
+ workspace: {
53
+ id: 'workspace-effective-counts',
54
+ slug: 'opencode-wizard',
55
+ name: 'opencode-wizard',
56
+ repositoryUrl: 'https://example.com/opencode-wizard.git',
57
+ defaultBranch: 'main',
58
+ status: 'ACTIVE'
59
+ },
60
+ directoryPath: '.',
61
+ skills: [...Array.from({
62
+ length: 19
63
+ }, (_, index) => createSkillItem(index + 1, 'GLOBAL', 'global-skill')), ...Array.from({
64
+ length: 4
65
+ }, (_, index) => createSkillItem(index + 1, 'USER_GLOBAL', 'user-skill'))],
66
+ catalogSkills: Array.from({
67
+ length: 11
68
+ }, (_, index) => createInstallableSkillItem(index + 1)),
69
+ userPreferences: {
70
+ scopeKey: 'workspace:workspace-effective-counts',
71
+ userKey: 'user-1',
72
+ ignoredSkills: []
73
+ }
74
+ });
75
+ const assertEffectiveSkillGrouping = payload => {
76
+ const catalog = toPublishedSkillCatalog(payload);
77
+ const globalSkills = catalog.skills.filter(skill => skill.contextKind === 'global' && skill.assignmentSource === 'GLOBAL');
78
+ const userSkills = catalog.skills.filter(skill => skill.assignmentSource === 'USER_GLOBAL');
79
+ const installableSkillCount = payload.catalogSkills.length;
80
+ assertEqual('published skill count', catalog.publishedSkillCount, 23);
81
+ assertEqual('global assignment count', catalog.assignmentCounts.global, 19);
82
+ assertEqual('project assignment count', catalog.assignmentCounts.project, 0);
83
+ assertEqual('user assignment count', catalog.assignmentCounts.user, 4);
84
+ assertEqual('other assignment count', catalog.assignmentCounts.other, 0);
85
+ assertEqual('global grouped skill count', globalSkills.length, 19);
86
+ assertEqual('user grouped skill count', userSkills.length, 4);
87
+ assertEqual('installable/not installed catalog count', installableSkillCount, 11);
88
+ return {
89
+ globalAssignmentCount: catalog.assignmentCounts.global,
90
+ projectAssignmentCount: catalog.assignmentCounts.project,
91
+ userAssignmentCount: catalog.assignmentCounts.user,
92
+ installableNotInstalledCount: installableSkillCount
93
+ };
94
+ };
95
+ const assertRequestedSkillArgParsing = () => {
96
+ const expectedSkills = ['frontend-components', 'frontend-styles', 'frontend-navigation'];
97
+ const skillFieldSelection = parseRequestedSkillArgs({
98
+ skill: 'frontend-components,frontend-styles\nfrontend-navigation'
99
+ });
100
+ const skillsFieldSelection = parseRequestedSkillArgs({
101
+ skills: 'frontend-components,frontend-styles\nfrontend-navigation'
102
+ });
103
+ const mixedSelection = parseRequestedSkillArgs({
104
+ skill: 'frontend-components, frontend-styles',
105
+ skills: 'frontend-styles\nfrontend-navigation'
106
+ });
107
+ assertEqual('skill field delimited selection', skillFieldSelection.join('|'), expectedSkills.join('|'));
108
+ assertEqual('skills field delimited selection', skillsFieldSelection.join('|'), expectedSkills.join('|'));
109
+ assertEqual('mixed field deduplicated selection', mixedSelection.join('|'), expectedSkills.join('|'));
110
+ return {
111
+ skillFieldSelection,
112
+ skillsFieldSelection,
113
+ mixedSelection
114
+ };
115
+ };
8
116
  const withBackendEnv = async (env, callback) => {
9
117
  const previousValues = new Map();
10
118
  for (const key of BACKEND_ENV_KEYS) {
@@ -58,69 +166,19 @@ const assertBackendOriginResolution = async () => {
58
166
  };
59
167
  };
60
168
  const run = async () => {
61
- const payload = {
62
- workspace: {
63
- id: 'workspace-1',
64
- slug: 'opencode-wizard',
65
- name: 'opencode-wizard',
66
- repositoryUrl: 'https://example.com/opencode-wizard.git',
67
- defaultBranch: 'main',
68
- status: 'ACTIVE'
69
- },
70
- directoryPath: '.',
71
- skills: [{
72
- assignmentSource: 'WORKSPACE',
73
- assignmentType: 'PATH',
74
- scopePath: '.',
75
- includeChildren: true,
76
- skill: {
77
- id: 'skill-1',
78
- slug: 'backend-auth',
79
- name: 'backend-auth',
80
- summary: 'Backend auth skill',
81
- whenToUse: 'Use for JWT cookie sessions and protected backend resolver work.',
82
- status: 'ACTIVE',
83
- installPolicy: 'PROJECT_INSTALLABLE',
84
- tags: [{
85
- id: 'tag-1',
86
- slug: 'auth',
87
- label: 'Auth',
88
- description: null,
89
- facet: {
90
- id: 'facet-1',
91
- slug: 'capability',
92
- label: 'Capability',
93
- description: null
94
- }
95
- }]
96
- },
97
- skillVersion: {
98
- id: 'version-1',
99
- version: '1.0.0',
100
- title: 'Initial',
101
- summary: 'Initial publish',
102
- status: 'PUBLISHED'
103
- },
104
- publishedArtifact: {
105
- id: 'artifact-1',
106
- frontmatterName: 'backend-auth',
107
- frontmatterDescription: 'JWT auth skill',
108
- checksum: 'checksum-1',
109
- publishedAt: '2026-04-22T00:00:00.000Z',
110
- fileCount: 2
111
- }
112
- }],
113
- catalogSkills: [],
114
- userPreferences: {
115
- scopeKey: 'workspace:workspace-1',
116
- userKey: 'user-1',
117
- ignoredSkills: []
118
- }
119
- };
169
+ const payload = createEffectiveSkillsSmokePayload();
170
+ const detailSkillItem = payload.skills[0];
171
+ detailSkillItem.skill.slug = 'backend-auth';
172
+ detailSkillItem.skill.name = 'backend-auth';
173
+ detailSkillItem.skill.summary = 'Backend auth skill';
174
+ detailSkillItem.skill.whenToUse = 'Use for JWT cookie sessions and protected backend resolver work.';
175
+ detailSkillItem.publishedArtifact.frontmatterName = 'backend-auth';
176
+ detailSkillItem.publishedArtifact.frontmatterDescription = 'JWT auth skill';
177
+ detailSkillItem.publishedArtifact.fileCount = 2;
120
178
  const detailItem = {
121
- ...payload.skills[0],
179
+ ...detailSkillItem,
122
180
  publishedArtifact: {
123
- ...payload.skills[0].publishedArtifact,
181
+ ...detailSkillItem.publishedArtifact,
124
182
  markdownBody: '## Mock skill\n\nThis is a mock published skill.',
125
183
  renderedContent: '<h2>Mock skill</h2>',
126
184
  files: [{
@@ -144,7 +202,9 @@ const run = async () => {
144
202
  };
145
203
  const config = await resolveConfig(process.cwd());
146
204
  const backendOriginSmoke = await assertBackendOriginResolution();
205
+ const requestedSkillArgParsingSmoke = assertRequestedSkillArgParsing();
147
206
  const catalog = toPublishedSkillCatalog(payload);
207
+ const effectiveSkillGroupingSmoke = assertEffectiveSkillGrouping(createEffectiveSkillsSmokePayload());
148
208
  const selection = selectPublishedSkills(payload, ['backend-auth', 'missing-skill']);
149
209
  const detail = selection.selectedItems[0] ? toPublishedSkillDetail(detailItem) : null;
150
210
  const preview = buildSkillMarkdown(detailItem).split('\n').slice(0, 6);
@@ -152,6 +212,8 @@ const run = async () => {
152
212
  runtimeMode: catalog.runtimeMode,
153
213
  graphqlUrl: config.graphqlUrl,
154
214
  backendOriginSmoke,
215
+ requestedSkillArgParsingSmoke,
216
+ effectiveSkillGroupingSmoke,
155
217
  publishedSkillCount: catalog.publishedSkillCount,
156
218
  availableTools: catalog.availableTools,
157
219
  facets: catalog.facets,
@@ -1 +1 @@
1
- {"version":3,"names":["buildSkillMarkdown","resolveConfig","selectPublishedSkills","toPublishedSkillCatalog","toPublishedSkillDetail","fs","os","path","DEPLOY_BACKEND_ORIGIN","LOCAL_OVERRIDE_BACKEND_ORIGIN","BACKEND_ENV_KEYS","withBackendEnv","env","callback","previousValues","Map","key","set","process","value","Object","entries","undefined","assertBackendOriginResolution","isolatedWorktree","mkdtemp","join","tmpdir","defaultConfig","backendOrigin","Error","portOnlyConfig","PORT","appUrlPlaceholderConfig","APP_URL","overrideConfig","OPENCODE_WIZARD_BACKEND_ORIGIN","defaultBackendOrigin","portOnlyBackendOrigin","appUrlPlaceholderBackendOrigin","explicitOverrideBackendOrigin","run","payload","workspace","id","slug","name","repositoryUrl","defaultBranch","status","directoryPath","skills","assignmentSource","assignmentType","scopePath","includeChildren","skill","summary","whenToUse","installPolicy","tags","label","description","facet","skillVersion","version","title","publishedArtifact","frontmatterName","frontmatterDescription","checksum","publishedAt","fileCount","catalogSkills","userPreferences","scopeKey","userKey","ignoredSkills","detailItem","markdownBody","renderedContent","files","relativePath","contentType","content","size","sortOrder","config","cwd","backendOriginSmoke","catalog","selection","detail","selectedItems","preview","split","slice","console","log","JSON","stringify","runtimeMode","graphqlUrl","publishedSkillCount","availableTools","facets","selectedSkillCount","length","missingSkills","missingIdentifiers","selectedSkillSlug","skillSlug","selectedSkillTags","markdownDocumentIncludesFrontmatter","markdownDocument","startsWith","resourceFileCount","resources","markdownBodyIncludesContent","includes"],"sources":["../src/smoke-published-skills.ts"],"sourcesContent":["import {\n buildSkillMarkdown,\n resolveConfig,\n selectPublishedSkills,\n toPublishedSkillCatalog,\n toPublishedSkillDetail,\n type PublishedSkillCatalogPayload,\n type PublishedSkillDetailItem,\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 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(`Expected default backend origin ${DEPLOY_BACKEND_ORIGIN}, received ${defaultConfig.backendOrigin}`);\n }\n\n const portOnlyConfig = await withBackendEnv({ PORT: '19876' }, () => resolveConfig(isolatedWorktree));\n if (portOnlyConfig.backendOrigin !== DEPLOY_BACKEND_ORIGIN) {\n throw new Error(`Expected PORT-only backend origin to stay ${DEPLOY_BACKEND_ORIGIN}, received ${portOnlyConfig.backendOrigin}`);\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(`Expected explicit backend override ${LOCAL_OVERRIDE_BACKEND_ORIGIN}, received ${overrideConfig.backendOrigin}`);\n }\n\n return {\n defaultBackendOrigin: defaultConfig.backendOrigin,\n portOnlyBackendOrigin: portOnlyConfig.backendOrigin,\n appUrlPlaceholderBackendOrigin: appUrlPlaceholderConfig.backendOrigin,\n explicitOverrideBackendOrigin: overrideConfig.backendOrigin,\n };\n};\n\nconst run = async () => {\n const payload: PublishedSkillCatalogPayload = {\n workspace: {\n id: 'workspace-1',\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 {\n assignmentSource: 'WORKSPACE',\n assignmentType: 'PATH',\n scopePath: '.',\n includeChildren: true,\n skill: {\n id: 'skill-1',\n slug: 'backend-auth',\n name: 'backend-auth',\n summary: 'Backend auth skill',\n whenToUse: 'Use for JWT cookie sessions and protected backend resolver work.',\n status: 'ACTIVE',\n installPolicy: 'PROJECT_INSTALLABLE',\n tags: [\n {\n id: 'tag-1',\n slug: 'auth',\n label: 'Auth',\n description: null,\n facet: {\n id: 'facet-1',\n slug: 'capability',\n label: 'Capability',\n description: null,\n },\n },\n ],\n },\n skillVersion: {\n id: 'version-1',\n version: '1.0.0',\n title: 'Initial',\n summary: 'Initial publish',\n status: 'PUBLISHED',\n },\n publishedArtifact: {\n id: 'artifact-1',\n frontmatterName: 'backend-auth',\n frontmatterDescription: 'JWT auth skill',\n checksum: 'checksum-1',\n publishedAt: '2026-04-22T00:00:00.000Z',\n fileCount: 2,\n },\n },\n ],\n catalogSkills: [],\n userPreferences: {\n scopeKey: 'workspace:workspace-1',\n userKey: 'user-1',\n ignoredSkills: [],\n },\n };\n const detailItem: PublishedSkillDetailItem = {\n ...payload.skills[0],\n publishedArtifact: {\n ...payload.skills[0].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\n const catalog = toPublishedSkillCatalog(payload);\n const selection = selectPublishedSkills(payload, ['backend-auth', 'missing-skill']);\n const detail = selection.selectedItems[0] ? toPublishedSkillDetail(detailItem) : null;\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 publishedSkillCount: catalog.publishedSkillCount,\n availableTools: catalog.availableTools,\n facets: catalog.facets,\n selectedSkillCount: selection.selectedItems.length,\n missingSkills: selection.missingIdentifiers,\n selectedSkillSlug: detail?.skillSlug ?? null,\n selectedSkillTags: detail?.tags ?? [],\n markdownDocumentIncludesFrontmatter: detail?.markdownDocument.startsWith('---') ?? false,\n resourceFileCount: detail?.resources.length ?? 0,\n preview,\n markdownBodyIncludesContent: detail?.markdownBody.includes('This is a mock published skill.') ?? false,\n },\n null,\n 2,\n ),\n );\n};\n\nvoid run();\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["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","userSkills","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","run","detailSkillItem","detailItem","markdownBody","renderedContent","files","relativePath","contentType","content","size","sortOrder","config","cwd","backendOriginSmoke","requestedSkillArgParsingSmoke","effectiveSkillGroupingSmoke","selection","detail","selectedItems","preview","split","slice","console","log","JSON","stringify","runtimeMode","graphqlUrl","availableTools","facets","selectedSkillCount","missingSkills","missingIdentifiers","selectedSkillSlug","skillSlug","selectedSkillTags","markdownDocumentIncludesFrontmatter","markdownDocument","startsWith","resourceFileCount","resources","markdownBodyIncludesContent","includes"],"sources":["../src/smoke-published-skills.ts"],"sourcesContent":["import {\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 ...Array.from({ length: 4 }, (_, index) => createSkillItem(index + 1, '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((skill) => skill.contextKind === 'global' && skill.assignmentSource === 'GLOBAL');\n const userSkills = catalog.skills.filter((skill) => skill.assignmentSource === 'USER_GLOBAL');\n const installableSkillCount = payload.catalogSkills.length;\n\n assertEqual('published skill count', catalog.publishedSkillCount, 23);\n assertEqual('global assignment count', catalog.assignmentCounts.global, 19);\n assertEqual('project assignment count', catalog.assignmentCounts.project, 0);\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('user grouped skill count', userSkills.length, 4);\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({ skill: 'frontend-components,frontend-styles\\nfrontend-navigation' });\n const skillsFieldSelection = parseRequestedSkillArgs({ skills: 'frontend-components,frontend-styles\\nfrontend-navigation' });\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(`Expected default backend origin ${DEPLOY_BACKEND_ORIGIN}, received ${defaultConfig.backendOrigin}`);\n }\n\n const portOnlyConfig = await withBackendEnv({ PORT: '19876' }, () => resolveConfig(isolatedWorktree));\n if (portOnlyConfig.backendOrigin !== DEPLOY_BACKEND_ORIGIN) {\n throw new Error(`Expected PORT-only backend origin to stay ${DEPLOY_BACKEND_ORIGIN}, received ${portOnlyConfig.backendOrigin}`);\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(`Expected explicit backend override ${LOCAL_OVERRIDE_BACKEND_ORIGIN}, received ${overrideConfig.backendOrigin}`);\n }\n\n return {\n defaultBackendOrigin: defaultConfig.backendOrigin,\n portOnlyBackendOrigin: portOnlyConfig.backendOrigin,\n appUrlPlaceholderBackendOrigin: appUrlPlaceholderConfig.backendOrigin,\n explicitOverrideBackendOrigin: overrideConfig.backendOrigin,\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 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 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 ?? null,\n selectedSkillTags: detail?.tags ?? [],\n markdownDocumentIncludesFrontmatter: detail?.markdownDocument.startsWith('---') ?? false,\n resourceFileCount: detail?.resources.length ?? 0,\n preview,\n markdownBodyIncludesContent: detail?.markdownBody.includes('This is a mock published skill.') ?? false,\n },\n null,\n 2,\n ),\n );\n};\n\nvoid run();\n"],"mappings":"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","ignoreList":[]}