@rse/ase 0.9.6 → 0.9.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 (58) hide show
  1. package/dst/ase-getopt.js +11 -1
  2. package/dst/ase-markdown.js +235 -0
  3. package/dst/ase-service.js +2 -0
  4. package/dst/ase-task.js +22 -20
  5. package/package.json +6 -6
  6. package/plugin/.claude-plugin/plugin.json +1 -1
  7. package/plugin/.github/plugin/plugin.json +1 -1
  8. package/plugin/agents/ase-docs-proofread.md +2 -2
  9. package/plugin/meta/ase-constitution.md +7 -0
  10. package/plugin/meta/ase-control.md +24 -3
  11. package/plugin/meta/ase-format-task.md +14 -14
  12. package/plugin/meta/ase-getopt.md +2 -1
  13. package/plugin/meta/ase-skill.md +28 -9
  14. package/plugin/package.json +3 -3
  15. package/plugin/skills/ase-arch-analyze/SKILL.md +88 -89
  16. package/plugin/skills/ase-arch-discover/SKILL.md +18 -9
  17. package/plugin/skills/ase-code-analyze/SKILL.md +6 -5
  18. package/plugin/skills/ase-code-craft/SKILL.md +47 -40
  19. package/plugin/skills/ase-code-craft/help.md +2 -2
  20. package/plugin/skills/ase-code-explain/SKILL.md +1 -1
  21. package/plugin/skills/ase-code-insight/SKILL.md +1 -1
  22. package/plugin/skills/ase-code-lint/SKILL.md +16 -8
  23. package/plugin/skills/ase-code-refactor/SKILL.md +47 -40
  24. package/plugin/skills/ase-code-refactor/help.md +2 -2
  25. package/plugin/skills/ase-code-resolve/SKILL.md +48 -40
  26. package/plugin/skills/ase-code-resolve/help.md +2 -2
  27. package/plugin/skills/ase-docs-distill/SKILL.md +1 -1
  28. package/plugin/skills/ase-docs-distill/help.md +3 -3
  29. package/plugin/skills/ase-docs-proofread/SKILL.md +22 -13
  30. package/plugin/skills/ase-meta-brainstorm/SKILL.md +25 -6
  31. package/plugin/skills/ase-meta-brainstorm/help.md +6 -10
  32. package/plugin/skills/ase-meta-diff/SKILL.md +5 -4
  33. package/plugin/skills/ase-meta-diff/help.md +10 -11
  34. package/plugin/skills/ase-meta-evaluate/SKILL.md +10 -9
  35. package/plugin/skills/ase-meta-quorum/SKILL.md +15 -5
  36. package/plugin/skills/ase-meta-review/SKILL.md +3 -3
  37. package/plugin/skills/ase-meta-review/help.md +3 -3
  38. package/plugin/skills/ase-meta-search/SKILL.md +9 -8
  39. package/plugin/skills/ase-meta-steelman/SKILL.md +1 -1
  40. package/plugin/skills/ase-meta-why/SKILL.md +16 -10
  41. package/plugin/skills/ase-task-condense/SKILL.md +32 -17
  42. package/plugin/skills/ase-task-condense/help.md +1 -1
  43. package/plugin/skills/ase-task-delete/SKILL.md +6 -3
  44. package/plugin/skills/ase-task-edit/SKILL.md +58 -36
  45. package/plugin/skills/ase-task-edit/help.md +3 -3
  46. package/plugin/skills/ase-task-grill/SKILL.md +59 -24
  47. package/plugin/skills/ase-task-id/SKILL.md +11 -2
  48. package/plugin/skills/ase-task-implement/SKILL.md +38 -17
  49. package/plugin/skills/ase-task-implement/help.md +1 -1
  50. package/plugin/skills/ase-task-list/SKILL.md +1 -1
  51. package/plugin/skills/ase-task-preflight/SKILL.md +42 -22
  52. package/plugin/skills/ase-task-preflight/help.md +1 -1
  53. package/plugin/skills/ase-task-reboot/SKILL.md +31 -22
  54. package/plugin/skills/ase-task-rename/SKILL.md +5 -3
  55. package/plugin/skills/ase-task-view/SKILL.md +19 -8
  56. package/plugin/skills/ase-task-view/help.md +24 -5
  57. package/dst/ase-bash.js +0 -618
  58. package/dst/ase-hello.js +0 -24
@@ -25,6 +25,18 @@ Skill Output
25
25
  Unicode characters, and the potential reduction of prose according
26
26
  to the currently defined persona style.
27
27
 
