Skip to content

Commit ec93808

Browse files
author
yanan.zhangyn
committed
feat(studio): add managed Harness Sidecar integration
1 parent 0c09e53 commit ec93808

73 files changed

Lines changed: 12450 additions & 655 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
name: Harness Sidecar Release Gate
2+
3+
on:
4+
workflow_call:
5+
push:
6+
paths:
7+
- '.github/workflows/harness-sidecar-release-gate.yaml'
8+
- 'frontend/**'
9+
- 'tests/cli/test_generated_agent_harness_sidecar.py'
10+
- 'tests/cli/test_managed_sidecar_source.py'
11+
- 'tests/cli/test_generated_agent_backend_codegen_extended.py'
12+
- 'tests/cli/test_studio_rbac.py'
13+
- 'tests/extensions/harness/**'
14+
- 'tests/integrations/agentkit/test_app.py'
15+
- 'veadk/cli/generated_agent_codegen.py'
16+
- 'veadk/cli/cli_frontend.py'
17+
- 'veadk/cli/managed_sidecar_source.py'
18+
- 'veadk/extensions/harness/**'
19+
- 'veadk/integrations/agentkit/app.py'
20+
- 'pyproject.toml'
21+
pull_request:
22+
paths:
23+
- '.github/workflows/harness-sidecar-release-gate.yaml'
24+
- 'frontend/**'
25+
- 'tests/cli/test_generated_agent_harness_sidecar.py'
26+
- 'tests/cli/test_managed_sidecar_source.py'
27+
- 'tests/cli/test_generated_agent_backend_codegen_extended.py'
28+
- 'tests/cli/test_studio_rbac.py'
29+
- 'tests/extensions/harness/**'
30+
- 'tests/integrations/agentkit/test_app.py'
31+
- 'veadk/cli/generated_agent_codegen.py'
32+
- 'veadk/cli/cli_frontend.py'
33+
- 'veadk/cli/managed_sidecar_source.py'
34+
- 'veadk/extensions/harness/**'
35+
- 'veadk/integrations/agentkit/app.py'
36+
- 'pyproject.toml'
37+
38+
permissions:
39+
contents: read
40+
41+
jobs:
42+
gate:
43+
runs-on: ubuntu-latest
44+
timeout-minutes: 30
45+
steps:
46+
- uses: actions/checkout@v4
47+
48+
- uses: actions/setup-python@v5
49+
with:
50+
python-version: '3.12'
51+
52+
- uses: actions/setup-node@v4
53+
with:
54+
node-version: 22.17.0
55+
cache: npm
56+
cache-dependency-path: frontend/package-lock.json
57+
58+
- name: Install Python test dependencies
59+
run: python -m pip install -e '.[dev]'
60+
61+
- name: Enforce public Python Sidecar coverage above 90 percent
62+
run: |
63+
python -m pytest -q \
64+
tests/extensions/harness/test_studio_sidecar.py \
65+
tests/extensions/harness/test_sidecar_public_api.py \
66+
tests/extensions/harness/test_extension.py \
67+
tests/cli/test_generated_agent_harness_sidecar.py \
68+
tests/cli/test_managed_sidecar_source.py \
69+
tests/integrations/agentkit/test_app.py \
70+
tests/cli/test_studio_rbac.py::test_sidecar_deployment_uses_agentkit_cli_structured_release \
71+
tests/cli/test_generated_agent_backend_codegen_extended.py::test_generated_agent_sidecar_debug_uses_runtime_apig_and_active_plan \
72+
--cov=. --cov-branch --cov-report= --cov-fail-under=0
73+
python -m coverage report \
74+
--include='*/veadk/extensions/harness/sidecar.py' \
75+
--fail-under=91 --show-missing
76+
77+
- name: Install frontend dependencies
78+
working-directory: frontend
79+
run: npm ci --ignore-scripts
80+
81+
- name: Enforce public Studio Sidecar coverage above 90 percent
82+
working-directory: frontend
83+
run: npm run test:harness-sidecar-coverage
84+
85+
- name: Verify frontend Sidecar integration
86+
working-directory: frontend
87+
run: npm test

.github/workflows/publish-studio-release.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,17 @@ concurrency:
3939
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
4040

4141
jobs:
42+
harness-sidecar-release-gate:
43+
if: >-
44+
github.repository == 'volcengine/veadk-python' &&
45+
(github.event_name == 'pull_request' || github.ref == 'refs/heads/main')
46+
uses: ./.github/workflows/harness-sidecar-release-gate.yaml
47+
4248
verify:
4349
if: >-
4450
github.repository == 'volcengine/veadk-python' &&
4551
(github.event_name == 'pull_request' || github.ref == 'refs/heads/main')
52+
needs: harness-sidecar-release-gate
4653
runs-on: ubuntu-latest
4754
timeout-minutes: 45
4855

