@rse/ase 1.0.7 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dst/ase-agent-definition-api.d.ts +184 -0
- package/dst/ase-agent-definition-api.js +6 -0
- package/dst/ase-agent-definition-builtin/condenser.js +42 -0
- package/dst/ase-agent-definition-builtin/editor.js +45 -0
- package/dst/ase-agent-definition-builtin/estimator.js +98 -0
- package/dst/ase-agent-definition-builtin/implementer.js +121 -0
- package/dst/ase-agent-definition-builtin/integrator.js +56 -0
- package/dst/ase-agent-definition-builtin/qualifier.js +61 -0
- package/dst/ase-agent-definition-builtin/rebooter.js +41 -0
- package/dst/ase-agent-definition-builtin/researcher.js +77 -0
- package/dst/ase-agent-definition-core.js +827 -0
- package/dst/ase-agent-fleet.js +772 -0
- package/dst/ase-agent-process.js +232 -0
- package/dst/ase-agent-relay-client.js +509 -0
- package/dst/ase-agent-relay-core.js +213 -0
- package/dst/ase-agent-relay-server-bind.js +242 -0
- package/dst/ase-agent-relay-server-cli.js +50 -0
- package/dst/ase-agent-runtime-claim.js +189 -0
- package/dst/ase-agent-runtime-engine.js +1100 -0
- package/dst/ase-agent-runtime-exec.js +275 -0
- package/dst/ase-agent-runtime-phase.js +581 -0
- package/dst/ase-agent-runtime-request.js +272 -0
- package/dst/ase-agent-runtime-tool.js +207 -0
- package/dst/ase-agent-runtime.js +1316 -0
- package/dst/ase-agent.js +65 -0
- package/dst/ase-artifact.js +6 -5
- package/dst/ase-config-core.js +465 -0
- package/dst/ase-config-schema.js +357 -0
- package/dst/ase-config-scope.js +172 -0
- package/dst/ase-config.js +25 -585
- package/dst/ase-hook.js +228 -111
- package/dst/ase-lib-daemon-cli.js +130 -0
- package/dst/ase-lib-hash.js +20 -0
- package/dst/{ase-log.js → ase-lib-log.js} +40 -7
- package/dst/ase-lib-server-bind.js +115 -0
- package/dst/ase-lib-server-cli.js +474 -0
- package/dst/{ase-table.js → ase-lib-table.js} +1 -1
- package/dst/{ase-version.js → ase-lib-version.js} +8 -1
- package/dst/ase-man.js +96 -0
- package/dst/ase-mcp.js +166 -13
- package/dst/{ase-getopt.js → ase-service-getopt.js} +82 -80
- package/dst/{ase-markdown.js → ase-service-markdown.js} +18 -11
- package/dst/ase-service-otel.js +1246 -0
- package/dst/{ase-skills.js → ase-service-skills.js} +29 -64
- package/dst/ase-service-state.js +101 -0
- package/dst/ase-service.js +269 -81
- package/dst/ase-setup-common.js +141 -0
- package/dst/ase-setup-mcp.js +359 -0
- package/dst/ase-setup-settings.js +837 -0
- package/dst/ase-setup.js +113 -869
- package/dst/ase-spec.js +31 -19
- package/dst/ase-statusline.js +108 -43
- package/dst/ase-task-board-core.js +739 -0
- package/dst/ase-task-board-filter.js +127 -0
- package/dst/ase-task-board-flow.js +237 -0
- package/dst/ase-task-board-graph.js +497 -0
- package/dst/ase-task-board-stats.js +263 -0
- package/dst/ase-task-board-tui-control.js +775 -0
- package/dst/ase-task-board-tui-model.js +1008 -0
- package/dst/ase-task-board-tui-popup.js +626 -0
- package/dst/ase-task-board-tui-style.js +106 -0
- package/dst/ase-task-board-tui-view.js +847 -0
- package/dst/ase-task-board-tui.js +189 -0
- package/dst/ase-task-board-web-client.css +1 -0
- package/dst/ase-task-board-web-client.html +20 -0
- package/dst/ase-task-board-web-client.js +81 -0
- package/dst/ase-task-board-web-server.js +823 -0
- package/dst/ase-task-board.js +134 -0
- package/dst/ase-task-format.js +757 -0
- package/dst/ase-task-request.js +208 -0
- package/dst/ase-task-store-client.js +495 -0
- package/dst/ase-task-store-core.js +804 -0
- package/dst/ase-task-store-issues.js +237 -0
- package/dst/ase-task-store-plugin-api.js +6 -0
- package/dst/ase-task-store-plugin-ase.js +484 -0
- package/dst/ase-task-store-plugin-delegate.js +137 -0
- package/dst/ase-task-store-plugin-gitea.js +666 -0
- package/dst/ase-task-store-plugin-github.js +696 -0
- package/dst/ase-task-store-plugin-gitlab.js +668 -0
- package/dst/ase-task-store-server-bind.js +538 -0
- package/dst/ase-task-store-server-cli.js +154 -0
- package/dst/ase-task.js +1335 -357
- package/dst/{ase-compat.js → ase-util-compat.js} +2 -2
- package/dst/{ase-diagram.js → ase-util-diagram.js} +107 -32
- package/dst/{ase-meta.js → ase-util-meta.js} +2 -2
- package/dst/{ase-metric.js → ase-util-metric.js} +2 -2
- package/dst/{ase-mint.js → ase-util-mint.js} +19 -12
- package/dst/{ase-worktree.js → ase-util-worktree.js} +30 -19
- package/dst/ase-util.js +20 -0
- package/dst/ase.js +108 -32
- package/dst/man/ase-agent-adhoc.1 +515 -0
- package/dst/man/ase-agent-condenser.1 +193 -0
- package/dst/man/ase-agent-editor.1 +212 -0
- package/dst/man/ase-agent-estimator.1 +214 -0
- package/dst/man/ase-agent-fleet.1 +185 -0
- package/dst/man/ase-agent-implementer.1 +233 -0
- package/dst/man/ase-agent-integrator.1 +213 -0
- package/dst/man/ase-agent-qualifier.1 +214 -0
- package/dst/man/ase-agent-rebooter.1 +193 -0
- package/dst/man/ase-agent-relay.1 +128 -0
- package/dst/man/ase-agent-researcher.1 +217 -0
- package/dst/man/ase-agent.1 +264 -0
- package/dst/man/ase-artifact-list.1 +38 -0
- package/dst/man/ase-artifact-name.1 +39 -0
- package/dst/man/ase-artifact.1 +56 -0
- package/dst/man/ase-config-delete.1 +45 -0
- package/dst/man/ase-config-edit.1 +48 -0
- package/dst/man/ase-config-get.1 +46 -0
- package/dst/man/ase-config-init.1 +60 -0
- package/dst/man/ase-config-list.1 +42 -0
- package/dst/man/ase-config-set.1 +52 -0
- package/dst/man/ase-config.1 +231 -0
- package/dst/man/ase-hook-permission-request.1 +36 -0
- package/dst/man/ase-hook-pre-tool-use.1 +59 -0
- package/dst/man/ase-hook-session-end.1 +47 -0
- package/dst/man/ase-hook-session-persona.1 +37 -0
- package/dst/man/ase-hook-session-start.1 +81 -0
- package/dst/man/ase-hook-stop.1 +34 -0
- package/dst/man/ase-hook-user-prompt-submit.1 +34 -0
- package/dst/man/ase-hook.1 +51 -0
- package/dst/man/ase-man.1 +67 -0
- package/dst/man/ase-mcp.1 +61 -0
- package/dst/man/ase-service-log.1 +43 -0
- package/dst/man/ase-service-send.1 +47 -0
- package/dst/man/ase-service-start.1 +54 -0
- package/dst/man/ase-service-status.1 +46 -0
- package/dst/man/ase-service-stop.1 +37 -0
- package/dst/man/ase-service.1 +85 -0
- package/dst/man/ase-setup-disable.1 +44 -0
- package/dst/man/ase-setup-enable.1 +45 -0
- package/dst/man/ase-setup-install.1 +73 -0
- package/dst/man/ase-setup-mcp.1 +124 -0
- package/dst/man/ase-setup-status.1 +60 -0
- package/dst/man/ase-setup-statusline.1 +92 -0
- package/dst/man/ase-setup-telemetry.1 +92 -0
- package/dst/man/ase-setup-uninstall.1 +59 -0
- package/dst/man/ase-setup-update.1 +64 -0
- package/dst/man/ase-setup.1 +93 -0
- package/dst/man/ase-spec-export.1 +62 -0
- package/dst/man/ase-spec-lint.1 +40 -0
- package/dst/man/ase-spec-preview.1 +40 -0
- package/dst/man/ase-spec.1 +46 -0
- package/dst/man/ase-statusline.1 +189 -0
- package/dst/man/ase-task-assign.1 +71 -0
- package/dst/man/ase-task-board.1 +384 -0
- package/dst/man/ase-task-delete.1 +35 -0
- package/dst/man/ase-task-edit.1 +46 -0
- package/dst/man/ase-task-idscheme.1 +65 -0
- package/dst/man/ase-task-lifecycle.1 +57 -0
- package/dst/man/ase-task-list.1 +47 -0
- package/dst/man/ase-task-load.1 +36 -0
- package/dst/man/ase-task-newid.1 +61 -0
- package/dst/man/ase-task-purge.1 +37 -0
- package/dst/man/ase-task-rename.1 +44 -0
- package/dst/man/ase-task-request.1 +61 -0
- package/dst/man/ase-task-save.1 +48 -0
- package/dst/man/ase-task-status.1 +55 -0
- package/dst/man/ase-task-store.1 +194 -0
- package/dst/man/ase-task-view.1 +40 -0
- package/dst/man/ase-task.1 +160 -0
- package/dst/man/ase-util-compat.1 +25 -0
- package/dst/man/ase-util-diagram.1 +76 -0
- package/dst/man/ase-util-meta.1 +45 -0
- package/dst/man/ase-util-metric.1 +54 -0
- package/dst/man/ase-util-mint.1 +59 -0
- package/dst/man/ase-util-worktree.1 +72 -0
- package/dst/man/ase-util.1 +50 -0
- package/dst/man/ase.1 +124 -0
- package/package.json +81 -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-meta-diagram.md +12 -8
- package/plugin/agents/ase-repo-review.md +322 -0
- package/plugin/hooks/hooks-codex.json +5 -0
- package/plugin/hooks/hooks-copilot.json +5 -0
- package/plugin/hooks/hooks.json +8 -0
- package/plugin/meta/ase-common-approach.md +117 -0
- package/plugin/meta/ase-common-changeset.md +256 -0
- package/plugin/meta/ase-common-code.md +10 -173
- package/plugin/meta/ase-common-grill.md +317 -0
- package/plugin/meta/ase-common-resolve.md +305 -0
- package/plugin/meta/ase-common-task.md +83 -4
- package/plugin/meta/ase-constitution.md +0 -2
- package/plugin/meta/ase-format-specbook.md +208 -25
- package/plugin/meta/ase-format-specbook.yaml +242 -851
- package/plugin/meta/ase-format-task.md +669 -125
- package/plugin/meta/ase-persona.md +3 -4
- package/plugin/meta/ase-skill.md +9 -0
- package/plugin/mods/ase-mods.ts +409 -0
- package/plugin/mods/claude-code.d.ts +13417 -0
- package/plugin/skills/ase-arch-analyze/SKILL.md +1 -1
- package/plugin/skills/ase-arch-analyze/help.md +2 -2
- package/plugin/skills/ase-code-analyze/SKILL.md +59 -8
- package/plugin/skills/ase-code-analyze/help.md +29 -4
- package/plugin/skills/ase-code-edit/SKILL.md +107 -181
- package/plugin/skills/ase-code-edit/help.md +118 -31
- package/plugin/skills/ase-code-lint/SKILL.md +64 -13
- package/plugin/skills/ase-code-lint/help.md +32 -2
- package/plugin/skills/ase-docs-proofread/SKILL.md +4 -4
- package/plugin/skills/ase-docs-proofread/help.md +1 -1
- package/plugin/skills/ase-docs-refine/SKILL.md +4 -4
- package/plugin/skills/ase-docs-shorten/SKILL.md +4 -4
- package/plugin/skills/ase-help-intent/data.md +2164 -1087
- package/plugin/skills/ase-help-intent/help.md +1 -1
- package/plugin/skills/ase-help-skill/catalog.md +12 -9
- package/plugin/skills/ase-meta-brainstorm/SKILL.md +1 -1
- package/plugin/skills/ase-meta-config/SKILL.md +3 -4
- package/plugin/skills/ase-meta-config/help.md +31 -10
- package/plugin/skills/ase-meta-mint/SKILL.md +5 -5
- package/plugin/skills/ase-meta-mint/help.md +10 -5
- package/plugin/skills/ase-meta-why/help.md +1 -1
- package/plugin/skills/ase-meta-workflow/SKILL.md +7 -7
- package/plugin/skills/ase-meta-workflow/help.md +4 -4
- package/plugin/skills/ase-meta-workflow/sample.md +3 -3
- package/plugin/skills/ase-meta-workflow/workflow.txt +22 -18
- package/plugin/skills/{ase-meta-changelog → ase-repo-changelog}/SKILL.md +4 -3
- package/plugin/skills/{ase-meta-changelog → ase-repo-changelog}/help.md +5 -5
- package/plugin/skills/{ase-meta-commit → ase-repo-commit}/SKILL.md +6 -6
- package/plugin/skills/{ase-meta-commit → ase-repo-commit}/help.md +5 -5
- package/plugin/skills/{ase-meta-diff → ase-repo-diff}/SKILL.md +6 -6
- package/plugin/skills/{ase-meta-diff → ase-repo-diff}/help.md +8 -8
- package/plugin/skills/{ase-code-dissect → ase-repo-dissect}/SKILL.md +19 -19
- package/plugin/skills/{ase-code-dissect → ase-repo-dissect}/help.md +10 -12
- package/plugin/skills/ase-repo-merge/SKILL.md +346 -0
- package/plugin/skills/ase-repo-merge/help.md +107 -0
- package/plugin/skills/ase-repo-resolve/SKILL.md +158 -0
- package/plugin/skills/ase-repo-resolve/help.md +102 -0
- package/plugin/skills/ase-repo-review/SKILL.md +406 -0
- package/plugin/skills/ase-repo-review/help.md +181 -0
- package/plugin/skills/ase-spec-edit/SKILL.md +117 -183
- package/plugin/skills/ase-spec-edit/help.md +107 -26
- package/plugin/skills/ase-sync-reconcile/help.md +1 -1
- package/plugin/skills/ase-task-assign/SKILL.md +111 -0
- package/plugin/skills/ase-task-assign/help.md +119 -0
- package/plugin/skills/ase-task-condense/SKILL.md +21 -21
- package/plugin/skills/ase-task-condense/help.md +12 -10
- package/plugin/skills/ase-task-delete/SKILL.md +1 -1
- package/plugin/skills/ase-task-dissect/SKILL.md +71 -48
- package/plugin/skills/ase-task-dissect/help.md +10 -9
- package/plugin/skills/ase-task-edit/SKILL.md +379 -94
- package/plugin/skills/ase-task-edit/help.md +95 -22
- package/plugin/skills/ase-task-estimate/SKILL.md +492 -0
- package/plugin/skills/ase-task-estimate/help.md +158 -0
- package/plugin/skills/ase-task-grill/SKILL.md +246 -138
- package/plugin/skills/ase-task-grill/help.md +129 -26
- package/plugin/skills/ase-task-id/SKILL.md +8 -1
- package/plugin/skills/ase-task-id/help.md +6 -3
- package/plugin/skills/ase-task-implement/SKILL.md +535 -145
- package/plugin/skills/ase-task-implement/help.md +138 -47
- package/plugin/skills/ase-task-integrate/SKILL.md +549 -0
- package/plugin/skills/ase-task-integrate/help.md +187 -0
- package/plugin/skills/ase-task-list/SKILL.md +55 -23
- package/plugin/skills/ase-task-list/help.md +45 -21
- package/plugin/skills/ase-task-reboot/SKILL.md +84 -43
- package/plugin/skills/ase-task-reboot/help.md +28 -8
- package/plugin/skills/ase-task-rename/SKILL.md +10 -2
- package/plugin/skills/ase-task-research/SKILL.md +386 -0
- package/plugin/skills/ase-task-research/help.md +102 -0
- package/plugin/skills/ase-task-status/SKILL.md +137 -0
- package/plugin/skills/ase-task-status/help.md +80 -0
- package/plugin/skills/ase-task-view/SKILL.md +49 -24
- package/plugin/skills/ase-task-view/help.md +19 -9
- package/plugin/agents/ase-meta-review.md +0 -187
- package/plugin/skills/ase-code-craft/SKILL.md +0 -264
- package/plugin/skills/ase-code-craft/help.md +0 -122
- package/plugin/skills/ase-code-refactor/SKILL.md +0 -232
- package/plugin/skills/ase-code-refactor/help.md +0 -109
- package/plugin/skills/ase-code-resolve/SKILL.md +0 -289
- package/plugin/skills/ase-code-resolve/help.md +0 -116
- package/plugin/skills/ase-meta-review/SKILL.md +0 -210
- package/plugin/skills/ase-meta-review/help.md +0 -96
- package/plugin/skills/ase-task-preflight/SKILL.md +0 -166
- package/plugin/skills/ase-task-preflight/help.md +0 -82
- /package/dst/{ase-ignore.js → ase-lib-ignore.js} +0 -0
- /package/dst/{ase-stdio.js → ase-lib-stdio.js} +0 -0
- /package/dst/{ase-kv.js → ase-service-kv.js} +0 -0
- /package/dst/{ase-sleep.js → ase-service-sleep.js} +0 -0
- /package/dst/{ase-timestamp.js → ase-service-timestamp.js} +0 -0
package/dst/ase.js
CHANGED
|
@@ -5,30 +5,62 @@
|
|
|
5
5
|
** Licensed under Apache 2.0 <https://spdx.org/licenses/Apache-2.0>
|
|
6
6
|
*/
|
|
7
7
|
import { Command, CommanderError, Option } from "commander";
|
|
8
|
-
import Log from "./ase-log.js";
|
|
9
|
-
import
|
|
10
|
-
import ConfigCommand from "./ase-config.js";
|
|
11
|
-
import MCPCommand from "./ase-mcp.js";
|
|
12
|
-
import ServiceCommand from "./ase-service.js";
|
|
13
|
-
import HookCommand from "./ase-hook.js";
|
|
14
|
-
import StatuslineCommand from "./ase-statusline.js";
|
|
15
|
-
import TaskCommand from "./ase-task.js";
|
|
16
|
-
import ArtifactCommand from "./ase-artifact.js";
|
|
17
|
-
import SpecCommand from "./ase-spec.js";
|
|
18
|
-
import MetaCommand from "./ase-meta.js";
|
|
19
|
-
import CompatCommand from "./ase-compat.js";
|
|
20
|
-
import DiagramCommand from "./ase-diagram.js";
|
|
21
|
-
import WorktreeCommand from "./ase-worktree.js";
|
|
22
|
-
import MintCommand from "./ase-mint.js";
|
|
23
|
-
import MetricCommand from "./ase-metric.js";
|
|
8
|
+
import Log from "./ase-lib-log.js";
|
|
9
|
+
import { writeStdout } from "./ase-lib-stdio.js";
|
|
24
10
|
import pkg from "../package.json" with { type: "json" };
|
|
25
11
|
/* globally initialize logger */
|
|
26
12
|
const log = new Log("ase", "info", "-");
|
|
13
|
+
/* instantiate the default-exported command class of a lazily imported
|
|
14
|
+
module and register it onto the given parent command */
|
|
15
|
+
const attach = async (imported, parent) => {
|
|
16
|
+
const CommandClass = (await imported).default;
|
|
17
|
+
return new CommandClass(log).register(parent);
|
|
18
|
+
};
|
|
19
|
+
/* registrars of the top-level commands; each one imports its module on
|
|
20
|
+
demand only, as importing all of them eagerly loads the dependency
|
|
21
|
+
trees of all features (about 2300 modules, costing seconds) before
|
|
22
|
+
Commander even knows which single command was addressed at all */
|
|
23
|
+
const commands = {
|
|
24
|
+
setup: async (p) => attach(import("./ase-setup.js"), p),
|
|
25
|
+
config: async (p) => attach(import("./ase-config.js"), p),
|
|
26
|
+
mcp: async (p) => attach(import("./ase-mcp.js"), p),
|
|
27
|
+
service: async (p) => attach(import("./ase-service.js"), p),
|
|
28
|
+
hook: async (p) => attach(import("./ase-hook.js"), p),
|
|
29
|
+
statusline: async (p) => attach(import("./ase-statusline.js"), p),
|
|
30
|
+
task: async (p) => attach(import("./ase-task.js"), p),
|
|
31
|
+
artifact: async (p) => attach(import("./ase-artifact.js"), p),
|
|
32
|
+
spec: async (p) => attach(import("./ase-spec.js"), p),
|
|
33
|
+
util: async (p) => attach(import("./ase-util.js"), p),
|
|
34
|
+
agent: async (p) => attach(import("./ase-agent.js"), p),
|
|
35
|
+
man: async (p) => attach(import("./ase-man.js"), p)
|
|
36
|
+
};
|
|
37
|
+
/* registrars of those sub-commands which live in their own modules and
|
|
38
|
+
hence are registered onto an already established parent command */
|
|
39
|
+
const subCommands = {
|
|
40
|
+
task: {
|
|
41
|
+
board: async (p) => attach(import("./ase-task-board.js"), p)
|
|
42
|
+
},
|
|
43
|
+
util: {
|
|
44
|
+
meta: async (p) => attach(import("./ase-util-meta.js"), p),
|
|
45
|
+
compat: async (p) => attach(import("./ase-util-compat.js"), p),
|
|
46
|
+
diagram: async (p) => attach(import("./ase-util-diagram.js"), p),
|
|
47
|
+
worktree: async (p) => attach(import("./ase-util-worktree.js"), p),
|
|
48
|
+
mint: async (p) => attach(import("./ase-util-mint.js"), p),
|
|
49
|
+
metric: async (p) => attach(import("./ase-util-metric.js"), p)
|
|
50
|
+
}
|
|
51
|
+
};
|
|
27
52
|
/* main entry point (wrapped in a regular async function to avoid
|
|
28
53
|
top-level await, which would be reported as "unsettled" by Node in
|
|
29
54
|
the long-running daemon process spawned by "ase service start") */
|
|
30
55
|
const main = async () => {
|
|
31
56
|
await log.init();
|
|
57
|
+
/* apply the line prefix of the logger, passed by a supervising process (e.g. "ase agent
|
|
58
|
+
fleet" to its members), and consume it, as it must not leak into any sub-process */
|
|
59
|
+
const prefix = process.env.ASE_LOG_PREFIX;
|
|
60
|
+
if (prefix !== undefined) {
|
|
61
|
+
log.prefix(prefix);
|
|
62
|
+
Reflect.deleteProperty(process.env, "ASE_LOG_PREFIX");
|
|
63
|
+
}
|
|
32
64
|
/* establish top-level program */
|
|
33
65
|
const program = new Command();
|
|
34
66
|
program
|
|
@@ -48,22 +80,63 @@ const main = async () => {
|
|
|
48
80
|
log.logLevel(opts.logLevel);
|
|
49
81
|
log.logFile(opts.logFile);
|
|
50
82
|
});
|
|
51
|
-
/*
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
new
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
83
|
+
/* scan the command line for the top-level command name, skipping
|
|
84
|
+
the global options and the values they consume, as the required
|
|
85
|
+
command modules have to be known before Commander parses */
|
|
86
|
+
const argv = process.argv.slice(2);
|
|
87
|
+
const consume = new Set();
|
|
88
|
+
for (const option of program.options) {
|
|
89
|
+
if (!(option.required || option.optional))
|
|
90
|
+
continue;
|
|
91
|
+
if (option.short !== undefined)
|
|
92
|
+
consume.add(option.short);
|
|
93
|
+
if (option.long !== undefined)
|
|
94
|
+
consume.add(option.long);
|
|
95
|
+
}
|
|
96
|
+
let name = "";
|
|
97
|
+
let version = false;
|
|
98
|
+
let i = 0;
|
|
99
|
+
while (i < argv.length) {
|
|
100
|
+
const arg = argv[i++];
|
|
101
|
+
if (!arg.startsWith("-")) {
|
|
102
|
+
name = arg;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
if (arg === "-V" || arg === "--version")
|
|
106
|
+
version = true;
|
|
107
|
+
else if (consume.has(arg))
|
|
108
|
+
i++;
|
|
109
|
+
}
|
|
110
|
+
const rest = argv.slice(i);
|
|
111
|
+
/* register a top-level command plus those of its sub-commands which
|
|
112
|
+
the command line actually addresses; when no sub-command matches
|
|
113
|
+
at all, all of them are registered, as only then Commander can
|
|
114
|
+
render the complete sub-command overview of a help or a typo */
|
|
115
|
+
const register = async (name, rest) => {
|
|
116
|
+
const parent = await commands[name](program);
|
|
117
|
+
const subs = subCommands[name];
|
|
118
|
+
if (subs === undefined || !(parent instanceof Command))
|
|
119
|
+
return;
|
|
120
|
+
const wanted = Object.keys(subs).filter((sub) => rest.includes(sub));
|
|
121
|
+
if (wanted.length > 0) {
|
|
122
|
+
for (const sub of wanted)
|
|
123
|
+
await subs[sub](parent);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
const own = new Set(parent.commands.map((command) => command.name()));
|
|
127
|
+
if (!rest.some((arg) => !arg.startsWith("-") && own.has(arg)))
|
|
128
|
+
for (const sub of Object.keys(subs))
|
|
129
|
+
await subs[sub](parent);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
/* register the addressed top-level command only; a bare "-V" is
|
|
133
|
+
answered by the program itself and hence needs no command module,
|
|
134
|
+
while an unknown command and any help request need all of them */
|
|
135
|
+
if (Object.hasOwn(commands, name))
|
|
136
|
+
await register(name, rest);
|
|
137
|
+
else if (!(name === "" && version))
|
|
138
|
+
for (const command of Object.keys(commands))
|
|
139
|
+
await register(command, rest);
|
|
67
140
|
/* parse program arguments */
|
|
68
141
|
await program.parseAsync(process.argv);
|
|
69
142
|
/* gracefully terminate */
|
|
@@ -72,6 +145,9 @@ const main = async () => {
|
|
|
72
145
|
};
|
|
73
146
|
main().catch(async (err) => {
|
|
74
147
|
if (err instanceof CommanderError) {
|
|
148
|
+
/* flush the help or version output of Commander to a pipe,
|
|
149
|
+
as "process.exit" would otherwise truncate it */
|
|
150
|
+
await writeStdout("");
|
|
75
151
|
await log.close();
|
|
76
152
|
process.exit(err.exitCode);
|
|
77
153
|
}
|