@rse/ase 0.9.55 → 0.9.56
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 +4 -2
- package/dst/ase-statusline.js +6 -8
- package/dst/ase-task.js +36 -11
- package/package.json +5 -5
- 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-analyze.md +1 -1
- package/plugin/agents/ase-code-lint.md +4 -4
- package/plugin/agents/ase-meta-chat.md +1 -1
- package/plugin/agents/ase-meta-proximity.md +1 -1
- package/plugin/meta/ase-common-code.md +164 -1
- package/plugin/meta/ase-common-task.md +14 -13
- package/plugin/meta/ase-constitution.md +3 -3
- package/plugin/meta/ase-control.md +7 -7
- package/plugin/meta/ase-dialog.md +5 -4
- package/plugin/meta/ase-format-arch.md +7 -8
- package/plugin/meta/ase-format-spec.md +10 -11
- package/plugin/meta/ase-format-task.md +2 -2
- package/plugin/meta/ase-getopt.md +1 -1
- package/plugin/meta/ase-persona.md +3 -3
- package/plugin/meta/ase-skill.md +14 -24
- package/plugin/meta/ase-tenets.md +5 -5
- package/plugin/package.json +2 -2
- package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
- package/plugin/skills/ase-arch-analyze/help.md +1 -1
- package/plugin/skills/ase-arch-discover/SKILL.md +8 -6
- package/plugin/skills/ase-code-analyze/SKILL.md +1 -1
- package/plugin/skills/ase-code-analyze/help.md +1 -1
- package/plugin/skills/ase-code-craft/SKILL.md +2 -153
- package/plugin/skills/ase-code-craft/help.md +1 -1
- package/plugin/skills/ase-code-explain/SKILL.md +3 -3
- package/plugin/skills/ase-code-insight/SKILL.md +9 -7
- package/plugin/skills/ase-code-lint/SKILL.md +7 -5
- package/plugin/skills/ase-code-refactor/SKILL.md +4 -155
- package/plugin/skills/ase-code-resolve/SKILL.md +8 -159
- package/plugin/skills/ase-docs-distill/SKILL.md +2 -2
- package/plugin/skills/ase-docs-distill/help.md +1 -1
- package/plugin/skills/ase-docs-proofread/SKILL.md +7 -3
- package/plugin/skills/ase-help-intent/SKILL.md +33 -9
- package/plugin/skills/ase-help-skill/SKILL.md +1 -1
- package/plugin/skills/ase-meta-brainstorm/SKILL.md +11 -2
- package/plugin/skills/ase-meta-changelog/SKILL.md +12 -8
- package/plugin/skills/ase-meta-commit/SKILL.md +11 -1
- package/plugin/skills/ase-meta-compat/SKILL.md +2 -2
- package/plugin/skills/ase-meta-config/help.md +1 -1
- package/plugin/skills/ase-meta-diaboli/SKILL.md +12 -3
- package/plugin/skills/ase-meta-diff/SKILL.md +11 -13
- package/plugin/skills/ase-meta-eli5/SKILL.md +3 -3
- package/plugin/skills/ase-meta-eli5/help.md +1 -1
- package/plugin/skills/ase-meta-evaluate/SKILL.md +3 -3
- package/plugin/skills/ase-meta-quorum/SKILL.md +17 -17
- package/plugin/skills/ase-meta-quotes/SKILL.md +1 -1
- package/plugin/skills/ase-meta-review/SKILL.md +7 -5
- package/plugin/skills/ase-meta-review/help.md +2 -2
- package/plugin/skills/ase-meta-search/SKILL.md +18 -0
- package/plugin/skills/ase-meta-steelman/SKILL.md +11 -2
- package/plugin/skills/ase-meta-why/SKILL.md +15 -6
- package/plugin/skills/ase-meta-why/help.md +3 -3
- package/plugin/skills/ase-sync-export/SKILL.md +2 -1
- package/plugin/skills/ase-sync-export/help.md +1 -1
- package/plugin/skills/ase-sync-reconcile/SKILL.md +16 -2
- package/plugin/skills/ase-task-condense/SKILL.md +13 -67
- package/plugin/skills/ase-task-delete/SKILL.md +1 -1
- package/plugin/skills/ase-task-dissect/SKILL.md +5 -18
- package/plugin/skills/ase-task-edit/SKILL.md +49 -22
- package/plugin/skills/ase-task-grill/SKILL.md +31 -129
- package/plugin/skills/ase-task-id/SKILL.md +12 -2
- package/plugin/skills/ase-task-implement/SKILL.md +11 -7
- package/plugin/skills/ase-task-implement/help.md +1 -1
- package/plugin/skills/ase-task-list/SKILL.md +9 -0
- package/plugin/skills/ase-task-preflight/SKILL.md +13 -7
- package/plugin/skills/ase-task-reboot/SKILL.md +18 -61
- package/plugin/skills/ase-task-reboot/help.md +1 -1
- package/plugin/skills/ase-task-view/SKILL.md +4 -2
- package/dst/ase-guidance.js +0 -89
- package/dst/ase-persona.js +0 -87
- package/dst/ase-stdout.js +0 -18
|
@@ -21,7 +21,7 @@ Condense a Task Plan
|
|
|
21
21
|
|
|
22
22
|
<expand name="getopt"
|
|
23
23
|
arg1="ase-task-condense"
|
|
24
|
-
arg2="--next|-n=(none|DONE|EDIT|IMPLEMENT|PREFLIGHT)...">
|
|
24
|
+
arg2="--next|-n=(none|DONE|EDIT|IMPLEMENT|PREFLIGHT)... --int-reuse-task">
|
|
25
25
|
$ARGUMENTS
|
|
26
26
|
</expand>
|
|
27
27
|
|
|
@@ -48,52 +48,21 @@ Set <args></args> (set args to empty).
|
|
|
48
48
|
|
|
49
49
|
1. **Determine Task:**
|
|
50
50
|
|
|
51
|
-
1. Set <
|
|
51
|
+
1. Set <instruction><getopt-arguments/></instruction> initially, with any
|
|
52
|
+
leading and trailing whitespace stripped.
|
|
52
53
|
Inherit the always existing <ase-task-id/> from the current context.
|
|
53
54
|
Inherit the always existing <ase-session-id/> from the current context.
|
|
54
55
|
Do not output anything.
|
|
55
56
|
|
|
56
57
|
2. React on task id:
|
|
57
58
|
|
|
58
|
-
|
|
59
|
-
<id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
|
|
60
|
-
">
|
|
61
|
-
Set <ase-task-id><id/></ase-task-id> (set task id) and
|
|
62
|
-
call the `ase_task_id(id: "<ase-task-id/>",
|
|
63
|
-
session: "<ase-session-id/>")` tool from the `ase` MCP
|
|
64
|
-
server to switch the task, and then only output the
|
|
65
|
-
following <template/>:
|
|
66
|
-
|
|
67
|
-
<template>
|
|
68
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
|
|
69
|
-
</template>
|
|
70
|
-
</if>
|
|
71
|
-
|
|
72
|
-
2. <elseif condition="<id/> is NOT empty">
|
|
73
|
-
The argument is neither empty nor a valid task id. As this
|
|
74
|
-
skill only accepts an optional `[<id>]` argument and *never*
|
|
75
|
-
a free-text instruction, only output the following <template/>
|
|
76
|
-
and then immediately *STOP* processing the entire current skill:
|
|
77
|
-
|
|
78
|
-
<template>
|
|
79
|
-
⧉ **ASE**: ☻ skill: **ase-task-condense**, ▶ ERROR: expected single `[<id>]` argument
|
|
80
|
-
</template>
|
|
81
|
-
</elseif>
|
|
59
|
+
<expand name="task-react-id" arg1="ase-task-condense"></expand>
|
|
82
60
|
|
|
83
61
|
2. **Determine Operation:**
|
|
84
62
|
|
|
85
|
-
1.
|
|
86
|
-
server to load the current task plan content and set <text/> to
|
|
87
|
-
the `text` output field of the `ase_task_load` tool call.
|
|
63
|
+
1. Determine the current task plan content:
|
|
88
64
|
|
|
89
|
-
|
|
90
|
-
Silently ignore the MCP error.
|
|
91
|
-
Set <task-content></task-content> (set task content to empty).
|
|
92
|
-
Set <words/> to "0".
|
|
93
|
-
|
|
94
|
-
- If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
|
|
95
|
-
Set <task-content><text/></task-content> (set task content to text).
|
|
96
|
-
Calculate the number of words <words/> of <task-content/>.
|
|
65
|
+
<expand name="task-load-content"></expand>
|
|
97
66
|
|
|
98
67
|
Set <words-before><words/></words-before> (remember the loaded
|
|
99
68
|
word count for the strictly-smaller check in step 3).
|
|
@@ -104,12 +73,6 @@ Set <args></args> (set args to empty).
|
|
|
104
73
|
into the condensed <task-content/> in step 3).
|
|
105
74
|
</if>
|
|
106
75
|
|
|
107
|
-
Only output the following <template/>:
|
|
108
|
-
|
|
109
|
-
<template>
|
|
110
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
|
|
111
|
-
</template>
|
|
112
|
-
|
|
113
76
|
2. <if condition="<task-content/> is empty">
|
|
114
77
|
Complain and tell the user to use the `ase-code-resolve`,
|
|
115
78
|
`ase-code-refactor`, `ase-code-craft`, or `ase-task-edit` skills
|
|
@@ -147,33 +110,14 @@ Set <args></args> (set args to empty).
|
|
|
147
110
|
per-line convention of the plan <format/>, but *never*
|
|
148
111
|
break a line *inside* an inline code span.
|
|
149
112
|
- *Merge* genuinely-redundant bullets (the same aspect
|
|
150
|
-
restated) and *drop* pure duplication
|
|
113
|
+
restated) and *drop* pure duplication -- but *only* when
|
|
151
114
|
truly redundant; *never* lose a distinct aspect.
|
|
152
115
|
|
|
153
|
-
3. *
|
|
154
|
-
<task-content/> is the *rendering-prepared* variant of the
|
|
155
|
-
plan, whose artifacts *MUST NOT* be persisted back. Restore
|
|
156
|
-
the *authoring form* of the plan <format/> before saving:
|
|
157
|
-
|
|
158
|
-
- A bullet point rendered as `◯ ` is written back as
|
|
159
|
-
`- ` -- the condensed <task-content/> *MUST NOT*
|
|
160
|
-
contain a single `◯` marker.
|
|
161
|
-
|
|
162
|
-
- An inline code span which the rendering split across two
|
|
163
|
-
physical lines into two spans (`` `<head/>` `` at a line
|
|
164
|
-
end and `` `<tail/>` `` at the next line start) is
|
|
165
|
-
written back as the *one* original span
|
|
166
|
-
`` `<head/> <tail/>` ``, and the line is then broken
|
|
167
|
-
*before* its opening backtick.
|
|
168
|
-
|
|
169
|
-
This normalization is *not* a semantic change and hence
|
|
170
|
-
*never* violates the preserve-exactly rule 1.
|
|
171
|
-
|
|
172
|
-
4. *Persona override*: this condense ruleset *always wins* for
|
|
116
|
+
3. *Persona override*: this condense ruleset *always wins* for
|
|
173
117
|
the plan content. This ruleset-based compression is applied
|
|
174
118
|
*regardless* of the currently active session persona style.
|
|
175
119
|
|
|
176
|
-
|
|
120
|
+
4. *Hard guardrail -- semantics preserved EXACTLY*: condensing
|
|
177
121
|
*only* shortens wording. It *MUST NOT* drop, merge (except
|
|
178
122
|
truly-redundant bullets per sub-item 2), reorder, or alter
|
|
179
123
|
*any* factual claim, requirement, file path, rule, or
|
|
@@ -188,8 +132,10 @@ Set <args></args> (set args to empty).
|
|
|
188
132
|
</if>
|
|
189
133
|
|
|
190
134
|
- <if condition="<words/> is NOT strictly smaller than <words-before/>">
|
|
191
|
-
Do *not* save and do *not* bump the timestamp.
|
|
192
|
-
the
|
|
135
|
+
Do *not* save and do *not* bump the timestamp. Set
|
|
136
|
+
<words><words-before/></words> (report the word count of the
|
|
137
|
+
*unchanged* stored plan, not of the discarded condensed one).
|
|
138
|
+
Only output the following <template/>:
|
|
193
139
|
|
|
194
140
|
<template>
|
|
195
141
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan already condensed**
|
|
@@ -66,7 +66,7 @@ Procedure
|
|
|
66
66
|
⧉ **ASE**: ◉ task: **<id/>**, ▶ status: **<text/>**
|
|
67
67
|
</template>
|
|
68
68
|
|
|
69
|
-
- If <text/>
|
|
69
|
+
- If <text/> does NOT start with `ERROR:` and NOT with `WARNING:`:
|
|
70
70
|
Set <deleted>true</deleted> and only output the following
|
|
71
71
|
<template/>:
|
|
72
72
|
|
|
@@ -204,6 +204,11 @@ Procedure
|
|
|
204
204
|
following the plan <format/>, where:
|
|
205
205
|
|
|
206
206
|
- the <task-id/> is <part-id/>,
|
|
207
|
+
- the <task-status/> is `DRAFTED` and the <task-properties/>
|
|
208
|
+
is `none`, as every part is a *newly created* plan,
|
|
209
|
+
- the <task-kind/> is taken over from the epic *verbatim*,
|
|
210
|
+
or inferred from the part content if the epic carries no
|
|
211
|
+
`Kind:` key,
|
|
207
212
|
- the <title/> is derived from the part's <scope/>,
|
|
208
213
|
- the `## CONTEXT` section carries a part-local
|
|
209
214
|
<summary-what/> and <summary-why/>, derived from the
|
|
@@ -225,24 +230,6 @@ Procedure
|
|
|
225
230
|
*MUST* still reproduce the original bullet point *completely*
|
|
226
231
|
and *without* duplication.
|
|
227
232
|
|
|
228
|
-
The loaded <task-content/> is the *rendering-prepared*
|
|
229
|
-
variant of the epic, so it carries artifacts which *MUST NOT*
|
|
230
|
-
leak into the persisted <part-content/>. While copying, you
|
|
231
|
-
*MUST* *normalize* every taken-over bullet point back into
|
|
232
|
-
the authoring form of the plan <format/>:
|
|
233
|
-
|
|
234
|
-
- *Restore the bullet markers*: a bullet point rendered as
|
|
235
|
-
`◯ ` is written back as `- ` -- <part-content/>
|
|
236
|
-
*MUST NOT* contain a single `◯` marker.
|
|
237
|
-
|
|
238
|
-
- *Re-join split code spans*: an inline code span which the
|
|
239
|
-
rendering split across two physical lines into two spans
|
|
240
|
-
(`` `<head/>` `` at a line end and `` `<tail/>` `` at the
|
|
241
|
-
next line start) is written back as the *one* original
|
|
242
|
-
span `` `<head/> <tail/>` ``, and the line is then broken
|
|
243
|
-
*before* its opening backtick, per the line-breaking
|
|
244
|
-
rules of the plan <format/>.
|
|
245
|
-
|
|
246
233
|
<if condition="<task-content/> does NOT contain a `## VERIFICATION` section heading">
|
|
247
234
|
The epic itself deliberately *omits* the `## VERIFICATION`
|
|
248
235
|
section, so you *MUST* omit this section (including its
|
|
@@ -177,22 +177,31 @@ Set <args></args> (set args to empty).
|
|
|
177
177
|
|
|
178
178
|
<if condition="
|
|
179
179
|
<getopt-option-int-reuse-task/> is equal `true`
|
|
180
|
-
*and*
|
|
180
|
+
*and* an `ase_task_save(id: '<ase-task-id/>', ...)` tool call
|
|
181
181
|
exists earlier in the current session
|
|
182
182
|
">
|
|
183
|
-
Set <text/> to the `text` *
|
|
183
|
+
Set <text/> to the `text` *argument* of the most recent
|
|
184
184
|
`ase_task_save(id: '<ase-task-id/>', ...)` tool call -- this
|
|
185
|
-
is the
|
|
186
|
-
confused with the `text` *
|
|
187
|
-
*without* calling `ase_task_load` again. Set
|
|
188
|
-
|
|
185
|
+
is the *authoring form* of the plan and *MUST NOT* be
|
|
186
|
+
confused with the `text` *output* field of that call --
|
|
187
|
+
*without* calling `ase_task_load` again. Set
|
|
188
|
+
<task-render></task-render> (set the rendering-prepared plan
|
|
189
|
+
to empty, as it is re-derived in step 3.2 or 3.3). Set
|
|
190
|
+
<status>plan reused</status>. Do not output anything.
|
|
189
191
|
</if>
|
|
190
192
|
<else>
|
|
191
|
-
Call the `ase_task_load(id: "<ase-task-id/>"
|
|
192
|
-
`ase` MCP server to load any existing
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
193
|
+
Call the `ase_task_load(id: "<ase-task-id/>", variant:
|
|
194
|
+
"both")` tool of the `ase` MCP server to load any existing
|
|
195
|
+
plan content in *both* of its forms. From the `text` output
|
|
196
|
+
field of this `ase_task_load` tool call, set <text/> to the
|
|
197
|
+
content enclosed in the `<task-plan-source>` delimiter lines
|
|
198
|
+
(the *authoring form*, the only form which is ever edited and
|
|
199
|
+
persisted) and set <task-render/> to the content enclosed in
|
|
200
|
+
the `<task-plan-render>` delimiter lines (the
|
|
201
|
+
*rendering-prepared* form, used for *display only*). The
|
|
202
|
+
delimiter lines themselves are *never* part of either form.
|
|
203
|
+
Do not output anything related to this MCP tool call. Set
|
|
204
|
+
<status>plan loaded</status>.
|
|
196
205
|
</else>
|
|
197
206
|
|
|
198
207
|
Set <task-content-dirty>false</task-content-dirty>.
|
|
@@ -200,6 +209,7 @@ Set <args></args> (set args to empty).
|
|
|
200
209
|
- If <text/> starts with `ERROR:` or `WARNING:`:
|
|
201
210
|
Silently ignore the MCP error.
|
|
202
211
|
Set <task-content/> to empty.
|
|
212
|
+
Set <task-render/> to empty.
|
|
203
213
|
Set <words/> to "0".
|
|
204
214
|
Do not output anything.
|
|
205
215
|
|
|
@@ -232,7 +242,7 @@ Set <args></args> (set args to empty).
|
|
|
232
242
|
*Determine previous-plan handling*:
|
|
233
243
|
|
|
234
244
|
- If <getopt-option-plan/> matches the regex `^(OVERWRITE|REFINE|PRESERVE)$`:
|
|
235
|
-
Honor the pre-selection what to do with the previous plan.
|
|
245
|
+
Honor the pre-selection of what to do with the previous plan.
|
|
236
246
|
Set <result><getopt-option-plan/></result>.
|
|
237
247
|
|
|
238
248
|
- If <getopt-option-plan/> is equal to `none`:
|
|
@@ -326,7 +336,7 @@ Set <args></args> (set args to empty).
|
|
|
326
336
|
Update <timestamp-modified/> with the current time in
|
|
327
337
|
ISO-style format, which has to be determined by calling the
|
|
328
338
|
`ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
|
|
329
|
-
MCP server and
|
|
339
|
+
MCP server and using the `text` field of its response. Update
|
|
330
340
|
the `Modified: ...` frontmatter key of <task-content/> with the
|
|
331
341
|
new <timestamp-modified/> value.
|
|
332
342
|
Do not output anything.
|
|
@@ -334,18 +344,34 @@ Set <args></args> (set args to empty).
|
|
|
334
344
|
|
|
335
345
|
2. *Persist plan*:
|
|
336
346
|
<if condition="<task-content-dirty/> is 'true'">
|
|
337
|
-
Call the `ase_task_save(id: "<ase-task-id/>", text:
|
|
338
|
-
of the `ase` MCP server to
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
347
|
+
Call the `ase_task_save(id: "<ase-task-id/>", text:
|
|
348
|
+
"<task-content/>", render: true)` tool of the `ase` MCP server to
|
|
349
|
+
persist the current plan -- <task-content/> always is the
|
|
350
|
+
*authoring form* of the plan and hence is persisted *as is* --
|
|
351
|
+
and then set <task-content-dirty>false</task-content-dirty>
|
|
352
|
+
again. Finally, set <task-render/> to the `text` *output* field
|
|
353
|
+
of this `ase_task_save` tool call -- the rendering-prepared form
|
|
354
|
+
of the just-persisted plan, which is for *display only* and
|
|
355
|
+
*MUST NOT* be confused with the `text` *argument* passed into
|
|
356
|
+
that call -- so the rendering in step 3.3 stays consistent across
|
|
357
|
+
all loop rounds. Calculate the number of words <words/> of
|
|
358
|
+
<task-content/>. Do not output anything related to this MCP tool
|
|
359
|
+
call except the following <template/>:
|
|
342
360
|
|
|
343
361
|
<template>
|
|
344
362
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan saved**
|
|
345
363
|
</template>
|
|
346
364
|
</if>
|
|
347
365
|
|
|
348
|
-
3. *Render plan*:
|
|
366
|
+
3. *Render plan*:
|
|
367
|
+
<if condition="<task-render/> is empty">
|
|
368
|
+
Call the `ase_markdown_prepare(text: "<task-content/>")` tool of
|
|
369
|
+
the `ase` MCP server and set <task-render/> to the `text` output
|
|
370
|
+
field of this tool call. Do not output anything related to this
|
|
371
|
+
MCP tool call.
|
|
372
|
+
</if>
|
|
373
|
+
|
|
374
|
+
Treat <task-render/> as *verbatim* Markdown.
|
|
349
375
|
|
|
350
376
|
For the *rendering only*, drop the leading *frontmatter* block --
|
|
351
377
|
both `---` delimiters and all of their keys -- and instead place
|
|
@@ -356,7 +382,8 @@ Set <args></args> (set args to empty).
|
|
|
356
382
|
frontmatter block sits in the plan file, and *MUST NOT* be moved
|
|
357
383
|
below it. This keeps the `---` delimiters from rendering as a
|
|
358
384
|
horizontal rule plus a *setext heading*. This rewrite is
|
|
359
|
-
*display-only* and *MUST NOT* change <task-
|
|
385
|
+
*display-only* and *MUST NOT* change <task-render/> or
|
|
386
|
+
<task-content/> itself:
|
|
360
387
|
|
|
361
388
|
<format>
|
|
362
389
|
◉ **Id:** <task-id/>
|
|
@@ -368,7 +395,7 @@ Set <args></args> (set args to empty).
|
|
|
368
395
|
</format>
|
|
369
396
|
|
|
370
397
|
Only output the following <template/>, so the user
|
|
371
|
-
can read the plan and react to it. If <task-
|
|
398
|
+
can read the plan and react to it. If <task-render/> is longer
|
|
372
399
|
than 90 lines and a `## IMPLEMENTATION DRAFT` section (from the
|
|
373
400
|
companion skill `ase-task-preflight`) exists, replace the entire
|
|
374
401
|
content of the `## IMPLEMENTATION DRAFT` section with `[...]`.
|
|
@@ -377,7 +404,7 @@ Set <args></args> (set args to empty).
|
|
|
377
404
|
|
|
378
405
|
<template>
|
|
379
406
|
<ase-tpl-head title="TASK" subtitle="<task-id/>"/>
|
|
380
|
-
<task-
|
|
407
|
+
<task-render/>
|
|
381
408
|
<ase-tpl-foot title="TASK" subtitle="<task-id/>"/>
|
|
382
409
|
</template>
|
|
383
410
|
|
|
@@ -32,6 +32,7 @@ task plan until reaching a shared understanding.
|
|
|
32
32
|
</objective>
|
|
33
33
|
|
|
34
34
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
|
|
35
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-task.md
|
|
35
36
|
|
|
36
37
|
Procedure
|
|
37
38
|
---------
|
|
@@ -45,80 +46,23 @@ Set <args>--int-reuse-task</args>.
|
|
|
45
46
|
|
|
46
47
|
1. **Determine Task:**
|
|
47
48
|
|
|
48
|
-
1. Set <
|
|
49
|
+
1. Set <instruction><getopt-arguments/></instruction> initially, with any
|
|
50
|
+
leading and trailing whitespace stripped.
|
|
49
51
|
Inherit the always existing <ase-task-id/> from the current context.
|
|
50
52
|
Inherit the always existing <ase-session-id/> from the current context.
|
|
51
53
|
Do not output anything.
|
|
52
54
|
|
|
53
55
|
2. React on task id:
|
|
54
56
|
|
|
55
|
-
|
|
56
|
-
<id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
|
|
57
|
-
">
|
|
58
|
-
Set <ase-task-id><id/></ase-task-id> (set task id) and
|
|
59
|
-
call the `ase_task_id(id: "<ase-task-id/>", session:
|
|
60
|
-
"<ase-session-id/>")` tool from the `ase` MCP server
|
|
61
|
-
to switch the task, and then only output the following
|
|
62
|
-
<template/>:
|
|
63
|
-
|
|
64
|
-
<template>
|
|
65
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
|
|
66
|
-
</template>
|
|
67
|
-
</if>
|
|
68
|
-
|
|
69
|
-
2. <elseif condition="<id/> is NOT empty">
|
|
70
|
-
The argument is neither empty nor a valid task id. As this
|
|
71
|
-
skill only accepts an optional `[<id>]` argument and *never*
|
|
72
|
-
a free-text instruction, only output the following <template/>
|
|
73
|
-
and then immediately *STOP* processing the entire current skill:
|
|
74
|
-
|
|
75
|
-
<template>
|
|
76
|
-
⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ ERROR: expected single `[<id>]` argument
|
|
77
|
-
</template>
|
|
78
|
-
</elseif>
|
|
57
|
+
<expand name="task-react-id" arg1="ase-task-grill"></expand>
|
|
79
58
|
|
|
80
59
|
2. **Determine Task Plan:**
|
|
81
60
|
|
|
82
61
|
1. Determine the current task plan content:
|
|
83
62
|
|
|
84
|
-
<
|
|
85
|
-
<getopt-option-int-reuse-task/> is equal `true`
|
|
86
|
-
*and* a `ase_task_save(id: '<ase-task-id/>', ...)` tool call
|
|
87
|
-
exists earlier in the current session
|
|
88
|
-
">
|
|
89
|
-
Set <text/> to the `text` *output* field of the most recent
|
|
90
|
-
`ase_task_save(id: '<ase-task-id/>', ...)` tool call -- this
|
|
91
|
-
is the rendering-prepared plan content and *MUST NOT* be
|
|
92
|
-
confused with the `text` *argument* passed into that call --
|
|
93
|
-
*without* calling `ase_task_load` again. Set <status>plan
|
|
94
|
-
reused</status>. Do not output anything.
|
|
95
|
-
</if>
|
|
96
|
-
<else>
|
|
97
|
-
Call the `ase_task_load(id: "<ase-task-id/>")` tool of the
|
|
98
|
-
`ase` MCP server to load the current task plan content and
|
|
99
|
-
set <text/> to the `text` output field of this `ase_task_load`
|
|
100
|
-
tool call. Do not output anything related to this MCP tool
|
|
101
|
-
call. Set <status>plan loaded</status>.
|
|
102
|
-
</else>
|
|
103
|
-
|
|
104
|
-
- If <text/> starts with `ERROR:` or `WARNING:`:
|
|
105
|
-
Output the following <template/> and then immediately *STOP*
|
|
106
|
-
processing the entire current skill:
|
|
107
|
-
|
|
108
|
-
<template>
|
|
109
|
-
⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ **<text/>**
|
|
110
|
-
</template>
|
|
111
|
-
|
|
112
|
-
- If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
|
|
113
|
-
Set <plan><text/></plan> (set plan to text).
|
|
114
|
-
Calculate the number of words <words/> of <plan/>.
|
|
115
|
-
Then output the following <template/>:
|
|
63
|
+
<expand name="task-load-content"></expand>
|
|
116
64
|
|
|
117
|
-
|
|
118
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
|
|
119
|
-
</template>
|
|
120
|
-
|
|
121
|
-
2. <if condition="<plan/> is empty">
|
|
65
|
+
2. <if condition="<task-content/> is empty">
|
|
122
66
|
Complain and tell the user to use the `ase-code-resolve`,
|
|
123
67
|
`ase-code-refactor`, `ase-code-craft`, or `ase-task-edit` skills
|
|
124
68
|
first to create a task plan. Then immediately stop processing
|
|
@@ -128,16 +72,16 @@ Set <args>--int-reuse-task</args>.
|
|
|
128
72
|
3. **Iterate Over Task Plan Aspects:**
|
|
129
73
|
|
|
130
74
|
Interactively interview the user *relentlessly* about every
|
|
131
|
-
*essential aspect* of the task plan in <
|
|
75
|
+
*essential aspect* of the task plan in <task-content/> *until* reaching a
|
|
132
76
|
shared understanding and no decisions/questions are left open.
|
|
133
77
|
|
|
134
|
-
This especially means
|
|
78
|
+
This especially means that you *MUST* clarify as many aspects as
|
|
135
79
|
necessary to ensure that for at least the most important decisions,
|
|
136
|
-
during a subsequent implementation, no essential freedom of
|
|
137
|
-
|
|
80
|
+
during a subsequent implementation, no essential freedom of choice
|
|
81
|
+
exists any longer.
|
|
138
82
|
|
|
139
83
|
For this process, determine the <n/> essential aspects <aspect-N/>
|
|
140
|
-
(a one or two
|
|
84
|
+
(a one- or two-word-long short identifier like `Foo` or `Bar-Baz`)
|
|
141
85
|
and the corresponding decision/question <question-N/> where a shared
|
|
142
86
|
understanding is required.
|
|
143
87
|
|
|
@@ -165,7 +109,7 @@ Set <args>--int-reuse-task</args>.
|
|
|
165
109
|
Then create a decisions/questions tree for them. Walk down each
|
|
166
110
|
branch of this decision tree, resolving dependencies between
|
|
167
111
|
decisions one-by-one. Ask the questions <question-N/> and determine
|
|
168
|
-
corresponding answer <answer-N/>, one at a time.
|
|
112
|
+
the corresponding answer <answer-N/>, one at a time.
|
|
169
113
|
|
|
170
114
|
1. For each question <question-N/> in the iteration cycle <N/>:
|
|
171
115
|
|
|
@@ -177,7 +121,7 @@ Set <args>--int-reuse-task</args>.
|
|
|
177
121
|
|
|
178
122
|
2. Determine the answer alternatives:
|
|
179
123
|
|
|
180
|
-
1. Check the <
|
|
124
|
+
1. Check the <task-content/> for the answer <answer-N-1/>.
|
|
181
125
|
|
|
182
126
|
2. Check the code base and your world knowledge and
|
|
183
127
|
use this information to find *up to three* grounded
|
|
@@ -214,75 +158,33 @@ Set <args>--int-reuse-task</args>.
|
|
|
214
158
|
<ase-tpl-bullet-normal/> ASPECT <N/>/<n/>: **<aspect-N/>**, ANSWER: **<answer-N/>**
|
|
215
159
|
</template>
|
|
216
160
|
|
|
217
|
-
2. Finally, update
|
|
161
|
+
2. Finally, update <task-content/> based on all answers <answer-N/>.
|
|
218
162
|
|
|
219
|
-
3. <if condition="the frontmatter of <
|
|
163
|
+
3. <if condition="the frontmatter of <task-content/> carries a `Created: <text/>` key">
|
|
220
164
|
Set <timestamp-created><text/></timestamp-created> (set
|
|
221
|
-
timestamp-created to extracted text)
|
|
165
|
+
timestamp-created to extracted text).
|
|
222
166
|
</if>
|
|
223
167
|
|
|
224
|
-
4.
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
<ase-task-id/>, previous <timestamp-created/>, and refreshed
|
|
231
|
-
<timestamp-modified/> information into the frontmatter keys `Id:`,
|
|
232
|
-
`Created:`, and `Modified:` and calculate the number of
|
|
233
|
-
words <words/> of <plan/>. Additionally *add* the value `grilled`
|
|
234
|
-
to the `Properties:` frontmatter key if it is still absent,
|
|
235
|
-
keeping all already present values and *creating* the whole key
|
|
236
|
-
(with the single value `grilled`) if the plan carries none.
|
|
237
|
-
|
|
238
|
-
5. Call the `ase_task_save(id: "<ase-task-id/>",
|
|
239
|
-
text: "<plan/>")` tool of the `ase` MCP server to save the updated
|
|
240
|
-
task plan content. Do not output anything related to this MCP
|
|
241
|
-
call.
|
|
242
|
-
|
|
243
|
-
6. Only output the following <template/> and continue processing:
|
|
244
|
-
|
|
245
|
-
<template>
|
|
246
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated**
|
|
247
|
-
</template>
|
|
168
|
+
4. *Add* the value `grilled` to the `Properties:` frontmatter key of
|
|
169
|
+
<task-content/> if it is still absent, keeping all already
|
|
170
|
+
present values and *creating* the whole key (with the single
|
|
171
|
+
value `grilled`) if the plan carries none.
|
|
172
|
+
|
|
173
|
+
5. <expand name="task-save-content" arg1="plan updated"></expand>
|
|
248
174
|
|
|
249
175
|
4. **Decide Next Step:**
|
|
250
176
|
|
|
251
177
|
1. *Determine next step*:
|
|
252
178
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
Set <result><head/></result>.
|
|
263
|
-
|
|
264
|
-
- else:
|
|
265
|
-
Only output the following <template/> and then immediately
|
|
266
|
-
*STOP* processing the entire current skill:
|
|
267
|
-
|
|
268
|
-
<template>
|
|
269
|
-
⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ ERROR: invalid `--next` token: **<head/>**
|
|
270
|
-
</template>
|
|
271
|
-
|
|
272
|
-
- If <getopt-option-next/> is equal to `none`:
|
|
273
|
-
|
|
274
|
-
In the following, you *MUST* *NOT* use your built-in
|
|
275
|
-
<user-dialog-tool/> tool! Instead, you *MUST* just show a
|
|
276
|
-
custom dialog according to the expanded `custom-dialog`
|
|
277
|
-
definition. You *MUST* closely follow this definition:
|
|
278
|
-
|
|
279
|
-
<expand name="custom-dialog" arg1="--no-other">
|
|
280
|
-
Next Step: How would you like to proceed with the plan?
|
|
281
|
-
DONE: Stop processing.
|
|
282
|
-
EDIT: Hand off plan to editing.
|
|
283
|
-
PREFLIGHT: Hand off plan to pre-flighting.
|
|
284
|
-
IMPLEMENT: Hand off plan to implementation.
|
|
285
|
-
</expand>
|
|
179
|
+
<expand name="task-next-select"
|
|
180
|
+
arg1="ase-task-grill"
|
|
181
|
+
arg2="DONE|EDIT|IMPLEMENT|PREFLIGHT">
|
|
182
|
+
Next Step: How would you like to proceed with the plan?
|
|
183
|
+
DONE: Stop processing.
|
|
184
|
+
EDIT: Hand off plan to editing.
|
|
185
|
+
PREFLIGHT: Hand off plan to pre-flighting.
|
|
186
|
+
IMPLEMENT: Hand off plan to implementation.
|
|
187
|
+
</expand>
|
|
286
188
|
|
|
287
189
|
2. Check the tool <result/> and dispatch accordingly:
|
|
288
190
|
|
|
@@ -60,8 +60,18 @@ Procedure
|
|
|
60
60
|
|
|
61
61
|
4. <if condition="<request/> is NOT empty">
|
|
62
62
|
- Call the `ase_task_id(id: "<request/>", session: "<ase-session-id/>")`
|
|
63
|
-
tool from the `ase` MCP server
|
|
64
|
-
|
|
63
|
+
tool from the `ase` MCP server and set <text/> to its `text`
|
|
64
|
+
output. On an `ERROR:`/`WARNING:` response, silently ignore the
|
|
65
|
+
MCP error (deviating from the generic MCP error rule), keep the
|
|
66
|
+
<ase-task-id/> inherited from the current context, and only
|
|
67
|
+
output the following <template/> and then immediately *STOP*
|
|
68
|
+
processing the entire current skill:
|
|
69
|
+
|
|
70
|
+
<template>
|
|
71
|
+
⧉ **ASE**: ☻ skill: **ase-task-id**, ▶ ERROR: failed to switch to task `<request/>`
|
|
72
|
+
</template>
|
|
73
|
+
|
|
74
|
+
- Only on a clean response set <ase-task-id><request/></ase-task-id>.
|
|
65
75
|
|
|
66
76
|
- Output:
|
|
67
77
|
<template>
|
|
@@ -75,7 +75,7 @@ Procedure
|
|
|
75
75
|
</if>
|
|
76
76
|
|
|
77
77
|
1. Set <worktree-name><ase-task-id/></worktree-name>. The worktree
|
|
78
|
-
is *never* named by
|
|
78
|
+
is *never* named by its own option value: it always carries the
|
|
79
79
|
unique *task id*, so the worktree directory and its branch stay
|
|
80
80
|
unambiguously tied to the very task plan implemented in them.
|
|
81
81
|
The task id is a plain identifier by construction, hence it is
|
|
@@ -89,7 +89,7 @@ Procedure
|
|
|
89
89
|
`git rev-parse --show-toplevel`
|
|
90
90
|
|
|
91
91
|
<if condition="this command fails">
|
|
92
|
-
The current directory is
|
|
92
|
+
The current directory is not a Git repository, so no worktree can be
|
|
93
93
|
created. Only output the following <template/> and then
|
|
94
94
|
immediately *STOP* processing the entire current skill, leaving
|
|
95
95
|
the working copy *untouched*:
|
|
@@ -204,17 +204,21 @@ Procedure
|
|
|
204
204
|
|
|
205
205
|
- Set the `Status:` key to `COMPLETED`, but *only* if the
|
|
206
206
|
change set was applied *completely* and *successfully* --
|
|
207
|
-
this traverses the `start
|
|
208
|
-
state machine of the plan <format/> in one
|
|
209
|
-
|
|
210
|
-
|
|
207
|
+
this traverses the `approve`, `start`, and `complete`
|
|
208
|
+
transitions of the state machine of the plan <format/> in one
|
|
209
|
+
go, starting from the `DRAFTED` state which a freshly authored
|
|
210
|
+
plan carries. Otherwise leave the `Status:` key *untouched*,
|
|
211
|
+
as an incomplete run transitioned nowhere.
|
|
211
212
|
|
|
212
213
|
- Refresh the `Modified:` key with the current time in
|
|
213
214
|
ISO-style format, determined by calling the
|
|
214
215
|
`ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
|
|
215
216
|
MCP server.
|
|
216
217
|
|
|
217
|
-
|
|
218
|
+
Apart from the frontmatter keys above, the plan body *MUST* stay
|
|
219
|
+
*exactly* as loaded.
|
|
220
|
+
|
|
221
|
+
Finally call the `ase_task_save(id: "<ase-task-id/>", text:
|
|
218
222
|
"<task-content/>")` tool of the `ase` MCP server to persist the
|
|
219
223
|
updated task plan. Do not output anything in this sub-step.
|
|
220
224
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
The `ase-task-implement` skill performs the *final implementation* of
|
|
17
17
|
a task plan by modifying the corresponding *artifacts* with a complete
|
|
18
18
|
*change set*. The plan is loaded and any optional `IMPLEMENTATION DRAFT`
|
|
19
|
-
section produced by `ase-task-preflight` is used as a hint
|
|
19
|
+
section produced by `ase-task-preflight` is used as a hint -- the plain
|
|
20
20
|
plan content always overrules the draft. Afterwards the plan's
|
|
21
21
|
`Properties:` frontmatter key gains the value `implemented` (plus
|
|
22
22
|
`verified`, if the verification phase actually ran and succeeded), and
|
|
@@ -55,6 +55,15 @@ Procedure
|
|
|
55
55
|
⧉ **ASE**: ✪ skill: **ase-task-list**, ▶ ERROR: options `--include` and `--exclude` cancel out to an empty state set
|
|
56
56
|
</template>
|
|
57
57
|
|
|
58
|
+
Directly *after* this error <template/>, and *before* stopping, give
|
|
59
|
+
the corrective hint by expanding the following (which, depending on
|
|
60
|
+
the configured <ase-guidance-level/>, may expand into nothing and
|
|
61
|
+
hence emit no output at all):
|
|
62
|
+
|
|
63
|
+
<ase-tpl-hint level="minimal">
|
|
64
|
+
The `--exclude` default `COMPLETED,CANCELLED` still applies -- add `--exclude none` to reach states like `COMPLETED` via `--include`.
|
|
65
|
+
</ase-tpl-hint>
|
|
66
|
+
|
|
58
67
|
2. Call the `ase_task_list(verbose: <getopt-option-verbose/>)` tool from
|
|
59
68
|
the `ase` MCP server. The result is a structured object with a
|
|
60
69
|
`tasks` array where each entry has an `id` and a `status` field, and
|