Add declarative identity and channel resources#42
Merged
Conversation
Change-Id: I2c8c162fbe08f4a53b79d3d66df7fdf9cd44df23
Change-Id: Ief4ff53e264674324d6b55b7ed8f344dc0509d26
Change-Id: Id8cdde41273b8abfe99c6add75ad2f2608eb70cf
heimanba
marked this pull request as ready for review
July 20, 2026 15:23
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add declarative Identity and message Channel resources, including Qoder Forward API lifecycle support and credential-based DingTalk configuration.
Why
Users should be able to connect a Forward Agent to DingTalk without manually creating or copying Identity and Channel IDs in the Qoder console. The resource model also needs provider capability seams so future providers can opt into Identity and Channel support independently.
Type
Surface area
Checklist
bun run verify:pushpassesBehavior / risk
The YAML schema now accepts top-level
identitiesandchannels, plusdefaults.identity. Managed identities are created and owned by OpenAgentPack; declarations containingidentity_idremain external references and are never mutated or deleted. Channels resolve logical Agent and Identity names through state before provider calls. Forward sessions require either an explicit--identity-idor a resolvabledefaults.identity; there is no hidden provider-default Identity. Providers without Identity or Channel capabilities reject those declarations during validation. Credentials participate in desired-state hashing but are not persisted in state snapshots.This expands the public resource enum with
identityandchannel; the committed OpenAPI snapshot and generated WebUI wire types are updated accordingly. Existing configurations without these resources retain their previous behavior.Validation
bun run verify:push— all workspace typechecks, architecture checks, tests, and changed-file lint passed.binding_status: bound, confirmed a second plan was a no-op, and ran a Forward Session that returned the expected response.client_idandclient_secretvalues were absent from the generated state file.