@oxy.so/bloom 7.0.1 → 7.1.1
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.
- package/assets/character-runtime/README.md +55 -0
- package/assets/character-runtime/appearance-codec.mjs +149 -0
- package/assets/character-runtime/integrity.json +6 -0
- package/assets/character-runtime/legacy-engine.mjs +105 -0
- package/assets/character-runtime/legacy-geometry.mjs +166 -0
- package/assets/character-runtime/legacy-worker.mjs +85 -0
- package/assets/character-runtime/managed-avatar.mjs +258 -0
- package/assets/character-runtime/orbit-characters.data +0 -0
- package/assets/character-runtime/orbit-characters.mjs +30 -0
- package/assets/character-runtime/orbit-characters.wasm +0 -0
- package/assets/character-runtime/preparation-worker.mjs +19 -0
- package/assets/character-runtime/render-budget.mjs +144 -0
- package/assets/character-runtime/runtime.mjs +851 -0
- package/assets/character-runtime/thumbnails/eyes/crescent_inset.png +0 -0
- package/assets/character-runtime/thumbnails/eyes/dots.png +0 -0
- package/assets/character-runtime/thumbnails/eyes/double_highlights.png +0 -0
- package/assets/character-runtime/thumbnails/eyes/highlight_capsules.png +0 -0
- package/assets/character-runtime/thumbnails/eyes/oval.png +0 -0
- package/assets/character-runtime/thumbnails/eyes/round_inset.png +0 -0
- package/assets/character-runtime/thumbnails/eyes/sleepy_lids.png +0 -0
- package/assets/character-runtime/thumbnails/eyes/sparkle_capsules.png +0 -0
- package/assets/character-runtime/thumbnails/eyes/swept_lids.png +0 -0
- package/assets/character-runtime/thumbnails/shapes/capsule.png +0 -0
- package/assets/character-runtime/thumbnails/shapes/circle.png +0 -0
- package/assets/character-runtime/thumbnails/shapes/circle_two_ears.png +0 -0
- package/assets/character-runtime/thumbnails/shapes/four_lobed_butterfly.png +0 -0
- package/assets/character-runtime/thumbnails/shapes/heart.png +0 -0
- package/assets/character-runtime/thumbnails/shapes/rounded_cube.png +0 -0
- package/assets/character-runtime/thumbnails/shapes/rounded_diamond.png +0 -0
- package/assets/character-runtime/thumbnails/shapes/rounded_head_two_ears.png +0 -0
- package/assets/character-runtime/thumbnails/shapes/rounded_triangle.png +0 -0
- package/assets/character-runtime/thumbnails/shapes/six_lobed_flower.png +0 -0
- package/assets/character-runtime/thumbnails/shapes/twelve_scalloped_rosette.png +0 -0
- package/docs/adoption-matrix.mdx +9 -9
- package/docs/agent-avatar.mdx +44 -10
- package/docs/agent-creator.mdx +12 -4
- package/docs/multi-agent-chat.mdx +12 -0
- package/docs/project-board.mdx +3 -3
- package/lib/commonjs/agent-avatar/AgentAvatar.js +15 -203
- package/lib/commonjs/agent-avatar/AgentAvatar.js.map +1 -1
- package/lib/commonjs/agent-avatar/AgentAvatarProvider.js +69 -0
- package/lib/commonjs/agent-avatar/AgentAvatarProvider.js.map +1 -0
- package/lib/commonjs/agent-avatar/CharacterAvatar.js +212 -0
- package/lib/commonjs/agent-avatar/CharacterAvatar.js.map +1 -0
- package/lib/commonjs/agent-avatar/ProceduralAvatar.js +216 -0
- package/lib/commonjs/agent-avatar/ProceduralAvatar.js.map +1 -0
- package/lib/commonjs/agent-avatar/artwork.js +4 -3
- package/lib/commonjs/agent-avatar/artwork.js.map +1 -1
- package/lib/commonjs/agent-avatar/avatar-color.js +16 -0
- package/lib/commonjs/agent-avatar/avatar-color.js.map +1 -0
- package/lib/commonjs/agent-avatar/character-html.js +25 -0
- package/lib/commonjs/agent-avatar/character-html.js.map +1 -0
- package/lib/commonjs/agent-avatar/character-runtime-module.js +39 -0
- package/lib/commonjs/agent-avatar/character-runtime-module.js.map +1 -0
- package/lib/commonjs/agent-avatar/character-webview.js +18 -0
- package/lib/commonjs/agent-avatar/character-webview.js.map +1 -0
- package/lib/commonjs/agent-avatar/config-character.js +36 -0
- package/lib/commonjs/agent-avatar/config-character.js.map +1 -0
- package/lib/commonjs/agent-avatar/context.js +6 -1
- package/lib/commonjs/agent-avatar/context.js.map +1 -1
- package/lib/commonjs/agent-avatar/index.js +7 -0
- package/lib/commonjs/agent-avatar/index.js.map +1 -1
- package/lib/commonjs/agent-avatar/legacy-contours.js +57 -0
- package/lib/commonjs/agent-avatar/legacy-contours.js.map +1 -0
- package/lib/commonjs/agent-avatar/legacy-recipe.js +112 -0
- package/lib/commonjs/agent-avatar/legacy-recipe.js.map +1 -0
- package/lib/commonjs/agent-avatar/messages.js +2 -1
- package/lib/commonjs/agent-avatar/messages.js.map +1 -1
- package/lib/commonjs/agent-avatar/model.js +2 -0
- package/lib/commonjs/agent-avatar/model.js.map +1 -1
- package/lib/commonjs/agent-creator/AgentCreatorBase.js +251 -25
- package/lib/commonjs/agent-creator/AgentCreatorBase.js.map +1 -1
- package/lib/commonjs/agent-creator/CharacterControls.js +115 -0
- package/lib/commonjs/agent-creator/CharacterControls.js.map +1 -0
- package/lib/commonjs/agent-creator/EmotionPicker.js +51 -18
- package/lib/commonjs/agent-creator/EmotionPicker.js.map +1 -1
- package/lib/commonjs/agent-creator/ShapeArc.js +56 -26
- package/lib/commonjs/agent-creator/ShapeArc.js.map +1 -1
- package/lib/commonjs/agent-creator/ShapeSilhouette.js +62 -0
- package/lib/commonjs/agent-creator/ShapeSilhouette.js.map +1 -0
- package/lib/commonjs/agent-creator/constants.js +48 -1
- package/lib/commonjs/agent-creator/constants.js.map +1 -1
- package/lib/commonjs/agent-creator/messages.js +9 -0
- package/lib/commonjs/agent-creator/messages.js.map +1 -1
- package/lib/commonjs/agent-creator/shared.js +7 -10
- package/lib/commonjs/agent-creator/shared.js.map +1 -1
- package/lib/commonjs/agent-thinking/AgentThinking.js +4 -62
- package/lib/commonjs/agent-thinking/AgentThinking.js.map +1 -1
- package/lib/commonjs/agent-thinking/ThinkingLabel.js +77 -0
- package/lib/commonjs/agent-thinking/ThinkingLabel.js.map +1 -0
- package/lib/commonjs/chart-cards/TokensChartCard.js +20 -5
- package/lib/commonjs/chart-cards/TokensChartCard.js.map +1 -1
- package/lib/commonjs/locale/translations/ar.js +11 -1
- package/lib/commonjs/locale/translations/ar.js.map +1 -1
- package/lib/commonjs/locale/translations/bn.js +11 -1
- package/lib/commonjs/locale/translations/bn.js.map +1 -1
- package/lib/commonjs/locale/translations/ca.js +11 -1
- package/lib/commonjs/locale/translations/ca.js.map +1 -1
- package/lib/commonjs/locale/translations/de.js +11 -1
- package/lib/commonjs/locale/translations/de.js.map +1 -1
- package/lib/commonjs/locale/translations/es.js +11 -1
- package/lib/commonjs/locale/translations/es.js.map +1 -1
- package/lib/commonjs/locale/translations/fr.js +11 -1
- package/lib/commonjs/locale/translations/fr.js.map +1 -1
- package/lib/commonjs/locale/translations/hi.js +11 -1
- package/lib/commonjs/locale/translations/hi.js.map +1 -1
- package/lib/commonjs/locale/translations/id.js +11 -1
- package/lib/commonjs/locale/translations/id.js.map +1 -1
- package/lib/commonjs/locale/translations/it.js +11 -1
- package/lib/commonjs/locale/translations/it.js.map +1 -1
- package/lib/commonjs/locale/translations/ja.js +11 -1
- package/lib/commonjs/locale/translations/ja.js.map +1 -1
- package/lib/commonjs/locale/translations/pt.js +11 -1
- package/lib/commonjs/locale/translations/pt.js.map +1 -1
- package/lib/commonjs/locale/translations/ru.js +11 -1
- package/lib/commonjs/locale/translations/ru.js.map +1 -1
- package/lib/commonjs/locale/translations/tr.js +11 -1
- package/lib/commonjs/locale/translations/tr.js.map +1 -1
- package/lib/commonjs/locale/translations/zh.js +11 -1
- package/lib/commonjs/locale/translations/zh.js.map +1 -1
- package/lib/commonjs/multi-agent-chat/AvatarHandoff.js +2 -4
- package/lib/commonjs/multi-agent-chat/AvatarHandoff.js.map +1 -1
- package/lib/commonjs/multi-agent-chat/ChatAgentProfile.js +97 -0
- package/lib/commonjs/multi-agent-chat/ChatAgentProfile.js.map +1 -0
- package/lib/commonjs/multi-agent-chat/EditorRail.js +4 -0
- package/lib/commonjs/multi-agent-chat/EditorRail.js.map +1 -1
- package/lib/commonjs/multi-agent-chat/MultiAgentChatBase.js +89 -126
- package/lib/commonjs/multi-agent-chat/MultiAgentChatBase.js.map +1 -1
- package/lib/commonjs/multi-agent-chat/ReplyRow.js +8 -11
- package/lib/commonjs/multi-agent-chat/ReplyRow.js.map +1 -1
- package/lib/commonjs/multi-agent-chat/handoff.js +5 -5
- package/lib/commonjs/multi-agent-chat/handoff.js.map +1 -1
- package/lib/commonjs/project-board/CreateTicketDialog.js +33 -2
- package/lib/commonjs/project-board/CreateTicketDialog.js.map +1 -1
- package/lib/commonjs/project-board/ProjectBoardBase.js +137 -38
- package/lib/commonjs/project-board/ProjectBoardBase.js.map +1 -1
- package/lib/commonjs/project-board/TicketCornerGenieSurface.web.js +34 -28
- package/lib/commonjs/project-board/TicketCornerGenieSurface.web.js.map +1 -1
- package/lib/commonjs/project-board/TicketDetailDialog.js +6 -3
- package/lib/commonjs/project-board/TicketDetailDialog.js.map +1 -1
- package/lib/commonjs/project-board/TicketGenieSurface.js +17 -7
- package/lib/commonjs/project-board/TicketGenieSurface.js.map +1 -1
- package/lib/commonjs/project-board/TicketGenieSurface.web.js +1 -1
- package/lib/commonjs/project-board/TicketGenieSurface.web.js.map +1 -1
- package/lib/commonjs/project-board/TicketPresence.js +125 -0
- package/lib/commonjs/project-board/TicketPresence.js.map +1 -0
- package/lib/commonjs/project-board/TicketTokenChart.js +23 -0
- package/lib/commonjs/project-board/TicketTokenChart.js.map +1 -0
- package/lib/commonjs/project-board/context.js +3 -1
- package/lib/commonjs/project-board/context.js.map +1 -1
- package/lib/commonjs/search/Search.js +12 -3
- package/lib/commonjs/search/Search.js.map +1 -1
- package/lib/commonjs/sidebar/SidebarToolbar.js +28 -14
- package/lib/commonjs/sidebar/SidebarToolbar.js.map +1 -1
- package/lib/commonjs/text-field/TextField.js +13 -7
- package/lib/commonjs/text-field/TextField.js.map +1 -1
- package/lib/module/agent-avatar/AgentAvatar.js +16 -204
- package/lib/module/agent-avatar/AgentAvatar.js.map +1 -1
- package/lib/module/agent-avatar/AgentAvatarProvider.js +65 -0
- package/lib/module/agent-avatar/AgentAvatarProvider.js.map +1 -0
- package/lib/module/agent-avatar/CharacterAvatar.js +208 -0
- package/lib/module/agent-avatar/CharacterAvatar.js.map +1 -0
- package/lib/module/agent-avatar/ProceduralAvatar.js +212 -0
- package/lib/module/agent-avatar/ProceduralAvatar.js.map +1 -0
- package/lib/module/agent-avatar/artwork.js +3 -3
- package/lib/module/agent-avatar/artwork.js.map +1 -1
- package/lib/module/agent-avatar/avatar-color.js +12 -0
- package/lib/module/agent-avatar/avatar-color.js.map +1 -0
- package/lib/module/agent-avatar/character-html.js +19 -0
- package/lib/module/agent-avatar/character-html.js.map +1 -0
- package/lib/module/agent-avatar/character-runtime-module.js +35 -0
- package/lib/module/agent-avatar/character-runtime-module.js.map +1 -0
- package/lib/module/agent-avatar/character-webview.js +14 -0
- package/lib/module/agent-avatar/character-webview.js.map +1 -0
- package/lib/module/agent-avatar/config-character.js +32 -0
- package/lib/module/agent-avatar/config-character.js.map +1 -0
- package/lib/module/agent-avatar/context.js +5 -0
- package/lib/module/agent-avatar/context.js.map +1 -1
- package/lib/module/agent-avatar/index.js +1 -0
- package/lib/module/agent-avatar/index.js.map +1 -1
- package/lib/module/agent-avatar/legacy-contours.js +53 -0
- package/lib/module/agent-avatar/legacy-contours.js.map +1 -0
- package/lib/module/agent-avatar/legacy-recipe.js +104 -0
- package/lib/module/agent-avatar/legacy-recipe.js.map +1 -0
- package/lib/module/agent-avatar/messages.js +2 -1
- package/lib/module/agent-avatar/messages.js.map +1 -1
- package/lib/module/agent-avatar/model.js +2 -0
- package/lib/module/agent-avatar/model.js.map +1 -1
- package/lib/module/agent-creator/AgentCreatorBase.js +248 -22
- package/lib/module/agent-creator/AgentCreatorBase.js.map +1 -1
- package/lib/module/agent-creator/CharacterControls.js +112 -0
- package/lib/module/agent-creator/CharacterControls.js.map +1 -0
- package/lib/module/agent-creator/EmotionPicker.js +52 -19
- package/lib/module/agent-creator/EmotionPicker.js.map +1 -1
- package/lib/module/agent-creator/ShapeArc.js +58 -28
- package/lib/module/agent-creator/ShapeArc.js.map +1 -1
- package/lib/module/agent-creator/ShapeSilhouette.js +57 -0
- package/lib/module/agent-creator/ShapeSilhouette.js.map +1 -0
- package/lib/module/agent-creator/constants.js +47 -0
- package/lib/module/agent-creator/constants.js.map +1 -1
- package/lib/module/agent-creator/messages.js +9 -0
- package/lib/module/agent-creator/messages.js.map +1 -1
- package/lib/module/agent-creator/shared.js +1 -9
- package/lib/module/agent-creator/shared.js.map +1 -1
- package/lib/module/agent-thinking/AgentThinking.js +5 -63
- package/lib/module/agent-thinking/AgentThinking.js.map +1 -1
- package/lib/module/agent-thinking/ThinkingLabel.js +73 -0
- package/lib/module/agent-thinking/ThinkingLabel.js.map +1 -0
- package/lib/module/chart-cards/TokensChartCard.js +20 -5
- package/lib/module/chart-cards/TokensChartCard.js.map +1 -1
- package/lib/module/locale/translations/ar.js +11 -1
- package/lib/module/locale/translations/ar.js.map +1 -1
- package/lib/module/locale/translations/bn.js +11 -1
- package/lib/module/locale/translations/bn.js.map +1 -1
- package/lib/module/locale/translations/ca.js +11 -1
- package/lib/module/locale/translations/ca.js.map +1 -1
- package/lib/module/locale/translations/de.js +11 -1
- package/lib/module/locale/translations/de.js.map +1 -1
- package/lib/module/locale/translations/es.js +11 -1
- package/lib/module/locale/translations/es.js.map +1 -1
- package/lib/module/locale/translations/fr.js +11 -1
- package/lib/module/locale/translations/fr.js.map +1 -1
- package/lib/module/locale/translations/hi.js +11 -1
- package/lib/module/locale/translations/hi.js.map +1 -1
- package/lib/module/locale/translations/id.js +11 -1
- package/lib/module/locale/translations/id.js.map +1 -1
- package/lib/module/locale/translations/it.js +11 -1
- package/lib/module/locale/translations/it.js.map +1 -1
- package/lib/module/locale/translations/ja.js +11 -1
- package/lib/module/locale/translations/ja.js.map +1 -1
- package/lib/module/locale/translations/pt.js +11 -1
- package/lib/module/locale/translations/pt.js.map +1 -1
- package/lib/module/locale/translations/ru.js +11 -1
- package/lib/module/locale/translations/ru.js.map +1 -1
- package/lib/module/locale/translations/tr.js +11 -1
- package/lib/module/locale/translations/tr.js.map +1 -1
- package/lib/module/locale/translations/zh.js +11 -1
- package/lib/module/locale/translations/zh.js.map +1 -1
- package/lib/module/multi-agent-chat/AvatarHandoff.js +3 -5
- package/lib/module/multi-agent-chat/AvatarHandoff.js.map +1 -1
- package/lib/module/multi-agent-chat/ChatAgentProfile.js +94 -0
- package/lib/module/multi-agent-chat/ChatAgentProfile.js.map +1 -0
- package/lib/module/multi-agent-chat/EditorRail.js +4 -0
- package/lib/module/multi-agent-chat/EditorRail.js.map +1 -1
- package/lib/module/multi-agent-chat/MultiAgentChatBase.js +89 -126
- package/lib/module/multi-agent-chat/MultiAgentChatBase.js.map +1 -1
- package/lib/module/multi-agent-chat/ReplyRow.js +9 -12
- package/lib/module/multi-agent-chat/ReplyRow.js.map +1 -1
- package/lib/module/multi-agent-chat/handoff.js +4 -4
- package/lib/module/multi-agent-chat/handoff.js.map +1 -1
- package/lib/module/project-board/CreateTicketDialog.js +33 -2
- package/lib/module/project-board/CreateTicketDialog.js.map +1 -1
- package/lib/module/project-board/ProjectBoardBase.js +138 -39
- package/lib/module/project-board/ProjectBoardBase.js.map +1 -1
- package/lib/module/project-board/TicketCornerGenieSurface.web.js +35 -29
- package/lib/module/project-board/TicketCornerGenieSurface.web.js.map +1 -1
- package/lib/module/project-board/TicketDetailDialog.js +7 -4
- package/lib/module/project-board/TicketDetailDialog.js.map +1 -1
- package/lib/module/project-board/TicketGenieSurface.js +17 -7
- package/lib/module/project-board/TicketGenieSurface.js.map +1 -1
- package/lib/module/project-board/TicketGenieSurface.web.js +1 -1
- package/lib/module/project-board/TicketGenieSurface.web.js.map +1 -1
- package/lib/module/project-board/TicketPresence.js +119 -0
- package/lib/module/project-board/TicketPresence.js.map +1 -0
- package/lib/module/project-board/TicketTokenChart.js +20 -0
- package/lib/module/project-board/TicketTokenChart.js.map +1 -0
- package/lib/module/project-board/context.js +2 -0
- package/lib/module/project-board/context.js.map +1 -1
- package/lib/module/search/Search.js +12 -3
- package/lib/module/search/Search.js.map +1 -1
- package/lib/module/sidebar/SidebarToolbar.js +29 -15
- package/lib/module/sidebar/SidebarToolbar.js.map +1 -1
- package/lib/module/text-field/TextField.js +13 -7
- package/lib/module/text-field/TextField.js.map +1 -1
- package/lib/typescript/commonjs/agent-avatar/AgentAvatar.d.ts +2 -2
- package/lib/typescript/commonjs/agent-avatar/AgentAvatar.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-avatar/AgentAvatarProvider.d.ts +4 -0
- package/lib/typescript/commonjs/agent-avatar/AgentAvatarProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-avatar/CharacterAvatar.d.ts +4 -0
- package/lib/typescript/commonjs/agent-avatar/CharacterAvatar.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-avatar/ProceduralAvatar.d.ts +6 -0
- package/lib/typescript/commonjs/agent-avatar/ProceduralAvatar.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-avatar/artwork.d.ts +2 -1
- package/lib/typescript/commonjs/agent-avatar/artwork.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-avatar/avatar-color.d.ts +3 -0
- package/lib/typescript/commonjs/agent-avatar/avatar-color.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-avatar/character-html.d.ts +4 -0
- package/lib/typescript/commonjs/agent-avatar/character-html.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-avatar/character-runtime-module.d.ts +2 -0
- package/lib/typescript/commonjs/agent-avatar/character-runtime-module.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-avatar/character-webview.d.ts +24 -0
- package/lib/typescript/commonjs/agent-avatar/character-webview.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-avatar/config-character.d.ts +11 -0
- package/lib/typescript/commonjs/agent-avatar/config-character.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-avatar/context.d.ts +15 -0
- package/lib/typescript/commonjs/agent-avatar/context.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-avatar/index.d.ts +3 -1
- package/lib/typescript/commonjs/agent-avatar/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-avatar/legacy-contours.d.ts +5 -0
- package/lib/typescript/commonjs/agent-avatar/legacy-contours.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-avatar/legacy-recipe.d.ts +40 -0
- package/lib/typescript/commonjs/agent-avatar/legacy-recipe.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-avatar/messages.d.ts +1 -0
- package/lib/typescript/commonjs/agent-avatar/messages.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-avatar/model.d.ts +3 -0
- package/lib/typescript/commonjs/agent-avatar/model.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-avatar/types.d.ts +10 -1
- package/lib/typescript/commonjs/agent-avatar/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/AgentCreatorBase.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/CharacterControls.d.ts +8 -0
- package/lib/typescript/commonjs/agent-creator/CharacterControls.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-creator/EmotionPicker.d.ts +12 -1
- package/lib/typescript/commonjs/agent-creator/EmotionPicker.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/ShapeArc.d.ts +11 -2
- package/lib/typescript/commonjs/agent-creator/ShapeArc.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/ShapeSilhouette.d.ts +6 -0
- package/lib/typescript/commonjs/agent-creator/ShapeSilhouette.d.ts.map +1 -0
- package/lib/typescript/commonjs/agent-creator/constants.d.ts +44 -0
- package/lib/typescript/commonjs/agent-creator/constants.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/context.d.ts +9 -0
- package/lib/typescript/commonjs/agent-creator/context.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/messages.d.ts +10 -0
- package/lib/typescript/commonjs/agent-creator/messages.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-creator/shared.d.ts +1 -1
- package/lib/typescript/commonjs/agent-creator/shared.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-thinking/AgentThinking.d.ts.map +1 -1
- package/lib/typescript/commonjs/agent-thinking/ThinkingLabel.d.ts +7 -0
- package/lib/typescript/commonjs/agent-thinking/ThinkingLabel.d.ts.map +1 -0
- package/lib/typescript/commonjs/chart-cards/TokensChartCard.d.ts +3 -1
- package/lib/typescript/commonjs/chart-cards/TokensChartCard.d.ts.map +1 -1
- package/lib/typescript/commonjs/locale/translations/ar.d.ts.map +1 -1
- package/lib/typescript/commonjs/locale/translations/bn.d.ts.map +1 -1
- package/lib/typescript/commonjs/locale/translations/ca.d.ts.map +1 -1
- package/lib/typescript/commonjs/locale/translations/de.d.ts.map +1 -1
- package/lib/typescript/commonjs/locale/translations/es.d.ts.map +1 -1
- package/lib/typescript/commonjs/locale/translations/fr.d.ts.map +1 -1
- package/lib/typescript/commonjs/locale/translations/hi.d.ts.map +1 -1
- package/lib/typescript/commonjs/locale/translations/id.d.ts.map +1 -1
- package/lib/typescript/commonjs/locale/translations/it.d.ts.map +1 -1
- package/lib/typescript/commonjs/locale/translations/ja.d.ts.map +1 -1
- package/lib/typescript/commonjs/locale/translations/pt.d.ts.map +1 -1
- package/lib/typescript/commonjs/locale/translations/ru.d.ts.map +1 -1
- package/lib/typescript/commonjs/locale/translations/tr.d.ts.map +1 -1
- package/lib/typescript/commonjs/locale/translations/zh.d.ts.map +1 -1
- package/lib/typescript/commonjs/multi-agent-chat/AvatarHandoff.d.ts.map +1 -1
- package/lib/typescript/commonjs/multi-agent-chat/ChatAgentProfile.d.ts +11 -0
- package/lib/typescript/commonjs/multi-agent-chat/ChatAgentProfile.d.ts.map +1 -0
- package/lib/typescript/commonjs/multi-agent-chat/EditorRail.d.ts.map +1 -1
- package/lib/typescript/commonjs/multi-agent-chat/MultiAgentChatBase.d.ts.map +1 -1
- package/lib/typescript/commonjs/multi-agent-chat/ReplyRow.d.ts.map +1 -1
- package/lib/typescript/commonjs/multi-agent-chat/handoff.d.ts +2 -2
- package/lib/typescript/commonjs/multi-agent-chat/handoff.d.ts.map +1 -1
- package/lib/typescript/commonjs/project-board/CreateTicketDialog.d.ts.map +1 -1
- package/lib/typescript/commonjs/project-board/ProjectBoardBase.d.ts.map +1 -1
- package/lib/typescript/commonjs/project-board/TicketCornerGenieSurface.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/project-board/TicketDetailDialog.d.ts.map +1 -1
- package/lib/typescript/commonjs/project-board/TicketGenieSurface.d.ts.map +1 -1
- package/lib/typescript/commonjs/project-board/TicketPresence.d.ts +17 -0
- package/lib/typescript/commonjs/project-board/TicketPresence.d.ts.map +1 -0
- package/lib/typescript/commonjs/project-board/TicketTokenChart.d.ts +5 -0
- package/lib/typescript/commonjs/project-board/TicketTokenChart.d.ts.map +1 -0
- package/lib/typescript/commonjs/project-board/context.d.ts +2 -0
- package/lib/typescript/commonjs/project-board/context.d.ts.map +1 -1
- package/lib/typescript/commonjs/search/Search.d.ts.map +1 -1
- package/lib/typescript/commonjs/sidebar/SidebarToolbar.d.ts.map +1 -1
- package/lib/typescript/commonjs/text-field/TextField.d.ts.map +1 -1
- package/lib/typescript/module/agent-avatar/AgentAvatar.d.ts +2 -2
- package/lib/typescript/module/agent-avatar/AgentAvatar.d.ts.map +1 -1
- package/lib/typescript/module/agent-avatar/AgentAvatarProvider.d.ts +4 -0
- package/lib/typescript/module/agent-avatar/AgentAvatarProvider.d.ts.map +1 -0
- package/lib/typescript/module/agent-avatar/CharacterAvatar.d.ts +4 -0
- package/lib/typescript/module/agent-avatar/CharacterAvatar.d.ts.map +1 -0
- package/lib/typescript/module/agent-avatar/ProceduralAvatar.d.ts +6 -0
- package/lib/typescript/module/agent-avatar/ProceduralAvatar.d.ts.map +1 -0
- package/lib/typescript/module/agent-avatar/artwork.d.ts +2 -1
- package/lib/typescript/module/agent-avatar/artwork.d.ts.map +1 -1
- package/lib/typescript/module/agent-avatar/avatar-color.d.ts +3 -0
- package/lib/typescript/module/agent-avatar/avatar-color.d.ts.map +1 -0
- package/lib/typescript/module/agent-avatar/character-html.d.ts +4 -0
- package/lib/typescript/module/agent-avatar/character-html.d.ts.map +1 -0
- package/lib/typescript/module/agent-avatar/character-runtime-module.d.ts +2 -0
- package/lib/typescript/module/agent-avatar/character-runtime-module.d.ts.map +1 -0
- package/lib/typescript/module/agent-avatar/character-webview.d.ts +24 -0
- package/lib/typescript/module/agent-avatar/character-webview.d.ts.map +1 -0
- package/lib/typescript/module/agent-avatar/config-character.d.ts +11 -0
- package/lib/typescript/module/agent-avatar/config-character.d.ts.map +1 -0
- package/lib/typescript/module/agent-avatar/context.d.ts +15 -0
- package/lib/typescript/module/agent-avatar/context.d.ts.map +1 -1
- package/lib/typescript/module/agent-avatar/index.d.ts +3 -1
- package/lib/typescript/module/agent-avatar/index.d.ts.map +1 -1
- package/lib/typescript/module/agent-avatar/legacy-contours.d.ts +5 -0
- package/lib/typescript/module/agent-avatar/legacy-contours.d.ts.map +1 -0
- package/lib/typescript/module/agent-avatar/legacy-recipe.d.ts +40 -0
- package/lib/typescript/module/agent-avatar/legacy-recipe.d.ts.map +1 -0
- package/lib/typescript/module/agent-avatar/messages.d.ts +1 -0
- package/lib/typescript/module/agent-avatar/messages.d.ts.map +1 -1
- package/lib/typescript/module/agent-avatar/model.d.ts +3 -0
- package/lib/typescript/module/agent-avatar/model.d.ts.map +1 -1
- package/lib/typescript/module/agent-avatar/types.d.ts +10 -1
- package/lib/typescript/module/agent-avatar/types.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/AgentCreatorBase.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/CharacterControls.d.ts +8 -0
- package/lib/typescript/module/agent-creator/CharacterControls.d.ts.map +1 -0
- package/lib/typescript/module/agent-creator/EmotionPicker.d.ts +12 -1
- package/lib/typescript/module/agent-creator/EmotionPicker.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/ShapeArc.d.ts +11 -2
- package/lib/typescript/module/agent-creator/ShapeArc.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/ShapeSilhouette.d.ts +6 -0
- package/lib/typescript/module/agent-creator/ShapeSilhouette.d.ts.map +1 -0
- package/lib/typescript/module/agent-creator/constants.d.ts +44 -0
- package/lib/typescript/module/agent-creator/constants.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/context.d.ts +9 -0
- package/lib/typescript/module/agent-creator/context.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/messages.d.ts +10 -0
- package/lib/typescript/module/agent-creator/messages.d.ts.map +1 -1
- package/lib/typescript/module/agent-creator/shared.d.ts +1 -1
- package/lib/typescript/module/agent-creator/shared.d.ts.map +1 -1
- package/lib/typescript/module/agent-thinking/AgentThinking.d.ts.map +1 -1
- package/lib/typescript/module/agent-thinking/ThinkingLabel.d.ts +7 -0
- package/lib/typescript/module/agent-thinking/ThinkingLabel.d.ts.map +1 -0
- package/lib/typescript/module/chart-cards/TokensChartCard.d.ts +3 -1
- package/lib/typescript/module/chart-cards/TokensChartCard.d.ts.map +1 -1
- package/lib/typescript/module/locale/translations/ar.d.ts.map +1 -1
- package/lib/typescript/module/locale/translations/bn.d.ts.map +1 -1
- package/lib/typescript/module/locale/translations/ca.d.ts.map +1 -1
- package/lib/typescript/module/locale/translations/de.d.ts.map +1 -1
- package/lib/typescript/module/locale/translations/es.d.ts.map +1 -1
- package/lib/typescript/module/locale/translations/fr.d.ts.map +1 -1
- package/lib/typescript/module/locale/translations/hi.d.ts.map +1 -1
- package/lib/typescript/module/locale/translations/id.d.ts.map +1 -1
- package/lib/typescript/module/locale/translations/it.d.ts.map +1 -1
- package/lib/typescript/module/locale/translations/ja.d.ts.map +1 -1
- package/lib/typescript/module/locale/translations/pt.d.ts.map +1 -1
- package/lib/typescript/module/locale/translations/ru.d.ts.map +1 -1
- package/lib/typescript/module/locale/translations/tr.d.ts.map +1 -1
- package/lib/typescript/module/locale/translations/zh.d.ts.map +1 -1
- package/lib/typescript/module/multi-agent-chat/AvatarHandoff.d.ts.map +1 -1
- package/lib/typescript/module/multi-agent-chat/ChatAgentProfile.d.ts +11 -0
- package/lib/typescript/module/multi-agent-chat/ChatAgentProfile.d.ts.map +1 -0
- package/lib/typescript/module/multi-agent-chat/EditorRail.d.ts.map +1 -1
- package/lib/typescript/module/multi-agent-chat/MultiAgentChatBase.d.ts.map +1 -1
- package/lib/typescript/module/multi-agent-chat/ReplyRow.d.ts.map +1 -1
- package/lib/typescript/module/multi-agent-chat/handoff.d.ts +2 -2
- package/lib/typescript/module/multi-agent-chat/handoff.d.ts.map +1 -1
- package/lib/typescript/module/project-board/CreateTicketDialog.d.ts.map +1 -1
- package/lib/typescript/module/project-board/ProjectBoardBase.d.ts.map +1 -1
- package/lib/typescript/module/project-board/TicketCornerGenieSurface.web.d.ts.map +1 -1
- package/lib/typescript/module/project-board/TicketDetailDialog.d.ts.map +1 -1
- package/lib/typescript/module/project-board/TicketGenieSurface.d.ts.map +1 -1
- package/lib/typescript/module/project-board/TicketPresence.d.ts +17 -0
- package/lib/typescript/module/project-board/TicketPresence.d.ts.map +1 -0
- package/lib/typescript/module/project-board/TicketTokenChart.d.ts +5 -0
- package/lib/typescript/module/project-board/TicketTokenChart.d.ts.map +1 -0
- package/lib/typescript/module/project-board/context.d.ts +2 -0
- package/lib/typescript/module/project-board/context.d.ts.map +1 -1
- package/lib/typescript/module/search/Search.d.ts.map +1 -1
- package/lib/typescript/module/sidebar/SidebarToolbar.d.ts.map +1 -1
- package/lib/typescript/module/text-field/TextField.d.ts.map +1 -1
- package/package.json +8 -3
- package/src/agent-avatar/AgentAvatar.tsx +16 -296
- package/src/agent-avatar/AgentAvatarProvider.tsx +79 -0
- package/src/agent-avatar/CharacterAvatar.tsx +260 -0
- package/src/agent-avatar/ProceduralAvatar.tsx +303 -0
- package/src/agent-avatar/artwork.ts +3 -3
- package/src/agent-avatar/avatar-color.ts +17 -0
- package/src/agent-avatar/character-html.ts +21 -0
- package/src/agent-avatar/character-runtime-module.ts +37 -0
- package/src/agent-avatar/character-webview.ts +24 -0
- package/src/agent-avatar/config-character.ts +40 -0
- package/src/agent-avatar/context.ts +17 -0
- package/src/agent-avatar/index.ts +4 -1
- package/src/agent-avatar/legacy-contours.ts +76 -0
- package/src/agent-avatar/legacy-recipe.ts +123 -0
- package/src/agent-avatar/messages.ts +1 -0
- package/src/agent-avatar/model.ts +5 -0
- package/src/agent-avatar/types.ts +12 -1
- package/src/agent-creator/AgentCreatorBase.tsx +338 -39
- package/src/agent-creator/CharacterControls.tsx +150 -0
- package/src/agent-creator/EmotionPicker.tsx +43 -21
- package/src/agent-creator/ShapeArc.tsx +83 -29
- package/src/agent-creator/ShapeSilhouette.tsx +65 -0
- package/src/agent-creator/constants.ts +30 -0
- package/src/agent-creator/messages.ts +19 -0
- package/src/agent-creator/shared.ts +1 -15
- package/src/agent-thinking/AgentThinking.tsx +7 -70
- package/src/agent-thinking/ThinkingLabel.tsx +74 -0
- package/src/chart-cards/TokensChartCard.tsx +10 -6
- package/src/locale/translations/ar.ts +10 -1
- package/src/locale/translations/bn.ts +10 -1
- package/src/locale/translations/ca.ts +10 -1
- package/src/locale/translations/de.ts +10 -1
- package/src/locale/translations/es.ts +10 -1
- package/src/locale/translations/fr.ts +10 -1
- package/src/locale/translations/hi.ts +10 -1
- package/src/locale/translations/id.ts +10 -1
- package/src/locale/translations/it.ts +10 -1
- package/src/locale/translations/ja.ts +10 -1
- package/src/locale/translations/pt.ts +10 -1
- package/src/locale/translations/ru.ts +10 -1
- package/src/locale/translations/tr.ts +10 -1
- package/src/locale/translations/zh.ts +10 -1
- package/src/multi-agent-chat/AvatarHandoff.tsx +2 -5
- package/src/multi-agent-chat/ChatAgentProfile.tsx +116 -0
- package/src/multi-agent-chat/EditorRail.tsx +2 -0
- package/src/multi-agent-chat/MultiAgentChatBase.tsx +123 -175
- package/src/multi-agent-chat/ReplyRow.tsx +10 -9
- package/src/multi-agent-chat/handoff.ts +4 -4
- package/src/project-board/CreateTicketDialog.tsx +28 -4
- package/src/project-board/ProjectBoardBase.tsx +115 -21
- package/src/project-board/TicketCornerGenieSurface.web.tsx +11 -6
- package/src/project-board/TicketDetailDialog.tsx +5 -4
- package/src/project-board/TicketGenieSurface.tsx +9 -0
- package/src/project-board/TicketGenieSurface.web.tsx +1 -1
- package/src/project-board/TicketPresence.tsx +137 -0
- package/src/project-board/TicketTokenChart.tsx +14 -0
- package/src/project-board/context.ts +2 -0
- package/src/search/Search.tsx +6 -5
- package/src/sidebar/SidebarToolbar.tsx +27 -15
- package/src/text-field/TextField.tsx +12 -7
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { useState, type Ref } from 'react';
|
|
2
|
+
import { Platform, StyleSheet, type View } from 'react-native';
|
|
3
|
+
import { useReducedMotion } from 'react-native-reanimated';
|
|
4
|
+
import { AgentAvatar } from '../agent-avatar';
|
|
5
|
+
import { useMessages } from '../locale/messages';
|
|
6
|
+
import { StyledPressable, StyledView } from '../styles/styled-primitives';
|
|
7
|
+
import { useTheme } from '../theme/use-theme';
|
|
8
|
+
import { Text } from '../typography';
|
|
9
|
+
import type { Agent } from './data';
|
|
10
|
+
import { MULTI_AGENT_CHAT_MESSAGES, formatChatMessage } from './messages';
|
|
11
|
+
|
|
12
|
+
/** One profile target: animated artwork above an intrinsically sized name pill. */
|
|
13
|
+
export function ChatAgentProfile({
|
|
14
|
+
agents,
|
|
15
|
+
avatarRef,
|
|
16
|
+
expanded,
|
|
17
|
+
onPress,
|
|
18
|
+
}: {
|
|
19
|
+
agents: Agent[];
|
|
20
|
+
avatarRef?: Ref<View>;
|
|
21
|
+
expanded: boolean;
|
|
22
|
+
onPress: () => void;
|
|
23
|
+
}) {
|
|
24
|
+
const { messages } = useMessages(MULTI_AGENT_CHAT_MESSAGES);
|
|
25
|
+
const { colors } = useTheme();
|
|
26
|
+
const reduced = useReducedMotion();
|
|
27
|
+
const [pressed, setPressed] = useState(false);
|
|
28
|
+
const [hovered, setHovered] = useState(false);
|
|
29
|
+
const name =
|
|
30
|
+
agents.length === 1
|
|
31
|
+
? agents[0]!.name
|
|
32
|
+
: agents
|
|
33
|
+
.slice(0, 3)
|
|
34
|
+
.map((agent) => agent.label || agent.name)
|
|
35
|
+
.join(' + ');
|
|
36
|
+
const label = name || messages.chooseYourTeammates;
|
|
37
|
+
return (
|
|
38
|
+
<StyledPressable
|
|
39
|
+
accessibilityRole="button"
|
|
40
|
+
accessibilityLabel={
|
|
41
|
+
agents.length === 1
|
|
42
|
+
? formatChatMessage(messages.editAgent, agents[0]!.name)
|
|
43
|
+
: messages.editConversationAgents
|
|
44
|
+
}
|
|
45
|
+
aria-expanded={expanded}
|
|
46
|
+
onPress={onPress}
|
|
47
|
+
onPressIn={() => setPressed(true)}
|
|
48
|
+
onPressOut={() => setPressed(false)}
|
|
49
|
+
onHoverIn={() => setHovered(true)}
|
|
50
|
+
onHoverOut={() => setHovered(false)}
|
|
51
|
+
className={`group/chat-profile relative min-w-0 max-w-full select-none items-center outline-none ${Platform.OS === 'web' ? 'motion-safe:active:scale-95' : ''}`}
|
|
52
|
+
style={
|
|
53
|
+
Platform.OS === 'web'
|
|
54
|
+
? undefined
|
|
55
|
+
: { transform: [{ scale: pressed && !reduced ? 0.95 : 1 }] }
|
|
56
|
+
}
|
|
57
|
+
testID="chat-agent-profile"
|
|
58
|
+
>
|
|
59
|
+
<StyledView
|
|
60
|
+
ref={avatarRef}
|
|
61
|
+
collapsable={false}
|
|
62
|
+
pointerEvents="none"
|
|
63
|
+
aria-hidden
|
|
64
|
+
className="relative z-10 -mb-0.5 size-14"
|
|
65
|
+
style={{ width: 56, height: 56, marginBottom: -2 }}
|
|
66
|
+
>
|
|
67
|
+
{agents.slice(0, 3).map((agent, index) => {
|
|
68
|
+
const single = agents.length === 1;
|
|
69
|
+
const size = single ? 56 : 36;
|
|
70
|
+
return (
|
|
71
|
+
<StyledView
|
|
72
|
+
key={agent.id}
|
|
73
|
+
style={{
|
|
74
|
+
position: 'absolute',
|
|
75
|
+
width: size,
|
|
76
|
+
height: size,
|
|
77
|
+
insetInlineStart: single
|
|
78
|
+
? 0
|
|
79
|
+
: index === 1
|
|
80
|
+
? 20
|
|
81
|
+
: index === 2
|
|
82
|
+
? 10
|
|
83
|
+
: 0,
|
|
84
|
+
top: index === 2 ? 20 : 0,
|
|
85
|
+
}}
|
|
86
|
+
>
|
|
87
|
+
<AgentAvatar config={agent.avatar} size={size} />
|
|
88
|
+
</StyledView>
|
|
89
|
+
);
|
|
90
|
+
})}
|
|
91
|
+
</StyledView>
|
|
92
|
+
<StyledView
|
|
93
|
+
pointerEvents="none"
|
|
94
|
+
className="relative min-w-0 max-w-full items-center justify-center rounded-[14px] px-2.5 py-1"
|
|
95
|
+
>
|
|
96
|
+
<StyledView
|
|
97
|
+
className="absolute inset-0 rounded-[14px] group-focus-visible/chat-profile:ring-2 group-focus-visible/chat-profile:ring-border-focus-ring"
|
|
98
|
+
style={{
|
|
99
|
+
backgroundColor: hovered
|
|
100
|
+
? colors.backgroundTertiary
|
|
101
|
+
: colors.backgroundSecondary,
|
|
102
|
+
borderWidth: StyleSheet.hairlineWidth,
|
|
103
|
+
borderColor: colors.border,
|
|
104
|
+
}}
|
|
105
|
+
/>
|
|
106
|
+
<Text
|
|
107
|
+
numberOfLines={1}
|
|
108
|
+
className="max-w-full truncate text-[16px] leading-5 font-medium text-text-primary"
|
|
109
|
+
>
|
|
110
|
+
{label}
|
|
111
|
+
{agents.length > 3 ? ` +${agents.length - 3}` : ''}
|
|
112
|
+
</Text>
|
|
113
|
+
</StyledView>
|
|
114
|
+
</StyledPressable>
|
|
115
|
+
);
|
|
116
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useEffect, useRef, useState, type ReactNode } from 'react';
|
|
2
|
+
import { Platform } from 'react-native';
|
|
2
3
|
import Animated, {
|
|
3
4
|
Easing,
|
|
4
5
|
runOnJS,
|
|
@@ -47,6 +48,7 @@ export function EditorRail({
|
|
|
47
48
|
);
|
|
48
49
|
return (
|
|
49
50
|
<AnimatedView
|
|
51
|
+
{...(Platform.OS === 'web' && !active ? { inert: true } : {})}
|
|
50
52
|
pointerEvents={active ? 'auto' : 'none'}
|
|
51
53
|
aria-hidden={!active}
|
|
52
54
|
accessibilityElementsHidden={!active}
|
|
@@ -24,6 +24,7 @@ import { Text } from '../typography';
|
|
|
24
24
|
import { AvatarHandoff } from './AvatarHandoff';
|
|
25
25
|
import { ChatDialogFrame, SupportCopy } from './ChatDialogFrame';
|
|
26
26
|
import { ChatSidebar } from './ChatSidebar';
|
|
27
|
+
import { ChatAgentProfile } from './ChatAgentProfile';
|
|
27
28
|
import { useChatComponents } from './context';
|
|
28
29
|
import {
|
|
29
30
|
conversationFor,
|
|
@@ -70,55 +71,6 @@ type Panel =
|
|
|
70
71
|
| 'support'
|
|
71
72
|
| null;
|
|
72
73
|
|
|
73
|
-
function AgentStack({
|
|
74
|
-
agents,
|
|
75
|
-
size = 40,
|
|
76
|
-
nodes,
|
|
77
|
-
}: {
|
|
78
|
-
agents: Agent[];
|
|
79
|
-
size?: number;
|
|
80
|
-
nodes?: AvatarNodes;
|
|
81
|
-
}) {
|
|
82
|
-
return (
|
|
83
|
-
<StyledView
|
|
84
|
-
style={{ width: size, height: size }}
|
|
85
|
-
accessibilityLabel={agents.map((a) => a.name).join(', ')}
|
|
86
|
-
>
|
|
87
|
-
{agents.slice(0, 3).map((agent, i) => (
|
|
88
|
-
<StyledView
|
|
89
|
-
key={agent.id}
|
|
90
|
-
ref={(node: View | null) => {
|
|
91
|
-
if (nodes) {
|
|
92
|
-
if (node) nodes.set(agent.id, node);
|
|
93
|
-
else nodes.delete(agent.id);
|
|
94
|
-
}
|
|
95
|
-
}}
|
|
96
|
-
collapsable={false}
|
|
97
|
-
style={{
|
|
98
|
-
width: agents.length === 1 ? size : size * 0.65,
|
|
99
|
-
height: agents.length === 1 ? size : size * 0.65,
|
|
100
|
-
position: 'absolute',
|
|
101
|
-
left:
|
|
102
|
-
agents.length === 1
|
|
103
|
-
? 0
|
|
104
|
-
: i === 1
|
|
105
|
-
? size * 0.4
|
|
106
|
-
: i === 2
|
|
107
|
-
? size * 0.2
|
|
108
|
-
: 0,
|
|
109
|
-
top: i === 2 ? size * 0.4 : 0,
|
|
110
|
-
}}
|
|
111
|
-
>
|
|
112
|
-
<AgentAvatar
|
|
113
|
-
config={agent.avatar}
|
|
114
|
-
size={agents.length === 1 ? size : size * 0.65}
|
|
115
|
-
label={agent.name}
|
|
116
|
-
/>
|
|
117
|
-
</StyledView>
|
|
118
|
-
))}
|
|
119
|
-
</StyledView>
|
|
120
|
-
);
|
|
121
|
-
}
|
|
122
74
|
/** Shared workspace implementation. Platform bindings select Bloom's existing surfaces only. */
|
|
123
75
|
export function MultiAgentChatBase(props: MultiAgentChatProps) {
|
|
124
76
|
const { messages } = useMessages(MULTI_AGENT_CHAT_MESSAGES);
|
|
@@ -136,7 +88,6 @@ export function MultiAgentChatBase(props: MultiAgentChatProps) {
|
|
|
136
88
|
Dialog,
|
|
137
89
|
ComposerPanel,
|
|
138
90
|
AgentCreator,
|
|
139
|
-
Surface,
|
|
140
91
|
Dropdown: D,
|
|
141
92
|
} = useChatComponents();
|
|
142
93
|
const { colors } = useTheme();
|
|
@@ -145,7 +96,7 @@ export function MultiAgentChatBase(props: MultiAgentChatProps) {
|
|
|
145
96
|
const root = useRef<View>(null),
|
|
146
97
|
pickerAvatars = useRef<AvatarNodes>(new Map()),
|
|
147
98
|
emptyAvatars = useRef<AvatarNodes>(new Map()),
|
|
148
|
-
|
|
99
|
+
profileAvatarRef = useRef<View>(null),
|
|
149
100
|
replyAvatars = useRef<AvatarNodes>(new Map());
|
|
150
101
|
const [handoff, setHandoff] = useState<AvatarHandoffState | null>(null),
|
|
151
102
|
[flightOrigin, setFlightOrigin] = useState<AvatarRect | null>(null);
|
|
@@ -170,7 +121,7 @@ export function MultiAgentChatBase(props: MultiAgentChatProps) {
|
|
|
170
121
|
? emptyAvatars.current.get(id)
|
|
171
122
|
: id === handoff?.responderId
|
|
172
123
|
? replyAvatars.current.get(id)
|
|
173
|
-
: (
|
|
124
|
+
: (profileAvatarRef.current ?? undefined),
|
|
174
125
|
[handoff?.kind, handoff?.responderId],
|
|
175
126
|
);
|
|
176
127
|
const { width } = useWindowDimensions();
|
|
@@ -247,25 +198,28 @@ export function MultiAgentChatBase(props: MultiAgentChatProps) {
|
|
|
247
198
|
setEditor({ ...agent, avatar: { ...agent.avatar } });
|
|
248
199
|
if (compact) open('editor');
|
|
249
200
|
};
|
|
250
|
-
const saveAgent = (
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
201
|
+
const saveAgent = useCallback(
|
|
202
|
+
(agent: Agent) => {
|
|
203
|
+
setEditor(agent);
|
|
204
|
+
update((s) => {
|
|
205
|
+
const previous = s.agents.find((a) => a.id === agent.id);
|
|
206
|
+
return {
|
|
207
|
+
...s,
|
|
208
|
+
agents: previous
|
|
209
|
+
? s.agents.map((a) => (a.id === agent.id ? agent : a))
|
|
210
|
+
: [...s.agents, agent],
|
|
211
|
+
chats: s.chats.map((c) =>
|
|
212
|
+
c.agentIds.length === 1 &&
|
|
213
|
+
c.agentIds[0] === agent.id &&
|
|
214
|
+
(c.title === previous?.name || c.title === previous?.label)
|
|
215
|
+
? { ...c, title: agent.name }
|
|
216
|
+
: c,
|
|
217
|
+
),
|
|
218
|
+
};
|
|
219
|
+
});
|
|
220
|
+
},
|
|
221
|
+
[update],
|
|
222
|
+
);
|
|
269
223
|
const createAgent = () => {
|
|
270
224
|
const agent = {
|
|
271
225
|
id: chatId('agent'),
|
|
@@ -416,18 +370,22 @@ export function MultiAgentChatBase(props: MultiAgentChatProps) {
|
|
|
416
370
|
follow.current = true;
|
|
417
371
|
void replies.send(text, id, avatars.length ? 800 : 0, chat);
|
|
418
372
|
};
|
|
419
|
-
const editPanel =
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
373
|
+
const editPanel = useMemo(
|
|
374
|
+
() =>
|
|
375
|
+
editor && (
|
|
376
|
+
<AgentCreator
|
|
377
|
+
agent={editor}
|
|
378
|
+
onChange={saveAgent}
|
|
379
|
+
voices={voices}
|
|
380
|
+
onPreviewVoice={onPreviewVoice}
|
|
381
|
+
onClose={() => {
|
|
382
|
+
setEditor(null);
|
|
383
|
+
if (panel === 'editor') surface.close();
|
|
384
|
+
}}
|
|
385
|
+
style={{ flex: 1 }}
|
|
386
|
+
/>
|
|
387
|
+
),
|
|
388
|
+
[AgentCreator, editor, saveAgent, voices, onPreviewVoice, panel, surface],
|
|
431
389
|
);
|
|
432
390
|
const sortedChats = useMemo(
|
|
433
391
|
() =>
|
|
@@ -441,7 +399,7 @@ export function MultiAgentChatBase(props: MultiAgentChatProps) {
|
|
|
441
399
|
.includes(query.toLocaleLowerCase()),
|
|
442
400
|
)
|
|
443
401
|
.sort((a, b) => Number(!!b.pinned) - Number(!!a.pinned)),
|
|
444
|
-
[workspace.chats, query],
|
|
402
|
+
[workspace.chats, workspace.agents, query],
|
|
445
403
|
);
|
|
446
404
|
const sidebar = (
|
|
447
405
|
<ChatSidebar
|
|
@@ -580,114 +538,104 @@ export function MultiAgentChatBase(props: MultiAgentChatProps) {
|
|
|
580
538
|
accessibilityLabel={messages.agentConversation}
|
|
581
539
|
className="flex min-h-0 min-w-0 flex-1 flex-col rounded-3xl bg-background-secondary-default"
|
|
582
540
|
>
|
|
583
|
-
<StyledView className="
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
size="sm"
|
|
589
|
-
onPress={() => open('navigation')}
|
|
590
|
-
/>
|
|
591
|
-
)}
|
|
592
|
-
<StyledView className="flex min-w-0 flex-1 flex-row">
|
|
541
|
+
<StyledView className="relative h-[100px] shrink-0">
|
|
542
|
+
<StyledView
|
|
543
|
+
pointerEvents="box-none"
|
|
544
|
+
className="absolute inset-0 flex-row justify-center px-16 pt-1.5"
|
|
545
|
+
>
|
|
593
546
|
<StyledView
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
className="relative z-40 min-w-0 max-w-full rounded-full"
|
|
547
|
+
pointerEvents="box-none"
|
|
548
|
+
className="min-w-0 max-w-full items-center self-start"
|
|
597
549
|
>
|
|
598
|
-
<
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
pointerEvents="none"
|
|
603
|
-
/>
|
|
604
|
-
<StyledPressable
|
|
605
|
-
accessibilityRole="button"
|
|
606
|
-
accessibilityLabel={
|
|
550
|
+
<ChatAgentProfile
|
|
551
|
+
agents={participants}
|
|
552
|
+
avatarRef={profileAvatarRef}
|
|
553
|
+
expanded={
|
|
607
554
|
participants.length === 1
|
|
608
|
-
?
|
|
609
|
-
|
|
610
|
-
participants[0]!.name,
|
|
611
|
-
)
|
|
612
|
-
: messages.editConversationAgents
|
|
555
|
+
? editor?.id === participants[0]!.id
|
|
556
|
+
: panel === 'picker'
|
|
613
557
|
}
|
|
614
558
|
onPress={() =>
|
|
615
559
|
participants.length === 1
|
|
616
560
|
? edit(participants[0]!)
|
|
617
561
|
: chooseAgents(chat?.agentIds)
|
|
618
562
|
}
|
|
619
|
-
|
|
620
|
-
>
|
|
621
|
-
<AgentStack agents={participants} size={20} />
|
|
622
|
-
<Text
|
|
623
|
-
numberOfLines={1}
|
|
624
|
-
className="truncate text-body-2-medium text-text-secondary"
|
|
625
|
-
>
|
|
626
|
-
{participants.length === 1
|
|
627
|
-
? participants[0]!.name
|
|
628
|
-
: participants
|
|
629
|
-
.slice(0, 3)
|
|
630
|
-
.map((a) => a.label || a.name)
|
|
631
|
-
.join(' + ')}
|
|
632
|
-
</Text>
|
|
633
|
-
{participants.length > 3 && (
|
|
634
|
-
<Text className="shrink-0">+{participants.length - 3}</Text>
|
|
635
|
-
)}
|
|
636
|
-
</StyledPressable>
|
|
563
|
+
/>
|
|
637
564
|
</StyledView>
|
|
638
565
|
</StyledView>
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
566
|
+
{phone && (
|
|
567
|
+
<StyledView
|
|
568
|
+
style={{ position: 'absolute', top: 12, insetInlineStart: 12 }}
|
|
569
|
+
>
|
|
570
|
+
<IconButton
|
|
571
|
+
icon={RiMenuLine}
|
|
572
|
+
accessibilityLabel={messages.openConversations}
|
|
573
|
+
size="sm"
|
|
574
|
+
onPress={() => open('navigation')}
|
|
575
|
+
/>
|
|
576
|
+
</StyledView>
|
|
577
|
+
)}
|
|
578
|
+
<StyledView
|
|
579
|
+
className="flex-row items-center gap-2"
|
|
580
|
+
style={{ position: 'absolute', top: 12, insetInlineEnd: 12 }}
|
|
646
581
|
>
|
|
647
|
-
<
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
className="rounded p-1 text-foreground-icon-secondary"
|
|
655
|
-
>
|
|
656
|
-
<RiMoreFill
|
|
657
|
-
width={16}
|
|
658
|
-
height={16}
|
|
659
|
-
fill={colors.textSecondary}
|
|
660
|
-
/>
|
|
661
|
-
</StyledPressable>
|
|
662
|
-
</D.DropdownMenuTrigger>
|
|
663
|
-
<D.DropdownMenuContent
|
|
664
|
-
label={messages.conversationOptions}
|
|
665
|
-
align="end"
|
|
666
|
-
className="rounded-[14px] p-1"
|
|
667
|
-
style={{ borderRadius: 14, padding: 4 }}
|
|
582
|
+
<StyledPressable
|
|
583
|
+
accessibilityRole="button"
|
|
584
|
+
accessibilityLabel={messages.copyConversation}
|
|
585
|
+
onPress={() =>
|
|
586
|
+
chat && void copy(transcript(chat), messages.conversationCopied)
|
|
587
|
+
}
|
|
588
|
+
className="rounded p-1 text-foreground-icon-secondary outline-none focus-visible:ring-2 focus-visible:ring-border-focus-ring"
|
|
668
589
|
>
|
|
669
|
-
<
|
|
670
|
-
{
|
|
671
|
-
|
|
672
|
-
|
|
590
|
+
<RiShare2Line
|
|
591
|
+
width={16}
|
|
592
|
+
height={16}
|
|
593
|
+
fill={colors.textSecondary}
|
|
594
|
+
/>
|
|
595
|
+
</StyledPressable>
|
|
596
|
+
<D.DropdownMenu>
|
|
597
|
+
<D.DropdownMenuTrigger asChild>
|
|
598
|
+
<StyledPressable
|
|
599
|
+
accessibilityRole="button"
|
|
600
|
+
accessibilityLabel={messages.conversationOptions}
|
|
601
|
+
className="rounded p-1 text-foreground-icon-secondary"
|
|
602
|
+
>
|
|
603
|
+
<RiMoreFill
|
|
604
|
+
width={16}
|
|
605
|
+
height={16}
|
|
606
|
+
fill={colors.textSecondary}
|
|
607
|
+
/>
|
|
608
|
+
</StyledPressable>
|
|
609
|
+
</D.DropdownMenuTrigger>
|
|
610
|
+
<D.DropdownMenuContent
|
|
611
|
+
label={messages.conversationOptions}
|
|
612
|
+
align="end"
|
|
613
|
+
className="rounded-[14px] p-1"
|
|
614
|
+
style={{ borderRadius: 14, padding: 4 }}
|
|
615
|
+
>
|
|
616
|
+
<D.DropdownMenuLabel>
|
|
617
|
+
{messages.inThisConversation}
|
|
618
|
+
</D.DropdownMenuLabel>
|
|
619
|
+
{participants.map((agent) => (
|
|
620
|
+
<D.DropdownMenuItem
|
|
621
|
+
key={agent.id}
|
|
622
|
+
onPress={() => edit(agent)}
|
|
623
|
+
leading={<AgentAvatar config={agent.avatar} size={20} />}
|
|
624
|
+
className="px-2 py-1.5 text-body-medium"
|
|
625
|
+
>
|
|
626
|
+
{formatChatMessage(messages.editAgent, agent.name)}
|
|
627
|
+
</D.DropdownMenuItem>
|
|
628
|
+
))}
|
|
673
629
|
<D.DropdownMenuItem
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
leading={<AgentAvatar config={agent.avatar} size={20} />}
|
|
630
|
+
onPress={() => chooseAgents(chat?.agentIds)}
|
|
631
|
+
leading={<RiGroupLine width={16} height={16} />}
|
|
677
632
|
className="px-2 py-1.5 text-body-medium"
|
|
678
633
|
>
|
|
679
|
-
{
|
|
634
|
+
{messages.startAGroupChat}
|
|
680
635
|
</D.DropdownMenuItem>
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
leading={<RiGroupLine width={16} height={16} />}
|
|
685
|
-
className="px-2 py-1.5 text-body-medium"
|
|
686
|
-
>
|
|
687
|
-
{messages.startAGroupChat}
|
|
688
|
-
</D.DropdownMenuItem>
|
|
689
|
-
</D.DropdownMenuContent>
|
|
690
|
-
</D.DropdownMenu>
|
|
636
|
+
</D.DropdownMenuContent>
|
|
637
|
+
</D.DropdownMenu>
|
|
638
|
+
</StyledView>
|
|
691
639
|
</StyledView>
|
|
692
640
|
<ScrollSurface
|
|
693
641
|
scrollRef={scroll}
|
|
@@ -8,12 +8,13 @@ import Animated, {
|
|
|
8
8
|
withTiming,
|
|
9
9
|
} from 'react-native-reanimated';
|
|
10
10
|
import { AgentAvatar } from '../agent-avatar';
|
|
11
|
+
import { ThinkingLabel } from '../agent-thinking/ThinkingLabel';
|
|
11
12
|
import { useTrackEvents } from '../agent-creator/use-track-events';
|
|
12
13
|
import { useIsRtl } from '../hooks/use-is-rtl';
|
|
13
14
|
import { useMessages } from '../locale/messages';
|
|
14
15
|
import { StyledPressable, StyledView } from '../styles/styled-primitives';
|
|
15
16
|
import { useTheme } from '../theme/use-theme';
|
|
16
|
-
import { Text } from '../typography';
|
|
17
|
+
import { Text, TYPE_SCALE } from '../typography';
|
|
17
18
|
import type { Agent } from './data';
|
|
18
19
|
import type { AvatarNodes } from './handoff';
|
|
19
20
|
import { MULTI_AGENT_CHAT_MESSAGES, formatChatMessage } from './messages';
|
|
@@ -83,7 +84,7 @@ export function ReplyHeader({
|
|
|
83
84
|
: formatChatMessage(messages.editAgent, agent.name)
|
|
84
85
|
}
|
|
85
86
|
onPress={onEdit}
|
|
86
|
-
className="my-1 min-w-0 flex-row items-center gap-1 rounded-lg"
|
|
87
|
+
className="my-1 min-w-0 flex-row items-center gap-1 rounded-lg text-start text-body-2-medium text-text-secondary outline-none focus-visible:ring-2 focus-visible:ring-border-focus-ring"
|
|
87
88
|
>
|
|
88
89
|
<AnimatedView
|
|
89
90
|
ref={(node: View | null) => {
|
|
@@ -121,16 +122,16 @@ export function ReplyHeader({
|
|
|
121
122
|
<AnimatedView
|
|
122
123
|
aria-hidden={!thinking}
|
|
123
124
|
role={thinking ? 'status' : undefined}
|
|
124
|
-
style={
|
|
125
|
-
{ position: 'absolute', insetInlineStart: 0, top: 0 },
|
|
126
|
-
status,
|
|
127
|
-
]}
|
|
125
|
+
style={status}
|
|
128
126
|
>
|
|
129
|
-
<
|
|
127
|
+
<ThinkingLabel variant="body-2-medium" color={colors.textSecondary}>
|
|
130
128
|
{messages.thinking}
|
|
131
|
-
</
|
|
129
|
+
</ThinkingLabel>
|
|
132
130
|
</AnimatedView>
|
|
133
|
-
<AnimatedView
|
|
131
|
+
<AnimatedView
|
|
132
|
+
aria-hidden={thinking}
|
|
133
|
+
style={[{ marginTop: -TYPE_SCALE['body-2-medium'].lineHeight }, name]}
|
|
134
|
+
>
|
|
134
135
|
<Text variant="body-2-medium" style={{ color: colors.textSecondary }}>
|
|
135
136
|
{agent.name}
|
|
136
137
|
</Text>
|
|
@@ -139,11 +139,11 @@ export function avatarFlightPoint(
|
|
|
139
139
|
};
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
/**
|
|
143
|
-
export function
|
|
142
|
+
/** Waiting agents merge into the center of the measured header artwork. */
|
|
143
|
+
export function profileFlightTarget(avatar: AvatarRect): AvatarRect {
|
|
144
144
|
return {
|
|
145
|
-
x:
|
|
146
|
-
y:
|
|
145
|
+
x: avatar.x + (avatar.width - 14) / 2,
|
|
146
|
+
y: avatar.y + (avatar.height - 14) / 2,
|
|
147
147
|
width: 14,
|
|
148
148
|
height: 14,
|
|
149
149
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { useRef, useState } from 'react';
|
|
2
|
-
import type
|
|
1
|
+
import { useRef, useState, type ComponentType, type ReactNode } from 'react';
|
|
2
|
+
import { Platform, ScrollView, useWindowDimensions, type ScrollViewProps, type TextInput } from 'react-native';
|
|
3
|
+
import { styled } from 'react-native-css';
|
|
3
4
|
import { useDialogControl } from '../dialog/context';
|
|
4
5
|
import { useMessages } from '../locale/messages';
|
|
5
6
|
import { Switch } from '../switch';
|
|
@@ -34,6 +35,29 @@ const PRIORITY_STYLES = {
|
|
|
34
35
|
High: 'bg-status-orange-background text-status-orange-text',
|
|
35
36
|
Urgent: 'bg-status-rose-background text-status-rose-text',
|
|
36
37
|
};
|
|
38
|
+
const ScrollBodyBase: ComponentType<Pick<ScrollViewProps, 'style' | 'contentContainerStyle'>> = ScrollView;
|
|
39
|
+
const StyledScrollView: ComponentType<ScrollViewProps> = styled(ScrollBodyBase, { className: 'style' });
|
|
40
|
+
|
|
41
|
+
function TicketFormBody({ children }: { children: ReactNode }) {
|
|
42
|
+
const { height } = useWindowDimensions();
|
|
43
|
+
if (Platform.OS === 'web') return (
|
|
44
|
+
<View className="max-h-[calc(100dvh-56px)] overflow-y-auto rounded-3xl bg-background-primary-default p-4 outline-none">
|
|
45
|
+
{children}
|
|
46
|
+
</View>
|
|
47
|
+
);
|
|
48
|
+
return (
|
|
49
|
+
<StyledScrollView
|
|
50
|
+
className="rounded-3xl bg-background-primary-default"
|
|
51
|
+
testID="project-board-create-scroll"
|
|
52
|
+
style={{ maxHeight: height - 56, flexGrow: 0, flexShrink: 1 }}
|
|
53
|
+
contentContainerStyle={{ padding: 16 }}
|
|
54
|
+
keyboardShouldPersistTaps="handled"
|
|
55
|
+
keyboardDismissMode="interactive"
|
|
56
|
+
>
|
|
57
|
+
{children}
|
|
58
|
+
</StyledScrollView>
|
|
59
|
+
);
|
|
60
|
+
}
|
|
37
61
|
export function CreateTicketDialog({
|
|
38
62
|
title: boardTitle,
|
|
39
63
|
initialColumnId,
|
|
@@ -140,7 +164,7 @@ export function CreateTicketDialog({
|
|
|
140
164
|
style={{ width: '100%' }}
|
|
141
165
|
>
|
|
142
166
|
<TicketGenieSurface>
|
|
143
|
-
<
|
|
167
|
+
<TicketFormBody>
|
|
144
168
|
<View className="flex flex-col gap-12">
|
|
145
169
|
<View className="flex flex-col gap-2.5">
|
|
146
170
|
<View className="flex items-start justify-between gap-3">
|
|
@@ -365,7 +389,7 @@ export function CreateTicketDialog({
|
|
|
365
389
|
</View>
|
|
366
390
|
</View>
|
|
367
391
|
</View>
|
|
368
|
-
</
|
|
392
|
+
</TicketFormBody>
|
|
369
393
|
</TicketGenieSurface>
|
|
370
394
|
</View>
|
|
371
395
|
</Dialog>
|