@rse/ase 2.0.2 → 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 (236) hide show
  1. package/dst/ase-agent-definition-core.js +111 -87
  2. package/dst/ase-agent-fleet.js +1 -1
  3. package/dst/ase-agent-runtime-claim.js +5 -3
  4. package/dst/ase-agent-runtime-engine.js +1 -1
  5. package/dst/ase-agent-runtime-phase.js +1 -1
  6. package/dst/ase-agent-runtime-request.js +1 -1
  7. package/dst/ase-agent-runtime.js +3 -5
  8. package/dst/ase-artifact.js +3 -3
  9. package/dst/ase-config-core.js +2 -16
  10. package/dst/ase-config-schema.js +1 -3
  11. package/dst/ase-config.js +2 -0
  12. package/dst/ase-hook.js +13 -13
  13. package/dst/ase-lib-daemon-cli.js +117 -4
  14. package/dst/ase-lib-server-cli.js +4 -5
  15. package/dst/ase-lib-version.js +14 -5
  16. package/dst/ase-man-catalog.js +229 -0
  17. package/dst/ase-man-render.js +278 -0
  18. package/dst/ase-man-tui.js +636 -0
  19. package/dst/ase-man.js +33 -27
  20. package/dst/ase-mcp.js +4 -4
  21. package/dst/ase-service-getopt.js +2 -2
  22. package/dst/ase-service-otel.js +4 -4
  23. package/dst/ase-service-skills.js +5 -15
  24. package/dst/ase-service.js +87 -210
  25. package/dst/ase-setup-common.js +1 -2
  26. package/dst/ase-setup-settings.js +6 -9
  27. package/dst/ase-setup.js +4 -5
  28. package/dst/ase-spec.js +103 -20
  29. package/dst/ase-statusline.js +170 -170
  30. package/dst/ase-task-board-filter.js +5 -4
  31. package/dst/ase-task-board-flow.js +7 -6
  32. package/dst/ase-task-board-graph.js +5 -4
  33. package/dst/ase-task-board-tui-control.js +41 -35
  34. package/dst/ase-task-board-tui-model.js +185 -167
  35. package/dst/ase-task-board-tui-popup.js +2 -3
  36. package/dst/ase-task-board-tui-view.js +74 -70
  37. package/dst/ase-task-board-web-client.js +27 -27
  38. package/dst/ase-task-board-web-server.js +2 -2
  39. package/dst/ase-task-board.js +1 -1
  40. package/dst/ase-task-format.js +1 -1
  41. package/dst/ase-task-store-client.js +17 -5
  42. package/dst/ase-task-store-core.js +5 -7
  43. package/dst/ase-task-store-issues.js +16 -1
  44. package/dst/ase-task-store-plugin-ase.js +7 -3
  45. package/dst/ase-task-store-plugin-gitea.js +9 -32
  46. package/dst/ase-task-store-plugin-github.js +3 -12
  47. package/dst/ase-task-store-plugin-gitlab.js +2 -18
  48. package/dst/ase-task.js +51 -23
  49. package/dst/ase-util-compat.js +1 -1
  50. package/dst/ase-util-diagram.js +13 -37
  51. package/dst/ase.js +5 -5
  52. package/dst/man/ase-agent-adhoc.md +1165 -0
  53. package/dst/man/ase-agent-condenser.md +383 -0
  54. package/dst/man/ase-agent-editor.md +441 -0
  55. package/dst/man/ase-agent-estimator.md +477 -0
  56. package/dst/man/ase-agent-fleet.md +358 -0
  57. package/dst/man/ase-agent-implementer.md +521 -0
  58. package/dst/man/ase-agent-integrator.md +449 -0
  59. package/dst/man/ase-agent-qualifier.md +426 -0
  60. package/dst/man/ase-agent-rebooter.md +384 -0
  61. package/dst/man/ase-agent-relay.md +262 -0
  62. package/dst/man/ase-agent-researcher.md +478 -0
  63. package/dst/man/ase-agent.md +628 -0
  64. package/dst/man/ase-artifact-list.md +57 -0
  65. package/dst/man/ase-artifact-name.md +56 -0
  66. package/dst/man/ase-artifact.md +92 -0
  67. package/dst/man/ase-config-delete.md +74 -0
  68. package/dst/man/ase-config-edit.md +83 -0
  69. package/dst/man/ase-config-get.md +70 -0
  70. package/dst/man/ase-config-init.md +110 -0
  71. package/dst/man/ase-config-list.md +68 -0
  72. package/dst/man/ase-config-set.md +92 -0
  73. package/dst/man/ase-config.md +426 -0
  74. package/dst/man/ase-hook-permission-request.md +61 -0
  75. package/dst/man/ase-hook-pre-tool-use.md +96 -0
  76. package/dst/man/ase-hook-session-end.md +71 -0
  77. package/dst/man/ase-hook-session-persona.md +65 -0
  78. package/dst/man/ase-hook-session-start.md +184 -0
  79. package/dst/man/ase-hook-stop.md +52 -0
  80. package/dst/man/ase-hook-user-prompt-submit.md +54 -0
  81. package/dst/man/ase-hook.md +93 -0
  82. package/dst/man/ase-man.md +195 -0
  83. package/dst/man/ase-mcp.md +102 -0
  84. package/dst/man/ase-service-log.md +59 -0
  85. package/dst/man/ase-service-send.md +60 -0
  86. package/dst/man/ase-service-start.md +93 -0
  87. package/dst/man/ase-service-status.md +58 -0
  88. package/dst/man/ase-service-stop.md +52 -0
  89. package/dst/man/ase-service.md +124 -0
  90. package/dst/man/ase-setup-disable.md +67 -0
  91. package/dst/man/ase-setup-enable.md +66 -0
  92. package/dst/man/ase-setup-install.md +116 -0
  93. package/dst/man/ase-setup-mcp.md +213 -0
  94. package/dst/man/ase-setup-status.md +101 -0
  95. package/dst/man/ase-setup-statusline.md +162 -0
  96. package/dst/man/ase-setup-telemetry.md +166 -0
  97. package/dst/man/ase-setup-uninstall.md +85 -0
  98. package/dst/man/ase-setup-update.md +117 -0
  99. package/dst/man/ase-setup.md +156 -0
  100. package/dst/man/ase-spec-export.md +99 -0
  101. package/dst/man/ase-spec-init.md +57 -0
  102. package/dst/man/ase-spec-lint.md +74 -0
  103. package/dst/man/ase-spec-preview.md +57 -0
  104. package/dst/man/ase-spec.md +85 -0
  105. package/dst/man/ase-statusline.md +330 -0
  106. package/dst/man/ase-task-assign.md +138 -0
  107. package/dst/man/ase-task-board.md +651 -0
  108. package/dst/man/ase-task-delete.md +46 -0
  109. package/dst/man/ase-task-edit.md +73 -0
  110. package/dst/man/ase-task-idscheme.md +92 -0
  111. package/dst/man/ase-task-lifecycle.md +92 -0
  112. package/dst/man/ase-task-list.md +86 -0
  113. package/dst/man/ase-task-load.md +48 -0
  114. package/dst/man/ase-task-newid.md +100 -0
  115. package/dst/man/ase-task-purge.md +49 -0
  116. package/dst/man/ase-task-rename.md +69 -0
  117. package/dst/man/ase-task-request.md +108 -0
  118. package/dst/man/ase-task-save.md +78 -0
  119. package/dst/man/ase-task-status.md +79 -0
  120. package/dst/man/ase-task-store.md +377 -0
  121. package/dst/man/ase-task-view.md +50 -0
  122. package/dst/man/ase-task.md +335 -0
  123. package/dst/man/ase-util-compat.md +38 -0
  124. package/dst/man/ase-util-diagram.md +140 -0
  125. package/dst/man/ase-util-meta.md +68 -0
  126. package/dst/man/ase-util-metric.md +74 -0
  127. package/dst/man/ase-util-mint.md +85 -0
  128. package/dst/man/ase-util-worktree.md +109 -0
  129. package/dst/man/ase-util.md +81 -0
  130. package/dst/man/ase.md +228 -0
  131. package/package.json +12 -17
  132. package/plugin/.claude-plugin/plugin.json +1 -1
  133. package/plugin/.codex-plugin/plugin.json +1 -1
  134. package/plugin/.github/plugin/plugin.json +1 -1
  135. package/plugin/agents/ase-code-lint.md +3 -3
  136. package/plugin/agents/ase-docs-proofread.md +3 -3
  137. package/plugin/agents/ase-docs-refine.md +3 -3
  138. package/plugin/agents/ase-spec-lint.md +338 -0
  139. package/plugin/meta/ase-skill.md +7 -0
  140. package/plugin/mods/ase-mods.ts +10 -7
  141. package/plugin/mods/claude-code.d.ts +26 -3
  142. package/plugin/skills/ase-code-analyze/SKILL.md +18 -10
  143. package/plugin/skills/ase-code-analyze/help.md +11 -6
  144. package/plugin/skills/ase-code-lint/SKILL.md +37 -23
  145. package/plugin/skills/ase-code-lint/help.md +10 -5
  146. package/plugin/skills/ase-help-intent/data.md +204 -13
  147. package/plugin/skills/ase-help-skill/catalog.md +1 -0
  148. package/plugin/skills/ase-meta-workflow/workflow.txt +2 -0
  149. package/plugin/skills/ase-repo-commit/SKILL.md +1 -0
  150. package/plugin/skills/ase-repo-merge/SKILL.md +1 -0
  151. package/plugin/skills/ase-repo-review/SKILL.md +5 -3
  152. package/plugin/skills/ase-repo-review/help.md +3 -1
  153. package/plugin/skills/ase-spec-edit/SKILL.md +3 -3
  154. package/plugin/skills/ase-spec-edit/help.md +1 -1
  155. package/plugin/skills/ase-spec-lint/SKILL.md +695 -0
  156. package/plugin/skills/ase-spec-lint/help.md +171 -0
  157. package/plugin/skills/ase-task-implement/SKILL.md +24 -6
  158. package/plugin/skills/ase-task-implement/help.md +11 -1
  159. package/dst/man/ase-agent-adhoc.1 +0 -515
  160. package/dst/man/ase-agent-condenser.1 +0 -193
  161. package/dst/man/ase-agent-editor.1 +0 -212
  162. package/dst/man/ase-agent-estimator.1 +0 -214
  163. package/dst/man/ase-agent-fleet.1 +0 -185
  164. package/dst/man/ase-agent-implementer.1 +0 -233
  165. package/dst/man/ase-agent-integrator.1 +0 -213
  166. package/dst/man/ase-agent-qualifier.1 +0 -214
  167. package/dst/man/ase-agent-rebooter.1 +0 -193
  168. package/dst/man/ase-agent-relay.1 +0 -128
  169. package/dst/man/ase-agent-researcher.1 +0 -217
  170. package/dst/man/ase-agent.1 +0 -264
  171. package/dst/man/ase-artifact-list.1 +0 -38
  172. package/dst/man/ase-artifact-name.1 +0 -39
  173. package/dst/man/ase-artifact.1 +0 -56
  174. package/dst/man/ase-config-delete.1 +0 -45
  175. package/dst/man/ase-config-edit.1 +0 -48
  176. package/dst/man/ase-config-get.1 +0 -46
  177. package/dst/man/ase-config-init.1 +0 -60
  178. package/dst/man/ase-config-list.1 +0 -42
  179. package/dst/man/ase-config-set.1 +0 -52
  180. package/dst/man/ase-config.1 +0 -231
  181. package/dst/man/ase-hook-permission-request.1 +0 -36
  182. package/dst/man/ase-hook-pre-tool-use.1 +0 -59
  183. package/dst/man/ase-hook-session-end.1 +0 -47
  184. package/dst/man/ase-hook-session-persona.1 +0 -37
  185. package/dst/man/ase-hook-session-start.1 +0 -81
  186. package/dst/man/ase-hook-stop.1 +0 -34
  187. package/dst/man/ase-hook-user-prompt-submit.1 +0 -34
  188. package/dst/man/ase-hook.1 +0 -51
  189. package/dst/man/ase-man.1 +0 -67
  190. package/dst/man/ase-mcp.1 +0 -61
  191. package/dst/man/ase-service-log.1 +0 -43
  192. package/dst/man/ase-service-send.1 +0 -47
  193. package/dst/man/ase-service-start.1 +0 -54
  194. package/dst/man/ase-service-status.1 +0 -46
  195. package/dst/man/ase-service-stop.1 +0 -37
  196. package/dst/man/ase-service.1 +0 -85
  197. package/dst/man/ase-setup-disable.1 +0 -44
  198. package/dst/man/ase-setup-enable.1 +0 -45
  199. package/dst/man/ase-setup-install.1 +0 -73
  200. package/dst/man/ase-setup-mcp.1 +0 -124
  201. package/dst/man/ase-setup-status.1 +0 -60
  202. package/dst/man/ase-setup-statusline.1 +0 -92
  203. package/dst/man/ase-setup-telemetry.1 +0 -92
  204. package/dst/man/ase-setup-uninstall.1 +0 -59
  205. package/dst/man/ase-setup-update.1 +0 -64
  206. package/dst/man/ase-setup.1 +0 -93
  207. package/dst/man/ase-spec-export.1 +0 -62
  208. package/dst/man/ase-spec-lint.1 +0 -40
  209. package/dst/man/ase-spec-preview.1 +0 -40
  210. package/dst/man/ase-spec.1 +0 -46
  211. package/dst/man/ase-statusline.1 +0 -189
  212. package/dst/man/ase-task-assign.1 +0 -71
  213. package/dst/man/ase-task-board.1 +0 -384
  214. package/dst/man/ase-task-delete.1 +0 -35
  215. package/dst/man/ase-task-edit.1 +0 -46
  216. package/dst/man/ase-task-idscheme.1 +0 -65
  217. package/dst/man/ase-task-lifecycle.1 +0 -57
  218. package/dst/man/ase-task-list.1 +0 -47
  219. package/dst/man/ase-task-load.1 +0 -36
  220. package/dst/man/ase-task-newid.1 +0 -61
  221. package/dst/man/ase-task-purge.1 +0 -37
  222. package/dst/man/ase-task-rename.1 +0 -44
  223. package/dst/man/ase-task-request.1 +0 -61
  224. package/dst/man/ase-task-save.1 +0 -48
  225. package/dst/man/ase-task-status.1 +0 -55
  226. package/dst/man/ase-task-store.1 +0 -194
  227. package/dst/man/ase-task-view.1 +0 -40
  228. package/dst/man/ase-task.1 +0 -160
  229. package/dst/man/ase-util-compat.1 +0 -25
  230. package/dst/man/ase-util-diagram.1 +0 -76
  231. package/dst/man/ase-util-meta.1 +0 -45
  232. package/dst/man/ase-util-metric.1 +0 -54
  233. package/dst/man/ase-util-mint.1 +0 -59
  234. package/dst/man/ase-util-worktree.1 +0 -72
  235. package/dst/man/ase-util.1 +0 -50
  236. package/dst/man/ase.1 +0 -124
@@ -0,0 +1,56 @@
1
+ # ase-artifact-name(1) -- Resolve a Filename within an Artifact Kind
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase artifact name`
6
+ \[`-h`|`--help`\]
7
+ \[`--kind` *kind*\]
8
+ *filename*
9
+
10
+ ## DESCRIPTION
11
+
12
+ **ase artifact name** resolves a *filename*, given relative to the base
13
+ directory of an artifact *kind*, to a project-relative (POSIX-style)
14
+ path by prefixing it with the configured base directory
15
+ `project.artifact.`*kind*`.basedir` (see `ase-artifact`(1)), and prints
16
+ it. The file does not have to exist. The skills use it to name a new
17
+ file of a kind, e.g., a new specification or source code file.
18
+
19
+ ## OPTIONS
20
+
21
+ - \[`-h`|`--help`\]:
22
+ Show usage information and exit.
23
+
24
+ - \[`--kind` *kind*\]:
25
+ The artifact kind whose base directory is used: `spec`, `code`,
26
+ `docs`, or `infr` (default: `code`). The implicit catch-all kind
27
+ `othr` has no base directory and is rejected.
28
+
29
+ ## ARGUMENTS
30
+
31
+ - *filename*:
32
+ The filename, relative to the base directory of the kind. Backslashes
33
+ are converted to slashes and leading slashes are stripped. It must
34
+ not be empty and must not contain any `..` segment.
35
+
36
+ ## EXIT STATUS
37
+
38
+ Exits with status `0` on success, and with status `1` on an unknown
39
+ or unsupported kind, an empty filename, or a filename with a `..`
40
+ segment.
41
+
42
+ ## EXAMPLES
43
+
44
+ ```sh
45
+ # resolve a source file name (with the default "project.artifact.code.basedir" of "src")
46
+ $ ase artifact name --kind code lib/util.ts
47
+ src/lib/util.ts
48
+ ```
49
+
50
+ ## SEE ALSO
51
+
52
+ `ase`(1), `ase-artifact`(1), `ase-artifact-list`(1), `ase-config`(1).
53
+
54
+ ## AUTHOR
55
+
56
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,92 @@
1
+ # ase-artifact(1) -- Resolve Project Artifact Kinds to File Lists
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase artifact`
6
+ \[`-h`|`--help`\]
7
+
8
+ `ase artifact list`
9
+ \[`--kind` *kinds*\]
10
+
11
+ `ase artifact name`
12
+ \[`--kind` *kind*\]
13
+ *filename*
14
+
15
+ ## DESCRIPTION
16
+
17
+ **ase artifact** is the entry point group for resolving the *artifact
18
+ kinds* of a project to project-relative file lists. The *ASE* skills
19
+ use it (and the MCP tools `ase_artifact_list` and `ase_artifact_name`,
20
+ which provide the same) to locate the files of a kind. The recognized
21
+ kinds are:
22
+
23
+ - `spec`: the specification (by default below `docs/specbook`,
24
+ the files `*.{md,txt,svg,png,jpg}`).
25
+ - `code`: the source code (by default below `src`, all files
26
+ except `**/etc/**` and `**/{.gitignore,.npmignore,package.json}`).
27
+ - `docs`: the documentation (by default below `doc`, all files plus
28
+ `**/{README,LICENSE,CHANGELOG}.{md,txt}`, except `{spec,arch}/**`).
29
+ - `infr`: the infrastructure (by default below the project root, the
30
+ files `**/{.github,.claude*,etc}/**` and
31
+ `**/{AGENTS.md,{package,tsconfig*}.json,.{git,npm}ignore}`).
32
+ - `othr`: the implicit catch-all of all other files.
33
+
34
+ The first four kinds are configured by the configuration keys
35
+ `project.artifact.`*kind*`.basedir` (the base directory, relative to
36
+ the project root, where an empty value denotes the project root itself,
37
+ and which must not escape the project root via `..`) and
38
+ `project.artifact.`*kind*`.files` (a *miniglob* specification, resolved
39
+ relative to the base directory), with the defaults given above (see
40
+ `ase-config`(1)).
41
+
42
+ A *miniglob* specification is a whitespace-separated list of glob
43
+ patterns (in the syntax of *picomatch*, with dot files matched), each
44
+ optionally negated by a `!` prefix. The tokens are applied in order:
45
+ the resulting set starts empty (or with all files, if the first token
46
+ is negated), a plain pattern adds all files matching it, and a negated
47
+ pattern removes all files matching it.
48
+
49
+ The file universe is the set of all files below the project root (the
50
+ Git top-level directory, else the current working directory), except
51
+ the `.git` directories and all files excluded by the Git exclude rules:
52
+ the global excludes file (`core.excludesFile`, else
53
+ `$XDG_CONFIG_HOME/git/ignore`, falling back to
54
+ `~/.config/git/ignore`), the repository-local `info/exclude`, and the
55
+ `.gitignore` files from the project root downwards, with the last
56
+ matching rule winning.
57
+
58
+ The universe is partitioned among the kinds by descending precedence
59
+ `spec`, `code`, `docs`, and `infr`: a file matched by multiple kinds
60
+ belongs to the first one only, and every file matched by none of them
61
+ belongs to `othr`.
62
+
63
+ Without a sub-command, the usage information is shown and the command
64
+ exits with status `1`.
65
+
66
+ ## OPTIONS
67
+
68
+ - \[`-h`|`--help`\]:
69
+ Show usage information and exit.
70
+
71
+ ## COMMANDS
72
+
73
+ - `ase artifact list` \[`--kind` *kinds*\]:
74
+ Resolve one or more artifact kinds to project-relative file paths.
75
+ See `ase-artifact-list`(1).
76
+
77
+ - `ase artifact name` \[`--kind` *kind*\] *filename*:
78
+ Resolve a base-relative filename within an artifact kind to a
79
+ project-relative path. See `ase-artifact-name`(1).
80
+
81
+ ## EXIT STATUS
82
+
83
+ The group command without a sub-command exits with status `1`.
84
+
85
+ ## SEE ALSO
86
+
87
+ `ase`(1), `ase-artifact-list`(1), `ase-artifact-name`(1),
88
+ `ase-config`(1), `ase-spec`(1), `gitignore`(5).
89
+
90
+ ## AUTHOR
91
+
92
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,74 @@
1
+ # ase-config-delete(1) -- Delete a Configuration Value
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase config`
6
+ \[`--scope` *scope*\]
7
+ `delete`
8
+ \[`-h`|`--help`\]
9
+ *key*
10
+
11
+ ## DESCRIPTION
12
+
13
+ **ase config delete** deletes the configuration *key* from the
14
+ configuration file of the target scope (the strongest scope of the
15
+ scope chain, by default `project` inside a project, else `user`) and
16
+ writes the file back. Weaker scopes are never modified, so a value of
17
+ the same key on a weaker scope (or the built-in default) becomes
18
+ effective again.
19
+
20
+ Deleting a key which is not set on the target scope is no error. As
21
+ for `ase config set`, a key which is not writable on the target scope
22
+ cannot be deleted there either, and a target file which carries invalid
23
+ content is not overwritten.
24
+
25
+ ## OPTIONS
26
+
27
+ - \[`-h`|`--help`\]:
28
+ Show usage information and exit.
29
+
30
+ - \[`--scope` *scope*\]:
31
+ Select the scope chain, whose strongest scope is the target scope
32
+ written by this command. As an option of `ase config`, it has to be
33
+ given *before* `delete`. The *scope* value is a comma-separated list
34
+ of the terms `user`, `project`, `task:`*id*, and `session:`*id* (with
35
+ *id* matching `[A-Za-z0-9._-]+`), at most one per kind and in any
36
+ order, canonicalized into the order `user` < `project` < `task` <
37
+ `session`.
38
+
39
+ `user` is always added implicitly, and `project` is added implicitly
40
+ whenever a project context (a Git working tree or a `.ase` directory
41
+ at or above the current directory) exists, but never above the
42
+ strongest explicitly requested term. An explicit `project` without a
43
+ project context is an error. Default: `project` inside a project
44
+ context, else `user`. See `ase-config`(1) for details.
45
+
46
+ ## ARGUMENTS
47
+
48
+ - *key*:
49
+ The dotted configuration key, e.g., `agent.persona`, or any
50
+ unambiguous trailing part of a known key, e.g., `persona`.
51
+
52
+ ## EXIT STATUS
53
+
54
+ `0` on success, `1` on a *key* not writable on the target scope, an
55
+ ambiguous *key*, an invalid *scope*, or a target file carrying invalid
56
+ content.
57
+
58
+ ## EXAMPLES
59
+
60
+ ```sh
61
+ # fall back to the default persona again
62
+ $ ase config delete agent.persona
63
+
64
+ # remove the task store token of the user
65
+ $ ase config --scope user delete project.task.store.token
66
+ ```
67
+
68
+ ## SEE ALSO
69
+
70
+ `ase`(1), `ase-config`(1), `ase-config-set`(1).
71
+
72
+ ## AUTHOR
73
+
74
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,83 @@
1
+ # ase-config-edit(1) -- Edit the Configuration File with an Editor
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase config`
6
+ \[`--scope` *scope*\]
7
+ `edit`
8
+ \[`-h`|`--help`\]
9
+
10
+ ## DESCRIPTION
11
+
12
+ **ase config edit** opens the configuration file of the target scope
13
+ (the strongest scope of the scope chain, by default `project` inside a
14
+ project, else `user`) in a text editor. The file and its parent
15
+ directories are created if missing (a new `user` scope file with file
16
+ mode `0600`).
17
+
18
+ After the editor exits, the file is re-read and strictly validated
19
+ against the configuration schema. If it carries invalid YAML or
20
+ invalid entries, the error is reported and the question `re-edit? [Y/n]`
21
+ is asked on standard error: any answer other than `n` or `no` opens the
22
+ editor again, while `n` or `no` lets the command fail (leaving the
23
+ invalid file as is).
24
+
25
+ ## OPTIONS
26
+
27
+ - \[`-h`|`--help`\]:
28
+ Show usage information and exit.
29
+
30
+ - \[`--scope` *scope*\]:
31
+ Select the scope chain, whose strongest scope is the target scope
32
+ whose file is edited. As an option of `ase config`, it has to be
33
+ given *before* `edit`. The *scope* value is a comma-separated list
34
+ of the terms `user`, `project`, `task:`*id*, and `session:`*id*
35
+ (with *id* matching `[A-Za-z0-9._-]+`), at most one per kind and in
36
+ any order, canonicalized into the order `user` < `project` < `task`
37
+ < `session`.
38
+
39
+ `user` is always added implicitly, and `project` is added implicitly
40
+ whenever a project context (a Git working tree or a `.ase` directory
41
+ at or above the current directory) exists, but never above the
42
+ strongest explicitly requested term. An explicit `project` without a
43
+ project context is an error. Default: `project` inside a project
44
+ context, else `user`. See `ase-config`(1) for details.
45
+
46
+ ## ENVIRONMENT
47
+
48
+ - `VISUAL`, `EDITOR`:
49
+ The editor command, taken from the first non-empty one of `VISUAL`
50
+ and `EDITOR`, falling back to `vi`. The value is split on whitespace
51
+ into the command and its arguments (it is not run through a shell),
52
+ and the file name is appended as the last argument.
53
+
54
+ ## FILES
55
+
56
+ The configuration file of the target scope: *per-user configuration
57
+ directory*`/config.yaml` (`user`), `.ase/config.yaml` (`project`),
58
+ `.ase/task/`*id*`/config.yaml` (`task:`*id*), or *per-user state
59
+ directory*`/session/`*id*`/config.yaml` (`session:`*id*). See
60
+ `ase-config`(1).
61
+
62
+ ## EXIT STATUS
63
+
64
+ `0` once the edited file is valid, `1` if the editor could not be run,
65
+ or if the file stayed invalid and re-editing was declined.
66
+
67
+ ## EXAMPLES
68
+
69
+ ```sh
70
+ # edit the project configuration with Vim
71
+ $ EDITOR=vim ase config edit
72
+
73
+ # edit the user configuration
74
+ $ ase config --scope user edit
75
+ ```
76
+
77
+ ## SEE ALSO
78
+
79
+ `ase`(1), `ase-config`(1), `ase-config-set`(1).
80
+
81
+ ## AUTHOR
82
+
83
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,70 @@
1
+ # ase-config-get(1) -- Print a Configuration Value
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase config`
6
+ \[`--scope` *scope*\]
7
+ `get`
8
+ \[`-h`|`--help`\]
9
+ *key*
10
+
11
+ ## DESCRIPTION
12
+
13
+ **ase config get** prints the effective value of the configuration
14
+ *key*, followed by a newline, on standard output. The value is looked
15
+ up from the strongest scope of the scope chain down to the built-in
16
+ `default` scope, and the first defined value wins. In contrast to `ase
17
+ config list`, secret values are printed unmasked.
18
+
19
+ ## OPTIONS
20
+
21
+ - \[`-h`|`--help`\]:
22
+ Show usage information and exit.
23
+
24
+ - \[`--scope` *scope*\]:
25
+ Select the scope chain whose values are cascaded. As an option of
26
+ `ase config`, it has to be given *before* `get`. The *scope* value is
27
+ a comma-separated list of the terms `user`, `project`, `task:`*id*,
28
+ and `session:`*id* (with *id* matching `[A-Za-z0-9._-]+`), at most one
29
+ per kind and in any order, canonicalized into the order `user` <
30
+ `project` < `task` < `session`.
31
+
32
+ `user` is always added implicitly, and `project` is added implicitly
33
+ whenever a project context (a Git working tree or a `.ase` directory
34
+ at or above the current directory) exists, but never above the
35
+ strongest explicitly requested term. An explicit `project` without a
36
+ project context is an error. Default: `project` inside a project
37
+ context, else `user`. See `ase-config`(1) for details.
38
+
39
+ ## ARGUMENTS
40
+
41
+ - *key*:
42
+ The dotted configuration key, e.g., `agent.persona`, or any
43
+ unambiguous trailing part of a known key, e.g., `persona`. See
44
+ `ase-config`(1) for all keys.
45
+
46
+ ## EXIT STATUS
47
+
48
+ `0` on success, `1` if *key* is not set on any scope, if *key* does not
49
+ address a leaf value (e.g., `project.task`), if *key* is ambiguous, or
50
+ on an invalid *scope*.
51
+
52
+ ## EXAMPLES
53
+
54
+ ```sh
55
+ # print the effective task lifecycle model
56
+ $ ase config get project.task.lifecycle
57
+ solo
58
+
59
+ # print the user-level persona via its abbreviated key
60
+ $ ase config --scope user get persona
61
+ engineer
62
+ ```
63
+
64
+ ## SEE ALSO
65
+
66
+ `ase`(1), `ase-config`(1), `ase-config-list`(1), `ase-config-set`(1).
67
+
68
+ ## AUTHOR
69
+
70
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,110 @@
1
+ # ase-config-init(1) -- Initialize Configuration with Preset Values
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase config`
6
+ \[`--scope` *scope*\]
7
+ `init`
8
+ \[`-h`|`--help`\]
9
+ *type*
10
+
11
+ ## DESCRIPTION
12
+
13
+ **ase config init** initializes the configuration file of the target
14
+ scope (the strongest scope of the scope chain, by default `project`
15
+ inside a project, else `user`) with the preset values of *type*. The
16
+ file (and its parent directories) are created if missing. Already
17
+ existing keys of the file which the preset does not cover are kept,
18
+ while those covered by the preset are overwritten.
19
+
20
+ Keys of the preset which are not writable on the target scope (e.g.,
21
+ all `project.task.*`, `project.artifact.*`, and `board.*` keys on a
22
+ `task` or `session` scope, or `telemetry.prices.ai` on the `project`
23
+ scope) are silently skipped. The file is written under an advisory
24
+ file lock and atomically.
25
+
26
+ ## OPTIONS
27
+
28
+ - \[`-h`|`--help`\]:
29
+ Show usage information and exit.
30
+
31
+ - \[`--scope` *scope*\]:
32
+ Select the scope chain, whose strongest scope is the target scope
33
+ written by this command. As an option of `ase config`, it has to be
34
+ given *before* `init`. The *scope* value is a comma-separated list
35
+ of the terms `user`, `project`, `task:`*id*, and `session:`*id*
36
+ (with *id* matching `[A-Za-z0-9._-]+`), at most one per kind and in
37
+ any order, canonicalized into the order `user` < `project` < `task`
38
+ < `session`.
39
+
40
+ `user` is always added implicitly, and `project` is added implicitly
41
+ whenever a project context (a Git working tree or a `.ase` directory
42
+ at or above the current directory) exists, but never above the
43
+ strongest explicitly requested term. An explicit `project` without a
44
+ project context is an error. Default: `project` inside a project
45
+ context, else `user`. See `ase-config`(1) for details.
46
+
47
+ ## ARGUMENTS
48
+
49
+ - *type*:
50
+ The preset to apply, one of:
51
+
52
+ - `default`:
53
+ The complete baseline of the built-in `default` scope:
54
+ `agent.persona` `engineer`, `agent.guidance` `normal`,
55
+ `project.name` `Example Project`, `project.boxing` `white`,
56
+ `project.task.lifecycle` `solo`, `project.task.idscheme` `slug`,
57
+ `project.task.store.url` `ase:./.ase/task`,
58
+ `project.task.default.source` `worktree`,
59
+ `project.task.default.changeset` `worktree`,
60
+ `project.task.default.target` `source`,
61
+ `project.task.effort.scale` `15,60,240,960`,
62
+ `project.task.effort.factor` `1`, `project.task.effort.file` `1`,
63
+ `project.task.effort.line` `0.025`,
64
+ `project.task.effort.iteration` `2.5`, the full set of
65
+ `project.artifact.*` globs, the `board.tui.color.*`,
66
+ `board.web.color.*`, and `board.web.editor.keymap` defaults, and
67
+ `telemetry.enabled` `false`, `telemetry.prices.ai`
68
+ `*=4.00/20.00/0.20/5.00`, and `telemetry.prices.hr` `*=110`.
69
+ - `vibe`:
70
+ `agent.persona` `writer`, `project.name` `Example Project`, and
71
+ `project.boxing` `black`.
72
+ - `pro`:
73
+ `agent.persona` `engineer`, `project.name` `Example Project`, and
74
+ `project.boxing` `white`.
75
+ - `industry`:
76
+ `agent.persona` `engineer`, `project.name` `Example Project`, and
77
+ `project.boxing` `grey`.
78
+
79
+ Any other *type* is an error.
80
+
81
+ ## FILES
82
+
83
+ The configuration file of the target scope: *per-user configuration
84
+ directory*`/config.yaml` (`user`), `.ase/config.yaml` (`project`),
85
+ `.ase/task/`*id*`/config.yaml` (`task:`*id*), or *per-user state
86
+ directory*`/session/`*id*`/config.yaml` (`session:`*id*). See
87
+ `ase-config`(1).
88
+
89
+ ## EXIT STATUS
90
+
91
+ `0` on success, `1` on an unknown *type*, an invalid *scope*, or a
92
+ target file carrying invalid content.
93
+
94
+ ## EXAMPLES
95
+
96
+ ```sh
97
+ # initialize the project configuration for an industrial project
98
+ $ ase config init industry
99
+
100
+ # write the entire baseline into the user configuration
101
+ $ ase config --scope user init default
102
+ ```
103
+
104
+ ## SEE ALSO
105
+
106
+ `ase`(1), `ase-config`(1), `ase-config-list`(1), `ase-config-set`(1).
107
+
108
+ ## AUTHOR
109
+
110
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,68 @@
1
+ # ase-config-list(1) -- List the Effective Configuration
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase config`
6
+ \[`--scope` *scope*\]
7
+ `list`
8
+ \[`-h`|`--help`\]
9
+
10
+ ## DESCRIPTION
11
+
12
+ **ase config list** lists all configuration keys known to the
13
+ configuration schema, plus all further leaf keys found in the files of
14
+ the scope chain, with their effective values, rendered as a table with
15
+ the three columns `KEY`, `VALUE`, and `SCOPE`, sorted by key.
16
+
17
+ The `SCOPE` column names the scope which supplied the value: `default`
18
+ (the built-in defaults), `user`, `project`, `task:`*id*, or
19
+ `session:`*id*. For a key set on multiple scopes, only the value of the
20
+ strongest scope is shown. A key which is not set on any scope is shown
21
+ with an empty `VALUE` and the `SCOPE` `-`. The values of the secret keys
22
+ `project.task.store.token`, `project.relay.token`, and
23
+ `telemetry.service.token` are masked as `***`.
24
+
25
+ Invalid entries of the configuration files are warned about and
26
+ skipped.
27
+
28
+ ## OPTIONS
29
+
30
+ - \[`-h`|`--help`\]:
31
+ Show usage information and exit.
32
+
33
+ - \[`--scope` *scope*\]:
34
+ Select the scope chain whose values are cascaded. As an option of
35
+ `ase config`, it has to be given *before* `list`. The *scope* value
36
+ is a comma-separated list of the terms `user`, `project`, `task:`*id*,
37
+ and `session:`*id* (with *id* matching `[A-Za-z0-9._-]+`), at most
38
+ one per kind and in any order, canonicalized into the order `user` <
39
+ `project` < `task` < `session`.
40
+
41
+ `user` is always added implicitly, and `project` is added implicitly
42
+ whenever a project context (a Git working tree or a `.ase` directory
43
+ at or above the current directory) exists, but never above the
44
+ strongest explicitly requested term. An explicit `project` without a
45
+ project context is an error. Default: `project` inside a project
46
+ context, else `user`. See `ase-config`(1) for details.
47
+
48
+ ## EXIT STATUS
49
+
50
+ `0` on success, `1` on an invalid *scope*.
51
+
52
+ ## EXAMPLES
53
+
54
+ ```sh
55
+ # list the effective project configuration
56
+ $ ase config list
57
+
58
+ # list the configuration as seen by a particular task
59
+ $ ase config --scope task:json-export list
60
+ ```
61
+
62
+ ## SEE ALSO
63
+
64
+ `ase`(1), `ase-config`(1), `ase-config-get`(1).
65
+
66
+ ## AUTHOR
67
+
68
+ Dr. Ralf S. Engelschall <rse@engelschall.com>
@@ -0,0 +1,92 @@
1
+ # ase-config-set(1) -- Set a Configuration Value
2
+
3
+ ## SYNOPSIS
4
+
5
+ `ase config`
6
+ \[`--scope` *scope*\]
7
+ `set`
8
+ \[`-h`|`--help`\]
9
+ *key*
10
+ *value*
11
+
12
+ ## DESCRIPTION
13
+
14
+ **ase config set** sets the configuration *key* to *value* in the
15
+ configuration file of the target scope (the strongest scope of the
16
+ scope chain, by default `project` inside a project, else `user`),
17
+ creating the file, its parent directories, and the intermediate maps
18
+ of the dotted key as needed. Weaker and intermediate scopes are never
19
+ modified.
20
+
21
+ The *value* is validated against the configuration schema before the
22
+ file is written, and an invalid value is an error. Some keys are
23
+ writable on particular scopes only (e.g., `project.task.*` on `user`
24
+ and `project`, the token keys on `user`): setting such a key on any
25
+ other scope is an error naming the permitted scopes. See
26
+ `ase-config`(1) for all keys, their values, and their scopes. A target
27
+ file which already carries invalid content is not overwritten, as this
28
+ content would be lost.
29
+
30
+ The file is written under an advisory file lock and atomically, with
31
+ file mode `0600` for the `user` scope and for any file carrying a
32
+ secret key.
33
+
34
+ ## OPTIONS
35
+
36
+ - \[`-h`|`--help`\]:
37
+ Show usage information and exit.
38
+
39
+ - \[`--scope` *scope*\]:
40
+ Select the scope chain, whose strongest scope is the target scope
41
+ written by this command. As an option of `ase config`, it has to be
42
+ given *before* `set`. The *scope* value is a comma-separated list
43
+ of the terms `user`, `project`, `task:`*id*, and `session:`*id*
44
+ (with *id* matching `[A-Za-z0-9._-]+`), at most one per kind and in
45
+ any order, canonicalized into the order `user` < `project` < `task`
46
+ < `session`.
47
+
48
+ `user` is always added implicitly, and `project` is added implicitly
49
+ whenever a project context (a Git working tree or a `.ase` directory
50
+ at or above the current directory) exists, but never above the
51
+ strongest explicitly requested term, so an explicit `--scope user`
52
+ is never silently retargeted to `project`. An explicit `project`
53
+ without a project context is an error. Default: `project` inside a
54
+ project context, else `user`. See `ase-config`(1) for details.
55
+
56
+ ## ARGUMENTS
57
+
58
+ - *key*:
59
+ The dotted configuration key, e.g., `agent.persona`, or any
60
+ unambiguous trailing part of a known key, e.g., `persona`.
61
+
62
+ - *value*:
63
+ The value to set, stored as a string (e.g., `true` for
64
+ `telemetry.enabled` or `44318` for `telemetry.service.port`).
65
+
66
+ ## EXIT STATUS
67
+
68
+ `0` on success, `1` on an invalid *value*, a *key* not writable on the
69
+ target scope, an ambiguous *key*, an intermediate path of *key* which is
70
+ not a map, an invalid *scope*, or a target file carrying invalid
71
+ content.
72
+
73
+ ## EXAMPLES
74
+
75
+ ```sh
76
+ # switch the project to the enterprise task lifecycle model
77
+ $ ase config set project.task.lifecycle enterprise
78
+
79
+ # enable the AI usage accounting for the current user
80
+ $ ase config --scope user set telemetry.enabled true
81
+
82
+ # set the persona for a single session only
83
+ $ ase config --scope session:4711 set agent.persona caveman
84
+ ```
85
+
86
+ ## SEE ALSO
87
+
88
+ `ase`(1), `ase-config`(1), `ase-config-get`(1), `ase-config-delete`(1).
89
+
90
+ ## AUTHOR
91
+
92
+ Dr. Ralf S. Engelschall <rse@engelschall.com>