@rse/ase 0.9.12 → 0.9.14

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 (44) hide show
  1. package/dst/ase-compat.js +1 -1
  2. package/dst/ase-diagram.js +5 -2
  3. package/dst/ase-getopt.js +2 -1
  4. package/dst/ase-kv.js +30 -11
  5. package/dst/ase-mcp.js +2 -0
  6. package/dst/ase-persona.js +4 -1
  7. package/dst/ase-skills.js +13 -3
  8. package/dst/ase-statusline.js +2 -2
  9. package/dst/ase.js +1 -1
  10. package/package.json +1 -1
  11. package/plugin/.claude-plugin/plugin.json +1 -1
  12. package/plugin/.codex-plugin/plugin.json +1 -1
  13. package/plugin/.github/plugin/plugin.json +1 -1
  14. package/plugin/agents/ase-meta-chat.md +3 -3
  15. package/plugin/meta/ase-dialog.md +1 -1
  16. package/plugin/meta/ase-format-arch.md +26 -9
  17. package/plugin/meta/ase-format-meta.md +7 -3
  18. package/plugin/meta/ase-format-spec.md +11 -6
  19. package/plugin/meta/ase-getopt.md +8 -3
  20. package/plugin/meta/ase-skill.md +49 -21
  21. package/plugin/package.json +1 -1
  22. package/plugin/skills/ase-arch-analyze/SKILL.md +26 -13
  23. package/plugin/skills/ase-arch-discover/SKILL.md +25 -14
  24. package/plugin/skills/ase-code-analyze/SKILL.md +10 -5
  25. package/plugin/skills/ase-code-craft/SKILL.md +16 -4
  26. package/plugin/skills/ase-code-explain/SKILL.md +0 -1
  27. package/plugin/skills/ase-code-insight/SKILL.md +1 -1
  28. package/plugin/skills/ase-code-lint/SKILL.md +56 -18
  29. package/plugin/skills/ase-code-refactor/SKILL.md +16 -4
  30. package/plugin/skills/ase-code-resolve/SKILL.md +17 -4
  31. package/plugin/skills/ase-docs-proofread/SKILL.md +48 -17
  32. package/plugin/skills/ase-meta-brainstorm/SKILL.md +5 -2
  33. package/plugin/skills/ase-meta-compat/SKILL.md +2 -12
  34. package/plugin/skills/ase-meta-diff/SKILL.md +3 -3
  35. package/plugin/skills/ase-meta-evaluate/SKILL.md +32 -24
  36. package/plugin/skills/ase-meta-quorum/SKILL.md +3 -3
  37. package/plugin/skills/ase-task-condense/SKILL.md +6 -9
  38. package/plugin/skills/ase-task-edit/SKILL.md +6 -2
  39. package/plugin/skills/ase-task-grill/SKILL.md +9 -15
  40. package/plugin/skills/ase-task-id/SKILL.md +7 -4
  41. package/plugin/skills/ase-task-implement/SKILL.md +6 -11
  42. package/plugin/skills/ase-task-preflight/SKILL.md +5 -10
  43. package/plugin/skills/ase-task-reboot/SKILL.md +21 -13
  44. package/plugin/skills/ase-task-rename/SKILL.md +9 -0
@@ -142,9 +142,9 @@ by querying *multiple* AIs for an *optimal consensus*.
142
142
  set <disagreement/> to `(no quorum: no foreign AIs were available)`,
143
143
  then skip the rest of this step.
144
144
 
145
- Otherwise, determine, on a Likert scale of 0..<n/>, the amount of the
146
- overall consensus <c/> of all the responses. The <n/> is the *total
147
- number of responders* (yourself plus all available foreign AIs above).
145
+ Otherwise, let <n/> be the *total number of responders* (yourself plus
146
+ all available foreign AIs above). Then determine, on a Likert scale of
147
+ 0..<n/>, the amount of the overall consensus <c/> of all the responses.
148
148
  If all responses disagree, the consensus <c/> is zero.
149
149
  If all responses agree, <c/> is <n/>.
150
150
 
