@rse/ase 0.9.44 → 0.9.45
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/dst/ase-setup.js +50 -0
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/agents/ase-code-lint.md +11 -0
- package/plugin/agents/ase-docs-proofread.md +8 -0
- package/plugin/agents/ase-meta-chat.md +13 -7
- package/plugin/agents/ase-meta-search.md +0 -1
- package/plugin/meta/ase-common-task.md +145 -0
- package/plugin/meta/ase-constitution.md +4 -1
- package/plugin/meta/ase-dialog.md +5 -5
- package/plugin/meta/ase-format-arch.md +4 -4
- package/plugin/meta/ase-format-spec.md +23 -23
- package/plugin/meta/ase-format-task.md +1 -1
- package/plugin/meta/ase-persona.md +3 -3
- package/plugin/meta/ase-skill.md +2 -2
- package/plugin/meta/ase-tenets.md +4 -4
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-arch-analyze/SKILL.md +2 -3
- package/plugin/skills/ase-code-craft/SKILL.md +7 -7
- package/plugin/skills/ase-code-lint/SKILL.md +19 -3
- package/plugin/skills/ase-code-refactor/SKILL.md +7 -7
- package/plugin/skills/ase-code-resolve/SKILL.md +6 -6
- package/plugin/skills/ase-docs-distill/SKILL.md +6 -6
- package/plugin/skills/ase-docs-proofread/SKILL.md +18 -3
- package/plugin/skills/ase-meta-changelog/SKILL.md +5 -2
- package/plugin/skills/ase-meta-commit/SKILL.md +4 -4
- package/plugin/skills/ase-meta-compat/SKILL.md +3 -3
- package/plugin/skills/ase-meta-diaboli/SKILL.md +2 -2
- package/plugin/skills/ase-meta-evaluate/SKILL.md +6 -9
- package/plugin/skills/ase-meta-quorum/SKILL.md +33 -4
- package/plugin/skills/ase-meta-search/SKILL.md +1 -1
- package/plugin/skills/ase-meta-steelman/SKILL.md +3 -3
- package/plugin/skills/ase-meta-why/SKILL.md +1 -1
- package/plugin/skills/ase-sync-export/SKILL.md +7 -7
- package/plugin/skills/ase-sync-import/SKILL.md +20 -16
- package/plugin/skills/ase-sync-reconcile/SKILL.md +9 -9
- package/plugin/skills/ase-task-condense/SKILL.md +34 -79
- package/plugin/skills/ase-task-edit/SKILL.md +41 -49
- package/plugin/skills/ase-task-grill/SKILL.md +10 -12
- package/plugin/skills/ase-task-id/SKILL.md +7 -3
- package/plugin/skills/ase-task-implement/SKILL.md +18 -111
- package/plugin/skills/ase-task-list/SKILL.md +3 -0
- package/plugin/skills/ase-task-preflight/SKILL.md +22 -115
- package/plugin/skills/ase-task-reboot/SKILL.md +27 -63
- package/plugin/skills/ase-task-view/SKILL.md +7 -7
|
@@ -17,7 +17,7 @@ effort: xhigh
|
|
|
17
17
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
18
18
|
|
|
19
19
|
<skill name="ase-sync-reconcile">
|
|
20
|
-
|
|
20
|
+
Reconcile Artifact Set to Artifact Set
|
|
21
21
|
</skill>
|
|
22
22
|
|
|
23
23
|
<expand name="getopt"
|
|
@@ -27,10 +27,10 @@ effort: xhigh
|
|
|
27
27
|
</expand>
|
|
28
28
|
|
|
29
29
|
<objective>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
*Reconcile* the *target* artifact kinds to *reflect* the *current
|
|
31
|
+
state* of the *source* artifact kinds, by reading the source
|
|
32
|
+
artifacts and aligning the target artifacts accordingly:
|
|
33
|
+
<hint><getopt-arguments/></hint>.
|
|
34
34
|
</objective>
|
|
35
35
|
|
|
36
36
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-meta.md
|
|
@@ -48,8 +48,8 @@ Procedure
|
|
|
48
48
|
|
|
49
49
|
1. The recognized artifact kinds are the seven tokens `TASK`,
|
|
50
50
|
`SPEC`, `ARCH`, `CODE`, `DOCS`, `INFR`, and `OTHR`. Parse
|
|
51
|
-
<getopt-target/> as the comma-separated <target/> kind list and
|
|
52
|
-
<getopt-source/> as the comma-separated <source/> kind list.
|
|
51
|
+
<getopt-option-target/> as the comma-separated <target/> kind list and
|
|
52
|
+
<getopt-option-source/> as the comma-separated <source/> kind list.
|
|
53
53
|
Upper-case and trim every parsed kind token. Do not output
|
|
54
54
|
anything.
|
|
55
55
|
|
|
@@ -81,7 +81,7 @@ Procedure
|
|
|
81
81
|
⧉ **ASE**: ☻ skill: **ase-sync-reconcile**, ▶ ERROR: unknown or unsupported artifact kind: **<kind/>**
|
|
82
82
|
</template>
|
|
83
83
|
|
|
84
|
-
5. <if condition="<getopt-bidirectional/> is not 'true'">
|
|
84
|
+
5. <if condition="<getopt-option-bidirectional/> is not 'true'">
|
|
85
85
|
|
|
86
86
|
Remove from <source/> any kind that is also present in <target/>
|
|
87
87
|
(a kind is never its own source).
|
|
@@ -157,7 +157,7 @@ Procedure
|
|
|
157
157
|
the `ase` MCP server to find out the current time and store it in
|
|
158
158
|
<timestamp-modified/>.
|
|
159
159
|
|
|
160
|
-
4. <if condition="<getopt-bidirectional/> is equal 'true'">
|
|
160
|
+
4. <if condition="<getopt-option-bidirectional/> is equal 'true'">
|
|
161
161
|
|
|
162
162
|
*Bidirectionally update* the <target/> and <source/> artifacts
|
|
163
163
|
so that they faithfully *reflect the current state* of each
|
|
@@ -31,10 +31,21 @@ semantics exactly.
|
|
|
31
31
|
</objective>
|
|
32
32
|
|
|
33
33
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
|
|
34
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-task.md
|
|
34
35
|
|
|
35
36
|
Procedure
|
|
36
37
|
---------
|
|
37
38
|
|
|
39
|
+
<define name="handoff-args">
|
|
40
|
+
Set <args></args> (set args to empty).
|
|
41
|
+
<if condition="the condensed plan was saved via `ase_task_save` in step 3">
|
|
42
|
+
Set <args>--int-reuse-task</args>.
|
|
43
|
+
</if>
|
|
44
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
45
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
46
|
+
</if>
|
|
47
|
+
</define>
|
|
48
|
+
|
|
38
49
|
1. **Determine Task:**
|
|
39
50
|
|
|
40
51
|
1. Set <id><getopt-arguments/></id> initially.
|
|
@@ -76,20 +87,21 @@ Procedure
|
|
|
76
87
|
the `text` output field of the `ase_task_load` tool call.
|
|
77
88
|
|
|
78
89
|
- If <text/> starts with `ERROR:` or `WARNING:`:
|
|
79
|
-
|
|
90
|
+
Silently ignore the MCP error.
|
|
91
|
+
Set <task-content></task-content> (set task content to empty).
|
|
80
92
|
Set <words/> to "0".
|
|
81
93
|
|
|
82
94
|
- If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
|
|
83
|
-
Set <content><text/></content> (set content to text).
|
|
84
|
-
Calculate the number of words <words/> of <content/>.
|
|
95
|
+
Set <task-content><text/></task-content> (set task content to text).
|
|
96
|
+
Calculate the number of words <words/> of <task-content/>.
|
|
85
97
|
|
|
86
98
|
Set <words-before><words/></words-before> (remember the loaded
|
|
87
99
|
word count for the strictly-smaller check in step 3).
|
|
88
100
|
|
|
89
|
-
<if condition="<content/> contains '⎈ Created: <text/>'">
|
|
101
|
+
<if condition="<task-content/> contains '⎈ Created: <text/>'">
|
|
90
102
|
Set <timestamp-created><text/></timestamp-created> (extract the
|
|
91
103
|
original creation timestamp so it can be re-inserted unchanged
|
|
92
|
-
into the condensed <content/> in step 3).
|
|
104
|
+
into the condensed <task-content/> in step 3).
|
|
93
105
|
</if>
|
|
94
106
|
|
|
95
107
|
Only output the following <template/>:
|
|
@@ -98,7 +110,7 @@ Procedure
|
|
|
98
110
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
|
|
99
111
|
</template>
|
|
100
112
|
|
|
101
|
-
2. <if condition="<content/> is empty">
|
|
113
|
+
2. <if condition="<task-content/> is empty">
|
|
102
114
|
Complain and tell the user to use the `ase-code-resolve`,
|
|
103
115
|
`ase-code-refactor`, `ase-code-craft`, or `ase-task-edit` skills
|
|
104
116
|
first to create a task plan. Then immediately stop processing
|
|
@@ -107,8 +119,8 @@ Procedure
|
|
|
107
119
|
|
|
108
120
|
3. **Condense Task Plan:**
|
|
109
121
|
|
|
110
|
-
1. *Apply the condense ruleset* to <content/>, producing a shorter
|
|
111
|
-
<content/>. The goal is to make the plan require as *little
|
|
122
|
+
1. *Apply the condense ruleset* to <task-content/>, producing a shorter
|
|
123
|
+
<task-content/>. The goal is to make the plan require as *little
|
|
112
124
|
reading* as possible while all semantics remain *fully preserved
|
|
113
125
|
and unchanged*. Honor the following ruleset *strictly*:
|
|
114
126
|
|
|
@@ -148,25 +160,10 @@ Procedure
|
|
|
148
160
|
longer wording*.
|
|
149
161
|
|
|
150
162
|
2. *Persist only if smaller*: calculate the number of words <words/>
|
|
151
|
-
of the condensed <content/>.
|
|
163
|
+
of the condensed <task-content/>.
|
|
152
164
|
|
|
153
165
|
- <if condition="<words/> is strictly smaller than <words-before/>">
|
|
154
|
-
|
|
155
|
-
ISO-style format, which has to be determined by calling
|
|
156
|
-
the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool
|
|
157
|
-
of the `ase` MCP server and use the `text` field of
|
|
158
|
-
its response. Keep the original <timestamp-created/>,
|
|
159
|
-
re-insert the current <ase-task-id/> and the refreshed
|
|
160
|
-
<timestamp-modified/> into <content/>.
|
|
161
|
-
|
|
162
|
-
Call the `ase_task_save(id: "<ase-task-id/>", text:
|
|
163
|
-
"<content/>")` tool of the `ase` MCP server to save the
|
|
164
|
-
condensed task plan content. Do not output anything related
|
|
165
|
-
to this MCP call except the following <template/>:
|
|
166
|
-
|
|
167
|
-
<template>
|
|
168
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan condensed**
|
|
169
|
-
</template>
|
|
166
|
+
<expand name="task-save-content" arg1="plan condensed"></expand>
|
|
170
167
|
</if>
|
|
171
168
|
|
|
172
169
|
- <if condition="<words/> is NOT strictly smaller than <words-before/>">
|
|
@@ -182,39 +179,15 @@ Procedure
|
|
|
182
179
|
|
|
183
180
|
1. *Determine next step*:
|
|
184
181
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
Set <result><head/></result>.
|
|
195
|
-
|
|
196
|
-
- else:
|
|
197
|
-
Only output the following <template/> and then immediately
|
|
198
|
-
*STOP* processing the entire current skill:
|
|
199
|
-
|
|
200
|
-
<template>
|
|
201
|
-
⧉ **ASE**: ☻ skill: **ase-task-condense**, ▶ ERROR: invalid `--next` token: **<head/>**
|
|
202
|
-
</template>
|
|
203
|
-
|
|
204
|
-
- If <getopt-option-next/> is equal to `none`:
|
|
205
|
-
|
|
206
|
-
In the following, you *MUST* *NOT* use your built-in
|
|
207
|
-
<user-dialog-tool/> tool! Instead, you *MUST* just show a
|
|
208
|
-
custom dialog according to the expanded `custom-dialog`
|
|
209
|
-
definition. You *MUST* closely follow this definition:
|
|
210
|
-
|
|
211
|
-
<expand name="custom-dialog" arg1="--no-other">
|
|
212
|
-
Next Step: How would you like to proceed with the plan?
|
|
213
|
-
DONE: Stop processing.
|
|
214
|
-
EDIT: Hand off plan to editing.
|
|
215
|
-
PREFLIGHT: Hand off plan to pre-flighting.
|
|
216
|
-
IMPLEMENT: Hand off plan to implementation.
|
|
217
|
-
</expand>
|
|
182
|
+
<expand name="task-next-select"
|
|
183
|
+
arg1="ase-task-condense"
|
|
184
|
+
arg2="DONE|EDIT|IMPLEMENT|PREFLIGHT">
|
|
185
|
+
Next Step: How would you like to proceed with the plan?
|
|
186
|
+
DONE: Stop processing.
|
|
187
|
+
EDIT: Hand off plan to editing.
|
|
188
|
+
PREFLIGHT: Hand off plan to pre-flighting.
|
|
189
|
+
IMPLEMENT: Hand off plan to implementation.
|
|
190
|
+
</expand>
|
|
218
191
|
|
|
219
192
|
2. Check the tool <result/> and dispatch accordingly:
|
|
220
193
|
|
|
@@ -226,13 +199,7 @@ Procedure
|
|
|
226
199
|
</template>
|
|
227
200
|
|
|
228
201
|
- If <result/> is `EDIT`:
|
|
229
|
-
|
|
230
|
-
<if condition="the condensed plan was saved via `ase_task_save` in step 3">
|
|
231
|
-
Set <args>--int-reuse-task</args>.
|
|
232
|
-
</if>
|
|
233
|
-
<if condition="<getopt-option-next/> is not equal `none`">
|
|
234
|
-
Set <args><args/> --next <getopt-option-next/></args>
|
|
235
|
-
</if>
|
|
202
|
+
<expand name="handoff-args"/>
|
|
236
203
|
Only output the following <template/> and then call the
|
|
237
204
|
tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`
|
|
238
205
|
to invoke the `ase:ase-task-edit` skill in order to *edit*
|
|
@@ -244,13 +211,7 @@ Procedure
|
|
|
244
211
|
</template>
|
|
245
212
|
|
|
246
213
|
- If <result/> is `IMPLEMENT`:
|
|
247
|
-
|
|
248
|
-
<if condition="the condensed plan was saved via `ase_task_save` in step 3">
|
|
249
|
-
Set <args>--int-reuse-task</args>.
|
|
250
|
-
</if>
|
|
251
|
-
<if condition="<getopt-option-next/> is not equal `none`">
|
|
252
|
-
Set <args><args/> --next <getopt-option-next/></args>
|
|
253
|
-
</if>
|
|
214
|
+
<expand name="handoff-args"/>
|
|
254
215
|
Only output the following <template/> and then call the
|
|
255
216
|
`Skill(skill: "ase:ase-task-implement", args: "<args/>")` tool
|
|
256
217
|
to *apply* the plan.
|
|
@@ -260,13 +221,7 @@ Procedure
|
|
|
260
221
|
</template>
|
|
261
222
|
|
|
262
223
|
- If <result/> is `PREFLIGHT`:
|
|
263
|
-
|
|
264
|
-
<if condition="the condensed plan was saved via `ase_task_save` in step 3">
|
|
265
|
-
Set <args>--int-reuse-task</args>.
|
|
266
|
-
</if>
|
|
267
|
-
<if condition="<getopt-option-next/> is not equal `none`">
|
|
268
|
-
Set <args><args/> --next <getopt-option-next/></args>
|
|
269
|
-
</if>
|
|
224
|
+
<expand name="handoff-args"/>
|
|
270
225
|
Only output the following <template/> and then call the
|
|
271
226
|
`Skill(skill: "ase:ase-task-preflight", args: "<args/>")` tool
|
|
272
227
|
to *apply* the plan.
|
|
@@ -41,20 +41,20 @@ Procedure
|
|
|
41
41
|
|
|
42
42
|
<define name="apply-refinement">
|
|
43
43
|
Treat the <instruction/> as a *refinement instruction* for
|
|
44
|
-
the plan, and update <content/> in-place by *applying* the
|
|
44
|
+
the plan, and update <task-content/> in-place by *applying* the
|
|
45
45
|
requested <instruction/> to the *plan*.
|
|
46
46
|
|
|
47
47
|
When refining the plan this way, preserve the overall structure of the
|
|
48
48
|
plan and only modify what the user actually requested. Do *not* rewrite
|
|
49
49
|
unrelated sections of the plan.
|
|
50
50
|
|
|
51
|
-
Calculate the number of words <words/> of <content/>.
|
|
52
|
-
Set <content-dirty>true</content-dirty>.
|
|
51
|
+
Calculate the number of words <words/> of <task-content/>.
|
|
52
|
+
Set <task-content-dirty>true</task-content-dirty>.
|
|
53
53
|
</define>
|
|
54
54
|
|
|
55
55
|
<define name="generate-plan">
|
|
56
56
|
Create a new plan from scratch and store the result as
|
|
57
|
-
<content/> by closely following the defined plan format
|
|
57
|
+
<task-content/> by closely following the defined plan format
|
|
58
58
|
<format/> and injecting into it all the information from
|
|
59
59
|
the <instruction/> and all decisions you derived from the
|
|
60
60
|
<instruction/>.
|
|
@@ -69,7 +69,7 @@ and conventions.
|
|
|
69
69
|
<if condition="<getopt-option-dry/> is equal `true`">
|
|
70
70
|
You *MUST* completely omit the `## VERIFICATION` section
|
|
71
71
|
(including its heading and all of its bullet points) from
|
|
72
|
-
<content/>.
|
|
72
|
+
<task-content/>.
|
|
73
73
|
</if>
|
|
74
74
|
|
|
75
75
|
Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
@@ -77,8 +77,18 @@ Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
|
77
77
|
for fresh <timestamp-created/> and <timestamp-modified/>
|
|
78
78
|
information. Then insert the current <ase-task-id/>,
|
|
79
79
|
<timestamp-created/>, and <timestamp-modified/> information
|
|
80
|
-
and calculate the number of words <words/> of <content/>.
|
|
81
|
-
Set <content-dirty>true</content-dirty>.
|
|
80
|
+
and calculate the number of words <words/> of <task-content/>.
|
|
81
|
+
Set <task-content-dirty>true</task-content-dirty>.
|
|
82
|
+
</define>
|
|
83
|
+
|
|
84
|
+
<define name="handoff-args">
|
|
85
|
+
Set <args></args> (set args to empty).
|
|
86
|
+
<if condition="the plan was saved via `ase_task_save` in step 3.2">
|
|
87
|
+
Set <args>--int-reuse-task</args>.
|
|
88
|
+
</if>
|
|
89
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
90
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
91
|
+
</if>
|
|
82
92
|
</define>
|
|
83
93
|
|
|
84
94
|
1. **Determine Task and Instruction:**
|
|
@@ -183,24 +193,24 @@ Set <content-dirty>true</content-dirty>.
|
|
|
183
193
|
call. Set <status>plan loaded</status>.
|
|
184
194
|
</else>
|
|
185
195
|
|
|
186
|
-
Set <content-dirty>false</content-dirty>.
|
|
196
|
+
Set <task-content-dirty>false</task-content-dirty>.
|
|
187
197
|
|
|
188
198
|
- If <text/> starts with `ERROR:` or `WARNING:`:
|
|
189
199
|
Silently ignore the MCP error.
|
|
190
|
-
Set <content/> to empty.
|
|
200
|
+
Set <task-content/> to empty.
|
|
191
201
|
Set <words/> to "0".
|
|
192
202
|
Do not output anything.
|
|
193
203
|
|
|
194
204
|
- If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
|
|
195
|
-
Set <content><text/></content> (set content to text).
|
|
196
|
-
Calculate the number of words <words/> of <content/>.
|
|
205
|
+
Set <task-content><text/></task-content> (set task content to text).
|
|
206
|
+
Calculate the number of words <words/> of <task-content/>.
|
|
197
207
|
Only output the following <template/>:
|
|
198
208
|
|
|
199
209
|
<template>
|
|
200
210
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
|
|
201
211
|
</template>
|
|
202
212
|
|
|
203
|
-
2. <if condition="<content/> is empty AND <instruction/> is empty">
|
|
213
|
+
2. <if condition="<task-content/> is empty AND <instruction/> is empty">
|
|
204
214
|
Ask the user interactively, without a special tool, for the
|
|
205
215
|
initial plan content with a single question:
|
|
206
216
|
|
|
@@ -214,9 +224,9 @@ Set <content-dirty>true</content-dirty>.
|
|
|
214
224
|
</template>
|
|
215
225
|
</if>
|
|
216
226
|
|
|
217
|
-
3. <if condition="<content/> is not empty AND
|
|
227
|
+
3. <if condition="<task-content/> is not empty AND
|
|
218
228
|
<instruction/> is not empty AND
|
|
219
|
-
<instruction/> is not equal <content/>">
|
|
229
|
+
<instruction/> is not equal <task-content/>">
|
|
220
230
|
*Determine previous-plan handling*:
|
|
221
231
|
|
|
222
232
|
- If <getopt-option-plan/> matches the regex `^(OVERWRITE|REFINE|PRESERVE)$`:
|
|
@@ -285,14 +295,14 @@ Set <content-dirty>true</content-dirty>.
|
|
|
285
295
|
</template>
|
|
286
296
|
</if>
|
|
287
297
|
|
|
288
|
-
4. <if condition="no line of <content/> matches the case-insensitive regex `^\s*#+\s*TASK\b` AND <instruction/> is empty">
|
|
289
|
-
Set <instruction><content/></instruction> (set instruction to content).
|
|
290
|
-
Set <content></content> (set content to empty).
|
|
291
|
-
Set <content-dirty>true</content-dirty>.
|
|
298
|
+
4. <if condition="no line of <task-content/> matches the case-insensitive regex `^\s*#+\s*TASK\b` AND <instruction/> is empty">
|
|
299
|
+
Set <instruction><task-content/></instruction> (set instruction to task content).
|
|
300
|
+
Set <task-content></task-content> (set task content to empty).
|
|
301
|
+
Set <task-content-dirty>true</task-content-dirty>.
|
|
292
302
|
Do not output anything.
|
|
293
303
|
</if>
|
|
294
304
|
|
|
295
|
-
5. <if condition="<content/> is empty AND <instruction/> is not empty">
|
|
305
|
+
5. <if condition="<task-content/> is empty AND <instruction/> is not empty">
|
|
296
306
|
<expand name="generate-plan"/>
|
|
297
307
|
|
|
298
308
|
Only output the following <template/> and continue processing:
|
|
@@ -310,22 +320,22 @@ Set <content-dirty>true</content-dirty>.
|
|
|
310
320
|
`PREFLIGHT`, or declines/cancels in the dialog of step 3.4:
|
|
311
321
|
|
|
312
322
|
1. *Update timestamp*:
|
|
313
|
-
<if condition="<content/> contains '⚙ Modified:' AND <content-dirty/> is 'true'">
|
|
323
|
+
<if condition="<task-content/> contains '⚙ Modified:' AND <task-content-dirty/> is 'true'">
|
|
314
324
|
Update <timestamp-modified/> with the current time in
|
|
315
325
|
ISO-style format, which has to be determined by calling the
|
|
316
326
|
`ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
|
|
317
327
|
MCP server and use the `text` field of its response. Update
|
|
318
|
-
the `⚙ Modified: ...` line of <content/> with the new
|
|
328
|
+
the `⚙ Modified: ...` line of <task-content/> with the new
|
|
319
329
|
`⚙ Modified: <timestamp-modified/>`.
|
|
320
330
|
Do not output anything.
|
|
321
331
|
</if>
|
|
322
332
|
|
|
323
333
|
2. *Persist plan*:
|
|
324
|
-
<if condition="<content-dirty/> is 'true'">
|
|
325
|
-
Call the `ase_task_save(id: "<ase-task-id/>", text: "<content/>")` tool
|
|
334
|
+
<if condition="<task-content-dirty/> is 'true'">
|
|
335
|
+
Call the `ase_task_save(id: "<ase-task-id/>", text: "<task-content/>")` tool
|
|
326
336
|
of the `ase` MCP server to persist the current plan, and then
|
|
327
|
-
set <content-dirty>false</content-dirty> again. Calculate the
|
|
328
|
-
number of words <words/> of <content/>. Do not output anything
|
|
337
|
+
set <task-content-dirty>false</task-content-dirty> again. Calculate the
|
|
338
|
+
number of words <words/> of <task-content/>. Do not output anything
|
|
329
339
|
related to this MCP tool call except the following <template/>:
|
|
330
340
|
|
|
331
341
|
<template>
|
|
@@ -333,9 +343,9 @@ Set <content-dirty>true</content-dirty>.
|
|
|
333
343
|
</template>
|
|
334
344
|
</if>
|
|
335
345
|
|
|
336
|
-
3. *Render plan*: Treat <content/> as *verbatim* Markdown.
|
|
346
|
+
3. *Render plan*: Treat <task-content/> as *verbatim* Markdown.
|
|
337
347
|
Only output the following <template/>, so the user
|
|
338
|
-
can read the plan and react to it. If <content/> is longer
|
|
348
|
+
can read the plan and react to it. If <task-content/> is longer
|
|
339
349
|
than 90 lines and a `## IMPLEMENTATION DRAFT` section (from the
|
|
340
350
|
companion skill `ase-task-preflight`) exists, replace the entire
|
|
341
351
|
content of the `## IMPLEMENTATION DRAFT` section with `[...]`.
|
|
@@ -344,7 +354,7 @@ Set <content-dirty>true</content-dirty>.
|
|
|
344
354
|
|
|
345
355
|
<template>
|
|
346
356
|
<ase-tpl-head title="TASK"/>
|
|
347
|
-
<content/>
|
|
357
|
+
<task-content/>
|
|
348
358
|
<ase-tpl-foot title="TASK"/>
|
|
349
359
|
</template>
|
|
350
360
|
|
|
@@ -405,13 +415,7 @@ Set <content-dirty>true</content-dirty>.
|
|
|
405
415
|
- If <result/> is `GRILL`:
|
|
406
416
|
|
|
407
417
|
*Break* out of the *loop*.
|
|
408
|
-
|
|
409
|
-
<if condition="the plan was saved via `ase_task_save` in step 3.2">
|
|
410
|
-
Set <args>--int-reuse-task</args>.
|
|
411
|
-
</if>
|
|
412
|
-
<if condition="<getopt-option-next/> is not equal `none`">
|
|
413
|
-
Set <args><args/> --next <getopt-option-next/></args>
|
|
414
|
-
</if>
|
|
418
|
+
<expand name="handoff-args"/>
|
|
415
419
|
Only output the following <template/> and then call the
|
|
416
420
|
`Skill(skill: "ase:ase-task-grill", args: "<args/>")` tool
|
|
417
421
|
to *grill* the finalized plan.
|
|
@@ -423,13 +427,7 @@ Set <content-dirty>true</content-dirty>.
|
|
|
423
427
|
- If <result/> is `PREFLIGHT`:
|
|
424
428
|
|
|
425
429
|
*Break* out of the *loop*.
|
|
426
|
-
|
|
427
|
-
<if condition="the plan was saved via `ase_task_save` in step 3.2">
|
|
428
|
-
Set <args>--int-reuse-task</args>.
|
|
429
|
-
</if>
|
|
430
|
-
<if condition="<getopt-option-next/> is not equal `none`">
|
|
431
|
-
Set <args><args/> --next <getopt-option-next/></args>
|
|
432
|
-
</if>
|
|
430
|
+
<expand name="handoff-args"/>
|
|
433
431
|
Only output the following <template/> and then call the
|
|
434
432
|
`Skill(skill: "ase:ase-task-preflight", args: "<args/>")` tool
|
|
435
433
|
to *apply* the finalized plan.
|
|
@@ -441,13 +439,7 @@ Set <content-dirty>true</content-dirty>.
|
|
|
441
439
|
- If <result/> is `IMPLEMENT`:
|
|
442
440
|
|
|
443
441
|
*Break* out of the *loop*.
|
|
444
|
-
|
|
445
|
-
<if condition="the plan was saved via `ase_task_save` in step 3.2">
|
|
446
|
-
Set <args>--int-reuse-task</args>.
|
|
447
|
-
</if>
|
|
448
|
-
<if condition="<getopt-option-next/> is not equal `none`">
|
|
449
|
-
Set <args><args/> --next <getopt-option-next/></args>
|
|
450
|
-
</if>
|
|
442
|
+
<expand name="handoff-args"/>
|
|
451
443
|
Only output the following <template/> and then call the
|
|
452
444
|
`Skill(skill: "ase:ase-task-implement", args: "<args/>")` tool
|
|
453
445
|
to *apply* the finalized plan.
|
|
@@ -36,6 +36,13 @@ task plan until reaching a shared understanding.
|
|
|
36
36
|
Procedure
|
|
37
37
|
---------
|
|
38
38
|
|
|
39
|
+
<define name="handoff-args">
|
|
40
|
+
Set <args>--int-reuse-task</args>.
|
|
41
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
42
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
43
|
+
</if>
|
|
44
|
+
</define>
|
|
45
|
+
|
|
39
46
|
1. **Determine Task:**
|
|
40
47
|
|
|
41
48
|
1. Set <id><getopt-arguments/></id> initially.
|
|
@@ -282,10 +289,7 @@ Procedure
|
|
|
282
289
|
</template>
|
|
283
290
|
|
|
284
291
|
- If <result/> is `EDIT`:
|
|
285
|
-
|
|
286
|
-
<if condition="<getopt-option-next/> is not equal `none`">
|
|
287
|
-
Set <args><args/> --next <getopt-option-next/></args>
|
|
288
|
-
</if>
|
|
292
|
+
<expand name="handoff-args"/>
|
|
289
293
|
Only output the following <template/> and then call the
|
|
290
294
|
tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`
|
|
291
295
|
to invoke the `ase:ase-task-edit` skill in order to *edit*
|
|
@@ -297,10 +301,7 @@ Procedure
|
|
|
297
301
|
</template>
|
|
298
302
|
|
|
299
303
|
- If <result/> is `PREFLIGHT`:
|
|
300
|
-
|
|
301
|
-
<if condition="<getopt-option-next/> is not equal `none`">
|
|
302
|
-
Set <args><args/> --next <getopt-option-next/></args>
|
|
303
|
-
</if>
|
|
304
|
+
<expand name="handoff-args"/>
|
|
304
305
|
Only output the following <template/> and then call the
|
|
305
306
|
`Skill(skill: "ase:ase-task-preflight", args: "<args/>")` tool
|
|
306
307
|
to *apply* the plan.
|
|
@@ -310,10 +311,7 @@ Procedure
|
|
|
310
311
|
</template>
|
|
311
312
|
|
|
312
313
|
- If <result/> is `IMPLEMENT`:
|
|
313
|
-
|
|
314
|
-
<if condition="<getopt-option-next/> is not equal `none`">
|
|
315
|
-
Set <args><args/> --next <getopt-option-next/></args>
|
|
316
|
-
</if>
|
|
314
|
+
<expand name="handoff-args"/>
|
|
317
315
|
Only output the following <template/> and then call the
|
|
318
316
|
`Skill(skill: "ase:ase-task-implement", args: "<args/>")` tool
|
|
319
317
|
to *apply* the plan.
|
|
@@ -26,6 +26,9 @@ Configure Task Id
|
|
|
26
26
|
*Get* or *set* the unique *task id* of the current session.
|
|
27
27
|
</objective>
|
|
28
28
|
|
|
29
|
+
Procedure
|
|
30
|
+
---------
|
|
31
|
+
|
|
29
32
|
1. Determine request:
|
|
30
33
|
<request><getopt-arguments/></request>
|
|
31
34
|
Inherit the always existing <ase-session-id/> and the current
|
|
@@ -43,9 +46,10 @@ Configure Task Id
|
|
|
43
46
|
3. <if condition="<request/> is empty">
|
|
44
47
|
- Call the `ase_task_id(session: "<ase-session-id/>")`
|
|
45
48
|
tool from the `ase` MCP server and set <text/> to its
|
|
46
|
-
`text` output.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
`text` output. Only on a clean response set
|
|
50
|
+
<ase-task-id><text/></ase-task-id>. On an `ERROR:`/`WARNING:`
|
|
51
|
+
response, silently ignore the MCP error (deviating from the
|
|
52
|
+
generic MCP error rule) and keep the <ase-task-id/>
|
|
49
53
|
inherited from the current context as the fallback.
|
|
50
54
|
|
|
51
55
|
- Output:
|