Skip to content

Commit bb79ddd

Browse files
committed
feat(prompts): variables {taskId}, {taskSummary} and {taskDescription} for prompt customization
Closes #221
1 parent 7957f47 commit bb79ddd

File tree

5 files changed

+19
-5
lines changed

5 files changed

+19
-5
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## [Unreleased]
44

5+
### Added
6+
7+
- Variables `{taskId}`, `{taskSummary}` and `{taskDescription}` for prompt customization that are replaced with values from the active [task](https://www.jetbrains.com/help/idea/managing-tasks-and-context.html#work-with-tasks).
8+
59
### Changed
610

711
- Rethrow generic exceptions when generating commit messages.
@@ -60,7 +64,7 @@
6064

6165
### Added
6266

63-
- Variable `{hint}' for prompt customization that is filled with content from commit message dialog.
67+
- Variable `{hint}` for prompt customization that is filled with content from commit message dialog.
6468

6569
### Fixed
6670

src/main/kotlin/com/github/blarc/ai/commits/intellij/plugin/AICommitAction.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ class AICommitAction : AnAction(), DumbAware {
3939

4040
val branch = commonBranch(includedChanges, project)
4141
val hint = commitMessage?.text
42-
val prompt = constructPrompt(AppSettings2.instance.activePrompt.content, diff, branch, hint)
42+
43+
val prompt = constructPrompt(AppSettings2.instance.activePrompt.content, diff, branch, hint, project)
4344

4445
// TODO @Blarc: add support for different clients
4546
// if (isPromptTooLarge(prompt)) {

src/main/kotlin/com/github/blarc/ai/commits/intellij/plugin/AICommitsUtils.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.intellij.openapi.diff.impl.patch.IdeaTextPatchBuilder
1212
import com.intellij.openapi.diff.impl.patch.UnifiedDiffWriter
1313
import com.intellij.openapi.project.Project
1414
import com.intellij.openapi.vcs.changes.Change
15+
import com.intellij.tasks.TaskManager
1516
import git4idea.repo.GitRepositoryManager
1617
import kotlinx.coroutines.Dispatchers
1718
import kotlinx.coroutines.withContext
@@ -35,12 +36,17 @@ object AICommitsUtils {
3536
return false
3637
}
3738

38-
fun constructPrompt(promptContent: String, diff: String, branch: String, hint: String?): String {
39+
fun constructPrompt(promptContent: String, diff: String, branch: String, hint: String?, project: Project): String {
3940
var content = promptContent
4041
content = content.replace("{locale}", AppSettings2.instance.locale.displayLanguage)
4142
content = content.replace("{branch}", branch)
4243
content = replaceHint(content, hint)
4344

45+
val activeTask = TaskManager.getManager(project).activeTask
46+
content = content.replace("{taskId}", activeTask.id)
47+
content = content.replace("{taskSummary}", activeTask.summary)
48+
content = content.replace("{taskDescription}", activeTask.description.orEmpty())
49+
4450
return if (content.contains("{diff}")) {
4551
content.replace("{diff}", diff)
4652
} else {

src/main/kotlin/com/github/blarc/ai/commits/intellij/plugin/settings/prompts/PromptTable.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import com.intellij.ide.DataManager
1414
import com.intellij.openapi.actionSystem.CommonDataKeys
1515
import com.intellij.openapi.application.ApplicationManager
1616
import com.intellij.openapi.application.ModalityState
17+
import com.intellij.openapi.project.Project
1718
import com.intellij.openapi.ui.DialogWrapper
1819
import com.intellij.ui.components.JBTextArea
1920
import com.intellij.ui.components.JBTextField
@@ -113,6 +114,7 @@ class PromptTable {
113114
val promptPreviewTextArea = JBTextArea()
114115
lateinit var branch: String
115116
lateinit var diff: String
117+
lateinit var project: Project
116118

117119
init {
118120
title = newPrompt?.let { message("settings.prompt.edit.title") } ?: message("settings.prompt.add.title")
@@ -138,6 +140,7 @@ class PromptTable {
138140
promptPreviewTextArea.autoscrolls = false
139141

140142
DataManager.getInstance().getDataContext(rootPane).getData(CommonDataKeys.PROJECT)?.let { project ->
143+
this.project = project
141144
ApplicationManager.getApplication().executeOnPooledThread {
142145

143146
val changes = VcsRepositoryManager.getInstance(project).repositories.stream()
@@ -202,7 +205,7 @@ class PromptTable {
202205
}
203206

204207
private fun setPreview(promptContent: String, hint: String) {
205-
val constructPrompt = AICommitsUtils.constructPrompt(promptContent, diff, branch, hint)
208+
val constructPrompt = AICommitsUtils.constructPrompt(promptContent, diff, branch, hint, project)
206209
promptPreviewTextArea.text = constructPrompt.substring(0, constructPrompt.length.coerceAtMost(10000))
207210
promptPreviewTextArea.caretPosition = max(0, promptContentTextArea.caretPosition - 10)
208211
}

src/main/resources/messages/AiCommitsBundle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ validation.required=This value is required.
4040
validation.integer=Value should be an integer.
4141
validation.temperature=Temperature should be between 0 and 2.
4242
settings.prompt.comment=<ul>\
43-
<li>Customize your prompt using the variables {locale}, {diff}, {branch}, and {hint}.</li>\
43+
<li>Customize your prompt with variables: {locale}, {diff}, {branch}, {hint}, {taskId}, {taskSummary} and {taskDescription}.</li>\
4444
<li>Include a hint by using a dollar sign prefix like this: {Here is a hint: $hint}. This adds the hint text inside the curly brackets only if a hint is provided.</li>\
4545
<li>Note: The prompt preview displays only the first 10,000 characters.</li>\
4646
</ul>

0 commit comments

Comments
 (0)