@rse/ase 0.9.54 → 0.9.56
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-log.js +5 -0
- package/dst/ase-service.js +45 -6
- package/dst/ase-setup.js +4 -2
- package/dst/ase-statusline.js +6 -8
- package/dst/ase-task.js +152 -28
- package/package.json +5 -5
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/agents/ase-code-analyze.md +1 -1
- package/plugin/agents/ase-code-lint.md +4 -4
- package/plugin/agents/ase-meta-chat.md +1 -1
- package/plugin/agents/ase-meta-proximity.md +1 -1
- package/plugin/meta/ase-common-code.md +165 -2
- package/plugin/meta/ase-common-task.md +17 -15
- package/plugin/meta/ase-constitution.md +3 -3
- package/plugin/meta/ase-control.md +7 -7
- package/plugin/meta/ase-dialog.md +5 -4
- package/plugin/meta/ase-format-arch.md +7 -8
- package/plugin/meta/ase-format-spec.md +10 -11
- package/plugin/meta/ase-format-task.md +90 -20
- package/plugin/meta/ase-getopt.md +1 -1
- package/plugin/meta/ase-persona.md +3 -3
- package/plugin/meta/ase-skill.md +14 -24
- package/plugin/meta/ase-tenets.md +5 -5
- package/plugin/package.json +2 -2
- package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
- package/plugin/skills/ase-arch-analyze/help.md +1 -1
- package/plugin/skills/ase-arch-discover/SKILL.md +8 -6
- package/plugin/skills/ase-code-analyze/SKILL.md +1 -1
- package/plugin/skills/ase-code-analyze/help.md +1 -1
- package/plugin/skills/ase-code-craft/SKILL.md +2 -153
- package/plugin/skills/ase-code-craft/help.md +1 -1
- package/plugin/skills/ase-code-explain/SKILL.md +3 -3
- package/plugin/skills/ase-code-insight/SKILL.md +9 -7
- package/plugin/skills/ase-code-lint/SKILL.md +7 -5
- package/plugin/skills/ase-code-lint/help.md +2 -2
- package/plugin/skills/ase-code-refactor/SKILL.md +4 -155
- package/plugin/skills/ase-code-resolve/SKILL.md +8 -159
- package/plugin/skills/ase-docs-distill/SKILL.md +2 -2
- package/plugin/skills/ase-docs-distill/help.md +1 -1
- package/plugin/skills/ase-docs-proofread/SKILL.md +7 -3
- package/plugin/skills/ase-help-intent/SKILL.md +33 -9
- package/plugin/skills/ase-help-skill/SKILL.md +1 -1
- package/plugin/skills/ase-meta-brainstorm/SKILL.md +11 -2
- package/plugin/skills/ase-meta-changelog/SKILL.md +12 -8
- package/plugin/skills/ase-meta-commit/SKILL.md +11 -1
- package/plugin/skills/ase-meta-compat/SKILL.md +2 -2
- package/plugin/skills/ase-meta-config/help.md +4 -4
- package/plugin/skills/ase-meta-diaboli/SKILL.md +12 -3
- package/plugin/skills/ase-meta-diff/SKILL.md +11 -13
- package/plugin/skills/ase-meta-eli5/SKILL.md +3 -3
- package/plugin/skills/ase-meta-eli5/help.md +1 -1
- package/plugin/skills/ase-meta-evaluate/SKILL.md +3 -3
- package/plugin/skills/ase-meta-quorum/SKILL.md +17 -17
- package/plugin/skills/ase-meta-quotes/SKILL.md +1 -1
- package/plugin/skills/ase-meta-quotes/help.md +4 -3
- package/plugin/skills/ase-meta-review/SKILL.md +7 -5
- package/plugin/skills/ase-meta-review/help.md +2 -2
- package/plugin/skills/ase-meta-search/SKILL.md +18 -0
- package/plugin/skills/ase-meta-steelman/SKILL.md +11 -2
- package/plugin/skills/ase-meta-why/SKILL.md +15 -6
- package/plugin/skills/ase-meta-why/help.md +3 -3
- package/plugin/skills/ase-sync-export/SKILL.md +2 -1
- package/plugin/skills/ase-sync-export/help.md +1 -1
- package/plugin/skills/ase-sync-reconcile/SKILL.md +16 -2
- package/plugin/skills/ase-task-condense/SKILL.md +19 -72
- package/plugin/skills/ase-task-condense/help.md +1 -1
- package/plugin/skills/ase-task-delete/SKILL.md +1 -1
- package/plugin/skills/ase-task-dissect/SKILL.md +5 -18
- package/plugin/skills/ase-task-edit/SKILL.md +74 -26
- package/plugin/skills/ase-task-grill/SKILL.md +30 -124
- package/plugin/skills/ase-task-grill/help.md +2 -1
- package/plugin/skills/ase-task-id/SKILL.md +12 -2
- package/plugin/skills/ase-task-implement/SKILL.md +37 -4
- package/plugin/skills/ase-task-implement/help.md +9 -5
- package/plugin/skills/ase-task-list/SKILL.md +60 -15
- package/plugin/skills/ase-task-list/help.md +49 -6
- package/plugin/skills/ase-task-preflight/SKILL.md +20 -8
- package/plugin/skills/ase-task-preflight/help.md +4 -3
- package/plugin/skills/ase-task-reboot/SKILL.md +19 -62
- package/plugin/skills/ase-task-reboot/help.md +1 -1
- package/plugin/skills/ase-task-view/SKILL.md +27 -4
- package/dst/ase-guidance.js +0 -89
- package/dst/ase-persona.js +0 -87
- package/dst/ase-stdout.js +0 -18
|
@@ -5,12 +5,16 @@ Task
|
|
|
5
5
|
Every *task* uses a strict and fixed format:
|
|
6
6
|
|
|
7
7
|
<format>
|
|
8
|
+
---
|
|
9
|
+
Id: <task-id/>
|
|
10
|
+
Created: <timestamp-created/>
|
|
11
|
+
Modified: <timestamp-modified/>
|
|
12
|
+
Status: <task-status/>
|
|
13
|
+
Properties: <task-properties/>
|
|
14
|
+
Kind: <task-kind/>
|
|
15
|
+
---
|
|
8
16
|
|
|
9
|
-
# TASK <
|
|
10
|
-
|
|
11
|
-
⎈ Created: <timestamp-created/>
|
|
12
|
-
⚙ Modified: <timestamp-modified/>
|
|
13
|
-
☯ Kind: <task-kind/>
|
|
17
|
+
# TASK: <title/>
|
|
14
18
|
|
|
15
19
|
## CONTEXT
|
|
16
20
|
|
|
@@ -34,8 +38,19 @@ Every *task* uses a strict and fixed format:
|
|
|
34
38
|
|
|
35
39
|
You *MUST* honor the following hints on this *task* format:
|
|
36
40
|
|
|
37
|
-
-
|
|
38
|
-
|
|
41
|
+
- The content *MUST* begin with the `---` opening delimiter of the
|
|
42
|
+
*Markdown frontmatter* as its very *first* line -- there is *no*
|
|
43
|
+
leading empty line, as any line before the `---` would degrade the
|
|
44
|
+
frontmatter into ordinary Markdown. You *MUST* always keep the empty
|
|
45
|
+
line between the closing `---` delimiter and the `#` heading, and
|
|
46
|
+
always keep the last empty line. If one of them is missing, add it
|
|
47
|
+
back.
|
|
48
|
+
|
|
49
|
+
- The *frontmatter* carries the keys `Id`, `Created`, `Modified`,
|
|
50
|
+
`Status`, `Properties`, and `Kind`, in exactly this order, with their
|
|
51
|
+
values being *unquoted* plain scalars and vertically aligned one
|
|
52
|
+
space after the longest key. Only `Id` is *mandatory* -- every other
|
|
53
|
+
key is *optional* and, when absent, falls back to its default value.
|
|
39
54
|
|
|
40
55
|
- In all descriptions, highlight *code* as
|
|
41
56
|
<template>`<code/>`</template> and *key aspects* as
|
|
@@ -47,36 +62,91 @@ You *MUST* honor the following hints on this *task* format:
|
|
|
47
62
|
is changed, what benefit results or what the rationale is behind the
|
|
48
63
|
change.
|
|
49
64
|
|
|
50
|
-
- The <task-id/>
|
|
51
|
-
<ase-task-id/> in the current session
|
|
52
|
-
|
|
53
|
-
|
|
65
|
+
- The <task-id/> of the `Id:` frontmatter key has to be substituted
|
|
66
|
+
with the current value of <ase-task-id/> in the current session
|
|
67
|
+
context.
|
|
68
|
+
|
|
69
|
+
- The `Status:` frontmatter key states the current *lifecycle state*
|
|
70
|
+
of the task plan. The key is *optional* and defaults to `DRAFTED`:
|
|
71
|
+
an *absent* key reads as `DRAFTED`, and a *newly created* plan
|
|
72
|
+
carries `DRAFTED` explicitly. The <task-status/> value is *strictly*
|
|
73
|
+
one of the following eight states:
|
|
74
|
+
|
|
75
|
+
- `DRAFTED`: plan exists but is still provisional and not yet
|
|
76
|
+
cleared for implementation.
|
|
77
|
+
- `REJECTED`: plan was reviewed and refused, and has to be reworked
|
|
78
|
+
before it can be approved.
|
|
79
|
+
- `APPROVED`: plan is accepted as authoritative and cleared for
|
|
80
|
+
implementation, but no work has begun.
|
|
81
|
+
- `DEFERRED`: plan is approved and unobstructed, but its start was
|
|
82
|
+
deliberately postponed.
|
|
83
|
+
- `STARTED`: implementation of the plan is actively underway.
|
|
84
|
+
- `BLOCKED`: implementation is halted by an impediment which
|
|
85
|
+
someone has to remove before it can resume.
|
|
86
|
+
- `COMPLETED`: plan was implemented in full and reached its
|
|
87
|
+
intended outcome.
|
|
88
|
+
- `CANCELLED`: plan was terminated before completion, because it
|
|
89
|
+
failed, was called off, or became obsolete.
|
|
90
|
+
|
|
91
|
+
- The eight states form a *state machine*. Whoever sets the `Status:`
|
|
92
|
+
key *MUST* only move along one of the following transitions, whereby
|
|
93
|
+
a *single* operation *MAY* traverse *several* transitions at once if
|
|
94
|
+
it performs the corresponding stages in one go:
|
|
95
|
+
|
|
96
|
+
```text
|
|
97
|
+
DRAFTED ──reject───▶ REJECTED STARTED ──block────▶ BLOCKED
|
|
98
|
+
REJECTED ──redraft──▶ DRAFTED BLOCKED ──unblock──▶ STARTED
|
|
99
|
+
DRAFTED ──approve──▶ APPROVED STARTED ──complete─▶ COMPLETED
|
|
100
|
+
APPROVED ──defer────▶ DEFERRED
|
|
101
|
+
DEFERRED ──resume───▶ APPROVED any non-terminal state
|
|
102
|
+
APPROVED ──start────▶ STARTED ──cancel───▶ CANCELLED
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
`COMPLETED` and `CANCELLED` are the two *terminal* states: a plan
|
|
106
|
+
which reached one of them is *finished* and leaves the state machine.
|
|
107
|
+
|
|
108
|
+
- The `Properties:` frontmatter key states which *stages* the task
|
|
109
|
+
plan already passed through. The <task-properties/> value is
|
|
110
|
+
*strictly* either `none` or a comma-separated list of the values
|
|
111
|
+
`grilled`, `preflighted`, `implemented`, and `verified`, listed in
|
|
112
|
+
exactly this order, each at most once. The key is *optional* and
|
|
113
|
+
defaults to `none`: an *absent* key reads as `none`, and a *newly
|
|
114
|
+
created* plan carries `none` explicitly. The list only ever
|
|
115
|
+
*accumulates*: a skill *adds* its own value if still absent and
|
|
116
|
+
*MUST NOT* drop any value already present, except when a plan is
|
|
117
|
+
*recreated from scratch*, which resets it to `none`.
|
|
118
|
+
|
|
119
|
+
- The `Kind:` frontmatter key states the *kind of change* the task plan
|
|
54
120
|
describes, and hence which *operation-specific tenet set* of the
|
|
55
121
|
**ASE Tenets** a subsequent preflight or implementation has to
|
|
56
122
|
honor. The <task-kind/> value is *strictly* one of `CRAFTING`,
|
|
57
|
-
`REFACTORING`, or `RESOLVING
|
|
58
|
-
the `⎈ Created:` and `⚙ Modified:` lines above it.
|
|
123
|
+
`REFACTORING`, or `RESOLVING`.
|
|
59
124
|
|
|
60
|
-
- The
|
|
61
|
-
*updating* a task plan *CAN* update an already present
|
|
125
|
+
- The `Kind:` frontmatter key is *optional*: a skill *authoring* or
|
|
126
|
+
*updating* a task plan *CAN* update an already present key or pass
|
|
62
127
|
it through *verbatim* and *MAY* create a missing one by *inferring*
|
|
63
128
|
the kind from the plan content (defaulting to `CRAFTING`). A
|
|
64
|
-
`--dry` run *never* drops this
|
|
129
|
+
`--dry` run *never* drops this key, as `--dry` only omits the
|
|
65
130
|
`## VERIFICATION` section.
|
|
66
131
|
|
|
67
|
-
-
|
|
68
|
-
|
|
132
|
+
- A skill *writing* an optional key which is still *absent* inserts it
|
|
133
|
+
at its position in the key order above and re-aligns the values of
|
|
134
|
+
the whole frontmatter block.
|
|
135
|
+
|
|
136
|
+
- The <timestamp-created/> of the `Created:` frontmatter key is the
|
|
137
|
+
timestamp when this task plan was created. The <timestamp-modified/>
|
|
138
|
+
of the `Modified:` frontmatter key is the timestamp when this
|
|
69
139
|
task plan was last modified. Both use an ISO-style format
|
|
70
140
|
value. The value of both can be determined by a call to the
|
|
71
141
|
`ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase` MCP
|
|
72
|
-
server
|
|
142
|
+
server, using the `text` field of its response.
|
|
73
143
|
|
|
74
144
|
- The <title/> is a short summary of the <summary-what/>, no longer than
|
|
75
145
|
50 characters.
|
|
76
146
|
|
|
77
147
|
- The sections `## CHANGES` and `## VERIFICATION` are each just a short
|
|
78
148
|
list of 1-5 bullet points. Each bullet point is formatted as
|
|
79
|
-
`-
|
|
149
|
+
`- **<aspect/>**: <specification/>` where <aspect/> indicates
|
|
80
150
|
the aspect of the section and <specification/> is 1-3 sentences
|
|
81
151
|
giving an *ultra precise* but also *ultra brief* and *ultra concise*
|
|
82
152
|
description of the aspect.
|
|
@@ -36,7 +36,7 @@ set placeholders into the context as a side-effect.
|
|
|
36
36
|
Additionally, simulate <getopt-info/> as a comma-separated
|
|
37
37
|
markdown rendering of the parsed options in the form `<longN/>:
|
|
38
38
|
**<valueN/>**, [...]` (joined with `, `, with each value
|
|
39
|
-
shell-quoted if value contains spaces or special characters, and
|
|
39
|
+
shell-quoted if the value contains spaces or special characters, and
|
|
40
40
|
excluding the `help` option and any *internal* option whose long
|
|
41
41
|
name starts with `int-`).
|
|
42
42
|
|
|
@@ -61,7 +61,7 @@ requested communication style at any time during a session.
|
|
|
61
61
|
- <keywords/> is only one to four keywords summarizing the <details/>
|
|
62
62
|
- <details/> is one to four concise prose sentences explaining the aspect
|
|
63
63
|
|
|
64
|
-
- If <ase-persona-style/> is `telegrapher
|
|
64
|
+
- If <ase-persona-style/> is `telegrapher` or `caveman`:
|
|
65
65
|
- You *MUST* *use only* bullet point lists without blank lines between bullet points.
|
|
66
66
|
- You *MUST* *use only* one bullet point per explanation aspect.
|
|
67
67
|
- You *MUST* *use* shorter synonyms
|
|
@@ -89,13 +89,13 @@ requested communication style at any time during a session.
|
|
|
89
89
|
- `<subject/> ▶ <action/> ▷ <object/>.`
|
|
90
90
|
- `<subject/> ▶ <action/>.`
|
|
91
91
|
Each of <subject/>, <action/>, <object/>, and <reason/>
|
|
92
|
-
|
|
92
|
+
is just one to six words.
|
|
93
93
|
|
|
94
94
|
- If <ase-persona-style/> is `caveman`:
|
|
95
95
|
- You *MUST* structure every bullet point by
|
|
96
96
|
following exactly the formatting `○ <core/>`, where:
|
|
97
97
|
<core/> is a *very terse core* stating the essence of the aspect
|
|
98
|
-
using one of the following
|
|
98
|
+
using one of the following four sentence patterns:
|
|
99
99
|
- `<expression/>!`
|
|
100
100
|
- `<subject/> <action/> <object/>, <reason/>.`
|
|
101
101
|
- `<subject/> <action/> <object/>.`
|
package/plugin/meta/ase-skill.md
CHANGED
|
@@ -13,7 +13,7 @@ Skill Output
|
|
|
13
13
|
the value of a placeholder named `xxx`.
|
|
14
14
|
|
|
15
15
|
- *IMPORTANT*: *All* output is *exclusively* requested through
|
|
16
|
-
<template/> sections. You *MUST* *NOT* output anything *
|
|
16
|
+
<template/> sections. You *MUST* *NOT* output anything *UNLESS* it
|
|
17
17
|
is explicitly included in such a <template/> section. Especially,
|
|
18
18
|
you *MUST* *NOT* output any explanations on your own, unless
|
|
19
19
|
explicitly requested.
|
|
@@ -95,8 +95,8 @@ Skill Output
|
|
|
95
95
|
|
|
96
96
|
- *Fix conflicts with documented priority*: the
|
|
97
97
|
recommendation would violate a documented priority
|
|
98
|
-
(hot-path, allocation-free, lock-free,
|
|
99
|
-
sensitive, sub-µs budget). Either weaken the
|
|
98
|
+
(hot-path, allocation-free, lock-free,
|
|
99
|
+
latency-sensitive, sub-µs budget). Either weaken the
|
|
100
100
|
recommendation, convert it to a tradeoff, or mark
|
|
101
101
|
severity `ACCEPTED` with note "priority-conflict
|
|
102
102
|
accepted".
|
|
@@ -113,7 +113,7 @@ Skill Sequential Processing
|
|
|
113
113
|
Each `<step id="xxx" [...]>...</step>` corresponds to a
|
|
114
114
|
`TaskCreate({ subject: "xxx", description: "xxx" })`. In other
|
|
115
115
|
words, use the text of the `id` attribute of <step/> exactly
|
|
116
|
-
*as-is* for both the `subject
|
|
116
|
+
*as-is* for both the `subject` and the `description` fields of
|
|
117
117
|
`TaskCreate`.
|
|
118
118
|
|
|
119
119
|
For speed, emit *all* `TaskCreate` calls together in a *single* turn
|
|
@@ -121,7 +121,7 @@ Skill Sequential Processing
|
|
|
121
121
|
rely on the call order to establish the step order, as the parallel
|
|
122
122
|
results carry no guaranteed ordering.
|
|
123
123
|
|
|
124
|
-
Instead, in the *immediately
|
|
124
|
+
Instead, in the *single immediately following* turn, first
|
|
125
125
|
reconstruct the step-id-to-taskId mapping: because each task's
|
|
126
126
|
`subject` equals the originating <step/> `id` (and <step/> ids are
|
|
127
127
|
unique), match every created task back to its <step/> by comparing
|
|
@@ -138,7 +138,7 @@ Skill Sequential Processing
|
|
|
138
138
|
predecessor step (with `taskId` <prev/>).
|
|
139
139
|
|
|
140
140
|
- *IMPORTANT*: For each <step/> you *MUST* use the `TaskUpdate` tool
|
|
141
|
-
for updating its status *during* processing, once a <step/> finished.
|
|
141
|
+
for updating its status *during* processing, once a <step/> has finished.
|
|
142
142
|
|
|
143
143
|
- *IMPORTANT*: Whenever a skill *stops early* -- because a <step/>
|
|
144
144
|
instructed you to *STOP* processing (on an error, a cancelled
|
|
@@ -151,12 +151,12 @@ Skill Sequential Processing
|
|
|
151
151
|
|
|
152
152
|
- *IMPORTANT*: You *MUST* *strictly sequentially* execute every <step/> in
|
|
153
153
|
a <flow/>. You *MUST* not implicitly skip any <step/> during
|
|
154
|
-
processing,
|
|
154
|
+
processing, unless you were explicitly requested to do this or the
|
|
155
155
|
step is configured to be a conditional step!
|
|
156
156
|
|
|
157
157
|
- *IMPORTANT*: You *MUST* *strictly sequentially* execute every numbered
|
|
158
158
|
item in a <step/>. You *MUST* not implicitly skip any numbered item during
|
|
159
|
-
processing,
|
|
159
|
+
processing, unless you were explicitly requested to do this!
|
|
160
160
|
|
|
161
161
|
- *IMPORTANT*: For any <step/> that specifies an *agent* in its
|
|
162
162
|
`agent="[...]"` XML attribute, you *MUST* use the specified
|
|
@@ -252,7 +252,7 @@ Skill Identification
|
|
|
252
252
|
|
|
253
253
|
- *IMPORTANT*:
|
|
254
254
|
You *MUST* *NOT* output any summaries, explanations, or next
|
|
255
|
-
steps at the end of a skill
|
|
255
|
+
steps at the end of a skill besides the explicit outputs via any
|
|
256
256
|
<template/>.
|
|
257
257
|
|
|
258
258
|
Artifact Boxing Transparency
|
|
@@ -291,7 +291,7 @@ Artifact Boxing Transparency
|
|
|
291
291
|
- Findings surfaced: *none* (report only the *outcome*)
|
|
292
292
|
- Internals exposed: *none* (no diffs, no code, no per-artifact explanation)
|
|
293
293
|
|
|
294
|
-
- *IMPORTANT*: Precedence rule: skill's *explicit* `black` branches
|
|
294
|
+
- *IMPORTANT*: Precedence rule: a skill's *explicit* `black` branches
|
|
295
295
|
deterministically skip or suppress and *win* over the implicit decisions
|
|
296
296
|
above. Where no such branches exist, the decisions above apply.
|
|
297
297
|
|
|
@@ -458,19 +458,6 @@ Template Patterns
|
|
|
458
458
|
Do not output anything.
|
|
459
459
|
</else>
|
|
460
460
|
|
|
461
|
-
- When `<ase-tpl-boxline><line/></ase-tpl-boxline>` should be expanded, use:
|
|
462
|
-
|
|
463
|
-
<if condition="<line/> is not empty">
|
|
464
|
-
<template>
|
|
465
|
-
│ <line/>
|
|
466
|
-
</template>
|
|
467
|
-
</if>
|
|
468
|
-
<else>
|
|
469
|
-
<template>
|
|
470
|
-
│
|
|
471
|
-
</template>
|
|
472
|
-
</else>
|
|
473
|
-
|
|
474
461
|
- When `<ase-tpl-boxed title="<title/>"[ subtitle="<subtitle/>"]><content/></ase-tpl-boxed>`
|
|
475
462
|
should be expanded use the following helper placeholders and then
|
|
476
463
|
the following <template/>:
|
|
@@ -487,7 +474,10 @@ Template Patterns
|
|
|
487
474
|
un-styled text <raw-title/>.
|
|
488
475
|
- Set <bar/> to the `─` character repeated exactly max(0, 67 - <raw-title-len/>)
|
|
489
476
|
times -- clamped to zero so an over-long title never yields a negative count.
|
|
490
|
-
- Set <body/> to <content/> with all
|
|
477
|
+
- Set <body/> to <content/> with all non-empty lines prefixed with
|
|
478
|
+
`│ ` and all empty lines prefixed with just `│` (so no trailing
|
|
479
|
+
whitespace is produced). Do *not* prefix any line twice -- the
|
|
480
|
+
<content/> itself *MUST* *NOT* contain any `│` prefixes already.
|
|
491
481
|
|
|
492
482
|
<template>
|
|
493
483
|
|
|
@@ -37,9 +37,9 @@ you *MUST* honor the following so-called **GENERIC TENETS**:
|
|
|
37
37
|
- Handle obvious or expected errors near the origin.
|
|
38
38
|
- Handle theoretical or unexpected errors in parent scopes.
|
|
39
39
|
- Avoid introducing dedicated state variables for individual error cases.
|
|
40
|
-
- If state variables are needed to detect error cases, use minimum
|
|
40
|
+
- If state variables are needed to detect error cases, use the minimum
|
|
41
41
|
number of those variables only.
|
|
42
|
-
- Use minimum number of state variables to span the maximum of error space.
|
|
42
|
+
- Use the minimum number of state variables to span the maximum of error space.
|
|
43
43
|
|
|
44
44
|
- **Surgical Changes**:
|
|
45
45
|
*Keep changes as small as possible.*
|
|
@@ -61,7 +61,7 @@ you *MUST* honor the following so-called **GENERIC TENETS**:
|
|
|
61
61
|
- When one concern changes, the change should not ripple into unrelated ones.
|
|
62
62
|
|
|
63
63
|
- **Code Base Alignment**:
|
|
64
|
-
*Blend in.
|
|
64
|
+
*Blend in. A new aspect should read as if the existing aspects wrote it.*
|
|
65
65
|
- Follow the established coding style, formatting, and idioms exactly.
|
|
66
66
|
- Mirror the existing structure, layering, and file organization.
|
|
67
67
|
- Reuse the prevailing naming conventions, patterns, and libraries.
|
|
@@ -150,12 +150,12 @@ you *MUST* honor the following so-called **RECONCILIATION TENETS**:
|
|
|
150
150
|
Re-express source facts at the *target's* level of abstraction and
|
|
151
151
|
altitude; do not copy verbatim across artifact levels. A SPEC states
|
|
152
152
|
intent, an ARCH states structure, CODE states realization, DOCS
|
|
153
|
-
states facts, etc -- align the *meaning*, not the wording.
|
|
153
|
+
states facts, etc. -- align the *meaning*, not the wording.
|
|
154
154
|
|
|
155
155
|
- **Format Conformance**:
|
|
156
156
|
Keep every formatted target (SPEC, ARCH, TASK) conformant to its
|
|
157
157
|
format contract (headings, structure, identifiers). Treat CODE,
|
|
158
|
-
DOCS, INFR, and OTHR kinds of artifacts as foreign
|
|
158
|
+
DOCS, INFR, and OTHR kinds of artifacts as foreign-defined, but not
|
|
159
159
|
as free-form.
|
|
160
160
|
|
|
161
161
|
- **Alignment Traceability**:
|
package/plugin/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "https://ase.tools",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "https://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "0.9.
|
|
9
|
+
"version": "0.9.56",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"markdownlint-cli2": "0.23.2",
|
|
20
20
|
"eslint": "10.8.0",
|
|
21
21
|
"@eslint/markdown": "8.0.3",
|
|
22
|
-
"eslint-markdown": "0.
|
|
22
|
+
"eslint-markdown": "0.13.0"
|
|
23
23
|
},
|
|
24
24
|
"engines": {
|
|
25
25
|
"npm": ">=10.0.0",
|
|
@@ -130,7 +130,7 @@ interface quality, quality attributes, and architecture governance.
|
|
|
130
130
|
surfaced. *Skip* the entire investigation and reporting: do *not*
|
|
131
131
|
invoke any `Agent` tool and do *not* read any source, only output
|
|
132
132
|
the following <template/> and then *SKIP* the remaining steps STEP 2
|
|
133
|
-
|
|
133
|
+
and STEP 3:
|
|
134
134
|
|
|
135
135
|
<template>
|
|
136
136
|
<ase-tpl-bullet-normal/> **ARCHITECTURE ANALYSIS**: *suppressed* (`project.boxing` is `black`)
|
|
@@ -54,7 +54,7 @@ Analyze a specific module:
|
|
|
54
54
|
❯ /ase-arch-analyze src/core
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
-
Analyze a module under
|
|
57
|
+
Analyze a module under its own id namespace, yielding `core-P1`, `core-T1`, ...:
|
|
58
58
|
|
|
59
59
|
```text
|
|
60
60
|
❯ /ase-arch-analyze --prefix core src/core
|
|
@@ -78,8 +78,9 @@ for the technology stack to *provide* the *needed functionality*
|
|
|
78
78
|
2. Else, if a file `package.json` is found in the top-level directory
|
|
79
79
|
of the project, then <stack>JavaScript</stack>.
|
|
80
80
|
|
|
81
|
-
3. Else, if a file `build.gradle.kts`
|
|
82
|
-
is
|
|
81
|
+
3. Else, if a file `build.gradle.kts` is found in the top-level directory and
|
|
82
|
+
is applying `kotlin`, `org.jetbrains.kotlin.jvm`, `kotlin-android`,
|
|
83
|
+
or `kotlin-multiplatform` plugins, then <stack>Kotlin</stack>.
|
|
83
84
|
|
|
84
85
|
4. Else, if a file `build.gradle` is found in the top-level directory and
|
|
85
86
|
is applying `kotlin`, `org.jetbrains.kotlin.jvm`, `kotlin-android`,
|
|
@@ -89,8 +90,8 @@ for the technology stack to *provide* the *needed functionality*
|
|
|
89
90
|
contains `kotlin-maven-plugin` or `kotlin-stdlib` dependencies, then
|
|
90
91
|
<stack>Kotlin</stack>.
|
|
91
92
|
|
|
92
|
-
6. Else, if a file `pom.xml` or `build.gradle` is found
|
|
93
|
-
of the project, then <stack>Java</stack>.
|
|
93
|
+
6. Else, if a file `pom.xml`, `build.gradle`, or `build.gradle.kts` is found
|
|
94
|
+
in the top-level directory of the project, then <stack>Java</stack>.
|
|
94
95
|
|
|
95
96
|
7. Else, use <stack>Unknown</stack>.
|
|
96
97
|
|
|
@@ -123,7 +124,7 @@ for the technology stack to *provide* the *needed functionality*
|
|
|
123
124
|
(which alone is governed by <getopt-option-limit/>) has a
|
|
124
125
|
meaningful set to choose from.
|
|
125
126
|
|
|
126
|
-
In the to
|
|
127
|
+
In the to-be-discovered candidate set of components <component-K/>
|
|
127
128
|
(K=1-C, where C is the merged and deduplicated candidate count),
|
|
128
129
|
remember the component name as <name-K/>, the
|
|
129
130
|
official package name as <package-K/>, the latest version as
|
|
@@ -178,7 +179,8 @@ for the technology stack to *provide* the *needed functionality*
|
|
|
178
179
|
and fetches all metadata in maximum parallel and returns an array
|
|
179
180
|
of objects `{ name, version, created, updated, repository, stars,
|
|
180
181
|
downloads, deps, rank }`. For each component <component-K/>
|
|
181
|
-
(K=1-C) read from its corresponding entry: <
|
|
182
|
+
(K=1-C) read from its corresponding entry: <name-K/> from `name`
|
|
183
|
+
(unless already known from the discovery above), <version-K/> from
|
|
182
184
|
`version`, <updated-K/> from `updated`, <created-K/> from
|
|
183
185
|
`created`, <repository-K/> from `repository`, <stars-K/> from
|
|
184
186
|
`stars` (numeric or `N.A.`), <downloads-K/> from `downloads`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ase-code-analyze
|
|
3
|
-
argument-hint: "[--help|-h] [--performance|-p] [--security|-s] [--severity|-S=(LOW|MEDIUM|HIGH)] <source-reference>"
|
|
3
|
+
argument-hint: "[--help|-h] [--performance|-p] [--security|-s] [--severity|-S=(LOW|MEDIUM|HIGH)] [--prefix|-P=<prefix>] <source-reference>"
|
|
4
4
|
description: >
|
|
5
5
|
Analyze the source code for problems in either the logic and
|
|
6
6
|
semantics and its related control flow, performance and efficiency,
|
|
@@ -92,7 +92,7 @@ Analyze a directory, reporting only `MEDIUM` and `HIGH` problems:
|
|
|
92
92
|
❯ /ase-code-analyze -S MEDIUM src/handlers/
|
|
93
93
|
```
|
|
94
94
|
|
|
95
|
-
Analyze a directory under
|
|
95
|
+
Analyze a directory under its own id namespace, yielding `auth-P1`, `auth-P2`, ...:
|
|
96
96
|
|
|
97
97
|
```text
|
|
98
98
|
❯ /ase-code-analyze --prefix auth src/auth/
|
|
@@ -138,91 +138,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
138
138
|
|
|
139
139
|
4. <step id="STEP 4: Choose Feature Crafting Approaches">
|
|
140
140
|
|
|
141
|
-
|
|
142
|
-
any output* until and including the recommendation decision. Only
|
|
143
|
-
sub-steps 4-7 below are allowed to produce output; sub-steps 4-6 only if
|
|
144
|
-
<getopt-option-auto/> is equal `false` *and* <ase-project-boxing/>
|
|
145
|
-
is *not* equal `black`.
|
|
146
|
-
|
|
147
|
-
If <getopt-option-auto/> is equal `true` or <ase-project-boxing/> is
|
|
148
|
-
equal `black`, *skip* the reporting sub-steps 4-6 entirely (they
|
|
149
|
-
perform no output at all) to speed up processing.
|
|
150
|
-
|
|
151
|
-
1. *Propose* a corresponding *feature approach*, optionally including
|
|
152
|
-
some *alternative* feature approaches. Do *not* output anything
|
|
153
|
-
in this sub-step.
|
|
154
|
-
|
|
155
|
-
2. *Reflect* on and *critique* the proposed approaches by deriving,
|
|
156
|
-
per approach, a small set of concrete *pros* and *cons*. Do
|
|
157
|
-
*not* output anything in this sub-step.
|
|
158
|
-
|
|
159
|
-
3. Based on the reflection, *decide* which approach to recommend
|
|
160
|
-
and annotate it with an <annotation/> of
|
|
161
|
-
` ⚝ **RECOMMENDATION** ⚝`. All other approaches receive an
|
|
162
|
-
empty <annotation/>. Do *not* output anything in this sub-step.
|
|
163
|
-
|
|
164
|
-
4. Indicate start of reporting by showing the following <template/>:
|
|
165
|
-
|
|
166
|
-
<template>
|
|
167
|
-
<ase-tpl-head title="APPROACHES"/>
|
|
168
|
-
</template>
|
|
169
|
-
|
|
170
|
-
5. Now report each approach with the following <template/>,
|
|
171
|
-
inlining its pros/cons derived in sub-step 2, and do not output
|
|
172
|
-
anything else in this step:
|
|
173
|
-
|
|
174
|
-
<template>
|
|
175
|
-
● **APPROACH A<n/>**<annotation/>: **<summary/>**
|
|
176
|
-
○ [...]
|
|
177
|
-
⊕ *PRO*: [...]
|
|
178
|
-
⊖ *CON*: [...]
|
|
179
|
-
</template>
|
|
180
|
-
|
|
181
|
-
Hints:
|
|
182
|
-
|
|
183
|
-
- Give a short one-sentence <summary/> of the feature
|
|
184
|
-
approach plus *precise* and *ultra brief and concise*
|
|
185
|
-
feature information. Try to keep the number of bullet points
|
|
186
|
-
(`○ [...]`) in the range of 1-4.
|
|
187
|
-
|
|
188
|
-
6. Indicate end of reporting by showing the following <template/>:
|
|
189
|
-
|
|
190
|
-
<template>
|
|
191
|
-
<ase-tpl-foot title="APPROACHES"/>
|
|
192
|
-
</template>
|
|
193
|
-
|
|
194
|
-
7. <if condition="<getopt-option-auto/> is not equal `true` and <ase-project-boxing/> is not equal `black`">
|
|
195
|
-
|
|
196
|
-
In the following, you *MUST* *NOT* use your built-in
|
|
197
|
-
<user-dialog-tool/> tool! Instead, you *MUST* just show a
|
|
198
|
-
custom dialog according to the expanded `custom-dialog`
|
|
199
|
-
definition. You *MUST* closely follow this definition.
|
|
200
|
-
|
|
201
|
-
Let the user choose the preferred approach A<n/> by raising
|
|
202
|
-
a question with the following custom dialog, where per
|
|
203
|
-
approach A<n/>, you determine an ultra brief summary
|
|
204
|
-
<short-summary/> and then use the answer option `A<n/>:
|
|
205
|
-
⚝ **RECOMMENDATION** ⚝ - <short-summary/>` for your
|
|
206
|
-
recommended approach plus zero or more answer options `A<n/>:
|
|
207
|
-
<short-summary/>` for all other approaches:
|
|
208
|
-
|
|
209
|
-
<expand name="custom-dialog" arg1="--no-other">
|
|
210
|
-
Select Approach: Select your preferred crafting approach to follow?
|
|
211
|
-
A<n/>: <short-summary/>
|
|
212
|
-
[...]
|
|
213
|
-
</expand>
|
|
214
|
-
|
|
215
|
-
</if>
|
|
216
|
-
<else>
|
|
217
|
-
|
|
218
|
-
Set <n/> to the number of the feature approach A<n/> you recommend.
|
|
219
|
-
Output a hint with the following <template/>:
|
|
220
|
-
|
|
221
|
-
<template>
|
|
222
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **auto-chosen approach A<n/>**
|
|
223
|
-
</template>
|
|
224
|
-
|
|
225
|
-
</else>
|
|
141
|
+
<expand name="code-approaches" arg1="feature" arg2="crafting"></expand>
|
|
226
142
|
|
|
227
143
|
</step>
|
|
228
144
|
|
|
@@ -267,74 +183,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
267
183
|
|
|
268
184
|
5. Directly pass-through control to the next skill:
|
|
269
185
|
|
|
270
|
-
|
|
271
|
-
list of pre-selected next-step tokens. *Peek* the *first* token
|
|
272
|
-
as <head/> (or `none` if the list is `none`/empty).
|
|
273
|
-
Set <args>--int-reuse-task</args>.
|
|
274
|
-
|
|
275
|
-
1. <if condition="<head/> is equal `DONE`">
|
|
276
|
-
Consume the head: set <getopt-option-next/> to the remaining
|
|
277
|
-
tokens (joined back with `,`, or `none` if empty). `DONE`
|
|
278
|
-
means the freshly composed plan is finalized as-is, so do
|
|
279
|
-
*not* hand off to `ase-task-edit`. Only output the following
|
|
280
|
-
<template/> and then *STOP*. Do *not* implement the plan.
|
|
281
|
-
|
|
282
|
-
<template>
|
|
283
|
-
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan finalized -- done**
|
|
284
|
-
</template>
|
|
285
|
-
</if>
|
|
286
|
-
|
|
287
|
-
2. <elseif condition="<head/> is equal `IMPLEMENT`">
|
|
288
|
-
Consume the head: set <getopt-option-next/> to the remaining
|
|
289
|
-
tokens (joined back with `,`, or `none` if empty).
|
|
290
|
-
<if condition="<getopt-option-next/> is not equal `none`">
|
|
291
|
-
Set <args><args/> --next <getopt-option-next/></args>
|
|
292
|
-
</if>
|
|
293
|
-
Call the tool `Skill(skill: "ase:ase-task-implement", args: "<args/>")`
|
|
294
|
-
to *implement* the freshly composed plan, bypassing `ase-task-edit`.
|
|
295
|
-
</elseif>
|
|
296
|
-
|
|
297
|
-
3. <elseif condition="<head/> is equal `PREFLIGHT`">
|
|
298
|
-
Consume the head: set <getopt-option-next/> to the remaining
|
|
299
|
-
tokens (joined back with `,`, or `none` if empty).
|
|
300
|
-
<if condition="<getopt-option-next/> is not equal `none`">
|
|
301
|
-
Set <args><args/> --next <getopt-option-next/></args>
|
|
302
|
-
</if>
|
|
303
|
-
Call the tool `Skill(skill: "ase:ase-task-preflight", args: "<args/>")`
|
|
304
|
-
to *preflight* the freshly composed plan, bypassing `ase-task-edit`.
|
|
305
|
-
</elseif>
|
|
306
|
-
|
|
307
|
-
4. <elseif condition="<head/> is equal `GRILL`">
|
|
308
|
-
Consume the head: set <getopt-option-next/> to the remaining
|
|
309
|
-
tokens (joined back with `,`, or `none` if empty). `GRILL`
|
|
310
|
-
is this skill's own dispatch token, *not* part of
|
|
311
|
-
`ase-task-grill`'s `--next` vocabulary, so it must be
|
|
312
|
-
stripped here rather than forwarded. All remaining tokens are
|
|
313
|
-
`ase-task-grill`'s own vocabulary and are forwarded verbatim.
|
|
314
|
-
<if condition="<getopt-option-next/> is not equal `none`">
|
|
315
|
-
Set <args><args/> --next <getopt-option-next/></args>
|
|
316
|
-
</if>
|
|
317
|
-
Call the tool `Skill(skill: "ase:ase-task-grill", args: "<args/>")`
|
|
318
|
-
to *grill* the freshly composed plan, bypassing `ase-task-edit`.
|
|
319
|
-
</elseif>
|
|
320
|
-
|
|
321
|
-
5. <else>
|
|
322
|
-
Hand off to `ase-task-edit`.
|
|
323
|
-
<if condition="<head/> is equal `EDIT`">
|
|
324
|
-
Consume the head: set <getopt-option-next/> to the remaining
|
|
325
|
-
tokens (joined back with `,`, or `none` if empty). `EDIT`
|
|
326
|
-
is this skill's own dispatch token, *not* part of
|
|
327
|
-
`ase-task-edit`'s `--next` vocabulary, so it must be
|
|
328
|
-
stripped here rather than forwarded.
|
|
329
|
-
</if>
|
|
330
|
-
All remaining tokens are `ase-task-edit`'s own vocabulary
|
|
331
|
-
and are forwarded verbatim, so `ase-task-edit` consumes its
|
|
332
|
-
own head itself.
|
|
333
|
-
<if condition="<getopt-option-next/> is not equal `none`">
|
|
334
|
-
Set <args><args/> --next <getopt-option-next/></args>
|
|
335
|
-
</if>
|
|
336
|
-
Then call the tool `Skill(skill: "ase:ase-task-edit", args: "<args/>")`.
|
|
337
|
-
</else>
|
|
186
|
+
<expand name="code-next-dispatch"></expand>
|
|
338
187
|
|
|
339
188
|
</step>
|
|
340
189
|
|
|
@@ -56,7 +56,7 @@ plan via `ase_task_save` and then hands off to `ase-task-edit`,
|
|
|
56
56
|
skill. For all other head tokens, the *entire* list is forwarded
|
|
57
57
|
to `ase-task-edit`, which consumes its head itself. This lets an
|
|
58
58
|
entire pipeline be pre-scripted in one shot. Recognized tokens at
|
|
59
|
-
this skill: `none` (default, hand
|
|
59
|
+
this skill: `none` (default, hand off to `ase-task-edit`
|
|
60
60
|
interactively), `DONE` (stop), `EDIT` (hand off to
|
|
61
61
|
`ase-task-edit`), `GRILL` (hand off to `ase-task-grill`),
|
|
62
62
|
`PREFLIGHT` (hand off to `ase-task-preflight`),
|
|
@@ -25,7 +25,7 @@ Explain Source Code
|
|
|
25
25
|
|
|
26
26
|
<objective>
|
|
27
27
|
*Analyze* the source code of <getopt-arguments/>, and its directly related source
|
|
28
|
-
code and *explain* it in a *brief*, *standardized*, and *concise* way.
|
|
28
|
+
code, and *explain* it in a *brief*, *standardized*, and *concise* way.
|
|
29
29
|
</objective>
|
|
30
30
|
|
|
31
31
|
<flow>
|
|
@@ -126,10 +126,10 @@ code and *explain* it in a *brief*, *standardized*, and *concise* way.
|
|
|
126
126
|
4. <step id="STEP 4: CRUXES and GOTCHAS">
|
|
127
127
|
**Highlight CRUXES and GOTCHAS**.
|
|
128
128
|
|
|
129
|
-
First, tell what
|
|
129
|
+
First, tell what the *cruxes* of the code are.
|
|
130
130
|
Is there something one should really *notice*?
|
|
131
131
|
|
|
132
|
-
Second, tell what
|
|
132
|
+
Second, tell what the gotchas of the code are.
|
|
133
133
|
Is there something one could really *stumble over*?
|
|
134
134
|
|
|
135
135
|
Keep your explanation *brief* and *concise*.
|