@pixelml/agenticflow-cli 0.1.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +166 -36
- package/dist/bin/agenticflow.d.ts +6 -0
- package/dist/bin/agenticflow.d.ts.map +1 -0
- package/dist/bin/agenticflow.js +10 -0
- package/dist/bin/agenticflow.js.map +1 -0
- package/dist/cli/client.d.ts +17 -0
- package/dist/cli/client.d.ts.map +1 -0
- package/dist/cli/client.js +102 -0
- package/dist/cli/client.js.map +1 -0
- package/dist/cli/data/openapi.json +27948 -0
- package/dist/cli/data/public_ops_manifest.json +739 -0
- package/dist/cli/main.d.ts +10 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +1100 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/operation-ids.d.ts +10 -0
- package/dist/cli/operation-ids.d.ts.map +1 -0
- package/dist/cli/operation-ids.js +53 -0
- package/dist/cli/operation-ids.js.map +1 -0
- package/dist/cli/playbooks.d.ts +13 -0
- package/dist/cli/playbooks.d.ts.map +1 -0
- package/dist/cli/playbooks.js +102 -0
- package/dist/cli/playbooks.js.map +1 -0
- package/dist/cli/policy.d.ts +61 -0
- package/dist/cli/policy.d.ts.map +1 -0
- package/dist/cli/policy.js +158 -0
- package/dist/cli/policy.js.map +1 -0
- package/dist/cli/spec.d.ts +33 -0
- package/dist/cli/spec.d.ts.map +1 -0
- package/dist/cli/spec.js +154 -0
- package/dist/cli/spec.js.map +1 -0
- package/package.json +19 -18
- package/LICENSE +0 -201
- package/bin/agenticflow.js +0 -42
package/README.md
CHANGED
|
@@ -1,71 +1,201 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @pixelml/agenticflow-cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Command-line interface for the [AgenticFlow](https://agenticflow.ai) platform.
|
|
4
|
+
Manage agents, workflows, connections and more — directly from your terminal.
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
Built on [`@pixelml/agenticflow-sdk`](https://www.npmjs.com/package/@pixelml/agenticflow-sdk).
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
- High-level commands for workflows, agents, node types, and connections.
|
|
9
|
-
- API-key-based auth profiles (`AGENTICFLOW_PUBLIC_API_KEY`).
|
|
10
|
-
- Preflight checks (`doctor`) and capability catalog (`catalog`).
|
|
11
|
-
- Local guardrails (`policy`) and audit log support.
|
|
12
|
-
- Built-in CLI playbooks (no MCP required).
|
|
8
|
+
## Installation
|
|
13
9
|
|
|
14
|
-
|
|
10
|
+
```bash
|
|
11
|
+
npm install -g @pixelml/agenticflow-cli
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Or run directly via `npx`:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npx @pixelml/agenticflow-cli --help
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Authentication
|
|
21
|
+
|
|
22
|
+
### Interactive login
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
agenticflow login
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Prompts for API key, workspace ID and project ID, then saves them to
|
|
29
|
+
`~/.agenticflow/auth.json`.
|
|
30
|
+
|
|
31
|
+
### Environment variables
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
export AGENTICFLOW_API_KEY="sk-..."
|
|
35
|
+
export AGENTICFLOW_WORKSPACE_ID="ws-..."
|
|
36
|
+
export AGENTICFLOW_PROJECT_ID="proj-..."
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Import from `.env` file
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
agenticflow auth import-env --file .env
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### CLI flags
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
agenticflow --api-key sk-... --workspace-id ws-... agent list
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Resolution order:** CLI flag → environment variable → `~/.agenticflow/auth.json`
|
|
52
|
+
|
|
53
|
+
### Verify
|
|
15
54
|
|
|
16
55
|
```bash
|
|
17
|
-
|
|
56
|
+
agenticflow whoami
|
|
18
57
|
```
|
|
19
58
|
|
|
20
|
-
|
|
59
|
+
```
|
|
60
|
+
Profile: default
|
|
61
|
+
API Key: present
|
|
62
|
+
Workspace ID: ws-abc123
|
|
63
|
+
Project ID: proj-xyz789
|
|
64
|
+
Config: ~/.agenticflow/auth.json
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Logout
|
|
21
68
|
|
|
22
69
|
```bash
|
|
23
|
-
agenticflow
|
|
70
|
+
agenticflow logout # remove all credentials
|
|
71
|
+
agenticflow logout --profile staging # remove a single profile
|
|
24
72
|
```
|
|
25
73
|
|
|
26
|
-
##
|
|
74
|
+
## Commands
|
|
75
|
+
|
|
76
|
+
### agent
|
|
27
77
|
|
|
28
78
|
```bash
|
|
29
|
-
|
|
30
|
-
agenticflow --
|
|
79
|
+
agenticflow agent list [--project-id <id>] [--search <q>] [--limit <n>] [--offset <n>]
|
|
80
|
+
agenticflow agent get --agent-id <id>
|
|
81
|
+
agenticflow agent create --body <json|@file>
|
|
82
|
+
agenticflow agent update --agent-id <id> --body <json|@file>
|
|
83
|
+
agenticflow agent delete --agent-id <id>
|
|
84
|
+
agenticflow agent stream --agent-id <id> --body <json|@file>
|
|
85
|
+
agenticflow agent reference-impact --agent-id <id>
|
|
31
86
|
```
|
|
32
87
|
|
|
33
|
-
|
|
88
|
+
### workflow
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
agenticflow workflow list [--workspace-id <id>] [--project-id <id>] [--search <q>] [--limit <n>]
|
|
92
|
+
agenticflow workflow get --workflow-id <id>
|
|
93
|
+
agenticflow workflow create --body <json|@file> [--workspace-id <id>]
|
|
94
|
+
agenticflow workflow update --workflow-id <id> --body <json|@file> [--workspace-id <id>]
|
|
95
|
+
agenticflow workflow delete --workflow-id <id> [--workspace-id <id>]
|
|
96
|
+
agenticflow workflow run --workflow-id <id> [--input <json|@file>]
|
|
97
|
+
agenticflow workflow run-status --workflow-run-id <id>
|
|
98
|
+
agenticflow workflow list-runs --workflow-id <id> [--sort-order asc|desc]
|
|
99
|
+
agenticflow workflow run-history --workflow-id <id>
|
|
100
|
+
agenticflow workflow validate --body <json|@file>
|
|
101
|
+
agenticflow workflow reference-impact --workflow-id <id>
|
|
102
|
+
agenticflow workflow like --workflow-id <id>
|
|
103
|
+
agenticflow workflow unlike --workflow-id <id>
|
|
104
|
+
agenticflow workflow like-status --workflow-id <id>
|
|
105
|
+
```
|
|
34
106
|
|
|
35
|
-
|
|
107
|
+
### connections
|
|
36
108
|
|
|
37
109
|
```bash
|
|
38
|
-
|
|
39
|
-
agenticflow
|
|
110
|
+
agenticflow connections list [--workspace-id <id>] [--project-id <id>]
|
|
111
|
+
agenticflow connections create --body <json|@file> [--workspace-id <id>]
|
|
112
|
+
agenticflow connections get-default --category <name> [--workspace-id <id>] [--project-id <id>]
|
|
113
|
+
agenticflow connections update --connection-id <id> --body <json|@file> [--workspace-id <id>]
|
|
114
|
+
agenticflow connections delete --connection-id <id> [--workspace-id <id>]
|
|
115
|
+
agenticflow connections categories [--workspace-id <id>]
|
|
40
116
|
```
|
|
41
117
|
|
|
42
|
-
|
|
118
|
+
### node-types
|
|
43
119
|
|
|
44
120
|
```bash
|
|
45
|
-
agenticflow
|
|
46
|
-
agenticflow
|
|
121
|
+
agenticflow node-types list
|
|
122
|
+
agenticflow node-types get --name <name>
|
|
123
|
+
agenticflow node-types search --query <q>
|
|
124
|
+
agenticflow node-types dynamic-options --name <name> --field-name <field> [--connection <name>]
|
|
47
125
|
```
|
|
48
126
|
|
|
49
|
-
|
|
127
|
+
### uploads
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
agenticflow uploads create --body <json|@file>
|
|
131
|
+
agenticflow uploads status --session-id <id>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Generic API call
|
|
135
|
+
|
|
136
|
+
For any endpoint not covered by resource commands:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# By operation ID
|
|
140
|
+
agenticflow call --operation-id getAgentModel
|
|
141
|
+
|
|
142
|
+
# By method + path
|
|
143
|
+
agenticflow call --method GET --path /v1/agents/
|
|
50
144
|
|
|
51
|
-
|
|
145
|
+
# With parameters and body
|
|
146
|
+
agenticflow call --operation-id updateAgent \
|
|
147
|
+
-P agent_id=abc123 \
|
|
148
|
+
--body '{"name": "Updated"}'
|
|
52
149
|
|
|
53
|
-
|
|
150
|
+
# Query parameters
|
|
151
|
+
agenticflow call --method GET --path /v1/agents/ -Q limit=10
|
|
152
|
+
|
|
153
|
+
# Dry run (shows request without executing)
|
|
154
|
+
agenticflow call --operation-id listAgents --dry-run
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Utilities
|
|
54
158
|
|
|
55
159
|
```bash
|
|
56
|
-
|
|
57
|
-
agenticflow
|
|
160
|
+
# Preflight diagnostics
|
|
161
|
+
agenticflow doctor
|
|
162
|
+
|
|
163
|
+
# OpenAPI operation discovery
|
|
164
|
+
agenticflow ops list [--public-only] [--tag <tag>]
|
|
165
|
+
agenticflow ops show <operation-id>
|
|
166
|
+
|
|
167
|
+
# Operation catalog
|
|
168
|
+
agenticflow catalog export [--public-only]
|
|
169
|
+
agenticflow catalog rank --task "send a message" [--top <n>]
|
|
170
|
+
|
|
171
|
+
# Policy guardrails
|
|
172
|
+
agenticflow policy show
|
|
173
|
+
agenticflow policy init [--spend-ceiling <amount>]
|
|
174
|
+
|
|
175
|
+
# Built-in playbooks
|
|
176
|
+
agenticflow playbook [topic] [--list]
|
|
58
177
|
```
|
|
59
178
|
|
|
60
|
-
|
|
179
|
+
## Global Options
|
|
180
|
+
|
|
181
|
+
| Flag | Description |
|
|
182
|
+
|---|---|
|
|
183
|
+
| `--api-key <key>` | API key for authentication |
|
|
184
|
+
| `--workspace-id <id>` | Default workspace ID |
|
|
185
|
+
| `--project-id <id>` | Default project ID |
|
|
186
|
+
| `--spec-file <path>` | Path to OpenAPI spec JSON |
|
|
187
|
+
| `--json` | Force JSON output |
|
|
188
|
+
| `--version` | Show version |
|
|
189
|
+
| `--help` | Show help |
|
|
61
190
|
|
|
62
|
-
##
|
|
191
|
+
## Output
|
|
63
192
|
|
|
64
|
-
|
|
65
|
-
|
|
193
|
+
All commands output JSON to stdout. Errors set a non-zero exit code.
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
agenticflow agent list | jq '.[] | .name'
|
|
197
|
+
```
|
|
66
198
|
|
|
67
|
-
##
|
|
199
|
+
## License
|
|
68
200
|
|
|
69
|
-
-
|
|
70
|
-
- `.env*` and `.agenticflow/` are ignored.
|
|
71
|
-
- Users provide their own `AGENTICFLOW_PUBLIC_API_KEY`.
|
|
201
|
+
Apache-2.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agenticflow.d.ts","sourceRoot":"","sources":["../../src/bin/agenticflow.ts"],"names":[],"mappings":";AAEA;;GAEG"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* AgenticFlow CLI entry point.
|
|
4
|
+
*/
|
|
5
|
+
import { runCli } from "../cli/main.js";
|
|
6
|
+
runCli().catch((err) => {
|
|
7
|
+
console.error(err instanceof Error ? err.message : err);
|
|
8
|
+
process.exit(1);
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=agenticflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agenticflow.js","sourceRoot":"","sources":["../../src/bin/agenticflow.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP request builder helpers for AgenticFlow CLI commands.
|
|
3
|
+
*/
|
|
4
|
+
import type { Operation } from "./spec.js";
|
|
5
|
+
export interface RequestSpec {
|
|
6
|
+
method: string;
|
|
7
|
+
url: string;
|
|
8
|
+
params: Record<string, string>;
|
|
9
|
+
headers: Record<string, string>;
|
|
10
|
+
body?: unknown;
|
|
11
|
+
json?: unknown;
|
|
12
|
+
}
|
|
13
|
+
export declare function parseKeyValuePairs(rawValues: string[]): Record<string, string>;
|
|
14
|
+
export declare function loadJsonPayload(raw: string): unknown;
|
|
15
|
+
export declare function resolveApiKey(explicitKey?: string | null): string | null;
|
|
16
|
+
export declare function buildRequestSpec(operation: Operation, baseUrl: string, pathParams: Record<string, string>, queryParams: Record<string, string>, extraHeaders: Record<string, string>, token?: string | null, body?: unknown): RequestSpec;
|
|
17
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cli/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAa9E;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAoBpD;AAED,wBAAgB,aAAa,CAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAC1B,MAAM,GAAG,IAAI,CAGf;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EACrB,IAAI,CAAC,EAAE,OAAO,GACb,WAAW,CA4Bb"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP request builder helpers for AgenticFlow CLI commands.
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync } from "node:fs";
|
|
5
|
+
export function parseKeyValuePairs(rawValues) {
|
|
6
|
+
const parsed = {};
|
|
7
|
+
for (const raw of rawValues) {
|
|
8
|
+
if (!raw.includes("=")) {
|
|
9
|
+
throw new Error(`Invalid key-value pair: ${raw}`);
|
|
10
|
+
}
|
|
11
|
+
const idx = raw.indexOf("=");
|
|
12
|
+
const key = raw.slice(0, idx);
|
|
13
|
+
const value = raw.slice(idx + 1);
|
|
14
|
+
if (!key)
|
|
15
|
+
throw new Error(`Invalid key-value pair: ${raw}`);
|
|
16
|
+
parsed[key] = value;
|
|
17
|
+
}
|
|
18
|
+
return parsed;
|
|
19
|
+
}
|
|
20
|
+
export function loadJsonPayload(raw) {
|
|
21
|
+
let payloadText;
|
|
22
|
+
if (raw.startsWith("@")) {
|
|
23
|
+
const filePath = raw.slice(1).trim();
|
|
24
|
+
if (!filePath)
|
|
25
|
+
throw new Error(`Unable to read body file: ${raw}`);
|
|
26
|
+
try {
|
|
27
|
+
payloadText = readFileSync(filePath, "utf-8");
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
throw new Error(`Unable to read body file: ${raw}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
payloadText = raw;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
return JSON.parse(payloadText);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
throw new Error(`Invalid JSON payload: ${raw}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function resolveApiKey(explicitKey) {
|
|
44
|
+
if (explicitKey)
|
|
45
|
+
return explicitKey;
|
|
46
|
+
return process.env["AGENTICFLOW_PUBLIC_API_KEY"] ?? null;
|
|
47
|
+
}
|
|
48
|
+
export function buildRequestSpec(operation, baseUrl, pathParams, queryParams, extraHeaders, token, body) {
|
|
49
|
+
const normalizedUrl = baseUrl.replace(/\/+$/, "");
|
|
50
|
+
const formattedPath = formatPath(operation.path, pathParams);
|
|
51
|
+
const normalizedPath = formattedPath.startsWith("/") ? formattedPath : `/${formattedPath}`;
|
|
52
|
+
const url = `${normalizedUrl}${normalizedPath}`;
|
|
53
|
+
const headers = { ...extraHeaders };
|
|
54
|
+
if (token) {
|
|
55
|
+
headers["Authorization"] = `Bearer ${token}`;
|
|
56
|
+
}
|
|
57
|
+
if (body != null) {
|
|
58
|
+
const hasContentType = Object.keys(headers).some((k) => k.toLowerCase() === "content-type");
|
|
59
|
+
if (!hasContentType) {
|
|
60
|
+
headers["Content-Type"] = "application/json";
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
method: operation.method.toUpperCase(),
|
|
65
|
+
url,
|
|
66
|
+
params: { ...queryParams },
|
|
67
|
+
headers,
|
|
68
|
+
body,
|
|
69
|
+
json: body,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function formatPath(path, pathParams) {
|
|
73
|
+
if (!path.includes("{"))
|
|
74
|
+
return path;
|
|
75
|
+
const required = extractPathParameterNames(path);
|
|
76
|
+
const missing = required.filter((name) => !(name in pathParams));
|
|
77
|
+
if (missing.length > 0) {
|
|
78
|
+
throw new Error(`Missing required path parameters: ${missing.sort().join(", ")}`);
|
|
79
|
+
}
|
|
80
|
+
let formatted = path;
|
|
81
|
+
for (const name of required) {
|
|
82
|
+
formatted = formatted.replace(`{${name}}`, encodeURIComponent(pathParams[name]));
|
|
83
|
+
}
|
|
84
|
+
return formatted;
|
|
85
|
+
}
|
|
86
|
+
function extractPathParameterNames(path) {
|
|
87
|
+
const names = [];
|
|
88
|
+
let inBraces = false;
|
|
89
|
+
let start = 0;
|
|
90
|
+
for (let i = 0; i < path.length; i++) {
|
|
91
|
+
if (path[i] === "{") {
|
|
92
|
+
inBraces = true;
|
|
93
|
+
start = i + 1;
|
|
94
|
+
}
|
|
95
|
+
else if (path[i] === "}" && inBraces) {
|
|
96
|
+
names.push(path.slice(start, i));
|
|
97
|
+
inBraces = false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return names;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/cli/client.ts"],"names":[],"mappings":"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"}
|