@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.
@@ -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
- export { A as AgentWorkbenchActivity, a as AgentWorkbenchActivityClassNames, b as AgentWorkbenchActivityModel, c as AgentWorkbenchActivityProps, d as AgentWorkbenchApprovalIntent, e as AgentWorkbenchArtifactIntent, 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-f2034b78b458.mjs';
4
- import 'react';
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
- export { AgentWorkbenchComposer, type AgentWorkbenchComposerClassNames, type AgentWorkbenchComposerIntent, type AgentWorkbenchComposerProps };
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
- export { A as AgentWorkbenchActivity, a as AgentWorkbenchActivityClassNames, b as AgentWorkbenchActivityModel, c as AgentWorkbenchActivityProps, d as AgentWorkbenchApprovalIntent, e as AgentWorkbenchArtifactIntent, 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-f2034b78b458.js';
4
- import 'react';
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
- export { AgentWorkbenchComposer, type AgentWorkbenchComposerClassNames, type AgentWorkbenchComposerIntent, type AgentWorkbenchComposerProps };
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;