collavre 0.24.0 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (440) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -1
  3. data/app/assets/stylesheets/collavre/comments_popup.css +165 -99
  4. data/app/assets/stylesheets/collavre/creatives.css +346 -37
  5. data/app/assets/stylesheets/collavre/desktop_setup.css +246 -0
  6. data/app/assets/stylesheets/collavre/gnb.css +64 -3
  7. data/app/assets/stylesheets/collavre/landing.css +108 -3
  8. data/app/assets/stylesheets/collavre/mention_menu.css +32 -0
  9. data/app/assets/stylesheets/collavre/popup.css +14 -0
  10. data/app/assets/stylesheets/collavre/print.css +0 -1
  11. data/app/assets/stylesheets/collavre/search_popup.css +1 -1
  12. data/app/assets/stylesheets/collavre/secret_fields.css +3 -0
  13. data/app/assets/stylesheets/collavre/workspace.css +307 -0
  14. data/app/channels/collavre/agent_channel.rb +14 -21
  15. data/app/channels/collavre/comments_presence_channel.rb +181 -21
  16. data/app/channels/collavre/inbox_badge_channel.rb +7 -1
  17. data/app/components/collavre/inbox/badge_component.rb +6 -13
  18. data/app/components/collavre/progress_filter_component.html.erb +2 -2
  19. data/app/components/collavre/progress_filter_component.rb +20 -0
  20. data/app/controllers/collavre/admin/settings_controller.rb +4 -1
  21. data/app/controllers/collavre/agent_connections_controller.rb +165 -0
  22. data/app/controllers/collavre/agent_gateways_controller.rb +132 -0
  23. data/app/controllers/collavre/agent_provisioning_controller.rb +79 -0
  24. data/app/controllers/collavre/api/v1/agents_controller.rb +45 -97
  25. data/app/controllers/collavre/application_controller.rb +13 -2
  26. data/app/controllers/collavre/comment_read_pointers_controller.rb +69 -40
  27. data/app/controllers/collavre/comments_controller.rb +45 -131
  28. data/app/controllers/collavre/concerns/shareable.rb +9 -3
  29. data/app/controllers/collavre/creatives_controller.rb +144 -11
  30. data/app/controllers/collavre/desktop_gateway_registrations_controller.rb +173 -0
  31. data/app/controllers/collavre/desktop_setup_controller.rb +119 -0
  32. data/app/controllers/collavre/desktop_sidecar_health_controller.rb +35 -0
  33. data/app/controllers/collavre/features_controller.rb +57 -0
  34. data/app/controllers/collavre/invites_controller.rb +12 -1
  35. data/app/controllers/collavre/llm_models_controller.rb +8 -0
  36. data/app/controllers/collavre/notices_controller.rb +20 -0
  37. data/app/controllers/collavre/tasks_controller.rb +40 -6
  38. data/app/controllers/collavre/topics_controller.rb +130 -53
  39. data/app/controllers/collavre/user_creative_preferences_controller.rb +214 -30
  40. data/app/controllers/concerns/collavre/comments/batch_operations.rb +15 -3
  41. data/app/controllers/concerns/collavre/comments/conversion.rb +1 -1
  42. data/app/controllers/concerns/collavre/users_controller/ai_user_management.rb +118 -8
  43. data/app/controllers/concerns/collavre/users_controller/profile_and_settings.rb +1 -15
  44. data/app/controllers/concerns/collavre/users_controller/registration.rb +2 -2
  45. data/app/errors/collavre/turn_deadline_error.rb +20 -0
  46. data/app/helpers/collavre/application_helper.rb +38 -0
  47. data/app/helpers/collavre/creatives_helper.rb +56 -22
  48. data/app/helpers/collavre/navigation_helper.rb +12 -0
  49. data/app/javascript/collavre.js +1 -2
  50. data/app/javascript/components/InlineLexicalEditor.jsx +30 -21
  51. data/app/javascript/components/__tests__/creative_tree_row_parent_id.test.js +32 -2
  52. data/app/javascript/components/__tests__/creative_tree_row_progress_toggle.test.js +185 -0
  53. data/app/javascript/components/creative_tree_row.js +62 -22
  54. data/app/javascript/controllers/__tests__/agent_connection_controller.test.js +195 -0
  55. data/app/javascript/controllers/__tests__/desktop_proxy_setup_controller.test.js +96 -0
  56. data/app/javascript/controllers/__tests__/index.test.js +42 -0
  57. data/app/javascript/controllers/__tests__/last_visited_creative_controller.test.js +103 -0
  58. data/app/javascript/controllers/__tests__/link_creative_controller.test.js +253 -2
  59. data/app/javascript/controllers/__tests__/progress_filter_controller.test.js +134 -0
  60. data/app/javascript/controllers/__tests__/search_popup_controller.test.js +310 -0
  61. data/app/javascript/controllers/__tests__/topic_list_controller.test.js +111 -0
  62. data/app/javascript/controllers/__tests__/workspace_tree_controller.test.js +1011 -0
  63. data/app/javascript/controllers/agent_connection_controller.js +357 -0
  64. data/app/javascript/controllers/agent_vendor_controller.js +23 -0
  65. data/app/javascript/controllers/comment_controller.js +3 -1
  66. data/app/javascript/controllers/comments/__tests__/feature_cards_controller.test.js +223 -0
  67. data/app/javascript/controllers/comments/__tests__/form_controller_default_placeholder.test.js +83 -0
  68. data/app/javascript/controllers/comments/__tests__/form_controller_draft.test.js +2069 -0
  69. data/app/javascript/controllers/comments/__tests__/form_controller_ime_send.test.js +324 -0
  70. data/app/javascript/controllers/comments/__tests__/form_controller_review.test.js +28 -2
  71. data/app/javascript/controllers/comments/__tests__/form_controller_search_submit.test.js +106 -0
  72. data/app/javascript/controllers/comments/__tests__/form_controller_stashed_draft.test.js +134 -0
  73. data/app/javascript/controllers/comments/__tests__/form_controller_stashed_draft_creative_switch.test.js +166 -0
  74. data/app/javascript/controllers/comments/__tests__/form_controller_stashed_draft_failure.test.js +183 -0
  75. data/app/javascript/controllers/comments/__tests__/list_controller_deep_link_topic.test.js +467 -0
  76. data/app/javascript/controllers/comments/__tests__/list_controller_docked.test.js +115 -0
  77. data/app/javascript/controllers/comments/__tests__/list_controller_prev_message.test.js +245 -0
  78. data/app/javascript/controllers/comments/__tests__/list_controller_read_pointer.test.js +276 -0
  79. data/app/javascript/controllers/comments/__tests__/list_controller_stream_archived.test.js +221 -0
  80. data/app/javascript/controllers/comments/__tests__/list_controller_stream_search.test.js +104 -0
  81. data/app/javascript/controllers/comments/__tests__/placeholder_controller.test.js +79 -0
  82. data/app/javascript/controllers/comments/__tests__/popup_controller.test.js +754 -1
  83. data/app/javascript/controllers/comments/__tests__/presence_controller.test.js +717 -15
  84. data/app/javascript/controllers/comments/__tests__/prev_message_navigator.test.js +129 -0
  85. data/app/javascript/controllers/comments/__tests__/topics_controller_action_errors.test.js +184 -0
  86. data/app/javascript/controllers/comments/__tests__/topics_controller_archived.test.js +879 -0
  87. data/app/javascript/controllers/comments/__tests__/topics_controller_creation_container.test.js +154 -0
  88. data/app/javascript/controllers/comments/__tests__/topics_controller_creation_scroll.test.js +92 -0
  89. data/app/javascript/controllers/comments/__tests__/topics_controller_delete.test.js +130 -0
  90. data/app/javascript/controllers/comments/__tests__/topics_controller_docked.test.js +32 -0
  91. data/app/javascript/controllers/comments/__tests__/topics_controller_last_topic_echo.test.js +1938 -0
  92. data/app/javascript/controllers/comments/__tests__/topics_controller_primary_agent.test.js +256 -0
  93. data/app/javascript/controllers/comments/__tests__/topics_controller_scroll.test.js +182 -0
  94. data/app/javascript/controllers/comments/__tests__/topics_controller_selection_race.test.js +981 -0
  95. data/app/javascript/controllers/comments/__tests__/topics_controller_topic_list.test.js +313 -0
  96. data/app/javascript/controllers/comments/feature_cards_controller.js +83 -0
  97. data/app/javascript/controllers/comments/form_controller.js +795 -14
  98. data/app/javascript/controllers/comments/list_controller.js +338 -52
  99. data/app/javascript/controllers/comments/placeholder_controller.js +30 -0
  100. data/app/javascript/controllers/comments/popup_controller.js +425 -83
  101. data/app/javascript/controllers/comments/presence_controller.js +317 -55
  102. data/app/javascript/controllers/comments/prev_message_navigator.js +94 -0
  103. data/app/javascript/controllers/comments/topics_controller.js +1772 -100
  104. data/app/javascript/controllers/common_popup_controller.js +2 -2
  105. data/app/javascript/controllers/creatives/__tests__/select_mode_controller.test.js +139 -0
  106. data/app/javascript/controllers/creatives/__tests__/tree_controller.test.js +605 -0
  107. data/app/javascript/controllers/creatives/__tests__/write_access_request_controller.test.js +125 -0
  108. data/app/javascript/controllers/creatives/select_mode_controller.js +7 -2
  109. data/app/javascript/controllers/creatives/tree_controller.js +140 -31
  110. data/app/javascript/controllers/creatives/write_access_request_controller.js +58 -0
  111. data/app/javascript/controllers/desktop_proxy_setup_controller.js +51 -0
  112. data/app/javascript/controllers/gateway_check_controller.js +36 -0
  113. data/app/javascript/controllers/index.js +25 -1
  114. data/app/javascript/controllers/last_visited_creative_controller.js +58 -0
  115. data/app/javascript/controllers/link_creative_controller.js +89 -18
  116. data/app/javascript/controllers/progress_filter_controller.js +12 -22
  117. data/app/javascript/controllers/search_popup_controller.js +64 -46
  118. data/app/javascript/controllers/share_user_search_controller.js +2 -2
  119. data/app/javascript/controllers/topic_list_controller.js +44 -7
  120. data/app/javascript/controllers/workspace_tree_controller.js +662 -0
  121. data/app/javascript/creatives/__tests__/tree_renderer.test.js +80 -0
  122. data/app/javascript/creatives/drag_drop/__tests__/drop_completion_empty_state.test.js +98 -0
  123. data/app/javascript/creatives/drag_drop/__tests__/topic_move_released_agent.test.js +125 -0
  124. data/app/javascript/creatives/drag_drop/event_handlers.js +12 -0
  125. data/app/javascript/creatives/tree_renderer.js +65 -22
  126. data/app/javascript/lib/__tests__/chat_drafts.test.js +1458 -0
  127. data/app/javascript/lib/__tests__/common_popup_bounds.test.js +8 -3
  128. data/app/javascript/lib/__tests__/common_popup_placement.test.js +374 -0
  129. data/app/javascript/lib/__tests__/common_popup_reshow.test.js +131 -0
  130. data/app/javascript/lib/__tests__/creative_link_prefetch.test.js +46 -0
  131. data/app/javascript/lib/__tests__/last_visited_creative.test.js +87 -0
  132. data/app/javascript/lib/__tests__/skill_html_entities.test.js +23 -0
  133. data/app/javascript/lib/__tests__/turbo_stream_actions.test.js +190 -0
  134. data/app/javascript/lib/api/__tests__/creatives.test.js +68 -0
  135. data/app/javascript/lib/api/__tests__/csrf_fetch.test.js +27 -0
  136. data/app/javascript/lib/api/__tests__/topics_save_last_topic.test.js +112 -0
  137. data/app/javascript/lib/api/creatives.js +32 -13
  138. data/app/javascript/lib/api/csrf_fetch.js +6 -4
  139. data/app/javascript/lib/api/topics.js +63 -5
  140. data/app/javascript/lib/chat_drafts.js +786 -0
  141. data/app/javascript/lib/common_popup.js +164 -25
  142. data/app/javascript/lib/creative_link_prefetch.js +27 -0
  143. data/app/javascript/lib/last_visited_creative.js +97 -0
  144. data/app/javascript/lib/lexical/__tests__/creative_link_node.test.js +162 -0
  145. data/app/javascript/lib/lexical/__tests__/creative_link_trigger.test.js +133 -0
  146. data/app/javascript/lib/lexical/__tests__/link_toolbar.test.js +62 -0
  147. data/app/javascript/lib/lexical/creative_link_node.js +101 -0
  148. data/app/javascript/lib/lexical/creative_link_trigger.js +98 -0
  149. data/app/javascript/lib/lexical/link_toolbar.js +23 -0
  150. data/app/javascript/lib/turbo_stream_actions.js +23 -16
  151. data/app/javascript/lib/utils/__tests__/filter_navigation.test.js +210 -0
  152. data/app/javascript/lib/utils/__tests__/markdown.test.js +44 -0
  153. data/app/javascript/lib/utils/filter_navigation.js +100 -0
  154. data/app/javascript/modules/__tests__/command_menu_creative_picker.test.js +62 -0
  155. data/app/javascript/modules/__tests__/command_menu_typeahead.test.js +267 -0
  156. data/app/javascript/modules/__tests__/creative_link_picker.test.js +85 -0
  157. data/app/javascript/modules/__tests__/creative_row_editor_archive.test.js +391 -0
  158. data/app/javascript/modules/__tests__/creative_row_editor_delegated_clicks.test.js +158 -0
  159. data/app/javascript/modules/__tests__/creative_row_editor_empty_state_recovery.test.js +519 -0
  160. data/app/javascript/modules/__tests__/creative_row_editor_empty_state_removal.test.js +346 -0
  161. data/app/javascript/modules/__tests__/creative_row_editor_session.test.js +144 -0
  162. data/app/javascript/modules/__tests__/creative_tree_dom.test.js +30 -0
  163. data/app/javascript/modules/__tests__/creative_tree_empty_state.test.js +186 -0
  164. data/app/javascript/modules/__tests__/dom_listener_registry.test.js +67 -0
  165. data/app/javascript/modules/__tests__/support/inline_editor_dom.js +159 -0
  166. data/app/javascript/modules/command_args_form.js +0 -12
  167. data/app/javascript/modules/command_menu.js +80 -38
  168. data/app/javascript/modules/creative_link_picker.js +56 -0
  169. data/app/javascript/modules/creative_row_editor.js +446 -243
  170. data/app/javascript/modules/creative_row_editor_delegated_clicks.js +87 -0
  171. data/app/javascript/modules/creative_tree_dom.js +4 -0
  172. data/app/javascript/modules/creative_tree_empty_state.js +80 -0
  173. data/app/javascript/modules/dom_listener_registry.js +23 -0
  174. data/app/javascript/modules/mention_menu.js +2 -3
  175. data/app/javascript/utils/__tests__/caret_anchor.test.js +75 -0
  176. data/app/javascript/utils/__tests__/chevron_icons.test.js +15 -0
  177. data/app/javascript/utils/caret_position.js +10 -0
  178. data/app/javascript/utils/chevron_icons.js +7 -0
  179. data/app/jobs/collavre/ai_agent_job.rb +262 -72
  180. data/app/jobs/collavre/cancel_offline_delegated_tasks_job.rb +11 -36
  181. data/app/jobs/collavre/comment_badges_broadcast_job.rb +28 -0
  182. data/app/jobs/collavre/comment_link_preview_job.rb +33 -0
  183. data/app/jobs/collavre/comment_notification_job.rb +14 -0
  184. data/app/jobs/collavre/comment_push_delivery_sweep_job.rb +17 -0
  185. data/app/jobs/collavre/compress_job.rb +33 -22
  186. data/app/jobs/collavre/creative_broadcast_job.rb +161 -48
  187. data/app/jobs/collavre/cron_action_job.rb +36 -18
  188. data/app/jobs/collavre/drop_trigger_job.rb +23 -9
  189. data/app/jobs/collavre/merge_comments_job.rb +33 -16
  190. data/app/jobs/collavre/push_notification_job.rb +62 -18
  191. data/app/jobs/collavre/restore_dropped_dispatches_job.rb +17 -0
  192. data/app/jobs/collavre/stuck_detector_job.rb +1 -1
  193. data/app/jobs/collavre/touch_creative_subtree_job.rb +14 -0
  194. data/app/models/collavre/agent_gateway.rb +200 -0
  195. data/app/models/collavre/agent_subscription.rb +4 -4
  196. data/app/models/collavre/agent_workspace.rb +210 -0
  197. data/app/models/collavre/comment/broadcastable.rb +22 -52
  198. data/app/models/collavre/comment/notifiable.rb +154 -77
  199. data/app/models/collavre/comment/topic_membership.rb +41 -0
  200. data/app/models/collavre/comment.rb +336 -31
  201. data/app/models/collavre/comment_notification_delivery.rb +61 -0
  202. data/app/models/collavre/comment_presence_store/cache_batches.rb +64 -0
  203. data/app/models/collavre/comment_presence_store.rb +272 -12
  204. data/app/models/collavre/comment_read_pointer.rb +9 -15
  205. data/app/models/collavre/creative/describable.rb +8 -2
  206. data/app/models/collavre/creative/permissible.rb +11 -0
  207. data/app/models/collavre/creative.rb +29 -4
  208. data/app/models/collavre/creative_share.rb +109 -4
  209. data/app/models/collavre/current.rb +1 -0
  210. data/app/models/collavre/llm_model.rb +62 -0
  211. data/app/models/collavre/system_setting.rb +12 -1
  212. data/app/models/collavre/task.rb +121 -2
  213. data/app/models/collavre/topic.rb +51 -0
  214. data/app/models/collavre/user.rb +101 -41
  215. data/app/models/collavre/user_creative_preference.rb +3 -1
  216. data/app/services/collavre/agent_provisioning/archive.rb +108 -0
  217. data/app/services/collavre/ai_agent/a2a_dispatcher.rb +16 -3
  218. data/app/services/collavre/ai_agent/agent_lifecycle_manager.rb +63 -6
  219. data/app/services/collavre/ai_agent/approval_handler.rb +12 -4
  220. data/app/services/collavre/ai_agent/claude_channel_adapter.rb +10 -5
  221. data/app/services/collavre/ai_agent/merged_trigger_comments.rb +164 -0
  222. data/app/services/collavre/ai_agent/message_builder.rb +103 -16
  223. data/app/services/collavre/ai_agent/session_provisioner.rb +3 -7
  224. data/app/services/collavre/ai_agent/task_claim_service.rb +29 -15
  225. data/app/services/collavre/ai_agent/task_reply_service.rb +67 -0
  226. data/app/services/collavre/ai_agent_service.rb +108 -20
  227. data/app/services/collavre/ai_client.rb +211 -21
  228. data/app/services/collavre/cli_proxy/client.rb +147 -0
  229. data/app/services/collavre/cli_proxy/endpoint_policy.rb +81 -0
  230. data/app/services/collavre/cli_proxy/identity.rb +47 -0
  231. data/app/services/collavre/cli_proxy/safe_net_http_adapter.rb +19 -0
  232. data/app/services/collavre/command_menu_service.rb +0 -10
  233. data/app/services/collavre/comment_move_service.rb +96 -7
  234. data/app/services/collavre/comment_snapshot_restore_service.rb +11 -5
  235. data/app/services/collavre/comments/action_executor.rb +48 -20
  236. data/app/services/collavre/comments/command_processor.rb +0 -1
  237. data/app/services/collavre/comments/list_response.rb +133 -0
  238. data/app/services/collavre/comments/read_pointer_writer.rb +210 -0
  239. data/app/services/collavre/comments/read_receipt_broadcaster.rb +157 -0
  240. data/app/services/collavre/comments/read_receipt_index.rb +152 -0
  241. data/app/services/collavre/comments/topic_command.rb +72 -1
  242. data/app/services/collavre/comments/topic_mutation.rb +20 -0
  243. data/app/services/collavre/creatives/breadcrumb_resolver.rb +1 -1
  244. data/app/services/collavre/creatives/comment_badge_index.rb +299 -27
  245. data/app/services/collavre/creatives/reorderer.rb +15 -3
  246. data/app/services/collavre/creatives/tree_builder.rb +1 -1
  247. data/app/services/collavre/creatives/tree_formatter.rb +5 -6
  248. data/app/services/collavre/creatives/workspace_path_resolver.rb +50 -0
  249. data/app/services/collavre/creatives/workspace_tree_builder.rb +92 -0
  250. data/app/services/collavre/crons/recurring_topic_tasks.rb +23 -0
  251. data/app/services/collavre/home_page_path.rb +55 -0
  252. data/app/services/collavre/html_text.rb +64 -0
  253. data/app/services/collavre/http_client.rb +11 -2
  254. data/app/services/collavre/inbox_reply_service.rb +1 -1
  255. data/app/services/collavre/markdown_converter.rb +13 -1
  256. data/app/services/collavre/orchestration/agent_orchestrator.rb +776 -81
  257. data/app/services/collavre/orchestration/arbiter.rb +48 -5
  258. data/app/services/collavre/orchestration/deferred_trigger_scope.rb +53 -0
  259. data/app/services/collavre/orchestration/delivery_record.rb +792 -0
  260. data/app/services/collavre/orchestration/loop_breaker.rb +10 -4
  261. data/app/services/collavre/orchestration/matcher.rb +132 -17
  262. data/app/services/collavre/orchestration/policy_resolver.rb +58 -10
  263. data/app/services/collavre/orchestration/scheduler.rb +10 -4
  264. data/app/services/collavre/orchestration/scheduling_hooks.rb +10 -0
  265. data/app/services/collavre/orchestration/selection.rb +43 -0
  266. data/app/services/collavre/orchestration/stuck_detector.rb +25 -112
  267. data/app/services/collavre/orchestration/task_coalescer.rb +355 -0
  268. data/app/services/collavre/orchestration/topic_slot.rb +73 -0
  269. data/app/services/collavre/system_events/context_builder.rb +60 -11
  270. data/app/services/collavre/system_events/dispatcher.rb +58 -12
  271. data/app/services/collavre/system_events/envelope.rb +73 -0
  272. data/app/services/collavre/system_events/vocabulary.rb +45 -0
  273. data/app/services/collavre/tools/creative_retrieval_service.rb +1 -1
  274. data/app/services/collavre/tools/cron_create_service.rb +32 -18
  275. data/app/services/collavre/tools/id_list.rb +38 -0
  276. data/app/services/collavre/tools/topic_authorizer.rb +61 -7
  277. data/app/services/collavre/tools/topic_branch_service.rb +85 -0
  278. data/app/services/collavre/tools/topic_create_service.rb +117 -0
  279. data/app/services/collavre/tools/topic_list_service.rb +101 -0
  280. data/app/services/collavre/tools/topic_message_create_service.rb +192 -0
  281. data/app/services/collavre/tools/topic_messages_service.rb +346 -0
  282. data/app/services/collavre/tools/topic_move_service.rb +108 -0
  283. data/app/services/collavre/tools/topic_selection.rb +59 -0
  284. data/app/services/collavre/tools/topic_update_service.rb +165 -0
  285. data/app/services/collavre/topic_branch_service.rb +39 -10
  286. data/app/services/collavre/topics/agent_resolver.rb +87 -0
  287. data/app/services/collavre/topics/char_budget.rb +70 -0
  288. data/app/services/collavre/topics/last_topic_preference_payload.rb +18 -0
  289. data/app/services/collavre/topics/message_page.rb +380 -0
  290. data/app/services/collavre/topics/message_page_markdown.rb +102 -0
  291. data/app/services/collavre/topics/message_scope.rb +61 -0
  292. data/app/services/collavre/topics/message_stats.rb +92 -0
  293. data/app/services/collavre/topics/move_blocker.rb +47 -0
  294. data/app/services/collavre/topics/next_name.rb +35 -0
  295. data/app/services/collavre/topics/pin_rejection.rb +25 -0
  296. data/app/services/collavre/topics/read_pointer_relocator.rb +71 -0
  297. data/app/services/collavre/topics/reserved_name.rb +18 -0
  298. data/app/services/collavre/topics/serializer.rb +92 -0
  299. data/app/services/collavre/topics/topic_destroy.rb +30 -0
  300. data/app/services/collavre/topics/topic_move.rb +80 -0
  301. data/app/services/collavre/topics/topic_move_effects.rb +35 -0
  302. data/app/services/collavre/topics/topic_mutation.rb +27 -0
  303. data/app/views/collavre/admin/integrations/_setting_row.html.erb +5 -8
  304. data/app/views/collavre/admin/settings/_system_tab.html.erb +7 -0
  305. data/app/views/collavre/agent_connections/show.html.erb +77 -0
  306. data/app/views/collavre/agent_gateways/_form.html.erb +71 -0
  307. data/app/views/collavre/agent_gateways/edit.html.erb +2 -0
  308. data/app/views/collavre/agent_gateways/index.html.erb +54 -0
  309. data/app/views/collavre/agent_gateways/new.html.erb +2 -0
  310. data/app/views/collavre/comments/_comments_popup.html.erb +32 -17
  311. data/app/views/collavre/comments/_empty_state.html.erb +33 -0
  312. data/app/views/collavre/comments/_empty_state_minimal.html.erb +7 -0
  313. data/app/views/collavre/comments/_feature_card.html.erb +35 -0
  314. data/app/views/collavre/comments/_list.html.erb +3 -2
  315. data/app/views/collavre/comments/_no_search_results.html.erb +3 -0
  316. data/app/views/collavre/creatives/_add_button.html.erb +17 -19
  317. data/app/views/collavre/creatives/_empty_state.html.erb +109 -0
  318. data/app/views/collavre/creatives/_inline_edit_form.html.erb +5 -5
  319. data/app/views/collavre/creatives/_tree_loading_placeholder.html.erb +16 -0
  320. data/app/views/collavre/creatives/_workspace_tree.html.erb +33 -0
  321. data/app/views/collavre/creatives/index.html.erb +79 -18
  322. data/app/views/collavre/desktop_setup/show.html.erb +114 -0
  323. data/app/views/collavre/features/index.html.erb +42 -0
  324. data/app/views/collavre/features/show.html.erb +52 -0
  325. data/app/views/collavre/invitation_mailer/invite.html.erb +1 -1
  326. data/app/views/collavre/invitation_mailer/invite.text.erb +1 -1
  327. data/app/views/collavre/invites/show.html.erb +14 -1
  328. data/app/views/collavre/landing/show.html.erb +5 -1
  329. data/app/views/collavre/shared/_link_creative_modal.html.erb +4 -1
  330. data/app/views/collavre/shared/navigation/_help_button.html.erb +3 -1
  331. data/app/views/collavre/shared/navigation/_panels.html.erb +1 -8
  332. data/app/views/collavre/shared/navigation/_search_form.html.erb +13 -2
  333. data/app/views/collavre/user_themes/index.html.erb +1 -1
  334. data/app/views/collavre/users/_llm_fields.html.erb +65 -0
  335. data/app/views/collavre/users/_org_chart_node.html.erb +1 -1
  336. data/app/views/collavre/users/edit_ai.html.erb +33 -31
  337. data/app/views/collavre/users/new.html.erb +4 -2
  338. data/app/views/collavre/users/new_ai.html.erb +14 -32
  339. data/app/views/collavre/users/show.html.erb +13 -1
  340. data/app/views/layouts/collavre/landing.html.erb +9 -4
  341. data/config/initializers/ruby_llm_openai_reasoning_content.rb +77 -0
  342. data/config/locales/admin.en.yml +3 -1
  343. data/config/locales/admin.ko.yml +3 -1
  344. data/config/locales/agent_gateway.en.yml +217 -0
  345. data/config/locales/agent_gateway.ko.yml +217 -0
  346. data/config/locales/ai_agent.en.yml +0 -1
  347. data/config/locales/ai_agent.ko.yml +0 -1
  348. data/config/locales/comments.en.yml +72 -30
  349. data/config/locales/comments.ko.yml +72 -30
  350. data/config/locales/creatives.en.yml +32 -1
  351. data/config/locales/creatives.ko.yml +32 -1
  352. data/config/locales/features.en.yml +140 -0
  353. data/config/locales/features.ko.yml +140 -0
  354. data/config/locales/invites.en.yml +3 -0
  355. data/config/locales/invites.ko.yml +3 -0
  356. data/config/locales/landing.en.yml +2 -1
  357. data/config/locales/landing.ko.yml +2 -1
  358. data/config/locales/tools.en.yml +20 -0
  359. data/config/locales/tools.ko.yml +20 -0
  360. data/config/locales/users.en.yml +15 -14
  361. data/config/locales/users.ko.yml +14 -14
  362. data/config/routes.rb +45 -19
  363. data/db/migrate/20250911084338_backfill_creative_in_comment_inbox_items.rb +9 -1
  364. data/db/migrate/20260724000000_add_creative_id_index_to_comments.rb +34 -0
  365. data/db/migrate/20260724000001_add_creative_private_id_index_to_comments.rb +50 -0
  366. data/db/migrate/20260724090000_add_async_comment_notification_state.rb +64 -0
  367. data/db/migrate/20260727000000_add_waiting_notice_scope_to_comments.rb +30 -0
  368. data/db/migrate/20260727010000_add_waiting_notice_scope_to_tasks.rb +26 -0
  369. data/db/migrate/20260805000000_add_creative_workspace_enabled_to_users.rb +5 -0
  370. data/db/migrate/20260807050000_add_dismissed_notices_to_users.rb +5 -0
  371. data/db/migrate/20260809000000_change_creative_workspace_enabled_default_to_true.rb +18 -0
  372. data/db/migrate/20260809000001_create_llm_models.rb +64 -0
  373. data/db/migrate/20260809000002_create_agent_gateways_and_workspaces.rb +35 -0
  374. data/db/migrate/20260809000003_hash_agent_workspace_callback_tokens.rb +44 -0
  375. data/db/migrate/20260809000004_encrypt_agent_workspace_manifest_tokens.rb +59 -0
  376. data/db/migrate/20260810000000_split_agent_workspace_identity_axes.rb +58 -0
  377. data/db/migrate/20260810000001_seed_codex_custom_proxy_llm_models.rb +28 -0
  378. data/db/migrate/20260810010000_add_last_visited_creative_to_users.rb +8 -0
  379. data/db/migrate/20260810020000_add_last_visited_creative_at_to_users.rb +5 -0
  380. data/db/migrate/20260810030000_add_last_visited_creative_navigation_order_to_users.rb +6 -0
  381. data/db/migrate/20260810060000_add_last_visited_creative_issued_sequence_to_users.rb +5 -0
  382. data/db/migrate/20260810100000_add_desktop_managed_to_agent_gateways.rb +40 -0
  383. data/db/migrate/20260810100001_add_desktop_preset_adapter_to_users.rb +38 -0
  384. data/db/migrate/20260811000000_make_agent_gateway_completion_key_nullable.rb +7 -0
  385. data/db/migrate/20260812000000_remove_workflow_columns_from_tasks.rb +101 -0
  386. data/db/migrate/20260812000001_remove_android_devices.rb +24 -0
  387. data/db/migrate/20260812010000_drop_inbox_items.rb +22 -0
  388. data/db/migrate/20260813000000_clear_claude_channel_presence_routing_expressions.rb +16 -0
  389. data/db/migrate/20260813000001_add_last_topic_revision_to_user_creative_preferences.rb +5 -0
  390. data/db/migrate/20260813000002_add_last_topic_save_order_to_user_creative_preferences.rb +6 -0
  391. data/db/migrate/20260813000003_add_last_topic_save_sequences_to_user_creative_preferences.rb +5 -0
  392. data/db/migrate/20260813000004_add_last_topic_save_fences_to_user_creative_preferences.rb +6 -0
  393. data/db/migrate/20260814000000_add_topic_to_comment_read_pointers.rb +79 -0
  394. data/db/migrate/20260814000001_add_creative_topic_private_id_index_to_comments.rb +37 -0
  395. data/db/migrate/20260816000000_add_watermark_index_to_comment_read_pointers.rb +27 -0
  396. data/db/migrate/20260816000001_add_private_recipient_topic_index_to_comments.rb +48 -0
  397. data/db/migrate/20260820000000_add_topic_assigned_at_to_comments.rb +13 -0
  398. data/db/seeds.rb +1 -51
  399. data/lib/collavre/engine.rb +108 -1
  400. data/lib/collavre/feature_card_registry.rb +168 -0
  401. data/lib/collavre/hashed_access_token_lookup.rb +22 -0
  402. data/lib/collavre/sensitive_request_silencer.rb +23 -0
  403. data/lib/collavre/user_extensions.rb +0 -2
  404. data/lib/collavre/version.rb +1 -1
  405. data/lib/collavre.rb +1 -0
  406. data/skills/collavre/SKILL.md +165 -0
  407. data/skills/collavre/package.json +8 -0
  408. data/skills/collavre/references/tool-reference.md +347 -0
  409. data/skills/collavre/scripts/collavre +634 -0
  410. data/skills/collavre/scripts/html_entities.js +24 -0
  411. metadata +228 -30
  412. data/app/controllers/collavre/api/v1/mobile/agent_events_controller.rb +0 -224
  413. data/app/controllers/collavre/api/v1/mobile/base_controller.rb +0 -95
  414. data/app/controllers/collavre/api/v1/mobile/devices_controller.rb +0 -31
  415. data/app/controllers/collavre/api/v1/mobile/voice_commands_controller.rb +0 -25
  416. data/app/controllers/collavre/inbox_items_controller.rb +0 -70
  417. data/app/controllers/collavre/typo_corrections_controller.rb +0 -39
  418. data/app/javascript/lib/__tests__/typo_correction.test.js +0 -192
  419. data/app/javascript/lib/typo_correction.js +0 -146
  420. data/app/javascript/modules/__tests__/typo_corrector.test.js +0 -365
  421. data/app/javascript/modules/creative_guide.js +0 -67
  422. data/app/javascript/modules/typo_corrector.js +0 -534
  423. data/app/jobs/collavre/inbox_summary_job.rb +0 -24
  424. data/app/mailers/collavre/inbox_mailer.rb +0 -19
  425. data/app/models/collavre/inbox_item.rb +0 -89
  426. data/app/services/collavre/comments/concerns/workflow_support.rb +0 -115
  427. data/app/services/collavre/comments/work_command.rb +0 -161
  428. data/app/services/collavre/comments/workflow_executor.rb +0 -276
  429. data/app/services/collavre/gemini_parent_recommender.rb +0 -77
  430. data/app/services/collavre/mobile/event_summarizer.rb +0 -40
  431. data/app/services/collavre/typo_corrector.rb +0 -188
  432. data/app/views/collavre/inbox_items/_item.html.erb +0 -18
  433. data/app/views/collavre/inbox_items/_items.html.erb +0 -3
  434. data/app/views/collavre/inbox_items/_list.html.erb +0 -7
  435. data/app/views/collavre/inbox_items/index.html.erb +0 -1
  436. data/app/views/collavre/inbox_mailer/daily_summary.html.erb +0 -11
  437. data/app/views/collavre/inbox_mailer/daily_summary.text.erb +0 -8
  438. data/app/views/collavre/users/typo_correction.html.erb +0 -50
  439. data/config/locales/mobile.en.yml +0 -16
  440. data/config/locales/mobile.ko.yml +0 -16
@@ -0,0 +1,217 @@
1
+ ---
2
+ ko:
3
+ activerecord:
4
+ attributes:
5
+ collavre/agent_gateway:
6
+ name: 이름
7
+ base_url: Base URL
8
+ admin_key: Admin key
9
+ completion_key: Completion key
10
+ identity_secret: Identity secret
11
+ tenant_id: Tenant ID
12
+ workspace_mode: 워크스페이스 모드
13
+ active: 사용 가능 여부
14
+ agents: AI Agent
15
+ errors:
16
+ models:
17
+ collavre/agent_gateway:
18
+ attributes:
19
+ base_url:
20
+ invalid: "은(는) 사용자 정보·쿼리·프래그먼트가 없는 http(s) 주소여야 합니다"
21
+ unsafe: "은(는) HTTPS를 사용해야 하며 로컬·사설·예약된 네트워크 주소를 사용할 수 없습니다"
22
+ immutable: "은(는) 데스크탑 관리 게이트웨이에서 변경할 수 없습니다"
23
+ admin_key:
24
+ immutable: "은(는) 데스크탑 관리 게이트웨이에서 변경할 수 없습니다"
25
+ completion_key:
26
+ immutable: "은(는) 데스크탑 관리 게이트웨이에서 변경할 수 없습니다"
27
+ required_for_agents: "은(는) AI Agent에 할당되어 있는 동안 필요합니다"
28
+ workspace_mode:
29
+ desktop_shared_only: "은(는) 데스크탑 관리 게이트웨이에서 공유 모드로 유지해야 합니다"
30
+ tenant_id:
31
+ invalid: "은(는) 영문·숫자와 . _ : @ / - 만 사용할 수 있습니다"
32
+ identity_secret:
33
+ immutable: "은(는) 데스크탑 관리 게이트웨이에서 변경할 수 없습니다"
34
+ blank: "은(는) 사용자별 모드 또는 여러 AI Agent가 사용하는 게이트웨이에서 필수입니다"
35
+ too_short: "은(는) %{count}바이트 이상이어야 합니다"
36
+ collavre/user:
37
+ attributes:
38
+ agent_gateway:
39
+ identity_required: "은(는) 다른 AI Agent와 게이트웨이를 공유할 때 Identity secret이 필요합니다"
40
+ completion_key_required: "은(는) AI Agent 채팅에 Completion key가 필요합니다"
41
+ collavre:
42
+ agent_gateways:
43
+ title: 내 Agent Gateway
44
+ manage: Agent Gateway 설정
45
+ description: 내가 소유한 CLI OpenAI 프록시를 등록합니다. 키는 서버에만 보관되며 브라우저로 전달되지 않습니다.
46
+ add: 게이트웨이 추가
47
+ new_title: Agent Gateway 추가
48
+ edit_title: Agent Gateway 수정
49
+ name: 이름
50
+ name_placeholder: 팀 CLI Proxy
51
+ base_url: Base URL
52
+ base_url_help: API 경로를 제외한 공개 HTTPS 프록시 주소를 입력하세요. 로컬·사설·예약된 네트워크 주소는 차단됩니다.
53
+ base_url_help_admin: API 경로를 제외한 프록시 주소를 입력하세요. 시스템 관리자는 HTTP와 사설망 주소를 사용할 수 있습니다.
54
+ admin_key: Admin key
55
+ admin_key_help: 프록시 AUTH_ADMIN_KEYS 값입니다. Collavre 서버에서만 사용합니다.
56
+ completion_key: Completion key
57
+ completion_key_help: 선택 사항입니다. AI Agent 채팅 완료 요청에만 필요합니다.
58
+ clear_completion_key_label: 저장된 Completion key 삭제
59
+ clear_completion_key_help: 저장 후 새 Completion key를 추가하기 전까지 이 게이트웨이는 프로비저닝 전용으로만 사용할 수 있습니다.
60
+ identity_secret: Identity secret
61
+ identity_secret_help: USER_IDENTITY_HMAC_SECRET과 같아야 하며 32바이트 이상이어야 합니다. 사용자별 모드 또는 여러 AI Agent가 사용할 때 필수입니다.
62
+ tenant_id: Tenant ID
63
+ tenant_id_help: 이 값을 바꾸면 연결된 모든 에이전트가 프록시에서 다른 워크스페이스를 사용하게 됩니다.
64
+ secret_unchanged: 비워두면 현재 값을 유지합니다
65
+ active: AI Agent에서 사용 가능
66
+ inactive: 비활성
67
+ workspace_mode:
68
+ label: 워크스페이스 모드
69
+ shared: 공유
70
+ shared_help: AI Agent 하나의 Linux 워크스페이스와 provider 로그인을 모든 사용자가 공유합니다.
71
+ per_user: 사용자별
72
+ per_user_help: Collavre 사용자마다 Linux 워크스페이스가 분리되며 각자 provider에 로그인해야 합니다.
73
+ agents: AI Agent
74
+ actions: 작업
75
+ check: 연결 확인
76
+ checking: 확인 중…
77
+ connected: 연결됨
78
+ connection_failed: 연결 실패
79
+ identity_unverified: 관리 키 연결은 확인했지만 사용자 신원을 확인할 completion key 매핑이나 기존 워크스페이스가 없습니다
80
+ unsafe_endpoint: 이 게이트웨이가 공개 HTTPS 주소로만 해석되지 않아 차단되었습니다
81
+ edit: 수정
82
+ delete: 삭제
83
+ confirm_delete: 이 게이트웨이를 삭제할까요? AI Agent가 사용 중인 게이트웨이는 삭제할 수 없습니다.
84
+ empty: 등록된 Agent Gateway가 없습니다.
85
+ created: Agent Gateway가 생성되었습니다.
86
+ updated: Agent Gateway가 수정되었습니다.
87
+ destroyed: Agent Gateway가 삭제되었습니다.
88
+ in_use: AI Agent가 사용 중인 게이트웨이는 삭제할 수 없습니다.
89
+ desktop_setup:
90
+ kicker: 첫 실행 설정
91
+ title: 로컬 AI Agent 설정
92
+ subtitle: Collavre Desktop 앱의 첫 실행 안내 흐름입니다.
93
+ progress_label: 설정 진행 상황
94
+ back: 이전
95
+ next: 계속
96
+ steps:
97
+ account: 관리자 계정
98
+ install: 설치
99
+ adapters: CLI 안내
100
+ ready: 완료
101
+ account:
102
+ kicker: 첫 실행 설정
103
+ title: 첫 관리자 계정 만들기
104
+ body: AI Gateway를 설치하기 전에 로컬 Collavre 관리자를 설정합니다. 앱은 관리자 계정을 미리 생성하지 않습니다.
105
+ name_label: 이름
106
+ name_placeholder: 이름을 입력하세요
107
+ email_label: 이메일
108
+ email_placeholder: you@example.com
109
+ password_label: 비밀번호
110
+ password_placeholder: 비밀번호를 입력하세요
111
+ password_confirmation_label: 비밀번호 확인
112
+ password_confirmation_placeholder: 비밀번호를 다시 입력하세요
113
+ hint: 이 계정은 이 Mac에만 생성되며, 생성 후 바로 로그인됩니다.
114
+ notice: 비밀번호는 이 Mac에만 보관합니다. AI provider로 전송하거나 기존 CLI 계정에 접근하는 데 사용하지 않습니다.
115
+ continue: 관리자 계정 만들기
116
+ existing: 이 Mac에 관리자 계정이 이미 있습니다. 로그인하여 설정을 계속하세요.
117
+ already_created: 이 Mac에 관리자 계정이 이미 있습니다.
118
+ install:
119
+ kicker: 명시적 동의
120
+ title: 로컬 프록시 설치 및 등록
121
+ body: 동의하면 loopback으로만 동작하는 번들 프록시 하나를 시작하고 로컬 관리자 계정에 등록합니다.
122
+ items:
123
+ installation:
124
+ title: 설치
125
+ body: 이 Mac에서 cli-openai-proxy를 단일 로컬 서비스로 설치합니다.
126
+ keys:
127
+ title: 보안 키
128
+ body: 관리자 키 하나와 API 키 하나를 생성하고 로컬 Gateway에만 보관합니다.
129
+ registration:
130
+ title: 등록
131
+ body: 해당 Gateway를 Collavre 관리자 계정에 자동 등록합니다.
132
+ consent: 계속하면 단일 로컬 CLI Proxy 서비스를 설치하고 설정한다는 점을 이해했습니다.
133
+ hint: 프록시 자격 증명은 macOS 키체인에 생성합니다. 기존 Claude Code·Codex 자격 증명은 읽거나 변경하지 않습니다.
134
+ continue: 설치하고 계속하기
135
+ unavailable: 이 작업은 Collavre Desktop에서만 사용할 수 있습니다.
136
+ failed: 로컬 프록시를 설치하지 못했습니다. Gateway는 등록되지 않았습니다. 데스크탑 로그를 확인한 후 다시 시도하세요.
137
+ adapters:
138
+ kicker: 기존 CLI 도구
139
+ title: 이미 로그인한 CLI 도구 사용
140
+ body: Collavre는 CLI 실행 파일을 사용할 수 있는지 확인한 뒤 알맞은 Agent 프리셋을 만듭니다.
141
+ detected: 감지됨 — Agent 프리셋 생성 완료
142
+ not_detected: 감지되지 않음 — 프리셋을 만들지 않음
143
+ claude:
144
+ title: Claude Code
145
+ body: 기존 로컬 Claude Code 세션을 사용합니다. 마법사는 로그인하거나 자격 증명을 읽지 않습니다.
146
+ codex:
147
+ title: Codex
148
+ body: 기존 로컬 Codex 세션을 사용합니다. 마법사는 로그인하거나 자격 증명을 읽지 않습니다.
149
+ notice: 실행 파일 사용 가능 여부만 확인합니다. 기존 자격 증명과 설정을 읽거나 외부로 전송하지 않습니다.
150
+ ready:
151
+ kicker: 설정 완료
152
+ title: 로컬 AI Gateway 준비 완료
153
+ body: 로컬 프록시와 Gateway가 준비되었습니다. Collavre를 열어 설정된 Agent를 사용하세요.
154
+ items:
155
+ proxy: 로컬 cli-openai-proxy 인스턴스 하나가 설치됩니다.
156
+ gateway: 생성한 로컬 Gateway가 Collavre 관리자에게 등록됩니다.
157
+ agents: 지원되는 경우 즉시 사용할 수 있는 Claude Code와 Codex Agent 프리셋이 준비됩니다.
158
+ notice: 이후 Agent Gateway 설정에서 관리할 수 있습니다. 제거해도 Claude Code나 Codex 설치에는 영향을 주지 않습니다.
159
+ open: Collavre 열기
160
+ agent_connections:
161
+ title: "%{agent} 연결"
162
+ card_title: 엔진 연결 및 프로비저닝
163
+ card_help: provider 로그인은 선택한 게이트웨이의 워크스페이스 모드에 따라 분리됩니다. Collavre 스킬과 워크스페이스 설정은 함께 프로비저닝됩니다.
164
+ profile_help:
165
+ shared: 이 에이전트는 하나의 공유 CLI Proxy 워크스페이스를 사용합니다. 에이전트 소유자가 공유 provider 연결을 관리합니다.
166
+ per_user: 이 에이전트는 사용자별 CLI Proxy 워크스페이스를 사용합니다. 사용 전에 내 provider를 연결하세요.
167
+ manage: 내 연결 관리
168
+ credential_axis: '로그인:'
169
+ workspace_axis: '워크스페이스:'
170
+ axis_help:
171
+ shared: provider 로그인과 프로비저닝을 이 에이전트의 모든 사용자가 공유합니다. 여기서 한 번 로그인하면 전원에게 적용됩니다.
172
+ per_user: provider 로그인은 내 계정 단위이며, 이 게이트웨이에 연결한 모든 에이전트가 함께 사용합니다. 에이전트마다가 아니라 provider마다 한 번만 로그인하면 됩니다. 스킬과 워크스페이스 설정은 에이전트별로 분리됩니다.
173
+ engines: Agent provider
174
+ loading: 불러오는 중…
175
+ refresh: 새로고침
176
+ login: 로그인
177
+ submit: 제출
178
+ base_url:
179
+ label: Provider base URL
180
+ help: OpenRouter의 https://openrouter.ai/api/v1 같은 HTTPS Responses API base URL을 입력하세요. 공개 주소로만 해석되어야 합니다.
181
+ open_url: 인증 페이지 열기
182
+ error: CLI Proxy 오류
183
+ errors:
184
+ insecure_base_url: Provider base URL은 HTTPS를 사용하고 공개 주소로만 해석되어야 합니다.
185
+ provisioning: 프로비저닝
186
+ provisioning_help: Collavre는 collavre-cli 스킬 하나와 callback URL·token이 든 워크스페이스 설정 하나를 항상 프로비저닝합니다. "지금 동기화"는 이 워크스페이스의 매니페스트를 먼저 다시 등록하므로, 프로비저닝이 안 됐거나 실패한 경우에도 다시 로그인하지 않고 복구합니다.
187
+ sync: 지금 동기화
188
+ manifest_unregistered: 이 워크스페이스에 등록된 매니페스트가 아직 없습니다. "지금 동기화"를 누르면 등록하고 프로비저닝합니다.
189
+ last_error: 최근 프로비저닝 오류
190
+ item: 항목
191
+ kind: 유형
192
+ state: 상태
193
+ actions: 작업
194
+ approve: 승인
195
+ revoke: 승인 회수
196
+ item_types:
197
+ skill: 스킬
198
+ config: 설정
199
+ statuses:
200
+ authenticated: 인증됨
201
+ unauthenticated: 미인증
202
+ unknown: 알 수 없음
203
+ pending: 대기 중
204
+ authorized: 인증 완료
205
+ failed: 실패
206
+ cancelled: 취소됨
207
+ not_synced: 동기화되지 않음
208
+ pending_approval: 승인 대기
209
+ installed: 설치됨
210
+ unsupported: 지원되지 않음
211
+ removed: 제거됨
212
+ meta_skills: 활성 메타 스킬
213
+ meta_skills_help: AI Agent 설정자가 선택한 Collavre 도구입니다. 단일 collavre-cli 스킬이 실행하며, 토큰 단위 권한 제어는 추후 추가됩니다.
214
+ rotate_tokens: 콜백 토큰 회전
215
+ rotate_confirm: Collavre 콜백 토큰을 회전할까요? 등록된 매니페스트 URL은 유지되며, 이후 워크스페이스를 다시 동기화해야 합니다.
216
+ tokens_rotated: 콜백 토큰이 회전되었습니다.
217
+ back: 뒤로
@@ -2,7 +2,6 @@ en:
2
2
  collavre:
3
3
  stuck_detection:
4
4
  task_stuck: "⚠️ Task '%{task_name}' assigned to %{agent_name} has been stuck for %{minutes} minutes."
5
- creative_stalled: "⚠️ Creative '%{creative_title}' has stalled at %{progress}%% for %{hours} hours."
6
5
  system_comment: "[System] Task '%{task_name}' by %{agent_name} appears stuck. Admin attention required."
7
6
  ai_agent:
8
7
  approval:
@@ -2,7 +2,6 @@ ko:
2
2
  collavre:
3
3
  stuck_detection:
4
4
  task_stuck: "⚠️ '%{task_name}' 작업이 %{agent_name}에게 할당된 후 %{minutes}분 동안 진행되지 않고 있습니다."
5
- creative_stalled: "⚠️ '%{creative_title}' Creative가 %{progress}%%에서 %{hours}시간 동안 정체되어 있습니다."
6
5
  system_comment: "[시스템] %{agent_name}의 '%{task_name}' 작업이 막힌 것 같습니다. 관리자 확인이 필요합니다."
7
6
  ai_agent:
8
7
  approval:
@@ -9,15 +9,27 @@ en:
9
9
  unarchive: Restore
10
10
  archived_topics: "Archived topics (%{count})"
11
11
  not_ai_agent: Only AI agents can be set as primary agent.
12
+ session_topic_locked: This topic belongs to a live agent session. Its primary agent cannot be changed or released.
13
+ agent_no_creative_access: "%{name} has no feedback access here, so it could not respond as primary agent. Share this creative with the agent first."
14
+ session_agent_not_assignable: "%{name} is a live agent session and only responds in its own session topic, so it cannot be the primary agent here."
12
15
  default_name_prefix: "Topic"
13
16
  branch_prefix: "Branch"
14
17
  main_name: "Main"
15
18
  cannot_delete_main: "Cannot delete the Main topic."
19
+ reserved_name: "This topic name is reserved and cannot be assigned."
16
20
  orphaned_cron_notice: "[System] The topic '%{topic_name}' was deleted, but a recurring cron job (%{cron_key}) still targets it and will silently do nothing on each run. Original message: \"%{message}\". Re-point it to another topic or cancel it with cron_cancel."
17
21
  create_and_move: 'Create "%{name}" and move'
18
22
  move:
19
23
  no_target_permission: You don't have write permission on the target creative.
24
+ source_changed: The topic moved to another creative while this request was waiting. Reload it and try again from its current creative.
25
+ active_tasks: This topic has active agent work. Wait for it to finish or cancel it before moving the topic.
26
+ pending_deliveries: This topic still has agent messages waiting to be restored. Wait for restoration to finish before moving the topic.
27
+ recurring_tasks: This topic has a recurring cron job. Cancel it with cron_cancel and recreate it after moving the topic.
28
+ trigger_loop: This topic controls a Drop Trigger loop and cannot move while that loop configuration references it.
20
29
  duplicate_name: A topic named '%{name}' already exists in the target creative.
30
+ session_topic_locked: This topic belongs to a live agent session and cannot be moved.
31
+ primary_agent_released: '@%{agent} was released as primary agent because it has no feedback access in "%{creative}". Share that creative with the agent and assign it again to keep it on this topic.'
32
+ primary_agent_released_session_agent: '@%{agent} was released as primary agent because it is a live agent session and only responds in its own session topic, which "%{creative}" is not.'
21
33
  add_members:
22
34
  title: Add members to the new location?
23
35
  description: These people had access where the topic used to live, but not in "%{creative}". Add them so they keep access.
@@ -33,11 +45,11 @@ en:
33
45
  login_first: Please sign in first.
34
46
  connected: Github account connected successfully.
35
47
  comments:
48
+ close: Close
36
49
  reaction_invalid: Invalid reaction.
37
50
  invalid_topic: Topic does not belong to this creative.
38
51
  comments: Comments
39
52
  delete_confirm: Are you sure you want to delete this comment?
40
- no_comments: No comments yet.
41
53
  anonymous: Anonymous
42
54
  add_comment: Add Comment
43
55
  update_comment: Update Comment
@@ -65,6 +77,8 @@ en:
65
77
  approve_missing_action: No approval action is associated with this comment.
66
78
  approve_missing_approver: This comment has no approver to run the action.
67
79
  approve_already_executed: This comment action has already been executed.
80
+ approve_task_not_pending: This turn was stopped or has already resumed, so the tool was not run.
81
+ approve_task_superseded: This approval was superseded by a newer tool call, so the tool was not run.
68
82
  approve_execution_failed: 'Comment action failed: %{message}'
69
83
  approve_success: Action approved.
70
84
  approve_error: Unable to approve the action.
@@ -107,6 +121,14 @@ en:
107
121
  navigate_forward: Next chat
108
122
  recent_chats: Recent chats
109
123
  remove_from_history: Remove from history
124
+ topic_set_agent_error: Unable to assign the agent to this topic.
125
+ topic_agent_assigned_title: "%{name} is assigned to this topic — click to release"
126
+ topic_clear_agent_confirm: "Release %{name} from this topic? Every agent will be able to respond here again."
127
+ topic_create_error: Unable to create the topic.
128
+ topic_update_error: Unable to update the topic.
129
+ topic_delete_error: Unable to delete the topic.
130
+ topic_archive_error: Unable to archive the topic.
131
+ topic_restore_error: Unable to restore the topic.
110
132
  inbox_reply_button: Reply
111
133
  replace_button: Replace
112
134
  move_no_selection: Select at least one message to move.
@@ -131,10 +153,12 @@ en:
131
153
  minimum_required: "Select at least 2 messages to merge."
132
154
  not_authorized: "You don't have permission to merge messages."
133
155
  own_messages_only: "You can only merge your own messages or messages from your AI agents."
156
+ same_topic_required: "You can only merge messages from the same topic."
134
157
  branch:
135
158
  no_selection: "Select at least one message to branch."
136
159
  not_authorized: "You don't have permission to branch messages."
137
160
  comments_not_found: "Some selected messages could not be found."
161
+ approval_action_not_branchable: "Approval prompts cannot be branched."
138
162
  batch_delete_confirm: Are you sure you want to delete the selected messages?
139
163
  batch_delete_no_selection: Select at least one message to delete.
140
164
  batch_delete_not_found: Some selected messages could not be found.
@@ -143,9 +167,6 @@ en:
143
167
  topic_list: Topic list
144
168
  fullscreen: Full screen
145
169
  exit_fullscreen: Exit full screen
146
- typo_keep_label: keep
147
- typo_custom_label: custom
148
- typo_input_label: correction
149
170
  move_invalid_target: Select a valid creative to move messages to.
150
171
  move_invalid_topic: Invalid topic selected.
151
172
  move_not_allowed: You do not have permission to move these messages.
@@ -157,8 +178,6 @@ en:
157
178
  calendar_args: "YYYY-MM-DD@HH:MM memo (today/tomorrow, +3days, +2weeks, +1months, +1years, +mon)"
158
179
  topic_description: "Create a new topic with optional primary agent."
159
180
  topic_args: '"topic name" @agent_name'
160
- work_description: "Create a workflow to execute tasks on child creatives via DFS traversal."
161
- work_args: "@agent_name workflow_context"
162
181
  compress_description: "Summarize all messages in the current topic and remove originals."
163
182
  compress_args: "[additional instructions]"
164
183
  creative_description: "Insert a link to a creative. In AI chats, the linked creative tree is injected as context."
@@ -166,8 +185,6 @@ en:
166
185
  calendar_memo_hint: "Event memo (optional)"
167
186
  topic_name_hint: "Topic name"
168
187
  topic_agent_hint: "@agent_name (optional)"
169
- work_agent_hint: "@agent_name"
170
- work_context_hint: "Workflow context (optional)"
171
188
  compress_instructions_hint: "Additional instructions (optional)"
172
189
  form_submit: "OK"
173
190
  form_cancel: "Cancel"
@@ -187,27 +204,15 @@ en:
187
204
  failed: "Compress failed"
188
205
  topic_command:
189
206
  missing_name: 'Please specify a topic name in quotes: /topic "topic name"'
207
+ not_authorized: "You need write permission to change a topic's primary agent."
190
208
  created: 'Topic "%{name}" created.'
191
209
  created_with_agent: 'Topic "%{name}" created with @%{agent} as primary agent.'
192
210
  updated_agent: 'Topic "%{name}" primary agent updated to @%{agent}.'
211
+ cleared_agent: 'Topic "%{name}" primary agent released. All agents can respond again.'
193
212
  already_exists: 'Topic "%{name}" already exists.'
194
- work_command:
195
- agent_not_found: "Please mention an AI agent to execute the workflow."
196
- no_children: "This creative has no child creatives to work on."
197
- all_already_tasked: "All child creatives already have active tasks."
198
- started: 'Workflow started with @%{agent}: %{total} tasks queued (%{skipped} skipped).'
199
- trigger_comment: '📋 [Workflow] %{context}'
200
- subtask_started: '📋 @%{agent} starting work on "%{creative}" (%{current}/%{total})'
201
- subtask_completed: '✅ @%{agent} completed "%{creative}" (%{completed}/%{total}, %{progress}%%)'
202
- workflow_completed: '✅ Workflow completed by @%{agent}: %{completed} creatives processed.'
203
- workflow_failed: 'Workflow failed by @%{agent} on "%{creative}": %{reason}'
204
- workflow_stopped: '⏹️ Workflow stopped by @%{agent}. %{completed} completed, %{remaining} remaining.'
205
- workflow_resumed: '▶️ Workflow resumed by @%{agent}. %{remaining} tasks remaining.'
206
- stopped: 'Workflow stopped for @%{agent}.'
207
- resumed: 'Workflow resumed for @%{agent}: %{remaining} tasks remaining.'
208
- no_active_workflow: 'No active workflow found on this creative.'
209
- no_resumable_workflow: 'No failed or stopped workflow found to resume.'
210
- supervisor_instruction: "If you need clarification, have questions, or are unsure about anything, ask @%{supervisor}: instead of the user. They will guide you."
213
+ session_topic_locked: 'Topic "%{name}" belongs to a live agent session. Its primary agent cannot be changed or released.'
214
+ agent_no_creative_access: '@%{agent} has no feedback access here, so it could not respond as primary agent. Share this creative with the agent first.'
215
+ session_agent_not_assignable: '@%{agent} is a live agent session and only responds in its own session topic, so it cannot be the primary agent here.'
211
216
  versions:
212
217
  previous: Previous version
213
218
  next: Next version
@@ -230,6 +235,47 @@ en:
230
235
  delete: Delete
231
236
  delete_confirm: Delete this image?
232
237
  counter: "%{current} / %{total}"
238
+ chat_input_hint: "Type a message, or use / for commands"
239
+ empty_state:
240
+ title: Get started
241
+ minimal_prompt: Start a conversation
242
+ inbox_system_title: No new notifications
243
+ inbox_system_minimal_prompt: You're all caught up
244
+ restore_cards: Show tips again
245
+ dismiss: Dismiss
246
+ learn_more: Learn more
247
+ no_search_results: No messages match your search.
248
+ cards:
249
+ mention_agent:
250
+ title: Mention teammates & agents
251
+ description: "Use @name: to ask a question or loop someone in."
252
+ slash_command:
253
+ title: Slash commands
254
+ description: Type / to see available commands like /calendar or /topic.
255
+ action: View commands
256
+ chat_context:
257
+ title: Chat context
258
+ description: Link another Creative as context so agents can reference it here.
259
+ automation_trigger:
260
+ title: Automation triggers
261
+ description: Drop actions and agent triggers can react automatically to new messages.
262
+ topic_management:
263
+ title: Topics
264
+ description: Split this chat into topics to keep conversations organized.
265
+ action: View topics
266
+ add_user:
267
+ title: Add people
268
+ description: Invite teammates or AI agents to this conversation.
269
+ action: Add user
270
+ inbox_notifications:
271
+ title: Notifications arrive here
272
+ description: Mentions, shares, access requests, and important system updates are collected in this topic.
273
+ inbox_reply:
274
+ title: Reply from your inbox
275
+ description: Reply after a conversation notification to send your message back to its original topic.
276
+ inbox_source:
277
+ title: Jump to the source
278
+ description: Use the Creative link in a notification to open the original conversation in context.
233
279
  channels:
234
280
  detach: "Detach"
235
281
  calendar_events:
@@ -249,6 +295,7 @@ en:
249
295
  creative_shared: '%{user} shared "%{short_title}".'
250
296
  user_mentioned: '%{user} mentioned you in "%{creative}": "%{comment}"'
251
297
  permission_requested: '%{user} requested access to "%{short_title}".'
298
+ write_permission_requested: '%{user} requested write access to "%{short_title}".'
252
299
  comment_deleted_by_admin: '%{admin_name} deleted your comment in "%{creative_snippet}":
253
300
  %{comment_content}'
254
301
  comment_content_unavailable: "(comment unavailable)"
@@ -272,8 +319,3 @@ en:
272
319
  not_authorized: "You don't have permission to restore this snapshot."
273
320
  restore_confirm: "Restore original messages? The summary will be removed."
274
321
  restore_button: "Restore originals"
275
- inbox_mailer:
276
- daily_summary:
277
- subject: Your inbox summary
278
- greeting: 'Here are your unread messages:'
279
- view: View
@@ -9,15 +9,27 @@ ko:
9
9
  unarchive: 복원
10
10
  archived_topics: "아카이브된 토픽 (%{count}개)"
11
11
  not_ai_agent: AI 에이전트만 Primary Agent로 설정할 수 있습니다.
12
+ session_topic_locked: 이 토픽은 실행 중인 에이전트 세션에 속해 있어 Primary Agent를 변경하거나 해제할 수 없습니다.
13
+ agent_no_creative_access: "%{name}은(는) 이 크리에이티브에 피드백 권한이 없어 Primary Agent로 응답할 수 없습니다. 먼저 이 크리에이티브를 해당 에이전트와 공유하세요."
14
+ session_agent_not_assignable: "%{name}은(는) 실행 중인 에이전트 세션이라 자신의 세션 토픽에서만 응답합니다. 이 토픽의 Primary Agent로 지정할 수 없습니다."
12
15
  default_name_prefix: "토픽"
13
16
  branch_prefix: "분기"
14
17
  main_name: "메인"
15
18
  cannot_delete_main: "메인 토픽은 삭제할 수 없습니다."
19
+ reserved_name: "예약된 토픽 이름은 지정할 수 없습니다."
16
20
  orphaned_cron_notice: "[시스템] '%{topic_name}' 토픽이 삭제되었지만, 이 토픽을 대상으로 하는 반복 크론 작업(%{cron_key})이 아직 남아 있어 실행될 때마다 아무 동작도 하지 않고 조용히 종료됩니다. 원래 메시지: \"%{message}\". 다른 토픽으로 다시 지정하거나 cron_cancel로 취소하세요."
17
21
  create_and_move: '"%{name}" 생성후 이동'
18
22
  move:
19
23
  no_target_permission: 대상 크리에이티브에 대한 쓰기 권한이 없습니다.
24
+ source_changed: 요청이 대기하는 동안 토픽이 다른 크리에이티브로 이동했습니다. 현재 크리에이티브에서 다시 불러온 뒤 재시도하세요.
25
+ active_tasks: 이 토픽에서 에이전트 작업이 진행 중입니다. 작업이 끝날 때까지 기다리거나 취소한 뒤 토픽을 이동하세요.
26
+ pending_deliveries: 이 토픽에는 아직 복구 중인 에이전트 메시지가 있습니다. 복구가 끝난 뒤 토픽을 이동하세요.
27
+ recurring_tasks: 이 토픽을 대상으로 하는 반복 크론 작업이 있습니다. cron_cancel로 취소하고 토픽을 이동한 뒤 다시 생성하세요.
28
+ trigger_loop: 이 토픽은 Drop Trigger loop의 제어 토픽이므로 loop 설정이 참조하는 동안 이동할 수 없습니다.
20
29
  duplicate_name: "'%{name}' 토픽이 대상 크리에이티브에 이미 존재합니다."
30
+ session_topic_locked: 이 토픽은 실행 중인 에이전트 세션에 속해 있어 이동할 수 없습니다.
31
+ primary_agent_released: '@%{agent}은(는) "%{creative}"에 피드백 권한이 없어 Primary Agent 지정이 해제되었습니다. 계속 담당하게 하려면 해당 크리에이티브를 에이전트와 공유한 뒤 다시 지정하세요.'
32
+ primary_agent_released_session_agent: '@%{agent}은(는) 실행 중인 에이전트 세션이라 자신의 세션 토픽에서만 응답합니다. "%{creative}"은(는) 그 토픽이 아니어서 Primary Agent 지정이 해제되었습니다.'
21
33
  add_members:
22
34
  title: 새 위치에 멤버를 추가할까요?
23
35
  description: 이 사람들은 토픽이 있던 곳에는 접근할 수 있었지만 "%{creative}"에는 없습니다. 계속 접근할 수 있도록 추가하세요.
@@ -33,11 +45,11 @@ ko:
33
45
  login_first: 먼저 로그인해주세요.
34
46
  connected: Github 계정이 연동되었습니다.
35
47
  comments:
48
+ close: 닫기
36
49
  reaction_invalid: 잘못된 리액션입니다.
37
50
  invalid_topic: 토픽이 이 크리에이티브에 속하지 않습니다.
38
51
  comments: 댓글
39
52
  delete_confirm: 댓글을 삭제하시겠습니까?
40
- no_comments: 댓글이 없습니다.
41
53
  anonymous: 익명
42
54
  add_comment: 댓글 추가
43
55
  update_comment: 댓글 수정
@@ -63,6 +75,8 @@ ko:
63
75
  approve_missing_action: 이 댓글에는 실행할 작업이 없습니다.
64
76
  approve_missing_approver: 이 댓글에는 승인자가 지정되어 있지 않습니다.
65
77
  approve_already_executed: 이 댓글 작업은 이미 실행되었습니다.
78
+ approve_task_not_pending: 이 턴은 중지되었거나 이미 재개되어 도구를 실행하지 않았습니다.
79
+ approve_task_superseded: 이 승인은 더 최신 도구 호출로 대체되어 도구를 실행하지 않았습니다.
66
80
  approve_execution_failed: '댓글 작업 실행에 실패했습니다: %{message}'
67
81
  approve_success: 작업이 승인되었습니다.
68
82
  approve_error: 작업을 승인할 수 없습니다.
@@ -104,6 +118,14 @@ ko:
104
118
  navigate_forward: 다음 채팅
105
119
  recent_chats: 최근 채팅
106
120
  remove_from_history: 히스토리에서 제거
121
+ topic_set_agent_error: 이 토픽에 에이전트를 지정할 수 없습니다.
122
+ topic_agent_assigned_title: "%{name}이(가) 이 토픽에 할당되어 있습니다 — 클릭하면 해제됩니다"
123
+ topic_clear_agent_confirm: "%{name}의 토픽 할당을 해제할까요? 이 토픽에서 다시 모든 에이전트가 응답할 수 있게 됩니다."
124
+ topic_create_error: 토픽을 생성할 수 없습니다.
125
+ topic_update_error: 토픽을 수정할 수 없습니다.
126
+ topic_delete_error: 토픽을 삭제할 수 없습니다.
127
+ topic_archive_error: 토픽을 보관할 수 없습니다.
128
+ topic_restore_error: 토픽을 복원할 수 없습니다.
107
129
  inbox_reply_button: 답글
108
130
  replace_button: 바꾸기
109
131
  move_no_selection: 이동할 메시지를 선택해주세요.
@@ -128,10 +150,12 @@ ko:
128
150
  minimum_required: "병합하려면 2개 이상의 메시지를 선택하세요."
129
151
  not_authorized: "메시지를 병합할 권한이 없습니다."
130
152
  own_messages_only: "자신의 메시지 또는 자신의 AI 에이전트 메시지만 병합할 수 있습니다."
153
+ same_topic_required: "같은 토픽의 메시지만 병합할 수 있습니다."
131
154
  branch:
132
155
  no_selection: "분기할 메시지를 선택하세요."
133
156
  not_authorized: "메시지를 분기할 권한이 없습니다."
134
157
  comments_not_found: "일부 선택한 메시지를 찾을 수 없습니다."
158
+ approval_action_not_branchable: "승인 요청 메시지는 분기할 수 없습니다."
135
159
  batch_delete_confirm: 선택한 메시지를 삭제하시겠습니까?
136
160
  batch_delete_no_selection: 삭제할 메시지를 선택해주세요.
137
161
  batch_delete_not_found: 일부 선택한 메시지를 찾을 수 없습니다.
@@ -140,9 +164,6 @@ ko:
140
164
  topic_list: 토픽 목록
141
165
  fullscreen: 전체 화면
142
166
  exit_fullscreen: 전체 화면 종료
143
- typo_keep_label: 유지
144
- typo_custom_label: 직접 입력
145
- typo_input_label: 교정
146
167
  move_invalid_target: 이동할 크리에이티브를 선택해주세요.
147
168
  move_invalid_topic: 유효하지 않은 토픽입니다.
148
169
  move_not_allowed: 이 메시지를 이동할 권한이 없습니다.
@@ -154,8 +175,6 @@ ko:
154
175
  calendar_args: "YYYY-MM-DD@HH:MM 메모 (today/tomorrow, +3days, +2weeks, +1months, +1years, +mon/+월)"
155
176
  topic_description: "새 토픽을 생성합니다. Primary Agent를 지정할 수 있습니다."
156
177
  topic_args: '"토픽 이름" @에이전트이름'
157
- work_description: "하위 크리에이티브들에 대해 DFS 순회를 통한 워크플로우를 실행합니다."
158
- work_args: "@에이전트이름 워크플로우_컨텍스트"
159
178
  compress_description: "현재 토픽의 모든 메세지를 요약하고 원본을 삭제합니다."
160
179
  compress_args: "[추가 지시사항]"
161
180
  creative_description: "크리에이티브 링크를 삽입합니다. AI 채팅에서는 링크된 크리에이티브 트리가 컨텍스트로 주입됩니다."
@@ -163,8 +182,6 @@ ko:
163
182
  calendar_memo_hint: "이벤트 메모 (선택사항)"
164
183
  topic_name_hint: "토픽 이름"
165
184
  topic_agent_hint: "@에이전트이름 (선택사항)"
166
- work_agent_hint: "@에이전트이름"
167
- work_context_hint: "워크플로우 컨텍스트 (선택사항)"
168
185
  compress_instructions_hint: "추가 지시사항 (선택사항)"
169
186
  form_submit: "확인"
170
187
  form_cancel: "취소"
@@ -184,27 +201,15 @@ ko:
184
201
  failed: "요약 실패"
185
202
  topic_command:
186
203
  missing_name: '토픽 이름을 따옴표로 지정하세요: /topic "토픽 이름"'
204
+ not_authorized: 토픽의 Primary Agent를 변경하려면 쓰기 권한이 필요합니다.
187
205
  created: '토픽 "%{name}"이(가) 생성되었습니다.'
188
206
  created_with_agent: '토픽 "%{name}"이(가) 생성되었습니다. @%{agent}이(가) Primary Agent로 설정되었습니다.'
189
207
  updated_agent: '토픽 "%{name}"의 Primary Agent가 @%{agent}(으)로 변경되었습니다.'
208
+ cleared_agent: '토픽 "%{name}"의 Primary Agent 지정이 해제되었습니다. 다시 모든 에이전트가 응답할 수 있습니다.'
190
209
  already_exists: '토픽 "%{name}"이(가) 이미 존재합니다.'
191
- work_command:
192
- agent_not_found: "워크플로우를 실행할 AI 에이전트를 멘션해주세요."
193
- no_children: "이 크리에이티브에는 작업할 하위 크리에이티브가 없습니다."
194
- all_already_tasked: "모든 하위 크리에이티브가 이미 활성 작업을 가지고 있습니다."
195
- started: '워크플로우가 @%{agent}와 함께 시작되었습니다: %{total}개 작업 대기중 (%{skipped}개 생략).'
196
- trigger_comment: '📋 [워크플로우] %{context}'
197
- subtask_started: '📋 @%{agent}가 "%{creative}" 작업을 시작합니다 (%{current}/%{total})'
198
- subtask_completed: '✅ @%{agent}가 "%{creative}" 완료 (%{completed}/%{total}, %{progress}%%)'
199
- workflow_completed: '✅ @%{agent}가 워크플로우를 완료했습니다: %{completed}개 크리에이티브 처리됨.'
200
- workflow_failed: '@%{agent} 워크플로우 실패 - "%{creative}": %{reason}'
201
- workflow_stopped: '⏹️ @%{agent} 워크플로우가 중지되었습니다. %{completed}개 완료, %{remaining}개 남음.'
202
- workflow_resumed: '▶️ @%{agent} 워크플로우가 재개되었습니다. %{remaining}개 작업 남음.'
203
- stopped: '@%{agent}의 워크플로우가 중지되었습니다.'
204
- resumed: '@%{agent}의 워크플로우가 재개되었습니다: %{remaining}개 작업 남음.'
205
- no_active_workflow: '이 크리에이티브에 활성 워크플로우가 없습니다.'
206
- no_resumable_workflow: '재개할 수 있는 실패/중지된 워크플로우가 없습니다.'
207
- supervisor_instruction: "질문이 있거나 확인이 필요하면 사용자 대신 @%{supervisor}: 에게 물어보세요. 감독자가 안내해줄 것입니다."
210
+ session_topic_locked: '토픽 "%{name}"은(는) 실행 중인 에이전트 세션에 속해 있어 Primary Agent를 변경하거나 해제할 수 없습니다.'
211
+ agent_no_creative_access: '@%{agent}은(는) 이 크리에이티브에 피드백 권한이 없어 Primary Agent로 응답할 수 없습니다. 먼저 이 크리에이티브를 해당 에이전트와 공유하세요.'
212
+ session_agent_not_assignable: '@%{agent}은(는) 실행 중인 에이전트 세션이라 자신의 세션 토픽에서만 응답합니다. 이 토픽의 Primary Agent로 지정할 수 없습니다.'
208
213
  versions:
209
214
  previous: 이전 버전
210
215
  next: 다음 버전
@@ -227,6 +232,47 @@ ko:
227
232
  delete: 삭제
228
233
  delete_confirm: 이 이미지를 삭제하시겠습니까?
229
234
  counter: "%{current} / %{total}"
235
+ chat_input_hint: "메시지를 입력하거나 /로 명령어를 사용해보세요"
236
+ empty_state:
237
+ title: 시작해보세요
238
+ minimal_prompt: 대화를 시작해보세요
239
+ inbox_system_title: 새 알림이 없습니다
240
+ inbox_system_minimal_prompt: 밀린 알림이 없습니다
241
+ restore_cards: 팁 다시 보기
242
+ dismiss: 닫기
243
+ learn_more: 자세히 보기
244
+ no_search_results: 검색 결과에 해당하는 메시지가 없습니다.
245
+ cards:
246
+ mention_agent:
247
+ title: 팀원 · 에이전트 멘션
248
+ description: "@이름: 으로 질문하거나 참여자를 초대해보세요."
249
+ slash_command:
250
+ title: 슬래시 명령어
251
+ description: "/를 입력하면 /calendar, /topic 같은 명령어를 볼 수 있어요."
252
+ action: 명령어 보기
253
+ chat_context:
254
+ title: 채팅 컨텍스트
255
+ description: 다른 Creative를 컨텍스트로 연결하면 에이전트가 참고할 수 있어요.
256
+ automation_trigger:
257
+ title: 자동화 트리거
258
+ description: 드롭 트리거·에이전트 트리거가 새 메시지에 자동으로 반응하게 할 수 있어요.
259
+ topic_management:
260
+ title: 토픽 관리
261
+ description: 대화를 토픽으로 나누어 정리할 수 있어요.
262
+ action: 토픽 보기
263
+ add_user:
264
+ title: 사용자 추가
265
+ description: 팀원이나 AI 에이전트를 이 대화에 초대해보세요.
266
+ action: 사용자 추가
267
+ inbox_notifications:
268
+ title: 알림이 모이는 곳
269
+ description: 멘션, 공유, 권한 요청, 중요한 시스템 안내가 이 토픽에 모입니다.
270
+ inbox_reply:
271
+ title: 인박스에서 바로 답장
272
+ description: 대화에서 온 알림 뒤에 답장하면 메시지가 원래 대화의 같은 토픽으로 전달됩니다.
273
+ inbox_source:
274
+ title: 원문으로 바로 이동
275
+ description: 알림의 Creative 링크를 누르면 원문이 있는 대화로 바로 이동할 수 있습니다.
230
276
  channels:
231
277
  detach: "해제"
232
278
  calendar_events:
@@ -246,6 +292,7 @@ ko:
246
292
  creative_shared: '%{user} 가 "%{short_title}" 을 공유했습니다.'
247
293
  user_mentioned: '%{user} 님이 "%{creative}" 에서 당신을 언급했습니다: "%{comment}"'
248
294
  permission_requested: '%{user} 이 크리에이티브 "%{short_title}" 에 대한 권한 요청을 했습니다.'
295
+ write_permission_requested: '%{user} 이 크리에이티브 "%{short_title}" 에 대한 쓰기 권한 요청을 했습니다.'
249
296
  comment_deleted_by_admin: '%{admin_name} 님이 "%{creative_snippet}" 에서 당신의 댓글을
250
297
  삭제했습니다: %{comment_content}'
251
298
  comment_content_unavailable: "(삭제된 댓글 내용을 표시할 수 없습니다)"
@@ -268,8 +315,3 @@ ko:
268
315
  not_authorized: "이 스냅샷을 복구할 권한이 없습니다."
269
316
  restore_confirm: "원본 메시지를 복구하시겠습니까? 요약이 삭제됩니다."
270
317
  restore_button: "원본 복구"
271
- inbox_mailer:
272
- daily_summary:
273
- subject: 인박스 요약
274
- greeting: '읽지 않은 메세지 목록입니다:'
275
- view: 보기