@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.
Files changed (158) hide show
  1. package/README.md +14 -8
  2. package/dist/approvals.d.ts +93 -0
  3. package/dist/approvals.d.ts.map +1 -0
  4. package/dist/approvals.js +368 -0
  5. package/dist/approvals.js.map +1 -0
  6. package/dist/commands/agent-new.d.ts +22 -0
  7. package/dist/commands/agent-new.d.ts.map +1 -0
  8. package/dist/commands/agent-new.js +159 -0
  9. package/dist/commands/agent-new.js.map +1 -0
  10. package/dist/commands/agents.d.ts +4 -0
  11. package/dist/commands/agents.d.ts.map +1 -0
  12. package/dist/commands/agents.js +90 -0
  13. package/dist/commands/agents.js.map +1 -0
  14. package/dist/commands/chat.d.ts +4 -0
  15. package/dist/commands/chat.d.ts.map +1 -0
  16. package/dist/commands/chat.js +227 -0
  17. package/dist/commands/chat.js.map +1 -0
  18. package/dist/commands/credential.d.ts +22 -0
  19. package/dist/commands/credential.d.ts.map +1 -0
  20. package/dist/commands/credential.js +93 -0
  21. package/dist/commands/credential.js.map +1 -0
  22. package/dist/commands/dashboard.d.ts +14 -0
  23. package/dist/commands/dashboard.d.ts.map +1 -0
  24. package/dist/commands/dashboard.js +195 -0
  25. package/dist/commands/dashboard.js.map +1 -0
  26. package/dist/commands/doctor.d.ts +40 -0
  27. package/dist/commands/doctor.d.ts.map +1 -0
  28. package/dist/commands/doctor.js +376 -0
  29. package/dist/commands/doctor.js.map +1 -0
  30. package/dist/commands/grants.d.ts +19 -0
  31. package/dist/commands/grants.d.ts.map +1 -0
  32. package/dist/commands/grants.js +128 -0
  33. package/dist/commands/grants.js.map +1 -0
  34. package/dist/commands/logs.d.ts +9 -0
  35. package/dist/commands/logs.d.ts.map +1 -0
  36. package/dist/commands/logs.js +58 -0
  37. package/dist/commands/logs.js.map +1 -0
  38. package/dist/commands/memory.d.ts +20 -0
  39. package/dist/commands/memory.d.ts.map +1 -0
  40. package/dist/commands/memory.js +110 -0
  41. package/dist/commands/memory.js.map +1 -0
  42. package/dist/commands/plugins.d.ts +103 -0
  43. package/dist/commands/plugins.d.ts.map +1 -0
  44. package/dist/commands/plugins.js +386 -0
  45. package/dist/commands/plugins.js.map +1 -0
  46. package/dist/commands/restart.d.ts +4 -0
  47. package/dist/commands/restart.d.ts.map +1 -0
  48. package/dist/commands/restart.js +25 -0
  49. package/dist/commands/restart.js.map +1 -0
  50. package/dist/commands/schedules.d.ts +11 -0
  51. package/dist/commands/schedules.d.ts.map +1 -0
  52. package/dist/commands/schedules.js +50 -0
  53. package/dist/commands/schedules.js.map +1 -0
  54. package/dist/commands/serve.d.ts +4 -0
  55. package/dist/commands/serve.d.ts.map +1 -0
  56. package/dist/commands/serve.js +633 -0
  57. package/dist/commands/serve.js.map +1 -0
  58. package/dist/commands/service.d.ts +9 -0
  59. package/dist/commands/service.d.ts.map +1 -0
  60. package/dist/commands/service.js +97 -0
  61. package/dist/commands/service.js.map +1 -0
  62. package/dist/commands/session.d.ts +9 -0
  63. package/dist/commands/session.d.ts.map +1 -0
  64. package/dist/commands/session.js +25 -0
  65. package/dist/commands/session.js.map +1 -0
  66. package/dist/commands/setup.d.ts +5 -0
  67. package/dist/commands/setup.d.ts.map +1 -0
  68. package/dist/commands/setup.js +2467 -0
  69. package/dist/commands/setup.js.map +1 -0
  70. package/dist/commands/skills.d.ts +15 -0
  71. package/dist/commands/skills.d.ts.map +1 -0
  72. package/dist/commands/skills.js +272 -0
  73. package/dist/commands/skills.js.map +1 -0
  74. package/dist/commands/template.d.ts +4 -0
  75. package/dist/commands/template.d.ts.map +1 -0
  76. package/dist/commands/template.js +593 -0
  77. package/dist/commands/template.js.map +1 -0
  78. package/dist/commands/update.d.ts +21 -0
  79. package/dist/commands/update.d.ts.map +1 -0
  80. package/dist/commands/update.js +291 -0
  81. package/dist/commands/update.js.map +1 -0
  82. package/dist/daemon.d.ts +74 -0
  83. package/dist/daemon.d.ts.map +1 -0
  84. package/dist/daemon.js +192 -0
  85. package/dist/daemon.js.map +1 -0
  86. package/dist/environment.d.ts +114 -0
  87. package/dist/environment.d.ts.map +1 -0
  88. package/dist/environment.js +2 -0
  89. package/dist/environment.js.map +1 -0
  90. package/dist/events.d.ts +17 -0
  91. package/dist/events.d.ts.map +1 -0
  92. package/dist/events.js +87 -0
  93. package/dist/events.js.map +1 -0
  94. package/dist/help.d.ts +2 -0
  95. package/dist/help.d.ts.map +1 -0
  96. package/dist/help.js +272 -0
  97. package/dist/help.js.map +1 -0
  98. package/dist/index.d.ts +32 -624
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +39 -6981
  101. package/dist/index.js.map +1 -1
  102. package/dist/io.d.ts +16 -0
  103. package/dist/io.d.ts.map +1 -0
  104. package/dist/io.js +45 -0
  105. package/dist/io.js.map +1 -0
  106. package/dist/loaders.d.ts +31 -0
  107. package/dist/loaders.d.ts.map +1 -0
  108. package/dist/loaders.js +56 -0
  109. package/dist/loaders.js.map +1 -0
  110. package/dist/main.d.ts +8 -0
  111. package/dist/main.d.ts.map +1 -0
  112. package/dist/main.js +218 -0
  113. package/dist/main.js.map +1 -0
  114. package/dist/npm.d.ts +66 -0
  115. package/dist/npm.d.ts.map +1 -0
  116. package/dist/npm.js +201 -0
  117. package/dist/npm.js.map +1 -0
  118. package/dist/parse.d.ts +245 -0
  119. package/dist/parse.d.ts.map +1 -0
  120. package/dist/parse.js +1098 -0
  121. package/dist/parse.js.map +1 -0
  122. package/dist/plugin-catalog.d.ts +44 -0
  123. package/dist/plugin-catalog.d.ts.map +1 -0
  124. package/dist/plugin-catalog.js +70 -0
  125. package/dist/plugin-catalog.js.map +1 -0
  126. package/dist/preflight.d.ts +60 -0
  127. package/dist/preflight.d.ts.map +1 -0
  128. package/dist/preflight.js +102 -0
  129. package/dist/preflight.js.map +1 -0
  130. package/dist/prompter.d.ts +84 -0
  131. package/dist/prompter.d.ts.map +1 -0
  132. package/dist/prompter.js +347 -0
  133. package/dist/prompter.js.map +1 -0
  134. package/dist/roster.d.ts +57 -0
  135. package/dist/roster.d.ts.map +1 -0
  136. package/dist/roster.js +78 -0
  137. package/dist/roster.js.map +1 -0
  138. package/dist/runtime.d.ts +76 -0
  139. package/dist/runtime.d.ts.map +1 -0
  140. package/dist/runtime.js +372 -0
  141. package/dist/runtime.js.map +1 -0
  142. package/dist/slack.d.ts +26 -0
  143. package/dist/slack.d.ts.map +1 -0
  144. package/dist/slack.js +113 -0
  145. package/dist/slack.js.map +1 -0
  146. package/dist/source.d.ts +24 -0
  147. package/dist/source.d.ts.map +1 -0
  148. package/dist/source.js +80 -0
  149. package/dist/source.js.map +1 -0
  150. package/dist/supervisor.d.ts +69 -0
  151. package/dist/supervisor.d.ts.map +1 -0
  152. package/dist/supervisor.js +218 -0
  153. package/dist/supervisor.js.map +1 -0
  154. package/dist/trusted-config.d.ts +84 -0
  155. package/dist/trusted-config.d.ts.map +1 -0
  156. package/dist/trusted-config.js +159 -0
  157. package/dist/trusted-config.js.map +1 -0
  158. package/package.json +27 -23
