@rse/ase 0.0.30 → 0.0.31
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-hello.js +22 -0
- package/dst/ase-hook.js +3 -1
- package/dst/ase-setup.js +10 -7
- package/package.json +2 -1
- package/plugin/.claude/settings.local.json +7 -0
- package/plugin/.claude-plugin/plugin.json +20 -0
- package/plugin/.github/plugin/plugin.json +21 -0
- package/plugin/agents/ase-meta-chat.md +10 -0
- package/plugin/agents/ase-meta-search.md +16 -0
- package/plugin/commands/ase-code-lint/complete.md +9 -0
- package/plugin/commands/ase-code-lint/explain.md +9 -0
- package/plugin/commands/ase-code-lint/nope.md +11 -0
- package/plugin/commands/ase-code-lint/reassess.md +15 -0
- package/plugin/commands/ase-code-lint/recheck.md +9 -0
- package/plugin/commands/ase-code-lint/refine.md +9 -0
- package/plugin/hooks/hooks-copilot.json +23 -0
- package/plugin/hooks/hooks.json +40 -0
- package/plugin/meta/ase-constitution.md +114 -0
- package/plugin/meta/ase-dialog.md +122 -0
- package/plugin/meta/ase-persona.md +63 -0
- package/plugin/meta/ase-plan.md +69 -0
- package/plugin/meta/ase-skill.md +238 -0
- package/plugin/skills/ase-arch-analyze/SKILL.md +442 -0
- package/plugin/skills/ase-arch-discover/SKILL.md +160 -0
- package/plugin/skills/ase-code-analyze/SKILL.md +108 -0
- package/plugin/skills/ase-code-craft/SKILL.md +237 -0
- package/plugin/skills/ase-code-explain/SKILL.md +115 -0
- package/plugin/skills/ase-code-insight/SKILL.md +96 -0
- package/plugin/skills/ase-code-lint/SKILL.md +382 -0
- package/plugin/skills/ase-code-refactor/SKILL.md +241 -0
- package/plugin/skills/ase-code-resolve/SKILL.md +299 -0
- package/plugin/skills/ase-meta-changes/SKILL.md +95 -0
- package/plugin/skills/ase-meta-chat/SKILL.md +58 -0
- package/plugin/skills/ase-meta-commit/SKILL.md +64 -0
- package/plugin/skills/ase-meta-diagram/SKILL.md +101 -0
- package/plugin/skills/ase-meta-evaluate/SKILL.md +247 -0
- package/plugin/skills/ase-meta-persona/SKILL.md +52 -0
- package/plugin/skills/ase-meta-quorum/SKILL.md +122 -0
- package/plugin/skills/ase-meta-search/SKILL.md +48 -0
- package/plugin/skills/ase-meta-why/SKILL.md +69 -0
- package/plugin/skills/ase-task-delete/SKILL.md +76 -0
- package/plugin/skills/ase-task-edit/SKILL.md +390 -0
- package/plugin/skills/ase-task-id/SKILL.md +46 -0
- package/plugin/skills/ase-task-implement/SKILL.md +146 -0
- package/plugin/skills/ase-task-list/SKILL.md +44 -0
- package/plugin/skills/ase-task-preflight/SKILL.md +181 -0
- package/plugin/skills/ase-task-reboot/SKILL.md +161 -0
- package/plugin/skills/ase-task-view/SKILL.md +81 -0
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-task-edit
|
|
3
|
+
argument-hint: "[<id> | <id>: <instruction> | <instruction>]"
|
|
4
|
+
description: >
|
|
5
|
+
Iteratively edit and refine a named plan for a task through a
|
|
6
|
+
conversational loop. Each round, the current plan is shown and the
|
|
7
|
+
user is asked whether to keep refining, mark the plan as done, or
|
|
8
|
+
proceed to the implementation or preflight. Use when the user wants
|
|
9
|
+
to plan a task purely through chat-driven refinement.
|
|
10
|
+
user-invocable: true
|
|
11
|
+
disable-model-invocation: false
|
|
12
|
+
effort: high
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-persona.md
|
|
16
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
17
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
|
|
18
|
+
|
|
19
|
+
Iteratively Edit a Task Plan
|
|
20
|
+
============================
|
|
21
|
+
|
|
22
|
+
<skill name="ase-task-edit">
|
|
23
|
+
Iteratively Edit a Task Plan
|
|
24
|
+
</skill>
|
|
25
|
+
|
|
26
|
+
Your role is an experienced, *expert-level assistant*,
|
|
27
|
+
specialized in the *planning* of changes
|
|
28
|
+
through *iterative conversational refinement*.
|
|
29
|
+
|
|
30
|
+
Establish and refine the *task plan* purely through a *chat-driven
|
|
31
|
+
loop*. The user steers each round via interactive dialog that offers
|
|
32
|
+
continued refinement, finalization, or hand-off to implementation or
|
|
33
|
+
preflight.
|
|
34
|
+
|
|
35
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-plan.md
|
|
36
|
+
|
|
37
|
+
Procedure
|
|
38
|
+
---------
|
|
39
|
+
|
|
40
|
+
You *MUST* follow the following numbered items *strictly* *sequentially*!
|
|
41
|
+
You *MUST* not skip any numbered item during processing!
|
|
42
|
+
|
|
43
|
+
You *MUST* *NOT* output anything in this entire procedure, *except* when
|
|
44
|
+
explicitly requested by this procedure via outputs based on a <template/>!
|
|
45
|
+
|
|
46
|
+
1. **Determine Task and Instruction:**
|
|
47
|
+
|
|
48
|
+
1. Set <instruction>$ARGUMENTS</instruction> initially.
|
|
49
|
+
Inherit the always existing <ase-task-id/> from the current context.
|
|
50
|
+
Do not output anything.
|
|
51
|
+
|
|
52
|
+
2. React on task and/or instruction:
|
|
53
|
+
|
|
54
|
+
1. <if condition="
|
|
55
|
+
<instruction/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
|
|
56
|
+
">
|
|
57
|
+
Set <ase-task-id><instruction/></ase-task-id> (set task
|
|
58
|
+
id to instruction) and <instruction></instruction> (set
|
|
59
|
+
instruction empty), call the `task_id(id: <ase-task-id/>,
|
|
60
|
+
session: <ase-session-id/>)` tool from the `ase` MCP
|
|
61
|
+
service to switch the task, and then only output the
|
|
62
|
+
following <template/>:
|
|
63
|
+
|
|
64
|
+
<template>
|
|
65
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
|
|
66
|
+
</template>
|
|
67
|
+
</if>
|
|
68
|
+
|
|
69
|
+
2. else <if condition="
|
|
70
|
+
<instruction/> has the format `<id/>: <text/>` where
|
|
71
|
+
<id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
|
|
72
|
+
<text/> is *empty*
|
|
73
|
+
">
|
|
74
|
+
Set <instruction></instruction> (set instruction to empty)
|
|
75
|
+
and <ase-task-id><id/></ase-task-id> (set task id to
|
|
76
|
+
id) and call the `task_id(id: <ase-task-id/>, session:
|
|
77
|
+
<ase-session-id/>)` tool from the `ase` MCP service to
|
|
78
|
+
switch the task, and then only output the following
|
|
79
|
+
<template/>:
|
|
80
|
+
|
|
81
|
+
<template>
|
|
82
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
|
|
83
|
+
</template>
|
|
84
|
+
</if>
|
|
85
|
+
|
|
86
|
+
3. else <if condition="
|
|
87
|
+
<instruction/> has the format `<id/>: <text/>` where
|
|
88
|
+
<id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
|
|
89
|
+
<text/> is *not empty*
|
|
90
|
+
">
|
|
91
|
+
Set <instruction><text/></instruction> (set instruction to
|
|
92
|
+
text) and <ase-task-id><id/></ase-task-id> (set task id
|
|
93
|
+
to id) and call the `task_id(id: <ase-task-id/>, session:
|
|
94
|
+
<ase-session-id/>)` tool from the `ase` MCP service to
|
|
95
|
+
switch the task, and then only output the following
|
|
96
|
+
<template/>:
|
|
97
|
+
|
|
98
|
+
<template>
|
|
99
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
|
|
100
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **instruction given**
|
|
101
|
+
</template>
|
|
102
|
+
</if>
|
|
103
|
+
|
|
104
|
+
4. else <if condition="
|
|
105
|
+
<instruction/> is not empty
|
|
106
|
+
">
|
|
107
|
+
Only output the following <template/>:
|
|
108
|
+
|
|
109
|
+
<template>
|
|
110
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task inherited**
|
|
111
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **instruction given**
|
|
112
|
+
</template>
|
|
113
|
+
</if>
|
|
114
|
+
|
|
115
|
+
5. else <if condition="
|
|
116
|
+
<instruction/> is empty
|
|
117
|
+
">
|
|
118
|
+
Only output the following <template/>:
|
|
119
|
+
|
|
120
|
+
<template>
|
|
121
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task inherited**
|
|
122
|
+
</template>
|
|
123
|
+
</if>
|
|
124
|
+
|
|
125
|
+
2. **Determine Plan:**
|
|
126
|
+
|
|
127
|
+
1. Call the `task_load(id: <ase-task-id/>)` tool of the `ase` MCP
|
|
128
|
+
service to load any existing plan content and set <text/> to
|
|
129
|
+
the `text` output field of this `task_load` tool call.
|
|
130
|
+
Do not output anything related to this MCP tool call.
|
|
131
|
+
Set <content-dirty>false</content-dirty>.
|
|
132
|
+
|
|
133
|
+
- If <text/> starts with `ERROR:`:
|
|
134
|
+
Silently ignore the MCP error.
|
|
135
|
+
Set <content/> to empty.
|
|
136
|
+
Set <words/> to "0".
|
|
137
|
+
Do not output anything.
|
|
138
|
+
|
|
139
|
+
- If <text/> starts NOT with `ERROR:`:
|
|
140
|
+
Set <content><text/></content> (set content to text).
|
|
141
|
+
Calculate the number of words <words/> of <content/>.
|
|
142
|
+
Only output the following <template/>:
|
|
143
|
+
|
|
144
|
+
<template>
|
|
145
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
|
|
146
|
+
</template>
|
|
147
|
+
|
|
148
|
+
2. <if condition="<content/> is empty AND <instruction/> is empty">
|
|
149
|
+
Ask the user interactively, without a special tool, for the
|
|
150
|
+
initial plan content with a single question:
|
|
151
|
+
|
|
152
|
+
`**No plan content yet. What is the task you want to plan?**`
|
|
153
|
+
|
|
154
|
+
Then set <instruction/> to the response of the user and only
|
|
155
|
+
output the following <template/>:
|
|
156
|
+
|
|
157
|
+
<template>
|
|
158
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **instruction given**
|
|
159
|
+
</template>
|
|
160
|
+
</if>
|
|
161
|
+
|
|
162
|
+
3. <if condition="<content/> is not empty AND
|
|
163
|
+
<instruction/> is not empty AND
|
|
164
|
+
<instruction/> is not equal <content/>">
|
|
165
|
+
Let the *user interactively choose* what to do as the next step.
|
|
166
|
+
|
|
167
|
+
<expand name="user-dialog>
|
|
168
|
+
Previous Plan: Should the previous plan content be overwritten, refined, or preserved?
|
|
169
|
+
OVERWRITE: Continue operation, overwrite previous plan.
|
|
170
|
+
REFINE: Continue operation, refine previous plan.
|
|
171
|
+
PRESERVE: Cancel operation, preserve previous plan.
|
|
172
|
+
</expand>
|
|
173
|
+
|
|
174
|
+
Check the tool <result/> and dispatch accordingly:
|
|
175
|
+
|
|
176
|
+
- If <result/> is `CANCEL` or `PRESERVE`:
|
|
177
|
+
|
|
178
|
+
Only output the following <template/> and then immediately
|
|
179
|
+
*STOP* processing this skill:
|
|
180
|
+
|
|
181
|
+
<template>
|
|
182
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan preserved**
|
|
183
|
+
</template>
|
|
184
|
+
|
|
185
|
+
- If <result/> is `OVERWRITE`:
|
|
186
|
+
|
|
187
|
+
Create a new plan from scratch and store the result as
|
|
188
|
+
<content/> by closely following the defined plan format
|
|
189
|
+
<format/> and injecting into it all the information from
|
|
190
|
+
the <instruction/> and all decisions you derived from the
|
|
191
|
+
<instruction/>.
|
|
192
|
+
|
|
193
|
+
Call the `timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
194
|
+
`ase` MCP service and use the `text` field of its response
|
|
195
|
+
for fresh <timestamp-created/> and <timestamp-modified/>
|
|
196
|
+
information. Then insert the current <ase-task-id/>,
|
|
197
|
+
<timestamp-created/>, and <timestamp-modified/> information
|
|
198
|
+
and calculate the number of words <words/> of <content/>.
|
|
199
|
+
Set <content-dirty>true</content-dirty>.
|
|
200
|
+
|
|
201
|
+
Only output the following <template/> and continue processing:
|
|
202
|
+
|
|
203
|
+
<template>
|
|
204
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan overwritten**
|
|
205
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **instruction given**
|
|
206
|
+
</template>
|
|
207
|
+
|
|
208
|
+
- If <result/> is `REFINE`:
|
|
209
|
+
|
|
210
|
+
Treat the <instruction/> as a *refinement instruction* for
|
|
211
|
+
the plan, and update <content/> in-place by *applying* the
|
|
212
|
+
requested <instruction/> to the *plan*. When refining the
|
|
213
|
+
plan this way, preserve the overall structure of the plan
|
|
214
|
+
and only modify what the user actually requested. Do *not*
|
|
215
|
+
rewrite unrelated sections of the plan.
|
|
216
|
+
|
|
217
|
+
Calculate the number of words <words/> of <content/>.
|
|
218
|
+
Set <content-dirty>true</content-dirty>.
|
|
219
|
+
|
|
220
|
+
Only output the following <template/> and continue processing:
|
|
221
|
+
|
|
222
|
+
<template>
|
|
223
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan refined**
|
|
224
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **instruction given**
|
|
225
|
+
</template>
|
|
226
|
+
</if>
|
|
227
|
+
|
|
228
|
+
4. <if condition="<content/> does not contain '# ✪ TASK PLAN:' AND <instruction/> is empty">
|
|
229
|
+
Set <instruction><content/></instruction> (set instruction to content).
|
|
230
|
+
Set <content></content> (set content to empty).
|
|
231
|
+
Set <content-dirty>true</content-dirty>.
|
|
232
|
+
Do not output anything.
|
|
233
|
+
</if>
|
|
234
|
+
|
|
235
|
+
5. <if condition="<content/> is empty AND <instruction/> is not empty">
|
|
236
|
+
Create a new plan from scratch and store the result as
|
|
237
|
+
<content/> by closely following the defined plan format
|
|
238
|
+
<format/> and injecting into it all the information from
|
|
239
|
+
the <instruction/> and all decisions you derived from the
|
|
240
|
+
<instruction/>.
|
|
241
|
+
|
|
242
|
+
Call the `timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
243
|
+
`ase` MCP service and use the `text` field of its response
|
|
244
|
+
for fresh <timestamp-created/> and <timestamp-modified/>
|
|
245
|
+
information. Then insert the current <ase-task-id/>,
|
|
246
|
+
<timestamp-created/>, and <timestamp-modified/> information
|
|
247
|
+
and calculate the number of words <words/> of <content/>.
|
|
248
|
+
Set <content-dirty>true</content-dirty>.
|
|
249
|
+
|
|
250
|
+
Only output the following <template/> and continue processing:
|
|
251
|
+
|
|
252
|
+
<template>
|
|
253
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **instruction given**
|
|
254
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan generated**
|
|
255
|
+
</template>
|
|
256
|
+
</if>
|
|
257
|
+
|
|
258
|
+
3. **Iterative Plan Refinement Loop:**
|
|
259
|
+
|
|
260
|
+
*REPEAT* the following steps 3.1 to 3.4 in a *LOOP* until
|
|
261
|
+
the user selects `DONE`, `IMPLEMENT`, or `PREFLIGHT`, or
|
|
262
|
+
declines/cancels in the dialog of step 3.4:
|
|
263
|
+
|
|
264
|
+
1. *Update timestamp*:
|
|
265
|
+
<if condition="<content/> contains '✎ modified:' AND <content-dirty/> is 'true'">
|
|
266
|
+
Set update <timestamp-modified/> with the current time in
|
|
267
|
+
ISO-style format, which has to be determined by calling the
|
|
268
|
+
`timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
|
|
269
|
+
MCP service and use the `text` field of its response. Update
|
|
270
|
+
<content/> with the new `✎ modified: **<timestamp-modified/>**`.
|
|
271
|
+
Do not output anything.
|
|
272
|
+
</if>
|
|
273
|
+
|
|
274
|
+
2. *Persist plan*:
|
|
275
|
+
<if condition="<content-dirty/> is 'true'">
|
|
276
|
+
Call the `task_save(id: <ase-task-id/>, text: <content/>)` tool
|
|
277
|
+
of the `ase` MCP service to persist the current plan, and then
|
|
278
|
+
set <content-dirty>false</content-dirty> again. Calculate the
|
|
279
|
+
number of words <words/> of <content/>. Do not output anything
|
|
280
|
+
related to this MCP tool call except the following <template/>:
|
|
281
|
+
|
|
282
|
+
<template>
|
|
283
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan saved**
|
|
284
|
+
</template>
|
|
285
|
+
</if>
|
|
286
|
+
|
|
287
|
+
3. *Render plan*: Only output the following <template/>, so the user
|
|
288
|
+
can read the plan and react to it. Do *not* truncate, summarize,
|
|
289
|
+
or partially show the plan -- always show the complete plan
|
|
290
|
+
<content/> here:.
|
|
291
|
+
|
|
292
|
+
<template>
|
|
293
|
+
⧉ **ASE**: ┈┈┈┈┈┈┈┈────────━━━━━━━━**(** `TASK-PLAN-BEGIN` **)**━━━━━━━━────────┈┈┈┈┈┈┈┈
|
|
294
|
+
<content/>
|
|
295
|
+
⧉ **ASE**: ┈┈┈┈┈┈┈┈────────━━━━━━━━**(** `TASK-PLAN-END` **)**━━━━━━━━────────┈┈┈┈┈┈┈┈
|
|
296
|
+
</template>
|
|
297
|
+
|
|
298
|
+
4. *Ask user*: Let the *user interactively choose* what to do as the
|
|
299
|
+
next step.
|
|
300
|
+
|
|
301
|
+
<expand name="user-dialog>
|
|
302
|
+
Next Step: How would you like to proceed with the plan?
|
|
303
|
+
DONE: Mark plan finalized, exit planning loop.
|
|
304
|
+
IMPLEMENT: Hand off plan to implementation.
|
|
305
|
+
PREFLIGHT: Hand off plan to pre-flighting.
|
|
306
|
+
REFINE: Further refine plan with instructions.
|
|
307
|
+
</expand>
|
|
308
|
+
|
|
309
|
+
Check the tool <result/> and dispatch accordingly:
|
|
310
|
+
|
|
311
|
+
- If <result/> is `DONE`:
|
|
312
|
+
|
|
313
|
+
*Break* out of the *loop*, only output the following <template/>
|
|
314
|
+
and then *STOP*. Do *not* implement the plan.
|
|
315
|
+
|
|
316
|
+
<template>
|
|
317
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- done**
|
|
318
|
+
</template>
|
|
319
|
+
|
|
320
|
+
- If <result/> is `IMPLEMENT`:
|
|
321
|
+
|
|
322
|
+
*Break* out of the *loop*, only output the following
|
|
323
|
+
<template/> and then use the `Skill` tool to invoke the
|
|
324
|
+
`ase:ase-task-implement` skill in order to *apply* the finalized
|
|
325
|
+
plan.
|
|
326
|
+
|
|
327
|
+
<template>
|
|
328
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- hand-off to implementation**
|
|
329
|
+
</template>
|
|
330
|
+
|
|
331
|
+
- If <result/> is `PREFLIGHT`:
|
|
332
|
+
|
|
333
|
+
*Break* out of the *loop*, only output the following
|
|
334
|
+
<template/> and then use the `Skill` tool to invoke the
|
|
335
|
+
`ase:ase-task-preflight` skill in order to *apply* the finalized
|
|
336
|
+
plan.
|
|
337
|
+
|
|
338
|
+
<template>
|
|
339
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- hand-off to pre-flight**
|
|
340
|
+
</template>
|
|
341
|
+
|
|
342
|
+
- If <result/> is `REFINE`:
|
|
343
|
+
|
|
344
|
+
Ask the user interactively, without a special tool, for
|
|
345
|
+
the refinement instruction with a single question `**What
|
|
346
|
+
is your instruction for refining the plan?**`. Then set
|
|
347
|
+
<instruction/> to the response of the user.
|
|
348
|
+
|
|
349
|
+
Treat the <instruction/> as a *refinement instruction* for
|
|
350
|
+
the plan, and update <content/> in-place by *applying* the
|
|
351
|
+
requested <instruction/> to the *plan*. When refining the
|
|
352
|
+
plan this way, preserve the overall structure of the plan
|
|
353
|
+
and only modify what the user actually requested. Do *not*
|
|
354
|
+
rewrite unrelated sections of the plan.
|
|
355
|
+
Set <content-dirty>true</content-dirty>.
|
|
356
|
+
|
|
357
|
+
Finally, only output the following <template/> and then
|
|
358
|
+
*continue* the *loop* at step **3.1**!
|
|
359
|
+
|
|
360
|
+
<template>
|
|
361
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **plan refined**
|
|
362
|
+
</template>
|
|
363
|
+
|
|
364
|
+
- If <result/> matches `OTHER: <text/>`:
|
|
365
|
+
|
|
366
|
+
Set <instruction><text/></instruction>.
|
|
367
|
+
|
|
368
|
+
Treat the <instruction/> as a *refinement instruction* for
|
|
369
|
+
the plan, and update <content/> in-place by *applying* the
|
|
370
|
+
requested <instruction/> to the *plan*. When refining the
|
|
371
|
+
plan this way, preserve the overall structure of the plan
|
|
372
|
+
and only modify what the user actually requested. Do *not*
|
|
373
|
+
rewrite unrelated sections of the plan.
|
|
374
|
+
Set <content-dirty>true</content-dirty>.
|
|
375
|
+
|
|
376
|
+
Finally, only output the following <template/> and then
|
|
377
|
+
*continue* the *loop* at step **3.1**!
|
|
378
|
+
|
|
379
|
+
<template>
|
|
380
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **plan refined**
|
|
381
|
+
</template>
|
|
382
|
+
|
|
383
|
+
- If <result/> is `CANCEL`:
|
|
384
|
+
|
|
385
|
+
*Break* out of the *loop*, only output the following <template/>
|
|
386
|
+
and then *STOP*. Do *not* implement the plan.
|
|
387
|
+
|
|
388
|
+
<template>
|
|
389
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan refinement cancelled**
|
|
390
|
+
</template>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-task-id
|
|
3
|
+
argument-hint: "[<id>]"
|
|
4
|
+
description: >
|
|
5
|
+
Get or set unique task id <id>.
|
|
6
|
+
Use when user requests to work on a certain task
|
|
7
|
+
or wants to know what the current task is.
|
|
8
|
+
user-invocable: true
|
|
9
|
+
disable-model-invocation: false
|
|
10
|
+
effort: low
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-persona.md
|
|
14
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
15
|
+
|
|
16
|
+
Task Configuration
|
|
17
|
+
==================
|
|
18
|
+
|
|
19
|
+
<skill name="ase-task-id">
|
|
20
|
+
Configure Task Id
|
|
21
|
+
</skill>
|
|
22
|
+
|
|
23
|
+
1. Determine request:
|
|
24
|
+
<request>$ARGUMENTS</request>
|
|
25
|
+
|
|
26
|
+
2. <if condition="<request/> is empty">
|
|
27
|
+
- Call the `task_id(session: <ase-session-id/>)`
|
|
28
|
+
tool from the `ase` MCP service and set
|
|
29
|
+
<ase-task-id/> to its `text` output.
|
|
30
|
+
|
|
31
|
+
- Output:
|
|
32
|
+
<template>
|
|
33
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**
|
|
34
|
+
</template>
|
|
35
|
+
</if>
|
|
36
|
+
|
|
37
|
+
3. <if condition="<request/> is NOT empty">
|
|
38
|
+
- Set <ase-task-id><request/></ase-task-id> and
|
|
39
|
+
call the `task_id(id: <ase-task-id/>, session: <ase-session-id/>)`
|
|
40
|
+
tool from the `ase` MCP service.
|
|
41
|
+
|
|
42
|
+
- Output:
|
|
43
|
+
<template>
|
|
44
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>** (*updated*)
|
|
45
|
+
</template>
|
|
46
|
+
</if>
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-task-implement
|
|
3
|
+
argument-hint: "[<id>]"
|
|
4
|
+
description: >
|
|
5
|
+
Implement current or given task plan.
|
|
6
|
+
Use when the user calls to "implement", "realize" or "apply" the
|
|
7
|
+
"task", "plan", "spec", or "specification".
|
|
8
|
+
user-invocable: true
|
|
9
|
+
disable-model-invocation: false
|
|
10
|
+
effort: xhigh
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-persona.md
|
|
14
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
15
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
|
|
16
|
+
|
|
17
|
+
Implement a Task Plan
|
|
18
|
+
=====================
|
|
19
|
+
|
|
20
|
+
<skill name="ase-task-implement">
|
|
21
|
+
Implement a Task Plan
|
|
22
|
+
</skill>
|
|
23
|
+
|
|
24
|
+
Your role is an experienced, *expert-level assistant*,
|
|
25
|
+
specialized in the *implementation* of changes.
|
|
26
|
+
|
|
27
|
+
*Implement* the task plan by modifying the *artifacts*
|
|
28
|
+
with a corresponding, complete *change set*.
|
|
29
|
+
|
|
30
|
+
Procedure
|
|
31
|
+
---------
|
|
32
|
+
|
|
33
|
+
You *MUST* follow the following numbered items *strictly* *sequentially*!
|
|
34
|
+
You *MUST* not skip any numbered item during processing!
|
|
35
|
+
|
|
36
|
+
You *MUST* *NOT* output anything in this entire procedure, *except* when
|
|
37
|
+
explicitly requested by this procedure via outputs based on a <template/>!
|
|
38
|
+
|
|
39
|
+
1. **Determine Task:**
|
|
40
|
+
|
|
41
|
+
1. Set <instruction>$ARGUMENTS</instruction> initially.
|
|
42
|
+
Inherit the always existing <ase-task-id/> from the current context.
|
|
43
|
+
Inherit the always existing <ase-session-id/> from the current context.
|
|
44
|
+
Do not output anything.
|
|
45
|
+
|
|
46
|
+
2. React on task id:
|
|
47
|
+
|
|
48
|
+
1. <if condition="
|
|
49
|
+
<instruction/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
|
|
50
|
+
">
|
|
51
|
+
Set <ase-task-id><instruction/></ase-task-id> (set task
|
|
52
|
+
id to instruction) and <instruction></instruction> (set
|
|
53
|
+
instruction empty), call the `task_id(id: <ase-task-id/>,
|
|
54
|
+
session: <ase-session-id/>)` tool from the `ase` MCP
|
|
55
|
+
service to switch the task, and then only output the
|
|
56
|
+
following <template/>:
|
|
57
|
+
|
|
58
|
+
<template>
|
|
59
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
|
|
60
|
+
</template>
|
|
61
|
+
</if>
|
|
62
|
+
|
|
63
|
+
2. else <if condition="
|
|
64
|
+
<instruction/> has the format `<id/>: <text/>` where
|
|
65
|
+
<id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
|
|
66
|
+
<text/> is *empty*
|
|
67
|
+
">
|
|
68
|
+
Set <instruction></instruction> (set instruction to empty)
|
|
69
|
+
and <ase-task-id><id/></ase-task-id> (set task id to
|
|
70
|
+
id) and call the `task_id(id: <ase-task-id/>, session:
|
|
71
|
+
<ase-session-id/>)` tool from the `ase` MCP service to
|
|
72
|
+
switch the task, and then only output the following
|
|
73
|
+
<template/>:
|
|
74
|
+
|
|
75
|
+
<template>
|
|
76
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
|
|
77
|
+
</template>
|
|
78
|
+
</if>
|
|
79
|
+
|
|
80
|
+
2. **Determine Operation**:
|
|
81
|
+
|
|
82
|
+
1. Call the `task_load(id: <ase-task-id/>)` tool of the `ase` MCP
|
|
83
|
+
service to load the current task plan content and set <content/> to
|
|
84
|
+
the `text` output field of the `task_load` tool call.
|
|
85
|
+
|
|
86
|
+
Calculate the number of words <words/> of <content/>.
|
|
87
|
+
|
|
88
|
+
Only output the following <template/>:
|
|
89
|
+
|
|
90
|
+
<template>
|
|
91
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
|
|
92
|
+
</template>
|
|
93
|
+
|
|
94
|
+
2. If the <content/> is still empty, complain and tell the user to
|
|
95
|
+
use the `ase-code-resolve`, `ase-code-refactor`, `ase-code-craft`,
|
|
96
|
+
or `ase-task-edit` skills first to create a task plan.
|
|
97
|
+
|
|
98
|
+
3. **Create Implementation:**
|
|
99
|
+
|
|
100
|
+
1. Perform a *final implementation* of the task plan
|
|
101
|
+
by modifying the *artifacts* with a corresponding, complete
|
|
102
|
+
*change set*.
|
|
103
|
+
|
|
104
|
+
For this, primarily follow and honor the task plan in <content/>.
|
|
105
|
+
|
|
106
|
+
Secondarily, derive hints from the optionally existing
|
|
107
|
+
`IMPLEMENTATION DRAFT` section (from skill `ase-task-preflight`)
|
|
108
|
+
in <content/>. But the specification text in <content/> always
|
|
109
|
+
overrules the implementation draft in the `IMPLEMENTATION DRAFT`
|
|
110
|
+
section of <content/>.
|
|
111
|
+
|
|
112
|
+
2. Only output the following <template/>:
|
|
113
|
+
|
|
114
|
+
<template>
|
|
115
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented**
|
|
116
|
+
</template>
|
|
117
|
+
|
|
118
|
+
4. **Decide Next Step:**
|
|
119
|
+
|
|
120
|
+
1. *Ask user*: Let the *user interactively choose*
|
|
121
|
+
what to do as the next step.
|
|
122
|
+
|
|
123
|
+
<expand name="user-dialog>
|
|
124
|
+
Next Step: How would you like to proceed with the plan?
|
|
125
|
+
DONE: Stop processing and PRESERVE task plan.
|
|
126
|
+
DELETE: Stop processing and DELETE the task plan.
|
|
127
|
+
</expand>
|
|
128
|
+
|
|
129
|
+
2. Check the tool <result/> and dispatch accordingly:
|
|
130
|
+
|
|
131
|
+
- If <result/> is `DONE` or `CANCEL`:
|
|
132
|
+
Only output the following <template/> and then *STOP*.
|
|
133
|
+
|
|
134
|
+
<template>
|
|
135
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented -- done**
|
|
136
|
+
</template>
|
|
137
|
+
|
|
138
|
+
- If <result/> is `DELETE`:
|
|
139
|
+
Only output the following <template/> and then use the
|
|
140
|
+
`Skill` tool to invoke the `ase:ase-task-delete` skill in
|
|
141
|
+
order to *implement* the updated plan. Immediately stop
|
|
142
|
+
processing the current skill once the `Skill` tool was used.
|
|
143
|
+
|
|
144
|
+
<template>
|
|
145
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented -- hand-off to delete task**
|
|
146
|
+
</template>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-task-list
|
|
3
|
+
argument-hint: ""
|
|
4
|
+
description: >
|
|
5
|
+
List all available task ids.
|
|
6
|
+
Use when user wants to see all tasks.
|
|
7
|
+
user-invocable: true
|
|
8
|
+
disable-model-invocation: false
|
|
9
|
+
effort: low
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-persona.md
|
|
13
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
14
|
+
|
|
15
|
+
Task List
|
|
16
|
+
=========
|
|
17
|
+
|
|
18
|
+
<skill name="ase-task-list">
|
|
19
|
+
List Task Plans
|
|
20
|
+
</skill>
|
|
21
|
+
|
|
22
|
+
1. Call the `task_list({ verbose: true })` tool from the `ase` MCP service.
|
|
23
|
+
The result is a structured object with a `tasks` array where each
|
|
24
|
+
entry has an `id` field and an `mtime` field (formatted as
|
|
25
|
+
`YYYY-MM-DD HH:MM`).
|
|
26
|
+
|
|
27
|
+
2. If the `tasks` array is empty, output the following <template/>:
|
|
28
|
+
|
|
29
|
+
<template>
|
|
30
|
+
⧉ **ASE**: ◉ tasks: *(none)*
|
|
31
|
+
</template>
|
|
32
|
+
|
|
33
|
+
Else, output the list of tasks with the following <template/>, where
|
|
34
|
+
each <id/> and <mtime/> correspond to an entry in the task list:
|
|
35
|
+
|
|
36
|
+
<template>
|
|
37
|
+
⧉ **ASE**: ◉ tasks:
|
|
38
|
+
|
|
39
|
+
| *Task Id* | *Last Modified* |
|
|
40
|
+
|-----------|--------------------|
|
|
41
|
+
| **<id/>** | `<mtime/>` |
|
|
42
|
+
| [...] | [...] |
|
|
43
|
+
</template>
|
|
44
|
+
|