Skip to content

feat(RHIDP-18556): add spec.executionMode to agent AiResource entity - #5415

Merged
yangcao77 merged 3 commits into
mainfrom
agent/RHIDP-18556-add-spec-spawn
Nov 3, 2026
Merged

yangcao77 merged 3 commits into
mainfrom
agent/RHIDP-18556-add-spec-spawn

Conversation

@fullsend-ai-coder

Copy link
Copy Markdown
Contributor

Hey, I just made a Pull Request!

Adds the optional spec.spawn field to the AI Catalog agent entity definition (AiResource, spec.type: agent) in the ai-integrations workspace. This field declares whether an agent runs in-process (none), in a child process (local), or in a predefined sandbox (ephemeral). When omitted, LCore applies its default.

What changed

catalog-model-ai-resource-agent (minor)

  • Added spawn?: 'none' | 'local' | 'ephemeral' to AgentAiResourceEntityV1alpha1 TypeScript interface
  • Added spawn enum property to the JSON schema with description
  • Added a schema example demonstrating the spawn field
  • Updated API report

catalog-backend-module-ai-resource-agent (minor)

  • Extended collectAgentErrors to validate spec.spawn — rejects booleans, numbers, and invalid string values with clear error messages
  • AiResourceAgentProcessor automatically picks up the new validation

Tests

  • Schema validation: accepts each valid value, omitted field; rejects boolean, number, invalid string
  • collectAgentErrors: accepts each valid value, missing field; rejects boolean, number, invalid string (with quoted value in message)
  • AiResourceAgentProcessor: accepts valid spawn, accepts absent spawn, rejects invalid/boolean spawn

Example

  • Added spawn: local to the technical-specialist-agent example
  • Added a sandboxed-code-agent schema example with spawn: ephemeral

✔️ Checklist

  • A changeset describing the change and affected packages.
  • Tests for new functionality and regression tests for bug fixes

Related to https://redhat.atlassian.net/browse/RHIDP-18556

Post-script verification

  • Branch is not main/master (agent/RHIDP-18556-add-spec-spawn)
  • Secret scan passed (gitleaks — 0b024a2859a0f6794c01398c5dd5f535463a965f..HEAD)
  • PR body secret scan passed (gitleaks — no-git)

Add an optional spawn field to the agent AiResource entity
definition that declares the agent execution spawn mode.
Accepted values are none (in-process), local (child process),
or ephemeral (predefined sandbox). Omitting the field preserves
backward compatibility — LCore applies its default.

Changes:
- catalog-model-ai-resource-agent: add spawn to the TypeScript
  interface, JSON schema (with enum constraint), and an example
- catalog-backend-module-ai-resource-agent: validate spawn in
  collectAgentErrors and AiResourceAgentProcessor, rejecting
  booleans, numbers, and invalid string values
- Add unit tests covering each valid value, omitted field, and
  invalid types across both packages
- Update API report and example YAML
- Add minor changesets for both packages

Related to RHIDP-18556

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@rhdh-gh-app

rhdh-gh-app Bot commented Oct 30, 2026

Copy link
Copy Markdown

Important

This PR includes changes that affect public-facing API. Please ensure you are adding/updating documentation for new features or behavior.

Changed Packages

Package Name Package Path Changeset Bump Current Version
@red-hat-developer-hub/backstage-plugin-catalog-backend-module-ai-resource-agent workspaces/ai-integrations/plugins/catalog-backend-module-ai-resource-agent minor v0.5.0
@red-hat-developer-hub/backstage-plugin-catalog-model-ai-resource-agent workspaces/ai-integrations/plugins/catalog-model-ai-resource-agent minor v0.4.0

@rhdh-qodo-merge

Copy link
Copy Markdown

PR Summary by Qodo

Add optional spawn mode to agent AiResource entities

✨ Enhancement 🧪 Tests 🕐 20-40 Minutes


AI Description

