@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.
- package/dst/ase-agent-definition-api.d.ts +2 -0
- package/dst/ase-agent-definition-core.js +24 -3
- package/dst/ase-agent-fleet.js +2 -1
- package/dst/ase-agent-relay-client.js +3 -4
- package/dst/ase-agent-runtime-engine.js +22 -4
- package/dst/ase-agent-runtime-tool.js +10 -8
- package/dst/ase-agent-runtime.js +8 -4
- package/dst/ase-config-schema.js +4 -1
- package/dst/ase-lib-fetch.js +12 -0
- package/dst/ase-lib-server-cli.js +8 -5
- package/dst/ase-man-catalog.js +1 -1
- package/dst/ase-task-board-diff.js +120 -0
- package/dst/ase-task-board-tui-control.js +8 -5
- package/dst/ase-task-board-tui-model.js +54 -14
- package/dst/ase-task-board-tui-popup.js +41 -8
- package/dst/ase-task-board-tui.js +42 -27
- package/dst/ase-task-board-web-client.css +1 -1
- package/dst/ase-task-board-web-client.html +16 -0
- package/dst/ase-task-board-web-client.js +33 -33
- package/dst/ase-task-board-web-server.js +44 -9
- package/dst/ase-task-board.js +12 -4
- package/dst/ase-task-store-client.js +4 -5
- package/dst/ase-task-store-plugin-gitea.js +3 -3
- package/dst/man/ase-agent-adhoc.md +25 -6
- package/dst/man/ase-agent-condenser.md +7 -0
- package/dst/man/ase-agent-editor.md +7 -0
- package/dst/man/ase-agent-estimator.md +7 -0
- package/dst/man/ase-agent-fleet.md +7 -4
- package/dst/man/ase-agent-implementer.md +7 -0
- package/dst/man/ase-agent-integrator.md +7 -0
- package/dst/man/ase-agent-qualifier.md +7 -0
- package/dst/man/ase-agent-rebooter.md +7 -0
- package/dst/man/ase-agent-researcher.md +7 -0
- package/dst/man/ase-config-init.md +2 -1
- package/dst/man/ase-config.md +5 -0
- package/dst/man/ase-task-board.md +44 -2
- package/package.json +11 -10
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/meta/ase-common-task.md +33 -1
- package/plugin/meta/ase-control.md +14 -0
- package/plugin/meta/ase-format-specbook.yaml +9 -9
- package/plugin/meta/ase-skill.md +7 -0
- package/plugin/mods/ase-mods-common.ts +73 -42
- package/plugin/mods/ase-mods-help-hint.ts +1 -1
- package/plugin/mods/ase-mods-task-edit.ts +427 -0
- package/plugin/mods/ase-mods.ts +45 -14
- package/plugin/skills/ase-code-edit/SKILL.md +53 -16
- package/plugin/skills/ase-code-edit/help.md +26 -13
- package/plugin/skills/ase-code-lint/SKILL.md +7 -3
- package/plugin/skills/ase-help-intent/data.md +248 -36
- package/plugin/skills/ase-help-skill/catalog.md +1 -0
- package/plugin/skills/ase-meta-workflow/workflow.txt +2 -0
- package/plugin/skills/ase-repo-changelog/SKILL.md +29 -10
- package/plugin/skills/ase-repo-changelog/help.md +5 -1
- package/plugin/skills/ase-repo-commit/SKILL.md +4 -1
- package/plugin/skills/ase-repo-dissect/help.md +2 -1
- package/plugin/skills/ase-repo-stage/SKILL.md +459 -0
- package/plugin/skills/ase-repo-stage/help.md +120 -0
- package/plugin/skills/ase-spec-edit/SKILL.md +20 -12
- package/plugin/skills/ase-spec-edit/help.md +22 -14
- package/plugin/skills/ase-task-edit/SKILL.md +114 -9
- package/plugin/skills/ase-task-edit/help.md +60 -0
- package/plugin/skills/ase-task-grill/SKILL.md +35 -20
- package/plugin/skills/ase-task-grill/help.md +18 -8
- /package/plugin/mods/{ase-mods-evaluate.ts → ase-mods-meta-evaluate.ts} +0 -0
- /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
|
|
242
|
+
<if condition="<getopt-option-verify/> is equal `none`">
|
|
243
243
|
Raise *no* questions at all of focus area `REGRESSION`
|
|
244
|
-
or `CONFIRMATION`, as
|
|
245
|
-
takes place which could honor their
|
|
246
|
-
|
|
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 `
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
*NOT* run any build,
|
|
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 *
|
|
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
|
|
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* (
|
|
41
|
-
|
|
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`
|
|
78
|
-
|
|
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
|
|
141
|
-
the last round are listed as `REMAINING DIAGNOSTICS`.
|
|
142
|
-
|
|
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.
|
|
155
|
-
`--verify
|
|
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
|
|
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
|
-
|
|
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
|
|
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*
|
|
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.
|
|
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
|
-
<
|
|
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
|
|
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` (
|
|
127
|
-
(
|
|
128
|
-
case-
|
|
129
|
-
to `SPECIFICATION,DESIGN,VERIFICATION`. The questions
|
|
130
|
-
from the themes of the focused sections only, while the
|
|
131
|
-
stays the context, and
|
|
132
|
-
|
|
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
|
|
File without changes
|
|
File without changes
|