.github/workflows/publish-tag-to-pypi.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ on:
55
workflow_dispatch:
66

77
jobs:
8+
harness-sidecar-release-gate:
9+
uses: ./.github/workflows/harness-sidecar-release-gate.yaml
10+
811
build:
12+
needs: harness-sidecar-release-gate
913
runs-on: ubuntu-latest
1014
steps:
1115
- uses: actions/checkout@v4

.github/workflows/push-preview-image-to-vecr.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@ on:
2424
workflow_dispatch:
2525

2626
jobs:
27+
harness-sidecar-release-gate:
28+
if: github.repository == 'volcengine/veadk-python'
29+
uses: ./.github/workflows/harness-sidecar-release-gate.yaml
30+
2731
build-and-push:
32+
needs: harness-sidecar-release-gate
2833
runs-on: ubuntu-latest
2934

3035
# To avoid forked repo execute this workflow
@@ -64,4 +69,4 @@ jobs:
6469
--push \
6570
--cache-from=type=gha \
6671
--cache-to=type=gha,mode=max \
67-
.
72+
.

.github/workflows/push-stable-image-to-vecr.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ on:
2222
workflow_dispatch:
2323

2424
jobs:
25+
harness-sidecar-release-gate:
26+
if: github.repository == 'volcengine/veadk-python'
27+
uses: ./.github/workflows/harness-sidecar-release-gate.yaml
28+
2529
build-and-push:
30+
needs: harness-sidecar-release-gate
2631
runs-on: ubuntu-latest
2732
permissions:
2833
contents: read
@@ -67,4 +72,4 @@ jobs:
6772
--push \
6873
--cache-from=type=gha \
6974
--cache-to=type=gha,mode=max \
70-
.
75+
.

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ htmlcov/
4545
.cache
4646
nosetests.xml
4747
coverage.xml
48+
coverage/
4849
*.cover
4950
*.py,cover
5051
.hypothesis/

frontend/README.md

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -130,17 +130,22 @@ server that `veadk frontend` launches — no separate backend.
130130
instead of credentials. Long descriptions, names, component summaries, IDs,
131131
and environment values stay inside the scrollable panel.
132132
- **Custom-agent workbench**: configure an agent with a rich Markdown
133-
system-prompt editor (including heading and list shortcuts), then debug with
134-
expandable, copyable runner error details, per-result Trace inspection, and
135-
review. The lifecycle follows Architecture, Debug, Environment, and Publish.
136-
The Environment step can optionally add the official Lark CLI and GitHub CLI
137-
to the cloud runtime. Selecting either tool generates an inspectable
138-
provider-specific Dockerfile with pinned releases, amd64/arm64 assets, and
139-
SHA-256 verification. Advanced configuration can edit that Dockerfile
140-
directly or restore the provider-specific generated version; selecting
141-
neither and leaving the Dockerfile unchanged keeps AgentKit's default image
142-
build. Credentials are never written into the generated Dockerfile.
143-
In-progress drafts are stored only in the current browser and scoped
133+
system-prompt editor (including heading and list shortcuts), choose Harness
134+
Sidecar optimizations, then debug with expandable, copyable runner error
135+
details and per-result Trace inspection. The workbench order is `架构`
136+
`优化``调试``环境``发布`. On the optimization page, `自定义`
137+
appears first and starts with no components, while `运维场景` applies the
138+
`ops` component combination. Component checkboxes remain editable and an empty
139+
selection keeps Sidecar disabled. The Environment step can optionally add the
140+
official Lark CLI, GitHub CLI, and Pandoc to the cloud runtime. Selecting a
141+
tool generates an inspectable provider-specific Dockerfile with pinned
142+
releases, amd64/arm64 assets, and SHA-256 verification. Advanced configuration
143+
can edit that Dockerfile directly or restore the generated version; selecting
144+
no tool and leaving the Dockerfile unchanged keeps AgentKit's default image
145+
build. Credentials are never written into the generated Dockerfile. Published
146+
Agent details display the saved Sidecar scenario and selected components as
147+
read-only information. In-progress drafts are stored only in the current
148+
browser and scoped
144149
to the signed-in user. MCP tokens are converted to Runtime environment
145150
variables: generated source retains only the `${ENV_NAME}` reference, while
146151
YAML and browser drafts preserve the corresponding environment value.

0 commit comments

Comments
 (0)