@rse/ase 2.0.3 → 2.0.4

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 (187) hide show
  1. package/dst/ase-hook.js +1 -1
  2. package/dst/ase-lib-version.js +14 -5
  3. package/dst/ase-man-catalog.js +229 -0
  4. package/dst/ase-man-render.js +278 -0
  5. package/dst/ase-man-tui.js +636 -0
  6. package/dst/ase-man.js +33 -27
  7. package/dst/ase-setup.js +2 -2
  8. package/dst/ase-spec.js +103 -20
  9. package/dst/ase-task-board-filter.js +5 -4
  10. package/dst/ase-task-board-web-client.js +26 -26
  11. package/dst/man/ase-agent-adhoc.md +1165 -0
  12. package/dst/man/ase-agent-condenser.md +383 -0
  13. package/dst/man/ase-agent-editor.md +441 -0
  14. package/dst/man/ase-agent-estimator.md +477 -0
  15. package/dst/man/ase-agent-fleet.md +358 -0
  16. package/dst/man/ase-agent-implementer.md +521 -0
  17. package/dst/man/ase-agent-integrator.md +449 -0
  18. package/dst/man/ase-agent-qualifier.md +426 -0
  19. package/dst/man/ase-agent-rebooter.md +384 -0
  20. package/dst/man/ase-agent-relay.md +262 -0
  21. package/dst/man/ase-agent-researcher.md +478 -0
  22. package/dst/man/ase-agent.md +628 -0
  23. package/dst/man/ase-artifact-list.md +57 -0
  24. package/dst/man/ase-artifact-name.md +56 -0
  25. package/dst/man/ase-artifact.md +92 -0
  26. package/dst/man/ase-config-delete.md +74 -0
  27. package/dst/man/ase-config-edit.md +83 -0
  28. package/dst/man/ase-config-get.md +70 -0
  29. package/dst/man/ase-config-init.md +110 -0
  30. package/dst/man/ase-config-list.md +68 -0
  31. package/dst/man/ase-config-set.md +92 -0
  32. package/dst/man/ase-config.md +426 -0
  33. package/dst/man/ase-hook-permission-request.md +61 -0
  34. package/dst/man/ase-hook-pre-tool-use.md +96 -0
  35. package/dst/man/ase-hook-session-end.md +71 -0
  36. package/dst/man/ase-hook-session-persona.md +65 -0
  37. package/dst/man/ase-hook-session-start.md +184 -0
  38. package/dst/man/ase-hook-stop.md +52 -0
  39. package/dst/man/ase-hook-user-prompt-submit.md +54 -0
  40. package/dst/man/ase-hook.md +93 -0
  41. package/dst/man/ase-man.md +195 -0
  42. package/dst/man/ase-mcp.md +102 -0
  43. package/dst/man/ase-service-log.md +59 -0
  44. package/dst/man/ase-service-send.md +60 -0
  45. package/dst/man/ase-service-start.md +93 -0
  46. package/dst/man/ase-service-status.md +58 -0
  47. package/dst/man/ase-service-stop.md +52 -0
  48. package/dst/man/ase-service.md +124 -0
  49. package/dst/man/ase-setup-disable.md +67 -0
  50. package/dst/man/ase-setup-enable.md +66 -0
  51. package/dst/man/ase-setup-install.md +116 -0
  52. package/dst/man/ase-setup-mcp.md +213 -0
  53. package/dst/man/ase-setup-status.md +101 -0
  54. package/dst/man/ase-setup-statusline.md +162 -0
  55. package/dst/man/ase-setup-telemetry.md +166 -0
  56. package/dst/man/ase-setup-uninstall.md +85 -0
  57. package/dst/man/ase-setup-update.md +117 -0
  58. package/dst/man/ase-setup.md +156 -0
  59. package/dst/man/ase-spec-export.md +99 -0
  60. package/dst/man/ase-spec-init.md +57 -0
  61. package/dst/man/ase-spec-lint.md +74 -0
  62. package/dst/man/ase-spec-preview.md +57 -0
  63. package/dst/man/ase-spec.md +85 -0
  64. package/dst/man/ase-statusline.md +330 -0
  65. package/dst/man/ase-task-assign.md +138 -0
  66. package/dst/man/ase-task-board.md +651 -0
  67. package/dst/man/ase-task-delete.md +46 -0
  68. package/dst/man/ase-task-edit.md +73 -0
  69. package/dst/man/ase-task-idscheme.md +92 -0
  70. package/dst/man/ase-task-lifecycle.md +92 -0
  71. package/dst/man/ase-task-list.md +86 -0
  72. package/dst/man/ase-task-load.md +48 -0
  73. package/dst/man/ase-task-newid.md +100 -0
  74. package/dst/man/ase-task-purge.md +49 -0
  75. package/dst/man/ase-task-rename.md +69 -0
  76. package/dst/man/ase-task-request.md +108 -0
  77. package/dst/man/ase-task-save.md +78 -0
  78. package/dst/man/ase-task-status.md +79 -0
  79. package/dst/man/ase-task-store.md +377 -0
  80. package/dst/man/ase-task-view.md +50 -0
  81. package/dst/man/ase-task.md +335 -0
  82. package/dst/man/ase-util-compat.md +38 -0
  83. package/dst/man/ase-util-diagram.md +140 -0
  84. package/dst/man/ase-util-meta.md +68 -0
  85. package/dst/man/ase-util-metric.md +74 -0
  86. package/dst/man/ase-util-mint.md +85 -0
  87. package/dst/man/ase-util-worktree.md +109 -0
  88. package/dst/man/ase-util.md +81 -0
  89. package/dst/man/ase.md +228 -0
  90. package/package.json +12 -17
  91. package/plugin/.claude-plugin/plugin.json +1 -1
  92. package/plugin/.codex-plugin/plugin.json +1 -1
  93. package/plugin/.github/plugin/plugin.json +1 -1
  94. package/plugin/agents/ase-code-lint.md +3 -3
  95. package/plugin/agents/ase-docs-proofread.md +3 -3
  96. package/plugin/agents/ase-docs-refine.md +3 -3
  97. package/plugin/agents/ase-spec-lint.md +338 -0
  98. package/plugin/mods/claude-code.d.ts +26 -3
  99. package/plugin/skills/ase-help-intent/data.md +180 -1
  100. package/plugin/skills/ase-help-skill/catalog.md +1 -0
  101. package/plugin/skills/ase-meta-workflow/workflow.txt +2 -0
  102. package/plugin/skills/ase-repo-commit/SKILL.md +1 -0
  103. package/plugin/skills/ase-repo-merge/SKILL.md +1 -0
  104. package/plugin/skills/ase-spec-edit/SKILL.md +3 -3
  105. package/plugin/skills/ase-spec-edit/help.md +1 -1
  106. package/plugin/skills/ase-spec-lint/SKILL.md +695 -0
  107. package/plugin/skills/ase-spec-lint/help.md +171 -0
  108. package/plugin/skills/ase-task-implement/SKILL.md +24 -6
  109. package/plugin/skills/ase-task-implement/help.md +11 -1
  110. package/dst/man/ase-agent-adhoc.1 +0 -515
  111. package/dst/man/ase-agent-condenser.1 +0 -193
  112. package/dst/man/ase-agent-editor.1 +0 -212
  113. package/dst/man/ase-agent-estimator.1 +0 -214
  114. package/dst/man/ase-agent-fleet.1 +0 -185
  115. package/dst/man/ase-agent-implementer.1 +0 -233
  116. package/dst/man/ase-agent-integrator.1 +0 -213
  117. package/dst/man/ase-agent-qualifier.1 +0 -214
  118. package/dst/man/ase-agent-rebooter.1 +0 -193
  119. package/dst/man/ase-agent-relay.1 +0 -128
  120. package/dst/man/ase-agent-researcher.1 +0 -217
  121. package/dst/man/ase-agent.1 +0 -264
  122. package/dst/man/ase-artifact-list.1 +0 -38
  123. package/dst/man/ase-artifact-name.1 +0 -39
  124. package/dst/man/ase-artifact.1 +0 -56
  125. package/dst/man/ase-config-delete.1 +0 -45
  126. package/dst/man/ase-config-edit.1 +0 -48
  127. package/dst/man/ase-config-get.1 +0 -46
  128. package/dst/man/ase-config-init.1 +0 -60
  129. package/dst/man/ase-config-list.1 +0 -42
  130. package/dst/man/ase-config-set.1 +0 -52
  131. package/dst/man/ase-config.1 +0 -231
  132. package/dst/man/ase-hook-permission-request.1 +0 -36
  133. package/dst/man/ase-hook-pre-tool-use.1 +0 -59
  134. package/dst/man/ase-hook-session-end.1 +0 -47
  135. package/dst/man/ase-hook-session-persona.1 +0 -37
  136. package/dst/man/ase-hook-session-start.1 +0 -81
  137. package/dst/man/ase-hook-stop.1 +0 -34
  138. package/dst/man/ase-hook-user-prompt-submit.1 +0 -34
  139. package/dst/man/ase-hook.1 +0 -51
  140. package/dst/man/ase-man.1 +0 -67
  141. package/dst/man/ase-mcp.1 +0 -61
  142. package/dst/man/ase-service-log.1 +0 -43
  143. package/dst/man/ase-service-send.1 +0 -47
  144. package/dst/man/ase-service-start.1 +0 -54
  145. package/dst/man/ase-service-status.1 +0 -46
  146. package/dst/man/ase-service-stop.1 +0 -37
  147. package/dst/man/ase-service.1 +0 -85
  148. package/dst/man/ase-setup-disable.1 +0 -44
  149. package/dst/man/ase-setup-enable.1 +0 -45
  150. package/dst/man/ase-setup-install.1 +0 -73
  151. package/dst/man/ase-setup-mcp.1 +0 -124
  152. package/dst/man/ase-setup-status.1 +0 -60
  153. package/dst/man/ase-setup-statusline.1 +0 -92
  154. package/dst/man/ase-setup-telemetry.1 +0 -92
  155. package/dst/man/ase-setup-uninstall.1 +0 -59
  156. package/dst/man/ase-setup-update.1 +0 -64
  157. package/dst/man/ase-setup.1 +0 -93
  158. package/dst/man/ase-spec-export.1 +0 -62
  159. package/dst/man/ase-spec-lint.1 +0 -40
  160. package/dst/man/ase-spec-preview.1 +0 -40
  161. package/dst/man/ase-spec.1 +0 -46
  162. package/dst/man/ase-statusline.1 +0 -189
  163. package/dst/man/ase-task-assign.1 +0 -71
  164. package/dst/man/ase-task-board.1 +0 -384
  165. package/dst/man/ase-task-delete.1 +0 -35
  166. package/dst/man/ase-task-edit.1 +0 -46
  167. package/dst/man/ase-task-idscheme.1 +0 -65
  168. package/dst/man/ase-task-lifecycle.1 +0 -57
  169. package/dst/man/ase-task-list.1 +0 -47
  170. package/dst/man/ase-task-load.1 +0 -36
  171. package/dst/man/ase-task-newid.1 +0 -61
  172. package/dst/man/ase-task-purge.1 +0 -37
  173. package/dst/man/ase-task-rename.1 +0 -44
  174. package/dst/man/ase-task-request.1 +0 -61
  175. package/dst/man/ase-task-save.1 +0 -48
  176. package/dst/man/ase-task-status.1 +0 -55
  177. package/dst/man/ase-task-store.1 +0 -194
  178. package/dst/man/ase-task-view.1 +0 -40
  179. package/dst/man/ase-task.1 +0 -160
  180. package/dst/man/ase-util-compat.1 +0 -25
  181. package/dst/man/ase-util-diagram.1 +0 -76
  182. package/dst/man/ase-util-meta.1 +0 -45
  183. package/dst/man/ase-util-metric.1 +0 -54
  184. package/dst/man/ase-util-mint.1 +0 -59
  185. package/dst/man/ase-util-worktree.1 +0 -72
  186. package/dst/man/ase-util.1 +0 -50
  187. package/dst/man/ase.1 +0 -124
@@ -0,0 +1,335 @@
1
+ # ase-task(1) -- Manage Persisted Task Plans
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase task`
6
+ \[`-h`|`--help`\]
7
+ *command*
8
+ \[*options* \[...\]\]
9
+ \[*args* \[...\]\]
10
+
11
+ ## DESCRIPTION
12
+
13
+ **ase task** manages the persisted *task plans* of the current project.
14
+ A task plan is a Markdown document in the textual *ASE* task format
15
+ (see `ase util meta format-task`): a frontmatter block with the keys
16
+ `Type`, `Id`, `Created`, `Modified`, `Group`, `Phase`, `After`,
17
+ `Status`, `Assignee`, `Kind`, `Effort`, `Tags`, `Source`, `Changeset`,
18
+ and `Target`, followed by the plan body and optional attachment blocks.
19
+
20
+ The optional `Effort` key carries the estimated effort of the task as
21
+ *size* *hash*, with *size* one of the T-shirt sizes `XS`, `S`, `M`, `L`,
22
+ or `XL` (see `project.task.effort.scale` in `ase-config`(1)) and *hash*
23
+ the content hash of the plan body the size was given for. The task
24
+ store drops a *stale* `Effort` (whose *hash* no longer matches the
25
+ body, ignoring checkboxes, whitespace, and cancelled or deferred
26
+ bullet-points) on load and save, and stamps an `Effort` given without
27
+ *hash* with the content hash of the body on save.
28
+
29
+ All commands are forwarded to the *task store* selected by the
30
+ `project.task.store.url` configuration (see **TASK STORES** below). The
31
+ project is identified in the task store by `project.id` (default: the
32
+ sanitized basename of the project root, i.e., the Git top-level
33
+ directory, or the current working directory outside a Git working
34
+ tree).
35
+
36
+ The `Status` of the task plans follows the *task lifecycle model* of
37
+ the project (see **TASK LIFECYCLE MODELS** below), and new task ids
38
+ are generated after the *task id scheme* of the project (see
39
+ **TASK ID SCHEMES** below).
40
+
41
+ Without a *command*, the usage information is shown and the command
42
+ exits with status `1`.
43
+
44
+ ## OPTIONS
45
+
46
+ - \[`-h`|`--help`\]:
47
+ Show usage information of `ase task`, including the list of all
48
+ sub-commands, and exit.
49
+
50
+ ## COMMANDS
51
+
52
+ - `ase task list` \[`-v`|`--verbose`\] \[`-i`|`--include` *states*\] \[`-e`|`--exclude` *states*\]:
53
+ List the persisted task ids. See `ase-task-list`(1).
54
+
55
+ - `ase task status` \[*id*\[`:`\]\] \[*status*\]:
56
+ Get or set the lifecycle status of a task. See `ase-task-status`(1).
57
+
58
+ - `ase task request` *id* *name* \[*prompt* ...\]:
59
+ Request the processing of a task by a prompt. See
60
+ `ase-task-request`(1).
61
+
62
+ - `ase task assign` \[`-s`|`--session` *id*\] \[*id*\[`:`\]\] *assignee*:
63
+ Assign a task (and handle the AI usage window of a session). See
64
+ `ase-task-assign`(1).
65
+
66
+ - `ase task load` *id*:
67
+ Write a task plan to standard output. See `ase-task-load`(1).
68
+
69
+ - `ase task view` *id*:
70
+ Show a task plan in the pager. See `ase-task-view`(1).
71
+
72
+ - `ase task edit` *id*:
73
+ Edit a task plan in the editor. See `ase-task-edit`(1).
74
+
75
+ - `ase task save` \[`-c`|`--create`\] *id*:
76
+ Save a task plan read from standard input. See `ase-task-save`(1).
77
+
78
+ - `ase task delete` *id*:
79
+ Delete a task plan. See `ase-task-delete`(1).
80
+
81
+ - `ase task rename` *old-id* *new-id*:
82
+ Rename a task plan and its references. See `ase-task-rename`(1).
83
+
84
+ - `ase task newid` \[`-p`|`--proposal` *id*\] \[`-t`|`--taken` *ids*\] \[`-v`|`--verbose`\] \[*title*\]:
85
+ Print the next free task id. See `ase-task-newid`(1).
86
+
87
+ - `ase task purge` \[*age*\]:
88
+ Remove all task plans older than an age. See `ase-task-purge`(1).
89
+
90
+ - `ase task lifecycle` \[*name*\]:
91
+ Get or set the task lifecycle model of the project. See
92
+ `ase-task-lifecycle`(1).
93
+
94
+ - `ase task idscheme` \[*scheme*\]:
95
+ Get or set the task id scheme of the project. See
96
+ `ase-task-idscheme`(1).
97
+
98
+ - `ase task store` *command* \[...\]:
99
+ Manage the per-user task store REST API server. See
100
+ `ase-task-store`(1).
101
+
102
+ - `ase task board` \[*options*\]:
103
+ Show the interactive task board in the terminal or the browser. See
104
+ `ase-task-board`(1).
105
+
106
+ ## TASK IDS
107
+
108
+ A task id consists of the characters `A-Z`, `a-z`, `0-9`, `#`, `_`,
109
+ and `-`, where it has to start with a letter, a digit, or `#`, i.e.,
110
+ it has to match `[A-Za-z0-9#][A-Za-z0-9#_-]*`. The id `default` is the
111
+ reserved id of the default task of a session. As `#` starts a comment
112
+ in the shell, an id containing `#` has to be quoted on the command
113
+ line, e.g., `ase task view "#7"`.
114
+
115
+ ## TASK STORES
116
+
117
+ The task store is selected by the `project.task.store.url`
118
+ configuration URL (see `ase-config`(1)):
119
+
120
+ - `ase:`*path*:
121
+ The built-in file-based storage plugin, running in-process, storing
122
+ each plan as a file `TASK-`*id*`.md` directly in the directory
123
+ *path*, which is resolved relative to the project root (default:
124
+ `ase:./.ase/task`).
125
+
126
+ On the `project` and `task:`*id* scopes, *path* must not escape the
127
+ project root (also not through symbolic links), as a cloned
128
+ repository could otherwise direct task writes anywhere; a directory
129
+ outside of it is accepted on the `user` or `session` scope only. The
130
+ lifecycle model and task id scheme of a local task store always
131
+ follow `project.task.lifecycle` and `project.task.idscheme`.
132
+
133
+ - `ase://`*addr*`:`*port*\[`/`*token*\]:
134
+ A remote task store server (see `ase-task-store`(1)), connected via
135
+ HTTP. It requires an explicitly configured `project.id`, as a
136
+ basename-derived one likely collides on a shared server.
137
+
138
+ On first use, the project is registered in the task store under the
139
+ configured `project.task.lifecycle` and `project.task.idscheme`;
140
+ afterwards the registered model and scheme apply to all clients of
141
+ the project, and a deviating configuration is warned about once per
142
+ deviation only (see `ase-task-lifecycle`(1)).
143
+
144
+ The bearer token is the embedded *token* (warned about if the URL is
145
+ configured on the `project` or a `task:`*id* scope, as it might be
146
+ committed), else `$ASE_TASK_STORE_TOKEN`, else
147
+ `project.task.store.token` (warned about if not configured on the
148
+ `user` scope), else the `token` of the per-user `store.yaml` of a
149
+ locally started task store server (only if the URL addresses exactly
150
+ this server). Sending a token to a non-loopback host selected on the
151
+ `project` or a `task:`*id* scope is warned about.
152
+
153
+ - `ases://`*addr*`:`*port*\[`/`*token*\]\[`?insecure`\]:
154
+ The same as `ase://`, but connecting via HTTPS, verifying the server
155
+ certificate against the Node.js CA store (extendable via
156
+ `$NODE_EXTRA_CA_CERTS`). With the suffix `?insecure`, the
157
+ verification of the server certificate is skipped.
158
+
159
+ - `github:`*owner*`/`*repo*, `github+https://`*host*`/`*owner*`/`*repo*, or `github+http://`*host*`/`*owner*`/`*repo*:
160
+ The built-in GitHub storage plugin, running in-process, storing the
161
+ plans as the issues of the repository *owner*`/`*repo* on GitHub
162
+ resp. on the GitHub (Enterprise) instance *host*. It requires a `seq`
163
+ task id scheme (e.g., `seq:#%d`), as the task ids are the issue
164
+ numbers. The GitHub token is `project.task.store.token`, else
165
+ `$GITHUB_TOKEN`, else `$GH_TOKEN`.
166
+
167
+ - `gitlab:`*namespace*`/`*project*, `gitlab://`*host*`/`*namespace*`/`*project*, `gitlab+https://`*host*`/`*namespace*`/`*project*, or `gitlab+http://`*host*`/`*namespace*`/`*project*:
168
+ The built-in GitLab storage plugin, running in-process, storing the
169
+ plans as the issues of the GitLab project *namespace*`/`*project*
170
+ (with nested groups allowed) on the GitLab instance *host*, else
171
+ `$GITLAB_HOST`, else `gitlab.com`. It also requires a `seq` task id
172
+ scheme. The GitLab token is `project.task.store.token`, else
173
+ `$GITLAB_TOKEN`.
174
+
175
+ - `gitea+https://`*host*`/`*owner*`/`*repo* or `gitea+http://`*host*`/`*owner*`/`*repo*:
176
+ The built-in Gitea storage plugin, running in-process, storing the
177
+ plans as the issues of the repository *owner*`/`*repo* on the Gitea
178
+ instance *host*. It also requires a `seq` task id scheme. The Gitea
179
+ token is `project.task.store.token`, else `$GITEA_TOKEN`.
180
+
181
+ For the GitHub, GitLab, and Gitea task stores, a repository selected
182
+ on the `project` or a `task:`*id* scope is warned about once per
183
+ project and repository only (remembered in the *per-user state
184
+ directory* as `task-github.json`, `task-gitlab.json`, resp.
185
+ `task-gitea.json`), and a `project.task.store.token` not configured on
186
+ the `user` scope is warned about.
187
+
188
+ ## TASK LIFECYCLE MODELS
189
+
190
+ The `Status` frontmatter key of a task plan holds a state of the task
191
+ lifecycle model of the project, selected by `project.task.lifecycle`
192
+ for a local task store resp. registered in a remote task store (see
193
+ `ase-task-lifecycle`(1)). A plan without a `Status` key reads as the
194
+ *initial* state of the model.
195
+
196
+ A status change has to be reachable from the current state via one or
197
+ more transitions of the model (a status foreign to the model can be
198
+ changed to any state, to allow its correction). The *finished* states
199
+ end the lifecycle, and in the *activity* states a task is actively
200
+ worked on (by a human or an agent), so its plan must not be changed
201
+ concurrently.
202
+
203
+ - `solo`:
204
+ The single-phase lifecycle for a local solo developer (default).
205
+ States: `OPEN` (initial), `SHELVED`, `CLOSED` (finished), and
206
+ `CANCELLED` (finished); no activity states. Transitions: `OPEN` to
207
+ `SHELVED`, `CLOSED`, or `CANCELLED`; `SHELVED` to `OPEN` or
208
+ `CANCELLED`.
209
+
210
+ - `team`:
211
+ The two-phase lifecycle for a distributed small team. States:
212
+ `PLANNING` (initial), `SHELVED`, `IMPLEMENTING` (activity),
213
+ `STALLED`, `IMPLEMENTED` (finished), and `CANCELLED` (finished).
214
+ Transitions: `PLANNING` to `SHELVED`, `IMPLEMENTING`, or
215
+ `CANCELLED`; `SHELVED` to `PLANNING` or `CANCELLED`; `IMPLEMENTING`
216
+ to `PLANNING`, `STALLED`, `IMPLEMENTED`, or `CANCELLED`; `STALLED`
217
+ to `IMPLEMENTING` or `CANCELLED`.
218
+
219
+ - `enterprise`:
220
+ The four-phase lifecycle (planning, implementation, qualification, and
221
+ integration) for a gated enterprise pipeline, driven headless by the
222
+ agents of `ase-agent`(1). States: `DRAFTED` (initial), `SHELVED`,
223
+ `PLANNING` (activity), `PLANNED`, `STALLED`, `IMPLEMENTING`
224
+ (activity), `IMPLEMENTED`, `DECLINED`, `QUALIFYING` (activity),
225
+ `QUALIFIED`, `DEFERRED`, `INTEGRATING` (activity), `INTEGRATED`
226
+ (finished), and `CANCELLED` (finished).
227
+
228
+ Transitions: `DRAFTED` to `SHELVED`, `PLANNING`, or `CANCELLED`;
229
+ `SHELVED` to `DRAFTED` or `CANCELLED`; `PLANNING` to `DRAFTED`,
230
+ `SHELVED`, `PLANNED`, or `CANCELLED`; `PLANNED` to `STALLED`,
231
+ `IMPLEMENTING`, or `CANCELLED`; `STALLED` to `PLANNED` or
232
+ `CANCELLED`; `IMPLEMENTING` to `DRAFTED`, `PLANNED`, `STALLED`,
233
+ `IMPLEMENTED`, or `CANCELLED`; `IMPLEMENTED` to `DECLINED`,
234
+ `QUALIFYING`, or `CANCELLED`; `DECLINED` to `IMPLEMENTED` or
235
+ `CANCELLED`; `QUALIFYING` to `DRAFTED`, `PLANNED`, `IMPLEMENTED`,
236
+ `DECLINED`, `QUALIFIED`, or `CANCELLED`; `QUALIFIED` to `DEFERRED`,
237
+ `INTEGRATING`, or `CANCELLED`; `DEFERRED` to `QUALIFIED` or
238
+ `CANCELLED`; `INTEGRATING` to `DRAFTED`, `PLANNED`, `QUALIFIED`,
239
+ `DEFERRED`, `INTEGRATED`, or `CANCELLED`.
240
+
241
+ In all models, no transition leaves a finished state.
242
+
243
+ ## TASK ID SCHEMES
244
+
245
+ New task ids are generated by `ase-task-newid`(1) after the task id
246
+ scheme of the project, selected by `project.task.idscheme` for a local
247
+ task store resp. registered in a remote task store (see
248
+ `ase-task-idscheme`(1)):
249
+
250
+ - `slug`\[`:`*words*\]:
251
+ The slug of the first *words* (`1`-`16`, default: `2`) words of the
252
+ task title, starting with the first word beginning with a letter,
253
+ with diacritics stripped, lower-cased, and joined with `-`, e.g.,
254
+ `json-export` (default scheme). Conforming ids match
255
+ `^[a-z][a-z0-9]*(?:-[a-z0-9]+){0,`*words-1*`}(?:-[0-9]+)?$`.
256
+
257
+ - `seq`\[`:`*template*\]:
258
+ A continuously increasing sequence number, rendered through the
259
+ sprintf-style *template* (default: `%d`) with exactly one `%d` or
260
+ `%0`*width*`d` (*width* `0`-`16`) and otherwise only the characters
261
+ `A-Z`, `a-z`, `#`, `_`, and `-` (but not starting with `_` or `-`),
262
+ e.g., `FOO-%03d` (`FOO-007`) or `#%d` (`#7`). Conforming ids match
263
+ *prefix*`([0-9]+)`*suffix* (resp. with at least *width* digits).
264
+
265
+ - `any`:
266
+ An arbitrary id, as proposed by the caller. Conforming ids match
267
+ `^[A-Za-z0-9#][A-Za-z0-9#_-]*$`.
268
+
269
+ An id not conforming to the scheme is accepted, but warned about on
270
+ `ase task save`, `ase task edit`, and `ase task rename` (the reserved
271
+ id `default` always conforms).
272
+
273
+ ## ENVIRONMENT
274
+
275
+ - `ASE_TASK_ID`:
276
+ The default task id of `ase task status` and `ase task assign`
277
+ (default: `default`).
278
+
279
+ - `ASE_TASK_STORE_TOKEN`:
280
+ The bearer token of a remote (`ase://` or `ases://`) task store.
281
+
282
+ - `GITHUB_TOKEN`, `GH_TOKEN`, `GITLAB_TOKEN`, `GITLAB_HOST`, `GITEA_TOKEN`:
283
+ The tokens resp. the default host of the GitHub, GitLab, and Gitea
284
+ task stores (see **TASK STORES**).
285
+
286
+ ## FILES
287
+
288
+ - `.ase/task/TASK-`*id*`.md`:
289
+ The persisted task plans of the default local task store
290
+ `ase:./.ase/task`, relative to the project root.
291
+
292
+ - `.ase/config.yaml`:
293
+ The `project` scope configuration with the `project.id`,
294
+ `project.task.store.url`, `project.task.lifecycle`, and
295
+ `project.task.idscheme` keys.
296
+
297
+ - *per-user state directory*`/task-lifecycle.json`:
298
+ The deviations of the configured lifecycle model and task id scheme
299
+ from the ones of a remote task store already warned about.
300
+
301
+ - *per-user state directory*`/task-github.json`, `task-gitlab.json`, `task-gitea.json`:
302
+ The repositories of the issue tracker task stores already warned
303
+ about.
304
+
305
+ ## EXAMPLES
306
+
307
+ ```sh
308
+ # list all unfinished tasks with their status, time, effort, and title
309
+ $ ase task list -v
310
+
311
+ # create a new task from a title and a plan file
312
+ $ id=$(ase task newid "Export as JSON")
313
+ $ ase task save --create "$id" <plan.md
314
+
315
+ # move the task forward in the lifecycle
316
+ $ ase task status "$id" CLOSED
317
+
318
+ # use a shared remote task store
319
+ $ ase config --scope project set project.id myproject
320
+ $ ase config --scope project set project.task.store.url ase://127.0.0.1:4711
321
+ ```
322
+
323
+ ## SEE ALSO
324
+
325
+ `ase`(1), `ase-task-list`(1), `ase-task-status`(1),
326
+ `ase-task-request`(1), `ase-task-assign`(1), `ase-task-load`(1),
327
+ `ase-task-view`(1), `ase-task-edit`(1), `ase-task-save`(1),
328
+ `ase-task-delete`(1), `ase-task-rename`(1), `ase-task-newid`(1),
329
+ `ase-task-purge`(1), `ase-task-lifecycle`(1), `ase-task-idscheme`(1),
330
+ `ase-task-store`(1), `ase-task-board`(1), `ase-config`(1),
331
+ `ase-agent`(1).
332
+
333
+ ## AUTHOR
334
+
335
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,38 @@
1
+ # ase-util-compat(1) -- Output Expected Probe Values of the Compatibility Self-Test
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase util compat`
6
+ \[`-h`|`--help`\]
7
+
8
+ ## DESCRIPTION
9
+
10
+ **ase util compat** writes the canonical expected values of all probes
11
+ of the `ase-meta-compat` self-test skill to standard output, one probe
12
+ per line as *id*`: `*value*, where *id* is
13
+ *category*`/`*probe-name*. The probe categories are `xml-placeholders`,
14
+ `control-flow`, `regex`, and `arithmetic`, which check whether the
15
+ model of the agent tool correctly interprets the pseudo-code
16
+ constructs the *ASE* skills are written in.
17
+
18
+ This command is intended to be invoked by the skill only after it has
19
+ recorded all actual probe results (so the model cannot see the
20
+ expected values beforehand), and not directly by end users. The MCP
21
+ tool `ase_compat` provides the same.
22
+
23
+ ## OPTIONS
24
+
25
+ - \[`-h`|`--help`\]:
26
+ Show usage information and exit.
27
+
28
+ ## EXIT STATUS
29
+
30
+ Exits with status `0`.
31
+
32
+ ## SEE ALSO
33
+
34
+ `ase`(1), `ase-util`(1).
35
+
36
+ ## AUTHOR
37
+
38
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,140 @@
1
+ # ase-util-diagram(1) -- Render Mermaid or D2 Diagrams as Unicode/ASCII Art or SVG
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase util diagram`
6
+ \[`-h`|`--help`\]
7
+ \[`-i`|`--input` *file*\]
8
+ \[`-l`|`--lang` `mermaid`|`d2`\]
9
+ \[`-f`|`--format` `ascii`|`svg`\]
10
+ \[`-a`|`--ascii`\]
11
+ \[`-c`|`--color-mode` `none`|`ansi16`|`ansi256`\]
12
+ \[`--node-margin-x` *n*\]
13
+ \[`--node-margin-y` *n*\]
14
+ \[`--node-padding` *n*\]
15
+ \[`--diagram-clip-x` *n*\]
16
+ \[`--diagram-clip-y` *n*\]
17
+ \[`--terminal-width` *n*\]
18
+ \[`--terminal-height` *n*\]
19
+
20
+ ## DESCRIPTION
21
+
22
+ **ase util diagram** renders a diagram specification, written in the
23
+ *Mermaid* or *D2* diagram language and read from standard input or a
24
+ file, as Unicode box-drawing (or plain ASCII) art for the terminal, or
25
+ as a self-contained SVG document. The *Mermaid* diagrams are rendered
26
+ via *beautiful-mermaid* (supporting, e.g., flowcharts, UML state,
27
+ sequence, and class diagrams, ER diagrams, and XY-charts), and the
28
+ *D2* diagrams via the WebAssembly build of *D2*.
29
+
30
+ For the `ascii` format, the rendering is optionally clipped to the
31
+ terminal dimensions (reduced by the extra clipping amounts): lines
32
+ wider than the width budget are truncated (preserving and properly
33
+ terminating any ANSI color sequences), and lines beyond the height
34
+ budget are dropped.
35
+
36
+ A clipped rendering is followed by a warning paragraph which states
37
+ the overflow and advises how to regenerate the diagram source to fit
38
+ (e.g., by preferring a portrait orientation, reducing siblings per
39
+ row, abbreviating node labels, or nesting). The output always ends
40
+ with a newline.
41
+
42
+ The MCP tool `ase_diagram` provides the same to the skills.
43
+
44
+ ## OPTIONS
45
+
46
+ - \[`-h`|`--help`\]:
47
+ Show usage information and exit.
48
+
49
+ - \[`-i`|`--input` *file*\]:
50
+ Read the diagram specification from *file* instead of standard
51
+ input. An empty (or whitespace-only) specification is an error.
52
+
53
+ - \[`-l`|`--lang` `mermaid`|`d2`\]:
54
+ The diagram language: `mermaid` for *Mermaid* (default) or `d2` for
55
+ *D2*.
56
+
57
+ - \[`-f`|`--format` `ascii`|`svg`\]:
58
+ The output format: `ascii` for Unicode/ASCII art (default) or `svg`
59
+ for an SVG document. The clipping options apply to `ascii` only.
60
+
61
+ - \[`-a`|`--ascii`\]:
62
+ Emit plain ASCII characters (`+`, `-`, `|`) instead of the Unicode
63
+ box-drawing characters (for both languages).
64
+
65
+ - \[`-c`|`--color-mode` `none`|`ansi16`|`ansi256`\]:
66
+ The color mode of the ANSI escape sequences in the rendered art
67
+ (*Mermaid* and `ascii` only): `none` for no colors, `ansi16` for 16
68
+ colors, or `ansi256` for 256 colors, where colors render the diagram
69
+ in gray shades. Default: `$ASE_TERM_COLORS` if set to one of these
70
+ values, else derived from the color depth of standard output if it is
71
+ a terminal (`ansi256` for at least 8 bits, `ansi16` for at least 4
72
+ bits), else `none`.
73
+
74
+ - \[`--node-margin-x` *n*\]:
75
+ The horizontal margin between nodes in characters (*Mermaid* only,
76
+ default: `3`).
77
+
78
+ - \[`--node-margin-y` *n*\]:
79
+ The vertical margin between nodes in lines (*Mermaid* only, default:
80
+ `3`).
81
+
82
+ - \[`--node-padding` *n*\]:
83
+ The horizontal and vertical inner padding of each node in characters
84
+ (*Mermaid* only, default: `1`).
85
+
86
+ - \[`--diagram-clip-x` *n*\]:
87
+ The extra horizontal clipping: the width budget is the terminal width
88
+ minus *n* characters (default: `0`).
89
+
90
+ - \[`--diagram-clip-y` *n*\]:
91
+ The extra vertical clipping: the height budget is the terminal height
92
+ minus *n* lines (default: `0`).
93
+
94
+ - \[`--terminal-width` *n*\]:
95
+ The terminal width in characters for the clipping, where `0` disables
96
+ the horizontal clipping. Default: `$ASE_TERM_WIDTH` if a positive
97
+ integer, else the width of standard output if it is a terminal, else
98
+ `0`.
99
+
100
+ - \[`--terminal-height` *n*\]:
101
+ The terminal height in lines for the clipping, where `0` disables the
102
+ vertical clipping. Default: `$ASE_TERM_HEIGHT` if a positive integer,
103
+ else the height of standard output if it is a terminal, else `0`.
104
+
105
+ All numeric values *n* have to be non-negative integers.
106
+
107
+ ## ENVIRONMENT
108
+
109
+ - `ASE_TERM_COLORS`:
110
+ The default of `--color-mode` (`none`, `ansi16`, or `ansi256`).
111
+
112
+ - `ASE_TERM_WIDTH`, `ASE_TERM_HEIGHT`:
113
+ The defaults of `--terminal-width` and `--terminal-height`.
114
+
115
+ ## EXIT STATUS
116
+
117
+ Exits with status `0` on success, and with status `1` on an invalid
118
+ option value, an unreadable input file, an empty specification, or a
119
+ rendering failure (e.g., a syntax error in the specification).
120
+
121
+ ## EXAMPLES
122
+
123
+ ```sh
124
+ # render a Mermaid flowchart as Unicode art
125
+ $ printf 'flowchart LR\n A --> B --> C\n' | ase util diagram
126
+
127
+ # render a D2 diagram from a file as plain ASCII art without colors
128
+ $ ase util diagram -l d2 -i arch.d2 -a -c none
129
+
130
+ # render a Mermaid diagram as an SVG document
131
+ $ ase util diagram -i flow.mmd -f svg >flow.svg
132
+ ```
133
+
134
+ ## SEE ALSO
135
+
136
+ `ase`(1), `ase-util`(1).
137
+
138
+ ## AUTHOR
139
+
140
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,68 @@
1
+ # ase-util-meta(1) -- Output Plugin Meta Files
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase util meta`
6
+ \[`-h`|`--help`\]
7
+ *name* \[...\]
8
+
9
+ ## DESCRIPTION
10
+
11
+ **ase util meta** writes the contents of one or more *meta files* of
12
+ the *ASE* plugin to standard output, concatenated in the given order
13
+ and without any separator.
14
+
15
+ The meta files are the shared instructions and format conventions of
16
+ the *ASE* skills, e.g., the constitution (`ase-constitution.md`), the
17
+ tenets (`ase-tenets.md`), the persona (`ase-persona.md`), the dialog
18
+ conventions (`ase-dialog.md`), the option parsing conventions
19
+ (`ase-getopt.md`), and the artifact format conventions
20
+ (`ase-format-*.md`, plus the standard *SpecBook* schema configuration
21
+ `ase-format-specbook.yaml`).
22
+
23
+ The meta files are read from the `plugin/meta/` directory bundled with
24
+ the tool package itself, independent of any environment variables. All
25
+ requested files are read before any output is written, so a failing
26
+ name produces no output at all.
27
+
28
+ This command is intended to be leveraged by the *ASE* skills, and not
29
+ typically invoked directly by end users.
30
+
31
+ ## OPTIONS
32
+
33
+ - \[`-h`|`--help`\]:
34
+ Show usage information and exit.
35
+
36
+ ## ARGUMENTS
37
+
38
+ - *name* \[...\]:
39
+ One or more meta file names. Each *name* is reduced to its base name
40
+ (so no directory traversal or absolute path is possible), the
41
+ extension `.md` is appended if it has no extension, and the prefix
42
+ `ase-` is prepended if missing, so `tenets`, `ase-tenets`, and
43
+ `tenets.md` all select `ase-tenets.md`, while `format-specbook.yaml`
44
+ selects `ase-format-specbook.yaml`. An empty name, `.`, and `..` are
45
+ invalid.
46
+
47
+ ## EXIT STATUS
48
+
49
+ Exits with status `0` on success, and with status `1` if a name is
50
+ invalid or a meta file cannot be read.
51
+
52
+ ## EXAMPLES
53
+
54
+ ```sh
55
+ # output the ASE constitution
56
+ $ ase util meta constitution
57
+
58
+ # output the tenets and the persona definition
59
+ $ ase util meta tenets persona
60
+ ```
61
+
62
+ ## SEE ALSO
63
+
64
+ `ase`(1), `ase-util`(1), `ase-spec`(1).
65
+
66
+ ## AUTHOR
67
+
68
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,74 @@
1
+ # ase-util-metric(1) -- Measure the Length Metrics of a Text
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase util metric`
6
+ \[`-h`|`--help`\]
7
+ \[`-f`|`--file` *file*\]
8
+ \[*text* \[...\]\]
9
+
10
+ ## DESCRIPTION
11
+
12
+ **ase util metric** measures the length metrics of a text, given either
13
+ as the content of a *file* or as the *text* formed by the remaining
14
+ arguments (joined by single spaces), which are mutually exclusive and
15
+ of which exactly one has to be given. The metrics are printed to
16
+ standard output as a single-line JSON object with the fields:
17
+
18
+ - `words`:
19
+ The number of whitespace-separated tokens.
20
+
21
+ - `lines`:
22
+ The number of newline-separated lines, where a trailing line without
23
+ a final newline still counts as one line (and an empty text has `0`
24
+ lines).
25
+
26
+ - `chars`:
27
+ The number of Unicode characters, i.e., code points.
28
+
29
+ - `bytes`:
30
+ The number of octets: the raw file size for a *file* (as its
31
+ encoding is not necessarily UTF-8), resp. the UTF-8 length for a
32
+ *text*.
33
+
34
+ A *file* is decoded as UTF-8 for the other metrics. This backs the
35
+ MCP tool `ase_text_metric`, which the skills use instead of estimating
36
+ a text length themselves.
37
+
38
+ ## OPTIONS
39
+
40
+ - \[`-h`|`--help`\]:
41
+ Show usage information and exit.
42
+
43
+ - \[`-f`|`--file` *file*\]:
44
+ Measure the content of *file* instead of the *text* arguments.
45
+
46
+ ## ARGUMENTS
47
+
48
+ - \[*text* \[...\]\]:
49
+ The text to measure, formed by all arguments joined by single spaces
50
+ (mutually exclusive with `--file`).
51
+
52
+ ## EXIT STATUS
53
+
54
+ Exits with status `0` on success, and with status `1` if both or none
55
+ of *file* and *text* are given, or *file* cannot be read.
56
+
57
+ ## EXAMPLES
58
+
59
+ ```sh
60
+ # measure a document
61
+ $ ase util metric -f README.md
62
+
63
+ # measure a text
64
+ $ ase util metric "Hello, World!"
65
+ {"words":2,"lines":1,"chars":13,"bytes":13}
66
+ ```
67
+
68
+ ## SEE ALSO
69
+
70
+ `ase`(1), `ase-util`(1), `wc`(1).
71
+
72
+ ## AUTHOR
73
+
74
+ Dr. Ralf S. Engelschall <rse@engelschall.com>