collavre 0.5.0 → 0.7.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 (133) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/collavre/comment_versions.css +76 -0
  3. data/app/assets/stylesheets/collavre/comments_popup.css +347 -37
  4. data/app/assets/stylesheets/collavre/creatives.css +73 -1
  5. data/app/assets/stylesheets/collavre/org_chart.css +319 -0
  6. data/app/assets/stylesheets/collavre/popup.css +68 -1
  7. data/app/controllers/collavre/application_controller.rb +13 -0
  8. data/app/controllers/collavre/comments/versions_controller.rb +82 -0
  9. data/app/controllers/collavre/comments_controller.rb +14 -153
  10. data/app/controllers/collavre/concerns/exportable.rb +30 -0
  11. data/app/controllers/collavre/concerns/shareable.rb +28 -0
  12. data/app/controllers/collavre/concerns/slide_viewable.rb +37 -0
  13. data/app/controllers/collavre/concerns/tree_manageable.rb +141 -0
  14. data/app/controllers/collavre/creative_imports_controller.rb +6 -0
  15. data/app/controllers/collavre/creative_invitations_controller.rb +46 -0
  16. data/app/controllers/collavre/creative_plans_controller.rb +1 -1
  17. data/app/controllers/collavre/creative_shares_controller.rb +84 -14
  18. data/app/controllers/collavre/creatives_controller.rb +70 -194
  19. data/app/controllers/collavre/google_auth_controller.rb +3 -0
  20. data/app/controllers/collavre/invites_controller.rb +2 -1
  21. data/app/controllers/collavre/sessions_controller.rb +3 -0
  22. data/app/controllers/collavre/topics_controller.rb +39 -2
  23. data/app/controllers/collavre/users_controller.rb +5 -404
  24. data/app/controllers/concerns/collavre/comments/approval_actions.rb +108 -0
  25. data/app/controllers/concerns/collavre/comments/batch_operations.rb +55 -0
  26. data/app/controllers/concerns/collavre/comments/conversion.rb +46 -0
  27. data/app/controllers/concerns/collavre/users_controller/admin_operations.rb +74 -0
  28. data/app/controllers/concerns/collavre/users_controller/ai_user_management.rb +119 -0
  29. data/app/controllers/concerns/collavre/users_controller/contact_management.rb +166 -0
  30. data/app/controllers/concerns/collavre/users_controller/profile_and_settings.rb +102 -0
  31. data/app/controllers/concerns/collavre/users_controller/registration.rb +63 -0
  32. data/app/helpers/collavre/application_helper.rb +1 -0
  33. data/app/helpers/collavre/creatives_helper.rb +12 -9
  34. data/app/helpers/collavre/navigation_helper.rb +1 -1
  35. data/app/javascript/collavre.js +0 -1
  36. data/app/javascript/controllers/comment_controller.js +33 -70
  37. data/app/javascript/controllers/comment_version_controller.js +164 -0
  38. data/app/javascript/controllers/comments/__tests__/form_controller_review.test.js +305 -0
  39. data/app/javascript/controllers/comments/__tests__/list_controller_selection.test.js +103 -0
  40. data/app/javascript/controllers/comments/__tests__/review_quotes_store.test.js +113 -0
  41. data/app/javascript/controllers/comments/contexts_controller.js +363 -0
  42. data/app/javascript/controllers/comments/form_controller.js +304 -13
  43. data/app/javascript/controllers/comments/list_controller.js +151 -62
  44. data/app/javascript/controllers/comments/popup_controller.js +66 -38
  45. data/app/javascript/controllers/comments/presence_controller.js +2 -10
  46. data/app/javascript/controllers/comments/review_quotes_store.js +189 -0
  47. data/app/javascript/controllers/comments/topics_controller.js +34 -10
  48. data/app/javascript/controllers/index.js +15 -1
  49. data/app/javascript/controllers/org_chart_controller.js +46 -0
  50. data/app/javascript/controllers/share_modal_controller.js +369 -0
  51. data/app/javascript/controllers/topic_search_controller.js +103 -0
  52. data/app/javascript/creatives/drag_drop/event_handlers.js +42 -1
  53. data/app/javascript/lib/api/creatives.js +12 -0
  54. data/app/javascript/lib/api/csrf_fetch.js +35 -0
  55. data/app/javascript/lib/api/drag_drop.js +17 -0
  56. data/app/javascript/modules/command_menu.js +40 -0
  57. data/app/javascript/modules/creative_row_editor.js +88 -0
  58. data/app/javascript/modules/slide_view.js +2 -1
  59. data/app/jobs/collavre/ai_agent_job.rb +42 -30
  60. data/app/jobs/collavre/compress_job.rb +92 -0
  61. data/app/models/collavre/comment.rb +36 -1
  62. data/app/models/collavre/comment_version.rb +15 -0
  63. data/app/models/collavre/creative/describable.rb +1 -1
  64. data/app/models/collavre/creative.rb +51 -0
  65. data/app/models/collavre/task.rb +30 -2
  66. data/app/models/collavre/user.rb +20 -3
  67. data/app/services/collavre/ai_agent/a2a_dispatcher.rb +68 -0
  68. data/app/services/collavre/ai_agent/agent_lifecycle_manager.rb +89 -0
  69. data/app/services/collavre/ai_agent/message_builder.rb +85 -6
  70. data/app/services/collavre/ai_agent/response_finalizer.rb +97 -0
  71. data/app/services/collavre/ai_agent/response_streamer.rb +56 -0
  72. data/app/services/collavre/ai_agent/review_handler.rb +18 -1
  73. data/app/services/collavre/ai_agent_service.rb +130 -183
  74. data/app/services/collavre/ai_client.rb +6 -0
  75. data/app/services/collavre/auto_theme_generator.rb +1 -1
  76. data/app/services/collavre/command_menu_service.rb +19 -0
  77. data/app/services/collavre/comments/command_processor.rb +3 -1
  78. data/app/services/collavre/comments/compress_command.rb +75 -0
  79. data/app/services/collavre/comments/concerns/workflow_support.rb +115 -0
  80. data/app/services/collavre/comments/work_command.rb +161 -0
  81. data/app/services/collavre/comments/workflow_executor.rb +276 -0
  82. data/app/services/collavre/creatives/plan_tagger.rb +14 -3
  83. data/app/services/collavre/creatives/tree_formatter.rb +53 -13
  84. data/app/services/collavre/gemini_parent_recommender.rb +4 -4
  85. data/app/services/collavre/orchestration/agent_context_builder.rb +1 -3
  86. data/app/services/collavre/orchestration/agent_orchestrator.rb +15 -4
  87. data/app/services/collavre/orchestration/policy_resolver.rb +0 -19
  88. data/app/services/collavre/orchestration/scheduler.rb +3 -2
  89. data/app/services/collavre/orchestration/stuck_detector.rb +1 -1
  90. data/app/services/collavre/system_events/dispatcher.rb +9 -0
  91. data/app/services/collavre/tools/creative_create_service.rb +1 -8
  92. data/app/services/collavre/tools/creative_import_service.rb +46 -0
  93. data/app/services/collavre/tools/creative_retrieval_service.rb +157 -96
  94. data/app/services/collavre/tools/creative_update_service.rb +1 -8
  95. data/app/services/collavre/tools/cron_list_service.rb +1 -1
  96. data/app/services/collavre/tools/description_normalizable.rb +16 -0
  97. data/app/views/collavre/comments/_comment.html.erb +25 -8
  98. data/app/views/collavre/comments/_comments_popup.html.erb +32 -5
  99. data/app/views/collavre/creatives/_inline_edit_form.html.erb +13 -0
  100. data/app/views/collavre/creatives/_share_button.html.erb +4 -1
  101. data/app/views/collavre/creatives/_share_modal.html.erb +31 -1
  102. data/app/views/collavre/creatives/index.html.erb +5 -5
  103. data/app/views/collavre/creatives/slide_view.html.erb +1 -1
  104. data/app/views/collavre/users/{_contact_management.html.erb → _contact_list.html.erb} +4 -8
  105. data/app/views/collavre/users/_org_chart.html.erb +68 -0
  106. data/app/views/collavre/users/_org_chart_node.html.erb +169 -0
  107. data/app/views/collavre/users/new_ai.html.erb +9 -0
  108. data/app/views/collavre/users/show.html.erb +32 -8
  109. data/config/locales/comments.en.yml +57 -2
  110. data/config/locales/comments.ko.yml +57 -2
  111. data/config/locales/contacts.en.yml +31 -0
  112. data/config/locales/contacts.ko.yml +31 -0
  113. data/config/locales/contexts.en.yml +8 -0
  114. data/config/locales/contexts.ko.yml +8 -0
  115. data/config/locales/creatives.en.yml +6 -0
  116. data/config/locales/creatives.ko.yml +6 -0
  117. data/config/locales/users.en.yml +1 -0
  118. data/config/locales/users.ko.yml +1 -0
  119. data/config/routes.rb +14 -1
  120. data/db/migrate/20260220072200_add_workflow_fields_to_tasks.rb +12 -0
  121. data/db/migrate/20260223173533_add_review_type_to_comments.rb +5 -0
  122. data/db/migrate/20260225065200_create_comment_versions.rb +14 -0
  123. data/db/migrate/20260225074416_add_selected_version_id_to_comments.rb +7 -0
  124. data/lib/collavre/version.rb +1 -1
  125. metadata +47 -10
  126. data/app/javascript/lib/lexical/__tests__/action_text_attachment_node.test.jsx +0 -91
  127. data/app/javascript/lib/lexical/action_text_attachment_node.js +0 -459
  128. data/app/javascript/lib/lexical/dom_attachment_utils.js +0 -66
  129. data/app/javascript/modules/share_modal.js +0 -76
  130. data/app/javascript/modules/share_user_popup.js +0 -77
  131. data/app/services/collavre/orchestration/self_reflection_evaluator.rb +0 -231
  132. data/app/views/collavre/comments/_presence_avatars.html.erb +0 -8
  133. data/app/views/collavre/creatives/_delete_button.html.erb +0 -12
