✨ feat(vscode): 提示词不再绑定 Gitea,查工单、查 PR、发起 PR 统一走 spx
- 去掉 tea、gh、Gitea 字样:查工单 spx issue view,查 PR spx pr view,发起 PR spx pr create 且描述必须含 Closes #N - 审查和实施的 diff 不再写死 origin/main:审查取 PR 的目标分支,实施取计划里的目标分支或仓库默认分支 - 工单模板同时看 .gitea/ISSUE_TEMPLATE/ 和 .github/ISSUE_TEMPLATE/,禁止合并的说法不带工具名 - 内联兜底提示词同步改;设置里存着旧版的用户激活时按现有机制被问是否换新版 - 新增测试守住自带提示词和兜底不再点名平台
This commit is contained in:
1 parent
ae06c8e5d1
commit
1bec57a1cb
7 files changed
+73
-21
No files matched your search
@@ -1,5 +1,10 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { promptDigest, promptUpdatesToAsk } from './promptUpdatePlan'
|
||||
import path from 'node:path'
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import { PREVIOUS_DEFAULT_REVIEW_PROMPT } from './previousReviewPrompt'
|
||||
import { PROMPT_UPDATE_FIELDS, promptDigest, promptUpdatesToAsk } from './promptUpdatePlan'
|
||||
import { readDefaultPrompt } from './store'
|
||||
|
||||
const EXTENSION_ROOT = path.resolve(__dirname, '../..')
|
||||
|
||||
describe('promptUpdatesToAsk', () => {
|
||||
it('和自带的不一样就问', () => {
|
||||
@@ -36,3 +41,40 @@ describe('promptUpdatesToAsk', () => {
|
||||
})).toEqual([])
|
||||
})
|
||||
})
|
||||
|
||||
describe('自带提示词不绑定代码托管平台', () => {
|
||||
// `.gitea/` `.github/` 是工单模板目录,不算点名平台。
|
||||
const FORGE_TOOLS = /(?<![./])\b(?:tea|gh|gitea)\b/i
|
||||
|
||||
it.each(PROMPT_UPDATE_FIELDS.map(field => [field.file]))('prompts/%s.md 不提 tea / gh / Gitea,也不写死 origin/main', (file) => {
|
||||
const text = readDefaultPrompt(EXTENSION_ROOT, file)
|
||||
expect(text).not.toMatch(FORGE_TOOLS)
|
||||
expect(text).not.toContain('origin/main')
|
||||
})
|
||||
|
||||
it.each(PROMPT_UPDATE_FIELDS.map(field => [field.file]))('%s 的内联兜底同样不提', (file) => {
|
||||
vi.spyOn(console, 'warn').mockImplementation(() => {})
|
||||
const text = readDefaultPrompt(path.join(EXTENSION_ROOT, 'no-such-dir'), file)
|
||||
expect(text).not.toMatch(FORGE_TOOLS)
|
||||
expect(text).not.toContain('origin/main')
|
||||
})
|
||||
|
||||
it('查工单、查 PR、发起 PR 都走 spx,PR 描述必须关联工单', () => {
|
||||
expect(readDefaultPrompt(EXTENSION_ROOT, 'brainstorm')).toContain('spx issue view')
|
||||
expect(readDefaultPrompt(EXTENSION_ROOT, 'review')).toContain('spx pr view')
|
||||
const implement = readDefaultPrompt(EXTENSION_ROOT, 'implement-plan')
|
||||
expect(implement).toContain('spx pr create')
|
||||
expect(implement).toContain('Closes #{{issueNumber}}')
|
||||
})
|
||||
|
||||
it('设置里存着旧版自带审查提示词的,激活时会被问要不要换成新版', () => {
|
||||
const next = readDefaultPrompt(EXTENSION_ROOT, 'review')
|
||||
const out = promptUpdatesToAsk({
|
||||
stored: { reviewPrompt: PREVIOUS_DEFAULT_REVIEW_PROMPT },
|
||||
defaults: { reviewPrompt: next },
|
||||
decided: { reviewPrompt: promptDigest(PREVIOUS_DEFAULT_REVIEW_PROMPT) },
|
||||
})
|
||||
expect(out.map(item => item.key)).toEqual(['reviewPrompt'])
|
||||
expect(out[0].next).toBe(next)
|
||||
})
|
||||
})
|
||||
@@ -29,20 +29,20 @@ import { planPromptMigration, planReviewPromptMigration } from './promptMigratio
|
||||
* the extension usable if the file is missing/corrupt.
|
||||
*/
|
||||
const FALLBACK_BRAINSTORM_PROMPT = `{{#if issueNumber}}
|
||||
/ecc:grilling 讨论下 {{issueNumber}} 号工单。
|
||||
/ecc:grilling 讨论下 {{issueNumber}} 号工单,先用 spx issue view 看工单。
|
||||
{{#if prototypeFile}}
|
||||
工单已有原型插件 {{prototypeFile}},先读它;原型要改就 ListAgents 找到 issue-{{issueNumber}}-原型 会话{{#if prototypeSessionId}}(id {{prototypeSessionId}}){{/if}}并 SendMessage 给它,不要派子代理、不要自己动插件代码。
|
||||
{{/if}}
|
||||
达成共识后用 ecc:spec 写 .claude/specs/<stem>.md,我确认后用 ecc:plan 出 .claude/plans/<stem>.md,两个文件在 main 上提交并用 spx issue marker 同步 marker。不要 git checkout / 不要写代码 / 不要建 PR。
|
||||
达成共识后用 ecc:spec 写 .claude/specs/<stem>.md,我确认后用 ecc:plan 出 .claude/plans/<stem>.md,两个文件在仓库默认分支上提交并用 spx issue marker 同步 marker。不要 git checkout / 不要写代码 / 不要建 PR。
|
||||
{{else}}
|
||||
我现在有这样一个需求 {{userRequest}},你用 spx 命令创建 gitea 工单。工单 body 末尾必须包含 <!-- spx:nonce={{nonce}} -->。创建完工单立即停下汇报,不要擅自实施。
|
||||
我现在有这样一个需求 {{userRequest}},你用 spx 命令创建工单。工单 body 末尾必须包含 <!-- spx:nonce={{nonce}} -->。创建完工单立即停下汇报,不要擅自实施。
|
||||
{{/if}}`
|
||||
|
||||
const FALLBACK_IMPLEMENT_PLAN_PROMPT = `/ecc:tdd @{{planFile}} 按计划实施,编码派子代理,发起 PR 时在 body 中包含 "Closes #{{issueNumber}}"。严禁合并 PR。`
|
||||
const FALLBACK_IMPLEMENT_PLAN_PROMPT = `/ecc:tdd @{{planFile}} 按计划实施,编码派子代理,用 spx pr create 发起 PR,body 中必须包含 "Closes #{{issueNumber}}"。严禁合并 PR。`
|
||||
|
||||
const FALLBACK_TEST_PROMPT = `/pr-acceptance-testing 验收 {{issueNumber}} 号工单({{prRef}})。验收目标以工单正文为准,不要再问验收哪个。`
|
||||
|
||||
const FALLBACK_REVIEW_PROMPT = `用 tea 拿到 #{{prNumber}} PR,diff 交给 ecc:code-reviewer 子代理审查。审查意见用 spx pr review-comment 发评论,body 第一行写 <!-- spx:review=1 -->。`
|
||||
const FALLBACK_REVIEW_PROMPT = `用 spx pr view 查 #{{prNumber}} PR 的目标分支 <base>,把 git diff origin/<base>...HEAD 交给 ecc:code-reviewer 子代理审查。审查意见用 spx pr review-comment 发评论。严禁合并 PR。`
|
||||
|
||||
const FALLBACK_PROTOTYPE_PROMPT = `/ecc:figma-plugin-prototyping 给 {{issueNumber}} 号工单画原型:先读工单正文锁定要画的界面和状态,再写本地 Figma 插件把画板和点击流做出来。画完汇报插件路径和怎么导入,不要改业务代码。
|
||||
|
||||
|
||||
Reference in new issue
Block a user