feat(ashby): add ashby integration for candidate, job, and application management#3362
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Greptile SummaryAdded comprehensive Ashby ATS integration with 13 tools covering the full candidate lifecycle: list/get/create/update/search candidates, list/get jobs, create/list notes, list/get/create applications, and list offers. All tools use Basic Auth with API key correctly set to Confidence Score: 5/5
Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Ashby Block] --> B{Operation}
B -->|Candidate Ops| C[Candidate Tools]
B -->|Job Ops| D[Job Tools]
B -->|Application Ops| E[Application Tools]
B -->|Note Ops| F[Note Tools]
B -->|Offer Ops| G[Offer Tools]
C --> C1[list_candidates]
C --> C2[get_candidate]
C --> C3[create_candidate]
C --> C4[update_candidate]
C --> C5[search_candidates]
D --> D1[list_jobs]
D --> D2[get_job]
E --> E1[list_applications]
E --> E2[get_application]
E --> E3[create_application]
F --> F1[create_note]
F --> F2[list_notes]
G --> G1[list_offers]
C1 & C2 & C3 & C4 & C5 & D1 & D2 & E1 & E2 & E3 & F1 & F2 & G1 --> H[Ashby API]
Last reviewed commit: 5eaa2b8 |
46114b1 to
0b08a4b
Compare
0b08a4b to
bbdda0d
Compare
|
@greptile |
|
@cursor review |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
| // Update Candidate params | ||
| if (params.updateName) result.name = params.updateName | ||
| return result | ||
| }, |
There was a problem hiding this comment.
Unscoped param mappings override correct values across operations
Medium Severity
The config.params function unconditionally maps filterJobId → jobId, filterCandidateId → candidateId, and updateName → name regardless of the current operation. Since filterJobId, filterCandidateId, and updateName are mode: 'advanced' sub-blocks, the serializer includes them when advanced mode is OFF if they hold non-empty values — bypassing the condition check entirely. After the executor merges { ...inputs, ...transformedParams }, the stale mapped value wins over the correct pass-through value. For instance, a stale filterJobId overrides the correct jobId for create_application or get_job. Scoping each mapping to its intended operation (e.g., checking params.operation) would prevent the conflict.


Summary
Type of Change
Testing
Tested manually
Checklist