@rse/ase 0.9.55 → 0.9.57

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 (86) hide show
  1. package/dst/ase-config.js +72 -31
  2. package/dst/ase-getopt.js +3 -1
  3. package/dst/ase-hook.js +5 -3
  4. package/dst/ase-markdown.js +7 -4
  5. package/dst/ase-service.js +1 -1
  6. package/dst/ase-setup.js +4 -2
  7. package/dst/ase-statusline.js +6 -8
  8. package/dst/ase-task.js +37 -11
  9. package/package.json +5 -5
  10. package/plugin/.claude-plugin/plugin.json +1 -1
  11. package/plugin/.codex-plugin/plugin.json +1 -1
  12. package/plugin/.github/plugin/plugin.json +1 -1
  13. package/plugin/agents/ase-code-analyze.md +1 -1
  14. package/plugin/agents/ase-code-lint.md +4 -4
  15. package/plugin/agents/ase-meta-chat.md +1 -1
  16. package/plugin/agents/ase-meta-proximity.md +1 -1
  17. package/plugin/meta/ase-common-code.md +168 -1
  18. package/plugin/meta/ase-common-task.md +31 -13
  19. package/plugin/meta/ase-constitution.md +3 -3
  20. package/plugin/meta/ase-control.md +7 -7
  21. package/plugin/meta/ase-dialog.md +5 -4
  22. package/plugin/meta/ase-format-arch.md +6 -21
  23. package/plugin/meta/ase-format-meta.md +15 -2
  24. package/plugin/meta/ase-format-spec.md +9 -24
  25. package/plugin/meta/ase-format-task.md +2 -2
  26. package/plugin/meta/ase-getopt.md +1 -1
  27. package/plugin/meta/ase-persona.md +3 -3
  28. package/plugin/meta/ase-skill.md +14 -24
  29. package/plugin/meta/ase-tenets.md +5 -5
  30. package/plugin/package.json +2 -2
  31. package/plugin/skills/ase-arch-analyze/SKILL.md +2 -2
  32. package/plugin/skills/ase-arch-analyze/help.md +1 -1
  33. package/plugin/skills/ase-arch-discover/SKILL.md +9 -7
  34. package/plugin/skills/ase-code-analyze/SKILL.md +1 -1
  35. package/plugin/skills/ase-code-analyze/help.md +1 -1
  36. package/plugin/skills/ase-code-craft/SKILL.md +2 -153
  37. package/plugin/skills/ase-code-craft/help.md +1 -1
  38. package/plugin/skills/ase-code-explain/SKILL.md +3 -3
  39. package/plugin/skills/ase-code-insight/SKILL.md +9 -7
  40. package/plugin/skills/ase-code-lint/SKILL.md +7 -5
  41. package/plugin/skills/ase-code-refactor/SKILL.md +4 -155
  42. package/plugin/skills/ase-code-resolve/SKILL.md +48 -173
  43. package/plugin/skills/ase-code-resolve/help.md +15 -4
  44. package/plugin/skills/ase-docs-distill/SKILL.md +2 -2
  45. package/plugin/skills/ase-docs-distill/help.md +1 -1
  46. package/plugin/skills/ase-docs-proofread/SKILL.md +7 -3
  47. package/plugin/skills/ase-help-intent/SKILL.md +33 -9
  48. package/plugin/skills/ase-help-skill/SKILL.md +1 -1
  49. package/plugin/skills/ase-meta-brainstorm/SKILL.md +11 -2
  50. package/plugin/skills/ase-meta-changelog/SKILL.md +13 -8
  51. package/plugin/skills/ase-meta-chat/SKILL.md +9 -0
  52. package/plugin/skills/ase-meta-commit/SKILL.md +11 -1
  53. package/plugin/skills/ase-meta-compat/SKILL.md +2 -2
  54. package/plugin/skills/ase-meta-config/help.md +3 -2
  55. package/plugin/skills/ase-meta-diaboli/SKILL.md +12 -3
  56. package/plugin/skills/ase-meta-diff/SKILL.md +11 -13
  57. package/plugin/skills/ase-meta-eli5/SKILL.md +3 -3
  58. package/plugin/skills/ase-meta-eli5/help.md +1 -1
  59. package/plugin/skills/ase-meta-evaluate/SKILL.md +3 -3
  60. package/plugin/skills/ase-meta-quorum/SKILL.md +17 -17
  61. package/plugin/skills/ase-meta-quotes/SKILL.md +1 -1
  62. package/plugin/skills/ase-meta-review/SKILL.md +7 -5
  63. package/plugin/skills/ase-meta-review/help.md +2 -2
  64. package/plugin/skills/ase-meta-search/SKILL.md +18 -0
  65. package/plugin/skills/ase-meta-steelman/SKILL.md +11 -2
  66. package/plugin/skills/ase-meta-why/SKILL.md +15 -6
  67. package/plugin/skills/ase-meta-why/help.md +3 -3
  68. package/plugin/skills/ase-sync-export/SKILL.md +2 -1
  69. package/plugin/skills/ase-sync-export/help.md +1 -1
  70. package/plugin/skills/ase-sync-reconcile/SKILL.md +16 -2
  71. package/plugin/skills/ase-task-condense/SKILL.md +13 -67
  72. package/plugin/skills/ase-task-delete/SKILL.md +1 -1
  73. package/plugin/skills/ase-task-dissect/SKILL.md +5 -18
  74. package/plugin/skills/ase-task-edit/SKILL.md +49 -22
  75. package/plugin/skills/ase-task-grill/SKILL.md +31 -129
  76. package/plugin/skills/ase-task-id/SKILL.md +12 -2
  77. package/plugin/skills/ase-task-implement/SKILL.md +11 -7
  78. package/plugin/skills/ase-task-implement/help.md +1 -1
  79. package/plugin/skills/ase-task-list/SKILL.md +9 -0
  80. package/plugin/skills/ase-task-preflight/SKILL.md +17 -33
  81. package/plugin/skills/ase-task-reboot/SKILL.md +24 -100
  82. package/plugin/skills/ase-task-reboot/help.md +1 -1
  83. package/plugin/skills/ase-task-view/SKILL.md +4 -2
  84. package/dst/ase-guidance.js +0 -89
  85. package/dst/ase-persona.js +0 -87
  86. package/dst/ase-stdout.js +0 -18
