diff --git a/.changeset/web-empty-suggestions.md b/.changeset/web-empty-suggestions.md new file mode 100644 index 00000000..7aff4b08 --- /dev/null +++ b/.changeset/web-empty-suggestions.md @@ -0,0 +1,5 @@ +--- +'@pymodel/pythinker-code': minor +--- + +Add starter suggestions to the empty conversation screen in the web UI. Each suggestion fills the composer for editing and does not send the message. diff --git a/apps/pythinker-web/src/components/ConversationPane.vue b/apps/pythinker-web/src/components/ConversationPane.vue index cddb00c1..94b39c88 100644 --- a/apps/pythinker-web/src/components/ConversationPane.vue +++ b/apps/pythinker-web/src/components/ConversationPane.vue @@ -162,6 +162,7 @@ function pickWorkspace(id: string): void { const { t } = useI18n(); const idleMascotSrc = useApngRestart('/brand/mascot-idle.png'); +const starterSuggestionKeys = ['explainRepository', 'suggestFirstTask', 'runChecks', 'reviewWorkingTree'] as const; // The align toggle was removed with its UI (6e50cb7) — reading layout is // always centered now. Drop the old persisted preference so users who once @@ -185,6 +186,10 @@ function loadComposerForEdit(value: string): void { (dockedComposerRef.value ?? emptyComposerRef.value)?.loadForEdit(value); } +function loadSuggestion(key: (typeof starterSuggestionKeys)[number]): void { + loadComposerForEdit(t(`suggestions.${key}.prompt`)); +} + function handleCopyConversationCopied(): void { copyConversationCopied.value = true; if (copyConversationCopiedTimer !== null) clearTimeout(copyConversationCopiedTimer); @@ -820,6 +825,19 @@ defineExpose({ loadComposerForEdit }); {{ t('composer.emptyConversationTitle') }} {{ t('composer.emptyConversation') }} +
+ +