@@ -93,6 +93,12 @@ explicitly requested by this procedure via outputs based on a <template/>!
93
93
  Set <words-before><words/></words-before> (remember the loaded
94
94
  word count for the strictly-smaller check in step 3).
95
95
 
96
+ <if condition="<content/> contains 'Created: <text/>'">
97
+ Set <timestamp-created><text/></timestamp-created> (extract the
98
+ original creation timestamp so it can be re-inserted unchanged
99
+ into the condensed <content/> in step 3).
100
+ </if>
101
+
96
102
  Only output the following <template/>:
97
103
 
98
104
  <template>
@@ -274,12 +280,3 @@ explicitly requested by this procedure via outputs based on a <template/>!
274
280
  <template>
275
281
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan condensed -- hand-off to pre-flight**
276
282
  </template>
277
-
278
- - If <result/> matches `OTHER: <text/>` or is any other
279
- unrecognized value:
280
- Treat it as `DONE` (the condensed plan is already saved):
281
- only output the following <template/> and then *STOP*.
282
-
283
- <template>
284
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan condensed -- done**
285
- </template>
@@ -171,7 +171,11 @@ Set <content-dirty>true</content-dirty>.
171
171
 
172
172
  1. Determine any existing plan content:
173
173
 
174
- <if condition="<getopt-option-int-reuse-task/> is equal `true`">
174
+ <if condition="
175
+ <getopt-option-int-reuse-task/> is equal `true`
176
+ *and* a `ase_task_save(id: '<ase-task-id/>', ...)` tool call
177
+ exists earlier in the current session
178
+ ">
175
179
  Set <text/> to the `text` argument of the most recent
176
180
  `ase_task_save(id: '<ase-task-id/>', ...)` tool call,
177
181
  *without* calling `ase_task_load` again. Set <status>plan
@@ -286,7 +290,7 @@ Set <content-dirty>true</content-dirty>.
286
290
  </template>
287
291
  </if>
288
292
 
289
- 4. <if condition="<content/> does not contain '# TASK' AND <instruction/> is empty">
293
+ 4. <if condition="no line of <content/> matches the case-insensitive regex `^\s*#+\s*TASK\b` AND <instruction/> is empty">
290
294
  Set <instruction><content/></instruction> (set instruction to content).
291
295
  Set <content></content> (set content to empty).
292
296
  Set <content-dirty>true</content-dirty>.
@@ -80,7 +80,11 @@ explicitly requested by this procedure via outputs based on a <template/>!
80
80
 
81
81
  1. Determine the current task plan content:
82
82
 
83
- <if condition="<getopt-option-int-reuse-task/> is equal `true`">
83
+ <if condition="
84
+ <getopt-option-int-reuse-task/> is equal `true`
85
+ *and* a `ase_task_save(id: '<ase-task-id/>', ...)` tool call
86
+ exists earlier in the current session
87
+ ">
84
88
  Set <text/> to the `text` argument of the most recent
85
89
  `ase_task_save(id: '<ase-task-id/>', ...)` tool call,
86
90
  *without* calling `ase_task_load` again. Set <status>plan
@@ -105,12 +109,11 @@ explicitly requested by this procedure via outputs based on a <template/>!
105
109
  - If <text/> starts NOT with `ERROR:` and NOT with `WARNING:`:
106
110
  Set <plan><text/></plan> (set plan to text).
107
111
  Calculate the number of words <words/> of <plan/>.
112
+ Then output the following <template/>:
108
113
 
109
- Output the following <template/>:
110
-
111
- <template>
112
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
113
- </template>
114
+ <template>
115
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **<status/>**
116
+ </template>
114
117
 
115
118
  2. <if condition="<plan/> is empty">
116
119
  Complain and tell the user to use the `ase-code-resolve`,
@@ -323,12 +326,3 @@ explicitly requested by this procedure via outputs based on a <template/>!
323
326
  <template>
324
327
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to implementation**
325
328
  </template>
326
-
327
- - If <result/> matches `OTHER: <text/>` or is any other
328
- unrecognized value:
329
- Treat it as `DONE` (the updated plan is already saved):
330
- only output the following <template/> and then *STOP*.
331
-
332
- <template>
333
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- done**
334
- </template>
@@ -28,7 +28,8 @@ Configure Task Id
28
28
 
