@rse/ase 0.9.44 → 0.9.46

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.
Files changed (57) hide show
  1. package/dst/ase-setup.js +50 -0
  2. package/package.json +3 -3
  3. package/plugin/.claude-plugin/plugin.json +1 -1
  4. package/plugin/.codex-plugin/plugin.json +1 -1
  5. package/plugin/.github/plugin/plugin.json +1 -1
  6. package/plugin/agents/ase-code-lint.md +11 -0
  7. package/plugin/agents/ase-docs-proofread.md +8 -0
  8. package/plugin/agents/ase-meta-chat.md +13 -7
  9. package/plugin/agents/ase-meta-search.md +0 -1
  10. package/plugin/etc/stx.conf +6 -1
  11. package/plugin/meta/ase-common-task.md +145 -0
  12. package/plugin/meta/ase-constitution.md +4 -1
  13. package/plugin/meta/ase-dialog.md +7 -7
  14. package/plugin/meta/ase-format-arch.md +4 -4
  15. package/plugin/meta/ase-format-spec.md +23 -23
  16. package/plugin/meta/ase-format-task.md +1 -1
  17. package/plugin/meta/ase-persona.md +3 -3
  18. package/plugin/meta/ase-skill.md +2 -2
  19. package/plugin/meta/ase-tenets.md +4 -4
  20. package/plugin/package.json +1 -1
  21. package/plugin/skills/ase-arch-analyze/SKILL.md +2 -3
  22. package/plugin/skills/ase-code-craft/SKILL.md +23 -9
  23. package/plugin/skills/ase-code-craft/help.md +5 -4
  24. package/plugin/skills/ase-code-lint/SKILL.md +19 -3
  25. package/plugin/skills/ase-code-refactor/SKILL.md +23 -9
  26. package/plugin/skills/ase-code-refactor/help.md +5 -4
  27. package/plugin/skills/ase-code-resolve/SKILL.md +22 -8
  28. package/plugin/skills/ase-code-resolve/help.md +6 -5
  29. package/plugin/skills/ase-docs-distill/SKILL.md +6 -6
  30. package/plugin/skills/ase-docs-proofread/SKILL.md +18 -3
  31. package/plugin/skills/ase-meta-changelog/SKILL.md +5 -2
  32. package/plugin/skills/ase-meta-commit/SKILL.md +4 -4
  33. package/plugin/skills/ase-meta-compat/SKILL.md +3 -3
  34. package/plugin/skills/ase-meta-diaboli/SKILL.md +2 -2
  35. package/plugin/skills/ase-meta-eli5/SKILL.md +116 -0
  36. package/plugin/skills/ase-meta-eli5/help.md +61 -0
  37. package/plugin/skills/ase-meta-evaluate/SKILL.md +6 -9
  38. package/plugin/skills/ase-meta-intent/SKILL.md +157 -0
  39. package/plugin/skills/ase-meta-intent/help.md +56 -0
  40. package/plugin/skills/ase-meta-proximity/SKILL.md +224 -0
  41. package/plugin/skills/ase-meta-proximity/help.md +78 -0
  42. package/plugin/skills/ase-meta-quorum/SKILL.md +33 -4
  43. package/plugin/skills/ase-meta-search/SKILL.md +1 -1
  44. package/plugin/skills/ase-meta-steelman/SKILL.md +3 -3
  45. package/plugin/skills/ase-meta-why/SKILL.md +1 -1
  46. package/plugin/skills/ase-sync-export/SKILL.md +7 -7
  47. package/plugin/skills/ase-sync-import/SKILL.md +20 -16
  48. package/plugin/skills/ase-sync-reconcile/SKILL.md +9 -9
  49. package/plugin/skills/ase-task-condense/SKILL.md +34 -79
  50. package/plugin/skills/ase-task-edit/SKILL.md +41 -49
  51. package/plugin/skills/ase-task-grill/SKILL.md +10 -12
  52. package/plugin/skills/ase-task-id/SKILL.md +7 -3
  53. package/plugin/skills/ase-task-implement/SKILL.md +18 -111
  54. package/plugin/skills/ase-task-list/SKILL.md +3 -0
  55. package/plugin/skills/ase-task-preflight/SKILL.md +22 -115
  56. package/plugin/skills/ase-task-reboot/SKILL.md +27 -63
  57. package/plugin/skills/ase-task-view/SKILL.md +7 -7
