@rse/ase 0.9.58 → 0.9.60

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 (43) hide show
  1. package/dst/ase-hook.js +45 -5
  2. package/dst/ase-markdown.js +1 -1
  3. package/dst/ase-meta.js +1 -1
  4. package/dst/ase-service.js +2 -0
  5. package/dst/ase-setup.js +1 -1
  6. package/dst/ase-sleep.js +3 -3
  7. package/dst/ase-statusline.js +1 -1
  8. package/dst/ase-worktree.js +162 -0
  9. package/dst/ase.js +2 -0
  10. package/package.json +12 -13
  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-code-lint.md +15 -0
  15. package/plugin/agents/ase-docs-proofread.md +15 -0
  16. package/plugin/meta/ase-common-code.md +1 -1
  17. package/plugin/meta/ase-common-task.md +8 -8
  18. package/plugin/meta/ase-control.md +26 -8
  19. package/plugin/meta/ase-dialog.md +4 -2
  20. package/plugin/package.json +4 -4
  21. package/plugin/skills/ase-code-craft/SKILL.md +43 -9
  22. package/plugin/skills/ase-code-craft/help.md +13 -0
  23. package/plugin/skills/ase-code-dissect/SKILL.md +30 -9
  24. package/plugin/skills/ase-code-edit/SKILL.md +472 -0
  25. package/plugin/skills/ase-code-edit/help.md +127 -0
  26. package/plugin/skills/ase-code-lint/SKILL.md +26 -0
  27. package/plugin/skills/ase-code-refactor/SKILL.md +7 -6
  28. package/plugin/skills/ase-code-resolve/SKILL.md +7 -6
  29. package/plugin/skills/ase-docs-proofread/SKILL.md +21 -0
  30. package/plugin/skills/ase-help-skill/catalog.md +1 -0
  31. package/plugin/skills/ase-sync-import/SKILL.md +2 -1
  32. package/plugin/skills/ase-sync-reconcile/SKILL.md +3 -1
  33. package/plugin/skills/ase-task-condense/SKILL.md +13 -13
  34. package/plugin/skills/ase-task-dissect/SKILL.md +6 -5
  35. package/plugin/skills/ase-task-edit/SKILL.md +42 -20
  36. package/plugin/skills/ase-task-edit/help.md +7 -0
  37. package/plugin/skills/ase-task-grill/SKILL.md +4 -4
  38. package/plugin/skills/ase-task-implement/SKILL.md +39 -24
  39. package/plugin/skills/ase-task-implement/help.md +4 -2
  40. package/plugin/skills/ase-task-preflight/SKILL.md +18 -4
  41. package/plugin/skills/ase-task-preflight/help.md +5 -1
  42. package/plugin/skills/ase-task-reboot/SKILL.md +1 -1
  43. package/plugin/skills/ase-task-view/SKILL.md +1 -2
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-code-craft
3
- argument-hint: "[--help|-h] [--auto|-a] [--dry|-d] [--direct|-D] [--quick|-Q] [--next|-n <option>[,...]] [<task-id>:] <feature>"
3
+ argument-hint: "[--help|-h] [--auto|-a] [--dry|-d] [--direct|-D] [--interactive|-i] [--quick|-Q] [--next|-n <option>[,...]] [<task-id>:] <feature>"
4
4
  description: >
5
5
  Craft Source Code:
6
6
  Use when user wants to "create", "add", or "craft" a new feature from scratch.
@@ -24,7 +24,7 @@ Craft Source Code
24
24
 
25
25
  <expand name="getopt"
26
26
  arg1="ase-code-craft"
27
- arg2="--auto|-a --dry|-d --direct|-D --quick|-Q --next|-n=(none|DONE|EDIT|GRILL|PREFLIGHT|IMPLEMENT)...">
27
+ arg2="--auto|-a --dry|-d --direct|-D --interactive|-i --quick|-Q --next|-n=(none|DONE|EDIT|GRILL|PREFLIGHT|IMPLEMENT)...">
28
28
  $ARGUMENTS
29
29
  </expand>
30
30
 
@@ -34,6 +34,11 @@ to `true`, <getopt-option-dry/> to `true`, and <getopt-option-next/> to
34
34
  `IMPLEMENT,DELETE`. Do not output anything.
35
35
  </if>
36
36
 
37
+ <if condition="<getopt-option-interactive/> is equal `true`">
38
+ The `--interactive`/`-i` flag *implies* the `--direct`/`-D` mode: set
39
+ <getopt-option-direct/> to `true`. Do not output anything.
40
+ </if>
41
+
37
42
  <objective>
38
43
  From scratch *craft* the following feature:
39
44
  <feature><getopt-arguments/></feature>
@@ -48,8 +53,9 @@ Procedure
48
53
 
49
54
  <if condition="<getopt-option-direct/> is not equal to 'true'">
50
55
  You *MUST* *NOT* call `Edit`, `Write`, `NotebookEdit`, or any
51
- filesystem-modifying tool during this entire skill. The *only*
52
- permitted way to persist artifacts is via `ase_task_save(...)`.
56
+ filesystem-modifying tool, nor execute any filesystem-modifying
57
+ shell command, during this entire skill. The *only* permitted way
58
+ to persist artifacts is via the `ase_task_save(...)` MCP tool.
53
59
  </if>
54
60
  <else>
55
61
  The `--direct`/`-D` mode applies the crafting *in place*, so STEP 4
@@ -162,7 +168,35 @@ crafting actually demands, and you *MUST* *NOT* call
162
168
  ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **changes directly applied**
163
169
  </template>
164
170
 
165
- 3. Then *IMMEDIATELY* *STOP* all further skill processing. You
171
+ 3. <if condition="<getopt-option-interactive/> is equal `true`">
172
+ Enter the *interactive crafting loop*:
173
+
174
+ <while condition="`true`">
175
+
176
+ 1. In the following, you *MUST* *NOT* use your built-in
177
+ <user-dialog-tool/> tool! Instead, you *MUST* just show a
178
+ custom dialog according to the expanded `custom-dialog`
179
+ definition. You *MUST* closely follow this definition.
180
+
181
+ Ask the user for the next change with the following
182
+ custom dialog:
183
+
184
+ <expand name="custom-dialog" arg1="--other">
185
+ Next Change: What is the next change to craft?
186
+ DONE: Finish the interactive crafting loop
187
+ </expand>
188
+
189
+ 2. If <result/> is `DONE` or `CANCEL`, <break/>.
190
+
191
+ 3. Otherwise <result/> has the format `OTHER: <text/>`: set
192
+ <feature/> to <text/>, then directly craft it and report
193
+ it exactly as specified by the items 1 and 2 above
194
+ (including the CHANGELOG.md entry).
195
+
196
+ </while>
197
+ </if>
198
+
199
+ 4. Then *IMMEDIATELY* *STOP* all further skill processing. You
166
200
  *MUST* *NOT* output anything else in this STEP 4 or after it --
167
201
  *independent* of <ase-project-boxing/>, whose exposure rules
168
202
  are explicitly *overridden* here. Especially, do not output a
@@ -207,16 +241,16 @@ crafting actually demands, and you *MUST* *NOT* call
207
241
  `ase` MCP server and use the `text` field of its response for
208
242
  <timestamp-created/> and <timestamp-modified/> information. Then
209
243
  insert the current <ase-task-id/>, <timestamp-created/>,
210
- <timestamp-modified/>, and <task-kind/> information and calculate
211
- the number of words <words/> of <task-content/>.
244
+ <timestamp-modified/>, and <task-kind/> information.
212
245
 
213
246
  3. You then *MUST* *save* the resulting plan content with the
214
- `ase_task_save(id: "<ase-task-id/>", text: "<task-content/>")`.
247
+ `ase_task_save(id: "<ase-task-id/>", text: "<task-content/>")`
248
+ MCP tool call only -- *NEVER* by executing a shell command.
215
249
 
216
250
  4. Output a hint with the following <template/>:
217
251
 
218
252
  <template>
219
- ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ✪ plan: **<words/>** words, ▶ status: **plan created**
253
+ ⧉ **ASE**: ◉ task: **<ase-task-id/>**, ▶ status: **plan created**
220
254
  </template>
221
255
 
222
256
  5. Directly pass-through control to the next skill:
@@ -10,6 +10,7 @@
10
10
  [`--auto`|`-a`]
11
11
  [`--dry`|`-d`]
12
12
  [`--direct`|`-D`]
13
+ [`--interactive`|`-i`]
13
14
  [`--quick`|`-Q`]
14
15
  [`--next`|`-n` *option*[,...]]
15
16
  [*task-id*:] *feature*
@@ -51,6 +52,12 @@ entirely and applies the change set to the affected artifacts itself.
51
52
  `--next` have no effect, as neither approaches are proposed nor a
52
53
  plan is composed.
53
54
 
55
+ `--interactive`|`-i`:
56
+ Craft *interactively*: implies `--direct` and, once the initial
57
+ *feature* has been applied, repeatedly asks for the *next change*
58
+ with a free-text dialog and immediately applies it in place, too,
59
+ until the user stops the loop by answering `DONE`.
60
+
54
61
  `--quick`|`-Q`:
55
62
  Shorthand alias for `-a -d -n IMPLEMENT,DELETE`: automatically pick
56
63
  the recommended feature approach, compose the plan *without* the
@@ -96,6 +103,12 @@ Craft a feature under a named task and directly hand off to implementation:
96
103
  ❯ /ase-code-craft --next IMPLEMENT auth: add JWT authentication middleware
97
104
  ```
98
105
 
106
+ Craft interactively, applying one change after the other in place:
107
+
108
+ ```text
109
+ ❯ /ase-code-craft -i add a --verbose option to the CLI
110
+ ```
111
+
99
112
  ## SEE ALSO
100
113
 
101
114
  [`ase-code-refactor`](../ase-code-refactor/help.md), [`ase-code-resolve`](../ase-code-resolve/help.md), [`ase-task-edit`](../ase-task-edit/help.md),
@@ -169,7 +169,28 @@ Procedure
169
169
  3. <step id="STEP 3: Detect Target Collisions"
170
170
  condition="<getopt-option-dry/> is not equal `true`">
171
171
 
172
- 1. Determine the *existing worktrees* and *existing branches* by
172
+ 1. Determine the *worktree directory* of every part by calling the
173
+ `ase_worktree_path(id: "<part-id/>", create: true)` tool of the
174
+ `ase` MCP server once per <part-id/> of <parts/> and capturing
175
+ its output into the <part-dir/> of that part.
176
+
177
+ You *MUST* *NEVER* assemble such a path yourself, as only this
178
+ tool rejects a path leading through a symbolic link, through a
179
+ non-directory, or out of the repository -- a path both `git
180
+ worktree add` and `git worktree remove` would otherwise silently
181
+ follow and thereby write outside the repository.
182
+
183
+ <if condition="this tool call fails for any part">
184
+ Only output the following <template/> and then immediately *STOP*
185
+ processing the entire current skill, leaving the working copy and
186
+ *all* existing worktrees and branches untouched:
187
+
188
+ <template>
189
+ ⧉ **ASE**: ✪ skill: **ase-code-dissect**, ▶ ERROR: unsafe worktree directory -- cannot create worktrees
190
+ </template>
191
+ </if>
192
+
193
+ 2. Determine the *existing worktrees* and *existing branches* by
173
194
  running the corresponding commands (taken exactly as given) and
174
195
  capturing their outputs:
175
196
 
@@ -177,11 +198,11 @@ Procedure
177
198
 
178
199
  `git branch --list`
179
200
 
180
- 2. Set <collisions/> to all <part-id/> of <parts/> for which either
181
- a worktree directory `<repo-root/>/.ase/worktree/<part-id/>` or
182
- a branch `<part-id/>` already exists.
201
+ 3. Set <collisions/> to all <part-id/> of <parts/> for which either
202
+ the worktree directory <part-dir/> or a branch `<part-id/>`
203
+ already exists.
183
204
 
184
- 3. <if condition="<collisions/> is not empty AND <getopt-option-force/> is not equal `true`">
205
+ 4. <if condition="<collisions/> is not empty AND <getopt-option-force/> is not equal `true`">
185
206
  Only output the following <template/> -- with <collisions/>
186
207
  rendered as a comma-separated list of code spans -- and then
187
208
  immediately *STOP* processing the entire current skill, leaving
@@ -202,13 +223,13 @@ Procedure
202
223
  </ase-tpl-hint>
203
224
  </if>
204
225
 
205
- 4. <if condition="<collisions/> is not empty AND <getopt-option-force/> is equal `true`">
226
+ 5. <if condition="<collisions/> is not empty AND <getopt-option-force/> is equal `true`">
206
227
  *Remove* every colliding target by running the corresponding
207
228
  commands (taken exactly as given) per colliding <part-id/>, and
208
229
  silently ignore the failure of an individual command when the
209
230
  corresponding worktree or branch does not exist:
210
231
 
211
- `git worktree remove --force "<repo-root/>/.ase/worktree/<part-id/>"`
232
+ `git worktree remove --force "<part-dir/>"`
212
233
 
213
234
  `git worktree prune`
214
235
 
@@ -255,7 +276,7 @@ Procedure
255
276
  git-ignored, so the worktree itself never shows up as a
256
277
  change:
257
278
 
258
- `git worktree add "<repo-root/>/.ase/worktree/<part-id/>"`
279
+ `git worktree add "<part-dir/>"`
259
280
 
260
281
  <if condition="this command fails">
261
282
  Only output the following <template/>, then *continue* with
@@ -270,7 +291,7 @@ Procedure
270
291
  4. Apply the patch *inside* the freshly created worktree by
271
292
  running the corresponding command (taken exactly as given):
272
293
 
273
- `git -C "<repo-root/>/.ase/worktree/<part-id/>" apply --whitespace=nowarn "<tmp-dir/>/ase-dissect-<part-id/>.patch"`
294
+ `git -C "<part-dir/>" apply --whitespace=nowarn "<tmp-dir/>/ase-dissect-<part-id/>.patch"`
274
295
 
275
296
  <if condition="this command fails">
276
297
  Only output the following <template/>, then *continue* with