feat(SUP-3466): add control-plane human/agent parity - #101
Conversation
|
Warning Review limit reached
Next review available in: 39 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the 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 reviews. How do review 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 refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (13)
📝 WalkthroughWalkthroughAdds an authenticated, persisted control-plane service with human CLI and MCP access, Codex runtime declarations, minimal-profile requirements, package inclusion, documentation, integration tests, and a doctor compatibility check. ChangesControl Plane Integration
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant Agent
participant MCP
participant Context
participant Manager
participant State
Agent->>MCP: jarvos_control_plane(operation, authToken)
MCP->>Context: controlPlane(operation, sanitized input)
Context->>Manager: execute(operation, input)
Manager->>State: authenticate and read or write state
State-->>Manager: persisted control-plane state
Manager-->>Context: structured result
Context-->>MCP: operation result
MCP-->>Agent: JSON text response
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 20dd9d3b0d
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 11c61ddd49
ℹ️ 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".
Changes requested — independent review round 1 of the parity surface: 4 P1s + 1 structuralIndependent engine (gpt-5.6-terra, effort high) + orchestrator verification by direct code read. All findings confirmed in The structural finding (root cause of all four P1s)
Required shape: the CLI/MCP surface must be a thin authenticated adapter that constructs a P1 findings (all fall out of the structure above)
P2
DispositionSUP-3466 returns to |
Co-authored-by: Paperclip <noreply@paperclip.ing>
|
Remediated the two Codex findings in ec5e4fe:
Verification: agent-context 23/23, control-plane 28/28, smoke 65/65, packaging dry run, and diff check all pass. @codex review |
|
✅ Action performedFull review finished. Your plan includes PR reviews subject to rate limits. More reviews will be available in 40 minutes. |
|
Closing without merge: independent review found the public surface is an alternate unlocked state machine. SUP-3466 is blocked on SUP-3478, which will add the required authenticated core application service; the adapter will be rewritten against that contract in a clean follow-up PR. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ec5e4fe83c
ℹ️ 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".
| function main() { | ||
| const { operation, input } = parseCli(process.argv.slice(2)); | ||
| if (operation === 'help' || input.help) { process.stdout.write(`${usage()}\n`); return; } | ||
| if (input.input) Object.assign(input, JSON.parse(input.input)); |
There was a problem hiding this comment.
Remove raw --input before merging request payloads
When a caller puts authToken or token in the JSON passed to --input to submit a full request payload, this merge leaves the original JSON string on input.input. request() only redacts authToken, token, and service, then spreads the remaining fields into the request, so that raw JSON containing the control-plane token is returned and written to the state file. Delete input.input before calling execute, or whitelist the fields that can become request data.
Useful? React with 👍 / 👎.
| if (conflict) return { ok: false, status: 'conflict', conflict: { requestId: conflict.id, status: conflict.status, reason: 'an active request owns this resource and mutation class' } }; | ||
| state.requests.push(draft); | ||
| addEvidence(state, draft.id, draft.status, 'request accepted by shared application service'); | ||
| save(state); |
There was a problem hiding this comment.
Serialize request state before saving snapshots
When two separate CLI/MCP callers create requests against the same state path at the same time, each invocation reads the whole JSON state, mutates its private copy, and this save replaces the file without a lock. The later rename can drop the earlier request and evidence even for independent resources; wrap the read-modify-write in the existing file-store lock or another per-state lock.
Useful? React with 👍 / 👎.
| const DEFAULT_SESSION_THREAD_LOCK_TIMEOUT_MS = 30000; | ||
|
|
||
| function loadControlPlaneManager() { | ||
| return require('@jarvos/control-plane/manager'); |
There was a problem hiding this comment.
Keep control-plane resolvable for checkout MCP usage
In the documented Codex setup that runs modules/jarvos-agent-context/scripts/jarvos-mcp.js directly from a repo checkout, @jarvos/control-plane is not installed in any node_modules because the repo has no workspace/root dependency for the nested packages. This package-only require makes jarvos_control_plane fail with MODULE_NOT_FOUND on first use even though MCP startup can pass; add a local workspace/file dependency or a checkout fallback while preserving the exported package entrypoint for installed packages.
Useful? React with 👍 / 👎.
Summary
Verification
npm --prefix modules/jarvos-agent-context testnpm --prefix modules/jarvos-runtime-kit testnode --test tests/doctor-checks-test.jsnode tests/modules-smoke-test.jsnode tests/cli-smoke-test.jsRelated: SUP-3466
Summary by CodeRabbit
New Features
jarvos-managercommand for human access.jarvos_control_planeagent tool with support for authenticated operations.Bug Fixes
Documentation