@inf-monkeys-tech/monkeys-design 1.0.16 → 1.0.17
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/components/agent-workbench/index.d.mts +36 -4
- package/dist/components/agent-workbench/index.d.ts +36 -4
- package/dist/components/agent-workbench/index.js +167 -1
- package/dist/components/agent-workbench/index.js.map +1 -1
- package/dist/components/agent-workbench/index.mjs +167 -2
- package/dist/components/agent-workbench/index.mjs.map +1 -1
- package/dist/{details-model-f2034b78b458.d.mts → details-model-235bb3448dca.d.mts} +2 -1
- package/dist/{details-model-f2034b78b458.d.ts → details-model-235bb3448dca.d.ts} +2 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -1
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { AgentWorkbenchComposerViewModel, AgentSessionPermissionProfile } from '@inf-monkeys-tech/monkeys';
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { AgentWorkbenchComposerViewModel, AgentSessionPermissionProfile, AgentSessionViewModel, AgentSessionEvent } from '@inf-monkeys-tech/monkeys';
|
|
3
|
+
import { d as AgentWorkbenchApprovalIntent, e as AgentWorkbenchArtifactIntent } from '../../details-model-235bb3448dca.mjs';
|
|
4
|
+
export { A as AgentWorkbenchActivity, a as AgentWorkbenchActivityClassNames, b as AgentWorkbenchActivityModel, c as AgentWorkbenchActivityProps, f as AgentWorkbenchDetailsIntent, g as AgentWorkbenchDetailsModel, h as AgentWorkbenchDetailsState, i as AgentWorkbenchDetailsTab, j as AgentWorkbenchEventOf, k as AgentWorkbenchSidebar, l as AgentWorkbenchSidebarClassNames, m as AgentWorkbenchSidebarIntent, n as AgentWorkbenchSidebarProps, o as AgentWorkbenchTaskDetails, p as AgentWorkbenchTaskDetailsClassNames, q as AgentWorkbenchTaskDetailsProps, r as AgentWorkbenchTerminalModel, s as AgentWorkbenchTool, t as AgentWorkbenchToolClassNames, u as AgentWorkbenchToolProps, v as createAgentWorkbenchActivityModel, w as createAgentWorkbenchDetailsModel } from '../../details-model-235bb3448dca.mjs';
|
|
5
|
+
import { ReactNode } from 'react';
|
|
5
6
|
type AgentWorkbenchComposerIntent = {
|
|
6
7
|
type: 'change-permission';
|
|
7
8
|
value: AgentSessionPermissionProfile;
|
|
@@ -56,4 +57,35 @@ interface AgentWorkbenchComposerProps {
|
|
|
56
57
|
onIntent?: (intent: AgentWorkbenchComposerIntent) => void;
|
|
57
58
|
}
|
|
58
59
|
declare function AgentWorkbenchComposer({ viewModel, className, classNames, onIntent, }: AgentWorkbenchComposerProps): react_jsx_runtime.JSX.Element;
|
|
59
|
-
|
|
60
|
+
type MessageEvent = Extract<AgentSessionEvent, {
|
|
61
|
+
eventType: 'message';
|
|
62
|
+
}>;
|
|
63
|
+
interface AgentWorkbenchThreadMessage {
|
|
64
|
+
id: string;
|
|
65
|
+
role: MessageEvent['payload']['role'];
|
|
66
|
+
parts: MessageEvent['payload']['parts'];
|
|
67
|
+
sequence: number;
|
|
68
|
+
}
|
|
69
|
+
interface AgentWorkbenchThreadClassNames {
|
|
70
|
+
root?: string;
|
|
71
|
+
list?: string;
|
|
72
|
+
message?: string;
|
|
73
|
+
messageContent?: string;
|
|
74
|
+
activity?: string;
|
|
75
|
+
empty?: string;
|
|
76
|
+
loading?: string;
|
|
77
|
+
}
|
|
78
|
+
interface AgentWorkbenchThreadProps {
|
|
79
|
+
viewModel?: AgentSessionViewModel;
|
|
80
|
+
loading?: boolean;
|
|
81
|
+
emptyTitle?: string;
|
|
82
|
+
emptyDescription?: string;
|
|
83
|
+
autoScroll?: boolean;
|
|
84
|
+
className?: string;
|
|
85
|
+
classNames?: AgentWorkbenchThreadClassNames;
|
|
86
|
+
renderMessageContent?: (message: AgentWorkbenchThreadMessage) => ReactNode;
|
|
87
|
+
onApprovalDecision?: (intent: AgentWorkbenchApprovalIntent) => void;
|
|
88
|
+
onArtifactOpen?: (intent: AgentWorkbenchArtifactIntent) => void;
|
|
89
|
+
}
|
|
90
|
+
declare function AgentWorkbenchThread({ viewModel, loading, emptyTitle, emptyDescription, autoScroll, className, classNames, renderMessageContent, onApprovalDecision, onArtifactOpen, }: AgentWorkbenchThreadProps): react_jsx_runtime.JSX.Element;
|
|
91
|
+
export { AgentWorkbenchApprovalIntent, AgentWorkbenchArtifactIntent, AgentWorkbenchComposer, type AgentWorkbenchComposerClassNames, type AgentWorkbenchComposerIntent, type AgentWorkbenchComposerProps, AgentWorkbenchThread, type AgentWorkbenchThreadClassNames, type AgentWorkbenchThreadMessage, type AgentWorkbenchThreadProps };
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { AgentWorkbenchComposerViewModel, AgentSessionPermissionProfile } from '@inf-monkeys-tech/monkeys';
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { AgentWorkbenchComposerViewModel, AgentSessionPermissionProfile, AgentSessionViewModel, AgentSessionEvent } from '@inf-monkeys-tech/monkeys';
|
|
3
|
+
import { d as AgentWorkbenchApprovalIntent, e as AgentWorkbenchArtifactIntent } from '../../details-model-235bb3448dca.js';
|
|
4
|
+
export { A as AgentWorkbenchActivity, a as AgentWorkbenchActivityClassNames, b as AgentWorkbenchActivityModel, c as AgentWorkbenchActivityProps, f as AgentWorkbenchDetailsIntent, g as AgentWorkbenchDetailsModel, h as AgentWorkbenchDetailsState, i as AgentWorkbenchDetailsTab, j as AgentWorkbenchEventOf, k as AgentWorkbenchSidebar, l as AgentWorkbenchSidebarClassNames, m as AgentWorkbenchSidebarIntent, n as AgentWorkbenchSidebarProps, o as AgentWorkbenchTaskDetails, p as AgentWorkbenchTaskDetailsClassNames, q as AgentWorkbenchTaskDetailsProps, r as AgentWorkbenchTerminalModel, s as AgentWorkbenchTool, t as AgentWorkbenchToolClassNames, u as AgentWorkbenchToolProps, v as createAgentWorkbenchActivityModel, w as createAgentWorkbenchDetailsModel } from '../../details-model-235bb3448dca.js';
|
|
5
|
+
import { ReactNode } from 'react';
|
|
5
6
|
type AgentWorkbenchComposerIntent = {
|
|
6
7
|
type: 'change-permission';
|
|
7
8
|
value: AgentSessionPermissionProfile;
|
|
@@ -56,4 +57,35 @@ interface AgentWorkbenchComposerProps {
|
|
|
56
57
|
onIntent?: (intent: AgentWorkbenchComposerIntent) => void;
|
|
57
58
|
}
|
|
58
59
|
declare function AgentWorkbenchComposer({ viewModel, className, classNames, onIntent, }: AgentWorkbenchComposerProps): react_jsx_runtime.JSX.Element;
|
|
59
|
-
|
|
60
|
+
type MessageEvent = Extract<AgentSessionEvent, {
|
|
61
|
+
eventType: 'message';
|
|
62
|
+
}>;
|
|
63
|
+
interface AgentWorkbenchThreadMessage {
|
|
64
|
+
id: string;
|
|
65
|
+
role: MessageEvent['payload']['role'];
|
|
66
|
+
parts: MessageEvent['payload']['parts'];
|
|
67
|
+
sequence: number;
|
|
68
|
+
}
|
|
69
|
+
interface AgentWorkbenchThreadClassNames {
|
|
70
|
+
root?: string;
|
|
71
|
+
list?: string;
|
|
72
|
+
message?: string;
|
|
73
|
+
messageContent?: string;
|
|
74
|
+
activity?: string;
|
|
75
|
+
empty?: string;
|
|
76
|
+
loading?: string;
|
|
77
|
+
}
|
|
78
|
+
interface AgentWorkbenchThreadProps {
|
|
79
|
+
viewModel?: AgentSessionViewModel;
|
|
80
|
+
loading?: boolean;
|
|
81
|
+
emptyTitle?: string;
|
|
82
|
+
emptyDescription?: string;
|
|
83
|
+
autoScroll?: boolean;
|
|
84
|
+
className?: string;
|
|
85
|
+
classNames?: AgentWorkbenchThreadClassNames;
|
|
86
|
+
renderMessageContent?: (message: AgentWorkbenchThreadMessage) => ReactNode;
|
|
87
|
+
onApprovalDecision?: (intent: AgentWorkbenchApprovalIntent) => void;
|
|
88
|
+
onArtifactOpen?: (intent: AgentWorkbenchArtifactIntent) => void;
|
|
89
|
+
}
|
|
90
|
+
declare function AgentWorkbenchThread({ viewModel, loading, emptyTitle, emptyDescription, autoScroll, className, classNames, renderMessageContent, onApprovalDecision, onArtifactOpen, }: AgentWorkbenchThreadProps): react_jsx_runtime.JSX.Element;
|
|
91
|
+
export { AgentWorkbenchApprovalIntent, AgentWorkbenchArtifactIntent, AgentWorkbenchComposer, type AgentWorkbenchComposerClassNames, type AgentWorkbenchComposerIntent, type AgentWorkbenchComposerProps, AgentWorkbenchThread, type AgentWorkbenchThreadClassNames, type AgentWorkbenchThreadMessage, type AgentWorkbenchThreadProps };
|
|
@@ -1482,6 +1482,7 @@ function RunStatus({
|
|
|
1482
1482
|
}
|
|
1483
1483
|
function AgentWorkbenchActivity({
|
|
1484
1484
|
viewModel,
|
|
1485
|
+
ariaLabel,
|
|
1485
1486
|
hiddenToolCallIds,
|
|
1486
1487
|
hideReasoning = false,
|
|
1487
1488
|
hideStoppedRun = false,
|
|
@@ -1509,7 +1510,7 @@ function AgentWorkbenchActivity({
|
|
|
1509
1510
|
"section",
|
|
1510
1511
|
{
|
|
1511
1512
|
className: cn2("space-y-3", classNames?.root, className),
|
|
1512
|
-
"aria-label": messages.label,
|
|
1513
|
+
"aria-label": ariaLabel ?? messages.label,
|
|
1513
1514
|
"data-agent-workbench-mode": activity.mode,
|
|
1514
1515
|
"data-agent-workbench-status": activity.status,
|
|
1515
1516
|
children: [
|
|
@@ -2215,11 +2216,176 @@ function AgentWorkbenchTaskDetails({
|
|
|
2215
2216
|
}
|
|
2216
2217
|
);
|
|
2217
2218
|
}
|
|
2219
|
+
function materializeMessages(events) {
|
|
2220
|
+
const messages = /* @__PURE__ */ new Map();
|
|
2221
|
+
for (const event of events) {
|
|
2222
|
+
if (event.eventType !== "message") continue;
|
|
2223
|
+
const current = messages.get(event.payload.messageId);
|
|
2224
|
+
const parts = event.payload.operation === "replace" ? event.payload.parts : [...current?.parts ?? [], ...event.payload.parts];
|
|
2225
|
+
messages.set(event.payload.messageId, {
|
|
2226
|
+
id: event.payload.messageId,
|
|
2227
|
+
role: event.payload.role,
|
|
2228
|
+
parts,
|
|
2229
|
+
sequence: event.sequence
|
|
2230
|
+
});
|
|
2231
|
+
}
|
|
2232
|
+
return [...messages.values()];
|
|
2233
|
+
}
|
|
2234
|
+
function logicalActivityKey(event) {
|
|
2235
|
+
switch (event.eventType) {
|
|
2236
|
+
case "reasoning":
|
|
2237
|
+
return `reasoning:${event.payload.reasoningId}`;
|
|
2238
|
+
case "plan":
|
|
2239
|
+
return `plan:${event.payload.planId}`;
|
|
2240
|
+
case "task":
|
|
2241
|
+
return `task:${event.payload.taskId}`;
|
|
2242
|
+
case "tool":
|
|
2243
|
+
return `tool:${event.payload.toolCallId}`;
|
|
2244
|
+
case "approval":
|
|
2245
|
+
return `approval:${event.payload.approvalId}`;
|
|
2246
|
+
case "artifact":
|
|
2247
|
+
return `artifact:${event.payload.artifactId}`;
|
|
2248
|
+
case "usage":
|
|
2249
|
+
return "usage";
|
|
2250
|
+
case "status":
|
|
2251
|
+
return "status";
|
|
2252
|
+
default:
|
|
2253
|
+
return void 0;
|
|
2254
|
+
}
|
|
2255
|
+
}
|
|
2256
|
+
function createThreadEntries(viewModel) {
|
|
2257
|
+
const messages = materializeMessages(viewModel.events).map((message) => ({
|
|
2258
|
+
type: "message",
|
|
2259
|
+
sequence: message.sequence,
|
|
2260
|
+
message
|
|
2261
|
+
}));
|
|
2262
|
+
const activity = /* @__PURE__ */ new Map();
|
|
2263
|
+
for (const event of viewModel.events) {
|
|
2264
|
+
const key = logicalActivityKey(event);
|
|
2265
|
+
if (key) activity.set(key, event);
|
|
2266
|
+
}
|
|
2267
|
+
return [
|
|
2268
|
+
...messages,
|
|
2269
|
+
...viewModel.events.filter((event) => event.eventType === "error").map((event) => ({ type: "error", sequence: event.sequence, event })),
|
|
2270
|
+
...[...activity.values()].map((event) => ({
|
|
2271
|
+
type: "activity",
|
|
2272
|
+
sequence: event.sequence,
|
|
2273
|
+
event
|
|
2274
|
+
}))
|
|
2275
|
+
].sort((left, right) => left.sequence - right.sequence);
|
|
2276
|
+
}
|
|
2277
|
+
function partText(part) {
|
|
2278
|
+
if (typeof part === "string") return part;
|
|
2279
|
+
if (!part || typeof part !== "object" || Array.isArray(part)) return String(part ?? "");
|
|
2280
|
+
const record = part;
|
|
2281
|
+
if (typeof record.text === "string") return record.text;
|
|
2282
|
+
if (typeof record.name === "string") return record.name;
|
|
2283
|
+
return JSON.stringify(record, null, 2);
|
|
2284
|
+
}
|
|
2285
|
+
function DefaultMessageContent({ message }) {
|
|
2286
|
+
const content = message.parts.map(partText).filter(Boolean).join("");
|
|
2287
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "whitespace-pre-wrap break-words", children: content });
|
|
2288
|
+
}
|
|
2289
|
+
function singleEventViewModel(viewModel, event) {
|
|
2290
|
+
return {
|
|
2291
|
+
...viewModel,
|
|
2292
|
+
events: [event],
|
|
2293
|
+
lastSequence: event.sequence
|
|
2294
|
+
};
|
|
2295
|
+
}
|
|
2296
|
+
function AgentWorkbenchThread({
|
|
2297
|
+
viewModel,
|
|
2298
|
+
loading = false,
|
|
2299
|
+
emptyTitle,
|
|
2300
|
+
emptyDescription,
|
|
2301
|
+
autoScroll = true,
|
|
2302
|
+
className,
|
|
2303
|
+
classNames,
|
|
2304
|
+
renderMessageContent,
|
|
2305
|
+
onApprovalDecision,
|
|
2306
|
+
onArtifactOpen
|
|
2307
|
+
}) {
|
|
2308
|
+
const messages = useMonkeysLocaleMessages().agentWorkbench;
|
|
2309
|
+
const scrollRef = React2.useRef(null);
|
|
2310
|
+
const entries = React2.useMemo(
|
|
2311
|
+
() => viewModel ? createThreadEntries(viewModel) : [],
|
|
2312
|
+
[viewModel]
|
|
2313
|
+
);
|
|
2314
|
+
React2.useEffect(() => {
|
|
2315
|
+
if (!autoScroll || !viewModel) return;
|
|
2316
|
+
const element = scrollRef.current;
|
|
2317
|
+
if (element) element.scrollTop = element.scrollHeight;
|
|
2318
|
+
}, [autoScroll, viewModel?.lastSequence, viewModel?.sessionId]);
|
|
2319
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2320
|
+
"div",
|
|
2321
|
+
{
|
|
2322
|
+
ref: scrollRef,
|
|
2323
|
+
role: "log",
|
|
2324
|
+
"aria-label": messages.label,
|
|
2325
|
+
className: cn2("min-h-0 flex-1 overflow-y-auto bg-background", classNames?.root, className),
|
|
2326
|
+
children: loading && entries.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn2("flex min-h-48 items-center justify-center gap-2 text-sm text-muted-foreground", classNames?.loading), role: "status", children: [
|
|
2327
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-4 animate-spin rounded-full border-2 border-muted-foreground/30 border-t-muted-foreground", "aria-hidden": "true" }),
|
|
2328
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: messages.navigation.loading })
|
|
2329
|
+
] }) : entries.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn2("flex min-h-48 flex-col items-center justify-center px-6 text-center", classNames?.empty), children: [
|
|
2330
|
+
emptyTitle ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-base font-semibold text-foreground", children: emptyTitle }) : null,
|
|
2331
|
+
emptyDescription ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 max-w-lg text-sm text-muted-foreground", children: emptyDescription }) : null
|
|
2332
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn2("mx-auto flex w-full max-w-4xl flex-col gap-4 px-4 py-6 sm:px-6", classNames?.list), children: entries.map((entry) => {
|
|
2333
|
+
if (entry.type === "error") {
|
|
2334
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2335
|
+
"div",
|
|
2336
|
+
{
|
|
2337
|
+
role: "alert",
|
|
2338
|
+
className: cn2("rounded-lg border border-destructive/30 bg-destructive/10 px-4 py-3 text-sm text-destructive-text", classNames?.activity),
|
|
2339
|
+
children: entry.event.payload.message
|
|
2340
|
+
},
|
|
2341
|
+
`error:${entry.event.eventId}`
|
|
2342
|
+
);
|
|
2343
|
+
}
|
|
2344
|
+
if (entry.type === "activity") {
|
|
2345
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2346
|
+
AgentWorkbenchActivity,
|
|
2347
|
+
{
|
|
2348
|
+
viewModel: singleEventViewModel(viewModel, entry.event),
|
|
2349
|
+
ariaLabel: `${messages.label} ${entry.sequence + 1}`,
|
|
2350
|
+
className: classNames?.activity,
|
|
2351
|
+
onApprovalDecision,
|
|
2352
|
+
onArtifactOpen
|
|
2353
|
+
},
|
|
2354
|
+
`activity:${entry.event.eventId}`
|
|
2355
|
+
);
|
|
2356
|
+
}
|
|
2357
|
+
const { message } = entry;
|
|
2358
|
+
const isUser = message.role === "user";
|
|
2359
|
+
const isSystem = message.role === "system";
|
|
2360
|
+
if (isSystem) {
|
|
2361
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn2("text-center text-xs text-muted-foreground", classNames?.message), children: renderMessageContent?.(message) ?? /* @__PURE__ */ jsxRuntime.jsx(DefaultMessageContent, { message }) }, message.id);
|
|
2362
|
+
}
|
|
2363
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2364
|
+
"article",
|
|
2365
|
+
{
|
|
2366
|
+
className: cn2("flex items-start gap-3", isUser && "flex-row-reverse", classNames?.message),
|
|
2367
|
+
"data-message-role": message.role,
|
|
2368
|
+
children: [
|
|
2369
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn2("flex size-8 shrink-0 items-center justify-center rounded-full", isUser ? "bg-primary text-primary-foreground" : "bg-muted text-foreground"), "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-2 rounded-full bg-current" }) }),
|
|
2370
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn2(
|
|
2371
|
+
"min-w-0 max-w-[85%] rounded-2xl px-4 py-2.5 text-sm leading-6",
|
|
2372
|
+
isUser ? "bg-primary text-primary-foreground" : "bg-card text-card-foreground",
|
|
2373
|
+
classNames?.messageContent
|
|
2374
|
+
), children: renderMessageContent?.(message) ?? /* @__PURE__ */ jsxRuntime.jsx(DefaultMessageContent, { message }) })
|
|
2375
|
+
]
|
|
2376
|
+
},
|
|
2377
|
+
message.id
|
|
2378
|
+
);
|
|
2379
|
+
}) })
|
|
2380
|
+
}
|
|
2381
|
+
);
|
|
2382
|
+
}
|
|
2218
2383
|
|
|
2219
2384
|
exports.AgentWorkbenchActivity = AgentWorkbenchActivity;
|
|
2220
2385
|
exports.AgentWorkbenchComposer = AgentWorkbenchComposer;
|
|
2221
2386
|
exports.AgentWorkbenchSidebar = AgentWorkbenchSidebar;
|
|
2222
2387
|
exports.AgentWorkbenchTaskDetails = AgentWorkbenchTaskDetails;
|
|
2388
|
+
exports.AgentWorkbenchThread = AgentWorkbenchThread;
|
|
2223
2389
|
exports.AgentWorkbenchTool = AgentWorkbenchTool;
|
|
2224
2390
|
exports.createAgentWorkbenchActivityModel = createAgentWorkbenchActivityModel;
|
|
2225
2391
|
exports.createAgentWorkbenchDetailsModel = createAgentWorkbenchDetailsModel;
|