28
+ - *IMPORTANT*: For *Final-Message-Only Display* ("focus mode"):
29
+ some agent harnesses show the user only the *final* text message of
30
+ a turn and *hide* all text emitted *between* tool calls. If your
31
+ harness instructions indicate such a mode (e.g. *Claude Code* with
32
+ "focus mode" enabled), you *MUST* repeat *all* <template/> outputs
33
+ emitted since the last shown final text message -- *verbatim*, in
34
+ their *original order*, and each only *once* -- at the *top* of the
35
+ next final text message (i.e. the text after the last tool call of
36
+ a turn). Never *drop* or *summarize* a <template/> output just
37
+ because it would land between tool calls. If no such display mode
38
+ is indicated, do *not* repeat anything.
39
+
28
40
  - *IMPORTANT*: The active *persona style* (see `ase-persona.md`) *MUST* be applied
29
41
  to all *free-text placeholders* within <template/> sections - i.e. any placeholder
30
42
  whose content you author yourself (such as `<description/>`, `<title/>`, `<objective/>`,
@@ -98,14 +110,21 @@ Skill Sequential Processing
98
110
  - *IMPORTANT*: For each given <flow/>, you *MUST* use the
99
111
  `TaskCreate` tool to create a corresponding set of processing steps.
100
112
 
101
- Each `<step id="xxx" [...]/>` corresponds to a `TaskCreate({
102
- subject: "xxx", description: "xxx", activeForm: "xxx" })`. In other
103
- words, use the text of the `id` attribute of <step/> for both
104
- the `subject`, the `description`, and the `activeForm` fields of
113
+ Each `<step id="xxx" [...]>...</step>` corresponds to a
114
+ `TaskCreate({ subject: "xxx", description: "xxx" })`. In other
115
+ words, use the text of the `id` attribute of <step/> exactly
116
+ *as-is* for both the `subject`, and the `description` fields of
105
117
  `TaskCreate`.
106
118
 
107
- Make the `TaskCreate` tool calls *sequentially*, *not* in parallel,
108
- so the user can see intermediate results.
119
+ For speed, emit *all* `TaskCreate` calls together in a *single* turn
120
+ (issued in parallel), *not* one-per-turn sequentially. Do *not*
121
+ rely on the call order to establish the step order, as the parallel
122
+ results carry no guaranteed ordering. Instead, in the *immediately
123
+ following* turn, establish the strict order explicitly by chaining
124
+ the created tasks with `TaskUpdate`: for each <step/> after the
125
+ first one, call `TaskUpdate({ taskId: "<this/>", addBlockedBy:
126
+ [ "<prev/>" ] })` so that every step (with `taskId` <this/>) is
127
+ blocked by its predecessor step (with `taskId` <prev/>).
109
128
 
110
129
  - *IMPORTANT*: For each <step/> you *MUST* use the `TaskUpdate` tool
111
130
  for updating its status during processing.
@@ -208,7 +227,7 @@ Template Patterns
208
227
  </template>
209
228
 
210
229
  - When `<ase-tpl-head title="<title/>"/>` should be expanded, use
211
- (where <bar/> = "─" x (70 - 8 - length("<title/>")), i.e., <bar/> is
230
+ (where <bar/> = "─" x (70 - 16 - length("<title/>")), i.e., <bar/> is
212
231
  the "─" character repeated (70 - 16 - length("<title/>")) times):
213
232
 
214
233
  <template>
@@ -226,8 +245,8 @@ Template Patterns
226
245
  </template>
227
246
 
228
247
  - When `<ase-tpl-foot title="<title/>"/>` should be expanded, use
229
- (where <bar/> = "─" x (70 - 8 - length("<title/>")), i.e., <bar/> is
230
- the "─" character repeated (70 - 16 - length("<title/>")) times):
248
+ (where <bar/> = "─" x (70 - 16 - length("<title/>")), i.e., <bar/> is
249
+ the "─" character repeated (71 - 16 - length("<title/>")) times):
231
250
 
232
251
  <template>
233
252
 
@@ -6,7 +6,7 @@
6
6
  "homepage": "http://github.com/rse/ase",
7
7
  "repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
8
8
  "bugs": { "url": "http://github.com/rse/ase/issues" },
9
- "version": "0.9.6",
9
+ "version": "0.9.8",
10
10
  "license": "GPL-3.0-only",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
@@ -15,11 +15,11 @@
15
15
  },
16
16
  "devDependencies": {
17
17
  "@rse/stx": "1.1.5",
18
- "markdownlint": "0.40.0",
18
+ "markdownlint": "0.41.0",
19
19
  "markdownlint-cli2": "0.22.1",
20
20
  "eslint": "10.4.1",
21
21
  "@eslint/markdown": "8.0.2",
22
- "eslint-markdown": "0.10.0"
22
+ "eslint-markdown": "0.11.0"
23
23
  },
24
24
  "engines": {
25
25
  "npm": ">=10.0.0",
@@ -7,94 +7,94 @@ disable-model-invocation: false
7
7
  model: opus
8
8
  effort: high
9
9
  allowed-tools:
10
- - "Bash(wc:*)"
11
- - "Bash(ls:*)"
12
- - "Bash(tree:*)"
13
- - "Bash(file:*)"
14
- - "Bash(du:*)"
15
- - "Bash(stat:*)"
16
- - "Bash(grep:*)"
17
- - "Bash(awk:*)"
18
- - "Bash(head:*)"
19
- - "Bash(tail:*)"
20
- - "Bash(sort:*)"
21
- - "Bash(uniq:*)"
22
- - "Bash(cat:*)"
23
- - "Bash(cut:*)"
24
- - "Bash(tr:*)"
25
- - "Bash(nl:*)"
26
- - "Bash(column:*)"
27
- - "Bash(diff:*)"
28
- - "Bash(cmp:*)"
29
- - "Bash(jq:*)"
30
- - "Bash(cloc:*)"
31
- - "Bash(tokei:*)"
32
- - "Bash(scc:*)"
33
- - "Bash(basename:*)"
34
- - "Bash(dirname:*)"
35
- - "Bash(realpath:*)"
36
- - "Bash(readlink:*)"
37
- - "Bash(pwd:*)"
38
- - "Bash(which:*)"
39
- - "Bash(whereis:*)"
40
- - "Bash(type:*)"
41
- - "Bash(namei:*)"
42
- - "Bash(git log:*)"
43
- - "Bash(git show:*)"
44
- - "Bash(git diff:*)"
45
- - "Bash(git blame:*)"
46
- - "Bash(git ls-files:*)"
47
- - "Bash(git ls-tree:*)"
48
- - "Bash(git grep:*)"
49
- - "Bash(git status:*)"
50
- - "Bash(git rev-list:*)"
51
- - "Bash(git rev-parse:*)"
52
- - "Bash(git for-each-ref:*)"
53
- - "Bash(git reflog:*)"
54
- - "Bash(git cat-file:*)"
55
- - "Bash(git config --get:*)"
56
- - "Bash(git config --list:*)"
57
- - "Bash(git remote:*)"
58
- - "Bash(git branch:*)"
59
- - "Bash(git tag --list:*)"
60
- - "Bash(git describe:*)"
61
- - "Bash(git shortlog:*)"
62
- - "Bash(find * -name:*)"
63
- - "Bash(find * -type:*)"
64
- - "Bash(find * -path:*)"
65
- - "Bash(find * -maxdepth:*)"
66
- - "Bash(find * -mindepth:*)"
67
- - "Bash(find * -size:*)"
68
- - "Bash(find * -mtime:*)"
69
- - "Bash(find * -newer:*)"
70
- - "Bash(git diff:* | awk:*)"
71
- - "Bash(git diff:* | grep:*)"
72
- - "Bash(git diff:* | head:*)"
73
- - "Bash(git diff:* | tail:*)"
74
- - "Bash(git diff:* | wc:*)"
75
- - "Bash(git log:* | head:*)"
76
- - "Bash(git log:* | grep:*)"
77
- - "Bash(git log:* | wc:*)"
78
- - "Bash(git show:* | head:*)"
79
- - "Bash(git show:* | grep:*)"
80
- - "Bash(git grep:* | head:*)"
81
- - "Bash(git grep:* | wc:*)"
82
- - "Bash(git ls-files:* | grep:*)"
83
- - "Bash(git ls-files:* | head:*)"
84
- - "Bash(git ls-files:* | wc:*)"
85
- - "Bash(grep:* | head:*)"
86
- - "Bash(grep:* | sort:*)"
87
- - "Bash(grep:* | wc:*)"
88
- - "Bash(grep:* | sort:* | uniq:*)"
89
- - "Bash(cat:* | grep:*)"
90
- - "Bash(cat:* | awk:*)"
91
- - "Bash(cat:* | head:*)"
92
- - "Bash(cat:* | wc:*)"
93
- - "Bash(find:* | head:*)"
94
- - "Bash(find:* | wc:*)"
95
- - "Bash(awk:* | head:*)"
96
- - "Bash(sort:* | uniq:*)"
97
- - "Bash(sort:* | head:*)"
10
+ - "Bash(wc *)"
11
+ - "Bash(ls *)"
12
+ - "Bash(tree *)"
13
+ - "Bash(file *)"
14
+ - "Bash(du *)"
15
+ - "Bash(stat *)"
16
+ - "Bash(grep *)"
17
+ - "Bash(awk *)"
18
+ - "Bash(head *)"
19
+ - "Bash(tail *)"
20
+ - "Bash(sort *)"
21
+ - "Bash(uniq *)"
22
+ - "Bash(cat *)"
23
+ - "Bash(cut *)"
24
+ - "Bash(tr *)"
25
+ - "Bash(nl *)"
26
+ - "Bash(column *)"
27
+ - "Bash(diff *)"
28
+ - "Bash(cmp *)"
29
+ - "Bash(jq *)"
30
+ - "Bash(cloc *)"
31
+ - "Bash(tokei *)"
32
+ - "Bash(scc *)"
33
+ - "Bash(basename *)"
34
+ - "Bash(dirname *)"
35
+ - "Bash(realpath *)"
36
+ - "Bash(readlink *)"
37
+ - "Bash(pwd *)"
38
+ - "Bash(which *)"
39
+ - "Bash(whereis *)"
40
+ - "Bash(type *)"
41
+ - "Bash(namei *)"
42
+ - "Bash(git log *)"
43
+ - "Bash(git show *)"
44
+ - "Bash(git diff *)"
45
+ - "Bash(git blame *)"
46
+ - "Bash(git ls-files *)"
47
+ - "Bash(git ls-tree *)"
48
+ - "Bash(git grep *)"
49
+ - "Bash(git status *)"
50
+ - "Bash(git rev-list *)"
51
+ - "Bash(git rev-parse *)"
52
+ - "Bash(git for-each-ref *)"
53
+ - "Bash(git reflog *)"
54
+ - "Bash(git cat-file *)"
55
+ - "Bash(git config --get *)"
56
+ - "Bash(git config --list *)"
57
+ - "Bash(git remote *)"
58
+ - "Bash(git branch *)"
59
+ - "Bash(git tag --list *)"
60
+ - "Bash(git describe *)"
61
+ - "Bash(git shortlog *)"
62
+ - "Bash(find * -name *)"
63
+ - "Bash(find * -type *)"
64
+ - "Bash(find * -path *)"
65
+ - "Bash(find * -maxdepth *)"
66
+ - "Bash(find * -mindepth *)"
67
+ - "Bash(find * -size *)"
68
+ - "Bash(find * -mtime *)"
69
+ - "Bash(find * -newer *)"
70
+ - "Bash(git diff * | awk *)"
71
+ - "Bash(git diff * | grep *)"
72
+ - "Bash(git diff * | head *)"
73
+ - "Bash(git diff * | tail *)"
74
+ - "Bash(git diff * | wc *)"
75
+ - "Bash(git log * | head *)"
76
+ - "Bash(git log * | grep *)"
77
+ - "Bash(git log * | wc *)"
78
+ - "Bash(git show * | head *)"
79
+ - "Bash(git show * | grep *)"
80
+ - "Bash(git grep * | head *)"
81
+ - "Bash(git grep * | wc *)"
82
+ - "Bash(git ls-files * | grep *)"
83
+ - "Bash(git ls-files * | head *)"
84
+ - "Bash(git ls-files * | wc *)"
85
+ - "Bash(grep * | head *)"
86
+ - "Bash(grep * | sort *)"
87
+ - "Bash(grep * | wc *)"
88
+ - "Bash(grep * | sort * | uniq *)"
89
+ - "Bash(cat * | grep *)"
90
+ - "Bash(cat * | awk *)"
91
+ - "Bash(cat * | head *)"
92
+ - "Bash(cat * | wc *)"
93
+ - "Bash(find * | head *)"
94
+ - "Bash(find * | wc *)"
95
+ - "Bash(awk * | head *)"
96
+ - "Bash(sort * | uniq *)"
97
+ - "Bash(sort * | head *)"
98
98
  - "Agent"
99
99
  - "Skill"
100
100
  ---
@@ -437,7 +437,6 @@ interface quality, quality attributes, and architecture governance.
437
437
  Finally, output the following <template/> to give a final hint:
438
438
 
439
439
  <template>
440
- ⧉ **ASE**: ☻ skill: **<skill-name/>**, ▶ status: **skill finished**
441
440
  ⧉ **ASE**: ↪ hint: **For deeper analysis, suggestions on solution approaches and then final source code changes, use `/ase-code-resolve P{n}` or `/ase-code-resolve T{n}` in the same or even a different session.**
442
441
  </template>
443
442
  </step>
@@ -86,6 +86,15 @@ for the technology stack to *provide* the *needed functionality*
86
86
  </step>
87
87
 
88
88
  3. <step id="STEP 3: Discover Components">
89
+ - If <stack/> is "Unknown", the technology stack could not be
90
+ determined and no component discovery backend is available.
91
+ Inform the user with just the following <template/> and then
92
+ *STOP* the entire flow (do not perform any further steps):
93
+
94
+ <template>
95
+ <ase-tpl-bullet-normal/> **RESULT**: technology stack could not be determined -- component discovery is only supported for JavaScript, TypeScript, Java, and Kotlin projects.
96
+ </template>
97
+
89
98
  - From <stack/> and <functionality/>, derive essential keywords
90
99
  <keyword-L/> (L=1-M), which allow you to search for suitable
91
100
  components.
@@ -122,7 +131,7 @@ for the technology stack to *provide* the *needed functionality*
122
131
  their unique Maven coordinates <package-K/> of the form
123
132
  `groupId:artifactId`.
124
133
 
125
- - Use the shell command `curl -s 'https://search.maven.org/solrsearch/select?q=<keyword-1/>+<keyword-M/>&rows=<getopt-option-limit/>&wt=json'`
134
+ - Use the shell command `curl -s 'https://search.maven.org/solrsearch/select?q=<keyword-1/>+[...]+<keyword-M/>&rows=<getopt-option-limit/>&wt=json'`
126
135
  to *specifically* discover an additional set of a maximum
127
136
  of <getopt-option-limit/> *Maven packages* <component-K/> and at least their
128
137
  unique Maven coordinates <package-K/> (i.e. `<g/>:<a/>` from
@@ -167,11 +176,11 @@ for the technology stack to *provide* the *needed functionality*
167
176
  <template>
168
177
  <ase-tpl-bullet-normal/> **COMPONENT HINTS**:
169
178
 
170
- | ⚑ *Component* | ▣ *Package* | ⚖ *Hint* |
171
- | :----------------- | :------------- | :-------- |
172
- | **<component-1/>** | `<package-1/>` | <info-1/> |
179
+ | ⚑ *Component* | ▣ *Package* | ⚖ *Hint* |
180
+ | :------------ | :------------- | :-------- |
181
+ | **<name-1/>** | `<package-1/>` | <info-1/> |
173
182
  [...]
174
- | **<component-N/>** | `<package-N/>` | <info-N/> |
183
+ | **<name-N/>** | `<package-N/>` | <info-N/> |
175
184
  </template>
176
185
 
177
186
  - Display the discovered components as a Markdown *table*
@@ -180,11 +189,11 @@ for the technology stack to *provide* the *needed functionality*
180
189
  <template>
181
190
  <ase-tpl-bullet-normal/> **COMPONENT RANKING**:
182
191
 
183
- | ⚑ *Component* | ▣ *Package* | ❖ *Version* | ↓ *Downloads* | ⎈ *Stars* | ⏲ *Updated* | ☆ *Created* |
184
- | :----------------- | :------------- | -----------: | -----------------: | -------------: | :--------------- | :----------- |
185
- | **<component-1/>** | `<package-1/>` | <version-1/> | **<downloads-1/>** | **<stars-1/>** | **<updated-1/>** | <created-1/> |
192
+ | ⚑ *Component* | ▣ *Package* | ❖ *Version* | ↓ *Downloads* | ⎈ *Stars* | ⏲ *Updated* | ☆ *Created* |
193
+ | :------------ | :------------- | -----------: | -----------------: | -------------: | :--------------- | :----------- |
194
+ | **<name-1/>** | `<package-1/>` | <version-1/> | **<downloads-1/>** | **<stars-1/>** | **<updated-1/>** | <created-1/> |
186
195
  [...]
187
- | **<component-N/>** | `<package-N/>` | <version-N/> | **<downloads-N/>** | **<stars-N/>** | **<updated-N/>** | <created-N/> |
196
+ | **<name-N/>** | `<package-N/>` | <version-N/> | **<downloads-N/>** | **<stars-N/>** | **<updated-N/>** | <created-N/> |
188
197
  </template>
189
198
  </step>
190
199
  </flow>
@@ -202,9 +202,12 @@ problems in *performance* and *efficiency*, or problems in *security*.
202
202
  <template>(`<filename/>#<function-or-method/>`)</template>.
203
203
 
204
204
  - In <description/>, classify the problem with a <severity/>
205
- of <template>LOW</template>, <template>MEDIUM</template> or
206
- <template>HIGH</template>, ranked by the estimated *impact* of the
207
- problem.
205
+ of <template>LOW</template>, <template>MEDIUM</template>,
206
+ <template>HIGH</template>, or <template>ACCEPTED</template>,
207
+ ranked by the estimated *impact* of the problem. Use
208
+ <template>ACCEPTED</template> when the problem is a deliberate,
209
+ justified trade-off that should remain on record but is never
210
+ dropped by the severity floor (see STEP 3).
208
211
 
209
212
  - <if condition="<getopt-option-performance/> is equal `true`">
210
213
  In <evidence/>, ground the finding by citing either the inferred
@@ -241,5 +244,3 @@ problems in *performance* and *efficiency*, or problems in *security*.
241
244
  </step>
242
245
 
243
246
  </flow>
244
-
245
- </output>
@@ -2,8 +2,8 @@
2
2
  name: ase-code-craft
3
3
  argument-hint: "[--help|-h] [--auto|-a] [--dry|-d] [--quick|-Q] [--next|-n <option>[,...]] [<task-id>:] <feature>"
4
4
  description: >
5
- Craft Source Code:
6
- Use when user wants to create or craft a new feature from scratch.
5
+ Craft Source:
6
+ Use when user wants to "create", "add", or "craft" a new feature from scratch.
7
7
  user-invocable: true
8
8
  disable-model-invocation: false
9
9
  effort: xhigh
@@ -69,20 +69,25 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
69
69
  </template>
70
70
  </if>
71
71
 
72
- 2. If <feature/> has the format `<id/>: <text/>` where <id/> matches
73
- the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`, then set
74
- <feature><text/></feature> and <ase-task-id><id/></ase-task-id>
75
- and call the `ase_task_id(id: "<ase-task-id/>", session:
76
- "<ase-session-id/>")` tool from the `ase` MCP server to
77
- implicitly switch the task. Do not output anything.
72
+ 2. <if condition="
73
+ <feature/> has the format `<id/>: <text/>` AND
74
+ <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
75
+ ">
76
+ Set <feature><text/></feature> and
77
+ <ase-task-id><id/></ase-task-id> and call the `ase_task_id(id:
78
+ "<ase-task-id/>", session: "<ase-session-id/>")` tool from the
79
+ `ase` MCP server to implicitly switch the task. Do not output
80
+ anything.
81
+ </if>
78
82
 
79
- 3. If <feature/> is empty,
80
- ask the user interactively, without a special tool, for the
83
+ 3. <if condition="<feature/> is empty">
84
+ Ask the user interactively, without a special tool, for the
81
85
  initial feature with a single question:
82
86
 
83
87
  `**No feature known yet. What is the feature you want to craft?**`
84
88
 
85
89
  Then set <feature/> to the response of the user.
90
+ </if>
86
91
 
87
92
  4. <if condition="
88
93
  <ase-task-id/> is equal `default` and
@@ -206,12 +211,12 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
206
211
  inlining its pros/cons derived in sub-step 2:
207
212
 
208
213
  <template>
209
- **APPROACH A<n/>**<annotation/>: *<summary/>*
210
- [...]
211
- [...]
212
- [...]
213
- *pro*: [...]
214
- *con*: [...]
214
+ **APPROACH A<n/>**<annotation/>: *<summary/>*
215
+ [...]
216
+ [...]
217
+ [...]
218
+ **PRO**: [...]
219
+ **CON**: [...]
215
220
  <optional-diagram/>
216
221
  </template>
217
222
 
@@ -246,7 +251,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
246
251
 
247
252
  5. **Choose Feature Crafting Approach**:
248
253
 
249
- 1. If <getopt-option-auto/> is equal `false`:
254
+ 1. <if condition="<getopt-option-auto/> is equal `false`">
250
255
  Let the *user interactively choose* the preferred feature
251
256
  approach A<n/> with the help of the <user-dialog-tool/> tool.
252
257
  Use the header `Select Approach`, use `A<n/>: <short-summary/>`
@@ -254,14 +259,16 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
254
259
  of the approach A<n/>), and *single-selection* only and provide
255
260
  small *code change previews*. Mark your recommended feature
256
261
  approach with ` ⚝ **RECOMMENDATION** ⚝` here again.
262
+ </if>
257
263
 
258
- 2. If <getopt-option-auto/> is equal `true`:
264
+ 2. <else>
259
265
  Set <n/> to the number of the feature approach A<n/> you recommend.
260
266
  Output a hint with the following <template/>:
261
267
 
262
268
  <template>
263
269
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **auto-chosen approach A<n/>**
264
270
  </template>
271
+ </else>
265
272
 
266
273
  6. **Compose Feature Crafting Plan**:
267
274
 
@@ -278,7 +285,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
278
285
  file, aligned with its existing style and conventions.
279
286
 
280
287
  <if condition="<getopt-option-dry/> is equal `true`">
281
- You *MUST* completely omit the `##VERIFICATION` section
288
+ You *MUST* completely omit the `## VERIFICATION` section
282
289
  (including its heading and all of its bullet points) from
283
290
  <content/>.
284
291
  </if>
@@ -307,40 +314,40 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
307
314
  Treat <getopt-option-next/> as a comma-separated chronological
308
315
  list of pre-selected next-step tokens. *Peek* the *first* token
309
316
  as <head/> (or `none` if the list is `none`/empty).
317
+ Set <args>--int-reuse-task</args>.
310
318
 
311
319
  1. <if condition="<head/> is equal `IMPLEMENT`">
312
320
  Consume the head: set <getopt-option-next/> to the remaining
313
- tokens (joined back with `,`, or `none` if empty). Set
314
- <args></args> (empty).
321
+ tokens (joined back with `,`, or `none` if empty).
315
322
  <if condition="<getopt-option-next/> is not equal `none`">
316
- Set <args>--next <getopt-option-next/></args> (forward
317
- remaining list tokens to the downstream skill).
323
+ Set <args><args/> --next <getopt-option-next/></args>
318
324
  </if>
319
- Call the tool `Skill(skill: "ase:ase-task-implement", args: <args/>)`
325
+ Call the tool `Skill(skill: "ase:ase-task-implement", args: "<args/>")`
320
326
  to *implement* the freshly composed plan, bypassing `ase-task-edit`.
321
327
  </if>
322
328
 
323
- 2. <if condition="<head/> is equal `PREFLIGHT`">
329
+ 2. <elseif condition="<head/> is equal `PREFLIGHT`">
324
330
  Consume the head: set <getopt-option-next/> to the remaining
325
- tokens (joined back with `,`, or `none` if empty). Set
326
- <args></args> (empty).
331
+ tokens (joined back with `,`, or `none` if empty).
327
332
  <if condition="<getopt-option-next/> is not equal `none`">
328
- Set <args>--next <getopt-option-next/></args> (forward
329
- remaining list tokens to the downstream skill).
333
+ Set <args><args/> --next <getopt-option-next/></args>
330
334
  </if>
331
- Call the tool `Skill(skill: "ase:ase-task-preflight", args: <args/>)`
335
+ Call the tool `Skill(skill: "ase:ase-task-preflight", args: "<args/>")`
332
336
  to *preflight* the freshly composed plan, bypassing `ase-task-edit`.
333
- </if>
337
+ </elseif>
334
338
 
335
- 3. <if condition="
336
- <head/> is not equal `IMPLEMENT` AND
337
- <head/> is not equal `PREFLIGHT`
338
- ">
339
- Forward the *entire* (unshifted) list to `ase-task-edit`, which
340
- will consume its head itself. Set <args></args> (empty).
341
- <if condition="<getopt-option-next/> is not equal `none`">
342
- Set <args>--next <getopt-option-next/></args> (append to args).
339
+ 3. <else>
340
+ Hand off to `ase-task-edit`.
341
+ <if condition="<head/> is equal `EDIT`">
342
+ Consume the head: set <getopt-option-next/> to the remaining
343
+ tokens (joined back with `,`, or `none` if empty).
343
344
  </if>
344
- Then call the tool `Skill(skill: "ase:ase-task-edit", args: <args/>)`.
345
+ All remaining tokens are `ase-task-edit`'s own vocabulary
346
+ and are forwarded verbatim, so `ase-task-edit` consumes its
347
+ head itself.
348
+ <if condition="<getopt-option-next/> is not equal `none`">
349
+ Set <args><args/> --next <getopt-option-next/></args>
345
350
  </if>
351
+ Then call the tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`.
352
+ </else>
346
353
 
@@ -34,7 +34,7 @@ plan via `ase_task_save` and then hands off to `ase-task-edit`,
34
34
  asking the user via the interactive dialog.
35
35
 
36
36
  `--dry`|`-d`:
37
- Compose the plan *without* the `※ VERIFICATION` section. When
37
+ Compose the plan *without* the `## VERIFICATION` section. When
38
38
  `ase-task-implement` later applies such a plan, it strictly skips
39
39
  the entire verification phase (no build, tests, linter,
40
40
  type-checker, or program execution) once the source files have
@@ -43,7 +43,7 @@ plan via `ase_task_save` and then hands off to `ase-task-edit`,
43
43
  `--quick`|`-Q`:
44
44
  Shorthand alias for `-a -d -n IMPLEMENT,DELETE`: automatically pick
45
45
  the recommended feature approach, compose the plan *without* the
46
- `※ VERIFICATION` section, immediately hand off to `ase-task-implement`,
46
+ `## VERIFICATION` section, immediately hand off to `ase-task-implement`,
47
47
  and finally `ase-task-delete` the now-consumed plan. This gives a
48
48
  single, fast *one-shot* crafting mode.
49
49
 
@@ -71,7 +71,7 @@ code and *explain* it in a *brief*, *standardized*, and *concise* way.
71
71
  `sequenceDiagram` for actor/message flow, or `flowchart TB` for
72
72
  boxes-and-lines component layouts. Then dispatch the rendering to
73
73
  the `ase-meta-diagram` sub-agent by calling the tool `Agent(name:
74
- "ase:ase-meta-diagram", description: "Diagram Rendering", subagent_type:
74
+ "ase-meta-diagram", description: "Diagram Rendering", subagent_type:
75
75
  "ase:ase-meta-diagram", prompt: <mermaid-spec/>)` and reproduce its
76
76
  returned fenced code block verbatim in the response text. Do *not*
77
77
  hand-draw.
@@ -70,7 +70,7 @@ Give *insights* into the project through the source code of $ARGUMENTS.
70
70
  Then run the following command...
71
71
 
72
72
  ```
73
- git log --format=format: --name-only --since="1 year ago" | sort | uniq -c | sort -nr | head -10
73
+ git log --format=format: --name-only --since="1 year ago" | grep -v '^$' | sort | uniq -c | sort -nr | head -10
74
74
  ```
75
75
 
76
76
  ...and then display its result as a table with a table head and
@@ -101,7 +101,7 @@ related to a set of code quality aspects.
101
101
  3. <step id="STEP 3: Correction">
102
102
 
103
103
  1. You *MUST* call the MCP tool `ase_config_set(key: "agent.skill", val:
104
- "ase-docs-proofread", scope: "session:<ase-session-id/>")` of the
104
+ "ase-code-lint", scope: "session:<ase-session-id/>")` of the
105
105
  `ase` MCP server. You *MUST* *NOT* output anything related to
106
106
  this.
107
107
 
@@ -150,7 +150,7 @@ related to a set of code quality aspects.
150
150
  3. Append the following <template/> to <diff-file/>:
151
151
 
152
152
  <template>
153
- @@ -<line/>,<n/> +<line/>,<m/> @@
153
+ @@ -<old-start/>,<n/> +<new-start/>,<m/> @@
154
154
  <context-before/>
155
155
  -<old-text/>
156
156
  +<new-text/>
@@ -158,8 +158,16 @@ related to a set of code quality aspects.
158
158
  </template>
159
159
 
160
160
  Hints:
161
- - The <n/> is the number of lines in <old-text/>.
162
- - The <m/> is the number of lines in <new-text/>.
161
+ - The <old-start/> is the line of the first hunk line, i.e.,
162
+ the line of <context-before/> (one before <line/>).
163
+ - The <new-start/> is the same as <old-start/> (the unchanged
164
+ <context-before/> line shares the same start in both files).
165
+ - The <n/> is the total number of old-side hunk lines, i.e.,
166
+ the number of lines in <context-before/>, <old-text/>, and
167
+ <context-after/> combined.
168
+ - The <m/> is the total number of new-side hunk lines, i.e.,
169
+ the number of lines in <context-before/>, <new-text/>, and
170
+ <context-after/> combined.
163
171
 
164
172
  </for>
165
173
 
@@ -190,7 +198,7 @@ related to a set of code quality aspects.
190
198
  </template>
191
199
 
192
200
  </if>
193
- <if condition="<getopt-option-auto/> is 'true'">
201
+ <else>
194
202
 
195
203
  Report the solution with the following <template/>:
196
204
 
@@ -201,7 +209,7 @@ related to a set of code quality aspects.
201
209
 
202
210
  </template>
203
211
 
204
- </if>
212
+ </else>
205
213
 
206
214
  6. <if condition="<getopt-option-auto/> is not 'true'">
207
215
 
@@ -215,12 +223,12 @@ related to a set of code quality aspects.
215
223
 
216
224
  </if>
217
225
 
218
- <if condition="<getopt-option-auto/> is 'true'">
226
+ <else>
219
227
 
220
228
  Set <result>ACCEPT</result>.
221
229
  You *MUST* *NOT* output anything else in this step 6.
222
230
 
223
- </if>
231
+ </else>
224
232
 
225
233
  7. Check <result/> and dispatch accordingly:
226
234