@taskforcehq/taskforce 0.3.306 → 0.3.308

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 (232) hide show
  1. package/README.md +0 -2
  2. package/dist/Taskforce.module.css +317 -27
  3. package/dist/TaskforceCore.js +1 -0
  4. package/dist/TaskforceCore.test.js +178 -0
  5. package/dist/components/activity/EntityActivityTimeline.d.ts +34 -0
  6. package/dist/components/activity/EntityActivityTimeline.js +81 -0
  7. package/dist/components/context/ContextAttachmentManager.js +15 -3
  8. package/dist/components/features/AgentsModule.d.ts +5 -1
  9. package/dist/components/features/AgentsModule.js +142 -39
  10. package/dist/components/features/AgentsModule.test.js +260 -11
  11. package/dist/components/features/AnnotatedAttachmentWorkspace.d.ts +3 -1
  12. package/dist/components/features/AnnotatedAttachmentWorkspace.js +118 -4
  13. package/dist/components/features/AnnotatedAttachmentWorkspace.test.js +52 -0
  14. package/dist/components/features/DocumentIndex.d.ts +2 -2
  15. package/dist/components/features/DocumentIndex.js +3 -4
  16. package/dist/components/features/DocumentViewer.d.ts +3 -1
  17. package/dist/components/features/DocumentViewer.js +6 -5
  18. package/dist/components/features/DocumentWorkspace.d.ts +10 -2
  19. package/dist/components/features/DocumentWorkspace.js +15 -4
  20. package/dist/components/features/DocumentWorkspace.test.js +20 -3
  21. package/dist/components/features/TaskSettings.d.ts +2 -0
  22. package/dist/components/features/TaskSettings.js +83 -78
  23. package/dist/components/features/TaskSettings.test.js +171 -82
  24. package/dist/components/task/TaskActionHeader.js +11 -5
  25. package/dist/components/task/TaskActionHeader.test.js +10 -0
  26. package/dist/components/task/TaskCard.js +6 -2
  27. package/dist/components/task/TaskContextUpload.test.js +3 -3
  28. package/dist/components/task/TaskForm.js +14 -64
  29. package/dist/components/task/TaskKanban.js +0 -8
  30. package/dist/components/task/TaskList.js +5 -1
  31. package/dist/components/task/TaskList.test.js +4 -0
  32. package/dist/components/ui/HierarchyActionBadge.d.ts +10 -0
  33. package/dist/components/ui/HierarchyActionBadge.js +5 -0
  34. package/dist/components/views/AppShellHeader.d.ts +3 -1
  35. package/dist/components/views/AppShellHeader.js +27 -11
  36. package/dist/components/views/AppShellHeader.test.js +18 -1
  37. package/dist/components/views/PlanComparisonPage.d.ts +20 -15
  38. package/dist/components/views/PlanComparisonPage.js +221 -82
  39. package/dist/components/views/PlanComparisonPage.test.js +268 -14
  40. package/dist/components/views/PlansPage.js +16 -10
  41. package/dist/components/views/PlansPage.test.js +4 -2
  42. package/dist/components/views/StandaloneLayout.js +256 -69
  43. package/dist/components/views/WidgetView.js +10 -8
  44. package/dist/components/views/panels/PlanningDrawer.d.ts +19 -6
  45. package/dist/components/views/panels/PlanningDrawer.js +259 -51
  46. package/dist/components/views/panels/PlanningDrawer.test.js +392 -4
  47. package/dist/config/envSchema.js +1 -0
  48. package/dist/core/AiProfileService.d.ts +7 -0
  49. package/dist/core/AiProfileService.js +460 -35
  50. package/dist/core/AiProfiles.test.js +648 -2
  51. package/dist/core/AttachmentLinkService.d.ts +3 -0
  52. package/dist/core/AttachmentLinkService.js +58 -13
  53. package/dist/core/GlobalSettingsService.js +30 -0
  54. package/dist/core/GlobalSettingsService.test.d.ts +1 -0
  55. package/dist/core/GlobalSettingsService.test.js +45 -0
  56. package/dist/core/McpTokenService.d.ts +12 -0
  57. package/dist/core/McpTokenService.js +44 -1
  58. package/dist/core/PlanEntitlementService.d.ts +20 -0
  59. package/dist/core/PlanEntitlementService.js +215 -19
  60. package/dist/core/PlanFeatureCatalog.test.js +55 -0
  61. package/dist/core/PlanningEntities.test.js +366 -4
  62. package/dist/core/TaskActivityService.d.ts +28 -1
  63. package/dist/core/TaskActivityService.js +227 -46
  64. package/dist/core/TaskActivitySync.test.d.ts +1 -0
  65. package/dist/core/TaskActivitySync.test.js +90 -0
  66. package/dist/core/TaskAuditTimeline.test.js +96 -0
  67. package/dist/core/Taskforce.d.ts +204 -26
  68. package/dist/core/Taskforce.ids.test.js +58 -0
  69. package/dist/core/Taskforce.js +781 -71
  70. package/dist/core/Taskforce.mcpAuth.test.js +109 -0
  71. package/dist/core/types.d.ts +10 -0
  72. package/dist/hooks/auth/useTaskforceAuthBootstrap.js +2 -1
  73. package/dist/hooks/bootstrapTimeouts.d.ts +4 -0
  74. package/dist/hooks/bootstrapTimeouts.js +8 -0
  75. package/dist/hooks/bootstrapTimeouts.test.d.ts +1 -0
  76. package/dist/hooks/bootstrapTimeouts.test.js +12 -0
  77. package/dist/hooks/sync/orchestratorShared.d.ts +3 -3
  78. package/dist/hooks/sync/orchestratorShared.js +61 -1
  79. package/dist/hooks/sync/recovery.js +8 -0
  80. package/dist/hooks/sync/recovery.test.js +5 -5
  81. package/dist/hooks/sync/transfers.d.ts +2 -1
  82. package/dist/hooks/sync/transfers.js +36 -9
  83. package/dist/hooks/sync/transfers.test.js +534 -2
  84. package/dist/hooks/useFilterSort.js +13 -13
  85. package/dist/hooks/useFilterSort.test.js +87 -1
  86. package/dist/hooks/useSyncOrchestrator.js +50 -5
  87. package/dist/hooks/useTaskforce.d.ts +85 -50
  88. package/dist/hooks/useTaskforce.js +44 -14
  89. package/dist/hooks/useTaskforce.runtime-routing.test.js +94 -0
  90. package/dist/hooks/useTaskforce.sync-behavior.test.js +99 -0
  91. package/dist/hooks/useWorkspaceSyncController.js +7 -1
  92. package/dist/hooks/useWorkspaceSyncController.test.js +48 -0
  93. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.js +14 -7
  94. package/dist/mcp/canonicalAssetHelpers.d.ts +16 -4
  95. package/dist/mcp/canonicalAssetHelpers.js +18 -10
  96. package/dist/mcp/canonicalAssetHelpers.test.d.ts +1 -0
  97. package/dist/mcp/canonicalAssetHelpers.test.js +67 -0
  98. package/dist/mcp/clientIntegrations.d.ts +1 -0
  99. package/dist/mcp/clientIntegrations.js +25 -0
  100. package/dist/mcp/clientIntegrations.test.js +14 -3
  101. package/dist/mcp/clientProfileDefaults.js +3 -3
  102. package/dist/mcp/collaborationRegistrar.js +7 -7
  103. package/dist/mcp/documentAssetRegistrar.js +113 -7
  104. package/dist/mcp/runtime.d.ts +1 -0
  105. package/dist/mcp/runtime.js +969 -122
  106. package/dist/mcp/runtime.test.js +1083 -11
  107. package/dist/mcp/taskAttachmentTypes.d.ts +1 -1
  108. package/dist/mcp/taskPlanningRegistrar.js +48 -0
  109. package/dist/mcp/toolRegistry.d.ts +56 -0
  110. package/dist/mcp/toolRegistry.js +8 -0
  111. package/dist/mcp/toolRegistry.test.js +4 -0
  112. package/dist/migrations/taskSchemaMigrations.js +58 -15
  113. package/dist/server/aiProfileAvatarAssets.d.ts +49 -0
  114. package/dist/server/aiProfileAvatarAssets.js +319 -0
  115. package/dist/server/aiProfileAvatarAssets.test.d.ts +1 -0
  116. package/dist/server/aiProfileAvatarAssets.test.js +213 -0
  117. package/dist/server/annotatedAttachmentsRoutes.test.js +66 -7
  118. package/dist/server/index.js +4 -0
  119. package/dist/server/index.test.js +6 -1
  120. package/dist/server/routes/admin.js +328 -9
  121. package/dist/server/routes/annotatedAttachments.js +51 -0
  122. package/dist/server/routes/auth.d.ts +11 -0
  123. package/dist/server/routes/auth.js +189 -27
  124. package/dist/server/routes/authSupport.d.ts +5 -0
  125. package/dist/server/routes/authSupport.js +13 -1
  126. package/dist/server/routes/billing.d.ts +1 -0
  127. package/dist/server/routes/billing.js +116 -63
  128. package/dist/server/routes/billing.test.js +162 -11
  129. package/dist/server/routes/documents.js +10 -0
  130. package/dist/server/routes/shared.js +0 -10
  131. package/dist/server/routes/sync.integration.test.js +221 -0
  132. package/dist/server/routes/sync.js +13 -3
  133. package/dist/server/routes/syncSnapshotRoutes.js +2 -0
  134. package/dist/server/routes/tasks.js +12 -9
  135. package/dist/server/routes.js +87 -8
  136. package/dist/server/routes.test.js +972 -23
  137. package/dist/shared/aiProfileSurfaceType.d.ts +1 -1
  138. package/dist/shared/aiProfileSurfaceType.js +10 -8
  139. package/dist/storage/objectStorage.d.ts +1 -0
  140. package/dist/storage/objectStorage.js +2 -1
  141. package/dist/storage/objectStorageClient.d.ts +1 -0
  142. package/dist/storage/objectStorageClient.js +41 -8
  143. package/dist/storage/objectStorageClient.test.js +26 -1
  144. package/dist/storage/objectStorageConfig.js +3 -1
  145. package/dist/storage/objectStorageConfig.test.js +13 -1
  146. package/dist/sync/collaborationSyncPayload.js +2 -0
  147. package/dist/sync/collaborationSyncPayload.test.js +1 -0
  148. package/dist/sync/collaborationSyncState.d.ts +3 -3
  149. package/dist/sync/collaborationSyncState.js +19 -12
  150. package/dist/sync/contentSyncPayload.d.ts +5 -1
  151. package/dist/sync/contentSyncPayload.js +9 -0
  152. package/dist/sync/contentSyncPayload.test.js +39 -0
  153. package/dist/sync/contentSyncState.d.ts +5 -1
  154. package/dist/sync/contentSyncState.js +231 -37
  155. package/dist/sync/planningSyncPayload.js +5 -0
  156. package/dist/sync/planningSyncPayload.test.js +24 -0
  157. package/dist/sync/syncApplyHandlers.d.ts +4 -4
  158. package/dist/sync/syncApplyHandlers.js +89 -31
  159. package/dist/sync/syncApplyHandlers.test.js +184 -4
  160. package/dist/sync/syncResourceAdapters.d.ts +2 -0
  161. package/dist/sync/syncResourceAdapters.js +2 -0
  162. package/dist/sync/syncService.d.ts +1 -0
  163. package/dist/sync/syncService.js +13 -1
  164. package/dist/sync/syncService.test.js +39 -0
  165. package/dist/sync/workspacePullFeed.d.ts +4 -0
  166. package/dist/sync/workspacePullFeed.js +129 -70
  167. package/dist/sync/workspacePullFeed.test.js +49 -0
  168. package/dist/sync/workspaceSyncModel.d.ts +28 -6
  169. package/dist/sync/workspaceSyncModel.js +159 -45
  170. package/dist/sync/workspaceSyncModel.test.js +269 -3
  171. package/dist/types.d.ts +33 -2
  172. package/dist/ui/agent-logos/ChatGPT.png +0 -0
  173. package/dist/ui/agent-logos/Gemini CLI.jpeg +0 -0
  174. package/dist/ui/agent-logos/antigravity.jpeg +0 -0
  175. package/dist/ui/agent-logos/claude-code.jpeg +0 -0
  176. package/dist/ui/agent-logos/codex.jpeg +0 -0
  177. package/dist/ui/agent-logos/cursor.png +0 -0
  178. package/dist/ui/agent-logos/openclaw.jpeg +0 -0
  179. package/dist/ui/agent-logos/windsurf.png +0 -0
  180. package/dist/ui/assets/AgentsModule-BS4Pi_nC.js +1 -0
  181. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BVKew-mH.css +1 -0
  182. package/dist/ui/assets/AnnotatedAttachmentWorkspace-CCckzWYZ.js +3 -0
  183. package/dist/ui/assets/ContextAttachmentManager-CfG_ER7C.js +3 -0
  184. package/dist/ui/assets/DocumentWorkspace-BVaWPA25.js +252 -0
  185. package/dist/ui/assets/DocumentWorkspace-D4rJKXzd.css +1 -0
  186. package/dist/ui/assets/EntityActivityTimeline-DSj0ThaK.js +1 -0
  187. package/dist/ui/assets/EntityActivityTimeline-DyqvvhuF.css +1 -0
  188. package/dist/ui/assets/{InitiativesModule-9E6ParrY.js → InitiativesModule-AxMkWtxH.js} +1 -1
  189. package/dist/ui/assets/PlansPage-B_z-D6Nh.css +1 -0
  190. package/dist/ui/assets/PlansPage-Ndt7mYfo.js +1 -0
  191. package/dist/ui/assets/TaskContextUpload-Dw4rTF4i.js +1 -0
  192. package/dist/ui/assets/TaskSettings-f2ga42_V.js +9 -0
  193. package/dist/ui/assets/{WorkflowsModule-BA7jcEpH.js → WorkflowsModule-E4UL3mov.js} +4 -4
  194. package/dist/ui/assets/documentReferences-BOUcJm6-.js +1 -0
  195. package/dist/ui/assets/index-BvAbqx5Q.css +1 -0
  196. package/dist/ui/assets/index-MAHKvFqp.js +4 -0
  197. package/dist/ui/assets/{vendor-icons-DuEd_65c.js → vendor-icons-B32hGuF2.js} +1 -1
  198. package/dist/ui/index.html +3 -3
  199. package/dist/ui/og-image.png +0 -0
  200. package/dist/ui/product/agent manager.png +0 -0
  201. package/dist/ui/product/agent_manager_02.png +0 -0
  202. package/dist/utils/aiProfileEvents.d.ts +7 -0
  203. package/dist/utils/aiProfileEvents.js +6 -0
  204. package/dist/utils/assignees.d.ts +6 -0
  205. package/dist/utils/assignees.js +8 -1
  206. package/dist/utils/assignees.test.d.ts +1 -0
  207. package/dist/utils/assignees.test.js +25 -0
  208. package/dist/utils/avatarDisplay.d.ts +1 -0
  209. package/dist/utils/avatarDisplay.js +15 -0
  210. package/dist/utils/contextFiles.d.ts +3 -1
  211. package/dist/utils/contextFiles.js +2 -1
  212. package/dist/utils/taskActivity.d.ts +7 -1
  213. package/dist/utils/taskActivity.js +63 -1
  214. package/dist/utils/taskActivity.test.js +23 -1
  215. package/dist/utils/taskSearch.d.ts +22 -0
  216. package/dist/utils/taskSearch.js +87 -0
  217. package/dist/utils/taskSearch.test.d.ts +1 -0
  218. package/dist/utils/taskSearch.test.js +69 -0
  219. package/dist/utils/taskUtils.js +10 -3
  220. package/dist/utils/taskUtils.test.d.ts +1 -0
  221. package/dist/utils/taskUtils.test.js +19 -0
  222. package/package.json +1 -1
  223. package/dist/ui/assets/AgentsModule-DrLawwNl.js +0 -1
  224. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BaS2VwIr.css +0 -1
  225. package/dist/ui/assets/AnnotatedAttachmentWorkspace-Z9_whf7F.js +0 -3
  226. package/dist/ui/assets/DocumentWorkspace-B03MaSkw.js +0 -252
  227. package/dist/ui/assets/DocumentWorkspace-Dhdso07p.css +0 -1
  228. package/dist/ui/assets/PlansPage-CvfnMiWq.css +0 -1
  229. package/dist/ui/assets/PlansPage-DRXscYxH.js +0 -1
  230. package/dist/ui/assets/TaskSettings-DZX4jk7e.js +0 -9
  231. package/dist/ui/assets/index-9eT8e0Lu.css +0 -1
  232. package/dist/ui/assets/index-C6k75jr8.js +0 -6
package/README.md CHANGED
@@ -45,8 +45,6 @@ These exist in the codebase in some form, but should not be treated as current p
45
45
  - **Workflow editor**: currently disabled and should not be presented as an active feature
46
46
  - **Embedded widget/in-app overlay version**: not part of the product right now, not tested recently, and likely to be deprecated
47
47
 
48
- The README below reflects the product that is actually safe to describe today.
49
-
50
48
  ## Product surfaces
51
49
 
52
50
  - `apps/app` - the main Taskforce application
@@ -133,6 +133,32 @@
133
133
  object-fit: contain;
134
134
  }
135
135
 
136
+ .brandHomeButton,
137
+ .brandHomeStatic {
138
+ display: inline-flex;
139
+ align-items: center;
140
+ gap: 8px;
141
+ min-width: 0;
142
+ color: inherit;
143
+ font: inherit;
144
+ letter-spacing: inherit;
145
+ text-transform: inherit;
146
+ font-style: inherit;
147
+ }
148
+
149
+ .brandHomeButton {
150
+ border: 0;
151
+ padding: 0;
152
+ background: transparent;
153
+ cursor: pointer;
154
+ }
155
+
156
+ .brandHomeButton:focus-visible {
157
+ outline: 2px solid var(--field-focus-border, var(--brand-primary));
158
+ outline-offset: 4px;
159
+ border-radius: 4px;
160
+ }
161
+
136
162
  .brandCloudSuffix {
137
163
  color: var(--brand-cloud-accent);
138
164
  letter-spacing: 0.04em;
@@ -1062,6 +1088,12 @@
1062
1088
  min-height: 0;
1063
1089
  }
