Skip to content
This repository was archived by the owner on Feb 24, 2026. It is now read-only.

Commit 94b059b

Browse files
committed
feat: align CLI to MCP-first surface and manifest-scoped release gate
1 parent 4c47e64 commit 94b059b

20 files changed

+1448
-739
lines changed

.github/workflows/release-node.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,14 @@ jobs:
4040
run: |
4141
bash scripts/release_readiness.sh --skip-tests --skip-node
4242
43+
- name: Run live 71-op release gate
44+
if: ${{ secrets.AGENTICFLOW_PUBLIC_API_KEY != '' }}
45+
env:
46+
AGENTICFLOW_PUBLIC_API_KEY: ${{ secrets.AGENTICFLOW_PUBLIC_API_KEY }}
47+
NEXT_PUBLIC_BASE_API_URL: ${{ secrets.AGENTICFLOW_BASE_URL }}
48+
run: |
49+
bash scripts/release_readiness.sh --skip-tests --skip-node --live-ops-gate
50+
4351
- name: Setup Node
4452
uses: actions/setup-node@v4
4553
with:

.github/workflows/release-python.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ jobs:
5555
run: |
5656
bash scripts/release_readiness.sh --skip-node
5757
58+
- name: Run live 71-op release gate
59+
if: ${{ secrets.AGENTICFLOW_PUBLIC_API_KEY != '' }}
60+
env:
61+
AGENTICFLOW_PUBLIC_API_KEY: ${{ secrets.AGENTICFLOW_PUBLIC_API_KEY }}
62+
NEXT_PUBLIC_BASE_API_URL: ${{ secrets.AGENTICFLOW_BASE_URL }}
63+
run: |
64+
bash scripts/release_readiness.sh --skip-tests --skip-node --live-ops-gate
65+
5866
- name: Install build tooling
5967
run: |
6068
python -m pip install --upgrade pip

README.md

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,23 +31,26 @@ This CLI should be documented against the bundled curated snapshot only.
3131

3232
High-level commands in this section are SDK-driven. `call` is the only raw transport command that executes an operation directly from the loaded OpenAPI catalog.
3333

34+
`public_ops_manifest.json` is MCP-first and policy-lean:
35+
36+
- 26 operations total
37+
- 18 `supported-executed` (safe/read/query/public wrapper)
38+
- 8 `supported-blocked-policy` (known side-effectful or risky flows kept for intent visibility only)
39+
3440
- Supported by snapshot-backed commands:
3541
- `catalog export --public-only --json`
3642
- `ops list --public-only`
3743
- `call --method GET --path /v1/health --dry-run`
3844
- `call --operation-id get_nodetype_models_v1_node_types__get --dry-run`
39-
- `workflow create --workspace-id <workspace_id> --body @workflow.json --dry-run`
45+
- `workflow list --workspace-id <workspace_id> --dry-run`
4046
- `workflow get --workflow-id <id> --dry-run`
41-
- `workflow update --workspace-id <workspace_id> --workflow-id <id> --body @workflow-update.json --dry-run`
42-
- `workflow run --workflow-id <id> --input '{}' --dry-run`
43-
- `workflow run-status --workflow-run-id <id> --dry-run`
4447
- `workflow validate --body '{\"nodes\":[]}' --dry-run`
45-
- `agent create --body @agent.json --dry-run`
48+
- `workflow run-status --workflow-run-id <id> --dry-run`
4649
- `agent get --agent-id <id> --dry-run`
47-
- `agent update --agent-id <id> --body @agent-update.json --dry-run`
48-
- `agent stream --agent-id <id> --body '{\"messages\":[]}' --dry-run`
49-
- `node-types dynamic-options --name <node_type> --field-name <field> --project-id <project_id> --input-config '{}' --dry-run`
50+
- `node-types list --project-id <project_id> --dry-run`
5051
- `connections list --workspace-id <workspace_id> --project-id <project_id> --dry-run`
52+
- `get_nodetype_models_v1_node_types__get` and `get_anonymous_messages_v1_agent_threads_anonymous__thread_id__messages_get` are available as anonymous MCP discovery/ops through `call`.
53+
- `node-types dynamic-options` and workflow `create/run` are intentionally in `supported-blocked-policy` and must be blocked in automated coverage by default.
5154

5255
Admin/internal endpoints are intentionally not included in the bundled snapshot.
5356

@@ -116,14 +119,9 @@ Compatibility note:
116119
- `PYTHONPATH=. .venv/bin/python scripts/agenticflow_cli.py catalog export --public-only --json`
117120
- `PYTHONPATH=. .venv/bin/python scripts/agenticflow_cli.py call --method GET --path /v1/health --dry-run`
118121
- `PYTHONPATH=. .venv/bin/python scripts/agenticflow_cli.py ops show get_workflow_model_v1_workflows__workflow_id__get`
119-
- `PYTHONPATH=. .venv/bin/python scripts/agenticflow_cli.py workflow create --workspace-id ws_demo --body '{\"name\":\"demo\",\"nodes\":[],\"output_mapping\":{},\"input_schema\":{},\"project_id\":\"proj_demo\"}' --dry-run`
120122
- `PYTHONPATH=. .venv/bin/python scripts/agenticflow_cli.py workflow get --workflow-id wf_demo --dry-run`
121-
- `PYTHONPATH=. .venv/bin/python scripts/agenticflow_cli.py workflow run --workflow-id wf_demo --input '{}' --dry-run`
122123
- `PYTHONPATH=. .venv/bin/python scripts/agenticflow_cli.py workflow validate --body '{\"nodes\":[]}' --dry-run`
123-
- `PYTHONPATH=. .venv/bin/python scripts/agenticflow_cli.py agent create --body '{\"name\":\"demo\",\"tools\":[],\"project_id\":\"proj_demo\"}' --dry-run`
124124
- `PYTHONPATH=. .venv/bin/python scripts/agenticflow_cli.py agent get --agent-id ag_demo --dry-run`
125-
- `PYTHONPATH=. .venv/bin/python scripts/agenticflow_cli.py agent stream --agent-id ag_demo --body '{\"messages\":[]}' --dry-run`
126-
- `PYTHONPATH=. .venv/bin/python scripts/agenticflow_cli.py node-types dynamic-options --name google-drive --field-name folder --project-id proj_demo --input-config '{}' --dry-run`
127125
- `PYTHONPATH=. .venv/bin/python scripts/agenticflow_cli.py connections list --workspace-id ws_demo --project-id proj_demo --dry-run`
128126

129127
## Release Readiness Gate
@@ -136,6 +134,14 @@ bash scripts/release_readiness.sh
136134

137135
This validates operation-id mappings, runs unit tests, executes CLI dry-run smoke checks, and verifies the Node wrapper.
138136

137+
Optional live API coverage gate (26-op MCP-first public scope) with real key:
138+
139+
```bash
140+
bash scripts/release_readiness.sh --live-ops-gate --env-file /path/to/.env
141+
```
142+
143+
Release workflows (`release-python`, `release-node`) run this live gate automatically when GitHub secret `AGENTICFLOW_PUBLIC_API_KEY` is configured (optional `AGENTICFLOW_BASE_URL` for custom base URL).
144+
139145
## Unattended Minion Flow
140146

141147
This repository includes a tmux-based one-shot multi-agent workflow for `gpt-5.3-codex-spark`.

docs/cli_secured_ops_baseline.md

Lines changed: 36 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2,78 +2,59 @@
22

33
## OpenAPI comparison
44

5-
- `agenticflow-cli/openapi.json` (before): `59` operations, all no-security/public.
5+
- `agenticflow-cli/openapi.json`: `71` operations total (`59` no-security/public, `12` authenticated).
66
- `WorkflowChef-Web/openapi.json`: `407` operations total (`59` no-security/public, `348` secured).
77

88
## Baseline decision
99

10-
Use a curated bundled snapshot:
10+
Expose a MCP-first curated snapshot in `public_ops_manifest.json`:
1111

12-
- Keep the existing `59` no-security/public operations.
13-
- Add authenticated operations required by current CLI wrappers.
14-
- Exclude admin/internal endpoints from the bundled snapshot.
12+
- Keep discovery-first and agent-operator workflows that are UI-equivalent and operationally useful.
13+
- Exclude legacy/noisy entries unless the CLI intentionally surfaces them.
14+
- Keep side-effectful MCP runtime helpers visible but blocked in automated policy.
1515

1616
## Declared public API vs CLI-supported coverage baseline
1717

18-
- **Declared public API** is the bundled snapshot contract:
19-
- `71` operations total (`59` public/no-security + `12` authenticated wrapper-backed operations).
20-
- Exposed through `catalog`/`ops` and reflected in CLI command docs.
21-
- **CLI-supported coverage baseline** is the same operation set, with one `support_scope` per operation used by harness and release review.
18+
- Declared public API is the MCP-first snapshot contract (`src/agenticflow_cli/public_ops_manifest.json`).
19+
- CLI-supported coverage baseline is the same snapshot, with support classification applied per operation.
2220

23-
## Support matrix (single source of truth)
21+
## MCP-first manifest scope
2422

25-
The support scope baseline is stored in `src/agenticflow_cli/public_ops_manifest.json` on each operation record:
23+
Current manifest counts:
2624

27-
- `support_scope`: one of `executed`, `blocked-by-policy`, or `unsupported/out-of-scope`.
28-
- `support_rationale`: operator-facing reason this operation is in its class.
25+
- `33` operations total.
26+
- `21` `supported-executed`.
27+
- `12` `supported-blocked-policy`.
28+
- `0` `unsupported/out-of-scope`.
2929

30-
Current baseline totals:
30+
## Support matrix
3131

32-
- `34` `executed`
33-
- `17` `blocked-by-policy`
34-
- `20` `unsupported/out-of-scope`
32+
The support scope in each manifest row is one of two values:
3533

36-
Policy semantics:
34+
- `supported-executed`: safe read/query/validation/public-wrapper operations that are executed in coverage and release smoke.
35+
- `supported-blocked-policy`: command intent exists, but execution is intentionally blocked in automated coverage for safety/policy reasons.
3736

38-
- `executed`: safe read/query/validation/public wrappers that coverage attempts as live API calls.
39-
- `blocked-by-policy`: command intent exists, but execution is intentionally blocked in harness for safety/policy.
40-
- `unsupported/out-of-scope`: intentionally not part of the CLI-supported public surface (internal, unsupported workflow, or unimplemented wrapper contract).
37+
## Release interpretation
4138

42-
## Release interpretation of support rows
39+
- `supported-executed`: release as supported behavior; these operations are expected to remain runnable in public smoke.
40+
- `supported-blocked-policy`: include as high-value, command-intent-backed surface area, but gate execution in automated coverage and runbooks.
41+
- `unsupported/out-of-scope`: not included in this manifest unless a command family later requires explicit declaration.
4342

44-
- `executed`: release as supported/available behavior. These operations are expected to remain runnable in public smoke checks.
45-
- `blocked-by-policy`: keep listed as “declared public API, unavailable by policy” in release notes and include policy rationale.
46-
- `unsupported/out-of-scope`: do not promote as supported features; these are intentionally outside the CLI contract even if visible in discovery.
43+
## Representative MCP-first authenticated operations still declared
4744

48-
## Added authenticated operation IDs
49-
50-
- `create_workflow_model_v1_workspaces__workspace_id__workflows_post`
45+
- `get_by_id_v1_agents__agent_id__get`
5146
- `get_workflow_model_v1_workflows__workflow_id__get`
52-
- `update_workflow_model_v1_workspaces__workspace_id__workflows__workflow_id__put`
53-
- `create_workflow_run_model_v1_workflow_runs__post`
5447
- `get_workflow_run_model_v1_workflow_runs__workflow_run_id__get`
55-
- `create_v1_agents__post`
56-
- `get_by_id_v1_agents__agent_id__get`
57-
- `update_v1_agents__agent_id__put`
58-
- `ai_sdk_stream_v2_v1_agents__agent_id__stream_post`
59-
- `get_dynamic_options_v1_node_types_name__node_type_name__dynamic_options_post`
60-
- `get_app_connections_v1_workspaces__workspace_id__app_connections__get`
61-
- `get_app_connection_categories_v1_workspaces__workspace_id__app_connections_categories_get`
62-
63-
## Resulting bundled snapshot
64-
65-
- `71` operations total.
66-
- `59` no-security/public operations.
67-
- `12` authenticated operations.
68-
69-
## Commanding model
70-
71-
High-level command families (`workflow`, `agent`, `node-types`, `connections`) are thin wrappers over `agenticflow_sdk` methods and use the operation IDs above in a UX-oriented form.
72-
`call` is the raw OpenAPI command (`--operation-id` or `--method` + `--path`) and bypasses the high-level wrappers.
73-
74-
## Runtime behavior
75-
76-
- Commands with both anonymous and authenticated variants (`workflow get/run/run-status`, `agent get/stream`) now choose:
77-
- authenticated operation when `AGENTICFLOW_PUBLIC_API_KEY` is present,
78-
- anonymous operation when key is absent.
79-
- Lifecycle and workspace commands (`workflow create/update`, `agent create/update`, `node-types dynamic-options`, `connections list/categories`) now use authenticated operation IDs.
48+
- `validate_create_workflow_model_v1_workflows_utils_validate_create_workflow_model_post`
49+
- `get_nodetype_models_v1_node_types__get`
50+
- `get_nodetype_model_by_name_v1_node_types_name__name__get`
51+
- `get_dynamic_options_v1_node_types_name__node_type_name__dynamic_options_post` (blocked)
52+
- `get_supported_node_types_v1_workspaces__workspace_id__workforce_node_types_get`
53+
- `get_providers_v1_model_providers__get`
54+
- `get_anonymous...`, `get_agent_thread...`, and anonymous workflow/read telemetry rows for MCP runtime flows.
55+
56+
## Runtime behavior contract
57+
58+
- Declared entries are the MCP-first baseline in this repo.
59+
- Unsupported/out-of-scope rows are omitted by default so the catalog/policy surface is intentionally quieter.
60+
- Side-effectful operations remain discoverable in manifest and docs only when policy says blocked.

0 commit comments

Comments
 (0)