• Define optional agent spawn modes: in-process, child process, or predefined sandbox.
• Validate spawn values in the catalog while preserving behavior when the field is omitted.
• Add tests, examples, API documentation, and minor changesets for both affected packages.
Diagram

graph TD
  Entity["Agent AiResource"] --> Processor["Catalog processor"] --> Errors["Field validation"]
  Processor --> Schema["Schema validation"]
  Types["TypeScript contract"] --> Entity
Loading
High-Level Assessment

Extending the existing agent type, schema, and validation paths is appropriate. It preserves omitted-field compatibility without introducing a separate validator or changing processor behavior for other entity types.

Files changed (10) +194 / -0

Enhancement (3) +47 / -0
collectAgentErrors.tsValidate optional agent spawn mode +17/-0

Validate optional agent spawn mode

• Adds a field-level check for the three supported spawn strings. Invalid values produce a spec.spawn error that includes the supplied value or its type.

workspaces/ai-integrations/plugins/catalog-backend-module-ai-resource-agent/src/collectAgentErrors.ts

AiResource.v1alpha1.agent.schema.jsonConstrain spawn in the agent JSON schema +20/-0

Constrain spawn in the agent JSON schema

• Adds an optional string enum for none, local, and ephemeral, with an execution-mode description. Includes a sandboxed agent example using ephemeral.

workspaces/ai-integrations/plugins/catalog-model-ai-resource-agent/src/AiResource.v1alpha1.agent.schema.json

types.tsAdd spawn to the agent entity type +10/-0

Add spawn to the agent entity type

• Declares spawn as an optional three-value union and documents each execution mode. Omitting it leaves the default to LCore.

workspaces/ai-integrations/plugins/catalog-model-ai-resource-agent/src/types.ts

Tests (3) +135 / -0
AiResourceAgentProcessor.test.tsTest processor handling of spawn values +52/-0

Test processor handling of spawn values

• Verifies that preprocessing accepts a valid or absent spawn field and rejects invalid string and boolean values.

workspaces/ai-integrations/plugins/catalog-backend-module-ai-resource-agent/src/AiResourceAgentProcessor.test.ts

collectAgentErrors.test.tsCover spawn field error collection +41/-0

Cover spawn field error collection

• Tests all supported values, omission, and rejection of boolean, numeric, and unsupported string values. Adds spawn to the comprehensive valid-agent fixture.

workspaces/ai-integrations/plugins/catalog-backend-module-ai-resource-agent/src/collectAgentErrors.test.ts

AgentAiResourceEntityV1alpha1.test.tsTest spawn schema constraints +42/-0

Test spawn schema constraints

• Verifies schema acceptance of each supported value and omission, plus rejection of boolean, numeric, and unsupported string values.

workspaces/ai-integrations/plugins/catalog-model-ai-resource-agent/src/AgentAiResourceEntityV1alpha1.test.ts

Documentation (2) +2 / -0
ai-resource-agents.yamlDemonstrate local spawn mode +1/-0

Demonstrate local spawn mode

• Sets spawn to local on the technical-specialist agent example.

workspaces/ai-integrations/examples/ai-resource-agents.yaml

report.api.mdExpose spawn in the API report +1/-0

Expose spawn in the API report

• Records the optional spawn union on the public agent entity interface.

workspaces/ai-integrations/plugins/catalog-model-ai-resource-agent/report.api.md

Other (2) +10 / -0
add-spec-spawn-backend.mdDeclare a minor backend validation release +5/-0

Declare a minor backend validation release

• Adds a minor changeset for the agent catalog backend module, documenting validation of the optional spawn field.

workspaces/ai-integrations/.changeset/add-spec-spawn-backend.md

add-spec-spawn-model.mdDeclare a minor agent model release +5/-0

Declare a minor agent model release

• Adds a minor changeset for the agent catalog model and documents the supported spawn modes and omitted-field behavior.