@@ -8,9 +8,40 @@ en:
8
8
  table:
9
9
  shared_creatives: Creatives you shared
10
10
  shared_with_me: Creatives shared with you
11
+ views:
12
+ list: List
13
+ org_chart: Org Chart
11
14
  pagination:
12
15
  prev: Previous
13
16
  next: Next
14
17
  page_info: Page %{current} of %{total}
15
18
  notices:
16
19
  removed: User removed from your managed users.
20
+ org_chart:
21
+ description: View your creatives and shared members at a glance.
22
+ empty_state: No creatives yet.
23
+ expand_all: Expand All
24
+ collapse_all: Collapse All
25
+ owner: Owner
26
+ shared_by_me: Shared by you
27
+ shared_with_me: Shared with you
28
+ shared_by_user: "Shared by %{user}"
29
+ no_members: No shared members
30
+ view_profile: Profile
31
+ manage_permissions: Permissions
32
+ unshare: Unshare
33
+ unshare_confirm: "Remove sharing for %{user}?"
34
+ pending_invitations: Pending Invitations
35
+ pending_status: Pending
36
+ cancel_invite: Cancel Invite
37
+ cancel_invite_confirm: "Cancel invitation for %{email}?"
38
+ invite_cancelled: Invitation cancelled.
39
+ add_ai_agent: Add AI Agent
40
+ add_ai_agent_to: "This AI Agent will be added to \"%{creative}\" with feedback permission."
41
+ unassigned_users: Unassigned AI Agents
42
+ permissions:
43
+ admin: Admin
44
+ write: Write
45
+ feedback: Feedback
46
+ read: Read
47
+ no_access: No access
@@ -8,9 +8,40 @@ ko:
8
8
  table:
9
9
  shared_creatives: 공유한 크리에이티브
10
10
  shared_with_me: 공유된 크리에이티브
11
+ views:
12
+ list: 리스트
13
+ org_chart: 조직도
11
14
  pagination:
12
15
  prev: 이전
13
16
  next: 다음
14
17
  page_info: "%{current}/%{total} 페이지"
15
18
  notices:
16
19
  removed: 사용자 관리 목록에서 제거했습니다.
20
+ org_chart:
21
+ description: 크리에이티브별 공유 멤버를 한눈에 확인합니다.
22
+ empty_state: 아직 크리에이티브가 없습니다.
23
+ expand_all: 전체 펼침
24
+ collapse_all: 전체 접기
25
+ owner: 소유자
26
+ shared_by_me: 내가 공유
27
+ shared_with_me: 상대가 공유
28
+ shared_by_user: "%{user} 공유"
29
+ no_members: 공유된 멤버 없음
30
+ view_profile: 프로필
31
+ manage_permissions: 권한 설정
32
+ unshare: 공유 해제
33
+ unshare_confirm: "%{user}의 공유를 해제하시겠습니까?"
34
+ pending_invitations: 초대 중
35
+ pending_status: 초대 중
36
+ cancel_invite: 초대 해제
37
+ cancel_invite_confirm: "%{email}의 초대를 취소하시겠습니까?"
38
+ invite_cancelled: 초대가 취소되었습니다.
39
+ add_ai_agent: AI Agent 추가
40
+ add_ai_agent_to: "이 AI Agent는 \"%{creative}\"에 피드백 권한으로 추가됩니다."
41
+ unassigned_users: 미할당 AI Agent
42
+ permissions:
43
+ admin: 관리자
44
+ write: 편집
45
+ feedback: 피드백
46
+ read: 읽기
47
+ no_access: 접근 불가
@@ -0,0 +1,8 @@
1
+ ---
2
+ en:
3
+ collavre:
4
+ contexts:
5
+ inherited_label: "Inherited from parent"
6
+ toggle_label: "Contexts"
7
+ self_context_label: "Current creative context"
8
+ navigate_label: "Go to creative"
@@ -0,0 +1,8 @@
1
+ ---
2
+ ko:
3
+ collavre:
4
+ contexts:
5
+ inherited_label: "상위에서 상속됨"
6
+ toggle_label: "컨텍스트"
7
+ self_context_label: "현재 크리에이티브 컨텍스트"
8
+ navigate_label: "크리에이티브로 이동"
@@ -119,8 +119,14 @@ en:
119
119
  inline_level_down_tooltip: Indent / add as child (Ctrl/Cmd+Shift+.)