29
29
  1. Determine request:
30
30
  <request><getopt-arguments/></request>
31
- Inherit the always existing <ase-session-id/> from the current context.
31
+ Inherit the always existing <ase-session-id/> and the current
32
+ <ase-task-id/> from the current context.
32
33
 
33
34
  2. <if condition="<request/> is NOT empty AND <request/> does NOT match the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`">
34
35
  Only output the following <template/> and then immediately
@@ -44,6 +45,8 @@ Configure Task Id
44
45
  tool from the `ase` MCP server and set <text/> to its
45
46
  `text` output. Check the response as mandated above; only
46
47
  on a clean response set <ase-task-id><text/></ase-task-id>.
48
+ On an `ERROR:`/`WARNING:` response, keep the <ase-task-id/>
49
+ inherited from the current context as the fallback.
47
50
 
48
51
  - Output:
49
52
  <template>
@@ -52,9 +55,9 @@ Configure Task Id
52
55
  </if>
53
56
 
54
57
  4. <if condition="<request/> is NOT empty">
55
- - Set <ase-task-id><request/></ase-task-id> and
56
- call the `ase_task_id(id: "<ase-task-id/>", session: "<ase-session-id/>")`
57
- tool from the `ase` MCP server.
58
+ - Call the `ase_task_id(id: "<request/>", session: "<ase-session-id/>")`
59
+ tool from the `ase` MCP server. Check the response as mandated
60
+ above; only on a clean response set <ase-task-id><request/></ase-task-id>.
58
61
 
59
62
  - Output:
60
63
  <template>
@@ -97,7 +97,11 @@ explicitly requested by this procedure via outputs based on a <template/>!
97
97
 
98
98
  1. Determine the current task plan content:
99
99
 
100
- <if condition="<getopt-option-int-reuse-task/> is equal `true`">
100
+ <if condition="
101
+ <getopt-option-int-reuse-task/> is equal `true`
102
+ *and* a `ase_task_save(id: '<ase-task-id/>', ...)` tool call
103
+ exists earlier in the current session
104
+ ">
101
105
  Set <text/> to the `text` argument of the most recent
102
106
  `ase_task_save(id: '<ase-task-id/>', ...)` tool call,
103
107
  *without* calling `ase_task_load` again. Set <status>plan
@@ -210,7 +214,7 @@ explicitly requested by this procedure via outputs based on a <template/>!
210
214
  skill accepts only an optional `[<id>]` argument and no
211
215
  `--next` option; remaining tokens are intentionally discarded.
212
216
  Only output the following <template/> and then call the
213
- tool `Skill(skill: "ase:ase-task-delete", args: <args/>)`
217
+ tool `Skill(skill: "ase:ase-task-delete", args: "<args/>")`
214
218
  to invoke the `ase:ase-task-delete` skill in order to
215
219
  *delete* the updated plan. Immediately stop processing the
216
220
  current skill once the `Skill` tool was used.
@@ -219,12 +223,3 @@ explicitly requested by this procedure via outputs based on a <template/>!
219
223
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented -- hand-off to delete task**
220
224
  </template>
221
225
 
222
- - If <result/> matches `OTHER: <text/>` or is any other
223
- unrecognized value:
224
- Treat it as `DONE` (the plan is already implemented):
225
- only output the following <template/> and then *STOP*.
226
-
227
- <template>
228
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan implemented -- done**
229
- </template>
230
-
@@ -97,7 +97,11 @@ explicitly requested by this procedure via outputs based on a <template/>!
97
97
 
98
98
  1. Determine the current task plan content:
99
99
 
100
- <if condition="<getopt-option-int-reuse-task/> is equal `true`">
100
+ <if condition="
101
+ <getopt-option-int-reuse-task/> is equal `true`
102
+ *and* a `ase_task_save(id: '<ase-task-id/>', ...)` tool call
103
+ exists earlier in the current session
104
+ ">
101
105
  Set <text/> to the `text` argument of the most recent
