@rse/ase 0.0.60 → 0.0.62

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 (34) hide show
  1. package/dst/ase-diagram.js +34 -41
  2. package/dst/ase-persona.js +2 -2
  3. package/dst/ase-statusline.js +2 -2
  4. package/package.json +1 -1
  5. package/plugin/.claude-plugin/plugin.json +1 -1
  6. package/plugin/.github/plugin/plugin.json +1 -1
  7. package/plugin/agents/ase-code-lint.md +6 -0
  8. package/plugin/etc/markdownlint.yaml +2 -0
  9. package/plugin/meta/ase-skill.md +80 -37
  10. package/plugin/package.json +1 -1
  11. package/plugin/skills/ase-arch-analyze/SKILL.md +2 -2
  12. package/plugin/skills/ase-arch-discover/SKILL.md +4 -4
  13. package/plugin/skills/ase-code-analyze/SKILL.md +1 -1
  14. package/plugin/skills/ase-code-craft/SKILL.md +2 -2
  15. package/plugin/skills/ase-code-explain/SKILL.md +6 -6
  16. package/plugin/skills/ase-code-insight/SKILL.md +4 -4
  17. package/plugin/skills/ase-code-lint/SKILL.md +9 -9
  18. package/plugin/skills/ase-code-refactor/SKILL.md +2 -2
  19. package/plugin/skills/ase-code-resolve/SKILL.md +4 -4
  20. package/plugin/skills/ase-docs-proofread/SKILL.md +5 -5
  21. package/plugin/skills/ase-docs-proofread/help.md +1 -1
  22. package/plugin/skills/ase-meta-brainstorm/SKILL.md +220 -0
  23. package/plugin/skills/ase-meta-brainstorm/help.md +51 -0
  24. package/plugin/skills/{ase-meta-changes → ase-meta-changelog}/SKILL.md +7 -7
  25. package/plugin/skills/{ase-meta-changes → ase-meta-changelog}/help.md +4 -4
  26. package/plugin/skills/ase-meta-commit/help.md +1 -1
  27. package/plugin/skills/ase-meta-diaboli/SKILL.md +3 -3
  28. package/plugin/skills/ase-meta-diff/SKILL.md +301 -0
  29. package/plugin/skills/ase-meta-diff/help.md +81 -0
  30. package/plugin/skills/ase-meta-evaluate/SKILL.md +9 -9
  31. package/plugin/skills/ase-meta-why/SKILL.md +3 -3
  32. package/plugin/skills/ase-task-edit/SKILL.md +2 -2
  33. package/plugin/skills/ase-task-grill/SKILL.md +2 -2
  34. package/plugin/skills/ase-task-view/SKILL.md +2 -2
@@ -20,6 +20,15 @@ const parseColorMode = (name) => (value) => {
20
20
  throw new InvalidArgumentError(`${name} must be "none", "ansi16", or "ansi256"`);
21
21
  return value;
22
22
  };
23
+ /* scan a CSI escape sequence starting at line[i] (where line[i]===ESC and
24
+ line[i+1]==="["); return the index just past the terminating letter, or
25
+ -1 if the sequence is unterminated within the line */
26
+ const scanAnsiSeq = (line, i) => {
27
+ let j = i + 2;
28
+ while (j < line.length && !/[A-Za-z]/.test(line[j]))
29
+ j++;
30
+ return j < line.length ? j + 1 : -1;
31
+ };
23
32
  /* truncate a single rendered line to a maximum visible column,
24
33
  preserving ANSI escape sequences (CSI ...m) and appending an ANSI
25
34
  reset sequence if any styling was active at the truncation point */
