@aexol/opencode-wizard 0.3.3 → 0.3.5

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 (106) hide show
  1. package/README.md +9 -7
  2. package/dist/graphql-operations.d.ts +7 -0
  3. package/dist/graphql-operations.js +230 -0
  4. package/dist/graphql-operations.js.map +1 -0
  5. package/dist/plugin-tools.d.ts +90 -0
  6. package/dist/plugin-tools.js +93 -0
  7. package/dist/plugin-tools.js.map +1 -0
  8. package/dist/published-skills-system-note.d.ts +9 -0
  9. package/dist/published-skills-system-note.js +30 -0
  10. package/dist/published-skills-system-note.js.map +1 -0
  11. package/dist/published-skills-terminology.d.ts +21 -0
  12. package/dist/published-skills-terminology.js +38 -0
  13. package/dist/published-skills-terminology.js.map +1 -0
  14. package/dist/published-skills-transform.d.ts +258 -0
  15. package/dist/published-skills-transform.js +310 -0
  16. package/dist/published-skills-transform.js.map +1 -0
  17. package/dist/server/auth-bootstrap.d.ts +7 -0
  18. package/dist/server/auth-bootstrap.js +89 -0
  19. package/dist/server/auth-bootstrap.js.map +1 -0
  20. package/dist/server/auth-flow.d.ts +10 -0
  21. package/dist/server/auth-flow.js +215 -0
  22. package/dist/server/auth-flow.js.map +1 -0
  23. package/dist/server/auth-store.d.ts +19 -0
  24. package/dist/server/auth-store.js +177 -0
  25. package/dist/server/auth-store.js.map +1 -0
  26. package/dist/server/client.d.ts +80 -0
  27. package/dist/server/client.js +324 -0
  28. package/dist/server/client.js.map +1 -0
  29. package/dist/server/config.d.ts +2 -0
  30. package/dist/server/config.js +82 -0
  31. package/dist/server/config.js.map +1 -0
  32. package/dist/server/constants.d.ts +26 -0
  33. package/dist/server/constants.js +32 -0
  34. package/dist/server/constants.js.map +1 -0
  35. package/dist/server/path-utils.d.ts +2 -0
  36. package/dist/server/path-utils.js +8 -0
  37. package/dist/server/path-utils.js.map +1 -0
  38. package/dist/server/preferences.d.ts +22 -0
  39. package/dist/server/preferences.js +121 -0
  40. package/dist/server/preferences.js.map +1 -0
  41. package/dist/server/presence.d.ts +14 -0
  42. package/dist/server/presence.js +68 -0
  43. package/dist/server/presence.js.map +1 -0
  44. package/dist/server/runtime.d.ts +13 -0
  45. package/dist/server/runtime.js +1315 -0
  46. package/dist/server/runtime.js.map +1 -0
  47. package/dist/server/status.d.ts +27 -0
  48. package/dist/server/status.js +224 -0
  49. package/dist/server/status.js.map +1 -0
  50. package/dist/server/types.d.ts +396 -0
  51. package/dist/server/types.js +2 -0
  52. package/dist/server/types.js.map +1 -0
  53. package/dist/server/workspace.d.ts +15 -0
  54. package/dist/server/workspace.js +126 -0
  55. package/dist/server/workspace.js.map +1 -0
  56. package/dist/server.d.ts +4 -309
  57. package/dist/server.js +4 -2611
  58. package/dist/server.js.map +1 -1
  59. package/dist/smoke-published-skills.js +11 -9
  60. package/dist/smoke-published-skills.js.map +1 -1
  61. package/dist/tui/components/common.d.ts +15 -0
  62. package/dist/tui/components/common.js +81 -0
  63. package/dist/tui/components/common.js.map +1 -0
  64. package/dist/tui/components/preference-action-notice-row.d.ts +5 -0
  65. package/dist/tui/components/preference-action-notice-row.js +17 -0
  66. package/dist/tui/components/preference-action-notice-row.js.map +1 -0
  67. package/dist/tui/components/skill-catalog-row.d.ts +8 -0
  68. package/dist/tui/components/skill-catalog-row.js +125 -0
  69. package/dist/tui/components/skill-catalog-row.js.map +1 -0
  70. package/dist/tui/components/status-content.d.ts +14 -0
  71. package/dist/tui/components/status-content.js +131 -0
  72. package/dist/tui/components/status-content.js.map +1 -0
  73. package/dist/tui/components/wizard-skills-dialog-content.d.ts +9 -0
  74. package/dist/tui/components/wizard-skills-dialog-content.js +229 -0
  75. package/dist/tui/components/wizard-skills-dialog-content.js.map +1 -0
  76. package/dist/tui/components/wizard-skills-dialog.d.ts +7 -0
  77. package/dist/tui/components/wizard-skills-dialog.js +156 -0
  78. package/dist/tui/components/wizard-skills-dialog.js.map +1 -0
  79. package/dist/tui/constants.d.ts +8 -0
  80. package/dist/tui/constants.js +9 -0
  81. package/dist/tui/constants.js.map +1 -0
  82. package/dist/tui/formatting.d.ts +8 -0
  83. package/dist/tui/formatting.js +45 -0
  84. package/dist/tui/formatting.js.map +1 -0
  85. package/dist/tui/plugin.d.ts +2 -0
  86. package/dist/tui/plugin.js +26 -0
  87. package/dist/tui/plugin.js.map +1 -0
  88. package/dist/tui/rendering.d.ts +2 -0
  89. package/dist/tui/rendering.js +8 -0
  90. package/dist/tui/rendering.js.map +1 -0
  91. package/dist/tui/skill-helpers.d.ts +13 -0
  92. package/dist/tui/skill-helpers.js +50 -0
  93. package/dist/tui/skill-helpers.js.map +1 -0
  94. package/dist/tui/slots.d.ts +2 -0
  95. package/dist/tui/slots.js +56 -0
  96. package/dist/tui/slots.js.map +1 -0
  97. package/dist/tui/status.d.ts +2 -0
  98. package/dist/tui/status.js +21 -0
  99. package/dist/tui/status.js.map +1 -0
  100. package/dist/tui/types.d.ts +75 -0
  101. package/dist/tui/types.js +2 -0
  102. package/dist/tui/types.js.map +1 -0
  103. package/dist/tui.d.ts +1 -44
  104. package/dist/tui.js +2 -870
  105. package/dist/tui.js.map +1 -1
  106. package/package.json +1 -1
