@rse/ase 0.9.54 → 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-log.js +5 -0
- package/dst/ase-service.js +45 -6
- package/dst/ase-setup.js +4 -2
- package/dst/ase-statusline.js +6 -8
- package/dst/ase-task.js +152 -28
- 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 +165 -2
- package/plugin/meta/ase-common-task.md +17 -15
- 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 +90 -20
- 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-lint/help.md +2 -2
- 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 +4 -4
- 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-quotes/help.md +4 -3
- 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 +19 -72
- package/plugin/skills/ase-task-condense/help.md +1 -1
- 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 +74 -26
- package/plugin/skills/ase-task-grill/SKILL.md +30 -124
- package/plugin/skills/ase-task-grill/help.md +2 -1
- package/plugin/skills/ase-task-id/SKILL.md +12 -2
- package/plugin/skills/ase-task-implement/SKILL.md +37 -4
- package/plugin/skills/ase-task-implement/help.md +9 -5
- package/plugin/skills/ase-task-list/SKILL.md +60 -15
- package/plugin/skills/ase-task-list/help.md +49 -6
- package/plugin/skills/ase-task-preflight/SKILL.md +20 -8
- package/plugin/skills/ase-task-preflight/help.md +4 -3
- package/plugin/skills/ase-task-reboot/SKILL.md +19 -62
- package/plugin/skills/ase-task-reboot/help.md +1 -1
- package/plugin/skills/ase-task-view/SKILL.md +27 -4
- 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,68 +48,31 @@ 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).
|
|
100
69
|
|
|
101
|
-
<if condition="<task-content/>
|
|
70
|
+
<if condition="the frontmatter of <task-content/> carries a `Created: <text/>` key">
|
|
102
71
|
Set <timestamp-created><text/></timestamp-created> (extract the
|
|
103
72
|
original creation timestamp so it can be re-inserted unchanged
|
|
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
|
|
@@ -125,10 +88,11 @@ Set <args></args> (set args to empty).
|
|
|
125
88
|
and unchanged*. Honor the following ruleset *strictly*:
|
|
126
89
|
|
|
127
90
|
1. *Preserve-exactly (never alter)*: the plan <format/>
|
|
128
|
-
structure (the
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
91
|
+
structure (the frontmatter block with its `Id:`, `Created:`,
|
|
92
|
+
`Modified:`, `Status:`, `Properties:`, and `Kind:` keys,
|
|
93
|
+
the headings `#`/`##`, all
|
|
94
|
+
three `## CONTEXT`, `## CHANGES`, and `## VERIFICATION`
|
|
95
|
+
sections, and the `- **<aspect/>**:` bullet labels), all *code spans* and
|
|
132
96
|
code blocks, technical terms, file paths, identifiers,
|
|
133
97
|
numbers, severities (`LOW`/`MEDIUM`/`HIGH`/`ACCEPTED`), and
|
|
134
98
|
the `*<aspect/>*` emphasis highlighting convention.
|
|
@@ -146,33 +110,14 @@ Set <args></args> (set args to empty).
|
|
|
146
110
|
per-line convention of the plan <format/>, but *never*
|
|
147
111
|
break a line *inside* an inline code span.
|
|
148
112
|
- *Merge* genuinely-redundant bullets (the same aspect
|
|
149
|
-
restated) and *drop* pure duplication
|
|
113
|
+
restated) and *drop* pure duplication -- but *only* when
|
|
150
114
|
truly redundant; *never* lose a distinct aspect.
|
|
151
115
|
|
|
152
|
-
3. *
|
|
153
|
-
<task-content/> is the *rendering-prepared* variant of the
|
|
154
|
-
plan, whose artifacts *MUST NOT* be persisted back. Restore
|
|
155
|
-
the *authoring form* of the plan <format/> before saving:
|
|
156
|
-
|
|
157
|
-
- A bullet point rendered as `◯ ` is written back as
|
|
158
|
-
`- ` -- the condensed <task-content/> *MUST NOT*
|
|
159
|
-
contain a single `◯` marker.
|
|
160
|
-
|
|
161
|
-
- An inline code span which the rendering split across two
|
|
162
|
-
physical lines into two spans (`` `<head/>` `` at a line
|
|
163
|
-
end and `` `<tail/>` `` at the next line start) is
|
|
164
|
-
written back as the *one* original span
|
|
165
|
-
`` `<head/> <tail/>` ``, and the line is then broken
|
|
166
|
-
*before* its opening backtick.
|
|
167
|
-
|
|
168
|
-
This normalization is *not* a semantic change and hence
|
|
169
|
-
*never* violates the preserve-exactly rule 1.
|
|
170
|
-
|
|
171
|
-
4. *Persona override*: this condense ruleset *always wins* for
|
|
116
|
+
3. *Persona override*: this condense ruleset *always wins* for
|
|
172
117
|
the plan content. This ruleset-based compression is applied
|
|
173
118
|
*regardless* of the currently active session persona style.
|
|
174
119
|
|
|
175
|
-
|
|
120
|
+
4. *Hard guardrail -- semantics preserved EXACTLY*: condensing
|
|
176
121
|
*only* shortens wording. It *MUST NOT* drop, merge (except
|
|
177
122
|
truly-redundant bullets per sub-item 2), reorder, or alter
|
|
178
123
|
*any* factual claim, requirement, file path, rule, or
|
|
@@ -187,8 +132,10 @@ Set <args></args> (set args to empty).
|
|
|
187
132
|
</if>
|
|
188
133
|
|
|
189
134
|
- <if condition="<words/> is NOT strictly smaller than <words-before/>">
|
|
190
|
-
Do *not* save and do *not* bump the timestamp.
|
|
191
|
-
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/>:
|
|
192
139
|
|
|
193
140
|
<template>
|
|
194
141
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan already condensed**
|
|
@@ -30,7 +30,7 @@ telegrapher-like even under the `writer` persona.
|
|
|
30
30
|
|
|
31
31
|
The plan is saved *only* when condensing actually makes it smaller; if no
|
|
32
32
|
further reduction is possible, the plan is left untouched (including its
|
|
33
|
-
|
|
33
|
+
`Modified:` frontmatter timestamp) and reported as *already condensed*.
|
|
34
34
|
|
|
35
35
|
After condensing, the user is asked whether to stop or hand off to
|
|
36
36
|
`ase-task-edit`, `ase-task-implement`, or `ase-task-preflight`, unless
|
|
@@ -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`:
|
|
@@ -322,32 +332,70 @@ Set <args></args> (set args to empty).
|
|
|
322
332
|
`PREFLIGHT`, or declines/cancels in the dialog of step 3.4:
|
|
323
333
|
|
|
324
334
|
1. *Update timestamp*:
|
|
325
|
-
<if condition="<task-content/>
|
|
335
|
+
<if condition="the frontmatter of <task-content/> carries a `Modified:` key AND <task-content-dirty/> is 'true'">
|
|
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
|
|
330
|
-
the
|
|
331
|
-
|
|
339
|
+
MCP server and using the `text` field of its response. Update
|
|
340
|
+
the `Modified: ...` frontmatter key of <task-content/> with the
|
|
341
|
+
new <timestamp-modified/> value.
|
|
332
342
|
Do not output anything.
|
|
333
343
|
</if>
|
|
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.
|
|
375
|
+
|
|
376
|
+
For the *rendering only*, drop the leading *frontmatter* block --
|
|
377
|
+
both `---` delimiters and all of their keys -- and instead place
|
|
378
|
+
the following column-aligned glyph lines *before* the
|
|
379
|
+
`# TASK: <title/>` heading, separated from it by an empty line,
|
|
380
|
+
omitting the line of every key absent from the frontmatter. The
|
|
381
|
+
glyph lines *MUST* stay *above* the heading, exactly where the
|
|
382
|
+
frontmatter block sits in the plan file, and *MUST NOT* be moved
|
|
383
|
+
below it. This keeps the `---` delimiters from rendering as a
|
|
384
|
+
horizontal rule plus a *setext heading*. This rewrite is
|
|
385
|
+
*display-only* and *MUST NOT* change <task-render/> or
|
|
386
|
+
<task-content/> itself:
|
|
387
|
+
|
|
388
|
+
<format>
|
|
389
|
+
◉ **Id:** <task-id/>
|
|
390
|
+
⎈ **Created:** <timestamp-created/>
|
|
391
|
+
⚙ **Modified:** <timestamp-modified/>
|
|
392
|
+
◐ **Status:** <task-status/>
|
|
393
|
+
⚑ **Properties:** <task-properties/>
|
|
394
|
+
☯ **Kind:** <task-kind/>
|
|
395
|
+
</format>
|
|
396
|
+
|
|
349
397
|
Only output the following <template/>, so the user
|
|
350
|
-
can read the plan and react to it. If <task-
|
|
398
|
+
can read the plan and react to it. If <task-render/> is longer
|
|
351
399
|
than 90 lines and a `## IMPLEMENTATION DRAFT` section (from the
|
|
352
400
|
companion skill `ase-task-preflight`) exists, replace the entire
|
|
353
401
|
content of the `## IMPLEMENTATION DRAFT` section with `[...]`.
|
|
@@ -355,9 +403,9 @@ Set <args></args> (set args to empty).
|
|
|
355
403
|
Use the following <template/>:
|
|
356
404
|
|
|
357
405
|
<template>
|
|
358
|
-
<ase-tpl-head title="TASK"/>
|
|
359
|
-
<task-
|
|
360
|
-
<ase-tpl-foot title="TASK"/>
|
|
406
|
+
<ase-tpl-head title="TASK" subtitle="<task-id/>"/>
|
|
407
|
+
<task-render/>
|
|
408
|
+
<ase-tpl-foot title="TASK" subtitle="<task-id/>"/>
|
|
361
409
|
</template>
|
|
362
410
|
|
|
363
411
|
4. *Determine next step*:
|
|
@@ -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,71 +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="<
|
|
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
|
-
line), set <timestamp-created><timestamp-modified/></timestamp-created>
|
|
229
|
-
(fall back to the modified timestamp). Then insert the current
|
|
230
|
-
<ase-task-id/>, previous <timestamp-created/>, and refreshed
|
|
231
|
-
<timestamp-modified/> information and calculate the number of
|
|
232
|
-
words <words/> of <plan/>.
|
|
233
|
-
|
|
234
|
-
5. Call the `ase_task_save(id: "<ase-task-id/>",
|
|
235
|
-
text: "<plan/>")` tool of the `ase` MCP server to save the updated
|
|
236
|
-
task plan content. Do not output anything related to this MCP
|
|
237
|
-
call.
|
|
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.
|
|
238
172
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
<template>
|
|
242
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated**
|
|
243
|
-
</template>
|
|
173
|
+
5. <expand name="task-save-content" arg1="plan updated"></expand>
|
|
244
174
|
|
|
245
175
|
4. **Decide Next Step:**
|
|
246
176
|
|
|
247
177
|
1. *Determine next step*:
|
|
248
178
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
Set <result><head/></result>.
|
|
259
|
-
|
|
260
|
-
- else:
|
|
261
|
-
Only output the following <template/> and then immediately
|
|
262
|
-
*STOP* processing the entire current skill:
|
|
263
|
-
|
|
264
|
-
<template>
|
|
265
|
-
⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ ERROR: invalid `--next` token: **<head/>**
|
|
266
|
-
</template>
|
|
267
|
-
|
|
268
|
-
- If <getopt-option-next/> is equal to `none`:
|
|
269
|
-
|
|
270
|
-
In the following, you *MUST* *NOT* use your built-in
|
|
271
|
-
<user-dialog-tool/> tool! Instead, you *MUST* just show a
|
|
272
|
-
custom dialog according to the expanded `custom-dialog`
|
|
273
|
-
definition. You *MUST* closely follow this definition:
|
|
274
|
-
|
|
275
|
-
<expand name="custom-dialog" arg1="--no-other">
|
|
276
|
-
Next Step: How would you like to proceed with the plan?
|
|
277
|
-
DONE: Stop processing.
|
|
278
|
-
EDIT: Hand off plan to editing.
|
|
279
|
-
PREFLIGHT: Hand off plan to pre-flighting.
|
|
280
|
-
IMPLEMENT: Hand off plan to implementation.
|
|
281
|
-
</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>
|
|
282
188
|
|
|
283
189
|
2. Check the tool <result/> and dispatch accordingly:
|
|
284
190
|
|
|
@@ -24,7 +24,8 @@ the code base and world knowledge), marks the current-plan choice, and
|
|
|
24
24
|
lets the user pick via an interactive dialog. It honors checks for
|
|
25
25
|
*fuzzy language*, *conflicting terminology*, *conflicting code*, and
|
|
26
26
|
*non-concrete scenarios*. Once all aspects are resolved, the plan is
|
|
27
|
-
updated and persisted,
|
|
27
|
+
updated and persisted, its `Properties:` frontmatter key gains the value
|
|
28
|
+
`grilled`, and the user is offered a hand-off to editing,
|
|
28
29
|
implementation, or preflight.
|
|
29
30
|
|
|
30
31
|
## OPTIONS
|
|
@@ -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>
|