dsh-gate-agent 0.1.0 → 0.1.2
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 +315 -285
- package/cordis.patch.yml +144 -144
- package/icon.svg +4 -4
- package/launchers/verify-notes.mjs +20 -20
- package/launchers/verify-notes.yml +34 -34
- package/lib/index.js +16 -13
- package/locale/en.json +6 -6
- package/locale/zh.json +6 -6
- package/package.json +34 -34
- package/skills/gate-code-review/SKILL.md +2 -2
- package/skills/gate-code-review/assets/worker-briefs/gate-implement-review.md +17 -17
- package/skills/gate-domain-modeling/CONTEXT-FORMAT.md +3 -3
- package/skills/gate-domain-modeling/GLOSSARY-FORMAT.md +3 -3
- package/skills/gate-fix-bug/assets/worker-briefs/fix-bug-review.md +20 -20
- package/skills/gate-fix-bug/assets/worker-briefs/gate-fix-bug.md +30 -30
- package/skills/gate-implement/SKILL.md +78 -78
- package/skills/gate-implement/assets/worker-briefs/gate-enter-implement.md +22 -22
- package/skills/gate-plan-review/assets/worker-briefs/plan-review.md +17 -17
- package/skills/gate-planning/assets/worker-briefs/gate-enter-plan.md +24 -24
- package/skills/gate-planning/proposal.md +49 -49
- package/skills/gate-user-verify/assets/worker-briefs/gate-code-verify.md +32 -32
- package/skills/gate-verify/SKILL.md +71 -71
- package/skills/gate-verify/assets/worker-briefs/gate-verify.md +21 -21
- package/skills/gate-write-agent-notes/SKILL.md +1 -1
- package/skills/gate-write-agent-notes/scripts/verify-agent-note-lifecycle.ts +74 -74
- package/skills/gate-writing-for-agents/SKILL-MECHANICS.md +4 -4
package/cordis.patch.yml
CHANGED
|
@@ -1,144 +1,144 @@
|
|
|
1
|
-
# Agent preset cordis: one `@deepseek-ai/dsh-agent-preset` declaration inserted
|
|
2
|
-
# after the web patch. Edits saved from the Web editor override this row's
|
|
3
|
-
# `config.plugins` by id from the profile patch.
|
|
4
|
-
- insert:
|
|
5
|
-
- id: preset-developer
|
|
6
|
-
name: '@deepseek-ai/dsh-agent-preset'
|
|
7
|
-
config:
|
|
8
|
-
id: developer
|
|
9
|
-
name: 开发者模式
|
|
10
|
-
description: 基于创造模式的开发者模式,含 gate 阶段门禁。
|
|
11
|
-
order: 5
|
|
12
|
-
plugins:
|
|
13
|
-
# Same persona as `standard`: tool descriptions and the skill catalog carry
|
|
14
|
-
# the operating detail, and the skills own the preset-authoring rules.
|
|
15
|
-
- id: persona
|
|
16
|
-
name: '@deepseek-ai/dsh-persona'
|
|
17
|
-
config:
|
|
18
|
-
prefix: >-
|
|
19
|
-
You are a coding agent powered by the {{model}} model.
|
|
20
|
-
- id: agent-instructions
|
|
21
|
-
name: '@deepseek-ai/dsh-agent-instructions'
|
|
22
|
-
config:
|
|
23
|
-
maxBytes: 65536
|
|
24
|
-
- id: time-context
|
|
25
|
-
name: '@deepseek-ai/dsh-time-context'
|
|
26
|
-
- id: tool-bash
|
|
27
|
-
name: '@deepseek-ai/dsh-tool-bash'
|
|
28
|
-
disabled: !!js process.platform === 'win32'
|
|
29
|
-
- id: tool-pwsh
|
|
30
|
-
name: '@deepseek-ai/dsh-tool-pwsh'
|
|
31
|
-
disabled: !!js process.platform !== 'win32'
|
|
32
|
-
- id: tool-fs
|
|
33
|
-
name: '@deepseek-ai/dsh-tool-fs'
|
|
34
|
-
config:
|
|
35
|
-
# Set true to add the apply_patch tool beside edit.
|
|
36
|
-
applyPatch: false
|
|
37
|
-
- id: tool-fs-search
|
|
38
|
-
name: '@deepseek-ai/dsh-tool-fs-search'
|
|
39
|
-
config:
|
|
40
|
-
sampleOverCapGlobResults: false
|
|
41
|
-
- id: tool-jobs
|
|
42
|
-
name: '@deepseek-ai/dsh-tool-jobs'
|
|
43
|
-
- id: tool-schedule
|
|
44
|
-
name: '@deepseek-ai/dsh-tool-schedule'
|
|
45
|
-
- id: command-goal
|
|
46
|
-
name: '@deepseek-ai/dsh-command-goal'
|
|
47
|
-
- id: tool-goal
|
|
48
|
-
name: '@deepseek-ai/dsh-tool-goal'
|
|
49
|
-
- id: planning
|
|
50
|
-
name: cordis:group
|
|
51
|
-
group: true
|
|
52
|
-
isolate:
|
|
53
|
-
planMode: true
|
|
54
|
-
config:
|
|
55
|
-
- id: plan-mode
|
|
56
|
-
name: '@deepseek-ai/dsh-plan-mode'
|
|
57
|
-
config:
|
|
58
|
-
section: |
|
|
59
|
-
You are in plan mode. Stay in plan mode until the user approves your plan through exit_plan_mode or switches the session mode. Imperative language to implement changes means plan the implementation, not execute it. A user's conversational agreement — including an answer confirming something you asked — approves nothing and does not end plan mode; fold the confirmed decision into the plan and submit it through exit_plan_mode.
|
|
60
|
-
|
|
61
|
-
Explore first. Use non-mutating reads, searches, static analysis, and checks to ground the plan in the actual repository. Do not edit or write files, change configuration, run formatters or code generation that rewrites tracked files, commit, or otherwise carry out the plan. Prefer existing functions and patterns over new machinery.
|
|
62
|
-
|
|
63
|
-
The tool catalog stays the same across modes for request-cache stability. These plan-mode rules override any later tool description or guidance that suggests using mutation tools; those tools remain listed to keep the tool catalog unchanged. Do not use todo_write to track this planning phase: it tracks implementation after an approved plan, while the plan itself belongs in exit_plan_mode.
|
|
64
|
-
|
|
65
|
-
Resolve discoverable facts by inspection. Use ask_user_question only for user-owned choices or material ambiguity that inspection cannot answer. Do not ask the user where code lives or how current behavior works when you can find out.
|
|
66
|
-
|
|
67
|
-
Make the plan decision-complete: state the goal and success criteria; group implementation changes by subsystem; identify public API, schema, and data-flow changes; cover edge cases, failure modes, tests, acceptance criteria, and explicit assumptions. Keep it concise enough to review but detailed enough that another engineer can implement it without making design decisions.
|
|
68
|
-
|
|
69
|
-
When ready, call exit_plan_mode with the complete plan markdown, starting with a # title. Make exit_plan_mode the only and final tool call in that assistant response: it presents the plan for approval, and implementation begins only in a later step after approval. Do not paste the final plan as a plain reply or ask "should I proceed?" through prose or ask_user_question. If review rejects it, incorporate the feedback and present again. If the review channel is unavailable or aborted, stay in plan mode and ask the user to switch modes manually; do not proceed with implementation.
|
|
70
|
-
- id: compaction
|
|
71
|
-
name: cordis:group
|
|
72
|
-
group: true
|
|
73
|
-
isolate:
|
|
74
|
-
compaction: true
|
|
75
|
-
toolResultPruner: true
|
|
76
|
-
config:
|
|
77
|
-
- id: compaction-basic
|
|
78
|
-
name: '@deepseek-ai/dsh-compaction-basic'
|
|
79
|
-
- id: command-compact
|
|
80
|
-
name: '@deepseek-ai/dsh-command-compact'
|
|
81
|
-
- id: tool-result-pruner
|
|
82
|
-
name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
|
|
83
|
-
config:
|
|
84
|
-
thresholdChars: 8192
|
|
85
|
-
headChars: 4096
|
|
86
|
-
tailChars: 1024
|
|
87
|
-
- id: delegation
|
|
88
|
-
name: cordis:group
|
|
89
|
-
group: true
|
|
90
|
-
isolate:
|
|
91
|
-
workflowEngine: true
|
|
92
|
-
config:
|
|
93
|
-
- id: tool-subagent-control
|
|
94
|
-
name: '@deepseek-ai/dsh-tool-subagent-control'
|
|
95
|
-
- id: tool-subagent
|
|
96
|
-
name: '@deepseek-ai/dsh-tool-subagent'
|
|
97
|
-
config:
|
|
98
|
-
provider: spawn
|
|
99
|
-
toolName: subagent
|
|
100
|
-
modelSelection: true
|
|
101
|
-
modelDiscovery: true
|
|
102
|
-
- id: tool-subagent-fork
|
|
103
|
-
name: '@deepseek-ai/dsh-tool-subagent'
|
|
104
|
-
config:
|
|
105
|
-
provider: fork
|
|
106
|
-
toolName: subagent_fork
|
|
107
|
-
- id: workflow-ptc
|
|
108
|
-
name: '@deepseek-ai/dsh-workflow-ptc'
|
|
109
|
-
config:
|
|
110
|
-
provider: spawn
|
|
111
|
-
- id: tool-workflow
|
|
112
|
-
name: '@deepseek-ai/dsh-tool-workflow'
|
|
113
|
-
- id: tool-ask-user
|
|
114
|
-
name: '@deepseek-ai/dsh-tool-ask-user'
|
|
115
|
-
- id: tool-todo
|
|
116
|
-
name: '@deepseek-ai/dsh-tool-todo'
|
|
117
|
-
config:
|
|
118
|
-
allowParallelInProgress: true
|
|
119
|
-
- id: tool-web
|
|
120
|
-
name: '@deepseek-ai/dsh-tool-web'
|
|
121
|
-
config:
|
|
122
|
-
fetch: true
|
|
123
|
-
searchTimeoutMs: 60000
|
|
124
|
-
- id: tool-cordis
|
|
125
|
-
name: '@deepseek-ai/dsh-tool-cordis'
|
|
126
|
-
- id: skill-filesystem
|
|
127
|
-
name: '@deepseek-ai/dsh-skill-filesystem'
|
|
128
|
-
config:
|
|
129
|
-
customSkillDirs:
|
|
130
|
-
- !!js process.getBuiltinModule('node:path').join(process.getBuiltinModule('node:path').dirname(process.getBuiltinModule('node:module').createRequire(baseUrl).resolve('@deepseek-ai/dsh-agent-preset/package.json')), 'skills')
|
|
131
|
-
bundledSkillDir: !!js process.getBuiltinModule('node:path').join(process.getBuiltinModule('node:path').dirname(process.getBuiltinModule('node:module').createRequire(baseUrl).resolve('dsh-gate-agent/package.json')), 'skills')
|
|
132
|
-
- id: tool-skill
|
|
133
|
-
name: '@deepseek-ai/dsh-tool-skill'
|
|
134
|
-
- id: present
|
|
135
|
-
name: '@deepseek-ai/dsh-tool-present'
|
|
136
|
-
- id: tool-plugin-manager
|
|
137
|
-
name: '@deepseek-ai/dsh-plugin-manager/tools'
|
|
138
|
-
disabled: !!js "!ctx.get('profileContext')"
|
|
139
|
-
- id: tool-plugin-market
|
|
140
|
-
name: '@deepseek-ai/dsh-plugin-market/tools'
|
|
141
|
-
disabled: !!js "!ctx.get('profileContext')"
|
|
142
|
-
- id: gate
|
|
143
|
-
name: 'dsh-gate-agent'
|
|
144
|
-
|
|
1
|
+
# Agent preset cordis: one `@deepseek-ai/dsh-agent-preset` declaration inserted
|
|
2
|
+
# after the web patch. Edits saved from the Web editor override this row's
|
|
3
|
+
# `config.plugins` by id from the profile patch.
|
|
4
|
+
- insert:
|
|
5
|
+
- id: preset-developer
|
|
6
|
+
name: '@deepseek-ai/dsh-agent-preset'
|
|
7
|
+
config:
|
|
8
|
+
id: developer
|
|
9
|
+
name: 开发者模式
|
|
10
|
+
description: 基于创造模式的开发者模式,含 gate 阶段门禁。
|
|
11
|
+
order: 5
|
|
12
|
+
plugins:
|
|
13
|
+
# Same persona as `standard`: tool descriptions and the skill catalog carry
|
|
14
|
+
# the operating detail, and the skills own the preset-authoring rules.
|
|
15
|
+
- id: persona
|
|
16
|
+
name: '@deepseek-ai/dsh-persona'
|
|
17
|
+
config:
|
|
18
|
+
prefix: >-
|
|
19
|
+
You are a coding agent powered by the {{model}} model.
|
|
20
|
+
- id: agent-instructions
|
|
21
|
+
name: '@deepseek-ai/dsh-agent-instructions'
|
|
22
|
+
config:
|
|
23
|
+
maxBytes: 65536
|
|
24
|
+
- id: time-context
|
|
25
|
+
name: '@deepseek-ai/dsh-time-context'
|
|
26
|
+
- id: tool-bash
|
|
27
|
+
name: '@deepseek-ai/dsh-tool-bash'
|
|
28
|
+
disabled: !!js process.platform === 'win32'
|
|
29
|
+
- id: tool-pwsh
|
|
30
|
+
name: '@deepseek-ai/dsh-tool-pwsh'
|
|
31
|
+
disabled: !!js process.platform !== 'win32'
|
|
32
|
+
- id: tool-fs
|
|
33
|
+
name: '@deepseek-ai/dsh-tool-fs'
|
|
34
|
+
config:
|
|
35
|
+
# Set true to add the apply_patch tool beside edit.
|
|
36
|
+
applyPatch: false
|
|
37
|
+
- id: tool-fs-search
|
|
38
|
+
name: '@deepseek-ai/dsh-tool-fs-search'
|
|
39
|
+
config:
|
|
40
|
+
sampleOverCapGlobResults: false
|
|
41
|
+
- id: tool-jobs
|
|
42
|
+
name: '@deepseek-ai/dsh-tool-jobs'
|
|
43
|
+
- id: tool-schedule
|
|
44
|
+
name: '@deepseek-ai/dsh-tool-schedule'
|
|
45
|
+
- id: command-goal
|
|
46
|
+
name: '@deepseek-ai/dsh-command-goal'
|
|
47
|
+
- id: tool-goal
|
|
48
|
+
name: '@deepseek-ai/dsh-tool-goal'
|
|
49
|
+
- id: planning
|
|
50
|
+
name: cordis:group
|
|
51
|
+
group: true
|
|
52
|
+
isolate:
|
|
53
|
+
planMode: true
|
|
54
|
+
config:
|
|
55
|
+
- id: plan-mode
|
|
56
|
+
name: '@deepseek-ai/dsh-plan-mode'
|
|
57
|
+
config:
|
|
58
|
+
section: |
|
|
59
|
+
You are in plan mode. Stay in plan mode until the user approves your plan through exit_plan_mode or switches the session mode. Imperative language to implement changes means plan the implementation, not execute it. A user's conversational agreement — including an answer confirming something you asked — approves nothing and does not end plan mode; fold the confirmed decision into the plan and submit it through exit_plan_mode.
|
|
60
|
+
|
|
61
|
+
Explore first. Use non-mutating reads, searches, static analysis, and checks to ground the plan in the actual repository. Do not edit or write files, change configuration, run formatters or code generation that rewrites tracked files, commit, or otherwise carry out the plan. Prefer existing functions and patterns over new machinery.
|
|
62
|
+
|
|
63
|
+
The tool catalog stays the same across modes for request-cache stability. These plan-mode rules override any later tool description or guidance that suggests using mutation tools; those tools remain listed to keep the tool catalog unchanged. Do not use todo_write to track this planning phase: it tracks implementation after an approved plan, while the plan itself belongs in exit_plan_mode.
|
|
64
|
+
|
|
65
|
+
Resolve discoverable facts by inspection. Use ask_user_question only for user-owned choices or material ambiguity that inspection cannot answer. Do not ask the user where code lives or how current behavior works when you can find out.
|
|
66
|
+
|
|
67
|
+
Make the plan decision-complete: state the goal and success criteria; group implementation changes by subsystem; identify public API, schema, and data-flow changes; cover edge cases, failure modes, tests, acceptance criteria, and explicit assumptions. Keep it concise enough to review but detailed enough that another engineer can implement it without making design decisions.
|
|
68
|
+
|
|
69
|
+
When ready, call exit_plan_mode with the complete plan markdown, starting with a # title. Make exit_plan_mode the only and final tool call in that assistant response: it presents the plan for approval, and implementation begins only in a later step after approval. Do not paste the final plan as a plain reply or ask "should I proceed?" through prose or ask_user_question. If review rejects it, incorporate the feedback and present again. If the review channel is unavailable or aborted, stay in plan mode and ask the user to switch modes manually; do not proceed with implementation.
|
|
70
|
+
- id: compaction
|
|
71
|
+
name: cordis:group
|
|
72
|
+
group: true
|
|
73
|
+
isolate:
|
|
74
|
+
compaction: true
|
|
75
|
+
toolResultPruner: true
|
|
76
|
+
config:
|
|
77
|
+
- id: compaction-basic
|
|
78
|
+
name: '@deepseek-ai/dsh-compaction-basic'
|
|
79
|
+
- id: command-compact
|
|
80
|
+
name: '@deepseek-ai/dsh-command-compact'
|
|
81
|
+
- id: tool-result-pruner
|
|
82
|
+
name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
|
|
83
|
+
config:
|
|
84
|
+
thresholdChars: 8192
|
|
85
|
+
headChars: 4096
|
|
86
|
+
tailChars: 1024
|
|
87
|
+
- id: delegation
|
|
88
|
+
name: cordis:group
|
|
89
|
+
group: true
|
|
90
|
+
isolate:
|
|
91
|
+
workflowEngine: true
|
|
92
|
+
config:
|
|
93
|
+
- id: tool-subagent-control
|
|
94
|
+
name: '@deepseek-ai/dsh-tool-subagent-control'
|
|
95
|
+
- id: tool-subagent
|
|
96
|
+
name: '@deepseek-ai/dsh-tool-subagent'
|
|
97
|
+
config:
|
|
98
|
+
provider: spawn
|
|
99
|
+
toolName: subagent
|
|
100
|
+
modelSelection: true
|
|
101
|
+
modelDiscovery: true
|
|
102
|
+
- id: tool-subagent-fork
|
|
103
|
+
name: '@deepseek-ai/dsh-tool-subagent'
|
|
104
|
+
config:
|
|
105
|
+
provider: fork
|
|
106
|
+
toolName: subagent_fork
|
|
107
|
+
- id: workflow-ptc
|
|
108
|
+
name: '@deepseek-ai/dsh-workflow-ptc'
|
|
109
|
+
config:
|
|
110
|
+
provider: spawn
|
|
111
|
+
- id: tool-workflow
|
|
112
|
+
name: '@deepseek-ai/dsh-tool-workflow'
|
|
113
|
+
- id: tool-ask-user
|
|
114
|
+
name: '@deepseek-ai/dsh-tool-ask-user'
|
|
115
|
+
- id: tool-todo
|
|
116
|
+
name: '@deepseek-ai/dsh-tool-todo'
|
|
117
|
+
config:
|
|
118
|
+
allowParallelInProgress: true
|
|
119
|
+
- id: tool-web
|
|
120
|
+
name: '@deepseek-ai/dsh-tool-web'
|
|
121
|
+
config:
|
|
122
|
+
fetch: true
|
|
123
|
+
searchTimeoutMs: 60000
|
|
124
|
+
- id: tool-cordis
|
|
125
|
+
name: '@deepseek-ai/dsh-tool-cordis'
|
|
126
|
+
- id: skill-filesystem
|
|
127
|
+
name: '@deepseek-ai/dsh-skill-filesystem'
|
|
128
|
+
config:
|
|
129
|
+
customSkillDirs:
|
|
130
|
+
- !!js process.getBuiltinModule('node:path').join(process.getBuiltinModule('node:path').dirname(process.getBuiltinModule('node:module').createRequire(baseUrl).resolve('@deepseek-ai/dsh-agent-preset/package.json')), 'skills')
|
|
131
|
+
bundledSkillDir: !!js process.getBuiltinModule('node:path').join(process.getBuiltinModule('node:path').dirname(process.getBuiltinModule('node:module').createRequire(baseUrl).resolve('dsh-gate-agent/package.json')), 'skills')
|
|
132
|
+
- id: tool-skill
|
|
133
|
+
name: '@deepseek-ai/dsh-tool-skill'
|
|
134
|
+
- id: present
|
|
135
|
+
name: '@deepseek-ai/dsh-tool-present'
|
|
136
|
+
- id: tool-plugin-manager
|
|
137
|
+
name: '@deepseek-ai/dsh-plugin-manager/tools'
|
|
138
|
+
disabled: !!js "!ctx.get('profileContext')"
|
|
139
|
+
- id: tool-plugin-market
|
|
140
|
+
name: '@deepseek-ai/dsh-plugin-market/tools'
|
|
141
|
+
disabled: !!js "!ctx.get('profileContext')"
|
|
142
|
+
- id: gate
|
|
143
|
+
name: 'dsh-gate-agent'
|
|
144
|
+
|
package/icon.svg
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none">
|
|
2
|
-
<path d="M12 2.5 20 5.5v6.2c0 5.1-3.4 8.5-8 9.8-4.6-1.3-8-4.7-8-9.8V5.5L12 2.5Z" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/>
|
|
3
|
-
<path d="M8.5 12.2 11 14.7l4.8-5.2" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/>
|
|
4
|
-
</svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none">
|
|
2
|
+
<path d="M12 2.5 20 5.5v6.2c0 5.1-3.4 8.5-8 9.8-4.6-1.3-8-4.7-8-9.8V5.5L12 2.5Z" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/>
|
|
3
|
+
<path d="M8.5 12.2 11 14.7l4.8-5.2" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/>
|
|
4
|
+
</svg>
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { spawnSync } from 'node:child_process'
|
|
2
|
-
import { join } from 'node:path'
|
|
3
|
-
|
|
4
|
-
const scriptsDir = join(process.cwd(), '.agents', 'gate', 'ci')
|
|
5
|
-
const notesRoot = join(process.cwd(), '.agents', 'notes')
|
|
6
|
-
const scripts = [
|
|
7
|
-
'verify-agent-note-tree.ts',
|
|
8
|
-
'verify-agent-note-format.ts',
|
|
9
|
-
'verify-agent-note-lifecycle.ts',
|
|
10
|
-
'verify-archived-agent-notes.ts',
|
|
11
|
-
]
|
|
12
|
-
|
|
13
|
-
for (const name of scripts) {
|
|
14
|
-
const result = spawnSync(
|
|
15
|
-
process.execPath,
|
|
16
|
-
[join(scriptsDir, name), '--root', notesRoot],
|
|
17
|
-
{ stdio: 'inherit' },
|
|
18
|
-
)
|
|
19
|
-
if (result.status !== 0) process.exit(result.status ?? 1)
|
|
20
|
-
}
|
|
1
|
+
import { spawnSync } from 'node:child_process'
|
|
2
|
+
import { join } from 'node:path'
|
|
3
|
+
|
|
4
|
+
const scriptsDir = join(process.cwd(), '.agents', 'gate', 'ci')
|
|
5
|
+
const notesRoot = join(process.cwd(), '.agents', 'notes')
|
|
6
|
+
const scripts = [
|
|
7
|
+
'verify-agent-note-tree.ts',
|
|
8
|
+
'verify-agent-note-format.ts',
|
|
9
|
+
'verify-agent-note-lifecycle.ts',
|
|
10
|
+
'verify-archived-agent-notes.ts',
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
for (const name of scripts) {
|
|
14
|
+
const result = spawnSync(
|
|
15
|
+
process.execPath,
|
|
16
|
+
[join(scriptsDir, name), '--root', notesRoot],
|
|
17
|
+
{ stdio: 'inherit' },
|
|
18
|
+
)
|
|
19
|
+
if (result.status !== 0) process.exit(result.status ?? 1)
|
|
20
|
+
}
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
# 由 gate-init 生成;校验脚本在 .agents/gate/ci/,不依赖插件安装路径。
|
|
2
|
-
name: Verify Agent Notes
|
|
3
|
-
|
|
4
|
-
on:
|
|
5
|
-
push:
|
|
6
|
-
branches:
|
|
7
|
-
- main
|
|
8
|
-
pull_request:
|
|
9
|
-
|
|
10
|
-
permissions:
|
|
11
|
-
contents: read
|
|
12
|
-
|
|
13
|
-
jobs:
|
|
14
|
-
verify:
|
|
15
|
-
runs-on: ubuntu-latest
|
|
16
|
-
steps:
|
|
17
|
-
- name: Checkout
|
|
18
|
-
uses: actions/checkout@v4
|
|
19
|
-
with:
|
|
20
|
-
fetch-depth: 0
|
|
21
|
-
|
|
22
|
-
- name: Setup Node
|
|
23
|
-
uses: actions/setup-node@v4
|
|
24
|
-
with:
|
|
25
|
-
node-version: 24
|
|
26
|
-
|
|
27
|
-
- name: Verify note tree, format, lifecycle, and archive seals
|
|
28
|
-
env:
|
|
29
|
-
AGENT_NOTE_ARCHIVE_BASE_REF: ${{ github.event.pull_request.base.sha || github.event.before }}
|
|
30
|
-
run: |
|
|
31
|
-
npx --yes tsx .agents/gate/ci/verify-agent-note-tree.ts --root .agents/notes
|
|
32
|
-
npx --yes tsx .agents/gate/ci/verify-agent-note-format.ts --root .agents/notes
|
|
33
|
-
npx --yes tsx .agents/gate/ci/verify-agent-note-lifecycle.ts --root .agents/notes
|
|
34
|
-
npx --yes tsx .agents/gate/ci/verify-archived-agent-notes.ts --root .agents/notes
|
|
1
|
+
# 由 gate-init 生成;校验脚本在 .agents/gate/ci/,不依赖插件安装路径。
|
|
2
|
+
name: Verify Agent Notes
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
branches:
|
|
7
|
+
- main
|
|
8
|
+
pull_request:
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
verify:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- name: Checkout
|
|
18
|
+
uses: actions/checkout@v4
|
|
19
|
+
with:
|
|
20
|
+
fetch-depth: 0
|
|
21
|
+
|
|
22
|
+
- name: Setup Node
|
|
23
|
+
uses: actions/setup-node@v4
|
|
24
|
+
with:
|
|
25
|
+
node-version: 24
|
|
26
|
+
|
|
27
|
+
- name: Verify note tree, format, lifecycle, and archive seals
|
|
28
|
+
env:
|
|
29
|
+
AGENT_NOTE_ARCHIVE_BASE_REF: ${{ github.event.pull_request.base.sha || github.event.before }}
|
|
30
|
+
run: |
|
|
31
|
+
npx --yes tsx .agents/gate/ci/verify-agent-note-tree.ts --root .agents/notes
|
|
32
|
+
npx --yes tsx .agents/gate/ci/verify-agent-note-format.ts --root .agents/notes
|
|
33
|
+
npx --yes tsx .agents/gate/ci/verify-agent-note-lifecycle.ts --root .agents/notes
|
|
34
|
+
npx --yes tsx .agents/gate/ci/verify-archived-agent-notes.ts --root .agents/notes
|
package/lib/index.js
CHANGED
|
@@ -52,7 +52,7 @@ var PLAN_ORCHESTRATION = `## /gate-enter-plan \u7F16\u6392
|
|
|
52
52
|
\u4E3B\u4EE3\u7406\u6D3E worker\uFF1Bgate \u4E0D\u6D3E\u3002
|
|
53
53
|
|
|
54
54
|
## Step 1 \u2014 Planning
|
|
55
|
-
\u4E3B agent \u52A0\u8F7D\u6280\u80FD gate-planning \u548C gate-write-agent-notes\uFF1B\u8BFB\u53D6 gate-planning \u7684 SKILL.md\u3001proposal.md \u548C assets/worker-briefs/gate-enter-plan.md \u5199 planning \u4EFB\u52A1\u3002
|
|
55
|
+
\u4E3B agent \u9996\u6B21\u8FDB\u5165 planning \u65F6\u52A0\u8F7D\u6280\u80FD gate-planning \u548C gate-write-agent-notes\uFF1B\u82E5\u672C\u4F1A\u8BDD\u5DF2\u52A0\u8F7D\u4E14\u5185\u5BB9\u4ECD\u5728\u4E0A\u6587\uFF0C\u76F4\u63A5\u590D\u7528\uFF0C\u4E0D\u8981\u91CD\u590D\u8C03\u7528 skill\u3002\u8BFB\u53D6 gate-planning \u7684 SKILL.md\u3001proposal.md \u548C assets/worker-briefs/gate-enter-plan.md \u5199 planning \u4EFB\u52A1\u3002
|
|
56
56
|
\u82E5\u5DE5\u4F5C\u9879\u8981\u5199\u8BBE\u8BA1\u8282\uFF08Note \u7684 \u201C## Design\u201D / \u201C### \u8BBE\u8BA1\u201D / \u81EA\u7531\u8BBE\u8BA1\u8282\uFF09\uFF0C\u5FC5\u987B\u5148\u8BFB\u53D6 rfc.md\uFF0C\u6309\u5176\u68C0\u67E5\u9879\u6536\u655B\uFF0C\u5E76\u628A\u9002\u7528\u68C0\u67E5\u70B9\u5199\u8FDB worker prompt\uFF1Bmechanical \u6216\u4E0D\u5199\u8BBE\u8BA1\u8282\u7684\u5DE5\u4F5C\u9879\u4E0D\u5F3A\u5236\u8BFB rfc\u3002
|
|
57
57
|
\u5148\u6309 write-agent-notes \xA73 \u68C0\u7D22\u5386\u53F2\uFF0C\u518D\u6309 \xA74 \u5224\u5B9A\u5F52\u5C5E\u4E0E class\uFF1B\u7528 gate_note_write \u5199 Note\uFF0C\u8DEF\u5F84\u4E0E class \u5FC5\u987B\u4E00\u81F4\u3002\u53D1\u73B0\u65E7 implemented Note \u88AB\u65B0\u51B3\u5B9A\u5B8C\u5168\u53D6\u4EE3\u65F6\uFF0C\u8BB0\u4E0B\u5F52\u6863\u5019\u9009\uFF1B\u65B0 Note \u5C1A\u672A\u843D\u5730\u524D\u4E0D\u8981\u5F52\u6863\u3002
|
|
58
58
|
\u628A\u5DE5\u4F5C\u9879\u3001\u7EA6\u675F\u548C\u63D0\u70BC\u540E\u7684\u89C4\u5212\u65B9\u6CD5\u5199\u8FDB subagent prompt\uFF1Bplanning worker \u4E0D\u52A0\u8F7D gate \u6280\u80FD\u3002
|
|
@@ -60,11 +60,11 @@ var PLAN_ORCHESTRATION = `## /gate-enter-plan \u7F16\u6392
|
|
|
60
60
|
notePaths \u662F [{path,class,lifecycle}] \u6570\u7EC4\uFF1Bpath \u63A5\u53D7 .agents/notes/<lifecycle>/<class>/...\u3001<lifecycle>/<class>/... \u6216 <class>/...\uFF0Cgate_record \u5F52\u4E00\u4E3A\u5B8C\u6574\u8DEF\u5F84\uFF1Bmechanical:<\u8BF4\u660E> \u7528 noteDecision:'mechanical' \u4E14 notePaths \u4E3A\u7A7A\u3002
|
|
61
61
|
|
|
62
62
|
## Step 2 \u2014 Plan Review
|
|
63
|
-
\u4E3B agent \u52A0\u8F7D\u6280\u80FD gate-plan-review\uFF1B\u8BFB\u53D6\u8BE5\u6280\u80FD\u7684 assets/worker-briefs/plan-review.md \u5199 review \u4EFB\u52A1\uFF0C\u6309\u4EFB\u52A1\u89C4\u6A21\u548C\u98CE\u9669\u81EA\u884C\u51B3\u5B9A\u6D3E\u4E00\u4E2A\u6216\u591A\u4E2A\u53EA\u8BFB review worker\uFF0C\u8986\u76D6 Standards\u3001Spec\u3001Architecture \u4E09\u8F74\u3002
|
|
63
|
+
\u4E3B agent \u9996\u6B21\u8FDB\u5165 plan-review \u65F6\u52A0\u8F7D\u6280\u80FD gate-plan-review\uFF1B\u82E5\u672C\u4F1A\u8BDD\u5DF2\u52A0\u8F7D\u4E14\u5185\u5BB9\u4ECD\u5728\u4E0A\u6587\uFF0C\u540E\u7EED\u591A\u8F6E review \u76F4\u63A5\u590D\u7528\uFF0C\u4E0D\u8981\u91CD\u590D\u8C03\u7528 skill\u3002\u8BFB\u53D6\u8BE5\u6280\u80FD\u7684 assets/worker-briefs/plan-review.md \u5199 review \u4EFB\u52A1\uFF0C\u6309\u4EFB\u52A1\u89C4\u6A21\u548C\u98CE\u9669\u81EA\u884C\u51B3\u5B9A\u6D3E\u4E00\u4E2A\u6216\u591A\u4E2A\u53EA\u8BFB review worker\uFF0C\u8986\u76D6 Standards\u3001Spec\u3001Architecture \u4E09\u8F74\u3002
|
|
64
64
|
\u7ED9 worker \u5DE5\u4F5C\u9879\u3001Note\u3001\u56FA\u5B9A\u70B9\u548C\u8BC4\u5BA1\u65B9\u6CD5\uFF1B\u4E0D\u8981\u5728 review worker prompt \u4E2D\u9644\u5E26\u9879\u76EE\u73AF\u5883\u9A8C\u8BC1\uFF08package.json\u3001Node \u7248\u672C\u3001git \u72B6\u6001\u3001\u6587\u4EF6\u5B58\u5728\u6027\u3001\u521D\u59CB\u5316 smoke \u7ED3\u679C\uFF09\u3002
|
|
65
65
|
\u5B8C\u6210\u540E\u8C03 gate_record({node:'plan-review',findings,reviewAxes,workerSessionIds,requiresDiscussion})\u3002
|
|
66
66
|
reviewAxes \u5FC5\u987B\u5305\u542B standards\u3001spec\u3001architecture \u4E09\u8F74\u3002
|
|
67
|
-
\u9700\u8981\u7528\u6237\u51B3\u5B9A\uFF1A\u8FDB\u5165 blocked\uFF0C\u7B49\u5F85 /gate-resume\uFF1B\u4ECD\u6709 findings\uFF1A\u5148 gate_record \u672C\u8F6E plan-review\uFF0C\u786E\u8BA4 node \u5DF2\u53D8\u4E3A plan-revise\uFF0C\u518D\
|
|
67
|
+
\u9700\u8981\u7528\u6237\u51B3\u5B9A\uFF1A\u8FDB\u5165 blocked\uFF0C\u7B49\u5F85 /gate-resume\uFF1B\u4ECD\u6709 findings\uFF1A\u5148 gate_record \u672C\u8F6E plan-review\uFF0C\u786E\u8BA4 node \u5DF2\u53D8\u4E3A plan-revise\uFF0C\u518D\u590D\u7528\u5DF2\u52A0\u8F7D\u7684 gate-planning\uFF0C\u53EA\u5E26 findings \u548C Note \u8DEF\u5F84\u6D3E revise\uFF0C\u518D review\u3002
|
|
68
68
|
|
|
69
69
|
## Step 3 \u2014 \u56DE\u5230 Discuss
|
|
70
70
|
review \u4E3A\u7A7A\u65F6\u56DE\u5230 discuss\uFF0CplanReady=true\u3002
|
|
@@ -73,18 +73,18 @@ var IMPLEMENT_ORCHESTRATION = `## /gate-enter-implement \u7F16\u6392
|
|
|
73
73
|
\u4E3B\u4EE3\u7406\u6D3E worker\uFF1Bgate \u4E0D\u6D3E\u3002
|
|
74
74
|
|
|
75
75
|
## Step 1 \u2014 Implement
|
|
76
|
-
\u4E3B agent \u52A0\u8F7D\u6280\u80FD gate-implement\uFF1B\u8BFB\u53D6\u8BE5\u6280\u80FD\u7684 assets/worker-briefs/gate-enter-implement.md \u5199 implement \u4EFB\u52A1\u3002\u91C7\u7528\u6D4B\u8BD5\u4F18\u5148\u65F6\u540C\u65F6\u52A0\u8F7D gate-tdd\uFF0C\u5E76\u628A\u76F8\u5173\u89C4\u5219\u4EA4\u7ED9 implement worker\u3002
|
|
76
|
+
\u4E3B agent \u9996\u6B21\u8FDB\u5165 implement \u65F6\u52A0\u8F7D\u6280\u80FD gate-implement\uFF1B\u82E5\u672C\u4F1A\u8BDD\u5DF2\u52A0\u8F7D\u4E14\u5185\u5BB9\u4ECD\u5728\u4E0A\u6587\uFF0C\u76F4\u63A5\u590D\u7528\uFF0C\u4E0D\u8981\u91CD\u590D\u8C03\u7528 skill\u3002\u8BFB\u53D6\u8BE5\u6280\u80FD\u7684 assets/worker-briefs/gate-enter-implement.md \u5199 implement \u4EFB\u52A1\u3002\u91C7\u7528\u6D4B\u8BD5\u4F18\u5148\u65F6\u540C\u65F6\u52A0\u8F7D gate-tdd\uFF0C\u5E76\u628A\u76F8\u5173\u89C4\u5219\u4EA4\u7ED9 implement worker\u3002
|
|
77
77
|
worker \u4E0D\u52A0\u8F7D gate \u6280\u80FD\u3002
|
|
78
78
|
\u5B8C\u6210\u540E\u8C03 gate_record({node:'implement', workerSessionIds})\u3002
|
|
79
79
|
|
|
80
80
|
## Step 2 \u2014 Implementation Review
|
|
81
|
-
\u4E3B agent \u52A0\u8F7D\u6280\u80FD gate-code-review\uFF1B\u8BFB\u53D6\u8BE5\u6280\u80FD\u7684 assets/worker-briefs/gate-implement-review.md \u5199 review \u4EFB\u52A1\uFF0C\u6309\u6539\u52A8\u89C4\u6A21\u81EA\u884C\u51B3\u5B9A\u6D3E\u4E00\u4E2A\u6216\u591A\u4E2A\u53EA\u8BFB review worker\uFF0C\u8986\u76D6 Standards \u4E0E Spec \u4E24\u8F74\u3002
|
|
81
|
+
\u4E3B agent \u9996\u6B21\u8FDB\u5165 code-review \u65F6\u52A0\u8F7D\u6280\u80FD gate-code-review\uFF1B\u82E5\u672C\u4F1A\u8BDD\u5DF2\u52A0\u8F7D\u4E14\u5185\u5BB9\u4ECD\u5728\u4E0A\u6587\uFF0C\u540E\u7EED review \u8F6E\u6B21\u76F4\u63A5\u590D\u7528\uFF0C\u4E0D\u8981\u91CD\u590D\u8C03\u7528 skill\u3002\u8BFB\u53D6\u8BE5\u6280\u80FD\u7684 assets/worker-briefs/gate-implement-review.md \u5199 review \u4EFB\u52A1\uFF0C\u6309\u6539\u52A8\u89C4\u6A21\u81EA\u884C\u51B3\u5B9A\u6D3E\u4E00\u4E2A\u6216\u591A\u4E2A\u53EA\u8BFB review worker\uFF0C\u8986\u76D6 Standards \u4E0E Spec \u4E24\u8F74\u3002
|
|
82
82
|
\u5B8C\u6210\u540E\u8C03 gate_record({node:'code-review', findings, reviewAxes, workerSessionIds})\uFF1B\u6709 findings \u65F6\u5148\u8BB0\u5F55\uFF0C\u786E\u8BA4 node \u5DF2\u53D8\u4E3A implement-revise\uFF0C\u518D\u6D3E revise worker\u3002
|
|
83
83
|
\u5BA1\u67E5\u8981\u6C42\u6EE1\u8DB3\u540E\u7EE7\u7EED Step 3\uFF0C\u65E0\u9700\u518D\u6B21\u6388\u6743\u3002
|
|
84
84
|
\u5B9E\u73B0\u4E2D\u53D1\u73B0\u8303\u56F4\u5916\u95EE\u9898\u3001\u5408\u540C\u53D8\u5316\u6216\u9700\u8981\u91CD\u65B0\u8BA8\u8BBA\u65F6\uFF0Cworker \u505C\u6B62\u5E76\u8FD4\u56DE receipt\uFF1B\u4E3B agent \u5411\u7528\u6237\u8BF4\u660E\uFF0C\u4F7F\u7528 gate_record \u7684 requiresDiscussion \u6216\u63D0\u793A\u7528\u6237\u6267\u884C /gate-return-discuss\u3002\u4E0D\u8981\u505C\u5728 implement \u91CC\u7EE7\u7EED\u6269\u5927\u8303\u56F4\u3002
|
|
85
85
|
|
|
86
86
|
## Step 3 \u2014 Verify
|
|
87
|
-
\u4E3B agent \u52A0\u8F7D\u6280\u80FD gate-verify\uFF0C\u8BFB\u53D6\u8BE5\u6280\u80FD\u7684 assets/worker-briefs/gate-verify.md \u5199 verify \u4EFB\u52A1\uFF0C\u6D3E verify worker \u5B8C\u6210\u6700\u7EC8\u9A8C\u6536\u3002
|
|
87
|
+
\u4E3B agent \u9996\u6B21\u8FDB\u5165 verify \u65F6\u52A0\u8F7D\u6280\u80FD gate-verify\uFF1B\u82E5\u672C\u4F1A\u8BDD\u5DF2\u52A0\u8F7D\u4E14\u5185\u5BB9\u4ECD\u5728\u4E0A\u6587\uFF0C\u76F4\u63A5\u590D\u7528\uFF0C\u4E0D\u8981\u91CD\u590D\u8C03\u7528 skill\u3002\u8BFB\u53D6\u8BE5\u6280\u80FD\u7684 assets/worker-briefs/gate-verify.md \u5199 verify \u4EFB\u52A1\uFF0C\u6D3E verify worker \u5B8C\u6210\u6700\u7EC8\u9A8C\u6536\u3002
|
|
88
88
|
\u5B8C\u6210\u540E\u8C03 gate_record({node:'verify', verification, workerSessionIds})\uFF1Bverification.toolResults \u5FC5\u987B\u662F verify worker session log \u4E2D\u771F\u5B9E tool/result \u7684 call_... id\uFF0Cevidence \u662F workspace \u5185\u7684\u666E\u901A\u6587\u4EF6\u3002
|
|
89
89
|
\u53EA\u6709\u6700\u7EC8 PASS \u624D\u5B8C\u6210\u4EA4\u4ED8\uFF1BFAIL \u56DE\u5230 implement-revise\u3002
|
|
90
90
|
\u72B6\u6001\u66F4\u65B0\u9075\u5FAA\u9879\u76EE\u767B\u8BB0\u7684\u5DE5\u4F5C\u9879\u4E0E\u51B3\u7B56\u8BB0\u5F55\u751F\u547D\u5468\u671F\u3002
|
|
@@ -97,10 +97,10 @@ var FIX_BUG_ORCHESTRATION = `## /gate-fix-bug \u7F16\u6392
|
|
|
97
97
|
\u4E3B agent \u8BFB\u53D6 gate-fix-bug\uFF1B\u4E3B agent \u53EA\u6C47\u603B\uFF0C\u4E0D\u81EA\u884C\u4FEE\u590D\u3002
|
|
98
98
|
|
|
99
99
|
## Step 1 \u2014 Fix
|
|
100
|
-
\u4E3B agent \u8BFB\u53D6 gate-fix-bug \u6280\u80FD\u7684 assets/worker-briefs/gate-fix-bug.md\uFF0C\u6D3E fix worker\u3002fix worker \u4F7F\u7528 gate-fix-bug \u6267\u884C Process 1-9\uFF1A\u590D\u73B0\u3001\u56DE\u5F52\u8986\u76D6\u3001\u6839\u56E0\u3001\u6700\u5C0F\u4FEE\u590D\u3001\u539F\u590D\u73B0\u4E0E\u76F8\u5173\u6D4B\u8BD5\u3002\u5B8C\u6210\u540E\u8FD4\u56DE\u4FEE\u590D receipt\uFF1B\u4E0D\u8981\u81EA\u884C\u5B8C\u6210 Step 10-12\uFF0C\u4E5F\u4E0D\u8981\u63D0\u4EA4\u3002
|
|
100
|
+
\u4E3B agent \u9996\u6B21\u8FDB\u5165 fix-bug \u65F6\u8BFB\u53D6/\u52A0\u8F7D gate-fix-bug\uFF1B\u5DF2\u52A0\u8F7D\u5219\u590D\u7528\uFF0C\u4E0D\u8981\u91CD\u590D\u8C03\u7528 skill\u3002\u8BFB\u53D6 gate-fix-bug \u6280\u80FD\u7684 assets/worker-briefs/gate-fix-bug.md\uFF0C\u6D3E fix worker\u3002fix worker \u4F7F\u7528 gate-fix-bug \u6267\u884C Process 1-9\uFF1A\u590D\u73B0\u3001\u56DE\u5F52\u8986\u76D6\u3001\u6839\u56E0\u3001\u6700\u5C0F\u4FEE\u590D\u3001\u539F\u590D\u73B0\u4E0E\u76F8\u5173\u6D4B\u8BD5\u3002\u5B8C\u6210\u540E\u8FD4\u56DE\u4FEE\u590D receipt\uFF1B\u4E0D\u8981\u81EA\u884C\u5B8C\u6210 Step 10-12\uFF0C\u4E5F\u4E0D\u8981\u63D0\u4EA4\u3002
|
|
101
101
|
|
|
102
102
|
## Step 2 \u2014 Independent review
|
|
103
|
-
\u4E3B agent \u52A0\u8F7D gate-code-review\uFF0C\u63D0\u70BC\u4E24\u8F74\u8BC4\u5BA1\u8981\u6C42\uFF0C\u518D\u8BFB\u53D6 gate-fix-bug \u6280\u80FD\u7684 assets/worker-briefs/fix-bug-review.md\uFF0C\u6D3E\u4E00\u4E2A\u72EC\u7ACB review worker\uFF1B\u4FEE\u590D\u57FA\u7EBF\u3001\u9009\u5B9A\u5931\u8D25\u3001\u5408\u540C\u5F15\u7528\u548C\u5B8C\u6574 diff \u5199\u8FDB\u7B80\u62A5\u3002review \u53EA\u62A5 findings\u3002
|
|
103
|
+
\u4E3B agent \u9996\u6B21\u8FDB\u5165 review \u65F6\u52A0\u8F7D gate-code-review\uFF1B\u5DF2\u52A0\u8F7D\u5219\u590D\u7528\uFF0C\u4E0D\u8981\u91CD\u590D\u8C03\u7528 skill\u3002\u63D0\u70BC\u4E24\u8F74\u8BC4\u5BA1\u8981\u6C42\uFF0C\u518D\u8BFB\u53D6 gate-fix-bug \u6280\u80FD\u7684 assets/worker-briefs/fix-bug-review.md\uFF0C\u6D3E\u4E00\u4E2A\u72EC\u7ACB review worker\uFF1B\u4FEE\u590D\u57FA\u7EBF\u3001\u9009\u5B9A\u5931\u8D25\u3001\u5408\u540C\u5F15\u7528\u548C\u5B8C\u6574 diff \u5199\u8FDB\u7B80\u62A5\u3002review \u53EA\u62A5 findings\u3002
|
|
104
104
|
|
|
105
105
|
## Step 3 \u2014 Resolve
|
|
106
106
|
\u628A material in-scope findings \u4EA4\u56DE fix worker\uFF08send_message \u6216\u65B0 worker\uFF09\uFF0C\u5B8C\u6210 gate-fix-bug Step 11-12\uFF0C\u91CD\u8DD1\u539F\u590D\u73B0\u548C\u76F8\u5173\u6D4B\u8BD5\uFF1B\u91CD\u590D Step 2-3 \u76F4\u5230\u6CA1\u6709 material findings\u3002
|
|
@@ -133,12 +133,15 @@ var NODE_INFO = {
|
|
|
133
133
|
};
|
|
134
134
|
var NODE_METHODS = Object.fromEntries(Object.entries(NODE_INFO).map(([node, info]) => [node, info.method]));
|
|
135
135
|
var WORKER_NODES = new Set(GATE_RECORD_NODES.filter((node) => node !== "docs" && node !== "note-lifecycle"));
|
|
136
|
-
var DISPATCH_RULE = `## \
|
|
137
|
-
\
|
|
136
|
+
var DISPATCH_RULE = `## \u6280\u80FD\u52A0\u8F7D\u89C4\u5219
|
|
137
|
+
1. \u672C\u4F1A\u8BDD\u5DF2\u7ECF\u901A\u8FC7 skill \u5DE5\u5177\u52A0\u8F7D\u8FC7\u7684\u6280\u80FD\uFF0C\u5185\u5BB9\u4ECD\u5728\u4E0A\u6587\u65F6\u76F4\u63A5\u590D\u7528\uFF0C\u4E0D\u8981\u91CD\u590D\u8C03\u7528 skill\u3002
|
|
138
|
+
2. \u53EA\u6709\u4EE5\u4E0B\u60C5\u51B5\u624D\u91CD\u65B0\u52A0\u8F7D\uFF1A\u672C\u4F1A\u8BDD\u9996\u6B21\u8FDB\u5165\u8BE5\u6280\u80FD\uFF1Bcompaction \u540E\u5185\u5BB9\u5DF2\u4E0D\u5728\u4E0A\u4E0B\u6587\uFF1B\u6280\u80FD\u6587\u4EF6/\u7248\u672C\u53D1\u751F\u53D8\u5316\uFF1B\u7528\u6237\u660E\u786E\u8981\u6C42\u5237\u65B0\u3002
|
|
139
|
+
3. gate_record / gate_status \u8FD4\u56DE\u65B0\u7684 procedure \u53EA\u4EE3\u8868 node\u3001\u8F6E\u6B21\u6216 findings \u53D8\u5316\uFF0C\u4E0D\u4EE3\u8868\u8981\u91CD\u65B0\u52A0\u8F7D\u6280\u80FD\u3002
|
|
140
|
+
4. \u591A\u8F6E review/revise \u590D\u7528\u540C\u4E00\u4EFD\u6280\u80FD\u5185\u5BB9\uFF1B\u628A\u65B0\u7684 findings\u3001\u6587\u4EF6\u8303\u56F4\u548C\u8981\u6C42\u4F20\u7ED9 worker\uFF0C\u4E0D\u8981\u91CD\u65B0\u52A0\u8F7D\u6280\u80FD\u3002`;
|
|
138
141
|
var REVIEWING_CODE_PROCEDURE = `## /gate-implement-review \u7F16\u6392
|
|
139
|
-
\u4E3B agent \u52A0\u8F7D gate-code-review\uFF1B\u6D3E\u53EA\u8BFB review worker \u8986\u76D6 Standards \u4E0E Spec \u4E24\u8F74\uFF1B\u5B8C\u6210\u540E gate_record({node:'code-review-standalone', findings, reviewAxes, workerSessionIds}) \u56DE discuss\u3002`;
|
|
142
|
+
\u4E3B agent \u9996\u6B21\u8FDB\u5165\u65F6\u52A0\u8F7D gate-code-review\uFF1B\u5DF2\u52A0\u8F7D\u5219\u590D\u7528\uFF0C\u4E0D\u8981\u91CD\u590D\u8C03\u7528 skill\u3002\u6D3E\u53EA\u8BFB review worker \u8986\u76D6 Standards \u4E0E Spec \u4E24\u8F74\uFF1B\u5B8C\u6210\u540E gate_record({node:'code-review-standalone', findings, reviewAxes, workerSessionIds}) \u56DE discuss\u3002`;
|
|
140
143
|
var REVIEWING_PROPOSAL_PROCEDURE = `## /gate-propose-review \u7F16\u6392
|
|
141
|
-
\u4E3B agent \u52A0\u8F7D gate-plan-review\uFF1B\u6D3E\u53EA\u8BFB review worker \u8986\u76D6 Standards/Spec/Architecture \u4E09\u8F74\uFF1B\u5B8C\u6210\u540E gate_record({node:'proposal-review', findings, reviewAxes, workerSessionIds}) \u56DE discuss\u3002`;
|
|
144
|
+
\u4E3B agent \u9996\u6B21\u8FDB\u5165\u65F6\u52A0\u8F7D gate-plan-review\uFF1B\u5DF2\u52A0\u8F7D\u5219\u590D\u7528\uFF0C\u4E0D\u8981\u91CD\u590D\u8C03\u7528 skill\u3002\u6D3E\u53EA\u8BFB review worker \u8986\u76D6 Standards/Spec/Architecture \u4E09\u8F74\uFF1B\u5B8C\u6210\u540E gate_record({node:'proposal-review', findings, reviewAxes, workerSessionIds}) \u56DE discuss\u3002`;
|
|
142
145
|
var REVIEWING_VERIFY_PROCEDURE = `## /gate-code-verify \u7F16\u6392
|
|
143
146
|
\u6D3E\u5B50\u4EE3\u7406\u52A0\u8F7D\u4F7F\u7528 gate-user-verify \u6309 Step 6 \u6C47\u62A5\uFF1Bverification.toolResults \u5FC5\u987B\u662F verify worker session log \u4E2D\u771F\u5B9E tool/result \u7684 call_... id\uFF0Cevidence \u662F workspace \u5185\u7684\u666E\u901A\u6587\u4EF6\uFF1B\u5B8C\u6210\u540E gate_record({node:'verify-standalone', verification, workerSessionIds}) \u56DE discuss\u3002`;
|
|
144
147
|
function stepSection(text, from, to) {
|
|
@@ -169,7 +172,7 @@ var NODE_PROCEDURES = {
|
|
|
169
172
|
"verify-standalone": REVIEWING_VERIFY_PROCEDURE
|
|
170
173
|
};
|
|
171
174
|
var GATE_METHODOLOGY = `## Gate \u65B9\u6CD5\u8BBA
|
|
172
|
-
\u672C\u6BB5\u53EA\u5B9A\u4E49\u5404\u9636\u6BB5\u7684\u5DE5\u4F5C\u65B9\u6CD5\u4E0E\u8D28\u91CF\u6807\u51C6\u3002\u5F53\u524D phase/node\u3001procedure \u548C\u8981\u52A0\u8F7D\u7684\u6280\u80FD\u6765\u81EA\u6700\u8FD1\u4E00\u6B21 gate_status\u3001gate_record \u6216\u547D\u4EE4\u7ED3\u679C\uFF1B\u53EA\u6267\u884C\u5F53\u524D phase \u7684 procedure\uFF0C\u5176\u4ED6\u9636\u6BB5\u7684\u65B9\u6CD5\u8BBA\u4EC5\u4F5C\u80CC\u666F\u53C2\u8003\uFF1Bcompaction \u540E\u5FC5\u987B\u91CD\u65B0\u83B7\u53D6\u3002
|
|
175
|
+
\u672C\u6BB5\u53EA\u5B9A\u4E49\u5404\u9636\u6BB5\u7684\u5DE5\u4F5C\u65B9\u6CD5\u4E0E\u8D28\u91CF\u6807\u51C6\u3002\u5F53\u524D phase/node\u3001procedure \u548C\u8981\u52A0\u8F7D\u7684\u6280\u80FD\u6765\u81EA\u6700\u8FD1\u4E00\u6B21 gate_status\u3001gate_record \u6216\u547D\u4EE4\u7ED3\u679C\uFF1B\u53EA\u6267\u884C\u5F53\u524D phase \u7684 procedure\uFF0C\u5176\u4ED6\u9636\u6BB5\u7684\u65B9\u6CD5\u8BBA\u4EC5\u4F5C\u80CC\u666F\u53C2\u8003\uFF1Bcompaction \u540E\u5FC5\u987B\u91CD\u65B0\u83B7\u53D6 procedure\uFF0C\u5E76\u786E\u8BA4\u6280\u80FD\u5185\u5BB9\u662F\u5426\u4ECD\u5728\u4E0A\u4E0B\u6587\uFF1A\u9996\u6B21\u9700\u8981\u65F6\u52A0\u8F7D\uFF0C\u5DF2\u5728\u4E0A\u6587\u5219\u590D\u7528\uFF0C\u4E0D\u8981\u56E0 procedure \u66F4\u65B0\u91CD\u590D\u52A0\u8F7D\u3002
|
|
173
176
|
|
|
174
177
|
## discuss
|
|
175
178
|
discuss \u662F\u9ED8\u8BA4\u9636\u6BB5\u3002\u5148\u8BFB\u76F8\u5173\u4EE3\u7801\u3001\u6587\u6863\u3001\u5386\u53F2 Note \u4E0E\u9879\u76EE\u7EA6\u675F\uFF1B\u660E\u786E\u5B9E\u9645\u95EE\u9898\u3001\u7EA6\u675F\u3001\u5DF2\u6709\u51B3\u5B9A\u4E0E\u51B2\u7A81\uFF1B\u7ED9\u51FA\u6709\u5B9E\u8D28\u5DEE\u5F02\u7684\u53EF\u884C\u65B9\u6848\u3001\u63A8\u8350\u4E0E\u5173\u952E\u6743\u8861\uFF1B\u53EA\u5BF9\u672A\u51B3\u7684\u4EA7\u54C1\u3001\u8303\u56F4\u3001\u517C\u5BB9\u6027\u3001\u6210\u672C\u3001\u98CE\u9669\u7B49\u4EF7\u503C\u5224\u65AD\u63D0\u95EE\uFF1B\u6C47\u62A5\u5DF2\u89E3\u51B3\u3001\u672A\u51B3\u4E8B\u9879\u548C\u5EFA\u8BAE\u4E0B\u4E00\u9636\u6BB5\u3002\u4E0D\u8FDB\u5165\u5B9E\u65BD\uFF0C\u53EA\u6709\u7528\u6237\u660E\u786E\u6388\u6743\u624D\u79BB\u5F00\u3002
|
package/locale/en.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
{
|
|
2
|
-
"meta": {
|
|
3
|
-
"title": "Gate",
|
|
4
|
-
"description": "Phase gate and write policy for agent workflows."
|
|
5
|
-
}
|
|
6
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"meta": {
|
|
3
|
+
"title": "Gate",
|
|
4
|
+
"description": "Phase gate and write policy for agent workflows."
|
|
5
|
+
}
|
|
6
|
+
}
|
package/locale/zh.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
{
|
|
2
|
-
"meta": {
|
|
3
|
-
"title": "Gate 门禁",
|
|
4
|
-
"description": "按阶段控制 agent 的写入与评审流程。"
|
|
5
|
-
}
|
|
6
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"meta": {
|
|
3
|
+
"title": "Gate 门禁",
|
|
4
|
+
"description": "按阶段控制 agent 的写入与评审流程。"
|
|
5
|
+
}
|
|
6
|
+
}
|
package/package.json
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "dsh-gate-agent",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"type": "module",
|
|
5
|
-
"description": "Full write gate and phase orchestrator with plugin-local skills.",
|
|
6
|
-
"exports": {
|
|
7
|
-
".": "./lib/index.js",
|
|
8
|
-
"./locale/*.json": "./locale/*.json",
|
|
9
|
-
"./icon": "./icon.svg",
|
|
10
|
-
"./package.json": "./package.json"
|
|
11
|
-
},
|
|
12
|
-
"files": [
|
|
13
|
-
"lib",
|
|
14
|
-
"skills",
|
|
15
|
-
"launchers",
|
|
16
|
-
"cordis.patch.yml",
|
|
17
|
-
"README.md",
|
|
18
|
-
"locale/*.json",
|
|
19
|
-
"icon.svg"
|
|
20
|
-
],
|
|
21
|
-
"scripts": {
|
|
22
|
-
"build": "node scripts/bundle.mjs",
|
|
23
|
-
"typecheck": "tsc -p tsconfig.json",
|
|
24
|
-
"test": "node scripts/bundle.mjs && node scripts/check-split.mjs && node test/unit.mjs && node test/composition.mjs && node test/registry.mjs"
|
|
25
|
-
},
|
|
26
|
-
"dsh": {
|
|
27
|
-
"bundle": {
|
|
28
|
-
"patch": "./cordis.patch.yml"
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
"publishConfig": {
|
|
32
|
-
"access": "public"
|
|
33
|
-
}
|
|
34
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "dsh-gate-agent",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Full write gate and phase orchestrator with plugin-local skills.",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": "./lib/index.js",
|
|
8
|
+
"./locale/*.json": "./locale/*.json",
|
|
9
|
+
"./icon": "./icon.svg",
|
|
10
|
+
"./package.json": "./package.json"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"lib",
|
|
14
|
+
"skills",
|
|
15
|
+
"launchers",
|
|
16
|
+
"cordis.patch.yml",
|
|
17
|
+
"README.md",
|
|
18
|
+
"locale/*.json",
|
|
19
|
+
"icon.svg"
|
|
20
|
+
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "node scripts/bundle.mjs",
|
|
23
|
+
"typecheck": "tsc -p tsconfig.json",
|
|
24
|
+
"test": "node scripts/bundle.mjs && node scripts/check-split.mjs && node test/unit.mjs && node test/composition.mjs && node test/registry.mjs"
|
|
25
|
+
},
|
|
26
|
+
"dsh": {
|
|
27
|
+
"bundle": {
|
|
28
|
+
"patch": "./cordis.patch.yml"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -6,8 +6,8 @@ user-invocable: false
|
|
|
6
6
|
|
|
7
7
|
## Gate 使用
|
|
8
8
|
|
|
9
|
-
主 agent 读取本方法后,按改动规模派一个或多个 review worker;worker 不加载本技能或其他 gate 方法文件。`gate_record({node:'code-review'})` 需要 `reviewAxes.standards.findings` 与 `reviewAxes.spec.findings`;worker 数量由主 agent 决定,但两轴都必须产出。
|
|
10
|
-
|
|
9
|
+
主 agent 读取本方法后,按改动规模派一个或多个 review worker;worker 不加载本技能或其他 gate 方法文件。`gate_record({node:'code-review'})` 需要 `reviewAxes.standards.findings` 与 `reviewAxes.spec.findings`;worker 数量由主 agent 决定,但两轴都必须产出。
|
|
10
|
+
|
|
11
11
|
任务模板:本技能 `assets/worker-briefs/gate-implement-review.md`。
|
|
12
12
|
|
|
13
13
|
Two-axis review of the requested change scope, including uncommitted work when applicable:
|