workspaces/ai-integrations/.changeset/add-spec-spawn-model.md

@codecov

codecov Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 65.39%. Comparing base (0b024a2) to head (fbee158).
⚠️ Report is 10 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #5415      +/-   ##
==========================================
+ Coverage   65.35%   65.39%   +0.04%     
==========================================
  Files        2758     2762       +4     
  Lines      110579   110729     +150     
  Branches    31085    31107      +22     
==========================================
+ Hits        72264    72407     +143     
- Misses      37739    37761      +22     
+ Partials      576      561      -15     
Flag Coverage Δ *Carryforward flag
adoption-insights 87.31% <ø> (ø) Carriedforward from 8a55ea2
ai-integrations 90.69% <100.00%> (+0.13%) ⬆️
app-defaults 74.89% <ø> (ø) Carriedforward from 8a55ea2
augment 46.67% <ø> (ø) Carriedforward from 8a55ea2
boost 93.37% <ø> (ø) Carriedforward from 8a55ea2
bulk-import 73.12% <ø> (ø) Carriedforward from 8a55ea2
cost-management 13.56% <ø> (ø) Carriedforward from 8a55ea2
dcm 74.35% <ø> (ø) Carriedforward from 8a55ea2
e2e-adoption-insights 60.00% <ø> (ø) Carriedforward from 8a55ea2
e2e-extensions 62.42% <ø> (ø) Carriedforward from 8a55ea2
e2e-global-header 52.43% <ø> (ø) Carriedforward from 8a55ea2
e2e-homepage 61.25% <ø> (ø) Carriedforward from 8a55ea2
e2e-intelligent-assistant 46.02% <ø> (ø) Carriedforward from 8a55ea2
e2e-orchestrator 49.49% <ø> (ø) Carriedforward from 8a55ea2
e2e-orchestrator-plugin 49.48% <ø> (ø) Carriedforward from 8a55ea2
e2e-quickstart 54.83% <ø> (ø) Carriedforward from 8a55ea2
e2e-scorecard 49.88% <ø> (ø) Carriedforward from 8a55ea2
e2e-theme 16.43% <ø> (ø) Carriedforward from 8a55ea2
extensions 58.11% <ø> (ø) Carriedforward from 8a55ea2
global-floating-action-button 71.18% <ø> (ø) Carriedforward from 8a55ea2
global-header 69.15% <ø> (ø) Carriedforward from 8a55ea2
homepage 86.56% <ø> (ø) Carriedforward from 8a55ea2
install-dynamic-plugins 84.02% <ø> (ø) Carriedforward from 8a55ea2
intelligent-assistant 79.49% <ø> (ø) Carriedforward from 8a55ea2
konflux 91.98% <ø> (ø) Carriedforward from 8a55ea2
lightspeed 69.02% <ø> (ø) Carriedforward from 8a55ea2
mcp-integrations 84.46% <ø> (ø) Carriedforward from 8a55ea2
orchestrator 77.69% <ø> (ø) Carriedforward from 8a55ea2
quickstart 65.83% <ø> (ø) Carriedforward from 8a55ea2
sandbox 79.56% <ø> (ø) Carriedforward from 8a55ea2
scorecard 92.32% <ø> (ø) Carriedforward from 8a55ea2
theme 88.21% <ø> (ø) Carriedforward from 8a55ea2
translations 7.91% <ø> (ø) Carriedforward from 8a55ea2
x2a 79.43% <ø> (ø) Carriedforward from 8a55ea2

*This pull request uses carry forward flags. Click here to find out more.


Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 0b024a2...fbee158. Read the comment docs.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@rhdh-qodo-merge

rhdh-qodo-merge Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Qodo Logo

@rhdh-qodo-merge

Copy link
Copy Markdown

Important

The /generate_labels command by Qodo was deprecated on the 1st of October 2026 and is no longer available. We recommend switching to the latest Qodo review capabilities. Learn more

@fullsend-ai-review

