@stratusagent/cli 0.11.2 → 0.11.4
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 +14 -8
- package/dist/approvals.d.ts +93 -0
- package/dist/approvals.d.ts.map +1 -0
- package/dist/approvals.js +368 -0
- package/dist/approvals.js.map +1 -0
- package/dist/commands/agent-new.d.ts +22 -0
- package/dist/commands/agent-new.d.ts.map +1 -0
- package/dist/commands/agent-new.js +159 -0
- package/dist/commands/agent-new.js.map +1 -0
- package/dist/commands/agents.d.ts +4 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +90 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/chat.d.ts +4 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +227 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/credential.d.ts +22 -0
- package/dist/commands/credential.d.ts.map +1 -0
- package/dist/commands/credential.js +93 -0
- package/dist/commands/credential.js.map +1 -0
- package/dist/commands/dashboard.d.ts +14 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +195 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/doctor.d.ts +40 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +376 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/grants.d.ts +19 -0
- package/dist/commands/grants.d.ts.map +1 -0
- package/dist/commands/grants.js +128 -0
- package/dist/commands/grants.js.map +1 -0
- package/dist/commands/logs.d.ts +9 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +58 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/memory.d.ts +20 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +110 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/plugins.d.ts +103 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +386 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/commands/restart.d.ts +4 -0
- package/dist/commands/restart.d.ts.map +1 -0
- package/dist/commands/restart.js +25 -0
- package/dist/commands/restart.js.map +1 -0
- package/dist/commands/schedules.d.ts +11 -0
- package/dist/commands/schedules.d.ts.map +1 -0
- package/dist/commands/schedules.js +50 -0
- package/dist/commands/schedules.js.map +1 -0
- package/dist/commands/serve.d.ts +4 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +633 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/service.d.ts +9 -0
- package/dist/commands/service.d.ts.map +1 -0
- package/dist/commands/service.js +97 -0
- package/dist/commands/service.js.map +1 -0
- package/dist/commands/session.d.ts +9 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +25 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +2467 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/skills.d.ts +15 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +272 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/template.d.ts +4 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +593 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/commands/update.d.ts +21 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +291 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/daemon.d.ts +74 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +192 -0
- package/dist/daemon.js.map +1 -0
- package/dist/environment.d.ts +114 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/environment.js +2 -0
- package/dist/environment.js.map +1 -0
- package/dist/events.d.ts +17 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +87 -0
- package/dist/events.js.map +1 -0
- package/dist/help.d.ts +2 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +272 -0
- package/dist/help.js.map +1 -0
- package/dist/index.d.ts +32 -624
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -6981
- package/dist/index.js.map +1 -1
- package/dist/io.d.ts +16 -0
- package/dist/io.d.ts.map +1 -0
- package/dist/io.js +45 -0
- package/dist/io.js.map +1 -0
- package/dist/loaders.d.ts +31 -0
- package/dist/loaders.d.ts.map +1 -0
- package/dist/loaders.js +56 -0
- package/dist/loaders.js.map +1 -0
- package/dist/main.d.ts +8 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +218 -0
- package/dist/main.js.map +1 -0
- package/dist/npm.d.ts +66 -0
- package/dist/npm.d.ts.map +1 -0
- package/dist/npm.js +201 -0
- package/dist/npm.js.map +1 -0
- package/dist/parse.d.ts +245 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +1098 -0
- package/dist/parse.js.map +1 -0
- package/dist/plugin-catalog.d.ts +44 -0
- package/dist/plugin-catalog.d.ts.map +1 -0
- package/dist/plugin-catalog.js +70 -0
- package/dist/plugin-catalog.js.map +1 -0
- package/dist/preflight.d.ts +60 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +102 -0
- package/dist/preflight.js.map +1 -0
- package/dist/prompter.d.ts +84 -0
- package/dist/prompter.d.ts.map +1 -0
- package/dist/prompter.js +347 -0
- package/dist/prompter.js.map +1 -0
- package/dist/roster.d.ts +57 -0
- package/dist/roster.d.ts.map +1 -0
- package/dist/roster.js +78 -0
- package/dist/roster.js.map +1 -0
- package/dist/runtime.d.ts +76 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +372 -0
- package/dist/runtime.js.map +1 -0
- package/dist/slack.d.ts +26 -0
- package/dist/slack.d.ts.map +1 -0
- package/dist/slack.js +113 -0
- package/dist/slack.js.map +1 -0
- package/dist/source.d.ts +24 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +80 -0
- package/dist/source.js.map +1 -0
- package/dist/supervisor.d.ts +69 -0
- package/dist/supervisor.d.ts.map +1 -0
- package/dist/supervisor.js +218 -0
- package/dist/supervisor.js.map +1 -0
- package/dist/trusted-config.d.ts +84 -0
- package/dist/trusted-config.d.ts.map +1 -0
- package/dist/trusted-config.js +159 -0
- package/dist/trusted-config.js.map +1 -0
- package/package.json +27 -23
package/dist/io.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { stat } from 'node:fs/promises';
|
|
2
|
+
export const writeLine = (stream, line = '') => {
|
|
3
|
+
stream.write(`${line}\n`);
|
|
4
|
+
};
|
|
5
|
+
export const stringifyValue = (value) => {
|
|
6
|
+
if (typeof value === 'string') {
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
return JSON.stringify(value, null, 2);
|
|
10
|
+
};
|
|
11
|
+
export const readPromptFromStdin = async (stdin) => {
|
|
12
|
+
stdin.setEncoding('utf8');
|
|
13
|
+
let data = '';
|
|
14
|
+
for await (const chunk of stdin) {
|
|
15
|
+
data += chunk;
|
|
16
|
+
}
|
|
17
|
+
return data.trim();
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Stdin exactly as it arrived, for a value where whitespace may be part of
|
|
21
|
+
* it.
|
|
22
|
+
*
|
|
23
|
+
* `readPromptFromStdin` trims, which is right for a prompt and wrong for a
|
|
24
|
+
* secret: a key whose real value has a leading space would be stored as a
|
|
25
|
+
* *different* key, reported as stored, and then fail authentication with
|
|
26
|
+
* nothing to look at — this command never prints a value back.
|
|
27
|
+
*/
|
|
28
|
+
export const readSecretFromStdin = async (stdin) => {
|
|
29
|
+
stdin.setEncoding('utf8');
|
|
30
|
+
let data = '';
|
|
31
|
+
for await (const chunk of stdin) {
|
|
32
|
+
data += chunk;
|
|
33
|
+
}
|
|
34
|
+
return data;
|
|
35
|
+
};
|
|
36
|
+
export const pathExists = async (candidate) => {
|
|
37
|
+
try {
|
|
38
|
+
await stat(candidate);
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=io.js.map
|
package/dist/io.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAA4C,EAAE,IAAI,GAAG,EAAE,EAAQ,EAAE;IACzF,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAgB,EAAU,EAAE;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,KAA4B,EAAmB,EAAE;IACzF,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAE1B,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI,KAAK,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,KAA4B,EAAmB,EAAE;IACzF,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAE1B,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI,KAAK,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,SAAiB,EAAoB,EAAE;IACtE,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { CliEnvironment } from './environment.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Whether an optional package is installed. The resolver is injectable
|
|
4
|
+
* because what is installed is a property of the machine: a test asserting
|
|
5
|
+
* on the real one would be asserting on its own node_modules, which is why
|
|
6
|
+
* every optional package is a devDependency here in the first place.
|
|
7
|
+
*/
|
|
8
|
+
export declare const packageInstalled: (specifier: string, env?: CliEnvironment) => boolean;
|
|
9
|
+
type SlackAdapterFactory = typeof import('@stratusagent/channel-slack').createSlackChannelAdapter;
|
|
10
|
+
/**
|
|
11
|
+
* Loads the optional Slack channel package, or undefined when it is not
|
|
12
|
+
* installed. Only that package being absent is tolerated: an adapter that
|
|
13
|
+
* fails to load for any other reason (a broken install, a bad transitive
|
|
14
|
+
* dependency) surfaces rather than silently disabling Slack for a daemon
|
|
15
|
+
* whose stored tokens say it should be running.
|
|
16
|
+
*/
|
|
17
|
+
export declare const loadSlackAdapter: () => Promise<SlackAdapterFactory | undefined>;
|
|
18
|
+
type ControlApiFactory = typeof import('@stratusagent/control-api').createControlApi;
|
|
19
|
+
export type GatewayFactory = typeof import('@stratusagent/gateway').createGateway;
|
|
20
|
+
/**
|
|
21
|
+
* Loads the optional control-API package, or undefined when it is not
|
|
22
|
+
* installed. Same two-step as the Slack adapter, and for the same reason:
|
|
23
|
+
* only the package being absent means "not installed". A package that IS
|
|
24
|
+
* installed but is missing one of its own dependencies throws
|
|
25
|
+
* ERR_MODULE_NOT_FOUND naming that dependency, so inspecting the message
|
|
26
|
+
* would read a broken install as an absent one — silently leaving a daemon
|
|
27
|
+
* without the API an operator installed it to have.
|
|
28
|
+
*/
|
|
29
|
+
export declare const loadControlApi: () => Promise<ControlApiFactory | undefined>;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=loaders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loaders.d.ts","sourceRoot":"","sources":["../src/loaders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,kBAAkB,CAAC;AAoBxE;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,WAAW,MAAM,EAAE,MAAK,cAAmB,KAAG,OACnB,CAAC;AAE7D,KAAK,mBAAmB,GAAG,cAAc,6BAA6B,EAAE,yBAAyB,CAAC;AAElG;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAOhF,CAAC;AAEF,KAAK,iBAAiB,GAAG,cAAc,2BAA2B,EAAE,gBAAgB,CAAC;AAErF,MAAM,MAAM,cAAc,GAAG,cAAc,uBAAuB,EAAE,aAAa,CAAC;AAElF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAK5E,CAAC"}
|
package/dist/loaders.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolution and loading are separate questions, and only the first one
|
|
3
|
+
* means "not installed". Inspecting an import's error message cannot tell
|
|
4
|
+
* them apart: a package that IS installed but is missing one of its own
|
|
5
|
+
* dependencies throws ERR_MODULE_NOT_FOUND naming that dependency and the
|
|
6
|
+
* importer — so a broken install would read as an absent one, silently
|
|
7
|
+
* disabling a channel whose stored tokens say it should be running, or
|
|
8
|
+
* leaving a daemon without the API an operator installed it to have.
|
|
9
|
+
*/
|
|
10
|
+
const defaultPackageResolver = (specifier) => {
|
|
11
|
+
try {
|
|
12
|
+
import.meta.resolve(specifier);
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Whether an optional package is installed. The resolver is injectable
|
|
21
|
+
* because what is installed is a property of the machine: a test asserting
|
|
22
|
+
* on the real one would be asserting on its own node_modules, which is why
|
|
23
|
+
* every optional package is a devDependency here in the first place.
|
|
24
|
+
*/
|
|
25
|
+
export const packageInstalled = (specifier, env = {}) => (env.packageResolver ?? defaultPackageResolver)(specifier);
|
|
26
|
+
/**
|
|
27
|
+
* Loads the optional Slack channel package, or undefined when it is not
|
|
28
|
+
* installed. Only that package being absent is tolerated: an adapter that
|
|
29
|
+
* fails to load for any other reason (a broken install, a bad transitive
|
|
30
|
+
* dependency) surfaces rather than silently disabling Slack for a daemon
|
|
31
|
+
* whose stored tokens say it should be running.
|
|
32
|
+
*/
|
|
33
|
+
export const loadSlackAdapter = async () => {
|
|
34
|
+
if (!packageInstalled('@stratusagent/channel-slack')) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
// Resolvable: any failure from here is a real problem with the
|
|
38
|
+
// installed package, and surfaces.
|
|
39
|
+
return (await import('@stratusagent/channel-slack')).createSlackChannelAdapter;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Loads the optional control-API package, or undefined when it is not
|
|
43
|
+
* installed. Same two-step as the Slack adapter, and for the same reason:
|
|
44
|
+
* only the package being absent means "not installed". A package that IS
|
|
45
|
+
* installed but is missing one of its own dependencies throws
|
|
46
|
+
* ERR_MODULE_NOT_FOUND naming that dependency, so inspecting the message
|
|
47
|
+
* would read a broken install as an absent one — silently leaving a daemon
|
|
48
|
+
* without the API an operator installed it to have.
|
|
49
|
+
*/
|
|
50
|
+
export const loadControlApi = async () => {
|
|
51
|
+
if (!packageInstalled('@stratusagent/control-api')) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
return (await import('@stratusagent/control-api')).createControlApi;
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=loaders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loaders.js","sourceRoot":"","sources":["../src/loaders.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,sBAAsB,GAAoB,CAAC,SAAS,EAAE,EAAE;IAC5D,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAiB,EAAE,MAAsB,EAAE,EAAW,EAAE,CACvF,CAAC,GAAG,CAAC,eAAe,IAAI,sBAAsB,CAAC,CAAC,SAAS,CAAC,CAAC;AAI7D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAA8C,EAAE;IACnF,IAAI,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,EAAE,CAAC;QACrD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+DAA+D;IAC/D,mCAAmC;IACnC,OAAO,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,yBAAyB,CAAC;AACjF,CAAC,CAAC;AAMF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,IAA4C,EAAE;IAC/E,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,EAAE,CAAC;QACnD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,CAAC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACtE,CAAC,CAAC"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CliStreams, CliEnvironment } from './environment.ts';
|
|
2
|
+
export interface CliRunOptions {
|
|
3
|
+
argv: string[];
|
|
4
|
+
streams?: CliStreams;
|
|
5
|
+
env?: CliEnvironment;
|
|
6
|
+
}
|
|
7
|
+
export declare const runCli: ({ argv, streams, env }: CliRunOptions) => Promise<number>;
|
|
8
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAcnE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,GAAG,CAAC,EAAE,cAAc,CAAC;CACtB;AAED,eAAO,MAAM,MAAM,GAAU,wBAAuC,aAAa,KAAG,OAAO,CAAC,MAAM,CA0NjG,CAAC"}
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { redactAnthropicRawTurns } from '@stratusagent/provider-anthropic';
|
|
2
|
+
import { newerStateMessage, readStateStamp, runStateMigrations, STATE_SCHEMA_VERSION, } from '@stratusagent/state';
|
|
3
|
+
import { runAgentNew } from "./commands/agent-new.js";
|
|
4
|
+
import { runAgents } from "./commands/agents.js";
|
|
5
|
+
import { runChat } from "./commands/chat.js";
|
|
6
|
+
import { runCredential } from "./commands/credential.js";
|
|
7
|
+
import { runDashboard } from "./commands/dashboard.js";
|
|
8
|
+
import { runDoctor } from "./commands/doctor.js";
|
|
9
|
+
import { runGrants } from "./commands/grants.js";
|
|
10
|
+
import { runLogs } from "./commands/logs.js";
|
|
11
|
+
import { runMemory } from "./commands/memory.js";
|
|
12
|
+
import { runPlugins } from "./commands/plugins.js";
|
|
13
|
+
import { runRestart } from "./commands/restart.js";
|
|
14
|
+
import { runSchedules } from "./commands/schedules.js";
|
|
15
|
+
import { runServe } from "./commands/serve.js";
|
|
16
|
+
import { runService } from "./commands/service.js";
|
|
17
|
+
import { runSessionRollover } from "./commands/session.js";
|
|
18
|
+
import { runSetup } from "./commands/setup.js";
|
|
19
|
+
import { runSkillAdd, runSkillValidate, runSkillReload, runSkills } from "./commands/skills.js";
|
|
20
|
+
import { runTemplateAdd } from "./commands/template.js";
|
|
21
|
+
import { runUpdate } from "./commands/update.js";
|
|
22
|
+
import { HELP_TEXT } from "./help.js";
|
|
23
|
+
import { writeLine, readPromptFromStdin } from "./io.js";
|
|
24
|
+
import { CLI_VERSION } from "./npm.js";
|
|
25
|
+
import { parseCommand, defaultApprovalMode } from "./parse.js";
|
|
26
|
+
import { resolveRuntimeConfig, warnOnCredentialOverride, warnOnUntrustedConfig, runSingleLoop, printSessionSummary, formatRuntimeBanner, } from "./runtime.js";
|
|
27
|
+
export const runCli = async ({ argv, streams = process, env = {} }) => {
|
|
28
|
+
try {
|
|
29
|
+
const resolvedEnv = argv.includes('--stdin') && env.stdin === undefined
|
|
30
|
+
? {
|
|
31
|
+
...env,
|
|
32
|
+
stdin: await readPromptFromStdin(env.stdinStream ?? process.stdin),
|
|
33
|
+
}
|
|
34
|
+
: env;
|
|
35
|
+
const command = parseCommand(argv, resolvedEnv);
|
|
36
|
+
if (command.command === 'help') {
|
|
37
|
+
writeLine(streams.stdout, HELP_TEXT);
|
|
38
|
+
return 0;
|
|
39
|
+
}
|
|
40
|
+
// Above the migration check below, like help: reporting which build
|
|
41
|
+
// this is must not depend on the state it would migrate.
|
|
42
|
+
if (command.command === 'version') {
|
|
43
|
+
writeLine(streams.stdout, `stratus ${CLI_VERSION}`);
|
|
44
|
+
return 0;
|
|
45
|
+
}
|
|
46
|
+
// Migrations run on first use of a newer build — every command, every
|
|
47
|
+
// install path — not only via `stratus update`: state that migrates
|
|
48
|
+
// only sometimes is worse than state that never migrates, because the
|
|
49
|
+
// two populations diverge silently. `update` is excluded because it
|
|
50
|
+
// owns the migration step at its own place in the upgrade sequence
|
|
51
|
+
// (after the service stop and the package upgrade), and `--check` has
|
|
52
|
+
// to be able to report what is pending rather than having just done it.
|
|
53
|
+
if (command.command !== 'update') {
|
|
54
|
+
const stamp = await readStateStamp(resolvedEnv);
|
|
55
|
+
const writesState = command.command === 'serve'
|
|
56
|
+
|| command.command === 'setup'
|
|
57
|
+
|| command.command === 'chat'
|
|
58
|
+
|| command.command === 'run'
|
|
59
|
+
|| command.command === 'skill-add'
|
|
60
|
+
|| command.command === 'template-add'
|
|
61
|
+
|| command.command === 'dashboard'
|
|
62
|
+
|| (command.command === 'credential' && command.action !== 'list')
|
|
63
|
+
|| (command.command === 'schedules' && command.action === 'cancel')
|
|
64
|
+
|| (command.command === 'memory' && command.action === 'reassert')
|
|
65
|
+
|| command.command === 'session'
|
|
66
|
+
|| (command.command === 'service' && (command.action === 'install' || command.action === 'start'));
|
|
67
|
+
if (stamp.schemaVersion > STATE_SCHEMA_VERSION) {
|
|
68
|
+
// Anything that writes under ~/.stratus refuses, not only the
|
|
69
|
+
// daemon: a downgraded build's setup, chat, or run can discard
|
|
70
|
+
// fields and invariants the newer format relies on — the exact
|
|
71
|
+
// hazard the stamp exists to close. Read-only commands warn and
|
|
72
|
+
// continue, because reading logs or the roster is how someone
|
|
73
|
+
// diagnoses their way OUT of this state; so do `service stop`,
|
|
74
|
+
// `status`, and `uninstall`, for the same reason. (`agent new`
|
|
75
|
+
// only prints an identity — it writes nothing.)
|
|
76
|
+
if (writesState) {
|
|
77
|
+
writeLine(streams.stderr, newerStateMessage(stamp.schemaVersion));
|
|
78
|
+
writeLine(streams.stderr, `Refusing \`stratus ${command.command}\` — it writes state the newer format owns. Read-only commands (logs, agents, doctor, service status/stop) still work.`);
|
|
79
|
+
return 1;
|
|
80
|
+
}
|
|
81
|
+
writeLine(streams.stderr, `Warning: ${newerStateMessage(stamp.schemaVersion)}`);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
try {
|
|
85
|
+
for (const migration of await runStateMigrations(resolvedEnv)) {
|
|
86
|
+
if (migration.detail !== undefined) {
|
|
87
|
+
writeLine(streams.stderr, `state migration ${migration.id}: ${migration.detail}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
93
|
+
// A command that writes state must not run on a home whose stamp
|
|
94
|
+
// could not be written: the labels it would persist are what the
|
|
95
|
+
// stamp protects, and a stamp still reading the old schema lets a
|
|
96
|
+
// downgraded build in afterwards to read an `external` fact as
|
|
97
|
+
// ordinary memory — the exact hole the stamp closes. A read-only
|
|
98
|
+
// command warns and continues, because reading is how someone
|
|
99
|
+
// diagnoses their way out; silence here is how the migrated and
|
|
100
|
+
// unmigrated populations diverge.
|
|
101
|
+
if (writesState) {
|
|
102
|
+
writeLine(streams.stderr, `State migration failed (${reason}).`);
|
|
103
|
+
writeLine(streams.stderr, `Refusing \`stratus ${command.command}\` — it writes state the migration stamps. Fix ~/.stratus (is state.json writable?) or run \`stratus update\`; read-only commands (logs, agents, doctor, memory list, service status/stop) still work.`);
|
|
104
|
+
return 1;
|
|
105
|
+
}
|
|
106
|
+
writeLine(streams.stderr, `Warning: state migration failed (${reason}). Continuing on unmigrated state — \`stratus update\` retries it.`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Every handler is awaited, never bare-returned: a bare `return
|
|
111
|
+
// promise` inside try/catch settles the async function before the
|
|
112
|
+
// catch can see it, so a command that fails at runtime — a gateway
|
|
113
|
+
// that cannot open its store, a missing credential — would escape as
|
|
114
|
+
// a raw rejection instead of the error line and exit code below.
|
|
115
|
+
if (command.command === 'agent-new') {
|
|
116
|
+
return await runAgentNew(command, streams, resolvedEnv);
|
|
117
|
+
}
|
|
118
|
+
if (command.command === 'agents') {
|
|
119
|
+
return await runAgents(command, streams, resolvedEnv);
|
|
120
|
+
}
|
|
121
|
+
if (command.command === 'template-add') {
|
|
122
|
+
return await runTemplateAdd(command, streams, resolvedEnv);
|
|
123
|
+
}
|
|
124
|
+
if (command.command === 'skill-add') {
|
|
125
|
+
return await runSkillAdd(command, streams, resolvedEnv);
|
|
126
|
+
}
|
|
127
|
+
if (command.command === 'skill-validate') {
|
|
128
|
+
return await runSkillValidate(command, streams, resolvedEnv);
|
|
129
|
+
}
|
|
130
|
+
if (command.command === 'skills') {
|
|
131
|
+
return await runSkills(streams, resolvedEnv);
|
|
132
|
+
}
|
|
133
|
+
if (command.command === 'plugins') {
|
|
134
|
+
return await runPlugins(command, streams, resolvedEnv);
|
|
135
|
+
}
|
|
136
|
+
if (command.command === 'credential') {
|
|
137
|
+
return await runCredential(command, streams, resolvedEnv);
|
|
138
|
+
}
|
|
139
|
+
if (command.command === 'skill-reload') {
|
|
140
|
+
return await runSkillReload(command, streams, resolvedEnv);
|
|
141
|
+
}
|
|
142
|
+
if (command.command === 'restart') {
|
|
143
|
+
return await runRestart(command, streams, resolvedEnv);
|
|
144
|
+
}
|
|
145
|
+
if (command.command === 'schedules') {
|
|
146
|
+
return await runSchedules(command, streams, resolvedEnv);
|
|
147
|
+
}
|
|
148
|
+
if (command.command === 'grants') {
|
|
149
|
+
return await runGrants(command, streams, resolvedEnv);
|
|
150
|
+
}
|
|
151
|
+
if (command.command === 'memory') {
|
|
152
|
+
return await runMemory(command, streams, resolvedEnv);
|
|
153
|
+
}
|
|
154
|
+
if (command.command === 'session') {
|
|
155
|
+
return await runSessionRollover(command, streams, resolvedEnv);
|
|
156
|
+
}
|
|
157
|
+
if (command.command === 'doctor') {
|
|
158
|
+
return await runDoctor(command, streams, resolvedEnv);
|
|
159
|
+
}
|
|
160
|
+
if (command.command === 'logs') {
|
|
161
|
+
return await runLogs(command, streams, resolvedEnv);
|
|
162
|
+
}
|
|
163
|
+
if (command.command === 'service') {
|
|
164
|
+
return await runService(command, streams, resolvedEnv);
|
|
165
|
+
}
|
|
166
|
+
if (command.command === 'update') {
|
|
167
|
+
return await runUpdate(command, streams, resolvedEnv);
|
|
168
|
+
}
|
|
169
|
+
if (command.command === 'chat') {
|
|
170
|
+
return await runChat(command, streams, resolvedEnv);
|
|
171
|
+
}
|
|
172
|
+
if (command.command === 'setup') {
|
|
173
|
+
return await runSetup(command, streams, resolvedEnv);
|
|
174
|
+
}
|
|
175
|
+
if (command.command === 'dashboard') {
|
|
176
|
+
return await runDashboard(command, streams, resolvedEnv);
|
|
177
|
+
}
|
|
178
|
+
if (command.command === 'serve') {
|
|
179
|
+
return await runServe(command, streams, resolvedEnv);
|
|
180
|
+
}
|
|
181
|
+
const runtime = await resolveRuntimeConfig(command, resolvedEnv);
|
|
182
|
+
warnOnUntrustedConfig(runtime, streams);
|
|
183
|
+
await warnOnCredentialOverride(runtime, streams, resolvedEnv);
|
|
184
|
+
if (command.format === 'text') {
|
|
185
|
+
writeLine(streams.stdout, formatRuntimeBanner(runtime));
|
|
186
|
+
}
|
|
187
|
+
const session = await runSingleLoop(command.prompt, streams, {
|
|
188
|
+
events: command.events && command.format === 'text',
|
|
189
|
+
runtime,
|
|
190
|
+
// `--stdin` has already read the terminal, so nothing could take a
|
|
191
|
+
// y/N there — what the parser refuses for an explicit `ask`.
|
|
192
|
+
approvals: command.approvals ?? defaultApprovalMode(resolvedEnv, argv.includes('--stdin')),
|
|
193
|
+
approvalsDefaulted: command.approvals === undefined,
|
|
194
|
+
...(command.maxTurns !== undefined ? { maxTurns: command.maxTurns } : {}),
|
|
195
|
+
...(command.configPath ? { configPath: command.configPath } : {}),
|
|
196
|
+
env: resolvedEnv,
|
|
197
|
+
});
|
|
198
|
+
if (command.format === 'json') {
|
|
199
|
+
writeLine(streams.stdout, JSON.stringify({
|
|
200
|
+
provider: runtime.provider,
|
|
201
|
+
// Replay state (Claude's raw thinking turns) stays in the stored
|
|
202
|
+
// session but never in user-facing output.
|
|
203
|
+
session: redactAnthropicRawTurns(session),
|
|
204
|
+
}, null, 2));
|
|
205
|
+
return 0;
|
|
206
|
+
}
|
|
207
|
+
printSessionSummary(session, streams);
|
|
208
|
+
return 0;
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
212
|
+
writeLine(streams.stderr, `Error: ${message}`);
|
|
213
|
+
writeLine(streams.stderr, '');
|
|
214
|
+
writeLine(streams.stderr, HELP_TEXT);
|
|
215
|
+
return 1;
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/dist/npm.d.ts
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { InstalledVersionReader, PackageInstaller, PackageVersionFetcher } from './environment.ts';
|
|
2
|
+
/** How long `stratus update` waits for npm to answer a version lookup. */
|
|
3
|
+
export declare const VERSION_LOOKUP_TIMEOUT_MS = 15000;
|
|
4
|
+
export declare const defaultPackageVersionFetcher: PackageVersionFetcher;
|
|
5
|
+
/**
|
|
6
|
+
* Dotted-numeric comparison with SemVer's prerelease precedence, enough for
|
|
7
|
+
* this package's own versions: positive when `a` is newer than `b`.
|
|
8
|
+
* Anything unparseable in a segment counts as zero rather than throwing — a
|
|
9
|
+
* weird registry answer must not crash the update that would fix things.
|
|
10
|
+
*
|
|
11
|
+
* The prerelease half is not decoration. Split on dots alone, `0.11.2-beta.1`
|
|
12
|
+
* parses as a *fourth* numeric segment and so reads as newer than the stable
|
|
13
|
+
* `0.11.2` that supersedes it — which left a prerelease companion behind and
|
|
14
|
+
* stopped a prerelease CLI from ever seeing the stable release as an upgrade.
|
|
15
|
+
* SemVer's rule is the opposite and is the one applied here: a version
|
|
16
|
+
* carrying a prerelease is lower than the same version without one, and two
|
|
17
|
+
* prereleases compare identifier by identifier, numeric ones numerically and
|
|
18
|
+
* below alphanumeric ones.
|
|
19
|
+
*/
|
|
20
|
+
export declare const compareVersions: (a: string, b: string) => number;
|
|
21
|
+
/**
|
|
22
|
+
* Whether spawning npm needs a shell on this platform.
|
|
23
|
+
*
|
|
24
|
+
* On Windows npm is `npm.cmd`, a batch file: a bare `npm` does not exist as
|
|
25
|
+
* an executable there (PATHEXT is a shell's job, not spawn's), and naming
|
|
26
|
+
* the `.cmd` directly has thrown EINVAL since the fix for CVE-2024-27980 —
|
|
27
|
+
* both land in the caller's error handler, so a Windows setup would report
|
|
28
|
+
* that it could not install and leave Slack and the dashboard missing.
|
|
29
|
+
*
|
|
30
|
+
* `shell: true` concatenates the arguments without escaping — Node 24
|
|
31
|
+
* deprecates the pattern as DEP0190 for exactly that reason — so what may
|
|
32
|
+
* reach it is fenced by `isInstallablePackageName` below rather than by an
|
|
33
|
+
* argument about where the names come from. That argument used to be
|
|
34
|
+
* "every name here is a constant in the CLI's own source", and it stopped
|
|
35
|
+
* being true
|
|
36
|
+
* the moment the Plugins menu started listing package names read from a
|
|
37
|
+
* config.
|
|
38
|
+
*/
|
|
39
|
+
export declare const npmNeedsShell: (platform: NodeJS.Platform) => boolean;
|
|
40
|
+
export declare const isPackageName: (name: string) => boolean;
|
|
41
|
+
/**
|
|
42
|
+
* A package name, optionally with a plain version — what npm may be handed.
|
|
43
|
+
*
|
|
44
|
+
* A wider question than `isPackageName` and a different one: the updater
|
|
45
|
+
* installs `@stratusagent/cli@latest`, which is a valid thing to install and
|
|
46
|
+
* an invalid thing to import. Using one predicate for both let a versioned
|
|
47
|
+
* `plugins` key through the menu's install offer.
|
|
48
|
+
*
|
|
49
|
+
* The version half is deliberately not npm's full range syntax: `^1.0.0` is
|
|
50
|
+
* a valid range and `^` is cmd.exe's escape character. Only the plain forms
|
|
51
|
+
* this CLI actually passes are accepted, and a range that needs more is a
|
|
52
|
+
* thing to install by hand.
|
|
53
|
+
*/
|
|
54
|
+
export declare const isInstallableSpecifier: (specifier: string) => boolean;
|
|
55
|
+
export declare const defaultPackageInstaller: PackageInstaller;
|
|
56
|
+
/**
|
|
57
|
+
* What `stratus update` reads to learn which version of a companion this
|
|
58
|
+
* machine actually has. Through `@stratusagent/plugins`, which already owns
|
|
59
|
+
* the bounded walk from a resolved specifier to its package.json — a second
|
|
60
|
+
* copy here would drift from it, and this one would be the copy that
|
|
61
|
+
* decides whether somebody's Slack adapter gets upgraded.
|
|
62
|
+
*/
|
|
63
|
+
export declare const defaultInstalledVersionReader: InstalledVersionReader;
|
|
64
|
+
export declare const CLI_VERSION = "0.11.4";
|
|
65
|
+
export declare const CLI_PACKAGE_NAME = "@stratusagent/cli";
|
|
66
|
+
//# sourceMappingURL=npm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm.d.ts","sourceRoot":"","sources":["../src/npm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EAEtB,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,0EAA0E;AAC1E,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD,eAAO,MAAM,4BAA4B,EAAE,qBA4B1C,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,eAAe,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAsDtD,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,CAAC,QAAQ,KAAG,OAA+B,CAAC;AAE1F,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,OAC0C,CAAC;AAExF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB,GAAI,WAAW,MAAM,KAAG,OAW1D,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,gBAwCrC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,EAAE,sBAG3C,CAAC;AAEF,eAAO,MAAM,WAAW,WAAW,CAAC;AAEpC,eAAO,MAAM,gBAAgB,sBAAsB,CAAC"}
|