@rse/ase 0.9.7 → 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.
- package/dst/ase-getopt.js +11 -1
- package/dst/ase-task.js +20 -21
- package/package.json +2 -2
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/agents/ase-docs-proofread.md +2 -2
- package/plugin/meta/ase-constitution.md +7 -0
- package/plugin/meta/ase-control.md +24 -3
- package/plugin/meta/ase-format-task.md +2 -2
- package/plugin/meta/ase-getopt.md +2 -1
- package/plugin/meta/ase-skill.md +28 -9
- package/plugin/package.json +2 -2
- package/plugin/skills/ase-arch-analyze/SKILL.md +88 -89
- package/plugin/skills/ase-arch-discover/SKILL.md +18 -9
- package/plugin/skills/ase-code-analyze/SKILL.md +6 -5
- package/plugin/skills/ase-code-craft/SKILL.md +42 -35
- package/plugin/skills/ase-code-explain/SKILL.md +1 -1
- package/plugin/skills/ase-code-insight/SKILL.md +1 -1
- package/plugin/skills/ase-code-lint/SKILL.md +16 -8
- package/plugin/skills/ase-code-refactor/SKILL.md +42 -35
- package/plugin/skills/ase-code-resolve/SKILL.md +43 -35
- package/plugin/skills/ase-docs-distill/SKILL.md +1 -1
- package/plugin/skills/ase-docs-distill/help.md +3 -3
- package/plugin/skills/ase-docs-proofread/SKILL.md +22 -13
- package/plugin/skills/ase-meta-brainstorm/SKILL.md +25 -6
- package/plugin/skills/ase-meta-brainstorm/help.md +6 -10
- package/plugin/skills/ase-meta-diff/SKILL.md +5 -4
- package/plugin/skills/ase-meta-diff/help.md +10 -11
- package/plugin/skills/ase-meta-evaluate/SKILL.md +10 -9
- package/plugin/skills/ase-meta-quorum/SKILL.md +15 -5
- package/plugin/skills/ase-meta-review/SKILL.md +3 -3
- package/plugin/skills/ase-meta-review/help.md +3 -3
- package/plugin/skills/ase-meta-search/SKILL.md +9 -8
- package/plugin/skills/ase-meta-steelman/SKILL.md +1 -1
- package/plugin/skills/ase-meta-why/SKILL.md +16 -10
- package/plugin/skills/ase-task-condense/SKILL.md +32 -17
- package/plugin/skills/ase-task-condense/help.md +1 -1
- package/plugin/skills/ase-task-delete/SKILL.md +6 -3
- package/plugin/skills/ase-task-edit/SKILL.md +53 -32
- package/plugin/skills/ase-task-edit/help.md +2 -2
- package/plugin/skills/ase-task-grill/SKILL.md +53 -24
- package/plugin/skills/ase-task-id/SKILL.md +11 -2
- package/plugin/skills/ase-task-implement/SKILL.md +36 -15
- package/plugin/skills/ase-task-list/SKILL.md +1 -1
- package/plugin/skills/ase-task-preflight/SKILL.md +40 -20
- package/plugin/skills/ase-task-preflight/help.md +1 -1
- package/plugin/skills/ase-task-reboot/SKILL.md +27 -18
- package/plugin/skills/ase-task-rename/SKILL.md +5 -3
- package/plugin/skills/ase-task-view/help.md +24 -5
|
@@ -32,15 +32,15 @@ one block per point, each showing its *LOCATION*, *EVIDENCE*,
|
|
|
32
32
|
ranking is *auditable* rather than an opaque ordering.
|
|
33
33
|
|
|
34
34
|
The `--top`/`-t` *N* option is a *length dial* that bounds the list to at
|
|
35
|
-
most *N* points (default *
|
|
35
|
+
most *N* points (default *5*). It is an *upper bound only*: when the
|
|
36
36
|
document has fewer salient points than *N*, the skill emits only the
|
|
37
37
|
points it found and *never pads* the list with filler; a `0`, negative, or
|
|
38
|
-
non-numeric value falls back to the default *
|
|
38
|
+
non-numeric value falls back to the default *5*.
|
|
39
39
|
|
|
40
40
|
## ARGUMENTS
|
|
41
41
|
|
|
42
42
|
`--top`, `-t` *N*:
|
|
43
|
-
Bound the ranked list to at most *N* key points (default *
|
|
43
|
+
Bound the ranked list to at most *N* key points (default *5*). The
|
|
44
44
|
bound is a *cap*, never a *quota* - fewer points are emitted when the
|
|
45
45
|
document does not contain *N* salient ones, and an invalid or
|
|
46
46
|
non-positive *N* reverts to the default.
|
|
@@ -116,8 +116,8 @@ Analyze documents for spelling, punctuation, or grammar errors
|
|
|
116
116
|
|
|
117
117
|
3. <if condition="<getopt-option-auto/> is not 'true'">
|
|
118
118
|
|
|
119
|
-
Render the proposed correction as a *unified diff* with *
|
|
120
|
-
|
|
119
|
+
Render the proposed correction as a *unified diff* with *up to
|
|
120
|
+
two* lines of context in a fenced block based on the following <template/>:
|
|
121
121
|
|
|
122
122
|
<template>
|
|
123
123
|
|
|
@@ -126,7 +126,7 @@ Analyze documents for spelling, punctuation, or grammar errors
|
|
|
126
126
|
```diff
|
|
127
127
|
--- <file/> (original)
|
|
128
128
|
+++ <file/> (corrected)
|
|
129
|
-
@@ -<
|
|
129
|
+
@@ -<old-start/>,<n/> +<new-start/>,<m/> @@
|
|
130
130
|
<context-before/>
|
|
131
131
|
-<old-text/>
|
|
132
132
|
+<new-text/>
|
|
@@ -136,8 +136,16 @@ Analyze documents for spelling, punctuation, or grammar errors
|
|
|
136
136
|
</template>
|
|
137
137
|
|
|
138
138
|
Hints:
|
|
139
|
-
- The <
|
|
140
|
-
|
|
139
|
+
- The <old-start/> is the line of the first hunk line, i.e.,
|
|
140
|
+
the line of <context-before/> (one before <line/>).
|
|
141
|
+
- The <new-start/> is the same as <old-start/> (the unchanged
|
|
142
|
+
<context-before/> line shares the same start in both files).
|
|
143
|
+
- The <n/> is the total number of old-side hunk lines, i.e.,
|
|
144
|
+
the number of lines in <context-before/>, <old-text/>, and
|
|
145
|
+
<context-after/> combined.
|
|
146
|
+
- The <m/> is the total number of new-side hunk lines, i.e.,
|
|
147
|
+
the number of lines in <context-before/>, <new-text/>, and
|
|
148
|
+
<context-after/> combined.
|
|
141
149
|
|
|
142
150
|
</if>
|
|
143
151
|
|
|
@@ -153,20 +161,21 @@ Analyze documents for spelling, punctuation, or grammar errors
|
|
|
153
161
|
|
|
154
162
|
</if>
|
|
155
163
|
|
|
156
|
-
<
|
|
164
|
+
<else>
|
|
157
165
|
|
|
158
166
|
Set <result>ACCEPT</result>.
|
|
159
167
|
|
|
160
|
-
</
|
|
168
|
+
</else>
|
|
161
169
|
|
|
162
170
|
5. Check <result/> and dispatch accordingly:
|
|
163
171
|
|
|
164
172
|
- <if condition="<result/> is 'ACCEPT'">
|
|
165
173
|
|
|
166
|
-
Invoke the `Edit` tool to apply the change
|
|
167
|
-
|
|
168
|
-
the active proofread marker,
|
|
169
|
-
prompt will appear. Then
|
|
174
|
+
Invoke the `Edit` tool to apply the change by replacing
|
|
175
|
+
<old-text/> with <new-text/> at <file/>:<line/>. The operation
|
|
176
|
+
will be auto-approved because of the active proofread marker,
|
|
177
|
+
so *no* interactive permission prompt will appear. Then
|
|
178
|
+
continue with the next <item/>.
|
|
170
179
|
|
|
171
180
|
</if>
|
|
172
181
|
|
|
@@ -174,8 +183,8 @@ Analyze documents for spelling, punctuation, or grammar errors
|
|
|
174
183
|
|
|
175
184
|
Generate a *new* proposal for the *same* <item/>,
|
|
176
185
|
incorporating the user's free-text hint from <result/>
|
|
177
|
-
after the "OTHER:" prefix, and
|
|
178
|
-
this iteration. There is *no* cap on refinement rounds -
|
|
186
|
+
after the "OTHER:" prefix, and *go back* to substep 2 of
|
|
187
|
+
this `for`-iteration. There is *no* cap on refinement rounds -
|
|
179
188
|
keep refining until the user picks `ACCEPT` or `REJECT`.
|
|
180
189
|
|
|
181
190
|
</if>
|
|
@@ -113,15 +113,15 @@ Honor the following tenets throughout the brainstorming:
|
|
|
113
113
|
<ase-tpl-bullet-signal/> FACET <M/>/<m/>: **<facet-M/>**, QUESTION: **<question-M/>**
|
|
114
114
|
</template>
|
|
115
115
|
|
|
116
|
-
2. Determine *
|
|
116
|
+
2. Determine *2 to 4* grounded candidate answers
|
|
117
117
|
<answer-M-K/> (K={1,2,3,4}) from the code base, the documented
|
|
118
118
|
context, and your world knowledge.
|
|
119
119
|
|
|
120
120
|
3. Use an interactive user dialog with header <facet-M/> and
|
|
121
121
|
question <question-M/>, and let the user select the
|
|
122
|
-
<answer-M/> out of the candidate answers <answer-M-K/> (
|
|
123
|
-
|
|
124
|
-
|
|
122
|
+
<answer-M/> out of the candidate answers <answer-M-K/> (leave
|
|
123
|
+
out the answer lines of those candidate answers you have
|
|
124
|
+
not determined)
|
|
125
125
|
|
|
126
126
|
<expand name="user-dialog">
|
|
127
127
|
<facet-M/>: <question-M/>
|
|
@@ -131,7 +131,26 @@ Honor the following tenets throughout the brainstorming:
|
|
|
131
131
|
<answer-M-4/>: (fourth grounded candidate answer)
|
|
132
132
|
</expand>
|
|
133
133
|
|
|
134
|
-
4.
|
|
134
|
+
4. Dispatch on the dialog <result/>:
|
|
135
|
+
|
|
136
|
+
- If <result/> is `CANCEL`:
|
|
137
|
+
Skip the remaining sub-steps of this iteration cycle and
|
|
138
|
+
continue directly with sub-step 2 below (cancellation handling).
|
|
139
|
+
|
|
140
|
+
- If <result/> starts with `ERROR:`:
|
|
141
|
+
Ask the user interactively, without a special tool, the
|
|
142
|
+
question <question-M/> directly and set <answer-M/> to the
|
|
143
|
+
response of the user.
|
|
144
|
+
|
|
145
|
+
- If <result/> matches `OTHER: <text/>`:
|
|
146
|
+
Set <answer-M><text/></answer-M> (take the user's free-text answer).
|
|
147
|
+
|
|
148
|
+
- Otherwise:
|
|
149
|
+
Set <answer-M><result/></answer-M> (take the selected candidate answer).
|
|
150
|
+
|
|
151
|
+
Do not output anything in this sub-step.
|
|
152
|
+
|
|
153
|
+
5. Output the following <template/>:
|
|
135
154
|
|
|
136
155
|
<template>
|
|
137
156
|
<ase-tpl-bullet-normal/> FACET <M/>/<m/>: **<facet-M/>**, ANSWER: **<answer-M/>**
|
|
@@ -182,7 +201,7 @@ Honor the following tenets throughout the brainstorming:
|
|
|
182
201
|
set and finally into a recommendation.
|
|
183
202
|
|
|
184
203
|
1. *Cluster*: group the candidate ideas into <c/> coherent clusters
|
|
185
|
-
<cluster-C/> (a short 1-4 word label, C=1
|
|
204
|
+
<cluster-C/> (a short 1-4 word label, C=1...<c/>), collapsing
|
|
186
205
|
near-duplicates and discarding ideas pruned by *You Aren't Gonna
|
|
187
206
|
Need It (YAGNI)* (speculative, out-of-scope, or contradicting
|
|
188
207
|
documented context).
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
|
|
8
8
|
`ase-meta-brainstorm`
|
|
9
9
|
[`--help`|`-h`]
|
|
10
|
-
[`--max-clarify=3`]
|
|
10
|
+
[`--max-clarify`|`-c=3`]
|
|
11
11
|
[`--min-ideas`|`-i=12`]
|
|
12
|
-
[`--min-rank=7`]
|
|
13
|
-
[`--max-shortlist=4`]
|
|
12
|
+
[`--min-rank`|`-r=7`]
|
|
13
|
+
[`--max-shortlist`|`-s=4`]
|
|
14
14
|
*topic*
|
|
15
15
|
|
|
16
16
|
## DESCRIPTION
|
|
@@ -33,13 +33,9 @@ default 7, or higher). Finally it distills a *shortlist* of the top
|
|
|
33
33
|
wherever possible - and derives a single *RECOMMENDATION*, being either
|
|
34
34
|
the highest-ranked option or a principled synthesis of the shortlist.
|
|
35
35
|
|
|
36
|
-
On completion the skill offers a *next step*: stop, or hand the
|
|
37
|
-
recommended direction off to the `ase-task-edit`, `ase-code-craft`, or
|
|
38
|
-
`ase-task-preflight` skills.
|
|
39
|
-
|
|
40
36
|
## OPTIONS
|
|
41
37
|
|
|
42
|
-
`--max-clarify=3`:
|
|
38
|
+
`--max-clarify`|`-c=3`:
|
|
43
39
|
The *maximum* number of essential-unknown clarification questions
|
|
44
40
|
asked in the *clarify intent* phase (default: 3). Lower it for a
|
|
45
41
|
faster, leaner intake, raise it for more upfront grounding.
|
|
@@ -49,12 +45,12 @@ recommended direction off to the `ase-task-edit`, `ase-code-craft`, or
|
|
|
49
45
|
phase before converging (default: 12). Raise it for a broader idea
|
|
50
46
|
space, lower it for a quicker, narrower session.
|
|
51
47
|
|
|
52
|
-
`--min-rank=7`:
|
|
48
|
+
`--min-rank`|`-r=7`:
|
|
53
49
|
The *minimum* 0-10 fit rank an idea must score to survive the
|
|
54
50
|
*converge* phase (default: 7). Raise it for a stricter filter, lower
|
|
55
51
|
it to retain more ideas.
|
|
56
52
|
|
|
57
|
-
`--max-shortlist=4`:
|
|
53
|
+
`--max-shortlist`|`-s=4`:
|
|
58
54
|
The *maximum* number of distilled options on the final *shortlist*
|
|
59
55
|
(default: 4). Lower it for a sharper focus, raise it for more
|
|
60
56
|
finalists.
|
|
@@ -11,9 +11,9 @@ disable-model-invocation: false
|
|
|
11
11
|
effort: high
|
|
12
12
|
allowed-tools:
|
|
13
13
|
- "Bash(git diff *)"
|
|
14
|
-
- "Bash(git grep
|
|
15
|
-
- "Bash(git ls-files
|
|
16
|
-
- "Bash(grep
|
|
14
|
+
- "Bash(git grep *)"
|
|
15
|
+
- "Bash(git ls-files *)"
|
|
16
|
+
- "Bash(grep *)"
|
|
17
17
|
- "Agent"
|
|
18
18
|
---
|
|
19
19
|
|
|
@@ -98,7 +98,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
98
98
|
|
|
99
99
|
</template>
|
|
100
100
|
|
|
101
|
-
2. Render a *
|
|
101
|
+
2. Render a *three-column table* with one row per discovered
|
|
102
102
|
*intent group* present in the <diff/>. Output the following
|
|
103
103
|
table header <template/>:
|
|
104
104
|
|
|
@@ -205,6 +205,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
205
205
|
| **<deviation/>** | <location/> | <reason/> |
|
|
206
206
|
|
|
207
207
|
</template>
|
|
208
|
+
</if>
|
|
208
209
|
</step>
|
|
209
210
|
|
|
210
211
|
4. <step id="STEP 4: Score Against Risk Rubric"
|
|
@@ -17,24 +17,23 @@ The `ase-meta-diff` skill turns a raw Git diff into a *concise*,
|
|
|
17
17
|
*human-readable* narrative of what changed and why, *grouped by
|
|
18
18
|
intent* (such as *Feature*, *Improvement*, *Bugfix*, *Update*,
|
|
19
19
|
*Cleanup*, or *Refactor*) rather than by file. It inspects the
|
|
20
|
-
*staged* changes (`git diff --cached HEAD`). The result is a
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
*staged* changes (`git diff --cached HEAD`). The result is a compact
|
|
21
|
+
table, one row per intent group, each naming the affected files
|
|
22
|
+
with their per-file `[+N/-M]` line counts - giving you the essence
|
|
23
|
+
of the changes at a glance.
|
|
24
24
|
|
|
25
25
|
With `--coherence`, the skill additionally *reconstructs the single
|
|
26
26
|
intended change* the diff is trying to accomplish - phrased as one crisp
|
|
27
27
|
*thesis* sentence - and then walks *every* hunk to *flag those that do
|
|
28
28
|
not serve it*: **scope creep** (an unrelated feature or drive-by refactor
|
|
29
|
-
riding along)
|
|
30
|
-
disabled tests)
|
|
31
|
-
core change). It emits an overall **COHERENT** / **INCOHERENT** verdict
|
|
29
|
+
riding along) and **stray debug** (leftover prints, commented-out code, or
|
|
30
|
+
disabled tests). It emits an overall **COHERENT** / **INCOHERENT** verdict
|
|
32
31
|
plus a table of the flagged hunks with what to do with each - keeping the
|
|
33
32
|
diff to a *single logical and coherent change* before it is committed.
|
|
34
33
|
|
|
35
34
|
With `--risk`, the skill additionally *scores* the same diff against a
|
|
36
35
|
four-axis **coupling-criticality-coverage-reversibility** rubric and
|
|
37
|
-
emits a *graded risk report* - one
|
|
36
|
+
emits a *graded risk report* - one table row per axis (each scored *1*-*5*
|
|
38
37
|
with a one-line evidence justification drawn from the actual hunks), an
|
|
39
38
|
overall risk band (**LOW**, **MODERATE**, **HIGH**, or **CRITICAL**),
|
|
40
39
|
and one actionable *mitigation* per high-risk axis. The axes combine
|
|
@@ -57,9 +56,9 @@ giving a visual sense of *what a diff endangers* before a deeper review.
|
|
|
57
56
|
`--coherence`, `-c`:
|
|
58
57
|
In addition to the intent-grouped summary, reconstruct the diff's
|
|
59
58
|
*single intended change* as one crisp *thesis* sentence and flag
|
|
60
|
-
*every* hunk that does *not* serve it - *scope creep
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
*every* hunk that does *not* serve it - *scope creep* or *stray
|
|
60
|
+
debug* - then emit an overall **COHERENT** / **INCOHERENT** verdict
|
|
61
|
+
with a table of the flagged hunks.
|
|
63
62
|
|
|
64
63
|
`--risk`, `-r`:
|
|
65
64
|
In addition to the intent-grouped summary, score the diff against
|
|
@@ -193,15 +193,16 @@ multi-*criteria* decision matrix.
|
|
|
193
193
|
|
|
194
194
|
- Determine rating distance percentage <percentage/> between
|
|
195
195
|
<alternative-K/> and <alternative-X/> from their *raw,
|
|
196
|
-
unrounded* ratings
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
196
|
+
unrounded* ratings as follows. If <rating-K/> is exactly zero,
|
|
197
|
+
skip the division entirely and treat <percentage/> as if it
|
|
198
|
+
were equal to <distance/> (so a true zero tie with <distance/>
|
|
199
|
+
= 0 falls into the *MULTIPLE BEST* branch below, while a non-zero
|
|
200
|
+
gap with zero best is routed by the magnitude of <distance/>
|
|
201
|
+
through the same thresholds as <percentage/> otherwise). Do not
|
|
202
|
+
output anything.
|
|
203
|
+
|
|
204
|
+
- Otherwise (<rating-K/> is non-zero), calculate: <percentage/> =
|
|
205
|
+
<distance/> / abs(<rating-K/>). Do not output anything.
|
|
205
206
|
|
|
206
207
|
- By construction, <rating-K/> is the maximum rating across
|
|
207
208
|
all alternatives, so <distance/> >= 0 always holds; using
|
|
@@ -62,9 +62,19 @@ by querying *multiple* AIs for an *optimal consensus*.
|
|
|
62
62
|
|
|
63
63
|
The user-selectable foreign models are restricted by the
|
|
64
64
|
`--models`/`-m` option, parsed into <getopt-option-models/>
|
|
65
|
-
as a comma-separated list of model tokens. The
|
|
66
|
-
the
|
|
67
|
-
|
|
65
|
+
as a comma-separated list of model tokens. The getopt parser
|
|
66
|
+
validates only the *first* token, so you *MUST* validate each
|
|
67
|
+
remaining token yourself against the allowed set `all`, `chatgpt`,
|
|
68
|
+
`gemini`, `deepseek`, `grok`, `glm`, `qwen`. If any token is *not*
|
|
69
|
+
in this set, only output the following <template/> and then
|
|
70
|
+
immediately *STOP* processing the entire current skill:
|
|
71
|
+
|
|
72
|
+
<template>
|
|
73
|
+
⧉ **ASE**: ✪ skill: **ase-meta-quorum**, ▶ ERROR: invalid `--models` token: **<token/>**
|
|
74
|
+
</template>
|
|
75
|
+
|
|
76
|
+
The default is the single token `all`. If <getopt-option-models/>
|
|
77
|
+
contains the token `all`, you *MUST* treat it as the full list
|
|
68
78
|
`chatgpt,gemini,deepseek,grok,glm,qwen` (all models). Anthropic
|
|
69
79
|
Claude (yourself) is *always* included, independent of this option.
|
|
70
80
|
|
|
@@ -142,8 +152,8 @@ by querying *multiple* AIs for an *optimal consensus*.
|
|
|
142
152
|
5. <step id="STEP 5: Show Results">
|
|
143
153
|
|
|
144
154
|
Finally show the summary, the consensus and the complete and
|
|
145
|
-
unmodified responses of yourself and each of the
|
|
146
|
-
on the following output <template/>:
|
|
155
|
+
unmodified responses of yourself and each of the queried foreign
|
|
156
|
+
AIs, based on the following output <template/>:
|
|
147
157
|
|
|
148
158
|
<template>
|
|
149
159
|
**QUESTION**:
|
|
@@ -107,8 +107,8 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
107
107
|
<verdict/> to `REJECT - DEMANDS CHANGES` if *any* finding in
|
|
108
108
|
<findings/> has a `severity` field of `HIGH`; otherwise set
|
|
109
109
|
<verdict/> to `APPROVE`. The verdict is derived *before* the
|
|
110
|
-
severity floor below, so
|
|
111
|
-
verdict.
|
|
110
|
+
severity floor below, so the floor only affects which findings are
|
|
111
|
+
*rendered*, never the verdict.
|
|
112
112
|
|
|
113
113
|
Then *apply the severity floor* selected via <getopt-option-severity/>
|
|
114
114
|
(default `LOW`): define the ordinal rank `LOW`=1, `MEDIUM`=2,
|
|
@@ -135,7 +135,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
135
135
|
|
|
136
136
|
</template>
|
|
137
137
|
|
|
138
|
-
You *MUST* *NOT* output anything else in this STEP 3.
|
|
138
|
+
You *MUST* *NOT* output anything else in this STEP 3.1.
|
|
139
139
|
|
|
140
140
|
2. <if condition="<findings/> is empty">
|
|
141
141
|
Only output the following <template/> and then *SKIP* the
|
|
@@ -59,9 +59,9 @@ before it is committed.
|
|
|
59
59
|
Set the *severity floor* (default `LOW`): findings below the chosen
|
|
60
60
|
threshold are silently suppressed, ordered `LOW` < `MEDIUM` <
|
|
61
61
|
`HIGH`. The default `LOW` keeps all findings; `ACCEPTED` findings are
|
|
62
|
-
never suppressed. The floor only affects the rendered findings table
|
|
63
|
-
the overall *verdict
|
|
64
|
-
|
|
62
|
+
never suppressed. The floor only affects the rendered findings table,
|
|
63
|
+
not the overall *verdict*, which is always derived from all findings
|
|
64
|
+
before the floor is applied.
|
|
65
65
|
|
|
66
66
|
## ARGUMENTS
|
|
67
67
|
|
|
@@ -41,8 +41,8 @@ Your objective is to *search* the *Internet*/*Web* for the following query:
|
|
|
41
41
|
<define name="agent">
|
|
42
42
|
```text
|
|
43
43
|
Agent(
|
|
44
|
-
name: "ase-meta-search",
|
|
45
|
-
description: "Query Web Search Service",
|
|
44
|
+
name: "ase-meta-search-<arg1/>",
|
|
45
|
+
description: "Query Web Search Service: <arg1/>",
|
|
46
46
|
subagent_type: "ase:ase-meta-search",
|
|
47
47
|
prompt: <content/>
|
|
48
48
|
)
|
|
@@ -53,8 +53,9 @@ Your objective is to *search* the *Internet*/*Web* for the following query:
|
|
|
53
53
|
*backend tokens*. The getopt parser validates only the *first*
|
|
54
54
|
token, so you *MUST* validate each remaining token yourself against
|
|
55
55
|
the allowed set `all`, `perplexity`, `brave`, `exa`, `websearch`. If
|
|
56
|
-
any token is *not* in this set,
|
|
57
|
-
|
|
56
|
+
any token is *not* in this set, bind <token/> to that offending
|
|
57
|
+
token, then only output the following <template/> and then
|
|
58
|
+
immediately *STOP* processing the entire current skill:
|
|
58
59
|
|
|
59
60
|
<template>
|
|
60
61
|
⧉ **ASE**: ✪ skill: **ase-meta-search**, ▶ ERROR: invalid `--services` token: **<token/>**
|
|
@@ -66,7 +67,7 @@ Your objective is to *search* the *Internet*/*Web* for the following query:
|
|
|
66
67
|
If the `perplexity` backend is *selected* and the MCP tool
|
|
67
68
|
`perplexity_search` from the MCP server `search-perplexity` is available:
|
|
68
69
|
|
|
69
|
-
<expand name="agent">
|
|
70
|
+
<expand name="agent" arg1="perplexity">
|
|
70
71
|
Call the MCP tool `perplexity_search(query: "<query/>")`
|
|
71
72
|
from the MCP server `search-perplexity`.
|
|
72
73
|
</expand>
|
|
@@ -74,7 +75,7 @@ Your objective is to *search* the *Internet*/*Web* for the following query:
|
|
|
74
75
|
If the `brave` backend is *selected* and the MCP tool
|
|
75
76
|
`brave_web_search` from the MCP server `search-brave` is available:
|
|
76
77
|
|
|
77
|
-
<expand name="agent">
|
|
78
|
+
<expand name="agent" arg1="brave">
|
|
78
79
|
Call the MCP tool `brave_web_search(query: "<query/>")`
|
|
79
80
|
from the MCP server `search-brave`.
|
|
80
81
|
</expand>
|
|
@@ -82,14 +83,14 @@ Your objective is to *search* the *Internet*/*Web* for the following query:
|
|
|
82
83
|
If the `exa` backend is *selected* and the MCP tool
|
|
83
84
|
`web_search_exa` from the MCP server `search-exa` is available:
|
|
84
85
|
|
|
85
|
-
<expand name="agent">
|
|
86
|
+
<expand name="agent" arg1="exa">
|
|
86
87
|
Call the MCP tool `web_search_exa(query: "<query/>")`
|
|
87
88
|
from the MCP server `search-exa`.
|
|
88
89
|
</expand>
|
|
89
90
|
|
|
90
91
|
If the `websearch` backend is *selected*:
|
|
91
92
|
|
|
92
|
-
<expand name="agent">
|
|
93
|
+
<expand name="agent" arg1="websearch">
|
|
93
94
|
Call the tool `WebSearch(query: "<query/>")`.
|
|
94
95
|
</expand>
|
|
95
96
|
|
|
@@ -197,7 +197,7 @@ to <getopt-option-count/>; if <getopt-option-count/> is *non-numeric* or
|
|
|
197
197
|
Carry the result forward to the next round: set
|
|
198
198
|
<thesis><fortification/></thesis> (the fortification becomes the
|
|
199
199
|
thesis to be strengthened next), set <i/> to <i/> + 1 (increment the
|
|
200
|
-
round counter), and then *
|
|
200
|
+
round counter), and then *REPEAT* the operation at **STEP 1**!
|
|
201
201
|
</if>
|
|
202
202
|
|
|
203
203
|
<if condition="<i/> is greater than or equal to <rounds/>">
|
|
@@ -106,13 +106,15 @@ addressing surface-level symptoms.
|
|
|
106
106
|
|
|
107
107
|
Ask <question/> and surface up to <width/> *distinct*,
|
|
108
108
|
*non-overlapping* candidate sub-causes, each documented in <answer-k/>.
|
|
109
|
+
Let <count/> be the number of candidates you actually surfaced
|
|
110
|
+
(at least one, at most <width/>).
|
|
109
111
|
Don't stop at symptoms, keep digging for systemic issues.
|
|
110
112
|
Explore *different* candidates -- technical, domain-specific,
|
|
111
113
|
process-related, or organizational causes -- and avoid restating
|
|
112
114
|
the same cause in different words.
|
|
113
115
|
|
|
114
116
|
Start with <k>1</k> (set candidate counter to one).
|
|
115
|
-
<while condition="<k/> is less than or equal to <
|
|
117
|
+
<while condition="<k/> is less than or equal to <count/>">
|
|
116
118
|
<template>
|
|
117
119
|
<ase-tpl-bullet-secondary/> **WHY <n/>.<k/>**: <answer-k/>
|
|
118
120
|
</template>
|
|
@@ -150,15 +152,19 @@ addressing surface-level symptoms.
|
|
|
150
152
|
whole chain up to the original <problem/>).
|
|
151
153
|
|
|
152
154
|
When <width/> is *greater than 1* and this backward validation *fails* at
|
|
153
|
-
some level -- i.e. the chosen sub-cause does *not* adequately explain
|
|
154
|
-
fact above it -- *backtrack*: discard the chosen sub-cause
|
|
155
|
-
downward, pick the next-best
|
|
156
|
-
<
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
155
|
+
some level <m/> -- i.e. the chosen sub-cause does *not* adequately explain
|
|
156
|
+
the fact above it -- *backtrack*: discard the chosen sub-cause (and every
|
|
157
|
+
chosen sub-cause below it) from level <m/> downward, pick the next-best
|
|
158
|
+
candidate from level <m/>'s <fallbacks/>, and resume the STEP 2 widened
|
|
159
|
+
descent: set <n/> to <m/> (reset the iteration counter to the failed level),
|
|
160
|
+
set <question/> to the picked candidate, and re-enter STEP 2's
|
|
161
|
+
<while condition="<n/> is less than or equal to <depth/>"/> loop at that
|
|
162
|
+
level -- so the original <depth/> budget is honored from <m/> downward.
|
|
163
|
+
Repeat until a chain survives backward validation or level <m/>'s
|
|
164
|
+
<fallbacks/> are exhausted (then report the strongest chain found and note
|
|
165
|
+
that no candidate fully validated). This is the payoff of <width/> *greater
|
|
166
|
+
than 1*: the enumerated alternatives let the analysis *recover* from a wrong
|
|
167
|
+
turn instead of committing to a mis-rooted chain.
|
|
162
168
|
|
|
163
169
|
Propose a solution that addresses and solves the validated root-cause.
|
|
164
170
|
For the proposed solution, optionally directly propose corresponding source code changes.
|
|
@@ -65,7 +65,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
65
65
|
</template>
|
|
66
66
|
</if>
|
|
67
67
|
|
|
68
|
-
2.
|
|
68
|
+
2. <elseif condition="<instruction/> is NOT empty">
|
|
69
69
|
The argument is neither empty nor a valid task id. As this
|
|
70
70
|
skill only accepts an optional `[<id>]` argument and *never*
|
|
71
71
|
a free-text instruction, only output the following <template/>
|
|
@@ -74,7 +74,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
74
74
|
<template>
|
|
75
75
|
⧉ **ASE**: ☻ skill: **ase-task-condense**, ▶ ERROR: expected single `[<id>]` argument
|
|
76
76
|
</template>
|
|
77
|
-
</
|
|
77
|
+
</elseif>
|
|
78
78
|
|
|
79
79
|
2. **Determine Operation:**
|
|
80
80
|
|
|
@@ -114,9 +114,9 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
114
114
|
and unchanged*. Honor the following ruleset *strictly*:
|
|
115
115
|
|
|
116
116
|
1. *Preserve-exactly (never alter)*: the plan <format/>
|
|
117
|
-
structure (the headings `#`/`##`,
|
|
118
|
-
|
|
119
|
-
|
|
117
|
+
structure (the headings `#`/`##`, all three `## CONTEXT`,
|
|
118
|
+
`## CHANGES`, and `## VERIFICATION` sections, the
|
|
119
|
+
`Created:`/`Modified:` lines, and
|
|
120
120
|
the `- **<aspect/>**:` bullet labels), all *code spans* and
|
|
121
121
|
code blocks, technical terms, file paths, identifiers,
|
|
122
122
|
numbers, severities (`LOW`/`MEDIUM`/`HIGH`/`ACCEPTED`), and
|
|
@@ -223,13 +223,15 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
223
223
|
</template>
|
|
224
224
|
|
|
225
225
|
- If <result/> is `EDIT`:
|
|
226
|
-
Set <args></args> (empty).
|
|
226
|
+
Set <args></args> (set args to empty).
|
|
227
|
+
<if condition="the condensed plan was saved via `ase_task_save` in step 3">
|
|
228
|
+
Set <args>--int-reuse-task</args>.
|
|
229
|
+
</if>
|
|
227
230
|
<if condition="<getopt-option-next/> is not equal `none`">
|
|
228
|
-
|
|
229
|
-
remaining list tokens to the downstream skill).
|
|
231
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
230
232
|
</if>
|
|
231
233
|
Only output the following <template/> and then call the
|
|
232
|
-
tool `Skill(skill: "ase:ase-task-edit", args: <args/>)`
|
|
234
|
+
tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`
|
|
233
235
|
to invoke the `ase:ase-task-edit` skill in order to *edit*
|
|
234
236
|
the condensed plan. Immediately stop processing the current
|
|
235
237
|
skill once the `Skill` tool was used.
|
|
@@ -239,13 +241,15 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
239
241
|
</template>
|
|
240
242
|
|
|
241
243
|
- If <result/> is `IMPLEMENT`:
|
|
242
|
-
Set <args></args> (empty).
|
|
244
|
+
Set <args></args> (set args to empty).
|
|
245
|
+
<if condition="the condensed plan was saved via `ase_task_save` in step 3">
|
|
246
|
+
Set <args>--int-reuse-task</args>.
|
|
247
|
+
</if>
|
|
243
248
|
<if condition="<getopt-option-next/> is not equal `none`">
|
|
244
|
-
|
|
245
|
-
remaining list tokens to the downstream skill).
|
|
249
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
246
250
|
</if>
|
|
247
251
|
Only output the following <template/> and then call the
|
|
248
|
-
`Skill(skill: "ase:ase-task-implement", args: <args/>)` tool
|
|
252
|
+
`Skill(skill: "ase:ase-task-implement", args: "<args/>")` tool
|
|
249
253
|
to *apply* the plan.
|
|
250
254
|
|
|
251
255
|
<template>
|
|
@@ -253,15 +257,26 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
253
257
|
</template>
|
|
254
258
|
|
|
255
259
|
- If <result/> is `PREFLIGHT`:
|
|
256
|
-
Set <args></args> (empty).
|
|
260
|
+
Set <args></args> (set args to empty).
|
|
261
|
+
<if condition="the condensed plan was saved via `ase_task_save` in step 3">
|
|
262
|
+
Set <args>--int-reuse-task</args>.
|
|
263
|
+
</if>
|
|
257
264
|
<if condition="<getopt-option-next/> is not equal `none`">
|
|
258
|
-
|
|
259
|
-
remaining list tokens to the downstream skill).
|
|
265
|
+
Set <args><args/> --next <getopt-option-next/></args>
|
|
260
266
|
</if>
|
|
261
267
|
Only output the following <template/> and then call the
|
|
262
|
-
`Skill(skill: "ase:ase-task-preflight", args: <args/>)` tool
|
|
268
|
+
`Skill(skill: "ase:ase-task-preflight", args: "<args/>")` tool
|
|
263
269
|
to *apply* the plan.
|
|
264
270
|
|
|
265
271
|
<template>
|
|
266
272
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan condensed -- hand-off to pre-flight**
|
|
267
273
|
</template>
|
|
274
|
+
|
|
275
|
+
- If <result/> matches `OTHER: <text/>` or is any other
|
|
276
|
+
unrecognized value:
|
|
277
|
+
Treat it as `DONE` (the condensed plan is already saved):
|
|
278
|
+
only output the following <template/> and then *STOP*.
|
|
279
|
+
|
|
280
|
+
<template>
|
|
281
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan condensed -- done**
|
|
282
|
+
</template>
|
|
@@ -30,7 +30,7 @@ telegrapher-like even under the `writer` persona.
|
|
|
30
30
|
|
|
31
31
|
The plan is saved *only* when condensing actually makes it smaller; if no
|
|
32
32
|
further reduction is possible, the plan is left untouched (including its
|
|
33
|
-
|
|
33
|
+
`⚙ Modified:` timestamp) and reported as *already condensed*.
|
|
34
34
|
|
|
35
35
|
After condensing, the user is asked whether to stop or hand off to
|
|
36
36
|
`ase-task-edit`, `ase-task-implement`, or `ase-task-preflight`, unless
|
|
@@ -35,6 +35,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
35
35
|
1. Set <id>$ARGUMENTS</id> initially, with any leading and trailing
|
|
36
36
|
whitespace stripped.
|
|
37
37
|
Inherit the always existing <ase-task-id/> from the current context.
|
|
38
|
+
Inherit the always existing <ase-session-id/> from the current context.
|
|
38
39
|
Do not output anything.
|
|
39
40
|
|
|
40
41
|
2. <if condition="<id/> is empty">
|
|
@@ -59,20 +60,22 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
59
60
|
output anything related to this MCP tool call.
|
|
60
61
|
|
|
61
62
|
- If <text/> starts with `ERROR:` or `WARNING:`:
|
|
62
|
-
|
|
63
|
+
Set <deleted>false</deleted> and only output the following
|
|
64
|
+
<template/>:
|
|
63
65
|
|
|
64
66
|
<template>
|
|
65
67
|
⧉ **ASE**: ◉ task: **<id/>**, ▶ status: **<text/>**
|
|
66
68
|
</template>
|
|
67
69
|
|
|
68
70
|
- If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
|
|
69
|
-
|
|
71
|
+
Set <deleted>true</deleted> and only output the following
|
|
72
|
+
<template/>:
|
|
70
73
|
|
|
71
74
|
<template>
|
|
72
75
|
⧉ **ASE**: ◉ task: **<id/>**, ▶ status: **task deleted**
|
|
73
76
|
</template>
|
|
74
77
|
|
|
75
|
-
2. <if condition="<id/> is equal <ase-task-id/> AND <ase-task-id/> is not equal 'default'">
|
|
78
|
+
2. <if condition="<deleted/> is equal 'true' AND <id/> is equal <ase-task-id/> AND <ase-task-id/> is not equal 'default'">
|
|
76
79
|
Set <ase-task-id>default</ase-task-id>. Call the `ase_task_id(id:
|
|
77
80
|
"<ase-task-id/>", session: "<ase-session-id/>")` tool from the `ase`
|
|
78
81
|
MCP server to switch the task to the default task. Only output
|