Skip to content

feat: Add wso2-agentic-engineer module - #219

Open
senithkay wants to merge 9 commits into
openchoreo:mainfrom
senithkay:agentic-engineer-community-mod-v2
Open

feat: Add wso2-agentic-engineer module#219
senithkay wants to merge 9 commits into
openchoreo:mainfrom
senithkay:agentic-engineer-community-mod-v2

Conversation

@senithkay

@senithkay senithkay commented Jun 17, 2026

Copy link
Copy Markdown

Purpose

Adds the WSO2 Agentic Engineer as a new OpenChoreo community module. WSO2 Agentic Engineer is a spec-driven, AI-enhanced software development lifecycle platform that installs on an existing OpenChoreo cluster,
wiring into the control plane, data plane, and workflow plane.

Approach

Added wso2-agentic-engineer/ module directory containing:

  • README.md — full installation guide with quick-start for local k3d and production install steps
  • values/asdlc-platform.yaml — pre-configured values template with <PLACEHOLDER> format for production deployments

The module installs via a single Helm chart (oci://ghcr.io/wso2/wso2-agentic-engineer-bundle) published to GHCR. It reuses OpenChoreo's existing Thunder instance for identity, registers OAuth clients via a
post-install bootstrap job.

Related Issues

N/A

Checklist

  • Tests added or updated (unit, integration, etc.)
  • Samples updated (if applicable) — values/asdlc-platform.yaml serves as the install sample

Remarks

  • Local k3d users can install with no values file; all defaults match the standard OpenChoreo k3d setup
  • Production installs require filling in the placeholders in values/asdlc-platform.yaml

Summary by CodeRabbit

Release Notes

  • Documentation

    • Added an end-to-end installation guide for the WSO2 Agentic Engineer module on OpenChoreo, covering prerequisites, required environment variables, quick start, guided Helm setup (including GitHub integration options and local webhook relay), verification commands, access URLs, and uninstall steps.
  • Chores

    • Added a CI module manifest for the WSO2 Agentic Engineer module (Helm-only deployment).
    • Added an ASDLC platform Helm values configuration template covering TLS/gateway patching, identity provider and OpenBao connectivity, GitHub integration settings, and task signing key placeholders.

…com>

I, Senith Uthsara <senithkarunarathneu@gmail.com>, hereby add my Signed-off-by to this commit: 7a7558d
I, Senith Uthsara <senithkarunarathneu@gmail.com>, hereby add my Signed-off-by to this commit: 6531e41

Signed-off-by: Senith Uthsara <senithkarunarathneu@gmail.com>
@coderabbitai

coderabbitai Bot commented Jun 17, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@senithkay, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 42 minutes and 28 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 5d02dca1-2b30-465a-bc63-232c7b8a8b53

📥 Commits

Reviewing files that changed from the base of the PR and between 1d350e2 and 6ca6aef.

📒 Files selected for processing (2)
  • wso2-agentic-engineer/README.md
  • wso2-agentic-engineer/values/asdlc-platform.yaml
📝 Walkthrough

Walkthrough

Adds the wso2-agentic-engineer module with a CI manifest, a Helm values template for deployment configuration, and README instructions covering setup, installation, verification, access, and removal.

Changes

WSO2 Agentic Engineer Module

Layer / File(s) Summary
Module manifest and bootstrap values
wso2-agentic-engineer/module.yaml, wso2-agentic-engineer/values/asdlc-platform.yaml
Adds module.yaml with images: [] and the values sections for TLS, gateway patching, control-plane gateway exposure, Thunder connection settings, and BFF/console public URLs.
Integrations, storage, and sub-chart overrides
wso2-agentic-engineer/values/asdlc-platform.yaml
Adds GitHub, PostgreSQL, and OpenBao settings, then wires the wso2-ae-platform overrides for API routing, Thunder URLs, task signing, webhook relay, secret policies, and authz configuration.
Architecture and prerequisites
wso2-agentic-engineer/README.md
Describes the module architecture, required cluster context, environment variables, and Thunder identity provider assumptions and bootstrap behavior.
Secrets model and local quick start
wso2-agentic-engineer/README.md
Documents secret flow through OpenBao and ESO, the forceDefaultOverride modes, secret rotation, and the local k3d quick-start installation path.
Installation, verification, and access
wso2-agentic-engineer/README.md
Documents GitHub integration choices, the smee relay option, Helm installation steps, task signing key handling, post-install jobs, verification commands, access URLs, default credentials, and uninstallation.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested reviewers

  • LakshanSS
  • nilushancosta

Poem

🐇 A module hopped in, neat and bright,
With values tuned just right.
Thunder hums and secrets gleam,
Helm leads the install-stream.
The README guides the trail with care,
And rabbit feet tap a happy air.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Title check ⚠️ Warning The title is on-topic and concise, but it violates the repo's Conventional Commits format because the subject starts with an uppercase letter. Change it to feat: add wso2-agentic-engineer module so the type/subject format matches the template.
✅ Passed checks (4 passed)
Check name Status Explanation
Description check ✅ Passed The description includes all required sections and covers purpose, approach, issues, checklist, and remarks adequately.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@wso2-agentic-engineer/README.md`:
- Line 239: The README.md documentation at the line mentioning Thunder admin
credentials with default `admin/admin` does not include an explicit warning that
these are only for local/dev environments. Modify the credential documentation
to explicitly scope the default `admin/admin` credentials to local and
development setups only, and add a clear production warning that credentials
must be rotated and changed for any production deployment to meet security
requirements.

In `@wso2-agentic-engineer/values/asdlc-platform.yaml`:
- Around line 35-40: Replace the hardcoded default values for the Thunder client
secrets in the configuration file. Specifically, change the `adminClientSecret`
and `systemClientSecret` fields under the Thunder configuration section from
their current hardcoded values ("openchoreo-system-app-secret" and
"asdlc-system-client-secret") to placeholder values that clearly indicate
operators must provide their own values, such as "<CHANGE_ME>" or similar
convention that makes the required action obvious for production deployments.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 8e7d9b1f-0092-4c5d-ae7b-e7e3d7bd7960

📥 Commits

Reviewing files that changed from the base of the PR and between 84535ad and 43f0104.

📒 Files selected for processing (3)
  • wso2-agentic-engineer/README.md
  • wso2-agentic-engineer/module.yaml
  • wso2-agentic-engineer/values/asdlc-platform.yaml

Comment thread wso2-agentic-engineer/README.md
Comment thread wso2-agentic-engineer/values/asdlc-platform.yaml
@senithkay senithkay changed the title feat:nAdd wso2-agentic-engineer community module feat: Add wso2-agentic-engineer community module Jun 17, 2026
@senithkay senithkay changed the title feat: Add wso2-agentic-engineer community module feat: Add wso2-agentic-engineer module Jun 17, 2026
…nt secret

Signed-off-by: Senith Uthsara <senithkarunarathneu@gmail.com>

@LakshanSS LakshanSS left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the contribution, @senithkay and welcome, great first PR!

@rashadism rashadism self-assigned this Jun 18, 2026
@LakshanSS
LakshanSS requested a review from rashadism June 18, 2026 07:54
DCO Remediation Commit for Senith Uthsara <senithkarunarathneu@gmail.com>

I, Senith Uthsara <senithkarunarathneu@gmail.com>, hereby add my Signed-off-by to this commit: b8a43d9

Signed-off-by: Senith Uthsara <senithkarunarathneu@gmail.com>
@senithkay
senithkay force-pushed the agentic-engineer-community-mod-v2 branch from 5985b0b to 01bce6e Compare June 19, 2026 07:08
@senithkay

Copy link
Copy Markdown
Author

Updated the PR to reflect new task signing key auto generation when non provided

@rashadism

Copy link
Copy Markdown
Contributor

Hi @senithkay, thanks for the contribution!

Since this is a new module addition, could you open a discussion at https://github.com/openchoreo/openchoreo/discussions so others can weigh in as well?

A few things I noted in the PR in the meantime:

  1. Thunder dependency. Thunder is the default IdP but it's swappable, OpenChoreo can point at any OIDC provider and Thunder can be uninstalled. Requiring it as a prereq and patching thunder-config-map / restarting thunder-deployment in a post-install job breaks for anyone who has swapped it out. Could the OAuth client setup go through generic OIDC config instead?

  2. OpenBao dependency. OpenBao is only the dev/k3d backend, prod can use any ESO store via the default ClusterSecretStore. ESO is listed as a prereq, but the runner then uses an openbao.token (root token) directly, which skips that abstraction. Pulling the Anthropic key through ESO would keep it backend agnostic.

  3. Secrets as Helm values. github.clientSecret, anthropic.apiKey, postgres password, openbao.token etc. go in as plaintext values, so anyone with helm get values access can read them. This is what the OpenChoreo secret model avoids. Worth moving these to the secret store or as raw Kubernetes secrets.

Feel free to reach out with any questions!

Signed-off-by: Senith Uthsara <senithkarunarathneu@gmail.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
wso2-agentic-engineer/values/asdlc-platform.yaml (2)

106-111: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Avoid hard-coding the default Thunder admin endpoint twice.

Lines 109-111 ignore the configurable thunder.adminURL above and pin the sub-chart to thunder-service.thunder.svc.cluster.local:8090. Any install that moves Thunder or renames the Service will update one section and still fail here.

Suggested patch
   idp:
     issuer: "<THUNDER_PUBLIC_URL>"
     jwksURL: "<THUNDER_PUBLIC_URL>/oauth2/jwks"
-    jwksInternalURL: "http://thunder-service.thunder.svc.cluster.local:8090/oauth2/jwks"
-    tokenURL: "http://thunder-service.thunder.svc.cluster.local:8090/oauth2/token"
-    adminURL: "http://thunder-service.thunder.svc.cluster.local:8090"
+    jwksInternalURL: "<THUNDER_ADMIN_URL>/oauth2/jwks"
+    tokenURL: "<THUNDER_ADMIN_URL>/oauth2/token"
+    adminURL: "<THUNDER_ADMIN_URL>"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@wso2-agentic-engineer/values/asdlc-platform.yaml` around lines 106 - 111, The
idp URLs are hard-coded to the Thunder Service DNS instead of using the
configurable Thunder admin endpoint. Update the idp block to derive
jwksInternalURL, tokenURL, and adminURL from the existing thunder.adminURL value
(or a single shared base value) so the sub-chart stays consistent when Thunder
is moved or renamed. Use the idp keys and the thunder.adminURL setting to locate
and refactor the duplicated endpoint references.

79-84: 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

PostgreSQL credentials still leak through Helm values.

Lines 79-84 keep the DB password in postgres.auth.password, and the example postgres.url embeds user:pass@.... Both paths end up in helm get values / release history, so this template still bypasses the secret-store model documented below. Please switch the chart contract to consume a Secret/ExternalSecret reference instead of raw DB credentials.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@wso2-agentic-engineer/values/asdlc-platform.yaml` around lines 79 - 84, The
postgres values contract still exposes credentials via postgres.auth.password
and the example postgres.url, so update the chart to stop accepting raw DB
secrets in values and instead reference an existing Secret or ExternalSecret for
connection details. Adjust the Helm template and any consumers to read the
PostgreSQL password/URL from that secret-backed reference, and remove the inline
credential fields from the asdlc-platform values schema while keeping
identifiers like postgres, postgres.auth, and postgres.url aligned with the new
secret-based flow.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@wso2-agentic-engineer/README.md`:
- Around line 232-239: The `postgres.auth.password` value is currently
documented as a plain Helm release value, unlike the
`wso2-ae-platform.secrets.*` entries, so it bypasses the
PushSecret/OpenBao/ExternalSecret flow. Update the README and associated secret
configuration to move this password into the same secret-store pattern as the
other credentials, using the `postgres.auth.password` setting only via a
Kubernetes Secret or external secret reference so it is not exposed through
`helm get values`.
- Around line 51-52: Update the README secret-management docs to stop presenting
OpenBao as the mandatory backend and instead describe ESO as the required
prerequisite with a compatible `ClusterSecretStore` backend for production. In
the prerequisites and secret-management sections, rephrase the guidance around
the `ClusterSecretStore` flow generically using the existing ESO-related
wording, then move the OpenBao-specific setup and examples into a collapsible
“Example: OpenBao” subsection. Keep the references centered on the README’s
prerequisites/secret-management text so the wording clearly distinguishes
dev/k3d OpenBao usage from production backends supported by ESO.
- Around line 103-106: The README’s Secret Management guidance conflicts with
the install instructions because it says secrets never appear in Helm values
while the table still tells users to place sensitive fields like
githubClientSecret and postgres.auth.password in values.yaml. Reconcile the
documentation by updating the installation flow to keep all sensitive values out
of values.yaml and reference only pre-seeded OpenBao/ESO-managed secrets, or
explicitly distinguish which entries in the install table are non-sensitive
placeholders versus secrets that must be created out of band; make sure the
Secret Management section and the installation table tell the same story.

In `@wso2-agentic-engineer/values/asdlc-platform.yaml`:
- Around line 87-95: The production seeding guidance conflicts with the
ServiceAccount-based OpenBao auth model by instructing operators to use a static
BAO_TOKEN and kubectl exec into openbao-0. Update the seeding instructions in
the OpenBao guidance section so they use the same Kubernetes ServiceAccount /
ClusterSecretStore flow described by openbao.auth, authRole, serviceAccountName,
and serviceAccountNamespace, and remove any token-based OpenBao-specific steps
from the operator path.

---

Outside diff comments:
In `@wso2-agentic-engineer/values/asdlc-platform.yaml`:
- Around line 106-111: The idp URLs are hard-coded to the Thunder Service DNS
instead of using the configurable Thunder admin endpoint. Update the idp block
to derive jwksInternalURL, tokenURL, and adminURL from the existing
thunder.adminURL value (or a single shared base value) so the sub-chart stays
consistent when Thunder is moved or renamed. Use the idp keys and the
thunder.adminURL setting to locate and refactor the duplicated endpoint
references.
- Around line 79-84: The postgres values contract still exposes credentials via
postgres.auth.password and the example postgres.url, so update the chart to stop
accepting raw DB secrets in values and instead reference an existing Secret or
ExternalSecret for connection details. Adjust the Helm template and any
consumers to read the PostgreSQL password/URL from that secret-backed reference,
and remove the inline credential fields from the asdlc-platform values schema
while keeping identifiers like postgres, postgres.auth, and postgres.url aligned
with the new secret-based flow.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 8a5927a4-5313-414a-beec-c077a78bc430

📥 Commits

Reviewing files that changed from the base of the PR and between b8a43d9 and 1d350e2.

📒 Files selected for processing (2)
  • wso2-agentic-engineer/README.md
  • wso2-agentic-engineer/values/asdlc-platform.yaml

Comment thread wso2-agentic-engineer/README.md
Comment thread wso2-agentic-engineer/README.md
Comment thread wso2-agentic-engineer/README.md Outdated
Comment on lines +87 to +95
# Address of the OpenBao instance in your cluster.
# Auth is handled via Kubernetes ServiceAccount (no static token needed).
# Override openbao.authRole / serviceAccountName / serviceAccountNamespace only
# if your OpenBao uses a non-default role or service account.
openbao:
addr: "http://openbao.openbao.svc.cluster.local:8200"
# authRole: "openchoreo-secret-writer-role" # default
# serviceAccountName: "external-secrets-openbao" # default
# serviceAccountNamespace: "openbao" # default

@coderabbitai coderabbitai Bot Jun 26, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Production seeding guidance reintroduces static OpenBao tokens.

Lines 87-95 say OpenBao auth is handled via Kubernetes ServiceAccount, but Lines 146-150 tell operators to kubectl exec into openbao-0 with BAO_TOKEN=<token>. That contradicts the declared auth model and keeps the production path OpenBao-specific instead of ClusterSecretStore-agnostic.

Also applies to: 146-150

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@wso2-agentic-engineer/values/asdlc-platform.yaml` around lines 87 - 95, The
production seeding guidance conflicts with the ServiceAccount-based OpenBao auth
model by instructing operators to use a static BAO_TOKEN and kubectl exec into
openbao-0. Update the seeding instructions in the OpenBao guidance section so
they use the same Kubernetes ServiceAccount / ClusterSecretStore flow described
by openbao.auth, authRole, serviceAccountName, and serviceAccountNamespace, and
remove any token-based OpenBao-specific steps from the operator path.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thunder dependency and OpenBao dependency — We acknowledge both concerns and agree they should be decoupled. For now we are keeping Thunder and OpenBao as explicit prerequisites while we work through the right abstraction

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@senithkay, thanks for the clarification — keeping Thunder and OpenBao as explicit prerequisites in this PR is a reasonable scoping decision while the abstraction is still being worked out.

My remaining concern is narrower than the dependency itself: the docs/comments should be internally consistent. If the current operator flow still requires manual OpenBao seeding with BAO_TOKEN, then the note around Line 87-Line 95 probably shouldn’t say “no static token needed,” since that reads as if the token-based path is not part of the supported setup.

So I’m good with deferring the decoupling, but I’d still recommend aligning the wording so operators don’t get mixed signals. If you want, I can also help turn the Thunder/OpenBao decoupling into a follow-up issue for after #219.

(•ᴗ•)っ🥕


🧠 Learnings used
Learnt from: ruks
Repo: openchoreo/community-modules PR: 22
File: observability-logs-moesif/helm/values.yaml:118-124
Timestamp: 2026-03-12T13:54:17.645Z
Learning: In observability-logs-moesif/helm/values.yaml, the Fluent Bit initContainer set-volume-ownership runs chown -R 10000:10000 /var/lib/fluent-bit/db on a hostPath volume. The previous use of privileged: true was due to capabilites.drop: [ALL] removing CAP_CHOWN. Replace the full privileges with a least-privilege config: keep capabilities.drop: [ALL] but add back only CAP_CHOWN via capabilities.add: ["CHOWN"]. This avoids granting full node privileges while still allowing the required chown operation. Apply this change specifically in the initContainer spec that performs volume ownership, ensuring the container remains non-privileged except for the explicitly required CHOWN capability.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see 6ca6aef

Signed-off-by: Senith Uthsara <senithkarunarathneu@gmail.com>
Signed-off-by: Senith Uthsara <senithkarunarathneu@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants