@rse/ase 0.9.7 → 0.9.9

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.
Files changed (85) hide show
  1. package/dst/ase-getopt.js +71 -5
  2. package/dst/ase-hook.js +6 -21
  3. package/dst/ase-markdown.js +32 -11
  4. package/dst/ase-mcp.js +22 -8
  5. package/dst/ase-notify.js +32 -0
  6. package/dst/ase-service.js +5 -2
  7. package/dst/ase-setup.js +45 -131
  8. package/dst/ase-skills.js +17 -13
  9. package/dst/ase-statusline.js +8 -12
  10. package/dst/ase-task.js +32 -23
  11. package/package.json +3 -3
  12. package/plugin/.claude-plugin/plugin.json +1 -1
  13. package/plugin/.github/plugin/plugin.json +1 -1
  14. package/plugin/agents/ase-docs-proofread.md +2 -2
  15. package/plugin/meta/ase-constitution.md +7 -0
  16. package/plugin/meta/ase-control.md +24 -3
  17. package/plugin/meta/ase-dialog.md +105 -7
  18. package/plugin/meta/ase-format-task.md +2 -2
  19. package/plugin/meta/ase-getopt.md +31 -22
  20. package/plugin/meta/ase-skill.md +87 -12
  21. package/plugin/package.json +2 -2
  22. package/plugin/skills/ase-arch-analyze/SKILL.md +88 -89
  23. package/plugin/skills/ase-arch-analyze/help.md +2 -2
  24. package/plugin/skills/ase-arch-discover/SKILL.md +56 -34
  25. package/plugin/skills/ase-arch-discover/help.md +1 -1
  26. package/plugin/skills/ase-code-analyze/SKILL.md +6 -5
  27. package/plugin/skills/ase-code-analyze/help.md +2 -2
  28. package/plugin/skills/ase-code-craft/SKILL.md +83 -71
  29. package/plugin/skills/ase-code-craft/help.md +2 -2
  30. package/plugin/skills/ase-code-explain/SKILL.md +1 -1
  31. package/plugin/skills/ase-code-explain/help.md +1 -1
  32. package/plugin/skills/ase-code-insight/SKILL.md +1 -1
  33. package/plugin/skills/ase-code-insight/help.md +1 -1
  34. package/plugin/skills/ase-code-lint/SKILL.md +35 -18
  35. package/plugin/skills/ase-code-lint/help.md +2 -2
  36. package/plugin/skills/ase-code-refactor/SKILL.md +81 -70
  37. package/plugin/skills/ase-code-refactor/help.md +2 -2
  38. package/plugin/skills/ase-code-resolve/SKILL.md +83 -70
  39. package/plugin/skills/ase-code-resolve/help.md +3 -3
  40. package/plugin/skills/ase-docs-distill/SKILL.md +1 -1
  41. package/plugin/skills/ase-docs-distill/help.md +4 -4
  42. package/plugin/skills/ase-docs-proofread/SKILL.md +36 -19
  43. package/plugin/skills/ase-docs-proofread/help.md +1 -1
  44. package/plugin/skills/ase-meta-brainstorm/SKILL.md +29 -8
  45. package/plugin/skills/ase-meta-brainstorm/help.md +7 -11
  46. package/plugin/skills/ase-meta-changelog/help.md +1 -1
  47. package/plugin/skills/ase-meta-chat/help.md +1 -1
  48. package/plugin/skills/ase-meta-commit/help.md +1 -1
  49. package/plugin/skills/ase-meta-diaboli/help.md +2 -2
  50. package/plugin/skills/ase-meta-diff/SKILL.md +6 -5
  51. package/plugin/skills/ase-meta-diff/help.md +11 -12
  52. package/plugin/skills/ase-meta-evaluate/SKILL.md +10 -9
  53. package/plugin/skills/ase-meta-evaluate/help.md +2 -2
  54. package/plugin/skills/ase-meta-persona/help.md +1 -1
  55. package/plugin/skills/ase-meta-quorum/SKILL.md +15 -5
  56. package/plugin/skills/ase-meta-quorum/help.md +1 -1
  57. package/plugin/skills/ase-meta-review/SKILL.md +3 -4
  58. package/plugin/skills/ase-meta-review/help.md +5 -5
  59. package/plugin/skills/ase-meta-search/SKILL.md +9 -8
  60. package/plugin/skills/ase-meta-search/help.md +1 -1
  61. package/plugin/skills/ase-meta-steelman/SKILL.md +1 -1
  62. package/plugin/skills/ase-meta-steelman/help.md +2 -2
  63. package/plugin/skills/ase-meta-why/SKILL.md +16 -10
  64. package/plugin/skills/ase-meta-why/help.md +1 -1
  65. package/plugin/skills/ase-task-condense/SKILL.md +36 -19
  66. package/plugin/skills/ase-task-condense/help.md +3 -3
  67. package/plugin/skills/ase-task-delete/SKILL.md +6 -3
  68. package/plugin/skills/ase-task-delete/help.md +2 -2
  69. package/plugin/skills/ase-task-edit/SKILL.md +61 -36
  70. package/plugin/skills/ase-task-edit/help.md +4 -4
  71. package/plugin/skills/ase-task-grill/SKILL.md +57 -26
  72. package/plugin/skills/ase-task-grill/help.md +3 -3
  73. package/plugin/skills/ase-task-id/SKILL.md +11 -2
  74. package/plugin/skills/ase-task-id/help.md +2 -2
  75. package/plugin/skills/ase-task-implement/SKILL.md +40 -17
  76. package/plugin/skills/ase-task-implement/help.md +2 -2
  77. package/plugin/skills/ase-task-list/SKILL.md +1 -1
  78. package/plugin/skills/ase-task-list/help.md +2 -2
  79. package/plugin/skills/ase-task-preflight/SKILL.md +44 -22
  80. package/plugin/skills/ase-task-preflight/help.md +3 -3
  81. package/plugin/skills/ase-task-reboot/SKILL.md +31 -20
  82. package/plugin/skills/ase-task-reboot/help.md +2 -2
  83. package/plugin/skills/ase-task-rename/SKILL.md +5 -3
  84. package/plugin/skills/ase-task-rename/help.md +2 -2
  85. package/plugin/skills/ase-task-view/help.md +26 -7
@@ -22,7 +22,7 @@ Iteratively Grill a Task Plan
22
22
 
23
23
  <expand name="getopt"
24
24
  arg1="ase-task-grill"
25
- arg2="--next|-n=(none|DONE|EDIT)...">
25
+ arg2="--next|-n=(none|DONE|EDIT|IMPLEMENT|PREFLIGHT)... --int-reuse-task">
26
26
  $ARGUMENTS
27
27
  </expand>
28
28
 
@@ -36,9 +36,15 @@ task plan until reaching a shared understanding.
36
36
  Procedure
37
37
  ---------
38
38
 
39
+ You *MUST* follow the following numbered items *strictly* *sequentially*!
40
+ You *MUST* not skip any numbered item during processing!
41
+
42
+ You *MUST* *NOT* output anything in this entire procedure, *except* when
43
+ explicitly requested by this procedure via outputs based on a <template/>!
44
+
39
45
  1. **Determine Task:**
40
46
 
41
- 1. Set <id>$ARGUMENTS</id> initially.
47
+ 1. Set <id><getopt-arguments/></id> initially.
42
48
  Inherit the always existing <ase-task-id/> from the current context.
43
49
  Inherit the always existing <ase-session-id/> from the current context.
44
50
  Do not output anything.
@@ -59,22 +65,34 @@ Procedure
59
65
  </template>
60
66
  </if>
61
67
 
62
- 2. else <if condition="<id/> is NOT empty">
68
+ 2. <elseif condition="<id/> is NOT empty">
63
69
  The argument is neither empty nor a valid task id. As this
64
70
  skill only accepts an optional `[<id>]` argument and *never*
65
71
  a free-text instruction, only output the following <template/>
66
72
  and then immediately *STOP* processing the entire current skill:
67
73
 
68
74
  <template>
69
- ⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ **ERROR**: expected single `[<id>]` argument
75
+ ⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ ERROR: expected single `[<id>]` argument
70
76
  </template>
71
- </if>
77
+ </elseif>
72
78
 
73
79
  2. **Determine Task Plan:**
74
80
 
75
- 1. Call the `ase_task_load(id: "<ase-task-id/>")` tool of the `ase` MCP
76
- server to load the current task plan content and set <text/> to
77
- the `text` output field of the `ase_task_load` tool call.
81
+ 1. Determine the current task plan content:
82
+
83
+ <if condition="<getopt-option-int-reuse-task/> is equal `true`">
84
+ Set <text/> to the `text` argument of the most recent
85
+ `ase_task_save(id: '<ase-task-id/>', ...)` tool call,
86
+ *without* calling `ase_task_load` again. Set <status>plan
87
+ reused</status>. Do not output anything.
88
+ </if>
89
+ <else>
90
+ Call the `ase_task_load(id: "<ase-task-id/>")` tool of the
91
+ `ase` MCP server to load the current task plan content and
92
+ set <text/> to the `text` output field of this `ase_task_load`
93
+ tool call. Do not output anything related to this MCP tool
94
+ call. Set <status>plan loaded</status>.
95
+ </else>
78
96
 
79
97
  - If <text/> starts with `ERROR:` or `WARNING:`:
80
98
  Output the following <template/> and then immediately *STOP*
@@ -91,7 +109,7 @@ Procedure
91
109
  Output the following <template/>:
92
110
 
93
111
  <template>
94
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
112
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
95
113
  </template>
96
114
 
97
115
  2. <if condition="<plan/> is empty">
@@ -107,7 +125,7 @@ Procedure
107
125
  *essential aspect* of the task plan in <plan/> *until* reaching a
108
126
  shared understanding and no decisions/questions are left open.
109
127
 
110
- This especially means, you *MUST* clarify as much aspects as
128
+ This especially means, you *MUST* clarify as many aspects as
111
129
  necessary to ensure that for at least the most important decisions,
112
130
  during a subsequent implementation, no essential freedom of choices
113
131
  exist any longer.
@@ -143,7 +161,7 @@ Procedure
143
161
  decisions one-by-one. Ask the questions <question-N/> and determine
144
162
  corresponding answer <answer-N/>, one at a time.
145
163
 
146
- 1. For each question <question-N/> in the iteration circle <N/>:
164
+ 1. For each question <question-N/> in the iteration cycle <N/>:
147
165
 
148
166
  1. Output the following <template/>:
149
167
 
@@ -172,7 +190,12 @@ Procedure
172
190
  <ase-tpl-bullet-normal/> ASPECT <N/>/<n/>: **<aspect-N/>**, ANSWER: **<answer-N/>**
173
191
  </template>
174
192
 
175
- 3. Finally, update the plan in <plan/> based on all answers <answer-N/>.
193
+ 2. Finally, update the plan in <plan/> based on all answers <answer-N/>.
194
+
195
+ 3. <if condition="<plan/> contains 'Created: <text/>'">
196
+ Set <timestamp-created><text/></timestamp-created> (set
197
+ timestamp-created to extracted text)
198
+ </if>
176
199
 
177
200
  4. Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
178
201
  `ase` MCP server and use the `text` field of its response for
@@ -216,9 +239,11 @@ Procedure
216
239
  </template>
217
240
 
218
241
  - If <getopt-option-next/> is equal to `none`:
219
- Let the *user interactively choose* what to do as the next step.
242
+ Let the *user interactively choose* what to do as the next
243
+ step. For this you *MUST* use the custom `custom-dialog` and
244
+ *NOT* the `AskUserQuestion` based "user-dialog":
220
245
 
221
- <expand name="user-dialog">
246
+ <expand name="custom-dialog">
222
247
  Next Step: How would you like to proceed with the plan?
223
248
  DONE: Stop processing.
224
249
  EDIT: Hand off plan to editing.
@@ -237,13 +262,12 @@ Procedure
237
262
  </template>
238
263
 
239
264
  - If <result/> is `EDIT`:
240
- Set <args></args> (empty).
265
+ Set <args>--int-reuse-task</args>.
241
266
  <if condition="<getopt-option-next/> is not equal `none`">
242
- Set <args>--next <getopt-option-next/></args> (forward
243
- remaining list tokens to the downstream skill).
267
+ Set <args><args/> --next <getopt-option-next/></args>
244
268
  </if>
245
269
  Only output the following <template/> and then call the
246
- tool `Skill(skill: "ase:ase-task-edit", args: <args/>)`
270
+ tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`
247
271
  to invoke the `ase:ase-task-edit` skill in order to *edit*
248
272
  the updated plan. Immediately stop processing the current
249
273
  skill once the `Skill` tool was used.
@@ -253,13 +277,12 @@ Procedure
253
277
  </template>
254
278
 
255
279
  - If <result/> is `PREFLIGHT`:
256
- Set <args></args> (empty).
280
+ Set <args>--int-reuse-task</args>.
257
281
  <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).
282
+ Set <args><args/> --next <getopt-option-next/></args>
260
283
  </if>
261
284
  Only output the following <template/> and then call the
262
- `Skill(skill: "ase:ase-task-preflight", args: <args/>)` tool
285
+ `Skill(skill: "ase:ase-task-preflight", args: "<args/>")` tool
263
286
  to *apply* the plan.
264
287
 
265
288
  <template>
@@ -267,15 +290,23 @@ Procedure
267
290
  </template>
268
291
 
269
292
  - If <result/> is `IMPLEMENT`:
270
- Set <args></args> (empty).
293
+ Set <args>--int-reuse-task</args>.
271
294
  <if condition="<getopt-option-next/> is not equal `none`">
272
- Set <args>--next <getopt-option-next/></args> (forward
273
- remaining list tokens to the downstream skill).
295
+ Set <args><args/> --next <getopt-option-next/></args>
274
296
  </if>
275
297
  Only output the following <template/> and then call the
276
- `Skill(skill: "ase:ase-task-implement", args: <args/>)` tool
298
+ `Skill(skill: "ase:ase-task-implement", args: "<args/>")` tool
277
299
  to *apply* the plan.
278
300
 
279
301
  <template>
280
302
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to implementation**
281
303
  </template>
304
+
305
+ - If <result/> matches `OTHER: <text/>` or is any other
306
+ unrecognized value:
307
+ Treat it as `DONE` (the updated plan is already saved):
308
+ only output the following <template/> and then *STOP*.
309
+
310
+ <template>
311
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- done**
312
+ </template>
@@ -70,6 +70,6 @@ Grill the current task plan and then hand off to editing:
70
70
 
71
71
  ## SEE ALSO
72
72
 
73
- `ase-task-edit`, `ase-task-reboot`, `ase-task-preflight`,
74
- `ase-task-implement`, `ase-task-view`, `ase-task-list`,
75
- `ase-task-rename`, `ase-task-delete`.
73
+ [`ase-task-edit`](../ase-task-edit/help.md), [`ase-task-reboot`](../ase-task-reboot/help.md), [`ase-task-preflight`](../ase-task-preflight/help.md),
74
+ [`ase-task-implement`](../ase-task-implement/help.md), [`ase-task-view`](../ase-task-view/help.md), [`ase-task-list`](../ase-task-list/help.md),
75
+ [`ase-task-rename`](../ase-task-rename/help.md), [`ase-task-delete`](../ase-task-delete/help.md).
@@ -24,7 +24,16 @@ Configure Task Id
24
24
  1. Determine request:
25
25
  <request>$ARGUMENTS</request>
26
26
 
27
- 2. <if condition="<request/> is empty">
27
+ 2. <if condition="<request/> is NOT empty AND <request/> does NOT match the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`">
28
+ Only output the following <template/> and then immediately
29
+ *STOP* processing the entire current skill:
30
+
31
+ <template>
32
+ ⧉ **ASE**: ☻ skill: **ase-task-id**, ▶ ERROR: given task id `<request/>` is not a valid id
33
+ </template>
34
+ </if>
35
+
36
+ 3. <if condition="<request/> is empty">
28
37
  - Call the `ase_task_id(session: "<ase-session-id/>")`
29
38
  tool from the `ase` MCP server and set
30
39
  <ase-task-id/> to its `text` output.
@@ -35,7 +44,7 @@ Configure Task Id
35
44
  </template>
36
45
  </if>
37
46
 
38
- 3. <if condition="<request/> is NOT empty">
47
+ 4. <if condition="<request/> is NOT empty">
39
48
  - Set <ase-task-id><request/></ase-task-id> and
40
49
  call the `ase_task_id(id: "<ase-task-id/>", session: "<ase-session-id/>")`
41
50
  tool from the `ase` MCP server.
@@ -38,5 +38,5 @@ Switch to a specific task:
38
38
 
39
39
  ## SEE ALSO
40
40
 
41
- `ase-task-list`, `ase-task-edit`, `ase-task-view`,
42
- `ase-task-rename`, `ase-task-delete`.
41
+ [`ase-task-list`](../ase-task-list/help.md), [`ase-task-edit`](../ase-task-edit/help.md), [`ase-task-view`](../ase-task-view/help.md),
42
+ [`ase-task-rename`](../ase-task-rename/help.md), [`ase-task-delete`](../ase-task-delete/help.md).
@@ -21,7 +21,7 @@ Implement a Task Plan
21
21
 
22
22
  <expand name="getopt"
23
23
  arg1="ase-task-implement"
24
- arg2="--next|-n=(none|DONE|DELETE)...">
24
+ arg2="--next|-n=(none|DONE|DELETE)... --int-reuse-task">
25
25
  $ARGUMENTS
26
26
  </expand>
27
27
 
@@ -65,7 +65,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
65
65
  </template>
66
66
  </if>
67
67
 
68
- 2. else <if condition="
68
+ 2. <elseif condition="
69
69
  <instruction/> has the format `<id/>: <text/>` where
70
70
  <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
71
71
  <text/> is *empty*
@@ -80,9 +80,9 @@ explicitly requested by this procedure via outputs based on a <template/>!
80
80
  <template>
81
81
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
82
82
  </template>
83
- </if>
83
+ </elseif>
84
84
 
85
- 3. else <if condition="<instruction/> is NOT empty">
85
+ 3. <elseif condition="<instruction/> is NOT empty">
86
86
  The argument is neither empty nor a valid task id. As this
87
87
  skill only accepts an optional `[<id>]` argument and *never*
88
88
  a free-text instruction, only output the following <template/>
@@ -91,13 +91,25 @@ explicitly requested by this procedure via outputs based on a <template/>!
91
91
  <template>
92
92
  ⧉ **ASE**: ☻ skill: **ase-task-implement**, ▶ ERROR: expected single `[<id>]` argument
93
93
  </template>
94
- </if>
94
+ </elseif>
95
95
 
96
96
  2. **Determine Operation**:
97
97
 
98
- 1. Call the `ase_task_load(id: "<ase-task-id/>")` tool of the `ase` MCP
99
- server to load the current task plan content and set <text/> to
100
- the `text` output field of the `ase_task_load` tool call.
98
+ 1. Determine the current task plan content:
99
+
100
+ <if condition="<getopt-option-int-reuse-task/> is equal `true`">
101
+ Set <text/> to the `text` argument of the most recent
102
+ `ase_task_save(id: '<ase-task-id/>', ...)` tool call,
103
+ *without* calling `ase_task_load` again. Set <status>plan
104
+ reused</status>. Do not output anything.
105
+ </if>
106
+ <else>
107
+ Call the `ase_task_load(id: "<ase-task-id/>")` tool of the
108
+ `ase` MCP server to load the current task plan content and
109
+ set <text/> to the `text` output field of this `ase_task_load`
110
+ tool call. Do not output anything related to this MCP tool
111
+ call. Set <status>plan loaded</status>.
112
+ </else>
101
113
 
102
114
  - If <text/> starts with `ERROR:` or `WARNING:`:
103
115
  Set <content></content> (set content to empty).
@@ -110,12 +122,13 @@ explicitly requested by this procedure via outputs based on a <template/>!
110
122
  Only output the following <template/>:
111
123
 
112
124
  <template>
113
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
125
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
114
126
  </template>
115
127
 
116
128
  2. If the <content/> is still empty, complain and tell the user to
117
129
  use the `ase-code-resolve`, `ase-code-refactor`, `ase-code-craft`,
118
- or `ase-task-edit` skills first to create a task plan.
130
+ or `ase-task-edit` skills first to create a task plan. Then
131
+ immediately stop processing this skill.
119
132
 
120
133
  3. **Create Implementation:**
121
134
 
@@ -171,9 +184,11 @@ explicitly requested by this procedure via outputs based on a <template/>!
171
184
  </template>
172
185
 
173
186
  - If <getopt-option-next/> is equal to `none`:
174
- Let the *user interactively choose* what to do as the next step.
187
+ Let the *user interactively choose* what to do as the next
188
+ step. For this you *MUST* use the custom `custom-dialog` and
189
+ *NOT* the `AskUserQuestion` based "user-dialog":
175
190
 
176
- <expand name="user-dialog">
191
+ <expand name="custom-dialog">
177
192
  Next Step: How would you like to proceed with the plan?
178
193
  DONE: Stop processing and PRESERVE task plan.
179
194
  DELETE: Stop processing and DELETE the task plan.
@@ -189,11 +204,10 @@ explicitly requested by this procedure via outputs based on a <template/>!
189
204
  </template>
190
205
 
191
206
  - If <result/> is `DELETE`:
192
- Set <args></args> (empty).
193
- <if condition="<getopt-option-next/> is not equal `none`">
194
- Set <args>--next <getopt-option-next/></args> (forward
195
- remaining list tokens to the downstream skill).
196
- </if>
207
+ Set <args></args> (empty). Do *not* forward any remaining
208
+ `--next` list tokens, because the `ase:ase-task-delete`
209
+ skill accepts only an optional `[<id>]` argument and no
210
+ `--next` option; remaining tokens are intentionally discarded.
197
211
  Only output the following <template/> and then call the
198
212
  tool `Skill(skill: "ase:ase-task-delete", args: <args/>)`
199
213
  to invoke the `ase:ase-task-delete` skill in order to
@@ -204,3 +218,12 @@ explicitly requested by this procedure via outputs based on a <template/>!
204
218
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented -- hand-off to delete task**
205
219
  </template>
206
220
 
221
+ - If <result/> matches `OTHER: <text/>` or is any other
222
+ unrecognized value:
223
+ Treat it as `DONE` (the plan is already implemented):
224
+ only output the following <template/> and then *STOP*.
225
+
226
+ <template>
227
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented -- done**
228
+ </template>
229
+
@@ -62,5 +62,5 @@ Implement a specific task and delete the plan when done:
62
62
 
63
63
  ## SEE ALSO
64
64
 
65
- `ase-task-edit`, `ase-task-preflight`, `ase-task-reboot`,
66
- `ase-task-view`, `ase-task-delete`.
65
+ [`ase-task-edit`](../ase-task-edit/help.md), [`ase-task-preflight`](../ase-task-preflight/help.md), [`ase-task-reboot`](../ase-task-reboot/help.md),
66
+ [`ase-task-view`](../ase-task-view/help.md), [`ase-task-delete`](../ase-task-delete/help.md).
@@ -27,7 +27,7 @@ List Task Plans
27
27
  *List* all available *task plans* of the current project.
28
28
  </objective>
29
29
 
30
- 1. Call the `ase_task_list(verbose: "<getopt-option-verbose/>")` tool from
30
+ 1. Call the `ase_task_list(verbose: <getopt-option-verbose/>)` tool from
31
31
  the `ase` MCP server. The result is a structured object with a
32
32
  `tasks` array where each entry has an `id` field, and -- if
33
33
  <getopt-option-verbose/> is `true` -- additionally an `mtime` field
@@ -39,5 +39,5 @@ List all task ids together with their last-modified timestamps:
39
39
 
40
40
  ## SEE ALSO
41
41
 
42
- `ase-task-id`, `ase-task-view`, `ase-task-edit`,
43
- `ase-task-rename`, `ase-task-delete`.
42
+ [`ase-task-id`](../ase-task-id/help.md), [`ase-task-view`](../ase-task-view/help.md), [`ase-task-edit`](../ase-task-edit/help.md),
43
+ [`ase-task-rename`](../ase-task-rename/help.md), [`ase-task-delete`](../ase-task-delete/help.md).
@@ -21,7 +21,7 @@ Preflight a Task Plan
21
21
 
22
22
  <expand name="getopt"
23
23
  arg1="ase-task-preflight"
24
- arg2="--next|-n=(none|DONE|EDIT|IMPLEMENT)...">
24
+ arg2="--next|-n=(none|DONE|EDIT|IMPLEMENT)... --int-reuse-task">
25
25
  $ARGUMENTS
26
26
  </expand>
27
27
 
@@ -65,7 +65,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
65
65
  </template>
66
66
  </if>
67
67
 
68
- 2. else <if condition="
68
+ 2. <elseif condition="
69
69
  <instruction/> has the format `<id/>: <text/>` where
70
70
  <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
71
71
  <text/> is *empty*
@@ -80,9 +80,9 @@ explicitly requested by this procedure via outputs based on a <template/>!
80
80
  <template>
81
81
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
82
82
  </template>
83
- </if>
83
+ </elseif>
84
84
 
85
- 3. else <if condition="<instruction/> is NOT empty">
85
+ 3. <elseif condition="<instruction/> is NOT empty">
86
86
  The argument is neither empty nor a valid task id. As this
87
87
  skill only accepts an optional `[<id>]` argument and *never*
88
88
  a free-text instruction, only output the following <template/>
@@ -91,13 +91,25 @@ explicitly requested by this procedure via outputs based on a <template/>!
91
91
  <template>
92
92
  ⧉ **ASE**: ☻ skill: **ase-task-preflight**, ▶ ERROR: expected single `[<id>]` argument
93
93
  </template>
94
- </if>
94
+ </elseif>
95
95
 
96
96
  2. **Determine Operation:**
97
97
 
98
- 1. Call the `ase_task_load(id: "<ase-task-id/>")` tool of the `ase` MCP
99
- server to load the current task plan content and set <text/> to
100
- the `text` output field of the `ase_task_load` tool call.
98
+ 1. Determine the current task plan content:
99
+
100
+ <if condition="<getopt-option-int-reuse-task/> is equal `true`">
101
+ Set <text/> to the `text` argument of the most recent
102
+ `ase_task_save(id: '<ase-task-id/>', ...)` tool call,
103
+ *without* calling `ase_task_load` again. Set <status>plan
104
+ reused</status>. Do not output anything.
105
+ </if>
106
+ <else>
107
+ Call the `ase_task_load(id: "<ase-task-id/>")` tool of the
108
+ `ase` MCP server to load the current task plan content and
109
+ set <text/> to the `text` output field of this `ase_task_load`
110
+ tool call. Do not output anything related to this MCP tool
111
+ call. Set <status>plan loaded</status>.
112
+ </else>
101
113
 
102
114
  - If <text/> starts with `ERROR:` or `WARNING:`:
103
115
  Set <content></content> (set content to empty).
@@ -110,12 +122,13 @@ explicitly requested by this procedure via outputs based on a <template/>!
110
122
  Only output the following <template/>:
111
123
 
112
124
  <template>
113
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
125
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
114
126
  </template>
115
127
 
116
128
  2. If the <content/> is still empty, complain and tell the user to
117
129
  use the `ase-code-resolve`, `ase-code-refactor`, `ase-code-craft`,
118
- or `ase-task-edit` skills first to create a task plan.
130
+ or `ase-task-edit` skills first to create a task plan. Then
131
+ immediately stop processing this skill.
119
132
 
120
133
  3. **Create Implementation Draft:**
121
134
 
@@ -140,12 +153,12 @@ explicitly requested by this procedure via outputs based on a <template/>!
140
153
 
141
154
  </template>
142
155
 
143
- 3. <if condition="<content/> contains '✎ modified:'">
156
+ 3. <if condition="<content/> contains '⚙ Modified:'">
144
157
  Update <timestamp-modified/> with the current time in
145
158
  ISO-style format, which has to be determined by calling the