@@ -31,112 +31,43 @@ for a corresponding, *complete source code change set*.
31
31
  </objective>
32
32
 
33
33
  @${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
34
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-common-task.md
34
35
 
35
36
  Procedure
36
37
  ---------
37
38
 
38
39
  1. **Determine Task:**
39
40
 
40
- 1. Set <instruction><getopt-arguments/></instruction> initially.
41
+ 1. Set <instruction><getopt-arguments/></instruction> initially, with any
42
+ leading and trailing whitespace stripped.
41
43
  Inherit the always existing <ase-task-id/> from the current context.
42
44
  Inherit the always existing <ase-session-id/> from the current context.
43
45
  Do not output anything.
44
46
 
45
47
  2. React on task id:
46
48
 
47
- 1. <if condition="
48
- <instruction/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
49
- ">
50
- Set <ase-task-id><instruction/></ase-task-id> (set task
51
- id to instruction) and <instruction></instruction> (set
52
- instruction empty), call the `ase_task_id(id: "<ase-task-id/>",
53
- session: "<ase-session-id/>")` tool from the `ase` MCP
54
- server to switch the task, and then only output the
55
- following <template/>:
56
-
57
- <template>
58
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
59
- </template>
60
- </if>
61
-
62
- 2. <elseif condition="
63
- <instruction/> has the format `<id/>: <text/>` where
64
- <id/> matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
65
- <text/> is *empty*
66
- ">
67
- Set <instruction></instruction> (set instruction to empty)
68
- and <ase-task-id><id/></ase-task-id> (set task id to
69
- id) and call the `ase_task_id(id: "<ase-task-id/>", session:
70
- "<ase-session-id/>")` tool from the `ase` MCP server to
71
- switch the task, and then only output the following
72
- <template/>:
73
-
74
- <template>
75
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **task given**
76
- </template>
77
- </elseif>
78
-
79
- 3. <elseif condition="<instruction/> is NOT empty">
80
- The argument is neither empty nor a valid task id. As this
81
- skill only accepts an optional `[<id>]` argument and *never*
82
- a free-text instruction, only output the following <template/>
83
- and then immediately *STOP* processing the entire current skill:
84
-
85
- <template>
86
- ⧉ **ASE**: ☻ skill: **ase-task-preflight**, ▶ ERROR: expected single `[<id>]` argument
87
- </template>
88
- </elseif>
49
+ <expand name="task-react-id" arg1="ase-task-preflight"></expand>
89
50
 
90
51
  2. **Determine Operation:**
91
52
 
92
53
  1. Determine the current task plan content:
93
54
 
94
- <if condition="
95
- <getopt-option-int-reuse-task/> is equal `true`
96
- *and* a `ase_task_save(id: '<ase-task-id/>', ...)` tool call
97
- exists earlier in the current session
98
- ">
99
- Set <text/> to the `text` argument of the most recent
100
- `ase_task_save(id: '<ase-task-id/>', ...)` tool call,
101
- *without* calling `ase_task_load` again. Set <status>plan
102
- reused</status>. Do not output anything.
103
- </if>
104
- <else>
105
- Call the `ase_task_load(id: "<ase-task-id/>")` tool of the
106
- `ase` MCP server to load the current task plan content and
107
- set <text/> to the `text` output field of this `ase_task_load`
108
- tool call. Do not output anything related to this MCP tool
109
- call. Set <status>plan loaded</status>.
110
- </else>
55
+ <expand name="task-load-content"></expand>
111
56
 
112
- - If <text/> starts with `ERROR:` or `WARNING:`:
113
- Set <content></content> (set content to empty).
114
- Set <words/> to "0".
115
-
116
- - If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
117
- Set <content><text/></content> (set content to text).
118
- Calculate the number of words <words/> of <content/>.
119
-
120
- Only output the following <template/>:
121
-
122
- <template>
123
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
124
- </template>
125
-
126
- 2. If the <content/> is still empty, complain and tell the user to
57
+ 2. If the <task-content/> is still empty, complain and tell the user to
127
58
  use the `ase-code-resolve`, `ase-code-refactor`, `ase-code-craft`,
128
59
  or `ase-task-edit` skills first to create a task plan. Then
129
60
  immediately stop processing this skill.
130
61
 
131
62
  3. **Create Implementation Draft:**
132
63
 
133
- 1. Perform a *preflight* of the *implementation* of <content/> by creating a
64
+ 1. Perform a *preflight* of the *implementation* of <task-content/> by creating a
134
65
  draft for a corresponding, *complete artifact change set*
135
- which *would* fully implement the task plan <content/>. Store
66
+ which *would* fully implement the task plan <task-content/>. Store
136
67
  this artifact change set in *unified diff* format in <unified-diff/>.
137
68
 
138
69
  2. Append this artifact change set <unified-diff/> to the end
139
- of the <content/> with the following <template/>. If a section
70
+ of the <task-content/> with the following <template/>. If a section
140
71
  named `## IMPLEMENTATION DRAFT` already exists from a
141
72
  previous run of this skill, *replace* this entire existing
142
73
  section.
@@ -151,20 +82,20 @@ Procedure
151
82
 
152
83
  </template>
153
84
 
154
- 3. <if condition="<content/> contains '⚙ Modified:'">
85
+ 3. <if condition="<task-content/> contains '⚙ Modified:'">
155
86
  Update <timestamp-modified/> with the current time in
156
87
  ISO-style format, which has to be determined by calling the
157
88
  `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
158
89
  MCP server and use the `text` field of its response. Update
159
- the `⚙ Modified: ...` line of <content/> with the new
90
+ the `⚙ Modified: ...` line of <task-content/> with the new
160
91
  `⚙ Modified: <timestamp-modified/>`.
161
92
  Do not output anything.
162
93
  </if>
163
94
 
164
95
  4. Finally, call the `ase_task_save(id: "<ase-task-id/>",
165
- text: "<content/>")` tool of the `ase` MCP server to save the updated
96
+ text: "<task-content/>")` tool of the `ase` MCP server to save the updated
166
97
  task plan content. Calculate the number of words <words/> of
167
- <content/>. Do not output anything related to this MCP tool call
98
+ <task-content/>. Do not output anything related to this MCP tool call
168
99
  except the following <template/>:
169
100
 
170
101
  <template>
@@ -175,38 +106,14 @@ Procedure
175
106
 
176
107
  1. *Determine next step*:
177
108
 
178
- - If <getopt-option-next/> is not equal to `none`:
179
- Treat <getopt-option-next/> as a comma-separated chronological
180
- list of pre-selected next-step tokens. *Split* it on `,`,
181
- take the *first* token as <head/>, and store the remaining
182
- tokens (joined back with `,`, or `none` if empty) into
183
- <getopt-option-next/> so downstream skills can consume the tail.
184
-
185
- - If <head/> matches the regex `^(DONE|EDIT|IMPLEMENT)$`:
186
- Honor the pre-selected token.
187
- Set <result><head/></result>.
188
-
189
- - else:
190
- Only output the following <template/> and then immediately
191
- *STOP* processing the entire current skill:
192
-
193
- <template>
194
- ⧉ **ASE**: ☻ skill: **ase-task-preflight**, ▶ ERROR: invalid `--next` token: **<head/>**
195
- </template>
196
-
197
- - If <getopt-option-next/> is equal to `none`:
198
-
199
- In the following, you *MUST* *NOT* use your built-in
200
- <user-dialog-tool/> tool! Instead, you *MUST* just show a
201
- custom dialog according to the expanded `custom-dialog`
202
- definition. You *MUST* closely follow this definition:
203
-
204
- <expand name="custom-dialog" arg1="--no-other">
205
- Next Step: How would you like to proceed with the plan?
206
- DONE: Stop processing.
207
- EDIT: Hand processing off to editing.
208
- IMPLEMENT: Hand processing off to implementation.
209
- </expand>
109
+ <expand name="task-next-select"
110
+ arg1="ase-task-preflight"
111
+ arg2="DONE|EDIT|IMPLEMENT">
112
+ Next Step: How would you like to proceed with the plan?
113
+ DONE: Stop processing.
114
+ EDIT: Hand processing off to editing.
115
+ IMPLEMENT: Hand processing off to implementation.
116
+ </expand>
210
117
 
211
118
  2. Check the tool <result/> and dispatch accordingly:
212
119
 
@@ -244,6 +151,6 @@ Procedure
244
151
  the current skill once the `Skill` tool was used.
245
152
 
246
153
  <template>
247
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to implement**
154
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to implementation**
248
155
  </template>
249
156
 
@@ -31,13 +31,15 @@ based on the existing *WHAT* and *WHY*.
31
31
  </objective>
32
32
 
33
33
  @${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
34
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-common-task.md
34
35
 
35
36
  Procedure
36
37
  ---------
37
38
 
38
39
  1. **Determine Task:**
39
40
 
40
- 1. Set <instruction><getopt-arguments/></instruction> initially.
41
+ 1. Set <instruction><getopt-arguments/></instruction> initially, with any
42
+ leading and trailing whitespace stripped.
41
43
  Inherit the always existing <ase-task-id/> from the current context.
42
44
  Inherit the always existing <ase-session-id/> from the current context.
43
45
  Do not output anything.
@@ -77,12 +79,12 @@ Procedure
77
79
  the `text` output field of the `ase_task_load` tool call.
78
80
 
79
81
  - If <text/> starts with `ERROR:` or `WARNING:`:
80
- Set <content></content> (set content to empty).
82
+ Set <task-content></task-content> (set task content to empty).
81
83
  Set <words/> to "0".
82
84
 
83
85
  - If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
84
- Set <content><text/></content> (set content to text).
85
- Calculate the number of words <words/> of <content/>.
86
+ Set <task-content><text/></task-content> (set task content to text).
87
+ Calculate the number of words <words/> of <task-content/>.
86
88
 
87
89
  Only output the following <template/>:
88
90
 
@@ -90,7 +92,7 @@ Procedure
90
92
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
91
93
  </template>
92
94
 
93
- 2. <if condition="<content/> is empty">
95
+ 2. <if condition="<task-content/> is empty">
94
96
  Complain and tell the user to use the `ase-code-resolve`,
95
97
  `ase-code-refactor`, `ase-code-craft`, or `ase-task-edit` skills
96
98
  first to create a task plan. Then immediately stop processing
@@ -101,24 +103,24 @@ Procedure
101
103
 
102
104
  1. Start with <instruction></instruction> (set instruction to empty).
103
105
 
104
- 2. <if condition="<content/> contains neither '- **WHAT**:' nor '- **WHY**:'">
105
- Set <instruction><content/></instruction> (set instruction to content).
106
+ 2. <if condition="<task-content/> contains neither '- **WHAT**:' nor '- **WHY**:'">
107
+ Set <instruction><task-content/></instruction> (set instruction to task content).
106
108
  </if>
107
109
 
108
- 3. <if condition="<content/> contains '- **WHAT**: <text/>'">
110
+ 3. <if condition="<task-content/> contains '- **WHAT**: <text/>'">
109
111
  Set <instruction><text/></instruction> (set instruction to extracted text).
110
112
  </if>
111
113
 
112
- 4. <if condition="<content/> contains '- **WHY**: <text/>' and <instruction/> is empty">
114
+ 4. <if condition="<task-content/> contains '- **WHY**: <text/>' and <instruction/> is empty">
113
115
  Set <instruction><text/></instruction> (set instruction to extracted text).
114
116
  </if>
115
117
 
116
- 5. <if condition="<content/> contains '- **WHY**: <text/>' and <instruction/> is NOT empty">
118
+ 5. <if condition="<task-content/> contains '- **WHY**: <text/>' and <instruction/> is NOT empty">
117
119
  Set <instruction><instruction/>, BECAUSE <text/></instruction>
118
120
  (append extracted text to instruction).
119
121
  </if>
120
122
 
121
- 6. <if condition="<content/> contains '⎈ Created: <text/>'">
123
+ 6. <if condition="<task-content/> contains '⎈ Created: <text/>'">
122
124
  Set <timestamp-created><text/></timestamp-created> (set
123
125
  timestamp-created to extracted text)
124
126
  </if>
@@ -127,8 +129,8 @@ Procedure
127
129
  The WHAT/WHY extraction yielded no usable text (e.g. a
128
130
  `- **WHAT**:` line existed but captured empty text, so the
129
131
  whole-content fallback above did not fire). Fall back to the
130
- full previous plan content: set <instruction><content/></instruction>
131
- (set instruction to content).
132
+ full previous plan content: set <instruction><task-content/></instruction>
133
+ (set instruction to task content).
132
134
  <if condition="<instruction/> is still empty or contains only whitespace">
133
135
  There is nothing to reboot from. Only output the following
134
136
  <template/> and then immediately *STOP* processing the entire
@@ -141,30 +143,16 @@ Procedure
141
143
  </if>
142
144
 
143
145
  8. Create a new plan from scratch and store the result as
144
- <content/> by closely following the defined plan format
146
+ <task-content/> by closely following the defined plan format
145
147
  <format/> and injecting into it all the information from
146
148
  the <instruction/> and all decisions you derived from the
147
149
  <instruction/>.
148
150
 
149
- 9. Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
150
- `ase` MCP server and use the `text` field of its response for
151
- <timestamp-modified/> information. If <timestamp-created/> is
152
- still unset (because the previous <content/> had no `Created:`
153
- line), set <timestamp-created><timestamp-modified/></timestamp-created>
154
- (fall back to the modified timestamp). Then insert the current
155
- <ase-task-id/>, previous <timestamp-created/>, and refreshed
156
- <timestamp-modified/> information and calculate the number of
157
- words <words/> of <content/>.
151
+ 9. <expand name="task-save-content" arg1="plan rebooted"></expand>
158
152
 
159
- 10. Call the `ase_task_save(id: "<ase-task-id/>",
160
- text: "<content/>")` tool of the `ase` MCP server to save the updated
161
- task plan content. Do not output anything related to this MCP
162
- call.
163
-
164
- 11. Only output the following <template/> and continue processing:
153
+ 10. Only output the following <template/> and continue processing:
165
154
 
166
155
  <template>
167
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan rebooted**
168
156
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ⇌ instruction: **<instruction/>**, ▶ status: **instruction given**
169
157
  </template>
170
158
 
@@ -172,39 +160,15 @@ Procedure
172
160
 
173
161
  1. *Determine next step*:
174
162
 
175
- - If <getopt-option-next/> is not equal to `none`:
176
- Treat <getopt-option-next/> as a comma-separated chronological
177
- list of pre-selected next-step tokens. *Split* it on `,`,
178
- take the *first* token as <head/>, and store the remaining
179
- tokens (joined back with `,`, or `none` if empty) into
180
- <getopt-option-next/> so downstream skills can consume the tail.
181
-
182
- - If <head/> matches the regex `^(DONE|EDIT|IMPLEMENT|PREFLIGHT)$`:
183
- Honor the pre-selected token.
184
- Set <result><head/></result>.
185
-
186
- - else:
187
- Only output the following <template/> and then immediately
188
- *STOP* processing the entire current skill:
189
-
190
- <template>
191
- ⧉ **ASE**: ☻ skill: **ase-task-reboot**, ▶ ERROR: invalid `--next` token: **<head/>**
192
- </template>
193
-
194
- - If <getopt-option-next/> is equal to `none`:
195
-
196
- In the following, you *MUST* *NOT* use your built-in
197
- <user-dialog-tool/> tool! Instead, you *MUST* just show a
198
- custom dialog according to the expanded `custom-dialog`
199
- definition. You *MUST* closely follow this definition:
200
-
201
- <expand name="custom-dialog" arg1="--no-other">
202
- Next Step: How would you like to proceed with the plan?
203
- DONE: Stop processing.
204
- EDIT: Hand off plan to editing.
205
- IMPLEMENT: Hand off plan to implementation.
206
- PREFLIGHT: Hand off plan to pre-flighting.
207
- </expand>
163
+ <expand name="task-next-select"
164
+ arg1="ase-task-reboot"
165
+ arg2="DONE|EDIT|IMPLEMENT|PREFLIGHT">
166
+ Next Step: How would you like to proceed with the plan?
167
+ DONE: Stop processing.
168
+ EDIT: Hand off plan to editing.
169
+ IMPLEMENT: Hand off plan to implementation.
170
+ PREFLIGHT: Hand off plan to pre-flighting.
171
+ </expand>
208
172
 
209
173
  2. Check the tool <result/> and dispatch accordingly:
210
174
 
@@ -60,7 +60,7 @@ Procedure
60
60
  output anything related to this MCP tool call.
61
61
 
62
62
  - If <text/> starts with `ERROR:` or `WARNING:`:
63
- Set <content></content> (set content to empty).
63
+ Set <task-content></task-content> (set task content to empty).
64
64
  Only output the following <template/>:
65
65
 
66
66
  <template>
@@ -68,18 +68,18 @@ Procedure
68
68
  </template>
69
69
 
70
70
  - If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
71
- Set <content><text/></content> (set content to text).
72
- Calculate the number of words <words/> of <content/>.
71
+ Set <task-content><text/></task-content> (set task content to text).
72
+ Calculate the number of words <words/> of <task-content/>.
73
73
  Only output the following <template/>:
74
74
 
75
75
  <template>
76
76
  ⧉ **ASE**: ◉ task: **<id/>**, ✪ plan: **<words/>** words, ▶ status: **plan loaded**
77
77
  </template>
78
78
 
79
- 2. <if condition="<content/> is not empty">
80
- Treat <content/> as *verbatim* Markdown.
79
+ 2. <if condition="<task-content/> is not empty">
80
+ Treat <task-content/> as *verbatim* Markdown.
81
81
  *Render plan*: Only output the following <template/>. If
82
- <getopt-option-full/> is *not* `true`, <content/> is longer than
82
+ <getopt-option-full/> is *not* `true`, <task-content/> is longer than
83
83
  90 lines, and a `## IMPLEMENTATION DRAFT` section (from the
84
84
  companion skill `ase-task-preflight`) exists, replace the entire
85
85
  content of the `## IMPLEMENTATION DRAFT` section with `[...]`.
@@ -88,7 +88,7 @@ Procedure
88
88
 
89
89
  <template>
90
90
  <ase-tpl-head title="TASK"/>
91
- <content/>
91
+ <task-content/>
92
92
  <ase-tpl-foot title="TASK"/>
93
93
  </template>
94
94
  </if>