fullsend-ai-review Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 8:26 PM UTC · Completed 8:47 PM UTC

Commit: d9765d8 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $5.73

@fullsend-ai-review fullsend-ai-review Bot added the risk/moderate PR risk: moderate label Oct 30, 2026
@fullsend-ai-review

Copy link
Copy Markdown

Risk Assessment: moderate (2/5)

Details

Bot-authored feature addition (10 files, medium blast radius, 30% test coverage) with no security, CI, or dependency changes and zero recent churn on stable paths; standard review is adequate.

@fullsend-ai-review

Copy link
Copy Markdown

Review

Findings

Medium

  • [missing new field in user-facing reference table] workspaces/ai-integrations/plugins/catalog-backend-module-ai-resource-agent/README.md:31 — The validation table in the README enumerates every agent-specific field the processor validates but is missing the new spec.spawn field. The processor now validates spec.spawn in collectAgentErrors.ts, accepting 'none'/'local'/'ephemeral' and rejecting any other value, but this rule is invisible to README readers.
    Remediation: Add a row to the validation table: | spec.spawn | Optional; must be 'none', 'local', or 'ephemeral' if present |

  • [incomplete field enumeration in behavioral spec] workspaces/ai-integrations/openspec/changes/airesource-agent-typed-schema/specs/ai-resource-agent-schema/spec.md:46 — The "Optional fields per design mapping" requirement explicitly lists the complete set of optional catalog fields but spec.spawn is absent, making the spec's field inventory inconsistent with the implemented schema.
    Remediation: Append spec.spawn to the field list in the "Optional fields per design mapping" requirement.

  • [missing field in design field-mapping table] workspaces/ai-integrations/openspec/changes/airesource-agent-typed-schema/design.md:70 — The D3 field-mapping table maps every agent spec field to its AiResource counterpart. The new spec.spawn field is not present in this table.
    Remediation: Add a row to the D3 mapping table for spec.spawn.

Low

  • [naming conventions] workspaces/ai-integrations/plugins/catalog-backend-module-ai-resource-agent/src/collectAgentErrors.test.ts:357 — The new describe label uses pipe-separated bare identifiers ('must be none|local|ephemeral'). Other describe blocks in this file phrase constraints using natural-language type descriptions.
    Remediation: Rename to match the natural-language phrasing used by other describe blocks, e.g. 'spec.spawn (optional, must be one of none, local, ephemeral)'.

Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR

@fullsend-ai-review fullsend-ai-review 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.

See the review comment for full details.

@yangcao77

Copy link
Copy Markdown
Contributor

/fs-fix

@fullsend-ai-coder

fullsend-ai-coder Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 6:22 PM UTC · Completed 6:33 PM UTC

Commit: d9765d8 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $1.42

Add the new spec.spawn field to the README validation table,
the spec.md optional-fields enumeration, and the design.md D3
field-mapping table. Fix test describe label to match the
natural-language naming convention used by other describe blocks.

Addresses #5415

Assisted-by: Claude Opus 4.6

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 Fix agent — iteration 1 (human-triggered)

Addressed all four review findings: added spec.spawn to the README validation table, the spec.md optional-fields list, and the design.md D3 field-mapping table; fixed the test describe label to use natural-language phrasing consistent with other describe blocks.

Fixed (4):

  1. missing new field in user-facing reference table (workspaces/ai-integrations/plugins/catalog-backend-module-ai-resource-agent/README.md): Added spec.spawn row to the validation table in the README
  2. incomplete field enumeration in behavioral spec (workspaces/ai-integrations/openspec/changes/airesource-agent-typed-schema/specs/ai-resource-agent-schema/spec.md): Appended spec.spawn to the optional catalog fields list in the Optional fields per design mapping requirement
  3. missing field in design field-mapping table (workspaces/ai-integrations/openspec/changes/airesource-agent-typed-schema/design.md): Added a row for spec.spawn to the D3 spike mapping table with no SDK equivalent notation
  4. naming conventions (workspaces/ai-integrations/plugins/catalog-backend-module-ai-resource-agent/src/collectAgentErrors.test.ts): Renamed describe label from pipe-separated identifiers to natural-language phrasing matching other describe blocks

Tests: passed

Next steps:

  • /fs-review — request a re-review of the changes
  • /fs-fix <your instruction> — run another fix pass with specific guidance
  • Push commits directly — review re-runs automatically on push
    Updated by fullsend fix agent

@gabemontero gabemontero 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.

I'm good with the basic structure @yangcao77 ... my only quibble is the names.

Am I correct in assuming that spawn , none, local, and ephemeral are what lcore uses?

I frankly prefer you clarifications, in-process, child-process, and maybe remote for the sandbox/ephermeral choice ... end of the day we don't care if the remote env is ephemeral or permanent ... that is an implementation detail of how LCORE works currently.

And maybe instead of "spawn" the more traditional term of "execution-model" that you see for process execution an/or RPC calls

You then map those fields to whatever lcore needs

Where I am most coming from with this is that the intent @johnmcollier and I had was the eventually upstream the AiResource type agent extension. I don't think the LCORE nomenclature as currently defined would resonate upstream .... we want to be "LCORE agnostic" if you get my meaning.

WDYT?

@yangcao77

Copy link
Copy Markdown
Contributor

/fs-fix use executionMode?: in-process | subprocess | sandbox instead for spawn?: 'none' | 'local' | 'ephemeral'. and ensure the change apply to all the files and also clearly documented what each option means

@fullsend-ai-coder

fullsend-ai-coder Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor Author

🤖 Finished Fix · ✅ Success · Started 8:49 PM UTC · Completed 9:04 PM UTC

Commit: 8a55ea2 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $3.36

…r values

Rename the field from `spawn` to `executionMode` and change the enum
values from 'none'|'local'|'ephemeral' to 'in-process'|'subprocess'|'sandbox'
per reviewer feedback. Each value now clearly describes how the agent
is executed by LCore:

- `in-process`  — runs inside the LCore process (no isolation)
- `subprocess`  — runs in a child process managed by LCore
- `sandbox`     — runs in an administrator-predefined sandbox profile

Applied consistently across TypeScript types, JSON schema, validation
logic, tests, examples, changesets, README, and OpenSpec documentation.

Addresses #5415

Assisted-by: Claude Opus 4.6
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@gabemontero

Copy link
Copy Markdown
Contributor

/fs-fix use executionMode?: in-process | subprocess | sandbox instead for spawn?: 'none' | 'local' | 'ephemeral'. and ensure the change apply to all the files and also clearly documented what each option means

fix the PR title as well @yangcao77 - thanks

@fullsend-ai-coder

Copy link
Copy Markdown
Contributor Author

🔧 Fix agent — iteration 2 (human-triggered)

Renamed spec.spawn to spec.executionMode and changed enum values from none/local/ephemeral to in-process/subprocess/sandbox across all 13 affected files (TypeScript types, JSON schema, validation logic, tests, examples, changesets, README, and OpenSpec documentation). Each option is clearly documented: in-process (runs inside the LCore process, no isolation), subprocess (runs in a child process managed by LCore), sandbox (runs in an administrator-predefined sandbox profile). All 106 tests pass.

