@memberjunction/cli 6.1.0-edge.4 ā 6.1.0-edge.5
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 +81 -0
- package/dist/commands/ai/actions/list.d.ts +2 -1
- package/dist/commands/ai/actions/list.d.ts.map +1 -1
- package/dist/commands/ai/actions/list.js +12 -3
- package/dist/commands/ai/actions/list.js.map +1 -1
- package/dist/commands/ai/actions/run.d.ts +7 -6
- package/dist/commands/ai/actions/run.d.ts.map +1 -1
- package/dist/commands/ai/actions/run.js +15 -16
- package/dist/commands/ai/actions/run.js.map +1 -1
- package/dist/commands/ai/agents/list.d.ts +2 -1
- package/dist/commands/ai/agents/list.d.ts.map +1 -1
- package/dist/commands/ai/agents/list.js +12 -3
- package/dist/commands/ai/agents/list.js.map +1 -1
- package/dist/commands/ai/agents/run.d.ts +7 -6
- package/dist/commands/ai/agents/run.d.ts.map +1 -1
- package/dist/commands/ai/agents/run.js +27 -5
- package/dist/commands/ai/agents/run.js.map +1 -1
- package/dist/commands/ai/audit/agent-run.d.ts +15 -14
- package/dist/commands/ai/audit/agent-run.d.ts.map +1 -1
- package/dist/commands/ai/audit/agent-run.js +18 -6
- package/dist/commands/ai/audit/agent-run.js.map +1 -1
- package/dist/commands/ai/prompts/run.d.ts +10 -9
- package/dist/commands/ai/prompts/run.d.ts.map +1 -1
- package/dist/commands/ai/prompts/run.js +12 -3
- package/dist/commands/ai/prompts/run.js.map +1 -1
- package/dist/commands/ai/usage.d.ts +7 -0
- package/dist/commands/ai/usage.d.ts.map +1 -0
- package/dist/commands/ai/usage.js +10 -0
- package/dist/commands/ai/usage.js.map +1 -0
- package/dist/commands/app/check-updates.d.ts.map +1 -1
- package/dist/commands/app/check-updates.js +55 -17
- package/dist/commands/app/check-updates.js.map +1 -1
- package/dist/commands/app/remove.d.ts.map +1 -1
- package/dist/commands/app/remove.js +12 -4
- package/dist/commands/app/remove.js.map +1 -1
- package/dist/commands/app/usage.d.ts +7 -0
- package/dist/commands/app/usage.d.ts.map +1 -0
- package/dist/commands/app/usage.js +10 -0
- package/dist/commands/app/usage.js.map +1 -0
- package/dist/commands/artifacts/usage.d.ts +7 -0
- package/dist/commands/artifacts/usage.d.ts.map +1 -0
- package/dist/commands/artifacts/usage.js +10 -0
- package/dist/commands/artifacts/usage.js.map +1 -0
- package/dist/commands/baseline/usage.d.ts +7 -0
- package/dist/commands/baseline/usage.d.ts.map +1 -0
- package/dist/commands/baseline/usage.js +10 -0
- package/dist/commands/baseline/usage.js.map +1 -0
- package/dist/commands/bump/usage.d.ts +7 -0
- package/dist/commands/bump/usage.d.ts.map +1 -0
- package/dist/commands/bump/usage.js +10 -0
- package/dist/commands/bump/usage.js.map +1 -0
- package/dist/commands/bundle/usage.d.ts +7 -0
- package/dist/commands/bundle/usage.d.ts.map +1 -0
- package/dist/commands/bundle/usage.js +10 -0
- package/dist/commands/bundle/usage.js.map +1 -0
- package/dist/commands/clean/usage.d.ts +7 -0
- package/dist/commands/clean/usage.d.ts.map +1 -0
- package/dist/commands/clean/usage.js +10 -0
- package/dist/commands/clean/usage.js.map +1 -0
- package/dist/commands/dbdoc/usage.d.ts +7 -0
- package/dist/commands/dbdoc/usage.d.ts.map +1 -0
- package/dist/commands/dbdoc/usage.js +10 -0
- package/dist/commands/dbdoc/usage.js.map +1 -0
- package/dist/commands/dev/workspace/index.d.ts.map +1 -1
- package/dist/commands/dev/workspace/index.js +7 -2
- package/dist/commands/dev/workspace/index.js.map +1 -1
- package/dist/commands/doctor/usage.d.ts +7 -0
- package/dist/commands/doctor/usage.d.ts.map +1 -0
- package/dist/commands/doctor/usage.js +10 -0
- package/dist/commands/doctor/usage.js.map +1 -0
- package/dist/commands/install/index.d.ts +20 -0
- package/dist/commands/install/index.d.ts.map +1 -1
- package/dist/commands/install/index.js +80 -10
- package/dist/commands/install/index.js.map +1 -1
- package/dist/commands/install/usage.d.ts +7 -0
- package/dist/commands/install/usage.d.ts.map +1 -0
- package/dist/commands/install/usage.js +10 -0
- package/dist/commands/install/usage.js.map +1 -0
- package/dist/commands/migrate/convert.d.ts +1 -0
- package/dist/commands/migrate/convert.d.ts.map +1 -1
- package/dist/commands/migrate/convert.js +54 -5
- package/dist/commands/migrate/convert.js.map +1 -1
- package/dist/commands/migrate/rebake.d.ts +1 -0
- package/dist/commands/migrate/rebake.d.ts.map +1 -1
- package/dist/commands/migrate/rebake.js +16 -6
- package/dist/commands/migrate/rebake.js.map +1 -1
- package/dist/commands/migrate/usage.d.ts +7 -0
- package/dist/commands/migrate/usage.d.ts.map +1 -0
- package/dist/commands/migrate/usage.js +10 -0
- package/dist/commands/migrate/usage.js.map +1 -0
- package/dist/commands/plugin/usage.d.ts +7 -0
- package/dist/commands/plugin/usage.d.ts.map +1 -0
- package/dist/commands/plugin/usage.js +10 -0
- package/dist/commands/plugin/usage.js.map +1 -0
- package/dist/commands/querygen/usage.d.ts +7 -0
- package/dist/commands/querygen/usage.d.ts.map +1 -0
- package/dist/commands/querygen/usage.js +10 -0
- package/dist/commands/querygen/usage.js.map +1 -0
- package/dist/commands/sql-audit/usage.d.ts +7 -0
- package/dist/commands/sql-audit/usage.d.ts.map +1 -0
- package/dist/commands/sql-audit/usage.js +10 -0
- package/dist/commands/sql-audit/usage.js.map +1 -0
- package/dist/commands/sql-convert/usage.d.ts +7 -0
- package/dist/commands/sql-convert/usage.d.ts.map +1 -0
- package/dist/commands/sql-convert/usage.js +10 -0
- package/dist/commands/sql-convert/usage.js.map +1 -0
- package/dist/commands/standards/usage.d.ts +7 -0
- package/dist/commands/standards/usage.d.ts.map +1 -0
- package/dist/commands/standards/usage.js +10 -0
- package/dist/commands/standards/usage.js.map +1 -0
- package/dist/commands/sync/file-reset.d.ts +6 -6
- package/dist/commands/sync/file-reset.d.ts.map +1 -1
- package/dist/commands/sync/file-reset.js +151 -127
- package/dist/commands/sync/file-reset.js.map +1 -1
- package/dist/commands/sync/init.d.ts +10 -1
- package/dist/commands/sync/init.d.ts.map +1 -1
- package/dist/commands/sync/init.js +127 -78
- package/dist/commands/sync/init.js.map +1 -1
- package/dist/commands/test/compare.d.ts +11 -11
- package/dist/commands/test/compare.d.ts.map +1 -1
- package/dist/commands/test/compare.js +8 -7
- package/dist/commands/test/compare.js.map +1 -1
- package/dist/commands/test/history.d.ts +7 -7
- package/dist/commands/test/history.d.ts.map +1 -1
- package/dist/commands/test/history.js +8 -7
- package/dist/commands/test/history.js.map +1 -1
- package/dist/commands/test/list.d.ts +8 -8
- package/dist/commands/test/list.d.ts.map +1 -1
- package/dist/commands/test/list.js +8 -7
- package/dist/commands/test/list.js.map +1 -1
- package/dist/commands/test/regression/compare.d.ts.map +1 -1
- package/dist/commands/test/regression/compare.js +5 -7
- package/dist/commands/test/regression/compare.js.map +1 -1
- package/dist/commands/test/run.d.ts +9 -9
- package/dist/commands/test/run.d.ts.map +1 -1
- package/dist/commands/test/run.js +8 -7
- package/dist/commands/test/run.js.map +1 -1
- package/dist/commands/test/suite.d.ts +11 -11
- package/dist/commands/test/suite.d.ts.map +1 -1
- package/dist/commands/test/suite.js +8 -7
- package/dist/commands/test/suite.js.map +1 -1
- package/dist/commands/test/usage.d.ts +7 -0
- package/dist/commands/test/usage.d.ts.map +1 -0
- package/dist/commands/test/usage.js +10 -0
- package/dist/commands/test/usage.js.map +1 -0
- package/dist/commands/test/validate.d.ts +7 -7
- package/dist/commands/test/validate.d.ts.map +1 -1
- package/dist/commands/test/validate.js +8 -7
- package/dist/commands/test/validate.js.map +1 -1
- package/dist/commands/translate-sql/usage.d.ts +7 -0
- package/dist/commands/translate-sql/usage.d.ts.map +1 -0
- package/dist/commands/translate-sql/usage.js +10 -0
- package/dist/commands/translate-sql/usage.js.map +1 -0
- package/dist/commands/update/usage.d.ts +7 -0
- package/dist/commands/update/usage.d.ts.map +1 -0
- package/dist/commands/update/usage.js +10 -0
- package/dist/commands/update/usage.js.map +1 -0
- package/dist/commands/usage.d.ts.map +1 -1
- package/dist/commands/usage.js +9 -4
- package/dist/commands/usage.js.map +1 -1
- package/dist/hooks/prerun.d.ts.map +1 -1
- package/dist/hooks/prerun.js +63 -30
- package/dist/hooks/prerun.js.map +1 -1
- package/dist/lib/cli-plugins.d.ts +8 -1
- package/dist/lib/cli-plugins.d.ts.map +1 -1
- package/dist/lib/cli-plugins.js +17 -1
- package/dist/lib/cli-plugins.js.map +1 -1
- package/dist/lib/derived-usage.d.ts +68 -0
- package/dist/lib/derived-usage.d.ts.map +1 -0
- package/dist/lib/derived-usage.js +121 -0
- package/dist/lib/derived-usage.js.map +1 -0
- package/dist/lib/domain-profiles.d.ts +42 -0
- package/dist/lib/domain-profiles.d.ts.map +1 -0
- package/dist/lib/domain-profiles.js +118 -0
- package/dist/lib/domain-profiles.js.map +1 -0
- package/dist/lib/domain-usage-command.d.ts.map +1 -1
- package/dist/lib/domain-usage-command.js +9 -4
- package/dist/lib/domain-usage-command.js.map +1 -1
- package/dist/lib/format-compat.d.ts +68 -0
- package/dist/lib/format-compat.d.ts.map +1 -0
- package/dist/lib/format-compat.js +111 -0
- package/dist/lib/format-compat.js.map +1 -0
- package/dist/lib/interactive-guard.d.ts +56 -0
- package/dist/lib/interactive-guard.d.ts.map +1 -0
- package/dist/lib/interactive-guard.js +60 -0
- package/dist/lib/interactive-guard.js.map +1 -0
- package/dist/lib/legacy-install.d.ts.map +1 -1
- package/dist/lib/legacy-install.js +4 -0
- package/dist/lib/legacy-install.js.map +1 -1
- package/dist/lib/usage-render.d.ts +2 -2
- package/dist/lib/usage-render.d.ts.map +1 -1
- package/dist/lib/usage-render.js +2 -1
- package/dist/lib/usage-render.js.map +1 -1
- package/dist/light-commands.d.ts.map +1 -1
- package/dist/light-commands.js +43 -0
- package/dist/light-commands.js.map +1 -1
- package/dist/utils/open-app-context.d.ts +24 -0
- package/dist/utils/open-app-context.d.ts.map +1 -1
- package/dist/utils/open-app-context.js +21 -6
- package/dist/utils/open-app-context.js.map +1 -1
- package/dist/utils/update-check.d.ts +86 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +98 -0
- package/dist/utils/update-check.js.map +1 -0
- package/oclif.manifest.json +1860 -1000
- package/package.json +21 -21
package/README.md
CHANGED
|
@@ -67,6 +67,87 @@ npm install --save-dev @memberjunction/cli
|
|
|
67
67
|
|
|
68
68
|
**Requires Node.js 20.0.0 or higher.**
|
|
69
69
|
|
|
70
|
+
## Using `mj` from an agent or CI
|
|
71
|
+
|
|
72
|
+
`mj` detects whether a human is present and behaves accordingly. Nothing changes for
|
|
73
|
+
someone typing at a terminal; everything changes for a program.
|
|
74
|
+
|
|
75
|
+
### Prompting follows the terminal
|
|
76
|
+
|
|
77
|
+
A command prompts when stdin and stdout are both real terminals. When either is piped
|
|
78
|
+
or redirected, when a CI environment variable is set, or when `TERM=dumb`, it does not ā
|
|
79
|
+
and a command that needs a value it wasn't given fails immediately, naming the flag that
|
|
80
|
+
supplies it, rather than blocking on stdin forever:
|
|
81
|
+
|
|
82
|
+
```console
|
|
83
|
+
$ mj sync init # at a terminal: prompts, exactly as before
|
|
84
|
+
|
|
85
|
+
$ mj sync init < /dev/null # spawned by an agent
|
|
86
|
+
āŗ Error: An entity-directory choice is required and this run has no interactive
|
|
87
|
+
āŗ terminal. Pass --setup-entity=ai-prompts|other|no.
|
|
88
|
+
āŗ Try this: Pass --setup-entity=ai-prompts|other|no.
|
|
89
|
+
$ echo $?
|
|
90
|
+
1
|
|
91
|
+
|
|
92
|
+
$ mj sync init --setup-entity=no # scripted: runs unattended anywhere
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Override the detection in either direction with `--interactive` / `--no-interactive`, or
|
|
96
|
+
pin it for a whole shell session with `MJ_CLI_INTERACTIVE=0` (or `1`). An agent harness
|
|
97
|
+
that shells out through a pty should set `MJ_CLI_INTERACTIVE=0` so its subprocesses can
|
|
98
|
+
never block on a question.
|
|
99
|
+
|
|
100
|
+
### Output follows the pipe
|
|
101
|
+
|
|
102
|
+
With no explicit `--format`, `mj` writes human output to a terminal and JSON to a pipe ā
|
|
103
|
+
banner, spinners and color are suppressed automatically when stdout is redirected.
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
mj usage # human-readable domain map
|
|
107
|
+
mj usage | jq '.data.domains' # JSON envelope, no flag needed
|
|
108
|
+
mj codegen --format=text > build.log # force human output into a file
|
|
109
|
+
export MJ_CLI_FORMAT=json # pin the format for a whole session
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
`--format` accepts `text | json | md` everywhere. The older per-family spellings
|
|
113
|
+
(`console`/`markdown` under `mj test *`, `compact`/`table` under `mj ai *`) still work and
|
|
114
|
+
still win over auto-detection when passed explicitly.
|
|
115
|
+
|
|
116
|
+
> **Note on `-o`:** `-o` means *output format* in the `mj ai` family and *output file path*
|
|
117
|
+
> in `mj test`, `querygen export`, and `sql-audit`. Prefer `--format` ā it means the same
|
|
118
|
+
> thing in every command.
|
|
119
|
+
|
|
120
|
+
### Discovering commands without burning context
|
|
121
|
+
|
|
122
|
+
`mj usage` is a two-tier progressive-disclosure surface. Tier 1 is a ~200-token domain map;
|
|
123
|
+
tier 2 is one domain's commands, flags, examples, and expected runtime. Reading the full
|
|
124
|
+
oclif help tree instead costs roughly 13ā15k tokens.
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
mj usage # every domain + a one-line summary + a runtime class
|
|
128
|
+
mj sync usage # every mj sync command, its flags and examples
|
|
129
|
+
mj sync usage --format=json # the same, machine-readable
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Each entry carries a **runtime hint** (`fast` | `moderate` | `slow` | `variable`, often with
|
|
133
|
+
a typical duration) so a caller wrapping `mj` in a timeout can budget correctly instead of
|
|
134
|
+
killing a healthy long-running command. Commands also emit a `{"event":"start", ...}` line
|
|
135
|
+
on stderr before doing work.
|
|
136
|
+
|
|
137
|
+
### The result envelope
|
|
138
|
+
|
|
139
|
+
Commands built on `BaseCLIPlugin` emit a versioned envelope on stdout, with all progress and
|
|
140
|
+
logging on stderr:
|
|
141
|
+
|
|
142
|
+
```json
|
|
143
|
+
{"version":"1","success":false,"command":"sync:push","durationSeconds":1.2,
|
|
144
|
+
"errors":[{"context":"metadata/entities","message":"No mj.config.cjs found.",
|
|
145
|
+
"code":"E_NO_CONFIG","suggestion":"Run `mj sync init` in this directory first."}]}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
`code` is stable and safe to branch on; `message` is free to be reworded. `version` lets a
|
|
149
|
+
caller detect a contract change rather than silently mis-parsing.
|
|
150
|
+
|
|
70
151
|
## Configuration
|
|
71
152
|
|
|
72
153
|
Uses [cosmiconfig](https://github.com/davidtheclark/cosmiconfig) to find configuration:
|
|
@@ -3,7 +3,8 @@ export default class ActionsList extends Command {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
|
-
|
|
6
|
+
format: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
output: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
8
|
};
|
|
8
9
|
run(): Promise<void>;
|
|
9
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/ai/actions/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/ai/actions/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAI7C,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;IAC9C,MAAM,CAAC,WAAW,SAA+B;IAEjD,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;MAUV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4B3B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command, Flags } from '@oclif/core';
|
|
2
2
|
import ora from 'ora-classic';
|
|
3
|
+
import { AI_FORMAT_MAP, CANONICAL_FORMAT_FLAG, resolveLegacyFormat } from '../../../lib/format-compat.js';
|
|
3
4
|
export default class ActionsList extends Command {
|
|
4
5
|
static { this.description = 'List available AI actions'; }
|
|
5
6
|
static { this.examples = [
|
|
@@ -8,23 +9,31 @@ export default class ActionsList extends Command {
|
|
|
8
9
|
'<%= config.bin %> <%= command.id %> --output=json',
|
|
9
10
|
]; }
|
|
10
11
|
static { this.flags = {
|
|
12
|
+
format: CANONICAL_FORMAT_FLAG,
|
|
11
13
|
output: Flags.string({
|
|
12
14
|
char: 'o',
|
|
13
|
-
description:
|
|
15
|
+
description: "Output format (legacy alias for --format in the 'mj ai' family; elsewhere -o is an output FILE path). "
|
|
16
|
+
+ 'Prefer --format.',
|
|
14
17
|
options: ['compact', 'json', 'table'],
|
|
15
18
|
default: 'compact',
|
|
16
19
|
}),
|
|
17
20
|
}; }
|
|
18
21
|
async run() {
|
|
19
22
|
const { ActionService, OutputFormatter } = await import('@memberjunction/ai-cli');
|
|
20
|
-
const { flags } = await this.parse(ActionsList);
|
|
23
|
+
const { flags, metadata } = await this.parse(ActionsList);
|
|
21
24
|
const spinner = ora();
|
|
22
25
|
try {
|
|
23
26
|
spinner.start('Loading available actions...');
|
|
24
27
|
const service = new ActionService();
|
|
25
28
|
const actions = await service.listActions();
|
|
26
29
|
spinner.stop();
|
|
27
|
-
const formatter = new OutputFormatter(
|
|
30
|
+
const formatter = new OutputFormatter(resolveLegacyFormat({
|
|
31
|
+
format: flags.format,
|
|
32
|
+
legacy: flags.output,
|
|
33
|
+
legacyDefault: 'compact',
|
|
34
|
+
legacyWasExplicit: metadata.flags.output?.setFromDefault === false,
|
|
35
|
+
map: AI_FORMAT_MAP,
|
|
36
|
+
}));
|
|
28
37
|
this.log(formatter.formatActionList(actions));
|
|
29
38
|
// Force exit after completion
|
|
30
39
|
process.exit(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/ai/actions/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,GAAG,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/ai/actions/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAE1G,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;aACvC,gBAAW,GAAG,2BAA2B,CAAC;aAE1C,aAAQ,GAAG;QAChB,qCAAqC;QACrC,oDAAoD;QACpD,mDAAmD;KACpD,CAAC;aAEK,UAAK,GAAG;QACb,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EACT,wGAAwG;kBACtG,kBAAkB;YACtB,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;YACrC,OAAO,EAAE,SAAS;SACnB,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAElF,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;QAEtB,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,mBAAmB,CAAC;gBACxD,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,MAAM,EAAE,KAAK,CAAC,MAAsC;gBACpD,aAAa,EAAE,SAAkB;gBACjC,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,KAAK,KAAK;gBAClE,GAAG,EAAE,aAAa;aACnB,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;YAE9C,8BAA8B;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,KAAc,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC"}
|
|
@@ -3,12 +3,13 @@ export default class ActionsRun extends Command {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
|
-
name: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
|
-
param: import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
8
|
-
'dry-run': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
name: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
param: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[], import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
'dry-run': import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
9
|
+
format: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
output: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
+
verbose: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
12
|
+
timeout: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
13
|
};
|
|
13
14
|
run(): Promise<void>;
|
|
14
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../../src/commands/ai/actions/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAI7C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAA0C;IAE5D,MAAM,CAAC,QAAQ,WAKb;IAEF,MAAM,CAAC,KAAK
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../../src/commands/ai/actions/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAI7C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAA0C;IAE5D,MAAM,CAAC,QAAQ,WAKb;IAEF,MAAM,CAAC,KAAK;;;;;;;;MA+BV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoD3B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command, Flags } from '@oclif/core';
|
|
2
2
|
import ora from 'ora-classic';
|
|
3
|
-
import
|
|
3
|
+
import { AI_FORMAT_MAP, CANONICAL_FORMAT_FLAG, resolveLegacyFormat } from '../../../lib/format-compat.js';
|
|
4
4
|
export default class ActionsRun extends Command {
|
|
5
5
|
static { this.description = 'Execute an AI action with parameters'; }
|
|
6
6
|
static { this.examples = [
|
|
@@ -23,9 +23,11 @@ export default class ActionsRun extends Command {
|
|
|
23
23
|
'dry-run': Flags.boolean({
|
|
24
24
|
description: 'Validate without executing',
|
|
25
25
|
}),
|
|
26
|
+
format: CANONICAL_FORMAT_FLAG,
|
|
26
27
|
output: Flags.string({
|
|
27
28
|
char: 'o',
|
|
28
|
-
description:
|
|
29
|
+
description: "Output format (legacy alias for --format in the 'mj ai' family; elsewhere -o is an output FILE path). "
|
|
30
|
+
+ 'Prefer --format.',
|
|
29
31
|
options: ['compact', 'json', 'table'],
|
|
30
32
|
default: 'compact',
|
|
31
33
|
}),
|
|
@@ -40,9 +42,15 @@ export default class ActionsRun extends Command {
|
|
|
40
42
|
}; }
|
|
41
43
|
async run() {
|
|
42
44
|
const { ActionService, OutputFormatter } = await import('@memberjunction/ai-cli');
|
|
43
|
-
const { flags } = await this.parse(ActionsRun);
|
|
45
|
+
const { flags, metadata } = await this.parse(ActionsRun);
|
|
44
46
|
const service = new ActionService();
|
|
45
|
-
const formatter = new OutputFormatter(
|
|
47
|
+
const formatter = new OutputFormatter(resolveLegacyFormat({
|
|
48
|
+
format: flags.format,
|
|
49
|
+
legacy: flags.output,
|
|
50
|
+
legacyDefault: 'compact',
|
|
51
|
+
legacyWasExplicit: metadata.flags.output?.setFromDefault === false,
|
|
52
|
+
map: AI_FORMAT_MAP,
|
|
53
|
+
}));
|
|
46
54
|
// Parse parameters
|
|
47
55
|
const params = {};
|
|
48
56
|
if (flags.param) {
|
|
@@ -56,18 +64,9 @@ export default class ActionsRun extends Command {
|
|
|
56
64
|
}
|
|
57
65
|
try {
|
|
58
66
|
if (flags['dry-run']) {
|
|
59
|
-
//
|
|
60
|
-
|
|
61
|
-
this.log(
|
|
62
|
-
if (Object.keys(params).length > 0) {
|
|
63
|
-
this.log(chalk.cyan('Parameters:'));
|
|
64
|
-
for (const [key, value] of Object.entries(params)) {
|
|
65
|
-
this.log(` ${key}: ${value}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
this.log(chalk.gray('No parameters provided'));
|
|
70
|
-
}
|
|
67
|
+
// Route the dry run through the same formatter as a real run, so --format=json
|
|
68
|
+
// describes the planned execution as data instead of a coloured paragraph.
|
|
69
|
+
this.log(formatter.formatActionDryRun(flags.name, params));
|
|
71
70
|
}
|
|
72
71
|
else {
|
|
73
72
|
// Execute action
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../src/commands/ai/actions/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../src/commands/ai/actions/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,8 @@ export default class AgentsList extends Command {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
|
-
|
|
6
|
+
format: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
output: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
8
|
};
|
|
8
9
|
run(): Promise<void>;
|
|
9
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/ai/agents/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/ai/agents/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAI7C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAC,WAAW,SAA8B;IAEhD,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;MAUV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4B3B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command, Flags } from '@oclif/core';
|
|
2
2
|
import ora from 'ora-classic';
|
|
3
|
+
import { AI_FORMAT_MAP, CANONICAL_FORMAT_FLAG, resolveLegacyFormat } from '../../../lib/format-compat.js';
|
|
3
4
|
export default class AgentsList extends Command {
|
|
4
5
|
static { this.description = 'List available AI agents'; }
|
|
5
6
|
static { this.examples = [
|
|
@@ -8,23 +9,31 @@ export default class AgentsList extends Command {
|
|
|
8
9
|
'<%= config.bin %> <%= command.id %> --output=json',
|
|
9
10
|
]; }
|
|
10
11
|
static { this.flags = {
|
|
12
|
+
format: CANONICAL_FORMAT_FLAG,
|
|
11
13
|
output: Flags.string({
|
|
12
14
|
char: 'o',
|
|
13
|
-
description:
|
|
15
|
+
description: "Output format (legacy alias for --format in the 'mj ai' family; elsewhere -o is an output FILE path). "
|
|
16
|
+
+ 'Prefer --format.',
|
|
14
17
|
options: ['compact', 'json', 'table'],
|
|
15
18
|
default: 'compact',
|
|
16
19
|
}),
|
|
17
20
|
}; }
|
|
18
21
|
async run() {
|
|
19
22
|
const { AgentService, OutputFormatter } = await import('@memberjunction/ai-cli');
|
|
20
|
-
const { flags } = await this.parse(AgentsList);
|
|
23
|
+
const { flags, metadata } = await this.parse(AgentsList);
|
|
21
24
|
const spinner = ora();
|
|
22
25
|
try {
|
|
23
26
|
spinner.start('Loading available agents...');
|
|
24
27
|
const service = new AgentService();
|
|
25
28
|
const agents = await service.listAgents();
|
|
26
29
|
spinner.stop();
|
|
27
|
-
const formatter = new OutputFormatter(
|
|
30
|
+
const formatter = new OutputFormatter(resolveLegacyFormat({
|
|
31
|
+
format: flags.format,
|
|
32
|
+
legacy: flags.output,
|
|
33
|
+
legacyDefault: 'compact',
|
|
34
|
+
legacyWasExplicit: metadata.flags.output?.setFromDefault === false,
|
|
35
|
+
map: AI_FORMAT_MAP,
|
|
36
|
+
}));
|
|
28
37
|
this.log(formatter.formatAgentList(agents));
|
|
29
38
|
// Force exit after completion
|
|
30
39
|
process.exit(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/ai/agents/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,GAAG,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/ai/agents/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAE1G,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;aACtC,gBAAW,GAAG,0BAA0B,CAAC;aAEzC,aAAQ,GAAG;QAChB,qCAAqC;QACrC,oDAAoD;QACpD,mDAAmD;KACpD,CAAC;aAEK,UAAK,GAAG;QACb,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EACT,wGAAwG;kBACtG,kBAAkB;YACtB,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;YACrC,OAAO,EAAE,SAAS;SACnB,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAEjF,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;QAEtB,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,mBAAmB,CAAC;gBACxD,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,MAAM,EAAE,KAAK,CAAC,MAAsC;gBACpD,aAAa,EAAE,SAAkB;gBACjC,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,KAAK,KAAK;gBAClE,GAAG,EAAE,aAAa;aACnB,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;YAE5C,8BAA8B;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,KAAc,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC"}
|
|
@@ -3,12 +3,13 @@ export default class AgentsRun extends Command {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
|
-
agent: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
|
-
prompt: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
8
|
-
chat: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
agent: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
prompt: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
chat: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
9
|
+
format: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
output: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
+
verbose: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
12
|
+
timeout: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
13
|
};
|
|
13
14
|
run(): Promise<void>;
|
|
14
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../../src/commands/ai/agents/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../../src/commands/ai/agents/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAM7C,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAC,WAAW,SAAiE;IAEnF,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;MAiCV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA8D3B"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Command, Flags } from '@oclif/core';
|
|
2
2
|
import ora from 'ora-classic';
|
|
3
|
+
import { AI_FORMAT_MAP, CANONICAL_FORMAT_FLAG, resolveLegacyFormat } from '../../../lib/format-compat.js';
|
|
4
|
+
import { failOnNonInteractive, requireInteractive } from '../../../lib/interactive-guard.js';
|
|
3
5
|
export default class AgentsRun extends Command {
|
|
4
6
|
static { this.description = 'Execute an AI agent with a prompt or start interactive chat'; }
|
|
5
7
|
static { this.examples = [
|
|
@@ -23,9 +25,11 @@ export default class AgentsRun extends Command {
|
|
|
23
25
|
description: 'Start interactive chat mode',
|
|
24
26
|
exclusive: ['prompt'],
|
|
25
27
|
}),
|
|
28
|
+
format: CANONICAL_FORMAT_FLAG,
|
|
26
29
|
output: Flags.string({
|
|
27
30
|
char: 'o',
|
|
28
|
-
description:
|
|
31
|
+
description: "Output format (legacy alias for --format in the 'mj ai' family; elsewhere -o is an output FILE path). "
|
|
32
|
+
+ 'Prefer --format.',
|
|
29
33
|
options: ['compact', 'json', 'table'],
|
|
30
34
|
default: 'compact',
|
|
31
35
|
}),
|
|
@@ -39,16 +43,34 @@ export default class AgentsRun extends Command {
|
|
|
39
43
|
}),
|
|
40
44
|
}; }
|
|
41
45
|
async run() {
|
|
42
|
-
const {
|
|
43
|
-
const { flags } = await this.parse(AgentsRun);
|
|
46
|
+
const { flags, metadata } = await this.parse(AgentsRun);
|
|
44
47
|
if (!flags.prompt && !flags.chat) {
|
|
45
48
|
this.error('Either --prompt or --chat flag is required');
|
|
46
49
|
}
|
|
50
|
+
// --chat is a REPL that reads stdin turn by turn: interactive by nature, with no
|
|
51
|
+
// flag that could stand in for the conversation. Spawned or piped it would sit on
|
|
52
|
+
// stdin forever, so refuse before loading anything and name the flag that does work
|
|
53
|
+
// headlessly. Checked here ā ahead of the service import ā so the refusal costs
|
|
54
|
+
// nothing and cannot be mistaken for a startup failure.
|
|
55
|
+
if (flags.chat) {
|
|
56
|
+
try {
|
|
57
|
+
requireInteractive('Interactive chat mode', 'Use --prompt "<your prompt>" for a single non-interactive execution, or re-run --chat at an interactive terminal.');
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
failOnNonInteractive(this, error);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const { AgentService, OutputFormatter, ConversationService } = await import('@memberjunction/ai-cli');
|
|
47
64
|
const service = new AgentService();
|
|
48
|
-
const formatter = new OutputFormatter(
|
|
65
|
+
const formatter = new OutputFormatter(resolveLegacyFormat({
|
|
66
|
+
format: flags.format,
|
|
67
|
+
legacy: flags.output,
|
|
68
|
+
legacyDefault: 'compact',
|
|
69
|
+
legacyWasExplicit: metadata.flags.output?.setFromDefault === false,
|
|
70
|
+
map: AI_FORMAT_MAP,
|
|
71
|
+
}));
|
|
49
72
|
try {
|
|
50
73
|
if (flags.chat) {
|
|
51
|
-
// Interactive chat mode
|
|
52
74
|
const conversationService = new ConversationService();
|
|
53
75
|
await conversationService.startChat(flags.agent, undefined, {
|
|
54
76
|
verbose: flags.verbose,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../src/commands/ai/agents/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,GAAG,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../src/commands/ai/agents/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,22 +3,23 @@ export default class AgentRun extends Command {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
format: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
output: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
step: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
|
+
detail: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
errors: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
|
+
list: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
12
|
+
agent: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
13
|
+
status: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
14
|
+
days: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
15
|
+
limit: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
16
|
+
export: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
17
|
+
file: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
18
|
+
'max-tokens': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
19
|
+
verbose: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
19
20
|
};
|
|
20
21
|
static args: {
|
|
21
|
-
runId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
|
|
22
|
+
runId: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
22
23
|
};
|
|
23
24
|
run(): Promise<void>;
|
|
24
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-run.d.ts","sourceRoot":"","sources":["../../../../src/commands/ai/audit/agent-run.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-run.d.ts","sourceRoot":"","sources":["../../../../src/commands/ai/audit/agent-run.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AAMnD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAC,WAAW,SAAsF;IAExG,MAAM,CAAC,QAAQ,WAkBb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;MA2FV;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA6G3B"}
|
|
@@ -2,6 +2,7 @@ import { Command, Flags, Args } from '@oclif/core';
|
|
|
2
2
|
import ora from 'ora-classic';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
4
|
import * as fs from 'fs/promises';
|
|
5
|
+
import { CANONICAL_FORMAT_FLAG, resolveLegacyFormat } from '../../../lib/format-compat.js';
|
|
5
6
|
export default class AgentRun extends Command {
|
|
6
7
|
static { this.description = 'Audit and analyze AI agent execution runs for debugging and performance analysis'; }
|
|
7
8
|
static { this.examples = [
|
|
@@ -21,9 +22,11 @@ export default class AgentRun extends Command {
|
|
|
21
22
|
]; }
|
|
22
23
|
static { this.flags = {
|
|
23
24
|
// Output format
|
|
25
|
+
format: CANONICAL_FORMAT_FLAG,
|
|
24
26
|
output: Flags.string({
|
|
25
27
|
char: 'o',
|
|
26
|
-
description:
|
|
28
|
+
description: "Output format (legacy alias for --format in the 'mj ai' family; elsewhere -o is an output FILE path). "
|
|
29
|
+
+ 'Prefer --format.',
|
|
27
30
|
options: ['compact', 'json', 'table', 'markdown'],
|
|
28
31
|
default: 'compact',
|
|
29
32
|
}),
|
|
@@ -104,8 +107,17 @@ export default class AgentRun extends Command {
|
|
|
104
107
|
}; }
|
|
105
108
|
async run() {
|
|
106
109
|
const { AgentAuditService } = await import('@memberjunction/ai-cli');
|
|
107
|
-
const { args, flags } = await this.parse(AgentRun);
|
|
110
|
+
const { args, flags, metadata } = await this.parse(AgentRun);
|
|
108
111
|
const spinner = ora();
|
|
112
|
+
// One typed resolution for all four render sites below ā replaces the `as any`
|
|
113
|
+
// casts and applies the same --format/pipe rules as the rest of the CLI.
|
|
114
|
+
const outputFormat = resolveLegacyFormat({
|
|
115
|
+
format: flags.format,
|
|
116
|
+
legacy: flags.output,
|
|
117
|
+
legacyDefault: 'compact',
|
|
118
|
+
legacyWasExplicit: metadata.flags.output?.setFromDefault === false,
|
|
119
|
+
map: { text: 'compact', json: 'json', md: 'markdown' },
|
|
120
|
+
});
|
|
109
121
|
try {
|
|
110
122
|
const service = new AgentAuditService();
|
|
111
123
|
// MODE 1: List recent runs
|
|
@@ -118,7 +130,7 @@ export default class AgentRun extends Command {
|
|
|
118
130
|
limit: flags.limit,
|
|
119
131
|
});
|
|
120
132
|
spinner.stop();
|
|
121
|
-
this.log(service.formatRunList(runs,
|
|
133
|
+
this.log(service.formatRunList(runs, outputFormat));
|
|
122
134
|
process.exit(0);
|
|
123
135
|
return;
|
|
124
136
|
}
|
|
@@ -134,7 +146,7 @@ export default class AgentRun extends Command {
|
|
|
134
146
|
maxTokens: flags['max-tokens'],
|
|
135
147
|
});
|
|
136
148
|
spinner.stop();
|
|
137
|
-
this.log(service.formatStepDetail(stepDetail,
|
|
149
|
+
this.log(service.formatStepDetail(stepDetail, outputFormat));
|
|
138
150
|
process.exit(0);
|
|
139
151
|
return;
|
|
140
152
|
}
|
|
@@ -143,7 +155,7 @@ export default class AgentRun extends Command {
|
|
|
143
155
|
spinner.start('Analyzing errors...');
|
|
144
156
|
const errorAnalysis = await service.analyzeErrors(args.runId);
|
|
145
157
|
spinner.stop();
|
|
146
|
-
this.log(service.formatErrorAnalysis(errorAnalysis,
|
|
158
|
+
this.log(service.formatErrorAnalysis(errorAnalysis, outputFormat));
|
|
147
159
|
process.exit(0);
|
|
148
160
|
return;
|
|
149
161
|
}
|
|
@@ -165,7 +177,7 @@ export default class AgentRun extends Command {
|
|
|
165
177
|
maxTokens: flags['max-tokens'],
|
|
166
178
|
});
|
|
167
179
|
spinner.stop();
|
|
168
|
-
this.log(service.formatRunSummary(summary,
|
|
180
|
+
this.log(service.formatRunSummary(summary, outputFormat));
|
|
169
181
|
if (flags.verbose) {
|
|
170
182
|
this.log(chalk.dim('\nš” Tip: Use --step <N> to see details for a specific step'));
|
|
171
183
|
this.log(chalk.dim('š” Tip: Use --errors to see only error information'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-run.js","sourceRoot":"","sources":["../../../../src/commands/ai/audit/agent-run.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-run.js","sourceRoot":"","sources":["../../../../src/commands/ai/audit/agent-run.ts"],"names":[],"mappings":"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"}
|