mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-06-22 04:11:55 +10:00
6d8d8f6e55
* chore(ai): remove local AI store now that providers live server-side
The Zustand-based useAIStore has been replaced by the server-side
aiProviders oRPC router (encrypted credentials persisted in DB).
Delete the dead store + tests, drop the ./store export, and remove
zustand/immer deps which are no longer referenced anywhere in
packages/ai/src/.
* feat(agent): archive/delete actions and read-only state for agent threads
- Backend: mark archived threads as read-only in threads.get and reject
messages.send with CONFLICT when the thread is archived.
- Frontend: render archived threads in the sidebar with muted styling and
an Archived badge; add a per-thread dropdown menu in the chat header
with Archive (non-destructive) and Delete (with confirmation); show a
read-only banner above the message list that disambiguates archived
vs. missing-resource causes; suppress the Retry and Stop buttons in
read-only mode.
- Tests: new packages/api/src/services/agent.test.ts covering the
archived-thread isReadOnly flag and the archived-thread send refusal.
* fix(agent): abort run on archive and verify ownership before deleting thread
- threads.archive: before flipping status, abort any in-flight run controller
and clear the active-run state on the thread; cleanup failures are logged
but do not block the status update.
- threads.delete: assert thread ownership via getThread before destructive
work so an authenticated user cannot wipe another user's attachment rows
by passing a foreign threadId.
Adds focused tests for both behaviors.
* feat(agent): display patch diffs and surface revert conflicts
Render apply_resume_patch tool messages with a status-aware card (applied/
reverted/conflicted), expandable operation list, and a Revert button that
correctly handles RESUME_VERSION_CONFLICT responses. Adds unit tests for
the inverse-patch builder and the agentService.actions.revert flow.
* chore(agent): remove out-of-scope attachment tests accidentally added in Task 6
The Task 6 commit (73ef1acca) accidentally re-introduced three attachment-
related tests that belong to a separate task:
- `buildAttachmentModelParts > converts text, image, supported binary, and
unsupported attachments into model parts`
- `agentService.messages.send > persists the user message with file UI parts
and links selected attachments to it` (was failing — the `ToolLoopAgent`
mock is not callable as a constructor)
- `agentService.messages.send > rejects attachments that are missing, foreign,
or already linked before persisting a message`
These were likely re-added during a stash recovery and were not requested
for Task 6, whose scope was limited to the `agentService.actions.revert`
flow. Remove them along with the helpers/fixtures (`buildAttachment`,
`buildActiveThread`, `selectWhereResult`, `selectOrderByResult`) that they
were the only consumers of. `selectLimitResult` is preserved because it is
used by the revert tests.
* chore(agent): configure runtime dependencies
* feat(db): add agent workspace schema
* feat(api): add agent backend services
* feat(web): add agent workspace UI
* chore(agent): remove legacy builder assistant
* test(agent): make agent stream mocks constructible
* chore(web): remove unused resume replacement hook
* feat(api): add unsafe AI base URL flag
* chore(dev): expose local services in compose
* fix(web): normalize resume preview gaps
* feat(api): improve agent tool handling
* feat(web): polish agent workspace UI
* chore: update dependencies
* fix(api,web): address PR review feedback for agent workspace
Security/correctness:
- Restrict AI provider URLs to http/https even in unsafe mode
- Stop exposing Redis on host network by default
- Make .env.local optional and drop app profile in compose.dev.yml
- Store agent attachments with private ACL on S3
- Reset provider test status when provider/model/baseURL changes
- Decouple non-agent AI endpoints from REDIS_URL requirement
- Fix JSON Patch add inverse for existing object members
- Wrap resume patch + agent action insert in db transaction
- Validate partialMessage at runtime and rate-limit attachment uploads
- Add unique index on agent_messages (thread_id, sequence)
UX/bugs:
- Mark agent thread route as ssr: false and guard SSE chunk parsing
- Show config-specific banner only on known configuration error
- Gate AI provider checks behind loading state in resume import
- Fix relative-time formatter blank gap between 45-59 seconds
- Clarify thread delete confirmation message
Polish:
- Raise ENCRYPTION_SECRET minimum to 32 characters
- Bucket AI rate limits by resumeId/threadId/messageId
- Trim form values before submitting AI provider config
- Use single key identifier and nullish-coalesce baseURL display
* fix: address ai agent review feedback
* fix: preserve mobile agent chat state
* docs: add ai agent workspace guides
* feat: introduce design system for Reactive Resume
116 lines
4.6 KiB
Plaintext
116 lines
4.6 KiB
Plaintext
---
|
|
title: "Using the AI Agent Workspace"
|
|
description: "Learn how to start an isolated AI draft, chat with an agent, review resume patches, and continue existing agent threads."
|
|
---
|
|
|
|
The AI Agent workspace is a dedicated place to work with an AI assistant on a resume draft. It keeps the conversation, tool activity, and read-only resume preview in one full-screen view.
|
|
|
|
<Info>
|
|
Agent threads edit an AI draft copy of your resume. Your original resume is not changed when you start from an existing resume.
|
|
</Info>
|
|
|
|
## Before you start
|
|
|
|
You need at least one AI provider that is tested and enabled in **Dashboard -> Settings -> Integrations**. For setup, see [Using Artificial Intelligence](/guides/using-ai).
|
|
|
|
If you self-host Reactive Resume, the agent workspace also requires the server-side agent configuration described in [Self-hosting with Docker](/self-hosting/docker).
|
|
|
|
## Open the agent workspace
|
|
|
|
From the dashboard sidebar, click **Agents**.
|
|
|
|
The agent page always shows your thread sidebar. Use it to continue an existing thread, or click **New thread** to start another one.
|
|
|
|
You can also open the agent from the builder dock. When you do this, the current resume is preselected in the new thread setup screen.
|
|
|
|
## Start a new thread
|
|
|
|
<Steps>
|
|
<Step title="Choose an agent model">
|
|
Pick the provider/model combo the agent should use. This choice is locked once the thread starts.
|
|
</Step>
|
|
|
|
<Step title="Choose a resume draft">
|
|
Select an existing resume to duplicate as an AI draft, or choose **Create from scratch** for a blank draft.
|
|
</Step>
|
|
|
|
<Step title="Start the thread">
|
|
Click **Start Thread** to create the draft and open the workspace.
|
|
|
|
<Frame caption="Starting an AI Agent thread">
|
|
<img
|
|
src="/images/guides/using-ai-agent/screenshot-1.webp"
|
|
alt="AI Agent new thread setup with model and resume selectors"
|
|
/>
|
|
</Frame>
|
|
</Step>
|
|
</Steps>
|
|
|
|
## Use the three-pane workspace
|
|
|
|
The desktop workspace is split into three panes:
|
|
|
|
- **Threads** on the left: continue, archive, delete, or start agent threads.
|
|
- **Chat** in the center: send prompts, upload files, answer agent questions, and review tool activity.
|
|
- **Resume** on the right: read the current AI draft, adjust zoom, open it in the builder, or download a PDF.
|
|
|
|
<Frame caption="AI Agent workspace with chat and resume preview">
|
|
<img
|
|
src="/images/guides/using-ai-agent/screenshot-2.webp"
|
|
alt="AI Agent workspace showing thread sidebar, chat, and resume preview"
|
|
/>
|
|
</Frame>
|
|
|
|
On smaller screens, the workspace uses tabs/sheets so you can switch between threads, chat, and preview without losing the active conversation.
|
|
|
|
## Ask for resume changes
|
|
|
|
The agent works best with concrete instructions:
|
|
|
|
- "Tailor this resume to this job description: `https://example.com/job`"
|
|
- "Find weak bullets and rewrite them with stronger outcomes."
|
|
- "Compare this draft against a product manager role and update the keywords."
|
|
- "Ask me before changing anything that looks uncertain."
|
|
|
|
You can attach files or images from the composer. The agent can read uploaded attachments when they are relevant to your request.
|
|
|
|
<Note>
|
|
Text input is supported. Voice input is not supported in the agent workspace yet.
|
|
</Note>
|
|
|
|
## Review patches
|
|
|
|
When the agent edits the resume, the patch is applied immediately to the AI draft. The chat shows a small **Patch applied** line.
|
|
|
|
Open the line to inspect the raw JSON Patch and use **Revert** if you want to undo that patch.
|
|
|
|
<Warning>
|
|
AI-generated changes can still be inaccurate. Review the draft in the preview or builder before exporting or sharing it.
|
|
</Warning>
|
|
|
|
## Answer agent questions
|
|
|
|
If the agent needs a decision, it may show a question card with recommended answers. Click the answer you want to send it back to the agent.
|
|
|
|
This is useful when the agent finds ambiguous instructions, missing job context, or a change that depends on your preference.
|
|
|
|
## Use the resume preview
|
|
|
|
The resume pane is read-only. Use the toolbar to:
|
|
|
|
- decrease or increase zoom;
|
|
- set an exact zoom percentage;
|
|
- open the AI draft in the builder;
|
|
- download the draft as a PDF.
|
|
|
|
Zoom settings are remembered across refreshes.
|
|
|
|
## Manage threads
|
|
|
|
Threads are ordered by the newest message. Use the thread menu to archive or delete a thread.
|
|
|
|
- **Archive** keeps the conversation but makes the thread read-only.
|
|
- **Delete** removes the thread conversation and its attachments. The generated resume draft remains in your dashboard.
|
|
|
|
Threads can also become read-only if the working resume is deleted, the selected provider is deleted, or the thread is archived. If a provider is disabled or no longer tested, re-enable and test it before sending new messages.
|