mirror of
https://github.com/multica-ai/multica.git
synced 2026-07-30 16:20:35 +02:00
* feat(issues): confirm assignment without a pre-flight run preview (MUL-5010) RunConfirmModal called POST /api/issues/preview-trigger on open and blocked the entire dialog behind a "检查中…" spinner until it landed. That query is keyed per issue id with staleTime 0, so every new issue was a guaranteed cache miss — the wait was structural, not incidental. The dialog also promised "会立即开始工作" while still checking whether anything would start. Redefine it as "dialog = confirm the assignment", not "confirm N runs": - Open fires no request. Note box and both buttons are usable on frame one. - Title/primary action become 确认指派; copy states the assignment as certain and the run as conditional, with no predicted count. - The write reports what actually happened: UpdateIssue returns runs_started (0/1) and batch-update returns the batch total, surfaced as one short toast — "已指派给 X,已启动 N 个 run", or just "已指派给 X". runs_started counts successful enqueues rather than predicate hits, since an insert can still no-op on the pending unique index. It is pointer+omitempty like Labels, so only the PUT reply carries it, and it is stripped in useUpdateIssue's onSuccess so a write-scoped fact never lands in the cache. The handoff-note version gate stays local and synchronous, now covering squads too by resolving the leader's runtime from the warm squad list — removing the last reason the dialog needed the server round-trip. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai> * test(issues): assert runs_started on the write responses (MUL-5010) The assign-confirm dialog now reports the enqueue outcome from the write reply instead of predicting it, so the number itself is the contract. Pin it directly on the responses: - single assign that enqueues → runs_started 1 - single assign that starts nothing → 0, via both routes (suppress_run, and assigning into backlog), so a client can tell "no run" apart from "old backend omitting the field" - batch → the real aggregate, asserted against a mixed selection where updated=3 but runs_started=2; the divergence from `updated` is the point - absent on GET, guarding the pointer+omitempty contract that keeps a write-scoped fact off every read path Each count is cross-checked against agent_task_queue so the assertions track real enqueues rather than the predicate. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai> * refactor(issues): drop runs_started + result toast, keep silent completion (MUL-5010) Final scope: the dialog only removes the preview wait; it does not add a post-submit result toast. Per the confirmed decision, revert everything that existed solely to report "N runs started" and keep completion silent, exactly as it was before this PR — the assignee and any run already surface through the issue's normal updates. Removed: - the success toast on submit and its two i18n keys (all four locales) - the `runs_started` response field on IssueResponse, the single/batch write counting, and dispatchIssueRun's bool return (back to void) - the `runs_started` type/schema/api-client additions and the onSuccess strip - server/internal/handler/issue_runs_started_test.go (only served the field) Kept: preview-trigger removal and the instant-usable dialog — note box and buttons live on the first frame, agent/squad handoff-note version gate resolved locally, and "确认指派" copy. Net diff vs base is now frontend-only; the backend and packages/core files are byte-identical to base again. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai> * docs(issues): fix stale headline comment referencing removed result toast (MUL-5010) The result toast was removed with runs_started, but the headline comment still said "the real one arrives in the result toast". Reword to state only what remains true: the copy names no run count because the run is conditional. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai>
223 lines
10 KiB
JSON
223 lines
10 KiB
JSON
{
|
|
"common": {
|
|
"back": "Back",
|
|
"close": "Close",
|
|
"cancel": "Cancel",
|
|
"expand_tooltip": "Expand",
|
|
"collapse_tooltip": "Collapse"
|
|
},
|
|
"create_workspace": {
|
|
"title": "Create a new workspace",
|
|
"description": "Workspaces are shared environments where teams can work on projects and issues."
|
|
},
|
|
"delete_issue": {
|
|
"title": "Delete issue",
|
|
"description": "This will permanently delete this issue and all its comments. This action cannot be undone.",
|
|
"hint": "Any workspace member can delete issues.",
|
|
"cancel": "Cancel",
|
|
"confirm": "Delete",
|
|
"deleting": "Deleting...",
|
|
"toast_deleted": "Issue deleted",
|
|
"toast_delete_failed": "Failed to delete issue"
|
|
},
|
|
"feedback": {
|
|
"title": "Feedback",
|
|
"placeholder": "Tell us about your experience, bugs you've found, or features you'd like to see…",
|
|
"toast_uploading": "Please wait for uploads to finish…",
|
|
"toast_too_long": "Message is too long",
|
|
"toast_sent": "Thanks for the feedback!",
|
|
"toast_failed": "Failed to send feedback",
|
|
"send": "Send feedback",
|
|
"sending": "Sending…",
|
|
"github_hint_prefix": "Want faster handling and open discussion? Head to ",
|
|
"github_hint_link": "GitHub"
|
|
},
|
|
"issue_picker": {
|
|
"search_placeholder": "Search issues...",
|
|
"searching": "Searching...",
|
|
"no_results": "No issues found.",
|
|
"prompt_to_search": "Type to search issues"
|
|
},
|
|
"set_parent": {
|
|
"title": "Set parent issue",
|
|
"description": "Search for an issue to set as the parent of this issue",
|
|
"toast_failed": "Failed to update issue",
|
|
"toast_success": "Set {{identifier}} as parent issue"
|
|
},
|
|
"add_child": {
|
|
"title": "Add sub-issue",
|
|
"description": "Search for an issue to add as a sub-issue",
|
|
"toast_failed": "Failed to add sub-issue",
|
|
"toast_success": "Added {{identifier}} as sub-issue"
|
|
},
|
|
"run_confirm": {
|
|
"title_assign": "Confirm assignment?",
|
|
"assign_single": "Assign this issue to {{name}}. They'll start right away if the run conditions are met.",
|
|
"assign_batch": "Assign {{count}} issues to {{name}}. They'll start right away if the run conditions are met.",
|
|
"note_label": "Handoff note (optional)",
|
|
"note_placeholder": "Tell them what matters — scope, focus, or what to avoid…",
|
|
"note_unsupported": "Their runtime is too old to receive this handoff note; it may not be read.",
|
|
"confirm_assign": "Confirm assignment",
|
|
"dont_start": "Don't start yet",
|
|
"toast_failed": "Action failed",
|
|
"create_will_start": "{{name}} will start working right after creation.",
|
|
"create_will_start_squad": "{{name}}'s leader will review it and start assigning work right after creation.",
|
|
"create_parked": "Assigned — won't start working in Backlog."
|
|
},
|
|
"create_squad": {
|
|
"title": "Create Squad",
|
|
"description": "Create a collaborative squad with a leader agent and optional additional members.",
|
|
"name_label": "Name",
|
|
"name_placeholder": "e.g. Frontend Team",
|
|
"description_label": "Description",
|
|
"description_placeholder": "Describe what this squad is responsible for...",
|
|
"leader_label": "Leader Agent",
|
|
"leader_hint": "The leader receives all tasks assigned to this squad and coordinates the team.",
|
|
"leader_placeholder": "Select a leader agent",
|
|
"members_label": "Additional Members",
|
|
"members_optional": "(optional)",
|
|
"members_hint": "Members the leader can delegate sub-tasks to. Can be added later.",
|
|
"members_placeholder": "Add agents or workspace members",
|
|
"members_selected_count_one": "{{count}} selected",
|
|
"members_selected_count_other": "{{count}} selected",
|
|
"members_more_count": "+{{count}}",
|
|
"members_remove_aria": "Remove {{name}}",
|
|
"picker_search_placeholder": "Search agents and members...",
|
|
"group_my_agents": "My Agents",
|
|
"group_workspace_agents": "Workspace Agents",
|
|
"group_members": "Members",
|
|
"no_agents": "No active agents available. Create an agent first.",
|
|
"no_results": "No results",
|
|
"cancel": "Cancel",
|
|
"submit": "Create Squad",
|
|
"submitting": "Creating...",
|
|
"toast_created": "Squad created",
|
|
"toast_failed": "Failed to create squad",
|
|
"toast_member_add_failed": "Failed to add {{name}}: {{error}}"
|
|
},
|
|
"create_project": {
|
|
"title": "New Project",
|
|
"title_breadcrumb": "New project",
|
|
"icon_tooltip": "Choose icon",
|
|
"title_placeholder": "Project title",
|
|
"description_placeholder": "Add description...",
|
|
"description_hint": "Shared with agents as context for every task in this project.",
|
|
"lead": "Lead",
|
|
"no_lead": "No lead",
|
|
"set_start_date": "Set start date...",
|
|
"set_due_date": "Set due date...",
|
|
"more_options_aria": "More options",
|
|
"lead_placeholder": "Assign lead...",
|
|
"members_group": "Members",
|
|
"agents_group": "Agents",
|
|
"no_results": "No results",
|
|
"submit": "Create Project",
|
|
"submitting": "Creating...",
|
|
"toast_created": "Project created",
|
|
"toast_failed": "Failed to create project",
|
|
"repos_pill": "Repos",
|
|
"repos_pill_count_one": "{{count}} repo",
|
|
"repos_pill_count_other": "{{count}} repos",
|
|
"repos_heading": "Attach GitHub repos to this project",
|
|
"repos_empty": "No workspace-level repos yet. Paste a URL below to attach one ad-hoc.",
|
|
"repos_search_placeholder": "Search repositories...",
|
|
"repos_search_empty": "No repositories match your search.",
|
|
"repos_url_placeholder": "https://github.com/owner/repo or git@github.com:owner/repo.git",
|
|
"repos_add": "Add",
|
|
"repos_selected": "Selected",
|
|
"source_pill_local": "Local directory",
|
|
"source_tab_repos": "GitHub repos",
|
|
"source_tab_local": "Local directory",
|
|
"local_heading": "Use a local working directory on this machine",
|
|
"local_on_device": "Bound to {{device}}",
|
|
"local_this_machine": "this machine",
|
|
"local_daemon_offline": "Daemon offline — start it to bind a local directory.",
|
|
"local_pick": "Choose directory…",
|
|
"local_picking": "Opening picker…",
|
|
"local_change": "Change directory…",
|
|
"local_clear": "Clear",
|
|
"local_pick_failed": "Could not open the directory picker.",
|
|
"local_invalid_dir": "This directory can't be used. Pick another.",
|
|
"local_hint": "Agents on other machines won't see this path — they'll fail to start. Use repos for shared work."
|
|
},
|
|
"create_issue": {
|
|
"sr_manual": "New Issue",
|
|
"sr_agent": "Quick create issue",
|
|
"manual_breadcrumb": "Create manually",
|
|
"agent_breadcrumb": "Create with agent",
|
|
"title_placeholder": "Issue title",
|
|
"description_placeholder": "Add description...",
|
|
"more_options_aria": "More options",
|
|
"title_required": "Enter a title to create",
|
|
"submit": "Create Issue",
|
|
"submitting": "Creating...",
|
|
"toast_created": "Issue created",
|
|
"view_issue": "View issue",
|
|
"toast_failed": "Failed to create issue",
|
|
"toast_duplicate_title": "Duplicate issue",
|
|
"toast_duplicate_view": "View existing issue",
|
|
"toast_link_subissues_all_failed": "Failed to link sub-issues",
|
|
"toast_link_subissues_partial": "Failed to link {{failed}} of {{total}} sub-issues",
|
|
"toast_link_labels_failed": "Failed to attach labels",
|
|
"toast_set_properties_failed": "Could not set {{count}} custom property values",
|
|
"switch_to_agent": "Switch to Agent",
|
|
"switch_to_agent_tooltip": "Switch to create with agent — describe in one line and let the agent file it",
|
|
"switch_to_manual": "Switch to Manual",
|
|
"switch_to_manual_tooltip": "Switch to manual create — fill the fields yourself",
|
|
"create_another": "Create another",
|
|
"remove_parent_aria": "Remove parent",
|
|
"remove_subissue_aria": "Remove sub-issue {{identifier}}",
|
|
"subissue_of": "Sub-issue of {{identifier}}",
|
|
"subissue_chip": "Sub-issue: {{identifier}}",
|
|
"parent_with_id": "Parent: {{identifier}}",
|
|
"set_due_date": "Set due date...",
|
|
"set_start_date": "Set start date...",
|
|
"set_parent": "Set parent issue...",
|
|
"add_subissue": "Add sub-issue...",
|
|
"set_status": "Set status...",
|
|
"set_priority": "Set priority...",
|
|
"set_assignee": "Set assignee...",
|
|
"set_labels": "Set labels...",
|
|
"set_project": "Set project...",
|
|
"customize_fields": "Customize fields...",
|
|
"custom_properties": "Custom properties",
|
|
"remove_parent": "Remove parent",
|
|
"set_parent_picker": {
|
|
"title": "Set parent issue",
|
|
"description": "Search for an issue to set as the parent of the new issue"
|
|
},
|
|
"add_subissue_picker": {
|
|
"title": "Add sub-issue",
|
|
"description": "Search for an issue to add as a sub-issue of the new issue"
|
|
},
|
|
"agent": {
|
|
"created_by": "Created by",
|
|
"select_agent_aria": "Select agent",
|
|
"pick_an_agent": "Pick an agent…",
|
|
"no_agents": "No agents or squads available.",
|
|
"search_placeholder": "Search agents and squads…",
|
|
"agents_group": "Agents",
|
|
"squads_group": "Squads",
|
|
"version_missing": "This agent's daemon doesn't report a CLI version. Create with agent needs multica CLI ≥ {{min}}. Upgrade the daemon and reconnect, or switch to manual create.",
|
|
"version_below": "This agent's daemon CLI is {{current}} — Create with agent needs ≥ {{min}}. Upgrade the daemon, or switch to manual create.",
|
|
"prompt_placeholder": "Tell the agent what to do, e.g. \"let Bohan fix the inbox loading slowness in the Web project\"",
|
|
"more_fields_aria": "More fields",
|
|
"set_project": "Set project...",
|
|
"set_priority": "Set priority...",
|
|
"set_due_date": "Set due date...",
|
|
"customize_fields": "Customize fields...",
|
|
"submit": "Create",
|
|
"sending": "Sending…",
|
|
"uploading": "Uploading…",
|
|
"sent_label": "Sent",
|
|
"sent_count": "{{count}} sent",
|
|
"version_blocked_tooltip": "Daemon CLI must be ≥ {{min}}",
|
|
"toast_sent": "Sent to agent — you'll get an inbox notification when it's done",
|
|
"error_agent_unavailable_fallback": "Agent is unavailable. Pick another agent.",
|
|
"error_daemon_version": "This agent's daemon CLI ({{current}}) is below the required {{min}}. Upgrade the daemon to use Create with agent.",
|
|
"error_unknown": "Failed to submit. Try again.",
|
|
"sub_issue_of": "Sub-issue of {{identifier}}"
|
|
}
|
|
}
|
|
}
|