@@ -138,91 +138,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
138
138
 
139
139
  4. <step id="STEP 4: Choose Refactoring Approaches">
140
140
 
141
- You *MUST* perform the following sub-steps *internally* and *without
142
- any output* until and including the recommendation decision. Only
143
- sub-steps 4-7 below are allowed to produce output; sub-steps 4-6 only if
144
- <getopt-option-auto/> is equal `false` *and* <ase-project-boxing/>
145
- is *not* equal `black`.
146
-
147
- If <getopt-option-auto/> is equal `true` or <ase-project-boxing/> is
148
- equal `black`, *skip* the reporting sub-steps 4-6 entirely (they
149
- perform no output at all) to speed up processing.
150
-
151
- 1. *Propose* a corresponding *refactoring approach*, optionally
152
- including some *alternative* refactoring approaches. Do *not*
153
- output anything in this sub-step.
154
-
155
- 2. *Reflect* on and *critique* the proposed approaches by deriving,
156
- per approach, a small set of concrete *pros* and *cons*. Do
157
- *not* output anything in this sub-step.
158
-
159
- 3. Based on the reflection, *decide* which approach to recommend
160
- and annotate it with an <annotation/> of
161
- ` ⚝ **RECOMMENDATION** ⚝`. All other approaches receive an
162
- empty <annotation/>. Do *not* output anything in this sub-step.
163
-
164
- 4. Indicate start of reporting by showing the following <template/>:
165
-
166
- <template>
167
- <ase-tpl-head title="APPROACHES"/>
168
- </template>
169
-
170
- 5. Now report each approach with the following <template/>,
171
- inlining its pros/cons derived in sub-step 2, and do not output
172
- anything else in this step:
173
-
174
- <template>
175
- ● **APPROACH A<n/>**<annotation/>: **<summary/>**
176
- ○ [...]
177
- ⊕ *PRO*: [...]
178
- ⊖ *CON*: [...]
179
- </template>
180
-
181
- Hints:
182
-
183
- - Give a short one-sentence <summary/> of the refactoring
184
- approach plus *precise* and *ultra brief and concise*
185
- refactoring information. Try to keep the number of bullet
186
- points (`○ [...]`) in the range of 1-4.
187
-
188
- 6. Indicate end of reporting by showing the following <template/>:
189
-
190
- <template>
191
- <ase-tpl-foot title="APPROACHES"/>
192
- </template>
193
-
194
- 7. <if condition="<getopt-option-auto/> is not equal `true` and <ase-project-boxing/> is not equal `black`">
195
-
196
- In the following, you *MUST* *NOT* use your built-in
197
- <user-dialog-tool/> tool! Instead, you *MUST* just show a
198
- custom dialog according to the expanded `custom-dialog`
199
- definition. You *MUST* closely follow this definition.
200
-
201
- Let the user choose the preferred approach A<n/> by raising
202
- a question with the following custom dialog, where per
203
- approach A<n/>, you determine an ultra brief summary
204
- <short-summary/> and then use the answer option `A<n/>:
205
- ⚝ **RECOMMENDATION** ⚝ - <short-summary/>` for your
206
- recommended approach plus zero or more answer options `A<n/>:
207
- <short-summary/>` for all other approaches:
208
-
209
- <expand name="custom-dialog" arg1="--no-other">
210
- Select Approach: Select your preferred refactoring approach to follow?
211
- A<n/>: <short-summary/>
212
- [...]
213
- </expand>
214
-
215
- </if>
216
- <else>
217
-
218
- Set <n/> to the number of the refactoring approach A<n/> you recommend.
219
- Output a hint with the following <template/>:
220
-
221
- <template>
222
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **auto-chosen approach A<n/>**
223
- </template>
224
-
225
- </else>
141
+ <expand name="code-approaches" arg1="refactoring" arg2="refactoring"></expand>
226
142
 
227
143
  </step>
228
144
 
@@ -265,76 +181,9 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
265
181
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan created**
266
182
  </template>
267
183
 
268
- 5. Directly pass-through control to the next skill:
269
-
270
- Treat <getopt-option-next/> as a comma-separated chronological
271
- list of pre-selected next-step tokens. *Peek* the *first* token
272
- as <head/> (or `none` if the list is `none`/empty).
273
- Set <args>--int-reuse-task</args>.
274
-
275
- 1. <if condition="<head/> is equal `DONE`">
276
- Consume the head: set <getopt-option-next/> to the remaining
277
- tokens (joined back with `,`, or `none` if empty). `DONE`
278
- means the freshly composed plan is finalized as-is, so do
279
- *not* hand off to `ase-task-edit`. Only output the following
280
- <template/> and then *STOP*. Do *not* implement the plan.
281
-
282
- <template>
283
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- done**
284
- </template>
285
- </if>
286
-
287
- 2. <elseif condition="<head/> is equal `IMPLEMENT`">
288
- Consume the head: set <getopt-option-next/> to the remaining
289
- tokens (joined back with `,`, or `none` if empty).
290
- <if condition="<getopt-option-next/> is not equal `none`">
291
- Set <args><args/> --next <getopt-option-next/></args>
292
- </if>
293
- Call the tool `Skill(skill: "ase:ase-task-implement", args: "<args/>")`
294
- to *implement* the freshly composed plan, bypassing `ase-task-edit`.
295
- </elseif>
296
-
297
- 3. <elseif condition="<head/> is equal `PREFLIGHT`">
298
- Consume the head: set <getopt-option-next/> to the remaining
299
- tokens (joined back with `,`, or `none` if empty).
300
- <if condition="<getopt-option-next/> is not equal `none`">
301
- Set <args><args/> --next <getopt-option-next/></args>
302
- </if>
303
- Call the tool `Skill(skill: "ase:ase-task-preflight", args: "<args/>")`
304
- to *preflight* the freshly composed plan, bypassing `ase-task-edit`.
305
- </elseif>
306
-
307
- 4. <elseif condition="<head/> is equal `GRILL`">
308
- Consume the head: set <getopt-option-next/> to the remaining
309
- tokens (joined back with `,`, or `none` if empty). `GRILL`
310
- is this skill's own dispatch token, *not* part of
311
- `ase-task-grill`'s `--next` vocabulary, so it must be
312
- stripped here rather than forwarded. All remaining tokens are
313
- `ase-task-grill`'s own vocabulary and are forwarded verbatim.
314
- <if condition="<getopt-option-next/> is not equal `none`">
315
- Set <args><args/> --next <getopt-option-next/></args>
316
- </if>
317
- Call the tool `Skill(skill: "ase:ase-task-grill", args: "<args/>")`
318
- to *grill* the freshly composed plan, bypassing `ase-task-edit`.
319
- </elseif>
320
-
321
- 5. <else>
322
- Hand off to `ase-task-edit`.
323
- <if condition="<head/> is equal `EDIT`">
324
- Consume the head: set <getopt-option-next/> to the remaining
325
- tokens (joined back with `,`, or `none` if empty). `EDIT`
326
- is this skill's own dispatch token, *not* part of
327
- `ase-task-edit`'s `--next` vocabulary, so it must be
328
- stripped here rather than forwarded.
329
- </if>
330
- All remaining tokens are `ase-task-edit`'s own vocabulary
331
- and are forwarded verbatim, so `ase-task-edit` consumes its
332
- own head itself.
333
- <if condition="<getopt-option-next/> is not equal `none`">
334
- Set <args><args/> --next <getopt-option-next/></args>
335
- </if>
336
- Then call the tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`.
337
- </else>
184
+ 5. Directly pass through control to the next skill:
185
+
186
+ <expand name="code-next-dispatch"></expand>
338
187
 
339
188
  </step>
340
189
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-code-resolve
3
- argument-hint: "[--help|-h] [--auto|-a] [--dry|-d] [--quick|-Q] [--next|-n <option>[,...]] [<task-id>:] <problem>"
3
+ argument-hint: "[--help|-h] [--auto|-a] [--dry|-d] [--direct|-D] [--quick|-Q] [--next|-n <option>[,...]] [<task-id>:] <problem>"
4
4
  description: >
5
5
  Resolve Problem:
6
6
  Use when user wants to "bugfix" or "fix" code or "resolve" a problem.
@@ -10,6 +10,7 @@ effort: xhigh
10
10
  allowed-tools:
11
11
  - "Skill"
12
12
  - "Agent"
13
+ - "Read"
13
14
  ---
14
15
 
15
16
  @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
@@ -23,7 +24,7 @@ Resolve Problem
23
24
 
24
25
  <expand name="getopt"
25
26
  arg1="ase-code-resolve"
26
- arg2="--auto|-a --dry|-d --quick|-Q --next|-n=(none|DONE|EDIT|GRILL|PREFLIGHT|IMPLEMENT)...">
27
+ arg2="--auto|-a --dry|-d --direct|-D --quick|-Q --next|-n=(none|DONE|EDIT|GRILL|PREFLIGHT|IMPLEMENT)...">
27
28
  $ARGUMENTS
28
29
  </expand>
29
30
 
@@ -45,9 +46,18 @@ to `true`, <getopt-option-dry/> to `true`, and <getopt-option-next/> to
45
46
  Procedure
46
47
  ---------
47
48
 
49
+ <if condition="<getopt-option-direct/> is not equal to 'true'">
48
50
  You *MUST* *NOT* call `Edit`, `Write`, `NotebookEdit`, or any
49
51
  filesystem-modifying tool during this entire skill. The *only*
50
52
  permitted way to persist artifacts is via `ase_task_save(...)`.
53
+ </if>
54
+ <else>
55
+ The `--direct`/`-D` mode applies the resolution *in place*, so STEP 4
56
+ below *requires* `Edit` and `Write` to modify the affected artifacts.
57
+ Every modification *MUST* still stay restricted to the artifacts the
58
+ resolution actually demands, and you *MUST* *NOT* call
59
+ `ase_task_save(...)`, as no task plan is composed at all.
60
+ </else>
51
61
 
52
62
  <flow>
53
63
 
@@ -120,14 +130,19 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
120
130
  ⧉ **ASE**: ⇌ problem: **<problem/>**
121
131
  </template>
122
132
 
123
- 7. Figure out what the requested <problem/> is about.
133
+ </step>
134
+
135
+ 2. <step id="STEP 2: Investigate Code Base">
136
+
137
+ 1. Check the existing source files for all code which is related to the
138
+ requested <problem/> resolution.
124
139
 
125
- 8. Ask the user for clarification if the goal of this resolution is
126
- too unclear.
140
+ 2. Check the architecture of the existing code base to understand the
141
+ overall structures and dynamics.
127
142
 
128
- 9. Do not output anything else in this step, unless you asked the user.
143
+ 3. Investigate and *figure out details* related to this problem.
129
144
 
130
- 10. Investigate and *figure out details* related to this problem.
145
+ <if condition="<getopt-option-direct/> is not equal to 'true'">
131
146
  Report those details with the following <template/>:
132
147
 
133
148
  <template>
@@ -151,10 +166,10 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
151
166
  Try to keep the number of bullet points (●) in the range of 1-4.
152
167
 
153
168
  - In case of a *complex context situation* with complex *structure*
154
- (layout, components, dependencies, etc), complex *control flow*
155
- (branching, concurrency, etc), complex *state machine* (states,
156
- transitions, etc), complex *data flow* (actors, messages, etc), or
157
- complex *data structure* (classes, entities, relationships, etc),
169
+ (layout, components, dependencies, etc.), complex *control flow*
170
+ (branching, concurrency, etc.), complex *state machine* (states,
171
+ transitions, etc.), complex *data flow* (actors, messages, etc.), or
172
+ complex *data structure* (classes, entities, relationships, etc.),
158
173
  visualize it with an optional diagram <optional-diagram/> by
159
174
  building a Mermaid specification <mermaid-spec/> (e.g. `flowchart
160
175
  TB`, `stateDiagram-v2`, `sequenceDiagram`, `classDiagram`, or
@@ -165,18 +180,9 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
165
180
  run_in_background: false)`, reproducing its
166
181
  returned fenced code block verbatim. Omit <optional-diagram/>
167
182
  entirely for simple or purely local situations.
183
+ </if>
168
184
 
169
- </step>
170
-
171
- 2. <step id="STEP 2: Investigate Code Base">
172
-
173
- 1. Check the existing source files for all code which is related to the
174
- requested <problem/> resolution.
175
-
176
- 2. Check the architecture of the existing code base to understand the
177
- overall structures and dynamics.
178
-
179
- 3. Do not output anything in this STEP 2.
185
+ 4. Do not output anything else in this STEP 2.
180
186
 
181
187
  </step>
182
188
 
@@ -190,97 +196,31 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
190
196
 
191
197
  </step>
192
198
 
193
- 4. <step id="STEP 4: Choose Problem Resolution Approaches">
194
-
195
- You *MUST* perform the following sub-steps *internally* and *without
196
- any output* until and including the recommendation decision. Only
197
- sub-steps 4-7 below are allowed to produce output; sub-steps 4-6 only if
198
- <getopt-option-auto/> is equal `false` *and* <ase-project-boxing/>
199
- is *not* equal `black`.
199
+ 4. <if condition="<getopt-option-direct/> is equal to 'true'">
200
200
 
201
- If <getopt-option-auto/> is equal `true` or <ase-project-boxing/> is
202
- equal `black`, *skip* the reporting sub-steps 4-6 entirely (they
203
- perform no output at all) to speed up processing.
201
+ <step id="STEP 4: Direct Problem Resolution">
204
202
 
205
- 1. *Propose* a corresponding *resolution approach*, optionally including
206
- some *alternative* resolution approaches. Do *not* output anything
207
- in this sub-step.
203
+ 1. Directly resolve the <problem/> by modifying the affected
204
+ *artifacts* with a corresponding, complete *change set*,
205
+ based on your gathered knowledge about the code base and your
206
+ internalized problem resolution tenets. Also, if a CHANGELOG.md
207
+ file exists, make an appropriate entry there, too.
208
208
 
209
- 2. *Reflect* on and *critique* the proposed approaches by deriving,
210
- per approach, a small set of concrete *pros* and *cons*. Do
211
- *not* output anything in this sub-step.
209
+ 2. Do not output anything else in this STEP 4. Especially, do not
210
+ output a change summary or a unified diff of the changes.
212
211
 
213
- 3. Based on the reflection, *decide* which approach to recommend
214
- and annotate it with an <annotation/> of
215
- ` ⚝ **RECOMMENDATION** ⚝`. All other approaches receive an
216
- empty <annotation/>. Do *not* output anything in this sub-step.
217
-
218
- 4. Indicate start of reporting by showing the following <template/>:
219
-
220
- <template>
221
- <ase-tpl-head title="APPROACHES"/>
222
- </template>
223
-
224
- 5. Now report each approach with the following <template/>,
225
- inlining its pros/cons derived in sub-step 2, and do not output
226
- anything else in this step:
227
-
228
- <template>
229
- ● **APPROACH A<n/>**<annotation/>: **<summary/>**
230
- ○ [...]
231
- ⊕ *PRO*: [...]
232
- ⊖ *CON*: [...]
233
- </template>
234
-
235
- Hints:
236
-
237
- - Give a short one-sentence <summary/> of the resolution
238
- approach plus *precise* and *ultra brief and concise*
239
- resolution information. Try to keep the number of bullet points
240
- (`○ [...]`) in the range of 1-4.
241
-
242
- 6. Indicate end of reporting by showing the following <template/>:
243
-
244
- <template>
245
- <ase-tpl-foot title="APPROACHES"/>
246
- </template>
247
-
248
- 7. <if condition="<getopt-option-auto/> is not equal `true` and <ase-project-boxing/> is not equal `black`">
249
-
250
- In the following, you *MUST* *NOT* use your built-in
251
- <user-dialog-tool/> tool! Instead, you *MUST* just show a
252
- custom dialog according to the expanded `custom-dialog`
253
- definition. You *MUST* closely follow this definition.
254
-
255
- Let the user choose the preferred approach A<n/> by raising
256
- a question with the following custom dialog, where per
257
- approach A<n/>, you determine an ultra brief summary
258
- <short-summary/> and then use the answer option `A<n/>:
259
- ⚝ **RECOMMENDATION** ⚝ - <short-summary/>` for your
260
- recommended approach plus zero or more answer options `A<n/>:
261
- <short-summary/>` for all other approaches:
262
-
263
- <expand name="custom-dialog" arg1="--no-other">
264
- Select Approach: Select your preferred resolution approach to follow?
265
- A<n/>: <short-summary/>
266
- [...]
267
- </expand>
268
-
269
- </if>
270
- <else>
212
+ </step>
271
213
 
272
- Set <n/> to the number of the resolution approach A<n/> you recommend.
273
- Output a hint with the following <template/>:
214
+ </if>
215
+ <else>
274
216
 
275
- <template>
276
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **auto-chosen approach A<n/>**
277
- </template>
217
+ <step id="STEP 4: Choose Problem Resolution Approaches">
278
218
 
279
- </else>
219
+ <expand name="code-approaches" arg1="resolution" arg2="resolution"></expand>
280
220
 
281
221
  </step>
282
222
 
283
- 5. <step id="STEP 5: Compose Problem Resolution Plan">
223
+ <step id="STEP 5: Compose Problem Resolution Plan">
284
224
 
285
225
  1. *Compose a plan* with code references, a precise description of the
286
226
  problem, the chosen resolution approach, a preview of the *unified
@@ -326,78 +266,13 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
326
266
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan created**
327
267
  </template>
328
268
 
329
- 6. Directly pass-through control to the next skill:
330
-
331
- Treat <getopt-option-next/> as a comma-separated chronological
332
- list of pre-selected next-step tokens. *Peek* the *first* token
333
- as <head/> (or `none` if the list is `none`/empty).
334
- Set <args>--int-reuse-task</args>.
335
-
336
- 1. <if condition="<head/> is equal `DONE`">
337
- Consume the head: set <getopt-option-next/> to the remaining
338
- tokens (joined back with `,`, or `none` if empty). `DONE`
339
- means the freshly composed plan is finalized as-is, so do
340
- *not* hand off to `ase-task-edit`. Only output the following
341
- <template/> and then *STOP*. Do *not* implement the plan.
342
-
343
- <template>
344
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- done**
345
- </template>
346
- </if>
347
-
348
- 2. <elseif condition="<head/> is equal `IMPLEMENT`">
349
- Consume the head: set <getopt-option-next/> to the remaining
350
- tokens (joined back with `,`, or `none` if empty).
351
- <if condition="<getopt-option-next/> is not equal `none`">
352
- Set <args><args/> --next <getopt-option-next/></args>
353
- </if>
354
- Call the tool `Skill(skill: "ase:ase-task-implement", args: "<args/>")`
355
- to *implement* the freshly composed plan, bypassing `ase-task-edit`.
356
- </elseif>
357
-
358
- 3. <elseif condition="<head/> is equal `PREFLIGHT`">
359
- Consume the head: set <getopt-option-next/> to the remaining
360
- tokens (joined back with `,`, or `none` if empty).
361
- <if condition="<getopt-option-next/> is not equal `none`">
362
- Set <args><args/> --next <getopt-option-next/></args>
363
- </if>
364
- Call the tool `Skill(skill: "ase:ase-task-preflight", args: "<args/>")`
365
- to *preflight* the freshly composed plan, bypassing `ase-task-edit`.
366
- </elseif>
367
-
368
- 4. <elseif condition="<head/> is equal `GRILL`">
369
- Consume the head: set <getopt-option-next/> to the remaining
370
- tokens (joined back with `,`, or `none` if empty). `GRILL`
371
- is this skill's own dispatch token, *not* part of
372
- `ase-task-grill`'s `--next` vocabulary, so it must be
373
- stripped here rather than forwarded. All remaining tokens are
374
- `ase-task-grill`'s own vocabulary and are forwarded verbatim.
375
- <if condition="<getopt-option-next/> is not equal `none`">
376
- Set <args><args/> --next <getopt-option-next/></args>
377
- </if>
378
- Call the tool `Skill(skill: "ase:ase-task-grill", args: "<args/>")`
379
- to *grill* the freshly composed plan, bypassing `ase-task-edit`.
380
- </elseif>
381
-
382
- 5. <else>
383
- Hand off to `ase-task-edit`.
384
- <if condition="<head/> is equal `EDIT`">
385
- Consume the head: set <getopt-option-next/> to the remaining
386
- tokens (joined back with `,`, or `none` if empty). `EDIT`
387
- is this skill's own dispatch token, *not* part of
388
- `ase-task-edit`'s `--next` vocabulary, so it must be
389
- stripped here rather than forwarded.
390
- </if>
391
- All remaining tokens are `ase-task-edit`'s own vocabulary
392
- and are forwarded verbatim, so `ase-task-edit` consumes its
393
- own head itself.
394
- <if condition="<getopt-option-next/> is not equal `none`">
395
- Set <args><args/> --next <getopt-option-next/></args>
396
- </if>
397
- Then call the tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`.
398
- </else>
269
+ 6. Directly pass through control to the next skill:
270
+
271
+ <expand name="code-next-dispatch"></expand>
399
272
 
400
273
  </step>
401
274
 
275
+ </else>
276
+
402
277
  </flow>
403
278
 
@@ -9,6 +9,7 @@
9
9
  [`--help`|`-h`]
10
10
  [`--auto`|`-a`]
11
11
  [`--dry`|`-d`]
12
+ [`--direct`|`-D`]
12
13
  [`--quick`|`-Q`]
13
14
  [`--next`|`-n` *option*[,...]]
14
15
  [*task-id*:] *problem*
@@ -27,10 +28,11 @@ or `T1`) previously produced by `ase-code-analyze` or
27
28
  `ase-arch-analyze` and persisted in the `ase` MCP key/value store
28
29
  under `ase-issue-<id>`.
29
30
 
30
- The skill does *not* directly modify source files. It persists the
31
- plan via `ase_task_save` and then hands off to `ase-task-edit`,
32
- `ase-task-preflight`, or `ase-task-implement`, as selected by
33
- `--next`.
31
+ By default the skill does *not* directly modify source files. It
32
+ persists the plan via `ase_task_save` and then hands off to
33
+ `ase-task-edit`, `ase-task-preflight`, or `ase-task-implement`, as
34
+ selected by `--next`. Only under `--direct` it skips the plan
35
+ entirely and applies the change set to the affected artifacts itself.
34
36
 
35
37
  ## OPTIONS
36
38
 
@@ -45,6 +47,15 @@ plan via `ase_task_save` and then hands off to `ase-task-edit`,
45
47
  type-checker, or program execution) once the source files have
46
48
  been modified.
47
49
 
50
+ `--direct`|`-D`:
51
+ Resolve the problem *immediately* and *in place*: skip the
52
+ resolution approaches, the interactive dialog, and the entire task
53
+ plan ceremony, and directly apply the complete change set to the
54
+ affected artifacts, including a corresponding entry in an existing
55
+ `CHANGELOG.md` file. In this mode `--auto`, `--dry`, `--quick`, and
56
+ `--next` have no effect, as neither approaches are proposed nor a
57
+ plan is composed.
58
+
48
59
  `--quick`|`-Q`:
49
60
  Shorthand alias for `-a -d -n IMPLEMENT,DELETE`: automatically pick
50
61
  the recommended resolution approach, compose the plan *without* the
@@ -77,7 +77,7 @@ Procedure
77
77
 
78
78
  </if>
79
79
 
80
- You *MUST* *NOT* output anything in this STEP 1.
80
+ You *MUST* *NOT* output anything else in this STEP 1.
81
81
 
82
82
  </step>
83
83
 
@@ -141,7 +141,7 @@ Procedure
141
141
 
142
142
  </template>
143
143
 
144
- In the <location/>, markup the line-range reference as
144
+ In the <location/>, mark up the line-range reference as
145
145
  code (with backticks) and prepend it with `▢ `.
146
146
 
147
147
  Keep the overall report *concise* and *brief*. Do *not* output any
@@ -15,7 +15,7 @@
15
15
  The `ase-docs-distill` skill reads a *provided document* and distills it
16
16
  into a *flat*, *importance-ranked* list of its *key points*. The
17
17
  *document-reference* is resolved *probe-as-file-first*: if the argument names
18
- a *readable file* it is read from disk, otherwise the argument is taken
18
+ a *readable file* it is read from disk; otherwise the argument is taken
19
19
  *verbatim* as *pasted text*. The document is read *silently* - only the
20
20
  final ranked list is shown - so even a large document does not flood the
21
21
  transcript.
@@ -217,7 +217,8 @@ Analyze documents for spelling, punctuation, or grammar errors
217
217
 
218
218
  Set <old-start/> to the 1-based line number of the *first*
219
219
  old-side hunk line: if <context-before/> is non-empty, that is
220
- its line (one before <line/>); otherwise it is <line/> itself
220
+ the line of its *first* context line, i.e. <line/> minus the
221
+ number of lines in <context-before/>; otherwise it is <line/> itself
221
222
  (the first line of <old-text/>). For a hunk that *only inserts*
222
223
  new lines (empty <old-text/> *and* empty context), set it to the
223
224
  line *before* which the insertion happens, clamped to a minimum
@@ -288,8 +289,11 @@ Analyze documents for spelling, punctuation, or grammar errors
288
289
  proposal (<old-text/> stays anchored to the existing text
289
290
  at <file/>:<line/>; <new-text/> and <description/> carry the
290
291
  refinement) so the subsequent rendering and any `Edit` use
291
- the new proposal rather than the original. Then *go back* to
292
- substep 2 of this `for`-iteration. There is *no* cap on
292
+ the new proposal rather than the original. Then *re-apply*
293
+ the minimal-form normalization of substep 1 to the refined
294
+ <old-text/> and <new-text/> (so the re-rendered diff again
295
+ shows exactly the changed lines) and *go back* to substep 2
296
+ of this `for`-iteration. There is *no* cap on
293
297
  refinement rounds - keep refining until the user picks
294
298
  `ACCEPT` or `REJECT`.
295
299
 
@@ -81,14 +81,18 @@ catalog you match <intent/> against:
81
81
  - Set <rationale/> to a *very brief*, single-sentence
82
82
  justification of why the selected skill and its options match
83
83
  <intent/>.
84
+ - Set <matched>yes</matched>.
84
85
 
85
86
  2. *Guard No Match*:
86
87
 
87
88
  <if condition="no skill in <corpus/> adequately matches <intent/>">
88
- Output the following <template/> and then *continue* the *loop*
89
- at sub-step 4 to prompt the user for a refined or clearer intent
90
- via the dialog's free-text channel (do *not* stop and do *not*
91
- render a command):
89
+ Set <matched>no</matched> and discard the inadequate selection of
90
+ sub-step 1 by setting <name></name>, <arguments></arguments>, and
91
+ <command></command> (all set to empty), so that no stale command
92
+ can survive into the dialog of sub-step 4. Then output the
93
+ following <template/> and *continue* the *loop* at sub-step 4 to
94
+ prompt the user for a refined or clearer intent via the dialog's
95
+ free-text channel (do *not* stop and do *not* render a command):
92
96
 
93
97
  <template>
94
98
  <ase-tpl-bullet-secondary/> **WARNING**: no confident match for the intent -- please refine or clarify it.
@@ -116,16 +120,27 @@ catalog you match <intent/> against:
116
120
  dialog according to the expanded `custom-dialog` definition. You
117
121
  *MUST* closely follow this definition.
118
122
 
119
- Let the user decide what to do with the generated command by
120
- raising a question with the following custom dialog (invoked with
121
- `--other`, so that any free-text instruction is accepted as an
122
- intent refinement):
123
+ Let the user decide how to proceed by raising a question with the
124
+ following custom dialog (invoked with `--other`, so that any
125
+ free-text instruction is accepted as an intent refinement). Which
126
+ dialog is raised depends on <matched/>, so that `EXECUTE` is
127
+ offered *only* when a command was actually generated in sub-step 1
128
+ *and* rendered in sub-step 3:
123
129
 
130
+ <if condition="<matched/> is `no`">
131
+ <expand name="custom-dialog" arg1="--other">
132
+ Dispatch: What would you like to do with the unmatched intent?
133
+ REFINE: Refine or clarify the intent.
134
+ CANCEL: Cancel this dialog.
135
+ </expand>
136
+ </if>
137
+ <else>
124
138
  <expand name="custom-dialog" arg1="--other">
125
139
  Dispatch: What would you like to do with the generated command?
126
140
  EXECUTE: Execute the generated command now.
127
141
  CANCEL: Cancel this dialog.
128
142
  </expand>
143
+ </else>
129
144
 
130
145
  Check the tool <result/> and dispatch accordingly:
131
146
 
@@ -133,7 +148,16 @@ catalog you match <intent/> against:
133
148
  *Break* out of the *loop* and stop processing without any
134
149
  further output.
135
150
 
136
- - If <result/> is `EXECUTE`:
151
+ - If <result/> is `REFINE`, or <result/> is `EXECUTE` while
152
+ <matched/> is `no`: do *not* execute anything -- output the
153
+ following <template/> and *continue* the *loop* at sub-step 4
154
+ to obtain a refined intent via the dialog's free-text channel:
155
+
156
+ <template>
157
+ <ase-tpl-bullet-secondary/> **HINT**: please enter a refined or clearer intent as free text.
158
+ </template>
159
+
160
+ - If <result/> is `EXECUTE` (which implies <matched/> is `yes`):
137
161
  *Break* out of the *loop*, output the following <template/>,
138
162
  and then call the tool `Skill(skill: "ase:<name/>", args:
139
163
  "<arguments/>")` to *execute* the generated command:
@@ -35,7 +35,7 @@ skill name, abbreviation of it, or description of its purpose:
35
35
  <skill-ref><getopt-arguments/></skill-ref>
36
36
  </objective>
37
37
 
38
- The following <catalog/> is index of all ASE skills -- one
38
+ The following <catalog/> is the index of all ASE skills -- one
39
39
  `⎈ **<group/>**` entry per skill group and one
40
40
  ``○ `<name/>`: <purpose/>`` entry per skill -- and this is
41
41
  the *sole* index <skill-ref/> is resolved against: