@rse/ase 2.0.3 → 2.0.5
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-hook.js +13 -4
- 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-setup.js +2 -2
- package/dst/ase-spec.js +103 -20
- package/dst/ase-task-board-filter.js +5 -4
- package/dst/ase-task-board-web-client.js +26 -26
- 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 +16 -21
- 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/mods/ase-mods-common.ts +444 -0
- package/plugin/mods/ase-mods-grill.ts +312 -0
- package/plugin/mods/ase-mods-help-browse.ts +405 -0
- package/plugin/mods/ase-mods-help-compose.ts +561 -0
- package/plugin/mods/ase-mods-help-find.ts +426 -0
- package/plugin/mods/ase-mods-help-hint.ts +134 -0
- package/plugin/mods/ase-mods-help-show.ts +142 -0
- package/plugin/mods/ase-mods.ts +214 -381
- package/plugin/mods/claude-code.d.ts +26 -3
- package/plugin/skills/ase-code-lint/SKILL.md +15 -15
- package/plugin/skills/ase-code-lint/help.md +21 -8
- package/plugin/skills/ase-help-intent/SKILL.md +2 -1
- package/plugin/skills/ase-help-intent/data.md +214 -9
- 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-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 +184 -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,85 @@
|
|
|
1
|
+
# ase-util-mint(1) -- Mint Hash-Derived Identifiers
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase util mint`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
\[`-t`|`--type` `uuid`|`sha1`|`nanoid`\]
|
|
8
|
+
\[`-c`|`--count` *count*\]
|
|
9
|
+
\[*hint* \[...\]\]
|
|
10
|
+
|
|
11
|
+
## DESCRIPTION
|
|
12
|
+
|
|
13
|
+
**ase util mint** mints one or more hash-derived identifiers out of the
|
|
14
|
+
*hint* formed by the remaining arguments (joined by single spaces), and
|
|
15
|
+
prints them to standard output, one identifier per line:
|
|
16
|
+
|
|
17
|
+
- With type `uuid`, a non-empty *hint* yields a deterministic *UUID
|
|
18
|
+
V5* over the *hint* within the fixed *ASE* namespace (itself the
|
|
19
|
+
*UUID V5* of the URL `https://ase.tools` within the standard URL
|
|
20
|
+
namespace), so the same *hint* always yields the same UUID, disjoint
|
|
21
|
+
from those of other applications. An empty *hint* yields random
|
|
22
|
+
*UUID V4* values instead.
|
|
23
|
+
|
|
24
|
+
- With type `sha1`, the *hint* yields its 40-character hexadecimal
|
|
25
|
+
*SHA-1* digest. This requires a non-empty *hint*.
|
|
26
|
+
|
|
27
|
+
- With type `nanoid`, the *hint* yields its 10-character, *NanoId*-style
|
|
28
|
+
*base62* hash (its *SHA-1* digest, *base62*-encoded and truncated),
|
|
29
|
+
a short but still reproducible identifier, as used for the content
|
|
30
|
+
binding of the `Effort` key of the task plans. This requires a
|
|
31
|
+
non-empty *hint*, too.
|
|
32
|
+
|
|
33
|
+
This backs the `uuid`, `sha1`, and `nanoid` types of the `ase-meta-mint` skill
|
|
34
|
+
(and the MCP tool `ase_mint`), while the language-level identifier
|
|
35
|
+
types of that skill require the AI and hence exist in the skill only.
|
|
36
|
+
|
|
37
|
+
## OPTIONS
|
|
38
|
+
|
|
39
|
+
- \[`-h`|`--help`\]:
|
|
40
|
+
Show usage information and exit.
|
|
41
|
+
|
|
42
|
+
- \[`-t`|`--type` `uuid`|`sha1`|`nanoid`\]:
|
|
43
|
+
The identifier type (default: `uuid`).
|
|
44
|
+
|
|
45
|
+
- \[`-c`|`--count` *count*\]:
|
|
46
|
+
The number of identifiers to mint, a positive integer (default:
|
|
47
|
+
`1`). It is honored for an empty *hint* only, where random *UUID V4*
|
|
48
|
+
values are minted. As hashing a non-empty *hint* always yields
|
|
49
|
+
exactly one identifier, a larger *count* is then reduced to `1`, and a
|
|
50
|
+
warning is printed on standard error.
|
|
51
|
+
|
|
52
|
+
## ARGUMENTS
|
|
53
|
+
|
|
54
|
+
- \[*hint* \[...\]\]:
|
|
55
|
+
The hint the identifiers are derived from, formed by all remaining
|
|
56
|
+
arguments joined by single spaces (default: empty).
|
|
57
|
+
|
|
58
|
+
## EXIT STATUS
|
|
59
|
+
|
|
60
|
+
Exits with status `0` on success, and with status `1` on an invalid
|
|
61
|
+
*count* or type `sha1` or `nanoid` with an empty *hint*.
|
|
62
|
+
|
|
63
|
+
## EXAMPLES
|
|
64
|
+
|
|
65
|
+
```sh
|
|
66
|
+
# mint the deterministic UUID of a hint
|
|
67
|
+
$ ase util mint the user account entity
|
|
68
|
+
|
|
69
|
+
# mint three random UUIDs
|
|
70
|
+
$ ase util mint -c 3
|
|
71
|
+
|
|
72
|
+
# mint the SHA-1 digest of a hint
|
|
73
|
+
$ ase util mint -t sha1 the user account entity
|
|
74
|
+
|
|
75
|
+
# mint the short NanoId-style hash of a hint
|
|
76
|
+
$ ase util mint -t nanoid the user account entity
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## SEE ALSO
|
|
80
|
+
|
|
81
|
+
`ase`(1), `ase-util`(1).
|
|
82
|
+
|
|
83
|
+
## AUTHOR
|
|
84
|
+
|
|
85
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# ase-util-worktree(1) -- Resolve the ASE Worktree Directories
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase util worktree`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
|
|
8
|
+
`ase util worktree base`
|
|
9
|
+
\[`-c`|`--create`\]
|
|
10
|
+
\[`-t`|`--temp`\]
|
|
11
|
+
|
|
12
|
+
`ase util worktree path`
|
|
13
|
+
\[`-c`|`--create`\]
|
|
14
|
+
\[`-t`|`--temp`\]
|
|
15
|
+
*id*
|
|
16
|
+
|
|
17
|
+
## DESCRIPTION
|
|
18
|
+
|
|
19
|
+
**ase util worktree** safely resolves the directories of the Git
|
|
20
|
+
worktrees managed by *ASE* (e.g., the worktrees of the
|
|
21
|
+
`--worktree` option of the skills and of the agents), which all reside
|
|
22
|
+
below the base directory `<repo-root>/.ase/worktree`, where
|
|
23
|
+
*repo-root* is the fully resolved top-level directory of the Git
|
|
24
|
+
working tree of the current working directory. The *temporary*
|
|
25
|
+
worktrees reside below `<repo-root>/.ase/worktree/.temp`, a namespace
|
|
26
|
+
disjoint from all regular worktree ids (as ids never contain a `.`).
|
|
27
|
+
|
|
28
|
+
The resolution is *validated*: as `git worktree add` silently follows
|
|
29
|
+
a symbolic link, every already existing path component below the
|
|
30
|
+
repository root (`.ase`, `worktree`, `.temp`, and the *id* leaf) has
|
|
31
|
+
to be a real directory, neither a symbolic link, nor any other file,
|
|
32
|
+
nor an aliased path, so a repository carrying a committed `.ase`
|
|
33
|
+
symbolic link can never make a worktree be written outside of it. Not
|
|
34
|
+
yet existing components are fine, as they are created later on.
|
|
35
|
+
|
|
36
|
+
The resolved directory is printed to standard output. Without a
|
|
37
|
+
sub-command, the usage information is shown and the command exits
|
|
38
|
+
with status `1`.
|
|
39
|
+
|
|
40
|
+
## OPTIONS
|
|
41
|
+
|
|
42
|
+
- \[`-h`|`--help`\]:
|
|
43
|
+
Show usage information and exit.
|
|
44
|
+
|
|
45
|
+
## COMMANDS
|
|
46
|
+
|
|
47
|
+
- `ase util worktree base` \[`-c`|`--create`\] \[`-t`|`--temp`\]:
|
|
48
|
+
Print the validated base directory `<repo-root>/.ase/worktree` holding
|
|
49
|
+
all *ASE* worktrees. The options are:
|
|
50
|
+
|
|
51
|
+
- \[`-c`|`--create`\]:
|
|
52
|
+
Create the base directory (with all its missing parents) if it
|
|
53
|
+
does not exist yet, and validate it again afterwards.
|
|
54
|
+
- \[`-t`|`--temp`\]:
|
|
55
|
+
Print the base directory `<repo-root>/.ase/worktree/.temp` of the
|
|
56
|
+
temporary worktrees instead.
|
|
57
|
+
- \[`-h`|`--help`\]:
|
|
58
|
+
Show usage information and exit.
|
|
59
|
+
|
|
60
|
+
- `ase util worktree path` \[`-c`|`--create`\] \[`-t`|`--temp`\] *id*:
|
|
61
|
+
Print the validated worktree directory `<repo-root>/.ase/worktree/<id>`
|
|
62
|
+
of a single worktree *id*, which has to be non-empty and match
|
|
63
|
+
`[A-Za-z0-9_-]+`, so it is safe both as a single path component and
|
|
64
|
+
as the Git branch name derived from it. The worktree directory
|
|
65
|
+
itself is not created, as this is done by `git worktree add`. The
|
|
66
|
+
options are:
|
|
67
|
+
|
|
68
|
+
- \[`-c`|`--create`\]:
|
|
69
|
+
Create the base directory (not the worktree directory itself) if
|
|
70
|
+
it does not exist yet.
|
|
71
|
+
- \[`-t`|`--temp`\]:
|
|
72
|
+
Resolve the *id* below the base directory
|
|
73
|
+
`<repo-root>/.ase/worktree/.temp` of the temporary worktrees.
|
|
74
|
+
- \[`-h`|`--help`\]:
|
|
75
|
+
Show usage information and exit.
|
|
76
|
+
|
|
77
|
+
## FILES
|
|
78
|
+
|
|
79
|
+
- `<repo-root>/.ase/worktree/`:
|
|
80
|
+
The base directory of all *ASE* worktrees, ignored by Git via the
|
|
81
|
+
self-ignoring `.ase/.gitignore`.
|
|
82
|
+
|
|
83
|
+
- `<repo-root>/.ase/worktree/.temp/`:
|
|
84
|
+
The base directory of the temporary *ASE* worktrees.
|
|
85
|
+
|
|
86
|
+
## EXIT STATUS
|
|
87
|
+
|
|
88
|
+
Exits with status `0` on success, and with status `1` outside of a Git
|
|
89
|
+
working tree, on an invalid *id*, or if a path component is a symbolic
|
|
90
|
+
link, not a directory, or an aliased path. The group command without a
|
|
91
|
+
sub-command exits with status `1`.
|
|
92
|
+
|
|
93
|
+
## EXAMPLES
|
|
94
|
+
|
|
95
|
+
```sh
|
|
96
|
+
# print the base directory of all ASE worktrees, creating it if needed
|
|
97
|
+
$ ase util worktree base -c
|
|
98
|
+
|
|
99
|
+
# create a worktree for the id "FOO-42" at its validated location
|
|
100
|
+
$ git worktree add "$(ase util worktree path -c FOO-42)" -b FOO-42
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## SEE ALSO
|
|
104
|
+
|
|
105
|
+
`ase`(1), `ase-util`(1), `git-worktree`(1).
|
|
106
|
+
|
|
107
|
+
## AUTHOR
|
|
108
|
+
|
|
109
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# ase-util(1) -- Utility Commands
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase util`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
|
|
8
|
+
`ase util meta`
|
|
9
|
+
*name* \[...\]
|
|
10
|
+
|
|
11
|
+
`ase util compat`
|
|
12
|
+
|
|
13
|
+
`ase util diagram`
|
|
14
|
+
\[*options*\]
|
|
15
|
+
|
|
16
|
+
`ase util worktree`
|
|
17
|
+
`base`|`path`
|
|
18
|
+
\[*options*\]
|
|
19
|
+
\[*id*\]
|
|
20
|
+
|
|
21
|
+
`ase util mint`
|
|
22
|
+
\[`-t`|`--type` *type*\]
|
|
23
|
+
\[`-c`|`--count` *count*\]
|
|
24
|
+
\[*hint* \[...\]\]
|
|
25
|
+
|
|
26
|
+
`ase util metric`
|
|
27
|
+
\[`-f`|`--file` *file*\]
|
|
28
|
+
\[*text* \[...\]\]
|
|
29
|
+
|
|
30
|
+
## DESCRIPTION
|
|
31
|
+
|
|
32
|
+
**ase util** is the entry point group for miscellaneous utility
|
|
33
|
+
commands. Most of them back the MCP tools of the per-project *ASE*
|
|
34
|
+
service and the *ASE* skills, but can be used standalone, too. Without
|
|
35
|
+
a sub-command, the usage information is shown and the command exits
|
|
36
|
+
with status `1`.
|
|
37
|
+
|
|
38
|
+
## OPTIONS
|
|
39
|
+
|
|
40
|
+
- \[`-h`|`--help`\]:
|
|
41
|
+
Show usage information and exit.
|
|
42
|
+
|
|
43
|
+
## COMMANDS
|
|
44
|
+
|
|
45
|
+
- `ase util meta` *name* \[...\]:
|
|
46
|
+
Output the contents of one or more plugin meta files. See
|
|
47
|
+
`ase-util-meta`(1).
|
|
48
|
+
|
|
49
|
+
- `ase util compat`:
|
|
50
|
+
Output the expected probe values of the `ase-meta-compat` self-test
|
|
51
|
+
skill. See `ase-util-compat`(1).
|
|
52
|
+
|
|
53
|
+
- `ase util diagram` \[*options*\]:
|
|
54
|
+
Render a *Mermaid* or *D2* diagram specification as Unicode/ASCII art
|
|
55
|
+
or SVG. See `ase-util-diagram`(1).
|
|
56
|
+
|
|
57
|
+
- `ase util worktree` `base`|`path` \[*options*\] \[*id*\]:
|
|
58
|
+
Safely resolve the *ASE* worktree directories below
|
|
59
|
+
`<repo-root>/.ase/worktree`. See `ase-util-worktree`(1).
|
|
60
|
+
|
|
61
|
+
- `ase util mint` \[*options*\] \[*hint* \[...\]\]:
|
|
62
|
+
Mint hash-derived identifiers (UUID, SHA-1) out of a hint. See
|
|
63
|
+
`ase-util-mint`(1).
|
|
64
|
+
|
|
65
|
+
- `ase util metric` \[*options*\] \[*text* \[...\]\]:
|
|
66
|
+
Measure the words, lines, characters, and bytes of a file or a text.
|
|
67
|
+
See `ase-util-metric`(1).
|
|
68
|
+
|
|
69
|
+
## EXIT STATUS
|
|
70
|
+
|
|
71
|
+
The group command without a sub-command exits with status `1`.
|
|
72
|
+
|
|
73
|
+
## SEE ALSO
|
|
74
|
+
|
|
75
|
+
`ase`(1), `ase-util-meta`(1), `ase-util-compat`(1),
|
|
76
|
+
`ase-util-diagram`(1), `ase-util-worktree`(1), `ase-util-mint`(1),
|
|
77
|
+
`ase-util-metric`(1).
|
|
78
|
+
|
|
79
|
+
## AUTHOR
|
|
80
|
+
|
|
81
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
package/dst/man/ase.md
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# ase(1) -- Agentic Software Engineering (ASE)
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
\[`-V`|`--version`\]
|
|
8
|
+
\[`-l`|`--log-level` *level*\]
|
|
9
|
+
\[`-L`|`--log-file` *file*\]
|
|
10
|
+
*command*
|
|
11
|
+
\[*options* \[...\]\]
|
|
12
|
+
\[*args* \[...\]\]
|
|
13
|
+
|
|
14
|
+
## DESCRIPTION
|
|
15
|
+
|
|
16
|
+
**ase**, *Agentic Software Engineering (ASE)*, is the command-line
|
|
17
|
+
companion tool of the *ASE* agent tool plugin for
|
|
18
|
+
*Anthropic Claude Code CLI* (primary target), *GitHub Copilot CLI*,
|
|
19
|
+
and *OpenAI Codex CLI* (secondary targets).
|
|
20
|
+
|
|
21
|
+
It provides the plugin and tool setup, the layered configuration
|
|
22
|
+
management, a per-project background HTTP service (bridged into the
|
|
23
|
+
agent tool as a Model-Context-Protocol (MCP) server), the agent tool
|
|
24
|
+
hook handlers, the statusline rendering, the persisted task plan
|
|
25
|
+
management (including a task store server and an interactive task
|
|
26
|
+
board), the autonomous task lifecycle agents (plus their agent relay
|
|
27
|
+
and fleet supervisor), the project artifact resolution, the
|
|
28
|
+
*SpecBook*-based specification initializing, linting, exporting and
|
|
29
|
+
previewing, and miscellaneous utilities like diagram rendering,
|
|
30
|
+
identifier minting, and text measuring.
|
|
31
|
+
|
|
32
|
+
Most commands are sub-command groups. Each group and each command has
|
|
33
|
+
its own manual page, named after the command path with dashes, e.g.,
|
|
34
|
+
`ase-task`(1) for `ase task` and `ase-task-board`(1) for `ase task
|
|
35
|
+
board`. They are shipped with **ase** and shown via `ase man`, e.g.,
|
|
36
|
+
`ase man task board`.
|
|
37
|
+
|
|
38
|
+
## OPTIONS
|
|
39
|
+
|
|
40
|
+
The following top-level (global) options exist. They have to be given
|
|
41
|
+
*before* the *command*, as all options after the *command* belong to
|
|
42
|
+
the command itself.
|
|
43
|
+
|
|
44
|
+
- \[`-h`|`--help`\]:
|
|
45
|
+
Show program usage information, including the list of all top-level
|
|
46
|
+
commands, and exit. Every command and sub-command also accepts
|
|
47
|
+
`-h`|`--help` to show its own usage information. Alternatively, `ase
|
|
48
|
+
help` \[*command*\] shows the usage information of *command*.
|
|
49
|
+
|
|
50
|
+
- \[`-V`|`--version`\]:
|
|
51
|
+
Show program version information (as `ASE` *version*) and exit.
|
|
52
|
+
|
|
53
|
+
- \[`-l`|`--log-level` *level*\]:
|
|
54
|
+
Set the logging verbosity. Supported *level* values are `error`,
|
|
55
|
+
`warning`, `info` (default), and `debug`. Log messages of a level
|
|
56
|
+
above the selected one are suppressed. The level is passed on to all
|
|
57
|
+
background processes (like the service, the task store, the agent
|
|
58
|
+
relay, and the agents) started by the command.
|
|
59
|
+
|
|
60
|
+
- \[`-L`|`--log-file` *file*\]:
|
|
61
|
+
Redirect log output to *file* (appended). Use `-` (default) to write
|
|
62
|
+
log messages to standard error. If the log output is connected to a
|
|
63
|
+
terminal, it is colored.
|
|
64
|
+
|
|
65
|
+
## COMMANDS
|
|
66
|
+
|
|
67
|
+
The following top-level commands exist:
|
|
68
|
+
|
|
69
|
+
- `ase setup` *command* \[...\]:
|
|
70
|
+
Install, update, uninstall, enable, disable, and report the *ASE*
|
|
71
|
+
tool and plugin for an agent tool, and activate or deactivate the
|
|
72
|
+
pre-defined foreign MCP servers, the *ASE* statusline, and the *ASE*
|
|
73
|
+
telemetry export. See `ase-setup`(1).
|
|
74
|
+
|
|
75
|
+
- `ase config` \[`--scope` *scope*\] *command* \[...\]:
|
|
76
|
+
Manage the layered *ASE* configuration of the scope chain `user` <
|
|
77
|
+
`project` < `task` < `session`. See `ase-config`(1).
|
|
78
|
+
|
|
79
|
+
- `ase mcp`:
|
|
80
|
+
Bridge stdio MCP to the per-project background service. Configured
|
|
81
|
+
as an MCP server in the agent tool. See `ase-mcp`(1).
|
|
82
|
+
|
|
83
|
+
- `ase service` *command* \[...\]:
|
|
84
|
+
Manage the per-project background HTTP service. See `ase-service`(1).
|
|
85
|
+
|
|
86
|
+
- `ase hook` *command* \[...\]:
|
|
87
|
+
Handle the hook events of the agent tool. Configured as hook
|
|
88
|
+
handlers in the agent tool. See `ase-hook`(1).
|
|
89
|
+
|
|
90
|
+
- `ase statusline` \[*options*\] \[*line* \[...\]\]:
|
|
91
|
+
Render the statusline of the agent tool. Configured as statusline
|
|
92
|
+
command in the agent tool. See `ase-statusline`(1).
|
|
93
|
+
|
|
94
|
+
- `ase task` *command* \[...\]:
|
|
95
|
+
Manage the persisted task plans in the task store, show the task
|
|
96
|
+
board, and run the task store server. See `ase-task`(1).
|
|
97
|
+
|
|
98
|
+
- `ase artifact` *command* \[...\]:
|
|
99
|
+
Resolve project artifact kinds to project-relative file lists. See
|
|
100
|
+
`ase-artifact`(1).
|
|
101
|
+
|
|
102
|
+
- `ase spec` *command* \[...\]:
|
|
103
|
+
Initialize, lint, export, and preview the *SpecBook*-based project
|
|
104
|
+
specification. See `ase-spec`(1).
|
|
105
|
+
|
|
106
|
+
- `ase util` *command* \[...\]:
|
|
107
|
+
Utility commands (meta files, compatibility probes, diagram rendering,
|
|
108
|
+
worktree resolution, identifier minting, and text measuring). See
|
|
109
|
+
`ase-util`(1).
|
|
110
|
+
|
|
111
|
+
- `ase agent` *agent* *command* \[...\]:
|
|
112
|
+
Run the autonomous agents driving the task lifecycle phases,
|
|
113
|
+
processing the requests of tasks, estimating the effort of tasks,
|
|
114
|
+
researching topics for tasks, or configured by definitions, individually or as a fleet, optionally
|
|
115
|
+
reporting to the agent relay. See `ase-agent`(1).
|
|
116
|
+
|
|
117
|
+
- `ase man` \[*page* \[...\]\]:
|
|
118
|
+
Browse the manual pages of all commands and skills interactively,
|
|
119
|
+
with *page* selected, e.g., `ase man agent fleet` for
|
|
120
|
+
`ase-agent-fleet`(1), or (outside a terminal) print one of them as
|
|
121
|
+
plain text. See `ase-man`(1).
|
|
122
|
+
|
|
123
|
+
- `ase help` \[*command*\]:
|
|
124
|
+
Show the usage information of *command* (or of `ase` itself).
|
|
125
|
+
|
|
126
|
+
## ENVIRONMENT
|
|
127
|
+
|
|
128
|
+
The following environment variables are honored by multiple commands.
|
|
129
|
+
The command-specific ones are described in their own manual pages.
|
|
130
|
+
|
|
131
|
+
- `ASE_TOOL`:
|
|
132
|
+
The default target agent tool (`claude`, `copilot`, or `codex`) of
|
|
133
|
+
all commands accepting a `--tool` option (default: `claude`).
|
|
134
|
+
|
|
135
|
+
- `ASE_TASK_ID`:
|
|
136
|
+
The default task id of the `ase task` commands accepting an optional
|
|
137
|
+
task id (default: `default`).
|
|
138
|
+
|
|
139
|
+
- `ASE_HEADLESS`:
|
|
140
|
+
Set to `true` by the agents for the agent tool processes they spawn,
|
|
141
|
+
to signal the skills that they run without any user interaction.
|
|
142
|
+
|
|
143
|
+
- `ASE_SETUP_DEV`:
|
|
144
|
+
The default of the `--dev` option of `ase setup install`, `ase setup
|
|
145
|
+
update`, and `ase setup uninstall`.
|
|
146
|
+
|
|
147
|
+
- `EDITOR`, `VISUAL`:
|
|
148
|
+
The text editor used by `ase config edit`, `ase task edit`, and
|
|
149
|
+
`ase task board` (falling back to `vi`).
|
|
150
|
+
|
|
151
|
+
- `PAGER`:
|
|
152
|
+
The pager used by `ase task view` (falling back to `more`).
|
|
153
|
+
|
|
154
|
+
- `XDG_CONFIG_HOME`, `XDG_STATE_HOME`, `APPDATA`, `LOCALAPPDATA`:
|
|
155
|
+
The base directories of the *per-user configuration directory* and
|
|
156
|
+
the *per-user state directory* (see **FILES**).
|
|
157
|
+
|
|
158
|
+
## FILES
|
|
159
|
+
|
|
160
|
+
- *per-user configuration directory*:
|
|
161
|
+
The per-user *ASE* configuration directory: `~/Library/Application
|
|
162
|
+
Support/ase` on macOS, `%APPDATA%\ase` on Windows, and
|
|
163
|
+
`$XDG_CONFIG_HOME/ase` (falling back to `~/.config/ase`) on Linux
|
|
164
|
+
and other Unix systems. It holds the `user` scope configuration
|
|
165
|
+
`config.yaml`, the user agent definitions `agents/`, and the state
|
|
166
|
+
of the task store server (`store.yaml`, `store.log`, `tasks/`) and
|
|
167
|
+
agent relay server (`relay.yaml`, `relay.log`).
|
|
168
|
+
|
|
169
|
+
- *per-user state directory*:
|
|
170
|
+
The machine-local per-user *ASE* state (session configurations, task
|
|
171
|
+
lifecycle deviation warnings, agent run records, and telemetry
|
|
172
|
+
state), never roamed or versioned: `~/Library/Application
|
|
173
|
+
Support/ase` on macOS, `%LOCALAPPDATA%\ase` on Windows, and
|
|
174
|
+
`$XDG_STATE_HOME/ase` (falling back to `~/.local/state/ase`) on Linux
|
|
175
|
+
and other Unix systems.
|
|
176
|
+
|
|
177
|
+
- `.ase/`:
|
|
178
|
+
The per-project *ASE* directory in the project root, holding the
|
|
179
|
+
`project` scope configuration `config.yaml`, the agent definitions
|
|
180
|
+
`agents/`, the fleet configuration `fleet.yaml`, the task plans
|
|
181
|
+
`task/` of the default local task store, and the machine-local
|
|
182
|
+
runtime files (`service.yaml`, `service.log`, `board.yaml`, `agent/`,
|
|
183
|
+
and `worktree/`), the latter covered by the self-ignoring
|
|
184
|
+
`.ase/.gitignore`.
|
|
185
|
+
|
|
186
|
+
## EXIT STATUS
|
|
187
|
+
|
|
188
|
+
The **ase** command exits with status `0` on success and with status
|
|
189
|
+
`1` on any error (with the error message logged at level `error`),
|
|
190
|
+
unless a command documents otherwise. A usage error (an unknown
|
|
191
|
+
command or option, or a missing argument) is reported together with
|
|
192
|
+
the usage information and leads to exit status `1`.
|
|
193
|
+
|
|
194
|
+
## EXAMPLES
|
|
195
|
+
|
|
196
|
+
```sh
|
|
197
|
+
# install the ASE tool and plugin for Anthropic Claude Code CLI
|
|
198
|
+
$ ase setup install
|
|
199
|
+
|
|
200
|
+
# show the effective configuration of the current project
|
|
201
|
+
$ ase config list
|
|
202
|
+
|
|
203
|
+
# list all open task plans with their status and title
|
|
204
|
+
$ ase task list -v
|
|
205
|
+
|
|
206
|
+
# show the interactive task board
|
|
207
|
+
$ ase task board
|
|
208
|
+
|
|
209
|
+
# start the fleet of agents of ".ase/fleet.yaml"
|
|
210
|
+
$ ase agent fleet start
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## SEE ALSO
|
|
214
|
+
|
|
215
|
+
`ase-setup`(1), `ase-config`(1), `ase-mcp`(1), `ase-service`(1),
|
|
216
|
+
`ase-hook`(1), `ase-statusline`(1), `ase-task`(1), `ase-artifact`(1),
|
|
217
|
+
`ase-spec`(1), `ase-util`(1), `ase-agent`(1), `ase-man`(1),
|
|
218
|
+
`claude`(1), `copilot`(1), `codex`(1), `git`(1).
|
|
219
|
+
|
|
220
|
+
<https://ase.tools>
|
|
221
|
+
|
|
222
|
+
## HISTORY
|
|
223
|
+
|
|
224
|
+
Development of `ase`(1) started in October 2025.
|
|
225
|
+
|
|
226
|
+
## AUTHOR
|
|
227
|
+
|
|
228
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "https://ase.tools",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "https://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "2.0.
|
|
9
|
+
"version": "2.0.5",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
},
|
|
16
16
|
"type": "module",
|
|
17
17
|
"bin": { "ase": "bin/ase" },
|
|
18
|
-
"directories": { "man": "dst/man" },
|
|
19
18
|
"types": "dst/ase-agent-definition-api.d.ts",
|
|
20
19
|
"exports": {
|
|
21
20
|
".": { "types": "./dst/ase-agent-definition-api.d.ts" },
|
|
@@ -24,9 +23,9 @@
|
|
|
24
23
|
"devDependencies": {
|
|
25
24
|
"eslint": "10.13.0",
|
|
26
25
|
"@eslint/js": "10.0.1",
|
|
27
|
-
"@typescript-eslint/parser": "8.
|
|
28
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
29
|
-
"typescript-eslint": "8.
|
|
26
|
+
"@typescript-eslint/parser": "8.72.0",
|
|
27
|
+
"@typescript-eslint/eslint-plugin": "8.72.0",
|
|
28
|
+
"typescript-eslint": "8.72.0",
|
|
30
29
|
"eslint-plugin-promise": "7.3.0",
|
|
31
30
|
"neostandard": "0.14.1",
|
|
32
31
|
"globals": "17.13.0",
|
|
@@ -38,21 +37,19 @@
|
|
|
38
37
|
"@rse/stx": "1.1.7",
|
|
39
38
|
"nodemon": "3.1.14",
|
|
40
39
|
"shx": "0.4.0",
|
|
41
|
-
"remark-cli": "12.0.1",
|
|
42
|
-
"remark-man": "9.0.0",
|
|
43
40
|
"stylus": "0.64.0",
|
|
44
|
-
"vite": "8.3.
|
|
41
|
+
"vite": "8.3.5",
|
|
45
42
|
"@vitejs/plugin-vue": "6.0.10",
|
|
46
43
|
"vue": "3.5.44",
|
|
47
44
|
"mousetrap": "1.6.5",
|
|
48
|
-
"@codemirror/view": "6.43.
|
|
45
|
+
"@codemirror/view": "6.43.15",
|
|
49
46
|
"@codemirror/state": "6.7.6",
|
|
50
47
|
"@codemirror/commands": "6.11.1",
|
|
51
48
|
"@codemirror/language": "6.13.1",
|
|
52
49
|
"@codemirror/lang-markdown": "6.5.2",
|
|
53
50
|
"@lezer/highlight": "1.2.5",
|
|
54
51
|
"@codemirror/search": "6.7.2",
|
|
55
|
-
"@codemirror/autocomplete": "6.20.
|
|
52
|
+
"@codemirror/autocomplete": "6.20.4",
|
|
56
53
|
"@replit/codemirror-vim": "6.4.0",
|
|
57
54
|
"@replit/codemirror-emacs": "6.1.0",
|
|
58
55
|
"source-sans": "3.52.0",
|
|
@@ -75,25 +72,25 @@
|
|
|
75
72
|
},
|
|
76
73
|
"dependencies": {
|
|
77
74
|
"commander": "15.0.0",
|
|
78
|
-
"@dotenvx/dotenvx": "2.38.
|
|
75
|
+
"@dotenvx/dotenvx": "2.38.2",
|
|
79
76
|
"yaml": "2.9.1",
|
|
80
77
|
"valibot": "1.5.0",
|
|
81
|
-
"execa": "10.2.
|
|
78
|
+
"execa": "10.2.1",
|
|
82
79
|
"mkdirp": "3.0.1",
|
|
83
|
-
"@hapi/hapi": "21.4.
|
|
80
|
+
"@hapi/hapi": "21.4.11",
|
|
84
81
|
"beautiful-mermaid": "1.1.3",
|
|
85
82
|
"@d2lang/d2": "0.1.34",
|
|
86
83
|
"elkjs": "0.12.0",
|
|
87
84
|
"ink": "8.0.0",
|
|
88
85
|
"react": "19.3.1",
|
|
89
|
-
"chokidar": "
|
|
86
|
+
"chokidar": "6.0.0",
|
|
90
87
|
"marked": "18.1.1",
|
|
91
88
|
"shiki": "4.5.0",
|
|
92
89
|
"cli-table3": "0.6.5",
|
|
93
90
|
"chalk": "6.0.1",
|
|
94
91
|
"pretty-ms": "10.0.0",
|
|
95
92
|
"luxon": "3.7.2",
|
|
96
|
-
"@modelcontextprotocol/sdk": "1.32.
|
|
93
|
+
"@modelcontextprotocol/sdk": "1.32.2",
|
|
97
94
|
"json-asty": "1.3.4",
|
|
98
95
|
"zod": "4.6.7",
|
|
99
96
|
"which": "7.0.0",
|
|
@@ -104,12 +101,13 @@
|
|
|
104
101
|
"proper-lockfile": "4.1.2",
|
|
105
102
|
"write-file-atomic": "8.0.0",
|
|
106
103
|
"p-queue": "10.0.0",
|
|
107
|
-
"pacote": "22.0.
|
|
104
|
+
"pacote": "22.0.1",
|
|
108
105
|
"ofetch": "1.5.1",
|
|
109
|
-
"undici": "8.12.
|
|
106
|
+
"undici": "8.12.3",
|
|
110
107
|
"picomatch": "4.0.7",
|
|
111
108
|
"lru-cache": "11.5.3",
|
|
112
109
|
"@rse/specbook": "1.5.2",
|
|
110
|
+
"markdownlint": "0.42.0",
|
|
113
111
|
"tail": "2.2.6",
|
|
114
112
|
"source-code-error": "1.2.0",
|
|
115
113
|
"pure-uuid": "2.0.0",
|
|
@@ -125,9 +123,6 @@
|
|
|
125
123
|
"overrides": {
|
|
126
124
|
"stylus": {
|
|
127
125
|
"glob": "13.0.6"
|
|
128
|
-
},
|
|
129
|
-
"remark-cli": {
|
|
130
|
-
"glob": "13.0.6"
|
|
131
126
|
}
|
|
132
127
|
},
|
|
133
128
|
"allowScripts": {
|
|
@@ -135,7 +130,7 @@
|
|
|
135
130
|
},
|
|
136
131
|
"engines": {
|
|
137
132
|
"npm": ">=10.0.0",
|
|
138
|
-
"node": ">=22.
|
|
133
|
+
"node": ">=22.22.0"
|
|
139
134
|
},
|
|
140
135
|
"upd": [
|
|
141
136
|
"!typescript"
|
|
@@ -394,9 +394,9 @@ Workflow
|
|
|
394
394
|
|
|
395
395
|
4. Set <context-after/> to exactly *up to two* lines of
|
|
396
396
|
*unchanged* code content which occurs in <file/>
|
|
397
|
-
directly *after* <old-text/>, i.e., the lines
|
|
398
|
-
+ <n/>) and (<line/> + <n/> + 1), where <n/> is
|
|
399
|
-
number of lines in <old-text/>. Reduce to just one line
|
|
397
|
+
directly *after* <old-text/>, i.e., the lines
|
|
398
|
+
(<line/> + <n/>) and (<line/> + <n/> + 1), where <n/> is
|
|
399
|
+
the number of lines in <old-text/>. Reduce to just one line
|
|
400
400
|
(<line/> + <n/>) if <old-text/> is the second-last
|
|
401
401
|
line of the file. Set <context-after/> to empty if
|
|
402
402
|
<old-text/> is the last line in the file.
|
|
@@ -81,9 +81,9 @@ Workflow
|
|
|
81
81
|
|
|
82
82
|
6. Set <context-after/> to exactly *up to two* lines of
|
|
83
83
|
*unchanged* text content which occurs in the document
|
|
84
|
-
directly *after* <old-text/>, i.e., the lines
|
|
85
|
-
+ <n/>) and (<line/> + <n/> + 1), where <n/> is
|
|
86
|
-
number of lines in <old-text/>. Reduce to just one line
|
|
84
|
+
directly *after* <old-text/>, i.e., the lines
|
|
85
|
+
(<line/> + <n/>) and (<line/> + <n/> + 1), where <n/> is
|
|
86
|
+
the number of lines in <old-text/>. Reduce to just one line
|
|
87
87
|
(<line/> + <n/>) if <old-text/> is the second-last
|
|
88
88
|
line of the document. Set <context-after/> to empty if
|
|
89
89
|
<old-text/> is the last line in the document.
|