@rse/ase 2.0.0 → 2.0.2
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-config-schema.js +7 -1
- package/dst/ase-config.js +2 -1
- package/dst/ase-hook.js +2 -7
- package/dst/ase-lib-server-cli.js +6 -5
- package/dst/ase-lib-version.js +8 -4
- package/dst/ase-service.js +19 -6
- package/dst/ase-task-board-core.js +1 -1
- package/dst/ase-task-board-tui-control.js +10 -10
- package/dst/ase-task-board-tui-model.js +10 -14
- package/dst/ase-task-board-tui-view.js +14 -9
- package/dst/ase-task-board-web-client.css +1 -1
- package/dst/ase-task-board-web-client.js +2 -2
- package/dst/ase-task-board-web-server.js +2 -25
- package/dst/ase-task-store-issues.js +76 -0
- package/dst/ase-task-store-plugin-gitea.js +2 -65
- package/dst/ase-task-store-plugin-github.js +2 -65
- package/dst/ase-task-store-plugin-gitlab.js +2 -65
- package/dst/ase-util-diagram.js +3 -5
- package/dst/man/ase-agent-adhoc.1 +1 -1
- package/dst/man/ase-agent-condenser.1 +1 -1
- package/dst/man/ase-agent-editor.1 +1 -1
- package/dst/man/ase-agent-estimator.1 +1 -1
- package/dst/man/ase-agent-fleet.1 +1 -1
- package/dst/man/ase-agent-implementer.1 +1 -1
- package/dst/man/ase-agent-integrator.1 +1 -1
- package/dst/man/ase-agent-qualifier.1 +1 -1
- package/dst/man/ase-agent-rebooter.1 +1 -1
- package/dst/man/ase-agent-relay.1 +1 -1
- package/dst/man/ase-agent-researcher.1 +1 -1
- package/dst/man/ase-agent.1 +1 -1
- package/dst/man/ase-artifact-list.1 +1 -1
- package/dst/man/ase-artifact-name.1 +1 -1
- package/dst/man/ase-artifact.1 +1 -1
- package/dst/man/ase-config-delete.1 +1 -1
- package/dst/man/ase-config-edit.1 +1 -1
- package/dst/man/ase-config-get.1 +1 -1
- package/dst/man/ase-config-init.1 +1 -1
- package/dst/man/ase-config-list.1 +1 -1
- package/dst/man/ase-config-set.1 +1 -1
- package/dst/man/ase-config.1 +7 -1
- package/dst/man/ase-hook-permission-request.1 +1 -1
- package/dst/man/ase-hook-pre-tool-use.1 +1 -1
- package/dst/man/ase-hook-session-end.1 +1 -1
- package/dst/man/ase-hook-session-persona.1 +1 -1
- package/dst/man/ase-hook-session-start.1 +1 -1
- package/dst/man/ase-hook-stop.1 +1 -1
- package/dst/man/ase-hook-user-prompt-submit.1 +1 -1
- package/dst/man/ase-hook.1 +1 -1
- package/dst/man/ase-man.1 +1 -1
- package/dst/man/ase-mcp.1 +1 -1
- package/dst/man/ase-service-log.1 +1 -1
- package/dst/man/ase-service-send.1 +1 -1
- package/dst/man/ase-service-start.1 +4 -4
- package/dst/man/ase-service-status.1 +1 -1
- package/dst/man/ase-service-stop.1 +1 -1
- package/dst/man/ase-service.1 +2 -2
- package/dst/man/ase-setup-disable.1 +1 -1
- package/dst/man/ase-setup-enable.1 +1 -1
- package/dst/man/ase-setup-install.1 +1 -1
- package/dst/man/ase-setup-mcp.1 +1 -1
- package/dst/man/ase-setup-status.1 +1 -1
- package/dst/man/ase-setup-statusline.1 +1 -1
- package/dst/man/ase-setup-telemetry.1 +1 -1
- package/dst/man/ase-setup-uninstall.1 +1 -1
- package/dst/man/ase-setup-update.1 +1 -1
- package/dst/man/ase-setup.1 +1 -1
- package/dst/man/ase-spec-export.1 +1 -1
- package/dst/man/ase-spec-lint.1 +1 -1
- package/dst/man/ase-spec-preview.1 +1 -1
- package/dst/man/ase-spec.1 +1 -1
- package/dst/man/ase-statusline.1 +1 -1
- package/dst/man/ase-task-assign.1 +1 -1
- package/dst/man/ase-task-board.1 +3 -3
- package/dst/man/ase-task-delete.1 +1 -1
- package/dst/man/ase-task-edit.1 +1 -1
- package/dst/man/ase-task-idscheme.1 +1 -1
- package/dst/man/ase-task-lifecycle.1 +1 -1
- package/dst/man/ase-task-list.1 +1 -1
- package/dst/man/ase-task-load.1 +1 -1
- package/dst/man/ase-task-newid.1 +1 -1
- package/dst/man/ase-task-purge.1 +1 -1
- package/dst/man/ase-task-rename.1 +1 -1
- package/dst/man/ase-task-request.1 +1 -1
- package/dst/man/ase-task-save.1 +1 -1
- package/dst/man/ase-task-status.1 +1 -1
- package/dst/man/ase-task-store.1 +1 -1
- package/dst/man/ase-task-view.1 +1 -1
- package/dst/man/ase-task.1 +1 -1
- package/dst/man/ase-util-compat.1 +1 -1
- package/dst/man/ase-util-diagram.1 +1 -1
- package/dst/man/ase-util-meta.1 +1 -1
- package/dst/man/ase-util-metric.1 +1 -1
- package/dst/man/ase-util-mint.1 +1 -1
- package/dst/man/ase-util-worktree.1 +1 -1
- package/dst/man/ase-util.1 +1 -1
- package/dst/man/ase.1 +1 -1
- package/package.json +3 -1
- 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/meta/ase-common-resolve.md +2 -2
- package/plugin/mods/ase-mods.ts +6 -5
- package/plugin/skills/ase-arch-analyze/SKILL.md +3 -1
- package/plugin/skills/ase-code-analyze/SKILL.md +8 -0
- package/plugin/skills/ase-code-edit/SKILL.md +5 -4
- package/plugin/skills/ase-code-edit/help.md +1 -1
- package/plugin/skills/ase-code-lint/SKILL.md +15 -4
- package/plugin/skills/ase-help-intent/data.md +36 -18
- package/plugin/skills/ase-help-skill/help.md +3 -4
- package/plugin/skills/ase-meta-quorum/SKILL.md +9 -0
- package/plugin/skills/ase-meta-quorum/help.md +5 -3
- package/plugin/skills/ase-meta-workflow/sample.md +5 -3
- package/plugin/skills/ase-repo-changelog/SKILL.md +8 -9
- package/plugin/skills/ase-repo-changelog/help.md +2 -2
- package/plugin/skills/ase-spec-edit/SKILL.md +2 -1
- package/plugin/skills/ase-spec-edit/help.md +2 -1
- package/plugin/skills/ase-sync-reconcile/help.md +4 -4
- package/plugin/skills/ase-task-dissect/SKILL.md +10 -6
- package/plugin/skills/ase-task-grill/help.md +1 -1
- package/plugin/skills/ase-task-implement/SKILL.md +58 -1
- package/plugin/skills/ase-task-implement/help.md +16 -0
- package/plugin/skills/ase-task-list/help.md +2 -2
|
@@ -65,7 +65,7 @@ information.
|
|
|
65
65
|
should be clarified), `IMPLEMENTATION` (inner technical details,
|
|
66
66
|
can be clarified), `REGRESSION` (what must not break, should be
|
|
67
67
|
clarified), or `CONFIRMATION` (what proves the specified behavior,
|
|
68
|
-
should be clarified) -- and a 1-
|
|
68
|
+
should be clarified) -- and a 1-3 word `TOPIC` hint. The questions
|
|
69
69
|
of a round are sorted by descending focus area importance
|
|
70
70
|
(`DOMAIN`, `INTERFACE`, `ARCHITECTURE`, `IMPLEMENTATION`,
|
|
71
71
|
`REGRESSION`, `CONFIRMATION`). Questions of focus area
|
|
@@ -135,6 +135,14 @@ related to a set of code quality aspects.
|
|
|
135
135
|
list <sources/> of individual source code files, expanding any
|
|
136
136
|
directory or wildcard references with the `Glob` tool.
|
|
137
137
|
|
|
138
|
+
If <sources/> is empty (no *source-reference* given or none of it
|
|
139
|
+
resolvable), only output the following <template/> and then *STOP*
|
|
140
|
+
the entire flow (do not perform any further steps):
|
|
141
|
+
|
|
142
|
+
<template>
|
|
143
|
+
⧉ **ASE**: ✪ skill: **ase-code-lint**, ▶ ERROR: no source files to lint -- give a *source-reference* or use `--staged`/`--unstaged`
|
|
144
|
+
</template>
|
|
145
|
+
|
|
138
146
|
</else>
|
|
139
147
|
|
|
140
148
|
Then partition <sources/>, preserving order, into at most *eight*
|
|
@@ -160,12 +168,15 @@ related to a set of code quality aspects.
|
|
|
160
168
|
parallel invocation is distinguishable in the progress display.
|
|
161
169
|
|
|
162
170
|
Parse the result message of each `Agent` tool invocation as a JSON
|
|
163
|
-
array and concatenate all those arrays.
|
|
164
|
-
|
|
171
|
+
array and concatenate all those arrays. Determine the *anchor* of
|
|
172
|
+
each problem as the `file` of its *first* `change-set` entry and the
|
|
173
|
+
`line` of that entry's *first* `change-hunks` entry, as problems carry
|
|
174
|
+
no top-level `file` and `line` fields. Then *deduplicate* the
|
|
175
|
+
combined list: when two problems share the same anchor and
|
|
165
176
|
`aspect`, *silently drop* all but the first one (sub-agents may
|
|
166
177
|
have read overlapping *related* files for comprehension). Finally
|
|
167
|
-
sort the list by `file` and then numerically by
|
|
168
|
-
<problems/> to that list.
|
|
178
|
+
sort the list by the anchor `file` and then numerically by the anchor
|
|
179
|
+
`line`, and set <problems/> to that list.
|
|
169
180
|
|
|
170
181
|
Then determine the *effective severity floor* <floor/>: define the
|
|
171
182
|
ordinal rank `LOW`=1, `MEDIUM`=2, `HIGH`=3, start from
|
|
@@ -367,7 +367,7 @@ information.
|
|
|
367
367
|
should be clarified), `IMPLEMENTATION` (inner technical details,
|
|
368
368
|
can be clarified), `REGRESSION` (what must not break, should be
|
|
369
369
|
clarified), or `CONFIRMATION` (what proves the specified behavior,
|
|
370
|
-
should be clarified) -- and a 1-
|
|
370
|
+
should be clarified) -- and a 1-3 word `TOPIC` hint. The questions
|
|
371
371
|
of a round are sorted by descending focus area importance
|
|
372
372
|
(`DOMAIN`, `INTERFACE`, `ARCHITECTURE`, `IMPLEMENTATION`,
|
|
373
373
|
`REGRESSION`, `CONFIRMATION`). Questions of focus area
|
|
@@ -1169,11 +1169,10 @@ Shorten a document to at most 250 words unattended:
|
|
|
1169
1169
|
|
|
1170
1170
|
The `ase-help-skill` skill renders the *manual page* (`help.md`) of the
|
|
1171
1171
|
ASE skill addressed by *skill-name*. The page is emitted verbatim,
|
|
1172
|
-
framed between a `
|
|
1172
|
+
framed between a `MANUAL PAGE` header and footer rule.
|
|
1173
1173
|
|
|
1174
1174
|
The *skill-name* is resolved against a *catalog* of all ASE skills --
|
|
1175
|
-
one `name: purpose` entry per skill,
|
|
1176
|
-
`skills/ase-help-skill/data.md` by `npm start build` in `plugin/`.
|
|
1175
|
+
one `name: purpose` entry per skill, grouped by skill category.
|
|
1177
1176
|
Before resolving, any leading `/` and `ase:` prefix is stripped, so
|
|
1178
1177
|
`ase-code-lint`, `/ase-code-lint`, and `ase:ase-code-lint` are
|
|
1179
1178
|
equivalent. Resolution then proceeds in three tiers, each tried only if
|
|
@@ -1191,7 +1190,7 @@ most nine answer lines, a broader abbreviation such as `task` shows the
|
|
|
1191
1190
|
first nine candidates and states how many exist in total.
|
|
1192
1191
|
|
|
1193
1192
|
If *skill-name* is omitted, the whole catalog is rendered as a
|
|
1194
|
-
browsable
|
|
1193
|
+
browsable list, grouped by skill category, instead.
|
|
1195
1194
|
|
|
1196
1195
|
The skill exposes *no* option flags beyond `--help`/`-h`.
|
|
1197
1196
|
|
|
@@ -2062,9 +2061,11 @@ complete, unmodified individual responses.
|
|
|
2062
2061
|
- `--models`|`-m` *model*[,...]:
|
|
2063
2062
|
Restrict the *foreign* LLMs that are queried to the given
|
|
2064
2063
|
comma-separated list of *model* tokens. Recognized tokens are
|
|
2065
|
-
`all`, `chatgpt`, `gemini`, `deepseek`, `grok`, `glm`,
|
|
2066
|
-
where `all` selects every
|
|
2067
|
-
|
|
2064
|
+
`all`, `chatgpt`, `gemini`, `deepseek`, `grok`, `glm`, `qwen`,
|
|
2065
|
+
`claude`, `codex`, and `copilot`, where `all` selects every API-based
|
|
2066
|
+
model, but *not* the harness-based `claude`, `codex`, and `copilot`
|
|
2067
|
+
models, which are queried only when given explicitly. The default
|
|
2068
|
+
is `all`. Models that are not selected (or not available) are *silently skipped*.
|
|
2068
2069
|
Anthropic Claude (the skill itself) is *always* included,
|
|
2069
2070
|
independent of this option.
|
|
2070
2071
|
|
|
@@ -2597,8 +2598,8 @@ changes in the Git *index*.
|
|
|
2597
2598
|
Each entry is formatted as `<change-type> [<artifact-kind>]: <summary>`
|
|
2598
2599
|
where *change-type* is one of `FEATURE`, `IMPROVEMENT`, `BUGFIX`,
|
|
2599
2600
|
`UPDATE`, `CLEANUP`, or `REFACTOR`, and *artifact-kind* is one or more
|
|
2600
|
-
comma-separated *artifact class* tags out of `spec`, `
|
|
2601
|
-
`
|
|
2601
|
+
comma-separated *artifact class* tags out of `spec`, `code`, `docs`,
|
|
2602
|
+
`infr`, or `othr`. Entries are grouped and sorted by this
|
|
2602
2603
|
prefix. The date in the section header is also updated to the current
|
|
2603
2604
|
date.
|
|
2604
2605
|
|
|
@@ -3392,7 +3393,8 @@ approach selection close with an `EDIT TODO` box showing the established
|
|
|
3392
3393
|
|
|
3393
3394
|
The change set stays strictly restricted to the `SPEC` artifacts -- the
|
|
3394
3395
|
artifact kinds `CODE`, `DOCS`, `TASK`, `INFR`, and `OTHR` are never
|
|
3395
|
-
touched
|
|
3396
|
+
touched, except for an entry in an already existing `CHANGELOG.md`
|
|
3397
|
+
file. Every generated artifact carries the current `Created:` and
|
|
3396
3398
|
`Modified:` timestamps, and every changed artifact gets its `Modified:`
|
|
3397
3399
|
timestamp refreshed.
|
|
3398
3400
|
|
|
@@ -3800,13 +3802,13 @@ a unified diff instead.
|
|
|
3800
3802
|
as nothing is written to disk.
|
|
3801
3803
|
|
|
3802
3804
|
- `--target`|`-t` *target*[,...]:
|
|
3803
|
-
The comma-separated list of artifact kinds to update
|
|
3804
|
-
|
|
3805
|
+
The comma-separated list of artifact kinds to update (default:
|
|
3806
|
+
`CODE,DOCS,INFR,OTHR`). An empty target lets the skill error out.
|
|
3805
3807
|
|
|
3806
3808
|
- `--source`|`-s` *source*[,...]:
|
|
3807
3809
|
The comma-separated list of artifact kinds to update *from*. The
|
|
3808
|
-
special value `auto` resolves to all recognized kinds
|
|
3809
|
-
in *target*.
|
|
3810
|
+
special value `auto` (the default) resolves to all recognized kinds
|
|
3811
|
+
except those in *target*.
|
|
3810
3812
|
|
|
3811
3813
|
## ARGUMENTS
|
|
3812
3814
|
|
|
@@ -4711,7 +4713,7 @@ in state `[-]` (cancelled) or `[>]` (deferred) are never questioned.
|
|
|
4711
4713
|
## ARGUMENTS
|
|
4712
4714
|
|
|
4713
4715
|
- *id*:
|
|
4714
|
-
Grill the task with the unique identifier *id* (default:
|
|
4716
|
+
Grill the task with the unique identifier *id* (default: the current task).
|
|
4715
4717
|
The skill accepts *only* an optional *id* argument and never a
|
|
4716
4718
|
free-text instruction.
|
|
4717
4719
|
|
|
@@ -4923,6 +4925,22 @@ the entire verification phase is strictly skipped: no build, tests,
|
|
|
4923
4925
|
linter, type-checker, or program execution is performed once the
|
|
4924
4926
|
source files have been modified.
|
|
4925
4927
|
|
|
4928
|
+
The implementation runs to *completion*: the skill never concludes
|
|
4929
|
+
while any point of the plan is still unimplemented, neither because the
|
|
4930
|
+
change set grew large nor because an open question stands in the way.
|
|
4931
|
+
Undecided details and defensible alternatives are therefore *decided by
|
|
4932
|
+
the skill itself*, guided by the surrounding artifacts and the
|
|
4933
|
+
internalized tenets, instead of interrupting the run with a question.
|
|
4934
|
+
Once the change set is applied, the run closes with up to two boxed
|
|
4935
|
+
summaries: `OPEN POINTS` lists everything now waiting for the user --
|
|
4936
|
+
points left unimplemented on a *genuine blocker* no assumption can
|
|
4937
|
+
bridge, follow-ups deliberately left out of scope with their reason,
|
|
4938
|
+
and results needing review -- and `DECISIONS` lists each decision the
|
|
4939
|
+
skill took on its own together with its rationale, so it can be
|
|
4940
|
+
revisited or overruled. Either box is omitted entirely when it has no
|
|
4941
|
+
content; a run which implemented every point and decided nothing on its
|
|
4942
|
+
own emits no box at all.
|
|
4943
|
+
|
|
4926
4944
|
After implementation, the user is asked whether to stop, hand off to
|
|
4927
4945
|
`ase-task-edit`, hand off to `ase-task-integrate`, or delete the task
|
|
4928
4946
|
plan, unless `--next` pre-selects this choice.
|
|
@@ -5275,8 +5293,8 @@ DEFERRED INTEGRATING INTEGRATED CANCELLED
|
|
|
5275
5293
|
- `--include`|`-i`=*state*[`,`...]:
|
|
5276
5294
|
Restrict the listed task plans to the given comma-separated list of
|
|
5277
5295
|
lifecycle states (e.g. `IMPLEMENTING,STALLED`). Without this option,
|
|
5278
|
-
all states are listed. The `none` sentinel
|
|
5279
|
-
the `finished` sentinel selects the finished states.
|
|
5296
|
+
all states are listed. The `none` sentinel (the default) imposes no
|
|
5297
|
+
restriction, the `finished` sentinel selects the finished states.
|
|
5280
5298
|
|
|
5281
5299
|
- `--exclude`|`-e`=*state*[`,`...]:
|
|
5282
5300
|
Remove the given comma-separated list of lifecycle states from the
|
|
@@ -13,11 +13,10 @@
|
|
|
13
13
|
|
|
14
14
|
The `ase-help-skill` skill renders the *manual page* (`help.md`) of the
|
|
15
15
|
ASE skill addressed by *skill-name*. The page is emitted verbatim,
|
|
16
|
-
framed between a `
|
|
16
|
+
framed between a `MANUAL PAGE` header and footer rule.
|
|
17
17
|
|
|
18
18
|
The *skill-name* is resolved against a *catalog* of all ASE skills --
|
|
19
|
-
one `name: purpose` entry per skill,
|
|
20
|
-
`skills/ase-help-skill/data.md` by `npm start build` in `plugin/`.
|
|
19
|
+
one `name: purpose` entry per skill, grouped by skill category.
|
|
21
20
|
Before resolving, any leading `/` and `ase:` prefix is stripped, so
|
|
22
21
|
`ase-code-lint`, `/ase-code-lint`, and `ase:ase-code-lint` are
|
|
23
22
|
equivalent. Resolution then proceeds in three tiers, each tried only if
|
|
@@ -35,7 +34,7 @@ most nine answer lines, a broader abbreviation such as `task` shows the
|
|
|
35
34
|
first nine candidates and states how many exist in total.
|
|
36
35
|
|
|
37
36
|
If *skill-name* is omitted, the whole catalog is rendered as a
|
|
38
|
-
browsable
|
|
37
|
+
browsable list, grouped by skill category, instead.
|
|
39
38
|
|
|
40
39
|
The skill exposes *no* option flags beyond `--help`/`-h`.
|
|
41
40
|
|
|
@@ -38,6 +38,15 @@ by querying *multiple* AIs for an *optimal consensus*.
|
|
|
38
38
|
|
|
39
39
|
1. <step id="STEP 1: Preview Own Answer">
|
|
40
40
|
|
|
41
|
+
<if condition="<getopt-arguments/> is empty">
|
|
42
|
+
Only output the following <template/> and then immediately *STOP*
|
|
43
|
+
processing the entire current skill:
|
|
44
|
+
|
|
45
|
+
<template>
|
|
46
|
+
⧉ **ASE**: ✪ skill: **ase-meta-quorum**, ▶ ERROR: expected a `<question>` argument
|
|
47
|
+
</template>
|
|
48
|
+
</if>
|
|
49
|
+
|
|
41
50
|
The user-selectable foreign models are restricted by the
|
|
42
51
|
`--models`/`-m` option, parsed into <getopt-option-models/>
|
|
43
52
|
as a comma-separated list of model tokens. The getopt parser
|
|
@@ -29,9 +29,11 @@ complete, unmodified individual responses.
|
|
|
29
29
|
- `--models`|`-m` *model*[,...]:
|
|
30
30
|
Restrict the *foreign* LLMs that are queried to the given
|
|
31
31
|
comma-separated list of *model* tokens. Recognized tokens are
|
|
32
|
-
`all`, `chatgpt`, `gemini`, `deepseek`, `grok`, `glm`,
|
|
33
|
-
where `all` selects every
|
|
34
|
-
|
|
32
|
+
`all`, `chatgpt`, `gemini`, `deepseek`, `grok`, `glm`, `qwen`,
|
|
33
|
+
`claude`, `codex`, and `copilot`, where `all` selects every API-based
|
|
34
|
+
model, but *not* the harness-based `claude`, `codex`, and `copilot`
|
|
35
|
+
models, which are queried only when given explicitly. The default
|
|
36
|
+
is `all`. Models that are not selected (or not available) are *silently skipped*.
|
|
35
37
|
Anthropic Claude (the skill itself) is *always* included,
|
|
36
38
|
independent of this option.
|
|
37
39
|
|
|
@@ -17,10 +17,12 @@ Analyze and Resolve Source Code Problems
|
|
|
17
17
|
|
|
18
18
|
<expand name="getopt"
|
|
19
19
|
arg1="optimizer"
|
|
20
|
-
arg2="--id|-i
|
|
20
|
+
arg2="--id|-i=optimizer">
|
|
21
21
|
$ARGUMENTS
|
|
22
22
|
</expand>
|
|
23
23
|
|
|
24
|
+
Set <id><getopt-option-id/></id>.
|
|
25
|
+
|
|
24
26
|
<flow>
|
|
25
27
|
|
|
26
28
|
1. <step id="STEP 1: Analyze Code">
|
|
@@ -29,7 +31,7 @@ Analyze and Resolve Source Code Problems
|
|
|
29
31
|
subagent_type="general-purpose"
|
|
30
32
|
run_in_background=false>
|
|
31
33
|
|
|
32
|
-
Run <skill name="ase-code-analyze" args="--prefix <id/> <getopt-arguments/>"/>
|
|
34
|
+
Run <skill name="ase:ase-code-analyze" args="--prefix <id/> <getopt-arguments/>"/>
|
|
33
35
|
|
|
34
36
|
</agent>
|
|
35
37
|
|
|
@@ -39,7 +41,7 @@ Analyze and Resolve Source Code Problems
|
|
|
39
41
|
|
|
40
42
|
<parallel>
|
|
41
43
|
|
|
42
|
-
For each `P<n/>` in the result set, in ascending order
|
|
44
|
+
For each `P<n/>` in the result set, in ascending order:
|
|
43
45
|
|
|
44
46
|
1. Call the Agent:
|
|
45
47
|
|
|
@@ -58,10 +58,9 @@ related changes:
|
|
|
58
58
|
The <artifact-kind/> is one or more of the following *artifact* tags,
|
|
59
59
|
classifying which kind of artifact the change primarily touches. If
|
|
60
60
|
multiple artifact kinds apply, comma-separate them
|
|
61
|
-
(e.g. `[
|
|
61
|
+
(e.g. `[code, docs]`):
|
|
62
62
|
|
|
63
63
|
- `spec`: requirement/specification artifacts
|
|
64
|
-
- `arch`: architecture/design artifacts
|
|
65
64
|
- `code`: source code artifacts
|
|
66
65
|
- `docs`: documentation artifacts
|
|
67
66
|
- `infr`: infrastructure/build/tooling artifacts
|
|
@@ -114,14 +113,14 @@ Processing
|
|
|
114
113
|
level-2 section (next patch version, current date) *above* it, which
|
|
115
114
|
then becomes the *first* (most recent) section all subsequent steps
|
|
116
115
|
operate on - the already released section *MUST* *NOT* be modified.
|
|
117
|
-
If this command produces *no* output, the
|
|
118
|
-
|
|
119
|
-
|
|
116
|
+
If this command produces *no* output, the first section is still
|
|
117
|
+
in-progress/untagged, so use the `N.M.K` from the *second* level-2
|
|
118
|
+
header as the baseline tag instead. Then check all Git commits
|
|
119
|
+
between `HEAD` and this baseline tag with the command
|
|
120
|
+
`git log N.M.K..HEAD --numstat --pretty=format:'%h: %s'`. If *no*
|
|
120
121
|
second level-2 header exists (very first, still untagged release),
|
|
121
122
|
skip the baseline tag and check *all* Git commits with the command
|
|
122
|
-
`git log HEAD --numstat --pretty=format:'%h: %s'` instead.
|
|
123
|
-
check all Git commits between `HEAD` and this baseline tag with the
|
|
124
|
-
command `git log N.M.K..HEAD --numstat --pretty=format:'%h: %s'`.
|
|
123
|
+
`git log HEAD --numstat --pretty=format:'%h: %s'` instead.
|
|
125
124
|
|
|
126
125
|
For finding the corresponding staged Git *changes* in the Git
|
|
127
126
|
*index*, use the command `git diff --cached --numstat`, but silently
|
|
@@ -152,7 +151,7 @@ Processing
|
|
|
152
151
|
tag(s) from the paths of the changed files. To classify a changed
|
|
153
152
|
file to its artifact class, call the `ase_artifact_list(kind: [
|
|
154
153
|
... ])` tool of the `ase` MCP server *once*, passing the `kind`
|
|
155
|
-
tokens (`spec`, `
|
|
154
|
+
tokens (`spec`, `code`, `docs`, `infr`, `othr`), and read
|
|
156
155
|
the returned `artifacts` array of `{ kind, files }` objects to match
|
|
157
156
|
each changed file to its kind. Use the matched lower-cased kind
|
|
158
157
|
directly as its <artifact-kind/> tag, and comma-separate multiple
|
|
@@ -18,8 +18,8 @@ changes in the Git *index*.
|
|
|
18
18
|
Each entry is formatted as `<change-type> [<artifact-kind>]: <summary>`
|
|
19
19
|
where *change-type* is one of `FEATURE`, `IMPROVEMENT`, `BUGFIX`,
|
|
20
20
|
`UPDATE`, `CLEANUP`, or `REFACTOR`, and *artifact-kind* is one or more
|
|
21
|
-
comma-separated *artifact class* tags out of `spec`, `
|
|
22
|
-
`
|
|
21
|
+
comma-separated *artifact class* tags out of `spec`, `code`, `docs`,
|
|
22
|
+
`infr`, or `othr`. Entries are grouped and sorted by this
|
|
23
23
|
prefix. The date in the section header is also updated to the current
|
|
24
24
|
date.
|
|
25
25
|
|
|
@@ -47,7 +47,8 @@ and *MUST* *NOT* call `ase_task_save(...)`. Instead, it applies the
|
|
|
47
47
|
requested edit *in place*, so the *implementing* state *requires* `Edit`
|
|
48
48
|
and `Write` to modify the affected artifacts. Every modification *MUST*
|
|
49
49
|
stay restricted to the `SPEC` artifacts the edit actually demands -- the
|
|
50
|
-
kinds `CODE`, `DOCS`, `TASK`, `INFR`, and `OTHR` are *never* touched
|
|
50
|
+
kinds `CODE`, `DOCS`, `TASK`, `INFR`, and `OTHR` are *never* touched,
|
|
51
|
+
except for an entry in an already existing `CHANGELOG.md` file.
|
|
51
52
|
|
|
52
53
|
<define name="todo-box">
|
|
53
54
|
|
|
@@ -44,7 +44,8 @@ approach selection close with an `EDIT TODO` box showing the established
|
|
|
44
44
|
|
|
45
45
|
The change set stays strictly restricted to the `SPEC` artifacts -- the
|
|
46
46
|
artifact kinds `CODE`, `DOCS`, `TASK`, `INFR`, and `OTHR` are never
|
|
47
|
-
touched
|
|
47
|
+
touched, except for an entry in an already existing `CHANGELOG.md`
|
|
48
|
+
file. Every generated artifact carries the current `Created:` and
|
|
48
49
|
`Modified:` timestamps, and every changed artifact gets its `Modified:`
|
|
49
50
|
timestamp refreshed.
|
|
50
51
|
|
|
@@ -70,13 +70,13 @@ a unified diff instead.
|
|
|
70
70
|
as nothing is written to disk.
|
|
71
71
|
|
|
72
72
|
- `--target`|`-t` *target*[,...]:
|
|
73
|
-
The comma-separated list of artifact kinds to update
|
|
74
|
-
|
|
73
|
+
The comma-separated list of artifact kinds to update (default:
|
|
74
|
+
`CODE,DOCS,INFR,OTHR`). An empty target lets the skill error out.
|
|
75
75
|
|
|
76
76
|
- `--source`|`-s` *source*[,...]:
|
|
77
77
|
The comma-separated list of artifact kinds to update *from*. The
|
|
78
|
-
special value `auto` resolves to all recognized kinds
|
|
79
|
-
in *target*.
|
|
78
|
+
special value `auto` (the default) resolves to all recognized kinds
|
|
79
|
+
except those in *target*.
|
|
80
80
|
|
|
81
81
|
## ARGUMENTS
|
|
82
82
|
|
|
@@ -142,7 +142,8 @@ Procedure
|
|
|
142
142
|
|
|
143
143
|
2. *Identify the parts* according to the task id scheme of the
|
|
144
144
|
project: for *every* part in <parts/>, in their derived order,
|
|
145
|
-
|
|
145
|
+
remember its <part-id/> as its <part-proposal/> and call the
|
|
146
|
+
`ase_task_newid(title: "<scope/>", proposal:
|
|
146
147
|
"<part-id/>", taken: [ <previous/> ])` tool of the `ase` MCP
|
|
147
148
|
server, where <previous/> lists the already re-identified
|
|
148
149
|
<part-id/> of all preceding parts (as the tool reserves ids for
|
|
@@ -175,8 +176,9 @@ Procedure
|
|
|
175
176
|
Call the `ase_task_list(verbose: false)` tool of the `ase` MCP
|
|
176
177
|
server and set <existing/> to the `id` fields of the returned
|
|
177
178
|
`tasks` array. Do not output anything related to this MCP tool
|
|
178
|
-
call. Set <collisions/> to all <part-
|
|
179
|
-
already present in <existing
|
|
179
|
+
call. Set <collisions/> to all <part-proposal/> of <parts/> which
|
|
180
|
+
are already present in <existing/> (as each <part-id/> itself was
|
|
181
|
+
re-identified to a free id in step 3.2).
|
|
180
182
|
|
|
181
183
|
<if condition="<collisions/> is not empty AND <getopt-option-force/> is not equal `true`">
|
|
182
184
|
Only output the following <template/> -- with <collisions/>
|
|
@@ -200,8 +202,9 @@ Procedure
|
|
|
200
202
|
</if>
|
|
201
203
|
|
|
202
204
|
<if condition="<collisions/> is not empty AND <getopt-option-force/> is equal `true`">
|
|
203
|
-
|
|
204
|
-
|
|
205
|
+
Set the <part-id/> of every colliding part back to its
|
|
206
|
+
<part-proposal/>, so the colliding sub-task plans are
|
|
207
|
+
*overwritten* in sub-step 4.3 below. Do not output anything.
|
|
205
208
|
</if>
|
|
206
209
|
|
|
207
210
|
3. *Compose and persist one sub-task plan per part*:
|
|
@@ -263,7 +266,8 @@ Procedure
|
|
|
263
266
|
</elseif>
|
|
264
267
|
|
|
265
268
|
2. Call the `ase_task_save(id: "<part-id/>", text:
|
|
266
|
-
"<part-content/>", create: true)` tool of the `ase` MCP server
|
|
269
|
+
"<part-content/>", create: true)` tool of the `ase` MCP server -- for
|
|
270
|
+
a part of <collisions/> *without* the `create` argument -- to persist
|
|
267
271
|
the sub-task plan -- this MCP tool call is the *only*
|
|
268
272
|
permitted way to persist it, *NEVER* write the plan file
|
|
269
273
|
via `Write`/`Edit` or by executing a shell command. If this
|
|
@@ -152,7 +152,7 @@ in state `[-]` (cancelled) or `[>]` (deferred) are never questioned.
|
|
|
152
152
|
## ARGUMENTS
|
|
153
153
|
|
|
154
154
|
- *id*:
|
|
155
|
-
Grill the task with the unique identifier *id* (default:
|
|
155
|
+
Grill the task with the unique identifier *id* (default: the current task).
|
|
156
156
|
The skill accepts *only* an optional *id* argument and never a
|
|
157
157
|
free-text instruction.
|
|
158
158
|
|
|
@@ -409,6 +409,32 @@ Procedure
|
|
|
409
409
|
here. Do not output anything.
|
|
410
410
|
</if>
|
|
411
411
|
|
|
412
|
+
Set <decisions></decisions> (empty) and
|
|
413
|
+
<open-points></open-points> (empty). They collect, one entry
|
|
414
|
+
each, the decisions you take on your own while implementing and
|
|
415
|
+
whatever ends up waiting for the *user*.
|
|
416
|
+
|
|
417
|
+
The implementation is *complete or it is not done*: you *MUST*
|
|
418
|
+
*NEVER* conclude this step while any point of the task plan is
|
|
419
|
+
still unimplemented -- not because the change set already grew
|
|
420
|
+
large, not because the remaining points look secondary or
|
|
421
|
+
cosmetic, and not because an open question stands in the way.
|
|
422
|
+
Work through *every* point of the plan within this single run.
|
|
423
|
+
|
|
424
|
+
Open questions therefore *MUST* *NOT* end the run: whenever the
|
|
425
|
+
plan leaves a detail undecided or admits several defensible
|
|
426
|
+
alternatives, *decide it yourself* -- picking what best fits the
|
|
427
|
+
surrounding artifacts and the internalized tenets -- and append
|
|
428
|
+
the decision plus a half-sentence rationale to <decisions/>,
|
|
429
|
+
instead of asking the user and stopping. Only a *genuine
|
|
430
|
+
blocker*, which no defensible assumption can bridge (a missing
|
|
431
|
+
credential, an inaccessible external system), may leave a point
|
|
432
|
+
unimplemented; append such a point to <open-points/> instead,
|
|
433
|
+
naming what remains open and why. Append to <open-points/> as
|
|
434
|
+
well whatever else now waits for the user once this run ends --
|
|
435
|
+
follow-ups you deliberately left out of scope, each with its
|
|
436
|
+
reason, and results which genuinely need their review.
|
|
437
|
+
|
|
412
438
|
You *MUST* *skip* every bullet-point of <task-content/> in
|
|
413
439
|
checkbox state `[-]` (cancelled) or `[>]` (deferred): neither
|
|
414
440
|
realize its <text/> in the change set nor perform its check, and
|
|
@@ -594,7 +620,38 @@ Procedure
|
|
|
594
620
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇢ changeset: **<task-changeset/>**, ▶ status: **plan implemented**
|
|
595
621
|
</template>
|
|
596
622
|
|
|
597
|
-
7.
|
|
623
|
+
7. Close the implementation with the boxed summary of what this run
|
|
624
|
+
left open and what it decided on its own. Both boxes are written
|
|
625
|
+
in the conversation language and the active persona style, list
|
|
626
|
+
*one entry per line*, and are *omitted entirely* when they carry
|
|
627
|
+
no content -- a run which implemented every point and took no
|
|
628
|
+
decision of its own outputs no box at all.
|
|
629
|
+
|
|
630
|
+
<if condition="<open-points/> is not empty">
|
|
631
|
+
Output everything which now waits for the *user* with the
|
|
632
|
+
following <template/>:
|
|
633
|
+
|
|
634
|
+
<template>
|
|
635
|
+
<ase-tpl-boxed title="OPEN POINTS">
|
|
636
|
+
○ <open-point/>
|
|
637
|
+
</ase-tpl-boxed>
|
|
638
|
+
</template>
|
|
639
|
+
</if>
|
|
640
|
+
|
|
641
|
+
<if condition="<decisions/> is not empty">
|
|
642
|
+
The run decided open questions *on the user's behalf*, so they
|
|
643
|
+
*MUST* be able to revisit or overrule each of them. Output the
|
|
644
|
+
collected decisions -- each naming the chosen option and its
|
|
645
|
+
rationale -- directly below, with the following <template/>:
|
|
646
|
+
|
|
647
|
+
<template>
|
|
648
|
+
<ase-tpl-boxed title="DECISIONS">
|
|
649
|
+
○ <decision/> -- <rationale/>
|
|
650
|
+
</ase-tpl-boxed>
|
|
651
|
+
</template>
|
|
652
|
+
</if>
|
|
653
|
+
|
|
654
|
+
8. Give the closing hint by expanding the following (which,
|
|
598
655
|
depending on the configured <ase-guidance-level/>, may expand
|
|
599
656
|
into nothing and hence emit no output at all):
|
|
600
657
|
|
|
@@ -102,6 +102,22 @@ the entire verification phase is strictly skipped: no build, tests,
|
|
|
102
102
|
linter, type-checker, or program execution is performed once the
|
|
103
103
|
source files have been modified.
|
|
104
104
|
|
|
105
|
+
The implementation runs to *completion*: the skill never concludes
|
|
106
|
+
while any point of the plan is still unimplemented, neither because the
|
|
107
|
+
change set grew large nor because an open question stands in the way.
|
|
108
|
+
Undecided details and defensible alternatives are therefore *decided by
|
|
109
|
+
the skill itself*, guided by the surrounding artifacts and the
|
|
110
|
+
internalized tenets, instead of interrupting the run with a question.
|
|
111
|
+
Once the change set is applied, the run closes with up to two boxed
|
|
112
|
+
summaries: `OPEN POINTS` lists everything now waiting for the user --
|
|
113
|
+
points left unimplemented on a *genuine blocker* no assumption can
|
|
114
|
+
bridge, follow-ups deliberately left out of scope with their reason,
|
|
115
|
+
and results needing review -- and `DECISIONS` lists each decision the
|
|
116
|
+
skill took on its own together with its rationale, so it can be
|
|
117
|
+
revisited or overruled. Either box is omitted entirely when it has no
|
|
118
|
+
content; a run which implemented every point and decided nothing on its
|
|
119
|
+
own emits no box at all.
|
|
120
|
+
|
|
105
121
|
After implementation, the user is asked whether to stop, hand off to
|
|
106
122
|
`ase-task-edit`, hand off to `ase-task-integrate`, or delete the task
|
|
107
123
|
plan, unless `--next` pre-selects this choice.
|
|
@@ -68,8 +68,8 @@ DEFERRED INTEGRATING INTEGRATED CANCELLED
|
|
|
68
68
|
- `--include`|`-i`=*state*[`,`...]:
|
|
69
69
|
Restrict the listed task plans to the given comma-separated list of
|
|
70
70
|
lifecycle states (e.g. `IMPLEMENTING,STALLED`). Without this option,
|
|
71
|
-
all states are listed. The `none` sentinel
|
|
72
|
-
the `finished` sentinel selects the finished states.
|
|
71
|
+
all states are listed. The `none` sentinel (the default) imposes no
|
|
72
|
+
restriction, the `finished` sentinel selects the finished states.
|
|
73
73
|
|
|
74
74
|
- `--exclude`|`-e`=*state*[`,`...]:
|
|
75
75
|
Remove the given comma-separated list of lifecycle states from the
|