@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.
- package/dst/ase-agent-definition-core.js +111 -87
- package/dst/ase-agent-fleet.js +1 -1
- package/dst/ase-agent-runtime-claim.js +5 -3
- package/dst/ase-agent-runtime-engine.js +1 -1
- package/dst/ase-agent-runtime-phase.js +1 -1
- package/dst/ase-agent-runtime-request.js +1 -1
- package/dst/ase-agent-runtime.js +3 -5
- package/dst/ase-artifact.js +3 -3
- package/dst/ase-config-core.js +2 -16
- package/dst/ase-config-schema.js +1 -3
- package/dst/ase-config.js +2 -0
- package/dst/ase-hook.js +13 -13
- package/dst/ase-lib-daemon-cli.js +117 -4
- package/dst/ase-lib-server-cli.js +4 -5
- package/dst/ase-lib-version.js +14 -5
- package/dst/ase-man-catalog.js +229 -0
- package/dst/ase-man-render.js +278 -0
- package/dst/ase-man-tui.js +636 -0
- package/dst/ase-man.js +33 -27
- package/dst/ase-mcp.js +4 -4
- package/dst/ase-service-getopt.js +2 -2
- package/dst/ase-service-otel.js +4 -4
- package/dst/ase-service-skills.js +5 -15
- package/dst/ase-service.js +87 -210
- package/dst/ase-setup-common.js +1 -2
- package/dst/ase-setup-settings.js +6 -9
- package/dst/ase-setup.js +4 -5
- package/dst/ase-spec.js +103 -20
- package/dst/ase-statusline.js +170 -170
- package/dst/ase-task-board-filter.js +5 -4
- package/dst/ase-task-board-flow.js +7 -6
- package/dst/ase-task-board-graph.js +5 -4
- package/dst/ase-task-board-tui-control.js +41 -35
- package/dst/ase-task-board-tui-model.js +185 -167
- package/dst/ase-task-board-tui-popup.js +2 -3
- package/dst/ase-task-board-tui-view.js +74 -70
- package/dst/ase-task-board-web-client.js +27 -27
- package/dst/ase-task-board-web-server.js +2 -2
- package/dst/ase-task-board.js +1 -1
- package/dst/ase-task-format.js +1 -1
- package/dst/ase-task-store-client.js +17 -5
- package/dst/ase-task-store-core.js +5 -7
- package/dst/ase-task-store-issues.js +16 -1
- package/dst/ase-task-store-plugin-ase.js +7 -3
- package/dst/ase-task-store-plugin-gitea.js +9 -32
- package/dst/ase-task-store-plugin-github.js +3 -12
- package/dst/ase-task-store-plugin-gitlab.js +2 -18
- package/dst/ase-task.js +51 -23
- package/dst/ase-util-compat.js +1 -1
- package/dst/ase-util-diagram.js +13 -37
- package/dst/ase.js +5 -5
- package/dst/man/ase-agent-adhoc.md +1165 -0
- package/dst/man/ase-agent-condenser.md +383 -0
- package/dst/man/ase-agent-editor.md +441 -0
- package/dst/man/ase-agent-estimator.md +477 -0
- package/dst/man/ase-agent-fleet.md +358 -0
- package/dst/man/ase-agent-implementer.md +521 -0
- package/dst/man/ase-agent-integrator.md +449 -0
- package/dst/man/ase-agent-qualifier.md +426 -0
- package/dst/man/ase-agent-rebooter.md +384 -0
- package/dst/man/ase-agent-relay.md +262 -0
- package/dst/man/ase-agent-researcher.md +478 -0
- package/dst/man/ase-agent.md +628 -0
- package/dst/man/ase-artifact-list.md +57 -0
- package/dst/man/ase-artifact-name.md +56 -0
- package/dst/man/ase-artifact.md +92 -0
- package/dst/man/ase-config-delete.md +74 -0
- package/dst/man/ase-config-edit.md +83 -0
- package/dst/man/ase-config-get.md +70 -0
- package/dst/man/ase-config-init.md +110 -0
- package/dst/man/ase-config-list.md +68 -0
- package/dst/man/ase-config-set.md +92 -0
- package/dst/man/ase-config.md +426 -0
- package/dst/man/ase-hook-permission-request.md +61 -0
- package/dst/man/ase-hook-pre-tool-use.md +96 -0
- package/dst/man/ase-hook-session-end.md +71 -0
- package/dst/man/ase-hook-session-persona.md +65 -0
- package/dst/man/ase-hook-session-start.md +184 -0
- package/dst/man/ase-hook-stop.md +52 -0
- package/dst/man/ase-hook-user-prompt-submit.md +54 -0
- package/dst/man/ase-hook.md +93 -0
- package/dst/man/ase-man.md +195 -0
- package/dst/man/ase-mcp.md +102 -0
- package/dst/man/ase-service-log.md +59 -0
- package/dst/man/ase-service-send.md +60 -0
- package/dst/man/ase-service-start.md +93 -0
- package/dst/man/ase-service-status.md +58 -0
- package/dst/man/ase-service-stop.md +52 -0
- package/dst/man/ase-service.md +124 -0
- package/dst/man/ase-setup-disable.md +67 -0
- package/dst/man/ase-setup-enable.md +66 -0
- package/dst/man/ase-setup-install.md +116 -0
- package/dst/man/ase-setup-mcp.md +213 -0
- package/dst/man/ase-setup-status.md +101 -0
- package/dst/man/ase-setup-statusline.md +162 -0
- package/dst/man/ase-setup-telemetry.md +166 -0
- package/dst/man/ase-setup-uninstall.md +85 -0
- package/dst/man/ase-setup-update.md +117 -0
- package/dst/man/ase-setup.md +156 -0
- package/dst/man/ase-spec-export.md +99 -0
- package/dst/man/ase-spec-init.md +57 -0
- package/dst/man/ase-spec-lint.md +74 -0
- package/dst/man/ase-spec-preview.md +57 -0
- package/dst/man/ase-spec.md +85 -0
- package/dst/man/ase-statusline.md +330 -0
- package/dst/man/ase-task-assign.md +138 -0
- package/dst/man/ase-task-board.md +651 -0
- package/dst/man/ase-task-delete.md +46 -0
- package/dst/man/ase-task-edit.md +73 -0
- package/dst/man/ase-task-idscheme.md +92 -0
- package/dst/man/ase-task-lifecycle.md +92 -0
- package/dst/man/ase-task-list.md +86 -0
- package/dst/man/ase-task-load.md +48 -0
- package/dst/man/ase-task-newid.md +100 -0
- package/dst/man/ase-task-purge.md +49 -0
- package/dst/man/ase-task-rename.md +69 -0
- package/dst/man/ase-task-request.md +108 -0
- package/dst/man/ase-task-save.md +78 -0
- package/dst/man/ase-task-status.md +79 -0
- package/dst/man/ase-task-store.md +377 -0
- package/dst/man/ase-task-view.md +50 -0
- package/dst/man/ase-task.md +335 -0
- package/dst/man/ase-util-compat.md +38 -0
- package/dst/man/ase-util-diagram.md +140 -0
- package/dst/man/ase-util-meta.md +68 -0
- package/dst/man/ase-util-metric.md +74 -0
- package/dst/man/ase-util-mint.md +85 -0
- package/dst/man/ase-util-worktree.md +109 -0
- package/dst/man/ase-util.md +81 -0
- package/dst/man/ase.md +228 -0
- package/package.json +12 -17
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.github/plugin/plugin.json +1 -1
- package/plugin/agents/ase-code-lint.md +3 -3
- package/plugin/agents/ase-docs-proofread.md +3 -3
- package/plugin/agents/ase-docs-refine.md +3 -3
- package/plugin/agents/ase-spec-lint.md +338 -0
- package/plugin/meta/ase-skill.md +7 -0
- package/plugin/mods/ase-mods.ts +10 -7
- package/plugin/mods/claude-code.d.ts +26 -3
- package/plugin/skills/ase-code-analyze/SKILL.md +18 -10
- package/plugin/skills/ase-code-analyze/help.md +11 -6
- package/plugin/skills/ase-code-lint/SKILL.md +37 -23
- package/plugin/skills/ase-code-lint/help.md +10 -5
- package/plugin/skills/ase-help-intent/data.md +204 -13
- package/plugin/skills/ase-help-skill/catalog.md +1 -0
- package/plugin/skills/ase-meta-workflow/workflow.txt +2 -0
- package/plugin/skills/ase-repo-commit/SKILL.md +1 -0
- package/plugin/skills/ase-repo-merge/SKILL.md +1 -0
- package/plugin/skills/ase-repo-review/SKILL.md +5 -3
- package/plugin/skills/ase-repo-review/help.md +3 -1
- package/plugin/skills/ase-spec-edit/SKILL.md +3 -3
- package/plugin/skills/ase-spec-edit/help.md +1 -1
- package/plugin/skills/ase-spec-lint/SKILL.md +695 -0
- package/plugin/skills/ase-spec-lint/help.md +171 -0
- package/plugin/skills/ase-task-implement/SKILL.md +24 -6
- package/plugin/skills/ase-task-implement/help.md +11 -1
- package/dst/man/ase-agent-adhoc.1 +0 -515
- package/dst/man/ase-agent-condenser.1 +0 -193
- package/dst/man/ase-agent-editor.1 +0 -212
- package/dst/man/ase-agent-estimator.1 +0 -214
- package/dst/man/ase-agent-fleet.1 +0 -185
- package/dst/man/ase-agent-implementer.1 +0 -233
- package/dst/man/ase-agent-integrator.1 +0 -213
- package/dst/man/ase-agent-qualifier.1 +0 -214
- package/dst/man/ase-agent-rebooter.1 +0 -193
- package/dst/man/ase-agent-relay.1 +0 -128
- package/dst/man/ase-agent-researcher.1 +0 -217
- package/dst/man/ase-agent.1 +0 -264
- package/dst/man/ase-artifact-list.1 +0 -38
- package/dst/man/ase-artifact-name.1 +0 -39
- package/dst/man/ase-artifact.1 +0 -56
- package/dst/man/ase-config-delete.1 +0 -45
- package/dst/man/ase-config-edit.1 +0 -48
- package/dst/man/ase-config-get.1 +0 -46
- package/dst/man/ase-config-init.1 +0 -60
- package/dst/man/ase-config-list.1 +0 -42
- package/dst/man/ase-config-set.1 +0 -52
- package/dst/man/ase-config.1 +0 -231
- package/dst/man/ase-hook-permission-request.1 +0 -36
- package/dst/man/ase-hook-pre-tool-use.1 +0 -59
- package/dst/man/ase-hook-session-end.1 +0 -47
- package/dst/man/ase-hook-session-persona.1 +0 -37
- package/dst/man/ase-hook-session-start.1 +0 -81
- package/dst/man/ase-hook-stop.1 +0 -34
- package/dst/man/ase-hook-user-prompt-submit.1 +0 -34
- package/dst/man/ase-hook.1 +0 -51
- package/dst/man/ase-man.1 +0 -67
- package/dst/man/ase-mcp.1 +0 -61
- package/dst/man/ase-service-log.1 +0 -43
- package/dst/man/ase-service-send.1 +0 -47
- package/dst/man/ase-service-start.1 +0 -54
- package/dst/man/ase-service-status.1 +0 -46
- package/dst/man/ase-service-stop.1 +0 -37
- package/dst/man/ase-service.1 +0 -85
- package/dst/man/ase-setup-disable.1 +0 -44
- package/dst/man/ase-setup-enable.1 +0 -45
- package/dst/man/ase-setup-install.1 +0 -73
- package/dst/man/ase-setup-mcp.1 +0 -124
- package/dst/man/ase-setup-status.1 +0 -60
- package/dst/man/ase-setup-statusline.1 +0 -92
- package/dst/man/ase-setup-telemetry.1 +0 -92
- package/dst/man/ase-setup-uninstall.1 +0 -59
- package/dst/man/ase-setup-update.1 +0 -64
- package/dst/man/ase-setup.1 +0 -93
- package/dst/man/ase-spec-export.1 +0 -62
- package/dst/man/ase-spec-lint.1 +0 -40
- package/dst/man/ase-spec-preview.1 +0 -40
- package/dst/man/ase-spec.1 +0 -46
- package/dst/man/ase-statusline.1 +0 -189
- package/dst/man/ase-task-assign.1 +0 -71
- package/dst/man/ase-task-board.1 +0 -384
- package/dst/man/ase-task-delete.1 +0 -35
- package/dst/man/ase-task-edit.1 +0 -46
- package/dst/man/ase-task-idscheme.1 +0 -65
- package/dst/man/ase-task-lifecycle.1 +0 -57
- package/dst/man/ase-task-list.1 +0 -47
- package/dst/man/ase-task-load.1 +0 -36
- package/dst/man/ase-task-newid.1 +0 -61
- package/dst/man/ase-task-purge.1 +0 -37
- package/dst/man/ase-task-rename.1 +0 -44
- package/dst/man/ase-task-request.1 +0 -61
- package/dst/man/ase-task-save.1 +0 -48
- package/dst/man/ase-task-status.1 +0 -55
- package/dst/man/ase-task-store.1 +0 -194
- package/dst/man/ase-task-view.1 +0 -40
- package/dst/man/ase-task.1 +0 -160
- package/dst/man/ase-util-compat.1 +0 -25
- package/dst/man/ase-util-diagram.1 +0 -76
- package/dst/man/ase-util-meta.1 +0 -45
- package/dst/man/ase-util-metric.1 +0 -54
- package/dst/man/ase-util-mint.1 +0 -59
- package/dst/man/ase-util-worktree.1 +0 -72
- package/dst/man/ase-util.1 +0 -50
- package/dst/man/ase.1 +0 -124
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
# ase-config(1) -- Manage the Layered ASE Configuration
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase config`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
\[`--scope` *scope*\]
|
|
8
|
+
*command*
|
|
9
|
+
\[*args* \[...\]\]
|
|
10
|
+
|
|
11
|
+
`ase config` \[`--scope` *scope*\] `init` *type*
|
|
12
|
+
|
|
13
|
+
`ase config` \[`--scope` *scope*\] `list`
|
|
14
|
+
|
|
15
|
+
`ase config` \[`--scope` *scope*\] `edit`
|
|
16
|
+
|
|
17
|
+
`ase config` \[`--scope` *scope*\] `get` *key*
|
|
18
|
+
|
|
19
|
+
`ase config` \[`--scope` *scope*\] `set` *key* *value*
|
|
20
|
+
|
|
21
|
+
`ase config` \[`--scope` *scope*\] `delete` *key*
|
|
22
|
+
|
|
23
|
+
## DESCRIPTION
|
|
24
|
+
|
|
25
|
+
**ase config** manages the layered *ASE* configuration, a stack of
|
|
26
|
+
`config.yaml` files of the *scopes* `user` < `project` < `task:`*id* <
|
|
27
|
+
`session:`*id*, on top of a built-in `default` scope carrying the
|
|
28
|
+
default values. Reads cascade from the strongest scope down to the
|
|
29
|
+
weakest one and return the first defined value, while writes are
|
|
30
|
+
always confined to the file of the strongest scope of the chain (the
|
|
31
|
+
*target* scope).
|
|
32
|
+
|
|
33
|
+
All files are validated against the configuration schema: on read,
|
|
34
|
+
unknown or invalid entries are warned about and dropped from the
|
|
35
|
+
in-memory view, while on set, delete, and write they lead to a fatal
|
|
36
|
+
error. A target file still carrying invalid content is never
|
|
37
|
+
overwritten, as the skipped content would otherwise be lost: repair
|
|
38
|
+
it first (e.g. via `ase config edit`).
|
|
39
|
+
|
|
40
|
+
Obsolete (pre-1.1.0) entries `project.artifact.task.{basedir,files}`
|
|
41
|
+
and `agent.{task,skill}` are migrated in place on reading: a `basedir`
|
|
42
|
+
becomes `project.task.store.url` (as `ase:`*basedir*) unless the
|
|
43
|
+
latter is already set, and the other entries are dropped.
|
|
44
|
+
|
|
45
|
+
A *key* is a dotted path like `agent.persona`. Any unambiguous
|
|
46
|
+
trailing part of a known key is accepted, too, e.g., `persona` for
|
|
47
|
+
`agent.persona` or `store.url` for `project.task.store.url`, while an
|
|
48
|
+
ambiguous one (like `color.dim`) is an error.
|
|
49
|
+
|
|
50
|
+
Without a *command*, the usage information is shown and the command
|
|
51
|
+
exits with status `1`.
|
|
52
|
+
|
|
53
|
+
## OPTIONS
|
|
54
|
+
|
|
55
|
+
- \[`-h`|`--help`\]:
|
|
56
|
+
Show usage information and exit.
|
|
57
|
+
|
|
58
|
+
- \[`--scope` *scope*\]:
|
|
59
|
+
Select the scope chain. This option belongs to `ase config` itself
|
|
60
|
+
and hence has to be given *before* the *command*, e.g.,
|
|
61
|
+
`ase config --scope user set agent.persona writer`.
|
|
62
|
+
|
|
63
|
+
The *scope* value is a comma-separated list of scope terms, in any
|
|
64
|
+
order, where each term is one of `user`, `project`, `task:`*id*, or
|
|
65
|
+
`session:`*id* (with *id* matching `[A-Za-z0-9._-]+`, but neither `.`
|
|
66
|
+
nor `..`). At most one term per kind is allowed. The chain is
|
|
67
|
+
canonicalized into the fixed inheritance order `default` < `user` <
|
|
68
|
+
`project` < `task` < `session`:
|
|
69
|
+
|
|
70
|
+
- `user` is always implicitly added at the bottom of the chain.
|
|
71
|
+
- `project` is implicitly added only when a *project context*
|
|
72
|
+
exists, i.e., when the current working directory is inside a Git
|
|
73
|
+
working tree or a `.ase` directory exists at or above it (except
|
|
74
|
+
in the home directory), and only as long as it stays weaker than
|
|
75
|
+
the strongest explicitly requested term, so an explicit `--scope
|
|
76
|
+
user` is never silently retargeted to `project`.
|
|
77
|
+
- Specifying `project` explicitly without a project context is an
|
|
78
|
+
error.
|
|
79
|
+
|
|
80
|
+
Without `--scope`, the chain is `project` (with `user` below it) when
|
|
81
|
+
a project context exists, otherwise `user` only. Example: `--scope
|
|
82
|
+
task:T1,session:S1` yields the chain `default` -> `user` -> `project`
|
|
83
|
+
-> `task:T1` -> `session:S1` with `session:S1` as the target scope.
|
|
84
|
+
|
|
85
|
+
## COMMANDS
|
|
86
|
+
|
|
87
|
+
- `init` *type*:
|
|
88
|
+
Initialize the target scope with the preset values of *type*
|
|
89
|
+
(`default`, `vibe`, `pro`, or `industry`). See `ase-config-init`(1).
|
|
90
|
+
|
|
91
|
+
- `list`:
|
|
92
|
+
List all configuration keys with their effective values and the
|
|
93
|
+
scopes supplying them. See `ase-config-list`(1).
|
|
94
|
+
|
|
95
|
+
- `edit`:
|
|
96
|
+
Edit the configuration file of the target scope with the text editor.
|
|
97
|
+
See `ase-config-edit`(1).
|
|
98
|
+
|
|
99
|
+
- `get` *key*:
|
|
100
|
+
Print the effective value of *key*. See `ase-config-get`(1).
|
|
101
|
+
|
|
102
|
+
- `set` *key* *value*:
|
|
103
|
+
Set *key* to *value* on the target scope. See `ase-config-set`(1).
|
|
104
|
+
|
|
105
|
+
- `delete` *key*:
|
|
106
|
+
Delete *key* from the target scope. See `ase-config-delete`(1).
|
|
107
|
+
|
|
108
|
+
## CONFIGURATION KEYS
|
|
109
|
+
|
|
110
|
+
The following keys are recognized. Every key is restricted to the
|
|
111
|
+
listed values (where *string* means any non-empty string) and is
|
|
112
|
+
writable on all scopes `user`, `project`, `task`, and `session`,
|
|
113
|
+
unless stated otherwise. A default stems from the built-in `default`
|
|
114
|
+
scope (shown by `ase config list` with scope `default`) or, where
|
|
115
|
+
stated, from the code using the key.
|
|
116
|
+
|
|
117
|
+
Project identity and classification:
|
|
118
|
+
|
|
119
|
+
- `project.id` (*string*):
|
|
120
|
+
The unique id of the project. Default: the sanitized basename of the
|
|
121
|
+
project root (with all characters other than `A-Z`, `a-z`, `0-9`,
|
|
122
|
+
`_`, and `-` replaced by `_`), or *basedir*`-`*worktree* if the
|
|
123
|
+
project root is a worktree *basedir*`/`*worktree* next to an `active`
|
|
124
|
+
symbolic link in *basedir*. An explicit id is required for a remote
|
|
125
|
+
task store and for the agent relay.
|
|
126
|
+
|
|
127
|
+
- `project.name` (*string*):
|
|
128
|
+
The full name of the project (default: `Example Project`).
|
|
129
|
+
|
|
130
|
+
- `project.boxing` (`white`, `grey`, or `black`):
|
|
131
|
+
Whether the project artifacts are treated as a white box (fully
|
|
132
|
+
transparent and understood), grey box (partially), or black box (not
|
|
133
|
+
at all), which modulates the work depth and output visibility of the
|
|
134
|
+
skills (default: `white`).
|
|
135
|
+
|
|
136
|
+
- `project.users` (*string*, `user` and `project` scopes only):
|
|
137
|
+
The comma-separated list of the known human assignees of the tasks
|
|
138
|
+
(default: empty). If not empty, an assignment to anybody else than
|
|
139
|
+
`none`, the current user, one of these users, or an agent present at
|
|
140
|
+
the agent relay is warned about (see `ase-task-assign`(1)), and the
|
|
141
|
+
assign popup of the task boards suggests these users (else the
|
|
142
|
+
current user) besides the agents (see `ase-task-board`(1)).
|
|
143
|
+
|
|
144
|
+
Task plans (all writable on the `user` and `project` scopes only,
|
|
145
|
+
`project.task.store.token` on the `user` scope only):
|
|
146
|
+
|
|
147
|
+
- `project.task.lifecycle` (`solo`, `team`, or `enterprise`):
|
|
148
|
+
The task lifecycle model: single-phase for a local solo developer,
|
|
149
|
+
two-phase for a small team, or four-phase for a gated enterprise
|
|
150
|
+
pipeline (default: `solo`). See `ase-task-lifecycle`(1).
|
|
151
|
+
|
|
152
|
+
- `project.task.idscheme` (`slug`\[`:`*words*\], `seq`\[`:`*template*\],
|
|
153
|
+
or `any`):
|
|
154
|
+
The task id scheme (default: `slug`). See `ase-task-idscheme`(1) and
|
|
155
|
+
`ase-task-newid`(1).
|
|
156
|
+
|
|
157
|
+
- `project.task.store.url` (*string*):
|
|
158
|
+
The URL of the task store: `ase:`*path* (local, default
|
|
159
|
+
`ase:./.ase/task`), `ase://`*addr*`:`*port*\[`/`*token*\] resp.
|
|
160
|
+
`ases://`*addr*`:`*port*\[`/`*token*\]\[`?insecure`\] (remote task
|
|
161
|
+
store server), `github:`*owner*`/`*repo* (and
|
|
162
|
+
`github+http`\[`s`\]`://`*host*`/`*owner*`/`*repo*),
|
|
163
|
+
`gitlab:`*namespace*`/`*project* (and `gitlab://`*host*`/`...,
|
|
164
|
+
`gitlab+http`\[`s`\]`://`*host*`/`...), or
|
|
165
|
+
`gitea+http`\[`s`\]`://`*host*`/`*owner*`/`*repo*. See `ase-task`(1).
|
|
166
|
+
|
|
167
|
+
- `project.task.store.token` (*string*, `user` scope only):
|
|
168
|
+
The bearer token of a remote task store, resp. the token of a GitHub,
|
|
169
|
+
GitLab, or Gitea task store. Masked as `***` by `ase config list`.
|
|
170
|
+
|
|
171
|
+
- `project.task.store.crt`, `project.task.store.key` (*string*):
|
|
172
|
+
The PEM certificate (chain) and private key files of the task store
|
|
173
|
+
server, relative to the directory of the configuration file defining
|
|
174
|
+
them. See `ase-task-store`(1).
|
|
175
|
+
|
|
176
|
+
- `project.task.default.source` (`worktree` or `branch:`*name*):
|
|
177
|
+
The default of the `Source:` key of the task plans (default:
|
|
178
|
+
`worktree`).
|
|
179
|
+
|
|
180
|
+
- `project.task.default.changeset` (`worktree`, `branch:`*name*, or
|
|
181
|
+
`attachment:`*name*):
|
|
182
|
+
The default of the `Changeset:` key of the task plans (default:
|
|
183
|
+
`worktree`).
|
|
184
|
+
|
|
185
|
+
- `project.task.default.target` (`worktree`, `branch:`*name*, or
|
|
186
|
+
`source`):
|
|
187
|
+
The default of the `Target:` key of the task plans (default:
|
|
188
|
+
`source`).
|
|
189
|
+
|
|
190
|
+
A branch *name* has to start with a letter, digit, or `_`, consist of
|
|
191
|
+
letters, digits, `_`, `.`, `/`, and `-`, must not end in `/`, `.`, or
|
|
192
|
+
`.lock`, and must not contain `..` or `//`. An attachment *name*
|
|
193
|
+
consists of letters, digits, `_`, and `-`. A branch or attachment
|
|
194
|
+
*name* can carry the placeholder `{id}`, which reads as the id of the
|
|
195
|
+
task (with every character other than letters, digits, `_`, and `-`
|
|
196
|
+
replaced by `-`, runs of `-` reduced to one, and leading and trailing
|
|
197
|
+
`-` and `_` removed, e.g., `12` for `#12` and `FOO-12` for `FOO#12`),
|
|
198
|
+
e.g., `branch:cs-{id}` for a
|
|
199
|
+
separate changeset branch per task.
|
|
200
|
+
|
|
201
|
+
- `project.task.effort.scale` (*xs*`,`*s*`,`*m*`,`*l*):
|
|
202
|
+
The upper bounds of the effort size bands `XS`, `S`, `M`, and `L` of
|
|
203
|
+
the `Effort:` key of the task plans, in strictly ascending human
|
|
204
|
+
minutes, while `XL` is open-ended (default: `15,60,240,960`). The
|
|
205
|
+
task boards sum the efforts via the band midpoints, counting `XL` as
|
|
206
|
+
twice the `L` bound.
|
|
207
|
+
|
|
208
|
+
- `project.task.effort.factor` (*number*):
|
|
209
|
+
The human minutes per point of the *attention score* of the effort
|
|
210
|
+
estimation, i.e., of the weighted requirements, behaviors, and
|
|
211
|
+
changes stated by the checklist items of a plan (default: `1`).
|
|
212
|
+
Fitted and stored by `/ase-task-estimate --calibrate --save`.
|
|
213
|
+
|
|
214
|
+
- `project.task.effort.file`, `project.task.effort.line` (*number*):
|
|
215
|
+
The additional human minutes per touched file resp. per predicted
|
|
216
|
+
changed line of the *volume score* of the effort estimation, where
|
|
217
|
+
the line minutes also cover the edge cases and polishing no plan
|
|
218
|
+
describes, and a newly written line weighs three times a changed
|
|
219
|
+
one (defaults: `1` resp. `0.025`). Fitted and stored by
|
|
220
|
+
`/ase-task-estimate --calibrate --save`.
|
|
221
|
+
|
|
222
|
+
- `project.task.effort.iteration` (*number*):
|
|
223
|
+
The multiplier of the estimated minutes of a task whose main
|
|
224
|
+
deliverable is an interactive or visual user interface, covering
|
|
225
|
+
its many rounds of post-adjustment, at least `1` (default: `2.5`).
|
|
226
|
+
Not fitted by the calibration.
|
|
227
|
+
|
|
228
|
+
Agent relay (all writable on the `user` and `project` scopes only,
|
|
229
|
+
`project.relay.token` on the `user` scope only):
|
|
230
|
+
|
|
231
|
+
- `project.relay.url` (*string*):
|
|
232
|
+
The URL of the agent relay, as `ase://`*addr*`:`*port*\[`/`*token*\]
|
|
233
|
+
or `ases://`*addr*`:`*port*\[`/`*token*\]\[`?insecure`\] (default:
|
|
234
|
+
none). See `ase-agent-relay`(1).
|
|
235
|
+
|
|
236
|
+
- `project.relay.token` (*string*, `user` scope only):
|
|
237
|
+
The bearer token of the agent relay. Masked as `***` by `ase config
|
|
238
|
+
list`.
|
|
239
|
+
|
|
240
|
+
- `project.relay.crt`, `project.relay.key` (*string*):
|
|
241
|
+
The PEM certificate (chain) and private key files of the agent relay
|
|
242
|
+
server, relative to the directory of the configuration file defining
|
|
243
|
+
them.
|
|
244
|
+
|
|
245
|
+
Per-project service:
|
|
246
|
+
|
|
247
|
+
- `project.service.port` (*port* `1024`..`65535`, `project` scope
|
|
248
|
+
only):
|
|
249
|
+
The preferred port of the per-project background service on
|
|
250
|
+
`127.0.0.1`, falling back to a random port out of the range
|
|
251
|
+
`42000`..`44000` if unavailable (default: none). See
|
|
252
|
+
`ase-service-start`(1).
|
|
253
|
+
|
|
254
|
+
Project artifacts (all writable on the `user` and `project` scopes
|
|
255
|
+
only), each kind defined by a `basedir` directory (relative to the
|
|
256
|
+
project root, empty for the root itself) and a whitespace-separated
|
|
257
|
+
`files` glob specification (relative to `basedir`, with `!` negating a
|
|
258
|
+
glob). See `ase-artifact`(1):
|
|
259
|
+
|
|
260
|
+
- `project.artifact.spec.basedir`, `project.artifact.spec.files`:
|
|
261
|
+
The specification files (default: `docs/specbook` and
|
|
262
|
+
`*.{md,txt,svg,png,jpg}`).
|
|
263
|
+
|
|
264
|
+
- `project.artifact.spec.schema` (*string*):
|
|
265
|
+
The whitespace-separated list of *SpecBook* schema configuration
|
|
266
|
+
files, where `std` names the bundled standard one and every other
|
|
267
|
+
entry is a file relative to the project root (default: empty, i.e.,
|
|
268
|
+
`std`). See `ase-spec`(1).
|
|
269
|
+
|
|
270
|
+
- `project.artifact.code.basedir`, `project.artifact.code.files`:
|
|
271
|
+
The source code files (default: `src` and `** !**/etc/**
|
|
272
|
+
!**/{.gitignore,.npmignore,package.json}`).
|
|
273
|
+
|
|
274
|
+
- `project.artifact.docs.basedir`, `project.artifact.docs.files`:
|
|
275
|
+
The documentation files (default: `doc` and `**
|
|
276
|
+
**/{README,LICENSE,CHANGELOG}.{md,txt} !{spec,arch}/**`).
|
|
277
|
+
|
|
278
|
+
- `project.artifact.infr.basedir`, `project.artifact.infr.files`:
|
|
279
|
+
The infrastructure files (default: empty and
|
|
280
|
+
`**/{.github,.claude*,etc}/**
|
|
281
|
+
**/{AGENTS.md,{package,tsconfig*}.json,.{git,npm}ignore}`).
|
|
282
|
+
|
|
283
|
+
Agent:
|
|
284
|
+
|
|
285
|
+
- `agent.persona` (`writer`, `engineer`, `journalist`, `telegrapher`,
|
|
286
|
+
or `caveman`):
|
|
287
|
+
The communication style of the AI agent (default: `engineer`).
|
|
288
|
+
|
|
289
|
+
- `agent.guidance` (`none`, `minimal`, `normal`, or `verbose`):
|
|
290
|
+
The amount of unsolicited help hints of the AI agent (default:
|
|
291
|
+
`normal`).
|
|
292
|
+
|
|
293
|
+
AI usage accounting (see `ase-task-assign`(1) and
|
|
294
|
+
`ase-setup-telemetry`(1)):
|
|
295
|
+
|
|
296
|
+
- `telemetry.enabled` (`true` or `false`, `user` and `project` scopes
|
|
297
|
+
only):
|
|
298
|
+
Whether the AI usage accounting is enabled as a whole (default:
|
|
299
|
+
`false`).
|
|
300
|
+
|
|
301
|
+
- `telemetry.implicit` (`true` or `false`, `user` and `project` scopes
|
|
302
|
+
only):
|
|
303
|
+
Whether the usage of an interactive session is also accounted onto
|
|
304
|
+
its active task while the task is *unassigned*, i.e., without
|
|
305
|
+
assigning it to oneself (default: `true`, never for task `default`).
|
|
306
|
+
|
|
307
|
+
- `telemetry.service.port` (*port* `1024`..`65535`, `user` scope only):
|
|
308
|
+
The port of the per-user OTLP ingress on `127.0.0.1` (default:
|
|
309
|
+
`44318`).
|
|
310
|
+
|
|
311
|
+
- `telemetry.service.token` (*string*, `user` scope only):
|
|
312
|
+
The bearer token of the OTLP ingress, generated by `ase setup
|
|
313
|
+
telemetry activate`. Masked as `***` by `ase config list`.
|
|
314
|
+
|
|
315
|
+
- `telemetry.service.interval` (*minutes*, `user` and `project` scopes
|
|
316
|
+
only):
|
|
317
|
+
The interval of the interim bookings of the open usage windows
|
|
318
|
+
(default: `10`, `0` disables).
|
|
319
|
+
|
|
320
|
+
- `telemetry.service.idle` (*minutes*, `user` and `project` scopes
|
|
321
|
+
only):
|
|
322
|
+
The idle time after which a usage window pauses (default: `30`, `0`
|
|
323
|
+
disables).
|
|
324
|
+
|
|
325
|
+
- `telemetry.prices.ai` (*table*, `user` scope only):
|
|
326
|
+
The price table *model*`=`*input*`/`*output*\[`/`*cread*`/`*cwrite*\]
|
|
327
|
+
\[...\] (whitespace-separated) in USD per million input, output,
|
|
328
|
+
cache read, and cache write tokens (the cache prices defaulting to the
|
|
329
|
+
input price), keyed by the model or the tool name, with `*` for all
|
|
330
|
+
others (default: `*=4.00/20.00/0.20/5.00`).
|
|
331
|
+
|
|
332
|
+
- `telemetry.prices.hr` (*table*, `user` and `project` scopes only):
|
|
333
|
+
The hourly rate table *user-id*`=`*usd-per-hour*\[`,`...\] of the
|
|
334
|
+
human time, keyed by the assignee, with `*` for all others (default:
|
|
335
|
+
`*=110`).
|
|
336
|
+
|
|
337
|
+
Task board (all writable on the `user` and `project` scopes only, see
|
|
338
|
+
`ase-task-board`(1)):
|
|
339
|
+
|
|
340
|
+
- `board.tui.color.dim`, `board.tui.color.normal`,
|
|
341
|
+
`board.tui.color.accent`, `board.tui.color.signal`:
|
|
342
|
+
The colors of the four color roles of the terminal board (defaults:
|
|
343
|
+
`grey`, `default`, `blue`, and `red`), each either `default` (the
|
|
344
|
+
foreground color of the terminal), a color name (like `blue` or
|
|
345
|
+
`blueBright`), `#rgb`, `#rrggbb`, `ansi256(`*n*`)`, or
|
|
346
|
+
`rgb(`*r*`,`*g*`,`*b*`)`.
|
|
347
|
+
|
|
348
|
+
- `board.web.color.dim`, `board.web.color.normal`,
|
|
349
|
+
`board.web.color.accent`, `board.web.color.signal`:
|
|
350
|
+
The base colors of the four color roles of the web board (defaults:
|
|
351
|
+
`grey`, `black`, `blue`, and `orange`), each either `default`, a
|
|
352
|
+
color name (`black`, `grey`, `gray`, `brown`, `red`, `orange`,
|
|
353
|
+
`yellow`, `green`, `teal`, `cyan`, `blue`, `purple`, or `magenta`),
|
|
354
|
+
`#rgb`, or `#rrggbb`. Each base color is expanded into a spread of 64
|
|
355
|
+
colors over the entire lightness range, out of which the web board
|
|
356
|
+
takes all its colors.
|
|
357
|
+
|
|
358
|
+
- `board.web.editor.keymap` (`default`, `vim`, or `emacs`):
|
|
359
|
+
The key bindings of the task plan editor of the web board (default:
|
|
360
|
+
`default`).
|
|
361
|
+
|
|
362
|
+
## ENVIRONMENT
|
|
363
|
+
|
|
364
|
+
- `EDITOR`, `VISUAL`:
|
|
365
|
+
The text editor of `ase config edit`.
|
|
366
|
+
|
|
367
|
+
- `XDG_CONFIG_HOME`, `XDG_STATE_HOME`, `APPDATA`, `LOCALAPPDATA`:
|
|
368
|
+
The base directories of the *per-user configuration directory* and
|
|
369
|
+
the *per-user state directory* (see **FILES**).
|
|
370
|
+
|
|
371
|
+
## FILES
|
|
372
|
+
|
|
373
|
+
- *per-user configuration directory*`/config.yaml`:
|
|
374
|
+
The configuration of scope `user` (with file mode `0600`). The
|
|
375
|
+
per-user configuration directory is `~/Library/Application
|
|
376
|
+
Support/ase` on macOS, `%APPDATA%\ase` on Windows, and
|
|
377
|
+
`$XDG_CONFIG_HOME/ase` (falling back to `~/.config/ase`) elsewhere.
|
|
378
|
+
|
|
379
|
+
- `.ase/config.yaml`:
|
|
380
|
+
The configuration of scope `project`, searched upward from the
|
|
381
|
+
current working directory up to the project root, else located in the
|
|
382
|
+
project root.
|
|
383
|
+
|
|
384
|
+
- `.ase/task/`*id*`/config.yaml`:
|
|
385
|
+
The configuration of scope `task:`*id*, located in the project root
|
|
386
|
+
(or the current working directory outside of a project).
|
|
387
|
+
|
|
388
|
+
- *per-user state directory*`/session/`*id*`/config.yaml`:
|
|
389
|
+
The configuration of scope `session:`*id*, independent of any
|
|
390
|
+
project. The per-user state directory is `~/Library/Application
|
|
391
|
+
Support/ase` on macOS, `%LOCALAPPDATA%\ase` on Windows, and
|
|
392
|
+
`$XDG_STATE_HOME/ase` (falling back to `~/.local/state/ase`)
|
|
393
|
+
elsewhere.
|
|
394
|
+
|
|
395
|
+
Every write happens under an advisory file lock and atomically. A file
|
|
396
|
+
carrying a secret key (a token) is written with file mode `0600`.
|
|
397
|
+
|
|
398
|
+
## EXIT STATUS
|
|
399
|
+
|
|
400
|
+
`0` on success, `1` on any error (including a missing *command*).
|
|
401
|
+
|
|
402
|
+
## EXAMPLES
|
|
403
|
+
|
|
404
|
+
```sh
|
|
405
|
+
# initialize the project configuration with the "industry" preset
|
|
406
|
+
$ ase config init industry
|
|
407
|
+
|
|
408
|
+
# show the effective configuration
|
|
409
|
+
$ ase config list
|
|
410
|
+
|
|
411
|
+
# set the persona of the agent on the user scope
|
|
412
|
+
$ ase config --scope user set agent.persona telegrapher
|
|
413
|
+
|
|
414
|
+
# read a value by an abbreviated key
|
|
415
|
+
$ ase config get persona
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
## SEE ALSO
|
|
419
|
+
|
|
420
|
+
`ase`(1), `ase-config-init`(1), `ase-config-list`(1),
|
|
421
|
+
`ase-config-edit`(1), `ase-config-get`(1), `ase-config-set`(1),
|
|
422
|
+
`ase-config-delete`(1).
|
|
423
|
+
|
|
424
|
+
## AUTHOR
|
|
425
|
+
|
|
426
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# ase-hook-permission-request(1) -- Handle the PermissionRequest Hook Event
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase hook permission-request`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
\[`-t`|`--tool` *tool*\]
|
|
8
|
+
|
|
9
|
+
## DESCRIPTION
|
|
10
|
+
|
|
11
|
+
**ase hook permission-request** handles the `PermissionRequest` hook
|
|
12
|
+
event of *OpenAI Codex CLI*, which the agent tool fires only when a
|
|
13
|
+
tool invocation would otherwise require an interactive user approval.
|
|
14
|
+
It is intended to be invoked by the agent tool internally as a
|
|
15
|
+
configured hook handler only, and not directly by end users. It is
|
|
16
|
+
configured for `--tool codex` only, as *OpenAI Codex CLI* does not
|
|
17
|
+
honor an approval in its `PreToolUse` event.
|
|
18
|
+
|
|
19
|
+
The handler reads the event payload from standard input, a JSON object
|
|
20
|
+
with the tool name (field `tool_name`), the tool input (field
|
|
21
|
+
`tool_input`), and the session id (field `session_id`), and applies the
|
|
22
|
+
very same auto-approval rules as `ase hook pre-tool-use` (see
|
|
23
|
+
`ase-hook-pre-tool-use`(1)): *ASE* CLI invocations, *ASE* skills, *ASE*
|
|
24
|
+
MCP tools, tools of the pre-defined foreign MCP servers, reads of
|
|
25
|
+
plugin files, and edits during an active edit-capable skill.
|
|
26
|
+
|
|
27
|
+
On approval, the handler writes the decision
|
|
28
|
+
`{"hookSpecificOutput":{"hookEventName":"PermissionRequest","decision":{"behavior":"allow"}}}`
|
|
29
|
+
to standard output. Otherwise, it stays silent and hence defers to the
|
|
30
|
+
regular approval flow of the agent tool.
|
|
31
|
+
|
|
32
|
+
## OPTIONS
|
|
33
|
+
|
|
34
|
+
- \[`-h`|`--help`\]:
|
|
35
|
+
Show usage information and exit.
|
|
36
|
+
|
|
37
|
+
- \[`-t`|`--tool` *tool*\]:
|
|
38
|
+
The agent tool whose event payload is read: `claude`, `copilot`, or
|
|
39
|
+
`codex` (as configured: `codex`). Default: `$ASE_TOOL`, else
|
|
40
|
+
`claude`.
|
|
41
|
+
|
|
42
|
+
## ENVIRONMENT
|
|
43
|
+
|
|
44
|
+
- `PLUGIN_ROOT`, `CLAUDE_PLUGIN_ROOT`, `COPILOT_PLUGIN_ROOT`:
|
|
45
|
+
The plugin root directory for the auto-approval of plugin file
|
|
46
|
+
reads.
|
|
47
|
+
|
|
48
|
+
- `ASE_TOOL`:
|
|
49
|
+
The default of `--tool`.
|
|
50
|
+
|
|
51
|
+
## EXIT STATUS
|
|
52
|
+
|
|
53
|
+
Exits with status `0`, unless `--tool` is invalid (status `1`).
|
|
54
|
+
|
|
55
|
+
## SEE ALSO
|
|
56
|
+
|
|
57
|
+
`ase`(1), `ase-hook`(1), `ase-hook-pre-tool-use`(1).
|
|
58
|
+
|
|
59
|
+
## AUTHOR
|
|
60
|
+
|
|
61
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# ase-hook-pre-tool-use(1) -- Handle the PreToolUse Hook Event
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase hook pre-tool-use`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
\[`-t`|`--tool` *tool*\]
|
|
8
|
+
|
|
9
|
+
## DESCRIPTION
|
|
10
|
+
|
|
11
|
+
**ase hook pre-tool-use** handles the `PreToolUse` hook event of
|
|
12
|
+
*Anthropic Claude Code CLI* and *OpenAI Codex CLI*, resp. the
|
|
13
|
+
`preToolUse` hook event of *GitHub Copilot CLI*, which the agent tool
|
|
14
|
+
fires before each tool invocation. It is intended to be invoked by the
|
|
15
|
+
agent tool internally as a configured hook handler only, and not
|
|
16
|
+
directly by end users.
|
|
17
|
+
|
|
18
|
+
The handler reads the event payload from standard input, a JSON object
|
|
19
|
+
with the tool name (field `tool_name`, resp. `toolName` for *GitHub
|
|
20
|
+
Copilot CLI*), the tool input (field `tool_input`, resp. `toolArgs`,
|
|
21
|
+
either an object or a JSON-encoded string), and the session id (field
|
|
22
|
+
`session_id`, resp. `sessionId`). It auto-approves the invocation, so
|
|
23
|
+
the user is not prompted for it, if it is one of the following:
|
|
24
|
+
|
|
25
|
+
- a shell command (tool `Bash`, resp. `bash`) starting with the word
|
|
26
|
+
`ase` and not containing any of the characters `;`, `&`, `|`, `<`,
|
|
27
|
+
`>`, backtick, or newline, or a `$(` command substitution;
|
|
28
|
+
|
|
29
|
+
- a skill invocation (tool `Skill`) of an *ASE* skill (`ase-`*name*,
|
|
30
|
+
optionally namespaced as `ase:ase-`*name*);
|
|
31
|
+
|
|
32
|
+
- an *ASE* MCP tool (`mcp__plugin_ase_ase__`*tool* for `claude`,
|
|
33
|
+
`ase-`*tool* for `copilot`, and `mcp__ase__`*tool* for `codex`);
|
|
34
|
+
|
|
35
|
+
- a tool of one of the pre-defined foreign MCP servers of `ase setup
|
|
36
|
+
mcp` (`chat-alibaba-qwen`, `chat-deepseek`, `chat-google-gemini`,
|
|
37
|
+
`chat-openai-chatgpt`, `chat-xai-grok`, `chat-zai-glm`,
|
|
38
|
+
`search-brave`, `search-exa`, and `search-perplexity`, named
|
|
39
|
+
`mcp__`*server*`__`*tool* resp. *server*`-`*tool* for `copilot`);
|
|
40
|
+
|
|
41
|
+
- a file read (tool `Read`) of a file located below the plugin root
|
|
42
|
+
directory (e.g., the meta files included by the skills);
|
|
43
|
+
|
|
44
|
+
- a file edit (tool `Edit`) while one of the edit-capable skills
|
|
45
|
+
`ase-code-lint`, `ase-spec-lint`, `ase-docs-shorten`, `ase-docs-refine`, or
|
|
46
|
+
`ase-docs-proofread` is recorded as active in the internal session
|
|
47
|
+
state of the session.
|
|
48
|
+
|
|
49
|
+
On approval, the handler writes the decision `permissionDecision:
|
|
50
|
+
allow` with a human-readable `permissionDecisionReason` to standard
|
|
51
|
+
output, nested in `hookSpecificOutput` (`claude`), resp. as top-level
|
|
52
|
+
fields (`copilot`). Otherwise, it stays silent and hence defers to the
|
|
53
|
+
regular permission flow of the agent tool.
|
|
54
|
+
|
|
55
|
+
For `--tool codex`, the handler only drains its standard input and
|
|
56
|
+
stays silent, as *OpenAI Codex CLI* rejects an approval in
|
|
57
|
+
`PreToolUse`; the approval is granted by `ase hook permission-request`
|
|
58
|
+
instead.
|
|
59
|
+
|
|
60
|
+
## OPTIONS
|
|
61
|
+
|
|
62
|
+
- \[`-h`|`--help`\]:
|
|
63
|
+
Show usage information and exit.
|
|
64
|
+
|
|
65
|
+
- \[`-t`|`--tool` *tool*\]:
|
|
66
|
+
The agent tool whose event payload is read and whose decision format
|
|
67
|
+
is written: `claude`, `copilot`, or `codex`. Default: `$ASE_TOOL`,
|
|
68
|
+
else `claude`.
|
|
69
|
+
|
|
70
|
+
## ENVIRONMENT
|
|
71
|
+
|
|
72
|
+
- `CLAUDE_PLUGIN_ROOT`, `COPILOT_PLUGIN_ROOT`, `PLUGIN_ROOT`:
|
|
73
|
+
The plugin root directory for the auto-approval of plugin file
|
|
74
|
+
reads. If unset, such reads are not auto-approved.
|
|
75
|
+
|
|
76
|
+
- `ASE_TOOL`:
|
|
77
|
+
The default of `--tool`.
|
|
78
|
+
|
|
79
|
+
## FILES
|
|
80
|
+
|
|
81
|
+
- *per-user state directory*`/session/`*id*`/state.yaml`:
|
|
82
|
+
The internal session state, whose `skill` field records the active
|
|
83
|
+
edit-capable skill.
|
|
84
|
+
|
|
85
|
+
## EXIT STATUS
|
|
86
|
+
|
|
87
|
+
Exits with status `0`, unless `--tool` is invalid (status `1`).
|
|
88
|
+
|
|
89
|
+
## SEE ALSO
|
|
90
|
+
|
|
91
|
+
`ase`(1), `ase-hook`(1), `ase-hook-permission-request`(1),
|
|
92
|
+
`ase-setup-mcp`(1).
|
|
93
|
+
|
|
94
|
+
## AUTHOR
|
|
95
|
+
|
|
96
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# ase-hook-session-end(1) -- Handle the SessionEnd Hook Event
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase hook session-end`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
\[`-t`|`--tool` *tool*\]
|
|
8
|
+
|
|
9
|
+
## DESCRIPTION
|
|
10
|
+
|
|
11
|
+
**ase hook session-end** handles the `SessionEnd` hook event of
|
|
12
|
+
*Anthropic Claude Code CLI* and *OpenAI Codex CLI*, resp. the
|
|
13
|
+
`sessionEnd` hook event of *GitHub Copilot CLI*. It is intended to be
|
|
14
|
+
invoked by the agent tool internally as a configured hook handler only,
|
|
15
|
+
and not directly by end users.
|
|
16
|
+
|
|
17
|
+
The handler reads the event payload from standard input, a JSON object
|
|
18
|
+
with the session id (field `session_id`, resp. `sessionId`). For a
|
|
19
|
+
valid session id (matching `[A-Za-z0-9._-]+`), it:
|
|
20
|
+
|
|
21
|
+
1. removes the session directory *per-user state
|
|
22
|
+
directory*`/session/`*id* with the session-scoped configuration
|
|
23
|
+
(scope `session:`*id*) and the internal session state, and
|
|
24
|
+
|
|
25
|
+
2. detaches the session from its AI usage window (if any, see
|
|
26
|
+
`ase-task-assign`(1)) through the `ase service` of the owning project,
|
|
27
|
+
which closes and books the window once no other session remains
|
|
28
|
+
attached to it. If the owning project service is not reachable in
|
|
29
|
+
time, the session end is noted in the session registry
|
|
30
|
+
(*per-user state directory*`/telemetry.json`) instead, and the
|
|
31
|
+
service is started in the background, which then detaches the
|
|
32
|
+
session as of its noted end. A failure is only warned about.
|
|
33
|
+
|
|
34
|
+
An empty, malformed, or invalid payload is silently ignored. The
|
|
35
|
+
handler writes nothing to standard output.
|
|
36
|
+
|
|
37
|
+
## OPTIONS
|
|
38
|
+
|
|
39
|
+
- \[`-h`|`--help`\]:
|
|
40
|
+
Show usage information and exit.
|
|
41
|
+
|
|
42
|
+
- \[`-t`|`--tool` *tool*\]:
|
|
43
|
+
The agent tool whose event payload is read: `claude`, `copilot`, or
|
|
44
|
+
`codex`. Default: `$ASE_TOOL`, else `claude`.
|
|
45
|
+
|
|
46
|
+
## ENVIRONMENT
|
|
47
|
+
|
|
48
|
+
- `ASE_TOOL`:
|
|
49
|
+
The default of `--tool`.
|
|
50
|
+
|
|
51
|
+
## FILES
|
|
52
|
+
|
|
53
|
+
- *per-user state directory*`/session/`*id*`/`:
|
|
54
|
+
The per-session directory, removed by this handler.
|
|
55
|
+
|
|
56
|
+
- *per-user state directory*`/telemetry.json`:
|
|
57
|
+
The telemetry state, whose session registry routes the session to
|
|
58
|
+
the service of its project.
|
|
59
|
+
|
|
60
|
+
## EXIT STATUS
|
|
61
|
+
|
|
62
|
+
Exits with status `0`, unless `--tool` is invalid (status `1`).
|
|
63
|
+
|
|
64
|
+
## SEE ALSO
|
|
65
|
+
|
|
66
|
+
`ase`(1), `ase-hook`(1), `ase-hook-session-start`(1),
|
|
67
|
+
`ase-task-assign`(1), `ase-service`(1), `ase-setup-telemetry`(1).
|
|
68
|
+
|
|
69
|
+
## AUTHOR
|
|
70
|
+
|
|
71
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|