Agents/Skills/Tasks — Post-PR-1019 Follow-ups Progress
Branch: feat/agents-skills-tasks-followups (off origin/develop @ a961f0e2)
Tier 1
- FU-1 · LLM dispatch in
AgentRunService.execute— token-based facade (AGENT_AI_DISPATCH_FACADE), tool loop capped at 10 iterations, virtualtransitionTaskcapture tool ontaskruns, INFO/WARN/ERROR run-log rows forai-dispatch+tool-invocation, finalize() routes chat-back + task-finish - FU-2 · 6 missing Agents API controller routes —
run-now,runs,runs/:runId/cancel,skills,budget,assign-task. Throttled per plan §7.1, activity-logged, cross-user 404 viaagentsService.getOne. New repo methods (AgentRunRepository.countByAgent/cancel/findByIdAndUser) +AgentScheduleDispatcherService.dispatchOne+ 2 new ActivityActionType values - FU-3 · Mission/Work/Idea-scoped Agent creation entry points —
NewAgentDialognow accepts apinnedprop that skips step 1 and forwardsmissionId/workId/ideaIdto the API. New routes/missions/[id]/agents/new,/works/[id]/agents/new,/ideas/[id]/agents/new. Entry points: Agents tab on MissionTabs, "+New Agent" button in WorkHeader, Bot button on IdeaCard. - FU-4 · 3 placeholder Agent-detail tabs —
activity/skills/budgetspages now server-fetch via FU-2 endpoints + client components (AgentActivityClient,AgentSkillsClient,AgentBudgetsClient). Activity supports cancel-on-row + pagination. Skills supports remove-binding via existingDELETE /api/skill-bindings/:id. Budgets renders a progress bar with cap-aware coloring. - FU-5 · Attachment UI on Task detail —
TaskAttachmentsSection.tsxmounted between transitions and conversation. Drag-drop file picker uploads via new/api/uploadsNext.js proxy →POST /api/tasks/:id/attachments. List shows filename, size, attached-at, with detach affordance.attachUploadAction/detachAttachmentActionserver actions.
Tier 2
- FU-6 · i18n Tasks/Skills/Templates components — new
dashboard.tasksPage.{list,newDialog,detail,recurring,status},.skillsPage.{list,detail},.templatesPage.*keys inapps/web/messages/en.json. ThreadeduseTranslationsthrough TasksList (filter labels, status select, empty state) and TaskDetailClient (Move to, transition labels, conversation, draft placeholder, Post button). Non-en locales fall back to en via next-intl per existing convention. - FU-7 · Recurring picker friendly controls — added time-of-day (emits
BYHOUR/BYMINUTE), weekday multi-select for Weekly (emitsBYDAY=MO,...), day-of-month for Monthly (emitsBYMONTHDAY=), timezone with browser-tz default + datalist suggestions. Client-side rule validation (FREQ check + non-empty BYDAY for Weekly); Save disabled when invalid. - FU-8 · Skills binding picker UI — replaced the raw UUID textbox with
SkillBindingTargetPicker. Tenant auto-fills; agent/mission/idea/work load entries viaagentsAPI.list/missionsAPI.list/workProposalsAPI.list/workAPI.getAll(up to 100 each), with a search filter + sized listbox. Added explanatory copy on the bindings panel. Falls back to a paste-uuid input when the list endpoint errors or returns nothing. - FU-9 · Kanban drag-and-drop transitions — HTML5 drag-drop on TasksKanbanView. Cards are
draggable; columns highlight a primary ring when the dragged card has a legal transition to that status. Drop calls the existingtransitionTaskActionwith optimistic update + revert on rejection. Click-popover fallback preserved for keyboard users. - FU-10 · GitHub-sync v2 toggles UI — added Include Agents / Skills / Tasks / Task chat checkboxes to
GitHubSync.tsx, mirroring the export form inDataManagement.tsx. Wired through topushToGitHubaction which already accepts the v2 toggle bag. Task-chat gated on includeTasks so toggling Tasks off cleanly resets the chat flag. (Persistence to UserSyncConfig is server-side; UI defaults to all-off matching the v1 payload until the user opts in.) - FU-11 · Templates browser content swap to ADR-010 catalog — added env-flag (
NEXT_PUBLIC_AGENT_TEMPLATES_CATALOG) opt-in path inlistAstTemplates. When the flag is on, lazy-importsserverFetchand hits/api/agent-templates?entity=<entity>; on error or flag-off, returns the existing fallback constants. Shape preserved across both branches so callers (route pages + dialog pre-fill) don't change. Updated spec covers all 3 cases (flag-on success, flag-on error → fallback, flag-off). ADR-010 catalog itself still pending operator-led work — flag stays off by default until it lands.
Tier 3 (operator decisions — partially resolved 2026-05-26)
- FU-12 · Transition lattice
done → in_progressdivergence — operator picked Option A (spec carve-out). FR-8 indocs/specs/features/task-tracking/spec.mdupdated to acknowledge the soft re-open. Code unchanged. - FU-13 · Operator-binding for
AGENT_GIT_FACADE— added per-AgentcommitterName/committerEmailcolumns + migration; bound the token in api-side AgentsModule using User's OAuth token via existingGitFacadeService.commit/.createPullRequest; updated injection-tokens doc with the canonical adapter. - FU-14 · Phase 4 Git-mode AgentFileService writes — added
GitFacadeService.getRepoDir(scope, scopeId)that resolves Work scopes viaWorkRepository.findById+cloneOrPull, returns null for Mission/Idea (no repo in current data model); removed "Git-mode lands in Phase 6" throws so non-tenant Agents fall back to DB-inline cleanly.
Future tracks (post-PR-1021)
- Email Providers — Jira Epic EW-650, spec at
docs/specs/features/email-providers/spec.md. Tenant-managed inbound + outbound email addresses, multi-provider plugin contract (Mailchimp, Mailgun, Postmark, Resend, Sendgrid), per-Agent assignment, integration with the agent-run path. Closes the loop on the FU-13Agent.committerEmailsynthesized-domain placeholder.
Log
(timestamps in UTC)