@aexol/opencode-wizard 0.3.2 → 0.3.4
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.
- package/README.md +4 -0
- package/dist/graphql-operations.d.ts +4 -0
- package/dist/graphql-operations.js +225 -0
- package/dist/graphql-operations.js.map +1 -0
- package/dist/plugin-tools.d.ts +64 -0
- package/dist/plugin-tools.js +57 -0
- package/dist/plugin-tools.js.map +1 -0
- package/dist/published-skills-system-note.d.ts +9 -0
- package/dist/published-skills-system-note.js +34 -0
- package/dist/published-skills-system-note.js.map +1 -0
- package/dist/published-skills-transform.d.ts +161 -0
- package/dist/published-skills-transform.js +238 -0
- package/dist/published-skills-transform.js.map +1 -0
- package/dist/server/auth-flow.d.ts +10 -0
- package/dist/server/auth-flow.js +215 -0
- package/dist/server/auth-flow.js.map +1 -0
- package/dist/server/auth-store.d.ts +19 -0
- package/dist/server/auth-store.js +177 -0
- package/dist/server/auth-store.js.map +1 -0
- package/dist/server/client.d.ts +51 -0
- package/dist/server/client.js +244 -0
- package/dist/server/client.js.map +1 -0
- package/dist/server/config.d.ts +2 -0
- package/dist/server/config.js +82 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/constants.d.ts +26 -0
- package/dist/server/constants.js +32 -0
- package/dist/server/constants.js.map +1 -0
- package/dist/server/path-utils.d.ts +2 -0
- package/dist/server/path-utils.js +8 -0
- package/dist/server/path-utils.js.map +1 -0
- package/dist/server/presence.d.ts +14 -0
- package/dist/server/presence.js +68 -0
- package/dist/server/presence.js.map +1 -0
- package/dist/server/runtime.d.ts +32 -0
- package/dist/server/runtime.js +1110 -0
- package/dist/server/runtime.js.map +1 -0
- package/dist/server/status.d.ts +27 -0
- package/dist/server/status.js +224 -0
- package/dist/server/status.js.map +1 -0
- package/dist/server/types.d.ts +321 -0
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/workspace.d.ts +15 -0
- package/dist/server/workspace.js +126 -0
- package/dist/server/workspace.js.map +1 -0
- package/dist/server.d.ts +4 -304
- package/dist/server.js +4 -2489
- package/dist/server.js.map +1 -1
- package/dist/smoke-published-skills.js +11 -9
- package/dist/smoke-published-skills.js.map +1 -1
- package/dist/tui/components/common.d.ts +15 -0
- package/dist/tui/components/common.js +81 -0
- package/dist/tui/components/common.js.map +1 -0
- package/dist/tui/components/preference-action-notice-row.d.ts +5 -0
- package/dist/tui/components/preference-action-notice-row.js +17 -0
- package/dist/tui/components/preference-action-notice-row.js.map +1 -0
- package/dist/tui/components/skill-catalog-row.d.ts +8 -0
- package/dist/tui/components/skill-catalog-row.js +124 -0
- package/dist/tui/components/skill-catalog-row.js.map +1 -0
- package/dist/tui/components/status-content.d.ts +14 -0
- package/dist/tui/components/status-content.js +131 -0
- package/dist/tui/components/status-content.js.map +1 -0
- package/dist/tui/components/wizard-skills-dialog-content.d.ts +9 -0
- package/dist/tui/components/wizard-skills-dialog-content.js +219 -0
- package/dist/tui/components/wizard-skills-dialog-content.js.map +1 -0
- package/dist/tui/components/wizard-skills-dialog.d.ts +7 -0
- package/dist/tui/components/wizard-skills-dialog.js +156 -0
- package/dist/tui/components/wizard-skills-dialog.js.map +1 -0
- package/dist/tui/constants.d.ts +8 -0
- package/dist/tui/constants.js +9 -0
- package/dist/tui/constants.js.map +1 -0
- package/dist/tui/formatting.d.ts +8 -0
- package/dist/tui/formatting.js +45 -0
- package/dist/tui/formatting.js.map +1 -0
- package/dist/tui/plugin.d.ts +2 -0
- package/dist/tui/plugin.js +26 -0
- package/dist/tui/plugin.js.map +1 -0
- package/dist/tui/rendering.d.ts +2 -0
- package/dist/tui/rendering.js +8 -0
- package/dist/tui/rendering.js.map +1 -0
- package/dist/tui/skill-helpers.d.ts +13 -0
- package/dist/tui/skill-helpers.js +49 -0
- package/dist/tui/skill-helpers.js.map +1 -0
- package/dist/tui/slots.d.ts +2 -0
- package/dist/tui/slots.js +56 -0
- package/dist/tui/slots.js.map +1 -0
- package/dist/tui/status.d.ts +2 -0
- package/dist/tui/status.js +21 -0
- package/dist/tui/status.js.map +1 -0
- package/dist/tui/types.d.ts +75 -0
- package/dist/tui/types.js +2 -0
- package/dist/tui/types.js.map +1 -0
- package/dist/tui.d.ts +1 -44
- package/dist/tui.js +2 -870
- package/dist/tui.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { MAX_SKILL_TAGS } from './constants.js';
|
|
2
|
+
export const getSkillDisplayName = skill => skill.artifactName || skill.skillName || skill.skillSlug;
|
|
3
|
+
export const getSkillDescription = skill => {
|
|
4
|
+
if (skill.whenToUse) return skill.whenToUse;
|
|
5
|
+
if (skill.artifactDescription) return skill.artifactDescription;
|
|
6
|
+
return null;
|
|
7
|
+
};
|
|
8
|
+
export const getSkillTags = skill => {
|
|
9
|
+
const tagLabels = skill.tags.map(tag => tag.label || tag.slug).filter(Boolean).slice(0, MAX_SKILL_TAGS);
|
|
10
|
+
if (tagLabels.length === 0) return 'no tags';
|
|
11
|
+
return tagLabels.join(', ');
|
|
12
|
+
};
|
|
13
|
+
export const isUserScopeAssignment = assignmentSource => assignmentSource === 'USER' || assignmentSource === 'USER_GLOBAL' || assignmentSource === 'USER_WORKSPACE';
|
|
14
|
+
export const getSkillScopeLabel = (skill, state) => {
|
|
15
|
+
if (state === 'installable') return 'AVAILABLE';
|
|
16
|
+
if (isUserScopeAssignment(skill.assignmentSource) || state === 'user-scope') return 'USER SCOPE';
|
|
17
|
+
if (state === 'global-scope' || skill.contextKind === 'global') return 'GLOBAL SCOPE';
|
|
18
|
+
return 'PROJECT SCOPE';
|
|
19
|
+
};
|
|
20
|
+
export const getSkillPreferenceScope = skill => {
|
|
21
|
+
if (skill.assignmentSource === 'USER_GLOBAL') return 'global';
|
|
22
|
+
if (skill.assignmentSource === 'USER_WORKSPACE') return 'project';
|
|
23
|
+
if (skill.contextKind === 'global') return 'global';
|
|
24
|
+
return 'project';
|
|
25
|
+
};
|
|
26
|
+
export const getSkillMeta = (skill, state) => `${getSkillScopeLabel(skill, state)} · ${skill.assignmentLabel} · ${skill.policyLabel} · ${getSkillTags(skill)}`;
|
|
27
|
+
export const getRowStateLabel = row => {
|
|
28
|
+
const scopeLabel = getSkillScopeLabel(row.skill, row.state);
|
|
29
|
+
if (row.ignored) return `ignored · ${scopeLabel}`;
|
|
30
|
+
if (row.state === 'installable') return 'not installed';
|
|
31
|
+
return `active · ${scopeLabel}`;
|
|
32
|
+
};
|
|
33
|
+
export const getSkillRowState = skill => {
|
|
34
|
+
if (isUserScopeAssignment(skill.assignmentSource)) return 'user-scope';
|
|
35
|
+
if (skill.contextKind === 'global') return 'global-scope';
|
|
36
|
+
return 'project-scope';
|
|
37
|
+
};
|
|
38
|
+
export const getInstallableNotInstalledSkills = snapshot => {
|
|
39
|
+
const installableSkills = snapshot.installableCatalog?.skills ?? [];
|
|
40
|
+
if (installableSkills.length === 0) return [];
|
|
41
|
+
const activeSkillSlugs = new Set(snapshot.catalog?.skills.map(skill => skill.skillSlug) ?? []);
|
|
42
|
+
const ignoredSkillSlugs = new Set(snapshot.ignoredPublishedSkills.skills.map(skill => skill.skillSlug));
|
|
43
|
+
return installableSkills.filter(skill => !activeSkillSlugs.has(skill.skillSlug) && !ignoredSkillSlugs.has(skill.skillSlug));
|
|
44
|
+
};
|
|
45
|
+
export const getErrorMessage = error => {
|
|
46
|
+
if (error instanceof Error && error.message) return error.message;
|
|
47
|
+
return 'Preference update failed. Check plugin auth/backend status and try again.';
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=skill-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["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","contextKind","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 { 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 assignmentSource === 'USER' || assignmentSource === 'USER_GLOBAL' || assignmentSource === 'USER_WORKSPACE';\n\nexport const getSkillScopeLabel = (skill: PublishedSkillSummary, state: SkillRowState): string => {\n if (state === 'installable') return 'AVAILABLE';\n if (isUserScopeAssignment(skill.assignmentSource) || state === 'user-scope') return 'USER SCOPE';\n if (state === 'global-scope' || skill.contextKind === 'global') return 'GLOBAL SCOPE';\n\n return 'PROJECT SCOPE';\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 '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,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,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 @@
|
|
|
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;
|