2
0
Эх сурвалжийг харах

Add choice to share with organization or publicly (#4899)

Matt Rubens 6 сар өмнө
parent
commit
b6bbb1e95b
43 өөрчлөгдсөн 364 нэмэгдсэн , 113 устгасан
  1. 2 2
      packages/cloud/src/CloudService.ts
  2. 10 10
      packages/cloud/src/ShareService.ts
  3. 49 35
      packages/cloud/src/__tests__/ShareService.test.ts
  4. 2 0
      packages/types/src/cloud.ts
  5. 22 7
      src/core/webview/webviewMessageHandler.ts
  6. 7 2
      src/i18n/locales/ca/common.json
  7. 7 2
      src/i18n/locales/de/common.json
  8. 6 1
      src/i18n/locales/en/common.json
  9. 7 2
      src/i18n/locales/es/common.json
  10. 7 2
      src/i18n/locales/fr/common.json
  11. 7 2
      src/i18n/locales/hi/common.json
  12. 7 2
      src/i18n/locales/id/common.json
  13. 7 2
      src/i18n/locales/it/common.json
  14. 7 2
      src/i18n/locales/ja/common.json
  15. 7 2
      src/i18n/locales/ko/common.json
  16. 7 2
      src/i18n/locales/nl/common.json
  17. 7 2
      src/i18n/locales/pl/common.json
  18. 7 2
      src/i18n/locales/pt-BR/common.json
  19. 7 2
      src/i18n/locales/ru/common.json
  20. 7 2
      src/i18n/locales/tr/common.json
  21. 7 2
      src/i18n/locales/vi/common.json
  22. 7 2
      src/i18n/locales/zh-CN/common.json
  23. 7 2
      src/i18n/locales/zh-TW/common.json
  24. 1 0
      src/shared/WebviewMessage.ts
  25. 63 6
      webview-ui/src/components/chat/TaskActions.tsx
  26. 5 1
      webview-ui/src/i18n/locales/ca/chat.json
  27. 5 1
      webview-ui/src/i18n/locales/de/chat.json
  28. 5 1
      webview-ui/src/i18n/locales/en/chat.json
  29. 5 1
      webview-ui/src/i18n/locales/es/chat.json
  30. 5 1
      webview-ui/src/i18n/locales/fr/chat.json
  31. 5 1
      webview-ui/src/i18n/locales/hi/chat.json
  32. 5 1
      webview-ui/src/i18n/locales/id/chat.json
  33. 5 1
      webview-ui/src/i18n/locales/it/chat.json
  34. 5 1
      webview-ui/src/i18n/locales/ja/chat.json
  35. 5 1
      webview-ui/src/i18n/locales/ko/chat.json
  36. 5 1
      webview-ui/src/i18n/locales/nl/chat.json
  37. 5 1
      webview-ui/src/i18n/locales/pl/chat.json
  38. 5 1
      webview-ui/src/i18n/locales/pt-BR/chat.json
  39. 5 1
      webview-ui/src/i18n/locales/ru/chat.json
  40. 5 1
      webview-ui/src/i18n/locales/tr/chat.json
  41. 5 1
      webview-ui/src/i18n/locales/vi/chat.json
  42. 5 1
      webview-ui/src/i18n/locales/zh-CN/chat.json
  43. 5 1
      webview-ui/src/i18n/locales/zh-TW/chat.json

+ 2 - 2
packages/cloud/src/CloudService.ts

@@ -138,9 +138,9 @@ export class CloudService {
 
 
 	// ShareService
 	// ShareService
 
 
-	public async shareTask(taskId: string): Promise<boolean> {
+	public async shareTask(taskId: string, visibility: "organization" | "public" = "organization") {
 		this.ensureInitialized()
 		this.ensureInitialized()
-		return this.shareService!.shareTask(taskId)
+		return this.shareService!.shareTask(taskId, visibility)
 	}
 	}
 
 
 	public async canShareTask(): Promise<boolean> {
 	public async canShareTask(): Promise<boolean> {

+ 10 - 10
packages/cloud/src/ShareService.ts

@@ -7,6 +7,8 @@ import type { AuthService } from "./AuthService"
 import type { SettingsService } from "./SettingsService"
 import type { SettingsService } from "./SettingsService"
 import { getUserAgent } from "./utils"
 import { getUserAgent } from "./utils"
 
 
+export type ShareVisibility = "organization" | "public"
+
 export class ShareService {
 export class ShareService {
 	private authService: AuthService
 	private authService: AuthService
 	private settingsService: SettingsService
 	private settingsService: SettingsService
@@ -19,19 +21,19 @@ export class ShareService {
 	}
 	}
 
 
 	/**
 	/**
-	 * Share a task: Create link and copy to clipboard
-	 * Returns true if successful, false if failed
+	 * Share a task with specified visibility
+	 * Returns the share response data
 	 */
 	 */
-	async shareTask(taskId: string): Promise<boolean> {
+	async shareTask(taskId: string, visibility: ShareVisibility = "organization") {
 		try {
 		try {
 			const sessionToken = this.authService.getSessionToken()
 			const sessionToken = this.authService.getSessionToken()
 			if (!sessionToken) {
 			if (!sessionToken) {
-				return false
+				throw new Error("Authentication required")
 			}
 			}
 
 
 			const response = await axios.post(
 			const response = await axios.post(
 				`${getRooCodeApiUrl()}/api/extension/share`,
 				`${getRooCodeApiUrl()}/api/extension/share`,
-				{ taskId },
+				{ taskId, visibility },
 				{
 				{
 					headers: {
 					headers: {
 						"Content-Type": "application/json",
 						"Content-Type": "application/json",
@@ -47,14 +49,12 @@ export class ShareService {
 			if (data.success && data.shareUrl) {
 			if (data.success && data.shareUrl) {
 				// Copy to clipboard
 				// Copy to clipboard
 				await vscode.env.clipboard.writeText(data.shareUrl)
 				await vscode.env.clipboard.writeText(data.shareUrl)
-				return true
-			} else {
-				this.log("[share] Share failed:", data.error)
-				return false
 			}
 			}
+
+			return data
 		} catch (error) {
 		} catch (error) {
 			this.log("[share] Error sharing task:", error)
 			this.log("[share] Error sharing task:", error)
-			return false
+			throw error
 		}
 		}
 	}
 	}
 
 

+ 49 - 35
packages/cloud/src/__tests__/ShareService.test.ts

@@ -17,6 +17,7 @@ vi.mock("vscode", () => ({
 	window: {
 	window: {
 		showInformationMessage: vi.fn(),
 		showInformationMessage: vi.fn(),
 		showErrorMessage: vi.fn(),
 		showErrorMessage: vi.fn(),
+		showQuickPick: vi.fn(),
 	},
 	},
 	env: {
 	env: {
 		clipboard: {
 		clipboard: {
@@ -68,7 +69,7 @@ describe("ShareService", () => {
 	})
 	})
 
 
 	describe("shareTask", () => {
 	describe("shareTask", () => {
-		it("should share task and copy to clipboard", async () => {
+		it("should share task with organization visibility and copy to clipboard", async () => {
 			const mockResponse = {
 			const mockResponse = {
 				data: {
 				data: {
 					success: true,
 					success: true,
@@ -76,16 +77,16 @@ describe("ShareService", () => {
 				},
 				},
 			}
 			}
 
 
-			;(mockAuthService.hasActiveSession as any).mockReturnValue(true)
 			;(mockAuthService.getSessionToken as any).mockReturnValue("session-token")
 			;(mockAuthService.getSessionToken as any).mockReturnValue("session-token")
 			mockedAxios.post.mockResolvedValue(mockResponse)
 			mockedAxios.post.mockResolvedValue(mockResponse)
 
 
-			const result = await shareService.shareTask("task-123")
+			const result = await shareService.shareTask("task-123", "organization")
 
 
-			expect(result).toBe(true)
+			expect(result.success).toBe(true)
+			expect(result.shareUrl).toBe("https://app.roocode.com/share/abc123")
 			expect(mockedAxios.post).toHaveBeenCalledWith(
 			expect(mockedAxios.post).toHaveBeenCalledWith(
 				"https://app.roocode.com/api/extension/share",
 				"https://app.roocode.com/api/extension/share",
-				{ taskId: "task-123" },
+				{ taskId: "task-123", visibility: "organization" },
 				{
 				{
 					headers: {
 					headers: {
 						"Content-Type": "application/json",
 						"Content-Type": "application/json",
@@ -97,63 +98,76 @@ describe("ShareService", () => {
 			expect(vscode.env.clipboard.writeText).toHaveBeenCalledWith("https://app.roocode.com/share/abc123")
 			expect(vscode.env.clipboard.writeText).toHaveBeenCalledWith("https://app.roocode.com/share/abc123")
 		})
 		})
 
 
-		it("should handle API error response", async () => {
+		it("should share task with public visibility", async () => {
 			const mockResponse = {
 			const mockResponse = {
 				data: {
 				data: {
-					success: false,
-					error: "Task not found",
+					success: true,
+					shareUrl: "https://app.roocode.com/share/abc123",
 				},
 				},
 			}
 			}
 
 
-			;(mockAuthService.hasActiveSession as any).mockReturnValue(true)
 			;(mockAuthService.getSessionToken as any).mockReturnValue("session-token")
 			;(mockAuthService.getSessionToken as any).mockReturnValue("session-token")
 			mockedAxios.post.mockResolvedValue(mockResponse)
 			mockedAxios.post.mockResolvedValue(mockResponse)
 
 
-			const result = await shareService.shareTask("task-123")
+			const result = await shareService.shareTask("task-123", "public")
 
 
-			expect(result).toBe(false)
+			expect(result.success).toBe(true)
+			expect(mockedAxios.post).toHaveBeenCalledWith(
+				"https://app.roocode.com/api/extension/share",
+				{ taskId: "task-123", visibility: "public" },
+				expect.any(Object),
+			)
 		})
 		})
 
 
-		it("should handle authentication errors", async () => {
-			;(mockAuthService.hasActiveSession as any).mockReturnValue(false)
+		it("should default to organization visibility when not specified", async () => {
+			const mockResponse = {
+				data: {
+					success: true,
+					shareUrl: "https://app.roocode.com/share/abc123",
+				},
+			}
+
+			;(mockAuthService.getSessionToken as any).mockReturnValue("session-token")
+			mockedAxios.post.mockResolvedValue(mockResponse)
 
 
 			const result = await shareService.shareTask("task-123")
 			const result = await shareService.shareTask("task-123")
 
 
-			expect(result).toBe(false)
-			expect(mockedAxios.post).not.toHaveBeenCalled()
+			expect(result.success).toBe(true)
+			expect(mockedAxios.post).toHaveBeenCalledWith(
+				"https://app.roocode.com/api/extension/share",
+				{ taskId: "task-123", visibility: "organization" },
+				expect.any(Object),
+			)
 		})
 		})
 
 
-		it("should handle 403 error for disabled sharing", async () => {
-			;(mockAuthService.hasActiveSession as any).mockReturnValue(true)
-			;(mockAuthService.getSessionToken as any).mockReturnValue("session-token")
-
-			const error = {
-				isAxiosError: true,
-				response: {
-					status: 403,
-					data: {
-						error: "Task sharing is not enabled for this organization",
-					},
+		it("should handle API error response", async () => {
+			const mockResponse = {
+				data: {
+					success: false,
+					error: "Task not found",
 				},
 				},
 			}
 			}
 
 
-			mockedAxios.isAxiosError.mockReturnValue(true)
-			mockedAxios.post.mockRejectedValue(error)
+			;(mockAuthService.getSessionToken as any).mockReturnValue("session-token")
+			mockedAxios.post.mockResolvedValue(mockResponse)
 
 
-			const result = await shareService.shareTask("task-123")
+			const result = await shareService.shareTask("task-123", "organization")
 
 
-			expect(result).toBe(false)
+			expect(result.success).toBe(false)
+			expect(result.error).toBe("Task not found")
+		})
+
+		it("should handle authentication errors", async () => {
+			;(mockAuthService.getSessionToken as any).mockReturnValue(null)
+
+			await expect(shareService.shareTask("task-123", "organization")).rejects.toThrow("Authentication required")
 		})
 		})
 
 
 		it("should handle unexpected errors", async () => {
 		it("should handle unexpected errors", async () => {
-			;(mockAuthService.hasActiveSession as any).mockReturnValue(true)
 			;(mockAuthService.getSessionToken as any).mockReturnValue("session-token")
 			;(mockAuthService.getSessionToken as any).mockReturnValue("session-token")
-
 			mockedAxios.post.mockRejectedValue(new Error("Network error"))
 			mockedAxios.post.mockRejectedValue(new Error("Network error"))
 
 
-			const result = await shareService.shareTask("task-123")
-
-			expect(result).toBe(false)
+			await expect(shareService.shareTask("task-123", "organization")).rejects.toThrow("Network error")
 		})
 		})
 	})
 	})
 
 

+ 2 - 0
packages/types/src/cloud.ts

@@ -139,6 +139,8 @@ export const shareResponseSchema = z.object({
 	success: z.boolean(),
 	success: z.boolean(),
 	shareUrl: z.string().optional(),
 	shareUrl: z.string().optional(),
 	error: z.string().optional(),
 	error: z.string().optional(),
+	isNewShare: z.boolean().optional(),
+	manageUrl: z.string().optional(),
 })
 })
 
 
 export type ShareResponse = z.infer<typeof shareResponseSchema>
 export type ShareResponse = z.infer<typeof shareResponseSchema>

+ 22 - 7
src/core/webview/webviewMessageHandler.ts

@@ -233,16 +233,31 @@ export const webviewMessageHandler = async (
 			}
 			}
 
 
 			try {
 			try {
-				const success = await CloudService.instance.shareTask(shareTaskId)
-				if (success) {
-					// Show success message
-					vscode.window.showInformationMessage(t("common:info.share_link_copied"))
+				const visibility = message.visibility || "organization"
+				const result = await CloudService.instance.shareTask(shareTaskId, visibility)
+
+				if (result.success && result.shareUrl) {
+					// Show success notification
+					const messageKey =
+						visibility === "public"
+							? "common:info.public_share_link_copied"
+							: "common:info.organization_share_link_copied"
+					vscode.window.showInformationMessage(t(messageKey))
 				} else {
 				} else {
-					// Show generic failure message
-					vscode.window.showErrorMessage(t("common:errors.share_task_failed"))
+					// Handle error
+					const errorMessage = result.error || "Failed to create share link"
+					if (errorMessage.includes("Authentication")) {
+						vscode.window.showErrorMessage(t("common:errors.share_auth_required"))
+					} else if (errorMessage.includes("sharing is not enabled")) {
+						vscode.window.showErrorMessage(t("common:errors.share_not_enabled"))
+					} else if (errorMessage.includes("not found")) {
+						vscode.window.showErrorMessage(t("common:errors.share_task_not_found"))
+					} else {
+						vscode.window.showErrorMessage(errorMessage)
+					}
 				}
 				}
 			} catch (error) {
 			} catch (error) {
-				// Show generic failure message
+				provider.log(`[shareCurrentTask] Unexpected error: ${error}`)
 				vscode.window.showErrorMessage(t("common:errors.share_task_failed"))
 				vscode.window.showErrorMessage(t("common:errors.share_task_failed"))
 			}
 			}
 			break
 			break

+ 7 - 2
src/i18n/locales/ca/common.json

@@ -63,7 +63,10 @@
 		"condense_handler_invalid": "El gestor de l'API per condensar el context no és vàlid",
 		"condense_handler_invalid": "El gestor de l'API per condensar el context no és vàlid",
 		"condense_context_grew": "La mida del context ha augmentat durant la condensació; s'omet aquest intent",
 		"condense_context_grew": "La mida del context ha augmentat durant la condensació; s'omet aquest intent",
 		"share_task_failed": "Ha fallat compartir la tasca. Si us plau, torna-ho a provar.",
 		"share_task_failed": "Ha fallat compartir la tasca. Si us plau, torna-ho a provar.",
-		"share_no_active_task": "No hi ha cap tasca activa per compartir"
+		"share_no_active_task": "No hi ha cap tasca activa per compartir",
+		"share_auth_required": "Es requereix autenticació. Si us plau, inicia sessió per compartir tasques.",
+		"share_not_enabled": "La compartició de tasques no està habilitada per a aquesta organització.",
+		"share_task_not_found": "Tasca no trobada o accés denegat."
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "No s'ha seleccionat contingut de terminal",
 		"no_terminal_content": "No s'ha seleccionat contingut de terminal",
@@ -78,7 +81,9 @@
 		"settings_imported": "Configuració importada correctament.",
 		"settings_imported": "Configuració importada correctament.",
 		"share_link_copied": "Enllaç de compartició copiat al portapapers",
 		"share_link_copied": "Enllaç de compartició copiat al portapapers",
 		"image_copied_to_clipboard": "URI de dades de la imatge copiada al portapapers",
 		"image_copied_to_clipboard": "URI de dades de la imatge copiada al portapapers",
-		"image_saved": "Imatge desada a {{path}}"
+		"image_saved": "Imatge desada a {{path}}",
+		"organization_share_link_copied": "Enllaç de compartició d'organització copiat al porta-retalls!",
+		"public_share_link_copied": "Enllaç de compartició pública copiat al porta-retalls!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "Sí",
 		"yes": "Sí",

+ 7 - 2
src/i18n/locales/de/common.json

@@ -59,7 +59,10 @@
 		"condense_handler_invalid": "API-Handler zum Verdichten des Kontexts ist ungültig",
 		"condense_handler_invalid": "API-Handler zum Verdichten des Kontexts ist ungültig",
 		"condense_context_grew": "Kontextgröße ist während der Verdichtung gewachsen; dieser Versuch wird übersprungen",
 		"condense_context_grew": "Kontextgröße ist während der Verdichtung gewachsen; dieser Versuch wird übersprungen",
 		"share_task_failed": "Teilen der Aufgabe fehlgeschlagen. Bitte versuche es erneut.",
 		"share_task_failed": "Teilen der Aufgabe fehlgeschlagen. Bitte versuche es erneut.",
-		"share_no_active_task": "Keine aktive Aufgabe zum Teilen"
+		"share_no_active_task": "Keine aktive Aufgabe zum Teilen",
+		"share_auth_required": "Authentifizierung erforderlich. Bitte melde dich an, um Aufgaben zu teilen.",
+		"share_not_enabled": "Aufgabenfreigabe ist für diese Organisation nicht aktiviert.",
+		"share_task_not_found": "Aufgabe nicht gefunden oder Zugriff verweigert."
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "Kein Terminal-Inhalt ausgewählt",
 		"no_terminal_content": "Kein Terminal-Inhalt ausgewählt",
@@ -74,7 +77,9 @@
 		"settings_imported": "Einstellungen erfolgreich importiert.",
 		"settings_imported": "Einstellungen erfolgreich importiert.",
 		"share_link_copied": "Share-Link in die Zwischenablage kopiert",
 		"share_link_copied": "Share-Link in die Zwischenablage kopiert",
 		"image_copied_to_clipboard": "Bild-Daten-URI in die Zwischenablage kopiert",
 		"image_copied_to_clipboard": "Bild-Daten-URI in die Zwischenablage kopiert",
-		"image_saved": "Bild gespeichert unter {{path}}"
+		"image_saved": "Bild gespeichert unter {{path}}",
+		"organization_share_link_copied": "Organisations-Freigabelink in die Zwischenablage kopiert!",
+		"public_share_link_copied": "Öffentlicher Freigabelink in die Zwischenablage kopiert!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "Ja",
 		"yes": "Ja",

+ 6 - 1
src/i18n/locales/en/common.json

@@ -59,7 +59,10 @@
 		"condense_handler_invalid": "API handler for condensing context is invalid",
 		"condense_handler_invalid": "API handler for condensing context is invalid",
 		"condense_context_grew": "Context size increased during condensing; skipping this attempt",
 		"condense_context_grew": "Context size increased during condensing; skipping this attempt",
 		"share_task_failed": "Failed to share task. Please try again.",
 		"share_task_failed": "Failed to share task. Please try again.",
-		"share_no_active_task": "No active task to share"
+		"share_no_active_task": "No active task to share",
+		"share_auth_required": "Authentication required. Please sign in to share tasks.",
+		"share_not_enabled": "Task sharing is not enabled for this organization.",
+		"share_task_not_found": "Task not found or access denied."
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "No terminal content selected",
 		"no_terminal_content": "No terminal content selected",
@@ -73,6 +76,8 @@
 		"default_storage_path": "Reverted to using default storage path",
 		"default_storage_path": "Reverted to using default storage path",
 		"settings_imported": "Settings imported successfully.",
 		"settings_imported": "Settings imported successfully.",
 		"share_link_copied": "Share link copied to clipboard",
 		"share_link_copied": "Share link copied to clipboard",
+		"organization_share_link_copied": "Organization share link copied to clipboard!",
+		"public_share_link_copied": "Public share link copied to clipboard!",
 		"image_copied_to_clipboard": "Image data URI copied to clipboard",
 		"image_copied_to_clipboard": "Image data URI copied to clipboard",
 		"image_saved": "Image saved to {{path}}"
 		"image_saved": "Image saved to {{path}}"
 	},
 	},

+ 7 - 2
src/i18n/locales/es/common.json

@@ -59,7 +59,10 @@
 		"condense_handler_invalid": "El manejador de API para condensar el contexto no es válido",
 		"condense_handler_invalid": "El manejador de API para condensar el contexto no es válido",
 		"condense_context_grew": "El tamaño del contexto aumentó durante la condensación; se omite este intento",
 		"condense_context_grew": "El tamaño del contexto aumentó durante la condensación; se omite este intento",
 		"share_task_failed": "Error al compartir la tarea. Por favor, inténtalo de nuevo.",
 		"share_task_failed": "Error al compartir la tarea. Por favor, inténtalo de nuevo.",
-		"share_no_active_task": "No hay tarea activa para compartir"
+		"share_no_active_task": "No hay tarea activa para compartir",
+		"share_auth_required": "Se requiere autenticación. Por favor, inicia sesión para compartir tareas.",
+		"share_not_enabled": "La compartición de tareas no está habilitada para esta organización.",
+		"share_task_not_found": "Tarea no encontrada o acceso denegado."
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "No hay contenido de terminal seleccionado",
 		"no_terminal_content": "No hay contenido de terminal seleccionado",
@@ -74,7 +77,9 @@
 		"settings_imported": "Configuración importada correctamente.",
 		"settings_imported": "Configuración importada correctamente.",
 		"share_link_copied": "Enlace de compartir copiado al portapapeles",
 		"share_link_copied": "Enlace de compartir copiado al portapapeles",
 		"image_copied_to_clipboard": "URI de datos de imagen copiada al portapapeles",
 		"image_copied_to_clipboard": "URI de datos de imagen copiada al portapapeles",
-		"image_saved": "Imagen guardada en {{path}}"
+		"image_saved": "Imagen guardada en {{path}}",
+		"organization_share_link_copied": "¡Enlace de compartición de organización copiado al portapapeles!",
+		"public_share_link_copied": "¡Enlace de compartición pública copiado al portapapeles!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "Sí",
 		"yes": "Sí",

+ 7 - 2
src/i18n/locales/fr/common.json

@@ -59,7 +59,10 @@
 		"condense_handler_invalid": "Le gestionnaire d'API pour condenser le contexte est invalide",
 		"condense_handler_invalid": "Le gestionnaire d'API pour condenser le contexte est invalide",
 		"condense_context_grew": "La taille du contexte a augmenté pendant la condensation ; cette tentative est ignorée",
 		"condense_context_grew": "La taille du contexte a augmenté pendant la condensation ; cette tentative est ignorée",
 		"share_task_failed": "Échec du partage de la tâche. Veuillez réessayer.",
 		"share_task_failed": "Échec du partage de la tâche. Veuillez réessayer.",
-		"share_no_active_task": "Aucune tâche active à partager"
+		"share_no_active_task": "Aucune tâche active à partager",
+		"share_auth_required": "Authentification requise. Veuillez vous connecter pour partager des tâches.",
+		"share_not_enabled": "Le partage de tâches n'est pas activé pour cette organisation.",
+		"share_task_not_found": "Tâche non trouvée ou accès refusé."
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "Aucun contenu de terminal sélectionné",
 		"no_terminal_content": "Aucun contenu de terminal sélectionné",
@@ -74,7 +77,9 @@
 		"settings_imported": "Paramètres importés avec succès.",
 		"settings_imported": "Paramètres importés avec succès.",
 		"share_link_copied": "Lien de partage copié dans le presse-papiers",
 		"share_link_copied": "Lien de partage copié dans le presse-papiers",
 		"image_copied_to_clipboard": "URI de données d'image copiée dans le presse-papiers",
 		"image_copied_to_clipboard": "URI de données d'image copiée dans le presse-papiers",
-		"image_saved": "Image enregistrée dans {{path}}"
+		"image_saved": "Image enregistrée dans {{path}}",
+		"organization_share_link_copied": "Lien de partage d'organisation copié dans le presse-papiers !",
+		"public_share_link_copied": "Lien de partage public copié dans le presse-papiers !"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "Oui",
 		"yes": "Oui",

+ 7 - 2
src/i18n/locales/hi/common.json

@@ -59,7 +59,10 @@
 		"condense_handler_invalid": "संदर्भ को संक्षिप्त करने के लिए API हैंडलर अमान्य है",
 		"condense_handler_invalid": "संदर्भ को संक्षिप्त करने के लिए API हैंडलर अमान्य है",
 		"condense_context_grew": "संक्षिप्तीकरण के दौरान संदर्भ का आकार बढ़ गया; इस प्रयास को छोड़ा जा रहा है",
 		"condense_context_grew": "संक्षिप्तीकरण के दौरान संदर्भ का आकार बढ़ गया; इस प्रयास को छोड़ा जा रहा है",
 		"share_task_failed": "कार्य साझा करने में विफल। कृपया पुनः प्रयास करें।",
 		"share_task_failed": "कार्य साझा करने में विफल। कृपया पुनः प्रयास करें।",
-		"share_no_active_task": "साझा करने के लिए कोई सक्रिय कार्य नहीं"
+		"share_no_active_task": "साझा करने के लिए कोई सक्रिय कार्य नहीं",
+		"share_auth_required": "प्रमाणीकरण आवश्यक है। कार्य साझा करने के लिए कृपया साइन इन करें।",
+		"share_not_enabled": "इस संगठन के लिए कार्य साझाकरण सक्षम नहीं है।",
+		"share_task_not_found": "कार्य नहीं मिला या पहुंच अस्वीकृत।"
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "कोई टर्मिनल सामग्री चयनित नहीं",
 		"no_terminal_content": "कोई टर्मिनल सामग्री चयनित नहीं",
@@ -74,7 +77,9 @@
 		"settings_imported": "सेटिंग्स सफलतापूर्वक इम्पोर्ट की गईं।",
 		"settings_imported": "सेटिंग्स सफलतापूर्वक इम्पोर्ट की गईं।",
 		"share_link_copied": "साझा लिंक क्लिपबोर्ड पर कॉपी किया गया",
 		"share_link_copied": "साझा लिंक क्लिपबोर्ड पर कॉपी किया गया",
 		"image_copied_to_clipboard": "छवि डेटा URI क्लिपबोर्ड में कॉपी की गई",
 		"image_copied_to_clipboard": "छवि डेटा URI क्लिपबोर्ड में कॉपी की गई",
-		"image_saved": "छवि {{path}} में सहेजी गई"
+		"image_saved": "छवि {{path}} में सहेजी गई",
+		"organization_share_link_copied": "संगठन साझाकरण लिंक क्लिपबोर्ड में कॉपी किया गया!",
+		"public_share_link_copied": "सार्वजनिक साझाकरण लिंक क्लिपबोर्ड में कॉपी किया गया!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "हां",
 		"yes": "हां",

+ 7 - 2
src/i18n/locales/id/common.json

@@ -59,7 +59,10 @@
 		"condense_handler_invalid": "Handler API untuk mengompres konteks tidak valid",
 		"condense_handler_invalid": "Handler API untuk mengompres konteks tidak valid",
 		"condense_context_grew": "Ukuran konteks bertambah saat mengompres; melewati percobaan ini",
 		"condense_context_grew": "Ukuran konteks bertambah saat mengompres; melewati percobaan ini",
 		"share_task_failed": "Gagal membagikan tugas. Silakan coba lagi.",
 		"share_task_failed": "Gagal membagikan tugas. Silakan coba lagi.",
-		"share_no_active_task": "Tidak ada tugas aktif untuk dibagikan"
+		"share_no_active_task": "Tidak ada tugas aktif untuk dibagikan",
+		"share_auth_required": "Autentikasi diperlukan. Silakan masuk untuk berbagi tugas.",
+		"share_not_enabled": "Berbagi tugas tidak diaktifkan untuk organisasi ini.",
+		"share_task_not_found": "Tugas tidak ditemukan atau akses ditolak."
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "Tidak ada konten terminal yang dipilih",
 		"no_terminal_content": "Tidak ada konten terminal yang dipilih",
@@ -74,7 +77,9 @@
 		"settings_imported": "Pengaturan berhasil diimpor.",
 		"settings_imported": "Pengaturan berhasil diimpor.",
 		"share_link_copied": "Link bagikan disalin ke clipboard",
 		"share_link_copied": "Link bagikan disalin ke clipboard",
 		"image_copied_to_clipboard": "Data URI gambar disalin ke clipboard",
 		"image_copied_to_clipboard": "Data URI gambar disalin ke clipboard",
-		"image_saved": "Gambar disimpan ke {{path}}"
+		"image_saved": "Gambar disimpan ke {{path}}",
+		"organization_share_link_copied": "Tautan berbagi organisasi disalin ke clipboard!",
+		"public_share_link_copied": "Tautan berbagi publik disalin ke clipboard!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "Ya",
 		"yes": "Ya",

+ 7 - 2
src/i18n/locales/it/common.json

@@ -59,7 +59,10 @@
 		"condense_handler_invalid": "Il gestore API per condensare il contesto non è valido",
 		"condense_handler_invalid": "Il gestore API per condensare il contesto non è valido",
 		"condense_context_grew": "La dimensione del contesto è aumentata durante la condensazione; questo tentativo viene saltato",
 		"condense_context_grew": "La dimensione del contesto è aumentata durante la condensazione; questo tentativo viene saltato",
 		"share_task_failed": "Condivisione dell'attività fallita. Riprova.",
 		"share_task_failed": "Condivisione dell'attività fallita. Riprova.",
-		"share_no_active_task": "Nessuna attività attiva da condividere"
+		"share_no_active_task": "Nessuna attività attiva da condividere",
+		"share_auth_required": "Autenticazione richiesta. Accedi per condividere le attività.",
+		"share_not_enabled": "La condivisione delle attività non è abilitata per questa organizzazione.",
+		"share_task_not_found": "Attività non trovata o accesso negato."
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "Nessun contenuto del terminale selezionato",
 		"no_terminal_content": "Nessun contenuto del terminale selezionato",
@@ -74,7 +77,9 @@
 		"settings_imported": "Impostazioni importate con successo.",
 		"settings_imported": "Impostazioni importate con successo.",
 		"share_link_copied": "Link di condivisione copiato negli appunti",
 		"share_link_copied": "Link di condivisione copiato negli appunti",
 		"image_copied_to_clipboard": "URI dati dell'immagine copiato negli appunti",
 		"image_copied_to_clipboard": "URI dati dell'immagine copiato negli appunti",
-		"image_saved": "Immagine salvata in {{path}}"
+		"image_saved": "Immagine salvata in {{path}}",
+		"organization_share_link_copied": "Link di condivisione organizzazione copiato negli appunti!",
+		"public_share_link_copied": "Link di condivisione pubblica copiato negli appunti!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "Sì",
 		"yes": "Sì",

+ 7 - 2
src/i18n/locales/ja/common.json

@@ -59,7 +59,10 @@
 		"condense_handler_invalid": "コンテキストを圧縮するためのAPIハンドラーが無効です",
 		"condense_handler_invalid": "コンテキストを圧縮するためのAPIハンドラーが無効です",
 		"condense_context_grew": "圧縮中にコンテキストサイズが増加しました;この試行をスキップします",
 		"condense_context_grew": "圧縮中にコンテキストサイズが増加しました;この試行をスキップします",
 		"share_task_failed": "タスクの共有に失敗しました",
 		"share_task_failed": "タスクの共有に失敗しました",
-		"share_no_active_task": "共有するアクティブなタスクがありません"
+		"share_no_active_task": "共有するアクティブなタスクがありません",
+		"share_auth_required": "認証が必要です。タスクを共有するにはサインインしてください。",
+		"share_not_enabled": "この組織ではタスク共有が有効になっていません。",
+		"share_task_not_found": "タスクが見つからないか、アクセスが拒否されました。"
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "選択されたターミナルコンテンツがありません",
 		"no_terminal_content": "選択されたターミナルコンテンツがありません",
@@ -74,7 +77,9 @@
 		"settings_imported": "設定が正常にインポートされました。",
 		"settings_imported": "設定が正常にインポートされました。",
 		"share_link_copied": "共有リンクがクリップボードにコピーされました",
 		"share_link_copied": "共有リンクがクリップボードにコピーされました",
 		"image_copied_to_clipboard": "画像データURIがクリップボードにコピーされました",
 		"image_copied_to_clipboard": "画像データURIがクリップボードにコピーされました",
-		"image_saved": "画像を{{path}}に保存しました"
+		"image_saved": "画像を{{path}}に保存しました",
+		"organization_share_link_copied": "組織共有リンクがクリップボードにコピーされました!",
+		"public_share_link_copied": "公開共有リンクがクリップボードにコピーされました!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "はい",
 		"yes": "はい",

+ 7 - 2
src/i18n/locales/ko/common.json

@@ -59,7 +59,10 @@
 		"condense_handler_invalid": "컨텍스트 압축을 위한 API 핸들러가 유효하지 않습니다",
 		"condense_handler_invalid": "컨텍스트 압축을 위한 API 핸들러가 유효하지 않습니다",
 		"condense_context_grew": "압축 중 컨텍스트 크기가 증가했습니다; 이 시도를 건너뜁니다",
 		"condense_context_grew": "압축 중 컨텍스트 크기가 증가했습니다; 이 시도를 건너뜁니다",
 		"share_task_failed": "작업 공유에 실패했습니다",
 		"share_task_failed": "작업 공유에 실패했습니다",
-		"share_no_active_task": "공유할 활성 작업이 없습니다"
+		"share_no_active_task": "공유할 활성 작업이 없습니다",
+		"share_auth_required": "인증이 필요합니다. 작업을 공유하려면 로그인하세요.",
+		"share_not_enabled": "이 조직에서는 작업 공유가 활성화되지 않았습니다.",
+		"share_task_not_found": "작업을 찾을 수 없거나 액세스가 거부되었습니다."
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "선택된 터미널 내용이 없습니다",
 		"no_terminal_content": "선택된 터미널 내용이 없습니다",
@@ -74,7 +77,9 @@
 		"settings_imported": "설정이 성공적으로 가져와졌습니다.",
 		"settings_imported": "설정이 성공적으로 가져와졌습니다.",
 		"share_link_copied": "공유 링크가 클립보드에 복사되었습니다",
 		"share_link_copied": "공유 링크가 클립보드에 복사되었습니다",
 		"image_copied_to_clipboard": "이미지 데이터 URI가 클립보드에 복사되었습니다",
 		"image_copied_to_clipboard": "이미지 데이터 URI가 클립보드에 복사되었습니다",
-		"image_saved": "이미지가 {{path}}에 저장되었습니다"
+		"image_saved": "이미지가 {{path}}에 저장되었습니다",
+		"organization_share_link_copied": "조직 공유 링크가 클립보드에 복사되었습니다!",
+		"public_share_link_copied": "공개 공유 링크가 클립보드에 복사되었습니다!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "예",
 		"yes": "예",

+ 7 - 2
src/i18n/locales/nl/common.json

@@ -59,7 +59,10 @@
 		"condense_handler_invalid": "API-handler voor het comprimeren van context is ongeldig",
 		"condense_handler_invalid": "API-handler voor het comprimeren van context is ongeldig",
 		"condense_context_grew": "Contextgrootte nam toe tijdens comprimeren; deze poging wordt overgeslagen",
 		"condense_context_grew": "Contextgrootte nam toe tijdens comprimeren; deze poging wordt overgeslagen",
 		"share_task_failed": "Delen van taak mislukt",
 		"share_task_failed": "Delen van taak mislukt",
-		"share_no_active_task": "Geen actieve taak om te delen"
+		"share_no_active_task": "Geen actieve taak om te delen",
+		"share_auth_required": "Authenticatie vereist. Log in om taken te delen.",
+		"share_not_enabled": "Taken delen is niet ingeschakeld voor deze organisatie.",
+		"share_task_not_found": "Taak niet gevonden of toegang geweigerd."
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "Geen terminalinhoud geselecteerd",
 		"no_terminal_content": "Geen terminalinhoud geselecteerd",
@@ -74,7 +77,9 @@
 		"settings_imported": "Instellingen succesvol geïmporteerd.",
 		"settings_imported": "Instellingen succesvol geïmporteerd.",
 		"share_link_copied": "Deellink gekopieerd naar klembord",
 		"share_link_copied": "Deellink gekopieerd naar klembord",
 		"image_copied_to_clipboard": "Afbeelding data-URI gekopieerd naar klembord",
 		"image_copied_to_clipboard": "Afbeelding data-URI gekopieerd naar klembord",
-		"image_saved": "Afbeelding opgeslagen naar {{path}}"
+		"image_saved": "Afbeelding opgeslagen naar {{path}}",
+		"organization_share_link_copied": "Organisatie deel-link gekopieerd naar klembord!",
+		"public_share_link_copied": "Openbare deel-link gekopieerd naar klembord!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "Ja",
 		"yes": "Ja",

+ 7 - 2
src/i18n/locales/pl/common.json

@@ -59,7 +59,10 @@
 		"condense_handler_invalid": "Nieprawidłowy handler API do kondensowania kontekstu",
 		"condense_handler_invalid": "Nieprawidłowy handler API do kondensowania kontekstu",
 		"condense_context_grew": "Rozmiar kontekstu wzrósł podczas kondensacji; pomijanie tej próby",
 		"condense_context_grew": "Rozmiar kontekstu wzrósł podczas kondensacji; pomijanie tej próby",
 		"share_task_failed": "Nie udało się udostępnić zadania",
 		"share_task_failed": "Nie udało się udostępnić zadania",
-		"share_no_active_task": "Brak aktywnego zadania do udostępnienia"
+		"share_no_active_task": "Brak aktywnego zadania do udostępnienia",
+		"share_auth_required": "Wymagana autoryzacja. Zaloguj się, aby udostępniać zadania.",
+		"share_not_enabled": "Udostępnianie zadań nie jest włączone dla tej organizacji.",
+		"share_task_not_found": "Zadanie nie znalezione lub dostęp odmówiony."
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "Nie wybrano zawartości terminala",
 		"no_terminal_content": "Nie wybrano zawartości terminala",
@@ -74,7 +77,9 @@
 		"settings_imported": "Ustawienia zaimportowane pomyślnie.",
 		"settings_imported": "Ustawienia zaimportowane pomyślnie.",
 		"share_link_copied": "Link udostępniania skopiowany do schowka",
 		"share_link_copied": "Link udostępniania skopiowany do schowka",
 		"image_copied_to_clipboard": "URI danych obrazu skopiowane do schowka",
 		"image_copied_to_clipboard": "URI danych obrazu skopiowane do schowka",
-		"image_saved": "Obraz zapisany w {{path}}"
+		"image_saved": "Obraz zapisany w {{path}}",
+		"organization_share_link_copied": "Link udostępniania organizacji skopiowany do schowka!",
+		"public_share_link_copied": "Publiczny link udostępniania skopiowany do schowka!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "Tak",
 		"yes": "Tak",

+ 7 - 2
src/i18n/locales/pt-BR/common.json

@@ -63,7 +63,10 @@
 		"condense_handler_invalid": "O manipulador de API para condensar o contexto é inválido",
 		"condense_handler_invalid": "O manipulador de API para condensar o contexto é inválido",
 		"condense_context_grew": "O tamanho do contexto aumentou durante a condensação; pulando esta tentativa",
 		"condense_context_grew": "O tamanho do contexto aumentou durante a condensação; pulando esta tentativa",
 		"share_task_failed": "Falha ao compartilhar tarefa",
 		"share_task_failed": "Falha ao compartilhar tarefa",
-		"share_no_active_task": "Nenhuma tarefa ativa para compartilhar"
+		"share_no_active_task": "Nenhuma tarefa ativa para compartilhar",
+		"share_auth_required": "Autenticação necessária. Faça login para compartilhar tarefas.",
+		"share_not_enabled": "O compartilhamento de tarefas não está habilitado para esta organização.",
+		"share_task_not_found": "Tarefa não encontrada ou acesso negado."
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "Nenhum conteúdo do terminal selecionado",
 		"no_terminal_content": "Nenhum conteúdo do terminal selecionado",
@@ -78,7 +81,9 @@
 		"settings_imported": "Configurações importadas com sucesso.",
 		"settings_imported": "Configurações importadas com sucesso.",
 		"share_link_copied": "Link de compartilhamento copiado para a área de transferência",
 		"share_link_copied": "Link de compartilhamento copiado para a área de transferência",
 		"image_copied_to_clipboard": "URI de dados da imagem copiada para a área de transferência",
 		"image_copied_to_clipboard": "URI de dados da imagem copiada para a área de transferência",
-		"image_saved": "Imagem salva em {{path}}"
+		"image_saved": "Imagem salva em {{path}}",
+		"organization_share_link_copied": "Link de compartilhamento da organização copiado para a área de transferência!",
+		"public_share_link_copied": "Link de compartilhamento público copiado para a área de transferência!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "Sim",
 		"yes": "Sim",

+ 7 - 2
src/i18n/locales/ru/common.json

@@ -59,7 +59,10 @@
 		"condense_handler_invalid": "Обработчик API для сжатия контекста недействителен",
 		"condense_handler_invalid": "Обработчик API для сжатия контекста недействителен",
 		"condense_context_grew": "Размер контекста увеличился во время сжатия; пропускаем эту попытку",
 		"condense_context_grew": "Размер контекста увеличился во время сжатия; пропускаем эту попытку",
 		"share_task_failed": "Не удалось поделиться задачей",
 		"share_task_failed": "Не удалось поделиться задачей",
-		"share_no_active_task": "Нет активной задачи для совместного использования"
+		"share_no_active_task": "Нет активной задачи для совместного использования",
+		"share_auth_required": "Требуется аутентификация. Войдите в систему для совместного доступа к задачам.",
+		"share_not_enabled": "Совместный доступ к задачам не включен для этой организации.",
+		"share_task_not_found": "Задача не найдена или доступ запрещен."
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "Не выбрано содержимое терминала",
 		"no_terminal_content": "Не выбрано содержимое терминала",
@@ -74,7 +77,9 @@
 		"settings_imported": "Настройки успешно импортированы.",
 		"settings_imported": "Настройки успешно импортированы.",
 		"share_link_copied": "Ссылка для совместного использования скопирована в буфер обмена",
 		"share_link_copied": "Ссылка для совместного использования скопирована в буфер обмена",
 		"image_copied_to_clipboard": "URI данных изображения скопирован в буфер обмена",
 		"image_copied_to_clipboard": "URI данных изображения скопирован в буфер обмена",
-		"image_saved": "Изображение сохранено в {{path}}"
+		"image_saved": "Изображение сохранено в {{path}}",
+		"organization_share_link_copied": "Ссылка для совместного доступа организации скопирована в буфер обмена!",
+		"public_share_link_copied": "Публичная ссылка для совместного доступа скопирована в буфер обмена!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "Да",
 		"yes": "Да",

+ 7 - 2
src/i18n/locales/tr/common.json

@@ -59,7 +59,10 @@
 		"condense_handler_invalid": "Bağlamı sıkıştırmak için API işleyicisi geçersiz",
 		"condense_handler_invalid": "Bağlamı sıkıştırmak için API işleyicisi geçersiz",
 		"condense_context_grew": "Sıkıştırma sırasında bağlam boyutu arttı; bu deneme atlanıyor",
 		"condense_context_grew": "Sıkıştırma sırasında bağlam boyutu arttı; bu deneme atlanıyor",
 		"share_task_failed": "Görev paylaşılamadı",
 		"share_task_failed": "Görev paylaşılamadı",
-		"share_no_active_task": "Paylaşılacak aktif görev yok"
+		"share_no_active_task": "Paylaşılacak aktif görev yok",
+		"share_auth_required": "Kimlik doğrulama gerekli. Görevleri paylaşmak için lütfen giriş yapın.",
+		"share_not_enabled": "Bu kuruluş için görev paylaşımı etkinleştirilmemiş.",
+		"share_task_not_found": "Görev bulunamadı veya erişim reddedildi."
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "Seçili terminal içeriği yok",
 		"no_terminal_content": "Seçili terminal içeriği yok",
@@ -74,7 +77,9 @@
 		"settings_imported": "Ayarlar başarıyla içe aktarıldı.",
 		"settings_imported": "Ayarlar başarıyla içe aktarıldı.",
 		"share_link_copied": "Paylaşım bağlantısı panoya kopyalandı",
 		"share_link_copied": "Paylaşım bağlantısı panoya kopyalandı",
 		"image_copied_to_clipboard": "Resim veri URI'si panoya kopyalandı",
 		"image_copied_to_clipboard": "Resim veri URI'si panoya kopyalandı",
-		"image_saved": "Resim {{path}} konumuna kaydedildi"
+		"image_saved": "Resim {{path}} konumuna kaydedildi",
+		"organization_share_link_copied": "Kuruluş paylaşım bağlantısı panoya kopyalandı!",
+		"public_share_link_copied": "Herkese açık paylaşım bağlantısı panoya kopyalandı!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "Evet",
 		"yes": "Evet",

+ 7 - 2
src/i18n/locales/vi/common.json

@@ -59,7 +59,10 @@
 		"condense_handler_invalid": "Trình xử lý API để nén ngữ cảnh không hợp lệ",
 		"condense_handler_invalid": "Trình xử lý API để nén ngữ cảnh không hợp lệ",
 		"condense_context_grew": "Kích thước ngữ cảnh tăng lên trong quá trình nén; bỏ qua lần thử này",
 		"condense_context_grew": "Kích thước ngữ cảnh tăng lên trong quá trình nén; bỏ qua lần thử này",
 		"share_task_failed": "Không thể chia sẻ nhiệm vụ",
 		"share_task_failed": "Không thể chia sẻ nhiệm vụ",
-		"share_no_active_task": "Không có nhiệm vụ hoạt động để chia sẻ"
+		"share_no_active_task": "Không có nhiệm vụ hoạt động để chia sẻ",
+		"share_auth_required": "Cần xác thực. Vui lòng đăng nhập để chia sẻ nhiệm vụ.",
+		"share_not_enabled": "Chia sẻ nhiệm vụ không được bật cho tổ chức này.",
+		"share_task_not_found": "Không tìm thấy nhiệm vụ hoặc truy cập bị từ chối."
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "Không có nội dung terminal được chọn",
 		"no_terminal_content": "Không có nội dung terminal được chọn",
@@ -74,7 +77,9 @@
 		"settings_imported": "Cài đặt đã được nhập thành công.",
 		"settings_imported": "Cài đặt đã được nhập thành công.",
 		"share_link_copied": "Liên kết chia sẻ đã được sao chép vào clipboard",
 		"share_link_copied": "Liên kết chia sẻ đã được sao chép vào clipboard",
 		"image_copied_to_clipboard": "URI dữ liệu hình ảnh đã được sao chép vào clipboard",
 		"image_copied_to_clipboard": "URI dữ liệu hình ảnh đã được sao chép vào clipboard",
-		"image_saved": "Hình ảnh đã được lưu vào {{path}}"
+		"image_saved": "Hình ảnh đã được lưu vào {{path}}",
+		"organization_share_link_copied": "Liên kết chia sẻ tổ chức đã được sao chép vào clipboard!",
+		"public_share_link_copied": "Liên kết chia sẻ công khai đã được sao chép vào clipboard!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "Có",
 		"yes": "Có",

+ 7 - 2
src/i18n/locales/zh-CN/common.json

@@ -64,7 +64,10 @@
 		"condense_handler_invalid": "压缩上下文的API处理程序无效",
 		"condense_handler_invalid": "压缩上下文的API处理程序无效",
 		"condense_context_grew": "压缩过程中上下文大小增加;跳过此次尝试",
 		"condense_context_grew": "压缩过程中上下文大小增加;跳过此次尝试",
 		"share_task_failed": "分享任务失败。请重试。",
 		"share_task_failed": "分享任务失败。请重试。",
-		"share_no_active_task": "没有活跃任务可分享"
+		"share_no_active_task": "没有活跃任务可分享",
+		"share_auth_required": "需要身份验证。请登录以分享任务。",
+		"share_not_enabled": "此组织未启用任务分享功能。",
+		"share_task_not_found": "未找到任务或访问被拒绝。"
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "没有选择终端内容",
 		"no_terminal_content": "没有选择终端内容",
@@ -79,7 +82,9 @@
 		"settings_imported": "设置已成功导入。",
 		"settings_imported": "设置已成功导入。",
 		"share_link_copied": "分享链接已复制到剪贴板",
 		"share_link_copied": "分享链接已复制到剪贴板",
 		"image_copied_to_clipboard": "图片数据 URI 已复制到剪贴板",
 		"image_copied_to_clipboard": "图片数据 URI 已复制到剪贴板",
-		"image_saved": "图片已保存到 {{path}}"
+		"image_saved": "图片已保存到 {{path}}",
+		"organization_share_link_copied": "组织分享链接已复制到剪贴板!",
+		"public_share_link_copied": "公开分享链接已复制到剪贴板!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "是",
 		"yes": "是",

+ 7 - 2
src/i18n/locales/zh-TW/common.json

@@ -59,7 +59,10 @@
 		"condense_handler_invalid": "壓縮上下文的 API 處理程式無效",
 		"condense_handler_invalid": "壓縮上下文的 API 處理程式無效",
 		"condense_context_grew": "壓縮過程中上下文大小增加;跳過此次嘗試",
 		"condense_context_grew": "壓縮過程中上下文大小增加;跳過此次嘗試",
 		"share_task_failed": "分享工作失敗。請重試。",
 		"share_task_failed": "分享工作失敗。請重試。",
-		"share_no_active_task": "沒有活躍的工作可分享"
+		"share_no_active_task": "沒有活躍的工作可分享",
+		"share_auth_required": "需要身份驗證。請登入以分享工作。",
+		"share_not_enabled": "此組織未啟用工作分享功能。",
+		"share_task_not_found": "未找到工作或存取被拒絕。"
 	},
 	},
 	"warnings": {
 	"warnings": {
 		"no_terminal_content": "沒有選擇終端機內容",
 		"no_terminal_content": "沒有選擇終端機內容",
@@ -74,7 +77,9 @@
 		"settings_imported": "設定已成功匯入。",
 		"settings_imported": "設定已成功匯入。",
 		"share_link_copied": "分享連結已複製到剪貼簿",
 		"share_link_copied": "分享連結已複製到剪貼簿",
 		"image_copied_to_clipboard": "圖片資料 URI 已複製到剪貼簿",
 		"image_copied_to_clipboard": "圖片資料 URI 已複製到剪貼簿",
-		"image_saved": "圖片已儲存至 {{path}}"
+		"image_saved": "圖片已儲存至 {{path}}",
+		"organization_share_link_copied": "組織分享連結已複製到剪貼簿!",
+		"public_share_link_copied": "公開分享連結已複製到剪貼簿!"
 	},
 	},
 	"answers": {
 	"answers": {
 		"yes": "是",
 		"yes": "是",

+ 1 - 0
src/shared/WebviewMessage.ts

@@ -204,6 +204,7 @@ export interface WebviewMessage {
 	mpItem?: MarketplaceItem
 	mpItem?: MarketplaceItem
 	mpInstallOptions?: InstallMarketplaceItemOptions
 	mpInstallOptions?: InstallMarketplaceItemOptions
 	config?: Record<string, any> // Add config to the payload
 	config?: Record<string, any> // Add config to the payload
+	visibility?: "organization" | "public" // For share visibility
 }
 }
 
 
 export const checkoutDiffPayloadSchema = z.object({
 export const checkoutDiffPayloadSchema = z.object({

+ 63 - 6
webview-ui/src/components/chat/TaskActions.tsx

@@ -6,6 +6,16 @@ import type { HistoryItem } from "@roo-code/types"
 
 
 import { vscode } from "@/utils/vscode"
 import { vscode } from "@/utils/vscode"
 import { useExtensionState } from "@/context/ExtensionStateContext"
 import { useExtensionState } from "@/context/ExtensionStateContext"
+import {
+	Button,
+	Popover,
+	PopoverContent,
+	PopoverTrigger,
+	Command,
+	CommandList,
+	CommandItem,
+	CommandGroup,
+} from "@/components/ui"
 
 
 import { DeleteTaskDialog } from "../history/DeleteTaskDialog"
 import { DeleteTaskDialog } from "../history/DeleteTaskDialog"
 import { IconButton } from "./IconButton"
 import { IconButton } from "./IconButton"
@@ -17,18 +27,65 @@ interface TaskActionsProps {
 
 
 export const TaskActions = ({ item, buttonsDisabled }: TaskActionsProps) => {
 export const TaskActions = ({ item, buttonsDisabled }: TaskActionsProps) => {
 	const [deleteTaskId, setDeleteTaskId] = useState<string | null>(null)
 	const [deleteTaskId, setDeleteTaskId] = useState<string | null>(null)
+	const [shareDropdownOpen, setShareDropdownOpen] = useState(false)
 	const { t } = useTranslation()
 	const { t } = useTranslation()
 	const { sharingEnabled } = useExtensionState()
 	const { sharingEnabled } = useExtensionState()
 
 
+	const handleShare = (visibility: "organization" | "public") => {
+		vscode.postMessage({
+			type: "shareCurrentTask",
+			visibility,
+		})
+		setShareDropdownOpen(false)
+	}
+
 	return (
 	return (
 		<div className="flex flex-row gap-1">
 		<div className="flex flex-row gap-1">
 			{item?.id && sharingEnabled && (
 			{item?.id && sharingEnabled && (
-				<IconButton
-					iconClass="codicon-link"
-					title={t("chat:task.share")}
-					disabled={buttonsDisabled}
-					onClick={() => vscode.postMessage({ type: "shareCurrentTask" })}
-				/>
+				<Popover open={shareDropdownOpen} onOpenChange={setShareDropdownOpen}>
+					<PopoverTrigger asChild>
+						<Button
+							variant="ghost"
+							size="icon"
+							disabled={buttonsDisabled}
+							className="h-6 w-6 p-0 hover:bg-vscode-toolbar-hoverBackground"
+							title={t("chat:task.share")}>
+							<span className="codicon codicon-link text-xs"></span>
+						</Button>
+					</PopoverTrigger>
+					<PopoverContent className="w-56 p-0" align="start">
+						<Command>
+							<CommandList>
+								<CommandGroup>
+									<CommandItem
+										onSelect={() => handleShare("organization")}
+										className="cursor-pointer">
+										<div className="flex items-center gap-2">
+											<span className="codicon codicon-organization text-sm"></span>
+											<div className="flex flex-col">
+												<span className="text-sm">{t("chat:task.shareWithOrganization")}</span>
+												<span className="text-xs text-vscode-descriptionForeground">
+													{t("chat:task.shareWithOrganizationDescription")}
+												</span>
+											</div>
+										</div>
+									</CommandItem>
+									<CommandItem onSelect={() => handleShare("public")} className="cursor-pointer">
+										<div className="flex items-center gap-2">
+											<span className="codicon codicon-globe text-sm"></span>
+											<div className="flex flex-col">
+												<span className="text-sm">{t("chat:task.sharePublicly")}</span>
+												<span className="text-xs text-vscode-descriptionForeground">
+													{t("chat:task.sharePubliclyDescription")}
+												</span>
+											</div>
+										</div>
+									</CommandItem>
+								</CommandGroup>
+							</CommandList>
+						</Command>
+					</PopoverContent>
+				</Popover>
 			)}
 			)}
 			<IconButton
 			<IconButton
 				iconClass="codicon-desktop-download"
 				iconClass="codicon-desktop-download"

+ 5 - 1
webview-ui/src/i18n/locales/ca/chat.json

@@ -12,7 +12,11 @@
 		"export": "Exportar historial de tasques",
 		"export": "Exportar historial de tasques",
 		"delete": "Eliminar tasca (Shift + Clic per ometre confirmació)",
 		"delete": "Eliminar tasca (Shift + Clic per ometre confirmació)",
 		"condenseContext": "Condensar context de forma intel·ligent",
 		"condenseContext": "Condensar context de forma intel·ligent",
-		"share": "Compartir tasca"
+		"share": "Compartir tasca",
+		"shareWithOrganization": "Compartir amb l'organització",
+		"shareWithOrganizationDescription": "Només els membres de la teva organització poden accedir",
+		"sharePublicly": "Compartir públicament",
+		"sharePubliclyDescription": "Qualsevol amb l'enllaç pot accedir"
 	},
 	},
 	"unpin": "Desfixar",
 	"unpin": "Desfixar",
 	"pin": "Fixar",
 	"pin": "Fixar",

+ 5 - 1
webview-ui/src/i18n/locales/de/chat.json

@@ -12,7 +12,11 @@
 		"export": "Aufgabenverlauf exportieren",
 		"export": "Aufgabenverlauf exportieren",
 		"delete": "Aufgabe löschen (Shift + Klick zum Überspringen der Bestätigung)",
 		"delete": "Aufgabe löschen (Shift + Klick zum Überspringen der Bestätigung)",
 		"share": "Aufgabe teilen",
 		"share": "Aufgabe teilen",
-		"condenseContext": "Kontext intelligent komprimieren"
+		"condenseContext": "Kontext intelligent komprimieren",
+		"shareWithOrganization": "Mit Organisation teilen",
+		"shareWithOrganizationDescription": "Nur Mitglieder deiner Organisation können zugreifen",
+		"sharePublicly": "Öffentlich teilen",
+		"sharePubliclyDescription": "Jeder mit dem Link kann zugreifen"
 	},
 	},
 	"unpin": "Lösen von oben",
 	"unpin": "Lösen von oben",
 	"pin": "Anheften",
 	"pin": "Anheften",

+ 5 - 1
webview-ui/src/i18n/locales/en/chat.json

@@ -12,7 +12,11 @@
 		"closeAndStart": "Close task and start a new one",
 		"closeAndStart": "Close task and start a new one",
 		"export": "Export task history",
 		"export": "Export task history",
 		"share": "Share task",
 		"share": "Share task",
-		"delete": "Delete Task (Shift + Click to skip confirmation)"
+		"delete": "Delete Task (Shift + Click to skip confirmation)",
+		"shareWithOrganization": "Share with Organization",
+		"shareWithOrganizationDescription": "Only members of your organization can access",
+		"sharePublicly": "Share Publicly",
+		"sharePubliclyDescription": "Anyone with the link can access"
 	},
 	},
 	"unpin": "Unpin",
 	"unpin": "Unpin",
 	"pin": "Pin",
 	"pin": "Pin",

+ 5 - 1
webview-ui/src/i18n/locales/es/chat.json

@@ -12,7 +12,11 @@
 		"export": "Exportar historial de tareas",
 		"export": "Exportar historial de tareas",
 		"delete": "Eliminar tarea (Shift + Clic para omitir confirmación)",
 		"delete": "Eliminar tarea (Shift + Clic para omitir confirmación)",
 		"condenseContext": "Condensar contexto de forma inteligente",
 		"condenseContext": "Condensar contexto de forma inteligente",
-		"share": "Compartir tarea"
+		"share": "Compartir tarea",
+		"shareWithOrganization": "Compartir con organización",
+		"shareWithOrganizationDescription": "Solo los miembros de tu organización pueden acceder",
+		"sharePublicly": "Compartir públicamente",
+		"sharePubliclyDescription": "Cualquiera con el enlace puede acceder"
 	},
 	},
 	"unpin": "Desfijar",
 	"unpin": "Desfijar",
 	"pin": "Fijar",
 	"pin": "Fijar",

+ 5 - 1
webview-ui/src/i18n/locales/fr/chat.json

@@ -12,7 +12,11 @@
 		"export": "Exporter l'historique des tâches",
 		"export": "Exporter l'historique des tâches",
 		"delete": "Supprimer la tâche (Shift + Clic pour ignorer la confirmation)",
 		"delete": "Supprimer la tâche (Shift + Clic pour ignorer la confirmation)",
 		"condenseContext": "Condenser intelligemment le contexte",
 		"condenseContext": "Condenser intelligemment le contexte",
-		"share": "Partager la tâche"
+		"share": "Partager la tâche",
+		"shareWithOrganization": "Partager avec l'organisation",
+		"shareWithOrganizationDescription": "Seuls les membres de ton organisation peuvent accéder",
+		"sharePublicly": "Partager publiquement",
+		"sharePubliclyDescription": "Toute personne avec le lien peut accéder"
 	},
 	},
 	"unpin": "Désépingler",
 	"unpin": "Désépingler",
 	"pin": "Épingler",
 	"pin": "Épingler",

+ 5 - 1
webview-ui/src/i18n/locales/hi/chat.json

@@ -12,7 +12,11 @@
 		"export": "कार्य इतिहास निर्यात करें",
 		"export": "कार्य इतिहास निर्यात करें",
 		"delete": "कार्य हटाएं (पुष्टि को छोड़ने के लिए Shift + क्लिक)",
 		"delete": "कार्य हटाएं (पुष्टि को छोड़ने के लिए Shift + क्लिक)",
 		"condenseContext": "संदर्भ को बुद्धिमानी से संघनित करें",
 		"condenseContext": "संदर्भ को बुद्धिमानी से संघनित करें",
-		"share": "कार्य साझा करें"
+		"share": "कार्य साझा करें",
+		"shareWithOrganization": "संगठन के साथ साझा करें",
+		"shareWithOrganizationDescription": "केवल आपके संगठन के सदस्य पहुंच सकते हैं",
+		"sharePublicly": "सार्वजनिक रूप से साझा करें",
+		"sharePubliclyDescription": "लिंक वाला कोई भी व्यक्ति पहुंच सकता है"
 	},
 	},
 	"unpin": "पिन करें",
 	"unpin": "पिन करें",
 	"pin": "अवपिन करें",
 	"pin": "अवपिन करें",

+ 5 - 1
webview-ui/src/i18n/locales/id/chat.json

@@ -12,7 +12,11 @@
 		"closeAndStart": "Tutup tugas dan mulai yang baru",
 		"closeAndStart": "Tutup tugas dan mulai yang baru",
 		"export": "Ekspor riwayat tugas",
 		"export": "Ekspor riwayat tugas",
 		"share": "Bagikan tugas",
 		"share": "Bagikan tugas",
-		"delete": "Hapus Tugas (Shift + Klik untuk lewati konfirmasi)"
+		"delete": "Hapus Tugas (Shift + Klik untuk lewati konfirmasi)",
+		"shareWithOrganization": "Bagikan dengan organisasi",
+		"shareWithOrganizationDescription": "Hanya anggota organisasi Anda yang dapat mengakses",
+		"sharePublicly": "Bagikan secara publik",
+		"sharePubliclyDescription": "Siapa pun dengan tautan dapat mengakses"
 	},
 	},
 	"history": {
 	"history": {
 		"title": "Riwayat"
 		"title": "Riwayat"

+ 5 - 1
webview-ui/src/i18n/locales/it/chat.json

@@ -12,7 +12,11 @@
 		"export": "Esporta cronologia attività",
 		"export": "Esporta cronologia attività",
 		"delete": "Elimina attività (Shift + Clic per saltare la conferma)",
 		"delete": "Elimina attività (Shift + Clic per saltare la conferma)",
 		"condenseContext": "Condensa contesto in modo intelligente",
 		"condenseContext": "Condensa contesto in modo intelligente",
-		"share": "Condividi attività"
+		"share": "Condividi attività",
+		"shareWithOrganization": "Condividi con l'organizzazione",
+		"shareWithOrganizationDescription": "Solo i membri della tua organizzazione possono accedere",
+		"sharePublicly": "Condividi pubblicamente",
+		"sharePubliclyDescription": "Chiunque con il link può accedere"
 	},
 	},
 	"unpin": "Rilascia",
 	"unpin": "Rilascia",
 	"pin": "Fissa",
 	"pin": "Fissa",

+ 5 - 1
webview-ui/src/i18n/locales/ja/chat.json

@@ -12,7 +12,11 @@
 		"export": "タスク履歴をエクスポート",
 		"export": "タスク履歴をエクスポート",
 		"delete": "タスクを削除(Shift + クリックで確認をスキップ)",
 		"delete": "タスクを削除(Shift + クリックで確認をスキップ)",
 		"condenseContext": "コンテキストをインテリジェントに圧縮",
 		"condenseContext": "コンテキストをインテリジェントに圧縮",
-		"share": "タスクを共有"
+		"share": "タスクを共有",
+		"shareWithOrganization": "組織と共有",
+		"shareWithOrganizationDescription": "組織のメンバーのみがアクセスできます",
+		"sharePublicly": "公開で共有",
+		"sharePubliclyDescription": "リンクを持つ誰でもアクセスできます"
 	},
 	},
 	"unpin": "ピン留めを解除",
 	"unpin": "ピン留めを解除",
 	"pin": "ピン留め",
 	"pin": "ピン留め",

+ 5 - 1
webview-ui/src/i18n/locales/ko/chat.json

@@ -12,7 +12,11 @@
 		"export": "작업 기록 내보내기",
 		"export": "작업 기록 내보내기",
 		"delete": "작업 삭제 (Shift + 클릭으로 확인 생략)",
 		"delete": "작업 삭제 (Shift + 클릭으로 확인 생략)",
 		"condenseContext": "컨텍스트 지능적으로 압축",
 		"condenseContext": "컨텍스트 지능적으로 압축",
-		"share": "작업 공유"
+		"share": "작업 공유",
+		"shareWithOrganization": "조직과 공유",
+		"shareWithOrganizationDescription": "조직 구성원만 액세스할 수 있습니다",
+		"sharePublicly": "공개적으로 공유",
+		"sharePubliclyDescription": "링크가 있는 누구나 액세스할 수 있습니다"
 	},
 	},
 	"unpin": "고정 해제하기",
 	"unpin": "고정 해제하기",
 	"pin": "고정하기",
 	"pin": "고정하기",

+ 5 - 1
webview-ui/src/i18n/locales/nl/chat.json

@@ -12,7 +12,11 @@
 		"export": "Taakgeschiedenis exporteren",
 		"export": "Taakgeschiedenis exporteren",
 		"delete": "Taak verwijderen (Shift + Klik om bevestiging over te slaan)",
 		"delete": "Taak verwijderen (Shift + Klik om bevestiging over te slaan)",
 		"condenseContext": "Context intelligent samenvatten",
 		"condenseContext": "Context intelligent samenvatten",
-		"share": "Taak delen"
+		"share": "Taak delen",
+		"shareWithOrganization": "Delen met organisatie",
+		"shareWithOrganizationDescription": "Alleen leden van je organisatie kunnen toegang krijgen",
+		"sharePublicly": "Openbaar delen",
+		"sharePubliclyDescription": "Iedereen met de link kan toegang krijgen"
 	},
 	},
 	"unpin": "Losmaken",
 	"unpin": "Losmaken",
 	"pin": "Vastmaken",
 	"pin": "Vastmaken",

+ 5 - 1
webview-ui/src/i18n/locales/pl/chat.json

@@ -12,7 +12,11 @@
 		"export": "Eksportuj historię zadań",
 		"export": "Eksportuj historię zadań",
 		"delete": "Usuń zadanie (Shift + Kliknięcie, aby pominąć potwierdzenie)",
 		"delete": "Usuń zadanie (Shift + Kliknięcie, aby pominąć potwierdzenie)",
 		"condenseContext": "Inteligentnie skondensuj kontekst",
 		"condenseContext": "Inteligentnie skondensuj kontekst",
-		"share": "Udostępnij zadanie"
+		"share": "Udostępnij zadanie",
+		"shareWithOrganization": "Udostępnij organizacji",
+		"shareWithOrganizationDescription": "Tylko członkowie twojej organizacji mogą uzyskać dostęp",
+		"sharePublicly": "Udostępnij publicznie",
+		"sharePubliclyDescription": "Każdy z linkiem może uzyskać dostęp"
 	},
 	},
 	"unpin": "Odepnij",
 	"unpin": "Odepnij",
 	"pin": "Przypnij",
 	"pin": "Przypnij",

+ 5 - 1
webview-ui/src/i18n/locales/pt-BR/chat.json

@@ -12,7 +12,11 @@
 		"export": "Exportar histórico de tarefas",
 		"export": "Exportar histórico de tarefas",
 		"delete": "Excluir tarefa (Shift + Clique para pular confirmação)",
 		"delete": "Excluir tarefa (Shift + Clique para pular confirmação)",
 		"condenseContext": "Condensar contexto de forma inteligente",
 		"condenseContext": "Condensar contexto de forma inteligente",
-		"share": "Compartilhar tarefa"
+		"share": "Compartilhar tarefa",
+		"shareWithOrganization": "Compartilhar com organização",
+		"shareWithOrganizationDescription": "Apenas membros da sua organização podem acessar",
+		"sharePublicly": "Compartilhar publicamente",
+		"sharePubliclyDescription": "Qualquer pessoa com o link pode acessar"
 	},
 	},
 	"unpin": "Desfixar",
 	"unpin": "Desfixar",
 	"pin": "Fixar",
 	"pin": "Fixar",

+ 5 - 1
webview-ui/src/i18n/locales/ru/chat.json

@@ -12,7 +12,11 @@
 		"export": "Экспортировать историю задач",
 		"export": "Экспортировать историю задач",
 		"delete": "Удалить задачу (Shift + клик для пропуска подтверждения)",
 		"delete": "Удалить задачу (Shift + клик для пропуска подтверждения)",
 		"condenseContext": "Интеллектуально сжать контекст",
 		"condenseContext": "Интеллектуально сжать контекст",
-		"share": "Поделиться задачей"
+		"share": "Поделиться задачей",
+		"shareWithOrganization": "Поделиться с организацией",
+		"shareWithOrganizationDescription": "Только члены вашей организации могут получить доступ",
+		"sharePublicly": "Поделиться публично",
+		"sharePubliclyDescription": "Любой, у кого есть ссылка, может получить доступ"
 	},
 	},
 	"unpin": "Открепить",
 	"unpin": "Открепить",
 	"pin": "Закрепить",
 	"pin": "Закрепить",

+ 5 - 1
webview-ui/src/i18n/locales/tr/chat.json

@@ -12,7 +12,11 @@
 		"export": "Görev geçmişini dışa aktar",
 		"export": "Görev geçmişini dışa aktar",
 		"delete": "Görevi sil (Onayı atlamak için Shift + Tıkla)",
 		"delete": "Görevi sil (Onayı atlamak için Shift + Tıkla)",
 		"condenseContext": "Bağlamı akıllıca yoğunlaştır",
 		"condenseContext": "Bağlamı akıllıca yoğunlaştır",
-		"share": "Görevi paylaş"
+		"share": "Görevi paylaş",
+		"shareWithOrganization": "Kuruluşla paylaş",
+		"shareWithOrganizationDescription": "Sadece kuruluşunuzun üyeleri erişebilir",
+		"sharePublicly": "Herkese açık paylaş",
+		"sharePubliclyDescription": "Bağlantıya sahip herkes erişebilir"
 	},
 	},
 	"unpin": "Sabitlemeyi iptal et",
 	"unpin": "Sabitlemeyi iptal et",
 	"pin": "Sabitle",
 	"pin": "Sabitle",

+ 5 - 1
webview-ui/src/i18n/locales/vi/chat.json

@@ -12,7 +12,11 @@
 		"export": "Xuất lịch sử nhiệm vụ",
 		"export": "Xuất lịch sử nhiệm vụ",
 		"delete": "Xóa nhiệm vụ (Shift + Click để bỏ qua xác nhận)",
 		"delete": "Xóa nhiệm vụ (Shift + Click để bỏ qua xác nhận)",
 		"condenseContext": "Cô đọng ngữ cảnh thông minh",
 		"condenseContext": "Cô đọng ngữ cảnh thông minh",
-		"share": "Chia sẻ nhiệm vụ"
+		"share": "Chia sẻ nhiệm vụ",
+		"shareWithOrganization": "Chia sẻ với tổ chức",
+		"shareWithOrganizationDescription": "Chỉ thành viên tổ chức của bạn mới có thể truy cập",
+		"sharePublicly": "Chia sẻ công khai",
+		"sharePubliclyDescription": "Bất kỳ ai có liên kết đều có thể truy cập"
 	},
 	},
 	"unpin": "Bỏ ghim khỏi đầu",
 	"unpin": "Bỏ ghim khỏi đầu",
 	"pin": "Ghim lên đầu",
 	"pin": "Ghim lên đầu",

+ 5 - 1
webview-ui/src/i18n/locales/zh-CN/chat.json

@@ -12,7 +12,11 @@
 		"export": "导出任务历史",
 		"export": "导出任务历史",
 		"delete": "删除任务(Shift + 点击跳过确认)",
 		"delete": "删除任务(Shift + 点击跳过确认)",
 		"share": "分享任务",
 		"share": "分享任务",
-		"condenseContext": "智能压缩上下文"
+		"condenseContext": "智能压缩上下文",
+		"shareWithOrganization": "与组织分享",
+		"shareWithOrganizationDescription": "仅组织成员可访问",
+		"sharePublicly": "公开分享",
+		"sharePubliclyDescription": "任何拥有链接的人都可访问"
 	},
 	},
 	"unpin": "取消置顶",
 	"unpin": "取消置顶",
 	"pin": "置顶",
 	"pin": "置顶",

+ 5 - 1
webview-ui/src/i18n/locales/zh-TW/chat.json

@@ -12,7 +12,11 @@
 		"export": "匯出工作紀錄",
 		"export": "匯出工作紀錄",
 		"delete": "刪除工作(按住 Shift 並點選可跳過確認)",
 		"delete": "刪除工作(按住 Shift 並點選可跳過確認)",
 		"condenseContext": "智慧壓縮上下文",
 		"condenseContext": "智慧壓縮上下文",
-		"share": "分享工作"
+		"share": "分享工作",
+		"shareWithOrganization": "與組織分享",
+		"shareWithOrganizationDescription": "僅組織成員可存取",
+		"sharePublicly": "公開分享",
+		"sharePubliclyDescription": "任何擁有連結的人都可存取"
 	},
 	},
 	"unpin": "取消置頂",
 	"unpin": "取消置頂",
 	"pin": "置頂",
 	"pin": "置頂",