@@ -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","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","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 ...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(\n (skill) => skill.contextKind === 'global' && skill.assignmentSource === 'GLOBAL',\n );\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({\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, 0 project, 4 user, 0 other.',\n 'Wizard-listed skills are backend-published, not native OpenCode skills.',\n 'Use native skill tooling only for names in native available_skills.',\n 'When a wizard skill matches by whenToUse, fetch its current body with opencode_wizard_published_skills_fetch before using it.',\n 'Use `skills` for multiple wizard skill identifiers; use `skill` for one.',\n 'If native skill loading cannot find a wizard-listed skill, fetch it as a wizard skill instead.',\n 'Fetched wizard bodies are authoritative over local seed/native sources.',\n 'Global skills:',\n 'Project skills: none.',\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('native OpenCode skill'),\n includesNativeSkillNotFoundEvidence: systemNote.includes('native skill loading cannot find'),\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":[]}
@@ -0,0 +1,15 @@
1
+ import type { RGBA } from '@opentui/core';
2
+ import type { JSX } from 'solid-js';
3
+ import type { TuiPluginApi } from '../types.js';
4
+ export declare const Row: (props: {
5
+ label: string;
6
+ value: string;
7
+ labelColor: string | RGBA | undefined;
8
+ valueColor: string | RGBA | undefined;
9
+ }) => any;
10
+ export declare const Panel: (props: {
11
+ title: string;
12
+ theme: TuiPluginApi["theme"]["current"];
13
+ onOpen: () => void;
14
+ children: JSX.Element;
15
+ }) => any;
@@ -0,0 +1,81 @@
1
+ import { effect as _$effect } from "@opentui/solid";
2
+ import { createTextNode as _$createTextNode } from "@opentui/solid";
3
+ import { insertNode as _$insertNode } from "@opentui/solid";
4
+ import { insert as _$insert } from "@opentui/solid";
5
+ import { setProp as _$setProp } from "@opentui/solid";
6
+ import { createElement as _$createElement } from "@opentui/solid";
7
+ export const Row = props => (() => {
8
+ var _el$ = _$createElement("box"),
9
+ _el$2 = _$createElement("text"),
10
+ _el$3 = _$createTextNode(`:&nbsp;`),
11
+ _el$4 = _$createElement("text");
12
+ _$insertNode(_el$, _el$2);
13
+ _$insertNode(_el$, _el$4);
14
+ _$setProp(_el$, "width", "100%");
15
+ _$setProp(_el$, "flexDirection", "row");
16
+ _$setProp(_el$, "overflow", "hidden");
17
+ _$insertNode(_el$2, _el$3);
18
+ _$setProp(_el$2, "flexShrink", 0);
19
+ _$setProp(_el$2, "wrapMode", "none");
20
+ _$insert(_el$2, () => props.label, _el$3);
21
+ _$setProp(_el$4, "flexGrow", 1);
22
+ _$setProp(_el$4, "overflow", "hidden");
23
+ _$setProp(_el$4, "wrapMode", "none");
24
+ _$insert(_el$4, () => props.value);
25
+ _$effect(_p$ => {
26
+ var _v$ = props.labelColor,
27
+ _v$2 = props.valueColor;
28
+ _v$ !== _p$.e && (_p$.e = _$setProp(_el$2, "fg", _v$, _p$.e));
29
+ _v$2 !== _p$.t && (_p$.t = _$setProp(_el$4, "fg", _v$2, _p$.t));
30
+ return _p$;
31
+ }, {
32
+ e: undefined,
33
+ t: undefined
34
+ });
35
+ return _el$;
36
+ })();
37
+ export const Panel = props => (() => {
38
+ var _el$5 = _$createElement("box"),
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");
45
+ _$insertNode(_el$5, _el$6);
46
+ _$setProp(_el$5, "width", "100%");
47
+ _$setProp(_el$5, "flexDirection", "column");
48
+ _$setProp(_el$5, "paddingRight", 1);
49
+ _$insertNode(_el$6, _el$7);
50
+ _$insertNode(_el$6, _el$0);
51
+ _$setProp(_el$6, "width", "100%");
52
+ _$setProp(_el$6, "flexDirection", "row");
53
+ _$setProp(_el$6, "justifyContent", "space-between");
54
+ _$setProp(_el$6, "overflow", "hidden");
55
+ _$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");
65
+ _$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
+ });
79
+ return _el$5;
80
+ })();
81
+ //# sourceMappingURL=common.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,5 @@
1
+ import type { PreferenceActionNotice, TuiPluginApi } from '../types.js';
2
+ export declare const PreferenceActionNoticeRow: (props: {
3
+ notice: PreferenceActionNotice;
4
+ theme: TuiPluginApi["theme"]["current"];
5
+ }) => any;
@@ -0,0 +1,17 @@
1
+ import { effect as _$effect } from "@opentui/solid";
2
+ import { insert as _$insert } from "@opentui/solid";
3
+ import { setProp as _$setProp } from "@opentui/solid";
4
+ import { createElement as _$createElement } from "@opentui/solid";
5
+ import { compactStatusMessage } from '../formatting.js';
6
+ export const PreferenceActionNoticeRow = props => {
7
+ if (props.notice.kind === 'idle') return null;
8
+ return (() => {
9
+ var _el$ = _$createElement("text");
10
+ _$setProp(_el$, "wrapMode", "none");
11
+ _$setProp(_el$, "overflow", "hidden");
12
+ _$insert(_el$, () => compactStatusMessage(props.notice.message));
13
+ _$effect(_$p => _$setProp(_el$, "fg", props.notice.kind === 'error' ? props.theme.warning : props.theme.textMuted, _$p));
14
+ return _el$;
15
+ })();
16
+ };
17
+ //# sourceMappingURL=preference-action-notice-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["compactStatusMessage","PreferenceActionNoticeRow","props","notice","kind","_el$","_$createElement","_$setProp","_$insert","message","_$effect","_$p","theme","warning","textMuted"],"sources":["../../../src/tui/components/preference-action-notice-row.tsx"],"sourcesContent":["import { compactStatusMessage } from '../formatting.js';\nimport type { PreferenceActionNotice, TuiPluginApi } from '../types.js';\n\nexport const PreferenceActionNoticeRow = (props: {\n notice: PreferenceActionNotice;\n theme: TuiPluginApi['theme']['current'];\n}) => {\n if (props.notice.kind === 'idle') return null;\n\n return (\n <text\n fg={props.notice.kind === 'error' ? props.theme.warning : props.theme.textMuted}\n wrapMode=\"none\"\n overflow=\"hidden\"\n >\n {compactStatusMessage(props.notice.message)}\n </text>\n );\n};\n"],"mappings":";;;;AAAA,SAASA,oBAAoB,QAAQ,kBAAkB;AAGvD,OAAO,MAAMC,yBAAyB,GAAIC,KAGzC,IAAK;EACJ,IAAIA,KAAK,CAACC,MAAM,CAACC,IAAI,KAAK,MAAM,EAAE,OAAO,IAAI;EAE7C;IAAA,IAAAC,IAAA,GAAAC,eAAA;IAAAC,SAAA,CAAAF,IAAA,cAGa,MAAM;IAAAE,SAAA,CAAAF,IAAA,cACN,QAAQ;IAAAG,QAAA,CAAAH,IAAA,QAEhBL,oBAAoB,CAACE,KAAK,CAACC,MAAM,CAACM,OAAO,CAAC;IAAAC,QAAA,CAAAC,GAAA,IAAAJ,SAAA,CAAAF,IAAA,QAJvCH,KAAK,CAACC,MAAM,CAACC,IAAI,KAAK,OAAO,GAAGF,KAAK,CAACU,KAAK,CAACC,OAAO,GAAGX,KAAK,CAACU,KAAK,CAACE,SAAS,EAAAH,GAAA;IAAA,OAAAN,IAAA;EAAA;AAOrF,CAAC","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import type { PreferenceScope, SkillDialogRow, TuiPluginApi } from '../types.js';
2
+ export declare const SkillCatalogRow: (props: {
3
+ row: SkillDialogRow;
4
+ theme: TuiPluginApi["theme"]["current"];
5
+ onIgnore: (row: SkillDialogRow) => void;
6
+ onInstall: (row: SkillDialogRow, preferenceScope: PreferenceScope) => void;
7
+ onUninstall: (row: SkillDialogRow) => void;
8
+ }) => any;
@@ -0,0 +1,125 @@
1
+ import { effect as _$effect } from "@opentui/solid";
2
+ import { memo as _$memo } from "@opentui/solid";
3
+ import { createTextNode as _$createTextNode } from "@opentui/solid";
4
+ import { insertNode as _$insertNode } from "@opentui/solid";
5
+ import { insert as _$insert } from "@opentui/solid";
6
+ import { setProp as _$setProp } from "@opentui/solid";
7
+ import { createElement as _$createElement } from "@opentui/solid";
8
+ import { compactSkillDescription, compactSkillMeta, compactSkillName } from '../formatting.js';
9
+ import { WIZARD_SCOPE_LABELS } from '../../published-skills-terminology.js';
10
+ import { getRowStateLabel, getSkillDescription, getSkillDisplayName, getSkillMeta } from '../skill-helpers.js';
11
+ export const SkillCatalogRow = props => {
12
+ const skill = props.row.skill;
13
+ const description = getSkillDescription(skill);
14
+ const canUninstall = skill.assignmentSource === 'USER_GLOBAL' || skill.assignmentSource === 'USER_WORKSPACE';
15
+ return (() => {
16
+ var _el$ = _$createElement("box"),
17
+ _el$2 = _$createElement("box"),
18
+ _el$3 = _$createElement("text"),
19
+ _el$4 = _$createElement("b"),
20
+ _el$5 = _$createTextNode(` (`),
21
+ _el$7 = _$createTextNode(`)`),
22
+ _el$8 = _$createElement("box"),
23
+ _el$9 = _$createElement("text");
24
+ _$insertNode(_el$, _el$2);
25
+ _$insertNode(_el$, _el$9);
26
+ _$setProp(_el$, "width", "100%");
27
+ _$setProp(_el$, "flexDirection", "column");
28
+ _$setProp(_el$, "overflow", "hidden");
29
+ _$setProp(_el$, "marginBottom", 1);
30
+ _$insertNode(_el$2, _el$3);
31
+ _$insertNode(_el$2, _el$8);
32
+ _$setProp(_el$2, "width", "100%");
33
+ _$setProp(_el$2, "flexDirection", "row");
34
+ _$setProp(_el$2, "justifyContent", "space-between");
35
+ _$setProp(_el$2, "overflow", "hidden");
36
+ _$insertNode(_el$3, _el$4);
37
+ _$insertNode(_el$3, _el$5);
38
+ _$insertNode(_el$3, _el$7);
39
+ _$setProp(_el$3, "wrapMode", "none");
40
+ _$setProp(_el$3, "overflow", "hidden");
41
+ _$insert(_el$4, () => compactSkillName(getSkillDisplayName(skill)));
42
+ _$insert(_el$3, () => getRowStateLabel(props.row), _el$7);
43
+ _$setProp(_el$8, "flexDirection", "row");
44
+ _$setProp(_el$8, "flexShrink", 0);
45
+ _$insert(_el$8, (() => {
46
+ var _c$ = _$memo(() => props.row.state === 'installable');
47
+ return () => _c$() ? [(() => {
48
+ var _el$0 = _$createElement("box"),
49
+ _el$1 = _$createElement("text");
50
+ _$insertNode(_el$0, _el$1);
51
+ _$setProp(_el$0, "onMouseUp", () => props.onInstall(props.row, 'global'));
52
+ _$setProp(_el$0, "flexShrink", 0);
53
+ _$setProp(_el$1, "wrapMode", "none");
54
+ _$insert(_el$1, () => WIZARD_SCOPE_LABELS.global);
55
+ _$effect(_$p => _$setProp(_el$1, "fg", props.theme.textMuted, _$p));
56
+ return _el$0;
57
+ })(), (() => {
58
+ var _el$10 = _$createElement("text");
59
+ _$insertNode(_el$10, _$createTextNode(` / `));
60
+ _$setProp(_el$10, "wrapMode", "none");
61
+ _$effect(_$p => _$setProp(_el$10, "fg", props.theme.textMuted, _$p));
62
+ return _el$10;
63
+ })(), (() => {
64
+ var _el$12 = _$createElement("box"),
65
+ _el$13 = _$createElement("text");
66
+ _$insertNode(_el$12, _el$13);
67
+ _$setProp(_el$12, "onMouseUp", () => props.onInstall(props.row, 'project'));
68
+ _$setProp(_el$12, "flexShrink", 0);
69
+ _$setProp(_el$13, "wrapMode", "none");
70
+ _$insert(_el$13, () => WIZARD_SCOPE_LABELS.project);
71
+ _$effect(_$p => _$setProp(_el$13, "fg", props.theme.textMuted, _$p));
72
+ return _el$12;
73
+ })()] : [(() => {
74
+ var _el$14 = _$createElement("box"),
75
+ _el$15 = _$createElement("text");
76
+ _$insertNode(_el$14, _el$15);
77
+ _$setProp(_el$14, "onMouseUp", () => props.onIgnore(props.row));
78
+ _$setProp(_el$14, "flexShrink", 0);
79
+ _$setProp(_el$15, "wrapMode", "none");
80
+ _$insert(_el$15, () => props.row.ignored ? 'Unignore' : 'Ignore');
81
+ _$effect(_$p => _$setProp(_el$15, "fg", props.theme.textMuted, _$p));
82
+ return _el$14;
83
+ })(), canUninstall ? [(() => {
84
+ var _el$16 = _$createElement("text");
85
+ _$insertNode(_el$16, _$createTextNode(` / `));
86
+ _$setProp(_el$16, "wrapMode", "none");
87
+ _$effect(_$p => _$setProp(_el$16, "fg", props.theme.textMuted, _$p));
88
+ return _el$16;
89
+ })(), (() => {
90
+ var _el$18 = _$createElement("box"),
91
+ _el$19 = _$createElement("text");
92
+ _$insertNode(_el$18, _el$19);
93
+ _$setProp(_el$18, "onMouseUp", () => props.onUninstall(props.row));
94
+ _$setProp(_el$18, "flexShrink", 0);
95
+ _$insertNode(_el$19, _$createTextNode(`Uninstall`));
96
+ _$setProp(_el$19, "wrapMode", "none");
97
+ _$effect(_$p => _$setProp(_el$19, "fg", props.theme.textMuted, _$p));
98
+ return _el$18;
99
+ })()] : null];
100
+ })());
101
+ _$setProp(_el$9, "wrapMode", "none");
102
+ _$setProp(_el$9, "overflow", "hidden");
103
+ _$insert(_el$9, () => compactSkillMeta(getSkillMeta(skill, props.row.state)));
104
+ _$insert(_el$, description ? (() => {
105
+ var _el$21 = _$createElement("text");
106
+ _$setProp(_el$21, "wrapMode", "none");
107
+ _$setProp(_el$21, "overflow", "hidden");
108
+ _$insert(_el$21, () => compactSkillDescription(description));
109
+ _$effect(_$p => _$setProp(_el$21, "fg", props.theme.text, _$p));
110
+ return _el$21;
111
+ })() : null, null);
112
+ _$effect(_p$ => {
113
+ var _v$ = props.row.ignored ? props.theme.textMuted : props.theme.text,
114
+ _v$2 = props.theme.textMuted;
115
+ _v$ !== _p$.e && (_p$.e = _$setProp(_el$3, "fg", _v$, _p$.e));
116
+ _v$2 !== _p$.t && (_p$.t = _$setProp(_el$9, "fg", _v$2, _p$.t));
117
+ return _p$;
118
+ }, {
119
+ e: undefined,
120
+ t: undefined
121
+ });
122
+ return _el$;
123
+ })();
124
+ };
125
+ //# sourceMappingURL=skill-catalog-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["compactSkillDescription","compactSkillMeta","compactSkillName","WIZARD_SCOPE_LABELS","getRowStateLabel","getSkillDescription","getSkillDisplayName","getSkillMeta","SkillCatalogRow","props","skill","row","description","canUninstall","assignmentSource","_el$","_$createElement","_el$2","_el$3","_el$4","_el$5","_$createTextNode","_el$7","_el$8","_el$9","_$insertNode","_$setProp","_$insert","_c$","_$memo","state","_el$0","_el$1","onInstall","global","_$effect","_$p","theme","textMuted","_el$10","_el$12","_el$13","project","_el$14","_el$15","onIgnore","ignored","_el$16","_el$18","_el$19","onUninstall","_el$21","text","_p$","_v$","_v$2","e","t","undefined"],"sources":["../../../src/tui/components/skill-catalog-row.tsx"],"sourcesContent":["import { compactSkillDescription, compactSkillMeta, compactSkillName } from '../formatting.js';\nimport { WIZARD_SCOPE_LABELS } from '../../published-skills-terminology.js';\nimport {\n getRowStateLabel,\n getSkillDescription,\n getSkillDisplayName,\n getSkillMeta,\n} from '../skill-helpers.js';\nimport type { PreferenceScope, SkillDialogRow, TuiPluginApi } from '../types.js';\n\nexport const SkillCatalogRow = (props: {\n row: SkillDialogRow;\n theme: TuiPluginApi['theme']['current'];\n onIgnore: (row: SkillDialogRow) => void;\n onInstall: (row: SkillDialogRow, preferenceScope: PreferenceScope) => void;\n onUninstall: (row: SkillDialogRow) => void;\n}) => {\n const skill = props.row.skill;\n const description = getSkillDescription(skill);\n const canUninstall = skill.assignmentSource === 'USER_GLOBAL' || skill.assignmentSource === 'USER_WORKSPACE';\n\n return (\n <box width=\"100%\" flexDirection=\"column\" overflow=\"hidden\" marginBottom={1}>\n <box width=\"100%\" flexDirection=\"row\" justifyContent=\"space-between\" overflow=\"hidden\">\n <text fg={props.row.ignored ? props.theme.textMuted : props.theme.text} wrapMode=\"none\" overflow=\"hidden\">\n <b>{compactSkillName(getSkillDisplayName(skill))}</b>\n {' '}({getRowStateLabel(props.row)})\n </text>\n <box flexDirection=\"row\" flexShrink={0}>\n {props.row.state === 'installable' ? (\n <>\n <box onMouseUp={() => props.onInstall(props.row, 'global')} flexShrink={0}>\n <text fg={props.theme.textMuted} wrapMode=\"none\">\n {WIZARD_SCOPE_LABELS.global}\n </text>\n </box>\n <text fg={props.theme.textMuted} wrapMode=\"none\">\n {' / '}\n </text>\n <box onMouseUp={() => props.onInstall(props.row, 'project')} flexShrink={0}>\n <text fg={props.theme.textMuted} wrapMode=\"none\">\n {WIZARD_SCOPE_LABELS.project}\n </text>\n </box>\n </>\n ) : (\n <>\n <box onMouseUp={() => props.onIgnore(props.row)} flexShrink={0}>\n <text fg={props.theme.textMuted} wrapMode=\"none\">\n {props.row.ignored ? 'Unignore' : 'Ignore'}\n </text>\n </box>\n {canUninstall ? (\n <>\n <text fg={props.theme.textMuted} wrapMode=\"none\">\n {' / '}\n </text>\n <box onMouseUp={() => props.onUninstall(props.row)} flexShrink={0}>\n <text fg={props.theme.textMuted} wrapMode=\"none\">\n Uninstall\n </text>\n </box>\n </>\n ) : null}\n </>\n )}\n </box>\n </box>\n <text fg={props.theme.textMuted} wrapMode=\"none\" overflow=\"hidden\">\n {compactSkillMeta(getSkillMeta(skill, props.row.state))}\n </text>\n {description ? (\n <text fg={props.theme.text} wrapMode=\"none\" overflow=\"hidden\">\n {compactSkillDescription(description)}\n </text>\n ) : null}\n </box>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ import type { PluginStatusSnapshot } from '../../server.js';
2
+ import type { StatusState, TuiPluginApi } from '../types.js';
3
+ export declare const StatusContent: (props: {
4
+ status: StatusState;
5
+ theme: TuiPluginApi["theme"]["current"];
6
+ }) => any;
7
+ export declare const SkillsRows: (props: {
8
+ api: TuiPluginApi;
9
+ status: () => StatusState;
10
+ }) => any;
11
+ export declare const ReadyRows: (props: {
12
+ snapshot: PluginStatusSnapshot;
13
+ theme: TuiPluginApi["theme"]["current"];
14
+ }) => any;
@@ -0,0 +1,131 @@
1
+ import { createComponent as _$createComponent } from "@opentui/solid";
2
+ import { insert as _$insert } from "@opentui/solid";
3
+ import { effect as _$effect } from "@opentui/solid";
4
+ import { createTextNode as _$createTextNode } from "@opentui/solid";
5
+ import { insertNode as _$insertNode } from "@opentui/solid";
6
+ import { setProp as _$setProp } from "@opentui/solid";
7
+ import { createElement as _$createElement } from "@opentui/solid";
8
+ import { createMemo } from 'solid-js';
9
+ import { compactStatusMessage, formatAuthStatus, formatBackendOriginLabel, formatSkillsCatalogUnavailableMessage } from '../formatting.js';
10
+ import { getInstallableNotInstalledSkills } from '../skill-helpers.js';
11
+ import { Row } from './common.js';
12
+ export const StatusContent = props => {
13
+ if (props.status.kind === 'loading') {
14
+ return (() => {
15
+ var _el$ = _$createElement("text");
16
+ _$insertNode(_el$, _$createTextNode(`loading…`));
17
+ _$setProp(_el$, "wrapMode", "none");
18
+ _$setProp(_el$, "overflow", "hidden");
19
+ _$effect(_$p => _$setProp(_el$, "fg", props.theme.textMuted, _$p));
20
+ return _el$;
21
+ })();
22
+ }
23
+ if (props.status.kind === 'error') {
24
+ return (() => {
25
+ var _el$3 = _$createElement("text"),
26
+ _el$4 = _$createTextNode(`unavailable: `);
27
+ _$insertNode(_el$3, _el$4);
28
+ _$setProp(_el$3, "wrapMode", "none");
29
+ _$setProp(_el$3, "overflow", "hidden");
30
+ _$insert(_el$3, () => compactStatusMessage(props.status.message), null);
31
+ _$effect(_$p => _$setProp(_el$3, "fg", props.theme.warning, _$p));
32
+ return _el$3;
33
+ })();
34
+ }
35
+ return _$createComponent(ReadyRows, {
36
+ get snapshot() {
37
+ return props.status.snapshot;
38
+ },
39
+ get theme() {
40
+ return props.theme;
41
+ }
42
+ });
43
+ };
44
+ export const SkillsRows = props => {
45
+ const theme = createMemo(() => props.api.theme.current);
46
+ const statusContent = () => {
47
+ const currentStatus = props.status();
48
+ return _$createComponent(StatusContent, {
49
+ status: currentStatus,
50
+ get theme() {
51
+ return theme();
52
+ }
53
+ });
54
+ };
55
+ return (() => {
56
+ var _el$5 = _$createElement("box");
57
+ _$setProp(_el$5, "width", "100%");
58
+ _$setProp(_el$5, "flexDirection", "column");
59
+ _$setProp(_el$5, "overflow", "hidden");
60
+ _$insert(_el$5, statusContent);
61
+ return _el$5;
62
+ })();
63
+ };
64
+ export const ReadyRows = props => {
65
+ const statusRows = [_$createComponent(Row, {
66
+ label: "url",
67
+ get value() {
68
+ return formatBackendOriginLabel(props.snapshot.backendOrigin);
69
+ },
70
+ get labelColor() {
71
+ return props.theme.textMuted;
72
+ },
73
+ get valueColor() {
74
+ return props.theme.text;
75
+ }
76
+ }), _$createComponent(Row, {
77
+ label: "auth",
78
+ get value() {
79
+ return formatAuthStatus(props.snapshot);
80
+ },
81
+ get labelColor() {
82
+ return props.theme.textMuted;
83
+ },
84
+ get valueColor() {
85
+ return props.theme.text;
86
+ }
87
+ })];
88
+ if (!props.snapshot.catalog) {
89
+ return (() => {
90
+ var _el$6 = _$createElement("box");
91
+ _$setProp(_el$6, "width", "100%");
92
+ _$setProp(_el$6, "flexDirection", "column");
93
+ _$setProp(_el$6, "overflow", "hidden");
94
+ _$insert(_el$6, statusRows, null);
95
+ _$insert(_el$6, _$createComponent(Row, {
96
+ label: "catalog",
97
+ get value() {
98
+ return formatSkillsCatalogUnavailableMessage(props.snapshot);
99
+ },
100
+ get labelColor() {
101
+ return props.theme.textMuted;
102
+ },
103
+ get valueColor() {
104
+ return props.theme.text;
105
+ }
106
+ }), null);
107
+ return _el$6;
108
+ })();
109
+ }
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`;
112
+ return (() => {
113
+ var _el$7 = _$createElement("box");
114
+ _$setProp(_el$7, "width", "100%");
115
+ _$setProp(_el$7, "flexDirection", "column");
116
+ _$setProp(_el$7, "overflow", "hidden");
117
+ _$insert(_el$7, statusRows, null);
118
+ _$insert(_el$7, _$createComponent(Row, {
119
+ label: "catalog",
120
+ value: catalogStatus,
121
+ get labelColor() {
122
+ return props.theme.textMuted;
123
+ },
124
+ get valueColor() {
125
+ return props.theme.text;
126
+ }
127
+ }), null);
128
+ return _el$7;
129
+ })();
130
+ };
131
+ //# sourceMappingURL=status-content.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,9 @@
1
+ import type { PreferenceActionNotice, PreferenceScope, SkillDialogRow, StatusState, TuiPluginApi } from '../types.js';
2
+ export declare const WizardSkillsDialogContent: (props: {
3
+ status: () => StatusState;
4
+ actionNotice: () => PreferenceActionNotice;
5
+ theme: TuiPluginApi["theme"]["current"];
6
+ onIgnoreSkill: (row: SkillDialogRow) => void;
7
+ onInstallSkill: (row: SkillDialogRow, preferenceScope: PreferenceScope) => void;
8
+ onUninstallSkill: (row: SkillDialogRow) => void;
9
+ }) => any;