1064
1090
 
1091
+ .settingsTabMcpOnly {
1092
+ width: 100%;
1093
+ height: 100%;
1094
+ overflow: visible;
1095
+ }
1096
+
1065
1097
 
1066
1098
  /* Modal Size Classes moved to Modal.module.css */
1067
1099
 
@@ -1086,6 +1118,12 @@
1086
1118
  height: 100%;
1087
1119
  }
1088
1120
 
1121
+ .settingsLayoutMcpOnly {
1122
+ display: block;
1123
+ min-height: 0;
1124
+ height: auto;
1125
+ }
1126
+
1089
1127
  .settingsSidebar {
1090
1128
  display: flex;
1091
1129
  flex-direction: column;
@@ -1242,6 +1280,90 @@
1242
1280
  position: relative;
1243
1281
  }
1244
1282
 
1283
+ .settingsTabMcpOnly .settingsContent {
1284
+ padding: 0;
1285
+ gap: 16px;
1286
+ overflow: visible;
1287
+ }
1288
+
1289
+ .settingsTabMcpOnly .settingsTabs {
1290
+ margin: 0 -12px;
1291
+ padding: 12px 28px 0;
1292
+ background: var(--bg-secondary);
1293
+ box-shadow:
1294
+ 0 -16px 0 16px var(--bg-secondary),
1295
+ 0 10px 18px color-mix(in srgb, var(--bg-secondary) 92%, transparent);
1296
+ }
1297
+
1298
+ .mcpRegistrationHint {
1299
+ display: flex;
1300
+ align-items: center;
1301
+ flex-wrap: wrap;
1302
+ gap: 6px;
1303
+ margin-top: 8px;
1304
+ color: var(--text-secondary);
1305
+ font-size: 12px;
1306
+ line-height: 1.5;
1307
+ }
1308
+
1309
+ .mcpRegistrationPrompt {
1310
+ appearance: none;
1311
+ border: 0;
1312
+ border-radius: var(--radius-sm);
1313
+ background: transparent;
1314
+ color: var(--brand-primary-strong);
1315
+ font: inherit;
1316
+ font-weight: 700;
1317
+ padding: 0 2px;
1318
+ cursor: pointer;
1319
+ }
1320
+
1321
+ .mcpRegistrationPrompt:hover,
1322
+ .mcpRegistrationPrompt:focus-visible {
1323
+ color: var(--text-primary);
1324
+ text-decoration: underline;
1325
+ outline: none;
1326
+ }
1327
+
1328
+ .mcpAuthRequiredCard {
1329
+ display: flex;
1330
+ align-items: flex-start;
1331
+ gap: 14px;
1332
+ padding: 18px;
1333
+ border: 1px solid var(--border-primary);
1334
+ border-radius: var(--radius-md);
1335
+ background:
1336
+ linear-gradient(135deg, color-mix(in srgb, var(--brand-primary) 12%, transparent), transparent 62%),
1337
+ var(--surface-raised);
1338
+ }
1339
+
1340
+ .mcpAuthRequiredIcon {
1341
+ display: inline-flex;
1342
+ align-items: center;
1343
+ justify-content: center;
1344
+ width: 42px;
1345
+ height: 42px;
1346
+ flex: 0 0 42px;
1347
+ border-radius: var(--radius-md);
1348
+ color: var(--brand-primary-strong);
1349
+ background: var(--brand-primary-soft);
1350
+ border: 1px solid color-mix(in srgb, var(--brand-primary) 28%, transparent);
1351
+ }
1352
+
1353
+ .mcpAuthRequiredBody {
1354
+ display: flex;
1355
+ min-width: 0;
1356
+ flex-direction: column;
1357
+ gap: 8px;
1358
+ }
1359
+
1360
+ .mcpAuthRequiredActions {
1361
+ display: flex;
1362
+ flex-wrap: wrap;
1363
+ gap: 8px;
1364
+ margin-top: 4px;
1365
+ }
1366
+
1245
1367
  @media (max-width: 900px) {
1246
1368
  .settingsLayout {
1247
1369
  grid-template-columns: 1fr;
@@ -2890,6 +3012,13 @@
2890
3012
  line-height: 1;
2891
3013
  }
2892
3014
 
3015
+ .taskHierarchySegment {
3016
+ min-width: 0;
3017
+ display: inline-flex;
3018
+ align-items: center;
3019
+ gap: 6px;
3020
+ }
3021
+
2893
3022
  .taskHierarchyMeta {
2894
3023
  display: inline-flex;
2895
3024
  align-items: center;
@@ -2903,7 +3032,7 @@
2903
3032
  line-height: 1.2;
2904
3033
  }
2905
3034
 
2906
- .taskHierarchyAddBtn {
3035
+ .taskHierarchyActionBtn {
2907
3036
  justify-content: center;
2908
3037
  padding-inline: 6px;
2909
3038
  min-width: 24px;
@@ -3930,8 +4059,15 @@
3930
4059
  font-size: inherit;
3931
4060
  }
3932
4061
 
4062
+ .mcpTokenValueInput {
4063
+ font-family: "JetBrains Mono", "Fira Code", monospace;
4064
+ font-size: 13px;
4065
+ }
4066
+
3933
4067
  .mcpTokenActionRow {
3934
4068
  display: flex;
4069
+ gap: 8px;
4070
+ flex-wrap: wrap;
3935
4071
  justify-content: flex-end;
3936
4072
  padding: 8px 16px 14px;
3937
4073
  }
@@ -4666,8 +4802,10 @@
4666
4802
  ============================= */
4667
4803
 
4668
4804
  .docWorkspace {
4805
+ --doc-tray-width: min(332px, calc(100vw - 96px));
4669
4806
  display: flex;
4670
4807
  flex: 1;
4808
+ position: relative;
4671
4809
  min-height: 0;
4672
4810
  overflow: hidden;
4673
4811
  height: 100%;
@@ -4686,6 +4824,47 @@
4686
4824
  overflow: hidden;
4687
4825
  }
4688
4826
 
4827
+ .docWorkspaceTrayMode .docViewerPanel {
4828
+ margin-left: 0;
4829
+ transition: margin-left 220ms cubic-bezier(0.4, 0, 0.2, 1);
4830
+ }
4831
+
4832
+ .docWorkspaceTrayOpen .docViewerPanel {
4833
+ margin-left: var(--doc-tray-width);
4834
+ }
4835
+
4836
+ .docTrayPanel {
4837
+ position: absolute;
4838
+ top: 0;
4839
+ bottom: 0;
4840
+ left: 0;
4841
+ width: var(--doc-tray-width);
4842
+ min-width: 260px;
4843
+ max-width: 332px;
4844
+ display: flex;
4845
+ flex-direction: column;
4846
+ padding: 0 12px;
4847
+ box-sizing: border-box;
4848
+ border-right: 1px solid var(--border-primary);
4849
+ background: var(--bg-secondary);
4850
+ overflow: hidden;
4851
+ transform: translateX(-100%);
4852
+ opacity: 0;
4853
+ visibility: hidden;
4854
+ pointer-events: none;
4855
+ z-index: 34;
4856
+ box-shadow: 4px 0 18px rgba(8, 10, 24, 0.16);
4857
+ transition: transform 220ms cubic-bezier(0.4, 0, 0.2, 1), opacity 160ms ease, visibility 0s linear 220ms;
4858
+ }
4859
+
4860
+ .docTrayPanelOpen {
4861
+ transform: translateX(0);
4862
+ opacity: 1;
4863
+ visibility: visible;
4864
+ pointer-events: auto;
4865
+ transition: transform 220ms cubic-bezier(0.4, 0, 0.2, 1), opacity 160ms ease, visibility 0s linear 0s;
4866
+ }
4867
+
4689
4868
  .docSpinning {
4690
4869
  animation: docSpin 1s linear infinite;
4691
4870
  }
@@ -4721,6 +4900,8 @@
4721
4900
 
4722
4901
  /* AI Profiles Management */
4723
4902
  .agentsModuleRoot {
4903
+ --agent-tray-width: min(760px, calc(100vw - 96px));
4904
+ position: relative;
4724
4905
  flex: 1;
4725
4906
  min-width: 0;
4726
4907
  min-height: 0;
@@ -4730,6 +4911,84 @@
4730
4911
  padding: 20px 24px 22px;
4731
4912
  }
4732
4913
 
4914
+ .agentsModuleWithTray {
4915
+ transition: padding-left 220ms cubic-bezier(0.4, 0, 0.2, 1);
4916
+ }
4917
+
4918
+ .agentsModuleTrayOpen {
4919
+ padding-left: calc(var(--agent-tray-width) + 20px);
4920
+ }
4921
+
4922
+ .agentTrayPanel {
4923
+ position: absolute;
4924
+ top: 0;
4925
+ bottom: 0;
4926
+ left: 0;
4927
+ width: var(--agent-tray-width);
4928
+ min-width: min(360px, calc(100vw - 96px));
4929
+ max-width: 760px;
4930
+ display: flex;
4931
+ flex-direction: column;
4932
+ box-sizing: border-box;
4933
+ border-right: 1px solid var(--border-primary);
4934
+ background: var(--bg-secondary);
4935
+ overflow: hidden;
4936
+ transform: translateX(-100%);
4937
+ opacity: 0;
4938
+ visibility: hidden;
4939
+ pointer-events: none;
4940
+ z-index: 34;
4941
+ box-shadow: 4px 0 18px rgba(8, 10, 24, 0.16);
4942
+ transition: transform 220ms cubic-bezier(0.4, 0, 0.2, 1), opacity 160ms ease, visibility 0s linear 220ms;
4943
+ }
4944
+
4945
+ .agentTrayPanelOpen {
4946
+ transform: translateX(0);
4947
+ opacity: 1;
4948
+ visibility: visible;
4949
+ pointer-events: auto;
4950
+ transition: transform 220ms cubic-bezier(0.4, 0, 0.2, 1), opacity 160ms ease, visibility 0s linear 0s;
4951
+ }
4952
+
4953
+ .agentTrayHeader {
4954
+ position: sticky;
4955
+ top: 0;
4956
+ z-index: 12;
4957
+ display: flex;
4958
+ align-items: center;
4959
+ justify-content: space-between;
4960
+ gap: 0.75rem;
4961
+ padding: 12px 12px 10px;
4962
+ border-bottom: 1px solid var(--border-default);
4963
+ background: var(--bg-secondary);
4964
+ box-shadow: 0 10px 16px color-mix(in srgb, var(--bg-secondary) 90%, transparent);
4965
+ flex-shrink: 0;
4966
+ }
4967
+
4968
+ .agentTrayTitle {
4969
+ flex: 1;
4970
+ display: flex;
4971
+ align-items: center;
4972
+ gap: 6px;
4973
+ font-size: 0.78rem;
4974
+ font-weight: 700;
4975
+ letter-spacing: 0.06em;
4976
+ text-transform: uppercase;
4977
+ color: var(--text-secondary);
4978
+ }
4979
+
4980
+ .agentTrayContent {
4981
+ flex: 1;
4982
+ min-height: 0;
4983
+ padding: 12px 0 16px;
4984
+ overflow-y: auto;
4985
+ overflow-x: hidden;
4986
+ }
4987
+
4988
+ .agentTrayContentInner {
4989
+ padding: 0 12px;
4990
+ }
4991
+
4733
4992
  .agentsModuleContent {
4734
4993
  width: min(100%, 760px);
4735
4994
  min-height: 0;
@@ -4770,7 +5029,7 @@
4770
5029
 
4771
5030
  .aiProfilesExplorer {
4772
5031
  display: grid;
4773
- grid-template-columns: 360px 600px;
5032
+ grid-template-columns: 360px 620px;
4774
5033
  gap: 16px;
4775
5034
  align-items: start;
4776
5035
  justify-content: start;
@@ -4814,31 +5073,34 @@
4814
5073
 
4815
5074
  .aiProfileGroup {
4816
5075
  appearance: none;
4817
- border: 1px solid var(--border-primary, rgba(255, 255, 255, 0.08));
5076
+ border: 1px solid var(--agent-card-border, var(--border-primary, rgba(255, 255, 255, 0.08)));
4818
5077
  border-radius: 8px;
4819
5078
  padding: 10px 40px 10px 12px;
4820
5079
  width: 100%;
4821
5080
  text-align: left;
4822
5081
  font: inherit;
4823
5082
  color: inherit;
4824
- background: rgba(255, 255, 255, 0.02);
5083
+ background: var(--agent-card-bg, rgba(255, 255, 255, 0.02));
5084
+ box-shadow: var(--agent-card-shadow, none);
4825
5085
  cursor: pointer;
4826
5086
  box-sizing: border-box;
4827
5087
  position: relative;
4828
- transition: border-color 140ms ease, background 140ms ease, box-shadow 140ms ease;
5088
+ transition: border-color 140ms ease, background 140ms ease, box-shadow 140ms ease, transform 140ms ease;
4829
5089
  }
4830
5090
 
4831
5091
  .aiProfileGroup:hover {
4832
- border-color: rgba(96, 165, 250, 0.3);
4833
- background: rgba(255, 255, 255, 0.04);
5092
+ border-color: var(--agent-card-hover-border, rgba(96, 165, 250, 0.3));
5093
+ background: var(--agent-card-hover-bg, rgba(255, 255, 255, 0.04));
5094
+ transform: translateY(-1px);
4834
5095
  }
4835
5096
 
4836
5097
  .aiProfileGroupSelected {
4837
- border-color: rgba(96, 165, 250, 0.5);
5098
+ border-color: var(--agent-card-selected-border, rgba(96, 165, 250, 0.5));
4838
5099
  background:
4839
- linear-gradient(135deg, rgba(59, 130, 246, 0.14), rgba(14, 165, 233, 0.06)),
4840
- rgba(255, 255, 255, 0.04);
4841
- box-shadow: inset 0 0 0 1px rgba(96, 165, 250, 0.16);
5100
+ linear-gradient(135deg, color-mix(in srgb, var(--brand-primary) 10%, transparent), color-mix(in srgb, var(--status-info, #3b82f6) 4%, transparent)),
5101
+ var(--agent-card-selected-bg, rgba(255, 255, 255, 0.04));
5102
+ box-shadow: var(--agent-card-selected-shadow, inset 0 0 0 1px rgba(96, 165, 250, 0.16));
5103
+ transform: none;
4842
5104
  }
4843
5105
 
4844
5106
  .aiProfileGroupDuplicate {
@@ -4865,9 +5127,9 @@
4865
5127
  margin-right: 2px;
4866
5128
  overflow: hidden;
4867
5129
  background:
4868
- linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.02)),
4869
- rgba(15, 23, 42, 0.42);
4870
- border: 1px solid rgba(255, 255, 255, 0.1);
5130
+ linear-gradient(180deg, color-mix(in srgb, #fff 8%, transparent), transparent),
5131
+ var(--agent-avatar-bg, rgba(15, 23, 42, 0.42));
5132
+ border: 1px solid var(--agent-avatar-border, rgba(255, 255, 255, 0.1));
4871
5133
  }
4872
5134
 
4873
5135
  .aiProfileGroupAvatar img {
@@ -4922,7 +5184,7 @@
4922
5184
  align-items: center;
4923
5185
  justify-content: center;
4924
5186
  line-height: 1;
4925
- opacity: 0.95;
5187
+ opacity: 0.86;
4926
5188
  }
4927
5189
 
4928
5190
  .aiProfileSeatScopeIconDetail {
@@ -4931,11 +5193,11 @@
4931
5193
  }
4932
5194
 
4933
5195
  .aiProfileSeatScopeIconCloud {
4934
- color: #60a5fa;
5196
+ color: color-mix(in srgb, var(--status-info, #60a5fa) 78%, var(--text-secondary, #cbd5e1));
4935
5197
  }
4936
5198
 
4937
5199
  .aiProfileSeatScopeIconLocal {
4938
- color: #a78bfa;
5200
+ color: color-mix(in srgb, var(--brand-primary, #a78bfa) 78%, var(--text-secondary, #cbd5e1));
4939
5201
  }
4940
5202
 
4941
5203
  .aiProfileDuplicateBadge {
@@ -4968,8 +5230,8 @@
4968
5230
  font-family: monospace;
4969
5231
  font-size: 10px;
4970
5232
  color: var(--text-muted, #9ca3af);
4971
- background: rgba(255, 255, 255, 0.04);
4972
- border: 1px solid rgba(255, 255, 255, 0.06);
5233
+ background: var(--surface-inset, rgba(255, 255, 255, 0.04));
5234
+ border: 1px solid var(--border-subtle, rgba(255, 255, 255, 0.06));
4973
5235
  border-radius: 6px;
4974
5236
  padding: 3px 7px;
4975
5237
  max-width: 100%;
@@ -5004,13 +5266,13 @@
5004
5266
  }
5005
5267
 
5006
5268
  .aiProfileDetailCard {
5007
- width: 600px;
5269
+ width: 620px;
5008
5270
  min-width: 0;
5009
- border: 1px solid var(--border-primary, rgba(255, 255, 255, 0.08));
5271
+ border: 1px solid var(--agent-detail-border, var(--border-primary, rgba(255, 255, 255, 0.08)));
5010
5272
  border-radius: var(--radius-md);
5011
5273
  padding: 16px;
5012
- background: var(--surface-panel);
5013
- box-shadow: var(--box-shadow-md);
5274
+ background: var(--agent-detail-bg, var(--surface-panel));
5275
+ box-shadow: var(--agent-detail-shadow, var(--box-shadow-md));
5014
5276
  backdrop-filter: blur(10px);
5015
5277
  position: relative;
5016
5278
  }
@@ -5029,9 +5291,9 @@
5029
5291
  height: 44px;
5030
5292
  border-radius: 14px;
5031
5293
  background:
5032
- linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.03)),
5033
- rgba(15, 23, 42, 0.36);
5034
- border: 1px solid rgba(255, 255, 255, 0.1);
5294
+ linear-gradient(180deg, color-mix(in srgb, #fff 10%, transparent), transparent),
5295
+ var(--agent-avatar-bg, rgba(15, 23, 42, 0.36));
5296
+ border: 1px solid var(--agent-avatar-border, rgba(255, 255, 255, 0.1));
5035
5297
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08);
5036
5298
  }
5037
5299
 
@@ -5091,6 +5353,26 @@
5091
5353
  color: var(--text-secondary, #cbd5e1);
5092
5354
  }
5093
5355
 
5356
+ .aiProfileSignatureColor {
5357
+ display: inline-flex;
5358
+ align-items: center;
5359
+ gap: 7px;
5360
+ margin-top: 10px;
5361
+ color: var(--text-muted, #94a3b8);
5362
+ font-size: 12px;
5363
+ line-height: 1.3;
5364
+ }
5365
+
5366
+ .aiProfileSignatureSwatch {
5367
+ width: 12px;
5368
+ height: 12px;
5369
+ border-radius: 3px;
5370
+ border: 1px solid rgba(255, 255, 255, 0.22);
5371
+ box-shadow:
5372
+ 0 0 0 2px rgba(255, 255, 255, 0.04),
5373
+ 0 2px 6px rgba(0, 0, 0, 0.22);
5374
+ }
5375
+
5094
5376
  .aiProfileDetailDataList {
5095
5377
  display: grid;
5096
5378
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
@@ -5135,7 +5417,8 @@
5135
5417
  }
5136
5418
 
5137
5419
  .aiProfileStatusSelect {
5138
- justify-self: end;
5420
+ display: block;
5421
+ width: 100%;
5139
5422
  max-width: 100%;
5140
5423
  appearance: none;
5141
5424
  border: 0;
@@ -5164,6 +5447,12 @@
5164
5447
  text-underline-offset: 3px;
5165
5448
  }
5166
5449
 
5450
+ .aiProfileStatusSelect:disabled {
5451
+ cursor: wait;
5452
+ opacity: 0.62;
5453
+ text-decoration: none;
5454
+ }
5455
+
5167
5456
  .aiProfileStatusSelect:focus-visible {
5168
5457
  outline: 2px solid rgba(96, 165, 250, 0.55);
5169
5458
  outline-offset: 2px;
@@ -5335,4 +5624,5 @@
5335
5624
  grid-template-columns: 1fr;
5336
5625
  gap: 2px;
5337
5626
  }
5627
+
5338
5628
  }
@@ -279,6 +279,7 @@ function TaskforceCoreWithRouter({ config = {}, initialTaskId, onTaskCountChange
279
279
  && !isPricingRoute
280
280
  && !isPlansRoute
281
281
  && !isPlansScreen
282
+ && !isLoginRoute
282
283
  && bootstrapState.appPending
283
284
  && (isSetupRoute || runtimeMode === 'cloud' || isLikelyCloudAppHost);
284
285
  const shouldHoldForCommercialOnboardingRedirect = runtimeMode === 'cloud'