@stratusagent/cli 0.13.4 → 0.13.6
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/README.md +4 -2
- package/dist/commands/service.d.ts.map +1 -1
- package/dist/commands/service.js +8 -2
- package/dist/commands/service.js.map +1 -1
- package/dist/commands/sessions.d.ts +17 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +68 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +8 -1
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +21 -9
- package/dist/commands/update.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +1 -0
- package/dist/daemon.js.map +1 -1
- package/dist/environment.d.ts +2 -0
- package/dist/environment.d.ts.map +1 -1
- package/dist/help.d.ts +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +12 -4
- package/dist/help.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +4 -0
- package/dist/main.js.map +1 -1
- package/dist/npm.d.ts +1 -1
- package/dist/npm.js +1 -1
- package/dist/parse.d.ts +13 -2
- package/dist/parse.d.ts.map +1 -1
- package/dist/parse.js +72 -1
- package/dist/parse.js.map +1 -1
- package/dist/promotion.d.ts.map +1 -1
- package/dist/promotion.js +4 -3
- package/dist/promotion.js.map +1 -1
- package/dist/service.d.ts +11 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +129 -37
- package/dist/service.js.map +1 -1
- package/package.json +25 -25
package/README.md
CHANGED
|
@@ -51,6 +51,7 @@ stratus skill validate ./my-skill # check a skill against the spec without
|
|
|
51
51
|
stratus plugins # installed → enabled → granted → what approvals does with it
|
|
52
52
|
stratus restart # announced restart: refuse, drain, come back — what a plugin change needs
|
|
53
53
|
stratus health # is the running daemon serving? exit 0/1, for container and probe health checks
|
|
54
|
+
stratus sessions --status failed # what the daemon's sessions are doing, newest first (--agent, --limit, --format json)
|
|
54
55
|
stratus credentials # stored credential names (never values)
|
|
55
56
|
stratus signin set anthropic --agent remy # one agent's own Claude subscription, token asked without echo (also `signins`, `signin remove`)
|
|
56
57
|
stratus channel set imessage --agent blair apiKey # a channel plugin's secrets for one agent, asked without echo (also `channels`, `channel remove`)
|
|
@@ -86,11 +87,12 @@ Full reference with every subcommand:
|
|
|
86
87
|
| `--log-format` | `serve`: `text` (default) or `json` — the log's records as JSON lines on stdout, for `docker logs` and journald |
|
|
87
88
|
| `--no-api` | `serve`: do not serve the control API |
|
|
88
89
|
| `--api-host`, `--api-port` | `serve`: control API bind (default `127.0.0.1:4123`) |
|
|
89
|
-
| `--gateway <url>`, `--token` | `agents`, `skill reload`, `restart`, `session rollover`, `grants`, `health`: a running daemon's control API |
|
|
90
|
+
| `--gateway <url>`, `--token` | `agents`, `skill reload`, `restart`, `session rollover`, `sessions`, `grants`, `health`: a running daemon's control API |
|
|
90
91
|
| `--tool`, `--scope`, `--origin` | `grants revoke`: which grant goes — exactly one |
|
|
91
92
|
| `--trust <level>` | `memory list`: show only that label; `memory reassert`: the label to record (`user`, `agent`, `unknown`, `external`) |
|
|
92
93
|
| `--all-unknown` | `memory reassert`: every live fact with no recorded origin |
|
|
93
|
-
| `--limit <n>` | `memory search`: maximum hits |
|
|
94
|
+
| `--limit <n>` | `memory search`: maximum hits; `sessions`: how many to list (default 20) |
|
|
95
|
+
| `--status <status>` | `sessions`: only this state (`idle`, `running`, `pending_approval`, `completed`, `failed`) |
|
|
94
96
|
| `--file <path>`, `--preserve-trust` | `memory export` / `memory import`: the JSONL, and keeping each recorded label instead of landing entries `external` |
|
|
95
97
|
| `--agent <id>` | `credential set`/`remove`: that agent's own key rather than the fleet's shared one; `signin set`/`remove`: whose own sign-in it is; `channel set`/`remove`: whose binding it is |
|
|
96
98
|
| `--port`, `--host`, `--no-open` | `dashboard`: where a daemon it starts should bind; skip opening the browser |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/commands/service.ts"],"names":[],"mappings":"AASA,OAAO,EAOL,KAAK,kBAAkB,EACxB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD;;;;GAIG;AACH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,GACnC,KAAK,cAAc,EACnB,YAAY,kBAAkB,KAC7B,OAAO,CAAC,KAAK,GAAG,SAAS,CAO3B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,SAAS,oBAAoB,EAC7B,SAAS,UAAU,EACnB,MAAK,cAAmB,KACvB,OAAO,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/commands/service.ts"],"names":[],"mappings":"AASA,OAAO,EAOL,KAAK,kBAAkB,EACxB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD;;;;GAIG;AACH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,GACnC,KAAK,cAAc,EACnB,YAAY,kBAAkB,KAC7B,OAAO,CAAC,KAAK,GAAG,SAAS,CAO3B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,SAAS,oBAAoB,EAC7B,SAAS,UAAU,EACnB,MAAK,cAAmB,KACvB,OAAO,CAAC,MAAM,CA+GhB,CAAC"}
|
package/dist/commands/service.js
CHANGED
|
@@ -40,6 +40,9 @@ export const runService = async (command, streams, env = {}) => {
|
|
|
40
40
|
if (status.detail) {
|
|
41
41
|
writeLine(streams.stdout, ` note ${status.detail}`);
|
|
42
42
|
}
|
|
43
|
+
if (status.reason) {
|
|
44
|
+
writeLine(streams.stdout, ` reason ${status.reason}`);
|
|
45
|
+
}
|
|
43
46
|
if (status.installed) {
|
|
44
47
|
writeLine(streams.stdout, ` at login ${status.runAtLogin === undefined
|
|
45
48
|
? 'unknown — the service manager did not answer'
|
|
@@ -123,9 +126,12 @@ export const runService = async (command, streams, env = {}) => {
|
|
|
123
126
|
? startService(serviceEnv)
|
|
124
127
|
: stopService(serviceEnv);
|
|
125
128
|
const result = await action;
|
|
129
|
+
// An install or start the manager accepted still fails when the daemon
|
|
130
|
+
// is not running afterwards: the exit status is what a script checks.
|
|
131
|
+
const succeeded = result.ok && (!('running' in result) || result.running === true);
|
|
126
132
|
for (const message of result.messages) {
|
|
127
|
-
writeLine(
|
|
133
|
+
writeLine(succeeded ? streams.stdout : streams.stderr, message);
|
|
128
134
|
}
|
|
129
|
-
return
|
|
135
|
+
return succeeded ? 0 : 1;
|
|
130
136
|
};
|
|
131
137
|
//# sourceMappingURL=service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/commands/service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/commands/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CliStreams, CliEnvironment } from '../environment.ts';
|
|
2
|
+
import type { ParsedSessionsCommand } from '../parse.ts';
|
|
3
|
+
/** How many sessions a listing shows when no --limit is given. */
|
|
4
|
+
export declare const DEFAULT_SESSIONS_LIMIT = 20;
|
|
5
|
+
/**
|
|
6
|
+
* `stratus sessions` — what the running daemon's sessions are doing, newest
|
|
7
|
+
* first: running, waiting on an approval, failed, or done.
|
|
8
|
+
*
|
|
9
|
+
* A thin read of `GET /api/v1/sessions`, which filters by agent and cuts
|
|
10
|
+
* to a limit but knows nothing of status. So a status filter reads every
|
|
11
|
+
* row and filters here: cutting first would answer "no failed sessions"
|
|
12
|
+
* whenever the newest few happened to be running. Without one, the route
|
|
13
|
+
* does the cutting, asked for one row more than is shown so the listing
|
|
14
|
+
* can say there are more.
|
|
15
|
+
*/
|
|
16
|
+
export declare const runSessions: (command: ParsedSessionsCommand, streams: CliStreams, env?: CliEnvironment) => Promise<number>;
|
|
17
|
+
//# sourceMappingURL=sessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,kEAAkE;AAClE,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAWzC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,GACtB,SAAS,qBAAqB,EAC9B,SAAS,UAAU,EACnB,MAAK,cAAmB,KACvB,OAAO,CAAC,MAAM,CAqDhB,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { escapeControlCharacters } from '@stratusagent/core';
|
|
2
|
+
import { callRunningGateway, gatewayErrorMessage, noRunningDaemonMessage, runningGatewayBase, } from "../daemon.js";
|
|
3
|
+
import { writeLine } from "../io.js";
|
|
4
|
+
/** How many sessions a listing shows when no --limit is given. */
|
|
5
|
+
export const DEFAULT_SESSIONS_LIMIT = 20;
|
|
6
|
+
/**
|
|
7
|
+
* `stratus sessions` — what the running daemon's sessions are doing, newest
|
|
8
|
+
* first: running, waiting on an approval, failed, or done.
|
|
9
|
+
*
|
|
10
|
+
* A thin read of `GET /api/v1/sessions`, which filters by agent and cuts
|
|
11
|
+
* to a limit but knows nothing of status. So a status filter reads every
|
|
12
|
+
* row and filters here: cutting first would answer "no failed sessions"
|
|
13
|
+
* whenever the newest few happened to be running. Without one, the route
|
|
14
|
+
* does the cutting, asked for one row more than is shown so the listing
|
|
15
|
+
* can say there are more.
|
|
16
|
+
*/
|
|
17
|
+
export const runSessions = async (command, streams, env = {}) => {
|
|
18
|
+
const base = await runningGatewayBase(env, command);
|
|
19
|
+
if (!base) {
|
|
20
|
+
writeLine(streams.stderr, `Error: ${noRunningDaemonMessage(env)}`);
|
|
21
|
+
return 1;
|
|
22
|
+
}
|
|
23
|
+
const limit = command.limit ?? DEFAULT_SESSIONS_LIMIT;
|
|
24
|
+
const query = new URLSearchParams();
|
|
25
|
+
if (command.agentId !== undefined) {
|
|
26
|
+
query.set('agent', command.agentId);
|
|
27
|
+
}
|
|
28
|
+
if (command.status === undefined) {
|
|
29
|
+
query.set('limit', String(limit + 1));
|
|
30
|
+
}
|
|
31
|
+
const search = query.toString();
|
|
32
|
+
let rows;
|
|
33
|
+
try {
|
|
34
|
+
const response = await callRunningGateway(env, command, base, `/api/v1/sessions${search ? `?${search}` : ''}`, undefined, 'GET');
|
|
35
|
+
if (!response.ok) {
|
|
36
|
+
writeLine(streams.stderr, `Error: ${await gatewayErrorMessage(response)}`);
|
|
37
|
+
return 1;
|
|
38
|
+
}
|
|
39
|
+
rows = (await response.json()).sessions ?? [];
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
writeLine(streams.stderr, `Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
43
|
+
return 1;
|
|
44
|
+
}
|
|
45
|
+
const matching = command.status === undefined ? rows : rows.filter((row) => row.status === command.status);
|
|
46
|
+
const shown = matching.slice(0, limit);
|
|
47
|
+
const more = matching.length > limit;
|
|
48
|
+
if (command.format === 'json') {
|
|
49
|
+
writeLine(streams.stdout, JSON.stringify({ sessions: shown, more }));
|
|
50
|
+
return 0;
|
|
51
|
+
}
|
|
52
|
+
if (shown.length === 0) {
|
|
53
|
+
writeLine(streams.stdout, command.status === undefined ? 'No sessions.' : `No ${command.status} sessions.`);
|
|
54
|
+
return 0;
|
|
55
|
+
}
|
|
56
|
+
// Escaped like `stratus memory list`: an id is whatever a channel or an
|
|
57
|
+
// API caller named the session, and this goes to a terminal.
|
|
58
|
+
const lines = shown.map((row) => [row.status, row.agentId, row.updatedAt ?? '-', row.id].map(escapeControlCharacters));
|
|
59
|
+
const widths = [0, 1, 2].map((column) => Math.max(...lines.map((cells) => cells[column]?.length ?? 0)));
|
|
60
|
+
for (const cells of lines) {
|
|
61
|
+
writeLine(streams.stdout, cells.map((cell, column) => (column < 3 ? cell.padEnd(widths[column] ?? 0) : cell)).join(' '));
|
|
62
|
+
}
|
|
63
|
+
if (more) {
|
|
64
|
+
writeLine(streams.stdout, `Showing the newest ${limit}. --limit <n> shows more.`);
|
|
65
|
+
}
|
|
66
|
+
return 0;
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAwEA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAiB,MAAM,mBAAmB,CAAC;AAInF,OAAO,KAAK,EAAmB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAYvE,eAAO,MAAM,oBAAoB,QAKrB,CAAC;AAkFb,eAAO,MAAM,QAAQ,GACnB,SAAS,kBAAkB,EAC3B,SAAS,UAAU,EACnB,MAAK,cAAmB,KACvB,OAAO,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAwEA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAiB,MAAM,mBAAmB,CAAC;AAInF,OAAO,KAAK,EAAmB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAYvE,eAAO,MAAM,oBAAoB,QAKrB,CAAC;AAkFb,eAAO,MAAM,QAAQ,GACnB,SAAS,kBAAkB,EAC3B,SAAS,UAAU,EACnB,MAAK,cAAmB,KACvB,OAAO,CAAC,MAAM,CAq/FhB,CAAC"}
|
package/dist/commands/setup.js
CHANGED
|
@@ -2676,13 +2676,20 @@ export const runSetup = async (command, streams, env = {}) => {
|
|
|
2676
2676
|
ok: false,
|
|
2677
2677
|
messages: [`Could not install the always-on service: ${error instanceof Error ? error.message : String(error)}`],
|
|
2678
2678
|
}));
|
|
2679
|
+
// Installed but not running is a failed step too: the always-on
|
|
2680
|
+
// service is the part of setup that is meant to be answering.
|
|
2681
|
+
const running = !('running' in result) || result.running === true;
|
|
2679
2682
|
for (const message of result.messages) {
|
|
2680
|
-
writeLine(result.ok ? streams.stdout : streams.stderr, message);
|
|
2683
|
+
writeLine(result.ok && running ? streams.stdout : streams.stderr, message);
|
|
2681
2684
|
}
|
|
2682
2685
|
if (!result.ok) {
|
|
2683
2686
|
writeLine(streams.stderr, `Setup is saved either way — start the daemon yourself with \`${serveCommand()}\`.`);
|
|
2684
2687
|
serviceStepFailed = true;
|
|
2685
2688
|
}
|
|
2689
|
+
else if (!running) {
|
|
2690
|
+
writeLine(streams.stderr, 'Setup is saved either way. Check `stratus service status` once you have looked at the logs.');
|
|
2691
|
+
serviceStepFailed = true;
|
|
2692
|
+
}
|
|
2686
2693
|
}
|
|
2687
2694
|
writeLine(streams.stdout);
|
|
2688
2695
|
// Exported STRATUS_* variables outrank the config file, so warn when one
|