@rse/ase 2.0.0 → 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-config-schema.js +7 -1
- package/dst/ase-lib-version.js +8 -4
- package/dst/ase-service.js +19 -6
- package/dst/man/ase-agent-adhoc.1 +1 -1
- package/dst/man/ase-agent-condenser.1 +1 -1
- package/dst/man/ase-agent-editor.1 +1 -1
- package/dst/man/ase-agent-estimator.1 +1 -1
- package/dst/man/ase-agent-fleet.1 +1 -1
- package/dst/man/ase-agent-implementer.1 +1 -1
- package/dst/man/ase-agent-integrator.1 +1 -1
- package/dst/man/ase-agent-qualifier.1 +1 -1
- package/dst/man/ase-agent-rebooter.1 +1 -1
- package/dst/man/ase-agent-relay.1 +1 -1
- package/dst/man/ase-agent-researcher.1 +1 -1
- package/dst/man/ase-agent.1 +1 -1
- package/dst/man/ase-artifact-list.1 +1 -1
- package/dst/man/ase-artifact-name.1 +1 -1
- package/dst/man/ase-artifact.1 +1 -1
- package/dst/man/ase-config-delete.1 +1 -1
- package/dst/man/ase-config-edit.1 +1 -1
- package/dst/man/ase-config-get.1 +1 -1
- package/dst/man/ase-config-init.1 +1 -1
- package/dst/man/ase-config-list.1 +1 -1
- package/dst/man/ase-config-set.1 +1 -1
- package/dst/man/ase-config.1 +7 -1
- package/dst/man/ase-hook-permission-request.1 +1 -1
- package/dst/man/ase-hook-pre-tool-use.1 +1 -1
- package/dst/man/ase-hook-session-end.1 +1 -1
- package/dst/man/ase-hook-session-persona.1 +1 -1
- package/dst/man/ase-hook-session-start.1 +1 -1
- package/dst/man/ase-hook-stop.1 +1 -1
- package/dst/man/ase-hook-user-prompt-submit.1 +1 -1
- package/dst/man/ase-hook.1 +1 -1
- package/dst/man/ase-man.1 +1 -1
- package/dst/man/ase-mcp.1 +1 -1
- package/dst/man/ase-service-log.1 +1 -1
- package/dst/man/ase-service-send.1 +1 -1
- package/dst/man/ase-service-start.1 +4 -4
- package/dst/man/ase-service-status.1 +1 -1
- package/dst/man/ase-service-stop.1 +1 -1
- package/dst/man/ase-service.1 +2 -2
- package/dst/man/ase-setup-disable.1 +1 -1
- package/dst/man/ase-setup-enable.1 +1 -1
- package/dst/man/ase-setup-install.1 +1 -1
- package/dst/man/ase-setup-mcp.1 +1 -1
- package/dst/man/ase-setup-status.1 +1 -1
- package/dst/man/ase-setup-statusline.1 +1 -1
- package/dst/man/ase-setup-telemetry.1 +1 -1
- package/dst/man/ase-setup-uninstall.1 +1 -1
- package/dst/man/ase-setup-update.1 +1 -1
- package/dst/man/ase-setup.1 +1 -1
- package/dst/man/ase-spec-export.1 +1 -1
- package/dst/man/ase-spec-lint.1 +1 -1
- package/dst/man/ase-spec-preview.1 +1 -1
- package/dst/man/ase-spec.1 +1 -1
- package/dst/man/ase-statusline.1 +1 -1
- package/dst/man/ase-task-assign.1 +1 -1
- package/dst/man/ase-task-board.1 +1 -1
- package/dst/man/ase-task-delete.1 +1 -1
- package/dst/man/ase-task-edit.1 +1 -1
- package/dst/man/ase-task-idscheme.1 +1 -1
- package/dst/man/ase-task-lifecycle.1 +1 -1
- package/dst/man/ase-task-list.1 +1 -1
- package/dst/man/ase-task-load.1 +1 -1
- package/dst/man/ase-task-newid.1 +1 -1
- package/dst/man/ase-task-purge.1 +1 -1
- package/dst/man/ase-task-rename.1 +1 -1
- package/dst/man/ase-task-request.1 +1 -1
- package/dst/man/ase-task-save.1 +1 -1
- package/dst/man/ase-task-status.1 +1 -1
- package/dst/man/ase-task-store.1 +1 -1
- package/dst/man/ase-task-view.1 +1 -1
- package/dst/man/ase-task.1 +1 -1
- package/dst/man/ase-util-compat.1 +1 -1
- package/dst/man/ase-util-diagram.1 +1 -1
- package/dst/man/ase-util-meta.1 +1 -1
- package/dst/man/ase-util-metric.1 +1 -1
- package/dst/man/ase-util-mint.1 +1 -1
- package/dst/man/ase-util-worktree.1 +1 -1
- package/dst/man/ase-util.1 +1 -1
- package/dst/man/ase.1 +1 -1
- package/package.json +3 -1
- 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/dst/ase-config-schema.js
CHANGED
|
@@ -114,6 +114,7 @@ export const configWritableScopes = {
|
|
|
114
114
|
"project.relay.token": ["user"],
|
|
115
115
|
"project.relay.crt": ["user", "project"],
|
|
116
116
|
"project.relay.key": ["user", "project"],
|
|
117
|
+
"project.service.port": ["project"],
|
|
117
118
|
"project.artifact.spec.basedir": ["user", "project"],
|
|
118
119
|
"project.artifact.spec.files": ["user", "project"],
|
|
119
120
|
"project.artifact.spec.schema": ["user", "project"],
|
|
@@ -255,6 +256,8 @@ const flowSchema = (forms) => v.optional(v.pipe(v.string(), v.check((value) => {
|
|
|
255
256
|
const minutesSchema = v.optional(v.pipe(v.union([v.number(), v.string()]), v.check((s) => /^\d+(?:\.\d+)?$/.test(String(s)) && Number(s) > 0, "expected a positive number of minutes")));
|
|
256
257
|
/* schema for a multiplier of the effort estimation */
|
|
257
258
|
const multiplierSchema = v.optional(v.pipe(v.union([v.number(), v.string()]), v.check((s) => /^\d+(?:\.\d+)?$/.test(String(s)) && Number(s) >= 1, "expected a multiplier of at least 1")));
|
|
259
|
+
/* schema for an unprivileged TCP port number */
|
|
260
|
+
const portSchema = v.optional(v.pipe(v.union([v.number(), v.string()]), v.check((s) => /^\d+$/.test(String(s)) && Number(s) >= 1024 && Number(s) <= 65535, "expected a port number (1024-65535)")));
|
|
258
261
|
/* schema for ".ase/config.yaml" */
|
|
259
262
|
export const configSchema = v.nullish(v.strictObject({
|
|
260
263
|
project: v.optional(v.strictObject({
|
|
@@ -290,6 +293,9 @@ export const configSchema = v.nullish(v.strictObject({
|
|
|
290
293
|
crt: v.optional(v.pipe(v.string(), v.minLength(1))),
|
|
291
294
|
key: v.optional(v.pipe(v.string(), v.minLength(1)))
|
|
292
295
|
})),
|
|
296
|
+
service: v.optional(v.strictObject({
|
|
297
|
+
port: portSchema
|
|
298
|
+
})),
|
|
293
299
|
artifact: v.optional(v.strictObject({
|
|
294
300
|
spec: artifactSpecSchema,
|
|
295
301
|
code: artifactSchema,
|
|
@@ -305,7 +311,7 @@ export const configSchema = v.nullish(v.strictObject({
|
|
|
305
311
|
enabled: v.optional(v.union([v.boolean(), v.picklist(["true", "false"])])),
|
|
306
312
|
implicit: v.optional(v.union([v.boolean(), v.picklist(["true", "false"])])),
|
|
307
313
|
service: v.optional(v.strictObject({
|
|
308
|
-
port:
|
|
314
|
+
port: portSchema,
|
|
309
315
|
token: v.optional(v.pipe(v.string(), v.minLength(1))),
|
|
310
316
|
interval: v.optional(v.pipe(v.union([v.number(), v.string()]), v.check((s) => /^\d+$/.test(String(s)), "expected a number of minutes (0 disables)"))),
|
|
311
317
|
idle: v.optional(v.pipe(v.union([v.number(), v.string()]), v.check((s) => /^\d+$/.test(String(s)), "expected a number of minutes (0 disables)")))
|
package/dst/ase-lib-version.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
** Licensed under Apache 2.0 <https://spdx.org/licenses/Apache-2.0>
|
|
5
5
|
*/
|
|
6
6
|
import updateNotifier from "update-notifier";
|
|
7
|
+
import semver from "semver";
|
|
7
8
|
import pkg from "../package.json" with { type: "json" };
|
|
8
9
|
/* determination of current and available ASE versions */
|
|
9
10
|
export default class Version {
|
|
@@ -18,9 +19,12 @@ export default class Version {
|
|
|
18
19
|
pkg,
|
|
19
20
|
updateCheckInterval: 1000 * 60 * 60
|
|
20
21
|
});
|
|
21
|
-
/* re-persist the cached update information, as update-notifier consumes it on read
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
/* re-persist the cached update information, as update-notifier consumes it on read,
|
|
23
|
+
but only while it still denotes a newer version (it is never cleared otherwise) */
|
|
24
|
+
const latest = notifier.update?.latest;
|
|
25
|
+
if (latest === undefined || !semver.valid(latest) || !semver.gt(latest, Version.current()))
|
|
26
|
+
return Version.current();
|
|
27
|
+
notifier.config?.set("update", notifier.update);
|
|
28
|
+
return latest;
|
|
25
29
|
}
|
|
26
30
|
}
|
package/dst/ase-service.js
CHANGED
|
@@ -86,7 +86,7 @@ const LOG_MAX_SIZE = 1024 * 1024;
|
|
|
86
86
|
const LOG_KEEP_LINES = 2000;
|
|
87
87
|
const LOG_ARGS_MAX = 200;
|
|
88
88
|
/* load the optional "config.yaml" and "service.yaml" files and derive
|
|
89
|
-
the service identity context (project id, port, service config) */
|
|
89
|
+
the service identity context (project id, port, preferred port, service config) */
|
|
90
90
|
export const loadServiceContext = (log) => {
|
|
91
91
|
/* load files */
|
|
92
92
|
const cfg = new Config("config", configSchema, log);
|
|
@@ -97,10 +97,13 @@ export const loadServiceContext = (log) => {
|
|
|
97
97
|
const projectId = cfg.get("project.id") || Task.projectIdOf(Task.projectRoot());
|
|
98
98
|
/* determine service port */
|
|
99
99
|
const port = svc.get("port") ?? null;
|
|
100
|
+
/* determine preferred service port */
|
|
101
|
+
const pref = cfg.get("project.service.port");
|
|
102
|
+
const portPref = pref !== null && pref !== undefined ? Number(pref) : null;
|
|
100
103
|
/* determine path to ".ase" directory */
|
|
101
104
|
const aseDir = path.dirname(svc.filename);
|
|
102
105
|
/* return context information */
|
|
103
|
-
return { projectId, port, svc, aseDir };
|
|
106
|
+
return { projectId, port, portPref, svc, aseDir };
|
|
104
107
|
};
|
|
105
108
|
/* reusable functionality: port allocation, persistence, and process spawning */
|
|
106
109
|
export class Service {
|
|
@@ -117,8 +120,11 @@ export class Service {
|
|
|
117
120
|
s.listen(port, HOST);
|
|
118
121
|
});
|
|
119
122
|
}
|
|
120
|
-
/* allocate
|
|
121
|
-
|
|
123
|
+
/* allocate the preferred port, if given and available,
|
|
124
|
+
else a fresh random port in PORT_MIN..PORT_MAX */
|
|
125
|
+
static async allocatePort(pref = null) {
|
|
126
|
+
if (pref !== null && await Service.tryBind(pref))
|
|
127
|
+
return pref;
|
|
122
128
|
for (let i = 0; i < PORT_TRIES; i++) {
|
|
123
129
|
const p = PORT_MIN + Math.floor(Math.random() * (PORT_MAX - PORT_MIN + 1));
|
|
124
130
|
if (await Service.tryBind(p))
|
|
@@ -588,6 +594,13 @@ export default class ServiceCommand {
|
|
|
588
594
|
}
|
|
589
595
|
}, TICK_MS).unref();
|
|
590
596
|
}
|
|
597
|
+
/* allocate the service port, preferring the configured one, else falling back to a random one */
|
|
598
|
+
async allocatePort(ctx) {
|
|
599
|
+
const port = await Service.allocatePort(ctx.portPref);
|
|
600
|
+
if (ctx.portPref !== null && port !== ctx.portPref)
|
|
601
|
+
this.log.write("warning", `service: preferred port ${ctx.portPref} unavailable, falling back to port ${port}`);
|
|
602
|
+
return port;
|
|
603
|
+
}
|
|
591
604
|
/* start flow: ensure port, probe, optionally detach (or run in the foreground) */
|
|
592
605
|
async doStart(opts = {}) {
|
|
593
606
|
const ctx = this.loadContext();
|
|
@@ -614,7 +627,7 @@ export default class ServiceCommand {
|
|
|
614
627
|
}
|
|
615
628
|
/* run the service in the foreground, logging to the terminal and without idle timeout */
|
|
616
629
|
if (opts.foreground) {
|
|
617
|
-
port = await
|
|
630
|
+
port = await this.allocatePort(ctx);
|
|
618
631
|
await this.runService({ ...ctx, port }, true);
|
|
619
632
|
return await new Promise(() => { });
|
|
620
633
|
}
|
|
@@ -622,7 +635,7 @@ export default class ServiceCommand {
|
|
|
622
635
|
re-allocate, re-spawn; early-break on foreign listener */
|
|
623
636
|
let lastErr = new Error("service failed to start within timeout");
|
|
624
637
|
for (let attempt = 0; attempt < 3; attempt++) {
|
|
625
|
-
port = await
|
|
638
|
+
port = await this.allocatePort(ctx);
|
|
626
639
|
const { child, logFile } = Service.spawnDetached(ctx.aseDir, port, this.log.logLevel());
|
|
627
640
|
let exited = false;
|
|
628
641
|
let exitCode = null;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-AGENT-ADHOC" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-AGENT-ADHOC" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-agent-adhoc\fR - Run an Ad-Hoc Agent of a Definition Given by Options
|
|
4
4
|
.SH "SYNOPSIS"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-AGENT-IMPLEMENTER" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-AGENT-IMPLEMENTER" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-agent-implementer\fR - Implementation Phase Agent
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-agent.1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-ARTIFACT-LIST" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-ARTIFACT-LIST" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-artifact-list\fR - Resolve Artifact Kinds to Project-Relative File Paths
|
|
4
4
|
.SH "SYNOPSIS"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-ARTIFACT-NAME" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-ARTIFACT-NAME" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-artifact-name\fR - Resolve a Filename within an Artifact Kind
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-artifact.1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-CONFIG-EDIT" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-CONFIG-EDIT" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-config-edit\fR - Edit the Configuration File with an Editor
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-config-get.1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-CONFIG-INIT" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-CONFIG-INIT" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-config-init\fR - Initialize Configuration with Preset Values
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-config-set.1
CHANGED
package/dst/man/ase-config.1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-CONFIG" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-CONFIG" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-config\fR - Manage the Layered ASE Configuration
|
|
4
4
|
.SH "SYNOPSIS"
|
|
@@ -120,6 +120,12 @@ list\fR.
|
|
|
120
120
|
\fBproject.relay.crt\fR, \fBproject.relay.key\fR (\fIstring\fR): The PEM certificate (chain) and private key files of the agent relay server, relative to the directory of the configuration file defining them.
|
|
121
121
|
.RE 0
|
|
122
122
|
.P
|
|
123
|
+
Per-project service:
|
|
124
|
+
.RS 0
|
|
125
|
+
.IP \(bu 4
|
|
126
|
+
\fBproject.service.port\fR (\fIport\fR \fB1024\fR..\fB65535\fR, \fBproject\fR scope only): The preferred port of the per-project background service on \fB127.0.0.1\fR, falling back to a random port out of the range \fB42000\fR..\fB44000\fR if unavailable (default: none). See \fBase-service-start\fR(1).
|
|
127
|
+
.RE 0
|
|
128
|
+
.P
|
|
123
129
|
Project artifacts (all writable on the \fBuser\fR and \fBproject\fR scopes only), each kind defined by a \fBbasedir\fR directory (relative to the project root, empty for the root itself) and a whitespace-separated \fBfiles\fR glob specification (relative to \fBbasedir\fR, with \fB!\fR negating a glob). See \fBase-artifact\fR(1):
|
|
124
130
|
.RS 0
|
|
125
131
|
.IP \(bu 4
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-HOOK-PERMISSION-REQUEST" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-HOOK-PERMISSION-REQUEST" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-hook-permission-request\fR - Handle the PermissionRequest Hook Event
|
|
4
4
|
.SH "SYNOPSIS"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-HOOK-PRE-TOOL-USE" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-HOOK-PRE-TOOL-USE" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-hook-pre-tool-use\fR - Handle the PreToolUse Hook Event
|
|
4
4
|
.SH "SYNOPSIS"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-HOOK-SESSION-END" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-HOOK-SESSION-END" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-hook-session-end\fR - Handle the SessionEnd Hook Event
|
|
4
4
|
.SH "SYNOPSIS"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-HOOK-SESSION-PERSONA" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-HOOK-SESSION-PERSONA" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-hook-session-persona\fR - Handle the SessionStart Hook Event for the Persona
|
|
4
4
|
.SH "SYNOPSIS"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-HOOK-SESSION-START" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-HOOK-SESSION-START" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-hook-session-start\fR - Handle the SessionStart Hook Event
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-hook-stop.1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-HOOK-USER-PROMPT-SUBMIT" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-HOOK-USER-PROMPT-SUBMIT" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-hook-user-prompt-submit\fR - Handle the UserPromptSubmit Hook Event
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-hook.1
CHANGED
package/dst/man/ase-man.1
CHANGED
package/dst/man/ase-mcp.1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-SERVICE-SEND" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-SERVICE-SEND" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-service-send\fR - Send a Command to the Background Service
|
|
4
4
|
.SH "SYNOPSIS"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-SERVICE-START" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-SERVICE-START" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-service-start\fR - Start the Per-Project Background Service
|
|
4
4
|
.SH "SYNOPSIS"
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
\fBase service start\fR starts the per-project background HTTP service of \fIASE\fR (see \fBase-service\fR(1)) for the project of the current working directory.
|
|
10
10
|
.P
|
|
11
11
|
If a service of this project already answers on the port persisted in \fB.ase/service.yaml\fR, the command just reports \fBservice: already running
|
|
12
|
-
on port\fR \fIport\fR and exits with status \fB0\fR. Otherwise, it allocates a fresh random free port out of the range \fB42000\fR..\fB44000\fR (trying up to 20 candidates), spawns the service as a detached background process (with its standard output and standard error appended to \fB.ase/service.log\fR, trimmed to its last 2000 lines beforehand if larger than 1 MB), and probes its readiness for up to 5 seconds.
|
|
12
|
+
on port\fR \fIport\fR and exits with status \fB0\fR. Otherwise, it allocates the preferred port \fBproject.service.port\fR (see \fBase-config\fR(1)), if configured and free, else (with a warning, if configured) a fresh random free port out of the range \fB42000\fR..\fB44000\fR (trying up to 20 candidates), spawns the service as a detached background process (with its standard output and standard error appended to \fB.ase/service.log\fR, trimmed to its last 2000 lines beforehand if larger than 1 MB), and probes its readiness for up to 5 seconds.
|
|
13
13
|
.P
|
|
14
14
|
Once ready, the service persists its port into \fB.ase/service.yaml\fR, and the command reports \fBservice: started on port\fR \fIport\fR. If the spawned service exits during its startup, does not become ready in time, or loses its port to a foreign listener, the attempt is aborted (killing the process) and retried with a new port, up to three attempts in total, after which the command fails with the reason and the last 20 lines of the log.
|
|
15
15
|
.P
|
|
@@ -21,7 +21,7 @@ Usually, the service does not have to be started explicitly, as the MCP bridge \
|
|
|
21
21
|
.IP \(bu 4
|
|
22
22
|
\[lB]\fB-h\fR|\fB--help\fR\[rB]: Show usage information and exit.
|
|
23
23
|
.IP \(bu 4
|
|
24
|
-
\[lB]\fB-f\fR|\fB--foreground\fR\[rB]: Run the service in the current process instead, on a
|
|
24
|
+
\[lB]\fB-f\fR|\fB--foreground\fR\[rB]: Run the service in the current process instead, on a port allocated as above, logging to the terminal (resp. the global \fB--log-file\fR) instead of \fB.ase/service.log\fR and without the idle timeout, until it is interrupted (via \fBSIGINT\fR, e.g., \fBCTRL+C\fR, \fBSIGTERM\fR, \fBSIGHUP\fR, or \fBSIGQUIT\fR) or stopped via \fBase service stop\fR. A service of this project already running is an error in this mode.
|
|
25
25
|
.RE 0
|
|
26
26
|
.SH "FILES"
|
|
27
27
|
.RS 0
|
|
@@ -48,7 +48,7 @@ $ ase --log-level debug service start --foreground
|
|
|
48
48
|
.RE
|
|
49
49
|
.SH "SEE ALSO"
|
|
50
50
|
.P
|
|
51
|
-
\fBase\fR(1), \fBase-service\fR(1), \fBase-service-status\fR(1), \fBase-service-stop\fR(1), \fBase-service-log\fR(1).
|
|
51
|
+
\fBase\fR(1), \fBase-service\fR(1), \fBase-service-status\fR(1), \fBase-service-stop\fR(1), \fBase-service-log\fR(1), \fBase-config\fR(1).
|
|
52
52
|
.SH "AUTHOR"
|
|
53
53
|
.P
|
|
54
54
|
Dr. Ralf S. Engelschall \fI\(larse@engelschall.com\(ra\fR
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-SERVICE-STATUS" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-SERVICE-STATUS" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-service-status\fR - Report Whether the Background Service Is Running
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-service.1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-SERVICE" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-SERVICE" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-service\fR - Manage the Per-Project Background Service
|
|
4
4
|
.SH "SYNOPSIS"
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
\fBase service stop\fR
|
|
17
17
|
.SH "DESCRIPTION"
|
|
18
18
|
.P
|
|
19
|
-
\fBase service\fR manages the per-project background HTTP service of \fIASE\fR. The service is bound to \fB127.0.0.1\fR on a random port out of the range \fB42000\fR..\fB44000\fR, which is persisted in \fB.ase/service.yaml\fR of the project, and logs into \fB.ase/service.log\fR. It is identified by the id of the project (\fBproject.id\fR, else derived from the project root), so a port answered by the service of another project counts as a \fIforeign\fR service.
|
|
19
|
+
\fBase service\fR manages the per-project background HTTP service of \fIASE\fR. The service is bound to \fB127.0.0.1\fR on the preferred port \fBproject.service.port\fR, if configured and available, else on a random port out of the range \fB42000\fR..\fB44000\fR, which is persisted in \fB.ase/service.yaml\fR of the project, and logs into \fB.ase/service.log\fR. It is identified by the id of the project (\fBproject.id\fR, else derived from the project root), so a port answered by the service of another project counts as a \fIforeign\fR service.
|
|
20
20
|
.P
|
|
21
21
|
The service provides:
|
|
22
22
|
.RS 0
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-SETUP-DISABLE" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-SETUP-DISABLE" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-setup-disable\fR - Disable the ASE Plugin in an Agent Tool
|
|
4
4
|
.SH "SYNOPSIS"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-SETUP-INSTALL" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-SETUP-INSTALL" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-setup-install\fR - Install the ASE Plugin into an Agent Tool
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-setup-mcp.1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-SETUP-STATUS" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-SETUP-STATUS" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-setup-status\fR - Report the ASE Registrations of an Agent Tool
|
|
4
4
|
.SH "SYNOPSIS"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-SETUP-STATUSLINE" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-SETUP-STATUSLINE" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-setup-statusline\fR - Activate or Deactivate the ASE Statusline
|
|
4
4
|
.SH "SYNOPSIS"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-SETUP-TELEMETRY" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-SETUP-TELEMETRY" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-setup-telemetry\fR - Activate or Deactivate the ASE Telemetry Export
|
|
4
4
|
.SH "SYNOPSIS"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-SETUP-UNINSTALL" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-SETUP-UNINSTALL" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-setup-uninstall\fR - Uninstall the ASE Plugin and Tool
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-setup.1
CHANGED
package/dst/man/ase-spec-lint.1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-SPEC-PREVIEW" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-SPEC-PREVIEW" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-spec-preview\fR - Serve a Live Preview of the Project Specification
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-spec.1
CHANGED
package/dst/man/ase-statusline.1
CHANGED
package/dst/man/ase-task-board.1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-TASK-BOARD" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-TASK-BOARD" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-task-board\fR - Show the interactive task board of the project
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-task-edit.1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-TASK-LIFECYCLE" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-TASK-LIFECYCLE" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-task-lifecycle\fR - Get or Set the Task Lifecycle Model
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-task-list.1
CHANGED
package/dst/man/ase-task-load.1
CHANGED
package/dst/man/ase-task-newid.1
CHANGED
package/dst/man/ase-task-purge.1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-TASK-REQUEST" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-TASK-REQUEST" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-task-request\fR - Request the Processing of a Task by a Prompt
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-task-save.1
CHANGED
package/dst/man/ase-task-store.1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-TASK-STORE" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-TASK-STORE" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-task-store\fR - Manage the per-user task store REST API server
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-task-view.1
CHANGED
package/dst/man/ase-task.1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-UTIL-COMPAT" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-UTIL-COMPAT" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-util-compat\fR - Output Expected Probe Values of the Compatibility Self-Test
|
|
4
4
|
.SH "SYNOPSIS"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-UTIL-DIAGRAM" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-UTIL-DIAGRAM" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-util-diagram\fR - Render Mermaid or D2 Diagrams as Unicode/ASCII Art or SVG
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-util-meta.1
CHANGED
package/dst/man/ase-util-mint.1
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.TH "ASE-UTIL-WORKTREE" "1" "October 2026" "2.0.
|
|
1
|
+
.TH "ASE-UTIL-WORKTREE" "1" "October 2026" "2.0.1" "Agentic Software Engineering (ASE)"
|
|
2
2
|
.SH "NAME"
|
|
3
3
|
\fBase-util-worktree\fR - Resolve the ASE Worktree Directories
|
|
4
4
|
.SH "SYNOPSIS"
|
package/dst/man/ase-util.1
CHANGED
package/dst/man/ase.1
CHANGED
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"homepage": "https://ase.tools",
|
|
7
7
|
"repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
|
|
8
8
|
"bugs": { "url": "https://github.com/rse/ase/issues" },
|
|
9
|
-
"version": "2.0.
|
|
9
|
+
"version": "2.0.1",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"author": {
|
|
12
12
|
"name": "Dr. Ralf S. Engelschall",
|
|
@@ -62,6 +62,7 @@
|
|
|
62
62
|
"@types/luxon": "3.7.6",
|
|
63
63
|
"@types/which": "3.0.4",
|
|
64
64
|
"@types/update-notifier": "6.0.8",
|
|
65
|
+
"@types/semver": "7.8.0",
|
|
65
66
|
"@types/shell-quote": "1.7.5",
|
|
66
67
|
"@types/proper-lockfile": "4.1.4",
|
|
67
68
|
"@types/write-file-atomic": "4.0.3",
|
|
@@ -97,6 +98,7 @@
|
|
|
97
98
|
"zod": "4.6.7",
|
|
98
99
|
"which": "7.0.0",
|
|
99
100
|
"update-notifier": "7.3.1",
|
|
101
|
+
"semver": "7.8.5",
|
|
100
102
|
"shell-quote": "1.12.0",
|
|
101
103
|
"get-stdin": "10.0.0",
|
|
102
104
|
"proper-lockfile": "4.1.2",
|