diff --git a/packages/tui/src/component/prompt/index.tsx b/packages/tui/src/component/prompt/index.tsx index 866aa4996f..7bac36159c 100644 --- a/packages/tui/src/component/prompt/index.tsx +++ b/packages/tui/src/component/prompt/index.tsx @@ -30,6 +30,7 @@ import { stringWidth } from "../../util/string-width" import { createStore, produce, unwrap } from "solid-js/store" import { emptyPrompt, usePromptHistory, type PromptInfo, type PromptPartRef } from "../../prompt/history" import { saveDraft, takeDraft } from "./draft-stash" +import { Skill } from "@opencode-ai/schema/skill" import { computePromptTraits } from "../../prompt/traits" import { expandPastedTextPlaceholders, expandTrackedPastedText } from "../../prompt/part" import { usePromptStash } from "../../prompt/stash" @@ -44,6 +45,7 @@ import { DialogIntegration } from "../dialog-integration" import { useConnected } from "../use-connected" import { useToast } from "../../ui/toast" import { createFadeIn } from "../../util/signal" +import { DialogSkill } from "../dialog-skill" import { useArgs } from "../../context/args" import { useConfig } from "../../config" import { usePromptMove } from "./move" @@ -580,6 +582,44 @@ export function Prompt(props: PromptProps) { input.cursorOffset = stringWidth(normalized) }, }, + { + title: "Skills", + name: "prompt.skills", + category: "Prompt", + slash: { name: "skills" }, + run: () => { + dialog.replace(() => ( + { + if (store.prompt.skills?.some((item) => item.id === skill)) return + const text = `@${skill}` + const start = input.cursorOffset + input.insertText(text + " ") + const extmarkId = input.extmarks.create({ + start, + end: start + promptOffsetWidth(text), + virtual: true, + styleId: skillStyleId, + typeId: promptPartTypeId, + }) + setStore( + produce((draft) => { + draft.prompt.text = input.plainText + const skills = (draft.prompt.skills ??= []) + const index = skills.length + skills.push({ + id: Skill.ID.make(skill), + mention: { start, end: start + promptOffsetWidth(text), text }, + }) + draft.extmarkToPart.set(extmarkId, { type: "skill", index }) + }), + ) + }} + /> + )) + }, + }, { title: "Move session", desc: "Move to another project dir", @@ -621,6 +661,7 @@ export function Prompt(props: PromptProps) { "prompt.stash", "prompt.stash.pop", "prompt.stash.list", + "prompt.skills", "session.interrupt", "session.background", "session.move",