@rse/ase 2.0.3 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dst/ase-hook.js +1 -1
- 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 +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/mods/claude-code.d.ts +26 -3
- package/plugin/skills/ase-help-intent/data.md +180 -1
- 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 +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,102 @@
|
|
|
1
|
+
# ase-mcp(1) -- Bridge Stdio MCP to the Per-Project Service
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase mcp`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
|
|
8
|
+
## DESCRIPTION
|
|
9
|
+
|
|
10
|
+
**ase mcp** is a Model-Context-Protocol (MCP) server speaking the
|
|
11
|
+
stdio transport: it accepts MCP messages on standard input, forwards
|
|
12
|
+
them to the per-project background service of `ase-service`(1) via the
|
|
13
|
+
Streamable HTTP transport (`http://127.0.0.1:`*port*`/mcp`), and writes
|
|
14
|
+
the responses to standard output.
|
|
15
|
+
|
|
16
|
+
It is configured as the stdio MCP server `ase` of the *ASE* plugin in
|
|
17
|
+
the agent tool and is not intended to be invoked directly by end users.
|
|
18
|
+
All log messages go to standard error (or to the file of the global
|
|
19
|
+
`--log-file` option), as standard output carries the MCP protocol.
|
|
20
|
+
|
|
21
|
+
On start, the service of the project is probed and auto-started (via
|
|
22
|
+
`ase service start`) if it is not running yet. The bridge then lives as
|
|
23
|
+
long as its standard input is open, and is robust against a vanishing
|
|
24
|
+
service:
|
|
25
|
+
|
|
26
|
+
- Messages arriving while no service connection exists are buffered
|
|
27
|
+
(up to 100 messages, dropping the oldest ones on overflow) and sent
|
|
28
|
+
once the connection is (re-)established.
|
|
29
|
+
|
|
30
|
+
- On a lost or refused connection, the service is auto-started again
|
|
31
|
+
and the connection is re-established, with a delay growing from 0.5
|
|
32
|
+
up to 10 seconds between the attempts.
|
|
33
|
+
|
|
34
|
+
- Every 30 seconds, the service is probed, and a vanished service
|
|
35
|
+
triggers the same reconnect.
|
|
36
|
+
|
|
37
|
+
Under *GitHub Copilot CLI* (detected by the environment variable
|
|
38
|
+
`COPILOT_PLUGIN_ROOT`), the MCP server is started in the plugin
|
|
39
|
+
installation directory instead of the project. Hence, the bridge first
|
|
40
|
+
answers all MCP messages in-process through the same set of MCP tools
|
|
41
|
+
the service provides (covering the MCP handshake and the tool listing),
|
|
42
|
+
holds back all tool calls, and waits until the `SessionStart` hook (see
|
|
43
|
+
`ase-hook`(1)) recorded the project directory of the session (with id
|
|
44
|
+
`COPILOT_AGENT_SESSION_ID`).
|
|
45
|
+
|
|
46
|
+
It then switches into this directory, starts or connects the service
|
|
47
|
+
of the project there, and forwards the held tool calls. If no project
|
|
48
|
+
directory is recorded within 30 seconds of the first held tool call, it
|
|
49
|
+
falls back to the current directory.
|
|
50
|
+
|
|
51
|
+
The service provides the `ase_*` MCP tools of the skills, e.g.,
|
|
52
|
+
`ase_ping`, `ase_config_get`, `ase_config_set`, `ase_config_delete`,
|
|
53
|
+
`ase_config_list`, `ase_state_get`, `ase_state_set`,
|
|
54
|
+
`ase_state_delete`, `ase_kv_get`, `ase_kv_set`, `ase_kv_delete`,
|
|
55
|
+
`ase_kv_clear`, `ase_kv_batch`, the `ase_task_*` tools, `ase_artifact_list`,
|
|
56
|
+
`ase_artifact_name`, `ase_specbook_lint`, `ase_specbook_export`,
|
|
57
|
+
`ase_diagram`, `ase_worktree_path`, `ase_mint`, `ase_text_metric`,
|
|
58
|
+
`ase_getopt`, `ase_markdown_prepare`, `ase_timestamp`, `ase_sleep`,
|
|
59
|
+
`ase_compat`, `ase_component_info`, and `ase_decision_matrix`.
|
|
60
|
+
|
|
61
|
+
## OPTIONS
|
|
62
|
+
|
|
63
|
+
- \[`-h`|`--help`\]:
|
|
64
|
+
Show usage information and exit.
|
|
65
|
+
|
|
66
|
+
## ENVIRONMENT
|
|
67
|
+
|
|
68
|
+
- `COPILOT_PLUGIN_ROOT`, `COPILOT_AGENT_SESSION_ID`:
|
|
69
|
+
Exported by *GitHub Copilot CLI* to its MCP servers. When both are
|
|
70
|
+
set (and the session id matches `[A-Za-z0-9._-]+`), the service is
|
|
71
|
+
deferred until the project directory of the session is known (see
|
|
72
|
+
**DESCRIPTION**).
|
|
73
|
+
|
|
74
|
+
## FILES
|
|
75
|
+
|
|
76
|
+
- `.ase/service.yaml`:
|
|
77
|
+
The persisted port of the per-project service.
|
|
78
|
+
|
|
79
|
+
- *per-user state directory*`/session/`*id*`/state.yaml`:
|
|
80
|
+
The internal session state, from which the project directory
|
|
81
|
+
(`basedir`) recorded by the `SessionStart` hook is read under *GitHub
|
|
82
|
+
Copilot CLI*.
|
|
83
|
+
|
|
84
|
+
## EXIT STATUS
|
|
85
|
+
|
|
86
|
+
`0` once standard input is closed, `1` if the service cannot be
|
|
87
|
+
started initially.
|
|
88
|
+
|
|
89
|
+
## EXAMPLES
|
|
90
|
+
|
|
91
|
+
```sh
|
|
92
|
+
# register the bridge manually as an MCP server in Claude Code
|
|
93
|
+
$ claude mcp add ase -- ase mcp
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## SEE ALSO
|
|
97
|
+
|
|
98
|
+
`ase`(1), `ase-service`(1), `ase-hook`(1), `ase-setup`(1).
|
|
99
|
+
|
|
100
|
+
## AUTHOR
|
|
101
|
+
|
|
102
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# ase-service-log(1) -- Show the Log of the Background Service
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase service log`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
\[`-f`|`--follow`\]
|
|
8
|
+
\[`-n`|`--lines` *n*\]
|
|
9
|
+
|
|
10
|
+
## DESCRIPTION
|
|
11
|
+
|
|
12
|
+
**ase service log** shows the log file `.ase/service.log` of the
|
|
13
|
+
per-project background service of *ASE* (see `ase-service`(1)) on
|
|
14
|
+
standard output: by default the entire file, else its last lines
|
|
15
|
+
only. If no log file exists, nothing is shown and the command exits
|
|
16
|
+
with status `0`.
|
|
17
|
+
|
|
18
|
+
## OPTIONS
|
|
19
|
+
|
|
20
|
+
- \[`-h`|`--help`\]:
|
|
21
|
+
Show usage information and exit.
|
|
22
|
+
|
|
23
|
+
- \[`-f`|`--follow`\]:
|
|
24
|
+
After showing the last *n* lines (default: `10`), keep following the
|
|
25
|
+
file in the style of `tail -f` and show all newly appended lines,
|
|
26
|
+
until interrupted (e.g., via `CTRL+C`), even once the service has
|
|
27
|
+
stopped. When the log is trimmed on a service start, following
|
|
28
|
+
continues at the new end of the file.
|
|
29
|
+
|
|
30
|
+
- \[`-n`|`--lines` *n*\]:
|
|
31
|
+
Show the last *n* non-empty lines only, where *n* has to be a
|
|
32
|
+
positive integer (default: all lines, or `10` with `--follow`).
|
|
33
|
+
|
|
34
|
+
## FILES
|
|
35
|
+
|
|
36
|
+
- `.ase/service.log`:
|
|
37
|
+
The log of the detached service.
|
|
38
|
+
|
|
39
|
+
## EXIT STATUS
|
|
40
|
+
|
|
41
|
+
`0` on success, `1` on an invalid *n* or an unreadable log file.
|
|
42
|
+
|
|
43
|
+
## EXAMPLES
|
|
44
|
+
|
|
45
|
+
```sh
|
|
46
|
+
# show the last 50 log lines
|
|
47
|
+
$ ase service log -n 50
|
|
48
|
+
|
|
49
|
+
# follow the log
|
|
50
|
+
$ ase service log -f
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## SEE ALSO
|
|
54
|
+
|
|
55
|
+
`ase`(1), `ase-service`(1), `ase-service-start`(1), `tail`(1).
|
|
56
|
+
|
|
57
|
+
## AUTHOR
|
|
58
|
+
|
|
59
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# ase-service-send(1) -- Send a Command to the Background Service
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase service send`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
*cmd*
|
|
8
|
+
|
|
9
|
+
## DESCRIPTION
|
|
10
|
+
|
|
11
|
+
**ase service send** dispatches the command token *cmd* to the
|
|
12
|
+
per-project background service of *ASE* (see `ase-service`(1)) via an
|
|
13
|
+
HTTP `POST /command` request with the JSON body `{ "command":` *cmd*
|
|
14
|
+
`}`, and prints the raw response body (a JSON object) on standard
|
|
15
|
+
output. If the service is not running, it is auto-started first (like
|
|
16
|
+
`ase service start`).
|
|
17
|
+
|
|
18
|
+
## OPTIONS
|
|
19
|
+
|
|
20
|
+
- \[`-h`|`--help`\]:
|
|
21
|
+
Show usage information and exit.
|
|
22
|
+
|
|
23
|
+
## ARGUMENTS
|
|
24
|
+
|
|
25
|
+
- *cmd*:
|
|
26
|
+
The command token to dispatch. The service currently understands:
|
|
27
|
+
|
|
28
|
+
- `ping`:
|
|
29
|
+
Answer with `{"ok":true,"pong":true}`.
|
|
30
|
+
- `status`:
|
|
31
|
+
Answer with the service identity, i.e., `ok`, the project id
|
|
32
|
+
`projectId`, the `port`, and the uptime `uptimeMs` in
|
|
33
|
+
milliseconds.
|
|
34
|
+
|
|
35
|
+
Any other token is answered with an `unknown command` error (HTTP
|
|
36
|
+
status `400`).
|
|
37
|
+
|
|
38
|
+
## EXIT STATUS
|
|
39
|
+
|
|
40
|
+
`0` if the service answered with a success status, `1` if it answered
|
|
41
|
+
with an error status (e.g., for an unknown *cmd*), or if it could not
|
|
42
|
+
be started or reached.
|
|
43
|
+
|
|
44
|
+
## EXAMPLES
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
$ ase service send ping
|
|
48
|
+
{"ok":true,"pong":true}
|
|
49
|
+
|
|
50
|
+
$ ase service send status
|
|
51
|
+
{"ok":true,"projectId":"ase","port":42817,"uptimeMs":723456}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## SEE ALSO
|
|
55
|
+
|
|
56
|
+
`ase`(1), `ase-service`(1), `ase-service-status`(1).
|
|
57
|
+
|
|
58
|
+
## AUTHOR
|
|
59
|
+
|
|
60
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# ase-service-start(1) -- Start the Per-Project Background Service
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase service start`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
\[`-f`|`--foreground`\]
|
|
8
|
+
|
|
9
|
+
## DESCRIPTION
|
|
10
|
+
|
|
11
|
+
**ase service start** starts the per-project background HTTP service
|
|
12
|
+
of *ASE* (see `ase-service`(1)) for the project of the current working
|
|
13
|
+
directory.
|
|
14
|
+
|
|
15
|
+
If a service of this project already answers on the port persisted in
|
|
16
|
+
`.ase/service.yaml`, the command just reports `service: already running
|
|
17
|
+
on port` *port* and exits with status `0`. Otherwise, it allocates the
|
|
18
|
+
preferred port `project.service.port` (see `ase-config`(1)), if
|
|
19
|
+
configured and free, else (with a warning, if configured) a fresh
|
|
20
|
+
random free port out of the range `42000`..`44000` (trying up to 20
|
|
21
|
+
candidates), spawns the service as a detached background process
|
|
22
|
+
(with its standard output and standard error appended to
|
|
23
|
+
`.ase/service.log`, trimmed to its last 2000 lines beforehand if larger
|
|
24
|
+
than 1 MB), and probes its readiness for up to 5 seconds.
|
|
25
|
+
|
|
26
|
+
Once ready, the service persists its port into `.ase/service.yaml`,
|
|
27
|
+
and the command reports `service: started on port` *port*. If the
|
|
28
|
+
spawned service exits during its startup, does not become ready in
|
|
29
|
+
time, or loses its port to a foreign listener, the attempt is aborted
|
|
30
|
+
(killing the process) and retried with a new port, up to three attempts
|
|
31
|
+
in total, after which the command fails with the reason and the last
|
|
32
|
+
20 lines of the log.
|
|
33
|
+
|
|
34
|
+
The detached service adopts the log level of the global `--log-level`
|
|
35
|
+
option of this command, e.g., `ase --log-level debug service start`
|
|
36
|
+
logs the full MCP traffic. It stops itself after 30 minutes without any
|
|
37
|
+
request (but never while a request is in flight or while it holds open
|
|
38
|
+
AI usage windows), on `ase service stop`, and removes its port from
|
|
39
|
+
`.ase/service.yaml` again.
|
|
40
|
+
|
|
41
|
+
Usually, the service does not have to be started explicitly, as the
|
|
42
|
+
MCP bridge `ase mcp`, `ase service send`, and the hooks start it on
|
|
43
|
+
demand.
|
|
44
|
+
|
|
45
|
+
## OPTIONS
|
|
46
|
+
|
|
47
|
+
- \[`-h`|`--help`\]:
|
|
48
|
+
Show usage information and exit.
|
|
49
|
+
|
|
50
|
+
- \[`-f`|`--foreground`\]:
|
|
51
|
+
Run the service in the current process instead, on a port allocated
|
|
52
|
+
as above, logging to the terminal (resp. the global `--log-file`) instead
|
|
53
|
+
of `.ase/service.log` and without the idle timeout, until it is
|
|
54
|
+
interrupted (via `SIGINT`, e.g., `CTRL+C`, `SIGTERM`, `SIGHUP`, or
|
|
55
|
+
`SIGQUIT`) or stopped via `ase service stop`. A service of this
|
|
56
|
+
project already running is an error in this mode.
|
|
57
|
+
|
|
58
|
+
## FILES
|
|
59
|
+
|
|
60
|
+
- `.ase/service.yaml`:
|
|
61
|
+
The persisted port of the running service.
|
|
62
|
+
|
|
63
|
+
- `.ase/service.log`:
|
|
64
|
+
The log of the detached service.
|
|
65
|
+
|
|
66
|
+
- `.ase/.gitignore`:
|
|
67
|
+
The self-ignoring Git ignore file covering the machine-local runtime
|
|
68
|
+
files, created if missing.
|
|
69
|
+
|
|
70
|
+
## EXIT STATUS
|
|
71
|
+
|
|
72
|
+
`0` if the service was started or is already running (resp., in the
|
|
73
|
+
foreground, once it was stopped), `1` if it could not be started, or,
|
|
74
|
+
with `--foreground`, if it is already running.
|
|
75
|
+
|
|
76
|
+
## EXAMPLES
|
|
77
|
+
|
|
78
|
+
```sh
|
|
79
|
+
# start the service in the background
|
|
80
|
+
$ ase service start
|
|
81
|
+
|
|
82
|
+
# run the service in the foreground for debugging
|
|
83
|
+
$ ase --log-level debug service start --foreground
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## SEE ALSO
|
|
87
|
+
|
|
88
|
+
`ase`(1), `ase-service`(1), `ase-service-status`(1),
|
|
89
|
+
`ase-service-stop`(1), `ase-service-log`(1), `ase-config`(1).
|
|
90
|
+
|
|
91
|
+
## AUTHOR
|
|
92
|
+
|
|
93
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# ase-service-status(1) -- Report Whether the Background Service Is Running
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase service status`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
|
|
8
|
+
## DESCRIPTION
|
|
9
|
+
|
|
10
|
+
**ase service status** reports whether the per-project background
|
|
11
|
+
service of *ASE* (see `ase-service`(1)) is running. It probes the port
|
|
12
|
+
persisted in `.ase/service.yaml` via an HTTP `OPTIONS /` request and
|
|
13
|
+
verifies that the responding service belongs to the current project
|
|
14
|
+
(by its project id). It prints one of the following lines on standard
|
|
15
|
+
output:
|
|
16
|
+
|
|
17
|
+
- `service: running on port` *port* `(uptime:` *duration*`)`:
|
|
18
|
+
A service of this project is running.
|
|
19
|
+
|
|
20
|
+
- `service: not running (no port configured)`:
|
|
21
|
+
No port is persisted in `.ase/service.yaml`.
|
|
22
|
+
|
|
23
|
+
- `service: not running (port` *port* `not responding)`:
|
|
24
|
+
Nothing listens on the persisted port.
|
|
25
|
+
|
|
26
|
+
- `service: not running (port` *port* `in use by foreign service)`:
|
|
27
|
+
The persisted port is answered by something else, e.g., the service
|
|
28
|
+
of another project.
|
|
29
|
+
|
|
30
|
+
## OPTIONS
|
|
31
|
+
|
|
32
|
+
- \[`-h`|`--help`\]:
|
|
33
|
+
Show usage information and exit.
|
|
34
|
+
|
|
35
|
+
## FILES
|
|
36
|
+
|
|
37
|
+
- `.ase/service.yaml`:
|
|
38
|
+
The persisted port of the service.
|
|
39
|
+
|
|
40
|
+
## EXIT STATUS
|
|
41
|
+
|
|
42
|
+
`0` if the service of the project is running, else `1`.
|
|
43
|
+
|
|
44
|
+
## EXAMPLES
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
$ ase service status
|
|
48
|
+
service: running on port 42817 (uptime: 12 minutes 3.4 seconds)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## SEE ALSO
|
|
52
|
+
|
|
53
|
+
`ase`(1), `ase-service`(1), `ase-service-start`(1),
|
|
54
|
+
`ase-service-stop`(1).
|
|
55
|
+
|
|
56
|
+
## AUTHOR
|
|
57
|
+
|
|
58
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# ase-service-stop(1) -- Stop the Background Service
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase service stop`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
|
|
8
|
+
## DESCRIPTION
|
|
9
|
+
|
|
10
|
+
**ase service stop** stops the per-project background service of
|
|
11
|
+
*ASE* (see `ase-service`(1)) via an HTTP `POST /stop` request to the
|
|
12
|
+
port persisted in `.ase/service.yaml`, and removes the persisted port
|
|
13
|
+
(and the file, if it becomes empty). This also stops a service running
|
|
14
|
+
in the foreground via `ase service start --foreground`. On stop, the
|
|
15
|
+
service persists the journal of its AI usage windows, so no usage is
|
|
16
|
+
lost.
|
|
17
|
+
|
|
18
|
+
If no port is persisted, or nothing listens on the persisted port, an
|
|
19
|
+
informational message is logged, a stale port is removed, and the
|
|
20
|
+
command exits with status `0`. If the persisted port is answered by a
|
|
21
|
+
foreign service (e.g., the service of another project), it is left
|
|
22
|
+
alone and the command exits with status `1`.
|
|
23
|
+
|
|
24
|
+
## OPTIONS
|
|
25
|
+
|
|
26
|
+
- \[`-h`|`--help`\]:
|
|
27
|
+
Show usage information and exit.
|
|
28
|
+
|
|
29
|
+
## FILES
|
|
30
|
+
|
|
31
|
+
- `.ase/service.yaml`:
|
|
32
|
+
The persisted port of the service, cleared on stop.
|
|
33
|
+
|
|
34
|
+
## EXIT STATUS
|
|
35
|
+
|
|
36
|
+
`0` if the service was stopped or was not running, `1` if the port is
|
|
37
|
+
in use by a foreign service or the stop request failed.
|
|
38
|
+
|
|
39
|
+
## EXAMPLES
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
$ ase service stop
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## SEE ALSO
|
|
46
|
+
|
|
47
|
+
`ase`(1), `ase-service`(1), `ase-service-start`(1),
|
|
48
|
+
`ase-service-status`(1).
|
|
49
|
+
|
|
50
|
+
## AUTHOR
|
|
51
|
+
|
|
52
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# ase-service(1) -- Manage the Per-Project Background Service
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase service`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
*command*
|
|
8
|
+
\[*options* \[...\]\]
|
|
9
|
+
\[*args* \[...\]\]
|
|
10
|
+
|
|
11
|
+
`ase service start` \[`-f`|`--foreground`\]
|
|
12
|
+
|
|
13
|
+
`ase service status`
|
|
14
|
+
|
|
15
|
+
`ase service send` *cmd*
|
|
16
|
+
|
|
17
|
+
`ase service log` \[`-f`|`--follow`\] \[`-n`|`--lines` *n*\]
|
|
18
|
+
|
|
19
|
+
`ase service stop`
|
|
20
|
+
|
|
21
|
+
## DESCRIPTION
|
|
22
|
+
|
|
23
|
+
**ase service** manages the per-project background HTTP service of
|
|
24
|
+
*ASE*. The service is bound to `127.0.0.1` on the preferred port
|
|
25
|
+
`project.service.port`, if configured and available, else on a random
|
|
26
|
+
port out of the range `42000`..`44000`, which is persisted in
|
|
27
|
+
`.ase/service.yaml` of the project, and logs into `.ase/service.log`. It is identified by the id
|
|
28
|
+
of the project (`project.id`, else derived from the project root), so a
|
|
29
|
+
port answered by the service of another project counts as a *foreign*
|
|
30
|
+
service.
|
|
31
|
+
|
|
32
|
+
The service provides:
|
|
33
|
+
|
|
34
|
+
- the MCP endpoint `/mcp` (Streamable HTTP), serving the `ase_*` MCP
|
|
35
|
+
tools of the skills, bridged into the agent tool via `ase-mcp`(1),
|
|
36
|
+
which auto-starts the service on demand,
|
|
37
|
+
- the command endpoint `/command` (see `ase-service-send`(1)) and the
|
|
38
|
+
stop endpoint `/stop`,
|
|
39
|
+
- the endpoints `/usage/*` of the AI usage accounting of the task
|
|
40
|
+
assignments (see `ase-task-assign`(1)), plus, while
|
|
41
|
+
`telemetry.enabled` is `true`, the attempt to hold the per-user OTLP
|
|
42
|
+
ingress on `127.0.0.1:`*port* (`telemetry.service.port`, default
|
|
43
|
+
`44318`), routing the received records to the service of the project
|
|
44
|
+
owning the session (see `ase-setup-telemetry`(1)),
|
|
45
|
+
- the web task board of `ase task board --web` (see
|
|
46
|
+
`ase-task-board`(1)).
|
|
47
|
+
|
|
48
|
+
The service accepts requests with a loopback `Host` header only, to
|
|
49
|
+
defeat DNS rebinding attacks from browser pages. A detached service
|
|
50
|
+
stops itself after 30 minutes without any request, but never while a
|
|
51
|
+
request is in flight or while it holds open AI usage windows.
|
|
52
|
+
|
|
53
|
+
Without a *command*, the usage information is shown and the command
|
|
54
|
+
exits with status `1`.
|
|
55
|
+
|
|
56
|
+
## OPTIONS
|
|
57
|
+
|
|
58
|
+
- \[`-h`|`--help`\]:
|
|
59
|
+
Show usage information and exit.
|
|
60
|
+
|
|
61
|
+
## COMMANDS
|
|
62
|
+
|
|
63
|
+
- `start` \[`-f`|`--foreground`\]:
|
|
64
|
+
Start the service in the background (or run it in the foreground).
|
|
65
|
+
See `ase-service-start`(1).
|
|
66
|
+
|
|
67
|
+
- `status`:
|
|
68
|
+
Report whether the service is running. See `ase-service-status`(1).
|
|
69
|
+
|
|
70
|
+
- `send` *cmd*:
|
|
71
|
+
Send a command to the service. See `ase-service-send`(1).
|
|
72
|
+
|
|
73
|
+
- `log` \[`-f`|`--follow`\] \[`-n`|`--lines` *n*\]:
|
|
74
|
+
Show the log of the service. See `ase-service-log`(1).
|
|
75
|
+
|
|
76
|
+
- `stop`:
|
|
77
|
+
Stop the service. See `ase-service-stop`(1).
|
|
78
|
+
|
|
79
|
+
## FILES
|
|
80
|
+
|
|
81
|
+
- `.ase/service.yaml`:
|
|
82
|
+
The per-project service state (the `port` of the running service),
|
|
83
|
+
removed again once the service stopped.
|
|
84
|
+
|
|
85
|
+
- `.ase/service.log`:
|
|
86
|
+
The standard output and standard error of the detached service,
|
|
87
|
+
appended to. As the service inherits the file descriptor for its
|
|
88
|
+
entire lifetime, the file cannot be rotated while the service runs,
|
|
89
|
+
and instead is trimmed down to its last 2000 lines whenever a
|
|
90
|
+
service is started on a file larger than 1 MB.
|
|
91
|
+
|
|
92
|
+
Routine MCP traffic (session handshakes, notifications, and stream
|
|
93
|
+
opens) is logged at level `debug` only, and the arguments of the
|
|
94
|
+
logged MCP tool calls are cut at 200 characters.
|
|
95
|
+
|
|
96
|
+
- `.ase/.gitignore`:
|
|
97
|
+
The self-ignoring Git ignore file covering the machine-local runtime
|
|
98
|
+
files, created on the first start if missing.
|
|
99
|
+
|
|
100
|
+
## EXIT STATUS
|
|
101
|
+
|
|
102
|
+
`0` on success, `1` on any error (including a missing *command*). See
|
|
103
|
+
the individual commands for details.
|
|
104
|
+
|
|
105
|
+
## EXAMPLES
|
|
106
|
+
|
|
107
|
+
```sh
|
|
108
|
+
# start the service with the full MCP traffic logged
|
|
109
|
+
$ ase --log-level debug service start
|
|
110
|
+
|
|
111
|
+
# check the service and follow its log
|
|
112
|
+
$ ase service status
|
|
113
|
+
$ ase service log -f
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## SEE ALSO
|
|
117
|
+
|
|
118
|
+
`ase`(1), `ase-service-start`(1), `ase-service-status`(1),
|
|
119
|
+
`ase-service-send`(1), `ase-service-log`(1), `ase-service-stop`(1),
|
|
120
|
+
`ase-mcp`(1).
|
|
121
|
+
|
|
122
|
+
## AUTHOR
|
|
123
|
+
|
|
124
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# ase-setup-disable(1) -- Disable the ASE Plugin in an Agent Tool
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase setup disable`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
\[`-t`|`--tool` *tool*\]
|
|
8
|
+
\[`-s`|`--scope` *scope*\]
|
|
9
|
+
|
|
10
|
+
## DESCRIPTION
|
|
11
|
+
|
|
12
|
+
**ase setup disable** disables the installed *ASE* plugin in the agent
|
|
13
|
+
tool selected by `--tool` without uninstalling it, so it can be
|
|
14
|
+
enabled again via `ase setup enable`. It requires the CLI of the
|
|
15
|
+
agent tool to be found in `$PATH`.
|
|
16
|
+
|
|
17
|
+
For *Anthropic Claude Code CLI*, the plugin is disabled via `claude
|
|
18
|
+
plugin disable ase@ase` (with `--scope` *scope* for a non-`user`
|
|
19
|
+
scope), which keeps its registration under `enabledPlugins` (with the
|
|
20
|
+
value `false`). As *GitHub Copilot CLI* and *OpenAI Codex CLI* have no
|
|
21
|
+
plugin disable command, the plugin is uninstalled there instead
|
|
22
|
+
(`copilot plugin uninstall ase@ase`, resp. `codex plugin remove
|
|
23
|
+
ase@ase`, retried up to three times), while its plugin marketplace
|
|
24
|
+
stays registered.
|
|
25
|
+
|
|
26
|
+
## OPTIONS
|
|
27
|
+
|
|
28
|
+
- \[`-h`|`--help`\]:
|
|
29
|
+
Show usage information and exit.
|
|
30
|
+
|
|
31
|
+
- \[`-t`|`--tool` *tool*\]:
|
|
32
|
+
Select the target agent tool: `claude`, `copilot`, or `codex`
|
|
33
|
+
(default: `$ASE_TOOL`, else `claude`).
|
|
34
|
+
|
|
35
|
+
- \[`-s`|`--scope` *scope*\]:
|
|
36
|
+
Select the plugin installation scope: `user`, `project`, or
|
|
37
|
+
`local`. The default is auto-detected from the existing
|
|
38
|
+
installation: the scopes `local`, `project`, and `user` are probed
|
|
39
|
+
in this order, and the first one whose settings file registers the
|
|
40
|
+
plugin `ase@ase` under `enabledPlugins` is taken, falling back to
|
|
41
|
+
`user`. Only supported for `--tool claude`; a non-`user` scope for
|
|
42
|
+
`copilot` or `codex` fails with an error.
|
|
43
|
+
|
|
44
|
+
## ENVIRONMENT
|
|
45
|
+
|
|
46
|
+
- `ASE_TOOL`:
|
|
47
|
+
The default of `--tool`.
|
|
48
|
+
|
|
49
|
+
## EXIT STATUS
|
|
50
|
+
|
|
51
|
+
`0` on success, `1` on any error.
|
|
52
|
+
|
|
53
|
+
## EXAMPLES
|
|
54
|
+
|
|
55
|
+
```sh
|
|
56
|
+
# temporarily disable the ASE plugin in Anthropic Claude Code CLI
|
|
57
|
+
$ ase setup disable
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## SEE ALSO
|
|
61
|
+
|
|
62
|
+
`ase`(1), `ase-setup`(1), `ase-setup-enable`(1),
|
|
63
|
+
`ase-setup-uninstall`(1), `ase-setup-status`(1).
|
|
64
|
+
|
|
65
|
+
## AUTHOR
|
|
66
|
+
|
|
67
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# ase-setup-enable(1) -- Enable the ASE Plugin in an Agent Tool
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase setup enable`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
\[`-t`|`--tool` *tool*\]
|
|
8
|
+
\[`-s`|`--scope` *scope*\]
|
|
9
|
+
|
|
10
|
+
## DESCRIPTION
|
|
11
|
+
|
|
12
|
+
**ase setup enable** enables the already installed *ASE* plugin in the
|
|
13
|
+
agent tool selected by `--tool`, e.g., after it was disabled via `ase
|
|
14
|
+
setup disable`. It requires the CLI of the agent tool to be found in
|
|
15
|
+
`$PATH`.
|
|
16
|
+
|
|
17
|
+
For *Anthropic Claude Code CLI*, the plugin is enabled via `claude
|
|
18
|
+
plugin enable ase@ase` (with `--scope` *scope* for a non-`user`
|
|
19
|
+
scope). As *GitHub Copilot CLI* and *OpenAI Codex CLI* have no plugin
|
|
20
|
+
enable command, the plugin is (re-)installed there instead (`copilot
|
|
21
|
+
plugin install ase@ase`, resp. `codex plugin add ase@ase`, retried up
|
|
22
|
+
to three times), which requires the *ASE* plugin marketplace to be
|
|
23
|
+
still registered (see `ase-setup-install`(1)).
|
|
24
|
+
|
|
25
|
+
## OPTIONS
|
|
26
|
+
|
|
27
|
+
- \[`-h`|`--help`\]:
|
|
28
|
+
Show usage information and exit.
|
|
29
|
+
|
|
30
|
+
- \[`-t`|`--tool` *tool*\]:
|
|
31
|
+
Select the target agent tool: `claude`, `copilot`, or `codex`
|
|
32
|
+
(default: `$ASE_TOOL`, else `claude`).
|
|
33
|
+
|
|
34
|
+
- \[`-s`|`--scope` *scope*\]:
|
|
35
|
+
Select the plugin installation scope: `user`, `project`, or
|
|
36
|
+
`local`. The default is auto-detected from the existing
|
|
37
|
+
installation: the scopes `local`, `project`, and `user` are probed
|
|
38
|
+
in this order, and the first one whose settings file registers the
|
|
39
|
+
plugin `ase@ase` under `enabledPlugins` (enabled or disabled) is
|
|
40
|
+
taken, falling back to `user`. Only supported for `--tool claude`;
|
|
41
|
+
a non-`user` scope for `copilot` or `codex` fails with an error.
|
|
42
|
+
|
|
43
|
+
## ENVIRONMENT
|
|
44
|
+
|
|
45
|
+
- `ASE_TOOL`:
|
|
46
|
+
The default of `--tool`.
|
|
47
|
+
|
|
48
|
+
## EXIT STATUS
|
|
49
|
+
|
|
50
|
+
`0` on success, `1` on any error.
|
|
51
|
+
|
|
52
|
+
## EXAMPLES
|
|
53
|
+
|
|
54
|
+
```sh
|
|
55
|
+
# re-enable the ASE plugin in Anthropic Claude Code CLI
|
|
56
|
+
$ ase setup enable
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## SEE ALSO
|
|
60
|
+
|
|
61
|
+
`ase`(1), `ase-setup`(1), `ase-setup-disable`(1),
|
|
62
|
+
`ase-setup-status`(1).
|
|
63
|
+
|
|
64
|
+
## AUTHOR
|
|
65
|
+
|
|
66
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|