@rse/ase 0.9.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dst/ase-bash.js +618 -0
- package/dst/ase-hook.js +27 -0
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/meta/ase-format-arch.md +882 -0
- package/plugin/meta/ase-format-meta.md +51 -0
- package/plugin/meta/ase-format-spec.md +1278 -0
- package/plugin/meta/ase-skill.md +8 -0
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-code-craft/SKILL.md +4 -3
- package/plugin/skills/ase-code-refactor/SKILL.md +4 -3
- package/plugin/skills/ase-code-resolve/SKILL.md +4 -3
- package/plugin/skills/ase-meta-brainstorm/SKILL.md +2 -2
- package/plugin/skills/ase-task-condense/SKILL.md +267 -0
- package/plugin/skills/ase-task-condense/help.md +77 -0
- package/plugin/skills/ase-task-edit/SKILL.md +26 -26
- package/plugin/skills/ase-task-edit/help.md +10 -10
- package/plugin/skills/ase-task-grill/SKILL.md +8 -8
- package/plugin/.claude/settings.local.json +0 -7
- package/plugin/meta/ase-format-adr.md +0 -199
package/plugin/meta/ase-skill.md
CHANGED
|
@@ -202,7 +202,9 @@ Template Patterns
|
|
|
202
202
|
- When `<ase-tpl-head/>` (no title attribute) should be expanded, use:
|
|
203
203
|
|
|
204
204
|
<template>
|
|
205
|
+
|
|
205
206
|
╭──────────────────────────────────────────────────────────────────────┈┈┈┈┈┈┈┈┈┈
|
|
207
|
+
|
|
206
208
|
</template>
|
|
207
209
|
|
|
208
210
|
- When `<ase-tpl-head title="<title/>"/>` should be expanded, use
|
|
@@ -210,13 +212,17 @@ Template Patterns
|
|
|
210
212
|
the "─" character repeated (70 - 16 - length("<title/>")) times):
|
|
211
213
|
|
|
212
214
|
<template>
|
|
215
|
+
|
|
213
216
|
╭────━━━━**(** `<title/>` **)**━━━━────<bar/>┈┈┈┈┈┈┈┈┈┈
|
|
217
|
+
|
|
214
218
|
</template>
|
|
215
219
|
|
|
216
220
|
- When `<ase-tpl-foot/>` (no title attribute) should be expanded, use:
|
|
217
221
|
|
|
218
222
|
<template>
|
|
223
|
+
|
|
219
224
|
╰──────────────────────────────────────────────────────────────────────┈┈┈┈┈┈┈┈┈┈
|
|
225
|
+
|
|
220
226
|
</template>
|
|
221
227
|
|
|
222
228
|
- When `<ase-tpl-foot title="<title/>"/>` should be expanded, use
|
|
@@ -224,7 +230,9 @@ Template Patterns
|
|
|
224
230
|
the "─" character repeated (70 - 16 - length("<title/>")) times):
|
|
225
231
|
|
|
226
232
|
<template>
|
|
233
|
+
|
|
227
234
|
╰────━━━━**(** `<title/>` **)**━━━━────<bar/>┈┈┈┈┈┈┈┈┈┈
|
|
235
|
+
|
|
228
236
|
</template>
|
|
229
237
|
|
|
230
238
|
- When `<ase-tpl-bullet-secondary/>` should be expanded, use:
|
package/plugin/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "http://github.com/rse/ase",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "http://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "0.9.
|
|
9
|
+
"version": "0.9.2",
|
|
10
10
|
"license": "GPL-3.0-only",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -217,9 +217,10 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
217
217
|
|
|
218
218
|
Hints:
|
|
219
219
|
|
|
220
|
-
- Give a short one-sentence <summary/> of the feature
|
|
221
|
-
*precise* and *brief
|
|
222
|
-
|
|
220
|
+
- Give a short one-sentence <summary/> of the feature
|
|
221
|
+
approach plus *precise* and *ultra brief and concise*
|
|
222
|
+
feature information. Try to keep the number of bullet points
|
|
223
|
+
(●) in the range of 1-4.
|
|
223
224
|
|
|
224
225
|
- In case of a *complex feature situation* only, visualize
|
|
225
226
|
it with an optional diagram <optional-diagram/> by building
|
|
@@ -207,9 +207,10 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
207
207
|
|
|
208
208
|
Hints:
|
|
209
209
|
|
|
210
|
-
- Give a short one-sentence <summary/> of the refactoring
|
|
211
|
-
*precise* and *brief
|
|
212
|
-
|
|
210
|
+
- Give a short one-sentence <summary/> of the refactoring
|
|
211
|
+
approach plus *precise* and *ultra brief and concise*
|
|
212
|
+
refactoring information. Try to keep the number of bullet
|
|
213
|
+
points (●) in the range of 1-4.
|
|
213
214
|
|
|
214
215
|
- In case of a *complex refactoring situation* only,
|
|
215
216
|
visualize it with an optional diagram <optional-diagram/>
|
|
@@ -256,9 +256,10 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
256
256
|
|
|
257
257
|
Hints:
|
|
258
258
|
|
|
259
|
-
- Give a short one-sentence <summary/> of the resolution
|
|
260
|
-
*precise* and *brief
|
|
261
|
-
|
|
259
|
+
- Give a short one-sentence <summary/> of the resolution
|
|
260
|
+
approach plus *precise* and *ultra brief and concise*
|
|
261
|
+
resolution information. Try to keep the number of bullet
|
|
262
|
+
points (●) in the range of 1-4.
|
|
262
263
|
|
|
263
264
|
- In case of a *complex resolution situation* only,
|
|
264
265
|
visualize it with an optional diagram <optional-diagram/>
|
|
@@ -114,7 +114,7 @@ Honor the following tenets throughout the brainstorming:
|
|
|
114
114
|
<answer-M-1/>: (first grounded candidate answer)
|
|
115
115
|
<answer-M-2/>: (second grounded candidate answer)
|
|
116
116
|
<answer-M-3/>: (third grounded candidate answer)
|
|
117
|
-
<answer-M-4/>: (
|
|
117
|
+
<answer-M-4/>: (fourth grounded candidate answer)
|
|
118
118
|
</expand>
|
|
119
119
|
|
|
120
120
|
4. Output the following <template/>:
|
|
@@ -164,7 +164,7 @@ Honor the following tenets throughout the brainstorming:
|
|
|
164
164
|
4. <step id="STEP 4: Converge Idea Space">
|
|
165
165
|
|
|
166
166
|
Converge the candidate ideas <idea-N/> into a smaller, structured
|
|
167
|
-
|
|
167
|
+
set and finally into a recommendation.
|
|
168
168
|
|
|
169
169
|
1. *Cluster*: group the candidate ideas into <c/> coherent clusters
|
|
170
170
|
<cluster-C/> (a short 1-4 word label, C=1...</c>), collapsing
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-task-condense
|
|
3
|
+
argument-hint: "[--help|-h] [--next|-n <option>[,...]] [<id>]"
|
|
4
|
+
description: >
|
|
5
|
+
Condense the current or given task plan by compressing its wording.
|
|
6
|
+
Use when the user calls to "condense", "compress", "shrink" or
|
|
7
|
+
"shorten" the "task", "plan", "spec", or "specification".
|
|
8
|
+
user-invocable: true
|
|
9
|
+
disable-model-invocation: false
|
|
10
|
+
effort: high
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
14
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
15
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-dialog.md
|
|
16
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
17
|
+
|
|
18
|
+
<skill name="ase-task-condense">
|
|
19
|
+
Condense a Task Plan
|
|
20
|
+
</skill>
|
|
21
|
+
|
|
22
|
+
<expand name="getopt"
|
|
23
|
+
arg1="ase-task-condense"
|
|
24
|
+
arg2="--next|-n=(none|DONE|EDIT|IMPLEMENT|PREFLIGHT)...">
|
|
25
|
+
$ARGUMENTS
|
|
26
|
+
</expand>
|
|
27
|
+
|
|
28
|
+
<objective>
|
|
29
|
+
*Condense* the task plan by removing fluff while preserving all
|
|
30
|
+
semantics exactly.
|
|
31
|
+
</objective>
|
|
32
|
+
|
|
33
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-plan.md
|
|
34
|
+
|
|
35
|
+
Procedure
|
|
36
|
+
---------
|
|
37
|
+
|
|
38
|
+
You *MUST* follow the following numbered items *strictly* *sequentially*!
|
|
39
|
+
You *MUST* not skip any numbered item during processing!
|
|
40
|
+
|
|
41
|
+
You *MUST* *NOT* output anything in this entire procedure, *except* when
|
|
42
|
+
explicitly requested by this procedure via outputs based on a <template/>!
|
|
43
|
+
|
|
44
|
+
1. **Determine Task:**
|
|
45
|
+
|
|
46
|
+
1. Set <instruction><getopt-arguments/></instruction> initially.
|
|
47
|
+
Inherit the always existing <ase-task-id/> from the current context.
|
|
48
|
+
Inherit the always existing <ase-session-id/> from the current context.
|
|
49
|
+
Do not output anything.
|
|
50
|
+
|
|
51
|
+
2. React on task id:
|
|
52
|
+
|
|
53
|
+
1. <if condition="
|
|
54
|
+
<instruction/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
|
|
55
|
+
">
|
|
56
|
+
Set <ase-task-id><instruction/></ase-task-id> (set task
|
|
57
|
+
id to instruction) and <instruction></instruction> (set
|
|
58
|
+
instruction empty), call the `ase_task_id(id: "<ase-task-id/>",
|
|
59
|
+
session: "<ase-session-id/>")` tool from the `ase` MCP
|
|
60
|
+
server to switch the task, and then only output the
|
|
61
|
+
following <template/>:
|
|
62
|
+
|
|
63
|
+
<template>
|
|
64
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
|
|
65
|
+
</template>
|
|
66
|
+
</if>
|
|
67
|
+
|
|
68
|
+
2. else <if condition="<instruction/> is NOT empty">
|
|
69
|
+
The argument is neither empty nor a valid task id. As this
|
|
70
|
+
skill only accepts an optional `[<id>]` argument and *never*
|
|
71
|
+
a free-text instruction, only output the following <template/>
|
|
72
|
+
and then immediately *STOP* processing the entire current skill:
|
|
73
|
+
|
|
74
|
+
<template>
|
|
75
|
+
⧉ **ASE**: ☻ skill: **ase-task-condense**, ▶ ERROR: expected single `[<id>]` argument
|
|
76
|
+
</template>
|
|
77
|
+
</if>
|
|
78
|
+
|
|
79
|
+
2. **Determine Operation:**
|
|
80
|
+
|
|
81
|
+
1. Call the `ase_task_load(id: "<ase-task-id/>")` tool of the `ase` MCP
|
|
82
|
+
server to load the current task plan content and set <text/> to
|
|
83
|
+
the `text` output field of the `ase_task_load` tool call.
|
|
84
|
+
|
|
85
|
+
- If <text/> starts with `ERROR:` or `WARNING:`:
|
|
86
|
+
Set <content></content> (set content to empty).
|
|
87
|
+
Set <words/> to "0".
|
|
88
|
+
|
|
89
|
+
- If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
|
|
90
|
+
Set <content><text/></content> (set content to text).
|
|
91
|
+
Calculate the number of words <words/> of <content/>.
|
|
92
|
+
|
|
93
|
+
Set <words-before><words/></words-before> (remember the loaded
|
|
94
|
+
word count for the strictly-smaller check in step 3).
|
|
95
|
+
|
|
96
|
+
Only output the following <template/>:
|
|
97
|
+
|
|
98
|
+
<template>
|
|
99
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
|
|
100
|
+
</template>
|
|
101
|
+
|
|
102
|
+
2. <if condition="<content/> is empty">
|
|
103
|
+
Complain and tell the user to use the `ase-code-resolve`,
|
|
104
|
+
`ase-code-refactor`, `ase-code-craft`, or `ase-task-edit` skills
|
|
105
|
+
first to create a task plan. Then immediately stop processing
|
|
106
|
+
this skill.
|
|
107
|
+
</if>
|
|
108
|
+
|
|
109
|
+
3. **Condense Task Plan:**
|
|
110
|
+
|
|
111
|
+
1. *Apply the condense ruleset* to <content/>, producing a shorter
|
|
112
|
+
<content/>. The goal is to make the plan require as *little
|
|
113
|
+
reading* as possible while all semantics remain *fully preserved
|
|
114
|
+
and unchanged*. Honor the following ruleset *strictly*:
|
|
115
|
+
|
|
116
|
+
1. *Preserve-exactly (never alter)*: the plan <format/>
|
|
117
|
+
structure (the headings `#`/`##`, the `※`/`◉`/`✪` markers,
|
|
118
|
+
all three `## ※ CONTEXT`, `## ※ CHANGES`, and `## ※
|
|
119
|
+
VERIFICATION` sections, the `created:`/`modified:` line, and
|
|
120
|
+
the `- **<aspect/>**:` bullet labels), all *code spans* and
|
|
121
|
+
code blocks, technical terms, file paths, identifiers,
|
|
122
|
+
numbers, severities (`LOW`/`MEDIUM`/`HIGH`/`ACCEPTED`), and
|
|
123
|
+
the `*<aspect/>*` emphasis highlighting convention.
|
|
124
|
+
|
|
125
|
+
2. *Compress free-text only* (the `**WHAT**`/`**WHY**` prose and
|
|
126
|
+
each bullet's `<specification/>` text):
|
|
127
|
+
- *Drop* filler ("just", "really", "basically", "simply"),
|
|
128
|
+
pleasantries, and hedging ("I think", "maybe", "perhaps").
|
|
129
|
+
- *Use* shorter synonyms and common abbreviations.
|
|
130
|
+
- *Use* `→` for causality and `—` for short subsequent facts.
|
|
131
|
+
- *Drop* articles ("a", "an", "the") and *replace*
|
|
132
|
+
conjunctions with short separate clauses where this
|
|
133
|
+
shortens the text without introducing ambiguity.
|
|
134
|
+
- *Re-wrap* the shortened free-text to the ~120-character-
|
|
135
|
+
per-line convention.
|
|
136
|
+
- *Merge* genuinely-redundant bullets (the same aspect
|
|
137
|
+
restated) and *drop* pure duplication — but *only* when
|
|
138
|
+
truly redundant; *never* lose a distinct aspect.
|
|
139
|
+
|
|
140
|
+
3. *Persona override*: this condense ruleset *always wins* for
|
|
141
|
+
the plan content. This ruleset-based compression is applied
|
|
142
|
+
*regardless* of the currently active session persona style.
|
|
143
|
+
|
|
144
|
+
4. *Hard guardrail — semantics preserved EXACTLY*: condensing
|
|
145
|
+
*only* shortens wording. It *MUST NOT* drop, merge (except
|
|
146
|
+
truly-redundant bullets per sub-item 2), reorder, or alter
|
|
147
|
+
*any* factual claim, requirement, file path, rule, or
|
|
148
|
+
example. If a shortening would change meaning, *keep the
|
|
149
|
+
longer wording*.
|
|
150
|
+
|
|
151
|
+
2. *Persist only if smaller*: calculate the number of words <words/>
|
|
152
|
+
of the condensed <content/>.
|
|
153
|
+
|
|
154
|
+
- <if condition="<words/> is strictly smaller than <words-before/>">
|
|
155
|
+
Update <timestamp-modified/> with the current time in
|
|
156
|
+
ISO-style format, which has to be determined by calling
|
|
157
|
+
the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool
|
|
158
|
+
of the `ase` MCP server and use the `text` field of
|
|
159
|
+
its response. Keep the original <timestamp-created/>,
|
|
160
|
+
re-insert the current <ase-task-id/> and the refreshed
|
|
161
|
+
<timestamp-modified/> into <content/>.
|
|
162
|
+
|
|
163
|
+
Call the `ase_task_save(id: "<ase-task-id/>", text:
|
|
164
|
+
"<content/>")` tool of the `ase` MCP server to save the
|
|
165
|
+
condensed task plan content. Do not output anything related
|
|
166
|
+
to this MCP call except the following <template/>:
|
|
167
|
+
|
|
168
|
+
<template>
|
|
169
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan condensed**
|
|
170
|
+
</template>
|
|
171
|
+
</if>
|
|
172
|
+
|
|
173
|
+
- <if condition="<words/> is NOT strictly smaller than <words-before/>">
|
|
174
|
+
Do *not* save and do *not* bump the timestamp. Only output
|
|
175
|
+
the following <template/>:
|
|
176
|
+
|
|
177
|
+
<template>
|
|
178
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan already condensed**
|
|
179
|
+
</template>
|
|
180
|
+
</if>
|
|
181
|
+
|
|
182
|
+
4. **Decide Next Step:**
|
|
183
|
+
|
|
184
|
+
1. *Determine next step*:
|
|
185
|
+
|
|
186
|
+
- If <getopt-option-next/> is not equal to `none`:
|
|
187
|
+
Treat <getopt-option-next/> as a comma-separated chronological
|
|
188
|
+
list of pre-selected next-step tokens. *Split* it on `,`,
|
|
189
|
+
take the *first* token as <head/>, and store the remaining
|
|
190
|
+
tokens (joined back with `,`, or `none` if empty) into
|
|
191
|
+
<getopt-option-next/> so downstream skills can consume the tail.
|
|
192
|
+
|
|
193
|
+
- If <head/> matches the regex `^(DONE|EDIT|IMPLEMENT|PREFLIGHT)$`:
|
|
194
|
+
Honor the pre-selected token.
|
|
195
|
+
Set <result><head/></result>.
|
|
196
|
+
|
|
197
|
+
- else:
|
|
198
|
+
Only output the following <template/> and then immediately
|
|
199
|
+
*STOP* processing the entire current skill:
|
|
200
|
+
|
|
201
|
+
<template>
|
|
202
|
+
⧉ **ASE**: ☻ skill: **ase-task-condense**, ▶ ERROR: invalid `--next` token: **<head/>**
|
|
203
|
+
</template>
|
|
204
|
+
|
|
205
|
+
- If <getopt-option-next/> is equal to `none`:
|
|
206
|
+
Let the *user interactively choose* what to do as the next step.
|
|
207
|
+
|
|
208
|
+
<expand name="user-dialog">
|
|
209
|
+
Next Step: How would you like to proceed with the plan?
|
|
210
|
+
DONE: Stop processing.
|
|
211
|
+
EDIT: Hand off plan to editing.
|
|
212
|
+
IMPLEMENT: Hand off plan to implementation.
|
|
213
|
+
PREFLIGHT: Hand off plan to pre-flighting.
|
|
214
|
+
</expand>
|
|
215
|
+
|
|
216
|
+
2. Check the tool <result/> and dispatch accordingly:
|
|
217
|
+
|
|
218
|
+
- If <result/> is `DONE` or `CANCEL`:
|
|
219
|
+
Only output the following <template/> and then *STOP*.
|
|
220
|
+
|
|
221
|
+
<template>
|
|
222
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan condensed -- done**
|
|
223
|
+
</template>
|
|
224
|
+
|
|
225
|
+
- If <result/> is `EDIT`:
|
|
226
|
+
Set <args></args> (empty).
|
|
227
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
228
|
+
Set <args>--next <getopt-option-next/></args> (forward
|
|
229
|
+
remaining list tokens to the downstream skill).
|
|
230
|
+
</if>
|
|
231
|
+
Only output the following <template/> and then call the
|
|
232
|
+
tool `Skill(skill: "ase:ase-task-edit", args: <args/>)`
|
|
233
|
+
to invoke the `ase:ase-task-edit` skill in order to *edit*
|
|
234
|
+
the condensed plan. Immediately stop processing the current
|
|
235
|
+
skill once the `Skill` tool was used.
|
|
236
|
+
|
|
237
|
+
<template>
|
|
238
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan condensed -- hand-off to edit**
|
|
239
|
+
</template>
|
|
240
|
+
|
|
241
|
+
- If <result/> is `IMPLEMENT`:
|
|
242
|
+
Set <args></args> (empty).
|
|
243
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
244
|
+
Set <args>--next <getopt-option-next/></args> (forward
|
|
245
|
+
remaining list tokens to the downstream skill).
|
|
246
|
+
</if>
|
|
247
|
+
Only output the following <template/> and then call the
|
|
248
|
+
`Skill(skill: "ase:ase-task-implement", args: <args/>)` tool
|
|
249
|
+
to *apply* the plan.
|
|
250
|
+
|
|
251
|
+
<template>
|
|
252
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan condensed -- hand-off to implementation**
|
|
253
|
+
</template>
|
|
254
|
+
|
|
255
|
+
- If <result/> is `PREFLIGHT`:
|
|
256
|
+
Set <args></args> (empty).
|
|
257
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
258
|
+
Set <args>--next <getopt-option-next/></args> (forward
|
|
259
|
+
remaining list tokens to the downstream skill).
|
|
260
|
+
</if>
|
|
261
|
+
Only output the following <template/> and then call the
|
|
262
|
+
`Skill(skill: "ase:ase-task-preflight", args: <args/>)` tool
|
|
263
|
+
to *apply* the plan.
|
|
264
|
+
|
|
265
|
+
<template>
|
|
266
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan condensed -- hand-off to pre-flight**
|
|
267
|
+
</template>
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
|
|
2
|
+
## NAME
|
|
3
|
+
|
|
4
|
+
`ase-task-condense` - Condense a Task Plan
|
|
5
|
+
|
|
6
|
+
## SYNOPSIS
|
|
7
|
+
|
|
8
|
+
`ase-task-condense`
|
|
9
|
+
[`--help`|`-h`]
|
|
10
|
+
[`--next`|`-n` *option*[,...]]
|
|
11
|
+
[*id*]
|
|
12
|
+
|
|
13
|
+
## DESCRIPTION
|
|
14
|
+
|
|
15
|
+
The `ase-task-condense` skill *compresses* the wording of an existing
|
|
16
|
+
task plan to make it require as little reading as possible, while
|
|
17
|
+
keeping *all semantics fully preserved and unchanged*. It loads the
|
|
18
|
+
current (or given) plan, applies a self-contained, telegrapher-like
|
|
19
|
+
"remove-fluff" ruleset to the *free-text* parts only (the `**WHAT**` /
|
|
20
|
+
`**WHY**` prose and each bullet's specification text), and writes the
|
|
21
|
+
shorter plan back via `ase_task_save`.
|
|
22
|
+
|
|
23
|
+
The plan *structure* is never altered: all headings, section markers,
|
|
24
|
+
`- **<aspect>**:` bullet labels, code spans, technical terms, file
|
|
25
|
+
paths, numbers, and severities are kept exactly. Only genuinely
|
|
26
|
+
redundant bullets may be merged, and a shortening that would change
|
|
27
|
+
meaning is always rejected in favor of the longer wording. The condense
|
|
28
|
+
ruleset *overrides* the active session persona, so the plan is compressed
|
|
29
|
+
telegrapher-like even under the `writer` persona.
|
|
30
|
+
|
|
31
|
+
The plan is saved *only* when condensing actually makes it smaller; if no
|
|
32
|
+
further reduction is possible, the plan is left untouched (including its
|
|
33
|
+
`✎ modified:` timestamp) and reported as *already condensed*.
|
|
34
|
+
|
|
35
|
+
After condensing, the user is asked whether to stop or hand off to
|
|
36
|
+
`ase-task-edit`, `ase-task-implement`, or `ase-task-preflight`, unless
|
|
37
|
+
`--next` pre-selects this choice.
|
|
38
|
+
|
|
39
|
+
## OPTIONS
|
|
40
|
+
|
|
41
|
+
`--next`|`-n` *option*[,...]:
|
|
42
|
+
Automatically answer the user dialog for the next step. *option*
|
|
43
|
+
is a single token or a *comma-separated chronological list* of
|
|
44
|
+
tokens; the *first* token is consumed by this skill, and any
|
|
45
|
+
remaining tokens are *forwarded* (via `--next`) to the downstream
|
|
46
|
+
skill so an entire pipeline can be pre-scripted in one shot.
|
|
47
|
+
Recognized tokens at this skill: `none` (default, interactive
|
|
48
|
+
answer required), `DONE` (stop), `EDIT` (hand off to
|
|
49
|
+
`ase-task-edit`), `IMPLEMENT` (hand off to `ase-task-implement`),
|
|
50
|
+
or `PREFLIGHT` (hand off to `ase-task-preflight`). Example: `--next
|
|
51
|
+
EDIT,DONE` condenses, hands off to editing, and the editing loop will
|
|
52
|
+
exit immediately.
|
|
53
|
+
|
|
54
|
+
## ARGUMENTS
|
|
55
|
+
|
|
56
|
+
*id*:
|
|
57
|
+
The unique identifier of the task whose plan should be condensed.
|
|
58
|
+
If omitted, the *current* task id is used.
|
|
59
|
+
|
|
60
|
+
## EXAMPLES
|
|
61
|
+
|
|
62
|
+
Condense the current task plan:
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
❯ /ase-task-condense
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Condense a specific task and hand off to editing:
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
❯ /ase-task-condense --next EDIT hello
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## SEE ALSO
|
|
75
|
+
|
|
76
|
+
`ase-task-edit`, `ase-task-reboot`, `ase-task-view`,
|
|
77
|
+
`ase-task-rename`, `ase-task-delete`.
|
|
@@ -23,7 +23,7 @@ Iteratively Edit a Task Plan
|
|
|
23
23
|
|
|
24
24
|
<expand name="getopt"
|
|
25
25
|
arg1="ase-task-edit"
|
|
26
|
-
arg2="--plan|-p=(none|OVERWRITE|REFINE|PRESERVE) --dry|-d --next|-n=(none|DONE|
|
|
26
|
+
arg2="--plan|-p=(none|OVERWRITE|REFINE|PRESERVE) --dry|-d --next|-n=(none|DONE|GRILL|PREFLIGHT|IMPLEMENT)...">
|
|
27
27
|
$ARGUMENTS
|
|
28
28
|
</expand>
|
|
29
29
|
|
|
@@ -48,10 +48,11 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
48
48
|
<define name="apply-refinement">
|
|
49
49
|
Treat the <instruction/> as a *refinement instruction* for
|
|
50
50
|
the plan, and update <content/> in-place by *applying* the
|
|
51
|
-
requested <instruction/> to the *plan*.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
requested <instruction/> to the *plan*.
|
|
52
|
+
|
|
53
|
+
When refining the plan this way, preserve the overall structure of the
|
|
54
|
+
plan and only modify what the user actually requested. Do *not* rewrite
|
|
55
|
+
unrelated sections of the plan.
|
|
55
56
|
|
|
56
57
|
Calculate the number of words <words/> of <content/>.
|
|
57
58
|
Set <content-dirty>true</content-dirty>.
|
|
@@ -290,9 +291,9 @@ Set <content-dirty>true</content-dirty>.
|
|
|
290
291
|
|
|
291
292
|
3. **Iterative Plan Refinement Loop:**
|
|
292
293
|
|
|
293
|
-
*REPEAT* the following steps from 3.1 up to and including 3.4 in
|
|
294
|
-
*LOOP* until the user selects `DONE`, `IMPLEMENT`, or
|
|
295
|
-
or declines/cancels in the dialog of step 3.4:
|
|
294
|
+
*REPEAT* the following steps from 3.1 up to and including 3.4 in
|
|
295
|
+
a *LOOP* until the user selects `DONE`, `GRILL`, `IMPLEMENT`, or
|
|
296
|
+
`PREFLIGHT`, or declines/cancels in the dialog of step 3.4:
|
|
296
297
|
|
|
297
298
|
1. *Update timestamp*:
|
|
298
299
|
<if condition="<content/> contains '✎ modified:' AND <content-dirty/> is 'true'">
|
|
@@ -341,7 +342,7 @@ Set <content-dirty>true</content-dirty>.
|
|
|
341
342
|
<getopt-option-next/> so subsequent loop iterations or
|
|
342
343
|
downstream skills can consume the tail.
|
|
343
344
|
|
|
344
|
-
- If <head/> matches the regex `^(DONE|IMPLEMENT|PREFLIGHT
|
|
345
|
+
- If <head/> matches the regex `^(DONE|GRILL|IMPLEMENT|PREFLIGHT)$`:
|
|
345
346
|
Honor the pre-selected token.
|
|
346
347
|
Set <result><head/></result>.
|
|
347
348
|
|
|
@@ -365,9 +366,9 @@ Set <content-dirty>true</content-dirty>.
|
|
|
365
366
|
<expand name="user-dialog">
|
|
366
367
|
Next Step: How would you like to proceed with the plan?
|
|
367
368
|
DONE: Mark plan finalized, exit planning loop.
|
|
368
|
-
|
|
369
|
+
GRILL: Hand off plan to grilling.
|
|
369
370
|
PREFLIGHT: Hand off plan to pre-flighting.
|
|
370
|
-
|
|
371
|
+
IMPLEMENT: Hand off plan to implementation.
|
|
371
372
|
</expand>
|
|
372
373
|
|
|
373
374
|
Check the tool <result/> and dispatch accordingly:
|
|
@@ -381,7 +382,7 @@ Set <content-dirty>true</content-dirty>.
|
|
|
381
382
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- done**
|
|
382
383
|
</template>
|
|
383
384
|
|
|
384
|
-
- If <result/> is `
|
|
385
|
+
- If <result/> is `GRILL`:
|
|
385
386
|
|
|
386
387
|
*Break* out of the *loop*. Set <args></args> (empty).
|
|
387
388
|
<if condition="<getopt-option-next/> is not equal `none`">
|
|
@@ -389,11 +390,11 @@ Set <content-dirty>true</content-dirty>.
|
|
|
389
390
|
remaining list tokens to the downstream skill).
|
|
390
391
|
</if>
|
|
391
392
|
Only output the following <template/> and then call the
|
|
392
|
-
`Skill(skill: "ase:ase-task-
|
|
393
|
-
to *
|
|
393
|
+
`Skill(skill: "ase:ase-task-grill", args: <args/>)` tool
|
|
394
|
+
to *grill* the finalized plan.
|
|
394
395
|
|
|
395
396
|
<template>
|
|
396
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- hand-off to
|
|
397
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- hand-off to grilling**
|
|
397
398
|
</template>
|
|
398
399
|
|
|
399
400
|
- If <result/> is `PREFLIGHT`:
|
|
@@ -411,20 +412,19 @@ Set <content-dirty>true</content-dirty>.
|
|
|
411
412
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- hand-off to pre-flight**
|
|
412
413
|
</template>
|
|
413
414
|
|
|
414
|
-
- If <result/> is `
|
|
415
|
-
|
|
416
|
-
Ask the user interactively, without a special tool, for the
|
|
417
|
-
refinement instruction with a single question `**What is
|
|
418
|
-
your instruction for further refining the plan?**`. Then set
|
|
419
|
-
<instruction/> to the response of the user.
|
|
420
|
-
|
|
421
|
-
<expand name="apply-refinement"/>
|
|
415
|
+
- If <result/> is `IMPLEMENT`:
|
|
422
416
|
|
|
423
|
-
|
|
424
|
-
|
|
417
|
+
*Break* out of the *loop*. Set <args></args> (empty).
|
|
418
|
+
<if condition="<getopt-option-next/> is not equal `none`">
|
|
419
|
+
Set <args>--next <getopt-option-next/></args> (forward
|
|
420
|
+
remaining list tokens to the downstream skill).
|
|
421
|
+
</if>
|
|
422
|
+
Only output the following <template/> and then call the
|
|
423
|
+
`Skill(skill: "ase:ase-task-implement", args: <args/>)` tool
|
|
424
|
+
to *apply* the finalized plan.
|
|
425
425
|
|
|
426
426
|
<template>
|
|
427
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**,
|
|
427
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- hand-off to implementation**
|
|
428
428
|
</template>
|
|
429
429
|
|
|
430
430
|
- If <result/> matches `OTHER: <text/>`:
|
|
@@ -44,16 +44,16 @@ command from outside the agent tool.
|
|
|
44
44
|
`--next`|`-n` *option*[,...]:
|
|
45
45
|
Automatically answer the user dialog for the next step (at the end
|
|
46
46
|
of this skill). *option* is a single token or a *comma-separated
|
|
47
|
-
chronological list* of tokens; each iteration of the planning
|
|
48
|
-
consumes the *first* token of the list, and on hand-off
|
|
49
|
-
/ `PREFLIGHT`) any remaining tokens are *forwarded*
|
|
50
|
-
to the downstream skill so an entire pipeline can
|
|
51
|
-
in one shot. Recognized tokens at this skill:
|
|
52
|
-
interactive answer required), `DONE` (no next
|
|
53
|
-
(hand-over to `ase-task-
|
|
54
|
-
`ase-task-preflight`), or `
|
|
55
|
-
|
|
56
|
-
then exits the loop without asking.
|
|
47
|
+
chronological list* of tokens; each iteration of the planning
|
|
48
|
+
loop consumes the *first* token of the list, and on hand-off
|
|
49
|
+
(`IMPLEMENT` / `PREFLIGHT`) any remaining tokens are *forwarded*
|
|
50
|
+
(via `--next`) to the downstream skill so an entire pipeline can
|
|
51
|
+
be pre-scripted in one shot. Recognized tokens at this skill:
|
|
52
|
+
`none` (default, interactive answer required), `DONE` (no next
|
|
53
|
+
step), `GRILL` (hand-over to `ase-task-grill`), `PREFLIGHT`
|
|
54
|
+
(hand-over to `ase-task-preflight`), or `IMPLEMENT` (hand-over to
|
|
55
|
+
`ase-task-implement`). Example: `--next GRILL,DONE` first refines
|
|
56
|
+
once, then exits the loop without asking.
|
|
57
57
|
|
|
58
58
|
## ARGUMENTS
|
|
59
59
|
|
|
@@ -167,7 +167,7 @@ Procedure
|
|
|
167
167
|
<ase-tpl-bullet-normal/> ASPECT <N/>/<n/>: **<aspect-N/>**, ANSWER: **<answer-N/>**
|
|
168
168
|
</template>
|
|
169
169
|
|
|
170
|
-
3. Finally, update the in <plan/> based on all answers <answer-N/>.
|
|
170
|
+
3. Finally, update the plan in <plan/> based on all answers <answer-N/>.
|
|
171
171
|
|
|
172
172
|
4. Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
173
173
|
`ase` MCP server and use the `text` field of its response for
|
|
@@ -217,8 +217,8 @@ Procedure
|
|
|
217
217
|
Next Step: How would you like to proceed with the plan?
|
|
218
218
|
DONE: Stop processing.
|
|
219
219
|
EDIT: Hand off plan to editing.
|
|
220
|
-
IMPLEMENT: Hand off plan to implementation.
|
|
221
220
|
PREFLIGHT: Hand off plan to pre-flighting.
|
|
221
|
+
IMPLEMENT: Hand off plan to implementation.
|
|
222
222
|
</expand>
|
|
223
223
|
|
|
224
224
|
2. Check the tool <result/> and dispatch accordingly:
|
|
@@ -246,30 +246,30 @@ Procedure
|
|
|
246
246
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to edit**
|
|
247
247
|
</template>
|
|
248
248
|
|
|
249
|
-
- If <result/> is `
|
|
249
|
+
- If <result/> is `PREFLIGHT`:
|
|
250
250
|
Set <args></args> (empty).
|
|
251
251
|
<if condition="<getopt-option-next/> is not equal `none`">
|
|
252
252
|
Set <args>--next <getopt-option-next/></args> (forward
|
|
253
253
|
remaining list tokens to the downstream skill).
|
|
254
254
|
</if>
|
|
255
255
|
Only output the following <template/> and then call the
|
|
256
|
-
`Skill(skill: "ase:ase-task-
|
|
256
|
+
`Skill(skill: "ase:ase-task-preflight", args: <args/>)` tool
|
|
257
257
|
to *apply* the plan.
|
|
258
258
|
|
|
259
259
|
<template>
|
|
260
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to
|
|
260
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to pre-flight**
|
|
261
261
|
</template>
|
|
262
262
|
|
|
263
|
-
- If <result/> is `
|
|
263
|
+
- If <result/> is `IMPLEMENT`:
|
|
264
264
|
Set <args></args> (empty).
|
|
265
265
|
<if condition="<getopt-option-next/> is not equal `none`">
|
|
266
266
|
Set <args>--next <getopt-option-next/></args> (forward
|
|
267
267
|
remaining list tokens to the downstream skill).
|
|
268
268
|
</if>
|
|
269
269
|
Only output the following <template/> and then call the
|
|
270
|
-
`Skill(skill: "ase:ase-task-
|
|
270
|
+
`Skill(skill: "ase:ase-task-implement", args: <args/>)` tool
|
|
271
271
|
to *apply* the plan.
|
|
272
272
|
|
|
273
273
|
<template>
|
|
274
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to
|
|
274
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to implementation**
|
|
275
275
|
</template>
|