@arbidocs/blocks 0.4.73 → 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 +253 -253
- package/dist/agents/index.js +3 -3
- package/dist/agents/workflows/WorkflowRunner.d.ts +20 -4
- package/dist/agents/workflows/WorkflowStepBar.d.ts +23 -0
- package/dist/agents/workflows/run.d.ts +1 -0
- package/dist/agents/workflows/types.d.ts +2 -0
- package/dist/chat/index.cjs +124 -124
- package/dist/chat/index.js +3 -3
- package/dist/{chunk-IUR565UW.cjs → chunk-5LP54CWR.cjs} +32 -32
- 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-V3L5DONY.cjs → chunk-B4SRYJLM.cjs} +31 -2
- package/dist/chunk-B4SRYJLM.cjs.map +1 -0
- package/dist/{chunk-WOYUXVVQ.cjs → chunk-HITAN7JF.cjs} +4 -4
- package/dist/{chunk-WOYUXVVQ.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-QDNXEB3T.js → chunk-KOSGX3UK.js} +5 -5
- package/dist/chunk-KOSGX3UK.js.map +1 -0
- package/dist/{chunk-ORA2XE7U.js → chunk-MK6NJQGF.js} +3 -3
- package/dist/{chunk-ORA2XE7U.js.map → chunk-MK6NJQGF.js.map} +1 -1
- package/dist/{chunk-GTNUQBXI.cjs → chunk-P2RBE3FD.cjs} +254 -102
- 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-2P3T23C7.js → chunk-YWYVIQ7T.js} +256 -104
- package/dist/chunk-YWYVIQ7T.js.map +1 -0
- package/dist/connect/index.cjs +95 -36
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +80 -21
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/ConnectedWorkflowRunner.d.ts +5 -1
- package/dist/connection/useWorkflowThread.d.ts +4 -0
- package/dist/index.cjs +382 -382
- package/dist/index.js +6 -6
- package/dist/studio/index.cjs +4 -4
- package/dist/studio/index.js +3 -3
- package/dist/workflow-canvas/StepInspector.d.ts +11 -0
- package/dist/workflow-canvas/WorkflowCanvas.d.ts +6 -2
- package/dist/workflow-canvas/index.cjs +200 -90
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +168 -58
- package/dist/workflow-canvas/index.js.map +1 -1
- package/dist/workflow-canvas/viewport.d.ts +47 -0
- package/package.json +4 -4
- package/dist/chunk-2P3T23C7.js.map +0 -1
- package/dist/chunk-3VQYJBOI.js.map +0 -1
- package/dist/chunk-G5DP27DU.js.map +0 -1
- package/dist/chunk-GTNUQBXI.cjs.map +0 -1
- package/dist/chunk-IUR565UW.cjs.map +0 -1
- package/dist/chunk-KJ3QEKOJ.cjs.map +0 -1
- package/dist/chunk-QDNXEB3T.js.map +0 -1
- package/dist/chunk-V3L5DONY.cjs.map +0 -1
package/dist/connect/index.cjs
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkB3WCKBJ7_cjs = require('../chunk-B3WCKBJ7.cjs');
|
|
5
|
-
var
|
|
5
|
+
var chunkHITAN7JF_cjs = require('../chunk-HITAN7JF.cjs');
|
|
6
6
|
var chunkMUMH3Z6K_cjs = require('../chunk-MUMH3Z6K.cjs');
|
|
7
|
-
var
|
|
7
|
+
var chunkP2RBE3FD_cjs = require('../chunk-P2RBE3FD.cjs');
|
|
8
8
|
require('../chunk-DETZZBG2.cjs');
|
|
9
9
|
require('../chunk-7D737FLE.cjs');
|
|
10
|
-
var chunkQVBZESYQ_cjs = require('../chunk-QVBZESYQ.cjs');
|
|
11
10
|
require('../chunk-ADOKTJHV.cjs');
|
|
12
|
-
var
|
|
11
|
+
var chunkQVBZESYQ_cjs = require('../chunk-QVBZESYQ.cjs');
|
|
12
|
+
var chunkIPGKTUF7_cjs = require('../chunk-IPGKTUF7.cjs');
|
|
13
13
|
require('../chunk-VGOFFCMT.cjs');
|
|
14
|
-
require('../chunk-
|
|
14
|
+
require('../chunk-B4SRYJLM.cjs');
|
|
15
15
|
require('../chunk-7UTB4PHM.cjs');
|
|
16
16
|
require('../chunk-PPCATBOY.cjs');
|
|
17
17
|
var chunkKDG6FER6_cjs = require('../chunk-KDG6FER6.cjs');
|
|
@@ -188,13 +188,35 @@ function formValues(step, inputs) {
|
|
|
188
188
|
if (step.kind !== "form") return void 0;
|
|
189
189
|
return Object.fromEntries(step.inputs.map((f) => [f.name, inputs[f.name] ?? ""]));
|
|
190
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
|
+
}
|
|
191
213
|
function useWorkflowThread(workflow, options = {}) {
|
|
192
214
|
const arbi = react$1.useArbi();
|
|
193
215
|
const { ensureWorkspaceOpen } = chunkMUMH3Z6K_cjs.useConnection();
|
|
194
|
-
const { wsId } =
|
|
216
|
+
const { wsId } = chunkHITAN7JF_cjs.useWorkspaceDocs();
|
|
195
217
|
const [threadId, setThreadId] = react.useState(options.conversationId);
|
|
196
218
|
const [localInputs, setLocalInputs] = react.useState(
|
|
197
|
-
() =>
|
|
219
|
+
() => chunkP2RBE3FD_cjs.initialRunInputs(workflow, options.initialInputs)
|
|
198
220
|
);
|
|
199
221
|
const [edits, setEdits] = react.useState({});
|
|
200
222
|
const [localStates, setLocalStates] = react.useState({});
|
|
@@ -203,12 +225,12 @@ function useWorkflowThread(workflow, options = {}) {
|
|
|
203
225
|
const conversations = react$1.useConversations(wsId, { enabled: !!threadId, live: true });
|
|
204
226
|
const conversation = conversations.data?.find((c) => c.external_id === threadId);
|
|
205
227
|
const steps = react.useMemo(
|
|
206
|
-
() =>
|
|
228
|
+
() => chunkP2RBE3FD_cjs.workflowSteps(workflow).length > 0 ? chunkP2RBE3FD_cjs.workflowSteps(workflow) : chunkP2RBE3FD_cjs.fromPlanSteps(conversation?.plan?.steps ?? []),
|
|
207
229
|
[workflow, conversation?.plan?.steps]
|
|
208
230
|
);
|
|
209
231
|
const activity = react$1.useConversationActivity(threadId, { live: !!threadId });
|
|
210
232
|
const serverStates = react.useMemo(
|
|
211
|
-
() =>
|
|
233
|
+
() => chunkP2RBE3FD_cjs.stepStatesFromActivity(activity.data ?? []),
|
|
212
234
|
[activity.data]
|
|
213
235
|
);
|
|
214
236
|
const working = steps.some(
|
|
@@ -218,16 +240,14 @@ function useWorkflowThread(workflow, options = {}) {
|
|
|
218
240
|
const answers = react.useMemo(() => {
|
|
219
241
|
const byId = /* @__PURE__ */ new Map();
|
|
220
242
|
for (const t of threads.data?.threads ?? [])
|
|
221
|
-
for (const m of t.history)
|
|
243
|
+
for (const m of t.history)
|
|
244
|
+
if (m.role === "assistant" && m.content?.trim()) byId.set(m.external_id, m.content);
|
|
222
245
|
return byId;
|
|
223
246
|
}, [threads.data]);
|
|
224
|
-
const
|
|
225
|
-
(st) => st.status === "done" &&
|
|
226
|
-
);
|
|
227
|
-
|
|
228
|
-
react.useEffect(() => {
|
|
229
|
-
if (answerMissing) void refetchThreads();
|
|
230
|
-
}, [answerMissing, activity.data, refetchThreads]);
|
|
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);
|
|
231
251
|
const states = react.useMemo(() => {
|
|
232
252
|
if (!threadId) return localStates;
|
|
233
253
|
const out = {};
|
|
@@ -262,7 +282,7 @@ function useWorkflowThread(workflow, options = {}) {
|
|
|
262
282
|
if (!id) {
|
|
263
283
|
await ensureWorkspaceOpen();
|
|
264
284
|
const created = await createWork.mutateAsync({
|
|
265
|
-
title:
|
|
285
|
+
title: chunkP2RBE3FD_cjs.runThreadTitle(workflow, values).slice(0, 60),
|
|
266
286
|
description: workflow.description || null,
|
|
267
287
|
prompt: null,
|
|
268
288
|
skill_ref: null,
|
|
@@ -274,7 +294,7 @@ function useWorkflowThread(workflow, options = {}) {
|
|
|
274
294
|
criteria: [],
|
|
275
295
|
max_passes: 3,
|
|
276
296
|
documents: [],
|
|
277
|
-
steps:
|
|
297
|
+
steps: chunkP2RBE3FD_cjs.toPlanSteps(workflow, {
|
|
278
298
|
inputs: values,
|
|
279
299
|
resolveWorkflow: options.resolveWorkflow,
|
|
280
300
|
compose: options.compose
|
|
@@ -308,7 +328,7 @@ function useWorkflowThread(workflow, options = {}) {
|
|
|
308
328
|
},
|
|
309
329
|
[arbi, threadId, refresh]
|
|
310
330
|
);
|
|
311
|
-
const view =
|
|
331
|
+
const view = chunkP2RBE3FD_cjs.useWorkflowView({
|
|
312
332
|
steps,
|
|
313
333
|
states,
|
|
314
334
|
inputs,
|
|
@@ -323,7 +343,8 @@ function useWorkflowThread(workflow, options = {}) {
|
|
|
323
343
|
var DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS = {
|
|
324
344
|
notify: "Ask to approve",
|
|
325
345
|
notified: "Notified.",
|
|
326
|
-
openThread: "Open the thread"
|
|
346
|
+
openThread: "Open the thread",
|
|
347
|
+
loadingAnswer: "Fetching the answer\u2026"
|
|
327
348
|
};
|
|
328
349
|
function ConnectedWorkflowRunner({
|
|
329
350
|
workflow,
|
|
@@ -337,17 +358,21 @@ function ConnectedWorkflowRunner({
|
|
|
337
358
|
const l = { ...DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, ...connectedLabels };
|
|
338
359
|
const arbi = react$1.useArbi();
|
|
339
360
|
const { ensureWorkspaceOpen } = chunkMUMH3Z6K_cjs.useConnection();
|
|
340
|
-
const { wsId } =
|
|
361
|
+
const { wsId } = chunkHITAN7JF_cjs.useWorkspaceDocs();
|
|
341
362
|
const { data: docs = [], refetch } = react$1.useDocuments(wsId);
|
|
342
363
|
const [uploading, setUploading] = react.useState(false);
|
|
343
364
|
const { view, conversationId } = useWorkflowThread(workflow, options);
|
|
365
|
+
const [added, setAdded] = react.useState({});
|
|
344
366
|
const onUpload = react.useCallback(
|
|
345
|
-
async (
|
|
346
|
-
if (!
|
|
367
|
+
async (files2, step) => {
|
|
368
|
+
if (!files2.length) return;
|
|
347
369
|
setUploading(true);
|
|
348
370
|
try {
|
|
349
371
|
await ensureWorkspaceOpen();
|
|
350
|
-
for (const f of
|
|
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
|
+
}
|
|
351
376
|
await refetch();
|
|
352
377
|
} finally {
|
|
353
378
|
setUploading(false);
|
|
@@ -355,9 +380,35 @@ function ConnectedWorkflowRunner({
|
|
|
355
380
|
},
|
|
356
381
|
[arbi, ensureWorkspaceOpen, refetch]
|
|
357
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]);
|
|
358
395
|
const renderAgentOutput = (step, state) => {
|
|
359
396
|
const status = state?.status;
|
|
360
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
|
+
}
|
|
361
412
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
362
413
|
react$1.AiAnswer,
|
|
363
414
|
{
|
|
@@ -384,7 +435,7 @@ function ConnectedWorkflowRunner({
|
|
|
384
435
|
}
|
|
385
436
|
) }),
|
|
386
437
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
387
|
-
|
|
438
|
+
chunkP2RBE3FD_cjs.WorkflowRunner,
|
|
388
439
|
{
|
|
389
440
|
...runnerProps,
|
|
390
441
|
workflow,
|
|
@@ -401,12 +452,20 @@ function ConnectedWorkflowRunner({
|
|
|
401
452
|
) : null,
|
|
402
453
|
onUpload,
|
|
403
454
|
uploading,
|
|
404
|
-
files
|
|
455
|
+
files,
|
|
405
456
|
testIdPrefix
|
|
406
457
|
}
|
|
407
458
|
)
|
|
408
459
|
] });
|
|
409
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
|
+
}
|
|
410
469
|
function ReviewNotify({
|
|
411
470
|
conversationId,
|
|
412
471
|
workspaceId,
|
|
@@ -1009,7 +1068,7 @@ function mapWorkNotification(note) {
|
|
|
1009
1068
|
function ActiveChat({ agentId, workspaceId }) {
|
|
1010
1069
|
const chat = react$1.useArbiChat({ agentId, workspaceId });
|
|
1011
1070
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1012
|
-
|
|
1071
|
+
chunkIPGKTUF7_cjs.ChatPage,
|
|
1013
1072
|
{
|
|
1014
1073
|
chat: { ...chat, assistantMode: void 0, setAssistantMode: void 0 },
|
|
1015
1074
|
documentsRequired: false,
|
|
@@ -1071,35 +1130,35 @@ function ConnectedAgentChatPanel({
|
|
|
1071
1130
|
|
|
1072
1131
|
Object.defineProperty(exports, "ConnectedAssistantDock", {
|
|
1073
1132
|
enumerable: true,
|
|
1074
|
-
get: function () { return
|
|
1133
|
+
get: function () { return chunkHITAN7JF_cjs.ConnectedAssistantDock; }
|
|
1075
1134
|
});
|
|
1076
1135
|
Object.defineProperty(exports, "redlineStats", {
|
|
1077
1136
|
enumerable: true,
|
|
1078
|
-
get: function () { return
|
|
1137
|
+
get: function () { return chunkHITAN7JF_cjs.redlineStats; }
|
|
1079
1138
|
});
|
|
1080
1139
|
Object.defineProperty(exports, "textToArtifact", {
|
|
1081
1140
|
enumerable: true,
|
|
1082
|
-
get: function () { return
|
|
1141
|
+
get: function () { return chunkHITAN7JF_cjs.textToArtifact; }
|
|
1083
1142
|
});
|
|
1084
1143
|
Object.defineProperty(exports, "toRedlineMarkdown", {
|
|
1085
1144
|
enumerable: true,
|
|
1086
|
-
get: function () { return
|
|
1145
|
+
get: function () { return chunkHITAN7JF_cjs.toRedlineMarkdown; }
|
|
1087
1146
|
});
|
|
1088
1147
|
Object.defineProperty(exports, "useConnectedAiTask", {
|
|
1089
1148
|
enumerable: true,
|
|
1090
|
-
get: function () { return
|
|
1149
|
+
get: function () { return chunkHITAN7JF_cjs.useConnectedAiTask; }
|
|
1091
1150
|
});
|
|
1092
1151
|
Object.defineProperty(exports, "useConnectedChat", {
|
|
1093
1152
|
enumerable: true,
|
|
1094
|
-
get: function () { return
|
|
1153
|
+
get: function () { return chunkHITAN7JF_cjs.useConnectedChat; }
|
|
1095
1154
|
});
|
|
1096
1155
|
Object.defineProperty(exports, "useSemanticSearch", {
|
|
1097
1156
|
enumerable: true,
|
|
1098
|
-
get: function () { return
|
|
1157
|
+
get: function () { return chunkHITAN7JF_cjs.useSemanticSearch; }
|
|
1099
1158
|
});
|
|
1100
1159
|
Object.defineProperty(exports, "useWorkspaceDocs", {
|
|
1101
1160
|
enumerable: true,
|
|
1102
|
-
get: function () { return
|
|
1161
|
+
get: function () { return chunkHITAN7JF_cjs.useWorkspaceDocs; }
|
|
1103
1162
|
});
|
|
1104
1163
|
Object.defineProperty(exports, "ConnectionProvider", {
|
|
1105
1164
|
enumerable: true,
|