@@ -33,20 +42,15 @@ const truncateAnsiLine = (line, budget) => {
33
42
  while (i < line.length) {
34
43
  const ch = line[i];
35
44
  if (ch === "\x1b" && line[i + 1] === "[") {
36
- let j = i + 2;
37
- while (j < line.length && !/[A-Za-z]/.test(line[j]))
38
- j++;
39
- if (j < line.length) {
40
- const seq = line.slice(i, j + 1);
45
+ const j = scanAnsiSeq(line, i);
46
+ if (j >= 0) {
47
+ const seq = line.slice(i, j);
41
48
  out += seq;
42
49
  if (seq.endsWith("m")) {
43
50
  const body = seq.slice(2, -1);
44
- if (body === "" || body === "0")
45
- styled = false;
46
- else
47
- styled = true;
51
+ styled = !(body === "" || body === "0");
48
52
  }
49
- i = j + 1;
53
+ i = j;
50
54
  continue;
51
55
  }
52
56
  i++;
@@ -70,11 +74,9 @@ const visibleWidth = (line) => {
70
74
  while (i < line.length) {
71
75
  const ch = line[i];
72
76
  if (ch === "\x1b" && line[i + 1] === "[") {
73
- let j = i + 2;
74
- while (j < line.length && !/[A-Za-z]/.test(line[j]))
75
- j++;
76
- if (j < line.length) {
77
- i = j + 1;
77
+ const j = scanAnsiSeq(line, i);
78
+ if (j >= 0) {
79
+ i = j;
78
80
  continue;
79
81
  }
80
82
  i++;
@@ -87,39 +89,30 @@ const visibleWidth = (line) => {
87
89
  };
88
90
  /* reusable functionality: Mermaid diagram rendering as Unicode/ASCII art */
89
91
  export class Diagram {
90
- /* detect terminal column width */
91
- static detectTermWidth() {
92
- let width = 0;
92
+ static detectTermDimension(envVar, stdoutProp) {
93
+ let value = 0;
93
94
  /* attempt 1: query environment variable */
94
- if (process.env.ASE_TERM_WIDTH !== undefined) {
95
- const cols = Number.parseInt(process.env.ASE_TERM_WIDTH, 10);
96
- if (Number.isFinite(cols) && cols > 0)
97
- width = cols;
95
+ const env = process.env[envVar];
96
+ if (env !== undefined) {
97
+ const n = Number.parseInt(env, 10);
98
+ if (Number.isFinite(n) && n > 0)
99
+ value = n;
98
100
  }
99
101
  /* attempt 2: query stdout */
100
- if (width === 0 && process.stdout.isTTY) {
101
- const cols = process.stdout.columns;
102
- if (typeof cols === "number" && cols > 0)
103
- width = cols;
102
+ if (value === 0 && process.stdout.isTTY) {
103
+ const n = process.stdout[stdoutProp];
104
+ if (typeof n === "number" && n > 0)
105
+ value = n;
104
106
  }
105
- return width;
107
+ return value;
108
+ }
109
+ /* detect terminal column width */
110
+ static detectTermWidth() {
111
+ return Diagram.detectTermDimension("ASE_TERM_WIDTH", "columns");
106
112
  }
107
113
  /* detect terminal row height */
108
114
  static detectTermHeight() {
109
- let height = 0;
110
- /* attempt 1: query environment variable */
111
- if (process.env.ASE_TERM_HEIGHT !== undefined) {
112
- const rows = Number.parseInt(process.env.ASE_TERM_HEIGHT, 10);
113
- if (Number.isFinite(rows) && rows > 0)
114
- height = rows;
115
- }
116
- /* attempt 2: query stdout */
117
- if (height === 0 && process.stdout.isTTY) {
118
- const rows = process.stdout.rows;
119
- if (typeof rows === "number" && rows > 0)
120
- height = rows;
121
- }
122
- return height;
115
+ return Diagram.detectTermDimension("ASE_TERM_HEIGHT", "rows");
123
116
  }
124
117
  /* detect terminal color capability */
125
118
  static detectColorMode() {
@@ -51,14 +51,14 @@ export default class PersonaMCP {
51
51
  "If `session` is provided, the operation is scoped to that session, " +
52
52
  "otherwise it operates on the strongest/closest scope (user/project cascade). " +
53
53
  "Allowed styles: \"writer\" (decorative, eloquent, explaining), " +
54
- "\"engineer\" (brief, factual, accurate), " +
54
+ "\"engineer\" (concise, factual, accurate), " +
55
55
  "\"telegrapher\" (very brief, factual, abbreviating), " +
56
56
  "\"caveman\" (ultra brief, rough, stuttering).",
57
57
  inputSchema: {
58
58
  style: z.enum(Persona.styles).optional()
59
59
  .describe("persona style to set; if omitted, the current persona style is returned"),
60
60
  session: z.string().optional()
61
- .describe("session identifier (allowed characters: A-Z, a-z, 0-9, '-'); " +
61
+ .describe("session identifier (allowed characters: A-Z, a-z, 0-9, '.', '_', '-'); " +
62
62
  "if omitted, the operation is not scoped to a specific session")
63
63
  }
64
64
  }, async (args) => {
@@ -346,10 +346,10 @@ export default class StatuslineCommand {
346
346
  emit(`${prefix("◔", "context")}${bar} ${pct}%`);
347
347
  },
348
348
  C: () => {
349
- const context = Math.floor(data.context_window?.used_percentage ?? 0);
349
+ const pct = Math.floor(data.context_window?.used_percentage ?? 0);
350
350
  const tokensCur = (data.context_window?.total_input_tokens ?? 0) +
351
351
  (data.context_window?.total_output_tokens ?? 0);
352
- const tokensLim = context > 0 && tokensCur > 0 ? Math.round(tokensCur * 100 / context) : 0;
352
+ const tokensLim = pct > 0 && tokensCur > 0 ? Math.round(tokensCur * 100 / pct) : 0;
353
353
  if (tokensLim > 0)
354
354
  emit(`${prefix("◆", "tokens")}${c.bold(formatTokens(tokensCur) + "/" + formatTokens(tokensLim))}`);
355
355
  },
package/package.json CHANGED
@@ -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.0.60",
9
+ "version": "0.0.62",
10
10
  "license": "GPL-3.0-only",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "0.0.60",
3
+ "version": "0.0.62",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "0.0.60",
3
+ "version": "0.0.62",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -269,6 +269,7 @@ Workflow
269
269
 
270
270
  <template>
271
271
  ● **WHAT**: [...]
272
+
272
273
  ○ **WHY**: [...]
273
274
  </template>
274
275
 
@@ -279,6 +280,11 @@ Workflow
279
280
  text with Markdown based on the following <template/>:
280
281
  <template>"`<words/>`"</template>.
281
282
 
283
+ For all code references, always use a relative filename and
284
+ append the related single 1-based line number N as `:N` or the
285
+ related 1-based line number range as `:N-M` to the end of the
286
+ filename.
287
+
282
288
  4. Create the change set.
283
289
  For this, set <change-set></change-set> (set changes to empty).
284
290
 
@@ -16,4 +16,6 @@ ul-indent: false
16
16
  ol-indent: false
17
17
  heading-style: false
18
18
  no-multiple-space-atx: false
19
+ blanks-around-tables: false
20
+ code-block-style: false
19
21
 
@@ -158,40 +158,83 @@ MCP Tool Calls
158
158
  Skill Identification
159
159
  --------------------
160
160
 
161
- - *IMPORTANT*: Set <skill></skill> (set to empty)
162
- and <skill-name></skill-name> (set name to empty).
163
-
164
- In case <skill/> later becomes *not* empty by defining it as <skill
165
- name="<name/>"><body/></skill>, set <skill-name><name/></skill-name>
166
- (set skill name to name), and then (but only if `$1` is *NOT* equal
167
- to `-h` or `--help`) you *MUST* once output the following output
168
- <template/>:
169
-
170
- <template>
171
- ⧉ **ASE**: ✪ skill: **<skill-name/>**, ✦ purpose: **<skill/>**, ▶ status: **skill started**
172
- </template>
173
-
174
- Later (but only if `$1` is *NOT* equal to `-h` or `--help`), once
175
- this skill finally will stop processing, you *MUST* once output the
176
- following output <template/>:
177
-
178
- <template>
179
- ⧉ **ASE**: ✪ skill: **<skill-name/>**, status: **skill finished**
180
- </template>
181
-
182
- - *IMPORTANT*: Set <objective></objective> (set to empty).
183
- Then, in case <objective/> later becomes *not* empty,
184
- you *MUST* once output the following output <template/>:
185
-
186
- <template>
187
- ⧉ **ASE**: ✪ skill: **<skill-name/>**, ◎ objective: **<objective/>**
188
- </template>
189
-
190
- - *IMPORTANT*:
191
- If `$1` (the first token of the skill arguments) is equal to `-h` or
192
- `--help`, you *MUST* once output the following output <template/> and
193
- then *IMMEDIATELY* *STOP* the further skill processing:
194
-
195
- <template>
196
- @${CLAUDE_SKILL_DIR}/help.md
197
- </template>
161
+ - *IMPORTANT*: Set <skill></skill> (set to empty)
162
+ and <skill-name></skill-name> (set name to empty).
163
+
164
+ In case <skill/> later becomes *not* empty by defining it as <skill
165
+ name="<name/>"><body/></skill>, set <skill-name><name/></skill-name>
166
+ (set skill name to name), and then (but only if `$1` is *NOT* equal
167
+ to `-h` or `--help`) you *MUST* once output the following output
168
+ <template/>:
169
+
170
+ <template>
171
+ ⧉ **ASE**: ✪ skill: **<skill-name/>**, ✦ purpose: **<skill/>**, ▶ status: **skill started**
172
+ </template>
173
+
174
+ Later (but only if `$1` is *NOT* equal to `-h` or `--help`), once
175
+ this skill finally will stop processing, you *MUST* once output the
176
+ following output <template/>:
177
+
178
+ <template>
179
+ ⧉ **ASE**: ✪ skill: **<skill-name/>**, status: **skill finished**
180
+ </template>
181
+
182
+ - *IMPORTANT*: Set <objective></objective> (set to empty).
183
+ Then, in case <objective/> later becomes *not* empty,
184
+ you *MUST* once output the following output <template/>:
185
+
186
+ <template>
187
+ ⧉ **ASE**: ✪ skill: **<skill-name/>**, ◎ objective: **<objective/>**
188
+ </template>
189
+
190
+ - *IMPORTANT*:
191
+ If `$1` (the first token of the skill arguments) is equal to `-h` or
192
+ `--help`, you *MUST* once output the following output <template/> and
193
+ then *IMMEDIATELY* *STOP* the further skill processing:
194
+
195
+ <template>
196
+ @${CLAUDE_SKILL_DIR}/help.md
197
+ </template>
198
+
199
+ Template Patterns
200
+ -----------------
201
+
202
+ - When `<ase-tpl-head/>` (no title attribute) should be expanded, use:
203
+
204
+ <template>
205
+ ╭──────────────────────────────────────────────────────────────────────┈┈┈┈┈┈┈┈┈┈
206
+ </template>
207
+
208
+ - When `<ase-tpl-head title="<title/>"/>` should be expanded, use
209
+ (where <bar/> = "─" x (70 - 8 - length("<title/>")), i.e., <bar/> is
210
+ the "─" character repeated (70 - 16 - length("<title/>")) times):
211
+
212
+ <template>
213
+ ╭────━━━━**(** `<title/>` **)**━━━━────<bar/>┈┈┈┈┈┈┈┈┈┈
214
+ </template>
215
+
216
+ - When `<ase-tpl-foot/>` (no title attribute) should be expanded, use:
217
+
218
+ <template>
219
+ ╰──────────────────────────────────────────────────────────────────────┈┈┈┈┈┈┈┈┈┈
220
+ </template>
221
+
222
+ - When `<ase-tpl-foot title="<title/>"/>` should be expanded, use
223
+ (where <bar/> = "─" x (70 - 8 - length("<title/>")), i.e., <bar/> is
224
+ the "─" character repeated (70 - 16 - length("<title/>")) times):
225
+
226
+ <template>
227
+ ╰────━━━━**(** `<title/>` **)**━━━━────<bar/>┈┈┈┈┈┈┈┈┈┈
228
+ </template>
229
+
230
+ - When `<ase-tpl-bullet-secondary/>` should be expanded, use:
231
+
232
+ <template>⚪</template>
233
+
234
+ - When `<ase-tpl-bullet-normal/>` should be expanded, use:
235
+
236
+ <template>🔵</template>
237
+
238
+ - When `<ase-tpl-bullet-signal/>` should be expanded, use:
239
+
240
+ <template>🟠</template>
@@ -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.0.60",
9
+ "version": "0.0.62",
10
10
  "license": "GPL-3.0-only",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
@@ -357,7 +357,7 @@ interface quality, quality attributes, and architecture governance.
357
357
  Report each unpaired finding with the following <template/>:
358
358
 
359
359
  <template>
360
- &#x1F7E0; **PROBLEM** P<n/> (Severity: <severity/>, Aspect: <aspect-id/>): **<title/>**
360
+ <ase-tpl-bullet-signal/> **PROBLEM** P<n/> (Severity: <severity/>, Aspect: <aspect-id/>): **<title/>**
361
361
 
362
362
  <description/>
363
363
  </template>
@@ -365,7 +365,7 @@ interface quality, quality attributes, and architecture governance.
365
365
  Report each paired or clustered finding with the following <template/>:
366
366
 
367
367
  <template>
368
- &#x1F535; **TRADEOFF** T<n/> (Severity: <severity/>): **<title/>**
368
+ <ase-tpl-bullet-normal/> **TRADEOFF** T<n/> (Severity: <severity/>): **<title/>**
369
369
 
370
370
  - *Focal aspect*: <focal-aspect/> — <focal-state/>
371
371
  - *In tension with*: <partner-list/>
@@ -39,7 +39,7 @@ for the technology stack to *provide* the *needed functionality*
39
39
  <template/>:
40
40
 
41
41
  <template>
42
- &#x1F535; **FUNCTIONALITY**: <functionality/>
42
+ <ase-tpl-bullet-normal/> **FUNCTIONALITY**: <functionality/>
43
43
  </template>
44
44
  </step>
45
45
 
@@ -73,7 +73,7 @@ for the technology stack to *provide* the *needed functionality*
73
73
  following <template/>:
74
74
 
75
75
  <template>
76
- &#x1F535; **TECHNOLOGY STACK**: <stack/>
76
+ <ase-tpl-bullet-normal/> **TECHNOLOGY STACK**: <stack/>
77
77
  </template>
78
78
  </step>
79
79
 
@@ -157,7 +157,7 @@ for the technology stack to *provide* the *needed functionality*
157
157
  anything else:
158
158
 
159
159
  <template>
160
- &#x1F535; **COMPONENT HINTS**:
160
+ <ase-tpl-bullet-normal/> **COMPONENT HINTS**:
161
161
 
162
162
  | ⚑ *Component* | ▣ *Package* | ⚖ *Hint* |
163
163
  | :----------------- | :------------- | :-------- |
@@ -170,7 +170,7 @@ for the technology stack to *provide* the *needed functionality*
170
170
  with just the following <template/>:
171
171
 
172
172
  <template>
173
- &#x1F535; **COMPONENT RANKING**:
173
+ <ase-tpl-bullet-normal/> **COMPONENT RANKING**:
174
174
 
175
175
  | ⚑ *Component* | ▣ *Package* | ❖ *Version* | ↓ *Downloads* | ⎈ *Stars* | ⏲ *Updated* | ☆ *Created* |
176
176
  | :----------------- | :------------- | -----------: | -----------------: | -------------: | :--------------- | :----------- |
@@ -51,7 +51,7 @@ code, for problems in its *logic* and *semantics* and its related
51
51
  points.
52
52
 
53
53
  <template>
54
- &#x1F7E0; PROBLEM (Severity: **<severity/>**): **P<n/>**: **<title/>**
54
+ <ase-tpl-bullet-signal/> PROBLEM (Severity: **<severity/>**): **P<n/>**: **<title/>**
55
55
 
56
56
  <description/>
57
57
  </template>
@@ -199,7 +199,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
199
199
  4. Indicate start of reporting by showing the following <template/>:
200
200
 
201
201
  <template>
202
- **ASE**: ┈┈┈┈┈┈┈┈────────━━━━━━━━**(** `APPROACHES-BEGIN` **)**━━━━━━━━────────┈┈┈┈┈┈┈┈
202
+ <ase-tpl-head title="APPROACHES"/>
203
203
  </template>
204
204
 
205
205
  5. Now report each approach with the following <template/>,
@@ -240,7 +240,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
240
240
  6. Indicate end of reporting by showing the following <template/>:
241
241
 
242
242
  <template>
243
- **ASE**: ┈┈┈┈┈┈┈┈────────━━━━━━━━**(** `APPROACHES-END` **)**━━━━━━━━────────┈┈┈┈┈┈┈┈
243
+ <ase-tpl-foot title="APPROACHES"/>
244
244
  </template>
245
245
 
246
246
  5. **Choose Feature Crafting Approach**:
@@ -42,12 +42,12 @@ code and *explain* it in a *brief*, *standardized*, and *concise* way.
42
42
  Output the result with the following <template/>:
43
43
 
44
44
  <template>
45
- &#x1F535; **WHAT** (You should know what):
45
+ <ase-tpl-bullet-normal/> **WHAT** (You should know what):
46
46
  - [...]
47
47
  - [...]
48
48
  - [...]
49
49
 
50
- &#x1F535; **WHY** (You should know why):
50
+ <ase-tpl-bullet-normal/> **WHY** (You should know why):
51
51
  - [...]
52
52
  - [...]
53
53
  - [...]
@@ -80,12 +80,12 @@ code and *explain* it in a *brief*, *standardized*, and *concise* way.
80
80
  Output the result with the following <template/>:
81
81
 
82
82
  <template>
83
- &#x26AA; **ANALOGY** (You should imagine):
83
+ <ase-tpl-bullet-secondary/> **ANALOGY** (You should imagine):
84
84
  - [...]
85
85
  - [...]
86
86
  - [...]
87
87
 
88
- &#x26AA; **DIAGRAM** (You should grasp):
88
+ <ase-tpl-bullet-secondary/> **DIAGRAM** (You should grasp):
89
89
  [...]
90
90
  </template>
91
91
  </step>
@@ -103,12 +103,12 @@ code and *explain* it in a *brief*, *standardized*, and *concise* way.
103
103
  Output the result with the following <template/>:
104
104
 
105
105
  <template>
106
- &#x1F7E0; **CRUXES** (You should notice):
106
+ <ase-tpl-bullet-signal/> **CRUXES** (You should notice):
107
107
  - [...]
108
108
  - [...]
109
109
  - [...]
110
110
 
111
- &#x1F7E0; **GOTCHAS** (You should not stumble over):
111
+ <ase-tpl-bullet-signal/> **GOTCHAS** (You should not stumble over):
112
112
  - [...]
113
113
  - [...]
114
114
  - [...]
@@ -35,7 +35,7 @@ Give *insights* into the project through the source code of $ARGUMENTS.
35
35
  Display the results with the following <template/>:
36
36
 
37
37
  <template>
38
- &#x1F535; **PROJECT ABSTRACT**:
38
+ <ase-tpl-bullet-normal/> **PROJECT ABSTRACT**:
39
39
 
40
40
  <abstract/>
41
41
  </template>
@@ -52,7 +52,7 @@ Give *insights* into the project through the source code of $ARGUMENTS.
52
52
  ...and then display the results with the following <template/>:
53
53
 
54
54
  <template>
55
- &#x1F535; **PROJECT AUTHOR**:
55
+ <ase-tpl-bullet-normal/> **PROJECT AUTHOR**:
56
56
 
57
57
  <author/>
58
58
  </template>
@@ -64,7 +64,7 @@ Give *insights* into the project through the source code of $ARGUMENTS.
64
64
  Display the following <template/>:
65
65
 
66
66
  <template>
67
- &#x1F535; **SOURCE CHURN**:
67
+ <ase-tpl-bullet-normal/> **SOURCE CHURN**:
68
68
  </template>
69
69
 
70
70
  Then run the following command...
@@ -82,7 +82,7 @@ Give *insights* into the project through the source code of $ARGUMENTS.
82
82
  Display the following <template/>:
83
83
 
84
84
  <template>
85
- &#x1F535; **MODULE STRUCTURE**:
85
+ <ase-tpl-bullet-normal/> **MODULE STRUCTURE**:
86
86
  </template>
87
87
 
88
88
  Find all modules (or OOP classes) and build a Mermaid specification
@@ -36,7 +36,7 @@ related to a set of code quality aspects.
36
36
  First, use the following <template/> to give a hint on this step:
37
37
 
38
38
  <template>
39
- &#x26AA; **LINT INVESTIGATION**
39
+ <ase-tpl-bullet-secondary/> **LINT INVESTIGATION**
40
40
  </template>
41
41
 
42
42
  Dispatch the investigation to a *sub-agent* via the `Agent`
@@ -70,10 +70,10 @@ related to a set of code quality aspects.
70
70
  ordering `A01 - XXX`...`A20 - XXX`.
71
71
 
72
72
  <template>
73
- &#x26AA; **LINT SUMMARY**:
73
+ <ase-tpl-bullet-secondary/> **LINT SUMMARY**:
74
74
 
75
- &#x1F7E0; **AX - XXX**: N issues
76
- &#x1F7E0; **AX - XXX**: N issues
75
+ <ase-tpl-bullet-signal/> **AX - XXX**: N issues
76
+ <ase-tpl-bullet-signal/> **AX - XXX**: N issues
77
77
  [...]
78
78
  </template>
79
79
 
@@ -81,7 +81,7 @@ related to a set of code quality aspects.
81
81
  output the summary instead:
82
82
 
83
83
  <template>
84
- &#x26AA; **LINT SUMMARY**:
84
+ <ase-tpl-bullet-secondary/> **LINT SUMMARY**:
85
85
 
86
86
  *(no problems detected)*
87
87
  </template>
@@ -162,7 +162,7 @@ related to a set of code quality aspects.
162
162
  4. Report the problem with the following <template/>:
163
163
 
164
164
  <template>
165
- &#x1F7E0; **<aspect/> PROBLEM** (`<severity/>`): <context/>
165
+ <ase-tpl-bullet-signal/> **<aspect/> PROBLEM** (`<severity/>`): <context/>
166
166
 
167
167
  <description/>
168
168
 
@@ -173,7 +173,7 @@ related to a set of code quality aspects.
173
173
  Report the solution with the following <template/>:
174
174
 
175
175
  <template>
176
- &#x1F535; **<aspect/> SOLUTION**:
176
+ <ase-tpl-bullet-normal/> **<aspect/> SOLUTION**:
177
177
 
178
178
  ```diff
179
179
  <diff/>
@@ -187,7 +187,7 @@ related to a set of code quality aspects.
187
187
  Report the solution with the following <template/>:
188
188
 
189
189
  <template>
190
- &#x1F535; **<aspect/> SOLUTION**:
190
+ <ase-tpl-bullet-normal/> **<aspect/> SOLUTION**:
191
191
 
192
192
  *(corresponding change automatically applied)*
193
193
 
@@ -250,7 +250,7 @@ related to a set of code quality aspects.
250
250
  following final <template/>:
251
251
 
252
252
  <template>
253
- &#x26AA; **LINT FINISHED**
253
+ <ase-tpl-bullet-secondary/> **LINT FINISHED**
254
254
  </template>
255
255
 
256
256
  </step>
@@ -188,7 +188,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
188
188
  4. Indicate start of reporting by showing the following <template/>:
189
189
 
190
190
  <template>
191
- **ASE**: ┈┈┈┈┈┈┈┈────────━━━━━━━━**(** `APPROACHES-BEGIN` **)**━━━━━━━━────────┈┈┈┈┈┈┈┈
191
+ <ase-tpl-head title="APPROACHES"/>
192
192
  </template>
193
193
 
194
194
  5. Now report each approach with the following <template/>,
@@ -230,7 +230,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
230
230
  6. Indicate end of reporting by showing the following <template/>:
231
231
 
232
232
  <template>
233
- **ASE**: ┈┈┈┈┈┈┈┈────────━━━━━━━━**(** `APPROACHES-END` **)**━━━━━━━━────────┈┈┈┈┈┈┈┈
233
+ <ase-tpl-foot title="APPROACHES"/>
234
234
  </template>
235
235
 
236
236
  5. **Choose Refactoring Approach**:
@@ -125,11 +125,11 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
125
125
  Report those details with the following <template/>:
126
126
 
127
127
  <template>
128
- &#x1F7E0; **PROBLEM CONTEXT**: *<context/>*
128
+ <ase-tpl-bullet-signal/> **PROBLEM CONTEXT**: *<context/>*
129
129
  <affected-code-excerpt/>
130
130
  <optional-diagram/>
131
131
 
132
- &#x1F7E0; **PROBLEM DETAILS**: *<summary/>*
132
+ <ase-tpl-bullet-signal/> **PROBLEM DETAILS**: *<summary/>*
133
133
  ● [...]
134
134
  ● [...]
135
135
  ● [...]
@@ -237,7 +237,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
237
237
  4. Indicate start of reporting by showing the following <template/>:
238
238
 
239
239
  <template>
240
- **ASE**: ┈┈┈┈┈┈┈┈────────━━━━━━━━**(** `APPROACHES-BEGIN` **)**━━━━━━━━────────┈┈┈┈┈┈┈┈
240
+ <ase-tpl-head title="APPROACHES"/>
241
241
  </template>
242
242
 
243
243
  5. Now report each approach with the following <template/>,
@@ -279,7 +279,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
279
279
  6. Indicate end of reporting by showing the following <template/>:
280
280
 
281
281
  <template>
282
- **ASE**: ┈┈┈┈┈┈┈┈────────━━━━━━━━**(** `APPROACHES-END` **)**━━━━━━━━────────┈┈┈┈┈┈┈┈
282
+ <ase-tpl-foot title="APPROACHES"/>
283
283
  </template>
284
284
 
285
285
  5. **Choose Problem Resolution Approach**: