Files
multica/packages/views/locales/ja/modals.json
Naiyuan Qing 645e8a2983 feat(issues): 确认指派弹窗去掉打开时的 run 预览等待 (MUL-5010) (#5678)
* 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>
2026-07-21 15:48:47 +08:00

221 lines
13 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"common": {
"back": "戻る",
"close": "閉じる",
"cancel": "キャンセル",
"expand_tooltip": "展開",
"collapse_tooltip": "折りたたむ"
},
"create_workspace": {
"title": "新しいワークスペースを作成",
"description": "ワークスペースは、チームがプロジェクトやイシューに取り組む共有環境です。"
},
"delete_issue": {
"title": "イシューを削除",
"description": "このイシューとすべてのコメントが完全に削除されます。この操作は元に戻せません。",
"hint": "ワークスペースのメンバーであれば誰でもイシューを削除できます。",
"cancel": "キャンセル",
"confirm": "削除",
"deleting": "削除中...",
"toast_deleted": "イシューを削除しました",
"toast_delete_failed": "イシューを削除できませんでした"
},
"feedback": {
"title": "フィードバック",
"placeholder": "使用感、見つけたバグ、追加してほしい機能などをお聞かせください…",
"toast_uploading": "アップロードが完了するまでお待ちください…",
"toast_too_long": "メッセージが長すぎます",
"toast_sent": "フィードバックをありがとうございます!",
"toast_failed": "フィードバックを送信できませんでした",
"send": "フィードバックを送信",
"sending": "送信中…",
"github_hint_prefix": "より迅速な対応とオープンな議論をご希望ですか?こちらへ ",
"github_hint_link": "GitHub"
},
"issue_picker": {
"search_placeholder": "イシューを検索...",
"searching": "検索中...",
"no_results": "イシューが見つかりません。",
"prompt_to_search": "イシューを検索するには入力してください"
},
"set_parent": {
"title": "親イシューを設定",
"description": "このイシューの親に設定するイシューを検索してください",
"toast_failed": "イシューを更新できませんでした",
"toast_success": "{{identifier}} を親イシューに設定しました"
},
"add_child": {
"title": "サブイシューを追加",
"description": "サブイシューとして追加するイシューを検索してください",
"toast_failed": "サブイシューを追加できませんでした",
"toast_success": "{{identifier}} をサブイシューとして追加しました"
},
"run_confirm": {
"title_assign": "割り当てを確認しますか?",
"assign_single": "このイシューを {{name}} に割り当てます。実行条件を満たす場合はすぐに作業を開始します。",
"assign_batch": "{{count}} 件のイシューを {{name}} に割り当てます。実行条件を満たす場合はすぐに作業を開始します。",
"note_label": "引き継ぎメモ(任意)",
"note_placeholder": "範囲・重点・触れてほしくない点などを一言で…",
"note_unsupported": "相手の実行環境が古いため、この引き継ぎメモは読み取れない可能性があります。",
"confirm_assign": "割り当てを確認",
"dont_start": "まだ開始しない",
"toast_failed": "操作に失敗しました",
"create_will_start": "作成後、{{name}} がすぐに作業を開始します。",
"create_will_start_squad": "作成後、{{name}} のリーダーが内容を評価し、タスクの割り振りを開始します。",
"create_parked": "割り当て済み — バックログでは作業を開始しません。"
},
"create_squad": {
"title": "スクワッドを作成",
"description": "リーダーエージェントと任意の追加メンバーで協働スクワッドを作成します。",
"name_label": "名前",
"name_placeholder": "例: フロントエンドチーム",
"description_label": "説明",
"description_placeholder": "このスクワッドが担当する内容を説明してください...",
"leader_label": "リーダーエージェント",
"leader_hint": "リーダーはこのスクワッドに割り当てられたすべてのタスクを受け取り、チームを調整します。",
"leader_placeholder": "リーダーエージェントを選択",
"members_label": "追加メンバー",
"members_optional": "(任意)",
"members_hint": "リーダーがサブタスクを委任できるメンバーです。後から追加できます。",
"members_placeholder": "エージェントまたはワークスペースメンバーを追加",
"members_selected_count_other": "{{count}} 件選択中",
"members_more_count": "+{{count}}",
"members_remove_aria": "{{name}} を削除",
"picker_search_placeholder": "エージェントとメンバーを検索...",
"group_my_agents": "マイエージェント",
"group_workspace_agents": "ワークスペースエージェント",
"group_members": "メンバー",
"no_agents": "利用可能なアクティブエージェントがありません。先にエージェントを作成してください。",
"no_results": "結果なし",
"cancel": "キャンセル",
"submit": "スクワッドを作成",
"submitting": "作成中...",
"toast_created": "スクワッドを作成しました",
"toast_failed": "スクワッドを作成できませんでした",
"toast_member_add_failed": "{{name}} を追加できませんでした: {{error}}"
},
"create_project": {
"title": "新規プロジェクト",
"title_breadcrumb": "新規プロジェクト",
"icon_tooltip": "アイコンを選択",
"title_placeholder": "プロジェクトのタイトル",
"description_placeholder": "説明を追加...",
"description_hint": "このプロジェクトのすべてのタスクで、コンテキストとしてエージェントに共有されます。",
"lead": "リード",
"no_lead": "リードなし",
"set_start_date": "開始日を設定...",
"set_due_date": "期限を設定...",
"more_options_aria": "その他のオプション",
"lead_placeholder": "リードを指定...",
"members_group": "メンバー",
"agents_group": "エージェント",
"no_results": "結果なし",
"submit": "プロジェクトを作成",
"submitting": "作成中...",
"toast_created": "プロジェクトを作成しました",
"toast_failed": "プロジェクトを作成できませんでした",
"repos_pill": "リポジトリ",
"repos_pill_count_other": "{{count}} 個のリポジトリ",
"repos_heading": "このプロジェクトに GitHub リポジトリを接続",
"repos_empty": "まだワークスペースレベルのリポジトリがありません。下に URL を貼り付けてアドホックに接続してください。",
"repos_search_placeholder": "リポジトリを検索...",
"repos_search_empty": "検索に一致するリポジトリがありません。",
"repos_url_placeholder": "https://github.com/owner/repo または git@github.com:owner/repo.git",
"repos_add": "追加",
"repos_selected": "選択済み",
"source_pill_local": "ローカルディレクトリ",
"source_tab_repos": "GitHub リポジトリ",
"source_tab_local": "ローカルディレクトリ",
"local_heading": "このマシンのローカル作業ディレクトリを使用",
"local_on_device": "{{device}} にバインド済み",
"local_this_machine": "このマシン",
"local_daemon_offline": "デーモンがオフラインです。ローカルディレクトリをバインドするには起動してください。",
"local_pick": "ディレクトリを選択…",
"local_picking": "選択画面を開いています…",
"local_change": "ディレクトリを変更…",
"local_clear": "クリア",
"local_pick_failed": "ディレクトリ選択画面を開けませんでした。",
"local_invalid_dir": "このディレクトリは使用できません。別のものを選択してください。",
"local_hint": "他のマシンのエージェントはこのパスを参照できず、起動に失敗します。共有作業にはリポジトリを使用してください。"
},
"create_issue": {
"sr_manual": "新規イシュー",
"sr_agent": "イシューをクイック作成",
"manual_breadcrumb": "手動で作成",
"agent_breadcrumb": "エージェントで作成",
"title_placeholder": "イシューのタイトル",
"description_placeholder": "説明を追加...",
"more_options_aria": "その他のオプション",
"title_required": "作成するにはタイトルを入力してください",
"submit": "イシューを作成",
"submitting": "作成中...",
"toast_created": "イシューを作成しました",
"view_issue": "イシューを表示",
"toast_failed": "イシューを作成できませんでした",
"toast_duplicate_title": "重複イシュー",
"toast_duplicate_view": "既存のイシューを表示",
"toast_link_subissues_all_failed": "サブイシューをリンクできませんでした",
"toast_link_subissues_partial": "サブイシュー {{total}} 件中 {{failed}} 件をリンクできませんでした",
"toast_link_labels_failed": "ラベルを付けられませんでした",
"toast_set_properties_failed": "{{count}} 件のカスタムプロパティを設定できませんでした",
"switch_to_agent": "エージェントに切り替え",
"switch_to_agent_tooltip": "エージェントで作成に切り替えます。一行で説明すれば、エージェントがイシューを作成します",
"switch_to_manual": "手動に切り替え",
"switch_to_manual_tooltip": "手動作成に切り替えます。フィールドを自分で入力します",
"create_another": "もう 1 つ作成",
"remove_parent_aria": "親を削除",
"remove_subissue_aria": "サブイシュー {{identifier}} を削除",
"subissue_of": "{{identifier}} のサブイシュー",
"subissue_chip": "サブイシュー: {{identifier}}",
"parent_with_id": "親: {{identifier}}",
"set_due_date": "期限を設定...",
"set_start_date": "開始日を設定...",
"set_parent": "親イシューを設定...",
"add_subissue": "サブイシューを追加...",
"set_status": "ステータスを設定...",
"set_priority": "優先度を設定...",
"set_assignee": "担当者を設定...",
"set_labels": "ラベルを設定...",
"set_project": "プロジェクトを設定...",
"customize_fields": "フィールドをカスタマイズ...",
"custom_properties": "カスタムプロパティ",
"remove_parent": "親を削除",
"set_parent_picker": {
"title": "親イシューを設定",
"description": "新しいイシューの親に設定するイシューを検索してください"
},
"add_subissue_picker": {
"title": "サブイシューを追加",
"description": "新しいイシューのサブイシューとして追加するイシューを検索してください"
},
"agent": {
"created_by": "作成者",
"select_agent_aria": "エージェントを選択",
"pick_an_agent": "エージェントを選択…",
"no_agents": "利用可能なエージェントまたはスクワッドがありません。",
"search_placeholder": "エージェントとスクワッドを検索…",
"agents_group": "エージェント",
"squads_group": "スクワッド",
"version_missing": "このエージェントのデーモンは CLI バージョンを報告していません。エージェントで作成には multica CLI {{min}} 以上が必要です。デーモンをアップグレードして再接続するか、手動作成に切り替えてください。",
"version_below": "このエージェントのデーモン CLI は {{current}} です。エージェントで作成には {{min}} 以上が必要です。デーモンをアップグレードするか、手動作成に切り替えてください。",
"prompt_placeholder": "エージェントにやってほしいことを伝えてください。例: 「Bohan に Web プロジェクトのインボックス読み込みの遅さを直してもらう」",
"more_fields_aria": "その他のフィールド",
"set_project": "プロジェクトを設定...",
"set_priority": "優先度を設定...",
"set_due_date": "期限を設定...",
"customize_fields": "フィールドをカスタマイズ...",
"submit": "作成",
"sending": "送信中…",
"uploading": "アップロード中…",
"sent_label": "送信済み",
"sent_count": "{{count}} 件送信済み",
"version_blocked_tooltip": "デーモン CLI は {{min}} 以上である必要があります",
"toast_sent": "エージェントに送信しました。完了するとインボックス通知が届きます",
"error_agent_unavailable_fallback": "エージェントを利用できません。別のエージェントを選択してください。",
"error_daemon_version": "このエージェントのデーモン CLI{{current}})が必要なバージョン {{min}} を下回っています。エージェントで作成を使用するには、デーモンをアップグレードしてください。",
"error_unknown": "送信できませんでした。再試行してください。",
"sub_issue_of": "{{identifier}} のサブイシュー"
}
}
}