package/dist/npm.js ADDED
@@ -0,0 +1,201 @@
1
+ /** How long `stratus update` waits for npm to answer a version lookup. */
2
+ export const VERSION_LOOKUP_TIMEOUT_MS = 15_000;
3
+ export const defaultPackageVersionFetcher = async (packageName) => {
4
+ const { spawn } = await import('node:child_process');
5
+ return new Promise((resolve) => {
6
+ const child = spawn('npm', ['view', packageName, 'version'], {
7
+ stdio: ['ignore', 'pipe', 'pipe'],
8
+ shell: npmNeedsShell(process.platform),
9
+ });
10
+ let stdout = '';
11
+ let settled = false;
12
+ const finish = (value) => {
13
+ if (settled) {
14
+ return;
15
+ }
16
+ settled = true;
17
+ clearTimeout(timer);
18
+ resolve(value);
19
+ };
20
+ // An unreachable registry must degrade to "unknown", never hang the
21
+ // update on someone's terminal.
22
+ const timer = setTimeout(() => {
23
+ child.kill('SIGKILL');
24
+ finish(undefined);
25
+ }, VERSION_LOOKUP_TIMEOUT_MS);
26
+ timer.unref?.();
27
+ child.stdout?.on('data', (chunk) => { stdout += chunk.toString('utf8'); });
28
+ child.once('error', () => finish(undefined));
29
+ child.once('close', (code) => finish(code === 0 && stdout.trim().length > 0 ? stdout.trim() : undefined));
30
+ });
31
+ };
32
+ /**
33
+ * Dotted-numeric comparison with SemVer's prerelease precedence, enough for
34
+ * this package's own versions: positive when `a` is newer than `b`.
35
+ * Anything unparseable in a segment counts as zero rather than throwing — a
36
+ * weird registry answer must not crash the update that would fix things.
37
+ *
38
+ * The prerelease half is not decoration. Split on dots alone, `0.11.2-beta.1`
39
+ * parses as a *fourth* numeric segment and so reads as newer than the stable
40
+ * `0.11.2` that supersedes it — which left a prerelease companion behind and
41
+ * stopped a prerelease CLI from ever seeing the stable release as an upgrade.
42
+ * SemVer's rule is the opposite and is the one applied here: a version
43
+ * carrying a prerelease is lower than the same version without one, and two
44
+ * prereleases compare identifier by identifier, numeric ones numerically and
45
+ * below alphanumeric ones.
46
+ */
47
+ export const compareVersions = (a, b) => {
48
+ const numeric = (part) => {
49
+ const value = Number.parseInt(part, 10);
50
+ return Number.isInteger(value) ? value : 0;
51
+ };
52
+ const split = (value) => {
53
+ // Build metadata never affects precedence, and is dropped before the
54
+ // prerelease is found so a `+` cannot be mistaken for part of one.
55
+ const plain = (value.trim().replace(/^v/, '').split('+', 1)[0] ?? '');
56
+ const dash = plain.indexOf('-');
57
+ return {
58
+ core: (dash === -1 ? plain : plain.slice(0, dash)).split('.').map(numeric),
59
+ pre: dash === -1 ? [] : plain.slice(dash + 1).split('.').filter((part) => part.length > 0),
60
+ };
61
+ };
62
+ const left = split(a);
63
+ const right = split(b);
64
+ for (let index = 0; index < Math.max(left.core.length, right.core.length); index += 1) {
65
+ const difference = (left.core[index] ?? 0) - (right.core[index] ?? 0);
66
+ if (difference !== 0) {
67
+ return difference;
68
+ }
69
+ }
70
+ // Same release: the one without a prerelease is the released one.
71
+ if (left.pre.length === 0 || right.pre.length === 0) {
72
+ return right.pre.length - left.pre.length;
73
+ }
74
+ for (let index = 0; index < Math.max(left.pre.length, right.pre.length); index += 1) {
75
+ const one = left.pre[index];
76
+ const other = right.pre[index];
77
+ // A prerelease that runs out of identifiers first is the lower one:
78
+ // `1.0.0-beta` precedes `1.0.0-beta.1`.
79
+ if (one === undefined || other === undefined) {
80
+ return (one === undefined ? 0 : 1) - (other === undefined ? 0 : 1);
81
+ }
82
+ const oneNumeric = /^\d+$/.test(one);
83
+ const otherNumeric = /^\d+$/.test(other);
84
+ if (oneNumeric && otherNumeric) {
85
+ const difference = numeric(one) - numeric(other);
86
+ if (difference !== 0) {
87
+ return difference;
88
+ }
89
+ continue;
90
+ }
91
+ // Numeric identifiers always rank below alphanumeric ones.
92
+ if (oneNumeric !== otherNumeric) {
93
+ return oneNumeric ? -1 : 1;
94
+ }
95
+ const difference = one < other ? -1 : one > other ? 1 : 0;
96
+ if (difference !== 0) {
97
+ return difference;
98
+ }
99
+ }
100
+ return 0;
101
+ };
102
+ /**
103
+ * Whether spawning npm needs a shell on this platform.
104
+ *
105
+ * On Windows npm is `npm.cmd`, a batch file: a bare `npm` does not exist as
106
+ * an executable there (PATHEXT is a shell's job, not spawn's), and naming
107
+ * the `.cmd` directly has thrown EINVAL since the fix for CVE-2024-27980 —
108
+ * both land in the caller's error handler, so a Windows setup would report
109
+ * that it could not install and leave Slack and the dashboard missing.
110
+ *
111
+ * `shell: true` concatenates the arguments without escaping — Node 24
112
+ * deprecates the pattern as DEP0190 for exactly that reason — so what may
113
+ * reach it is fenced by `isInstallablePackageName` below rather than by an
114
+ * argument about where the names come from. That argument used to be
115
+ * "every name here is a constant in the CLI's own source", and it stopped
116
+ * being true
117
+ * the moment the Plugins menu started listing package names read from a
118
+ * config.
119
+ */
120
+ export const npmNeedsShell = (platform) => platform === 'win32';
121
+ export const isPackageName = (name) => name.length <= 214 && /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/.test(name);
122
+ /**
123
+ * A package name, optionally with a plain version — what npm may be handed.
124
+ *
125
+ * A wider question than `isPackageName` and a different one: the updater
126
+ * installs `@stratusagent/cli@latest`, which is a valid thing to install and
127
+ * an invalid thing to import. Using one predicate for both let a versioned
128
+ * `plugins` key through the menu's install offer.
129
+ *
130
+ * The version half is deliberately not npm's full range syntax: `^1.0.0` is
131
+ * a valid range and `^` is cmd.exe's escape character. Only the plain forms
132
+ * this CLI actually passes are accepted, and a range that needs more is a
133
+ * thing to install by hand.
134
+ */
135
+ export const isInstallableSpecifier = (specifier) => {
136
+ const scoped = specifier.startsWith('@');
137
+ // Split on the `@` that introduces a version, never the one that opens a
138
+ // scope — `@scope/pkg` has both and only the first is part of the name.
139
+ const at = specifier.indexOf('@', scoped ? 1 : 0);
140
+ const name = at === -1 ? specifier : specifier.slice(0, at);
141
+ const version = at === -1 ? undefined : specifier.slice(at + 1);
142
+ if (!isPackageName(name)) {
143
+ return false;
144
+ }
145
+ return version === undefined || /^[a-z0-9][a-z0-9.-]*$/.test(version);
146
+ };
147
+ export const defaultPackageInstaller = async (packages) => {
148
+ const { spawn } = await import('node:child_process');
149
+ // The fence, at the one place that touches a shell, so every caller is
150
+ // behind it — including ones added later, which is how the old invariant
151
+ // was lost.
152
+ const rejected = packages.filter((entry) => !isInstallableSpecifier(entry));
153
+ if (rejected.length > 0) {
154
+ return {
155
+ ok: false,
156
+ message: `${rejected.join(', ')} ${rejected.length === 1 ? 'is not a package name' : 'are not package names'} npm can install. `
157
+ + 'Fix the key in your config, or install it yourself.',
158
+ };
159
+ }
160
+ return new Promise((resolve) => {
161
+ // npm's own output is inherited rather than captured: a global install
162
+ // runs for tens of seconds, and a silent one is indistinguishable from
163
+ // a setup that has hung. stdin is NOT inherited — the setup prompter
164
+ // owns it, and two readers on one stream race for the same bytes.
165
+ const child = spawn('npm', ['install', '-g', ...packages], {
166
+ stdio: ['ignore', 'inherit', 'inherit'],
167
+ shell: npmNeedsShell(process.platform),
168
+ });
169
+ // `error` and `close` can both fire — a spawn that fails still closes.
170
+ let settled = false;
171
+ const finish = (result) => {
172
+ if (settled) {
173
+ return;
174
+ }
175
+ settled = true;
176
+ resolve(result);
177
+ };
178
+ child.once('error', (error) => {
179
+ finish({ ok: false, message: error.message });
180
+ });
181
+ child.once('close', (code) => {
182
+ finish(code === 0
183
+ ? { ok: true, message: '' }
184
+ : { ok: false, message: `npm exited with code ${code ?? 'unknown'}` });
185
+ });
186
+ });
187
+ };
188
+ /**
189
+ * What `stratus update` reads to learn which version of a companion this
190
+ * machine actually has. Through `@stratusagent/plugins`, which already owns
191
+ * the bounded walk from a resolved specifier to its package.json — a second
192
+ * copy here would drift from it, and this one would be the copy that
193
+ * decides whether somebody's Slack adapter gets upgraded.
194
+ */
195
+ export const defaultInstalledVersionReader = async (specifier) => {
196
+ const { installedPackageVersion } = await import('@stratusagent/plugins');
197
+ return installedPackageVersion(specifier, { resolve: (target) => import.meta.resolve(target) });
198
+ };
199
+ export const CLI_VERSION = '0.11.4';
200
+ export const CLI_PACKAGE_NAME = '@stratusagent/cli';
201
+ //# sourceMappingURL=npm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm.js","sourceRoot":"","sources":["../src/npm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,245 @@
1
+ import { type TrustLevel } from '@stratusagent/core';
2
+ import { type StratusProviderName } from '@stratusagent/state';
3
+ import type { CliEnvironment } from './environment.ts';
4
+ export type CliProviderName = StratusProviderName;
5
+ export type CliApprovalMode = 'always' | 'ask' | 'gated' | 'never';
6
+ export interface ParsedRunCommand {
7
+ command: 'run';
8
+ prompt: string;
9
+ provider?: CliProviderName;
10
+ model?: string;
11
+ baseUrl?: string;
12
+ configPath?: string;
13
+ /** Path to a soul file defining the agent to run as. */
14
+ soul?: string;
15
+ format: 'text' | 'json';
16
+ events: boolean;
17
+ /** Absent when `--approvals` was not given: see `defaultApprovalMode`. */
18
+ approvals?: CliApprovalMode;
19
+ maxTurns?: number;
20
+ }
21
+ export interface ParsedDashboardCommand {
22
+ command: 'dashboard';
23
+ port?: number;
24
+ /**
25
+ * Present only when `--host` was actually given.
26
+ *
27
+ * A defaulted string here would be indistinguishable from an explicit
28
+ * `--host 127.0.0.1`, and the two mean opposite things when a trusted
29
+ * config says `api.host: "0.0.0.0"`: absent means "let the config decide",
30
+ * while explicit means "bind loopback, whatever the config says". Collapsing
31
+ * them exposed the API on every interface to an operator who had just asked
32
+ * for the opposite.
33
+ */
34
+ host?: string;
35
+ openBrowser: boolean;
36
+ }
37
+ export interface ParsedSetupCommand {
38
+ command: 'setup';
39
+ configPath?: string;
40
+ }
41
+ export interface ParsedAgentNewCommand {
42
+ command: 'agent-new';
43
+ name?: string;
44
+ instructions?: string;
45
+ format: 'text' | 'json' | 'soul';
46
+ }
47
+ export interface ParsedChatCommand {
48
+ command: 'chat';
49
+ provider?: CliProviderName;
50
+ model?: string;
51
+ baseUrl?: string;
52
+ configPath?: string;
53
+ /** Path to a soul file defining the agent to chat with. */
54
+ soul?: string;
55
+ events: boolean;
56
+ /** Absent when `--approvals` was not given: see `defaultApprovalMode`. */
57
+ approvals?: CliApprovalMode;
58
+ maxTurns?: number;
59
+ }
60
+ export interface ParsedTemplateAddCommand {
61
+ command: 'template-add';
62
+ /** A GitHub `owner/repo`, a git URL, or a local path. */
63
+ source: string;
64
+ /** Skip the review and install straight away. */
65
+ yes?: boolean;
66
+ /** Replace an agent or skill already installed under the same name. */
67
+ force?: boolean;
68
+ }
69
+ export interface ParsedSkillAddCommand {
70
+ command: 'skill-add';
71
+ /** A GitHub `owner/repo`, a git URL, or a local path. */
72
+ source: string;
73
+ /** Install only these ids (repeatable --skill). */
74
+ skillIds?: string[];
75
+ /** Replace an already-installed id instead of refusing it. */
76
+ force?: boolean;
77
+ /** Enable the installed skills in this agent's soul afterwards. */
78
+ agentId?: string;
79
+ /** Tell a running daemon to reload its skills afterwards. Default true; `--no-reload` sets false. */
80
+ reload?: boolean;
81
+ }
82
+ export interface ParsedSkillValidateCommand {
83
+ command: 'skill-validate';
84
+ /** A skill directory, a directory of skills, or an installed skill's id. */
85
+ target: string;
86
+ }
87
+ export interface ParsedPluginsCommand {
88
+ command: 'plugins';
89
+ format: 'text' | 'json';
90
+ /** The config whose plugins block to read, when not the default. */
91
+ configPath?: string;
92
+ }
93
+ export interface ParsedSkillsCommand {
94
+ command: 'skills';
95
+ }
96
+ /**
97
+ * What a credential name may be: the two conventions in use, and nothing
98
+ * that would be awkward in a soul's `credentials:` list — `search.apiKey`
99
+ * and environment-style `SLACK_TOKEN`. Leading letter required, which also
100
+ * happens to exclude `__proto__`; the store does not *rely* on that (it
101
+ * keys prototype-free maps), because a credentials file can be written by
102
+ * something other than this command.
103
+ */
104
+ export declare const CREDENTIAL_NAME_PATTERN: RegExp;
105
+ export interface ParsedCredentialCommand {
106
+ command: 'credential';
107
+ action: 'set' | 'list' | 'remove';
108
+ /** The credential name — `search.apiKey` and whatever the ecosystem asks for next. */
109
+ name?: string;
110
+ /** Store or remove this agent's own entry rather than the fleet's shared one. */
111
+ agentId?: string;
112
+ }
113
+ export interface ParsedSkillReloadCommand {
114
+ command: 'skill-reload';
115
+ /** A daemon's control API URL; default: the one `~/.stratus/gateway.json` names. */
116
+ gateway?: string;
117
+ token?: string;
118
+ }
119
+ export interface ParsedRestartCommand {
120
+ command: 'restart';
121
+ /** For the daemon's log. */
122
+ reason?: string;
123
+ /** How long the daemon lets in-flight turns finish, in milliseconds. */
124
+ drainTimeoutMs?: number;
125
+ gateway?: string;
126
+ token?: string;
127
+ }
128
+ export interface ParsedAgentsCommand {
129
+ command: 'agents';
130
+ format: 'text' | 'json';
131
+ /**
132
+ * Ask a running gateway instead of resolving locally. The first
133
+ * remote-consuming command: the same listing, rendered from the control
134
+ * API's answer rather than from this machine's files.
135
+ */
136
+ gateway?: string;
137
+ /** Bearer token override, for a gateway whose token file is not local. */
138
+ token?: string;
139
+ }
140
+ export interface ParsedSchedulesCommand {
141
+ command: 'schedules';
142
+ action: 'list' | 'cancel';
143
+ /** cancel only: which schedule. */
144
+ scheduleId?: string;
145
+ format: 'text' | 'json';
146
+ }
147
+ export interface ParsedGrantsCommand {
148
+ command: 'grants';
149
+ action: 'list' | 'revoke';
150
+ agentId: string;
151
+ /** revoke: exactly one of the three names what goes. */
152
+ tool?: string;
153
+ /** The scope as `stratus grants` lists it — `git push`. */
154
+ scope?: string;
155
+ origin?: string;
156
+ format: 'text' | 'json';
157
+ gateway?: string;
158
+ token?: string;
159
+ }
160
+ export interface ParsedMemoryCommand {
161
+ command: 'memory';
162
+ action: 'list' | 'reassert';
163
+ agentId: string;
164
+ /** list: show only entries at this label. reassert: the label to record. */
165
+ trust?: TrustLevel;
166
+ /** reassert: the entries to re-label, by id. */
167
+ ids: string[];
168
+ /** reassert: every live entry currently reading `unknown` — the upgrade case. */
169
+ allUnknown: boolean;
170
+ format: 'text' | 'json';
171
+ }
172
+ export interface ParsedSessionCommand {
173
+ command: 'session';
174
+ action: 'rollover';
175
+ sessionId: string;
176
+ gateway?: string;
177
+ token?: string;
178
+ }
179
+ export interface ParsedDoctorCommand {
180
+ command: 'doctor';
181
+ format: 'text' | 'json';
182
+ configPath?: string;
183
+ }
184
+ export interface ParsedUpdateCommand {
185
+ command: 'update';
186
+ /** Report what an update would do — version, migrations, unit health — without doing any of it. */
187
+ check: boolean;
188
+ }
189
+ export interface ParsedServiceCommand {
190
+ command: 'service';
191
+ action: 'install' | 'uninstall' | 'status' | 'start' | 'stop';
192
+ /** install only: start automatically at login. Defaults to true. */
193
+ runAtLogin?: boolean;
194
+ /** install only: the config the managed daemon should load. */
195
+ configPath?: string;
196
+ }
197
+ export interface ParsedLogsCommand {
198
+ command: 'logs';
199
+ /** Keep streaming new records instead of exiting after the backlog. */
200
+ follow: boolean;
201
+ /** How many recent records to show before following. */
202
+ limit: number;
203
+ agentId?: string;
204
+ sessionId?: string;
205
+ format: 'text' | 'json';
206
+ }
207
+ export type ServeApprovalMode = 'headless' | 'remote';
208
+ export interface ParsedServeCommand {
209
+ command: 'serve';
210
+ configPath?: string;
211
+ /** Overrides `approvals.mode` in the config file. */
212
+ approvals?: ServeApprovalMode;
213
+ /** Watchdog idle timeout in milliseconds. 0 disables. */
214
+ idleTimeoutMs?: number;
215
+ events: boolean;
216
+ /** Write the structured log to ~/.stratus/logs. Defaults to true. */
217
+ logToFile?: boolean;
218
+ /** Serve the control API. Defaults to true when the package is installed. */
219
+ api?: boolean;
220
+ /** Overrides `api.port` in the config file. */
221
+ apiPort?: number;
222
+ /** Overrides `api.host` in the config file. */
223
+ apiHost?: string;
224
+ }
225
+ export interface ParsedHelpCommand {
226
+ command: 'help';
227
+ }
228
+ export interface ParsedVersionCommand {
229
+ command: 'version';
230
+ }
231
+ export type ParsedCommand = ParsedRunCommand | ParsedChatCommand | ParsedDashboardCommand | ParsedSetupCommand | ParsedAgentNewCommand | ParsedAgentsCommand | ParsedSkillAddCommand | ParsedTemplateAddCommand | ParsedSkillValidateCommand | ParsedPluginsCommand | ParsedSkillsCommand | ParsedSkillReloadCommand | ParsedCredentialCommand | ParsedRestartCommand | ParsedSchedulesCommand | ParsedGrantsCommand | ParsedMemoryCommand | ParsedSessionCommand | ParsedDoctorCommand | ParsedLogsCommand | ParsedUpdateCommand | ParsedServiceCommand | ParsedServeCommand | ParsedHelpCommand | ParsedVersionCommand;
232
+ export declare const parseCommand: (argv: string[], env?: CliEnvironment) => ParsedCommand;
233
+ /**
234
+ * The approval mode a run or chat uses when `--approvals` was not given.
235
+ *
236
+ * At a terminal the person is right there, so a gated call asks and a
237
+ * safe one runs, which is `gated` — the old default of `always` ran
238
+ * `shell.run` on whatever a page or a soul talked the model into, with
239
+ * nobody told. Anywhere else — a pipe, a script, `--stdin`, where the
240
+ * prompt already consumed the terminal — nobody can answer a y/N, and the
241
+ * run keeps its unattended behavior, saying so once on stderr when a
242
+ * gated call runs (see `createApprovalPolicy`).
243
+ */
244
+ export declare const defaultApprovalMode: (env: CliEnvironment, promptFromStdin?: boolean) => CliApprovalMode;
245
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}