146
159
  `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
147
160
  MCP server and use the `text` field of its response. Update
148
- <content/> with the new `✎ modified: **<timestamp-modified/>**`.
161
+ <content/> with the new `Modified: <timestamp-modified/>`.
149
162
  Do not output anything.
150
163
  </if>
151
164
 
@@ -183,9 +196,11 @@ explicitly requested by this procedure via outputs based on a <template/>!
183
196
  </template>
184
197
 
185
198
  - If <getopt-option-next/> is equal to `none`:
186
- Let the *user interactively choose* what to do as the next step.
199
+ Let the *user interactively choose* what to do as the next
200
+ step. For this you *MUST* use the custom `custom-dialog` and
201
+ *NOT* the `AskUserQuestion` based "user-dialog":
187
202
 
188
- <expand name="user-dialog">
203
+ <expand name="custom-dialog">
189
204
  Next Step: How would you like to proceed with the plan?
190
205
  DONE: Stop processing.
191
206
  EDIT: Hand processing off to editing.
@@ -202,13 +217,12 @@ explicitly requested by this procedure via outputs based on a <template/>!
202
217
  </template>
203
218
 
204
219
  - If <result/> is `EDIT`:
205
- Set <args></args> (empty).
220
+ Set <args>--int-reuse-task</args>.
206
221
  <if condition="<getopt-option-next/> is not equal `none`">
207
- Set <args>--next <getopt-option-next/></args> (forward
208
- remaining list tokens to the downstream skill).
222
+ Set <args><args/> --next <getopt-option-next/></args>
209
223
  </if>
210
224
  Only output the following <template/> and then call the
211
- tool `Skill(skill: "ase:ase-task-edit", args: <args/>)`
225
+ tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`
212
226
  to invoke the `ase:ase-task-edit` skill in order to *edit*
213
227
  the updated plan. Immediately stop processing the current
214
228
  skill once the `Skill` tool was used.
@@ -218,13 +232,12 @@ explicitly requested by this procedure via outputs based on a <template/>!
218
232
  </template>
219
233
 
220
234
  - If <result/> is `IMPLEMENT`:
221
- Set <args></args> (empty).
235
+ Set <args>--int-reuse-task</args>.
222
236
  <if condition="<getopt-option-next/> is not equal `none`">
223
- Set <args>--next <getopt-option-next/></args> (forward
224
- remaining list tokens to the downstream skill).
237
+ Set <args><args/> --next <getopt-option-next/></args>
225
238
  </if>
226
239
  Only output the following <template/> and then call the
227
- tool `Skill(skill: "ase:ase-task-implement", args: <args/>)`
240
+ tool `Skill(skill: "ase:ase-task-implement", args: "<args/>")`
228
241
  to invoke the `ase:ase-task-implement` skill in order to
229
242
  *implement* the updated plan. Immediately stop processing
230
243
  the current skill once the `Skill` tool was used.
@@ -233,3 +246,12 @@ explicitly requested by this procedure via outputs based on a <template/>!
233
246
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to implement**
234
247
  </template>
235
248
 
249
+ - If <result/> matches `OTHER: <text/>` or is any other
250
+ unrecognized value:
251
+ Treat it as `DONE` (the plan is already preflighted):
252
+ only output the following <template/> and then *STOP*.
253
+
254
+ <template>
255
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- done**
256
+ </template>
257
+
@@ -16,7 +16,7 @@ The `ase-task-preflight` skill performs a *preflight* (dry-run,
16
16
  test-drive) of the *implementation* of a task plan by creating a
17
17
  draft for a corresponding, complete *artifact change set* in
18
18
  *unified diff* format. The draft is appended to the task plan as
19
- a `※ IMPLEMENTATION DRAFT` section (replacing any previous draft).
19
+ an `IMPLEMENTATION DRAFT` section (replacing any previous draft).
20
20
  No source files are modified.
21
21
 
22
22
  After the preflight, the user is asked whether to stop, hand
@@ -59,5 +59,5 @@ Preflight a specific task and hand off to implementation when done:
59
59
 
60
60
  ## SEE ALSO
61
61
 
62
- `ase-task-edit`, `ase-task-implement`, `ase-task-reboot`,
63
- `ase-task-view`.
62
+ [`ase-task-edit`](../ase-task-edit/help.md), [`ase-task-implement`](../ase-task-implement/help.md), [`ase-task-reboot`](../ase-task-reboot/help.md),
63
+ [`ase-task-view`](../ase-task-view/help.md).