@stratusagent/cli 0.13.7 → 0.14.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/README.md +3 -1
- package/dist/bin.js +8 -1
- package/dist/bin.js.map +1 -1
- package/dist/commands/channel.d.ts +2 -1
- package/dist/commands/channel.d.ts.map +1 -1
- package/dist/commands/channel.js +22 -3
- package/dist/commands/channel.js.map +1 -1
- package/dist/commands/credential.d.ts +1 -1
- package/dist/commands/credential.d.ts.map +1 -1
- package/dist/commands/credential.js +59 -10
- package/dist/commands/credential.js.map +1 -1
- package/dist/commands/dashboard.d.ts.map +1 -1
- package/dist/commands/dashboard.js +2 -27
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/events.d.ts +14 -0
- package/dist/commands/events.d.ts.map +1 -0
- package/dist/commands/events.js +94 -0
- package/dist/commands/events.js.map +1 -0
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +8 -3
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/schedules.d.ts.map +1 -1
- package/dist/commands/schedules.js +6 -1
- package/dist/commands/schedules.js.map +1 -1
- package/dist/commands/serve.d.ts +10 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +81 -28
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/sessions.d.ts +1 -1
- package/dist/commands/sessions.d.ts.map +1 -1
- package/dist/commands/sessions.js +12 -2
- package/dist/commands/sessions.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +37 -7
- package/dist/commands/setup.js.map +1 -1
- package/dist/daemon.d.ts +22 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +54 -0
- package/dist/daemon.js.map +1 -1
- package/dist/environment.d.ts +7 -0
- package/dist/environment.d.ts.map +1 -1
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +5 -0
- package/dist/events.js.map +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +28 -8
- 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/io.d.ts +24 -0
- package/dist/io.d.ts.map +1 -1
- package/dist/io.js +29 -0
- package/dist/io.js.map +1 -1
- package/dist/loaders.d.ts +7 -0
- package/dist/loaders.d.ts.map +1 -1
- package/dist/loaders.js +17 -9
- package/dist/loaders.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +5 -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 +30 -4
- package/dist/parse.d.ts.map +1 -1
- package/dist/parse.js +51 -8
- package/dist/parse.js.map +1 -1
- package/dist/plugin-catalog.d.ts.map +1 -1
- package/dist/plugin-catalog.js +1 -0
- package/dist/plugin-catalog.js.map +1 -1
- package/dist/provider-packages.d.ts +8 -0
- package/dist/provider-packages.d.ts.map +1 -1
- package/dist/provider-packages.js +10 -1
- package/dist/provider-packages.js.map +1 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +67 -1
- package/dist/service.js.map +1 -1
- package/dist/supervisor.d.ts.map +1 -1
- package/dist/supervisor.js +1 -0
- package/dist/supervisor.js.map +1 -1
- package/dist/trusted-config.d.ts +8 -1
- package/dist/trusted-config.d.ts.map +1 -1
- package/dist/trusted-config.js +19 -0
- package/dist/trusted-config.js.map +1 -1
- package/package.json +22 -22
package/README.md
CHANGED
|
@@ -53,6 +53,7 @@ stratus restart # announced restart: refuse, drain, come
|
|
|
53
53
|
stratus health # is the running daemon serving? exit 0/1, for container and probe health checks
|
|
54
54
|
stratus sessions --status failed # what the daemon's sessions are doing, newest first (--agent, --limit, --format json)
|
|
55
55
|
stratus credentials # stored credential names (never values)
|
|
56
|
+
stratus credential env gh.token GH_TOKEN --agent kai # kai's shell reads it as $GH_TOKEN, no restart
|
|
56
57
|
stratus signin set anthropic --agent remy # one agent's own Claude subscription, token asked without echo (also `signins`, `signin remove`)
|
|
57
58
|
stratus channel set imessage --agent blair apiKey # a channel plugin's secrets for one agent, asked without echo (also `channels`, `channel remove`)
|
|
58
59
|
stratus schedules # what the fleet has scheduled, and where it reports
|
|
@@ -87,6 +88,7 @@ Full reference with every subcommand:
|
|
|
87
88
|
| `--log-format` | `serve`: `text` (default) or `json` — the log's records as JSON lines on stdout, for `docker logs` and journald |
|
|
88
89
|
| `--no-api` | `serve`: do not serve the control API |
|
|
89
90
|
| `--api-host`, `--api-port` | `serve`: control API bind (default `127.0.0.1:4123`) |
|
|
91
|
+
| `--events-host` | `serve`: events listener interface (default `127.0.0.1`); see [Events](https://github.com/stratuslabs/agent/blob/main/docs/guides/events.md) |
|
|
90
92
|
| `--gateway <url>`, `--token` | `agents`, `skill reload`, `restart`, `session rollover`, `sessions`, `grants`, `health`: a running daemon's control API |
|
|
91
93
|
| `--tool`, `--scope`, `--origin` | `grants revoke`: which grant goes — exactly one |
|
|
92
94
|
| `--trust <level>` | `memory list`: show only that label; `memory reassert`: the label to record (`user`, `agent`, `unknown`, `external`) |
|
|
@@ -94,7 +96,7 @@ Full reference with every subcommand:
|
|
|
94
96
|
| `--limit <n>` | `memory search`: maximum hits; `sessions`: how many to list (default 20) |
|
|
95
97
|
| `--status <status>` | `sessions`: only this state (`idle`, `running`, `pending_approval`, `completed`, `failed`) |
|
|
96
98
|
| `--file <path>`, `--preserve-trust` | `memory export` / `memory import`: the JSONL, and keeping each recorded label instead of landing entries `external` |
|
|
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 |
|
|
99
|
+
| `--agent <id>` | `credential set`/`remove`: that agent's own key rather than the fleet's shared one; `credential env`: whose shell the binding is for; `signin set`/`remove`: whose own sign-in it is; `channel set`/`remove`: whose binding it is |
|
|
98
100
|
| `--port`, `--host`, `--no-open` | `dashboard`: where a daemon it starts should bind; skip opening the browser |
|
|
99
101
|
| `--no-login` | `service install`: install without the start-at-login trigger |
|
|
100
102
|
| `--version`, `-v` | Print this build's version and exit |
|
package/dist/bin.js
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { filterSqliteExperimentalWarning, runCli, unsupportedNodeMessage } from "./index.js";
|
|
3
|
+
import { watchOutputReader } from "./io.js";
|
|
4
|
+
// First, so even the Node-floor message below survives a reader that
|
|
5
|
+
// stopped early (`| head -1`, `| grep -q`). Only stdout's reader ends a
|
|
6
|
+
// follow: stderr can close on its own (`2> >(head -1)`) while stdout is
|
|
7
|
+
// still being read.
|
|
8
|
+
const outputClosed = watchOutputReader(process.stdout);
|
|
9
|
+
watchOutputReader(process.stderr);
|
|
3
10
|
// Before anything else imports: the point is to explain the floor rather
|
|
4
11
|
// than to fail somewhere further in with a builtin-module error.
|
|
5
12
|
const unsupported = unsupportedNodeMessage(process.versions.node);
|
|
@@ -11,7 +18,7 @@ else {
|
|
|
11
18
|
// Before the first command imports the session store, since the warning
|
|
12
19
|
// fires on that import.
|
|
13
20
|
filterSqliteExperimentalWarning();
|
|
14
|
-
const exitCode = await runCli({ argv: process.argv.slice(2) });
|
|
21
|
+
const exitCode = await runCli({ argv: process.argv.slice(2), env: { outputClosed } });
|
|
15
22
|
if (exitCode !== 0) {
|
|
16
23
|
process.exitCode = exitCode;
|
|
17
24
|
}
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,+BAA+B,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,+BAA+B,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,qEAAqE;AACrE,wEAAwE;AACxE,wEAAwE;AACxE,oBAAoB;AACpB,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACvD,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAElC,yEAAyE;AACzE,iEAAiE;AACjE,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClE,IAAI,WAAW,EAAE,CAAC;IAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC;KAAM,CAAC;IACN,wEAAwE;IACxE,wBAAwB;IACxB,+BAA+B,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;IACtF,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -11,7 +11,8 @@ import type { ParsedChannelCommand } from '../parse.ts';
|
|
|
11
11
|
* history; nothing ever prints one back. These are gateway infrastructure
|
|
12
12
|
* secrets, never resolved through an agent's credentials — an agent must
|
|
13
13
|
* not read the tokens of the transport carrying it — so there is no soul
|
|
14
|
-
* gate to mention
|
|
14
|
+
* gate to mention. A running daemon is asked to reload, which a channel
|
|
15
|
+
* that can (Slack) picks up at once; any other reads them at its next start.
|
|
15
16
|
*/
|
|
16
17
|
export declare const runChannel: (command: ParsedChannelCommand, streams: CliStreams, env?: CliEnvironment) => Promise<number>;
|
|
17
18
|
//# sourceMappingURL=channel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/commands/channel.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/commands/channel.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAWxD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,GACrB,SAAS,oBAAoB,EAC7B,SAAS,UAAU,EACnB,MAAK,cAAmB,KACvB,OAAO,CAAC,MAAM,CAyGhB,CAAC"}
|
package/dist/commands/channel.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { credentialsPath, listChannelKinds, loadChannelTransportSecrets, removeChannelTransportSecrets, saveChannelTransportSecrets, } from '@stratusagent/state';
|
|
2
|
+
import { channelReloadLine, reloadRunningDaemonChannels } from "../daemon.js";
|
|
2
3
|
import { writeLine, readSecretFromStdin } from "../io.js";
|
|
3
4
|
import { createSetupPrompter } from "../prompter.js";
|
|
4
5
|
import { rosterSoulsWithConfigured } from "../roster.js";
|
|
@@ -19,7 +20,8 @@ const SLACK_KEYS = ['appToken', 'botToken'];
|
|
|
19
20
|
* history; nothing ever prints one back. These are gateway infrastructure
|
|
20
21
|
* secrets, never resolved through an agent's credentials — an agent must
|
|
21
22
|
* not read the tokens of the transport carrying it — so there is no soul
|
|
22
|
-
* gate to mention
|
|
23
|
+
* gate to mention. A running daemon is asked to reload, which a channel
|
|
24
|
+
* that can (Slack) picks up at once; any other reads them at its next start.
|
|
23
25
|
*/
|
|
24
26
|
export const runChannel = async (command, streams, env = {}) => {
|
|
25
27
|
if (command.action === 'list') {
|
|
@@ -56,7 +58,7 @@ export const runChannel = async (command, streams, env = {}) => {
|
|
|
56
58
|
writeLine(streams.stderr, `Nothing is stored for ${agentId} on ${kind}. \`stratus channel list\` shows what is.`);
|
|
57
59
|
return 1;
|
|
58
60
|
}
|
|
59
|
-
|
|
61
|
+
await sayWhenItApplies(streams, env, kind, `Removed ${agentId}'s ${kind} secrets.`, 'A running stratusd lets go of them at its next start: `stratus restart`.');
|
|
60
62
|
return 0;
|
|
61
63
|
}
|
|
62
64
|
const keys = command.keys.length > 0 ? command.keys : kind === 'slack' ? SLACK_KEYS : [];
|
|
@@ -114,7 +116,24 @@ export const runChannel = async (command, streams, env = {}) => {
|
|
|
114
116
|
}
|
|
115
117
|
await saveChannelTransportSecrets(env, kind, agentId, secrets);
|
|
116
118
|
writeLine(streams.stdout, `Stored ${keys.join(', ')} for ${agentId} on ${kind} in ${credentialsPath(env)} (readable only by you).`);
|
|
117
|
-
|
|
119
|
+
await sayWhenItApplies(streams, env, kind, 'This replaces whatever was stored for that agent on that channel.', 'A running stratusd reads it at its next start: `stratus restart`.');
|
|
118
120
|
return 0;
|
|
119
121
|
};
|
|
122
|
+
/**
|
|
123
|
+
* The line after a store or a remove: whether the running daemon picked it
|
|
124
|
+
* up (card 894), or, with no daemon to ask, when one would.
|
|
125
|
+
*/
|
|
126
|
+
const sayWhenItApplies = async (streams, env, kind, done, noDaemon) => {
|
|
127
|
+
const reload = await reloadRunningDaemonChannels(env);
|
|
128
|
+
if (reload === undefined) {
|
|
129
|
+
writeLine(streams.stdout, `${done} ${noDaemon}`);
|
|
130
|
+
}
|
|
131
|
+
else if ('base' in reload) {
|
|
132
|
+
writeLine(streams.stdout, `${done} ${channelReloadLine(reload, kind)}`);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
writeLine(streams.stdout, done);
|
|
136
|
+
writeLine(streams.stderr, `Warning: ${reload.warning}`);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
120
139
|
//# sourceMappingURL=channel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/commands/channel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,2BAA2B,EAC3B,6BAA6B,EAC7B,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAE5C
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/commands/channel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,2BAA2B,EAC3B,6BAA6B,EAC7B,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAE5C;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC7B,OAA6B,EAC7B,OAAmB,EACnB,MAAsB,EAAE,EACP,EAAE;IACnB,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,2BAA2B,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YACrH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,SAAS;YACX,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC;YACtC,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;gBAC1C,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,gCAAgC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrF,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9B,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,0CAA0C,eAAe,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACrH,CAAC;QACD,uEAAuE;QACvE,oEAAoE;QACpE,uDAAuD;QACvD,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,gHAAgH,CAAC,CAAC;QAC5I,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IAEtC,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,6BAA6B,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;YAC7D,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,yBAAyB,OAAO,OAAO,IAAI,2CAA2C,CAAC,CAAC;YAClH,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,OAAO,MAAM,IAAI,WAAW,EAAE,0EAA0E,CAAC,CAAC;QAChK,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACzF,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9G,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,wBAAwB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QACrG,OAAO,CAAC,CAAC;IACX,CAAC;IAED,oEAAoE;IACpE,yEAAyE;IACzE,yEAAyE;IACzE,4BAA4B;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7G,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC;QACxF,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,OAAO,2BAA2B,IAAI,2EAA2E,CAAC,CAAC;QACzJ,mEAAmE;QACnE,qDAAqD;QACrD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;IAC7G,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,iBAAiB,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,SAAS,CACP,OAAO,CAAC,MAAM,EACd,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,uIAAuI,CAClK,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,IAAI,MAAM,mBAAmB,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;QACzF,iEAAiE;QACjE,mEAAmE;QACnE,uCAAuC;QACvC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACjC,SAAS,CACP,OAAO,CAAC,MAAM,EACd,YAAY,IAAI,CAAC,MAAM,sCAAsC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,uBAAuB,CACpJ,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IAC3E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,KAAK,wFAAwF,CAAC,CAAC;QAC5H,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,2BAA2B,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/D,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,OAAO,OAAO,IAAI,OAAO,eAAe,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACpI,MAAM,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,mEAAmE,EAAE,mEAAmE,CAAC,CAAC;IACrL,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,gBAAgB,GAAG,KAAK,EAAE,OAAmB,EAAE,GAAmB,EAAE,IAAY,EAAE,IAAY,EAAE,QAAgB,EAAiB,EAAE;IACvI,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACtD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC;SAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;QAC5B,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAChC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CliStreams, CliEnvironment } from '../environment.ts';
|
|
2
2
|
import type { ParsedCredentialCommand } from '../parse.ts';
|
|
3
3
|
/**
|
|
4
|
-
* `stratus credential set|list|remove`: the place a named credential goes.
|
|
4
|
+
* `stratus credential set|list|remove|env`: the place a named credential goes.
|
|
5
5
|
*
|
|
6
6
|
* A credential nobody can add is a credential nobody has, which is why this
|
|
7
7
|
* exists at all — a search backend asks for `search.apiKey` and until now
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential.d.ts","sourceRoot":"","sources":["../../src/commands/credential.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"credential.d.ts","sourceRoot":"","sources":["../../src/commands/credential.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AA0B3D;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,uBAAuB,EAChC,SAAS,UAAU,EACnB,MAAK,cAAmB,KACvB,OAAO,CAAC,MAAM,CAqHhB,CAAC"}
|
|
@@ -1,7 +1,27 @@
|
|
|
1
|
-
import { credentialsPath, loadNamedCredentials, saveNamedCredentials } from '@stratusagent/state';
|
|
1
|
+
import { appendCredentialAudit, bindCredentialEnv, credentialsPath, loadCredentialEnvBindings, loadNamedCredentials, quoteShellArg, removeNamedCredential, saveNamedCredentials, unbindCredentialEnv, } from '@stratusagent/state';
|
|
2
2
|
import { writeLine, readSecretFromStdin } from "../io.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* The audit line for a binding made on the machine. Written after the
|
|
5
|
+
* change, like the gateway's, and warned about rather than undoing a
|
|
6
|
+
* binding that already landed.
|
|
7
|
+
*/
|
|
8
|
+
const auditBinding = async (env, streams, entry) => {
|
|
9
|
+
try {
|
|
10
|
+
await appendCredentialAudit(env, {
|
|
11
|
+
action: entry.action,
|
|
12
|
+
name: entry.name,
|
|
13
|
+
agentId: entry.agentId,
|
|
14
|
+
via: 'cli',
|
|
15
|
+
env: entry.variable,
|
|
16
|
+
bindingFor: entry.agentId,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
writeLine(streams.stderr, `The binding changed, but the audit line could not be written (${error instanceof Error ? error.message : String(error)}).`);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* `stratus credential set|list|remove|env`: the place a named credential goes.
|
|
5
25
|
*
|
|
6
26
|
* A credential nobody can add is a credential nobody has, which is why this
|
|
7
27
|
* exists at all — a search backend asks for `search.apiKey` and until now
|
|
@@ -23,7 +43,8 @@ export const runCredential = async (command, streams, env = {}) => {
|
|
|
23
43
|
if (command.action === 'list') {
|
|
24
44
|
const shared = Object.keys(named.shared).sort();
|
|
25
45
|
const agents = Object.entries(named.agents).sort(([a], [b]) => a.localeCompare(b));
|
|
26
|
-
|
|
46
|
+
const bindings = Object.entries(await loadCredentialEnvBindings(env)).sort(([a], [b]) => a.localeCompare(b));
|
|
47
|
+
if (shared.length === 0 && agents.length === 0 && bindings.length === 0) {
|
|
27
48
|
writeLine(streams.stdout, `No named credentials stored in ${credentialsPath(env)}.`);
|
|
28
49
|
writeLine(streams.stdout, 'A search backend wants `stratus credential set search.apiKey`.');
|
|
29
50
|
return 0;
|
|
@@ -40,6 +61,14 @@ export const runCredential = async (command, streams, env = {}) => {
|
|
|
40
61
|
writeLine(streams.stdout, ` ${name}`);
|
|
41
62
|
}
|
|
42
63
|
}
|
|
64
|
+
// Which keys each agent's shell commands can read, and as what: the
|
|
65
|
+
// part of a key's reach that a soul's credentials: list doesn't show.
|
|
66
|
+
for (const [agentId, variables] of bindings) {
|
|
67
|
+
writeLine(streams.stdout, `${agentId}'s shell reads:`);
|
|
68
|
+
for (const [variable, name] of Object.entries(variables).sort(([a], [b]) => a.localeCompare(b))) {
|
|
69
|
+
writeLine(streams.stdout, ` ${variable} from ${name}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
43
72
|
// Names, never values — and say so, so nobody goes looking for a flag
|
|
44
73
|
// that prints one.
|
|
45
74
|
writeLine(streams.stdout, '');
|
|
@@ -49,21 +78,36 @@ export const runCredential = async (command, streams, env = {}) => {
|
|
|
49
78
|
const name = command.name ?? '';
|
|
50
79
|
if (command.action === 'remove') {
|
|
51
80
|
const scope = command.agentId;
|
|
52
|
-
|
|
53
|
-
if (!
|
|
81
|
+
// The bindings that read it go in the same write (removeNamedCredential).
|
|
82
|
+
if (!(await removeNamedCredential(env, { name, ...(scope !== undefined ? { agentId: scope } : {}) }))) {
|
|
54
83
|
writeLine(streams.stderr, scope === undefined
|
|
55
84
|
? `No shared credential named ${name}. \`stratus credentials\` lists what is stored.`
|
|
56
85
|
: `Agent ${scope} has no credential of its own named ${name}. \`stratus credentials\` lists what is stored.`);
|
|
57
86
|
return 1;
|
|
58
87
|
}
|
|
59
|
-
delete store[name];
|
|
60
|
-
if (scope !== undefined && Object.keys(store).length === 0) {
|
|
61
|
-
delete named.agents[scope];
|
|
62
|
-
}
|
|
63
|
-
await saveNamedCredentials(env, named);
|
|
64
88
|
writeLine(streams.stdout, scope === undefined ? `Removed ${name}.` : `Removed ${name} for ${scope}.`);
|
|
65
89
|
return 0;
|
|
66
90
|
}
|
|
91
|
+
if (command.action === 'env') {
|
|
92
|
+
// The parser requires both for `env`.
|
|
93
|
+
const agentId = command.agentId ?? '';
|
|
94
|
+
const variable = command.env ?? '';
|
|
95
|
+
if (command.remove === true) {
|
|
96
|
+
const was = await unbindCredentialEnv(env, { agentId, variable });
|
|
97
|
+
if (was === undefined) {
|
|
98
|
+
writeLine(streams.stderr, `${agentId}'s shell has no credential bound to ${variable}. \`stratus credentials\` lists the bindings.`);
|
|
99
|
+
return 1;
|
|
100
|
+
}
|
|
101
|
+
await auditBinding(env, streams, { action: 'unbind', name: was, agentId, variable });
|
|
102
|
+
writeLine(streams.stdout, `${agentId}'s shell no longer reads ${was} as ${variable}, from its next command.`);
|
|
103
|
+
return 0;
|
|
104
|
+
}
|
|
105
|
+
const was = await bindCredentialEnv(env, { agentId, variable, name });
|
|
106
|
+
await auditBinding(env, streams, { action: 'bind', name, agentId, variable });
|
|
107
|
+
writeLine(streams.stdout, `${agentId}'s shell commands read ${name} as ${variable} from their next command${was !== undefined && was !== name ? ` (it was ${was})` : ''}. No restart needed.`);
|
|
108
|
+
writeLine(streams.stdout, `Only while ${agentId}'s soul lists it under credentials: and a value is stored. Undo: stratus credential env ${name} ${variable} --agent ${quoteShellArg(agentId)} --remove`);
|
|
109
|
+
return 0;
|
|
110
|
+
}
|
|
67
111
|
writeLine(streams.stderr, `Reading the value for ${name} from stdin — it is never taken from the command line, where it would land in your shell history. Ctrl-D when done.`);
|
|
68
112
|
const arrived = env.stdin ?? await readSecretFromStdin(env.stdinStream ?? process.stdin);
|
|
69
113
|
// One trailing line terminator and nothing else. `echo "$KEY" |` appends a
|
|
@@ -85,6 +129,11 @@ export const runCredential = async (command, streams, env = {}) => {
|
|
|
85
129
|
writeLine(streams.stdout, command.agentId === undefined
|
|
86
130
|
? `Stored ${name} in ${credentialsPath(env)} (readable only by you).`
|
|
87
131
|
: `Stored ${name} for ${command.agentId} in ${credentialsPath(env)} (readable only by you). It outranks the shared entry for that agent.`);
|
|
132
|
+
if (command.env !== undefined && command.agentId !== undefined) {
|
|
133
|
+
await bindCredentialEnv(env, { agentId: command.agentId, variable: command.env, name });
|
|
134
|
+
await auditBinding(env, streams, { action: 'bind', name, agentId: command.agentId, variable: command.env });
|
|
135
|
+
writeLine(streams.stdout, `${command.agentId}'s shell commands read it as ${command.env} from their next command. No restart needed.`);
|
|
136
|
+
}
|
|
88
137
|
// Storing grants nothing: the soul is the second gate, and an operator
|
|
89
138
|
// who stops here gets "not allowed to access credential" on every call.
|
|
90
139
|
writeLine(streams.stdout, `Each agent that may use it still needs \`credentials: [${name}]\` in its soul.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential.js","sourceRoot":"","sources":["../../src/commands/credential.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"credential.js","sourceRoot":"","sources":["../../src/commands/credential.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAwE1D,eAAO,MAAM,eAAe,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,IAAI,CAa/D,CAAC;AAwDF;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,GACvB,SAAS,sBAAsB,EAC/B,SAAS,UAAU,EACnB,MAAK,cAAmB,KACvB,OAAO,CAAC,MAAM,CA+MhB,CAAC"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
|
-
import { existsSync } from 'node:fs';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { fileURLToPath } from 'node:url';
|
|
5
2
|
import { gatewayToken, readGatewayInfo, gatewayAnswering, HomeHeldError } from "../daemon.js";
|
|
6
3
|
import { writeLine } from "../io.js";
|
|
7
4
|
import { packageInstalled } from "../loaders.js";
|
|
@@ -13,28 +10,6 @@ const CONTROL_API_PACKAGE = '@stratusagent/control-api';
|
|
|
13
10
|
const DASHBOARD_PACKAGE = '@stratusagent/dashboard';
|
|
14
11
|
/** What a daemon this command starts needs: the API that serves the page, and the page. */
|
|
15
12
|
const DASHBOARD_PACKAGES = [CONTROL_API_PACKAGE, DASHBOARD_PACKAGE];
|
|
16
|
-
/**
|
|
17
|
-
* Whether a package is installed, asked before any install. Asked of the
|
|
18
|
-
* filesystem, along the `node_modules` folders this module's own imports
|
|
19
|
-
* search, not through `import.meta.resolve`: Node remembers a scoped
|
|
20
|
-
* package it once failed to resolve, so probing that way before
|
|
21
|
-
* `npm install -g` keeps what it installs out of this process's reach and
|
|
22
|
-
* the daemon this command starts could not load it (a real install into a
|
|
23
|
-
* global prefix, Node 26). The check after the install is the resolver's.
|
|
24
|
-
*/
|
|
25
|
-
const installedBeforeOffer = (name, env) => {
|
|
26
|
-
if (env.packageResolver !== undefined) {
|
|
27
|
-
return packageInstalled(name, env);
|
|
28
|
-
}
|
|
29
|
-
for (let dir = path.dirname(fileURLToPath(import.meta.url));; dir = path.dirname(dir)) {
|
|
30
|
-
if (path.basename(dir) !== 'node_modules' && existsSync(path.join(dir, 'node_modules', name, 'package.json'))) {
|
|
31
|
-
return true;
|
|
32
|
-
}
|
|
33
|
-
if (path.dirname(dir) === dir) {
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
13
|
/**
|
|
39
14
|
* Offers the dashboard's missing packages. This command is the one place
|
|
40
15
|
* they are offered (card 308): setup and the rest leave them alone, since
|
|
@@ -173,7 +148,7 @@ export const runDashboard = async (command, streams, env = {}) => {
|
|
|
173
148
|
if (base && !await servesDashboard(env, base, fetchImpl)) {
|
|
174
149
|
writeLine(streams.stdout, `The daemon at ${base} serves the control API without the dashboard.`);
|
|
175
150
|
const restart = 'Restart it to load the dashboard: `stratus restart`, then `stratus dashboard` again.';
|
|
176
|
-
if (
|
|
151
|
+
if (packageInstalled(DASHBOARD_PACKAGE, env)) {
|
|
177
152
|
// Installed where this CLI looks, which need not be where the daemon
|
|
178
153
|
// does (a global service looked at from a checkout): say both.
|
|
179
154
|
writeLine(streams.stderr, `Error: this stratus can load ${DASHBOARD_PACKAGE} and the daemon cannot. If it started before the package was installed, `
|
|
@@ -195,7 +170,7 @@ export const runDashboard = async (command, streams, env = {}) => {
|
|
|
195
170
|
if (!base) {
|
|
196
171
|
// Checked only for a daemon of our own. One already answering brought
|
|
197
172
|
// its own packages, whatever this shell resolves.
|
|
198
|
-
const missing = DASHBOARD_PACKAGES.filter((name) => !
|
|
173
|
+
const missing = DASHBOARD_PACKAGES.filter((name) => !packageInstalled(name, env));
|
|
199
174
|
if (missing.length > 0) {
|
|
200
175
|
const offered = await offerDashboardPackages(missing, streams, env);
|
|
201
176
|
if (offered === 'elsewhere') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CliStreams, CliEnvironment } from '../environment.ts';
|
|
2
|
+
import type { ParsedEventsCommand } from '../parse.ts';
|
|
3
|
+
/**
|
|
4
|
+
* `stratus events` — what the running daemon's events port has been doing,
|
|
5
|
+
* per configured source: the last delivery, the last refusal and why, the
|
|
6
|
+
* last 24 hours by status, and the requests refused before they could leave
|
|
7
|
+
* a row (bad signature, too large, over the rate, no secret).
|
|
8
|
+
*
|
|
9
|
+
* Asked of the daemon, not read from `fleet.db`, because those last ones
|
|
10
|
+
* live only in the running listener: a webhook with the wrong secret leaves
|
|
11
|
+
* no row by design, and it is exactly what an operator runs this to find.
|
|
12
|
+
*/
|
|
13
|
+
export declare const runEvents: (command: ParsedEventsCommand, streams: CliStreams, env?: CliEnvironment) => Promise<number>;
|
|
14
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/commands/events.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA4CvD;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,GACpB,SAAS,mBAAmB,EAC5B,SAAS,UAAU,EACnB,MAAK,cAAmB,KACvB,OAAO,CAAC,MAAM,CAgEhB,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { escapeControlCharacters } from '@stratusagent/core';
|
|
2
|
+
import { gatewayInfoPath } from '@stratusagent/state';
|
|
3
|
+
import { callRunningGateway, gatewayErrorMessage, runningGatewayBase } from "../daemon.js";
|
|
4
|
+
import { writeLine } from "../io.js";
|
|
5
|
+
/** A daemon that doesn't answer in this long is reported, not waited on. */
|
|
6
|
+
const EVENTS_TIMEOUT_MS = 5_000;
|
|
7
|
+
// Most telling first: what reached an agent, then what didn't.
|
|
8
|
+
const DELIVERY_ORDER = ['matched', 'unmatched', 'duplicate', 'refused'];
|
|
9
|
+
const FIRING_ORDER = ['fired', 'failed', 'firing', 'pending', 'held', 'rate_limited', 'superseded', 'expired'];
|
|
10
|
+
const BEFORE_ROW_LABELS = {
|
|
11
|
+
badSignature: 'bad signature',
|
|
12
|
+
tooLarge: 'too large',
|
|
13
|
+
rateLimited: 'over the rate',
|
|
14
|
+
notReady: 'no secret set',
|
|
15
|
+
};
|
|
16
|
+
// Every string below is printed escaped. A delivery's type and subject, and
|
|
17
|
+
// a refusal reason quoting them, are whatever a signed sender wrote, so a
|
|
18
|
+
// raw newline, ANSI escape or bidi control could forge a line or recolor
|
|
19
|
+
// the terminal. The same rule `stratus sessions` and `stratus memory` follow.
|
|
20
|
+
const safe = escapeControlCharacters;
|
|
21
|
+
/** Nonzero counts in a fixed order, then any status this CLI doesn't know, so a newer daemon's are still shown. */
|
|
22
|
+
const counts = (byStatus, order, label = (key) => key) => {
|
|
23
|
+
const entries = Object.entries(byStatus ?? {}).filter(([, count]) => typeof count === 'number' && count > 0);
|
|
24
|
+
const rank = (key) => (order.includes(key) ? order.indexOf(key) : order.length);
|
|
25
|
+
return entries.sort(([a], [b]) => rank(a) - rank(b)).map(([key, count]) => `${count} ${safe(label(key))}`);
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* `stratus events` — what the running daemon's events port has been doing,
|
|
29
|
+
* per configured source: the last delivery, the last refusal and why, the
|
|
30
|
+
* last 24 hours by status, and the requests refused before they could leave
|
|
31
|
+
* a row (bad signature, too large, over the rate, no secret).
|
|
32
|
+
*
|
|
33
|
+
* Asked of the daemon, not read from `fleet.db`, because those last ones
|
|
34
|
+
* live only in the running listener: a webhook with the wrong secret leaves
|
|
35
|
+
* no row by design, and it is exactly what an operator runs this to find.
|
|
36
|
+
*/
|
|
37
|
+
export const runEvents = async (command, streams, env = {}) => {
|
|
38
|
+
const fail = (message) => {
|
|
39
|
+
writeLine(streams.stderr, `Error: ${message}`);
|
|
40
|
+
return 1;
|
|
41
|
+
};
|
|
42
|
+
const base = await runningGatewayBase(env, command);
|
|
43
|
+
if (!base) {
|
|
44
|
+
return fail(`stratusd is not serving — ${gatewayInfoPath(env)} does not exist, and no --gateway was given. `
|
|
45
|
+
+ 'Start it with `stratus serve` or `stratus service start`. The events port runs only inside a serving daemon.');
|
|
46
|
+
}
|
|
47
|
+
let payload;
|
|
48
|
+
try {
|
|
49
|
+
const response = await callRunningGateway(env, command, base, '/api/v1/events/sources', undefined, 'GET', AbortSignal.timeout(EVENTS_TIMEOUT_MS));
|
|
50
|
+
if (response.status === 404) {
|
|
51
|
+
return fail(`The gateway at ${base} has no /api/v1/events/sources. It is older than this CLI; restart it on this version.`);
|
|
52
|
+
}
|
|
53
|
+
if (!response.ok) {
|
|
54
|
+
return fail(`The gateway at ${base} answered /api/v1/events/sources with ${await gatewayErrorMessage(response)}.`);
|
|
55
|
+
}
|
|
56
|
+
payload = await response.json();
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
return fail(error instanceof Error ? error.message : String(error));
|
|
60
|
+
}
|
|
61
|
+
if (command.format === 'json') {
|
|
62
|
+
writeLine(streams.stdout, JSON.stringify({ gateway: base, ...payload }));
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
const sources = Object.entries(payload.sources ?? {});
|
|
66
|
+
if (sources.length === 0) {
|
|
67
|
+
writeLine(streams.stdout, 'No event sources are configured. A source is an entry in the "events" block of ~/.stratus/config.json, or one a loaded plugin feeds; see docs/guides/events.md.');
|
|
68
|
+
return 0;
|
|
69
|
+
}
|
|
70
|
+
for (const [id, source] of sources) {
|
|
71
|
+
writeLine(streams.stdout, typeof source.plugin === 'string' ? `${safe(id)} (fed by plugin ${safe(source.plugin)})` : safe(id));
|
|
72
|
+
const last = source.lastDelivery;
|
|
73
|
+
// A refused body may have no type to show (form-encoded, say).
|
|
74
|
+
writeLine(streams.stdout, last
|
|
75
|
+
? ` last delivery: ${[last.at, last.type, last.subject].filter((part) => part !== undefined && part !== '').map((part) => safe(part)).join(' ')} (${safe(last.status)})`
|
|
76
|
+
: ' last delivery: none yet');
|
|
77
|
+
if (source.lastRefusal) {
|
|
78
|
+
writeLine(streams.stdout, ` last refusal: ${safe(source.lastRefusal.at)} ${safe(source.lastRefusal.reason)}`);
|
|
79
|
+
}
|
|
80
|
+
const deliveries = counts(source.deliveries, DELIVERY_ORDER);
|
|
81
|
+
const firings = counts(source.firings, FIRING_ORDER);
|
|
82
|
+
writeLine(streams.stdout, ` last 24h: ${deliveries.length > 0 ? deliveries.join(', ') : 'no deliveries'}; `
|
|
83
|
+
+ `${firings.length > 0 ? `firings: ${firings.join(', ')}` : 'no firings'}`);
|
|
84
|
+
const beforeRow = counts(source.refusedBeforeRow, Object.keys(BEFORE_ROW_LABELS), (key) => BEFORE_ROW_LABELS[key] ?? key);
|
|
85
|
+
if (beforeRow.length > 0) {
|
|
86
|
+
writeLine(streams.stdout, ` refused before a row since the daemon started: ${beforeRow.join(', ')}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if ((payload.unknownSource ?? 0) > 0) {
|
|
90
|
+
writeLine(streams.stdout, `Requests to unknown sources since the daemon started: ${payload.unknownSource}`);
|
|
91
|
+
}
|
|
92
|
+
return 0;
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/commands/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAClB,SAAS,iBAAiB,EAC1B,SAAS,UAAU,EACnB,MAAK,cAAmB,KACvB,OAAO,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAClB,SAAS,iBAAiB,EAC1B,SAAS,UAAU,EACnB,MAAK,cAAmB,KACvB,OAAO,CAAC,MAAM,CAuDhB,CAAC"}
|
package/dist/commands/logs.js
CHANGED
|
@@ -36,9 +36,14 @@ export const runLogs = async (command, streams, env = {}) => {
|
|
|
36
36
|
const stop = () => controller.abort();
|
|
37
37
|
process.once('SIGINT', stop);
|
|
38
38
|
process.once('SIGTERM', stop);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
// A follow only ends when interrupted, so a reader that stopped early
|
|
40
|
+
// (`stratus logs -f | grep -m1 x`) has to end it too, or the pipeline
|
|
41
|
+
// waits forever on a follower writing to nobody.
|
|
42
|
+
for (const signal of [env.shutdownSignal, env.outputClosed]) {
|
|
43
|
+
signal?.addEventListener('abort', stop, { once: true });
|
|
44
|
+
if (signal?.aborted) {
|
|
45
|
+
stop();
|
|
46
|
+
}
|
|
42
47
|
}
|
|
43
48
|
try {
|
|
44
49
|
await tailLog({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,OAAO,GAER,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAC1B,OAA0B,EAC1B,OAAmB,EACnB,MAAsB,EAAE,EACP,EAAE;IACnB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG;QACb,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/D,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,MAAiB,EAAQ,EAAE;QACvC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1G,CAAC,CAAC;IAEF,wEAAwE;IACxE,wEAAwE;IACxE,qDAAqD;IACrD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,sEAAsE;IACtE,qEAAqE;IACrE,4BAA4B;IAC5B,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/E,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,CAAC;IACf,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACrD,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,yBAAyB,GAAG,4CAA4C,CAAC,CAAC;QACtG,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,GAAS,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9B,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../../src/commands/schedules.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AA0H1D;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GACvB,SAAS,sBAAsB,EAC/B,SAAS,UAAU,EACnB,MAAK,cAAmB,KACvB,OAAO,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../../src/commands/schedules.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AA0H1D;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GACvB,SAAS,sBAAsB,EAC/B,SAAS,UAAU,EACnB,MAAK,cAAmB,KACvB,OAAO,CAAC,MAAM,CAwChB,CAAC"}
|
|
@@ -153,7 +153,12 @@ export const runSchedules = async (command, streams, env = {}) => {
|
|
|
153
153
|
? ` → ${canonicalDestination(record.destination)}${record.destination.thread ? ` (thread ${record.destination.thread})` : ''}`
|
|
154
154
|
: '';
|
|
155
155
|
writeLine(streams.stdout, `${record.id} [${record.agentId}] ${describeCadence(record.cadence)}${destination}`);
|
|
156
|
-
|
|
156
|
+
// An event trigger has no slot by design (card 590); only a one-shot
|
|
157
|
+
// without one is spent.
|
|
158
|
+
const next = record.cadence.kind === 'event'
|
|
159
|
+
? `when a ${record.cadence.source} event matches`
|
|
160
|
+
: record.nextFireAt ?? '(spent — awaiting cleanup)';
|
|
161
|
+
writeLine(streams.stdout, ` next: ${next}${record.lastFiredAt ? ` last: ${record.lastFiredAt}` : ''}`);
|
|
157
162
|
writeLine(streams.stdout, ` prompt: ${record.prompt}`);
|
|
158
163
|
}
|
|
159
164
|
return 0;
|