@rse/ase 0.9.10 → 0.9.12
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-hook.js +158 -67
- package/dst/ase-service.js +2 -0
- package/dst/ase-setup.js +52 -23
- package/dst/ase-statusline.js +7 -3
- package/dst/ase.js +2 -0
- 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 +20 -0
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-arch-analyze/SKILL.md +6 -1
- package/plugin/skills/ase-arch-discover/SKILL.md +2 -2
- package/plugin/skills/ase-code-analyze/SKILL.md +12 -5
- package/plugin/skills/ase-code-craft/SKILL.md +6 -3
- package/plugin/skills/ase-code-explain/SKILL.md +6 -1
- package/plugin/skills/ase-code-insight/SKILL.md +6 -1
- package/plugin/skills/ase-code-lint/SKILL.md +9 -3
- package/plugin/skills/ase-code-refactor/SKILL.md +6 -3
- package/plugin/skills/ase-code-resolve/SKILL.md +13 -9
- package/plugin/skills/ase-docs-proofread/SKILL.md +9 -3
- package/plugin/skills/ase-meta-brainstorm/SKILL.md +3 -4
- package/plugin/skills/ase-meta-changelog/SKILL.md +16 -5
- package/plugin/skills/ase-meta-chat/SKILL.md +6 -1
- package/plugin/skills/ase-meta-commit/SKILL.md +5 -0
- package/plugin/skills/ase-meta-compat/SKILL.md +288 -0
- package/plugin/skills/ase-meta-compat/help.md +67 -0
- package/plugin/skills/ase-meta-diaboli/SKILL.md +5 -1
- package/plugin/skills/ase-meta-diff/SKILL.md +1 -1
- package/plugin/skills/ase-meta-evaluate/SKILL.md +20 -12
- package/plugin/skills/ase-meta-persona/SKILL.md +6 -1
- package/plugin/skills/ase-meta-quorum/SKILL.md +15 -3
- package/plugin/skills/ase-meta-steelman/SKILL.md +5 -1
- package/plugin/skills/ase-task-delete/SKILL.md +6 -1
- package/plugin/skills/ase-task-grill/SKILL.md +30 -9
- package/plugin/skills/ase-task-id/SKILL.md +10 -3
- package/plugin/skills/ase-task-reboot/SKILL.md +2 -2
- package/plugin/skills/ase-task-rename/SKILL.md +15 -1
package/dst/ase-statusline.js
CHANGED
|
@@ -184,8 +184,8 @@ export default class StatuslineCommand {
|
|
|
184
184
|
}
|
|
185
185
|
/* parse and validate the --tool option */
|
|
186
186
|
parseTool(value) {
|
|
187
|
-
if (value !== "claude" && value !== "copilot")
|
|
188
|
-
throw new InvalidArgumentError(`invalid --tool value: "${value}" (expected "claude" or "
|
|
187
|
+
if (value !== "claude" && value !== "copilot" && value !== "codex")
|
|
188
|
+
throw new InvalidArgumentError(`invalid --tool value: "${value}" (expected "claude", "copilot", or "codex")`);
|
|
189
189
|
return value;
|
|
190
190
|
}
|
|
191
191
|
/* register commands */
|
|
@@ -196,7 +196,7 @@ export default class StatuslineCommand {
|
|
|
196
196
|
program
|
|
197
197
|
.command("statusline")
|
|
198
198
|
.description("Render Claude Code or GitHub Copilot CLI statusline from stdin JSON")
|
|
199
|
-
.option("-t, --tool <tool>", "target tool (\"claude\" or \"copilot\")", toolDflt)
|
|
199
|
+
.option("-t, --tool <tool>", "target tool (\"claude\" or \"copilot\"; \"codex\" is unsupported)", toolDflt)
|
|
200
200
|
.option("-w, --width <n>", "force terminal width to <n> characters (0 = auto-detect via /dev/tty)", parseInteger("--width"), 0)
|
|
201
201
|
.option("-m, --margin <n>", "reduce maximum used terminal width by <n> characters on each side", parseInteger("--margin"), 2)
|
|
202
202
|
.option("--no-icons", "disable icons in placeholder rendering")
|
|
@@ -208,6 +208,10 @@ export default class StatuslineCommand {
|
|
|
208
208
|
.action(async (lines, opts) => {
|
|
209
209
|
/* validate target tool */
|
|
210
210
|
const tool = this.parseTool(opts.tool);
|
|
211
|
+
/* OpenAI Codex CLI has no scriptable custom statusline
|
|
212
|
+
mechanism, so reject the request explicitly */
|
|
213
|
+
if (tool === "codex")
|
|
214
|
+
throw new Error("OpenAI Codex CLI does not support a custom statusline");
|
|
211
215
|
/* read all of stdin */
|
|
212
216
|
const input = await readStdin();
|
|
213
217
|
/* parse JSON data */
|
package/dst/ase.js
CHANGED
|
@@ -15,6 +15,7 @@ import SetupCommand from "./ase-setup.js";
|
|
|
15
15
|
import StatuslineCommand from "./ase-statusline.js";
|
|
16
16
|
import TaskCommand from "./ase-task.js";
|
|
17
17
|
import ArtifactCommand from "./ase-artifact.js";
|
|
18
|
+
import CompatCommand from "./ase-compat.js";
|
|
18
19
|
import pkg from "../package.json" with { type: "json" };
|
|
19
20
|
/* globally initialize logger */
|
|
20
21
|
const log = new Log("ase", "warning", "-");
|
|
@@ -51,6 +52,7 @@ const main = async () => {
|
|
|
51
52
|
new StatuslineCommand(log).register(program);
|
|
52
53
|
new TaskCommand(log).register(program);
|
|
53
54
|
new ArtifactCommand(log).register(program);
|
|
55
|
+
new CompatCommand().register(program);
|
|
54
56
|
new DiagramCommand(log).register(program);
|
|
55
57
|
/* parse program arguments */
|
|
56
58
|
await program.parseAsync(process.argv);
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "http://github.com/rse/ase",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "http://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "0.9.
|
|
9
|
+
"version": "0.9.12",
|
|
10
10
|
"license": "GPL-3.0-only",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
"which": "7.0.0",
|
|
59
59
|
"update-notifier": "7.3.1",
|
|
60
60
|
"shell-quote": "1.8.4",
|
|
61
|
+
"get-stdin": "10.0.0",
|
|
61
62
|
"proper-lockfile": "4.1.2",
|
|
62
63
|
"write-file-atomic": "8.0.0",
|
|
63
64
|
"pacote": "21.5.1",
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ase",
|
|
3
|
+
"version": "0.9.12",
|
|
4
|
+
"description": "Agentic Software Engineering (ASE)",
|
|
5
|
+
"keywords": [ "agentic", "software", "engineering" ],
|
|
6
|
+
"homepage": "https://ase.tools",
|
|
7
|
+
"repository": "https://github.com/rse/ase",
|
|
8
|
+
"license": "GPL-3.0",
|
|
9
|
+
"author": {
|
|
10
|
+
"name": "Dr. Ralf S. Engelschall",
|
|
11
|
+
"email": "rse@engelschall.com",
|
|
12
|
+
"url": "https://engelschall.com"
|
|
13
|
+
},
|
|
14
|
+
"skills": "./skills/",
|
|
15
|
+
"hooks": "./hooks/hooks-codex.json",
|
|
16
|
+
"mcpServers": "./.codex-plugin/mcp.json"
|
|
17
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hooks": {
|
|
3
|
+
"SessionStart": [
|
|
4
|
+
{
|
|
5
|
+
"hooks": [
|
|
6
|
+
{
|
|
7
|
+
"type": "command",
|
|
8
|
+
"command": "ase hook session-start --tool codex",
|
|
9
|
+
"statusMessage": "Loading ASE..."
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"SessionEnd": [
|
|
15
|
+
{
|
|
16
|
+
"hooks": [
|
|
17
|
+
{
|
|
18
|
+
"type": "command",
|
|
19
|
+
"command": "ase hook session-end --tool codex",
|
|
20
|
+
"statusMessage": "Cleaning up ASE..."
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"PreToolUse": [
|
|
26
|
+
{
|
|
27
|
+
"hooks": [
|
|
28
|
+
{
|
|
29
|
+
"type": "command",
|
|
30
|
+
"command": "ase hook pre-tool-use --tool codex"
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"PermissionRequest": [
|
|
36
|
+
{
|
|
37
|
+
"hooks": [
|
|
38
|
+
{
|
|
39
|
+
"type": "command",
|
|
40
|
+
"command": "ase hook permission-request --tool codex",
|
|
41
|
+
"statusMessage": "Approve ASE..."
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"UserPromptSubmit": [
|
|
47
|
+
{
|
|
48
|
+
"hooks": [
|
|
49
|
+
{
|
|
50
|
+
"type": "command",
|
|
51
|
+
"command": "ase hook user-prompt-submit --tool codex"
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
"Stop": [
|
|
57
|
+
{
|
|
58
|
+
"hooks": [
|
|
59
|
+
{
|
|
60
|
+
"type": "command",
|
|
61
|
+
"command": "ase hook stop --tool codex"
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -9,6 +9,9 @@ User Dialog
|
|
|
9
9
|
<if condition="<ase-agent-tool/> is 'copilot'">
|
|
10
10
|
<user-dialog-tool>ask_user</user-dialog-tool>
|
|
11
11
|
</if>
|
|
12
|
+
<if condition="<ase-agent-tool/> is 'codex'">
|
|
13
|
+
<user-dialog-tool>none</user-dialog-tool>
|
|
14
|
+
</if>
|
|
12
15
|
|
|
13
16
|
<define name="user-dialog">
|
|
14
17
|
|
|
@@ -138,6 +141,23 @@ Let the *user interactively choose* an answer.
|
|
|
138
141
|
|
|
139
142
|
</if>
|
|
140
143
|
|
|
144
|
+
- <if condition="<ase-agent-tool/> is 'codex'">
|
|
145
|
+
|
|
146
|
+
OpenAI Codex CLI has *no* interactive user-dialog tool, so you
|
|
147
|
+
*MUST* *NOT* call any tool here. Instead, render the question and
|
|
148
|
+
answers as a custom Markdown dialog and let the user reply with a
|
|
149
|
+
free-text choice -- exactly as defined by the following expansion,
|
|
150
|
+
passing <spec/> as its question specification, and set <result/> to
|
|
151
|
+
the result of that custom dialog:
|
|
152
|
+
|
|
153
|
+
<expand name="custom-dialog" arg1="--other">
|
|
154
|
+
<spec/>
|
|
155
|
+
</expand>
|
|
156
|
+
|
|
157
|
+
Do not output anything in this step!
|
|
158
|
+
|
|
159
|
+
</if>
|
|
160
|
+
|
|
141
161
|
</define>
|
|
142
162
|
|
|
143
163
|
<define name="custom-dialog">
|
package/plugin/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "http://github.com/rse/ase",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "http://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "0.9.
|
|
9
|
+
"version": "0.9.12",
|
|
10
10
|
"license": "GPL-3.0-only",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -101,14 +101,19 @@ allowed-tools:
|
|
|
101
101
|
|
|
102
102
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
103
103
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
104
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
104
105
|
|
|
105
106
|
<skill name="ase-arch-analyze">
|
|
106
107
|
Review Software Architecture
|
|
107
108
|
</skill>
|
|
108
109
|
|
|
110
|
+
<expand name="getopt" arg1="ase-arch-analyze">
|
|
111
|
+
$ARGUMENTS
|
|
112
|
+
</expand>
|
|
113
|
+
|
|
109
114
|
<objective>
|
|
110
115
|
With the mindset of an *expert-level software architect*,
|
|
111
|
-
*review* the *software architecture* of
|
|
116
|
+
*review* the *software architecture* of <getopt-arguments/>, and its directly
|
|
112
117
|
related source code, for *potential problems* across component
|
|
113
118
|
boundaries, structural organization, architecture principles,
|
|
114
119
|
interface quality, quality attributes, and architecture governance.
|
|
@@ -52,8 +52,8 @@ for the technology stack to *provide* the *needed functionality*
|
|
|
52
52
|
Functionality: Which functionality should the components provide?
|
|
53
53
|
<answer-1/>: (grounded candidate functionality 1)
|
|
54
54
|
<answer-2/>: (grounded candidate functionality 2)
|
|
55
|
-
<answer-3/>: (grounded candidate functionality
|
|
56
|
-
<answer-4/>: (grounded candidate functionality
|
|
55
|
+
<answer-3/>: (grounded candidate functionality 3)
|
|
56
|
+
<answer-4/>: (grounded candidate functionality 4)
|
|
57
57
|
</expand>
|
|
58
58
|
|
|
59
59
|
Then use the <result/> and its corresponding grounded candidate
|
|
@@ -40,7 +40,8 @@ problems in *performance* and *efficiency*, or problems in *security*.
|
|
|
40
40
|
|
|
41
41
|
<if condition="<getopt-option-performance/> is equal `true` and <getopt-option-security/> is equal `true`">
|
|
42
42
|
|
|
43
|
-
Only output the following <template/> and then *STOP*
|
|
43
|
+
Only output the following <template/> and then *STOP* the entire flow
|
|
44
|
+
(do not perform any further steps):
|
|
44
45
|
|
|
45
46
|
<template>
|
|
46
47
|
⧉ **ASE**: ✪ skill: **ase-code-analyze**, ▶ ERROR: options `--performance` and `--security` are mutually exclusive
|
|
@@ -146,10 +147,12 @@ problems in *performance* and *efficiency*, or problems in *security*.
|
|
|
146
147
|
than or equal to `rank(<getopt-option-severity/>)`; *silently drop*
|
|
147
148
|
all other problems (they are neither reported nor persisted). With
|
|
148
149
|
the default floor `LOW`, all problems are kept. `ACCEPTED` problems
|
|
149
|
-
are *never* dropped.
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
150
|
+
are *never* dropped.
|
|
151
|
+
|
|
152
|
+
Then renumber the surviving problems contiguously as `P<n/>` with
|
|
153
|
+
<n/> = 1, 2, ... in the original ordering. If *all* problems are
|
|
154
|
+
dropped, skip the per-problem report but still emit the final hint
|
|
155
|
+
<template/> below.
|
|
153
156
|
|
|
154
157
|
In this STEP 3, for *EVERY* surviving problem, immediately report
|
|
155
158
|
it with the following output <template/>, based on concise bullet
|
|
@@ -209,6 +212,10 @@ problems in *performance* and *efficiency*, or problems in *security*.
|
|
|
209
212
|
justified trade-off that should remain on record but is never
|
|
210
213
|
dropped by the severity floor (see STEP 3).
|
|
211
214
|
|
|
215
|
+
- For <title/> ultra-compress the <description/> to a concise,
|
|
216
|
+
short, single sentence. Keep one inline reference to the code
|
|
217
|
+
position which is most relevant to the problem.
|
|
218
|
+
|
|
212
219
|
- <if condition="<getopt-option-performance/> is equal `true`">
|
|
213
220
|
In <evidence/>, ground the finding by citing either the inferred
|
|
214
221
|
*Big-O* time/space complexity (e.g. `O(n²)` reducible to `O(n)`)
|
|
@@ -249,7 +249,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
249
249
|
a question with the following custom dialog, where per
|
|
250
250
|
approach A<n/>, you determine an ultra brief summary
|
|
251
251
|
<short-summary/> and then use the answer option `A<n/>:
|
|
252
|
-
⚝ **RECOMMENDATION**
|
|
252
|
+
⚝ **RECOMMENDATION** ⚝ - <short-summary/>` for your
|
|
253
253
|
recommended approach plus zero or more answer options `A<n/>:
|
|
254
254
|
<short-summary/>` for all other approaches:
|
|
255
255
|
|
|
@@ -343,11 +343,14 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
343
343
|
Hand off to `ase-task-edit`.
|
|
344
344
|
<if condition="<head/> is equal `EDIT`">
|
|
345
345
|
Consume the head: set <getopt-option-next/> to the remaining
|
|
346
|
-
tokens (joined back with `,`, or `none` if empty).
|
|
346
|
+
tokens (joined back with `,`, or `none` if empty). `EDIT`
|
|
347
|
+
is this skill's own dispatch token, *not* part of
|
|
348
|
+
`ase-task-edit`'s `--next` vocabulary, so it must be
|
|
349
|
+
stripped here rather than forwarded.
|
|
347
350
|
</if>
|
|
348
351
|
All remaining tokens are `ase-task-edit`'s own vocabulary
|
|
349
352
|
and are forwarded verbatim, so `ase-task-edit` consumes its
|
|
350
|
-
head itself.
|
|
353
|
+
own head itself.
|
|
351
354
|
<if condition="<getopt-option-next/> is not equal `none`">
|
|
352
355
|
Set <args><args/> --next <getopt-option-next/></args>
|
|
353
356
|
</if>
|
|
@@ -14,13 +14,18 @@ allowed-tools:
|
|
|
14
14
|
|
|
15
15
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
16
16
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
17
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
17
18
|
|
|
18
19
|
<skill name="ase-code-explain">
|
|
19
20
|
Explain Source Code
|
|
20
21
|
</skill>
|
|
21
22
|
|
|
23
|
+
<expand name="getopt" arg1="ase-code-explain">
|
|
24
|
+
$ARGUMENTS
|
|
25
|
+
</expand>
|
|
26
|
+
|
|
22
27
|
<objective>
|
|
23
|
-
*Analyze* the source code of
|
|
28
|
+
*Analyze* the source code of <getopt-arguments/>, and its directly related source
|
|
24
29
|
code and *explain* it in a *brief*, *standardized*, and *concise* way.
|
|
25
30
|
</objective>
|
|
26
31
|
|
|
@@ -18,13 +18,18 @@ allowed-tools:
|
|
|
18
18
|
|
|
19
19
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
20
20
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
21
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
21
22
|
|
|
22
23
|
<skill name="ase-code-insight">
|
|
23
24
|
Project Insight
|
|
24
25
|
</skill>
|
|
25
26
|
|
|
27
|
+
<expand name="getopt" arg1="ase-code-insight">
|
|
28
|
+
$ARGUMENTS
|
|
29
|
+
</expand>
|
|
30
|
+
|
|
26
31
|
<objective>
|
|
27
|
-
Give *insights* into the project through the source code of
|
|
32
|
+
Give *insights* into the project through the source code of <getopt-arguments/>.
|
|
28
33
|
</objective>
|
|
29
34
|
|
|
30
35
|
<flow>
|
|
@@ -248,9 +248,15 @@ related to a set of code quality aspects.
|
|
|
248
248
|
- <if condition="<result/> starts with 'OTHER'">
|
|
249
249
|
Generate a *new* proposal for the *same* <item/>
|
|
250
250
|
(incorporating the user's free-text hint from <result/> if
|
|
251
|
-
provided via the "OTHER" prefix)
|
|
252
|
-
|
|
253
|
-
|
|
251
|
+
provided via the "OTHER" prefix). *Reassign* <description/>
|
|
252
|
+
and <change-set/> to reflect this refined proposal (each
|
|
253
|
+
change-hunk's `old_text` stays anchored to the existing
|
|
254
|
+
text at its `file`:`line`; `new_text` carries the
|
|
255
|
+
refinement) so that the substep 2/3 rebuild renders the new
|
|
256
|
+
<diff/> and any `Edit` applies the new proposal rather than
|
|
257
|
+
the original. Then loop back to substep 2 of this iteration.
|
|
258
|
+
There is *no* cap on refinement rounds - keep refining until
|
|
259
|
+
the user picks `ACCEPT` or `REJECT`.
|
|
254
260
|
</if>
|
|
255
261
|
|
|
256
262
|
- <if condition="
|
|
@@ -238,7 +238,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
238
238
|
a question with the following custom dialog, where per
|
|
239
239
|
approach A<n/>, you determine an ultra brief summary
|
|
240
240
|
<short-summary/> and then use the answer option `A<n/>:
|
|
241
|
-
⚝ **RECOMMENDATION**
|
|
241
|
+
⚝ **RECOMMENDATION** ⚝ - <short-summary/>` for your
|
|
242
242
|
recommended approach plus zero or more answer options `A<n/>:
|
|
243
243
|
<short-summary/>` for all other approaches:
|
|
244
244
|
|
|
@@ -332,11 +332,14 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
332
332
|
Hand off to `ase-task-edit`.
|
|
333
333
|
<if condition="<head/> is equal `EDIT`">
|
|
334
334
|
Consume the head: set <getopt-option-next/> to the remaining
|
|
335
|
-
tokens (joined back with `,`, or `none` if empty).
|
|
335
|
+
tokens (joined back with `,`, or `none` if empty). `EDIT`
|
|
336
|
+
is this skill's own dispatch token, *not* part of
|
|
337
|
+
`ase-task-edit`'s `--next` vocabulary, so it must be
|
|
338
|
+
stripped here rather than forwarded.
|
|
336
339
|
</if>
|
|
337
340
|
All remaining tokens are `ase-task-edit`'s own vocabulary
|
|
338
341
|
and are forwarded verbatim, so `ase-task-edit` consumes its
|
|
339
|
-
head itself.
|
|
342
|
+
own head itself.
|
|
340
343
|
<if condition="<getopt-option-next/> is not equal `none`">
|
|
341
344
|
Set <args><args/> --next <getopt-option-next/></args>
|
|
342
345
|
</if>
|
|
@@ -60,14 +60,15 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
60
60
|
1. If <problem/> matches the regexp `^[PT]\d+$` (i.e. a bare issue
|
|
61
61
|
identifier like `P1`, `P2`, `T1`, `T2`, ...),
|
|
62
62
|
set <problem-id><problem/></problem-id> and
|
|
63
|
-
<ase-task-id><problem/></ase-task-id>, call the
|
|
64
|
-
|
|
65
|
-
`ase` MCP server to implicitly switch the task, and then
|
|
66
|
-
call the `ase_kv_get(key: "ase-issue-<problem-id/>")` tool of
|
|
63
|
+
<ase-task-id><problem/></ase-task-id>, then call the
|
|
64
|
+
`ase_kv_get(key: "ase-issue-<problem-id/>")` tool of
|
|
67
65
|
the `ase` MCP server to retrieve the previously persisted
|
|
68
66
|
problem description. If the returned `text` is non-empty, set
|
|
69
|
-
<problem><text/></problem
|
|
70
|
-
|
|
67
|
+
<problem><text/></problem> and call the `ase_task_id(id:
|
|
68
|
+
"<ase-task-id/>", session: "<ase-session-id/>")` tool from the
|
|
69
|
+
`ase` MCP server to implicitly switch the task, otherwise
|
|
70
|
+
complain to the user that no analyzer result exists for
|
|
71
|
+
<problem-id/> and stop processing.
|
|
71
72
|
|
|
72
73
|
2. <if condition="
|
|
73
74
|
<problem/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
|
|
@@ -288,7 +289,7 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
288
289
|
a question with the following custom dialog, where per
|
|
289
290
|
approach A<n/>, you determine an ultra brief summary
|
|
290
291
|
<short-summary/> and then use the answer option `A<n/>:
|
|
291
|
-
⚝ **RECOMMENDATION**
|
|
292
|
+
⚝ **RECOMMENDATION** ⚝ - <short-summary/>` for your
|
|
292
293
|
recommended approach plus zero or more answer options `A<n/>:
|
|
293
294
|
<short-summary/>` for all other approaches:
|
|
294
295
|
|
|
@@ -389,11 +390,14 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
389
390
|
Hand off to `ase-task-edit`.
|
|
390
391
|
<if condition="<head/> is equal `EDIT`">
|
|
391
392
|
Consume the head: set <getopt-option-next/> to the remaining
|
|
392
|
-
tokens (joined back with `,`, or `none` if empty).
|
|
393
|
+
tokens (joined back with `,`, or `none` if empty). `EDIT`
|
|
394
|
+
is this skill's own dispatch token, *not* part of
|
|
395
|
+
`ase-task-edit`'s `--next` vocabulary, so it must be
|
|
396
|
+
stripped here rather than forwarded.
|
|
393
397
|
</if>
|
|
394
398
|
All remaining tokens are `ase-task-edit`'s own vocabulary
|
|
395
399
|
and are forwarded verbatim, so `ase-task-edit` consumes its
|
|
396
|
-
head itself.
|
|
400
|
+
own head itself.
|
|
397
401
|
<if condition="<getopt-option-next/> is not equal `none`">
|
|
398
402
|
Set <args><args/> --next <getopt-option-next/></args>
|
|
399
403
|
</if>
|
|
@@ -188,9 +188,15 @@ Analyze documents for spelling, punctuation, or grammar errors
|
|
|
188
188
|
|
|
189
189
|
Generate a *new* proposal for the *same* <item/>,
|
|
190
190
|
incorporating the user's free-text hint from <result/>
|
|
191
|
-
after the "OTHER:" prefix
|
|
192
|
-
|
|
193
|
-
|
|
191
|
+
after the "OTHER:" prefix. *Reassign* <description/>,
|
|
192
|
+
<old-text/>, and <new-text/> to reflect this refined
|
|
193
|
+
proposal (<old-text/> stays anchored to the existing text
|
|
194
|
+
at <file/>:<line/>; <new-text/> and <description/> carry the
|
|
195
|
+
refinement) so the subsequent rendering and any `Edit` use
|
|
196
|
+
the new proposal rather than the original. Then *go back* to
|
|
197
|
+
substep 2 of this `for`-iteration. There is *no* cap on
|
|
198
|
+
refinement rounds - keep refining until the user picks
|
|
199
|
+
`ACCEPT` or `REJECT`.
|
|
194
200
|
|
|
195
201
|
</if>
|
|
196
202
|
|
|
@@ -129,10 +129,9 @@ Honor the following tenets throughout the brainstorming:
|
|
|
129
129
|
|
|
130
130
|
<expand name="custom-dialog" arg1="--other">
|
|
131
131
|
<facet-M/>: <question-M/>
|
|
132
|
-
<answer-M-1/>: (
|
|
133
|
-
<answer-M-2/>: (
|
|
134
|
-
|
|
135
|
-
<answer-M-4/>: (fourth grounded candidate answer)
|
|
132
|
+
<answer-M-1/>: (grounded candidate answer 1)
|
|
133
|
+
<answer-M-2/>: (grounded candidate answer 2)
|
|
134
|
+
[...]
|
|
136
135
|
</expand>
|
|
137
136
|
|
|
138
137
|
4. Dispatch on the dialog <result/>:
|
|
@@ -16,11 +16,16 @@ allowed-tools:
|
|
|
16
16
|
|
|
17
17
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
18
18
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
19
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
19
20
|
|
|
20
21
|
<skill name="ase-meta-changelog">
|
|
21
22
|
Update ChangeLog Entries
|
|
22
23
|
</skill>
|
|
23
24
|
|
|
25
|
+
<expand name="getopt" arg1="ase-meta-changelog">
|
|
26
|
+
$ARGUMENTS
|
|
27
|
+
</expand>
|
|
28
|
+
|
|
24
29
|
<objective>
|
|
25
30
|
Help to complete, consolidate and sort *ChangeLog* entries of the most
|
|
26
31
|
recent *ChangeLog* section, based on underlying *Git* commits and staged
|
|
@@ -81,11 +86,17 @@ Processing
|
|
|
81
86
|
the Git *commits* plus the currently already staged changes in the Git
|
|
82
87
|
*index*, but *ignore* the Git *stash* and still unstaged changes.
|
|
83
88
|
|
|
84
|
-
For finding the corresponding Git *commits*,
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
with the command `git
|
|
88
|
-
|
|
89
|
+
For finding the corresponding Git *commits*, first determine the
|
|
90
|
+
correct baseline Git tag. Take the `N.M.K` from the *first* (most
|
|
91
|
+
recent) level-2 header in the *ChangeLog* file and check whether a
|
|
92
|
+
corresponding Git tag already exists with the command `git tag --list
|
|
93
|
+
N.M.K`. If this command produces *no* output, the first section is
|
|
94
|
+
still in-progress/untagged, so use the `N.M.K` from the *second*
|
|
95
|
+
level-2 header as the baseline tag instead. If this command *does*
|
|
96
|
+
produce output, the first section is already released/tagged, so use
|
|
97
|
+
the `N.M.K` from the *first* level-2 header as the baseline tag. Then
|
|
98
|
+
check all Git commits between `HEAD` and this baseline tag with the
|
|
99
|
+
command `git log N.M.K..HEAD --numstat --pretty=format:'%h: %s'`.
|
|
89
100
|
|
|
90
101
|
For finding the corresponding staged Git *changes* in the Git
|
|
91
102
|
*index*, use the command `git diff --cached --numstat`, but silently
|
|
@@ -14,13 +14,18 @@ allowed-tools:
|
|
|
14
14
|
|
|
15
15
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
16
16
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
17
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
17
18
|
|
|
18
19
|
<skill name="ase-meta-chat">
|
|
19
20
|
Query Foreign LLM for Chat
|
|
20
21
|
</skill>
|
|
21
22
|
|
|
23
|
+
<expand name="getopt" arg1="ase-meta-chat">
|
|
24
|
+
$ARGUMENTS
|
|
25
|
+
</expand>
|
|
26
|
+
|
|
22
27
|
<objective>
|
|
23
|
-
Query foreign LLM for: <query
|
|
28
|
+
Query foreign LLM for: <query><getopt-arguments/></query>
|
|
24
29
|
</objective>
|
|
25
30
|
|
|
26
31
|
1. You *MUST* *NOT* output anything in this step.
|
|
@@ -12,11 +12,16 @@ allowed-tools:
|
|
|
12
12
|
|
|
13
13
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
|
|
14
14
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
|
|
15
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
|
|
15
16
|
|
|
16
17
|
<skill name="ase-meta-commit">
|
|
17
18
|
Git Commit
|
|
18
19
|
</skill>
|
|
19
20
|
|
|
21
|
+
<expand name="getopt" arg1="ase-meta-commit">
|
|
22
|
+
$ARGUMENTS
|
|
23
|
+
</expand>
|
|
24
|
+
|
|
20
25
|
<objective>
|
|
21
26
|
Help to *craft* a *concise commit message* for the
|
|
22
27
|
currently staged Git changes.
|