@rse/ase 0.9.52 → 0.9.54
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/package.json +2 -2
- 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 +4 -6
- package/plugin/agents/ase-code-lint.md +4 -6
- package/plugin/agents/ase-docs-proofread.md +4 -6
- package/plugin/agents/ase-meta-chat.md +3 -3
- package/plugin/agents/ase-meta-proximity.md +2 -2
- package/plugin/agents/ase-meta-review.md +4 -5
- package/plugin/agents/ase-meta-search.md +2 -2
- package/plugin/meta/ase-common-code.md +34 -0
- package/plugin/meta/ase-common-dissect.md +3 -3
- package/plugin/meta/ase-constitution.md +6 -1
- package/plugin/meta/ase-format-task.md +15 -0
- package/plugin/meta/ase-skill.md +38 -15
- package/plugin/package.json +1 -1
- package/plugin/skills/ase-code-craft/SKILL.md +8 -7
- package/plugin/skills/ase-code-dissect/SKILL.md +2 -2
- package/plugin/skills/ase-code-refactor/SKILL.md +8 -7
- package/plugin/skills/ase-code-resolve/SKILL.md +8 -7
- package/plugin/skills/ase-meta-workflow/SKILL.md +5 -5
- package/plugin/skills/ase-meta-workflow/sample.md +1 -1
- package/plugin/skills/ase-task-implement/SKILL.md +120 -4
- package/plugin/skills/ase-task-implement/help.md +35 -0
- package/plugin/skills/ase-task-preflight/SKILL.md +6 -0
- package/plugin/skills/ase-task-preflight/help.md +7 -0
package/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.54",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"shx": "0.4.0",
|
|
32
32
|
|
|
33
33
|
"@types/node": "26.1.2",
|
|
34
|
-
"@types/luxon": "3.7.
|
|
34
|
+
"@types/luxon": "3.7.3",
|
|
35
35
|
"@types/which": "3.0.4",
|
|
36
36
|
"@types/update-notifier": "6.0.8",
|
|
37
37
|
"@types/shell-quote": "1.7.5",
|
|
@@ -248,15 +248,13 @@ Workflow
|
|
|
248
248
|
}
|
|
249
249
|
</template>
|
|
250
250
|
|
|
251
|
-
5.
|
|
252
|
-
|
|
251
|
+
5. You *MUST* *NOT* propose, apply, or render any code
|
|
252
|
+
changes yourself. Instead, return *exclusively* as the last message
|
|
253
|
+
a single JSON block (no markdown, no prose, no preamble, no summary)
|
|
254
|
+
of the following shape:
|
|
253
255
|
|
|
254
256
|
```json
|
|
255
257
|
[
|
|
256
258
|
<problems/>
|
|
257
259
|
]
|
|
258
260
|
```
|
|
259
|
-
|
|
260
|
-
6. You *MUST* *NOT* propose, apply, or render any code
|
|
261
|
-
changes yourself.
|
|
262
|
-
|
|
@@ -393,15 +393,13 @@ Workflow
|
|
|
393
393
|
}
|
|
394
394
|
</template>
|
|
395
395
|
|
|
396
|
-
5.
|
|
397
|
-
|
|
396
|
+
5. You *MUST* *NOT* propose, apply, or render any code
|
|
397
|
+
changes yourself. Instead, return *exclusively* as the last message
|
|
398
|
+
a single JSON block (no markdown, no prose, no preamble, no summary)
|
|
399
|
+
of the following shape:
|
|
398
400
|
|
|
399
401
|
```json
|
|
400
402
|
[
|
|
401
403
|
<problems/>
|
|
402
404
|
]
|
|
403
405
|
```
|
|
404
|
-
|
|
405
|
-
6. You *MUST* *NOT* propose, apply, or render any code
|
|
406
|
-
changes yourself.
|
|
407
|
-
|
|
@@ -94,15 +94,13 @@ Workflow
|
|
|
94
94
|
}
|
|
95
95
|
</template>
|
|
96
96
|
|
|
97
|
-
3.
|
|
98
|
-
|
|
97
|
+
3. You *MUST* *NOT* propose, apply, or render any document
|
|
98
|
+
changes yourself. Instead, return *exclusively* as the last message
|
|
99
|
+
a single JSON block (no markdown, no prose, no preamble, no summary)
|
|
100
|
+
of the following shape:
|
|
99
101
|
|
|
100
102
|
```json
|
|
101
103
|
[
|
|
102
104
|
<problems/>
|
|
103
105
|
]
|
|
104
106
|
```
|
|
105
|
-
|
|
106
|
-
4. You *MUST* *NOT* propose, apply, or render any document
|
|
107
|
-
changes yourself.
|
|
108
|
-
|
|
@@ -54,7 +54,7 @@ tools:
|
|
|
54
54
|
</template>
|
|
55
55
|
|
|
56
56
|
4. Now call the MCP tool `query(prompt: <query/>)` from the MCP server
|
|
57
|
-
<server/> and then return its result `text` *verbatim* and
|
|
58
|
-
|
|
59
|
-
any text to the MCP server response on your own and do not
|
|
57
|
+
<server/> and then return its result `text` *verbatim* and *without
|
|
58
|
+
any modifications* as the last message. Especially, do *NOT* add or
|
|
59
|
+
remove any text to the MCP server response on your own and do not
|
|
60
60
|
interpret the result in any way.
|
|
@@ -115,8 +115,8 @@ store those facts in the placeholder named `<arg2/>`.
|
|
|
115
115
|
mere synonym or spelling variant of it. You *MUST* *NOT* output
|
|
116
116
|
anything related to this step.
|
|
117
117
|
|
|
118
|
-
4. Return *exclusively* the following <template/>
|
|
119
|
-
preamble, no summary, and no Markdown formatting):
|
|
118
|
+
4. Return *exclusively* as the last message the following <template/>
|
|
119
|
+
(no prose, no preamble, no summary, and no Markdown formatting):
|
|
120
120
|
|
|
121
121
|
<template>
|
|
122
122
|
TOPIC: <topic/>
|
|
@@ -172,8 +172,10 @@ Workflow
|
|
|
172
172
|
}
|
|
173
173
|
</template>
|
|
174
174
|
|
|
175
|
-
7.
|
|
176
|
-
|
|
175
|
+
7. You *MUST* *NOT* propose, apply, or render any document
|
|
176
|
+
changes yourself. Instead, return *exclusively* as the last message
|
|
177
|
+
a single JSON block (no markdown, no prose, no preamble, no summary)
|
|
178
|
+
of the following shape:
|
|
177
179
|
|
|
178
180
|
```json
|
|
179
181
|
{
|
|
@@ -183,6 +185,3 @@ Workflow
|
|
|
183
185
|
]
|
|
184
186
|
}
|
|
185
187
|
```
|
|
186
|
-
|
|
187
|
-
8. You *MUST* *NOT* propose, apply, or render any code or document
|
|
188
|
-
changes yourself.
|
|
@@ -9,6 +9,6 @@ tools:
|
|
|
9
9
|
- "WebSearch"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
Just perform the given *query* `$ARGUMENTS` and
|
|
13
|
-
|
|
12
|
+
Just perform the given *query* `$ARGUMENTS` and as the last message give
|
|
13
|
+
back the *plain responses* without any modifications.
|
|
14
14
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
|
|
2
|
+
Code Skill Common Steps
|
|
3
|
+
=======================
|
|
4
|
+
|
|
5
|
+
<define name="code-tenets">
|
|
6
|
+
|
|
7
|
+
You *MUST* internalize and strictly honor the **GENERIC TENETS**, and
|
|
8
|
+
the **<arg1/> TENETS** of the **ASE Tenets** in the following creation
|
|
9
|
+
and updating of code. Do not output anything.
|
|
10
|
+
|
|
11
|
+
</define>
|
|
12
|
+
|
|
13
|
+
<define name="code-tenets-from-plan">
|
|
14
|
+
|
|
15
|
+
Determine the *kind of change* the task plan describes and internalize
|
|
16
|
+
the corresponding tenet sets:
|
|
17
|
+
|
|
18
|
+
- If <task-content/> contains a `☯ Kind: <text/>` header line
|
|
19
|
+
and <text/> is one of `CRAFTING`, `REFACTORING`, or `RESOLVING`:
|
|
20
|
+
Set <task-kind><text/></task-kind> (set task kind to the stated kind).
|
|
21
|
+
|
|
22
|
+
- Else:
|
|
23
|
+
The plan states no kind at all, or an unrecognized one, so *infer*
|
|
24
|
+
the kind from the plan content itself: `RESOLVING` if the plan
|
|
25
|
+
predominantly fixes a defect, `REFACTORING` if it predominantly
|
|
26
|
+
re-structures existing artifacts without changing their observable
|
|
27
|
+
behavior, and `CRAFTING` otherwise. Set <task-kind/> to the inferred
|
|
28
|
+
kind, defaulting to `CRAFTING` if the inference stays inconclusive.
|
|
29
|
+
|
|
30
|
+
Then honor the tenet sets of <task-kind/>:
|
|
31
|
+
|
|
32
|
+
<expand name="code-tenets" arg1="<task-kind/>"></expand>
|
|
33
|
+
|
|
34
|
+
</define>
|
|
@@ -54,7 +54,7 @@ following ruleset:
|
|
|
54
54
|
|
|
55
55
|
8. *Honor the dissection hint*:
|
|
56
56
|
<if condition="<arg2/> is not empty">
|
|
57
|
-
Set <hint><arg2/></hint>. The user explicitly
|
|
57
|
+
Set <hint><arg2/></hint>. The user explicitly stated *how* the epic
|
|
58
58
|
should be split -- e.g. which input elements belong together, along
|
|
59
59
|
which axis to cut, or how many parts to aim at -- so you *MUST*
|
|
60
60
|
follow this <hint/> as closely as possible and let it *override* the
|
|
@@ -97,14 +97,14 @@ Report the derived <parts/> with the following <template/>, emitting
|
|
|
97
97
|
column edges of the table, and do *not* output any further explanation:
|
|
98
98
|
|
|
99
99
|
<template>
|
|
100
|
-
<ase-tpl-head title="DISSECTION" subtitle="<arg1/>"
|
|
100
|
+
<ase-tpl-head title="DISSECTION" subtitle="<arg1/>"/>
|
|
101
101
|
|
|
102
102
|
| Part | Id | Scope | Rationale |
|
|
103
103
|
| --------------- | ------------ | -------- | ------------ |
|
|
104
104
|
| **P<part-no/>** | `<part-id/>` | <scope/> | <rationale/> |
|
|
105
105
|
| [...] | [...] | [...] | [...] |
|
|
106
106
|
|
|
107
|
-
<ase-tpl-foot title="DISSECTION" subtitle="<arg1/>"
|
|
107
|
+
<ase-tpl-foot title="DISSECTION" subtitle="<arg1/>"/>
|
|
108
108
|
</template>
|
|
109
109
|
|
|
110
110
|
</define>
|
|
@@ -14,12 +14,16 @@ which boosts you to an expert-level Software Engineering AI agent.
|
|
|
14
14
|
- Do *not* insist on early "return" in "if" blocks, if an "else" block exists.
|
|
15
15
|
- Do *not* remove any whitespace in the code formatting -- keep whitespace aligned with code base.
|
|
16
16
|
- Do *not* produce any trailing white-spaces on any lines.
|
|
17
|
+
- Do *not* guess missing tool call parameters or fill them with invented placeholder values.
|
|
17
18
|
|
|
18
19
|
## Commandments
|
|
19
20
|
|
|
20
21
|
- Be *honest* and *transparent* in all your responses.
|
|
21
22
|
- *Ground* factual and technical claims in verifiable evidence (code base, local files, or web)
|
|
22
23
|
with a reference, rather than unverified model knowledge; state explicitly when a claim cannot be verified.
|
|
24
|
+
- Assume your *internal knowledge of dependencies* (libraries, frameworks, tools, and their implementations)
|
|
25
|
+
is *outdated*; always verify the current API, version, and usage pattern against the local sources
|
|
26
|
+
or the web before writing any code against them.
|
|
23
27
|
- Before proposing any code changes, explain *WHAT* the proposed changes do and *WHY* it is necessary.
|
|
24
28
|
- Use *concise* and *type-safe code* only.
|
|
25
29
|
- Use *precise* and *surgical code changes* only.
|
|
@@ -37,7 +41,8 @@ which boosts you to an expert-level Software Engineering AI agent.
|
|
|
37
41
|
- Use *double-quotes* (`"[...]"`) instead of single-quotes (`'[...]'`) for all strings.
|
|
38
42
|
- Use K&R coding style with *opening braces* at the end of lines and *closing braces* at the beginning of lines.
|
|
39
43
|
- When a language has a *more strongly-typed variant*, prefer that variant.
|
|
40
|
-
- When generating temporary helper programs, prefer the *target project's primary
|
|
44
|
+
- When generating temporary helper programs or scratch test files, prefer the *target project's primary
|
|
45
|
+
programming language* and *clean them up* once they are no longer needed.
|
|
41
46
|
|
|
42
47
|
@./ase-persona.md
|
|
43
48
|
|
|
@@ -10,6 +10,7 @@ Every *task* uses a strict and fixed format:
|
|
|
10
10
|
|
|
11
11
|
⎈ Created: <timestamp-created/>
|
|
12
12
|
⚙ Modified: <timestamp-modified/>
|
|
13
|
+
☯ Kind: <task-kind/>
|
|
13
14
|
|
|
14
15
|
## CONTEXT
|
|
15
16
|
|
|
@@ -49,6 +50,20 @@ You *MUST* honor the following hints on this *task* format:
|
|
|
49
50
|
- The <task-id/> has to be substituted with the current value of
|
|
50
51
|
<ase-task-id/> in the current session context.
|
|
51
52
|
|
|
53
|
+
- The `☯ Kind:` line states the *kind of change* the task plan
|
|
54
|
+
describes, and hence which *operation-specific tenet set* of the
|
|
55
|
+
**ASE Tenets** a subsequent preflight or implementation has to
|
|
56
|
+
honor. The <task-kind/> value is *strictly* one of `CRAFTING`,
|
|
57
|
+
`REFACTORING`, or `RESOLVING`, and the line is column-aligned with
|
|
58
|
+
the `⎈ Created:` and `⚙ Modified:` lines above it.
|
|
59
|
+
|
|
60
|
+
- The `☯ Kind:` line is *optional*: a skill *authoring* or
|
|
61
|
+
*updating* a task plan *CAN* update an already present line or pass
|
|
62
|
+
it through *verbatim* and *MAY* create a missing one by *inferring*
|
|
63
|
+
the kind from the plan content (defaulting to `CRAFTING`). A
|
|
64
|
+
`--dry` run *never* drops this line, as `--dry` only omits the
|
|
65
|
+
`## VERIFICATION` section.
|
|
66
|
+
|
|
52
67
|
- The <timestamp-created/> is the timestamp when this task plan was
|
|
53
68
|
created. The <timestamp-modified/> is the timestamp when this
|
|
54
69
|
task plan was last modified. Both use an ISO-style format
|
package/plugin/meta/ase-skill.md
CHANGED
|
@@ -374,17 +374,29 @@ Template Patterns
|
|
|
374
374
|
|
|
375
375
|
</template>
|
|
376
376
|
|
|
377
|
-
- When `<ase-tpl-head title="<title/>"/>`
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
377
|
+
- When `<ase-tpl-head title="<title/>"[ subtitle="<subtitle/>"]/>`
|
|
378
|
+
should be expanded use the following helper placeholders and then
|
|
379
|
+
the following <template/>:
|
|
380
|
+
|
|
381
|
+
- <if condition="<subtitle/> is not empty">
|
|
382
|
+
Set <raw-title>⧉ ASE: <title/>: <subtitle/></raw-title>.
|
|
383
|
+
Set <render-title>⧉ ASE: **`<title/>`**: `<subtitle/>`</render-title>.
|
|
384
|
+
</if>
|
|
385
|
+
<else>
|
|
386
|
+
Set <raw-title>⧉ ASE: <title/></raw-title>.
|
|
387
|
+
Set <render-title>⧉ ASE: **`<title/>`**</render-title>.
|
|
388
|
+
</else>
|
|
389
|
+
- Set <raw-title-len/> to the number of characters in the visible
|
|
390
|
+
un-styled text <raw-title/>.
|
|
391
|
+
- Set <bar/> to the `─` character repeated exactly max(0, 67 - <raw-title-len/>)
|
|
392
|
+
times -- clamped to zero so an over-long title never yields a
|
|
393
|
+
negative count -- the very same bar-width rule as `<ase-tpl-foot/>`
|
|
394
|
+
and `<ase-tpl-boxed/>`, so equal visible text yields equal total
|
|
395
|
+
width.
|
|
384
396
|
|
|
385
397
|
<template>
|
|
386
398
|
|
|
387
|
-
╭────━━━━**(**
|
|
399
|
+
╭────━━━━**(** <render-title/> **)**━━━━────<bar/>┈┈┈┈┈┈┈┈┈┈
|
|
388
400
|
|
|
389
401
|
</template>
|
|
390
402
|
|
|
@@ -396,16 +408,27 @@ Template Patterns
|
|
|
396
408
|
|
|
397
409
|
</template>
|
|
398
410
|
|
|
399
|
-
- When `<ase-tpl-foot title="<title/>"/>`
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
<
|
|
404
|
-
|
|
411
|
+
- When `<ase-tpl-foot title="<title/>"[ subtitle="<subtitle/>"]/>`
|
|
412
|
+
should be expanded use the following helper placeholders and then
|
|
413
|
+
the following <template/>:
|
|
414
|
+
|
|
415
|
+
- <if condition="<subtitle/> is not empty">
|
|
416
|
+
Set <raw-title>⧉ ASE: <title/>: <subtitle/></raw-title>.
|
|
417
|
+
Set <render-title>⧉ ASE: **`<title/>`**: `<subtitle/>`</render-title>.
|
|
418
|
+
</if>
|
|
419
|
+
<else>
|
|
420
|
+
Set <raw-title>⧉ ASE: <title/></raw-title>.
|
|
421
|
+
Set <render-title>⧉ ASE: **`<title/>`**</render-title>.
|
|
422
|
+
</else>
|
|
423
|
+
- Set <raw-title-len/> to the number of characters in the visible
|
|
424
|
+
un-styled text <raw-title/>.
|
|
425
|
+
- Set <bar/> to the `─` character repeated exactly max(0, 67 - <raw-title-len/>)
|
|
426
|
+
times -- clamped to zero so an over-long title never yields a
|
|
427
|
+
negative count.
|
|
405
428
|
|
|
406
429
|
<template>
|
|
407
430
|
|
|
408
|
-
╰────━━━━**(**
|
|
431
|
+
╰────━━━━**(** <render-title/> **)**━━━━────<bar/>┈┈┈┈┈┈┈┈┈┈
|
|
409
432
|
|
|
410
433
|
</template>
|
|
411
434
|
|
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.54",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -40,6 +40,7 @@ From scratch *craft* the following feature:
|
|
|
40
40
|
|
|
41
41
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
|
|
42
42
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-tenets.md
|
|
43
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-code.md
|
|
43
44
|
|
|
44
45
|
Procedure
|
|
45
46
|
---------
|
|
@@ -127,11 +128,11 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
127
128
|
|
|
128
129
|
3. <step id="STEP 3: Internalize Crafting Tenets">
|
|
129
130
|
|
|
130
|
-
1.
|
|
131
|
-
and the **CRAFTING TENETS** of the **ASE Tenets** when updating
|
|
132
|
-
in the following. Do not output anything.
|
|
131
|
+
1. <task-kind>CRAFTING</task-kind>
|
|
133
132
|
|
|
134
|
-
2.
|
|
133
|
+
2. <expand name="code-tenets" arg1="<task-kind/>"></expand>
|
|
134
|
+
|
|
135
|
+
3. Do not output anything in this STEP 3.
|
|
135
136
|
|
|
136
137
|
</step>
|
|
137
138
|
|
|
@@ -251,9 +252,9 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
251
252
|
2. Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
252
253
|
`ase` MCP server and use the `text` field of its response for
|
|
253
254
|
<timestamp-created/> and <timestamp-modified/> information. Then
|
|
254
|
-
insert the current <ase-task-id/>, <timestamp-created/>,
|
|
255
|
-
<timestamp-modified/> information and calculate
|
|
256
|
-
words <words/> of <task-content/>.
|
|
255
|
+
insert the current <ase-task-id/>, <timestamp-created/>,
|
|
256
|
+
<timestamp-modified/>, and <task-kind/> information and calculate
|
|
257
|
+
the number of words <words/> of <task-content/>.
|
|
257
258
|
|
|
258
259
|
3. You then *MUST* *save* the resulting plan content with the
|
|
259
260
|
`ase_task_save(id: "<ase-task-id/>", text: "<task-content/>")`.
|
|
@@ -93,7 +93,7 @@ Procedure
|
|
|
93
93
|
Determine them *read-only* by running the corresponding command
|
|
94
94
|
(taken exactly as given):
|
|
95
95
|
|
|
96
|
-
`git -C "<repo-root/>" ls-files --others --exclude-standard`
|
|
96
|
+
`git -C "<repo-root/>" -c core.quotepath=off ls-files --others --exclude-standard`
|
|
97
97
|
|
|
98
98
|
*Skip* every listed entry below the `.ase/` directory -- it
|
|
99
99
|
carries *ASE*'s own state and the worktrees created by this very
|
|
@@ -212,7 +212,7 @@ Procedure
|
|
|
212
212
|
|
|
213
213
|
`git worktree prune`
|
|
214
214
|
|
|
215
|
-
`git branch -D <part-id
|
|
215
|
+
`git branch -D "<part-id/>"`
|
|
216
216
|
</if>
|
|
217
217
|
|
|
218
218
|
</step>
|
|
@@ -40,6 +40,7 @@ to `true`, <getopt-option-dry/> to `true`, and <getopt-option-next/> to
|
|
|
40
40
|
|
|
41
41
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
|
|
42
42
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-tenets.md
|
|
43
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-code.md
|
|
43
44
|
|
|
44
45
|
Procedure
|
|
45
46
|
---------
|
|
@@ -127,11 +128,11 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
127
128
|
|
|
128
129
|
3. <step id="STEP 3: Internalize Refactoring Tenets">
|
|
129
130
|
|
|
130
|
-
1.
|
|
131
|
-
and the **REFACTORING TENETS** of the **ASE Tenets** when updating
|
|
132
|
-
in the following. Do not output anything.
|
|
131
|
+
1. <task-kind>REFACTORING</task-kind>
|
|
133
132
|
|
|
134
|
-
2.
|
|
133
|
+
2. <expand name="code-tenets" arg1="<task-kind/>"></expand>
|
|
134
|
+
|
|
135
|
+
3. Do not output anything in this STEP 3.
|
|
135
136
|
|
|
136
137
|
</step>
|
|
137
138
|
|
|
@@ -251,9 +252,9 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
251
252
|
2. Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
252
253
|
`ase` MCP server and use the `text` field of its response for
|
|
253
254
|
<timestamp-created/> and <timestamp-modified/> information. Then
|
|
254
|
-
insert the current <ase-task-id/>, <timestamp-created/>,
|
|
255
|
-
<timestamp-modified/> information and calculate
|
|
256
|
-
words <words/> of <task-content/>.
|
|
255
|
+
insert the current <ase-task-id/>, <timestamp-created/>,
|
|
256
|
+
<timestamp-modified/>, and <task-kind/> information and calculate
|
|
257
|
+
the number of words <words/> of <task-content/>.
|
|
257
258
|
|
|
258
259
|
3. You then *MUST* *save* the resulting plan content with the
|
|
259
260
|
`ase_task_save(id: "<ase-task-id/>", text: "<task-content/>")`.
|
|
@@ -40,6 +40,7 @@ to `true`, <getopt-option-dry/> to `true`, and <getopt-option-next/> to
|
|
|
40
40
|
|
|
41
41
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
|
|
42
42
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-tenets.md
|
|
43
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-code.md
|
|
43
44
|
|
|
44
45
|
Procedure
|
|
45
46
|
---------
|
|
@@ -181,11 +182,11 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
181
182
|
|
|
182
183
|
3. <step id="STEP 3: Internalize Problem Resolution Tenets">
|
|
183
184
|
|
|
184
|
-
1.
|
|
185
|
-
and the **RESOLVING TENETS** of the **ASE Tenets** when updating
|
|
186
|
-
in the following. Do not output anything.
|
|
185
|
+
1. <task-kind>RESOLVING</task-kind>
|
|
187
186
|
|
|
188
|
-
2.
|
|
187
|
+
2. <expand name="code-tenets" arg1="<task-kind/>"></expand>
|
|
188
|
+
|
|
189
|
+
3. Do not output anything in this STEP 3.
|
|
189
190
|
|
|
190
191
|
</step>
|
|
191
192
|
|
|
@@ -305,9 +306,9 @@ permitted way to persist artifacts is via `ase_task_save(...)`.
|
|
|
305
306
|
2. Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
|
|
306
307
|
`ase` MCP server and use the `text` field of its response for
|
|
307
308
|
<timestamp-created/> and <timestamp-modified/> information. Then
|
|
308
|
-
insert the current <ase-task-id/>, <timestamp-created/>,
|
|
309
|
-
<timestamp-modified/> information and calculate
|
|
310
|
-
words <words/> of <task-content/>.
|
|
309
|
+
insert the current <ase-task-id/>, <timestamp-created/>,
|
|
310
|
+
<timestamp-modified/>, and <task-kind/> information and calculate
|
|
311
|
+
the number of words <words/> of <task-content/>.
|
|
311
312
|
|
|
312
313
|
3. You then *MUST* *save* the resulting plan content with the
|
|
313
314
|
`ase_task_save(id: "<ase-task-id/>", text: "<task-content/>")`.
|
|
@@ -222,9 +222,9 @@ Procedure
|
|
|
222
222
|
Set <dir><skill-dir-local/></dir>.
|
|
223
223
|
</else>
|
|
224
224
|
|
|
225
|
-
|
|
226
|
-
Expand a leading `~` in <target-skill/> into the absolute home
|
|
225
|
+
Expand a leading `~` in <dir/> into the absolute home
|
|
227
226
|
directory of the user, as the file tools accept absolute paths only.
|
|
227
|
+
Then set <target-skill><dir/>/<new-skill-name/>/SKILL.md</target-skill>.
|
|
228
228
|
Do not output anything.
|
|
229
229
|
|
|
230
230
|
5. Check whether <target-skill/> already exists.
|
|
@@ -355,19 +355,19 @@ Procedure
|
|
|
355
355
|
<if condition="<ase-agent-tool/> is `copilot`">
|
|
356
356
|
<ase-tpl-hint level="minimal">
|
|
357
357
|
Run `/skills reload` to reload all skills.
|
|
358
|
-
Run `/<new-skill-name/>` to execute the
|
|
358
|
+
Run `/<new-skill-name/>` to execute the newly generated workflow.
|
|
359
359
|
</ase-tpl-hint>
|
|
360
360
|
</if>
|
|
361
361
|
<elseif condition="<ase-agent-tool/> is `codex`">
|
|
362
362
|
<ase-tpl-hint level="minimal">
|
|
363
363
|
Run `/skills` to check that the new skill was picked up.
|
|
364
|
-
Mention `$<new-skill-name/>` to execute the
|
|
364
|
+
Mention `$<new-skill-name/>` to execute the newly generated workflow.
|
|
365
365
|
</ase-tpl-hint>
|
|
366
366
|
</elseif>
|
|
367
367
|
<else>
|
|
368
368
|
<ase-tpl-hint level="minimal">
|
|
369
369
|
Run `/reload-skills` to reload all skills.
|
|
370
|
-
Run `/<new-skill-name/>` to execute the
|
|
370
|
+
Run `/<new-skill-name/>` to execute the newly generated workflow.
|
|
371
371
|
</ase-tpl-hint>
|
|
372
372
|
</else>
|
|
373
373
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ase-task-implement
|
|
3
|
-
argument-hint: "[--help|-h] [--next|-n <option>[,...]] [<id>]"
|
|
3
|
+
argument-hint: "[--help|-h] [--next|-n <option>[,...]] [--worktree|-w] [<id>]"
|
|
4
4
|
description: >
|
|
5
5
|
Implement current or given task plan.
|
|
6
6
|
Use when the user calls to "implement", "realize" or "apply" the
|
|
@@ -21,7 +21,7 @@ Implement a Task Plan
|
|
|
21
21
|
|
|
22
22
|
<expand name="getopt"
|
|
23
23
|
arg1="ase-task-implement"
|
|
24
|
-
arg2="--next|-n=(none|DONE|DELETE)... --int-reuse-task">
|
|
24
|
+
arg2="--next|-n=(none|DONE|DELETE)... --worktree|-w --int-reuse-task">
|
|
25
25
|
$ARGUMENTS
|
|
26
26
|
</expand>
|
|
27
27
|
|
|
@@ -32,6 +32,8 @@ with a corresponding, complete *change set*.
|
|
|
32
32
|
|
|
33
33
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
|
|
34
34
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-task.md
|
|
35
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-tenets.md
|
|
36
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-code.md
|
|
35
37
|
|
|
36
38
|
Procedure
|
|
37
39
|
---------
|
|
@@ -59,7 +61,98 @@ Procedure
|
|
|
59
61
|
or `ase-task-edit` skills first to create a task plan. Then
|
|
60
62
|
immediately stop processing this skill.
|
|
61
63
|
|
|
62
|
-
3.
|
|
64
|
+
3. Internalize the tenets stated by the plan:
|
|
65
|
+
|
|
66
|
+
<expand name="code-tenets-from-plan"></expand>
|
|
67
|
+
|
|
68
|
+
3. **Prepare WorkTree:**
|
|
69
|
+
|
|
70
|
+
<if condition="<getopt-option-worktree/> is not equal `true`">
|
|
71
|
+
No worktree was requested, so the implementation is applied directly
|
|
72
|
+
to the *current* working copy. Set <worktree-dir></worktree-dir>
|
|
73
|
+
(empty) and *skip* all remaining sub-steps of this step. Do not
|
|
74
|
+
output anything.
|
|
75
|
+
</if>
|
|
76
|
+
|
|
77
|
+
1. Set <worktree-name><ase-task-id/></worktree-name>. The worktree
|
|
78
|
+
is *never* named by an own option value: it always carries the
|
|
79
|
+
unique *task id*, so the worktree directory and its branch stay
|
|
80
|
+
unambiguously tied to the very task plan implemented in them.
|
|
81
|
+
The task id is a plain identifier by construction, hence it is
|
|
82
|
+
directly usable as both a directory and a branch name. Do not
|
|
83
|
+
output anything.
|
|
84
|
+
|
|
85
|
+
2. Determine the *repository root* by running the corresponding
|
|
86
|
+
command (taken exactly as given) and capturing its output into
|
|
87
|
+
<repo-root/>:
|
|
88
|
+
|
|
89
|
+
`git rev-parse --show-toplevel`
|
|
90
|
+
|
|
91
|
+
<if condition="this command fails">
|
|
92
|
+
The current directory is no Git repository, so no worktree can be
|
|
93
|
+
created. Only output the following <template/> and then
|
|
94
|
+
immediately *STOP* processing the entire current skill, leaving
|
|
95
|
+
the working copy *untouched*:
|
|
96
|
+
|
|
97
|
+
<template>
|
|
98
|
+
⧉ **ASE**: ☻ skill: **ase-task-implement**, ▶ ERROR: no Git repository -- cannot create worktree
|
|
99
|
+
</template>
|
|
100
|
+
</if>
|
|
101
|
+
|
|
102
|
+
Then set <worktree-dir><repo-root/>/.ase/worktree/<worktree-name/></worktree-dir>.
|
|
103
|
+
|
|
104
|
+
3. Determine the *existing worktrees* and *existing branches* by
|
|
105
|
+
running the corresponding commands (taken exactly as given) and
|
|
106
|
+
capturing their outputs:
|
|
107
|
+
|
|
108
|
+
`git worktree list --porcelain`
|
|
109
|
+
|
|
110
|
+
`git branch --list`
|
|
111
|
+
|
|
112
|
+
<if condition="the worktree directory <worktree-dir/> or the branch <worktree-name/> already exists">
|
|
113
|
+
Only output the following <template/> and then immediately *STOP*
|
|
114
|
+
processing the entire current skill, leaving the existing
|
|
115
|
+
worktree, its branch, and the working copy *untouched*:
|
|
116
|
+
|
|
117
|
+
<template>
|
|
118
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: worktree or branch **<worktree-name/>** already exists
|
|
119
|
+
</template>
|
|
120
|
+
|
|
121
|
+
Directly *after* this error <template/>, and *before* stopping,
|
|
122
|
+
give the corrective hint by expanding the following (which,
|
|
123
|
+
depending on the configured <ase-guidance-level/>, may expand
|
|
124
|
+
into nothing and hence emit no output at all):
|
|
125
|
+
|
|
126
|
+
<ase-tpl-hint level="minimal">
|
|
127
|
+
Remove the existing worktree via `git worktree remove` and `git branch -d`, or rename the task via `/ase-task-rename` to implement it under a still unused worktree name.
|
|
128
|
+
</ase-tpl-hint>
|
|
129
|
+
</if>
|
|
130
|
+
|
|
131
|
+
4. Create the worktree by running the corresponding command (taken
|
|
132
|
+
exactly as given), which creates the directory *and* -- named
|
|
133
|
+
after its last path component -- the branch <worktree-name/> from
|
|
134
|
+
`HEAD`. The `.ase` directory is usually git-ignored, so the
|
|
135
|
+
worktree itself never shows up as a change:
|
|
136
|
+
|
|
137
|
+
`git worktree add "<worktree-dir/>"`
|
|
138
|
+
|
|
139
|
+
<if condition="this command fails">
|
|
140
|
+
Only output the following <template/> and then immediately *STOP*
|
|
141
|
+
processing the entire current skill, leaving the working copy
|
|
142
|
+
*untouched*:
|
|
143
|
+
|
|
144
|
+
<template>
|
|
145
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ ERROR: worktree **<worktree-name/>** failed to create
|
|
146
|
+
</template>
|
|
147
|
+
</if>
|
|
148
|
+
|
|
149
|
+
5. Only output the following <template/>:
|
|
150
|
+
|
|
151
|
+
<template>
|
|
152
|
+
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ◉ worktree: **.ase/worktree/<worktree-name/>**, ▶ status: **worktree created**
|
|
153
|
+
</template>
|
|
154
|
+
|
|
155
|
+
4. **Create Implementation:**
|
|
63
156
|
|
|
64
157
|
1. Perform a *final implementation* of the task plan
|
|
65
158
|
by modifying the *artifacts* with a corresponding, complete
|
|
@@ -73,6 +166,19 @@ Procedure
|
|
|
73
166
|
overrules the implementation draft in the `IMPLEMENTATION DRAFT`
|
|
74
167
|
section of <task-content/>.
|
|
75
168
|
|
|
169
|
+
<if condition="<worktree-dir/> is not empty">
|
|
170
|
+
The change set *MUST* land *exclusively inside* the worktree
|
|
171
|
+
<worktree-dir/>: resolve *every* file path of the task plan
|
|
172
|
+
relative to <worktree-dir/> instead of the original working copy,
|
|
173
|
+
and run *every* verification command (build, tests, linter,
|
|
174
|
+
type-checker, program execution) with <worktree-dir/> as its
|
|
175
|
+
working directory. You *MUST* *NEVER* modify, stage, stash,
|
|
176
|
+
revert, or commit anything *outside* of this worktree. Leave the
|
|
177
|
+
worktree *uncommitted*: do *not* run `git add` and do *not* run
|
|
178
|
+
`git commit`, so the user keeps full control over the final
|
|
179
|
+
commit.
|
|
180
|
+
</if>
|
|
181
|
+
|
|
76
182
|
<if condition="<task-content/> does NOT contain a `## VERIFICATION` section heading">
|
|
77
183
|
The task plan deliberately *omits* the `## VERIFICATION`
|
|
78
184
|
section. You *MUST* therefore *strictly skip* the entire
|
|
@@ -89,7 +195,17 @@ Procedure
|
|
|
89
195
|
⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented**
|
|
90
196
|
</template>
|
|
91
197
|
|
|
92
|
-
|
|
198
|
+
3. <if condition="<worktree-dir/> is not empty">
|
|
199
|
+
Give the closing hint by expanding the following (which,
|
|
200
|
+
depending on the configured <ase-guidance-level/>, may expand
|
|
201
|
+
into nothing and hence emit no output at all):
|
|
202
|
+
|
|
203
|
+
<ase-tpl-hint level="minimal">
|
|
204
|
+
The change set is uncommitted in `.ase/worktree/<worktree-name/>` on branch `<worktree-name/>` -- review and commit it there, then remove the worktree via `git worktree remove`.
|
|
205
|
+
</ase-tpl-hint>
|
|
206
|
+
</if>
|
|
207
|
+
|
|
208
|
+
5. **Decide Next Step:**
|
|
93
209
|
|
|
94
210
|
1. *Determine next step*:
|
|
95
211
|
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
`ase-task-implement`
|
|
9
9
|
[`--help`|`-h`]
|
|
10
10
|
[`--next`|`-n` *option*[,...]]
|
|
11
|
+
[`--worktree`|`-w`]
|
|
11
12
|
[*id*]
|
|
12
13
|
|
|
13
14
|
## DESCRIPTION
|
|
@@ -18,6 +19,13 @@ a task plan by modifying the corresponding *artifacts* with a complete
|
|
|
18
19
|
section produced by `ase-task-preflight` is used as a hint - the plain
|
|
19
20
|
plan content always overrules the draft.
|
|
20
21
|
|
|
22
|
+
The *kind of change* stated by the plan's `☯ Kind:` header line
|
|
23
|
+
(`CRAFTING`, `REFACTORING`, or `RESOLVING`) selects which
|
|
24
|
+
*operation-specific tenet set* of the **ASE Tenets** is internalized
|
|
25
|
+
before any artifact is touched, in addition to the always applying
|
|
26
|
+
**GENERIC TENETS**. If a plan carries no such line, the kind is
|
|
27
|
+
*inferred* from the plan content, defaulting to `CRAFTING`.
|
|
28
|
+
|
|
21
29
|
If the task plan deliberately *omits* the `## VERIFICATION` section
|
|
22
30
|
(as produced by `ase-code-craft`, `ase-code-refactor`,
|
|
23
31
|
`ase-code-resolve`, or `ase-task-edit` when invoked with `--dry`),
|
|
@@ -25,6 +33,17 @@ the entire verification phase is strictly skipped: no build, tests,
|
|
|
25
33
|
linter, type-checker, or program execution is performed once the
|
|
26
34
|
source files have been modified.
|
|
27
35
|
|
|
36
|
+
With `--worktree`|`-w`, the change set is *not* applied to the current
|
|
37
|
+
working copy: a *fresh Git WorkTree* `.ase/worktree/<id>` and its
|
|
38
|
+
equally named branch are created from `HEAD` *before* any artifact is
|
|
39
|
+
touched, and the entire implementation -- including all verification
|
|
40
|
+
runs -- then happens *inside* that worktree, which is left
|
|
41
|
+
*uncommitted*. The worktree is *not* named by an option value: it
|
|
42
|
+
always carries the unique *task id*, so worktree and branch stay tied
|
|
43
|
+
to the very task plan implemented in them. As the worktree branches off
|
|
44
|
+
`HEAD`, *uncommitted* changes of the current working copy are *not*
|
|
45
|
+
carried over into it.
|
|
46
|
+
|
|
28
47
|
After implementation, the user is asked whether to preserve or
|
|
29
48
|
delete the task plan, unless `--next` pre-selects this choice.
|
|
30
49
|
|
|
@@ -40,6 +59,14 @@ delete the task plan, unless `--next` pre-selects this choice.
|
|
|
40
59
|
answer required), `DONE` (preserve task plan and stop), or
|
|
41
60
|
`DELETE` (hand off to `ase-task-delete`).
|
|
42
61
|
|
|
62
|
+
`--worktree`|`-w`:
|
|
63
|
+
Apply the change set inside a dedicated *Git WorkTree* instead of
|
|
64
|
+
the current working copy. The worktree directory `.ase/worktree/<id>`
|
|
65
|
+
and its equally named branch are derived from the *task id* and
|
|
66
|
+
created from `HEAD`. If either the directory or the branch already
|
|
67
|
+
exists, the skill stops and touches nothing. By default, the change
|
|
68
|
+
set is applied to the current working copy.
|
|
69
|
+
|
|
43
70
|
## ARGUMENTS
|
|
44
71
|
|
|
45
72
|
*id*:
|
|
@@ -60,7 +87,15 @@ Implement a specific task and delete the plan when done:
|
|
|
60
87
|
❯ /ase-task-implement --next DELETE hello
|
|
61
88
|
```
|
|
62
89
|
|
|
90
|
+
Implement the task `hello` inside the isolated Git WorkTree
|
|
91
|
+
`.ase/worktree/hello`:
|
|
92
|
+
|
|
93
|
+
```text
|
|
94
|
+
❯ /ase-task-implement --worktree hello
|
|
95
|
+
```
|
|
96
|
+
|
|
63
97
|
## SEE ALSO
|
|
64
98
|
|
|
65
99
|
[`ase-task-edit`](../ase-task-edit/help.md), [`ase-task-preflight`](../ase-task-preflight/help.md), [`ase-task-reboot`](../ase-task-reboot/help.md),
|
|
66
100
|
[`ase-task-view`](../ase-task-view/help.md), [`ase-task-delete`](../ase-task-delete/help.md).
|
|
101
|
+
|
|
@@ -32,6 +32,8 @@ for a corresponding, *complete source code change set*.
|
|
|
32
32
|
|
|
33
33
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
|
|
34
34
|
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-task.md
|
|
35
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-tenets.md
|
|
36
|
+
@${CLAUDE_SKILL_DIR}/../../meta/ase-common-code.md
|
|
35
37
|
|
|
36
38
|
Procedure
|
|
37
39
|
---------
|
|
@@ -59,6 +61,10 @@ Procedure
|
|
|
59
61
|
or `ase-task-edit` skills first to create a task plan. Then
|
|
60
62
|
immediately stop processing this skill.
|
|
61
63
|
|
|
64
|
+
3. Internalize the tenets stated by the plan:
|
|
65
|
+
|
|
66
|
+
<expand name="code-tenets-from-plan"></expand>
|
|
67
|
+
|
|
62
68
|
3. **Create Implementation Draft:**
|
|
63
69
|
|
|
64
70
|
1. Perform a *preflight* of the *implementation* of <task-content/> by creating a
|
|
@@ -19,6 +19,13 @@ draft for a corresponding, complete *artifact change set* in
|
|
|
19
19
|
an `IMPLEMENTATION DRAFT` section (replacing any previous draft).
|
|
20
20
|
No source files are modified.
|
|
21
21
|
|
|
22
|
+
The *kind of change* stated by the plan's `☯ Kind:` header line
|
|
23
|
+
(`CRAFTING`, `REFACTORING`, or `RESOLVING`) selects which
|
|
24
|
+
*operation-specific tenet set* of the **ASE Tenets** is internalized
|
|
25
|
+
before the draft is produced, in addition to the always applying
|
|
26
|
+
**GENERIC TENETS**. If a plan carries no such line, the kind is
|
|
27
|
+
*inferred* from the plan content, defaulting to `CRAFTING`.
|
|
28
|
+
|
|
22
29
|
After the preflight, the user is asked whether to stop, hand
|
|
23
30
|
off to `ase-task-edit`, or hand off to `ase-task-implement`,
|
|
24
31
|
unless `--next` pre-selects this choice.
|