120
120
  inline_level_up_tooltip: Outdent / move up a level (Ctrl/Cmd+Shift+,)
121
121
  inline_close_tooltip: Close editor (Esc)
122
+ metadata_tooltip: Edit metadata
123
+ metadata_title: Metadata
124
+ metadata_save: Save
122
125
  share:
123
126
  shared: Creative shared successfully.
127
+ permission_updated: Permission updated successfully.
128
+ network_error: A network error occurred. Please try again.
129
+ public_invite: Public Invite
124
130
  already_shared_in_parent: Creative already shared in parent creative.
125
131
  can_not_share_by_no_access_in_parent: You can not share by no access in parent
126
132
  creative.
@@ -107,8 +107,14 @@ ko:
107
107
  inline_level_down_tooltip: 들여쓰기 / 자식으로 이동 (Ctrl/Cmd+Shift+.)
108
108
  inline_level_up_tooltip: 내어쓰기 / 상위로 이동 (Ctrl/Cmd+Shift+,)
109
109
  inline_close_tooltip: 편집기 닫기 (Esc)
110
+ metadata_tooltip: 메타데이터 편집
111
+ metadata_title: 메타데이터
112
+ metadata_save: 저장
110
113
  share:
111
114
  shared: 크리에이티브가 성공적으로 공유되었습니다.
115
+ permission_updated: 권한이 성공적으로 변경되었습니다.
116
+ network_error: 네트워크 오류가 발생했습니다. 다시 시도해주세요.
117
+ public_invite: 공개 초대
112
118
  already_shared_in_parent: 크리에이티브가 상위 크리에이티브에 이미 공유되었습니다.
113
119
  can_not_share_by_no_access_in_parent: 상위 크리에이티브에 접근 금지가 있어서 공유할 수 없습니다.
114
120
  cannot_share_private_ai_agent: AI Agent 소유자만 공유할 수 있습니다.
@@ -85,6 +85,7 @@ en:
85
85
  tabs:
86
86
  profile: Profile
87
87
  user_management: User management
88
+ org_chart: Org Chart
88
89
  profile: Profile
89
90
  avatar: Avatar
90
91
  avatar_url: Avatar URL
@@ -80,6 +80,7 @@ ko:
80
80
  tabs:
81
81
  profile: 프로파일
82
82
  user_management: 사용자 관리
83
+ org_chart: 조직도
83
84
  profile: 프로파일
84
85
  avatar: 아바타
85
86
  avatar_url: 아바타 URL
data/config/routes.rb CHANGED
@@ -49,11 +49,15 @@ Collavre::Engine.routes.draw do
49
49
  resource :creative_plan, only: [ :create, :destroy ], controller: "creative_plans"
50
50
 
51
51
  resources :creatives do
52
- resources :creative_shares, only: [ :create, :destroy ]
52
+ resources :creative_shares, only: [ :index, :create, :update, :destroy ]
53
+ resources :invitations, only: [ :update, :destroy ], controller: "creative_invitations"
53
54
  resources :topics, only: [ :index, :create, :update, :destroy ] do
54
55
  collection do
55
56
  post :reorder
56
57
  end
58
+ member do
59
+ patch :move
60
+ end
57
61
  end
58
62
  resources :comments, only: [ :index, :create, :destroy, :show, :update ] do
59
63
  member do
@@ -65,11 +69,17 @@ Collavre::Engine.routes.draw do
65
69
 
66
70
  resources :reactions, only: [ :create ], module: :comments
67
71
  resource :activity_log, only: [ :show ], module: :comments
72
+ resources :versions, only: [ :index, :destroy ], module: :comments do
73
+ member do
74
+ post :select
75
+ end
76
+ end
68
77
 
69
78
  collection do
70
79
  get :participants
71
80
  get :fullscreen
72
81
  post :move
82
+ delete :batch_destroy
73
83
  get :commands
74
84
  end
75
85
  end
@@ -87,6 +97,9 @@ Collavre::Engine.routes.draw do
87
97
  post :unconvert
88
98
  get :parent_suggestions
89
99
  get :slide_view
100
+ get :contexts
101
+ patch :update_contexts
102
+ patch :update_metadata
90
103
  end
91
104
  end
92
105
 
@@ -0,0 +1,12 @@
1
+ class AddWorkflowFieldsToTasks < ActiveRecord::Migration[8.1]
2
+ def change
3
+ add_column :tasks, :parent_task_id, :integer
4
+ add_index :tasks, :parent_task_id
5
+ add_foreign_key :tasks, :tasks, column: :parent_task_id, on_delete: :nullify
6
+ add_column :tasks, :workflow_context, :text
7
+ add_column :tasks, :workflow_state, :json
8
+ add_column :tasks, :creative_id, :integer
9
+ add_index :tasks, :creative_id
10
+ add_foreign_key :tasks, :creatives, column: :creative_id, on_delete: :nullify
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ class AddReviewTypeToComments < ActiveRecord::Migration[8.0]
2
+ def change
3
+ add_column :comments, :review_type, :integer, limit: 1
4
+ end
5
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateCommentVersions < ActiveRecord::Migration[8.0]
4
+ def change
5
+ create_table :comment_versions do |t|
6
+ t.references :comment, null: false, foreign_key: true
7
+ t.text :content, null: false
8
+ t.integer :version_number, null: false
9
+ t.references :review_comment, foreign_key: { to_table: :comments }
10
+ t.timestamps
11
+ end
12
+ add_index :comment_versions, %i[comment_id version_number], unique: true
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddSelectedVersionIdToComments < ActiveRecord::Migration[8.1]
4
+ def change
5
+ add_reference :comments, :selected_version, foreign_key: { to_table: :comment_versions }, null: true
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module Collavre
2
- VERSION = "0.5.0"
2
+ VERSION = "0.7.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: collavre
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Collavre
@@ -161,11 +161,13 @@ files:
161
161
  - Rakefile
162
162
  - app/assets/stylesheets/collavre/actiontext.css
163
163
  - app/assets/stylesheets/collavre/activity_logs.css
164
+ - app/assets/stylesheets/collavre/comment_versions.css
164
165
  - app/assets/stylesheets/collavre/comments_popup.css
165
166
  - app/assets/stylesheets/collavre/creatives.css
166
167
  - app/assets/stylesheets/collavre/dark_mode.css
167
168
  - app/assets/stylesheets/collavre/design_tokens.css
168
169
  - app/assets/stylesheets/collavre/mention_menu.css
170
+ - app/assets/stylesheets/collavre/org_chart.css
169
171
  - app/assets/stylesheets/collavre/popup.css
170
172
  - app/assets/stylesheets/collavre/print.css
171
173
  - app/assets/stylesheets/collavre/slide_view.css
@@ -195,10 +197,16 @@ files:
195
197
  - app/controllers/collavre/comment_read_pointers_controller.rb
196
198
  - app/controllers/collavre/comments/activity_logs_controller.rb
197
199
  - app/controllers/collavre/comments/reactions_controller.rb
200
+ - app/controllers/collavre/comments/versions_controller.rb
198
201
  - app/controllers/collavre/comments_controller.rb
202
+ - app/controllers/collavre/concerns/exportable.rb
203
+ - app/controllers/collavre/concerns/shareable.rb
204
+ - app/controllers/collavre/concerns/slide_viewable.rb
205
+ - app/controllers/collavre/concerns/tree_manageable.rb
199
206
  - app/controllers/collavre/contacts_controller.rb
200
207
  - app/controllers/collavre/creative_expanded_states_controller.rb
201
208
  - app/controllers/collavre/creative_imports_controller.rb
209
+ - app/controllers/collavre/creative_invitations_controller.rb
202
210
  - app/controllers/collavre/creative_plans_controller.rb
203
211
  - app/controllers/collavre/creative_shares_controller.rb
204
212
  - app/controllers/collavre/creatives_controller.rb
@@ -214,6 +222,14 @@ files:
214
222
  - app/controllers/collavre/topics_controller.rb
215
223
  - app/controllers/collavre/user_themes_controller.rb
216
224
  - app/controllers/collavre/users_controller.rb
225
+ - app/controllers/concerns/collavre/comments/approval_actions.rb
226
+ - app/controllers/concerns/collavre/comments/batch_operations.rb
227
+ - app/controllers/concerns/collavre/comments/conversion.rb
228
+ - app/controllers/concerns/collavre/users_controller/admin_operations.rb
229
+ - app/controllers/concerns/collavre/users_controller/ai_user_management.rb
230
+ - app/controllers/concerns/collavre/users_controller/contact_management.rb
231
+ - app/controllers/concerns/collavre/users_controller/profile_and_settings.rb
232
+ - app/controllers/concerns/collavre/users_controller/registration.rb
217
233
  - app/errors/collavre/approval_pending_error.rb
218
234
  - app/errors/collavre/cancelled_error.rb
219
235
  - app/helpers/collavre/application_helper.rb
@@ -229,12 +245,18 @@ files:
229
245
  - app/javascript/components/plugins/image_upload_plugin.jsx
230
246
  - app/javascript/controllers/click_target_controller.js
231
247
  - app/javascript/controllers/comment_controller.js
248
+ - app/javascript/controllers/comment_version_controller.js
249
+ - app/javascript/controllers/comments/__tests__/form_controller_review.test.js
250
+ - app/javascript/controllers/comments/__tests__/list_controller_selection.test.js
232
251
  - app/javascript/controllers/comments/__tests__/popup_controller.test.js
252
+ - app/javascript/controllers/comments/__tests__/review_quotes_store.test.js
253
+ - app/javascript/controllers/comments/contexts_controller.js
233
254
  - app/javascript/controllers/comments/form_controller.js
234
255
  - app/javascript/controllers/comments/list_controller.js
235
256
  - app/javascript/controllers/comments/mention_menu_controller.js
236
257
  - app/javascript/controllers/comments/popup_controller.js
237
258
  - app/javascript/controllers/comments/presence_controller.js
259
+ - app/javascript/controllers/comments/review_quotes_store.js
238
260
  - app/javascript/controllers/comments/topics_controller.js
239
261
  - app/javascript/controllers/common_popup_controller.js
240
262
  - app/javascript/controllers/creatives/drag_drop_controller.js
@@ -246,12 +268,15 @@ files:
246
268
  - app/javascript/controllers/creatives/tree_controller.js
247
269
  - app/javascript/controllers/index.js
248
270
  - app/javascript/controllers/link_creative_controller.js
271
+ - app/javascript/controllers/org_chart_controller.js
249
272
  - app/javascript/controllers/popup_menu_controller.js
250
273
  - app/javascript/controllers/progress_filter_controller.js
251
274
  - app/javascript/controllers/reaction_picker_controller.js
252
275
  - app/javascript/controllers/share_invite_controller.js
276
+ - app/javascript/controllers/share_modal_controller.js
253
277
  - app/javascript/controllers/share_user_search_controller.js
254
278
  - app/javascript/controllers/tabs_controller.js
279
+ - app/javascript/controllers/topic_search_controller.js
255
280
  - app/javascript/creatives/drag_drop/dom.js
256
281
  - app/javascript/creatives/drag_drop/event_handlers.js
257
282
  - app/javascript/creatives/drag_drop/indicator.js
@@ -267,12 +292,9 @@ files:
267
292
  - app/javascript/lib/apply_lexical_styles.js
268
293
  - app/javascript/lib/common_popup.js
269
294
  - app/javascript/lib/html_code_block_wrapper.js
270
- - app/javascript/lib/lexical/__tests__/action_text_attachment_node.test.jsx
271
295
  - app/javascript/lib/lexical/__tests__/attachment_payload.test.js
272
- - app/javascript/lib/lexical/action_text_attachment_node.js
273
296
  - app/javascript/lib/lexical/attachment_node.jsx
274
297
  - app/javascript/lib/lexical/attachment_payload.js
275
- - app/javascript/lib/lexical/dom_attachment_utils.js
276
298
  - app/javascript/lib/lexical/image_node.jsx
277
299
  - app/javascript/lib/lexical/style_attributes.js
278
300
  - app/javascript/lib/responsive_images.js
@@ -291,8 +313,6 @@ files:
291
313
  - app/javascript/modules/mention_menu.js
292
314
  - app/javascript/modules/plans_menu.js
293
315
  - app/javascript/modules/plans_timeline.js
294
- - app/javascript/modules/share_modal.js
295
- - app/javascript/modules/share_user_popup.js
296
316
  - app/javascript/modules/slide_view.js
297
317
  - app/javascript/services/cable.js
298
318
  - app/javascript/slide_view.js
@@ -300,6 +320,7 @@ files:
300
320
  - app/javascript/utils/clipboard.js
301
321
  - app/javascript/utils/emoji_parser.js
302
322
  - app/jobs/collavre/ai_agent_job.rb
323
+ - app/jobs/collavre/compress_job.rb
303
324
  - app/jobs/collavre/cron_action_job.rb
304
325
  - app/jobs/collavre/cron_scheduler_job.rb
305
326
  - app/jobs/collavre/inbox_summary_job.rb
@@ -323,6 +344,7 @@ files:
323
344
  - app/models/collavre/comment_presence_store.rb
324
345
  - app/models/collavre/comment_reaction.rb
325
346
  - app/models/collavre/comment_read_pointer.rb
347
+ - app/models/collavre/comment_version.rb
326
348
  - app/models/collavre/contact.rb
327
349
  - app/models/collavre/creative.rb
328
350
  - app/models/collavre/creative/describable.rb
@@ -350,8 +372,12 @@ files:
350
372
  - app/models/collavre/user_theme.rb
351
373
  - app/models/collavre/variation.rb
352
374
  - app/models/collavre/webauthn_credential.rb
375
+ - app/services/collavre/ai_agent/a2a_dispatcher.rb
376
+ - app/services/collavre/ai_agent/agent_lifecycle_manager.rb
353
377
  - app/services/collavre/ai_agent/approval_handler.rb
354
378
  - app/services/collavre/ai_agent/message_builder.rb
379
+ - app/services/collavre/ai_agent/response_finalizer.rb
380
+ - app/services/collavre/ai_agent/response_streamer.rb
355
381
  - app/services/collavre/ai_agent/review_handler.rb
356
382
  - app/services/collavre/ai_agent_service.rb
357
383
  - app/services/collavre/ai_client.rb
@@ -364,9 +390,13 @@ files:
364
390
  - app/services/collavre/comments/action_validator.rb
365
391
  - app/services/collavre/comments/calendar_command.rb
366
392
  - app/services/collavre/comments/command_processor.rb
393
+ - app/services/collavre/comments/compress_command.rb
394
+ - app/services/collavre/comments/concerns/workflow_support.rb
367
395
  - app/services/collavre/comments/mcp_command.rb
368
396
  - app/services/collavre/comments/mcp_command_builder.rb
369
397
  - app/services/collavre/comments/topic_command.rb
398
+ - app/services/collavre/comments/work_command.rb
399
+ - app/services/collavre/comments/workflow_executor.rb
370
400
  - app/services/collavre/creatives/create_service.rb
371
401
  - app/services/collavre/creatives/destroy_service.rb
372
402
  - app/services/collavre/creatives/filter_pipeline.rb
@@ -402,7 +432,6 @@ files:
402
432
  - app/services/collavre/orchestration/policy_resolver.rb
403
433
  - app/services/collavre/orchestration/resource_tracker.rb
404
434
  - app/services/collavre/orchestration/scheduler.rb
405
- - app/services/collavre/orchestration/self_reflection_evaluator.rb
406
435
  - app/services/collavre/orchestration/stuck_detector.rb
407
436
  - app/services/collavre/ppt_importer.rb
408
437
  - app/services/collavre/ruby_llm_interaction_logger.rb
@@ -410,12 +439,14 @@ files:
410
439
  - app/services/collavre/system_events/dispatcher.rb
411
440
  - app/services/collavre/tools/creative_batch_service.rb
412
441
  - app/services/collavre/tools/creative_create_service.rb
442
+ - app/services/collavre/tools/creative_import_service.rb
413
443
  - app/services/collavre/tools/creative_retrieval_service.rb
414
444
  - app/services/collavre/tools/creative_update_service.rb
415
445
  - app/services/collavre/tools/cron_cancel_service.rb
416
446
  - app/services/collavre/tools/cron_create_service.rb
417
447
  - app/services/collavre/tools/cron_list_service.rb
418
448
  - app/services/collavre/tools/cron_update_service.rb
449
+ - app/services/collavre/tools/description_normalizable.rb
419
450
  - app/views/admin/shared/_tabs.html.erb
420
451
  - app/views/collavre/admin/orchestration/show.html.erb
421
452
  - app/views/collavre/admin/settings/_system_tab.html.erb
@@ -426,11 +457,9 @@ files:
426
457
  - app/views/collavre/comments/_comment.html.erb
427
458
  - app/views/collavre/comments/_comments_popup.html.erb
428
459
  - app/views/collavre/comments/_list.html.erb
429
- - app/views/collavre/comments/_presence_avatars.html.erb
430
460
  - app/views/collavre/comments/_reaction_picker.html.erb
431
461
  - app/views/collavre/comments/_read_receipts.html.erb
432
462
  - app/views/collavre/creatives/_add_button.html.erb
433
- - app/views/collavre/creatives/_delete_button.html.erb
434
463
  - app/views/collavre/creatives/_import_upload_zone.html.erb
435
464
  - app/views/collavre/creatives/_inline_edit_form.html.erb
436
465
  - app/views/collavre/creatives/_integration_modals.html.erb
@@ -476,8 +505,10 @@ files:
476
505
  - app/views/collavre/shared/navigation/_search_form.html.erb
477
506
  - app/views/collavre/user_themes/index.html.erb
478
507
  - app/views/collavre/users/_app_header.html.erb
479
- - app/views/collavre/users/_contact_management.html.erb
508
+ - app/views/collavre/users/_contact_list.html.erb
480
509
  - app/views/collavre/users/_id_pwd_fields.html.erb
510
+ - app/views/collavre/users/_org_chart.html.erb
511
+ - app/views/collavre/users/_org_chart_node.html.erb
481
512
  - app/views/collavre/users/edit_ai.html.erb
482
513
  - app/views/collavre/users/edit_password.html.erb
483
514
  - app/views/collavre/users/index.html.erb
@@ -495,6 +526,8 @@ files:
495
526
  - config/locales/comments.ko.yml
496
527
  - config/locales/contacts.en.yml
497
528
  - config/locales/contacts.ko.yml
529
+ - config/locales/contexts.en.yml
530
+ - config/locales/contexts.ko.yml
498
531
  - config/locales/creatives.en.yml
499
532
  - config/locales/creatives.ko.yml
500
533
  - config/locales/invites.en.yml
@@ -608,6 +641,10 @@ files:
608
641
  - db/migrate/20260206100000_add_topic_id_to_tasks.rb
609
642
  - db/migrate/20260212011655_add_quoted_comment_to_comments.rb
610
643
  - db/migrate/20260213044247_add_agent_conf_to_users.rb
644
+ - db/migrate/20260220072200_add_workflow_fields_to_tasks.rb
645
+ - db/migrate/20260223173533_add_review_type_to_comments.rb
646
+ - db/migrate/20260225065200_create_comment_versions.rb
647
+ - db/migrate/20260225074416_add_selected_version_id_to_comments.rb
611
648
  - lib/collavre.rb
612
649
  - lib/collavre/configuration.rb
613
650
  - lib/collavre/engine.rb
@@ -1,91 +0,0 @@
1
- /**
2
- * @jest-environment jsdom
3
- */
4
- import { createEditor } from "lexical"
5
- import { ActionTextAttachmentNode, $createActionTextAttachmentNode } from "../action_text_attachment_node"
6
- import { sanitizeAttachmentPayload } from "../attachment_payload"
7
-
8
- describe("ActionTextAttachmentNode", () => {
9
- const parser = new DOMParser()
10
- let editor
11
-
12
- beforeAll(() => {
13
- editor = createEditor({
14
- nodes: [ActionTextAttachmentNode]
15
- })
16
- })
17
-
18
- it("exports DOM with canonical wrapper", () => {
19
- const payload = sanitizeAttachmentPayload({
20
- sgid: "abc",
21
- url: "/blob",
22
- filename: "image.png",
23
- contentType: "image/png",
24
- filesize: 2048,
25
- previewable: true,
26
- width: 640,
27
- height: 360,
28
- caption: "Screenshot"
29
- })
30
-
31
- let element
32
- editor.update(() => {
33
- const node = $createActionTextAttachmentNode(payload)
34
- element = node.exportDOM().element
35
- })
36
-
37
- expect(element.tagName).toBe("ACTION-TEXT-ATTACHMENT")
38
- expect(element.getAttribute("filename")).toBe("image.png")
39
- const figure = element.querySelector("figure.attachment")
40
- expect(figure).not.toBeNull()
41
- expect(figure.getAttribute("data-trix-attachment")).toContain("\"filename\":\"image.png\"")
42
- })
43
-
44
- it("imports from figure when wrapper missing", () => {
45
- const html = `
46
- <figure class="attachment attachment--preview attachment--png" data-trix-content-type="image/png"
47
- data-trix-attachment='{"sgid":"xyz","filename":"img.png","contentType":"image/png","filesize":1024,"previewable":true,"url":"/blob/xyz"}'>
48
- <img src="/blob/xyz" alt="img.png" data-width="400" data-height="300">
49
- </figure>
50
- `
51
- const figure = parser.parseFromString(html, "text/html").body.firstElementChild
52
-
53
- let exported
54
- editor.update(() => {
55
- const handler = ActionTextAttachmentNode.importDOM().figure(figure)
56
- const conversion = handler?.conversion(figure)
57
- const node = conversion?.node
58
- exported = node.exportDOM().element
59
- })
60
-
61
- expect(exported?.getAttribute("url")).toBe("/blob/xyz")
62
- })
63
-
64
- it("applies upload result", () => {
65
- let payload
66
- editor.update(() => {
67
- const node = $createActionTextAttachmentNode({
68
- filename: "upload.png",
69
- contentType: "image/png",
70
- filesize: 100,
71
- previewable: true,
72
- status: "uploading"
73
- })
74
- node.applyUploadResult({
75
- sgid: "sgid123",
76
- url: "/blob/upload",
77
- filename: "upload.png",
78
- contentType: "image/png",
79
- filesize: 4096
80
- })
81
- payload = node.getPayload()
82
- })
83
-
84
- expect(payload).toMatchObject({
85
- sgid: "sgid123",
86
- url: "/blob/upload",
87
- status: "ready",
88
- progress: 100
89
- })
90
- })
91
- })