@adminide-stack/yantra-mobile 12.0.108 → 12.0.109-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/lib/compute.js +57 -1
  2. package/lib/compute.js.map +1 -1
  3. package/lib/config/env-config.js +8 -0
  4. package/lib/config/env-config.js.map +1 -1
  5. package/lib/features/apps/AppsCatalog.js +10 -0
  6. package/lib/features/apps/AppsCatalog.js.map +1 -1
  7. package/lib/features/apps/appArt.js +2 -1
  8. package/lib/features/apps/appArt.js.map +1 -1
  9. package/lib/features/apps/mobileAppCatalog.js +11 -0
  10. package/lib/features/apps/mobileAppCatalog.js.map +1 -1
  11. package/lib/features/apps/nativeAppHandoff.js +2 -1
  12. package/lib/features/apps/nativeAppHandoff.js.map +1 -1
  13. package/lib/features/health/healthSyncStore.js +7 -1
  14. package/lib/features/health/healthSyncStore.js.map +1 -1
  15. package/lib/features/messaging/useChatViewer.js +3 -2
  16. package/lib/features/messaging/useChatViewer.js.map +1 -1
  17. package/lib/features/webbuilder/WebBuilderExperience.js +474 -0
  18. package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -0
  19. package/lib/features/webbuilder/brandKitStorage.js +69 -0
  20. package/lib/features/webbuilder/brandKitStorage.js.map +1 -0
  21. package/lib/features/webbuilder/buildFragments.js +360 -0
  22. package/lib/features/webbuilder/buildFragments.js.map +1 -0
  23. package/lib/features/webbuilder/components/BottomTabs.js +65 -0
  24. package/lib/features/webbuilder/components/BottomTabs.js.map +1 -0
  25. package/lib/features/webbuilder/components/BrandKitSheet.js +197 -0
  26. package/lib/features/webbuilder/components/BrandKitSheet.js.map +1 -0
  27. package/lib/features/webbuilder/components/CodeView.js +99 -0
  28. package/lib/features/webbuilder/components/CodeView.js.map +1 -0
  29. package/lib/features/webbuilder/components/Composer.js +217 -0
  30. package/lib/features/webbuilder/components/Composer.js.map +1 -0
  31. package/lib/features/webbuilder/components/PreviewFrame.js +72 -0
  32. package/lib/features/webbuilder/components/PreviewFrame.js.map +1 -0
  33. package/lib/features/webbuilder/components/PreviewPlaceholder.js +107 -0
  34. package/lib/features/webbuilder/components/PreviewPlaceholder.js.map +1 -0
  35. package/lib/features/webbuilder/components/PreviewScreen.js +200 -0
  36. package/lib/features/webbuilder/components/PreviewScreen.js.map +1 -0
  37. package/lib/features/webbuilder/components/ProjectChat.js +580 -0
  38. package/lib/features/webbuilder/components/ProjectChat.js.map +1 -0
  39. package/lib/features/webbuilder/components/ProjectsScreen.js +339 -0
  40. package/lib/features/webbuilder/components/ProjectsScreen.js.map +1 -0
  41. package/lib/features/webbuilder/components/PublishSheet.js +143 -0
  42. package/lib/features/webbuilder/components/PublishSheet.js.map +1 -0
  43. package/lib/features/webbuilder/components/SiteScoreSheet.js +73 -0
  44. package/lib/features/webbuilder/components/SiteScoreSheet.js.map +1 -0
  45. package/lib/features/webbuilder/components/StudioHome.js +367 -0
  46. package/lib/features/webbuilder/components/StudioHome.js.map +1 -0
  47. package/lib/features/webbuilder/components/TemplateCard.js +73 -0
  48. package/lib/features/webbuilder/components/TemplateCard.js.map +1 -0
  49. package/lib/features/webbuilder/components/TemplatesSheet.js +178 -0
  50. package/lib/features/webbuilder/components/TemplatesSheet.js.map +1 -0
  51. package/lib/features/webbuilder/components/VersionsSheet.js +57 -0
  52. package/lib/features/webbuilder/components/VersionsSheet.js.map +1 -0
  53. package/lib/features/webbuilder/components/ui.js +291 -0
  54. package/lib/features/webbuilder/components/ui.js.map +1 -0
  55. package/lib/features/webbuilder/nativeWebBuilderRegistry.js +15 -0
  56. package/lib/features/webbuilder/nativeWebBuilderRegistry.js.map +1 -0
  57. package/lib/features/webbuilder/studioCatalog.js +147 -0
  58. package/lib/features/webbuilder/studioCatalog.js.map +1 -0
  59. package/lib/features/webbuilder/webbuilderPrompts.js +42 -0
  60. package/lib/features/webbuilder/webbuilderPrompts.js.map +1 -0
  61. package/lib/features/webbuilder/webbuilderTheme.js +63 -0
  62. package/lib/features/webbuilder/webbuilderTheme.js.map +1 -0
  63. package/lib/features/webbuilder/workflow.js +540 -0
  64. package/lib/features/webbuilder/workflow.js.map +1 -0
  65. package/lib/hooks/useChatApi.js +7 -2
  66. package/lib/hooks/useChatApi.js.map +1 -1
  67. package/lib/hooks/useChatStream.js +1 -1
  68. package/lib/hooks/useChatStream.js.map +1 -1
  69. package/lib/index.js +1 -1
  70. package/lib/index.js.map +1 -1
  71. package/lib/routes.json +106 -0
  72. package/lib/screens/WebBuilderNative/index.js +71 -0
  73. package/lib/screens/WebBuilderNative/index.js.map +1 -0
  74. package/lib/screens/WebBuilderNative/useCodeAssistantCatalog.js +45 -0
  75. package/lib/screens/WebBuilderNative/useCodeAssistantCatalog.js.map +1 -0
  76. package/lib/screens/WebBuilderNative/useWebBuilderGallery.js +125 -0
  77. package/lib/screens/WebBuilderNative/useWebBuilderGallery.js.map +1 -0
  78. package/lib/screens/WebBuilderNative/useWebBuilderHost.js +408 -0
  79. package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -0
  80. package/lib/screens/WebBuilderNative/webbuilderTransport.js +88 -0
  81. package/lib/screens/WebBuilderNative/webbuilderTransport.js.map +1 -0
  82. package/package.json +4 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWebBuilderHost.js","sources":["../../../src/screens/WebBuilderNative/useWebBuilderHost.ts"],"sourcesContent":["/**\n * The host half of the native Web Builder: everything that needs the app's\n * data stack, so Apollo stays out of the federated bundle.\n *\n * Same lane as the web Web Builder surface (`standalone/realServices`):\n * - a site is a chat (AIASSISTANT channel) holding builds; the list is the web\n * gallery's (`useWebBuilderGallery`),\n * - templates and the org's build workflow come from the Code Assistant\n * settings (`pageSettings`), read with the app's surface session,\n * - every build or edit runs `yantra-webbuilder/WEBBUILDER_TRIGGER_WORKFLOW` on\n * cdecli-agent with the web's payload (new / template remix / edit),\n * - the result comes back on the chat: its posts are polled every 2.5 s while a\n * turn runs (plus the live subscription), and the builds, the agent's\n * transcript and its progress line are read from them,\n * - publish is `aiCodeDeployToCloudflare`; the live address comes back on a post.\n */\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useAiCodeDeployToCloudflareMutation } from 'common/graphql';\nimport { v4 as uuidv4 } from 'uuid';\nimport { useCdecliConnection } from '../../contexts/CdecliConnectionContext';\nimport { useChatStream, type UseChatStreamRouting, MessageAttachment } from '../../hooks/useChatStream';\nimport { useHostChatChannel } from '../../hooks/useHostChatChannel';\nimport { config } from '../../config/env-config';\nimport { useChatMessages } from '../../hooks/useChatApi';\nimport { usePrerequisiteIds } from '../../hooks/usePrerequisiteIds';\nimport { useCanvasSession } from '../../features/canvas/useCanvasSession';\nimport { tokenClaims } from '../../features/canvas/sessionIdentity';\nimport type { AgentChatMessage } from '../../features/agent-chat';\nimport {\n buildsFromPosts,\n hasWorkflowPosts,\n pendingWork,\n stripAgentNote,\n projectFromPosts,\n transcriptFromPosts,\n turnState,\n} from '../../features/webbuilder/buildFragments';\nimport type { WebBuilderHostChat } from '../../features/webbuilder/hostChat';\nimport type {\n WebBuilderBuild,\n WebBuilderBuilding,\n WebBuilderProject,\n WebBuilderPublishResult,\n WebBuilderStartRequest,\n} from '../../features/webbuilder/types';\nimport {\n buildTriggerParams,\n newObjectId,\n templateRemixNote,\n WEBBUILDER_CHAT_SKILL,\n type WebBuilderTemplate,\n} from '../../features/webbuilder/workflow';\nimport { useWebBuilderGallery } from './useWebBuilderGallery';\nimport { useCodeAssistantCatalog } from './useCodeAssistantCatalog';\nimport { resumeSandbox, triggerBuild, uploadAttachment, type ResumeOutcome } from './webbuilderTransport';\n\n/** The web's read-back cadence and ceiling (`POLL_MS`, `POLL_TIMEOUT_MS`). */\nconst POLL_MS = 2_500;\nconst TURN_TIMEOUT_MS = 15 * 60 * 1000;\n\ninterface RunningTurn {\n channelId: string;\n text: string;\n startedAt: number;\n mode: 'new' | 'remix' | 'edit';\n}\n\nexport interface WebBuilderHost {\n projects: WebBuilderProject[];\n projectsLoading: boolean;\n projectsError: string | null;\n projectsHasMore: boolean;\n refreshProjects: () => void;\n loadMoreProjects: () => void;\n templates: WebBuilderTemplate[];\n templatesLoading: boolean;\n templatesError: string | null;\n reloadTemplates: () => void;\n startBlocked: string | null;\n /** Why the last Start did not go out (e.g. builds not set up), shown under the composer. */\n startNotice: string | null;\n activeChannelId: string | null;\n openProject: (channelId: string) => void;\n closeProject: () => void;\n startProject: (request: WebBuilderStartRequest) => void;\n builds: WebBuilderBuild[];\n buildsLoading: boolean;\n building: WebBuilderBuilding | null;\n publishing: boolean;\n hostChat: WebBuilderHostChat;\n publish: (build: WebBuilderBuild, projectName: string) => Promise<WebBuilderPublishResult>;\n /** Wake a sleeping preview (resume the sandbox, restart its dev server). */\n resumePreview: (build: WebBuilderBuild) => Promise<ResumeOutcome>;\n}\n\nfunction notSetUp(org: string): string {\n return `Builds are not set up for ${org || 'this workspace'} yet. Ask an admin to configure the Code Assistant templates.`;\n}\n\nfunction failureText(error: string): string {\n if (/\\b401\\b|unauthori[sz]ed/i.test(error)) return 'Your sign-in was not accepted. Try again in a moment.';\n if (/network|fetch|timed out/i.test(error))\n return \"Couldn't reach the build service. Check your connection and try again.\";\n return \"The build didn't start. Try again.\";\n}\n\nexport function useWebBuilderHost(routeOrg?: string): WebBuilderHost {\n const { orgName, projectId: appProjectId } = usePrerequisiteIds();\n const session = useCanvasSession();\n const { token, indexUrl, graphqlUrl } = session;\n const sessionOrg = String(tokenClaims(token).orgName ?? '');\n const effectiveOrg = routeOrg || orgName || sessionOrg || '';\n const tokenRef = useRef(token);\n tokenRef.current = token;\n\n // ── Templates and the org's build workflow (the app backend's pageSettings) ──\n const catalog = useCodeAssistantCatalog(effectiveOrg);\n const reloadTemplates = catalog.reload;\n\n // ── Your builds ────────────────────────────────────────────────────────\n const cdnOrigin = config.AWS_CDN_URL;\n const gallery = useWebBuilderGallery(effectiveOrg, cdnOrigin);\n const { projects, refresh: refreshProjects, upsert: upsertProject } = gallery;\n\n // ── The open site ──────────────────────────────────────────────────────\n const [activeChannelId, setActiveChannelId] = useState<string | null>(null);\n const projectIds = useRef(new Map<string, string>());\n const { posts: rawPosts, refetch } = useChatMessages(activeChannelId);\n const posts = useMemo(() => (activeChannelId ? (rawPosts as unknown[]) : []), [activeChannelId, rawPosts]);\n const activeProject = projects.find((p) => p.channelId === activeChannelId);\n const postBuilds = useMemo(\n () => buildsFromPosts(posts, activeProject?.title, cdnOrigin),\n [posts, activeProject?.title, cdnOrigin],\n );\n\n // ── The agent-chat lane: template remixes and sites built from chat ─────\n // The web sends a template pick to the agent chat (webbuilder-design-pro) with a\n // note naming the snapshot to boot (#384). Here that chat is the app's gateway\n // chat with the same skill; its posts land on the site's chat like any other.\n const cdecli = useCdecliConnection();\n const { setActiveChannelId: setCdecliChannel } = cdecli;\n const [agentChannelId, setAgentChannelId] = useState<string>(() => uuidv4());\n const agentChannels = useRef(new Set<string>());\n const unsavedAgentChannels = useRef(new Set<string>());\n const pendingAgentTurn = useRef<{ channelId: string; text: string; files?: MessageAttachment[] } | null>(null);\n useEffect(() => {\n setCdecliChannel(agentChannelId);\n return undefined;\n }, [agentChannelId, setCdecliChannel]);\n const { ensureChannel } = useHostChatChannel({\n channelId: agentChannelId,\n orgName: effectiveOrg,\n projectId: appProjectId ?? '',\n label: 'WebBuilderNative',\n });\n const chatRouting: UseChatStreamRouting = useMemo(\n () => ({\n channelConnected: cdecli.channelConnected,\n accountId: cdecli.accountId,\n persistenceMode: cdecli.persistenceMode ?? 'backend',\n recoverAgentAuth: cdecli.recoverAgentAuth,\n skill: WEBBUILDER_CHAT_SKILL,\n }),\n [cdecli.channelConnected, cdecli.accountId, cdecli.persistenceMode, cdecli.recoverAgentAuth],\n );\n const chat = useChatStream(agentChannelId, chatRouting);\n const agentLane =\n activeChannelId !== null &&\n (agentChannels.current.has(activeChannelId) || (posts.length > 0 && !hasWorkflowPosts(posts)));\n const agentBusy = agentLane && (chat.isLoading || chat.isStreaming);\n\n const sendAgentTurn = useCallback(\n (channelId: string, text: string, files?: MessageAttachment[]) => {\n // A site started here is created by its first message, not by opening it.\n const ready = unsavedAgentChannels.current.has(channelId) ? ensureChannel() : Promise.resolve();\n ready\n .then(() => {\n unsavedAgentChannels.current.delete(channelId);\n return chat.sendMessage(text, files, channelId);\n })\n .catch(() => undefined);\n },\n [chat, ensureChannel],\n );\n // A remix's first turn goes out once the stream and ensureChannel are on its chat.\n useEffect(() => {\n const pending = pendingAgentTurn.current;\n if (!pending || pending.channelId !== agentChannelId) return;\n pendingAgentTurn.current = null;\n sendAgentTurn(pending.channelId, pending.text, pending.files);\n }, [agentChannelId, sendAgentTurn]);\n // A finished agent turn: read the chat again so its preview link becomes the build.\n const wasAgentBusy = useRef(false);\n useEffect(() => {\n if (wasAgentBusy.current && !agentBusy) refetch().catch(() => undefined);\n wasAgentBusy.current = agentBusy;\n }, [agentBusy, refetch]);\n\n // An agent-chat site's preview link shows the moment the reply names it, before the post is re-read.\n const builds = useMemo(() => {\n if (postBuilds.length || !agentLane) return postBuilds;\n const now = Date.now();\n return buildsFromPosts(\n chat.messages.map((m, index) => ({\n id: `live-${index}`,\n message: m.content,\n props: { role: m.role === 'user' ? 'USER' : 'ASSISTANT' },\n createdAt: new Date(now + index).toISOString(),\n })),\n activeProject?.title,\n cdnOrigin,\n );\n }, [postBuilds, agentLane, chat.messages, activeProject?.title, cdnOrigin]);\n\n // The open site keeps its tile current (a new site appears, a rename or a publish shows).\n useEffect(() => {\n if (!activeChannelId || posts.length === 0) return;\n const row = projectFromPosts({ id: activeChannelId, title: activeProject?.title }, posts, cdnOrigin);\n if (row) upsertProject(row);\n }, [activeChannelId, posts, cdnOrigin, upsertProject, activeProject?.title]);\n\n // ── A running turn ─────────────────────────────────────────────────────\n const [turn, setTurn] = useState<RunningTurn | null>(null);\n const [turnError, setTurnError] = useState<string | null>(null);\n const state = useMemo(\n () => (turn && turn.channelId === activeChannelId ? turnState(posts, turn.startedAt) : null),\n [turn, activeChannelId, posts],\n );\n useEffect(() => {\n if (!turn || !state) return;\n if (state.status === 'done') setTurn(null);\n if (state.status === 'failed') {\n setTurn(null);\n setTurnError(state.error);\n }\n }, [turn, state]);\n // The web polls while a turn runs: the post that carries the build's fragment\n // (`propsConfiguration.contents`) arrives on the thread read, not the subscription.\n useEffect(() => {\n if (!turn) return undefined;\n const timer = setInterval(() => {\n if (Date.now() - turn.startedAt > TURN_TIMEOUT_MS) {\n setTurn(null);\n setTurnError('The build is taking too long. It may still finish; reopen the site later to check.');\n return;\n }\n refetch().catch(() => undefined);\n }, POLL_MS);\n return () => clearInterval(timer);\n }, [turn, refetch]);\n\n const runTurn = useCallback(\n async (opts: {\n channelId: string;\n projectId: string;\n text: string;\n template: WebBuilderTemplate | null;\n edit: WebBuilderBuild | null;\n referenceUrl?: string;\n attachments?: MessageAttachment[];\n }): Promise<string | null> => {\n const { current } = tokenRef;\n if (!current || !indexUrl) return 'Web Builder is still signing in. Try again in a moment.';\n let mode: RunningTurn['mode'] = 'new';\n if (opts.edit) mode = 'edit';\n else if (opts.template?.snapshotId) mode = 'remix';\n const uploaded = (\n await Promise.all(\n (opts.attachments ?? []).map((file) =>\n uploadAttachment(current, indexUrl, {\n name: file.name,\n url: file.url,\n dataUrl: file.dataUrl,\n mimeType: file.mimeType,\n }),\n ),\n )\n ).filter((f): f is NonNullable<typeof f> => f !== null);\n const built = buildTriggerParams({\n channelId: opts.channelId,\n projectId: opts.projectId,\n text: opts.text,\n template: opts.template ?? undefined,\n defaults: catalog.defaults,\n mode,\n ...(opts.edit\n ? {\n edit: {\n sandboxId: opts.edit.sandboxId,\n sandboxUrl: opts.edit.previewUrl,\n title: opts.edit.title,\n },\n // An edit keeps the build's stack (web `lastSandbox.templateId`).\n stackHint: opts.edit.templateId,\n }\n : {}),\n ...(opts.referenceUrl ? { referenceUrl: opts.referenceUrl } : {}),\n ...(uploaded.length ? { attachments: uploaded } : {}),\n graphqlUrl,\n token: current,\n });\n if (!built.ok) return notSetUp(effectiveOrg);\n setTurnError(null);\n setTurn({ channelId: opts.channelId, text: opts.text, startedAt: Date.now(), mode });\n const outcome = await triggerBuild(current, indexUrl, built.params);\n if (!outcome.ok) {\n const reason = outcome.error ?? '';\n console.warn('[WebBuilderNative] trigger failed:', reason);\n if (outcome.auth) session.retry();\n setTurn(null);\n setTurnError(failureText(reason));\n return failureText(reason);\n }\n refetch().catch(() => undefined);\n return null;\n },\n [indexUrl, graphqlUrl, catalog.defaults, effectiveOrg, refetch, session],\n );\n\n const [startError, setStartError] = useState<string | null>(null);\n const startProject = useCallback(\n (request: WebBuilderStartRequest) => {\n setStartError(null);\n // The build workflow needs the workspace's Code Assistant workflow model (its form\n // extension). Without it the agent chat (webbuilder-design-pro) builds the site\n // instead - the lane the web now trusts for chat builds (#378, #384) - rather than\n // refusing the Start.\n const workflowReady = Boolean(catalog.defaults?.formExtensionId);\n if (request.template || request.agent || !workflowReady) {\n // Template picks build through the agent chat, as on the web (#384).\n const id = uuidv4();\n agentChannels.current.add(id);\n unsavedAgentChannels.current.add(id);\n pendingAgentTurn.current = {\n channelId: id,\n text: request.template ? `${request.text}\\n\\n${templateRemixNote(request.template)}` : request.text,\n files: request.attachments,\n };\n setTurnError(null);\n setActiveChannelId(id);\n setAgentChannelId(id);\n return;\n }\n // The web mints a fresh channel + project for every new build.\n const channelId = newObjectId();\n const projectId = newObjectId();\n projectIds.current.set(channelId, projectId);\n setStartError(null);\n setActiveChannelId(channelId);\n runTurn({\n channelId,\n projectId,\n text: request.text,\n template: request.template,\n edit: null,\n referenceUrl: request.referenceUrl,\n attachments: request.attachments,\n })\n .then((error) => {\n if (error && /not set up|signing in/i.test(error)) {\n // Nothing was started: back to the studio with the reason.\n setActiveChannelId(null);\n setStartError(error);\n }\n })\n .catch(() => undefined);\n },\n [runTurn, catalog.defaults],\n );\n\n const openProject = useCallback((channelId: string) => {\n setTurnError(null);\n setActiveChannelId(channelId);\n // The agent chat follows the open site, so a chat-built site continues there.\n setAgentChannelId(channelId);\n }, []);\n const closeProject = useCallback(() => setActiveChannelId(null), []);\n\n // ── The agent pane ─────────────────────────────────────────────────────\n const work = useMemo(() => pendingWork(posts), [posts]);\n const running = Boolean(turn && turn.channelId === activeChannelId);\n const startedAt = turn?.startedAt ?? 0;\n const progress = state?.progress ?? null;\n const building = useMemo<WebBuilderBuilding | null>(() => {\n if (agentBusy) return { statusText: 'Building with the agent…', startedAt: startedAt || Date.now() };\n if (!running && work !== 'creating') return null;\n let fallback = 'Starting your build…';\n if (turn?.mode === 'edit') fallback = 'Updating your app…';\n if (work === 'creating') fallback = 'Starting the preview…';\n return { statusText: progress || fallback, startedAt: startedAt || Date.now() };\n }, [agentBusy, running, work, turn?.mode, progress, startedAt]);\n\n const messages: AgentChatMessage[] = useMemo(() => {\n const rows: AgentChatMessage[] = transcriptFromPosts(posts).map((m) => ({\n id: m.id,\n role: m.role,\n content: m.content,\n }));\n // The person's words show at once, before their post comes back.\n const pending = running && turn?.text ? turn.text.replace(/^build\\s*me\\s*:\\s*/i, '') : '';\n if (pending && !rows.some((m) => m.role === 'user' && pending.startsWith(m.content))) {\n rows.push({ id: `pending-${turn?.startedAt}`, role: 'user', content: pending });\n }\n return rows;\n }, [posts, running, turn]);\n\n const send = useCallback(\n (text: string, attachments?: MessageAttachment[], target?: WebBuilderBuild | null) => {\n const channelId = activeChannelId;\n if (!channelId) return;\n if (agentLane) {\n sendAgentTurn(channelId, text, attachments);\n return;\n }\n const projectId =\n projectIds.current.get(channelId) || target?.projectId || builds[0]?.projectId || newObjectId();\n projectIds.current.set(channelId, projectId);\n runTurn({ channelId, projectId, text, template: null, edit: target ?? null, attachments }).catch(\n () => undefined,\n );\n },\n [activeChannelId, agentLane, builds, runTurn, sendAgentTurn],\n );\n\n const agentMessages: AgentChatMessage[] = useMemo(\n () =>\n chat.messages.map((m, index) => ({\n id: `${m.role}-${index}`,\n role: m.role,\n // The template note is for the agent; the person sees what they typed.\n content: m.role === 'user' ? stripAgentNote(m.content).replace(/^build\\s*me\\s*:\\s*/i, '') : m.content,\n attachments: m.attachments,\n })),\n [chat.messages],\n );\n\n const hostChat = useMemo<WebBuilderHostChat>(\n () =>\n agentLane\n ? {\n messages: agentMessages,\n streaming: chat.response || null,\n busy: agentBusy,\n error: chat.error,\n connected: cdecli.channelConnected,\n send,\n }\n : {\n messages,\n streaming: running ? progress || building?.statusText || 'Working on it…' : null,\n busy: running,\n error: turnError || (session.ready ? session.error : null),\n connected: Boolean(token),\n send,\n },\n [\n agentLane,\n agentMessages,\n chat.response,\n agentBusy,\n chat.error,\n cdecli.channelConnected,\n messages,\n running,\n progress,\n building?.statusText,\n turnError,\n session.ready,\n session.error,\n token,\n send,\n ],\n );\n\n // ── Waking a preview ───────────────────────────────────────────────────\n const resumePreview = useCallback(\n async (build: WebBuilderBuild): Promise<ResumeOutcome> => {\n const { current } = tokenRef;\n if (!current || !indexUrl || !build.sandboxId) return 'failed';\n return resumeSandbox(current, indexUrl, build.sandboxId);\n },\n [indexUrl],\n );\n\n // ── Publish ────────────────────────────────────────────────────────────\n const [deployToCloudflare] = useAiCodeDeployToCloudflareMutation({});\n const publish = useCallback(\n async (build: WebBuilderBuild, projectName: string): Promise<WebBuilderPublishResult> => {\n if (!build.sandboxId || !activeChannelId) {\n return { ok: false, message: 'There is nothing to publish yet.' };\n }\n try {\n const result = await deployToCloudflare({\n variables: { sandboxId: build.sandboxId, projectName, channelId: activeChannelId },\n });\n const payload = result.data?.aiCodeDeployToCloudflare;\n if (payload?.success) return { ok: true };\n console.warn('[WebBuilderNative] publish refused:', payload?.message);\n return { ok: false, message: \"Publishing didn't start. Try again in a moment.\" };\n } catch (err) {\n console.warn('[WebBuilderNative] publish failed:', err);\n return { ok: false, message: \"Publishing didn't start. Check your connection and try again.\" };\n }\n },\n [deployToCloudflare, activeChannelId],\n );\n\n // Only a connection still coming up blocks the composer (the web refuses at send time):\n // a template build needs the agent chat, a workflow build the session. Anything that\n // fails a send - a workspace without a build workflow - comes back as `startNotice`.\n let startBlocked: string | null = null;\n if (!token && !cdecli.channelConnected) {\n startBlocked = session.ready && session.error ? session.error : 'Connecting to Web Builder…';\n }\n\n return {\n projects,\n projectsLoading: gallery.loading,\n projectsError: gallery.error,\n projectsHasMore: gallery.hasMore,\n refreshProjects,\n loadMoreProjects: gallery.loadMore,\n templates: catalog.templates,\n templatesLoading: catalog.loading,\n templatesError: catalog.error,\n reloadTemplates,\n startBlocked,\n startNotice: startError,\n activeChannelId,\n openProject,\n closeProject,\n startProject,\n builds,\n buildsLoading: activeChannelId !== null && posts.length === 0 && !running,\n building,\n publishing: work === 'publishing',\n hostChat,\n publish,\n resumePreview,\n };\n}\n"],"names":["uuidv4","_a","_b","_c"],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import {createRemoteUploadMedia,createRemoteConnectorExec}from'../../features/canvas/videoEditor/remoteMediaClient.js';import {WEBBUILDER_CONNECTOR_ID,WEBBUILDER_TRIGGER_WORKFLOW_ACTION}from'../../features/webbuilder/workflow.js';const TRIGGER_TIMEOUT_MS = 9e4;
2
+ async function triggerBuild(token, indexUrl, params) {
3
+ var _a;
4
+ try {
5
+ const result = await createRemoteConnectorExec(token, indexUrl)(WEBBUILDER_CONNECTOR_ID, WEBBUILDER_TRIGGER_WORKFLOW_ACTION, params, {
6
+ timeoutMs: TRIGGER_TIMEOUT_MS
7
+ });
8
+ if (result.successful === false) {
9
+ const error = String((_a = result.error) != null ? _a : "The build did not start.");
10
+ return {
11
+ ok: false,
12
+ error,
13
+ auth: /\b401\b|unauthori[sz]ed/i.test(error)
14
+ };
15
+ }
16
+ return {
17
+ ok: true
18
+ };
19
+ } catch (err) {
20
+ const error = err instanceof Error ? err.message : String(err);
21
+ return {
22
+ ok: false,
23
+ error,
24
+ auth: /\b401\b|unauthori[sz]ed/i.test(error)
25
+ };
26
+ }
27
+ }
28
+ async function uploadAttachment(token, indexUrl, file) {
29
+ if (file.url && /^https?:\/\//i.test(file.url)) return {
30
+ name: file.name,
31
+ url: file.url,
32
+ mimeType: file.mimeType
33
+ };
34
+ const local = file.url || file.dataUrl;
35
+ if (!local) return null;
36
+ try {
37
+ const url = await createRemoteUploadMedia(token, indexUrl)(local);
38
+ return {
39
+ name: file.name,
40
+ url,
41
+ mimeType: file.mimeType
42
+ };
43
+ } catch (err) {
44
+ console.warn("[WebBuilderNative] attachment upload failed:", err);
45
+ return null;
46
+ }
47
+ }
48
+ const PREVIEW_START_WORKDIRS = ["/home/yantra/repo", "/home/user/repo", "/home/yantra", "/home/user"];
49
+ const SANDBOX_GONE_RE = /Sandbox Not Found|Paused sandbox .+ not found|sandbox \S+ not found|sandbox .*wasn'?t found|not found \(404\)|no sandbox found|does not exist|sandbox.*expired|sandbox.*killed|probably not running anymore|not running anymore|cannot be resumed|was (?:killed|deleted|destroyed)/i;
50
+ const RESUME_TIMEOUT_MS = 12e4;
51
+ async function resumeSandbox(token, indexUrl, sandboxId) {
52
+ const exec = createRemoteConnectorExec(token, indexUrl);
53
+ const run = async (action, params) => {
54
+ try {
55
+ const result = await exec(WEBBUILDER_CONNECTOR_ID, action, params, {
56
+ timeoutMs: RESUME_TIMEOUT_MS
57
+ });
58
+ const blob = JSON.stringify(result);
59
+ return {
60
+ ok: result.successful !== false,
61
+ gone: SANDBOX_GONE_RE.test(blob),
62
+ blob
63
+ };
64
+ } catch (err) {
65
+ const message = err instanceof Error ? err.message : String(err);
66
+ return {
67
+ ok: false,
68
+ gone: SANDBOX_GONE_RE.test(message),
69
+ blob: message
70
+ };
71
+ }
72
+ };
73
+ const connected = await run("WEBBUILDER_CONNECT", {
74
+ sandbox_id: sandboxId,
75
+ autoResume: true
76
+ });
77
+ if (connected.gone) return "gone";
78
+ for (const workDir of PREVIEW_START_WORKDIRS) {
79
+ const started = await run("WEBBUILDER_START", {
80
+ sandbox_id: sandboxId,
81
+ workDir
82
+ });
83
+ if (started.gone) return "gone";
84
+ if (started.ok) return "ok";
85
+ if (!/no package\.json/i.test(started.blob)) return connected.ok ? "ok" : "failed";
86
+ }
87
+ return connected.ok ? "ok" : "failed";
88
+ }export{resumeSandbox,triggerBuild,uploadAttachment};//# sourceMappingURL=webbuilderTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webbuilderTransport.js","sources":["../../../src/screens/WebBuilderNative/webbuilderTransport.ts"],"sourcesContent":["/**\n * The calls the native Web Builder makes the way the web surface makes them: the\n * build workflow trigger on cdecli-agent and turn attachments, both on the app's\n * surface session - the same JWT the web surface holds as its cdecli token.\n */\nimport {\n createRemoteConnectorExec,\n createRemoteUploadMedia,\n} from '../../features/canvas/videoEditor/remoteMediaClient';\nimport { WEBBUILDER_CONNECTOR_ID, WEBBUILDER_TRIGGER_WORKFLOW_ACTION } from '../../features/webbuilder/workflow';\n\n/** The trigger answers in seconds; the build itself runs on and reports on the chat. */\nconst TRIGGER_TIMEOUT_MS = 90_000;\n\n/** `error` and `auth` (the agent refused the session) are set when `ok` is false. */\nexport interface TriggerOutcome {\n ok: boolean;\n error?: string;\n auth?: boolean;\n}\n\n/** Runs `yantra-webbuilder/WEBBUILDER_TRIGGER_WORKFLOW` with the web's params. */\nexport async function triggerBuild(\n token: string,\n indexUrl: string,\n params: Record<string, unknown>,\n): Promise<TriggerOutcome> {\n try {\n const result = await createRemoteConnectorExec(token, indexUrl)(\n WEBBUILDER_CONNECTOR_ID,\n WEBBUILDER_TRIGGER_WORKFLOW_ACTION,\n params,\n { timeoutMs: TRIGGER_TIMEOUT_MS },\n );\n if (result.successful === false) {\n const error = String(result.error ?? 'The build did not start.');\n return { ok: false, error, auth: /\\b401\\b|unauthori[sz]ed/i.test(error) };\n }\n return { ok: true };\n } catch (err) {\n const error = err instanceof Error ? err.message : String(err);\n return { ok: false, error, auth: /\\b401\\b|unauthori[sz]ed/i.test(error) };\n }\n}\n\n/** A photo or file for the turn as a URL the workflow can fetch (the web posts URLs, never base64). */\nexport async function uploadAttachment(\n token: string,\n indexUrl: string,\n file: { url?: string; dataUrl?: string; name: string; mimeType?: string },\n): Promise<{ name: string; url: string; mimeType?: string } | null> {\n if (file.url && /^https?:\\/\\//i.test(file.url)) return { name: file.name, url: file.url, mimeType: file.mimeType };\n const local = file.url || file.dataUrl;\n if (!local) return null;\n try {\n const url = await createRemoteUploadMedia(token, indexUrl)(local);\n return { name: file.name, url, mimeType: file.mimeType };\n } catch (err) {\n console.warn('[WebBuilderNative] attachment upload failed:', err);\n return null;\n }\n}\n\n/** The folders a build's project may live in (web `PREVIEW_START_WORKDIRS`). */\nconst PREVIEW_START_WORKDIRS = ['/home/yantra/repo', '/home/user/repo', '/home/yantra', '/home/user'];\n/** The sandbox was reclaimed, not paused (web `SANDBOX_GONE_RE`). */\nconst SANDBOX_GONE_RE =\n /Sandbox Not Found|Paused sandbox .+ not found|sandbox \\S+ not found|sandbox .*wasn'?t found|not found \\(404\\)|no sandbox found|does not exist|sandbox.*expired|sandbox.*killed|probably not running anymore|not running anymore|cannot be resumed|was (?:killed|deleted|destroyed)/i;\nconst RESUME_TIMEOUT_MS = 120_000;\n\nexport type ResumeOutcome = 'ok' | 'gone' | 'failed';\n\n/**\n * Brings a sleeping preview back without the agent - the web's `ensurePreview`:\n * resume the sandbox (`WEBBUILDER_CONNECT` with `autoResume`), then start its dev\n * server (`WEBBUILDER_START`) in the folder the project lives in. `gone` means E2B\n * reclaimed the sandbox: only a rebuild brings the site back.\n */\nexport async function resumeSandbox(token: string, indexUrl: string, sandboxId: string): Promise<ResumeOutcome> {\n const exec = createRemoteConnectorExec(token, indexUrl);\n const run = async (action: string, params: Record<string, unknown>) => {\n try {\n const result = await exec(WEBBUILDER_CONNECTOR_ID, action, params, { timeoutMs: RESUME_TIMEOUT_MS });\n const blob = JSON.stringify(result);\n return { ok: result.successful !== false, gone: SANDBOX_GONE_RE.test(blob), blob };\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return { ok: false, gone: SANDBOX_GONE_RE.test(message), blob: message };\n }\n };\n const connected = await run('WEBBUILDER_CONNECT', { sandbox_id: sandboxId, autoResume: true });\n if (connected.gone) return 'gone';\n for (const workDir of PREVIEW_START_WORKDIRS) {\n // eslint-disable-next-line no-await-in-loop -- one folder at a time, like the web\n const started = await run('WEBBUILDER_START', { sandbox_id: sandboxId, workDir });\n if (started.gone) return 'gone';\n if (started.ok) return 'ok';\n // Only \"no package.json here\" means try the next folder.\n if (!/no package\\.json/i.test(started.blob)) return connected.ok ? 'ok' : 'failed';\n }\n return connected.ok ? 'ok' : 'failed';\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adminide-stack/yantra-mobile",
3
- "version": "12.0.108",
3
+ "version": "12.0.109-alpha.0",
4
4
  "description": "Sample core for higher packages to depend on",
5
5
  "license": "ISC",
6
6
  "author": "CDMBase LLC",
@@ -27,7 +27,7 @@
27
27
  "uuid": "^9.0.0"
28
28
  },
29
29
  "devDependencies": {
30
- "common": "^12.0.108",
30
+ "common": "12.0.109-alpha.0",
31
31
  "libphonenumber-js": "^1.13.3"
32
32
  },
33
33
  "peerDependencies": {
@@ -45,7 +45,7 @@
45
45
  "@messenger-box/platform-mobile": "*",
46
46
  "@react-native-async-storage/async-storage": "*",
47
47
  "@react-navigation/native": "*",
48
- "common": "12.0.105",
48
+ "common": "12.0.108-alpha.0",
49
49
  "expo-constants": "*",
50
50
  "expo-secure-store": "*",
51
51
  "expo-web-browser": "*",
@@ -65,5 +65,5 @@
65
65
  "typescript": {
66
66
  "definition": "lib/index.d.ts"
67
67
  },
68
- "gitHead": "5d65a3b4598fec3ac23c8a55d3d2eda113292ce3"
68
+ "gitHead": "6cb90961746a8bdbbacd351710274cffbed5eab7"
69
69
  }