@arbidocs/blocks 0.5.52 → 0.5.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ConnectedNativeDocxComparison-E3J2DKJU.js → ConnectedNativeDocxComparison-URPACTBQ.js} +8 -8
- package/dist/{ConnectedStreamedWordArtifact-OLTI5TGZ.js.map → ConnectedNativeDocxComparison-URPACTBQ.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-B3PXV6QS.cjs → ConnectedNativeDocxComparison-YROKRZOV.cjs} +9 -9
- package/dist/{ConnectedNativeDocxComparison-B3PXV6QS.cjs.map → ConnectedNativeDocxComparison-YROKRZOV.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-USZ2EO3T.js → ConnectedNativeDocxEditor-A3F2QISR.js} +7 -7
- package/dist/{ConnectedNativeDocxEditor-USZ2EO3T.js.map → ConnectedNativeDocxEditor-A3F2QISR.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-3ZQQ3IKM.cjs → ConnectedNativeDocxEditor-MJ3LAXTF.cjs} +9 -9
- package/dist/{ConnectedNativeDocxEditor-3ZQQ3IKM.cjs.map → ConnectedNativeDocxEditor-MJ3LAXTF.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-OLTI5TGZ.js → ConnectedStreamedWordArtifact-GQWYYVT5.js} +8 -8
- package/dist/{ConnectedNativeDocxComparison-E3J2DKJU.js.map → ConnectedStreamedWordArtifact-GQWYYVT5.js.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-WP7XISA3.cjs → ConnectedStreamedWordArtifact-KPVL377Z.cjs} +9 -9
- package/dist/ConnectedStreamedWordArtifact-KPVL377Z.cjs.map +1 -0
- package/dist/{DocumentReviewCard-WHDZA46J.cjs → DocumentReviewCard-IWQFZO3X.cjs} +3 -3
- package/dist/{DocumentReviewCard-WHDZA46J.cjs.map → DocumentReviewCard-IWQFZO3X.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-PZFDQMLX.js → DocumentReviewCard-TBU56QQG.js} +3 -3
- package/dist/{DocumentReviewCard-PZFDQMLX.js.map → DocumentReviewCard-TBU56QQG.js.map} +1 -1
- package/dist/WorkspaceTableView-4DZ4YODA.js +1 -1
- package/dist/WorkspaceTableView-XHEVFCRP.cjs +1 -1
- package/dist/agents/index.cjs +335 -335
- package/dist/agents/index.js +5 -5
- package/dist/calls/index.cjs +1 -1
- package/dist/calls/index.js +1 -1
- package/dist/{chunk-ED4TE7XG.cjs → chunk-2DRTKD2W.cjs} +7 -7
- package/dist/{chunk-ED4TE7XG.cjs.map → chunk-2DRTKD2W.cjs.map} +1 -1
- package/dist/{chunk-PEBVG2FZ.cjs → chunk-2KQH2Z6Y.cjs} +4 -4
- package/dist/{chunk-PEBVG2FZ.cjs.map → chunk-2KQH2Z6Y.cjs.map} +1 -1
- package/dist/{chunk-JA45SE3Q.js → chunk-2SAVSXZF.js} +3 -3
- package/dist/{chunk-JA45SE3Q.js.map → chunk-2SAVSXZF.js.map} +1 -1
- package/dist/{chunk-JS7KJRKG.js → chunk-75Z5AUMM.js} +3 -3
- package/dist/{chunk-JS7KJRKG.js.map → chunk-75Z5AUMM.js.map} +1 -1
- package/dist/{chunk-NX2RTI3E.js → chunk-7WMEKKX5.js} +3 -3
- package/dist/{chunk-NX2RTI3E.js.map → chunk-7WMEKKX5.js.map} +1 -1
- package/dist/{chunk-WADQ6T5Q.js → chunk-BAKRM5XB.js} +3 -3
- package/dist/{chunk-WADQ6T5Q.js.map → chunk-BAKRM5XB.js.map} +1 -1
- package/dist/{chunk-JJ3BM4O4.js → chunk-FCHIMF7Q.js} +3 -3
- package/dist/{chunk-JJ3BM4O4.js.map → chunk-FCHIMF7Q.js.map} +1 -1
- package/dist/{chunk-YIPMYI7I.cjs → chunk-JEXP72GJ.cjs} +4 -4
- package/dist/{chunk-YIPMYI7I.cjs.map → chunk-JEXP72GJ.cjs.map} +1 -1
- package/dist/{chunk-P35R4CNF.js → chunk-KOKGEFSE.js} +4 -4
- package/dist/{chunk-P35R4CNF.js.map → chunk-KOKGEFSE.js.map} +1 -1
- package/dist/{chunk-UIGZHXIA.js → chunk-LXQGAYUZ.js} +6 -6
- package/dist/{chunk-UIGZHXIA.js.map → chunk-LXQGAYUZ.js.map} +1 -1
- package/dist/{chunk-O56XBFEC.js → chunk-MGHRGZPH.js} +4 -4
- package/dist/{chunk-O56XBFEC.js.map → chunk-MGHRGZPH.js.map} +1 -1
- package/dist/{chunk-PC3RCNCQ.js → chunk-O7KU7QW2.js} +4 -4
- package/dist/{chunk-PC3RCNCQ.js.map → chunk-O7KU7QW2.js.map} +1 -1
- package/dist/{chunk-Q5MGOAZW.cjs → chunk-PTNV3TT5.cjs} +36 -36
- package/dist/{chunk-Q5MGOAZW.cjs.map → chunk-PTNV3TT5.cjs.map} +1 -1
- package/dist/{chunk-FCOP4ZJD.cjs → chunk-R3247EN3.cjs} +13 -13
- package/dist/{chunk-FCOP4ZJD.cjs.map → chunk-R3247EN3.cjs.map} +1 -1
- package/dist/{chunk-BKILOHZ3.cjs → chunk-ST6ELFDF.cjs} +4 -4
- package/dist/{chunk-BKILOHZ3.cjs.map → chunk-ST6ELFDF.cjs.map} +1 -1
- package/dist/{chunk-6ODV5TIC.cjs → chunk-VGFU6JFI.cjs} +5 -5
- package/dist/{chunk-6ODV5TIC.cjs.map → chunk-VGFU6JFI.cjs.map} +1 -1
- package/dist/{chunk-TXJK77YJ.js → chunk-VT3TOWWF.js} +3 -3
- package/dist/{chunk-TXJK77YJ.js.map → chunk-VT3TOWWF.js.map} +1 -1
- package/dist/{chunk-22WFFNYY.cjs → chunk-VVNG7LMP.cjs} +18 -18
- package/dist/{chunk-22WFFNYY.cjs.map → chunk-VVNG7LMP.cjs.map} +1 -1
- package/dist/{chunk-N5CKIKQB.cjs → chunk-WHJMV6TX.cjs} +10 -10
- package/dist/{chunk-N5CKIKQB.cjs.map → chunk-WHJMV6TX.cjs.map} +1 -1
- package/dist/{chunk-F72ZD5Q2.cjs → chunk-YD3RN2FY.cjs} +3 -3
- package/dist/{chunk-F72ZD5Q2.cjs.map → chunk-YD3RN2FY.cjs.map} +1 -1
- package/dist/connect/docx.cjs +11 -11
- package/dist/connect/docx.js +7 -7
- package/dist/connect/index.cjs +279 -279
- package/dist/connect/index.js +15 -15
- package/dist/connect/viewer.cjs +4 -4
- package/dist/connect/viewer.js +4 -4
- package/dist/connection/facts/useFactFilters.d.ts +10 -1
- package/dist/facts/index.cjs +55 -55
- package/dist/facts/index.js +3 -3
- package/dist/index.cjs +400 -400
- package/dist/index.js +7 -7
- package/dist/settings/index.cjs +1 -1
- package/dist/settings/index.js +1 -1
- package/dist/workflow-canvas/index.cjs +30 -30
- package/dist/workflow-canvas/index.js +8 -8
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-WP7XISA3.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/ConnectedWorkflowHistory.tsx","../src/connection/workflows/useWorkflowTasks.ts","../src/connection/workflows/useSkillsEnabled.ts","../src/connection/workflows/useWorkflowDefinitions.ts","../src/connection/tasks/ConnectedTaskComposer.tsx","../src/connection/tasks/useTaskPeople.tsx","../src/connection/workflows/useWorkflowsPageState.ts"],"names":["fmtDate","useBlocksEnvironment","useWorkflowRuns","jsx","TaskRunsDialog","formatRelativeTime","useConversationActivity","useAgents","useConnectedWorkspace","useConnectedWorkspaceRole","useCallback","PersonPill","TaskActivityDialog","useCreateWork","useRunWorkflow","useStartTaskQuery","useCreateWorkflow","useUpdateConversation","useUpdateWorkflow","useArbiSessionState","useGrantAgentAccess","useDocuments","useMemo","getDocumentTitle","taskComposerToCreateRequest","taskComposerToUpdateRequest","composerToWorkflowUpdate","useUserSettings","useSkills","useWorkflowUsage","mergeSkillWorkflows","WEB_WORKFLOWS","DASHBOARD_PINNED","sortByRecentUse","DASHBOARD_OPERATIONS","CUSTOM_TASK","REMIND_TASK","useAgentWorkspaces","jsxs","useOpenWorkflow","useTags","useWorkflows","useWorkspaces","usePlanWork","useWorkItems","useConnectedWorkflowScopeSource","listTimeZones","moveTargets","CUSTOM_TASK_ID","REMIND_TASK_ID","workflowToComposerValues","taskToComposerValues","detectTimeZone","useState","useEffect","ArbiApiError","TaskComposer","AUTOMATION_EVENTS","renderWorkflowIcon","ConnectedWorkflowDocumentsField","Button","TaskPlan","useWorkspaceUsers","useArbiSession","isAgent","getUserDisplayName","DocumentUser"],"mappings":"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","file":"chunk-Q5MGOAZW.cjs","sourcesContent":["/**\n * A saved workflow's history and a task's activity, bound to the connection.\n *\n * - `ConnectedWorkflowHistory`: every run of a workflow (re-read while shown), each with when, what\n * it was (a thread, an email, an AI review, a reminder) and how it went; a run's thread opens\n * through the environment's `openConversation`, a document action's result through the host.\n * - `ConnectedTaskActivityDialog`: a task's timeline (re-read while it runs), with who did what.\n */\n\nimport { useCallback, type ReactNode } from 'react'\nimport { useAgents, useConversationActivity, useWorkflowRuns } from '@arbidocs/react'\nimport { formatRelativeTime } from '@arbidocs/react/ui'\nimport {\n TaskRunsDialog,\n type TaskRunView,\n type TaskRunsDialogLabels,\n} from '../agents/tasks/TaskRunsDialog'\nimport { TaskActivityDialog } from '../agents/tasks/TaskActivityDialog'\nimport type { TaskActivityEvent } from '../agents/tasks/TaskActivityTimeline'\nimport { PersonPill, type TaskPerson } from '../agents/tasks/PersonPill'\nimport { fmtDate } from '../lib/format'\nimport { useBlocksEnvironment } from '../provider/environment'\nimport { useConnectedWorkspace } from './ConnectionProvider'\nimport { useConnectedWorkspaceRole } from './ConnectedWorkflowsTable'\n\ntype WorkflowRun = NonNullable<ReturnType<typeof useWorkflowRuns>['data']>[number]\n\n/** What a run was, in a word. */\nconst RUN_KIND: Record<string, string> = {\n email_documents: 'Email',\n annotate_documents: 'AI Review',\n reminder: 'Reminder',\n}\nconst DOCUMENT_ACTIONS = new Set(['email_documents', 'annotate_documents'])\n\n/** A run as the history lists it: when, what, on how many documents. */\nexport function workflowRunView(\n run: WorkflowRun,\n formatDate: (iso: string) => string\n): TaskRunView {\n const documents = DOCUMENT_ACTIONS.has(run.action_type)\n ? ` · ${run.document_ext_ids.length} documents`\n : ''\n return {\n id: `execution-${run.id}`,\n // An AI review that finished has a result to open (its fields over its documents).\n resultId:\n run.action_type === 'annotate_documents' && run.status === 'completed'\n ? String(run.id)\n : undefined,\n status: run.status,\n when: `${formatDate(run.created_at)} · ${RUN_KIND[run.action_type] ?? 'Thread'}${documents}`,\n error: run.error,\n conversationId: run.conversation_ext_id ?? undefined,\n }\n}\n\nexport interface ConnectedWorkflowHistoryProps {\n /** The workflow (`null`: closed). */\n workflow: { external_id: string; name: string } | null\n onOpenChange: (open: boolean) => void\n /** In the page rather than a dialog. */\n inline?: boolean\n hideHeader?: boolean\n formatDate?: (iso: string) => string\n /** Open a document action's result (an AI review's fields): the host's. Absent: no Open. */\n onOpenResult?: (run: WorkflowRun) => void\n /** Under a failed run: e.g. a way to report it. */\n renderErrorReport?: (run: TaskRunView) => ReactNode\n labels?: Partial<TaskRunsDialogLabels>\n}\n\nexport function ConnectedWorkflowHistory({\n workflow,\n onOpenChange,\n inline,\n hideHeader,\n formatDate = fmtDate,\n onOpenResult,\n renderErrorReport,\n labels,\n}: ConnectedWorkflowHistoryProps) {\n const { openConversation } = useBlocksEnvironment()\n const { data: runs = [], isLoading } = useWorkflowRuns(workflow?.external_id)\n return (\n <TaskRunsDialog\n inline={inline}\n hideHeader={hideHeader}\n open={!!workflow}\n onOpenChange={onOpenChange}\n taskName={workflow?.name}\n renderErrorReport={renderErrorReport}\n isLoading={isLoading}\n labels={{\n title: (name) => `History — ${name}`,\n description: 'Executions and results of this workflow.',\n empty: 'This workflow hasn’t run yet.',\n ...labels,\n }}\n runs={runs.map((run) => workflowRunView(run, formatDate))}\n onOpenResult={\n onOpenResult &&\n ((id) => {\n const run = runs.find((r) => String(r.id) === id)\n if (run) onOpenResult(run)\n })\n }\n onOpenRun={(conversationId) => openConversation(conversationId)}\n />\n )\n}\n\n/** Relative time, compact for list rows. */\nconst relativeTime = (iso: string) => formatRelativeTime(iso, { style: 'short' })\n\nexport interface ConnectedTaskActivityDialogProps {\n conversationId: string\n taskName: string\n /** The run is generating right now: the timeline then re-reads itself every few seconds. */\n live?: boolean\n onClose: () => void\n /** How a person shows (the host's own pill). Default: the shared pill with their name. */\n renderPerson?: (person: TaskPerson) => ReactNode\n formatExact?: (iso: string) => string\n}\n\nexport function ConnectedTaskActivityDialog({\n conversationId,\n taskName,\n live,\n onClose,\n renderPerson: renderTaskPerson,\n formatExact = fmtDate,\n}: ConnectedTaskActivityDialogProps) {\n const activity = useConversationActivity(conversationId, { live })\n const { data: agents = [] } = useAgents()\n const { userId } = useConnectedWorkspace()\n const { members } = useConnectedWorkspaceRole()\n const renderPerson = useCallback(\n (id: string | null | undefined) => {\n const isMe = !!id && id === userId\n const member = members.find((m) => m.user.external_id === id)?.user\n const name =\n (member && [member.given_name, member.family_name].filter(Boolean).join(' ')) ||\n member?.email\n const person = { id, label: isMe ? 'You' : name || 'Someone', isMe }\n return renderTaskPerson ? renderTaskPerson(person) : <PersonPill person={person} />\n },\n [renderTaskPerson, userId, members]\n )\n const agentName = useCallback(\n (agentId: string) => agents.find((a) => a.external_id === agentId)?.given_name ?? undefined,\n [agents]\n )\n return (\n <TaskActivityDialog\n open\n onOpenChange={(open) => !open && onClose()}\n taskName={taskName}\n events={activity.data as TaskActivityEvent[] | undefined}\n isLoading={activity.isLoading}\n isError={activity.isError}\n renderPerson={renderPerson}\n agentName={agentName}\n formatRelative={relativeTime}\n formatExact={formatExact}\n />\n )\n}\n","/**\n * Creating and updating work and workflows from the composer, in one place.\n *\n * \"Now\" is an assistant query with task options (the person's own run: the thread becomes a task); a plain\n * to-do creates work with no run. Any other start (a date, a repeat, an event, after another task) saves a workflow\n * that creates the work when it fires. The request mapping is shared with every host (and tested in\n * blocks): `taskComposerToCreateRequest` decides which.\n *\n * Workspace authorization is a per-run, least-privilege choice (`auth_mode`) composed over the shipped\n * workspace-access-request + grant machinery:\n * - Now -> no tier: the query runs as the person asking, with their own access.\n * - Workflow -> `scheduled_require_auth` by default (asks at run time), or `scheduled_permanent`\n * (\"keep access\"): standing membership so unattended runs can decrypt while the owner\n * is away. Only this tier grants membership.\n */\n\nimport {\n useCreateWorkflow,\n useGrantAgentAccess,\n useRunWorkflow,\n useUpdateWorkflow,\n useDocuments,\n useArbiSessionState,\n useCreateWork,\n useStartTaskQuery,\n useUpdateConversation,\n} from '@arbidocs/react'\nimport { getDocumentTitle } from '@arbidocs/react/ui'\nimport type { components } from '@arbidocs/client'\nimport { useCallback, useMemo } from 'react'\nimport {\n composerToWorkflowUpdate,\n taskComposerToCreateRequest,\n taskComposerToUpdateRequest,\n} from '../../agents/tasks/taskRequest'\nimport { type TaskComposerValues } from '../../agents/tasks/taskComposerTypes'\nimport { type WorkflowDefinition } from '../../agents/workflows/types'\nimport type { TaskPlan } from '../../agents/workflows/planSteps'\nimport { useBlocksEnvironment } from '../../provider/environment'\n\ntype Task = components['schemas']['ConversationResponse']\ntype Workflow = components['schemas']['WorkflowResponse']\n\nexport interface TaskSubmitContext {\n workflow: WorkflowDefinition\n values: TaskComposerValues\n /** Goal checklist for agent work, if one was drafted. */\n plan?: TaskPlan | null\n}\n\n/** What a composer submission created. `ran` is null for work no agent runs. */\nexport type CreateOutcome =\n | { kind: 'work'; task: Pick<Task, 'title'> & { external_id?: string }; ran: boolean | null }\n | { kind: 'workflow'; workflow: Workflow }\n\nexport function useWorkflowTasks() {\n const createWork = useCreateWork()\n const runWorkflow = useRunWorkflow()\n const startQuery = useStartTaskQuery()\n const createWorkflow = useCreateWorkflow()\n const updateConversation = useUpdateConversation()\n const updateWorkflowMutation = useUpdateWorkflow()\n const activeWorkspaceId = useArbiSessionState((s) => s.workspaceId)\n const { openFiles } = useBlocksEnvironment()\n\n // Standing access for a workflow's agent, so its unattended runs can read the workspace. An agent\n // that is already a member makes the server refuse the re-grant: that is no failure here.\n const { mutateAsync: grant } = useGrantAgentAccess()\n const grantAgentAccess = useCallback(\n (agentExtId: string, workspaceId: string) =>\n grant({ agentExtId, workspaceId }).then(\n () => undefined,\n () => undefined\n ),\n [grant]\n )\n // File names for the prompt's wording (\"the document <name>\"): the server is told the ids as well.\n const { data: documents = [] } = useDocuments()\n const documentTitles = useMemo(\n () =>\n Object.fromEntries(documents.map((d) => [d.external_id, getDocumentTitle(d, d.external_id)])),\n [documents]\n )\n\n /**\n * Create work or a workflow. `forceWorkflow` is for the workflow dialog, where even a reminder is\n * saved as a workflow.\n */\n const create = useCallback(\n async (ctx: TaskSubmitContext, forceWorkflow = false): Promise<CreateOutcome> => {\n const request = taskComposerToCreateRequest(\n { ...ctx, documentTitles, plan: ctx.plan ?? null },\n activeWorkspaceId ?? undefined,\n forceWorkflow\n )\n if (request.kind === 'workflow') {\n const workflow = await createWorkflow.mutateAsync(request.body)\n // Keep access: deposit the key for the agent the server assigned (the Assistant when none was\n // picked), while the owner is here, so unattended runs start on their own.\n const workspaceId = workflow.workspace_ext_id ?? request.body.workspace_ext_id\n if (\n workflow.auth_mode === 'scheduled_permanent' &&\n !workflow.on_demand &&\n workflow.agent_ext_id &&\n workspaceId\n ) {\n await grantAgentAccess(workflow.agent_ext_id, workspaceId)\n }\n if (ctx.workflow.documentAction && ctx.values.when === 'now' && !forceWorkflow) {\n const result = await runWorkflow.mutateAsync(workflow.external_id)\n if (result.error) throw new Error(result.error)\n openFiles()\n }\n return { kind: 'workflow', workflow }\n }\n if (request.kind === 'query') {\n // Run now is the person's own assistant query: it makes the thread a task and runs it.\n const { conversationId } = await startQuery.start(request.query)\n return {\n kind: 'work',\n task: { external_id: conversationId, title: request.query.task.title ?? null },\n ran: true,\n }\n }\n // A plain to-do (or reminder): a task with no run.\n const task = await createWork.mutateAsync(request.body)\n return { kind: 'work', task, ran: null }\n },\n [\n activeWorkspaceId,\n createWork,\n createWorkflow,\n documentTitles,\n grantAgentAccess,\n startQuery,\n runWorkflow,\n openFiles,\n ]\n )\n\n /** PATCH the editable fields of a task (the instruction, workspace and agent stay as created). */\n const update = useCallback(\n async (task: Pick<Task, 'external_id'> & { is_owner?: boolean }, ctx: TaskSubmitContext) => {\n const patch = taskComposerToUpdateRequest({ ...ctx, plan: ctx.plan ?? null })\n // Who can see a task is its owner's to change: an editor's save leaves it out.\n if (task.is_owner === false) delete patch.shared\n await updateConversation.mutateAsync({ conversationId: task.external_id, patch })\n },\n [updateConversation]\n )\n\n /** PATCH a workflow: its name, trigger and action. */\n const updateWorkflow = useCallback(\n async (\n workflow: Pick<Workflow, 'external_id' | 'agent_ext_id' | 'workspace_ext_id'> & {\n is_owner?: boolean\n },\n ctx: TaskSubmitContext\n ) => {\n const patch = composerToWorkflowUpdate({ ...ctx, documentTitles, plan: ctx.plan ?? null })\n // Sharing a workflow is its owner's: an editor's save leaves it out.\n if (workflow.is_owner === false) delete patch.shared\n const workspaceId = workflow.workspace_ext_id ?? activeWorkspaceId\n const updated = await updateWorkflowMutation.mutateAsync({\n workflowId: workflow.external_id,\n patch,\n })\n // The agent the server keeps (the Assistant when none was picked) gets the key for unattended runs.\n const agentId = updated.agent_ext_id ?? patch.agent_ext_id ?? workflow.agent_ext_id\n if (\n updated.auth_mode === 'scheduled_permanent' &&\n !updated.on_demand &&\n agentId &&\n workspaceId\n ) {\n await grantAgentAccess(agentId, workspaceId)\n }\n },\n [activeWorkspaceId, documentTitles, grantAgentAccess, updateWorkflowMutation]\n )\n\n return {\n create,\n update,\n updateWorkflow,\n isPending:\n createWork.isPending ||\n startQuery.isPending ||\n createWorkflow.isPending ||\n updateConversation.isPending ||\n updateWorkflowMutation.isPending,\n }\n}\n","/**\n * The one gate for everything skill-shaped in the app: the empty chat's Start list, the skill\n * entries of the slash menu, the sidebar's Skills item, the Skills browser's entry points and the\n * typed `/skill` interception. It is the personal `show_skills` user setting, default off; the\n * switch lives in Settings, Experimental (developers only), so today only developers have it.\n */\n\nimport { useUserSettings } from '@arbidocs/react'\n\nexport function useSkillsEnabled(): boolean {\n const { data: userSettings } = useUserSettings()\n return userSettings?.show_skills ?? false\n}\n","/**\n * The one list of workflows: the seeded ones plus every skill the user can invoke (each degraded\n * to a single-field form from its `arg_hint`). The dashboard tiles, the slash menu, tasks and\n * agents all read this.\n */\n\nimport { useMemo } from 'react'\nimport { useSkills } from '@arbidocs/react'\nimport { mergeSkillWorkflows } from '../../agents/workflows/workflow'\nimport { type WorkflowDefinition } from '../../agents/workflows/types'\nimport {\n CUSTOM_TASK,\n DASHBOARD_OPERATIONS,\n DASHBOARD_PINNED,\n REMIND_TASK,\n} from '../../agents/workflows/catalogue/seed'\nimport { useSkillsEnabled } from './useSkillsEnabled'\nimport { sortByRecentUse, useWorkflowUsage } from '../../agents/workflows/catalogue/workflow-usage'\nimport { WEB_WORKFLOWS } from '../../agents/workflows/catalogue/registry'\n\nexport interface UseWorkflowDefinitionsResult {\n /** Every skill workflow of this host: built-ins plus the user's and the marketplace's (one list). */\n skills: WorkflowDefinition[]\n /** The user has skills switched on (`show_skills`): the gate of every skill-shaped surface. */\n skillsEnabled: boolean\n /**\n * The empty chat's Start section: built-ins first (their own order), then the user's own and\n * marketplace skills by recent use, then name. EMPTY for users without skills enabled.\n */\n start: WorkflowDefinition[]\n /** The dashboard Start band: pinned skills in order, then the operation launchers. */\n dashboard: WorkflowDefinition[]\n /** What a task can run: schedulable skills plus a free instruction and a reminder. */\n forTasks: WorkflowDefinition[]\n}\n\nexport function useWorkflowDefinitions(): UseWorkflowDefinitionsResult {\n const { data: listings } = useSkills()\n const usage = useWorkflowUsage()\n const skillsEnabled = useSkillsEnabled()\n return useMemo(() => {\n // An uploaded skill of a built-in's slug is used instead of it.\n const { host: builtins, skills: fromServer } = mergeSkillWorkflows(\n WEB_WORKFLOWS,\n listings ?? []\n )\n const all = [...builtins, ...fromServer]\n const byId = new Map(all.map((w) => [w.id, w]))\n const pinned = DASHBOARD_PINNED.flatMap((id) => {\n const w = byId.get(id)\n return w ? [w] : []\n })\n return {\n skills: all,\n skillsEnabled,\n start: skillsEnabled ? [...builtins, ...sortByRecentUse(fromServer, usage)] : [],\n dashboard: [...pinned, ...DASHBOARD_OPERATIONS],\n forTasks: [CUSTOM_TASK, ...all.filter((w) => w.schedulable), REMIND_TASK],\n }\n }, [listings, usage, skillsEnabled])\n}\n","/**\n * Create / edit a task, or create / edit a workflow: the `TaskComposer` block, connected.\n *\n * A task is a conversation with a status. \"Now\" (or a plain to-do) creates it; any other start (at a\n * time, on an event, after another task) saves a workflow that creates it when it fires. Pick the\n * workflow definition (or write your own instruction), fill its form, choose when, and who does it.\n * Everything the backend needs beyond that (authorization tier, name, notification, goal checklist)\n * is derived or folded under \"More options\". The API mapping lives in `useWorkflowTasks`, shared with\n * \"launch as another agent\". With `kind=\"workflow\"` it is the workflow dialog the Workflows page uses.\n */\n\nimport {\n useAgents,\n useAgentWorkspaces,\n useArbiSessionState,\n useDocuments,\n usePlanWork,\n useTags,\n useWorkflows,\n useWorkItems,\n useWorkspaces,\n} from '@arbidocs/react'\nimport type { components } from '@arbidocs/client'\nimport { useEffect, useMemo, useState } from 'react'\nimport { Button } from '@arbidocs/react/ui'\nimport { TaskComposer } from '../../agents/tasks/TaskComposer'\nimport { TaskPlan as TaskPlanForm } from '../../agents/tasks/TaskPlan'\nimport type { TaskPlan } from '../../agents/workflows/planSteps'\nimport { moveTargets, type TaskListRow } from '../../agents/tasks/taskRows'\nimport { taskToComposerValues, workflowToComposerValues } from '../../agents/tasks/taskRequest'\nimport { type AgentOption } from '../../agents/workflows/AgentSelect'\nimport { type TaskComposerValues } from '../../agents/tasks/taskComposerTypes'\nimport { ArbiApiError } from '@arbidocs/sdk/browser'\nimport { detectTimeZone, listTimeZones } from '../../calendar/zone'\nimport { useBlocksEnvironment, useOpenWorkflow } from '../../provider/environment'\n\ntype Task = components['schemas']['ConversationResponse']\ntype Workflow = components['schemas']['WorkflowResponse']\nimport {\n CUSTOM_TASK_ID,\n REMIND_TASK_ID,\n renderWorkflowIcon,\n} from '../../agents/workflows/catalogue/seed'\nimport { useWorkflowDefinitions } from '../workflows/useWorkflowDefinitions'\nimport { useWorkflowTasks } from '../workflows/useWorkflowTasks'\nimport { AUTOMATION_EVENTS } from '../../agents/tasks/taskHelpers'\nimport {\n ConnectedWorkflowDocumentsField,\n useConnectedWorkflowScopeSource,\n} from '../ConnectedWorkflowLauncher'\n\nexport interface ConnectedTaskComposerProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** `workflow` is the workflow dialog (new, or `workflow` to edit); the default adds a task. */\n kind?: 'work' | 'workflow'\n /** Save an on-demand recipe instead of running immediately. */\n saveOnly?: boolean\n /** Present -> edit this task; absent -> create. */\n task?: Task | null\n /** `kind=\"workflow\"` only: present -> edit this workflow. */\n workflow?: Workflow | null\n /** Create-mode default assignee (the Agents page's \"Assign task\"). */\n initialAgentExtId?: string\n /** `kind=\"workflow\"` create-mode template: opens with this workflow definition (a skill's) selected. */\n initialWorkflowId?: string\n /** `kind=\"workflow\"` create-mode: open on the Run later view (when, which agent, access). */\n startLater?: boolean\n /** A prompt carried from the quick task launcher into scheduling. */\n initialShared?: boolean\n initialPrompt?: string\n /** A saved recipe copied into a new schedule; the original is not edited. */\n launchWorkflow?: Workflow\n /** Create-mode parent: opens as \"Add sub-task\" under this task. */\n initialParentTaskExtId?: string\n}\n\n/** What \"always allowed\" means: the workspaces the agent will hold standing access to. */\nfunction StandingAccessNote({\n agentId,\n activeWorkspaceName,\n}: {\n agentId: string\n activeWorkspaceName: string | null\n}) {\n const { data: held = [] } = useAgentWorkspaces(agentId, { enabled: agentId !== '' })\n const names = new Set(held.map((w) => w.name))\n if (activeWorkspaceName) names.add(activeWorkspaceName)\n return (\n <p className=\"text-xs text-muted-foreground\" data-testid=\"task-standing-access\">\n {agentId === '' ? 'Your own assistant needs no grant.' : 'It will hold standing access to: '}\n {agentId !== '' && (\n <span className=\"font-medium text-foreground\">\n {[...names].join(', ') || 'no workspace yet'}\n </span>\n )}\n </p>\n )\n}\n\nexport function ConnectedTaskComposer({\n open,\n onOpenChange,\n kind = 'work',\n saveOnly = false,\n task,\n workflow: editingWorkflow,\n initialWorkflowId,\n startLater: startLaterProp,\n initialPrompt,\n initialShared,\n launchWorkflow,\n initialAgentExtId,\n initialParentTaskExtId,\n}: ConnectedTaskComposerProps) {\n const { notify, openConversation, openUpload } = useBlocksEnvironment()\n // Scheduling (\"Run later\") belongs to Workflows: offered while the host has its page.\n const openWorkflow = useOpenWorkflow()\n const automationsEnabled = openWorkflow !== undefined\n const startLater = startLaterProp && automationsEnabled\n const isWorkflow = kind === 'workflow'\n const isEdit = isWorkflow ? !!editingWorkflow : !!task\n const { forTasks: baseSkills, skills } = useWorkflowDefinitions()\n const { data: reviewFields = [] } = useTags()\n const scheduledSkills = useMemo(\n () => [\n ...baseSkills,\n {\n id: '__document_review__',\n title: 'AI Review',\n description: 'Write answers and citations into document fields.',\n documentAction: 'annotate_documents' as const,\n run: { kind: 'operation' as const },\n landing: 'files' as const,\n inputs: [\n { name: 'scope', type: 'scope' as const, label: 'Documents', by: ['labels' as const] },\n {\n name: 'output',\n type: 'select' as const,\n label: 'Review field',\n required: true,\n description:\n 'Choose a field with saved AI instructions. Create one using AI Review in Files.',\n options: reviewFields\n .filter((field) => field.instruction)\n .map((field) => ({ value: field.external_id, label: field.name })),\n },\n {\n name: 'overwrite',\n type: 'boolean' as const,\n label: 'Regenerate existing answers',\n default: false,\n },\n ],\n },\n {\n id: '__document_email__',\n title: 'Email latest documents',\n description: 'Email me links to documents added since the previous successful digest.',\n documentAction: 'email_documents' as const,\n run: { kind: 'operation' as const },\n landing: 'files' as const,\n inputs: [\n { name: 'scope', type: 'scope' as const, label: 'Documents', by: ['labels' as const] },\n {\n name: 'latest',\n type: 'boolean' as const,\n label: 'Only documents added since the last digest',\n default: true,\n },\n ],\n },\n ],\n [baseSkills, reviewFields]\n )\n // A skill opened from the library runs now even if it cannot be scheduled: offer it as a template too.\n const forTasks = useMemo(() => {\n const picked = initialWorkflowId ? skills.find((w) => w.id === initialWorkflowId) : undefined\n return picked &&\n !scheduledSkills.some((w) => w.id === picked.id) &&\n picked.run.kind === 'prompt'\n ? [...scheduledSkills, picked]\n : scheduledSkills\n }, [scheduledSkills, skills, initialWorkflowId])\n const { data: workspaceAutomations = [] } = useWorkflows()\n const { data: agents = [] } = useAgents()\n const { data: workspaces = [] } = useWorkspaces()\n const planWork = usePlanWork()\n const { tasks: allTasks } = useWorkItems()\n const { data: documents = [] } = useDocuments()\n const { create, update, updateWorkflow, isPending } = useWorkflowTasks()\n // The files behind a template's file fields: the same pieces the skill launcher wires.\n const scopeSource = useConnectedWorkflowScopeSource()\n const activeWorkspaceId = useArbiSessionState((s) => s.workspaceId)\n const activeWorkspace = useMemo(\n () => workspaces.find((w) => w.external_id === activeWorkspaceId) ?? null,\n [workspaces, activeWorkspaceId]\n )\n const timezones = useMemo(() => listTimeZones(), [])\n // The plan lists documents by id; show their names.\n const documentNames = useMemo(\n () =>\n Object.fromEntries(\n documents.flatMap((d) => (d.file_name ? [[d.external_id, d.file_name]] : []))\n ),\n [documents]\n )\n // Tasks a new task can be part of: any other task that keeps the sub-task tree within its maximum\n // depth and (when editing) is not the task itself or one of its descendants. A workflow can wait on\n // any task, finished ones included (they re-open and finish again).\n const taskOptions = useMemo(() => {\n const label = (t: TaskListRow) => t.title?.trim() || 'Untitled task'\n if (isWorkflow) return allTasks.map((t) => ({ id: t.external_id, name: label(t) }))\n const subject: TaskListRow = task ?? { external_id: '__new__' }\n return moveTargets<TaskListRow>(\n [...allTasks.filter((t) => t.external_id !== subject.external_id), subject],\n subject\n ).map((t) => ({ id: t.external_id, name: label(t) }))\n }, [allTasks, task, isWorkflow])\n // The owner's main agent: what a scheduled workflow runs as unless another is picked.\n const defaultAgentId = useMemo(\n () => (agents.find((a) => a.given_name === 'Assistant') ?? agents[0])?.external_id,\n [agents]\n )\n const agentOptions = useMemo<AgentOption[]>(\n () => agents.map((a) => ({ id: a.external_id, label: a.given_name || a.email })),\n [agents]\n )\n\n // What the composer opens with: the edit target, or (create) the preset assignee.\n const initialValues = useMemo(() => {\n const ids = {\n customWorkflowId: CUSTOM_TASK_ID,\n reminderWorkflowId: REMIND_TASK_ID,\n definitions: forTasks,\n }\n const base = launchWorkflow\n ? {\n ...workflowToComposerValues(launchWorkflow, ids),\n when: 'once' as const,\n runAt: '',\n rrule: '',\n eventKind: '',\n afterTaskId: '',\n name: '',\n }\n : editingWorkflow\n ? workflowToComposerValues(editingWorkflow, ids)\n : task\n ? taskToComposerValues(task, ids)\n : isWorkflow\n ? {\n // Run now is the default start; scheduling is the fallback in the same field.\n assignee: 'agent' as const,\n workflowId: initialWorkflowId ?? CUSTOM_TASK_ID,\n when: startLater ? ('once' as const) : ('now' as const),\n ...(initialPrompt\n ? {\n inputs: {\n [initialWorkflowId === REMIND_TASK_ID ? 'message' : 'instruction']:\n initialPrompt,\n },\n }\n : {}),\n // A scheduled run needs an agent: the owner's Assistant unless another is picked.\n ...(startLater && defaultAgentId ? { agentId: defaultAgentId } : {}),\n }\n : initialAgentExtId\n ? // Assigning an agent means agentic work: the free instruction, and tell me when done.\n { agentId: initialAgentExtId, workflowId: CUSTOM_TASK_ID, notifyOnComplete: true }\n : {}\n return {\n timezone: detectTimeZone(),\n ...base,\n ...(initialShared !== undefined && !task && !editingWorkflow\n ? { shared: initialShared }\n : {}),\n ...(!task && !isWorkflow && initialParentTaskExtId\n ? { parentTaskId: initialParentTaskExtId }\n : {}),\n }\n }, [\n forTasks,\n task,\n editingWorkflow,\n isWorkflow,\n initialWorkflowId,\n startLater,\n initialPrompt,\n initialShared,\n launchWorkflow,\n defaultAgentId,\n initialAgentExtId,\n initialParentTaskExtId,\n ])\n\n const [plan, setPlan] = useState<TaskPlan | null>(null)\n useEffect(() => {\n if (open) setPlan(task?.plan ?? editingWorkflow?.plan ?? launchWorkflow?.plan ?? null) // the stored plan when editing agent work\n }, [open, task, editingWorkflow, launchWorkflow])\n\n const handleGeneratePlan = async (values: TaskComposerValues) => {\n if (!activeWorkspace) {\n notify('Open a workspace first — the plan is scoped to it', 'warning')\n return\n }\n const objective = String(values.inputs.instruction ?? '').trim()\n if (!objective) {\n notify('Write the instruction first — it’s the planner’s objective', 'warning')\n return\n }\n try {\n const drafted = await planWork.mutateAsync({\n objective,\n max_passes: plan?.max_passes ?? 3,\n })\n setPlan(drafted)\n notify('Drafted a plan — review the checklist', 'success')\n } catch {\n notify('Could not draft a plan', 'error')\n }\n }\n\n const submit = async (submitted: TaskComposerValues, options?: { runOnce?: boolean }) => {\n // A task for me is a plain to-do and runs no workflow.\n const chosen =\n forTasks.find((w) => w.id === submitted.workflowId) ??\n (submitted.assignee === 'me' ? forTasks[0] : undefined)\n if (!chosen) return\n if (plan && !plan.goal.trim()) {\n notify('The plan needs a goal', 'warning')\n return\n }\n if (plan && plan.criteria.some((c) => !c.text.trim())) {\n notify('Every checklist criterion needs text (or remove it)', 'warning')\n return\n }\n const ctx = {\n workflow: chosen,\n values: submitted,\n plan: chosen.id === CUSTOM_TASK_ID ? plan : null,\n }\n try {\n if (isWorkflow && editingWorkflow && !options?.runOnce) {\n await updateWorkflow(editingWorkflow, ctx)\n notify(`Updated “${editingWorkflow.name}”`, 'success')\n } else if (isEdit && task) {\n await update(task, ctx)\n notify(`Updated “${task.title ?? 'task'}”`, 'success')\n } else {\n const created = await create(ctx, saveOnly && !options?.runOnce)\n if (created.kind === 'workflow') {\n notify(`Saved “${created.workflow.name}”.`, 'success')\n // The saved workflow, on the Workflows page.\n openWorkflow?.()\n } else {\n const name = created.task.title ?? 'task'\n if ((created.ran || options?.runOnce) && created.task.external_id) {\n // The run is a thread: go and watch it, rather than leave a toast to say it started.\n openConversation(created.task.external_id)\n } else {\n notify(\n created.ran === null\n ? `Added “${name}”`\n : 'Task created, but the run could not start',\n created.ran === false ? 'warning' : 'success'\n )\n }\n }\n }\n onOpenChange(false)\n } catch (error) {\n const what = `Failed to ${isEdit ? 'update' : 'create'} the ${isWorkflow ? 'workflow' : 'task'}`\n notify(\n error instanceof Error && error.message.startsWith('Open a workspace')\n ? error.message\n : error instanceof ArbiApiError && error.detail\n ? `${what}: ${error.detail}`\n : what,\n 'error'\n )\n }\n }\n\n return (\n <TaskComposer\n key={editingWorkflow?.external_id ?? task?.external_id ?? 'new'}\n open={open}\n onOpenChange={onOpenChange}\n kind={kind}\n saveOnly={saveOnly}\n hideRunLater={!automationsEnabled}\n defaultAgentId={defaultAgentId}\n isEdit={isEdit}\n workflows={forTasks}\n agents={agentOptions}\n tasks={taskOptions}\n initialValues={initialValues}\n timezones={timezones}\n eventOptions={AUTOMATION_EVENTS}\n eventWorkflowOptions={workspaceAutomations\n .filter((item) => item.external_id !== editingWorkflow?.external_id)\n .map((item) => ({ id: item.external_id, label: item.name }))}\n isPending={isPending}\n planDrafting={planWork.isPending}\n hasPlan={plan !== null}\n renderIcon={renderWorkflowIcon}\n scopeSource={scopeSource}\n renderDocuments={(field, value, onChange) => (\n <ConnectedWorkflowDocumentsField\n field={field}\n value={value}\n onChange={onChange}\n onAddFiles={openUpload}\n />\n )}\n addFilesAction={\n openUpload && (\n <Button size=\"sm\" onClick={() => openUpload()} data-testid=\"workflow-add-files-first\">\n Add files\n </Button>\n )\n }\n onDropFiles={openUpload && ((files) => openUpload(files))}\n standingAccess={(values) => (\n <StandingAccessNote\n agentId={values.agentId}\n activeWorkspaceName={activeWorkspace?.name ?? null}\n />\n )}\n labels={{\n ...(isWorkflow\n ? {\n titleNewWorkflow: 'New workflow',\n titleEditWorkflow: 'Edit workflow',\n workflowNamePlaceholder: 'Name this workflow',\n createWorkflow: 'Create workflow',\n saveWorkflow: 'Save workflow',\n descriptionWorkflow: 'Choose what happens and when this workflow starts.',\n eventHint: 'Choose the workspace event that starts this workflow.',\n runAsAgentHint: 'Scheduled AI work runs as your chosen assistant when you are away.',\n }\n : {}),\n ...(plan\n ? { addAndStart: 'Approve plan and start', addAndSchedule: 'Approve plan and schedule' }\n : {}),\n }}\n onSubmit={submit}\n goal={(values) =>\n values.workflowId === CUSTOM_TASK_ID ? (\n <TaskPlanForm\n plan={plan}\n onChange={setPlan}\n onGenerate={() => handleGeneratePlan(values)}\n isGenerating={planWork.isPending}\n workspaceName={activeWorkspace?.name ?? null}\n documentNames={documentNames}\n objective={String(values.inputs.instruction ?? '')}\n />\n ) : null\n }\n />\n )\n}\n","import { useCallback, useMemo, type ReactNode } from 'react'\nimport { useAgents, useArbiSession, useWorkspaceUsers } from '@arbidocs/react'\nimport { getUserDisplayName, isAgent } from '@arbidocs/react/ui'\nimport { PersonPill, type TaskPerson } from '../../agents/tasks/PersonPill'\nimport { DocumentUser } from '../files/fields/DocumentUser'\n\n/** The workspace roles that can edit it. */\nconst EDITOR_ROLES: readonly string[] = ['owner', 'collaborator']\n\n/**\n * People who can own tasks here: humans (never agents) who can edit the workspace, other than me\n * (the task list shows me as \"Me\"). They name each task's owner.\n */\nexport function useTaskPeople(): { id: string; label: string }[] {\n const { data: members = [] } = useWorkspaceUsers()\n const currentUserExtId = useArbiSession().user?.external_id\n return useMemo(\n () =>\n members\n .filter(\n (m) =>\n !isAgent(m.user) &&\n m.user.external_id !== currentUserExtId &&\n EDITOR_ROLES.includes(m.role)\n )\n .map((m) => ({ id: m.user.external_id, label: getUserDisplayName(m.user) })),\n [members, currentUserExtId]\n )\n}\n\n/**\n * How the Tasks table draws a person: the host's own user pill (presence, a click to message, the\n * rich tooltip) when the person is a member or agent we know, else the plain shared pill.\n */\nexport function useRenderTaskPerson(): (person: TaskPerson) => ReactNode {\n const { data: members = [] } = useWorkspaceUsers()\n const { data: agents = [] } = useAgents()\n const byId = useMemo(() => {\n const map = new Map(members.map((m) => [m.user.external_id, m.user]))\n for (const agent of agents) if (!map.has(agent.external_id)) map.set(agent.external_id, agent)\n return map\n }, [members, agents])\n return useCallback(\n (person: TaskPerson) => {\n const user = person.id ? byId.get(person.id) : undefined\n return user ? <DocumentUser user={user} variant=\"pill\" /> : <PersonPill person={person} />\n },\n [byId]\n )\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport { useWorkflows, type WorkflowResponse } from '@arbidocs/react'\n\n/** A saved workflow, a new one, or a host catalogue entry opened as a template. */\nexport type WorkflowBuilderSelection =\n { kind: 'saved'; id: string } | { kind: 'new' } | { kind: 'template'; id: string }\n\nexport interface WorkflowsPageStateOptions {\n initialBuilder?: WorkflowBuilderSelection\n /** A host deep link to consume once the saved workflow has loaded. */\n historyWorkflowId?: string | null\n onHistoryWorkflowConsumed?: () => void\n}\n\n/** Shared selection lifecycle for workflow tables, builders and history views. No routing or layout. */\nexport function useWorkflowsPageState({\n initialBuilder,\n historyWorkflowId,\n onHistoryWorkflowConsumed,\n}: WorkflowsPageStateOptions = {}) {\n const { data: workflows = [] } = useWorkflows({ live: true })\n const [builder, setBuilder] = useState<WorkflowBuilderSelection | null>(initialBuilder ?? null)\n const [builderKey, setBuilderKey] = useState(0)\n const [historyIds, setHistoryIds] = useState<string[]>([])\n const [activeHistoryId, setActiveHistoryId] = useState<string | null>(null)\n // Resolve against current query data: renaming/deleting a workflow cannot leave a stale dialog.\n const historyFor = workflows.find((workflow) => workflow.external_id === activeHistoryId) ?? null\n const historyTabs = historyIds.flatMap((id) => {\n const workflow = workflows.find((item) => item.external_id === id)\n return workflow ? [workflow] : []\n })\n\n const openHistory = useCallback((workflow: WorkflowResponse | null) => {\n const id = workflow?.external_id ?? null\n if (id) setHistoryIds((ids) => (ids.includes(id) ? ids : [...ids, id]))\n setActiveHistoryId(id)\n }, [])\n const closeHistoryTab = useCallback((id: string) => {\n setHistoryIds((ids) => ids.filter((item) => item !== id))\n setActiveHistoryId((active) => (active === id ? null : active))\n }, [])\n const openBuilder = useCallback((selection: WorkflowBuilderSelection) => {\n setBuilder(selection)\n // Reopening a template/new/saved selection resets its unsaved canvas; saving does not.\n setBuilderKey((key) => key + 1)\n }, [])\n\n useEffect(() => {\n const workflow = workflows.find((item) => item.external_id === historyWorkflowId)\n if (!workflow) return\n openHistory(workflow)\n onHistoryWorkflowConsumed?.()\n }, [historyWorkflowId, onHistoryWorkflowConsumed, openHistory, workflows])\n\n return {\n workflows,\n builder,\n builderKey,\n openBuilder,\n closeBuilder: () => setBuilder(null),\n builderSaved: (id: string) => setBuilder({ kind: 'saved', id }),\n historyFor,\n historyTabs,\n activeHistoryId,\n openHistory,\n closeHistoryTab,\n selectHistoryTab: setActiveHistoryId,\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/connection/ConnectedWorkflowHistory.tsx","../src/connection/workflows/useWorkflowTasks.ts","../src/connection/workflows/useSkillsEnabled.ts","../src/connection/workflows/useWorkflowDefinitions.ts","../src/connection/tasks/ConnectedTaskComposer.tsx","../src/connection/tasks/useTaskPeople.tsx","../src/connection/workflows/useWorkflowsPageState.ts"],"names":["fmtDate","useBlocksEnvironment","useWorkflowRuns","jsx","TaskRunsDialog","formatRelativeTime","useConversationActivity","useAgents","useConnectedWorkspace","useConnectedWorkspaceRole","useCallback","PersonPill","TaskActivityDialog","useCreateWork","useRunWorkflow","useStartTaskQuery","useCreateWorkflow","useUpdateConversation","useUpdateWorkflow","useArbiSessionState","useGrantAgentAccess","useDocuments","useMemo","getDocumentTitle","taskComposerToCreateRequest","taskComposerToUpdateRequest","composerToWorkflowUpdate","useUserSettings","useSkills","useWorkflowUsage","mergeSkillWorkflows","WEB_WORKFLOWS","DASHBOARD_PINNED","sortByRecentUse","DASHBOARD_OPERATIONS","CUSTOM_TASK","REMIND_TASK","useAgentWorkspaces","jsxs","useOpenWorkflow","useTags","useWorkflows","useWorkspaces","usePlanWork","useWorkItems","useConnectedWorkflowScopeSource","listTimeZones","moveTargets","CUSTOM_TASK_ID","REMIND_TASK_ID","workflowToComposerValues","taskToComposerValues","detectTimeZone","useState","useEffect","ArbiApiError","TaskComposer","AUTOMATION_EVENTS","renderWorkflowIcon","ConnectedWorkflowDocumentsField","Button","TaskPlan","useWorkspaceUsers","useArbiSession","isAgent","getUserDisplayName","DocumentUser"],"mappings":";;;;;;;;;;;;;;;;;AA4BA,IAAM,QAAA,GAAmC;AAAA,EACvC,eAAA,EAAiB,OAAA;AAAA,EACjB,kBAAA,EAAoB,WAAA;AAAA,EACpB,QAAA,EAAU;AACZ,CAAA;AACA,IAAM,mCAAmB,IAAI,GAAA,CAAI,CAAC,iBAAA,EAAmB,oBAAoB,CAAC,CAAA;AAGnE,SAAS,eAAA,CACd,KACA,UAAA,EACa;AACb,EAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,GAAA,CAAI,GAAA,CAAI,WAAW,IAClD,CAAA,MAAA,EAAM,GAAA,CAAI,gBAAA,CAAiB,MAAM,CAAA,UAAA,CAAA,GACjC,EAAA;AACJ,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,CAAA,UAAA,EAAa,GAAA,CAAI,EAAE,CAAA,CAAA;AAAA;AAAA,IAEvB,QAAA,EACE,GAAA,CAAI,WAAA,KAAgB,oBAAA,IAAwB,GAAA,CAAI,WAAW,WAAA,GACvD,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA,GACb,MAAA;AAAA,IACN,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,IAAA,EAAM,CAAA,EAAG,UAAA,CAAW,GAAA,CAAI,UAAU,CAAC,CAAA,MAAA,EAAM,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA,IAAK,QAAQ,GAAG,SAAS,CAAA,CAAA;AAAA,IAC1F,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,cAAA,EAAgB,IAAI,mBAAA,IAAuB;AAAA,GAC7C;AACF;AAiBO,SAAS,wBAAA,CAAyB;AAAA,EACvC,QAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA,GAAaA,yBAAA;AAAA,EACb,YAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA,EAAkC;AAChC,EAAA,MAAM,EAAE,gBAAA,EAAiB,GAAIC,sCAAA,EAAqB;AAClD,EAAA,MAAM,EAAE,MAAM,IAAA,GAAO,IAAI,SAAA,EAAU,GAAIC,qBAAA,CAAgB,QAAA,EAAU,WAAW,CAAA;AAC5E,EAAA,uBACEC,cAAA;AAAA,IAACC,gCAAA;AAAA,IAAA;AAAA,MACC,MAAA;AAAA,MACA,UAAA;AAAA,MACA,IAAA,EAAM,CAAC,CAAC,QAAA;AAAA,MACR,YAAA;AAAA,MACA,UAAU,QAAA,EAAU,IAAA;AAAA,MACpB,iBAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,KAAA,EAAO,CAAC,IAAA,KAAS,CAAA,eAAA,EAAa,IAAI,CAAA,CAAA;AAAA,QAClC,WAAA,EAAa,0CAAA;AAAA,QACb,KAAA,EAAO,oCAAA;AAAA,QACP,GAAG;AAAA,OACL;AAAA,MACA,IAAA,EAAM,KAAK,GAAA,CAAI,CAAC,QAAQ,eAAA,CAAgB,GAAA,EAAK,UAAU,CAAC,CAAA;AAAA,MACxD,YAAA,EACE,YAAA,KACC,CAAC,EAAA,KAAO;AACP,QAAA,MAAM,GAAA,GAAM,KAAK,IAAA,CAAK,CAAC,MAAM,MAAA,CAAO,CAAA,CAAE,EAAE,CAAA,KAAM,EAAE,CAAA;AAChD,QAAA,IAAI,GAAA,eAAkB,GAAG,CAAA;AAAA,MAC3B,CAAA,CAAA;AAAA,MAEF,SAAA,EAAW,CAAC,cAAA,KAAmB,gBAAA,CAAiB,cAAc;AAAA;AAAA,GAChE;AAEJ;AAGA,IAAM,YAAA,GAAe,CAAC,GAAA,KAAgBC,qBAAA,CAAmB,KAAK,EAAE,KAAA,EAAO,SAAS,CAAA;AAazE,SAAS,2BAAA,CAA4B;AAAA,EAC1C,cAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA,EAAc,gBAAA;AAAA,EACd,WAAA,GAAcL;AAChB,CAAA,EAAqC;AACnC,EAAA,MAAM,QAAA,GAAWM,6BAAA,CAAwB,cAAA,EAAgB,EAAE,MAAM,CAAA;AACjE,EAAA,MAAM,EAAE,IAAA,EAAM,MAAA,GAAS,EAAC,KAAMC,eAAA,EAAU;AACxC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIC,uCAAA,EAAsB;AACzC,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAIC,2CAAA,EAA0B;AAC9C,EAAA,MAAM,YAAA,GAAeC,mBAAA;AAAA,IACnB,CAAC,EAAA,KAAkC;AACjC,MAAA,MAAM,IAAA,GAAO,CAAC,CAAC,EAAA,IAAM,EAAA,KAAO,MAAA;AAC5B,MAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,CAAK,WAAA,KAAgB,EAAE,CAAA,EAAG,IAAA;AAC/D,MAAA,MAAM,IAAA,GACH,MAAA,IAAU,CAAC,MAAA,CAAO,YAAY,MAAA,CAAO,WAAW,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,KAC3E,MAAA,EAAQ,KAAA;AACV,MAAA,MAAM,MAAA,GAAS,EAAE,EAAA,EAAI,KAAA,EAAO,OAAO,KAAA,GAAQ,IAAA,IAAQ,WAAW,IAAA,EAAK;AACnE,MAAA,OAAO,mBAAmB,gBAAA,CAAiB,MAAM,CAAA,mBAAIP,cAAA,CAACQ,gCAAW,MAAA,EAAgB,CAAA;AAAA,IACnF,CAAA;AAAA,IACA,CAAC,gBAAA,EAAkB,MAAA,EAAQ,OAAO;AAAA,GACpC;AACA,EAAA,MAAM,SAAA,GAAYD,mBAAA;AAAA,IAChB,CAAC,OAAA,KAAoB,MAAA,CAAO,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,WAAA,KAAgB,OAAO,CAAA,EAAG,UAAA,IAAc,MAAA;AAAA,IAClF,CAAC,MAAM;AAAA,GACT;AACA,EAAA,uBACEP,cAAA;AAAA,IAACS,oCAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAI,IAAA;AAAA,MACJ,YAAA,EAAc,CAAC,IAAA,KAAS,CAAC,QAAQ,OAAA,EAAQ;AAAA,MACzC,QAAA;AAAA,MACA,QAAQ,QAAA,CAAS,IAAA;AAAA,MACjB,WAAW,QAAA,CAAS,SAAA;AAAA,MACpB,SAAS,QAAA,CAAS,OAAA;AAAA,MAClB,YAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA,EAAgB,YAAA;AAAA,MAChB;AAAA;AAAA,GACF;AAEJ;ACjHO,SAAS,gBAAA,GAAmB;AACjC,EAAA,MAAM,aAAaC,mBAAA,EAAc;AACjC,EAAA,MAAM,cAAcC,oBAAA,EAAe;AACnC,EAAA,MAAM,aAAaC,uBAAA,EAAkB;AACrC,EAAA,MAAM,iBAAiBC,uBAAA,EAAkB;AACzC,EAAA,MAAM,qBAAqBC,2BAAA,EAAsB;AACjD,EAAA,MAAM,yBAAyBC,uBAAA,EAAkB;AACjD,EAAA,MAAM,iBAAA,GAAoBC,yBAAA,CAAoB,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AAClE,EAAA,MAAM,EAAE,SAAA,EAAU,GAAIlB,sCAAA,EAAqB;AAI3C,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAM,GAAImB,yBAAA,EAAoB;AACnD,EAAA,MAAM,gBAAA,GAAmBV,mBAAAA;AAAA,IACvB,CAAC,YAAoB,WAAA,KACnB,KAAA,CAAM,EAAE,UAAA,EAAY,WAAA,EAAa,CAAA,CAAE,IAAA;AAAA,MACjC,MAAM,MAAA;AAAA,MACN,MAAM;AAAA,KACR;AAAA,IACF,CAAC,KAAK;AAAA,GACR;AAEA,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,GAAY,EAAC,KAAMW,kBAAA,EAAa;AAC9C,EAAA,MAAM,cAAA,GAAiBC,eAAA;AAAA,IACrB,MACE,MAAA,CAAO,WAAA,CAAY,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,WAAA,EAAaC,oBAAiB,CAAA,EAAG,CAAA,CAAE,WAAW,CAAC,CAAC,CAAC,CAAA;AAAA,IAC9F,CAAC,SAAS;AAAA,GACZ;AAMA,EAAA,MAAM,MAAA,GAASb,mBAAAA;AAAA,IACb,OAAO,GAAA,EAAwB,aAAA,GAAgB,KAAA,KAAkC;AAC/E,MAAA,MAAM,OAAA,GAAUc,6CAAA;AAAA,QACd,EAAE,GAAG,GAAA,EAAK,gBAAgB,IAAA,EAAM,GAAA,CAAI,QAAQ,IAAA,EAAK;AAAA,QACjD,iBAAA,IAAqB,MAAA;AAAA,QACrB;AAAA,OACF;AACA,MAAA,IAAI,OAAA,CAAQ,SAAS,UAAA,EAAY;AAC/B,QAAA,MAAM,QAAA,GAAW,MAAM,cAAA,CAAe,WAAA,CAAY,QAAQ,IAAI,CAAA;AAG9D,QAAA,MAAM,WAAA,GAAc,QAAA,CAAS,gBAAA,IAAoB,OAAA,CAAQ,IAAA,CAAK,gBAAA;AAC9D,QAAA,IACE,QAAA,CAAS,cAAc,qBAAA,IACvB,CAAC,SAAS,SAAA,IACV,QAAA,CAAS,gBACT,WAAA,EACA;AACA,UAAA,MAAM,gBAAA,CAAiB,QAAA,CAAS,YAAA,EAAc,WAAW,CAAA;AAAA,QAC3D;AACA,QAAA,IAAI,GAAA,CAAI,SAAS,cAAA,IAAkB,GAAA,CAAI,OAAO,IAAA,KAAS,KAAA,IAAS,CAAC,aAAA,EAAe;AAC9E,UAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,WAAA,CAAY,SAAS,WAAW,CAAA;AACjE,UAAA,IAAI,OAAO,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,OAAO,KAAK,CAAA;AAC9C,UAAA,SAAA,EAAU;AAAA,QACZ;AACA,QAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAS;AAAA,MACtC;AACA,MAAA,IAAI,OAAA,CAAQ,SAAS,OAAA,EAAS;AAE5B,QAAA,MAAM,EAAE,cAAA,EAAe,GAAI,MAAM,UAAA,CAAW,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC/D,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM,EAAE,WAAA,EAAa,cAAA,EAAgB,OAAO,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,KAAA,IAAS,IAAA,EAAK;AAAA,UAC7E,GAAA,EAAK;AAAA,SACP;AAAA,MACF;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW,WAAA,CAAY,QAAQ,IAAI,CAAA;AACtD,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,IACzC,CAAA;AAAA,IACA;AAAA,MACE,iBAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA;AACF,GACF;AAGA,EAAA,MAAM,MAAA,GAASd,mBAAAA;AAAA,IACb,OAAO,MAA0D,GAAA,KAA2B;AAC1F,MAAA,MAAM,KAAA,GAAQe,8CAA4B,EAAE,GAAG,KAAK,IAAA,EAAM,GAAA,CAAI,IAAA,IAAQ,IAAA,EAAM,CAAA;AAE5E,MAAA,IAAI,IAAA,CAAK,QAAA,KAAa,KAAA,EAAO,OAAO,KAAA,CAAM,MAAA;AAC1C,MAAA,MAAM,mBAAmB,WAAA,CAAY,EAAE,gBAAgB,IAAA,CAAK,WAAA,EAAa,OAAO,CAAA;AAAA,IAClF,CAAA;AAAA,IACA,CAAC,kBAAkB;AAAA,GACrB;AAGA,EAAA,MAAM,cAAA,GAAiBf,mBAAAA;AAAA,IACrB,OACE,UAGA,GAAA,KACG;AACH,MAAA,MAAM,KAAA,GAAQgB,0CAAA,CAAyB,EAAE,GAAG,GAAA,EAAK,gBAAgB,IAAA,EAAM,GAAA,CAAI,IAAA,IAAQ,IAAA,EAAM,CAAA;AAEzF,MAAA,IAAI,QAAA,CAAS,QAAA,KAAa,KAAA,EAAO,OAAO,KAAA,CAAM,MAAA;AAC9C,MAAA,MAAM,WAAA,GAAc,SAAS,gBAAA,IAAoB,iBAAA;AACjD,MAAA,MAAM,OAAA,GAAU,MAAM,sBAAA,CAAuB,WAAA,CAAY;AAAA,QACvD,YAAY,QAAA,CAAS,WAAA;AAAA,QACrB;AAAA,OACD,CAAA;AAED,MAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,YAAA,IAAgB,KAAA,CAAM,gBAAgB,QAAA,CAAS,YAAA;AACvE,MAAA,IACE,QAAQ,SAAA,KAAc,qBAAA,IACtB,CAAC,OAAA,CAAQ,SAAA,IACT,WACA,WAAA,EACA;AACA,QAAA,MAAM,gBAAA,CAAiB,SAAS,WAAW,CAAA;AAAA,MAC7C;AAAA,IACF,CAAA;AAAA,IACA,CAAC,iBAAA,EAAmB,cAAA,EAAgB,gBAAA,EAAkB,sBAAsB;AAAA,GAC9E;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA,EACE,WAAW,SAAA,IACX,UAAA,CAAW,aACX,cAAA,CAAe,SAAA,IACf,kBAAA,CAAmB,SAAA,IACnB,sBAAA,CAAuB;AAAA,GAC3B;AACF;ACvLO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAa,GAAIC,qBAAA,EAAgB;AAC/C,EAAA,OAAO,cAAc,WAAA,IAAe,KAAA;AACtC;ACwBO,SAAS,sBAAA,GAAuD;AACrE,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAIC,eAAA,EAAU;AACrC,EAAA,MAAM,QAAQC,kCAAA,EAAiB;AAC/B,EAAA,MAAM,gBAAgB,gBAAA,EAAiB;AACvC,EAAA,OAAOP,gBAAQ,MAAM;AAEnB,IAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,YAAW,GAAIQ,qCAAA;AAAA,MAC7CC,+BAAA;AAAA,MACA,YAAY;AAAC,KACf;AACA,IAAA,MAAM,GAAA,GAAM,CAAC,GAAG,QAAA,EAAU,GAAG,UAAU,CAAA;AACvC,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAC9C,IAAA,MAAM,MAAA,GAASC,kCAAA,CAAiB,OAAA,CAAQ,CAAC,EAAA,KAAO;AAC9C,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AACrB,MAAA,OAAO,CAAA,GAAI,CAAC,CAAC,CAAA,GAAI,EAAC;AAAA,IACpB,CAAC,CAAA;AACD,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,GAAA;AAAA,MACR,aAAA;AAAA,MACA,KAAA,EAAO,aAAA,GAAgB,CAAC,GAAG,QAAA,EAAU,GAAGC,iCAAA,CAAgB,UAAA,EAAY,KAAK,CAAC,CAAA,GAAI,EAAC;AAAA,MAC/E,SAAA,EAAW,CAAC,GAAG,MAAA,EAAQ,GAAGC,sCAAoB,CAAA;AAAA,MAC9C,QAAA,EAAU,CAACC,6BAAA,EAAa,GAAG,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA,EAAGC,6BAAW;AAAA,KAC1E;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,KAAA,EAAO,aAAa,CAAC,CAAA;AACrC;ACkBA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,OAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,GAAO,EAAC,EAAE,GAAIC,wBAAA,CAAmB,OAAA,EAAS,EAAE,OAAA,EAAS,OAAA,KAAY,EAAA,EAAI,CAAA;AACnF,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAA;AAC7C,EAAA,IAAI,mBAAA,EAAqB,KAAA,CAAM,GAAA,CAAI,mBAAmB,CAAA;AACtD,EAAA,uBACEC,eAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAgC,eAAY,sBAAA,EACtD,QAAA,EAAA;AAAA,IAAA,OAAA,KAAY,KAAK,oCAAA,GAAuC,mCAAA;AAAA,IACxD,OAAA,KAAY,EAAA,oBACXnC,cAAAA,CAAC,UAAK,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA,CAAC,GAAG,KAAK,CAAA,CAAE,IAAA,CAAK,IAAI,KAAK,kBAAA,EAC5B;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEO,SAAS,qBAAA,CAAsB;AAAA,EACpC,IAAA;AAAA,EACA,YAAA;AAAA,EACA,IAAA,GAAO,MAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,IAAA;AAAA,EACA,QAAA,EAAU,eAAA;AAAA,EACV,iBAAA;AAAA,EACA,UAAA,EAAY,cAAA;AAAA,EACZ,aAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA,EAA+B;AAC7B,EAAA,MAAM,EAAE,MAAA,EAAQ,gBAAA,EAAkB,UAAA,KAAeF,sCAAA,EAAqB;AAEtE,EAAA,MAAM,eAAesC,iCAAA,EAAgB;AACrC,EAAA,MAAM,qBAAqB,YAAA,KAAiB,MAAA;AAC5C,EAAA,MAAM,aAAa,cAAA,IAAkB,kBAAA;AACrC,EAAA,MAAM,aAAa,IAAA,KAAS,UAAA;AAC5B,EAAA,MAAM,SAAS,UAAA,GAAa,CAAC,CAAC,eAAA,GAAkB,CAAC,CAAC,IAAA;AAClD,EAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,MAAA,KAAW,sBAAA,EAAuB;AAChE,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,GAAe,EAAC,KAAMC,aAAA,EAAQ;AAC5C,EAAA,MAAM,eAAA,GAAkBlB,eAAAA;AAAA,IACtB,MAAM;AAAA,MACJ,GAAG,UAAA;AAAA,MACH;AAAA,QACE,EAAA,EAAI,qBAAA;AAAA,QACJ,KAAA,EAAO,WAAA;AAAA,QACP,WAAA,EAAa,mDAAA;AAAA,QACb,cAAA,EAAgB,oBAAA;AAAA,QAChB,GAAA,EAAK,EAAE,IAAA,EAAM,WAAA,EAAqB;AAAA,QAClC,OAAA,EAAS,OAAA;AAAA,QACT,MAAA,EAAQ;AAAA,UACN,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,OAAA,EAAkB,OAAO,WAAA,EAAa,EAAA,EAAI,CAAC,QAAiB,CAAA,EAAE;AAAA,UACrF;AAAA,YACE,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM,QAAA;AAAA,YACN,KAAA,EAAO,cAAA;AAAA,YACP,QAAA,EAAU,IAAA;AAAA,YACV,WAAA,EACE,iFAAA;AAAA,YACF,SAAS,YAAA,CACN,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,WAAW,CAAA,CACnC,GAAA,CAAI,CAAC,KAAA,MAAW,EAAE,KAAA,EAAO,KAAA,CAAM,aAAa,KAAA,EAAO,KAAA,CAAM,MAAK,CAAE;AAAA,WACrE;AAAA,UACA;AAAA,YACE,IAAA,EAAM,WAAA;AAAA,YACN,IAAA,EAAM,SAAA;AAAA,YACN,KAAA,EAAO,6BAAA;AAAA,YACP,OAAA,EAAS;AAAA;AACX;AACF,OACF;AAAA,MACA;AAAA,QACE,EAAA,EAAI,oBAAA;AAAA,QACJ,KAAA,EAAO,wBAAA;AAAA,QACP,WAAA,EAAa,yEAAA;AAAA,QACb,cAAA,EAAgB,iBAAA;AAAA,QAChB,GAAA,EAAK,EAAE,IAAA,EAAM,WAAA,EAAqB;AAAA,QAClC,OAAA,EAAS,OAAA;AAAA,QACT,MAAA,EAAQ;AAAA,UACN,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,OAAA,EAAkB,OAAO,WAAA,EAAa,EAAA,EAAI,CAAC,QAAiB,CAAA,EAAE;AAAA,UACrF;AAAA,YACE,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM,SAAA;AAAA,YACN,KAAA,EAAO,4CAAA;AAAA,YACP,OAAA,EAAS;AAAA;AACX;AACF;AACF,KACF;AAAA,IACA,CAAC,YAAY,YAAY;AAAA,GAC3B;AAEA,EAAA,MAAM,QAAA,GAAWA,gBAAQ,MAAM;AAC7B,IAAA,MAAM,MAAA,GAAS,oBAAoB,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,iBAAiB,CAAA,GAAI,MAAA;AACpF,IAAA,OAAO,UACL,CAAC,eAAA,CAAgB,KAAK,CAAC,CAAA,KAAM,EAAE,EAAA,KAAO,MAAA,CAAO,EAAE,CAAA,IAC/C,MAAA,CAAO,IAAI,IAAA,KAAS,QAAA,GAClB,CAAC,GAAG,eAAA,EAAiB,MAAM,CAAA,GAC3B,eAAA;AAAA,EACN,CAAA,EAAG,CAAC,eAAA,EAAiB,MAAA,EAAQ,iBAAiB,CAAC,CAAA;AAC/C,EAAA,MAAM,EAAE,IAAA,EAAM,oBAAA,GAAuB,EAAC,KAAMmB,kBAAA,EAAa;AACzD,EAAA,MAAM,EAAE,IAAA,EAAM,MAAA,GAAS,EAAC,KAAMlC,eAAAA,EAAU;AACxC,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,GAAa,EAAC,KAAMmC,mBAAA,EAAc;AAChD,EAAA,MAAM,WAAWC,iBAAA,EAAY;AAC7B,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAIC,kBAAA,EAAa;AACzC,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,GAAY,EAAC,KAAMvB,kBAAAA,EAAa;AAC9C,EAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,cAAA,EAAgB,SAAA,KAAc,gBAAA,EAAiB;AAEvE,EAAA,MAAM,cAAcwB,iDAAA,EAAgC;AACpD,EAAA,MAAM,iBAAA,GAAoB1B,yBAAAA,CAAoB,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AAClE,EAAA,MAAM,eAAA,GAAkBG,eAAAA;AAAA,IACtB,MAAM,WAAW,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,WAAA,KAAgB,iBAAiB,CAAA,IAAK,IAAA;AAAA,IACrE,CAAC,YAAY,iBAAiB;AAAA,GAChC;AACA,EAAA,MAAM,YAAYA,eAAAA,CAAQ,MAAMwB,+BAAA,EAAc,EAAG,EAAE,CAAA;AAEnD,EAAA,MAAM,aAAA,GAAgBxB,eAAAA;AAAA,IACpB,MACE,MAAA,CAAO,WAAA;AAAA,MACL,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,KAAO,EAAE,SAAA,GAAY,CAAC,CAAC,CAAA,CAAE,aAAa,CAAA,CAAE,SAAS,CAAC,CAAA,GAAI,EAAG;AAAA,KAC9E;AAAA,IACF,CAAC,SAAS;AAAA,GACZ;AAIA,EAAA,MAAM,WAAA,GAAcA,gBAAQ,MAAM;AAChC,IAAA,MAAM,QAAQ,CAAC,CAAA,KAAmB,CAAA,CAAE,KAAA,EAAO,MAAK,IAAK,eAAA;AACrD,IAAA,IAAI,UAAA,EAAY,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,EAAA,EAAI,CAAA,CAAE,WAAA,EAAa,IAAA,EAAM,KAAA,CAAM,CAAC,GAAE,CAAE,CAAA;AAClF,IAAA,MAAM,OAAA,GAAuB,IAAA,IAAQ,EAAE,WAAA,EAAa,SAAA,EAAU;AAC9D,IAAA,OAAOyB,6BAAA;AAAA,MACL,CAAC,GAAG,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,KAAgB,OAAA,CAAQ,WAAW,CAAA,EAAG,OAAO,CAAA;AAAA,MAC1E;AAAA,KACF,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,EAAA,EAAI,CAAA,CAAE,WAAA,EAAa,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA,EAAE,CAAE,CAAA;AAAA,EACtD,CAAA,EAAG,CAAC,QAAA,EAAU,IAAA,EAAM,UAAU,CAAC,CAAA;AAE/B,EAAA,MAAM,cAAA,GAAiBzB,eAAAA;AAAA,IACrB,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,KAAe,WAAW,CAAA,IAAK,MAAA,CAAO,CAAC,CAAA,GAAI,WAAA;AAAA,IACvE,CAAC,MAAM;AAAA,GACT;AACA,EAAA,MAAM,YAAA,GAAeA,eAAAA;AAAA,IACnB,MAAM,MAAA,CAAO,GAAA,CAAI,CAAC,OAAO,EAAE,EAAA,EAAI,CAAA,CAAE,WAAA,EAAa,KAAA,EAAO,CAAA,CAAE,UAAA,IAAc,CAAA,CAAE,OAAM,CAAE,CAAA;AAAA,IAC/E,CAAC,MAAM;AAAA,GACT;AAGA,EAAA,MAAM,aAAA,GAAgBA,gBAAQ,MAAM;AAClC,IAAA,MAAM,GAAA,GAAM;AAAA,MACV,gBAAA,EAAkB0B,gCAAA;AAAA,MAClB,kBAAA,EAAoBC,gCAAA;AAAA,MACpB,WAAA,EAAa;AAAA,KACf;AACA,IAAA,MAAM,OAAO,cAAA,GACT;AAAA,MACE,GAAGC,0CAAA,CAAyB,cAAA,EAAgB,GAAG,CAAA;AAAA,MAC/C,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO,EAAA;AAAA,MACP,KAAA,EAAO,EAAA;AAAA,MACP,SAAA,EAAW,EAAA;AAAA,MACX,WAAA,EAAa,EAAA;AAAA,MACb,IAAA,EAAM;AAAA,KACR,GACA,eAAA,GACEA,0CAAA,CAAyB,eAAA,EAAiB,GAAG,CAAA,GAC7C,IAAA,GACEC,sCAAA,CAAqB,IAAA,EAAM,GAAG,CAAA,GAC9B,UAAA,GACE;AAAA;AAAA,MAEE,QAAA,EAAU,OAAA;AAAA,MACV,YAAY,iBAAA,IAAqBH,gCAAA;AAAA,MACjC,IAAA,EAAM,aAAc,MAAA,GAAoB,KAAA;AAAA,MACxC,GAAI,aAAA,GACA;AAAA,QACE,MAAA,EAAQ;AAAA,UACN,CAAC,iBAAA,KAAsBC,gCAAA,GAAiB,SAAA,GAAY,aAAa,GAC/D;AAAA;AACJ,UAEF,EAAC;AAAA;AAAA,MAEL,GAAI,UAAA,IAAc,cAAA,GAAiB,EAAE,OAAA,EAAS,cAAA,KAAmB;AAAC,KACpE,GACA,iBAAA;AAAA;AAAA,MAEE,EAAE,OAAA,EAAS,iBAAA,EAAmB,UAAA,EAAYD,gCAAA,EAAgB,kBAAkB,IAAA;AAAK,QACjF,EAAC;AACb,IAAA,OAAO;AAAA,MACL,UAAUI,gCAAA,EAAe;AAAA,MACzB,GAAG,IAAA;AAAA,MACH,GAAI,aAAA,KAAkB,MAAA,IAAa,CAAC,IAAA,IAAQ,CAAC,eAAA,GACzC,EAAE,MAAA,EAAQ,aAAA,EAAc,GACxB,EAAC;AAAA,MACL,GAAI,CAAC,IAAA,IAAQ,CAAC,UAAA,IAAc,yBACxB,EAAE,YAAA,EAAc,sBAAA,EAAuB,GACvC;AAAC,KACP;AAAA,EACF,CAAA,EAAG;AAAA,IACD,QAAA;AAAA,IACA,IAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA,iBAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,iBAA0B,IAAI,CAAA;AACtD,EAAAC,iBAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,UAAc,IAAA,EAAM,IAAA,IAAQ,iBAAiB,IAAA,IAAQ,cAAA,EAAgB,QAAQ,IAAI,CAAA;AAAA,EACvF,GAAG,CAAC,IAAA,EAAM,IAAA,EAAM,eAAA,EAAiB,cAAc,CAAC,CAAA;AAEhD,EAAA,MAAM,kBAAA,GAAqB,OAAO,MAAA,KAA+B;AAC/D,IAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,MAAA,MAAA,CAAO,0DAAqD,SAAS,CAAA;AACrE,MAAA;AAAA,IACF;AACA,IAAA,MAAM,YAAY,MAAA,CAAO,MAAA,CAAO,OAAO,WAAA,IAAe,EAAE,EAAE,IAAA,EAAK;AAC/D,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAA,CAAO,6EAA8D,SAAS,CAAA;AAC9E,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,WAAA,CAAY;AAAA,QACzC,SAAA;AAAA,QACA,UAAA,EAAY,MAAM,UAAA,IAAc;AAAA,OACjC,CAAA;AACD,MAAA,OAAA,CAAQ,OAAO,CAAA;AACf,MAAA,MAAA,CAAO,8CAAyC,SAAS,CAAA;AAAA,IAC3D,CAAA,CAAA,MAAQ;AACN,MAAA,MAAA,CAAO,0BAA0B,OAAO,CAAA;AAAA,IAC1C;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAA+B,OAAA,KAAoC;AAEvF,IAAA,MAAM,MAAA,GACJ,QAAA,CAAS,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,SAAA,CAAU,UAAU,MACjD,SAAA,CAAU,QAAA,KAAa,IAAA,GAAO,QAAA,CAAS,CAAC,CAAA,GAAI,MAAA,CAAA;AAC/C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,IAAI,IAAA,IAAQ,CAAC,IAAA,CAAK,IAAA,CAAK,MAAK,EAAG;AAC7B,MAAA,MAAA,CAAO,yBAAyB,SAAS,CAAA;AACzC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG;AACrD,MAAA,MAAA,CAAO,uDAAuD,SAAS,CAAA;AACvE,MAAA;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM;AAAA,MACV,QAAA,EAAU,MAAA;AAAA,MACV,MAAA,EAAQ,SAAA;AAAA,MACR,IAAA,EAAM,MAAA,CAAO,EAAA,KAAON,gCAAA,GAAiB,IAAA,GAAO;AAAA,KAC9C;AACA,IAAA,IAAI;AACF,MAAA,IAAI,UAAA,IAAc,eAAA,IAAmB,CAAC,OAAA,EAAS,OAAA,EAAS;AACtD,QAAA,MAAM,cAAA,CAAe,iBAAiB,GAAG,CAAA;AACzC,QAAA,MAAA,CAAO,CAAA,cAAA,EAAY,eAAA,CAAgB,IAAI,CAAA,MAAA,CAAA,EAAK,SAAS,CAAA;AAAA,MACvD,CAAA,MAAA,IAAW,UAAU,IAAA,EAAM;AACzB,QAAA,MAAM,MAAA,CAAO,MAAM,GAAG,CAAA;AACtB,QAAA,MAAA,CAAO,CAAA,cAAA,EAAY,IAAA,CAAK,KAAA,IAAS,MAAM,UAAK,SAAS,CAAA;AAAA,MACvD,CAAA,MAAO;AACL,QAAA,MAAM,UAAU,MAAM,MAAA,CAAO,KAAK,QAAA,IAAY,CAAC,SAAS,OAAO,CAAA;AAC/D,QAAA,IAAI,OAAA,CAAQ,SAAS,UAAA,EAAY;AAC/B,UAAA,MAAA,CAAO,CAAA,YAAA,EAAU,OAAA,CAAQ,QAAA,CAAS,IAAI,WAAM,SAAS,CAAA;AAErD,UAAA,YAAA,IAAe;AAAA,QACjB,CAAA,MAAO;AACL,UAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,IAAS,MAAA;AACnC,UAAA,IAAA,CAAK,QAAQ,GAAA,IAAO,OAAA,EAAS,OAAA,KAAY,OAAA,CAAQ,KAAK,WAAA,EAAa;AAEjE,YAAA,gBAAA,CAAiB,OAAA,CAAQ,KAAK,WAAW,CAAA;AAAA,UAC3C,CAAA,MAAO;AACL,YAAA,MAAA;AAAA,cACE,OAAA,CAAQ,GAAA,KAAQ,IAAA,GACZ,CAAA,YAAA,EAAU,IAAI,CAAA,MAAA,CAAA,GACd,2CAAA;AAAA,cACJ,OAAA,CAAQ,GAAA,KAAQ,KAAA,GAAQ,SAAA,GAAY;AAAA,aACtC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAA,GAAO,aAAa,MAAA,GAAS,QAAA,GAAW,QAAQ,CAAA,KAAA,EAAQ,UAAA,GAAa,aAAa,MAAM,CAAA,CAAA;AAC9F,MAAA,MAAA;AAAA,QACE,iBAAiB,KAAA,IAAS,KAAA,CAAM,QAAQ,UAAA,CAAW,kBAAkB,IACjE,KAAA,CAAM,OAAA,GACN,KAAA,YAAiBO,oBAAA,IAAgB,MAAM,MAAA,GACrC,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,MAAM,CAAA,CAAA,GACxB,IAAA;AAAA,QACN;AAAA,OACF;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,uBACEpD,cAAAA;AAAA,IAACqD,8BAAA;AAAA,IAAA;AAAA,MAEC,IAAA;AAAA,MACA,YAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAc,CAAC,kBAAA;AAAA,MACf,cAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA,EAAW,QAAA;AAAA,MACX,MAAA,EAAQ,YAAA;AAAA,MACR,KAAA,EAAO,WAAA;AAAA,MACP,aAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA,EAAcC,mCAAA;AAAA,MACd,oBAAA,EAAsB,qBACnB,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,WAAA,KAAgB,iBAAiB,WAAW,CAAA,CAClE,IAAI,CAAC,IAAA,MAAU,EAAE,EAAA,EAAI,IAAA,CAAK,aAAa,KAAA,EAAO,IAAA,CAAK,MAAK,CAAE,CAAA;AAAA,MAC7D,SAAA;AAAA,MACA,cAAc,QAAA,CAAS,SAAA;AAAA,MACvB,SAAS,IAAA,KAAS,IAAA;AAAA,MAClB,UAAA,EAAYC,oCAAA;AAAA,MACZ,WAAA;AAAA,MACA,eAAA,EAAiB,CAAC,KAAA,EAAO,KAAA,EAAO,6BAC9BvD,cAAAA;AAAA,QAACwD,iDAAA;AAAA,QAAA;AAAA,UACC,KAAA;AAAA,UACA,KAAA;AAAA,UACA,QAAA;AAAA,UACA,UAAA,EAAY;AAAA;AAAA,OACd;AAAA,MAEF,cAAA,EACE,UAAA,oBACExD,cAAAA,CAACyD,SAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,MAAM,UAAA,EAAW,EAAG,aAAA,EAAY,4BAA2B,QAAA,EAAA,WAAA,EAEtF,CAAA;AAAA,MAGJ,WAAA,EAAa,UAAA,KAAe,CAAC,KAAA,KAAU,WAAW,KAAK,CAAA,CAAA;AAAA,MACvD,cAAA,EAAgB,CAAC,MAAA,qBACfzD,cAAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACC,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,mBAAA,EAAqB,iBAAiB,IAAA,IAAQ;AAAA;AAAA,OAChD;AAAA,MAEF,MAAA,EAAQ;AAAA,QACN,GAAI,UAAA,GACA;AAAA,UACE,gBAAA,EAAkB,cAAA;AAAA,UAClB,iBAAA,EAAmB,eAAA;AAAA,UACnB,uBAAA,EAAyB,oBAAA;AAAA,UACzB,cAAA,EAAgB,iBAAA;AAAA,UAChB,YAAA,EAAc,eAAA;AAAA,UACd,mBAAA,EAAqB,oDAAA;AAAA,UACrB,SAAA,EAAW,uDAAA;AAAA,UACX,cAAA,EAAgB;AAAA,YAElB,EAAC;AAAA,QACL,GAAI,OACA,EAAE,WAAA,EAAa,0BAA0B,cAAA,EAAgB,2BAAA,KACzD;AAAC,OACP;AAAA,MACA,QAAA,EAAU,MAAA;AAAA,MACV,MAAM,CAAC,MAAA,KACL,MAAA,CAAO,UAAA,KAAe6C,mDACpB7C,cAAAA;AAAA,QAAC0D,0BAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,QAAA,EAAU,OAAA;AAAA,UACV,UAAA,EAAY,MAAM,kBAAA,CAAmB,MAAM,CAAA;AAAA,UAC3C,cAAc,QAAA,CAAS,SAAA;AAAA,UACvB,aAAA,EAAe,iBAAiB,IAAA,IAAQ,IAAA;AAAA,UACxC,aAAA;AAAA,UACA,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,eAAe,EAAE;AAAA;AAAA,OACnD,GACE;AAAA,KAAA;AAAA,IAzED,eAAA,EAAiB,WAAA,IAAe,IAAA,EAAM,WAAA,IAAe;AAAA,GA2E5D;AAEJ;ACxcA,IAAM,YAAA,GAAkC,CAAC,OAAA,EAAS,cAAc,CAAA;AAMzD,SAAS,aAAA,GAAiD;AAC/D,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,GAAU,EAAC,KAAMC,uBAAA,EAAkB;AACjD,EAAA,MAAM,gBAAA,GAAmBC,oBAAA,EAAe,CAAE,IAAA,EAAM,WAAA;AAChD,EAAA,OAAOzC,eAAAA;AAAA,IACL,MACE,OAAA,CACG,MAAA;AAAA,MACC,CAAC,CAAA,KACC,CAAC0C,UAAA,CAAQ,EAAE,IAAI,CAAA,IACf,CAAA,CAAE,IAAA,CAAK,WAAA,KAAgB,gBAAA,IACvB,YAAA,CAAa,QAAA,CAAS,EAAE,IAAI;AAAA,KAChC,CACC,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,EAAA,EAAI,CAAA,CAAE,IAAA,CAAK,WAAA,EAAa,KAAA,EAAOC,qBAAA,CAAmB,CAAA,CAAE,IAAI,GAAE,CAAE,CAAA;AAAA,IAC/E,CAAC,SAAS,gBAAgB;AAAA,GAC5B;AACF;AAMO,SAAS,mBAAA,GAAyD;AACvE,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,GAAU,EAAC,KAAMH,uBAAA,EAAkB;AACjD,EAAA,MAAM,EAAE,IAAA,EAAM,MAAA,GAAS,EAAC,KAAMvD,eAAAA,EAAU;AACxC,EAAA,MAAM,IAAA,GAAOe,gBAAQ,MAAM;AACzB,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,CAAK,WAAA,EAAa,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA;AACpE,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,EAAQ,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,KAAA,CAAM,WAAW,CAAA,EAAG,GAAA,CAAI,GAAA,CAAI,KAAA,CAAM,aAAa,KAAK,CAAA;AAC7F,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EAAG,CAAC,OAAA,EAAS,MAAM,CAAC,CAAA;AACpB,EAAA,OAAOZ,mBAAAA;AAAA,IACL,CAAC,MAAA,KAAuB;AACtB,MAAA,MAAM,OAAO,MAAA,CAAO,EAAA,GAAK,KAAK,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,GAAI,MAAA;AAC/C,MAAA,OAAO,IAAA,mBAAOP,cAAAA,CAAC+D,8BAAA,EAAA,EAAa,IAAA,EAAY,OAAA,EAAQ,MAAA,EAAO,CAAA,mBAAK/D,cAAAA,CAACQ,4BAAA,EAAA,EAAW,MAAA,EAAgB,CAAA;AAAA,IAC1F,CAAA;AAAA,IACA,CAAC,IAAI;AAAA,GACP;AACF;AClCO,SAAS,qBAAA,CAAsB;AAAA,EACpC,cAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA,GAA+B,EAAC,EAAG;AACjC,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,GAAY,EAAC,KAAM8B,kBAAAA,CAAa,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AAC5D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIY,gBAAAA,CAA0C,kBAAkB,IAAI,CAAA;AAC9F,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,iBAAS,CAAC,CAAA;AAC9C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,gBAAAA,CAAmB,EAAE,CAAA;AACzD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,iBAAwB,IAAI,CAAA;AAE1E,EAAA,MAAM,UAAA,GAAa,UAAU,IAAA,CAAK,CAAC,aAAa,QAAA,CAAS,WAAA,KAAgB,eAAe,CAAA,IAAK,IAAA;AAC7F,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,OAAA,CAAQ,CAAC,EAAA,KAAO;AAC7C,IAAA,MAAM,WAAW,SAAA,CAAU,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,gBAAgB,EAAE,CAAA;AACjE,IAAA,OAAO,QAAA,GAAW,CAAC,QAAQ,CAAA,GAAI,EAAC;AAAA,EAClC,CAAC,CAAA;AAED,EAAA,MAAM,WAAA,GAAc3C,mBAAAA,CAAY,CAAC,QAAA,KAAsC;AACrE,IAAA,MAAM,EAAA,GAAK,UAAU,WAAA,IAAe,IAAA;AACpC,IAAA,IAAI,EAAA,EAAI,aAAA,CAAc,CAAC,GAAA,KAAS,GAAA,CAAI,QAAA,CAAS,EAAE,CAAA,GAAI,GAAA,GAAM,CAAC,GAAG,GAAA,EAAK,EAAE,CAAE,CAAA;AACtE,IAAA,kBAAA,CAAmB,EAAE,CAAA;AAAA,EACvB,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,MAAM,eAAA,GAAkBA,mBAAAA,CAAY,CAAC,EAAA,KAAe;AAClD,IAAA,aAAA,CAAc,CAAC,QAAQ,GAAA,CAAI,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,KAAS,EAAE,CAAC,CAAA;AACxD,IAAA,kBAAA,CAAmB,CAAC,MAAA,KAAY,MAAA,KAAW,EAAA,GAAK,OAAO,MAAO,CAAA;AAAA,EAChE,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,MAAM,WAAA,GAAcA,mBAAAA,CAAY,CAAC,SAAA,KAAwC;AACvE,IAAA,UAAA,CAAW,SAAS,CAAA;AAEpB,IAAA,aAAA,CAAc,CAAC,GAAA,KAAQ,GAAA,GAAM,CAAC,CAAA;AAAA,EAChC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA4C,kBAAU,MAAM;AACd,IAAA,MAAM,WAAW,SAAA,CAAU,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,gBAAgB,iBAAiB,CAAA;AAChF,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,WAAA,CAAY,QAAQ,CAAA;AACpB,IAAA,yBAAA,IAA4B;AAAA,EAC9B,GAAG,CAAC,iBAAA,EAAmB,yBAAA,EAA2B,WAAA,EAAa,SAAS,CAAC,CAAA;AAEzE,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA,EAAc,MAAM,UAAA,CAAW,IAAI,CAAA;AAAA,IACnC,YAAA,EAAc,CAAC,EAAA,KAAe,UAAA,CAAW,EAAE,IAAA,EAAM,OAAA,EAAS,IAAI,CAAA;AAAA,IAC9D,UAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA,EAAkB;AAAA,GACpB;AACF","file":"chunk-PTNV3TT5.cjs","sourcesContent":["/**\n * A saved workflow's history and a task's activity, bound to the connection.\n *\n * - `ConnectedWorkflowHistory`: every run of a workflow (re-read while shown), each with when, what\n * it was (a thread, an email, an AI review, a reminder) and how it went; a run's thread opens\n * through the environment's `openConversation`, a document action's result through the host.\n * - `ConnectedTaskActivityDialog`: a task's timeline (re-read while it runs), with who did what.\n */\n\nimport { useCallback, type ReactNode } from 'react'\nimport { useAgents, useConversationActivity, useWorkflowRuns } from '@arbidocs/react'\nimport { formatRelativeTime } from '@arbidocs/react/ui'\nimport {\n TaskRunsDialog,\n type TaskRunView,\n type TaskRunsDialogLabels,\n} from '../agents/tasks/TaskRunsDialog'\nimport { TaskActivityDialog } from '../agents/tasks/TaskActivityDialog'\nimport type { TaskActivityEvent } from '../agents/tasks/TaskActivityTimeline'\nimport { PersonPill, type TaskPerson } from '../agents/tasks/PersonPill'\nimport { fmtDate } from '../lib/format'\nimport { useBlocksEnvironment } from '../provider/environment'\nimport { useConnectedWorkspace } from './ConnectionProvider'\nimport { useConnectedWorkspaceRole } from './ConnectedWorkflowsTable'\n\ntype WorkflowRun = NonNullable<ReturnType<typeof useWorkflowRuns>['data']>[number]\n\n/** What a run was, in a word. */\nconst RUN_KIND: Record<string, string> = {\n email_documents: 'Email',\n annotate_documents: 'AI Review',\n reminder: 'Reminder',\n}\nconst DOCUMENT_ACTIONS = new Set(['email_documents', 'annotate_documents'])\n\n/** A run as the history lists it: when, what, on how many documents. */\nexport function workflowRunView(\n run: WorkflowRun,\n formatDate: (iso: string) => string\n): TaskRunView {\n const documents = DOCUMENT_ACTIONS.has(run.action_type)\n ? ` · ${run.document_ext_ids.length} documents`\n : ''\n return {\n id: `execution-${run.id}`,\n // An AI review that finished has a result to open (its fields over its documents).\n resultId:\n run.action_type === 'annotate_documents' && run.status === 'completed'\n ? String(run.id)\n : undefined,\n status: run.status,\n when: `${formatDate(run.created_at)} · ${RUN_KIND[run.action_type] ?? 'Thread'}${documents}`,\n error: run.error,\n conversationId: run.conversation_ext_id ?? undefined,\n }\n}\n\nexport interface ConnectedWorkflowHistoryProps {\n /** The workflow (`null`: closed). */\n workflow: { external_id: string; name: string } | null\n onOpenChange: (open: boolean) => void\n /** In the page rather than a dialog. */\n inline?: boolean\n hideHeader?: boolean\n formatDate?: (iso: string) => string\n /** Open a document action's result (an AI review's fields): the host's. Absent: no Open. */\n onOpenResult?: (run: WorkflowRun) => void\n /** Under a failed run: e.g. a way to report it. */\n renderErrorReport?: (run: TaskRunView) => ReactNode\n labels?: Partial<TaskRunsDialogLabels>\n}\n\nexport function ConnectedWorkflowHistory({\n workflow,\n onOpenChange,\n inline,\n hideHeader,\n formatDate = fmtDate,\n onOpenResult,\n renderErrorReport,\n labels,\n}: ConnectedWorkflowHistoryProps) {\n const { openConversation } = useBlocksEnvironment()\n const { data: runs = [], isLoading } = useWorkflowRuns(workflow?.external_id)\n return (\n <TaskRunsDialog\n inline={inline}\n hideHeader={hideHeader}\n open={!!workflow}\n onOpenChange={onOpenChange}\n taskName={workflow?.name}\n renderErrorReport={renderErrorReport}\n isLoading={isLoading}\n labels={{\n title: (name) => `History — ${name}`,\n description: 'Executions and results of this workflow.',\n empty: 'This workflow hasn’t run yet.',\n ...labels,\n }}\n runs={runs.map((run) => workflowRunView(run, formatDate))}\n onOpenResult={\n onOpenResult &&\n ((id) => {\n const run = runs.find((r) => String(r.id) === id)\n if (run) onOpenResult(run)\n })\n }\n onOpenRun={(conversationId) => openConversation(conversationId)}\n />\n )\n}\n\n/** Relative time, compact for list rows. */\nconst relativeTime = (iso: string) => formatRelativeTime(iso, { style: 'short' })\n\nexport interface ConnectedTaskActivityDialogProps {\n conversationId: string\n taskName: string\n /** The run is generating right now: the timeline then re-reads itself every few seconds. */\n live?: boolean\n onClose: () => void\n /** How a person shows (the host's own pill). Default: the shared pill with their name. */\n renderPerson?: (person: TaskPerson) => ReactNode\n formatExact?: (iso: string) => string\n}\n\nexport function ConnectedTaskActivityDialog({\n conversationId,\n taskName,\n live,\n onClose,\n renderPerson: renderTaskPerson,\n formatExact = fmtDate,\n}: ConnectedTaskActivityDialogProps) {\n const activity = useConversationActivity(conversationId, { live })\n const { data: agents = [] } = useAgents()\n const { userId } = useConnectedWorkspace()\n const { members } = useConnectedWorkspaceRole()\n const renderPerson = useCallback(\n (id: string | null | undefined) => {\n const isMe = !!id && id === userId\n const member = members.find((m) => m.user.external_id === id)?.user\n const name =\n (member && [member.given_name, member.family_name].filter(Boolean).join(' ')) ||\n member?.email\n const person = { id, label: isMe ? 'You' : name || 'Someone', isMe }\n return renderTaskPerson ? renderTaskPerson(person) : <PersonPill person={person} />\n },\n [renderTaskPerson, userId, members]\n )\n const agentName = useCallback(\n (agentId: string) => agents.find((a) => a.external_id === agentId)?.given_name ?? undefined,\n [agents]\n )\n return (\n <TaskActivityDialog\n open\n onOpenChange={(open) => !open && onClose()}\n taskName={taskName}\n events={activity.data as TaskActivityEvent[] | undefined}\n isLoading={activity.isLoading}\n isError={activity.isError}\n renderPerson={renderPerson}\n agentName={agentName}\n formatRelative={relativeTime}\n formatExact={formatExact}\n />\n )\n}\n","/**\n * Creating and updating work and workflows from the composer, in one place.\n *\n * \"Now\" is an assistant query with task options (the person's own run: the thread becomes a task); a plain\n * to-do creates work with no run. Any other start (a date, a repeat, an event, after another task) saves a workflow\n * that creates the work when it fires. The request mapping is shared with every host (and tested in\n * blocks): `taskComposerToCreateRequest` decides which.\n *\n * Workspace authorization is a per-run, least-privilege choice (`auth_mode`) composed over the shipped\n * workspace-access-request + grant machinery:\n * - Now -> no tier: the query runs as the person asking, with their own access.\n * - Workflow -> `scheduled_require_auth` by default (asks at run time), or `scheduled_permanent`\n * (\"keep access\"): standing membership so unattended runs can decrypt while the owner\n * is away. Only this tier grants membership.\n */\n\nimport {\n useCreateWorkflow,\n useGrantAgentAccess,\n useRunWorkflow,\n useUpdateWorkflow,\n useDocuments,\n useArbiSessionState,\n useCreateWork,\n useStartTaskQuery,\n useUpdateConversation,\n} from '@arbidocs/react'\nimport { getDocumentTitle } from '@arbidocs/react/ui'\nimport type { components } from '@arbidocs/client'\nimport { useCallback, useMemo } from 'react'\nimport {\n composerToWorkflowUpdate,\n taskComposerToCreateRequest,\n taskComposerToUpdateRequest,\n} from '../../agents/tasks/taskRequest'\nimport { type TaskComposerValues } from '../../agents/tasks/taskComposerTypes'\nimport { type WorkflowDefinition } from '../../agents/workflows/types'\nimport type { TaskPlan } from '../../agents/workflows/planSteps'\nimport { useBlocksEnvironment } from '../../provider/environment'\n\ntype Task = components['schemas']['ConversationResponse']\ntype Workflow = components['schemas']['WorkflowResponse']\n\nexport interface TaskSubmitContext {\n workflow: WorkflowDefinition\n values: TaskComposerValues\n /** Goal checklist for agent work, if one was drafted. */\n plan?: TaskPlan | null\n}\n\n/** What a composer submission created. `ran` is null for work no agent runs. */\nexport type CreateOutcome =\n | { kind: 'work'; task: Pick<Task, 'title'> & { external_id?: string }; ran: boolean | null }\n | { kind: 'workflow'; workflow: Workflow }\n\nexport function useWorkflowTasks() {\n const createWork = useCreateWork()\n const runWorkflow = useRunWorkflow()\n const startQuery = useStartTaskQuery()\n const createWorkflow = useCreateWorkflow()\n const updateConversation = useUpdateConversation()\n const updateWorkflowMutation = useUpdateWorkflow()\n const activeWorkspaceId = useArbiSessionState((s) => s.workspaceId)\n const { openFiles } = useBlocksEnvironment()\n\n // Standing access for a workflow's agent, so its unattended runs can read the workspace. An agent\n // that is already a member makes the server refuse the re-grant: that is no failure here.\n const { mutateAsync: grant } = useGrantAgentAccess()\n const grantAgentAccess = useCallback(\n (agentExtId: string, workspaceId: string) =>\n grant({ agentExtId, workspaceId }).then(\n () => undefined,\n () => undefined\n ),\n [grant]\n )\n // File names for the prompt's wording (\"the document <name>\"): the server is told the ids as well.\n const { data: documents = [] } = useDocuments()\n const documentTitles = useMemo(\n () =>\n Object.fromEntries(documents.map((d) => [d.external_id, getDocumentTitle(d, d.external_id)])),\n [documents]\n )\n\n /**\n * Create work or a workflow. `forceWorkflow` is for the workflow dialog, where even a reminder is\n * saved as a workflow.\n */\n const create = useCallback(\n async (ctx: TaskSubmitContext, forceWorkflow = false): Promise<CreateOutcome> => {\n const request = taskComposerToCreateRequest(\n { ...ctx, documentTitles, plan: ctx.plan ?? null },\n activeWorkspaceId ?? undefined,\n forceWorkflow\n )\n if (request.kind === 'workflow') {\n const workflow = await createWorkflow.mutateAsync(request.body)\n // Keep access: deposit the key for the agent the server assigned (the Assistant when none was\n // picked), while the owner is here, so unattended runs start on their own.\n const workspaceId = workflow.workspace_ext_id ?? request.body.workspace_ext_id\n if (\n workflow.auth_mode === 'scheduled_permanent' &&\n !workflow.on_demand &&\n workflow.agent_ext_id &&\n workspaceId\n ) {\n await grantAgentAccess(workflow.agent_ext_id, workspaceId)\n }\n if (ctx.workflow.documentAction && ctx.values.when === 'now' && !forceWorkflow) {\n const result = await runWorkflow.mutateAsync(workflow.external_id)\n if (result.error) throw new Error(result.error)\n openFiles()\n }\n return { kind: 'workflow', workflow }\n }\n if (request.kind === 'query') {\n // Run now is the person's own assistant query: it makes the thread a task and runs it.\n const { conversationId } = await startQuery.start(request.query)\n return {\n kind: 'work',\n task: { external_id: conversationId, title: request.query.task.title ?? null },\n ran: true,\n }\n }\n // A plain to-do (or reminder): a task with no run.\n const task = await createWork.mutateAsync(request.body)\n return { kind: 'work', task, ran: null }\n },\n [\n activeWorkspaceId,\n createWork,\n createWorkflow,\n documentTitles,\n grantAgentAccess,\n startQuery,\n runWorkflow,\n openFiles,\n ]\n )\n\n /** PATCH the editable fields of a task (the instruction, workspace and agent stay as created). */\n const update = useCallback(\n async (task: Pick<Task, 'external_id'> & { is_owner?: boolean }, ctx: TaskSubmitContext) => {\n const patch = taskComposerToUpdateRequest({ ...ctx, plan: ctx.plan ?? null })\n // Who can see a task is its owner's to change: an editor's save leaves it out.\n if (task.is_owner === false) delete patch.shared\n await updateConversation.mutateAsync({ conversationId: task.external_id, patch })\n },\n [updateConversation]\n )\n\n /** PATCH a workflow: its name, trigger and action. */\n const updateWorkflow = useCallback(\n async (\n workflow: Pick<Workflow, 'external_id' | 'agent_ext_id' | 'workspace_ext_id'> & {\n is_owner?: boolean\n },\n ctx: TaskSubmitContext\n ) => {\n const patch = composerToWorkflowUpdate({ ...ctx, documentTitles, plan: ctx.plan ?? null })\n // Sharing a workflow is its owner's: an editor's save leaves it out.\n if (workflow.is_owner === false) delete patch.shared\n const workspaceId = workflow.workspace_ext_id ?? activeWorkspaceId\n const updated = await updateWorkflowMutation.mutateAsync({\n workflowId: workflow.external_id,\n patch,\n })\n // The agent the server keeps (the Assistant when none was picked) gets the key for unattended runs.\n const agentId = updated.agent_ext_id ?? patch.agent_ext_id ?? workflow.agent_ext_id\n if (\n updated.auth_mode === 'scheduled_permanent' &&\n !updated.on_demand &&\n agentId &&\n workspaceId\n ) {\n await grantAgentAccess(agentId, workspaceId)\n }\n },\n [activeWorkspaceId, documentTitles, grantAgentAccess, updateWorkflowMutation]\n )\n\n return {\n create,\n update,\n updateWorkflow,\n isPending:\n createWork.isPending ||\n startQuery.isPending ||\n createWorkflow.isPending ||\n updateConversation.isPending ||\n updateWorkflowMutation.isPending,\n }\n}\n","/**\n * The one gate for everything skill-shaped in the app: the empty chat's Start list, the skill\n * entries of the slash menu, the sidebar's Skills item, the Skills browser's entry points and the\n * typed `/skill` interception. It is the personal `show_skills` user setting, default off; the\n * switch lives in Settings, Experimental (developers only), so today only developers have it.\n */\n\nimport { useUserSettings } from '@arbidocs/react'\n\nexport function useSkillsEnabled(): boolean {\n const { data: userSettings } = useUserSettings()\n return userSettings?.show_skills ?? false\n}\n","/**\n * The one list of workflows: the seeded ones plus every skill the user can invoke (each degraded\n * to a single-field form from its `arg_hint`). The dashboard tiles, the slash menu, tasks and\n * agents all read this.\n */\n\nimport { useMemo } from 'react'\nimport { useSkills } from '@arbidocs/react'\nimport { mergeSkillWorkflows } from '../../agents/workflows/workflow'\nimport { type WorkflowDefinition } from '../../agents/workflows/types'\nimport {\n CUSTOM_TASK,\n DASHBOARD_OPERATIONS,\n DASHBOARD_PINNED,\n REMIND_TASK,\n} from '../../agents/workflows/catalogue/seed'\nimport { useSkillsEnabled } from './useSkillsEnabled'\nimport { sortByRecentUse, useWorkflowUsage } from '../../agents/workflows/catalogue/workflow-usage'\nimport { WEB_WORKFLOWS } from '../../agents/workflows/catalogue/registry'\n\nexport interface UseWorkflowDefinitionsResult {\n /** Every skill workflow of this host: built-ins plus the user's and the marketplace's (one list). */\n skills: WorkflowDefinition[]\n /** The user has skills switched on (`show_skills`): the gate of every skill-shaped surface. */\n skillsEnabled: boolean\n /**\n * The empty chat's Start section: built-ins first (their own order), then the user's own and\n * marketplace skills by recent use, then name. EMPTY for users without skills enabled.\n */\n start: WorkflowDefinition[]\n /** The dashboard Start band: pinned skills in order, then the operation launchers. */\n dashboard: WorkflowDefinition[]\n /** What a task can run: schedulable skills plus a free instruction and a reminder. */\n forTasks: WorkflowDefinition[]\n}\n\nexport function useWorkflowDefinitions(): UseWorkflowDefinitionsResult {\n const { data: listings } = useSkills()\n const usage = useWorkflowUsage()\n const skillsEnabled = useSkillsEnabled()\n return useMemo(() => {\n // An uploaded skill of a built-in's slug is used instead of it.\n const { host: builtins, skills: fromServer } = mergeSkillWorkflows(\n WEB_WORKFLOWS,\n listings ?? []\n )\n const all = [...builtins, ...fromServer]\n const byId = new Map(all.map((w) => [w.id, w]))\n const pinned = DASHBOARD_PINNED.flatMap((id) => {\n const w = byId.get(id)\n return w ? [w] : []\n })\n return {\n skills: all,\n skillsEnabled,\n start: skillsEnabled ? [...builtins, ...sortByRecentUse(fromServer, usage)] : [],\n dashboard: [...pinned, ...DASHBOARD_OPERATIONS],\n forTasks: [CUSTOM_TASK, ...all.filter((w) => w.schedulable), REMIND_TASK],\n }\n }, [listings, usage, skillsEnabled])\n}\n","/**\n * Create / edit a task, or create / edit a workflow: the `TaskComposer` block, connected.\n *\n * A task is a conversation with a status. \"Now\" (or a plain to-do) creates it; any other start (at a\n * time, on an event, after another task) saves a workflow that creates it when it fires. Pick the\n * workflow definition (or write your own instruction), fill its form, choose when, and who does it.\n * Everything the backend needs beyond that (authorization tier, name, notification, goal checklist)\n * is derived or folded under \"More options\". The API mapping lives in `useWorkflowTasks`, shared with\n * \"launch as another agent\". With `kind=\"workflow\"` it is the workflow dialog the Workflows page uses.\n */\n\nimport {\n useAgents,\n useAgentWorkspaces,\n useArbiSessionState,\n useDocuments,\n usePlanWork,\n useTags,\n useWorkflows,\n useWorkItems,\n useWorkspaces,\n} from '@arbidocs/react'\nimport type { components } from '@arbidocs/client'\nimport { useEffect, useMemo, useState } from 'react'\nimport { Button } from '@arbidocs/react/ui'\nimport { TaskComposer } from '../../agents/tasks/TaskComposer'\nimport { TaskPlan as TaskPlanForm } from '../../agents/tasks/TaskPlan'\nimport type { TaskPlan } from '../../agents/workflows/planSteps'\nimport { moveTargets, type TaskListRow } from '../../agents/tasks/taskRows'\nimport { taskToComposerValues, workflowToComposerValues } from '../../agents/tasks/taskRequest'\nimport { type AgentOption } from '../../agents/workflows/AgentSelect'\nimport { type TaskComposerValues } from '../../agents/tasks/taskComposerTypes'\nimport { ArbiApiError } from '@arbidocs/sdk/browser'\nimport { detectTimeZone, listTimeZones } from '../../calendar/zone'\nimport { useBlocksEnvironment, useOpenWorkflow } from '../../provider/environment'\n\ntype Task = components['schemas']['ConversationResponse']\ntype Workflow = components['schemas']['WorkflowResponse']\nimport {\n CUSTOM_TASK_ID,\n REMIND_TASK_ID,\n renderWorkflowIcon,\n} from '../../agents/workflows/catalogue/seed'\nimport { useWorkflowDefinitions } from '../workflows/useWorkflowDefinitions'\nimport { useWorkflowTasks } from '../workflows/useWorkflowTasks'\nimport { AUTOMATION_EVENTS } from '../../agents/tasks/taskHelpers'\nimport {\n ConnectedWorkflowDocumentsField,\n useConnectedWorkflowScopeSource,\n} from '../ConnectedWorkflowLauncher'\n\nexport interface ConnectedTaskComposerProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** `workflow` is the workflow dialog (new, or `workflow` to edit); the default adds a task. */\n kind?: 'work' | 'workflow'\n /** Save an on-demand recipe instead of running immediately. */\n saveOnly?: boolean\n /** Present -> edit this task; absent -> create. */\n task?: Task | null\n /** `kind=\"workflow\"` only: present -> edit this workflow. */\n workflow?: Workflow | null\n /** Create-mode default assignee (the Agents page's \"Assign task\"). */\n initialAgentExtId?: string\n /** `kind=\"workflow\"` create-mode template: opens with this workflow definition (a skill's) selected. */\n initialWorkflowId?: string\n /** `kind=\"workflow\"` create-mode: open on the Run later view (when, which agent, access). */\n startLater?: boolean\n /** A prompt carried from the quick task launcher into scheduling. */\n initialShared?: boolean\n initialPrompt?: string\n /** A saved recipe copied into a new schedule; the original is not edited. */\n launchWorkflow?: Workflow\n /** Create-mode parent: opens as \"Add sub-task\" under this task. */\n initialParentTaskExtId?: string\n}\n\n/** What \"always allowed\" means: the workspaces the agent will hold standing access to. */\nfunction StandingAccessNote({\n agentId,\n activeWorkspaceName,\n}: {\n agentId: string\n activeWorkspaceName: string | null\n}) {\n const { data: held = [] } = useAgentWorkspaces(agentId, { enabled: agentId !== '' })\n const names = new Set(held.map((w) => w.name))\n if (activeWorkspaceName) names.add(activeWorkspaceName)\n return (\n <p className=\"text-xs text-muted-foreground\" data-testid=\"task-standing-access\">\n {agentId === '' ? 'Your own assistant needs no grant.' : 'It will hold standing access to: '}\n {agentId !== '' && (\n <span className=\"font-medium text-foreground\">\n {[...names].join(', ') || 'no workspace yet'}\n </span>\n )}\n </p>\n )\n}\n\nexport function ConnectedTaskComposer({\n open,\n onOpenChange,\n kind = 'work',\n saveOnly = false,\n task,\n workflow: editingWorkflow,\n initialWorkflowId,\n startLater: startLaterProp,\n initialPrompt,\n initialShared,\n launchWorkflow,\n initialAgentExtId,\n initialParentTaskExtId,\n}: ConnectedTaskComposerProps) {\n const { notify, openConversation, openUpload } = useBlocksEnvironment()\n // Scheduling (\"Run later\") belongs to Workflows: offered while the host has its page.\n const openWorkflow = useOpenWorkflow()\n const automationsEnabled = openWorkflow !== undefined\n const startLater = startLaterProp && automationsEnabled\n const isWorkflow = kind === 'workflow'\n const isEdit = isWorkflow ? !!editingWorkflow : !!task\n const { forTasks: baseSkills, skills } = useWorkflowDefinitions()\n const { data: reviewFields = [] } = useTags()\n const scheduledSkills = useMemo(\n () => [\n ...baseSkills,\n {\n id: '__document_review__',\n title: 'AI Review',\n description: 'Write answers and citations into document fields.',\n documentAction: 'annotate_documents' as const,\n run: { kind: 'operation' as const },\n landing: 'files' as const,\n inputs: [\n { name: 'scope', type: 'scope' as const, label: 'Documents', by: ['labels' as const] },\n {\n name: 'output',\n type: 'select' as const,\n label: 'Review field',\n required: true,\n description:\n 'Choose a field with saved AI instructions. Create one using AI Review in Files.',\n options: reviewFields\n .filter((field) => field.instruction)\n .map((field) => ({ value: field.external_id, label: field.name })),\n },\n {\n name: 'overwrite',\n type: 'boolean' as const,\n label: 'Regenerate existing answers',\n default: false,\n },\n ],\n },\n {\n id: '__document_email__',\n title: 'Email latest documents',\n description: 'Email me links to documents added since the previous successful digest.',\n documentAction: 'email_documents' as const,\n run: { kind: 'operation' as const },\n landing: 'files' as const,\n inputs: [\n { name: 'scope', type: 'scope' as const, label: 'Documents', by: ['labels' as const] },\n {\n name: 'latest',\n type: 'boolean' as const,\n label: 'Only documents added since the last digest',\n default: true,\n },\n ],\n },\n ],\n [baseSkills, reviewFields]\n )\n // A skill opened from the library runs now even if it cannot be scheduled: offer it as a template too.\n const forTasks = useMemo(() => {\n const picked = initialWorkflowId ? skills.find((w) => w.id === initialWorkflowId) : undefined\n return picked &&\n !scheduledSkills.some((w) => w.id === picked.id) &&\n picked.run.kind === 'prompt'\n ? [...scheduledSkills, picked]\n : scheduledSkills\n }, [scheduledSkills, skills, initialWorkflowId])\n const { data: workspaceAutomations = [] } = useWorkflows()\n const { data: agents = [] } = useAgents()\n const { data: workspaces = [] } = useWorkspaces()\n const planWork = usePlanWork()\n const { tasks: allTasks } = useWorkItems()\n const { data: documents = [] } = useDocuments()\n const { create, update, updateWorkflow, isPending } = useWorkflowTasks()\n // The files behind a template's file fields: the same pieces the skill launcher wires.\n const scopeSource = useConnectedWorkflowScopeSource()\n const activeWorkspaceId = useArbiSessionState((s) => s.workspaceId)\n const activeWorkspace = useMemo(\n () => workspaces.find((w) => w.external_id === activeWorkspaceId) ?? null,\n [workspaces, activeWorkspaceId]\n )\n const timezones = useMemo(() => listTimeZones(), [])\n // The plan lists documents by id; show their names.\n const documentNames = useMemo(\n () =>\n Object.fromEntries(\n documents.flatMap((d) => (d.file_name ? [[d.external_id, d.file_name]] : []))\n ),\n [documents]\n )\n // Tasks a new task can be part of: any other task that keeps the sub-task tree within its maximum\n // depth and (when editing) is not the task itself or one of its descendants. A workflow can wait on\n // any task, finished ones included (they re-open and finish again).\n const taskOptions = useMemo(() => {\n const label = (t: TaskListRow) => t.title?.trim() || 'Untitled task'\n if (isWorkflow) return allTasks.map((t) => ({ id: t.external_id, name: label(t) }))\n const subject: TaskListRow = task ?? { external_id: '__new__' }\n return moveTargets<TaskListRow>(\n [...allTasks.filter((t) => t.external_id !== subject.external_id), subject],\n subject\n ).map((t) => ({ id: t.external_id, name: label(t) }))\n }, [allTasks, task, isWorkflow])\n // The owner's main agent: what a scheduled workflow runs as unless another is picked.\n const defaultAgentId = useMemo(\n () => (agents.find((a) => a.given_name === 'Assistant') ?? agents[0])?.external_id,\n [agents]\n )\n const agentOptions = useMemo<AgentOption[]>(\n () => agents.map((a) => ({ id: a.external_id, label: a.given_name || a.email })),\n [agents]\n )\n\n // What the composer opens with: the edit target, or (create) the preset assignee.\n const initialValues = useMemo(() => {\n const ids = {\n customWorkflowId: CUSTOM_TASK_ID,\n reminderWorkflowId: REMIND_TASK_ID,\n definitions: forTasks,\n }\n const base = launchWorkflow\n ? {\n ...workflowToComposerValues(launchWorkflow, ids),\n when: 'once' as const,\n runAt: '',\n rrule: '',\n eventKind: '',\n afterTaskId: '',\n name: '',\n }\n : editingWorkflow\n ? workflowToComposerValues(editingWorkflow, ids)\n : task\n ? taskToComposerValues(task, ids)\n : isWorkflow\n ? {\n // Run now is the default start; scheduling is the fallback in the same field.\n assignee: 'agent' as const,\n workflowId: initialWorkflowId ?? CUSTOM_TASK_ID,\n when: startLater ? ('once' as const) : ('now' as const),\n ...(initialPrompt\n ? {\n inputs: {\n [initialWorkflowId === REMIND_TASK_ID ? 'message' : 'instruction']:\n initialPrompt,\n },\n }\n : {}),\n // A scheduled run needs an agent: the owner's Assistant unless another is picked.\n ...(startLater && defaultAgentId ? { agentId: defaultAgentId } : {}),\n }\n : initialAgentExtId\n ? // Assigning an agent means agentic work: the free instruction, and tell me when done.\n { agentId: initialAgentExtId, workflowId: CUSTOM_TASK_ID, notifyOnComplete: true }\n : {}\n return {\n timezone: detectTimeZone(),\n ...base,\n ...(initialShared !== undefined && !task && !editingWorkflow\n ? { shared: initialShared }\n : {}),\n ...(!task && !isWorkflow && initialParentTaskExtId\n ? { parentTaskId: initialParentTaskExtId }\n : {}),\n }\n }, [\n forTasks,\n task,\n editingWorkflow,\n isWorkflow,\n initialWorkflowId,\n startLater,\n initialPrompt,\n initialShared,\n launchWorkflow,\n defaultAgentId,\n initialAgentExtId,\n initialParentTaskExtId,\n ])\n\n const [plan, setPlan] = useState<TaskPlan | null>(null)\n useEffect(() => {\n if (open) setPlan(task?.plan ?? editingWorkflow?.plan ?? launchWorkflow?.plan ?? null) // the stored plan when editing agent work\n }, [open, task, editingWorkflow, launchWorkflow])\n\n const handleGeneratePlan = async (values: TaskComposerValues) => {\n if (!activeWorkspace) {\n notify('Open a workspace first — the plan is scoped to it', 'warning')\n return\n }\n const objective = String(values.inputs.instruction ?? '').trim()\n if (!objective) {\n notify('Write the instruction first — it’s the planner’s objective', 'warning')\n return\n }\n try {\n const drafted = await planWork.mutateAsync({\n objective,\n max_passes: plan?.max_passes ?? 3,\n })\n setPlan(drafted)\n notify('Drafted a plan — review the checklist', 'success')\n } catch {\n notify('Could not draft a plan', 'error')\n }\n }\n\n const submit = async (submitted: TaskComposerValues, options?: { runOnce?: boolean }) => {\n // A task for me is a plain to-do and runs no workflow.\n const chosen =\n forTasks.find((w) => w.id === submitted.workflowId) ??\n (submitted.assignee === 'me' ? forTasks[0] : undefined)\n if (!chosen) return\n if (plan && !plan.goal.trim()) {\n notify('The plan needs a goal', 'warning')\n return\n }\n if (plan && plan.criteria.some((c) => !c.text.trim())) {\n notify('Every checklist criterion needs text (or remove it)', 'warning')\n return\n }\n const ctx = {\n workflow: chosen,\n values: submitted,\n plan: chosen.id === CUSTOM_TASK_ID ? plan : null,\n }\n try {\n if (isWorkflow && editingWorkflow && !options?.runOnce) {\n await updateWorkflow(editingWorkflow, ctx)\n notify(`Updated “${editingWorkflow.name}”`, 'success')\n } else if (isEdit && task) {\n await update(task, ctx)\n notify(`Updated “${task.title ?? 'task'}”`, 'success')\n } else {\n const created = await create(ctx, saveOnly && !options?.runOnce)\n if (created.kind === 'workflow') {\n notify(`Saved “${created.workflow.name}”.`, 'success')\n // The saved workflow, on the Workflows page.\n openWorkflow?.()\n } else {\n const name = created.task.title ?? 'task'\n if ((created.ran || options?.runOnce) && created.task.external_id) {\n // The run is a thread: go and watch it, rather than leave a toast to say it started.\n openConversation(created.task.external_id)\n } else {\n notify(\n created.ran === null\n ? `Added “${name}”`\n : 'Task created, but the run could not start',\n created.ran === false ? 'warning' : 'success'\n )\n }\n }\n }\n onOpenChange(false)\n } catch (error) {\n const what = `Failed to ${isEdit ? 'update' : 'create'} the ${isWorkflow ? 'workflow' : 'task'}`\n notify(\n error instanceof Error && error.message.startsWith('Open a workspace')\n ? error.message\n : error instanceof ArbiApiError && error.detail\n ? `${what}: ${error.detail}`\n : what,\n 'error'\n )\n }\n }\n\n return (\n <TaskComposer\n key={editingWorkflow?.external_id ?? task?.external_id ?? 'new'}\n open={open}\n onOpenChange={onOpenChange}\n kind={kind}\n saveOnly={saveOnly}\n hideRunLater={!automationsEnabled}\n defaultAgentId={defaultAgentId}\n isEdit={isEdit}\n workflows={forTasks}\n agents={agentOptions}\n tasks={taskOptions}\n initialValues={initialValues}\n timezones={timezones}\n eventOptions={AUTOMATION_EVENTS}\n eventWorkflowOptions={workspaceAutomations\n .filter((item) => item.external_id !== editingWorkflow?.external_id)\n .map((item) => ({ id: item.external_id, label: item.name }))}\n isPending={isPending}\n planDrafting={planWork.isPending}\n hasPlan={plan !== null}\n renderIcon={renderWorkflowIcon}\n scopeSource={scopeSource}\n renderDocuments={(field, value, onChange) => (\n <ConnectedWorkflowDocumentsField\n field={field}\n value={value}\n onChange={onChange}\n onAddFiles={openUpload}\n />\n )}\n addFilesAction={\n openUpload && (\n <Button size=\"sm\" onClick={() => openUpload()} data-testid=\"workflow-add-files-first\">\n Add files\n </Button>\n )\n }\n onDropFiles={openUpload && ((files) => openUpload(files))}\n standingAccess={(values) => (\n <StandingAccessNote\n agentId={values.agentId}\n activeWorkspaceName={activeWorkspace?.name ?? null}\n />\n )}\n labels={{\n ...(isWorkflow\n ? {\n titleNewWorkflow: 'New workflow',\n titleEditWorkflow: 'Edit workflow',\n workflowNamePlaceholder: 'Name this workflow',\n createWorkflow: 'Create workflow',\n saveWorkflow: 'Save workflow',\n descriptionWorkflow: 'Choose what happens and when this workflow starts.',\n eventHint: 'Choose the workspace event that starts this workflow.',\n runAsAgentHint: 'Scheduled AI work runs as your chosen assistant when you are away.',\n }\n : {}),\n ...(plan\n ? { addAndStart: 'Approve plan and start', addAndSchedule: 'Approve plan and schedule' }\n : {}),\n }}\n onSubmit={submit}\n goal={(values) =>\n values.workflowId === CUSTOM_TASK_ID ? (\n <TaskPlanForm\n plan={plan}\n onChange={setPlan}\n onGenerate={() => handleGeneratePlan(values)}\n isGenerating={planWork.isPending}\n workspaceName={activeWorkspace?.name ?? null}\n documentNames={documentNames}\n objective={String(values.inputs.instruction ?? '')}\n />\n ) : null\n }\n />\n )\n}\n","import { useCallback, useMemo, type ReactNode } from 'react'\nimport { useAgents, useArbiSession, useWorkspaceUsers } from '@arbidocs/react'\nimport { getUserDisplayName, isAgent } from '@arbidocs/react/ui'\nimport { PersonPill, type TaskPerson } from '../../agents/tasks/PersonPill'\nimport { DocumentUser } from '../files/fields/DocumentUser'\n\n/** The workspace roles that can edit it. */\nconst EDITOR_ROLES: readonly string[] = ['owner', 'collaborator']\n\n/**\n * People who can own tasks here: humans (never agents) who can edit the workspace, other than me\n * (the task list shows me as \"Me\"). They name each task's owner.\n */\nexport function useTaskPeople(): { id: string; label: string }[] {\n const { data: members = [] } = useWorkspaceUsers()\n const currentUserExtId = useArbiSession().user?.external_id\n return useMemo(\n () =>\n members\n .filter(\n (m) =>\n !isAgent(m.user) &&\n m.user.external_id !== currentUserExtId &&\n EDITOR_ROLES.includes(m.role)\n )\n .map((m) => ({ id: m.user.external_id, label: getUserDisplayName(m.user) })),\n [members, currentUserExtId]\n )\n}\n\n/**\n * How the Tasks table draws a person: the host's own user pill (presence, a click to message, the\n * rich tooltip) when the person is a member or agent we know, else the plain shared pill.\n */\nexport function useRenderTaskPerson(): (person: TaskPerson) => ReactNode {\n const { data: members = [] } = useWorkspaceUsers()\n const { data: agents = [] } = useAgents()\n const byId = useMemo(() => {\n const map = new Map(members.map((m) => [m.user.external_id, m.user]))\n for (const agent of agents) if (!map.has(agent.external_id)) map.set(agent.external_id, agent)\n return map\n }, [members, agents])\n return useCallback(\n (person: TaskPerson) => {\n const user = person.id ? byId.get(person.id) : undefined\n return user ? <DocumentUser user={user} variant=\"pill\" /> : <PersonPill person={person} />\n },\n [byId]\n )\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport { useWorkflows, type WorkflowResponse } from '@arbidocs/react'\n\n/** A saved workflow, a new one, or a host catalogue entry opened as a template. */\nexport type WorkflowBuilderSelection =\n { kind: 'saved'; id: string } | { kind: 'new' } | { kind: 'template'; id: string }\n\nexport interface WorkflowsPageStateOptions {\n initialBuilder?: WorkflowBuilderSelection\n /** A host deep link to consume once the saved workflow has loaded. */\n historyWorkflowId?: string | null\n onHistoryWorkflowConsumed?: () => void\n}\n\n/** Shared selection lifecycle for workflow tables, builders and history views. No routing or layout. */\nexport function useWorkflowsPageState({\n initialBuilder,\n historyWorkflowId,\n onHistoryWorkflowConsumed,\n}: WorkflowsPageStateOptions = {}) {\n const { data: workflows = [] } = useWorkflows({ live: true })\n const [builder, setBuilder] = useState<WorkflowBuilderSelection | null>(initialBuilder ?? null)\n const [builderKey, setBuilderKey] = useState(0)\n const [historyIds, setHistoryIds] = useState<string[]>([])\n const [activeHistoryId, setActiveHistoryId] = useState<string | null>(null)\n // Resolve against current query data: renaming/deleting a workflow cannot leave a stale dialog.\n const historyFor = workflows.find((workflow) => workflow.external_id === activeHistoryId) ?? null\n const historyTabs = historyIds.flatMap((id) => {\n const workflow = workflows.find((item) => item.external_id === id)\n return workflow ? [workflow] : []\n })\n\n const openHistory = useCallback((workflow: WorkflowResponse | null) => {\n const id = workflow?.external_id ?? null\n if (id) setHistoryIds((ids) => (ids.includes(id) ? ids : [...ids, id]))\n setActiveHistoryId(id)\n }, [])\n const closeHistoryTab = useCallback((id: string) => {\n setHistoryIds((ids) => ids.filter((item) => item !== id))\n setActiveHistoryId((active) => (active === id ? null : active))\n }, [])\n const openBuilder = useCallback((selection: WorkflowBuilderSelection) => {\n setBuilder(selection)\n // Reopening a template/new/saved selection resets its unsaved canvas; saving does not.\n setBuilderKey((key) => key + 1)\n }, [])\n\n useEffect(() => {\n const workflow = workflows.find((item) => item.external_id === historyWorkflowId)\n if (!workflow) return\n openHistory(workflow)\n onHistoryWorkflowConsumed?.()\n }, [historyWorkflowId, onHistoryWorkflowConsumed, openHistory, workflows])\n\n return {\n workflows,\n builder,\n builderKey,\n openBuilder,\n closeBuilder: () => setBuilder(null),\n builderSaved: (id: string) => setBuilder({ kind: 'saved', id }),\n historyFor,\n historyTabs,\n activeHistoryId,\n openHistory,\n closeHistoryTab,\n selectHistoryTab: setActiveHistoryId,\n }\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkRFIBUWLF_cjs = require('./chunk-RFIBUWLF.cjs');
|
|
5
|
-
var
|
|
5
|
+
var chunkJEXP72GJ_cjs = require('./chunk-JEXP72GJ.cjs');
|
|
6
6
|
var chunkM36TROAF_cjs = require('./chunk-M36TROAF.cjs');
|
|
7
7
|
var chunkAQPZ4QMV_cjs = require('./chunk-AQPZ4QMV.cjs');
|
|
8
8
|
var chunkSIB6C7P7_cjs = require('./chunk-SIB6C7P7.cjs');
|
|
@@ -12,8 +12,8 @@ var chunkAHDJXIUB_cjs = require('./chunk-AHDJXIUB.cjs');
|
|
|
12
12
|
var chunk2EI7NCUA_cjs = require('./chunk-2EI7NCUA.cjs');
|
|
13
13
|
var chunkJIRECT5B_cjs = require('./chunk-JIRECT5B.cjs');
|
|
14
14
|
var chunkLKK52DEY_cjs = require('./chunk-LKK52DEY.cjs');
|
|
15
|
-
var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
|
|
16
15
|
var chunkMEMWZ72Y_cjs = require('./chunk-MEMWZ72Y.cjs');
|
|
16
|
+
var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
|
|
17
17
|
var chunkCVZN2KTP_cjs = require('./chunk-CVZN2KTP.cjs');
|
|
18
18
|
var chunkSMQIYEOL_cjs = require('./chunk-SMQIYEOL.cjs');
|
|
19
19
|
var chunkFX3K6LNZ_cjs = require('./chunk-FX3K6LNZ.cjs');
|
|
@@ -1753,7 +1753,7 @@ function WorkflowRunner({
|
|
|
1753
1753
|
/* @__PURE__ */ jsxRuntime.jsx(SentBackNote, { state: run.stateOf(step.id), l: pl, testId: tid(step.id) }),
|
|
1754
1754
|
/* @__PURE__ */ jsxRuntime.jsx(AssigneeLine, { run, stepId: step.id, l: pl, testId: tid(step.id) }),
|
|
1755
1755
|
/* @__PURE__ */ jsxRuntime.jsx("fieldset", { disabled: run.isLocked(step.id), className: "contents", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1756
|
-
|
|
1756
|
+
chunkJEXP72GJ_cjs.SchemaForm,
|
|
1757
1757
|
{
|
|
1758
1758
|
fields: step.inputs,
|
|
1759
1759
|
values: run.inputs,
|
|
@@ -1807,7 +1807,7 @@ function WorkflowRunner({
|
|
|
1807
1807
|
/* @__PURE__ */ jsxRuntime.jsx(AssigneeLine, { run, stepId: step.id, l: pl, testId: tid(step.id) }),
|
|
1808
1808
|
!(run.phaseOf(step.id) === "done" && run.stateOf(step.id)?.by) && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm", "data-testid": tid(`${step.id}-status`), children: run.phaseOf(step.id) === "done" ? l.approved : run.phaseOf(step.id) === "skipped" ? l.skipped : l.awaitingReview }),
|
|
1809
1809
|
(step.fields ?? []).length > 0 && run.phaseOf(step.id) === "ready" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1810
|
-
|
|
1810
|
+
chunkJEXP72GJ_cjs.SchemaForm,
|
|
1811
1811
|
{
|
|
1812
1812
|
fields: step.fields ?? [],
|
|
1813
1813
|
values: run.inputs,
|
|
@@ -2892,7 +2892,7 @@ function WorkflowStepAction({
|
|
|
2892
2892
|
const errors = chunkSMQIYEOL_cjs.validateInputs(asForm(step), values);
|
|
2893
2893
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 p-1", "data-testid": tid, children: [
|
|
2894
2894
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2895
|
-
|
|
2895
|
+
chunkJEXP72GJ_cjs.SchemaForm,
|
|
2896
2896
|
{
|
|
2897
2897
|
fields,
|
|
2898
2898
|
values,
|
|
@@ -5855,7 +5855,7 @@ function TaskTable(props) {
|
|
|
5855
5855
|
isMe: mine
|
|
5856
5856
|
};
|
|
5857
5857
|
};
|
|
5858
|
-
const renderPerson = props.renderPerson ?? ((person) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
5858
|
+
const renderPerson = props.renderPerson ?? ((person) => /* @__PURE__ */ jsxRuntime.jsx(chunkJEXP72GJ_cjs.PersonPill, { person }));
|
|
5859
5859
|
const q = (query.trim() || (props.filterText ?? "").trim()).toLowerCase();
|
|
5860
5860
|
const counts = react.useMemo(() => {
|
|
5861
5861
|
const map = new Map(STATUS_ORDER.map((s) => [s, 0]));
|
|
@@ -6469,7 +6469,7 @@ function TaskInbox(p) {
|
|
|
6469
6469
|
else next.add(id);
|
|
6470
6470
|
return next;
|
|
6471
6471
|
});
|
|
6472
|
-
p.renderPerson ?? ((value) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
6472
|
+
p.renderPerson ?? ((value) => /* @__PURE__ */ jsxRuntime.jsx(chunkJEXP72GJ_cjs.PersonPill, { person: value }));
|
|
6473
6473
|
const taskById = new Map(all.map((t) => [t.external_id, t]));
|
|
6474
6474
|
const visible = new Set(rows.map((t) => t.external_id));
|
|
6475
6475
|
for (const task of rows) {
|
|
@@ -9263,7 +9263,7 @@ function TaskRunsDialog({
|
|
|
9263
9263
|
"rounded-full px-2 py-0.5 text-xs font-medium capitalize",
|
|
9264
9264
|
STATUS_STYLE[data.status] ?? "text-muted-foreground"
|
|
9265
9265
|
),
|
|
9266
|
-
children:
|
|
9266
|
+
children: chunkJEXP72GJ_cjs.workflowRunStatusLabel(data.status)
|
|
9267
9267
|
}
|
|
9268
9268
|
)
|
|
9269
9269
|
},
|
|
@@ -9789,7 +9789,7 @@ function WorkflowComposer({
|
|
|
9789
9789
|
}
|
|
9790
9790
|
),
|
|
9791
9791
|
!noFiles && workflow && fields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
9792
|
-
|
|
9792
|
+
chunkJEXP72GJ_cjs.SchemaForm,
|
|
9793
9793
|
{
|
|
9794
9794
|
fields,
|
|
9795
9795
|
values: values.inputs,
|
|
@@ -10422,7 +10422,7 @@ function WorkTaskComposer({
|
|
|
10422
10422
|
)
|
|
10423
10423
|
] }),
|
|
10424
10424
|
workflow && fields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
10425
|
-
|
|
10425
|
+
chunkJEXP72GJ_cjs.SchemaForm,
|
|
10426
10426
|
{
|
|
10427
10427
|
fields,
|
|
10428
10428
|
values: values.inputs,
|
|
@@ -10982,7 +10982,7 @@ function notifiedLabel(notified, missed) {
|
|
|
10982
10982
|
var describeSignalTrigger = (signal) => `When a step signals ${signal}`;
|
|
10983
10983
|
function describeTrigger(workflow) {
|
|
10984
10984
|
if (workflow.after_conversation_ext_id) return "After a thread is marked done";
|
|
10985
|
-
const signal =
|
|
10985
|
+
const signal = chunkJEXP72GJ_cjs.workflowSignal(workflow);
|
|
10986
10986
|
if (signal) return describeSignalTrigger(signal);
|
|
10987
10987
|
if (workflow.event_kind)
|
|
10988
10988
|
return AUTOMATION_EVENTS.find((event) => event.id === workflow.event_kind)?.label ?? workflow.event_kind.replaceAll("_", " ");
|
|
@@ -12968,5 +12968,5 @@ exports.workflowTaskFields = workflowTaskFields;
|
|
|
12968
12968
|
exports.workflowToComposerValues = workflowToComposerValues;
|
|
12969
12969
|
exports.workflowToSkillMarkdown = workflowToSkillMarkdown;
|
|
12970
12970
|
exports.workflowWhen = workflowWhen;
|
|
12971
|
-
//# sourceMappingURL=chunk-
|
|
12972
|
-
//# sourceMappingURL=chunk-
|
|
12971
|
+
//# sourceMappingURL=chunk-R3247EN3.cjs.map
|
|
12972
|
+
//# sourceMappingURL=chunk-R3247EN3.cjs.map
|