Fixed (13):

  1. Rename spawn field to executionMode and change values from none/local/ephemeral to in-process/subprocess/sandbox (workspaces/ai-integrations/plugins/catalog-model-ai-resource-agent/src/types.ts): Renamed field from spawn to executionMode, changed enum values to in-process/subprocess/sandbox, updated JSDoc with clear descriptions of each option
  2. Ensure change applies to JSON schema (workspaces/ai-integrations/plugins/catalog-model-ai-resource-agent/src/AiResource.v1alpha1.agent.schema.json): Renamed schema property from spawn to executionMode, updated enum values and description with per-value documentation
  3. Ensure change applies to schema validator tests (workspaces/ai-integrations/plugins/catalog-model-ai-resource-agent/src/AgentAiResourceEntityV1alpha1.test.ts): Updated all test cases to use executionMode with in-process/subprocess/sandbox values
  4. Ensure change applies to backend validation logic (workspaces/ai-integrations/plugins/catalog-backend-module-ai-resource-agent/src/collectAgentErrors.ts): Renamed field reference from spawn to executionMode, updated valid values array and error messages
  5. Ensure change applies to collectAgentErrors tests (workspaces/ai-integrations/plugins/catalog-backend-module-ai-resource-agent/src/collectAgentErrors.test.ts): Updated all test cases from spawn to executionMode with new values
  6. Ensure change applies to processor tests (workspaces/ai-integrations/plugins/catalog-backend-module-ai-resource-agent/src/AiResourceAgentProcessor.test.ts): Updated all test cases from spawn to executionMode with new values
  7. Ensure change applies to API report (workspaces/ai-integrations/plugins/catalog-model-ai-resource-agent/report.api.md): Regenerated API report via yarn build:api-reports reflecting executionMode field
  8. Ensure change applies to examples (workspaces/ai-integrations/examples/ai-resource-agents.yaml): Changed spawn: local to executionMode: subprocess in the technical-specialist-agent example
  9. Ensure change applies to design documentation (workspaces/ai-integrations/openspec/changes/airesource-agent-typed-schema/design.md): Updated mapping table row from spec.spawn to spec.executionMode with new values and clear descriptions
  10. Ensure change applies to spec documentation (workspaces/ai-integrations/openspec/changes/airesource-agent-typed-schema/specs/ai-resource-agent-schema/spec.md): Updated field list from spec.spawn to spec.executionMode
  11. Ensure change applies to README (workspaces/ai-integrations/plugins/catalog-backend-module-ai-resource-agent/README.md): Updated validation table from spec.spawn to spec.executionMode with new values
  12. Ensure change applies to changesets (workspaces/ai-integrations/.changeset/add-spec-spawn-backend.md): Updated changeset description to reference executionMode with new values
  13. Clearly document what each option means in changeset (workspaces/ai-integrations/.changeset/add-spec-spawn-model.md): Updated changeset description with per-value documentation: in-process (no isolation), subprocess (child process), sandbox (administrator-predefined sandbox profile)

Tests: passed

Decision points
  • Apply rename consistently across all 13 affected files (alternatives: Rename only in source code and let docs catch up later, Rename in all files in one commit; rationale: The human instruction explicitly asked to ensure the change applies to all files, so a single comprehensive commit is the correct approach)

Next steps:

  • /fs-review — request a re-review of the changes
  • /fs-fix <your instruction> — run another fix pass with specific guidance
  • Push commits directly — review re-runs automatically on push
    Updated by fullsend fix agent

@sonarqubecloud

sonarqubecloud Bot commented Nov 2, 2026

Copy link
Copy Markdown

@yangcao77 yangcao77 changed the title feat(RHIDP-18556): add spec.spawn to agent AiResource entity feat(RHIDP-18556): add spec.executionMode to agent AiResource entity Nov 2, 2026
@yangcao77
yangcao77 requested a review from gabemontero November 2, 2026 22:43

@gabemontero gabemontero 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.

I'm good with where we have landed @yangcao77 thanks

I'll let you handle the remaining iterations with fullsend review and decide when to approve fullsend coder's PR for merge.

@yangcao77
yangcao77 merged commit 9e107b2 into main Nov 3, 2026
18 checks passed
@yangcao77
yangcao77 deleted the agent/RHIDP-18556-add-spec-spawn branch November 3, 2026 16:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-review Triggers review agent dispatch risk/moderate PR risk: moderate workspace/ai-integrations

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants