@rse/ase 2.0.6 → 2.0.8

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 (68) hide show
  1. package/dst/ase-agent-definition-api.d.ts +2 -0
  2. package/dst/ase-agent-definition-core.js +24 -3
  3. package/dst/ase-agent-fleet.js +2 -1
  4. package/dst/ase-agent-relay-client.js +3 -4
  5. package/dst/ase-agent-runtime-engine.js +22 -4
  6. package/dst/ase-agent-runtime-tool.js +10 -8
  7. package/dst/ase-agent-runtime.js +8 -4
  8. package/dst/ase-config-schema.js +4 -1
  9. package/dst/ase-lib-fetch.js +12 -0
  10. package/dst/ase-lib-server-cli.js +8 -5
  11. package/dst/ase-man-catalog.js +1 -1
  12. package/dst/ase-task-board-diff.js +120 -0
  13. package/dst/ase-task-board-tui-control.js +8 -5
  14. package/dst/ase-task-board-tui-model.js +54 -14
  15. package/dst/ase-task-board-tui-popup.js +41 -8
  16. package/dst/ase-task-board-tui.js +42 -27
  17. package/dst/ase-task-board-web-client.css +1 -1
  18. package/dst/ase-task-board-web-client.html +16 -0
  19. package/dst/ase-task-board-web-client.js +33 -33
  20. package/dst/ase-task-board-web-server.js +44 -9
  21. package/dst/ase-task-board.js +12 -4
  22. package/dst/ase-task-store-client.js +4 -5
  23. package/dst/ase-task-store-plugin-gitea.js +3 -3
  24. package/dst/man/ase-agent-adhoc.md +25 -6
  25. package/dst/man/ase-agent-condenser.md +7 -0
  26. package/dst/man/ase-agent-editor.md +7 -0
  27. package/dst/man/ase-agent-estimator.md +7 -0
  28. package/dst/man/ase-agent-fleet.md +7 -4
  29. package/dst/man/ase-agent-implementer.md +7 -0
  30. package/dst/man/ase-agent-integrator.md +7 -0
  31. package/dst/man/ase-agent-qualifier.md +7 -0
  32. package/dst/man/ase-agent-rebooter.md +7 -0
  33. package/dst/man/ase-agent-researcher.md +7 -0
  34. package/dst/man/ase-config-init.md +2 -1
  35. package/dst/man/ase-config.md +5 -0
  36. package/dst/man/ase-task-board.md +44 -2
  37. package/package.json +11 -10
  38. package/plugin/.claude-plugin/plugin.json +1 -1
  39. package/plugin/.codex-plugin/plugin.json +1 -1
  40. package/plugin/.github/plugin/plugin.json +1 -1
  41. package/plugin/meta/ase-common-task.md +33 -1
  42. package/plugin/meta/ase-control.md +14 -0
  43. package/plugin/meta/ase-format-specbook.yaml +9 -9
  44. package/plugin/meta/ase-skill.md +7 -0
  45. package/plugin/mods/ase-mods-common.ts +73 -42
  46. package/plugin/mods/ase-mods-help-hint.ts +1 -1
  47. package/plugin/mods/ase-mods-task-edit.ts +427 -0
  48. package/plugin/mods/ase-mods.ts +45 -14
  49. package/plugin/skills/ase-code-edit/SKILL.md +53 -16
  50. package/plugin/skills/ase-code-edit/help.md +26 -13
  51. package/plugin/skills/ase-code-lint/SKILL.md +7 -3
  52. package/plugin/skills/ase-help-intent/data.md +248 -36
  53. package/plugin/skills/ase-help-skill/catalog.md +1 -0
  54. package/plugin/skills/ase-meta-workflow/workflow.txt +2 -0
  55. package/plugin/skills/ase-repo-changelog/SKILL.md +29 -10
  56. package/plugin/skills/ase-repo-changelog/help.md +5 -1
  57. package/plugin/skills/ase-repo-commit/SKILL.md +4 -1
  58. package/plugin/skills/ase-repo-dissect/help.md +2 -1
  59. package/plugin/skills/ase-repo-stage/SKILL.md +459 -0
  60. package/plugin/skills/ase-repo-stage/help.md +120 -0
  61. package/plugin/skills/ase-spec-edit/SKILL.md +20 -12
  62. package/plugin/skills/ase-spec-edit/help.md +22 -14
  63. package/plugin/skills/ase-task-edit/SKILL.md +114 -9
  64. package/plugin/skills/ase-task-edit/help.md +60 -0
  65. package/plugin/skills/ase-task-grill/SKILL.md +35 -20
  66. package/plugin/skills/ase-task-grill/help.md +18 -8
  67. /package/plugin/mods/{ase-mods-evaluate.ts → ase-mods-meta-evaluate.ts} +0 -0
  68. /package/plugin/mods/{ase-mods-grill.ts → ase-mods-task-grill.ts} +0 -0
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-spec-edit
3
- argument-hint: "[--help|-h] [--approach|-a] [--grill|-g] [--grill-rounds|-r <n>] [--grill-until|-u MUST|SHOULD|MAY] [--grill-perspective|-p <perspective>] [--grill-ground|-G] [--verify|-v] [--worktree|-w <name>[:<branch>]] [--loop|-l] [<query>]"
3
+ argument-hint: "[--help|-h] [--approach|-a] [--grill|-g] [--grill-rounds|-r <n>] [--grill-until|-u MUST|SHOULD|MAY] [--grill-perspective|-p <perspective>] [--grill-ground|-G] [--verify|-v light|none|full] [--worktree|-w <name>[:<branch>]] [--loop|-l] [<query>]"
4
4
  description: >
5
5
  Edit Specification: Use when the user wants to "edit" the
6
6
  SpecBook-based specification (SPEC) in one shot from a query, with
@@ -22,7 +22,7 @@ Edit Specification
22
22
 
23
23
  <expand name="getopt"
24
24
  arg1="ase-spec-edit"
25
- arg2="--approach|-a --grill|-g --grill-rounds|-r=1 --grill-until|-u=(MUST|SHOULD|MAY) --grill-perspective|-p= --grill-ground|-G --verify|-v --worktree|-w= --loop|-l">
25
+ arg2="--approach|-a --grill|-g --grill-rounds|-r=1 --grill-until|-u=(MUST|SHOULD|MAY) --grill-perspective|-p= --grill-ground|-G --verify|-v=(light|none|full) --worktree|-w= --loop|-l">
26
26
  $ARGUMENTS
27
27
  </expand>
28
28
 
@@ -239,11 +239,18 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
239
239
  arg3="file paths, artifact ids, object kinds, object ids, property keys, references, and literal values"
240
240
  arg4="the specification"
241
241
  arg5="">
242
- <if condition="<getopt-option-verify/> is not equal `true`">
242
+ <if condition="<getopt-option-verify/> is equal `none`">
243
243
  Raise *no* questions at all of focus area `REGRESSION`
244
- or `CONFIRMATION`, as without `--verify` no verification
245
- takes place which could honor their decisions.
246
- </if></expand>
244
+ or `CONFIRMATION`, as under `--verify none` no
245
+ verification takes place which could honor their
246
+ decisions.
247
+ </if>
248
+ <elseif condition="<getopt-option-verify/> is equal `light`">
249
+ Raise *no* questions at all of focus area
250
+ `CONFIRMATION`, as under `--verify light` no
251
+ change-specific checks take place which could honor
252
+ their decisions.
253
+ </elseif></expand>
247
254
 
248
255
  If <grill-stop/> is `true`, skip the remaining items of
249
256
  this round and all remaining rounds, and continue with
@@ -383,10 +390,11 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
383
390
 
384
391
  7. **State: verifying:**
385
392
 
386
- Enter this state only if <getopt-option-verify/> is equal `true`.
387
- Otherwise you *MUST* *strictly skip* the entire state and *any*
388
- verification: do *NOT* validate the specification at all and do
389
- *NOT* run any build, tests, linter, or type-checker.
393
+ Enter this state only if <getopt-option-verify/> is equal `light` or
394
+ `full` (both perform the same validation). Otherwise (`none`) you
395
+ *MUST* *strictly skip* the entire state and *any* verification: do
396
+ *NOT* validate the specification at all and do *NOT* run any build,
397
+ tests, linter, or type-checker.
390
398
 
391
399
  1. Validate the specification and capture its <diagnostics/> array
392
400
  of `{ file, line, column, severity, message }` objects:
@@ -405,7 +413,7 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
405
413
 
406
414
  2. If <diagnostics/> is not empty, fix the reported problems in the
407
415
  affected `SPEC` artifacts via the `Edit`/`Write` tools and
408
- re-validate as in item 7.1 -- for at most *three* rounds in
416
+ re-validate as in item 7.1 -- for at most *ten* rounds in
409
417
  total.
410
418
 
411
419
  3. <if condition="<diagnostics/> is not empty after the last round">
@@ -450,6 +458,6 @@ empty <todo-what/> or <todo-how/> renders as `(none)`:
450
458
  </ase-tpl-hint>
451
459
 
452
460
  <ase-tpl-hint level="verbose">
453
- Use `/ase-spec-edit --grill` to stress-test the query first, `--verify` to validate the specification afterwards, and `--loop` to chain several edits.
461
+ Use `/ase-spec-edit --grill` to stress-test the query first, `--verify none` to skip the validation of the specification afterwards, and `--loop` to chain several edits.
454
462
  </ase-tpl-hint>
455
463
  </else>
@@ -13,7 +13,7 @@
13
13
  [`--grill-until`|`-u` `MUST`|`SHOULD`|`MAY`]
14
14
  [`--grill-perspective`|`-p` *perspective*]
15
15
  [`--grill-ground`|`-G`]
16
- [`--verify`|`-v`]
16
+ [`--verify`|`-v` `light`|`none`|`full`]
17
17
  [`--worktree`|`-w` *name*[`:`*branch*]]
18
18
  [`--loop`|`-l`]
19
19
  [*query*]
@@ -37,8 +37,8 @@ project, and read the specification artifacts related to the query),
37
37
  *grilling* (optionally stress-test the query with rounds of questions),
