@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
@@ -0,0 +1,50 @@
1
+ import { WIZARD_SCOPE_LABELS, isUserPublishedSkillAssignment } from '../published-skills-terminology.js';
2
+ import { MAX_SKILL_TAGS } from './constants.js';
3
+ export const getSkillDisplayName = skill => skill.artifactName || skill.skillName || skill.skillSlug;
4
+ export const getSkillDescription = skill => {
5
+ if (skill.whenToUse) return skill.whenToUse;
6
+ if (skill.artifactDescription) return skill.artifactDescription;
7
+ return null;
8
+ };
9
+ export const getSkillTags = skill => {
10
+ const tagLabels = skill.tags.map(tag => tag.label || tag.slug).filter(Boolean).slice(0, MAX_SKILL_TAGS);
11
+ if (tagLabels.length === 0) return 'no tags';
12
+ return tagLabels.join(', ');
13
+ };
14
+ export const isUserScopeAssignment = assignmentSource => isUserPublishedSkillAssignment(assignmentSource);
15
+ export const getSkillScopeLabel = (skill, state) => {
16
+ if (state === 'installable') return WIZARD_SCOPE_LABELS.available;
17
+ if (isUserScopeAssignment(skill.assignmentSource) || state === 'user-scope') return WIZARD_SCOPE_LABELS.user;
18
+ if (state === 'global-scope' || skill.contextKind === 'global') return WIZARD_SCOPE_LABELS.global;
19
+ return WIZARD_SCOPE_LABELS.project;
20
+ };
21
+ export const getSkillPreferenceScope = skill => {
22
+ if (skill.assignmentSource === 'USER_GLOBAL') return 'global';
23
+ if (skill.assignmentSource === 'USER_WORKSPACE') return 'project';
24
+ if (skill.contextKind === 'global') return 'global';
25
+ return 'project';
26
+ };
27
+ export const getSkillMeta = (skill, state) => `${getSkillScopeLabel(skill, state)} · ${skill.assignmentLabel} · ${skill.policyLabel} · ${getSkillTags(skill)}`;
28
+ export const getRowStateLabel = row => {
29
+ const scopeLabel = getSkillScopeLabel(row.skill, row.state);
30
+ if (row.ignored) return `ignored · ${scopeLabel}`;
31
+ if (row.state === 'installable') return 'wizard not installed';
32
+ return `active · ${scopeLabel}`;
33
+ };
34
+ export const getSkillRowState = skill => {
35
+ if (isUserScopeAssignment(skill.assignmentSource)) return 'user-scope';
36
+ if (skill.contextKind === 'global') return 'global-scope';
37
+ return 'project-scope';
38
+ };
39
+ export const getInstallableNotInstalledSkills = snapshot => {
40
+ const installableSkills = snapshot.installableCatalog?.skills ?? [];
41
+ if (installableSkills.length === 0) return [];
42
+ const activeSkillSlugs = new Set(snapshot.catalog?.skills.map(skill => skill.skillSlug) ?? []);
43
+ const ignoredSkillSlugs = new Set(snapshot.ignoredPublishedSkills.skills.map(skill => skill.skillSlug));
44
+ return installableSkills.filter(skill => !activeSkillSlugs.has(skill.skillSlug) && !ignoredSkillSlugs.has(skill.skillSlug));
45
+ };
46
+ export const getErrorMessage = error => {
47
+ if (error instanceof Error && error.message) return error.message;
48
+ return 'Preference update failed. Check plugin auth/backend status and try again.';
49
+ };
50
+ //# sourceMappingURL=skill-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["WIZARD_SCOPE_LABELS","isUserPublishedSkillAssignment","MAX_SKILL_TAGS","getSkillDisplayName","skill","artifactName","skillName","skillSlug","getSkillDescription","whenToUse","artifactDescription","getSkillTags","tagLabels","tags","map","tag","label","slug","filter","Boolean","slice","length","join","isUserScopeAssignment","assignmentSource","getSkillScopeLabel","state","available","user","contextKind","global","project","getSkillPreferenceScope","getSkillMeta","assignmentLabel","policyLabel","getRowStateLabel","row","scopeLabel","ignored","getSkillRowState","getInstallableNotInstalledSkills","snapshot","installableSkills","installableCatalog","skills","activeSkillSlugs","Set","catalog","ignoredSkillSlugs","ignoredPublishedSkills","has","getErrorMessage","error","Error","message"],"sources":["../../src/tui/skill-helpers.ts"],"sourcesContent":["import type { PluginStatusSnapshot } from '../server.js';\nimport { WIZARD_SCOPE_LABELS, isUserPublishedSkillAssignment } from '../published-skills-terminology.js';\nimport { MAX_SKILL_TAGS } from './constants.js';\nimport type { PreferenceScope, PublishedSkillSummary, SkillDialogRow, SkillRowState } from './types.js';\n\nexport const getSkillDisplayName = (skill: PublishedSkillSummary): string =>\n skill.artifactName || skill.skillName || skill.skillSlug;\n\nexport const getSkillDescription = (skill: PublishedSkillSummary): string | null => {\n if (skill.whenToUse) return skill.whenToUse;\n if (skill.artifactDescription) return skill.artifactDescription;\n\n return null;\n};\n\nexport const getSkillTags = (skill: PublishedSkillSummary): string => {\n const tagLabels = skill.tags.map((tag) => tag.label || tag.slug).filter(Boolean).slice(0, MAX_SKILL_TAGS);\n if (tagLabels.length === 0) return 'no tags';\n\n return tagLabels.join(', ');\n};\n\nexport const isUserScopeAssignment = (assignmentSource: string): boolean =>\n isUserPublishedSkillAssignment(assignmentSource);\n\nexport const getSkillScopeLabel = (skill: PublishedSkillSummary, state: SkillRowState): string => {\n if (state === 'installable') return WIZARD_SCOPE_LABELS.available;\n if (isUserScopeAssignment(skill.assignmentSource) || state === 'user-scope') return WIZARD_SCOPE_LABELS.user;\n if (state === 'global-scope' || skill.contextKind === 'global') return WIZARD_SCOPE_LABELS.global;\n\n return WIZARD_SCOPE_LABELS.project;\n};\n\nexport const getSkillPreferenceScope = (skill: PublishedSkillSummary): PreferenceScope => {\n if (skill.assignmentSource === 'USER_GLOBAL') return 'global';\n if (skill.assignmentSource === 'USER_WORKSPACE') return 'project';\n if (skill.contextKind === 'global') return 'global';\n\n return 'project';\n};\n\nexport const getSkillMeta = (skill: PublishedSkillSummary, state: SkillRowState): string =>\n `${getSkillScopeLabel(skill, state)} · ${skill.assignmentLabel} · ${skill.policyLabel} · ${getSkillTags(skill)}`;\n\nexport const getRowStateLabel = (row: SkillDialogRow): string => {\n const scopeLabel = getSkillScopeLabel(row.skill, row.state);\n if (row.ignored) return `ignored · ${scopeLabel}`;\n if (row.state === 'installable') return 'wizard not installed';\n\n return `active · ${scopeLabel}`;\n};\n\nexport const getSkillRowState = (skill: PublishedSkillSummary): SkillRowState => {\n if (isUserScopeAssignment(skill.assignmentSource)) return 'user-scope';\n if (skill.contextKind === 'global') return 'global-scope';\n\n return 'project-scope';\n};\n\nexport const getInstallableNotInstalledSkills = (snapshot: PluginStatusSnapshot): PublishedSkillSummary[] => {\n const installableSkills = snapshot.installableCatalog?.skills ?? [];\n if (installableSkills.length === 0) return [];\n\n const activeSkillSlugs = new Set(snapshot.catalog?.skills.map((skill) => skill.skillSlug) ?? []);\n const ignoredSkillSlugs = new Set(snapshot.ignoredPublishedSkills.skills.map((skill) => skill.skillSlug));\n\n return installableSkills.filter(\n (skill) => !activeSkillSlugs.has(skill.skillSlug) && !ignoredSkillSlugs.has(skill.skillSlug),\n );\n};\n\nexport const getErrorMessage = (error: unknown): string => {\n if (error instanceof Error && error.message) return error.message;\n\n return 'Preference update failed. Check plugin auth/backend status and try again.';\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import type { RefreshStatus, StatusState, TuiPluginApi, TuiSlotPlugin } from './types.js';
2
+ export declare const createWizardStatusSlot: (api: TuiPluginApi, status: () => StatusState, refreshStatus: RefreshStatus) => TuiSlotPlugin;
@@ -0,0 +1,56 @@
1
+ import { createComponent as _$createComponent } from "@opentui/solid";
2
+ import { requestRender } from './rendering.js';
3
+ import { Panel } from './components/common.js';
4
+ import { SkillsRows } from './components/status-content.js';
5
+ import { WizardSkillsDialog } from './components/wizard-skills-dialog.js';
6
+ const openWizardSkillsDialog = (api, status, refreshStatus) => {
7
+ const dialog = api.ui?.dialog;
8
+ if (!dialog?.replace) return;
9
+ refreshStatus({
10
+ showLoading: true
11
+ });
12
+ dialog.replace(() => _$createComponent(WizardSkillsDialog, {
13
+ api: api,
14
+ status: status,
15
+ refreshStatus: refreshStatus,
16
+ onClose: () => {
17
+ dialog.clear?.();
18
+ requestRender(api);
19
+ }
20
+ }), () => {
21
+ requestRender(api);
22
+ });
23
+ requestRender(api);
24
+ };
25
+ export const createWizardStatusSlot = (api, status, refreshStatus) => ({
26
+ order: 240,
27
+ slots: {
28
+ home_bottom: () => _$createComponent(Panel, {
29
+ title: "Wizard Skills",
30
+ get theme() {
31
+ return api.theme.current;
32
+ },
33
+ onOpen: () => openWizardSkillsDialog(api, status, refreshStatus),
34
+ get children() {
35
+ return _$createComponent(SkillsRows, {
36
+ api: api,
37
+ status: status
38
+ });
39
+ }
40
+ }),
41
+ sidebar_content: (_ctx, _value) => _$createComponent(Panel, {
42
+ title: "Wizard Skills",
43
+ get theme() {
44
+ return api.theme.current;
45
+ },
46
+ onOpen: () => openWizardSkillsDialog(api, status, refreshStatus),
47
+ get children() {
48
+ return _$createComponent(SkillsRows, {
49
+ api: api,
50
+ status: status
51
+ });
52
+ }
53
+ })
54
+ }
55
+ });
56
+ //# sourceMappingURL=slots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["requestRender","Panel","SkillsRows","WizardSkillsDialog","openWizardSkillsDialog","api","status","refreshStatus","dialog","ui","replace","showLoading","_$createComponent","onClose","clear","createWizardStatusSlot","order","slots","home_bottom","title","theme","current","onOpen","children","sidebar_content","_ctx","_value"],"sources":["../../src/tui/slots.tsx"],"sourcesContent":["import { requestRender } from './rendering.js';\nimport type { RefreshStatus, StatusState, TuiPluginApi, TuiSlotContext, TuiSlotPlugin } from './types.js';\nimport { Panel } from './components/common.js';\nimport { SkillsRows } from './components/status-content.js';\nimport { WizardSkillsDialog } from './components/wizard-skills-dialog.js';\n\nconst openWizardSkillsDialog = (api: TuiPluginApi, status: () => StatusState, refreshStatus: RefreshStatus): void => {\n const dialog = api.ui?.dialog;\n if (!dialog?.replace) return;\n\n refreshStatus({ showLoading: true });\n\n dialog.replace(\n () => (\n <WizardSkillsDialog\n api={api}\n status={status}\n refreshStatus={refreshStatus}\n onClose={() => {\n dialog.clear?.();\n requestRender(api);\n }}\n />\n ),\n () => {\n requestRender(api);\n },\n );\n\n requestRender(api);\n};\n\nexport const createWizardStatusSlot = (\n api: TuiPluginApi,\n status: () => StatusState,\n refreshStatus: RefreshStatus,\n): TuiSlotPlugin => ({\n order: 240,\n slots: {\n home_bottom: () => (\n <Panel title=\"Wizard Skills\" theme={api.theme.current} onOpen={() => openWizardSkillsDialog(api, status, refreshStatus)}>\n <SkillsRows api={api} status={status} />\n </Panel>\n ),\n sidebar_content: (_ctx: TuiSlotContext, _value: { session_id: string }) => (\n <Panel title=\"Wizard Skills\" theme={api.theme.current} onOpen={() => openWizardSkillsDialog(api, status, refreshStatus)}>\n <SkillsRows api={api} status={status} />\n </Panel>\n ),\n },\n});\n"],"mappings":";AAAA,SAASA,aAAa,QAAQ,gBAAgB;AAE9C,SAASC,KAAK,QAAQ,wBAAwB;AAC9C,SAASC,UAAU,QAAQ,gCAAgC;AAC3D,SAASC,kBAAkB,QAAQ,sCAAsC;AAEzE,MAAMC,sBAAsB,GAAGA,CAACC,GAAiB,EAAEC,MAAyB,EAAEC,aAA4B,KAAW;EACnH,MAAMC,MAAM,GAAGH,GAAG,CAACI,EAAE,EAAED,MAAM;EAC7B,IAAI,CAACA,MAAM,EAAEE,OAAO,EAAE;EAEtBH,aAAa,CAAC;IAAEI,WAAW,EAAE;EAAK,CAAC,CAAC;EAEpCH,MAAM,CAACE,OAAO,CACZ,MAAAE,iBAAA,CACGT,kBAAkB;IACjBE,GAAG,EAAEA,GAAG;IACRC,MAAM,EAAEA,MAAM;IACdC,aAAa,EAAEA,aAAa;IAC5BM,OAAO,EAAEA,CAAA,KAAM;MACbL,MAAM,CAACM,KAAK,GAAG,CAAC;MAChBd,aAAa,CAACK,GAAG,CAAC;IACpB;EAAC,EAEJ,EACD,MAAM;IACJL,aAAa,CAACK,GAAG,CAAC;EACpB,CACF,CAAC;EAEDL,aAAa,CAACK,GAAG,CAAC;AACpB,CAAC;AAED,OAAO,MAAMU,sBAAsB,GAAGA,CACpCV,GAAiB,EACjBC,MAAyB,EACzBC,aAA4B,MACT;EACnBS,KAAK,EAAE,GAAG;EACVC,KAAK,EAAE;IACLC,WAAW,EAAEA,CAAA,KAAAN,iBAAA,CACVX,KAAK;MAACkB,KAAK;MAAA,IAAiBC,KAAKA,CAAA;QAAA,OAAEf,GAAG,CAACe,KAAK,CAACC,OAAO;MAAA;MAAEC,MAAM,EAAEA,CAAA,KAAMlB,sBAAsB,CAACC,GAAG,EAAEC,MAAM,EAAEC,aAAa,CAAC;MAAA,IAAAgB,SAAA;QAAA,OAAAX,iBAAA,CACpHV,UAAU;UAACG,GAAG,EAAEA,GAAG;UAAEC,MAAM,EAAEA;QAAM;MAAA;IAAA,EAEvC;IACDkB,eAAe,EAAEA,CAACC,IAAoB,EAAEC,MAA8B,KAAAd,iBAAA,CACnEX,KAAK;MAACkB,KAAK;MAAA,IAAiBC,KAAKA,CAAA;QAAA,OAAEf,GAAG,CAACe,KAAK,CAACC,OAAO;MAAA;MAAEC,MAAM,EAAEA,CAAA,KAAMlB,sBAAsB,CAACC,GAAG,EAAEC,MAAM,EAAEC,aAAa,CAAC;MAAA,IAAAgB,SAAA;QAAA,OAAAX,iBAAA,CACpHV,UAAU;UAACG,GAAG,EAAEA,GAAG;UAAEC,MAAM,EAAEA;QAAM;MAAA;IAAA;EAG1C;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import type { StatusState, TuiPluginApi } from './types.js';
2
+ export declare const loadStatus: (api: TuiPluginApi) => Promise<StatusState>;
@@ -0,0 +1,21 @@
1
+ import { resolvePluginStatusSnapshotWithAuthBootstrap } from '../server.js';
2
+ import { STATUS_TIMEOUT_MS } from './constants.js';
3
+ export const loadStatus = async api => {
4
+ try {
5
+ const snapshot = await resolvePluginStatusSnapshotWithAuthBootstrap({
6
+ worktree: api.state.path.worktree,
7
+ directory: api.state.path.directory,
8
+ signal: AbortSignal.timeout(STATUS_TIMEOUT_MS)
9
+ });
10
+ return {
11
+ kind: 'ready',
12
+ snapshot
13
+ };
14
+ } catch (error) {
15
+ return {
16
+ kind: 'error',
17
+ message: error instanceof Error ? error.message : 'Unable to load opencode-wizard status.'
18
+ };
19
+ }
20
+ };
21
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["resolvePluginStatusSnapshotWithAuthBootstrap","STATUS_TIMEOUT_MS","loadStatus","api","snapshot","worktree","state","path","directory","signal","AbortSignal","timeout","kind","error","message","Error"],"sources":["../../src/tui/status.ts"],"sourcesContent":["import { resolvePluginStatusSnapshotWithAuthBootstrap } from '../server.js';\nimport { STATUS_TIMEOUT_MS } from './constants.js';\nimport type { StatusState, TuiPluginApi } from './types.js';\n\nexport const loadStatus = async (api: TuiPluginApi): Promise<StatusState> => {\n try {\n const snapshot = await resolvePluginStatusSnapshotWithAuthBootstrap({\n worktree: api.state.path.worktree,\n directory: api.state.path.directory,\n signal: AbortSignal.timeout(STATUS_TIMEOUT_MS),\n });\n\n return {\n kind: 'ready',\n snapshot,\n };\n } catch (error) {\n return {\n kind: 'error',\n message: error instanceof Error ? error.message : 'Unable to load opencode-wizard status.',\n };\n }\n};\n"],"mappings":"AAAA,SAASA,4CAA4C,QAAQ,cAAc;AAC3E,SAASC,iBAAiB,QAAQ,gBAAgB;AAGlD,OAAO,MAAMC,UAAU,GAAG,MAAOC,GAAiB,IAA2B;EAC3E,IAAI;IACF,MAAMC,QAAQ,GAAG,MAAMJ,4CAA4C,CAAC;MAClEK,QAAQ,EAAEF,GAAG,CAACG,KAAK,CAACC,IAAI,CAACF,QAAQ;MACjCG,SAAS,EAAEL,GAAG,CAACG,KAAK,CAACC,IAAI,CAACC,SAAS;MACnCC,MAAM,EAAEC,WAAW,CAACC,OAAO,CAACV,iBAAiB;IAC/C,CAAC,CAAC;IAEF,OAAO;MACLW,IAAI,EAAE,OAAO;MACbR;IACF,CAAC;EACH,CAAC,CAAC,OAAOS,KAAK,EAAE;IACd,OAAO;MACLD,IAAI,EAAE,OAAO;MACbE,OAAO,EAAED,KAAK,YAAYE,KAAK,GAAGF,KAAK,CAACC,OAAO,GAAG;IACpD,CAAC;EACH;AACF,CAAC","ignoreList":[]}
@@ -0,0 +1,75 @@
1
+ import type { RGBA } from '@opentui/core';
2
+ import type { JSX } from 'solid-js';
3
+ import type { PluginStatusSnapshot } from '../server.js';
4
+ export type StatusState = {
5
+ kind: 'loading';
6
+ } | {
7
+ kind: 'ready';
8
+ snapshot: PluginStatusSnapshot;
9
+ } | {
10
+ kind: 'error';
11
+ message: string;
12
+ };
13
+ export type WizardTheme = {
14
+ text: string | RGBA | undefined;
15
+ textMuted: string | RGBA | undefined;
16
+ warning: string | RGBA | undefined;
17
+ };
18
+ export type TuiPluginApi = {
19
+ theme: {
20
+ current: WizardTheme;
21
+ };
22
+ ui?: {
23
+ dialog?: {
24
+ replace?: (render: () => JSX.Element, onClose?: () => void) => void;
25
+ clear?: () => void;
26
+ setSize?: (size: 'medium' | 'large' | 'xlarge') => void;
27
+ };
28
+ };
29
+ renderer?: {
30
+ requestRender?: () => void;
31
+ };
32
+ slots: {
33
+ register: (slot: TuiSlotPlugin) => void;
34
+ };
35
+ state: {
36
+ path: {
37
+ worktree: string;
38
+ directory: string;
39
+ };
40
+ };
41
+ };
42
+ export type TuiSlotContext = unknown;
43
+ export type TuiSlotPlugin = {
44
+ order: number;
45
+ slots: {
46
+ home_bottom: () => JSX.Element;
47
+ sidebar_content: (ctx: TuiSlotContext, value: {
48
+ session_id: string;
49
+ }) => JSX.Element;
50
+ };
51
+ };
52
+ export type TuiPlugin = (api: TuiPluginApi) => void | Promise<void>;
53
+ export type PublishedSkillSummary = NonNullable<PluginStatusSnapshot['catalog']>['skills'][number];
54
+ export type SkillRowState = 'global-scope' | 'project-scope' | 'user-scope' | 'installable';
55
+ export type SkillDialogRow = {
56
+ skill: PublishedSkillSummary;
57
+ ignored: boolean;
58
+ state: SkillRowState;
59
+ };
60
+ export type RefreshStatus = (options?: {
61
+ showLoading?: boolean;
62
+ }) => void;
63
+ export type PreferenceScope = 'global' | 'project';
64
+ export type PreferenceActionNotice = {
65
+ kind: 'idle';
66
+ } | {
67
+ kind: 'pending';
68
+ message: string;
69
+ } | {
70
+ kind: 'success';
71
+ message: string;
72
+ } | {
73
+ kind: 'error';
74
+ message: string;
75
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../src/tui/types.ts"],"sourcesContent":["import type { RGBA } from '@opentui/core';\nimport type { JSX } from 'solid-js';\nimport type { PluginStatusSnapshot } from '../server.js';\n\nexport type StatusState =\n | {\n kind: 'loading';\n }\n | {\n kind: 'ready';\n snapshot: PluginStatusSnapshot;\n }\n | {\n kind: 'error';\n message: string;\n };\n\nexport type WizardTheme = {\n text: string | RGBA | undefined;\n textMuted: string | RGBA | undefined;\n warning: string | RGBA | undefined;\n};\n\nexport type TuiPluginApi = {\n theme: {\n current: WizardTheme;\n };\n ui?: {\n dialog?: {\n replace?: (render: () => JSX.Element, onClose?: () => void) => void;\n clear?: () => void;\n setSize?: (size: 'medium' | 'large' | 'xlarge') => void;\n };\n };\n renderer?: {\n requestRender?: () => void;\n };\n slots: {\n register: (slot: TuiSlotPlugin) => void;\n };\n state: {\n path: {\n worktree: string;\n directory: string;\n };\n };\n};\n\nexport type TuiSlotContext = unknown;\n\nexport type TuiSlotPlugin = {\n order: number;\n slots: {\n home_bottom: () => JSX.Element;\n sidebar_content: (ctx: TuiSlotContext, value: { session_id: string }) => JSX.Element;\n };\n};\n\nexport type TuiPlugin = (api: TuiPluginApi) => void | Promise<void>;\n\nexport type PublishedSkillSummary = NonNullable<PluginStatusSnapshot['catalog']>['skills'][number];\nexport type SkillRowState = 'global-scope' | 'project-scope' | 'user-scope' | 'installable';\nexport type SkillDialogRow = {\n skill: PublishedSkillSummary;\n ignored: boolean;\n state: SkillRowState;\n};\nexport type RefreshStatus = (options?: { showLoading?: boolean }) => void;\nexport type PreferenceScope = 'global' | 'project';\nexport type PreferenceActionNotice =\n | {\n kind: 'idle';\n }\n | {\n kind: 'pending';\n message: string;\n }\n | {\n kind: 'success';\n message: string;\n }\n | {\n kind: 'error';\n message: string;\n };\n"],"mappings":"","ignoreList":[]}
package/dist/tui.d.ts CHANGED
@@ -1,48 +1,5 @@
1
- /** @jsxImportSource @opentui/solid */
2
- import type { RGBA } from '@opentui/core';
3
- import type { JSX } from 'solid-js';
4
- type WizardTheme = {
5
- text: string | RGBA | undefined;
6
- textMuted: string | RGBA | undefined;
7
- warning: string | RGBA | undefined;
8
- };
9
- type TuiPluginApi = {
10
- theme: {
11
- current: WizardTheme;
12
- };
13
- ui?: {
14
- dialog?: {
15
- replace?: (render: () => JSX.Element, onClose?: () => void) => void;
16
- clear?: () => void;
17
- setSize?: (size: 'medium' | 'large' | 'xlarge') => void;
18
- };
19
- };
20
- renderer?: {
21
- requestRender?: () => void;
22
- };
23
- slots: {
24
- register: (slot: TuiSlotPlugin) => void;
25
- };
26
- state: {
27
- path: {
28
- worktree: string;
29
- directory: string;
30
- };
31
- };
32
- };
33
- type TuiSlotContext = unknown;
34
- type TuiSlotPlugin = {
35
- order: number;
36
- slots: {
37
- home_bottom: () => JSX.Element;
38
- sidebar_content: (ctx: TuiSlotContext, value: {
39
- session_id: string;
40
- }) => JSX.Element;
41
- };
42
- };
43
- type TuiPlugin = (api: TuiPluginApi) => void | Promise<void>;
44
1
  declare const _default: {
45
2
  id: string;
46
- tui: TuiPlugin;
3
+ tui: import("./tui/types.js").TuiPlugin;
47
4
  };
48
5
  export default _default;