@rse/ase 0.9.11 → 0.9.13
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-compat.js +68 -0
- package/dst/ase-diagram.js +5 -2
- package/dst/ase-getopt.js +2 -1
- package/dst/ase-hook.js +158 -67
- package/dst/ase-mcp.js +2 -0
- package/dst/ase-persona.js +4 -1
- package/dst/ase-service.js +2 -0
- package/dst/ase-setup.js +52 -23
- package/dst/ase-skills.js +13 -3
- package/dst/ase-statusline.js +9 -5
- package/dst/ase.js +3 -1
- package/package.json +2 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/mcp.json +8 -0
- package/plugin/.codex-plugin/plugin.json +17 -0
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/hooks/hooks-codex.json +67 -0
- package/plugin/meta/ase-dialog.md +21 -1
- package/plugin/meta/ase-format-arch.md +26 -9
- package/plugin/meta/ase-format-meta.md +7 -3
- package/plugin/meta/ase-format-spec.md +11 -6
- package/plugin/meta/ase-getopt.md +6 -2
- package/plugin/meta/ase-skill.md +43 -19
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-arch-analyze/SKILL.md +17 -10
- package/plugin/skills/ase-code-craft/SKILL.md +17 -5
- package/plugin/skills/ase-code-explain/SKILL.md +0 -1
- package/plugin/skills/ase-code-insight/SKILL.md +1 -1
- package/plugin/skills/ase-code-lint/SKILL.md +13 -14
- package/plugin/skills/ase-code-refactor/SKILL.md +17 -5
- package/plugin/skills/ase-code-resolve/SKILL.md +18 -5
- package/plugin/skills/ase-docs-proofread/SKILL.md +11 -12
- package/plugin/skills/ase-meta-compat/SKILL.md +278 -0
- package/plugin/skills/ase-meta-compat/help.md +67 -0
- package/plugin/skills/ase-meta-diff/SKILL.md +3 -3
- package/plugin/skills/ase-meta-evaluate/SKILL.md +20 -18
- package/plugin/skills/ase-meta-quorum/SKILL.md +3 -3
- package/plugin/skills/ase-task-condense/SKILL.md +6 -0
- package/plugin/skills/ase-task-edit/SKILL.md +6 -2
- package/plugin/skills/ase-task-grill/SKILL.md +10 -7
- package/plugin/skills/ase-task-id/SKILL.md +3 -3
- package/plugin/skills/ase-task-implement/SKILL.md +6 -2
- package/plugin/skills/ase-task-preflight/SKILL.md +5 -1
- package/plugin/skills/ase-task-rename/SKILL.md +9 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ase-meta-compat
|
|
3
|
+
description: >
|
|
4
|
+
Self-test the LLM's ability to execute ASE's core interpreter
|
|
5
|
+
machinery (control flow, XML placeholders, regex matching,
|
|
6
|
+
arithmetic) and report an overall compatibility rating. Use when
|
|
7
|
+
the user wants to check how well the current model/harness is
|
|
8
|
+
compatible with ASE, or asks to "test ASE compatibility" or "check
|
|
9
|
+
ASE compatibility".
|
|
10
|
+
user-invocable: true
|
|
11
|
+
disable-model-invocation: true
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
15
|
+
|
|
16
|
+
Self-Test ASE Compatibility
|
|
17
|
+
===========================
|
|
18
|
+
|
|
19
|
+
Objective
|
|
20
|
+
---------
|
|
21
|
+
|
|
22
|
+
*Self-test* how faithfully the current LLM (and its harness) executes the
|
|
23
|
+
four *core interpreter primitives* that every ASE skill silently relies
|
|
24
|
+
on -- *control flow*, *XML placeholders*, *regex matching*, and
|
|
25
|
+
*arithmetic* -- and report an overall **0%…100% compatibility** rating.
|
|
26
|
+
|
|
27
|
+
This skill is unusual: it is both the *test definition* and the *system
|
|
28
|
+
under test*. Each *probe* is a pure ASE construct that you execute and
|
|
29
|
+
record its *actual* result. You *MUST NOT* compare against any expected
|
|
30
|
+
value until STEP 6. Do not fabricate passes: a probe whose actual result
|
|
31
|
+
differs from its expected result *MUST* be recorded as a *fail*.
|
|
32
|
+
|
|
33
|
+
Notice that this skill intentionally does not strictly follow the ASE
|
|
34
|
+
skill format, especially it does not include any meta skill information,
|
|
35
|
+
etc.
|
|
36
|
+
|
|
37
|
+
Procedure
|
|
38
|
+
---------
|
|
39
|
+
|
|
40
|
+
1. STEP 1: Initialize Self-Test
|
|
41
|
+
|
|
42
|
+
Initialize the running map of actual probe results <actuals></actuals>
|
|
43
|
+
(set to empty) -- every probe in STEPs 2-5 stores its result here as
|
|
44
|
+
a `<category/>/<probe-name/>` entry with its *actual* computed value.
|
|
45
|
+
|
|
46
|
+
Initialize the running list of failed probes <failures></failures>
|
|
47
|
+
(set to empty) -- this is populated only in STEP 6 after comparing
|
|
48
|
+
actuals against the expected values.
|
|
49
|
+
|
|
50
|
+
2. STEP 2: Probe XML Placeholders
|
|
51
|
+
|
|
52
|
+
Execute *all* of the following XML-placeholder probes (in the given
|
|
53
|
+
order). For each probe, record the *actual* result in <actuals/>
|
|
54
|
+
under the key `xml-placeholders/<probe-name/>`. Do *not* compare to
|
|
55
|
+
any expected value here.
|
|
56
|
+
|
|
57
|
+
1. *get-and-set*: Set <v>42</v>, then get <v/>.
|
|
58
|
+
Record actual result for `xml-placeholders/get-and-set`.
|
|
59
|
+
|
|
60
|
+
2. *self-ref*: Set <v>42</v>, then set `<v>pre_<v/></v>`, then get <v/>.
|
|
61
|
+
Record actual result for `xml-placeholders/self-ref`.
|
|
62
|
+
|
|
63
|
+
3. *overwrite*: Set <v>42</v>, then set `<v>99</v>`, then get <v/>.
|
|
64
|
+
Record actual result for `xml-placeholders/overwrite`.
|
|
65
|
+
|
|
66
|
+
4. *indexed*: Set `<eval-1-2>+1</eval-1-2>` and `<eval-2-1>-1</eval-2-1>`,
|
|
67
|
+
then get <eval-1-2/> and <eval-2-1/> via `<eval-1-2/>,<eval-2-1/>`.
|
|
68
|
+
Record actual result for `xml-placeholders/indexed`.
|
|
69
|
+
|
|
70
|
+
5. *nested-attr*: With <w>20</w>, build the value of an XML attribute
|
|
71
|
+
`width="<w/>"` and read the attribute `width` back.
|
|
72
|
+
Record actual result for `xml-placeholders/nested-attr`.
|
|
73
|
+
|
|
74
|
+
6. *entity*: Evaluate the XML entity `⦿` and get the rendered
|
|
75
|
+
Unicode character.
|
|
76
|
+
Record actual result for `xml-placeholders/entity`.
|
|
77
|
+
|
|
78
|
+
Set <xml-total/> to the number of XML-placeholder probes above.
|
|
79
|
+
|
|
80
|
+
3. STEP 3: Probe Control Flow
|
|
81
|
+
|
|
82
|
+
Execute *all* of the following control-flow probes (in the given
|
|
83
|
+
order). For each probe, record the *actual* result in <actuals/>
|
|
84
|
+
under the key `control-flow/<probe-name/>`. Do *not* compare to any
|
|
85
|
+
expected value here.
|
|
86
|
+
|
|
87
|
+
1. *branch*: Set <a>3</a>, then evaluate
|
|
88
|
+
`<if condition="<a/> is greater than 5">big</if>
|
|
89
|
+
<elseif condition="<a/> is greater than 2">mid</elseif>
|
|
90
|
+
<else>small</else>`.
|
|
91
|
+
Record actual result for `control-flow/branch`.
|
|
92
|
+
|
|
93
|
+
2. *while-sum*: Set <s>0</s> and <i>1</i>, then evaluate
|
|
94
|
+
`<while condition="<i/> is less than or equal to 5">
|
|
95
|
+
set <s/> to <s/> + <i/>,
|
|
96
|
+
set <i/> to <i/> + 1
|
|
97
|
+
</while>`.
|
|
98
|
+
Record <s/> as actual result for `control-flow/while-sum`.
|
|
99
|
+
|
|
100
|
+
3. *for-order*: Set <s></s>, then evaluate
|
|
101
|
+
`<for items="x y z"><s><s/>-<item/></for>`.
|
|
102
|
+
Record <s/> as actual result for `control-flow/for-order`.
|
|
103
|
+
|
|
104
|
+
4. *while-break*: Set <i>1</i> and <hit></hit>, then evaluate
|
|
105
|
+
`<while condition="<i/> is less than or equal to 9">
|
|
106
|
+
if <i/> equals 4 set <hit/> to <i/> and <break/>,
|
|
107
|
+
else set <i/> to <i/> + 1
|
|
108
|
+
</while>`.
|
|
109
|
+
Record <hit/> as actual result for `control-flow/while-break`.
|
|
110
|
+
|
|
111
|
+
5. *step-skip*: A `<step condition="[...]">[...]</step>` either expands
|
|
112
|
+
to its body (if condition evaluates to true) or to the empty string,
|
|
113
|
+
so what does `<step condition="42 is greater than 7">X</step>` expands into?
|
|
114
|
+
Record the result of this construct for `control-flow/step-skip`.
|
|
115
|
+
|
|
116
|
+
6. *expand-subst*: With `<define name="foo">[<arg1/>:<content/>]</define>`,
|
|
117
|
+
evaluate `<expand name="foo" arg1="K">V</expand>`.
|
|
118
|
+
Record actual result for `control-flow/expand-subst`.
|
|
119
|
+
|
|
120
|
+
Set <cf-total/> to the number of control-flow probes above.
|
|
121
|
+
|
|
122
|
+
4. STEP 4: Probe Regex Matching
|
|
123
|
+
|
|
124
|
+
Execute *all* of the following regex probes (in the given order).
|
|
125
|
+
For each probe, record the *actual* result in <actuals/> under the
|
|
126
|
+
key `regex/<probe-name/>`. Do *not* compare to any expected value
|
|
127
|
+
here.
|
|
128
|
+
|
|
129
|
+
1. *getopt-dash*: Does the string `-l foo` match the regexp `(^|\s)-`?
|
|
130
|
+
Record `yes` or `no` as actual result for `regex/getopt-dash`.
|
|
131
|
+
|
|
132
|
+
2. *getopt-nodash*: Does the string `foo` match the regexp `(^|\s)-`?
|
|
133
|
+
Record `yes` or `no` as actual result for `regex/getopt-nodash`.
|
|
134
|
+
|
|
135
|
+
3. *anchored-int*: Does `123` fully match `^\d+$`, and does `12a` fully
|
|
136
|
+
match `^\d+$`? Report as `<yes-or-no/>,<yes-or-no/>`.
|
|
137
|
+
Record actual result for `regex/anchored-int`.
|
|
138
|
+
|
|
139
|
+
4. *alternation*: Does `thorough` match `^(basic|standard|thorough)$`?
|
|
140
|
+
Record `yes` or `no` as actual result for `regex/alternation`.
|
|
141
|
+
|
|
142
|
+
5. *capture*: Apply `^--(\w+).+` to `--foo-bar-quux`.
|
|
143
|
+
Record the first capture group as actual result for `regex/capture`.
|
|
144
|
+
|
|
145
|
+
6. *whitespace*: Does ` -x` (leading space then dash) match `(^|\s)-`
|
|
146
|
+
(the `\s` alternative)?
|
|
147
|
+
Record `yes` or `no` as actual result for `regex/whitespace`.
|
|
148
|
+
|
|
149
|
+
7. *complex*: Does `--level=(low|high)...` match
|
|
150
|
+
`^--([A-Za-z][A-Za-z0-9-]*)(?:\|-([A-Za-z]))?(?:=(\((.*)\)(\.\.\.)?|.*))?$`?
|
|
151
|
+
Record `yes` or `no` as actual result for `regex/complex`.
|
|
152
|
+
|
|
153
|
+
Set <re-total/> to the number of regex probes above.
|
|
154
|
+
|
|
155
|
+
5. STEP 5: Probe Arithmetic
|
|
156
|
+
|
|
157
|
+
Execute *all* of the following arithmetic probes (in the given
|
|
158
|
+
order). For each probe, record the *actual* result in <actuals/>
|
|
159
|
+
under the key `arithmetic/<probe-name/>`. Do *not* compare to any
|
|
160
|
+
expected value here.
|
|
161
|
+
|
|
162
|
+
1. *increment*: With <n>7</n>, compute <n/> + 2.
|
|
163
|
+
Record actual result for `arithmetic/increment`.
|
|
164
|
+
|
|
165
|
+
2. *product-sum*: Compute `4.00 * 1.00 + 2.00 * 0.50`.
|
|
166
|
+
Record actual result (as `X.XX`) for `arithmetic/product-sum`.
|
|
167
|
+
|
|
168
|
+
3. *percentage*: Compute `3 / 7` rounded to 2 decimal places.
|
|
169
|
+
Record actual result (as `0.XX`) for `arithmetic/percentage`.
|
|
170
|
+
|
|
171
|
+
4. *bar-width*: With <title-len>13</title-len>, compute `67 - <title-len/>`.
|
|
172
|
+
Record actual result for `arithmetic/bar-width`.
|
|
173
|
+
|
|
174
|
+
5. *threshold*: Is `0.095` less than `0.10`?
|
|
175
|
+
Record `yes` or `no` as actual result for `arithmetic/threshold`.
|
|
176
|
+
|
|
177
|
+
6. *round-half*: Round `2.5` to the nearest integer (round half up).
|
|
178
|
+
Record actual result for `arithmetic/round-half`.
|
|
179
|
+
|
|
180
|
+
Set <arith-total/> to the number of arithmetic probes above.
|
|
181
|
+
|
|
182
|
+
6. STEP 6: Fetch Expected Values and Score
|
|
183
|
+
|
|
184
|
+
Call the `ase_compat()` tool of the `ase` MCP server with an
|
|
185
|
+
*internal* *programmatic* MCP tool call (and *NOT* with an external
|
|
186
|
+
shell command) and set <compat-output/> to the `text` content of the
|
|
187
|
+
response.
|
|
188
|
+
|
|
189
|
+
Parse <compat-output/> into a map <expected/> by splitting on
|
|
190
|
+
newlines; for each non-empty line of the form `<id/>: <value/>`, set
|
|
191
|
+
`<expected[<id/>]>` to `<value/>` (value may be empty for probes
|
|
192
|
+
whose correct answer is an empty string).
|
|
193
|
+
|
|
194
|
+
For each probe in <actuals/>, compare the actual result to
|
|
195
|
+
`<expected[<id/>]>` using an exact-match comparison:
|
|
196
|
+
|
|
197
|
+
- If they match, count the probe as *pass*.
|
|
198
|
+
- If they differ, count the probe as *fail* and append `<id/>`
|
|
199
|
+
to <failures/>.
|
|
200
|
+
|
|
201
|
+
Tally pass counts per category:
|
|
202
|
+
|
|
203
|
+
- Set <xml-pass/> to the number of `xml-placeholders/*` probes that passed.
|
|
204
|
+
- Set <cf-pass/> to the number of `control-flow/*` probes that passed.
|
|
205
|
+
- Set <re-pass/> to the number of `regex/*` probes that passed.
|
|
206
|
+
- Set <arith-pass/> to the number of `arithmetic/*` probes that passed.
|
|
207
|
+
|
|
208
|
+
7. STEP 7: Compute and Report Compatibility
|
|
209
|
+
|
|
210
|
+
Compute each category's *pass-rate* (a value in 0.0…1.0) by dividing
|
|
211
|
+
its passes by its total:
|
|
212
|
+
|
|
213
|
+
set <xml-rate/> to <xml-pass/> / <xml-total/>,
|
|
214
|
+
set <cf-rate/> to <cf-pass/> / <cf-total/>,
|
|
215
|
+
set <re-rate/> to <re-pass/> / <re-total/>,
|
|
216
|
+
set <arith-rate/> to <arith-pass/> / <arith-total/>.
|
|
217
|
+
|
|
218
|
+
Compute the overall compatibility as a *weighted average* of the
|
|
219
|
+
four pass-rates, where *XML placeholders* carry weight `4.00` (the
|
|
220
|
+
backbone of every skill), *control flow* carries weight `3.00`,
|
|
221
|
+
*regex matching* carries weight `2.00`, and *arithmetic* carries
|
|
222
|
+
weight `1.00`. Use the `ase_decision_matrix` MCP tool with a single
|
|
223
|
+
"compatibility" alternative column, one matrix row per category of
|
|
224
|
+
the form `[ <weight/>, <rate/> ]`:
|
|
225
|
+
|
|
226
|
+
Call...
|
|
227
|
+
|
|
228
|
+
`ase_decision_matrix(matrix: [
|
|
229
|
+
[ 4.00, <xml-rate/> ],
|
|
230
|
+
[ 3.00, <cf-rate/> ],
|
|
231
|
+
[ 2.00, <re-rate/> ],
|
|
232
|
+
[ 1.00, <arith-rate/> ]
|
|
233
|
+
])`
|
|
234
|
+
|
|
235
|
+
...of the `ase` MCP server with an *internal* *programmatic* MCP
|
|
236
|
+
tool call (and *NOT* with an external shell command) and set
|
|
237
|
+
<product-sum/> to the *single* numerical value of the returned
|
|
238
|
+
array.
|
|
239
|
+
|
|
240
|
+
The product-sum is the sum over the four rows of `<weight/> *
|
|
241
|
+
<rate/>`, so dividing by the sum of weights (4.00 + 3.00 + 2.00 +
|
|
242
|
+
1.00 = 10.00) yields the weighted-average compatibility on 0.0…1.0:
|
|
243
|
+
|
|
244
|
+
Set <overall/> to <product-sum/> / 10.00.
|
|
245
|
+
Set <overall-pct/> to round(<overall/> * 100) (an integer percentage).
|
|
246
|
+
|
|
247
|
+
Also compute each category's display percentage:
|
|
248
|
+
|
|
249
|
+
Set <cf-pct/> to round(<cf-rate/> * 100), and
|
|
250
|
+
likewise <xml-pct/>, <re-pct/>, <arith-pct/>.
|
|
251
|
+
|
|
252
|
+
Determine the <verdict/> from <overall-pct/>:
|
|
253
|
+
|
|
254
|
+
1. If <overall-pct/> is greater than or equal to 90:
|
|
255
|
+
Set <verdict>✓ *FULLY COMPATIBLE*</verdict>.
|
|
256
|
+
|
|
257
|
+
2. Else if <overall-pct/> is greater than or equal to 60:
|
|
258
|
+
Set <verdict>⚠ *PARTIALLY COMPATIBLE*</verdict>.
|
|
259
|
+
|
|
260
|
+
3. Else:
|
|
261
|
+
Set <verdict>✘ *INCOMPATIBLE*</verdict>.
|
|
262
|
+
|
|
263
|
+
4. If <failures/> is not empty:
|
|
264
|
+
Append to <verdict/> the suffix ` (failed: <failures/>)`.
|
|
265
|
+
|
|
266
|
+
Finally, output the compatibility report:
|
|
267
|
+
|
|
268
|
+
**RESULTS**:
|
|
269
|
+
|
|
270
|
+
| ⦿ *Capability* | ⚖ *Weight* | ✓ *Passed* | ⚑ *Rate* |
|
|
271
|
+
| :------------------- | ----------: | ---------------------------: | ------------------: |
|
|
272
|
+
| XML Placeholders | 4.00 | <xml-pass/>/<xml-total/> | <xml-pct/>% |
|
|
273
|
+
| Control Flow | 3.00 | <cf-pass/>/<cf-total/> | <cf-pct/>% |
|
|
274
|
+
| Regex Matching | 2.00 | <re-pass/>/<re-total/> | <re-pct/>% |
|
|
275
|
+
| Arithmetic | 1.00 | <arith-pass/>/<arith-total/> | <arith-pct/>% |
|
|
276
|
+
| **OVERALL** | | | **<overall-pct/>%** |
|
|
277
|
+
|
|
278
|
+
**VERDICT**: <verdict/>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
|
|
2
|
+
## NAME
|
|
3
|
+
|
|
4
|
+
`ase-meta-compat` - Self-Test ASE Compatibility
|
|
5
|
+
|
|
6
|
+
## SYNOPSIS
|
|
7
|
+
|
|
8
|
+
`ase-meta-compat`
|
|
9
|
+
[`--help`|`-h`]
|
|
10
|
+
|
|
11
|
+
## DESCRIPTION
|
|
12
|
+
|
|
13
|
+
The `ase-meta-compat` skill *self-tests* how faithfully the current LLM
|
|
14
|
+
(and its harness) executes the four *core interpreter primitives* that
|
|
15
|
+
every ASE skill silently relies on, and reports an overall *0%…100%
|
|
16
|
+
compatibility* rating. ASE skills are not run by a conventional
|
|
17
|
+
interpreter - they are interpreted by the *model itself*, which must honor
|
|
18
|
+
control-flow constructs, substitute XML placeholders, evaluate regex
|
|
19
|
+
conditions, and perform arithmetic. If a model cannot execute these
|
|
20
|
+
primitives reliably, *every* ASE skill silently misbehaves, so this skill
|
|
21
|
+
lets a user measure the fit *before* relying on ASE.
|
|
22
|
+
|
|
23
|
+
The skill is both the *test definition* and the *system under test*. It
|
|
24
|
+
probes four capability categories:
|
|
25
|
+
|
|
26
|
+
- *XML Placeholders*: the get (`<x/>`) and set (`<x>v</x>`) semantics,
|
|
27
|
+
including the get-and-set composite, indexed names, and XML-entity
|
|
28
|
+
rendering.
|
|
29
|
+
|
|
30
|
+
- *Control Flow*: the `<if>`/`<elseif>`/`<else>`, `<while>`/`<break>`,
|
|
31
|
+
`<for>`, `<step condition=…>`, and `<expand>`/`<define>` constructs.
|
|
32
|
+
|
|
33
|
+
- *Regex Matching*: the patterns ASE genuinely uses (e.g. the getopt
|
|
34
|
+
short-circuit `(^|\s)-`), plus anchoring, alternation, and captures.
|
|
35
|
+
|
|
36
|
+
- *Arithmetic*: counter increments, decision-matrix product-sums,
|
|
37
|
+
percentage rounding, and bar-width computations.
|
|
38
|
+
|
|
39
|
+
Each *probe* embeds a construct with a *known expected result*; the model
|
|
40
|
+
executes it and honestly self-checks its actual result against the
|
|
41
|
+
expected one. Per-category pass-rates are combined into the overall rating
|
|
42
|
+
via the `ase_decision_matrix` MCP tool as a *weighted average*, with
|
|
43
|
+
*XML Placeholders* weighted `4.00` (the backbone of every skill),
|
|
44
|
+
*Control Flow* weighted `3.00`, *Regex Matching* weighted `2.00`, and
|
|
45
|
+
*Arithmetic* weighted `1.00`. The
|
|
46
|
+
result is a boxed per-category table (passes and percentage per category),
|
|
47
|
+
a final *OVERALL COMPATIBILITY* percentage, and a one-line *VERDICT*
|
|
48
|
+
(`✓ fully compatible` at `≥ 90%`, `⚠ partially compatible` at `60–89%`,
|
|
49
|
+
`✘ incompatible` below `60%`) that names any failed probes.
|
|
50
|
+
|
|
51
|
+
## ARGUMENTS
|
|
52
|
+
|
|
53
|
+
The `ase-meta-compat` skill takes no arguments (besides `--help`|`-h`). It
|
|
54
|
+
always runs the most rigorous self-test, with 6 *probes per category*
|
|
55
|
+
(7 for *Regex Matching*), for 25 probes in total.
|
|
56
|
+
|
|
57
|
+
## EXAMPLES
|
|
58
|
+
|
|
59
|
+
Run the compatibility self-test:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
❯ /ase-meta-compat
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## SEE ALSO
|
|
66
|
+
|
|
67
|
+
[`ase-meta-evaluate`](../ase-meta-evaluate/help.md), [`ase-meta-quorum`](../ase-meta-quorum/help.md), [`ase-meta-why`](../ase-meta-why/help.md).
|
|
@@ -274,9 +274,9 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
274
274
|
|
|
275
275
|
<ase-tpl-bullet-signal/> **CHANGE RISK REPORT**: Overall: **<band/>** (<aggregate/>/5)
|
|
276
276
|
|
|
277
|
-
| Axis | Score | Findings
|
|
278
|
-
| ----------- | ---------- |
|
|
279
|
-
| **<axis/>** | <score/>/5 | ● **EVIDENCE**: <evidence
|
|
277
|
+
| Axis | Score | Findings |
|
|
278
|
+
| ----------- | ---------- | ----------------------------------------------------------------------------------------------------- |
|
|
279
|
+
| **<axis/>** | <score/>/5 | ● **EVIDENCE**: <evidence/><if condition="axis score is `>= 4`"> ● **MITIGATION**: <mitigation/></if> |
|
|
280
280
|
</template>
|
|
281
281
|
</step>
|
|
282
282
|
|
|
@@ -81,15 +81,17 @@ multi-*criteria* decision matrix.
|
|
|
81
81
|
- For each alternative <alternative-K/> (K=1-N), decide whether
|
|
82
82
|
it is a genuine member of <class-of-alternatives/>. If any
|
|
83
83
|
<alternative-K/> is *not* a member (i.e. the alternatives are not
|
|
84
|
-
mutually comparable within a single class),
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
84
|
+
mutually comparable within a single class), collect the subset
|
|
85
|
+
of non-member alternatives into the space-separated list
|
|
86
|
+
<non-members/> (the <alternative-K/> for which the membership
|
|
87
|
+
decision was negative), output the following <template/> and
|
|
88
|
+
*stop the entire flow* immediately without executing any further
|
|
89
|
+
steps:
|
|
88
90
|
|
|
89
91
|
<template>
|
|
90
92
|
<ase-tpl-bullet-signal/> **ERROR: INCOMPARABLE ALTERNATIVES**: *<class-of-alternatives/>*
|
|
91
93
|
|
|
92
|
-
<for items="<
|
|
94
|
+
<for items="<non-members/>">
|
|
93
95
|
⚑ **<item/>** (*member of a different class*)
|
|
94
96
|
</for>
|
|
95
97
|
</template>
|
|
@@ -217,29 +219,29 @@ multi-*criteria* decision matrix.
|
|
|
217
219
|
appear large; the all-negative regime is surfaced as a dedicated
|
|
218
220
|
warning branch below. Do not output anything.
|
|
219
221
|
|
|
220
|
-
- If <
|
|
221
|
-
effectively zero relative to abs(<rating-K/>)), stop the flow after
|
|
222
|
-
you output just the following <template/> and do not output anything
|
|
223
|
-
else:
|
|
224
|
-
|
|
225
|
-
<template>
|
|
226
|
-
<ase-tpl-bullet-signal/> **ERROR**: ✘ *MULTIPLE BEST ALTERNATIVES FOUND*,
|
|
227
|
-
⚠ *Please give some hints on the criteria to ensure a single best alternative!*
|
|
228
|
-
</template>
|
|
229
|
-
|
|
230
|
-
- Otherwise, if <rating-K/> is less than zero (i.e. all alternatives
|
|
222
|
+
- If <rating-K/> is less than zero (i.e. all alternatives
|
|
231
223
|
rate negatively and the "best" is merely the least-bad), stop the
|
|
232
224
|
flow after you output just the following <template/> and do not
|
|
233
225
|
output anything else. This all-negative check is evaluated *before*
|
|
234
|
-
the small-distance
|
|
226
|
+
the small-distance checks below, so that an all-negative alternative
|
|
235
227
|
set with a small winning gap surfaces the all-negative warning rather
|
|
236
|
-
than being masked by the small-distance
|
|
228
|
+
than being masked by the multiple-best or small-distance branches:
|
|
237
229
|
|
|
238
230
|
<template>
|
|
239
231
|
<ase-tpl-bullet-signal/> **BEST ALTERNATIVE**: ⚑ **<alternative-K/>**
|
|
240
232
|
⚠ *ATTENTION: all alternatives rate negatively; this is the least-bad choice, not a strong winner!*
|
|
241
233
|
</template>
|
|
242
234
|
|
|
235
|
+
- Otherwise, if <percentage/> is less than 0.01 (i.e. <distance/> is
|
|
236
|
+
effectively zero relative to abs(<rating-K/>)), stop the flow after
|
|
237
|
+
you output just the following <template/> and do not output anything
|
|
238
|
+
else:
|
|
239
|
+
|
|
240
|
+
<template>
|
|
241
|
+
<ase-tpl-bullet-signal/> **ERROR**: ✘ *MULTIPLE BEST ALTERNATIVES FOUND*,
|
|
242
|
+
⚠ *Please give some hints on the criteria to ensure a single best alternative!*
|
|
243
|
+
</template>
|
|
244
|
+
|
|
243
245
|
- Otherwise, if <percentage/> is less than 0.10, stop the flow after
|
|
244
246
|
you output just the following <template/> and do not output anything
|
|
245
247
|
else:
|
|
@@ -142,9 +142,9 @@ by querying *multiple* AIs for an *optimal consensus*.
|
|
|
142
142
|
set <disagreement/> to `(no quorum: no foreign AIs were available)`,
|
|
143
143
|
then skip the rest of this step.
|
|
144
144
|
|
|
145
|
-
Otherwise,
|
|
146
|
-
|
|
147
|
-
|
|
145
|
+
Otherwise, let <n/> be the *total number of responders* (yourself plus
|
|
146
|
+
all available foreign AIs above). Then determine, on a Likert scale of
|
|
147
|
+
0..<n/>, the amount of the overall consensus <c/> of all the responses.
|
|
148
148
|
If all responses disagree, the consensus <c/> is zero.
|
|
149
149
|
If all responses agree, <c/> is <n/>.
|
|
150
150
|
|
|
@@ -93,6 +93,12 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
93
93
|
Set <words-before><words/></words-before> (remember the loaded
|
|
94
94
|
word count for the strictly-smaller check in step 3).
|
|
95
95
|
|
|
96
|
+
<if condition="<content/> contains 'Created: <text/>'">
|
|
97
|
+
Set <timestamp-created><text/></timestamp-created> (extract the
|
|
98
|
+
original creation timestamp so it can be re-inserted unchanged
|
|
99
|
+
into the condensed <content/> in step 3).
|
|
100
|
+
</if>
|
|
101
|
+
|
|
96
102
|
Only output the following <template/>:
|
|
97
103
|
|
|
98
104
|
<template>
|
|
@@ -171,7 +171,11 @@ Set <content-dirty>true</content-dirty>.
|
|
|
171
171
|
|
|
172
172
|
1. Determine any existing plan content:
|
|
173
173
|
|
|
174
|
-
<if condition="
|
|
174
|
+
<if condition="
|
|
175
|
+
<getopt-option-int-reuse-task/> is equal `true`
|
|
176
|
+
*and* a `ase_task_save(id: '<ase-task-id/>', ...)` tool call
|
|
177
|
+
exists earlier in the current session
|
|
178
|
+
">
|
|
175
179
|
Set <text/> to the `text` argument of the most recent
|
|
176
180
|
`ase_task_save(id: '<ase-task-id/>', ...)` tool call,
|
|
177
181
|
*without* calling `ase_task_load` again. Set <status>plan
|
|
@@ -286,7 +290,7 @@ Set <content-dirty>true</content-dirty>.
|
|
|
286
290
|
</template>
|
|
287
291
|
</if>
|
|
288
292
|
|
|
289
|
-
4. <if condition="<content/>
|
|
293
|
+
4. <if condition="no line of <content/> matches the case-insensitive regex `^\s*#+\s*TASK\b` AND <instruction/> is empty">
|
|
290
294
|
Set <instruction><content/></instruction> (set instruction to content).
|
|
291
295
|
Set <content></content> (set content to empty).
|
|
292
296
|
Set <content-dirty>true</content-dirty>.
|
|
@@ -80,7 +80,11 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
80
80
|
|
|
81
81
|
1. Determine the current task plan content:
|
|
82
82
|
|
|
83
|
-
<if condition="
|
|
83
|
+
<if condition="
|
|
84
|
+
<getopt-option-int-reuse-task/> is equal `true`
|
|
85
|
+
*and* a `ase_task_save(id: '<ase-task-id/>', ...)` tool call
|
|
86
|
+
exists earlier in the current session
|
|
87
|
+
">
|
|
84
88
|
Set <text/> to the `text` argument of the most recent
|
|
85
89
|
`ase_task_save(id: '<ase-task-id/>', ...)` tool call,
|
|
86
90
|
*without* calling `ase_task_load` again. Set <status>plan
|
|
@@ -105,12 +109,11 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
105
109
|
- If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
|
|
106
110
|
Set <plan><text/></plan> (set plan to text).
|
|
107
111
|
Calculate the number of words <words/> of <plan/>.
|
|
112
|
+
Then output the following <template/>:
|
|
108
113
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
|
|
113
|
-
</template>
|
|
114
|
+
<template>
|
|
115
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
|
|
116
|
+
</template>
|
|
114
117
|
|
|
115
118
|
2. <if condition="<plan/> is empty">
|
|
116
119
|
Complain and tell the user to use the `ase-code-resolve`,
|
|
@@ -195,7 +198,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
195
198
|
|
|
196
199
|
<expand name="custom-dialog" arg1="--other">
|
|
197
200
|
<aspect-N/>: <question-N/>
|
|
198
|
-
<answer-N-1-label/>: ⚝ **CURRENT PLAN** ⚝ <answer-N-1-description/>
|
|
201
|
+
<answer-N-1-label/>: ⚝ **CURRENT PLAN** ⚝ - <answer-N-1-description/>
|
|
199
202
|
<answer-N-K-label/>: <answer-N-K-description/>
|
|
200
203
|
[...]
|
|
201
204
|
</expand>
|
|
@@ -52,9 +52,9 @@ Configure Task Id
|
|
|
52
52
|
</if>
|
|
53
53
|
|
|
54
54
|
4. <if condition="<request/> is NOT empty">
|
|
55
|
-
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
- Call the `ase_task_id(id: "<request/>", session: "<ase-session-id/>")`
|
|
56
|
+
tool from the `ase` MCP server. Check the response as mandated
|
|
57
|
+
above; only on a clean response set <ase-task-id><request/></ase-task-id>.
|
|
58
58
|
|
|
59
59
|
- Output:
|
|
60
60
|
<template>
|
|
@@ -97,7 +97,11 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
97
97
|
|
|
98
98
|
1. Determine the current task plan content:
|
|
99
99
|
|
|
100
|
-
<if condition="
|
|
100
|
+
<if condition="
|
|
101
|
+
<getopt-option-int-reuse-task/> is equal `true`
|
|
102
|
+
*and* a `ase_task_save(id: '<ase-task-id/>', ...)` tool call
|
|
103
|
+
exists earlier in the current session
|
|
104
|
+
">
|
|
101
105
|
Set <text/> to the `text` argument of the most recent
|
|
102
106
|
`ase_task_save(id: '<ase-task-id/>', ...)` tool call,
|
|
103
107
|
*without* calling `ase_task_load` again. Set <status>plan
|
|
@@ -210,7 +214,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
210
214
|
skill accepts only an optional `[<id>]` argument and no
|
|
211
215
|
`--next` option; remaining tokens are intentionally discarded.
|
|
212
216
|
Only output the following <template/> and then call the
|
|
213
|
-
tool `Skill(skill: "ase:ase-task-delete", args: <args/>)`
|
|
217
|
+
tool `Skill(skill: "ase:ase-task-delete", args: "<args/>")`
|
|
214
218
|
to invoke the `ase:ase-task-delete` skill in order to
|
|
215
219
|
*delete* the updated plan. Immediately stop processing the
|
|
216
220
|
current skill once the `Skill` tool was used.
|
|
@@ -97,7 +97,11 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
97
97
|
|
|
98
98
|
1. Determine the current task plan content:
|
|
99
99
|
|
|
100
|
-
<if condition="
|
|
100
|
+
<if condition="
|
|
101
|
+
<getopt-option-int-reuse-task/> is equal `true`
|
|
102
|
+
*and* a `ase_task_save(id: '<ase-task-id/>', ...)` tool call
|
|
103
|
+
exists earlier in the current session
|
|
104
|
+
">
|
|
101
105
|
Set <text/> to the `text` argument of the most recent
|
|
102
106
|
`ase_task_save(id: '<ase-task-id/>', ...)` tool call,
|
|
103
107
|
*without* calling `ase_task_load` again. Set <status>plan
|
|
@@ -71,6 +71,15 @@ explicitly requested by this procedure via outputs based on a <template/>!
|
|
|
71
71
|
</template>
|
|
72
72
|
</if>
|
|
73
73
|
|
|
74
|
+
6. <if condition="<old/> is equal <new/>">
|
|
75
|
+
Only output the following <template/> and then immediately
|
|
76
|
+
*STOP* processing the entire current skill:
|
|
77
|
+
|
|
78
|
+
<template>
|
|
79
|
+
⧉ **ASE**: ◉ task: **<old/>**, ▶ status: **task unchanged (old and new task id are equal)**
|
|
80
|
+
</template>
|
|
81
|
+
</if>
|
|
82
|
+
|
|
74
83
|
2. **Perform Operation**:
|
|
75
84
|
|
|
76
85
|
1. Call the `ase_task_rename(old: "<old/>", new: "<new/>")` tool of the
|