dsh-gate-agent 0.1.1 → 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/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/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:
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
# /gate-implement-review — review worker
|
|
2
|
-
|
|
3
|
-
```markdown
|
|
4
|
-
你是 Gate 的只读 Implementation Review worker。只评审改动,不修复,不写代码。
|
|
5
|
-
|
|
6
|
-
## 评审对象
|
|
7
|
-
<范围、固定点、完整 diff>
|
|
8
|
-
|
|
9
|
-
## 合同
|
|
10
|
-
<工作项验收条件、适用设计决定>
|
|
11
|
-
|
|
12
|
-
## 两轴
|
|
13
|
-
Standards / Spec。每轴只报 findings,注明文件/证据与严重度。
|
|
14
|
-
|
|
15
|
-
## 输出
|
|
16
|
-
返回 standards、spec 两组 findings;不要合并两轴,不要修改代码。
|
|
17
|
-
```
|
|
1
|
+
# /gate-implement-review — review worker
|
|
2
|
+
|
|
3
|
+
```markdown
|
|
4
|
+
你是 Gate 的只读 Implementation Review worker。只评审改动,不修复,不写代码。
|
|
5
|
+
|
|
6
|
+
## 评审对象
|
|
7
|
+
<范围、固定点、完整 diff>
|
|
8
|
+
|
|
9
|
+
## 合同
|
|
10
|
+
<工作项验收条件、适用设计决定>
|
|
11
|
+
|
|
12
|
+
## 两轴
|
|
13
|
+
Standards / Spec。每轴只报 findings,注明文件/证据与严重度。
|
|
14
|
+
|
|
15
|
+
## 输出
|
|
16
|
+
返回 standards、spec 两组 findings;不要合并两轴,不要修改代码。
|
|
17
|
+
```
|
|
18
18
|
|
|
19
19
|
|
|
@@ -51,9 +51,9 @@ _Avoid_: Client, buyer, account
|
|
|
51
51
|
- **Ordering ↔ Billing**: Shared types for `CustomerId` and `Money`
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
The skill infers which structure applies:
|
|
55
|
-
|
|
56
|
-
Resolve the root from project instructions before these checks; the current working directory may be a subproject. Use the project documentation hierarchy for ownership; the context map does not create separate record categories. Paths shown in the map are Markdown links relative to the map file.
|
|
54
|
+
The skill infers which structure applies:
|
|
55
|
+
|
|
56
|
+
Resolve the root from project instructions before these checks; the current working directory may be a subproject. Use the project documentation hierarchy for ownership; the context map does not create separate record categories. Paths shown in the map are Markdown links relative to the map file.
|
|
57
57
|
|
|
58
58
|
- If `CONTEXT-MAP.md` exists, read it to find contexts
|
|
59
59
|
- If only a root `CONTEXT.md` exists, single context
|
|
@@ -51,9 +51,9 @@ _Avoid_: Client, buyer, account
|
|
|
51
51
|
- **Ordering ↔ Billing**: Shared types for `CustomerId` and `Money`
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
The skill infers which structure applies:
|
|
55
|
-
|
|
56
|
-
Resolve the root from project instructions before these checks; the current working directory may be a subproject. Use the project documentation hierarchy for ownership; the context map does not create separate record categories. Paths shown in the map are Markdown links relative to the map file.
|
|
54
|
+
The skill infers which structure applies:
|
|
55
|
+
|
|
56
|
+
Resolve the root from project instructions before these checks; the current working directory may be a subproject. Use the project documentation hierarchy for ownership; the context map does not create separate record categories. Paths shown in the map are Markdown links relative to the map file.
|
|
57
57
|
|
|
58
58
|
- If `GLOSSARY-MAP.md` exists, read it to find contexts
|
|
59
59
|
- If only a root `GLOSSARY.md` exists, single context
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
# gate-fix-bug independent review worker
|
|
2
|
-
|
|
3
|
-
```markdown
|
|
4
|
-
你是 Gate 的独立 review worker。只评审 fix worker 的修复 diff,返回 findings,不修复。
|
|
5
|
-
|
|
6
|
-
## 修复基线
|
|
7
|
-
<fix 前 commit / 固定点、当前 diff 范围>
|
|
8
|
-
|
|
9
|
-
## 选定失败与合同
|
|
10
|
-
<原失败项、期望行为、验收/合同引用>
|
|
11
|
-
|
|
12
|
-
## 修复报告
|
|
13
|
-
<fix worker 的根因、改动、回归测试和验证结果>
|
|
14
|
-
|
|
15
|
-
## 评审范围
|
|
16
|
-
Standards / Spec 两轴;重点确认修复没有改变合同、没有扩大范围、没有削弱测试。
|
|
17
|
-
|
|
18
|
-
## 输出
|
|
19
|
-
返回 standards、spec 两组 findings,注明证据与严重度;不修改代码,不提交。
|
|
20
|
-
```
|
|
1
|
+
# gate-fix-bug independent review worker
|
|
2
|
+
|
|
3
|
+
```markdown
|
|
4
|
+
你是 Gate 的独立 review worker。只评审 fix worker 的修复 diff,返回 findings,不修复。
|
|
5
|
+
|
|
6
|
+
## 修复基线
|
|
7
|
+
<fix 前 commit / 固定点、当前 diff 范围>
|
|
8
|
+
|
|
9
|
+
## 选定失败与合同
|
|
10
|
+
<原失败项、期望行为、验收/合同引用>
|
|
11
|
+
|
|
12
|
+
## 修复报告
|
|
13
|
+
<fix worker 的根因、改动、回归测试和验证结果>
|
|
14
|
+
|
|
15
|
+
## 评审范围
|
|
16
|
+
Standards / Spec 两轴;重点确认修复没有改变合同、没有扩大范围、没有削弱测试。
|
|
17
|
+
|
|
18
|
+
## 输出
|
|
19
|
+
返回 standards、spec 两组 findings,注明证据与严重度;不修改代码,不提交。
|
|
20
|
+
```
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
|