@rse/ase 0.9.53 → 0.9.55

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 (31) hide show
  1. package/dst/ase-log.js +5 -0
  2. package/dst/ase-service.js +45 -6
  3. package/dst/ase-task.js +117 -18
  4. package/package.json +2 -2
  5. package/plugin/.claude-plugin/plugin.json +1 -1
  6. package/plugin/.codex-plugin/plugin.json +1 -1
  7. package/plugin/.github/plugin/plugin.json +1 -1
  8. package/plugin/meta/ase-common-code.md +34 -0
  9. package/plugin/meta/ase-common-task.md +3 -2
  10. package/plugin/meta/ase-constitution.md +6 -1
  11. package/plugin/meta/ase-format-task.md +96 -11
  12. package/plugin/package.json +1 -1
  13. package/plugin/skills/ase-code-craft/SKILL.md +8 -7
  14. package/plugin/skills/ase-code-lint/help.md +2 -2
  15. package/plugin/skills/ase-code-refactor/SKILL.md +8 -7
  16. package/plugin/skills/ase-code-resolve/SKILL.md +8 -7
  17. package/plugin/skills/ase-meta-config/help.md +3 -3
  18. package/plugin/skills/ase-meta-quotes/help.md +4 -3
  19. package/plugin/skills/ase-task-condense/SKILL.md +6 -5
  20. package/plugin/skills/ase-task-condense/help.md +1 -1
  21. package/plugin/skills/ase-task-edit/SKILL.md +26 -5
  22. package/plugin/skills/ase-task-grill/SKILL.md +8 -4
  23. package/plugin/skills/ase-task-grill/help.md +2 -1
  24. package/plugin/skills/ase-task-implement/SKILL.md +150 -5
  25. package/plugin/skills/ase-task-implement/help.md +40 -1
  26. package/plugin/skills/ase-task-list/SKILL.md +51 -15
  27. package/plugin/skills/ase-task-list/help.md +49 -6
  28. package/plugin/skills/ase-task-preflight/SKILL.md +15 -3
  29. package/plugin/skills/ase-task-preflight/help.md +9 -1
  30. package/plugin/skills/ase-task-reboot/SKILL.md +1 -1
  31. package/plugin/skills/ase-task-view/SKILL.md +23 -2
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ase-task-list
3
- argument-hint: "[--help|-h] [--verbose|-v]"
3
+ argument-hint: "[--help|-h] [--verbose|-v] [--include|-i=<state>[,...]] [--exclude|-e=<state>[,...]]"
4
4
  description: >
5
5
  List all available task ids.
6
6
  Use when user wants to see all tasks.
@@ -19,7 +19,7 @@ List Task Plans
19
19
 
20
20
  <expand name="getopt"
21
21
  arg1="ase-task-list"
22
- arg2="--verbose|-v">
22
+ arg2="--verbose|-v --include|-i=none --exclude|-e=COMPLETED,CANCELLED">
23
23
  $ARGUMENTS
24
24
  </expand>
25
25
 
@@ -30,13 +30,40 @@ List Task Plans
30
30
  Procedure
31
31
  ---------
32
32
 
33
- 1. Call the `ase_task_list(verbose: <getopt-option-verbose/>)` tool from
33
+ 1. Determine the *effective state set* <states/>, i.e., the lifecycle
34
+ states a task plan has to be in to be listed at all. For this, parse
35
+ <getopt-option-include/> and <getopt-option-exclude/> as
36
+ comma-separated token lists, silently dropping the `none` sentinel
37
+ and any empty token. If a token <token/> is *not* one of the eight
38
+ `Status:` values `DRAFTED`, `REJECTED`, `APPROVED`, `DEFERRED`,
39
+ `STARTED`, `BLOCKED`, `COMPLETED`, or `CANCELLED`, only output the
40
+ following <template/> and then *STOP* processing the entire current
41
+ skill:
42
+
43
+ <template>
44
+ ⧉ **ASE**: ✪ skill: **ase-task-list**, ▶ ERROR: invalid state: **<token/>**
45
+ </template>
46
+
47
+ Otherwise set <states/> to *all* eight states if both lists are
48
+ empty, to the *include* list if only it is non-empty, to all eight
49
+ *minus* the *exclude* list if only it is non-empty, and to the
50
+ *include* list *minus* the *exclude* list if both are non-empty. If
51
+ the resulting <states/> is *empty*, only output the following
52
+ <template/> and then *STOP* processing the entire current skill:
53
+
54
+ <template>
55
+ ⧉ **ASE**: ✪ skill: **ase-task-list**, ▶ ERROR: options `--include` and `--exclude` cancel out to an empty state set
56
+ </template>
57
+
58
+ 2. Call the `ase_task_list(verbose: <getopt-option-verbose/>)` tool from
34
59
  the `ase` MCP server. The result is a structured object with a
35
- `tasks` array where each entry has an `id` field, and -- if
36
- <getopt-option-verbose/> is `true` -- additionally an `mtime` field
37
- (formatted as `YYYY-MM-DD HH:MM`).
60
+ `tasks` array where each entry has an `id` and a `status` field, and
61
+ -- if <getopt-option-verbose/> is `true` -- additionally an `mtime`
62
+ field (formatted as `YYYY-MM-DD HH:MM`). *Drop* from the `tasks`
63
+ array every entry whose `status` is *not* contained in <states/>. Do
64
+ not output anything.
38
65
 
39
- 2. If the `tasks` array is empty, output the following <template/>:
66
+ 3. If the `tasks` array is empty, output the following <template/>:
40
67
 
41
68
  <template>
42
69
  ⧉ **ASE**: ◉ tasks: *(none)*
@@ -45,16 +72,16 @@ Procedure
45
72
  Else, dispatch on <getopt-option-verbose/>:
46
73
 
47
74
  - If <getopt-option-verbose/> is `true`, output the list of tasks
48
- with the following <template/>, where each <id/> and <mtime/>
49
- correspond to an entry in the task list:
75
+ with the following <template/>, where each <id/>, <status/>, and
76
+ <mtime/> correspond to an entry in the task list:
50
77
 
51
78
  <template>
52
79
  ⧉ **ASE**: ◉ tasks:
53
80
 
54
- | *Task Id* | *Last Modified* |
55
- |-----------|--------------------|
56
- | **<id/>** | `<mtime/>` |
57
- | [...] | [...] |
81
+ | *Task Id* | *Status* | *Last Modified* |
82
+ |-----------|-------------|--------------------|
83
+ | **<id/>** | `<status/>` | `<mtime/>` |
84
+ | [...] | [...] | [...] |
58
85
 
59
86
  </template>
60
87
 
@@ -72,7 +99,7 @@ Procedure
72
99
 
73
100
  </template>
74
101
 
75
- 3. Finally, give the closing hints by expanding the following (which,
102
+ 4. Finally, give the closing hints by expanding the following (which,
76
103
  depending on the configured <ase-guidance-level/>, may each expand
77
104
  into nothing and hence emit no output at all):
78
105
 
@@ -81,6 +108,11 @@ Procedure
81
108
  Use `/ase-task-id <id>` to switch to one of the listed tasks and `/ase-task-view` to inspect its plan.
82
109
  </ase-tpl-hint>
83
110
  </if>
111
+ <elseif condition="entries were dropped by the state filtering of step 2">
112
+ <ase-tpl-hint level="normal">
113
+ All task plans were filtered out by the effective state set -- use `/ase-task-list --exclude none` to list them regardless of their status.
114
+ </ase-tpl-hint>
115
+ </elseif>
84
116
  <else>
85
117
  <ase-tpl-hint level="normal">
86
118
  No task plan exists yet -- use `/ase-task-edit` to create one through a conversational loop.
@@ -89,7 +121,11 @@ Procedure
89
121
 
90
122
  <if condition="<getopt-option-verbose/> is not equal `true`">
91
123
  <ase-tpl-hint level="verbose">
92
- Use `/ase-task-list --verbose` to additionally show the last-modified timestamp of each task plan.
124
+ Use `/ase-task-list --verbose` to additionally show the status and the last-modified timestamp of each task plan.
93
125
  </ase-tpl-hint>
94
126
  </if>
95
127
 
128
+ <ase-tpl-hint level="verbose">
129
+ Use `/ase-task-list --include`/`--exclude` to narrow the listing to certain lifecycle states, e.g. `--include STARTED,BLOCKED`.
130
+ </ase-tpl-hint>
131
+
@@ -8,35 +8,78 @@
8
8
  `ase-task-list`
9
9
  [`--help`|`-h`]
10
10
  [`--verbose`|`-v`]
11
+ [`--include`|`-i`=*state*[`,`...]]
12
+ [`--exclude`|`-e`=*state*[`,`...]]
11
13
 
12
14
  ## DESCRIPTION
13
15
 
14
16
  The `ase-task-list` skill lists all available *task ids* in the
15
17
  current project by calling the `ase_task_list` MCP tool. In the
16
18
  default mode, only the task ids are rendered as a single-column
17
- Markdown table. In verbose mode, the last-modified timestamp of
18
- each task plan is rendered as an additional column.
19
+ Markdown table. In verbose mode, the lifecycle status and the
20
+ last-modified timestamp of each task plan are rendered as additional
21
+ columns.
22
+
23
+ The listing is restricted to an *effective state set*, derived from the
24
+ `Status:` frontmatter key of each task plan (which defaults to `DRAFTED`
25
+ for a plan carrying no such key): with `--include` only, exactly the
26
+ listed states are shown; with `--exclude` only, all states except the
27
+ listed ones; with both, the included ones minus the excluded ones. An
28
+ unknown state, or a combination which cancels out to an empty set,
29
+ aborts the skill with an error. By default,
30
+ `--exclude COMPLETED,CANCELLED` is in effect, so finished and
31
+ abandoned task plans stay out of the way. The eight states are:
32
+
33
+ ```text
34
+ DRAFTED APPROVED STARTED COMPLETED
35
+ REJECTED DEFERRED BLOCKED CANCELLED
36
+ ```
19
37
 
20
38
  ## OPTIONS
21
39
 
22
40
  `--verbose`|`-v`:
23
- Render an additional `Last Modified` column with the
24
- `YYYY-MM-DD HH:MM` timestamp of each task plan.
41
+ Render an additional `Status` column with the lifecycle state and an
42
+ additional `Last Modified` column with the `YYYY-MM-DD HH:MM`
43
+ timestamp of each task plan.
44
+
45
+ `--include`|`-i`=*state*[`,`...]:
46
+ Restrict the listed task plans to the given comma-separated list of
47
+ lifecycle states (e.g. `STARTED,BLOCKED`). Without this option, all
48
+ eight states are listed. The `none` sentinel selects no state at all.
49
+
50
+ `--exclude`|`-e`=*state*[`,`...]:
51
+ Remove the given comma-separated list of lifecycle states from the
52
+ listed task plans. Applied *after* `--include`, so
53
+ `-i DRAFTED,STARTED -e STARTED` lists `DRAFTED` only. Defaults to
54
+ `COMPLETED,CANCELLED`; pass `--exclude none` to suppress the
55
+ default and list task plans in every state.
25
56
 
26
57
  ## EXAMPLES
27
58
 
28
- List all task ids:
59
+ List all unfinished task ids:
29
60
 
30
61
  ```text
31
62
  ❯ /ase-task-list
32
63
  ```
33
64
 
34
- List all task ids together with their last-modified timestamps:
65
+ List all task ids together with their status and last-modified timestamps:
35
66
 
36
67
  ```text
37
68
  ❯ /ase-task-list --verbose
38
69
  ```
39
70
 
71
+ List the task ids of every task plan, including the finished ones:
72
+
73
+ ```text
74
+ ❯ /ase-task-list --exclude none
75
+ ```
76
+
77
+ List only the task ids of the task plans currently under work:
78
+
79
+ ```text
80
+ ❯ /ase-task-list --include STARTED,BLOCKED
81
+ ```
82
+
40
83
  ## SEE ALSO
41
84
 
42
85
  [`ase-task-id`](../ase-task-id/help.md), [`ase-task-view`](../ase-task-view/help.md), [`ase-task-edit`](../ase-task-edit/help.md),
@@ -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
@@ -82,16 +88,22 @@ Procedure
82
88
 
83
89
  </template>
84
90
 
85
- 3. <if condition="<task-content/> contains '⚙ Modified:'">
91
+ 3. <if condition="the frontmatter of <task-content/> carries a `Modified:` key">
86
92
  Update <timestamp-modified/> with the current time in
87
93
  ISO-style format, which has to be determined by calling the
88
94
  `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the `ase`
89
95
  MCP server and use the `text` field of its response. Update
90
- the `⚙ Modified: ...` line of <task-content/> with the new
91
- `⚙ Modified: <timestamp-modified/>`.
96
+ the `Modified: ...` frontmatter key of <task-content/> with the
97
+ new <timestamp-modified/> value.
92
98
  Do not output anything.
93
99
  </if>
94
100
 
101
+ Additionally *add* the value `preflighted` to the `Properties:`
102
+ frontmatter key of <task-content/> if it is still absent, keeping
103
+ all already present values and *creating* the whole key (with the
104
+ single value `preflighted`) if the plan carries none. Do not
105
+ output anything.
106
+
95
107
  4. Finally, call the `ase_task_save(id: "<ase-task-id/>",
96
108
  text: "<task-content/>")` tool of the `ase` MCP server to save the updated
97
109
  task plan content. Calculate the number of words <words/> of
@@ -16,9 +16,17 @@ The `ase-task-preflight` skill performs a *preflight* (dry-run,
16
16
  test-drive) of the *implementation* of a task plan by creating a
17
17
  draft for a corresponding, complete *artifact change set* in
18
18
  *unified diff* format. The draft is appended to the task plan as
19
- an `IMPLEMENTATION DRAFT` section (replacing any previous draft).
19
+ an `IMPLEMENTATION DRAFT` section (replacing any previous draft) and
20
+ the plan's `Properties:` frontmatter key gains the value `preflighted`.
20
21
  No source files are modified.
21
22
 
23
+ The *kind of change* stated by the plan's `Kind:` frontmatter key
24
+ (`CRAFTING`, `REFACTORING`, or `RESOLVING`) selects which
25
+ *operation-specific tenet set* of the **ASE Tenets** is internalized
26
+ before the draft is produced, in addition to the always applying
27
+ **GENERIC TENETS**. If a plan carries no such key, the kind is
28
+ *inferred* from the plan content, defaulting to `CRAFTING`.
29
+
22
30
  After the preflight, the user is asked whether to stop, hand
23
31
  off to `ase-task-edit`, or hand off to `ase-task-implement`,
24
32
  unless `--next` pre-selects this choice.
@@ -126,7 +126,7 @@ Procedure
126
126
  (append extracted text to instruction).
127
127
  </if>
128
128
 
129
- 6. <if condition="<task-content/> contains '⎈ Created: <text/>'">
129
+ 6. <if condition="the frontmatter of <task-content/> carries a `Created: <text/>` key">
130
130
  Set <timestamp-created><text/></timestamp-created> (set
131
131
  timestamp-created to extracted text)
132
132
  </if>
@@ -78,6 +78,27 @@ Procedure
78
78
 
79
79
  2. <if condition="<task-content/> is not empty">
80
80
  Treat <task-content/> as *verbatim* Markdown.
81
+
82
+ For the *rendering only*, drop the leading *frontmatter* block --
83
+ both `---` delimiters and all of their keys -- and instead place
84
+ the following column-aligned glyph lines *before* the
85
+ `# TASK: <title/>` heading, separated from it by an empty line,
86
+ omitting the line of every key absent from the frontmatter. The
87
+ glyph lines *MUST* stay *above* the heading, exactly where the
88
+ frontmatter block sits in the plan file, and *MUST NOT* be moved
89
+ below it. This keeps the `---` delimiters from rendering as a
90
+ horizontal rule plus a *setext heading*. This rewrite is
91
+ *display-only* and *MUST NOT* change <task-content/> itself:
92
+
93
+ <format>
94
+ ◉ **Id:** <task-id/>
95
+ ⎈ **Created:** <timestamp-created/>
96
+ ⚙ **Modified:** <timestamp-modified/>
97
+ ◐ **Status:** <task-status/>
98
+ ⚑ **Properties:** <task-properties/>
99
+ ☯ **Kind:** <task-kind/>
100
+ </format>
101
+
81
102
  *Render plan*: Only output the following <template/>. If
82
103
  <getopt-option-full/> is *not* `true`, <task-content/> is longer than
83
104
  90 lines, and a `## IMPLEMENTATION DRAFT` section (from the
@@ -87,9 +108,9 @@ Procedure
87
108
  Use the following <template/>:
88
109
 
89
110
  <template>
90
- <ase-tpl-head title="TASK"/>
111
+ <ase-tpl-head title="TASK" subtitle="<task-id/>"/>
91
112
  <task-content/>
92
- <ase-tpl-foot title="TASK"/>
113
+ <ase-tpl-foot title="TASK" subtitle="<task-id/>"/>
93
114
  </template>
94
115
  </if>
95
116