@arbidocs/blocks 0.4.72 → 0.4.74
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/agents/index.cjs +401 -262
- package/dist/agents/index.js +7 -4
- package/dist/agents/tasks/TaskActivityTimeline.d.ts +1 -1
- package/dist/agents/tasks/WorkflowThreadStrip.d.ts +58 -0
- package/dist/agents/tasks/index.d.ts +1 -0
- package/dist/agents/workflows/WorkflowRunner.d.ts +86 -0
- package/dist/agents/workflows/WorkflowStepBar.d.ts +23 -0
- package/dist/agents/workflows/index.d.ts +7 -1
- package/dist/agents/workflows/planSteps.d.ts +28 -0
- package/dist/agents/workflows/run.d.ts +98 -0
- package/dist/agents/workflows/skillMarkdown.d.ts +15 -0
- package/dist/agents/workflows/types.d.ts +111 -0
- package/dist/agents/workflows/useWorkflowPreview.d.ts +14 -0
- package/dist/agents/workflows/useWorkflowView.d.ts +54 -0
- package/dist/agents/workflows/workflow.d.ts +3 -1
- package/dist/chat/index.cjs +124 -124
- package/dist/chat/index.js +3 -3
- package/dist/{chunk-DH7C2UJO.cjs → chunk-5LP54CWR.cjs} +299 -526
- package/dist/chunk-5LP54CWR.cjs.map +1 -0
- package/dist/{chunk-3SFFTSOI.cjs → chunk-7CVF3DK2.cjs} +5 -5
- package/dist/{chunk-3SFFTSOI.cjs.map → chunk-7CVF3DK2.cjs.map} +1 -1
- package/dist/chunk-7D737FLE.cjs +43 -0
- package/dist/chunk-7D737FLE.cjs.map +1 -0
- package/dist/{chunk-V3L5DONY.cjs → chunk-B4SRYJLM.cjs} +31 -2
- package/dist/chunk-B4SRYJLM.cjs.map +1 -0
- package/dist/{chunk-LFGJAZ5H.js → chunk-DDF5GPIJ.js} +6 -36
- package/dist/chunk-DDF5GPIJ.js.map +1 -0
- package/dist/chunk-DETZZBG2.cjs +91 -0
- package/dist/chunk-DETZZBG2.cjs.map +1 -0
- package/dist/chunk-EVUEIBNU.js +89 -0
- package/dist/chunk-EVUEIBNU.js.map +1 -0
- package/dist/{chunk-G5QTGKDJ.cjs → chunk-HITAN7JF.cjs} +8 -8
- package/dist/{chunk-G5QTGKDJ.cjs.map → chunk-HITAN7JF.cjs.map} +1 -1
- package/dist/{chunk-3VQYJBOI.js → chunk-HOXKR26S.js} +31 -4
- package/dist/chunk-HOXKR26S.js.map +1 -0
- package/dist/{chunk-KJ3QEKOJ.cjs → chunk-IPGKTUF7.cjs} +7 -33
- package/dist/chunk-IPGKTUF7.cjs.map +1 -0
- package/dist/{chunk-IMC2Z32C.js → chunk-KOSGX3UK.js} +269 -485
- package/dist/chunk-KOSGX3UK.js.map +1 -0
- package/dist/{chunk-KOXUBCLL.js → chunk-MK6NJQGF.js} +4 -4
- package/dist/{chunk-KOXUBCLL.js.map → chunk-MK6NJQGF.js.map} +1 -1
- package/dist/{chunk-THO7DZNN.cjs → chunk-MUMH3Z6K.cjs} +20 -15
- package/dist/chunk-MUMH3Z6K.cjs.map +1 -0
- package/dist/{chunk-5HOAOKZL.js → chunk-OYMWV45N.js} +21 -16
- package/dist/chunk-OYMWV45N.js.map +1 -0
- package/dist/chunk-P2RBE3FD.cjs +1448 -0
- package/dist/chunk-P2RBE3FD.cjs.map +1 -0
- package/dist/{chunk-G5DP27DU.js → chunk-UIWLDSTF.js} +3 -29
- package/dist/chunk-UIWLDSTF.js.map +1 -0
- package/dist/{chunk-VRPRAU3J.js → chunk-WJEKRSPH.js} +3 -3
- package/dist/{chunk-VRPRAU3J.js.map → chunk-WJEKRSPH.js.map} +1 -1
- package/dist/chunk-XD2M6LIG.js +41 -0
- package/dist/chunk-XD2M6LIG.js.map +1 -0
- package/dist/chunk-YWYVIQ7T.js +1402 -0
- package/dist/chunk-YWYVIQ7T.js.map +1 -0
- package/dist/{chunk-WBDK4PIA.cjs → chunk-Z5VUZ6YD.cjs} +6 -37
- package/dist/chunk-Z5VUZ6YD.cjs.map +1 -0
- package/dist/connect/docx.cjs +2 -2
- package/dist/connect/docx.js +1 -1
- package/dist/connect/index.cjs +379 -27
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +1 -0
- package/dist/connect/index.js +362 -11
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/ConnectedWorkflowBuilder.d.ts +44 -0
- package/dist/connection/ConnectedWorkflowRunner.d.ts +31 -0
- package/dist/connection/useWorkflowThread.d.ts +38 -0
- package/dist/facts/index.cjs +1 -1
- package/dist/facts/index.js +1 -1
- package/dist/files/index.cjs +9 -83
- package/dist/files/index.cjs.map +1 -1
- package/dist/files/index.js +6 -83
- package/dist/files/index.js.map +1 -1
- package/dist/home/index.cjs +22 -21
- package/dist/home/index.cjs.map +1 -1
- package/dist/home/index.js +4 -3
- package/dist/home/index.js.map +1 -1
- package/dist/index.cjs +579 -440
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +11 -8
- package/dist/index.js.map +1 -1
- package/dist/shell/index.cjs +1 -1
- package/dist/shell/index.js +1 -1
- package/dist/studio/index.cjs +7 -7
- package/dist/studio/index.js +5 -5
- package/dist/workflow-canvas/StepInspector.d.ts +57 -0
- package/dist/workflow-canvas/TriggerInspector.d.ts +46 -0
- package/dist/workflow-canvas/WorkflowBuilder.d.ts +55 -0
- package/dist/workflow-canvas/WorkflowCanvas.d.ts +69 -0
- package/dist/workflow-canvas/edit.d.ts +54 -0
- package/dist/workflow-canvas/index.cjs +1719 -0
- package/dist/workflow-canvas/index.cjs.map +1 -0
- package/dist/workflow-canvas/index.d.ts +13 -0
- package/dist/workflow-canvas/index.js +1689 -0
- package/dist/workflow-canvas/index.js.map +1 -0
- package/dist/workflow-canvas/trigger.d.ts +51 -0
- package/dist/workflow-canvas/viewport.d.ts +47 -0
- package/package.json +25 -14
- package/src/workflow-canvas/canvas.css +113 -0
- package/dist/chunk-3VQYJBOI.js.map +0 -1
- package/dist/chunk-5HOAOKZL.js.map +0 -1
- package/dist/chunk-DH7C2UJO.cjs.map +0 -1
- package/dist/chunk-G5DP27DU.js.map +0 -1
- package/dist/chunk-IMC2Z32C.js.map +0 -1
- package/dist/chunk-KJ3QEKOJ.cjs.map +0 -1
- package/dist/chunk-LFGJAZ5H.js.map +0 -1
- package/dist/chunk-THO7DZNN.cjs.map +0 -1
- package/dist/chunk-V3L5DONY.cjs.map +0 -1
- package/dist/chunk-WBDK4PIA.cjs.map +0 -1
package/dist/connect/index.cjs
CHANGED
|
@@ -2,13 +2,16 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkB3WCKBJ7_cjs = require('../chunk-B3WCKBJ7.cjs');
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
5
|
+
var chunkHITAN7JF_cjs = require('../chunk-HITAN7JF.cjs');
|
|
6
|
+
var chunkMUMH3Z6K_cjs = require('../chunk-MUMH3Z6K.cjs');
|
|
7
|
+
var chunkP2RBE3FD_cjs = require('../chunk-P2RBE3FD.cjs');
|
|
8
|
+
require('../chunk-DETZZBG2.cjs');
|
|
9
|
+
require('../chunk-7D737FLE.cjs');
|
|
8
10
|
require('../chunk-ADOKTJHV.cjs');
|
|
9
|
-
var
|
|
11
|
+
var chunkQVBZESYQ_cjs = require('../chunk-QVBZESYQ.cjs');
|
|
12
|
+
var chunkIPGKTUF7_cjs = require('../chunk-IPGKTUF7.cjs');
|
|
10
13
|
require('../chunk-VGOFFCMT.cjs');
|
|
11
|
-
require('../chunk-
|
|
14
|
+
require('../chunk-B4SRYJLM.cjs');
|
|
12
15
|
require('../chunk-7UTB4PHM.cjs');
|
|
13
16
|
require('../chunk-PPCATBOY.cjs');
|
|
14
17
|
var chunkKDG6FER6_cjs = require('../chunk-KDG6FER6.cjs');
|
|
@@ -25,7 +28,7 @@ var lucideReact = require('lucide-react');
|
|
|
25
28
|
var shell = require('@arbidocs/react/shell');
|
|
26
29
|
|
|
27
30
|
function ConnectionBoundWebSocket({ children }) {
|
|
28
|
-
const { status } =
|
|
31
|
+
const { status } = chunkMUMH3Z6K_cjs.useConnection();
|
|
29
32
|
return /* @__PURE__ */ jsxRuntime.jsx(react$1.ArbiWebSocketProvider, { enabled: status === "authenticated", children });
|
|
30
33
|
}
|
|
31
34
|
function ArbiAppProvider({
|
|
@@ -38,10 +41,10 @@ function ArbiAppProvider({
|
|
|
38
41
|
})
|
|
39
42
|
);
|
|
40
43
|
const providerUrl = config.apiUrl || config.demoApiUrl || "https://demo.arbi.local";
|
|
41
|
-
return /* @__PURE__ */ jsxRuntime.jsx(reactQuery.QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsxRuntime.jsx(react$1.ArbiProvider, { url: providerUrl, deploymentDomain: config.deploymentDomain, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
44
|
+
return /* @__PURE__ */ jsxRuntime.jsx(reactQuery.QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsxRuntime.jsx(react$1.ArbiProvider, { url: providerUrl, deploymentDomain: config.deploymentDomain, children: /* @__PURE__ */ jsxRuntime.jsx(chunkMUMH3Z6K_cjs.ConnectionProvider, { config, children: /* @__PURE__ */ jsxRuntime.jsx(ConnectionBoundWebSocket, { children }) }) }) });
|
|
42
45
|
}
|
|
43
46
|
function ConnectedTaskAccessRequest({ conversationId }) {
|
|
44
|
-
const { workspaceId } =
|
|
47
|
+
const { workspaceId } = chunkMUMH3Z6K_cjs.useConnection();
|
|
45
48
|
const tasks = react$1.useConversations(workspaceId ?? void 0, { live: true });
|
|
46
49
|
const run = react$1.useRunConversation();
|
|
47
50
|
const task = tasks.data?.find((item) => item.external_id === conversationId);
|
|
@@ -180,8 +183,355 @@ function StreamedArtifact({
|
|
|
180
183
|
}
|
|
181
184
|
);
|
|
182
185
|
}
|
|
186
|
+
var STARTING = /* @__PURE__ */ new Set(["pending", "running"]);
|
|
187
|
+
function formValues(step, inputs) {
|
|
188
|
+
if (step.kind !== "form") return void 0;
|
|
189
|
+
return Object.fromEntries(step.inputs.map((f) => [f.name, inputs[f.name] ?? ""]));
|
|
190
|
+
}
|
|
191
|
+
var ANSWER_RETRY_CAP = 16;
|
|
192
|
+
function answerRetryDelay(attempt) {
|
|
193
|
+
return attempt === 0 ? 0 : Math.min(1e3 * 2 ** (attempt - 1), 15e3);
|
|
194
|
+
}
|
|
195
|
+
function useAnswerRetry(missing, refetch) {
|
|
196
|
+
const [attempt, setAttempt] = react.useState(0);
|
|
197
|
+
const [prev, setPrev] = react.useState(missing);
|
|
198
|
+
if (prev !== missing) {
|
|
199
|
+
setPrev(missing);
|
|
200
|
+
setAttempt(0);
|
|
201
|
+
}
|
|
202
|
+
const refetchRef = react.useRef(refetch);
|
|
203
|
+
refetchRef.current = refetch;
|
|
204
|
+
react.useEffect(() => {
|
|
205
|
+
if (!missing || attempt >= ANSWER_RETRY_CAP) return;
|
|
206
|
+
const t = setTimeout(() => {
|
|
207
|
+
void refetchRef.current();
|
|
208
|
+
setAttempt((a) => a + 1);
|
|
209
|
+
}, answerRetryDelay(attempt));
|
|
210
|
+
return () => clearTimeout(t);
|
|
211
|
+
}, [missing, attempt]);
|
|
212
|
+
}
|
|
213
|
+
function useWorkflowThread(workflow, options = {}) {
|
|
214
|
+
const arbi = react$1.useArbi();
|
|
215
|
+
const { ensureWorkspaceOpen } = chunkMUMH3Z6K_cjs.useConnection();
|
|
216
|
+
const { wsId } = chunkHITAN7JF_cjs.useWorkspaceDocs();
|
|
217
|
+
const [threadId, setThreadId] = react.useState(options.conversationId);
|
|
218
|
+
const [localInputs, setLocalInputs] = react.useState(
|
|
219
|
+
() => chunkP2RBE3FD_cjs.initialRunInputs(workflow, options.initialInputs)
|
|
220
|
+
);
|
|
221
|
+
const [edits, setEdits] = react.useState({});
|
|
222
|
+
const [localStates, setLocalStates] = react.useState({});
|
|
223
|
+
const createWork = react$1.useCreateWork();
|
|
224
|
+
const actOnStep = react$1.useActOnStep();
|
|
225
|
+
const conversations = react$1.useConversations(wsId, { enabled: !!threadId, live: true });
|
|
226
|
+
const conversation = conversations.data?.find((c) => c.external_id === threadId);
|
|
227
|
+
const steps = react.useMemo(
|
|
228
|
+
() => chunkP2RBE3FD_cjs.workflowSteps(workflow).length > 0 ? chunkP2RBE3FD_cjs.workflowSteps(workflow) : chunkP2RBE3FD_cjs.fromPlanSteps(conversation?.plan?.steps ?? []),
|
|
229
|
+
[workflow, conversation?.plan?.steps]
|
|
230
|
+
);
|
|
231
|
+
const activity = react$1.useConversationActivity(threadId, { live: !!threadId });
|
|
232
|
+
const serverStates = react.useMemo(
|
|
233
|
+
() => chunkP2RBE3FD_cjs.stepStatesFromActivity(activity.data ?? []),
|
|
234
|
+
[activity.data]
|
|
235
|
+
);
|
|
236
|
+
const working = steps.some(
|
|
237
|
+
(s) => s.kind === "agent" && STARTING.has(serverStates[s.id]?.status ?? "pending")
|
|
238
|
+
);
|
|
239
|
+
const threads = react$1.useConversationThreads(wsId, threadId, { enabled: !!threadId, live: working });
|
|
240
|
+
const answers = react.useMemo(() => {
|
|
241
|
+
const byId = /* @__PURE__ */ new Map();
|
|
242
|
+
for (const t of threads.data?.threads ?? [])
|
|
243
|
+
for (const m of t.history)
|
|
244
|
+
if (m.role === "assistant" && m.content?.trim()) byId.set(m.external_id, m.content);
|
|
245
|
+
return byId;
|
|
246
|
+
}, [threads.data]);
|
|
247
|
+
const missing = Object.values(serverStates).flatMap(
|
|
248
|
+
(st) => st.status === "done" && st.responseId && !answers.has(st.responseId) ? [st.responseId] : []
|
|
249
|
+
).sort().join(" ");
|
|
250
|
+
useAnswerRetry(missing, threads.refetch);
|
|
251
|
+
const states = react.useMemo(() => {
|
|
252
|
+
if (!threadId) return localStates;
|
|
253
|
+
const out = {};
|
|
254
|
+
for (const [id, s] of Object.entries(serverStates))
|
|
255
|
+
out[id] = { ...s, text: s.responseId ? answers.get(s.responseId) : void 0 };
|
|
256
|
+
return out;
|
|
257
|
+
}, [threadId, localStates, serverStates, answers]);
|
|
258
|
+
const inputs = react.useMemo(
|
|
259
|
+
() => threadId ? { ...localInputs, ...conversation?.skill_inputs ?? {}, ...edits } : { ...localInputs, ...edits },
|
|
260
|
+
[threadId, localInputs, conversation?.skill_inputs, edits]
|
|
261
|
+
);
|
|
262
|
+
const refresh = react.useCallback(async () => {
|
|
263
|
+
await Promise.all([activity.refetch(), conversations.refetch()]);
|
|
264
|
+
}, [activity, conversations]);
|
|
265
|
+
const act = react.useCallback(
|
|
266
|
+
async (id, body) => {
|
|
267
|
+
await actOnStep.mutateAsync({ conversationId: id, body });
|
|
268
|
+
await refresh();
|
|
269
|
+
},
|
|
270
|
+
[actOnStep, refresh]
|
|
271
|
+
);
|
|
272
|
+
const complete = react.useCallback(
|
|
273
|
+
async (step) => {
|
|
274
|
+
let values = inputs;
|
|
275
|
+
const commit = step.commit ? options.commit?.[step.id] : void 0;
|
|
276
|
+
if (commit && localStates[step.id]?.status !== "done") {
|
|
277
|
+
values = { ...values, ...await commit(values) ?? {} };
|
|
278
|
+
setLocalInputs(values);
|
|
279
|
+
setEdits({});
|
|
280
|
+
}
|
|
281
|
+
let id = threadId;
|
|
282
|
+
if (!id) {
|
|
283
|
+
await ensureWorkspaceOpen();
|
|
284
|
+
const created = await createWork.mutateAsync({
|
|
285
|
+
title: chunkP2RBE3FD_cjs.runThreadTitle(workflow, values).slice(0, 60),
|
|
286
|
+
description: workflow.description || null,
|
|
287
|
+
prompt: null,
|
|
288
|
+
skill_ref: null,
|
|
289
|
+
skill_inputs: values,
|
|
290
|
+
agent_ext_id: options.agentId ?? null,
|
|
291
|
+
auth_mode: "run_now_temp",
|
|
292
|
+
plan: {
|
|
293
|
+
goal: "",
|
|
294
|
+
criteria: [],
|
|
295
|
+
max_passes: 3,
|
|
296
|
+
documents: [],
|
|
297
|
+
steps: chunkP2RBE3FD_cjs.toPlanSteps(workflow, {
|
|
298
|
+
inputs: values,
|
|
299
|
+
resolveWorkflow: options.resolveWorkflow,
|
|
300
|
+
compose: options.compose
|
|
301
|
+
})
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
id = created.external_id;
|
|
305
|
+
setThreadId(id);
|
|
306
|
+
setLocalStates((s) => ({ ...s, [step.id]: { status: "done" } }));
|
|
307
|
+
options.onStarted?.(id);
|
|
308
|
+
}
|
|
309
|
+
await act(id, { step: step.id, action: "complete", inputs: formValues(step, values) });
|
|
310
|
+
},
|
|
311
|
+
[inputs, options, localStates, threadId, ensureWorkspaceOpen, createWork, workflow, act]
|
|
312
|
+
);
|
|
313
|
+
const skip = react.useCallback(
|
|
314
|
+
async (stepId) => {
|
|
315
|
+
if (!threadId) {
|
|
316
|
+
setLocalStates((s) => ({ ...s, [stepId]: { status: "skipped" } }));
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
await act(threadId, { step: stepId, action: "skip" });
|
|
320
|
+
},
|
|
321
|
+
[threadId, act]
|
|
322
|
+
);
|
|
323
|
+
const retry = react.useCallback(
|
|
324
|
+
async (_stepId) => {
|
|
325
|
+
if (!threadId) return;
|
|
326
|
+
await arbi.conversations.runWithAuth(threadId);
|
|
327
|
+
await refresh();
|
|
328
|
+
},
|
|
329
|
+
[arbi, threadId, refresh]
|
|
330
|
+
);
|
|
331
|
+
const view = chunkP2RBE3FD_cjs.useWorkflowView({
|
|
332
|
+
steps,
|
|
333
|
+
states,
|
|
334
|
+
inputs,
|
|
335
|
+
setInput: (name, value) => setEdits((i) => ({ ...i, [name]: value })),
|
|
336
|
+
complete,
|
|
337
|
+
skip,
|
|
338
|
+
retry,
|
|
339
|
+
isLocked: (id) => states[id]?.status === "done"
|
|
340
|
+
});
|
|
341
|
+
return { view, conversationId: threadId, conversation };
|
|
342
|
+
}
|
|
343
|
+
var DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS = {
|
|
344
|
+
notify: "Ask to approve",
|
|
345
|
+
notified: "Notified.",
|
|
346
|
+
openThread: "Open the thread",
|
|
347
|
+
loadingAnswer: "Fetching the answer\u2026"
|
|
348
|
+
};
|
|
349
|
+
function ConnectedWorkflowRunner({
|
|
350
|
+
workflow,
|
|
351
|
+
options,
|
|
352
|
+
onOpenConversation,
|
|
353
|
+
emptyHint,
|
|
354
|
+
connectedLabels,
|
|
355
|
+
testIdPrefix = "workflow-run",
|
|
356
|
+
...runnerProps
|
|
357
|
+
}) {
|
|
358
|
+
const l = { ...DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, ...connectedLabels };
|
|
359
|
+
const arbi = react$1.useArbi();
|
|
360
|
+
const { ensureWorkspaceOpen } = chunkMUMH3Z6K_cjs.useConnection();
|
|
361
|
+
const { wsId } = chunkHITAN7JF_cjs.useWorkspaceDocs();
|
|
362
|
+
const { data: docs = [], refetch } = react$1.useDocuments(wsId);
|
|
363
|
+
const [uploading, setUploading] = react.useState(false);
|
|
364
|
+
const { view, conversationId } = useWorkflowThread(workflow, options);
|
|
365
|
+
const [added, setAdded] = react.useState({});
|
|
366
|
+
const onUpload = react.useCallback(
|
|
367
|
+
async (files2, step) => {
|
|
368
|
+
if (!files2.length) return;
|
|
369
|
+
setUploading(true);
|
|
370
|
+
try {
|
|
371
|
+
await ensureWorkspaceOpen();
|
|
372
|
+
for (const f of files2) {
|
|
373
|
+
const { doc_ext_ids = [] } = await arbi.documents.uploadFile(f, f.name) ?? {};
|
|
374
|
+
setAdded((a) => ({ ...a, ...Object.fromEntries(doc_ext_ids.map((id) => [id, step.id])) }));
|
|
375
|
+
}
|
|
376
|
+
await refetch();
|
|
377
|
+
} finally {
|
|
378
|
+
setUploading(false);
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
[arbi, ensureWorkspaceOpen, refetch]
|
|
382
|
+
);
|
|
383
|
+
const files = docs.map((d) => ({
|
|
384
|
+
id: d.external_id,
|
|
385
|
+
name: d.file_name ?? d.external_id,
|
|
386
|
+
status: fileStatus(d.status),
|
|
387
|
+
addedFor: added[d.external_id]
|
|
388
|
+
}));
|
|
389
|
+
const reading = files.some((f) => f.addedFor && f.status === "processing");
|
|
390
|
+
react.useEffect(() => {
|
|
391
|
+
if (!reading) return;
|
|
392
|
+
const t = setInterval(() => void refetch(), READ_POLL_MS);
|
|
393
|
+
return () => clearInterval(t);
|
|
394
|
+
}, [reading, refetch]);
|
|
395
|
+
const renderAgentOutput = (step, state) => {
|
|
396
|
+
const status = state?.status;
|
|
397
|
+
if (!state?.text && status !== "done") return null;
|
|
398
|
+
if (!state?.text && state?.responseId) {
|
|
399
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
400
|
+
"p",
|
|
401
|
+
{
|
|
402
|
+
className: "flex items-center gap-2 text-sm text-muted-foreground",
|
|
403
|
+
"data-testid": `${testIdPrefix}-${step.id}-answer-loading`,
|
|
404
|
+
children: [
|
|
405
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-4 animate-spin" }),
|
|
406
|
+
" ",
|
|
407
|
+
l.loadingAnswer
|
|
408
|
+
]
|
|
409
|
+
}
|
|
410
|
+
);
|
|
411
|
+
}
|
|
412
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
413
|
+
react$1.AiAnswer,
|
|
414
|
+
{
|
|
415
|
+
status: status === "running" ? "running" : "done",
|
|
416
|
+
text: state?.text ?? "",
|
|
417
|
+
emptyHint: emptyHint?.(step),
|
|
418
|
+
testId: `${testIdPrefix}-${step.id}-answer`
|
|
419
|
+
}
|
|
420
|
+
);
|
|
421
|
+
};
|
|
422
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
|
|
423
|
+
conversationId && onOpenConversation && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
424
|
+
ui.Button,
|
|
425
|
+
{
|
|
426
|
+
variant: "ghost",
|
|
427
|
+
size: "sm",
|
|
428
|
+
onClick: () => onOpenConversation(conversationId),
|
|
429
|
+
"data-testid": `${testIdPrefix}-open-thread`,
|
|
430
|
+
children: [
|
|
431
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ExternalLink, { className: "size-4" }),
|
|
432
|
+
" ",
|
|
433
|
+
l.openThread
|
|
434
|
+
]
|
|
435
|
+
}
|
|
436
|
+
) }),
|
|
437
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
438
|
+
chunkP2RBE3FD_cjs.WorkflowRunner,
|
|
439
|
+
{
|
|
440
|
+
...runnerProps,
|
|
441
|
+
workflow,
|
|
442
|
+
run: view,
|
|
443
|
+
renderAgentOutput,
|
|
444
|
+
renderReview: (step) => conversationId ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
445
|
+
ReviewNotify,
|
|
446
|
+
{
|
|
447
|
+
conversationId,
|
|
448
|
+
workspaceId: wsId,
|
|
449
|
+
labels: l,
|
|
450
|
+
testId: `${testIdPrefix}-${step.id}`
|
|
451
|
+
}
|
|
452
|
+
) : null,
|
|
453
|
+
onUpload,
|
|
454
|
+
uploading,
|
|
455
|
+
files,
|
|
456
|
+
testIdPrefix
|
|
457
|
+
}
|
|
458
|
+
)
|
|
459
|
+
] });
|
|
460
|
+
}
|
|
461
|
+
var READ_POLL_MS = 3e3;
|
|
462
|
+
function fileStatus(status) {
|
|
463
|
+
const s = status?.toLowerCase();
|
|
464
|
+
if (!s) return void 0;
|
|
465
|
+
if (s === "failed") return "failed";
|
|
466
|
+
if (s === "completed" || s === "empty" || s === "low-content") return "ready";
|
|
467
|
+
return "processing";
|
|
468
|
+
}
|
|
469
|
+
function ReviewNotify({
|
|
470
|
+
conversationId,
|
|
471
|
+
workspaceId,
|
|
472
|
+
labels,
|
|
473
|
+
testId
|
|
474
|
+
}) {
|
|
475
|
+
const arbi = react$1.useArbi();
|
|
476
|
+
const { status, user, ensureWorkspaceOpen } = chunkMUMH3Z6K_cjs.useConnection();
|
|
477
|
+
const { data: members = [] } = react$1.useWorkspaceUsers(workspaceId, {
|
|
478
|
+
enabled: status === "authenticated" && !!workspaceId,
|
|
479
|
+
beforeFetch: ensureWorkspaceOpen
|
|
480
|
+
});
|
|
481
|
+
const people = members.filter(
|
|
482
|
+
(m) => !m.agent_ext_id && !m.user.external_id.startsWith("agt-") && m.user.external_id !== user?.externalId
|
|
483
|
+
);
|
|
484
|
+
const [picked, setPicked] = react.useState([]);
|
|
485
|
+
const [sent, setSent] = react.useState(false);
|
|
486
|
+
const [busy, setBusy] = react.useState(false);
|
|
487
|
+
if (people.length === 0) return null;
|
|
488
|
+
const toggle = (id) => setPicked((p) => p.includes(id) ? p.filter((x) => x !== id) : [...p, id]);
|
|
489
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", "data-testid": `${testId}-notify`, children: [
|
|
490
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5", children: people.map((m) => {
|
|
491
|
+
const name = [m.user.given_name, m.user.family_name].filter(Boolean).join(" ") || m.user.email;
|
|
492
|
+
const on = picked.includes(m.user.external_id);
|
|
493
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
494
|
+
"button",
|
|
495
|
+
{
|
|
496
|
+
type: "button",
|
|
497
|
+
onClick: () => toggle(m.user.external_id),
|
|
498
|
+
"aria-pressed": on,
|
|
499
|
+
className: ui.cn(
|
|
500
|
+
"rounded-full border px-2.5 py-1 text-xs",
|
|
501
|
+
on ? "border-primary bg-primary/10 text-primary" : "border-border text-muted-foreground"
|
|
502
|
+
),
|
|
503
|
+
"data-testid": `${testId}-person-${m.user.external_id}`,
|
|
504
|
+
children: name
|
|
505
|
+
},
|
|
506
|
+
m.user.external_id
|
|
507
|
+
);
|
|
508
|
+
}) }),
|
|
509
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
510
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
511
|
+
ui.Button,
|
|
512
|
+
{
|
|
513
|
+
variant: "outline",
|
|
514
|
+
size: "sm",
|
|
515
|
+
disabled: !picked.length || busy,
|
|
516
|
+
onClick: async () => {
|
|
517
|
+
setBusy(true);
|
|
518
|
+
try {
|
|
519
|
+
await arbi.conversations.notify(conversationId, picked);
|
|
520
|
+
setSent(true);
|
|
521
|
+
} finally {
|
|
522
|
+
setBusy(false);
|
|
523
|
+
}
|
|
524
|
+
},
|
|
525
|
+
"data-testid": `${testId}-notify-send`,
|
|
526
|
+
children: labels.notify
|
|
527
|
+
}
|
|
528
|
+
),
|
|
529
|
+
sent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: labels.notified })
|
|
530
|
+
] })
|
|
531
|
+
] });
|
|
532
|
+
}
|
|
183
533
|
function useConnectedShellWorkspaces(options = {}) {
|
|
184
|
-
const { workspaceId, setWorkspace } =
|
|
534
|
+
const { workspaceId, setWorkspace } = chunkMUMH3Z6K_cjs.useConnection();
|
|
185
535
|
const query = react$1.useWorkspaces();
|
|
186
536
|
return react$1.useShellWorkspaces({
|
|
187
537
|
...options,
|
|
@@ -206,7 +556,7 @@ function ConnectedProfileCard({ notify: notify3, title = "Profile" }) {
|
|
|
206
556
|
const updateProfile = react$1.useUpdateProfile();
|
|
207
557
|
const requestEmailChange = react$1.useRequestEmailChange();
|
|
208
558
|
const confirmEmailChange = react$1.useConfirmEmailChange();
|
|
209
|
-
const { user } =
|
|
559
|
+
const { user } = chunkMUMH3Z6K_cjs.useConnection();
|
|
210
560
|
const name = react$1.useNameEditor({
|
|
211
561
|
givenName: profile?.givenName,
|
|
212
562
|
familyName: profile?.familyName,
|
|
@@ -471,7 +821,7 @@ function ConnectedLogoutDialog({
|
|
|
471
821
|
isOnline = true,
|
|
472
822
|
renderSessionIcon
|
|
473
823
|
}) {
|
|
474
|
-
const { logout } =
|
|
824
|
+
const { logout } = chunkMUMH3Z6K_cjs.useConnection();
|
|
475
825
|
const sessions = react$1.useSessions({ enabled: open });
|
|
476
826
|
const logoutAll = react$1.useLogoutAllSessions();
|
|
477
827
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -497,7 +847,7 @@ function ConnectedLogoutDialog({
|
|
|
497
847
|
function ConnectedDangerZone({ notify: notify3, renderSubscriptionLink }) {
|
|
498
848
|
const [zoneOpen, setZoneOpen] = react.useState(false);
|
|
499
849
|
const [dialogOpen, setDialogOpen] = react.useState(false);
|
|
500
|
-
const { user, logout } =
|
|
850
|
+
const { user, logout } = chunkMUMH3Z6K_cjs.useConnection();
|
|
501
851
|
const remove = react$1.useDeleteAccount();
|
|
502
852
|
const flow = react$1.useDeleteAccountFlow({
|
|
503
853
|
userEmail: user?.email ?? "",
|
|
@@ -547,7 +897,7 @@ function ConnectedDangerZone({ notify: notify3, renderSubscriptionLink }) {
|
|
|
547
897
|
}
|
|
548
898
|
function useConnectedDocxNotifications(onOpen) {
|
|
549
899
|
const arbi = react$1.useArbi();
|
|
550
|
-
const { status, user, apiUrl } =
|
|
900
|
+
const { status, user, apiUrl } = chunkMUMH3Z6K_cjs.useConnection();
|
|
551
901
|
const queries = reactQuery.useQueryClient();
|
|
552
902
|
const source = `docx-mentions:${apiUrl}:${user?.externalId || ""}`;
|
|
553
903
|
const queryKey = ["docx-mentions", apiUrl, user?.externalId];
|
|
@@ -611,7 +961,7 @@ function useConnectedDocxNotifications(onOpen) {
|
|
|
611
961
|
};
|
|
612
962
|
}
|
|
613
963
|
function useConnectedWorkNotifications(onOpen) {
|
|
614
|
-
const { status, user, apiUrl } =
|
|
964
|
+
const { status, user, apiUrl } = chunkMUMH3Z6K_cjs.useConnection();
|
|
615
965
|
const source = `work-notifications:${apiUrl}:${user?.externalId || ""}`;
|
|
616
966
|
const { data = [], markRead: persistRead } = react$1.useWorkNotifications({
|
|
617
967
|
apiUrl,
|
|
@@ -718,7 +1068,7 @@ function mapWorkNotification(note) {
|
|
|
718
1068
|
function ActiveChat({ agentId, workspaceId }) {
|
|
719
1069
|
const chat = react$1.useArbiChat({ agentId, workspaceId });
|
|
720
1070
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
721
|
-
|
|
1071
|
+
chunkIPGKTUF7_cjs.ChatPage,
|
|
722
1072
|
{
|
|
723
1073
|
chat: { ...chat, assistantMode: void 0, setAssistantMode: void 0 },
|
|
724
1074
|
documentsRequired: false,
|
|
@@ -780,51 +1130,51 @@ function ConnectedAgentChatPanel({
|
|
|
780
1130
|
|
|
781
1131
|
Object.defineProperty(exports, "ConnectedAssistantDock", {
|
|
782
1132
|
enumerable: true,
|
|
783
|
-
get: function () { return
|
|
1133
|
+
get: function () { return chunkHITAN7JF_cjs.ConnectedAssistantDock; }
|
|
784
1134
|
});
|
|
785
1135
|
Object.defineProperty(exports, "redlineStats", {
|
|
786
1136
|
enumerable: true,
|
|
787
|
-
get: function () { return
|
|
1137
|
+
get: function () { return chunkHITAN7JF_cjs.redlineStats; }
|
|
788
1138
|
});
|
|
789
1139
|
Object.defineProperty(exports, "textToArtifact", {
|
|
790
1140
|
enumerable: true,
|
|
791
|
-
get: function () { return
|
|
1141
|
+
get: function () { return chunkHITAN7JF_cjs.textToArtifact; }
|
|
792
1142
|
});
|
|
793
1143
|
Object.defineProperty(exports, "toRedlineMarkdown", {
|
|
794
1144
|
enumerable: true,
|
|
795
|
-
get: function () { return
|
|
1145
|
+
get: function () { return chunkHITAN7JF_cjs.toRedlineMarkdown; }
|
|
796
1146
|
});
|
|
797
1147
|
Object.defineProperty(exports, "useConnectedAiTask", {
|
|
798
1148
|
enumerable: true,
|
|
799
|
-
get: function () { return
|
|
1149
|
+
get: function () { return chunkHITAN7JF_cjs.useConnectedAiTask; }
|
|
800
1150
|
});
|
|
801
1151
|
Object.defineProperty(exports, "useConnectedChat", {
|
|
802
1152
|
enumerable: true,
|
|
803
|
-
get: function () { return
|
|
1153
|
+
get: function () { return chunkHITAN7JF_cjs.useConnectedChat; }
|
|
804
1154
|
});
|
|
805
1155
|
Object.defineProperty(exports, "useSemanticSearch", {
|
|
806
1156
|
enumerable: true,
|
|
807
|
-
get: function () { return
|
|
1157
|
+
get: function () { return chunkHITAN7JF_cjs.useSemanticSearch; }
|
|
808
1158
|
});
|
|
809
1159
|
Object.defineProperty(exports, "useWorkspaceDocs", {
|
|
810
1160
|
enumerable: true,
|
|
811
|
-
get: function () { return
|
|
1161
|
+
get: function () { return chunkHITAN7JF_cjs.useWorkspaceDocs; }
|
|
812
1162
|
});
|
|
813
1163
|
Object.defineProperty(exports, "ConnectionProvider", {
|
|
814
1164
|
enumerable: true,
|
|
815
|
-
get: function () { return
|
|
1165
|
+
get: function () { return chunkMUMH3Z6K_cjs.ConnectionProvider; }
|
|
816
1166
|
});
|
|
817
1167
|
Object.defineProperty(exports, "SESSION_EXPIRED_MESSAGE", {
|
|
818
1168
|
enumerable: true,
|
|
819
|
-
get: function () { return
|
|
1169
|
+
get: function () { return chunkMUMH3Z6K_cjs.SESSION_EXPIRED_MESSAGE; }
|
|
820
1170
|
});
|
|
821
1171
|
Object.defineProperty(exports, "isAuthenticated", {
|
|
822
1172
|
enumerable: true,
|
|
823
|
-
get: function () { return
|
|
1173
|
+
get: function () { return chunkMUMH3Z6K_cjs.isAuthenticated; }
|
|
824
1174
|
});
|
|
825
1175
|
Object.defineProperty(exports, "useConnection", {
|
|
826
1176
|
enumerable: true,
|
|
827
|
-
get: function () { return
|
|
1177
|
+
get: function () { return chunkMUMH3Z6K_cjs.useConnection; }
|
|
828
1178
|
});
|
|
829
1179
|
exports.ArbiAppProvider = ArbiAppProvider;
|
|
830
1180
|
exports.ConnectedAgentChatPanel = ConnectedAgentChatPanel;
|
|
@@ -838,6 +1188,8 @@ exports.ConnectedSecuritySection = ConnectedSecuritySection;
|
|
|
838
1188
|
exports.ConnectedSessionsRow = ConnectedSessionsRow;
|
|
839
1189
|
exports.ConnectedSkillUpload = ConnectedSkillUpload;
|
|
840
1190
|
exports.ConnectedTaskAccessRequest = ConnectedTaskAccessRequest;
|
|
1191
|
+
exports.ConnectedWorkflowRunner = ConnectedWorkflowRunner;
|
|
1192
|
+
exports.DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS = DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS;
|
|
841
1193
|
exports.StreamedArtifact = StreamedArtifact;
|
|
842
1194
|
exports.defaultUnmetPasswordRequirement = defaultUnmetPasswordRequirement;
|
|
843
1195
|
exports.useConnectedDocxNotifications = useConnectedDocxNotifications;
|