@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,108 @@
|
|
|
1
|
+
# ase-task-request(1) -- Request the Processing of a Task by a Prompt
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase task request`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
*id*
|
|
8
|
+
*name*
|
|
9
|
+
\[*prompt* ...\]
|
|
10
|
+
|
|
11
|
+
## DESCRIPTION
|
|
12
|
+
|
|
13
|
+
**ase task request** requests the processing of the task *id* by the
|
|
14
|
+
*prompt* under the request name *name*, for an agent processing the
|
|
15
|
+
requests of this name (see `ase-agent`(1)): `edit` for the edit
|
|
16
|
+
requests of `ase agent editor` (the same as key `E` of the task board,
|
|
17
|
+
see `ase-task-board`(1)), `estimate` for the (re-)estimation requests
|
|
18
|
+
of `ase agent estimator --mode request` (see `ase-agent-estimator`(1)),
|
|
19
|
+
`research` for the research requests of `ase agent researcher` (see
|
|
20
|
+
`ase-agent-researcher`(1)), and any other name for the requests of a
|
|
21
|
+
request agent of a definition kind or of `ase agent adhoc` (with
|
|
22
|
+
`--type request` and `--request-name` *name*).
|
|
23
|
+
|
|
24
|
+
The request is attached to the task plan as an attachment of the type
|
|
25
|
+
`text/plain; charset=utf-8; kind="`*name*`"`, with the prompt as its
|
|
26
|
+
data, its whitespace-collapsed first 60 characters as its description
|
|
27
|
+
(resp. *name*` request without prompt` for an empty prompt), and its
|
|
28
|
+
creation and modification timestamps. The aggregated state of
|
|
29
|
+
the requests of the name is mirrored in the `Tags` frontmatter key of
|
|
30
|
+
the task as the tag `ase-agent-`*name*`:pending` (resp.
|
|
31
|
+
`ase-agent-editor:pending` for `edit`), as the agents and the task
|
|
32
|
+
boards see the task headers only.
|
|
33
|
+
|
|
34
|
+
While being processed, the request turns into `kind="`*name*`-running"`
|
|
35
|
+
(tag value `active`), and on a failure into `kind="`*name*`-failed"` (tag
|
|
36
|
+
value `failed`). A new request replaces all failed requests of the name.
|
|
37
|
+
|
|
38
|
+
The request is refused for a missing task, for a task in a finished
|
|
39
|
+
state of the task lifecycle model, for an empty prompt of an `edit`
|
|
40
|
+
request, and while a request of the name is being processed, as adding
|
|
41
|
+
a request would change the task plan under the agent processing the
|
|
42
|
+
running one. The prompt of any other request may be empty, for the
|
|
43
|
+
request agents ignoring the prompts of their requests (like `ase agent
|
|
44
|
+
estimator --mode request`) or taking them as optional (like `ase agent
|
|
45
|
+
researcher`, which then researches the task plan itself), while a
|
|
46
|
+
request agent consuming the prompts (by the placeholder `{prompt}` of
|
|
47
|
+
its prompt template, or by its hooks `prepare`, `prompt`, or `finish`,
|
|
48
|
+
see `ase-agent-adhoc`(1)) turns a request with an empty prompt into a
|
|
49
|
+
failed one.
|
|
50
|
+
|
|
51
|
+
The MCP tool `ase_task_request` provides the same functionality.
|
|
52
|
+
|
|
53
|
+
## OPTIONS
|
|
54
|
+
|
|
55
|
+
- \[`-h`|`--help`\]:
|
|
56
|
+
Show usage information and exit.
|
|
57
|
+
|
|
58
|
+
## ARGUMENTS
|
|
59
|
+
|
|
60
|
+
- *id*:
|
|
61
|
+
The id of the task.
|
|
62
|
+
|
|
63
|
+
- *name*:
|
|
64
|
+
The request name: a lower-case word of letters, digits, and dashes,
|
|
65
|
+
starting with a letter, not ending in `-running` or `-failed`, and
|
|
66
|
+
none of the built-in agent kinds `rebooter`, `condenser`,
|
|
67
|
+
`implementer`, `qualifier`, `integrator`, `editor`, `estimator`, and
|
|
68
|
+
`researcher` (as
|
|
69
|
+
its tag `ase-agent-`*name* is the one of a built-in agent). The name
|
|
70
|
+
`edit` selects the edit requests of `ase agent editor`, the name
|
|
71
|
+
`estimate` the estimation requests of `ase agent estimator --mode
|
|
72
|
+
request`, and the name `research` the research requests of `ase agent
|
|
73
|
+
researcher --mode request`.
|
|
74
|
+
|
|
75
|
+
- \[*prompt* ...\]:
|
|
76
|
+
The prompt of the request, with all its words joined by single
|
|
77
|
+
spaces (and leading and trailing whitespace removed), where an
|
|
78
|
+
omitted prompt is an empty one (refused for `edit`).
|
|
79
|
+
|
|
80
|
+
## EXIT STATUS
|
|
81
|
+
|
|
82
|
+
`0` on success, `1` if the request name is invalid or the request is
|
|
83
|
+
refused.
|
|
84
|
+
|
|
85
|
+
## EXAMPLES
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
# request an edit of the plan of task "json-export"
|
|
89
|
+
$ ase task request json-export edit "Also support JSON5 output"
|
|
90
|
+
|
|
91
|
+
# request a lint report from a request agent of name "lint"
|
|
92
|
+
$ ase task request json-export lint focus on error handling
|
|
93
|
+
|
|
94
|
+
# request a re-estimation of the effort (without a prompt)
|
|
95
|
+
$ ase task request json-export estimate
|
|
96
|
+
|
|
97
|
+
# request a research of a topic for the task
|
|
98
|
+
$ ase task request json-export research streaming JSON serialization
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## SEE ALSO
|
|
102
|
+
|
|
103
|
+
`ase`(1), `ase-task`(1), `ase-task-board`(1), `ase-agent`(1),
|
|
104
|
+
`ase-agent-editor`(1), `ase-agent-researcher`(1), `ase-agent-adhoc`(1).
|
|
105
|
+
|
|
106
|
+
## AUTHOR
|
|
107
|
+
|
|
108
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# ase-task-save(1) -- Save a Task Plan from Standard Input
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase task save`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
\[`-c`|`--create`\]
|
|
8
|
+
*id*
|
|
9
|
+
|
|
10
|
+
## DESCRIPTION
|
|
11
|
+
|
|
12
|
+
**ase task save** reads a task plan in the textual task format (see
|
|
13
|
+
`ase util meta format-task`) from standard input and saves it under
|
|
14
|
+
the given *id* in the task store (see `ase-task`(1)), creating or
|
|
15
|
+
overwriting the task.
|
|
16
|
+
|
|
17
|
+
The text is parsed into the frontmatter block, the plan body, and the
|
|
18
|
+
attachment blocks, where a plan in a legacy format is normalized into
|
|
19
|
+
the current frontmatter shape first. The `Id` frontmatter key is
|
|
20
|
+
always taken from the *id* argument, and a missing `Type` key is set
|
|
21
|
+
to `text/vnd.ase.task`. A text without a closed frontmatter block is
|
|
22
|
+
taken as the plan body.
|
|
23
|
+
|
|
24
|
+
Attachment data given as the elision marker `[elided: `*N*` lines]` is
|
|
25
|
+
restored from the stored plan. The usage attachment (`kind="usage"`)
|
|
26
|
+
can be changed by a booking only: an overwrite keeps the stored usage
|
|
27
|
+
attachment, while a create drops any given one.
|
|
28
|
+
|
|
29
|
+
The `Status` frontmatter key is checked against the task lifecycle
|
|
30
|
+
model of the project: a changed status which is not a state of the
|
|
31
|
+
model, or which is not reachable from the previously saved status (or,
|
|
32
|
+
for a new task, from the initial state of the model) via one or more
|
|
33
|
+
transitions of the model, lets the save fail. An *id* not conforming
|
|
34
|
+
to the task id scheme of the project is saved, but warned about.
|
|
35
|
+
|
|
36
|
+
## OPTIONS
|
|
37
|
+
|
|
38
|
+
- \[`-h`|`--help`\]:
|
|
39
|
+
Show usage information and exit.
|
|
40
|
+
|
|
41
|
+
- \[`-c`|`--create`\]:
|
|
42
|
+
Create the task only: fail if a task with *id* already exists,
|
|
43
|
+
instead of overwriting it (default: off). Intended for the first
|
|
44
|
+
save of a task whose *id* was obtained via `ase-task-newid`(1), as
|
|
45
|
+
only a `seq` id is reserved there, so a concurrently created task of
|
|
46
|
+
the same id is never overwritten.
|
|
47
|
+
|
|
48
|
+
## ARGUMENTS
|
|
49
|
+
|
|
50
|
+
- *id*:
|
|
51
|
+
The id of the task, matching `[A-Za-z0-9#][A-Za-z0-9#_-]*`.
|
|
52
|
+
|
|
53
|
+
## EXIT STATUS
|
|
54
|
+
|
|
55
|
+
`0` on success, `1` if the *id* is invalid, the plan is invalid (e.g.,
|
|
56
|
+
a multi-line frontmatter value, or a body which would be misread as
|
|
57
|
+
attachments), the `Status` is not a state of the model or not
|
|
58
|
+
reachable, or, with `--create`, the task already exists.
|
|
59
|
+
|
|
60
|
+
## EXAMPLES
|
|
61
|
+
|
|
62
|
+
```sh
|
|
63
|
+
# create a new task from a plan file
|
|
64
|
+
$ id=$(ase task newid "Export as JSON")
|
|
65
|
+
$ ase task save --create "$id" <plan.md
|
|
66
|
+
|
|
67
|
+
# round-trip a task plan through a filter
|
|
68
|
+
$ ase task load json-export | sed -e 's/^Kind:.*/Kind: CRAFTING/' | ase task save json-export
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## SEE ALSO
|
|
72
|
+
|
|
73
|
+
`ase`(1), `ase-task`(1), `ase-task-load`(1), `ase-task-edit`(1),
|
|
74
|
+
`ase-task-newid`(1), `ase-task-status`(1).
|
|
75
|
+
|
|
76
|
+
## AUTHOR
|
|
77
|
+
|
|
78
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# ase-task-status(1) -- Get or Set the Lifecycle Status of a Task
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase task status`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
\[*id*\[`:`\]\]
|
|
8
|
+
\[*status*\]
|
|
9
|
+
|
|
10
|
+
## DESCRIPTION
|
|
11
|
+
|
|
12
|
+
**ase task status** gets or sets the lifecycle status, i.e., the
|
|
13
|
+
`Status` frontmatter key, of the task plan with the given *id* in the
|
|
14
|
+
task store (see `ase-task`(1)).
|
|
15
|
+
|
|
16
|
+
Without *status*, the current status is printed to standard output,
|
|
17
|
+
where a plan without a `Status` key reads as the initial state of the
|
|
18
|
+
task lifecycle model of the project.
|
|
19
|
+
|
|
20
|
+
With *status*, the status is set and the change is logged as
|
|
21
|
+
`task: set status of "`*id*`" from "`*from*`" to "`*to*`"`. The
|
|
22
|
+
*status* is given case-insensitively and has to be a state of the task
|
|
23
|
+
lifecycle model of the project, which is reachable from the current
|
|
24
|
+
status via one or more transitions of the model (see
|
|
25
|
+
**TASK LIFECYCLE MODELS** in `ase-task`(1)); a current status foreign
|
|
26
|
+
to the model can be changed to any state, to allow its correction.
|
|
27
|
+
|
|
28
|
+
Only the frontmatter is changed: the `Modified` key is left alone, as
|
|
29
|
+
it tracks the changes of the plan body only.
|
|
30
|
+
|
|
31
|
+
## OPTIONS
|
|
32
|
+
|
|
33
|
+
- \[`-h`|`--help`\]:
|
|
34
|
+
Show usage information and exit.
|
|
35
|
+
|
|
36
|
+
## ARGUMENTS
|
|
37
|
+
|
|
38
|
+
- \[*id*\[`:`\]\]:
|
|
39
|
+
The id of the task (default: `$ASE_TASK_ID`, else `default`). A
|
|
40
|
+
trailing colon is stripped, which allows to mark a single argument
|
|
41
|
+
explicitly as the *id*: if only a single argument is given, it is
|
|
42
|
+
taken as *status* if it is a state of the task lifecycle model
|
|
43
|
+
(case-insensitively) and has no trailing colon, else as *id*.
|
|
44
|
+
|
|
45
|
+
- \[*status*\]:
|
|
46
|
+
The lifecycle status to set.
|
|
47
|
+
|
|
48
|
+
## ENVIRONMENT
|
|
49
|
+
|
|
50
|
+
- `ASE_TASK_ID`:
|
|
51
|
+
The default task id (default: `default`).
|
|
52
|
+
|
|
53
|
+
## EXIT STATUS
|
|
54
|
+
|
|
55
|
+
`0` on success, `1` if no such task exists, the *status* is not a
|
|
56
|
+
state of the task lifecycle model, or it is not reachable from the
|
|
57
|
+
current status.
|
|
58
|
+
|
|
59
|
+
## EXAMPLES
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
# print the status of the task "json-export"
|
|
63
|
+
$ ase task status json-export:
|
|
64
|
+
|
|
65
|
+
# move the task "json-export" into "SHELVED"
|
|
66
|
+
$ ase task status json-export shelved
|
|
67
|
+
|
|
68
|
+
# close the task of $ASE_TASK_ID
|
|
69
|
+
$ ase task status CLOSED
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## SEE ALSO
|
|
73
|
+
|
|
74
|
+
`ase`(1), `ase-task`(1), `ase-task-lifecycle`(1), `ase-task-list`(1),
|
|
75
|
+
`ase-task-save`(1).
|
|
76
|
+
|
|
77
|
+
## AUTHOR
|
|
78
|
+
|
|
79
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
# ase-task-store(1) -- Manage the per-user task store REST API server
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase task store`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
*command*
|
|
8
|
+
\[*options* \[...\]\]
|
|
9
|
+
|
|
10
|
+
`ase task store start`
|
|
11
|
+
\[`-a`|`--address` *host*\]
|
|
12
|
+
\[`-p`|`--port` *port*\]
|
|
13
|
+
\[`-t`|`--token` *token*\]
|
|
14
|
+
\[`-c`|`--cors` *origin*\]
|
|
15
|
+
\[`-m`|`--module` *name*\]
|
|
16
|
+
\[`-d`|`--basedir` *dir*\]
|
|
17
|
+
\[`-s`|`--solo`|`--no-solo`\]
|
|
18
|
+
\[`--with-agent-relay`|`--without-agent-relay`\]
|
|
19
|
+
\[`--tls-cert` *file* `--tls-key` *file*\]
|
|
20
|
+
\[`-f`|`--foreground`\]
|
|
21
|
+
|
|
22
|
+
`ase task store status`
|
|
23
|
+
|
|
24
|
+
`ase task store log`
|
|
25
|
+
\[`-f`|`--follow`\]
|
|
26
|
+
\[`-n`|`--lines` *n*\]
|
|
27
|
+
|
|
28
|
+
`ase task store stop`
|
|
29
|
+
|
|
30
|
+
## DESCRIPTION
|
|
31
|
+
|
|
32
|
+
**ase task store** manages the *task store server*: a per-user (not
|
|
33
|
+
per-project), bearer token authenticated REST API server, which
|
|
34
|
+
persists the task plans of *all* projects registered with it and which
|
|
35
|
+
the `ase task` commands of a project use through a remote
|
|
36
|
+
`project.task.store.url` of the form
|
|
37
|
+
`ase://`*addr*`:`*port*\[`/`*token*\] resp.
|
|
38
|
+
`ases://`*addr*`:`*port*\[`/`*token*\]\[`?insecure`\] (see
|
|
39
|
+
`ase-task`(1)).
|
|
40
|
+
|
|
41
|
+
It can run locally or on a central host, as long as all clients reach
|
|
42
|
+
it. The REST API itself, its task plan model, and its event
|
|
43
|
+
notifications are described in `docs/task-api.md` of the *ASE*
|
|
44
|
+
distribution.
|
|
45
|
+
|
|
46
|
+
The server is *storage agnostic*: it implements the authentication,
|
|
47
|
+
the validation, the task lifecycle model checks, and the event
|
|
48
|
+
notifications itself, and delegates the *persistence* of projects and
|
|
49
|
+
task plans to a single *storage plugin* loaded at its start (see
|
|
50
|
+
**STORAGE PLUGINS** below).
|
|
51
|
+
|
|
52
|
+
The server is configured through its per-user configuration file
|
|
53
|
+
*per-user configuration directory*`/store.yaml` (see **FILES**), into
|
|
54
|
+
which the effective configuration of every start is persisted again,
|
|
55
|
+
so later starts, `ase task store status`, and `ase task store stop`
|
|
56
|
+
find and probe the running server with the very same address, port,
|
|
57
|
+
token, and TLS setting. Optionally, the server additionally co-hosts
|
|
58
|
+
the *agent relay* (see `ase-agent-relay`(1)), so a central host needs a
|
|
59
|
+
single server process only.
|
|
60
|
+
|
|
61
|
+
Without a *command*, the usage information is shown and the command
|
|
62
|
+
exits with status `1`.
|
|
63
|
+
|
|
64
|
+
## OPTIONS
|
|
65
|
+
|
|
66
|
+
- \[`-h`|`--help`\]:
|
|
67
|
+
Show usage information of `ase task store` resp. of the given
|
|
68
|
+
*command* and exit.
|
|
69
|
+
|
|
70
|
+
## COMMANDS
|
|
71
|
+
|
|
72
|
+
The following commands exist:
|
|
73
|
+
|
|
74
|
+
### ase task store start
|
|
75
|
+
|
|
76
|
+
`ase task store start` \[*options*\]
|
|
77
|
+
|
|
78
|
+
Start the task store server in the background (detached, logging
|
|
79
|
+
into *per-user configuration directory*`/store.log`), or with
|
|
80
|
+
`--foreground` in the current process. Before the server is started,
|
|
81
|
+
the given port is validated, and the TLS certificate and key are
|
|
82
|
+
resolved (where both or none have to be given) and checked for
|
|
83
|
+
readability, so invalid options never leave no server running.
|
|
84
|
+
|
|
85
|
+
The start is *idempotent*: a server already running on the configured
|
|
86
|
+
address and port (as identified by probing its `/projects` endpoint) is
|
|
87
|
+
left alone and reported as `task store: already running on` *url*. If an
|
|
88
|
+
explicitly given option *deviates* from the configuration of the running
|
|
89
|
+
server (`--address`, `--port`, `--token`, `--cors`, `--tls-cert`,
|
|
90
|
+
`--tls-key`, `--module`, `--basedir`, `--solo`/`--no-solo`,
|
|
91
|
+
`--with-agent-relay`, or `--without-agent-relay`), the running server is
|
|
92
|
+
instead stopped and restarted with the new configuration.
|
|
93
|
+
|
|
94
|
+
A running server rejecting the configured token is an error. A
|
|
95
|
+
configured port held by a foreign service is re-allocated (with a
|
|
96
|
+
warning). Binding to a non-loopback *host* without TLS is warned about,
|
|
97
|
+
as the bearer token would then travel unencrypted over the network.
|
|
98
|
+
|
|
99
|
+
A detached server is awaited (for up to 10 seconds) until it responds
|
|
100
|
+
to the probe with the expected token, and is reported as `task store:
|
|
101
|
+
started on` *url* `(storage plugin "`*name*`")`. If it exits during
|
|
102
|
+
startup, does not respond, or its port is taken by a foreign service
|
|
103
|
+
meanwhile, it is terminated and the failure is reported together with
|
|
104
|
+
the last 20 lines of its log. The server terminates on `SIGTERM`,
|
|
105
|
+
`SIGINT`, `SIGHUP`, or `SIGQUIT`, stopping its storage plugin and
|
|
106
|
+
removing its `pid` from `store.yaml`. The options are:
|
|
107
|
+
|
|
108
|
+
- \[`-a`|`--address` *host*\]:
|
|
109
|
+
The IP address (or hostname) to bind to (default: the configured
|
|
110
|
+
`address`, else `127.0.0.1`). Use `0.0.0.0` resp. `::` to bind to
|
|
111
|
+
all interfaces (the local probes then connect to `127.0.0.1`
|
|
112
|
+
resp. `::1`).
|
|
113
|
+
- \[`-p`|`--port` *port*\]:
|
|
114
|
+
The TCP port to bind to, an integer in the range `1`..`65535`
|
|
115
|
+
(default: the configured `port`, else a free port allocated
|
|
116
|
+
randomly in the range `42000`..`44000`).
|
|
117
|
+
- \[`-t`|`--token` *token*\]:
|
|
118
|
+
The bearer token every request has to carry in its
|
|
119
|
+
`Authorization: Bearer` *token* header (default:
|
|
120
|
+
`$ASE_TASK_STORE_TOKEN`, else the configured `token`, else a
|
|
121
|
+
freshly generated random token of 48 hexadecimal digits). The
|
|
122
|
+
token grants *full* access to *all* projects of the server.
|
|
123
|
+
- \[`-c`|`--cors` *origin*\]:
|
|
124
|
+
Allow cross-origin browser requests (Cross-Origin Resource
|
|
125
|
+
Sharing, CORS) from *origin*, e.g. `http://localhost:5173`, or
|
|
126
|
+
from any origin with `*`. Repeatable for multiple origins
|
|
127
|
+
(default: the configured `cors` list, else none, i.e., no CORS
|
|
128
|
+
headers are emitted and cross-origin browser requests fail).
|
|
129
|
+
- \[`-m`|`--module` *name*\]:
|
|
130
|
+
The storage plugin to load: `ase` for the built-in file-based one,
|
|
131
|
+
`github`, `gitlab`, resp. `gitea` for the built-in GitHub, GitLab,
|
|
132
|
+
resp. Gitea Issues one, any other plain *name* (matching
|
|
133
|
+
`[A-Za-z0-9_-]+`) for the NPM package `ase-task-store-`*name*
|
|
134
|
+
(resolvable from the *ASE* installation), and a relative or absolute
|
|
135
|
+
path for a local module (default: the configured `storage.plugin`,
|
|
136
|
+
else `ase`).
|
|
137
|
+
|
|
138
|
+
The given plugin is persisted as `storage.plugin`.
|
|
139
|
+
- \[`-d`|`--basedir` *dir*\]:
|
|
140
|
+
The base directory of the built-in `ase` storage plugin (default:
|
|
141
|
+
the configured `storage.options.basedir`, resolved relative to
|
|
142
|
+
the per-user configuration directory, else `tasks` below it). A
|
|
143
|
+
given *dir* is persisted as `storage.options.basedir`. Ignored for
|
|
144
|
+
all other storage plugins.
|
|
145
|
+
- \[`-s`|`--solo`\]:
|
|
146
|
+
Let the built-in `ase` storage plugin store a *single* project
|
|
147
|
+
flat in its base directory, accepting *any* project id (default:
|
|
148
|
+
the configured `storage.options.solo`, else one sub-directory per
|
|
149
|
+
project). Persisted as `storage.options.solo`. Ignored for all
|
|
150
|
+
other storage plugins.
|
|
151
|
+
- \[`--no-solo`\]:
|
|
152
|
+
Let the built-in `ase` storage plugin store one sub-directory per
|
|
153
|
+
project, removing a configured `storage.options.solo`.
|
|
154
|
+
- \[`--with-agent-relay`\]:
|
|
155
|
+
Additionally co-host the agent relay (see `ase-agent-relay`(1)),
|
|
156
|
+
i.e., its `/agents` and `/projects/`*id*`/agents`... endpoints,
|
|
157
|
+
under the same address, port, and token (default: the configured
|
|
158
|
+
`relay`, else not co-hosted). Persisted as `relay`. Mutually
|
|
159
|
+
exclusive with `--without-agent-relay`.
|
|
160
|
+
- \[`--without-agent-relay`\]:
|
|
161
|
+
Do not co-host the agent relay, removing a configured `relay`.
|
|
162
|
+
Mutually exclusive with `--with-agent-relay`.
|
|
163
|
+
- \[`--tls-cert` *file*\]:
|
|
164
|
+
Serve HTTPS (and `wss://` for the WebSocket event endpoint)
|
|
165
|
+
instead of plain HTTP, with the PEM certificate (chain) in
|
|
166
|
+
*file*. Requires `--tls-key`. Default: the `project.task.store.crt`
|
|
167
|
+
configuration (resolved relative to the configuration file
|
|
168
|
+
defining it), unless `project.task.store.url` selects plain HTTP
|
|
169
|
+
via `ase://` on this host, else the configured `tls.cert`, else
|
|
170
|
+
plain HTTP. The effective path is persisted as `tls.cert`.
|
|
171
|
+
- \[`--tls-key` *file*\]:
|
|
172
|
+
The PEM private key in *file* for HTTPS. Requires `--tls-cert`.
|
|
173
|
+
Default: the `project.task.store.key` configuration (under the
|
|
174
|
+
same condition as for `--tls-cert`), else the configured
|
|
175
|
+
`tls.key`. The effective path is persisted as `tls.key`.
|
|
176
|
+
- \[`-f`|`--foreground`\]:
|
|
177
|
+
Run the server in the current process instead, logging to the
|
|
178
|
+
terminal, until it is interrupted (e.g. via `CTRL+C`) or stopped
|
|
179
|
+
via `ase task store stop`. An already running server with an
|
|
180
|
+
unchanged configuration is then an error.
|
|
181
|
+
- \[`-h`|`--help`\]:
|
|
182
|
+
Show usage information and exit.
|
|
183
|
+
|
|
184
|
+
### ase task store status
|
|
185
|
+
|
|
186
|
+
`ase task store status`
|
|
187
|
+
|
|
188
|
+
Report whether the task store server is running, by probing the
|
|
189
|
+
configured address and port with the configured token. Prints `task
|
|
190
|
+
store: running on` *url* `(pid` *pid*`)`, followed by `with agent
|
|
191
|
+
relay` if the server co-hosts the agent relay, and exits with status
|
|
192
|
+
`0`. Otherwise it prints why it is not running -- no port configured,
|
|
193
|
+
port not responding, port in use by a foreign service, or a running
|
|
194
|
+
server rejecting the configured token -- and exits with status `1`.
|
|
195
|
+
|
|
196
|
+
### ase task store log
|
|
197
|
+
|
|
198
|
+
`ase task store log` \[`-f`|`--follow`\] \[`-n`|`--lines` *n*\]
|
|
199
|
+
|
|
200
|
+
Show the log *per-user configuration directory*`/store.log` of the
|
|
201
|
+
task store server run in the background. A server run with
|
|
202
|
+
`--foreground` logs to the terminal instead, and without a log file
|
|
203
|
+
just an informational message is printed. The log file is trimmed
|
|
204
|
+
down to its last 2000 lines whenever a server is started on a log
|
|
205
|
+
file larger than 1 MB. The options are:
|
|
206
|
+
|
|
207
|
+
- \[`-f`|`--follow`\]:
|
|
208
|
+
Show the last *n* lines (default: `10`) and then, in the style of
|
|
209
|
+
`tail -f`, follow all newly appended lines until interrupted,
|
|
210
|
+
even once the server has stopped.
|
|
211
|
+
- \[`-n`|`--lines` *n*\]:
|
|
212
|
+
Show the last *n* lines only, where *n* is a positive integer
|
|
213
|
+
(default: all lines, or `10` with `--follow`).
|
|
214
|
+
- \[`-h`|`--help`\]:
|
|
215
|
+
Show usage information and exit.
|
|
216
|
+
|
|
217
|
+
### ase task store stop
|
|
218
|
+
|
|
219
|
+
`ase task store stop`
|
|
220
|
+
|
|
221
|
+
Stop the task store server: it is first probed (as a stale process id
|
|
222
|
+
might meanwhile belong to a foreign process), then sent `SIGTERM`,
|
|
223
|
+
and awaited for up to 5 seconds until it is gone, and finally its
|
|
224
|
+
`pid` is removed from `store.yaml`. A server which is not running (or
|
|
225
|
+
not configured at all) is reported informationally with exit status
|
|
226
|
+
`0`. A responding server whose process id is unknown, resp. a server
|
|
227
|
+
not stopping within the timeout, is an error.
|
|
228
|
+
|
|
229
|
+
## STORAGE PLUGINS
|
|
230
|
+
|
|
231
|
+
A storage plugin is a Node.js module default-exporting a factory
|
|
232
|
+
function, which receives the `storage.options` of `store.yaml`
|
|
233
|
+
verbatim (see `docs/task-api.md` for the plugin API). The following
|
|
234
|
+
built-in storage plugins exist:
|
|
235
|
+
|
|
236
|
+
- `ase`:
|
|
237
|
+
The default, file-based plugin, persisting the task plans in the
|
|
238
|
+
textual task format as `TASK-`*id*`.md` files. Its options are
|
|
239
|
+
`basedir` (the base directory, see `--basedir`), `solo` (see
|
|
240
|
+
`--solo`), and `lifecycle` (the task lifecycle model of newly
|
|
241
|
+
registered projects, default: `solo`).
|
|
242
|
+
|
|
243
|
+
Without `solo`, every project is stored below
|
|
244
|
+
*basedir*`/`*project-id*`/`, with its `PROJECT.yaml` as the project
|
|
245
|
+
registry entry (carrying the task lifecycle model, the task id
|
|
246
|
+
scheme, and the sequence number high-water mark). With `solo`, a
|
|
247
|
+
single project is stored flat in *basedir* itself, with a single
|
|
248
|
+
`PROJECT.yaml` there, and any project id is accepted -- which is
|
|
249
|
+
exactly what the local `ase:`*path* form of `project.task.store.url`
|
|
250
|
+
uses in-process, without any server.
|
|
251
|
+
|
|
252
|
+
- `github`:
|
|
253
|
+
Persists the task plans as the *issues* of GitHub repositories,
|
|
254
|
+
through the GitHub REST API.
|
|
255
|
+
|
|
256
|
+
Its options are `url` (the web URL of the GitHub instance, default:
|
|
257
|
+
`https://github.com`, else e.g. the one of a GitHub Enterprise
|
|
258
|
+
Server or Cloud), `token` (default: `$GITHUB_TOKEN`, else
|
|
259
|
+
`$GH_TOKEN`; required), `repos` (required, a mapping of each project
|
|
260
|
+
id onto its *owner*`/`*repo*), and `poll` (the polling interval of
|
|
261
|
+
the change detection in seconds, default: `60`, `0` disables it).
|
|
262
|
+
|
|
263
|
+
- `gitlab`:
|
|
264
|
+
Persists the task plans as the *issues* of GitLab projects, through
|
|
265
|
+
the GitLab REST API v4. Its options are `url` (the GitLab instance,
|
|
266
|
+
default: `$GITLAB_HOST`, else `https://gitlab.com`), `token` (default:
|
|
267
|
+
`$GITLAB_TOKEN`; required, a token with scope `api` and at least the
|
|
268
|
+
role *Planner* in the projects), `repos` (required, a mapping of each
|
|
269
|
+
project id onto its *namespace*`/`*project* path, with nested groups
|
|
270
|
+
allowed), and `poll` (as for `github`).
|
|
271
|
+
|
|
272
|
+
- `gitea`:
|
|
273
|
+
Persists the task plans as the *issues* of Gitea repositories,
|
|
274
|
+
through the Gitea REST API v1. Its options are `url` (the Gitea
|
|
275
|
+
instance, default: `https://gitea.com`), `token` (default:
|
|
276
|
+
`$GITEA_TOKEN`; required, a token with the scopes `write:issue` and
|
|
277
|
+
`read:repository` and write access to the repositories), `repos`
|
|
278
|
+
(required, a mapping of each project id onto its *owner*`/`*repo*),
|
|
279
|
+
and `poll` (as for `github`).
|
|
280
|
+
|
|
281
|
+
The issue tracker plugins register a project by the label
|
|
282
|
+
`ase:project` of its repository and map the task plan frontmatter onto
|
|
283
|
+
the issue state, assignees, labels, and dependencies, as detailed in
|
|
284
|
+
`docs/task-api.md`. The same plugins also run in-process (without any
|
|
285
|
+
server) for the `github:`, `gitlab:`, and `gitea+http[s]:` forms of
|
|
286
|
+
`project.task.store.url` (see `ase-task`(1)).
|
|
287
|
+
|
|
288
|
+
## ENVIRONMENT
|
|
289
|
+
|
|
290
|
+
- `ASE_TASK_STORE_TOKEN`:
|
|
291
|
+
The default bearer token of `ase task store start` (taking precedence
|
|
292
|
+
over the configured `token`, but not over `--token`).
|
|
293
|
+
|
|
294
|
+
- `GITHUB_TOKEN`, `GH_TOKEN`:
|
|
295
|
+
The default access token of the `github` storage plugin.
|
|
296
|
+
|
|
297
|
+
- `GITLAB_HOST`, `GITLAB_TOKEN`:
|
|
298
|
+
The default instance and access token of the `gitlab` storage plugin.
|
|
299
|
+
|
|
300
|
+
- `GITEA_TOKEN`:
|
|
301
|
+
The default access token of the `gitea` storage plugin.
|
|
302
|
+
|
|
303
|
+
## FILES
|
|
304
|
+
|
|
305
|
+
- *per-user configuration directory*`/store.yaml`:
|
|
306
|
+
The configuration and runtime state of the task store server (see
|
|
307
|
+
`ase`(1) for the location of the per-user configuration directory),
|
|
308
|
+
written with mode `0600`, as it carries the token.
|
|
309
|
+
|
|
310
|
+
Its keys are `address` (the bound address), `port` (the bound port),
|
|
311
|
+
`token` (the expected bearer token), `pid` (the process id of the
|
|
312
|
+
running server), `cors` (the list of allowed CORS origins),
|
|
313
|
+
`tls.cert` and `tls.key` (the paths of the PEM certificate and key,
|
|
314
|
+
resolved relative to the file), `relay` (`true` to co-host the agent
|
|
315
|
+
relay), `storage.plugin` (the storage plugin), and `storage.options`
|
|
316
|
+
(the options of the storage plugin, see **STORAGE PLUGINS**), as in
|
|
317
|
+
the example below.
|
|
318
|
+
|
|
319
|
+
- *per-user configuration directory*`/store.log`:
|
|
320
|
+
The log of the task store server run in the background.
|
|
321
|
+
|
|
322
|
+
- *per-user configuration directory*`/tasks/`:
|
|
323
|
+
The default base directory of the built-in `ase` storage plugin.
|
|
324
|
+
|
|
325
|
+
An example `store.yaml` is:
|
|
326
|
+
|
|
327
|
+
```yaml
|
|
328
|
+
address: 127.0.0.1
|
|
329
|
+
port: 42042
|
|
330
|
+
token: 8f3c[...]
|
|
331
|
+
cors:
|
|
332
|
+
- http://localhost:5173
|
|
333
|
+
storage:
|
|
334
|
+
plugin: ase
|
|
335
|
+
options:
|
|
336
|
+
basedir: /Users/rse/Library/Application Support/ase/tasks
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
## EXIT STATUS
|
|
340
|
+
|
|
341
|
+
`ase task store status` exits with status `0` if the server is running
|
|
342
|
+
and with status `1` otherwise. All other commands exit with status `0`
|
|
343
|
+
on success and with status `1` on any error.
|
|
344
|
+
|
|
345
|
+
## EXAMPLES
|
|
346
|
+
|
|
347
|
+
```sh
|
|
348
|
+
# start the task store server locally and point the project to it
|
|
349
|
+
$ ase task store start --port 42042
|
|
350
|
+
$ ase config set project.task.store.url ase://127.0.0.1:42042
|
|
351
|
+
|
|
352
|
+
# start a central task store server with TLS and co-hosted agent relay
|
|
353
|
+
$ ase task store start --address 0.0.0.0 --port 42042 \
|
|
354
|
+
--tls-cert /etc/ssl/tasks.example.com.crt \
|
|
355
|
+
--tls-key /etc/ssl/tasks.example.com.key \
|
|
356
|
+
--with-agent-relay
|
|
357
|
+
|
|
358
|
+
# start a task store server on the GitHub Issues storage plugin
|
|
359
|
+
# (after configuring "storage.options.repos" in "store.yaml")
|
|
360
|
+
$ ase task store start --module github
|
|
361
|
+
|
|
362
|
+
# check and follow the server
|
|
363
|
+
$ ase task store status
|
|
364
|
+
$ ase task store log -f
|
|
365
|
+
|
|
366
|
+
# stop the server
|
|
367
|
+
$ ase task store stop
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
## SEE ALSO
|
|
371
|
+
|
|
372
|
+
`ase`(1), `ase-task`(1), `ase-task-board`(1), `ase-agent-relay`(1),
|
|
373
|
+
`ase-config`(1).
|
|
374
|
+
|
|
375
|
+
## AUTHOR
|
|
376
|
+
|
|
377
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# ase-task-view(1) -- Show a Task Plan in the Pager
|
|
2
|
+
|
|
3
|
+
## SYNOPSIS
|
|
4
|
+
|
|
5
|
+
`ase task view`
|
|
6
|
+
\[`-h`|`--help`\]
|
|
7
|
+
*id*
|
|
8
|
+
|
|
9
|
+
## DESCRIPTION
|
|
10
|
+
|
|
11
|
+
**ase task view** loads the task plan with the given *id* from the task
|
|
12
|
+
store (see `ase-task`(1)) and shows it in the pager defined by `$PAGER`
|
|
13
|
+
(falling back to `more`), run through the shell (so a value with
|
|
14
|
+
arguments is supported) and fed with the plan via its standard input.
|
|
15
|
+
If standard output is not a terminal, the pager is bypassed and the
|
|
16
|
+
plan is written plainly to standard output.
|
|
17
|
+
|
|
18
|
+
## OPTIONS
|
|
19
|
+
|
|
20
|
+
- \[`-h`|`--help`\]:
|
|
21
|
+
Show usage information and exit.
|
|
22
|
+
|
|
23
|
+
## ARGUMENTS
|
|
24
|
+
|
|
25
|
+
- *id*:
|
|
26
|
+
The id of the task, matching `[A-Za-z0-9#][A-Za-z0-9#_-]*`.
|
|
27
|
+
|
|
28
|
+
## ENVIRONMENT
|
|
29
|
+
|
|
30
|
+
- `PAGER`:
|
|
31
|
+
The pager command (default: `more`).
|
|
32
|
+
|
|
33
|
+
## EXIT STATUS
|
|
34
|
+
|
|
35
|
+
`0` on success, `1` if no such task exists.
|
|
36
|
+
|
|
37
|
+
## EXAMPLES
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
$ PAGER="less -R" ase task view json-export
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## SEE ALSO
|
|
44
|
+
|
|
45
|
+
`ase`(1), `ase-task`(1), `ase-task-load`(1), `ase-task-edit`(1),
|
|
46
|
+
`more`(1), `less`(1).
|
|
47
|
+
|
|
48
|
+
## AUTHOR
|
|
49
|
+
|
|
50
|
+
Dr. Ralf S. Engelschall <rse@engelschall.com>
|