102
106
  `ase_task_save(id: '<ase-task-id/>', ...)` tool call,
103
107
  *without* calling `ase_task_load` again. Set <status>plan
@@ -247,12 +251,3 @@ explicitly requested by this procedure via outputs based on a <template/>!
247
251
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to implement**
248
252
  </template>
249
253
 
250
- - If <result/> matches `OTHER: <text/>` or is any other
251
- unrecognized value:
252
- Treat it as `DONE` (the plan is already preflighted):
253
- only output the following <template/> and then *STOP*.
254
-
255
- <template>
256
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- done**
257
- </template>
258
-
@@ -129,13 +129,30 @@ explicitly requested by this procedure via outputs based on a <template/>!
129
129
  timestamp-created to extracted text)
130
130
  </if>
131
131
 
132
- 7. Create a new plan from scratch and store the result as
132
+ 7. <if condition="<instruction/> is empty or contains only whitespace">
133
+ The WHAT/WHY extraction yielded no usable text (e.g. a
134
+ `- **WHAT**:` line existed but captured empty text, so the
135
+ whole-content fallback above did not fire). Fall back to the
136
+ full previous plan content: set <instruction><content/></instruction>
137
+ (set instruction to content).
138
+ <if condition="<instruction/> is still empty or contains only whitespace">
139
+ There is nothing to reboot from. Only output the following
140
+ <template/> and then immediately *STOP* processing the entire
141
+ current skill:
142
+
143
+ <template>
144
+ ⧉ **ASE**: ☻ skill: **ase-task-reboot**, ▶ ERROR: empty instruction -- nothing to reboot from
145
+ </template>
146
+ </if>
147
+ </if>
148
+
149
+ 8. Create a new plan from scratch and store the result as
133
150
  <content/> by closely following the defined plan format
134
151
  <format/> and injecting into it all the information from
135
152
  the <instruction/> and all decisions you derived from the
136
153
  <instruction/>.
137
154
 
138
- 8. Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
155
+ 9. Call the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
139
156
  `ase` MCP server and use the `text` field of its response for
140
157
  <timestamp-modified/> information. If <timestamp-created/> is
141
158
  still unset (because the previous <content/> had no `Created:`
@@ -145,12 +162,12 @@ explicitly requested by this procedure via outputs based on a <template/>!
145
162
  <timestamp-modified/> information and calculate the number of
146
163
  words <words/> of <content/>.
147
164
 
148
- 9. Call the `ase_task_save(id: "<ase-task-id/>",
165
+ 10. Call the `ase_task_save(id: "<ase-task-id/>",
149
166
  text: "<content/>")` of the `ase` MCP server to save the updated
150
167
  task plan content. Do not output anything related to this MCP
151
168
  call.
152
169
 
153
- 10. Only output the following <template/> and continue processing:
170
+ 11. Only output the following <template/> and continue processing:
154
171
 
155
172
  <template>
156
173
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan rebooted**
@@ -244,12 +261,3 @@ explicitly requested by this procedure via outputs based on a <template/>!
244
261
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- hand-off to pre-flight**
245
262
  </template>
246
263
 
247
- - If <result/> matches `OTHER: <text/>` or is any other
248
- unrecognized value:
249
- Treat it as `DONE` (the updated plan is already saved):
250
- only output the following <template/> and then *STOP*.
251
-
252
- <template>
253
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan updated -- done**
254
- </template>
255
-
@@ -71,6 +71,15 @@ explicitly requested by this procedure via outputs based on a <template/>!
71
71
  </template>
72
72
  </if>
73
73
 
74
+ 6. <if condition="<old/> is equal <new/>">
75
+ Only output the following <template/> and then immediately
76
+ *STOP* processing the entire current skill:
77
+
78
+ <template>
79
+ ⧉ **ASE**: ◉ task: **<old/>**, ▶ status: **task unchanged (old and new task id are equal)**
80
+ </template>
81
+ </if>
82
+
74
83
  2. **Perform Operation**:
75
84
 
76
85
  1. Call the `ase_task_rename(old: "<old/>", new: "<new/>")` tool of the