Conversation
…sting channel parsers
… and provider wires
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3fc04e30de
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| for (const name of ['inkbox', 'linq']) { | ||
| const line = `export { ${name}Connector } from './${name}.js'`; | ||
| if (!text.includes(line)) text += '\n' + line + '\n'; |
There was a problem hiding this comment.
Commit the adapter registry with the source change
The reviewed commit neither exports inkboxConnector/linqConnector from src/connectors/adapters/index.ts nor updates data/bundled-adapter-manifests.json; this workflow patches those files only in the runner, and the persistence step is explicitly skipped for fork PRs. Such a PR can therefore pass because tests and release checks run against the modified working tree, while the merged or cherry-picked commit still omits both adapters from the public package and retains the old Contiguity manifest. Commit the generated registry files as part of the source change rather than relying on this conditional CI mutation.
Useful? React with 👍 / 👎.
| && part.slice(3).length === expected.length | ||
| && timingSafeEqual(Buffer.from(part.slice(3)), Buffer.from(expected))) |
There was a problem hiding this comment.
Reject non-base64 signatures before timing-safe comparison
When an attacker supplies a v1, candidate with the same JavaScript string length as the expected signature but containing a multibyte character, the character-count check passes while the resulting buffers have different byte lengths; timingSafeEqual then throws ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH. Because the router does not catch verifier exceptions, a malformed Linq signature produces an unhandled request failure instead of the intended 401. Validate/decode the candidate as base64 and compare buffer lengths before calling timingSafeEqual.
Useful? React with 👍 / 👎.
Implementation
Reuse the existing connector, webhook-router and ConversationEvent contracts. No additional OAuth service, credential vault, agent loop or product-owned provider catalog.
message.fromis the owned destination, not the customer: preserve the customer as an opaque chat-scoped identity rather than leaking the owner's private conversation to a guessed address.listConversationChannels()metadata so applications do not copy provider tables. This describes protocol support, not deployed-account readiness.Verification — exact current head
Head:
da8816583ec3a3c4be04f688ea9a2b57b4c40198.5,595 tests passed; zero failures or skips. Full typecheck, packed-release verification and consumer packaging also passed.
Run: https://github.com/tangle-network/agent-integrations/actions/runs/35023138244
Artifact:
messaging-verification-303, id10418572765; exact source, structured test report, package and SHA256SUMS retained.External provider HTTP is simulated at the wire boundary. Actual connectors, signature verification, normalization, reply planning and durable-router deduplication run in the tests. No live handset delivery, provider account, paid-number purchase or production deployment is claimed.
Release and host composition
Host #7334 supplies existing email/iMessage/SMS provisioning, encrypted signing keys and queued source-connection checks. The WhatsApp host companion must additionally register the WhatsApp verifier and its distinct
/v1/webhook_endpointssetup contract before activation.Publish through the normal package process and update the host/application lockfiles to the resulting release. The candidate retains the base package version: the existing registry
0.53.55is NOT this feature build. Authorization companions: #302 and tangle-network/agent-app#579.Provider contracts