38
38
  *implementing* (optionally select an approach, then apply the change set
39
39
  in place, honoring the GENERIC and SPECIFYING tenets and the `SPEC`
40
- format contract), and *verifying* (optionally validate the specification
41
- until it passes). The *querying* state, every *grilling* round, and the
40
+ format contract), and *verifying* (validate the specification until it
41
+ passes, unless disabled via `--verify none`). The *querying* state, every *grilling* round, and the
42
42
  approach selection close with an `EDIT TODO` box showing the established
43
43
  `WHAT` and `HOW` information.
44
44
 
@@ -74,8 +74,9 @@ timestamp refreshed.
74
74
  of a round are sorted by descending focus area importance
75
75
  (`DOMAIN`, `INTERFACE`, `ARCHITECTURE`, `IMPLEMENTATION`,
76
76
  `REGRESSION`, `CONFIRMATION`). Questions of focus area
77
- `REGRESSION` and `CONFIRMATION` are raised only together with
78
- `--verify`, as only then a verification honors their decisions.
77
+ `REGRESSION` are raised only under `--verify light` or `full`, and
78
+ those of focus area `CONFIRMATION` only under `--verify full`, as
79
+ only then a verification honors their decisions.
79
80
  All questions of a round are announced together below a `GRILLING ROUND K/L` line (the round numbering is
80
81
  omitted when only a single round is performed) as a
81
82
  `QUESTION`/`ANSWERS` table with one row per question, each row
@@ -134,12 +135,13 @@ timestamp refreshed.
134
135
  no usable facts are found, a warning is shown and the grilling falls
135
136
  back to model knowledge. Only effective together with `--grill`.
136
137
 
137
- - `--verify`|`-v`:
138
+ - `--verify`|`-v` `light`|`none`|`full`:
138
139
  Verify the edited specification by validating it via *SpecBook*
139
140
  linting and fixing the reported diagnostics in the affected `SPEC`
140
- artifacts, for at most three rounds. Any diagnostics remaining after
141
- the last round are listed as `REMAINING DIAGNOSTICS`. Without
142
- `--verify`, strictly no validation is performed at all.
141
+ artifacts, for at most ten rounds. Any diagnostics remaining after
142
+ the last round are listed as `REMAINING DIAGNOSTICS`. The default
143
+ `light` and the level `full` perform the same validation. The level
144
+ `none` strictly performs no validation at all.
143
145
 
144
146
  - `--worktree`|`-w` *name*[`:`*branch*]:
145
147
  Apply the change sets inside the dedicated Git worktree
@@ -151,8 +153,8 @@ timestamp refreshed.
151
153
  single worktree serves the whole skill run: it is prepared before
152
154
  the first discovery, so discovering, grilling, and implementing all
153
155
  operate on it, all `--loop` iterations land in it, and it is left
154
- uncommitted for review. Under
155
- `--verify`, the validation then runs as the `ase spec lint` command
156
+ uncommitted for review. Unless
157
+ `--verify none` is given, the validation then runs as the `ase spec lint` command
156
158
  inside the worktree. If *name* is a bare lower-case word naming no
157
159
  existing worktree and a *query* follows (like `-w fix the crash`, a
158
160
  former boolean `-w` usage), the skill asks whether *name* is the
@@ -181,16 +183,22 @@ timestamp refreshed.
181
183
 
182
184
  ## EXAMPLES
183
185
 
184
- Edit in one shot, without any questions or validation:
186
+ Edit in one shot, without any questions, but with validation:
185
187
 
186
188
  ```text
187
189
  ❯ /ase-spec-edit add a Reviewer persona to the persona model
188
190
  ```
189
191
 
190
- Grill the query with two rounds first, then edit and validate:
192
+ Edit in one shot, without any questions or validation:
193
+
194
+ ```text
195
+ ❯ /ase-spec-edit -v none add a Reviewer persona to the persona model
196
+ ```
197
+
198
+ Grill the query with two rounds first, then edit and fully validate:
191
199
 
192
200
  ```text
193
- ❯ /ase-spec-edit -g -r 2 -v split the Event entity into Event and EventSeries
201
+ ❯ /ase-spec-edit -g -r 2 -v full split the Event entity into Event and EventSeries
194
202
  ```
195
203
 
196
204
  Let the user pick one of several specification approaches first, then
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-task-edit
3
- argument-hint: "[--help|-h] [--plan|-p <option>] [--mode|-m auto|craft|refactor|resolve|specify] [--approach|-a] [--unverified|-u] [--next|-n <option>[,...]] [<id> | <id>: <instruction> | <instruction> | <issue-id>]"
3
+ argument-hint: "[--help|-h] [--plan|-p <option>] [--mode|-m auto|craft|refactor|resolve|specify] [--approach|-a] [--unverified|-u] [--focus|-f <section>[,...]] [--quiet|-q] [--interactive|-i] [--next|-n <option>[,...]] [<id> | <id>: <instruction> | <instruction> | <issue-id>]"
4
4
  description: >
5
5
  Iteratively edit and refine a named plan for a task through a
6
6
  conversational loop. A new plan is optionally composed along the
@@ -27,7 +27,7 @@ Iteratively Edit a Task Plan
27
27
 
28
28
  <expand name="getopt"
29
29
  arg1="ase-task-edit"
30
- arg2="--plan|-p=(none|OVERWRITE|REFINE|PRESERVE) --mode|-m=(auto|craft|refactor|resolve|specify) --approach|-a --unverified|-u --next|-n=(none|DONE|GRILL|DRAFT|IMPLEMENT)... --int-reuse-task --int-source-dir=">
30
+ arg2="--plan|-p=(none|OVERWRITE|REFINE|PRESERVE) --mode|-m=(auto|craft|refactor|resolve|specify) --approach|-a --unverified|-u --focus|-f=(all|SPECIFICATION|SPEC|WHAT|DESIGN|DES|HOW|VERIFICATION|VERIFY|VER|WHEN)... --quiet|-q --interactive|-i --next|-n=(none|DONE|GRILL|DRAFT|IMPLEMENT)... --int-reuse-task --int-source-dir=">
31
31
  $ARGUMENTS
32
32
  </expand>
33
33
 
@@ -81,6 +81,19 @@ When refining the plan this way, preserve the overall structure of the
81
81
  plan and only modify what the user actually requested. Do *not* rewrite
82
82
  unrelated sections of the plan.
83
83
 
84
+ <if condition="<getopt-option-focus/> is not equal `all`">
85
+ Restrict the refinement to the sections in <sections/>: all other
86
+ sections and the "backmatter" stay *unchanged* and serve as read-only
87
+ context. Only if the <instruction/> inevitably requires a *foreign
88
+ change* outside of these sections, apply it nevertheless, set <foreign/>
89
+ to the comma-separated names of the changed sections (resp.
90
+ `backmatter`), and only output the following <template/>:
91
+
92
+ <template>
93
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ WARNING: changed sections outside of focus: **<foreign/>**
94
+ </template>
95
+ </if>
96
+
84
97
  <if condition="<getopt-option-int-source-dir/> is not empty">
85
98
  The *code basis* of the task is the separate working copy
86
99
  <getopt-option-int-source-dir/> (e.g. a checkout of the branch of its
@@ -212,6 +225,17 @@ then immediately *STOP* processing the entire current skill:
212
225
  Set <chosen-approach></chosen-approach> (empty). Do not output anything.
213
226
  </else>
214
227
 
228
+ <if condition="<getopt-option-focus/> is not equal `all` and <task-content/> is not empty">
229
+ This is the `OVERWRITE` of an existing plan under a focus, so re-generate
230
+ *only* the sections in <sections/> of <task-content/> in-place, by
231
+ closely following the defined plan format <format/> and injecting into
232
+ them all the information from the <instruction/>, the <chosen-approach/>
233
+ (if not empty), all decisions you derived from the <instruction/> and the
234
+ <chosen-approach/>, and the grounding in the project. All other sections,
235
+ the "backmatter", and all other frontmatter keys stay *unchanged*. Set the
236
+ `Kind:` frontmatter key to <task-kind/>.
237
+ </if>
238
+ <else>
215
239
  Create a new plan from scratch and store the result as
216
240
  <task-content/> by closely following the defined plan format
217
241
  <format/> and injecting into it all the information from
@@ -220,6 +244,14 @@ decisions you derived from the <instruction/> and the <chosen-approach/>, and
220
244
  the grounding in the project. Set the `Kind:` frontmatter key to
221
245
  <task-kind/>.
222
246
 
247
+ <if condition="<getopt-option-focus/> is not equal `all`">
248
+ Populate *only* the sections in <sections/> and keep all other sections
249
+ *empty*, i.e., as bare `##` headings without any bullet-points, until a
250
+ later round focuses them. Hence, the `CHANGELOG.md` bullet-point of the
251
+ grounding above is due only if `DESIGN` is in <sections/>.
252
+ </if>
253
+ </else>
254
+
223
255
  <if condition="<task-kind/> is equal `RESOLVING`">
224
256
  The plan *MUST* carry code references, a precise description of the
225
257
  problem, the resolution approach, a preview of the *unified
@@ -238,7 +270,8 @@ Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
238
270
  `ase` MCP server and use the `text` field of its response
239
271
  for fresh <timestamp-created/> and <timestamp-modified/>
240
272
  information. Then insert the current <ase-task-id/>,
241
- <timestamp-created/>, and <timestamp-modified/> information.
273
+ <timestamp-created/>, and <timestamp-modified/> information -- except
274
+ for the `OVERWRITE` under a focus above, which keeps the `Created:` key.
242
275
  Set <task-content-dirty>true</task-content-dirty>.
243
276
  </define>
244
277
 
@@ -262,6 +295,23 @@ Set <args></args> (set args to empty).
262
295
  Inherit the always existing <ase-session-id/> from the current context.
263
296
  Do not output anything.
264
297
 
298
+ <expand name="task-focus" arg1="ase-task-edit"></expand>
299
+
300
+ Set <band-open>false</band-open>.
301
+ <if condition="<getopt-option-interactive/> is `true`">
302
+ The band of `--interactive` is drawn by the function hooks module
303
+ of the plugin, which provides the `mcp__ase__ase_task_band` tool
304
+ in an interactive terminal only. Load the schema of this tool (if
305
+ deferred, via `ToolSearch` with the query
306
+ `select:mcp__ase__ase_task_band`). If this tool does not exist,
307
+ only output the following <template/> and then immediately *STOP*
308
+ processing the entire current skill:
309
+
310
+ <template>
311
+ ⧉ **ASE**: ☻ skill: **ase-task-edit**, ▶ ERROR: `--interactive` requires the active ASE function hooks in an interactive terminal
312
+ </template>
313
+ </if>
314
+
265
315
  2. Resolve a potential analyzer issue:
266
316
 
267
317
  <if condition="
@@ -647,6 +697,7 @@ Set <args></args> (set args to empty).
647
697
  silently *skip* this entire step 3.3 (no MCP tool call and no
648
698
  output at all) and continue with step 3.4.
649
699
 
700
+ <if condition="<getopt-option-quiet/> is not equal `true` and <getopt-option-interactive/> is not equal `true`">
650
701
  <if condition="<task-render/> is empty">
651
702
  Call the `ase_markdown_prepare(text: "<task-content/>")` tool of
652
703
  the `ase` MCP server and set <task-render/> to the `text` output
@@ -684,22 +735,34 @@ Set <args></args> (set args to empty).
684
735
  ⇥ **Target:** <task-target/>
685
736
  </format>
686
737
 
738
+ Set <focus-label></focus-label> (empty).
739
+ <if condition="<getopt-option-focus/> is not equal `all`">
740
+ For the *rendering only*, overriding the above, additionally drop
741
+ the glyph lines, the `# TASK: <title/>` heading, every `##`
742
+ section whose name is *not* in <sections/>, and the entire
743
+ "backmatter", keeping the remaining sections, including their
744
+ `##` headings, in their plan order, and set <focus-label/> to
745
+ ` (<names/>)`, with <names/> being the comma-separated names of
746
+ these remaining sections.
747
+ </if>
748
+
687
749
  Only output the following <template/>, so the user
688
750
  can read the plan and react to it. Do *not* truncate,
689
- summarize, or partially show the plan. Use the
690
- following <template/>:
751
+ summarize, or partially show the plan, beyond the focus
752
+ above. Use the following <template/>:
691
753
 
692
754
  <template>
693
- <ase-tpl-head title="TASK" subtitle="<task-id/>"/>
755
+ <ase-tpl-head title="TASK" subtitle="<task-id/><focus-label/>"/>
694
756
  <task-render/>
695
- <ase-tpl-foot title="TASK" subtitle="<task-id/>"/>
757
+ <ase-tpl-foot title="TASK" subtitle="<task-id/><focus-label/>"/>
696
758
  </template>
759
+ </if>
697
760
 
698
761
  <if condition="the backmatter of <task-content/> contains an attachment
699
762
  block with the `Type` key value `text/x-diff; charset=utf-8; kind="draft"`
700
763
  which is *stale* according to the plan <format/> (its `Modified` key
701
764
  is absent or older than the `Modified` key of the frontmatter)">
702
- Directly *after* this <template/>, only output the following
765
+ Directly *after* any rendering, only output the following
703
766
  <template/> and then give the corrective hint by expanding the
704
767
  subsequent construct (which, depending on the configured
705
768
  <ase-guidance-level/>, may expand into nothing and hence emit
@@ -742,7 +805,40 @@ Set <args></args> (set args to empty).
742
805
  ⧉ **ASE**: ☻ skill: **ase-task-edit**, ▶ ERROR: invalid `--next` token: **<head/>**
743
806
  </template>
744
807
 
745
- - If <getopt-option-next/> is equal to `none`:
808
+ - If <getopt-option-next/> is equal to `none` and <getopt-option-interactive/> is `true`:
809
+
810
+ <if condition="<band-open/> is `false`">
811
+ Call the `mcp__ase__ase_task_band(id: "<ase-task-id/>")` tool --
812
+ if <getopt-option-focus/> is not equal `all`, additionally with
813
+ the argument `sections: "<sections/>"` -- to show the plan in the
814
+ band above the prompt, which from now on follows every change of
815
+ the plan on its own, and set <band-open>true</band-open>. If its
816
+ `text` output field starts with `ERROR: <info/>`, only output the
817
+ following <template/> and then immediately *STOP* processing the
818
+ entire current skill:
819
+
820
+ <template>
821
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: **<info/>**
822
+ </template>
823
+ </if>
824
+
825
+ Do *not* show any dialog. Only output the following <template/>,
826
+ end the current turn, wait for the user input, and store the
827
+ user input in <result/>:
828
+
829
+ <template>
830
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **awaiting instruction**
831
+ </template>
832
+
833
+ If <result/>, with any leading and trailing whitespace stripped,
834
+ case-insensitively equals `DONE`, `GRILL`, `DRAFT`, `IMPLEMENT`,
835
+ or `CANCEL` -- exactly the inputs on which the band closes on its
836
+ own -- set <result/> to this upper-case token. Otherwise, set
837
+ <result>OTHER: <result/></result>, also for an input which merely
838
+ indicates that the user does not want to proceed, as the band
839
+ stays open on it.
840
+
841
+ - If <getopt-option-next/> is equal to `none` and <getopt-option-interactive/> is not `true`:
746
842
 
747
843
  In the following, you *MUST* *NOT* use your built-in
748
844
  <user-dialog-tool/> tool! Instead, you *MUST* just show a
@@ -772,6 +868,15 @@ Set <args></args> (set args to empty).
772
868
 
773
869
  *Break* out of the *loop*.
774
870
  <expand name="handoff-args"/>
871
+ <if condition="<getopt-option-quiet/> is `true`">
872
+ Set <args><args/> --quiet</args>.
873
+ </if>
874
+ <if condition="<getopt-option-interactive/> is `true`">
875
+ Set <args><args/> --int-interactive</args>.
876
+ </if>
877
+ <if condition="<getopt-option-focus/> is not equal `all`">
878
+ Set <args><args/> --focus <getopt-option-focus/></args>.
879
+ </if>
775
880
  Only output the following <template/> and then call the
776
881
  `Skill(skill: "ase:ase-task-grill", args: "<args/>")` tool
777
882
  to *grill* the finalized plan.
@@ -11,6 +11,9 @@
11
11
  [`--mode`|`-m` `auto`|`craft`|`refactor`|`resolve`|`specify`]
12
12
  [`--approach`|`-a`]
13
13
  [`--unverified`|`-u`]
14
+ [`--focus`|`-f` *section*[,...]]
15
+ [`--quiet`|`-q`]
16
+ [`--interactive`|`-i`]
14
17
  [`--next`|`-n` *option*[,...]]
15
18
  [*id* | *id*: *instruction* | *instruction* | *issue-id*]
16
19
 
@@ -95,6 +98,51 @@ stale draft.
95
98
  build, tests, linter, type-checker, or program execution) once
96
99
  the source files have been modified.
97
100
 
101
+ - `--focus`|`-f` *section*[,...]:
102
+ Edit and show only the given plan *section*(s). Each *section* is
103
+ one of `SPECIFICATION` (also `SPEC` or `WHAT`), `DESIGN` (also `DES`
104
+ or `HOW`), or `VERIFICATION` (also `VERIFY`, `VER`, or `WHEN`),
105
+ matched case-sensitively, or the sentinel `all` (default). The shown
106
+ plan consists only of these sections, including their headings, but
107
+ without the frontmatter and the title.
108
+
109
+ The rest of the plan stays the context, and an *instruction* requiring a
110
+ change outside of the focus is applied nevertheless and reported by
111
+ a warning. A new plan gets all section headings, but only the focused
112
+ sections are populated, and `OVERWRITE` re-generates only them. An
113
+ unknown, empty, or duplicate *section* token aborts the skill. It is
114
+ forwarded on a hand-off to `ase-task-grill`, but not on a hand-off
115
+ to another skill.
116
+
117
+ - `--quiet`|`-q`:
118
+ Do not print the resulting plan at the end of a planning round. The
119
+ status lines, the dialogs, and the warning on a stale implementation
120
+ draft stay. It is forwarded on a hand-off to `ase-task-grill`, but
121
+ not on a hand-off to another skill.
122
+
123
+ - `--interactive`|`-i`:
124
+ Show the plan in a band above the prompt (*Anthropic Claude Code CLI* with
125
+ active ASE function hooks in an interactive terminal only, else the skill
126
+ aborts), instead of printing it, and ask for the next step without any
127
+ dialog. The band takes 75% of the terminal height, in the fullscreen mode
128
+ all the rows the terminal UI leaves it. Under `--focus`, it shows only the
129
+ focused sections.
130
+
131
+ The band follows every change of the plan, also by others, and keeps its
132
+ scroll position. Its line numbers are those of the plan text in `ase task
133
+ edit`. It shows the last change as a unified diff with colored backgrounds and
134
+ line numbers, red for removed and blue for added lines. In the fullscreen
135
+ mode, scroll it with the mouse wheel, or with *CTRL+x* *TAB* and then
136
+ *PageUp*/*PageDown*.
137
+
138
+ At the prompt, type either a refinement instruction, or one of `DONE`,
139
+ `GRILL`, `DRAFT`, `IMPLEMENT`, or `CANCEL` (in any case), which closes the
140
+ band. After a hand-off to `ase-task-grill`, a hand-off back reopens it.
141
+
142
+ Type `##` at the end of the prompt (which removes it again) to remove the
143
+ unified diff and show just the latest state of the plan, until its next
144
+ change. The band stays open and the input does not reach the agent.
145
+
98
146
  - `--next`|`-n` *option*[,...]:
99
147
  Automatically answer the user dialog for the next step (at the end
100
148
  of this skill). *option* is a single token or a *comma-separated
@@ -166,6 +214,18 @@ Plan a refactoring under the id `cleanup`:
166
214
  ❯ /ase-task-edit -m refactor cleanup: extract HTTP client into its own class
167
215
  ```
168
216
 
217
+ Refine and show only the `DESIGN` section of the task under id `hello`:
218
+
219
+ ```text
220
+ ❯ /ase-task-edit --focus HOW hello: print the text via a dedicated logger.
221
+ ```
222
+
223
+ Refine the task under id `hello` with its plan shown in a band above the prompt:
224
+
225
+ ```text
226
+ ❯ /ase-task-edit --interactive hello
227
+ ```
228
+
169
229
  ## SEE ALSO
170
230
 
171
231
  [`ase-code-edit`](../ase-code-edit/help.md), [`ase-spec-edit`](../ase-spec-edit/help.md), [`ase-task-grill`](../ase-task-grill/help.md),
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-task-grill
3
- argument-hint: "[--help|-h] [--rounds|-r <n>] [--until|-u MUST|SHOULD|MAY] [--perspective|-p <perspective>] [--ground|-G] [--focus|-f <section>[,...]] [--force|-F] [--next|-n <option>[,...]] [<id>]"
3
+ argument-hint: "[--help|-h] [--rounds|-r <n>] [--until|-u MUST|SHOULD|MAY] [--perspective|-p <perspective>] [--ground|-G] [--focus|-f <section>[,...]] [--force|-F] [--quiet|-q] [--next|-n <option>[,...]] [<id>]"
4
4
  description: >
5
5
  Interview the user relentlessly about the task plan until reaching a
6
6
  shared understanding, resolving each branch of the question decision
@@ -22,7 +22,7 @@ Iteratively Grill a Task Plan
22
22
 
23
23
  <expand name="getopt"
24
24
  arg1="ase-task-grill"
25
- arg2="--rounds|-r=1 --until|-u=(MUST|SHOULD|MAY) --perspective|-p= --ground|-G --focus|-f=(all|SPECIFICATION|SPEC|DESIGN|DES|VERIFICATION|VER)... --force|-F --next|-n=(none|DONE|GRILL|EDIT|IMPLEMENT|DRAFT)... --int-reuse-task">
25
+ arg2="--rounds|-r=1 --until|-u=(MUST|SHOULD|MAY) --perspective|-p= --ground|-G --focus|-f=(all|SPECIFICATION|SPEC|WHAT|DESIGN|DES|HOW|VERIFICATION|VERIFY|VER|WHEN)... --force|-F --quiet|-q --next|-n=(none|DONE|GRILL|EDIT|IMPLEMENT|DRAFT)... --int-reuse-task --int-interactive">
26
26
  $ARGUMENTS
27
27
  </expand>
28
28
 
@@ -61,23 +61,9 @@ Set <args>--int-reuse-task</args>.
61
61
  ⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ ERROR: invalid `--rounds` value: **<getopt-option-rounds/>**
62
62
  </template>
63
63
 
64
- 3. Treat <getopt-option-focus/> as a comma-separated list of
65
- *section tokens*. Trim and upper-case every token, then expand
66
- the abbreviations `SPEC`, `DES`, and `VER` to `SPECIFICATION`,
67
- `DESIGN`, and `VERIFICATION`, and expand the sentinel `ALL`
68
- (the default) to `SPECIFICATION,DESIGN,VERIFICATION`. Set
69
- <sections/> to the resulting list, *keeping the given order*.
70
- The getopt parser validates only the *first* token, so you
71
- *MUST* validate each token yourself: if any token is *empty*,
72
- *not* one of the recognized sections or abbreviations, or
73
- results in a section already present in <sections/>, bind
74
- <token/> to that offending token, then only output the
75
- following <template/> and immediately *STOP* processing the
76
- entire current skill:
64
+ 3. Resolve the plan sections under focus:
77
65
 
78
- <template>
79
- ⧉ **ASE**: ☻ skill: **ase-task-grill**, ▶ ERROR: invalid `--focus` token: **<token/>**
80
- </template>
66
+ <expand name="task-focus" arg1="ase-task-grill"></expand>
81
67
 
82
68
  Each section in <sections/> selects its *focus areas* of the
83
69
  grilling: `SPECIFICATION` selects `DOMAIN` and `INTERFACE`,
@@ -277,7 +263,19 @@ Set <args>--int-reuse-task</args>.
277
263
  can re-ask it.
278
264
 
279
265
  Set <changes/> to all bullet-points of <task-content/> which
280
- were changed or added in this round. Do not output anything.
266
+ were changed or added in this round. Do not output anything,
267
+ except for the following warning:
268
+
269
+ <if condition="<getopt-option-focus/> is not equal `all` and <changes/> contains a bullet-point of a section *not* in <sections/>">
270
+ An answer required a *foreign change* outside of the focus,
271
+ which is applied nevertheless. Set <foreign/> to the
272
+ comma-separated names of these sections and only output the
273
+ following <template/>:
274
+
275
+ <template>
276
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ WARNING: changed sections outside of focus: **<foreign/>**
277
+ </template>
278
+ </if>
281
279
 
282
280
  5. SAVE PLAN:
283
281
 
@@ -298,6 +296,7 @@ Set <args>--int-reuse-task</args>.
298
296
 
299
297
  6. SHOW PLAN CHANGES:
300
298
 
299
+ <if condition="<getopt-option-quiet/> is not equal `true`">
301
300
  Set <round-suffix/> to
302
301
  ` round <m/>/<getopt-option-rounds/>` if
303
302
  <getopt-option-rounds/> is greater than 1, or to empty
@@ -316,6 +315,7 @@ Set <args>--int-reuse-task</args>.
316
315
 
317
316
  <ase-tpl-foot title="PLAN CHANGES" subtitle="after grilling<round-suffix/>"/>
318
317
  </template>
318
+ </if>
319
319
 
320
320
  4. **Decide Next Step:**
321
321
 
@@ -326,7 +326,7 @@ Set <args>--int-reuse-task</args>.
326
326
  arg2="DONE|GRILL|EDIT|IMPLEMENT|DRAFT">
327
327
  Next Step: How would you like to proceed with the plan?
328
328
  DONE: Stop processing.
329
- GRILL: Re-grill the entire plan again.
329
+ GRILL: Re-grill the plan again.
330
330
  EDIT: Hand off plan to editing.
331
331
  DRAFT: Hand off plan to implementation drafting.
332
332
  IMPLEMENT: Hand off plan to implementation.
@@ -352,6 +352,12 @@ Set <args>--int-reuse-task</args>.
352
352
  <if condition="<getopt-option-ground/> is `true`">
353
353
  Set <args><args/> --ground</args>.
354
354
  </if>
355
+ <if condition="<getopt-option-quiet/> is `true`">
356
+ Set <args><args/> --quiet</args>.
357
+ </if>
358
+ <if condition="<getopt-option-int-interactive/> is `true`">
359
+ Set <args><args/> --int-interactive</args>.
360
+ </if>
355
361
  Only output the following <template/> and then call the
356
362
  tool `Skill(skill: "ase:ase-task-grill", args: "<args/>")`
357
363
  to invoke the `ase:ase-task-grill` skill again in order to
@@ -365,6 +371,15 @@ Set <args>--int-reuse-task</args>.
365
371
 
366
372
  - If <result/> is `EDIT`:
367
373
  <expand name="handoff-args"/>
374
+ <if condition="<getopt-option-quiet/> is `true`">
375
+ Set <args><args/> --quiet</args>.
376
+ </if>
377
+ <if condition="<getopt-option-int-interactive/> is `true`">
378
+ Set <args><args/> --interactive</args>.
379
+ </if>
380
+ <if condition="<getopt-option-focus/> is not equal `all`">
381
+ Set <args><args/> --focus <getopt-option-focus/></args>.
382
+ </if>
368
383
  Only output the following <template/> and then call the
369
384
  tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`
370
385
  to invoke the `ase:ase-task-edit` skill in order to *edit*
@@ -13,6 +13,7 @@
13
13
  [`--ground`|`-G`]
14
14
  [`--focus`|`-f` *section*[,...]]
15
15
  [`--force`|`-F`]
16
+ [`--quiet`|`-q`]
16
17
  [`--next`|`-n` *option*[,...]]
17
18
  [*id*]
18
19
 
@@ -61,7 +62,7 @@ persisted, its `Tags:` frontmatter key records each grilled section as
61
62
  its own tag `grilled:`*section* (lower-case, kept alongside the tags of
62
63
  previously grilled sections, e.g. `grilled:specification,
63
64
  grilled:design`), and a `PLAN CHANGES` box shows the bullet-points
64
- changed by the round. Finally, the user is offered a complete
65
+ changed by the round (unless `--quiet` is given). Finally, the user is offered a complete
65
66
  re-grilling (with the same grilling options), or a hand-off to editing,
66
67
  implementation, or draft.
67
68
 
@@ -123,19 +124,28 @@ in state `[-]` (cancelled) or `[>]` (deferred) are never questioned.
123
124
 
124
125
  - `--focus`|`-f` *section*[,...]:
125
126
  Grill only the given plan *section*(s), in the given order. Each
126
- *section* is one of `SPECIFICATION` (abbreviated `SPEC`), `DESIGN`
127
- (abbreviated `DES`), or `VERIFICATION` (abbreviated `VER`), matched
128
- case-insensitively, or the sentinel `all` (default), which expands
129
- to `SPECIFICATION,DESIGN,VERIFICATION`. The questions are derived
130
- from the themes of the focused sections only, while the entire plan
131
- stays the context, and the answers may still update any section.
132
- An unknown, empty, or duplicate *section* token aborts the skill.
127
+ *section* is one of `SPECIFICATION` (also `SPEC` or `WHAT`), `DESIGN`
128
+ (also `DES` or `HOW`), or `VERIFICATION` (also `VERIFY`, `VER`, or
129
+ `WHEN`), matched case-sensitively, or the sentinel `all` (default),
130
+ which expands to `SPECIFICATION,DESIGN,VERIFICATION`. The questions
131
+ are derived from the themes of the focused sections only, while the
132
+ entire plan stays the context, and an answer requiring a change
133
+ outside of the focus is applied nevertheless and reported by a
134
+ warning. An unknown, empty, or duplicate *section* token aborts the
135
+ skill. It is forwarded on a re-grilling and on a hand-off to
136
+ `ase-task-edit`, but not on a hand-off to another skill.
133
137
 
134
138
  - `--force`|`-F`:
135
139
  Re-grill already grilled sections completely, i.e., ignore their
136
140
  `grilled:`*section* tags instead of skipping them resp. re-asking
137
141
  only their `[?]` bullet-points.
138
142
 
143
+ - `--quiet`|`-q`:
144
+ Do not print the `PLAN CHANGES` box of the bullet-points changed by
145
+ a round. The status lines and the dialogs stay. It is forwarded on a
146
+ re-grilling and on a hand-off to `ase-task-edit`, but not on a
147
+ hand-off to another skill.
148
+
139
149
  - `--next`|`-n` *option*[,...]:
140
150
  Automatically answer the user dialog for the next step (at the end
141
151
  of this skill). *option* is a single token or a *comma-separated