@tutti-os/agent-gui 0.0.17 → 0.0.19

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.
Files changed (49) hide show
  1. package/dist/{AgentMentionSearchController-DqssJ2-b.d.ts → AgentMentionSearchController-2Vjvmzh3.d.ts} +0 -1
  2. package/dist/agent-conversation/index.d.ts +1 -1
  3. package/dist/agent-conversation/index.js +5 -5
  4. package/dist/agent-message-center/index.d.ts +1 -1
  5. package/dist/agent-message-center/index.js +5 -5
  6. package/dist/{chunk-O5TUTXHT.js → chunk-222YHU5Z.js} +1 -1
  7. package/dist/chunk-222YHU5Z.js.map +1 -0
  8. package/dist/{chunk-VNAQ6QFE.js → chunk-5BVKJM77.js} +37 -15
  9. package/dist/chunk-5BVKJM77.js.map +1 -0
  10. package/dist/{chunk-VO2TZNKV.js → chunk-B727YDVW.js} +5 -5
  11. package/dist/{chunk-OJ5WX7SZ.js → chunk-B7DTDZVT.js} +2 -2
  12. package/dist/{chunk-CDTTIUPL.js → chunk-F7XLV7M3.js} +2 -2
  13. package/dist/{chunk-65YMY2M3.js → chunk-GLDKFIWM.js} +7 -3
  14. package/dist/chunk-GLDKFIWM.js.map +1 -0
  15. package/dist/{chunk-K44WER5Z.js → chunk-HFL5WGRF.js} +33 -49
  16. package/dist/chunk-HFL5WGRF.js.map +1 -0
  17. package/dist/{chunk-HIREVEZM.js → chunk-JM24HADP.js} +1 -1
  18. package/dist/chunk-JM24HADP.js.map +1 -0
  19. package/dist/{chunk-HVOPJU2K.js → chunk-SY3ES2SA.js} +5 -5
  20. package/dist/{chunk-KHTIC52P.js → chunk-XAQQN6MP.js} +51 -185
  21. package/dist/chunk-XAQQN6MP.js.map +1 -0
  22. package/dist/{chunk-GWR6WGZY.js → chunk-XHJQNUH4.js} +41 -28
  23. package/dist/chunk-XHJQNUH4.js.map +1 -0
  24. package/dist/context-mention-palette/index.d.ts +2 -2
  25. package/dist/context-mention-palette/index.js +7 -7
  26. package/dist/context-mention-provider.d.ts +4 -40
  27. package/dist/context-mention-provider.js +1 -1
  28. package/dist/i18n/index.d.ts +6 -2
  29. package/dist/i18n/index.js +1 -1
  30. package/dist/index.d.ts +15 -4
  31. package/dist/index.js +277 -78
  32. package/dist/index.js.map +1 -1
  33. package/dist/workbench/contribution.d.ts +1 -0
  34. package/dist/workbench/contribution.js +1 -1
  35. package/dist/workbench/index.js +1 -1
  36. package/dist/workspace-agent-generated-files.js +2 -2
  37. package/dist/{workspaceLinkActions-Mjktl_Be.d.ts → workspaceLinkActions-CqWZaCY4.d.ts} +1 -0
  38. package/package.json +12 -12
  39. package/dist/chunk-65YMY2M3.js.map +0 -1
  40. package/dist/chunk-GWR6WGZY.js.map +0 -1
  41. package/dist/chunk-HIREVEZM.js.map +0 -1
  42. package/dist/chunk-K44WER5Z.js.map +0 -1
  43. package/dist/chunk-KHTIC52P.js.map +0 -1
  44. package/dist/chunk-O5TUTXHT.js.map +0 -1
  45. package/dist/chunk-VNAQ6QFE.js.map +0 -1
  46. /package/dist/{chunk-VO2TZNKV.js.map → chunk-B727YDVW.js.map} +0 -0
  47. /package/dist/{chunk-OJ5WX7SZ.js.map → chunk-B7DTDZVT.js.map} +0 -0
  48. /package/dist/{chunk-CDTTIUPL.js.map → chunk-F7XLV7M3.js.map} +0 -0
  49. /package/dist/{chunk-HVOPJU2K.js.map → chunk-SY3ES2SA.js.map} +0 -0
@@ -152,6 +152,7 @@ function createAgentGuiWorkbenchContribution(input) {
152
152
  });
153
153
  const frame = input.frame ?? agentGuiWorkbenchDefaultNodeFrame;
154
154
  const copy = resolveAgentGuiWorkbenchContributionCopy(input.copy);
155
+ const renderMinimizedPreview = input.renderMinimizedPreview;
155
156
  return {
156
157
  dockEntries: agentGuiWorkbenchProviders.map(
157
158
  (provider, index) => createAgentGuiWorkbenchDockEntry({
@@ -289,7 +290,14 @@ function createAgentGuiWorkbenchContribution(input) {
289
290
  window: {
290
291
  closable: true,
291
292
  defaultOpen: false,
292
- minimizedDock: {
293
+ minimizedDock: renderMinimizedPreview ? {
294
+ kind: "component",
295
+ providePreview: (item) => createAgentGuiWorkbenchPreviewContent({
296
+ item,
297
+ renderPreview: renderMinimizedPreview,
298
+ resolveDockPopupTitle: input.resolveDockPopupTitle
299
+ })
300
+ } : {
293
301
  kind: "snapshot"
294
302
  },
295
303
  minimizable: true
@@ -390,32 +398,13 @@ function createAgentGuiWorkbenchDockEntry(input) {
390
398
  launchPayload: { provider: input.provider },
391
399
  matchNode: (node) => node.data.typeId === agentGuiWorkbenchTypeId && agentGuiWorkbenchProviderFromIdentifier(node.data.instanceId) === input.provider,
392
400
  order: input.order,
393
- providePopupItemPreview: (item) => {
394
- if (!input.renderPreview) {
395
- return null;
396
- }
397
- const { externalNodeState, node } = item;
398
- const state = normalizeAgentGuiWorkbenchState(externalNodeState);
399
- const title = input.resolveDockPopupTitle?.(state) ?? node.title;
400
- const lines = [input.label, state.lastActiveAgentSessionId].filter(
401
- (line) => Boolean(line?.trim())
402
- );
403
- const revision = `${input.provider}
404
- ${title}
405
- ${lines.join("\n")}`;
406
- return {
407
- element: input.renderPreview(
408
- createAgentGuiWorkbenchPreviewBodyContext(item),
409
- {
410
- nodeTypeId: agentGuiWorkbenchTypeId,
411
- onStateChange: () => void 0,
412
- provider: input.provider
413
- }
414
- ),
415
- kind: "component",
416
- revision
417
- };
418
- },
401
+ providePopupItemPreview: (item) => input.renderPreview ? createAgentGuiWorkbenchPreviewContent({
402
+ item,
403
+ label: input.label,
404
+ provider: input.provider,
405
+ renderPreview: input.renderPreview,
406
+ resolveDockPopupTitle: input.resolveDockPopupTitle
407
+ }) : null,
419
408
  resolvePopupItem: ({ externalNodeState }) => {
420
409
  const title = input.resolveDockPopupTitle?.(
421
410
  normalizeAgentGuiWorkbenchState(externalNodeState)
@@ -431,6 +420,30 @@ ${title ?? ""}`,
431
420
  visibility: input.visibility
432
421
  };
433
422
  }
423
+ function createAgentGuiWorkbenchPreviewContent(input) {
424
+ const { externalNodeState, node } = input.item;
425
+ const state = normalizeAgentGuiWorkbenchState(externalNodeState);
426
+ const title = input.resolveDockPopupTitle?.(state) ?? node.title;
427
+ const provider = input.provider ?? agentGuiWorkbenchProviderFromIdentifier(node.data.instanceId) ?? agentGuiWorkbenchProviderFromInstanceId(node.data.instanceId);
428
+ const label = input.label ?? resolveAgentGuiWorkbenchProviderLabel(provider);
429
+ const lines = [label, state.lastActiveAgentSessionId].filter(
430
+ (line) => Boolean(line?.trim())
431
+ );
432
+ return {
433
+ element: input.renderPreview(
434
+ createAgentGuiWorkbenchPreviewBodyContext(input.item),
435
+ {
436
+ nodeTypeId: agentGuiWorkbenchTypeId,
437
+ onStateChange: () => void 0,
438
+ provider
439
+ }
440
+ ),
441
+ kind: "component",
442
+ revision: `${provider}
443
+ ${title}
444
+ ${lines.join("\n")}`
445
+ };
446
+ }
434
447
  function createAgentGuiWorkbenchPreviewBodyContext(input) {
435
448
  return {
436
449
  activation: null,
@@ -460,4 +473,4 @@ export {
460
473
  resolveAgentGuiWorkbenchDefaultLaunchFrame,
461
474
  resolveAgentGuiWorkbenchContributionCopy
462
475
  };
463
- //# sourceMappingURL=chunk-GWR6WGZY.js.map
476
+ //# sourceMappingURL=chunk-XHJQNUH4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../workbench/contribution.ts","../workbench/header.ts"],"sourcesContent":["import { createElement, type ReactNode } from \"react\";\nimport {\n getWorkbenchLayoutFrame,\n type WorkbenchContribution,\n type WorkbenchDockPreviewContent,\n type WorkbenchFrame,\n type WorkbenchHostDockEntry,\n type WorkbenchHostDockPopupItemInput,\n type WorkbenchHostLaunchRequest,\n type WorkbenchHostNodeBodyContext\n} from \"@tutti-os/workbench-surface\";\nimport {\n resolveAgentGUIExpandedWindowFrame,\n shouldAutoCollapseAgentGUIConversationRail\n} from \"../agent-gui/agentGuiNode/model/agentGuiRailLayout.ts\";\nimport { agentGuiDockIconUrls } from \"../dockIcons.ts\";\nimport { AgentGuiWorkbenchHeader } from \"./header.ts\";\nimport {\n agentGuiWorkbenchDockEntryId,\n agentGuiWorkbenchProviderFromIdentifier,\n agentGuiWorkbenchTypeId,\n createAgentGuiWorkbenchLaunchDescriptor\n} from \"./launch.ts\";\nimport {\n agentGuiWorkbenchProviderFromInstanceId,\n createAgentGuiWorkbenchNodeStateSource,\n normalizeAgentGuiWorkbenchNodeState,\n normalizeAgentGuiWorkbenchState\n} from \"./state.ts\";\nimport {\n agentGuiWorkbenchProviderLabels,\n agentGuiWorkbenchProviders,\n isAgentGuiWorkbenchDefaultDockProvider,\n resolveAgentGuiWorkbenchProviderLabel\n} from \"./providerCatalog.ts\";\nimport type {\n AgentGuiWorkbenchNodeState,\n AgentGuiWorkbenchProvider,\n AgentGuiWorkbenchState\n} from \"./types.ts\";\n\nexport const agentGuiWorkbenchDefaultNodeFrame: WorkbenchFrame = {\n height: 560,\n width: 1040,\n x: 140,\n y: 48\n};\n\nexport const agentGuiWorkbenchDefaultUsableHeightRatio = 0.7;\nexport const agentGuiWorkbenchCompactVisibleAreaRatio = 0.9;\n\nexport const AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT =\n \"tutti:agent-gui-workbench-conversation-rail-toggle\";\n\nexport const AGENT_GUI_WORKBENCH_NEW_CONVERSATION_EVENT =\n \"tutti:agent-gui-workbench-new-conversation\";\n\nexport interface AgentGuiWorkbenchConversationRailToggleDetail {\n conversationRailCollapsed: boolean;\n instanceId: string;\n}\n\nexport interface AgentGuiWorkbenchNewConversationDetail {\n instanceId: string;\n}\n\nexport interface AgentGuiWorkbenchContributionCopy {\n collapseConversationRail: string;\n expandConversationRail: string;\n fallbackAgentLabel: string;\n newConversation: string;\n nodeTitle: string;\n}\n\nexport type AgentGuiWorkbenchContributionCopyOverrides =\n Partial<AgentGuiWorkbenchContributionCopy>;\n\nexport const agentGuiWorkbenchDefaultCopy: AgentGuiWorkbenchContributionCopy = {\n collapseConversationRail: \"Collapse conversation rail\",\n expandConversationRail: \"Expand conversation rail\",\n fallbackAgentLabel: \"Agent\",\n newConversation: \"New conversation\",\n nodeTitle: \"Agent\"\n};\n\nexport interface AgentGuiWorkbenchRenderBodyHelpers {\n nodeTypeId: string;\n onStateChange(state: AgentGuiWorkbenchState): void;\n provider: AgentGuiWorkbenchProvider;\n}\n\nexport interface CreateAgentGuiWorkbenchContributionInput {\n copy?: AgentGuiWorkbenchContributionCopyOverrides;\n dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n dockSectionId?: string;\n frame?: WorkbenchFrame;\n id?: string;\n renderBody(\n context: WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n helpers: AgentGuiWorkbenchRenderBodyHelpers\n ): ReactNode;\n renderPreview?(\n context: WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n helpers: AgentGuiWorkbenchRenderBodyHelpers\n ): ReactNode;\n renderMinimizedPreview?(\n context: WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n helpers: AgentGuiWorkbenchRenderBodyHelpers\n ): ReactNode;\n resolveDockPopupTitle?: (\n state: AgentGuiWorkbenchState | null\n ) => string | null;\n resolveDockEntryVisibility?: (\n provider: AgentGuiWorkbenchProvider\n ) => WorkbenchHostDockEntry[\"visibility\"];\n workspaceId: string;\n}\n\nexport function createAgentGuiWorkbenchContribution(\n input: CreateAgentGuiWorkbenchContributionInput\n): WorkbenchContribution {\n const nodeStateSource = createAgentGuiWorkbenchNodeStateSource({\n workspaceId: input.workspaceId\n });\n const frame = input.frame ?? agentGuiWorkbenchDefaultNodeFrame;\n const copy = resolveAgentGuiWorkbenchContributionCopy(input.copy);\n const renderMinimizedPreview = input.renderMinimizedPreview;\n\n return {\n dockEntries: agentGuiWorkbenchProviders.map((provider, index) =>\n createAgentGuiWorkbenchDockEntry({\n label: agentGuiWorkbenchProviderLabels[provider],\n iconUrl:\n input.dockIconUrls?.[provider] ?? agentGuiDockIconUrls[provider],\n order: index,\n provider,\n renderPreview: input.renderPreview,\n resolveDockPopupTitle: input.resolveDockPopupTitle,\n sectionId: input.dockSectionId ?? \"agents\",\n visibility:\n input.resolveDockEntryVisibility?.(provider) ??\n (isAgentGuiWorkbenchDefaultDockProvider(provider)\n ? \"always\"\n : \"never\")\n })\n ),\n externalStateSource: nodeStateSource.externalStateSource,\n id: input.id ?? \"workspace-agent-gui\",\n nodes: [\n {\n frame,\n instance: { mode: \"multi\" },\n renderBody: (context) =>\n input.renderBody(\n context as WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n {\n nodeTypeId: agentGuiWorkbenchTypeId,\n onStateChange: (state) => {\n nodeStateSource.writeNodeState({\n instanceId: context.instanceId,\n nodeId: context.node.id,\n state,\n typeId: agentGuiWorkbenchTypeId\n });\n },\n provider: agentGuiWorkbenchProviderFromInstanceId(\n context.instanceId\n )\n }\n ),\n renderHeader: ({\n defaultActions,\n dragHandleProps,\n externalNodeState,\n instanceId,\n isFocused,\n node,\n surfaceSize,\n windowActions\n }) => {\n const provider = agentGuiWorkbenchProviderFromInstanceId(instanceId);\n const providerTitle = resolveAgentGuiWorkbenchProviderLabel(provider);\n const rawWorkbenchState = (externalNodeState ??\n node.data.runtimeNodeState) as\n | Partial<AgentGuiWorkbenchNodeState>\n | null\n | undefined;\n const workbenchState =\n normalizeAgentGuiWorkbenchState(rawWorkbenchState);\n const nodeState = normalizeAgentGuiWorkbenchNodeState(\n rawWorkbenchState,\n provider\n );\n const isConversationRailAutoCollapsed =\n shouldAutoCollapseAgentGUIConversationRail(node.frame.width);\n const isConversationRailCollapsed =\n nodeState.conversationRailCollapsed === true ||\n isConversationRailAutoCollapsed;\n const persistConversationRailCollapsed = (collapsed: boolean) => {\n nodeStateSource.writeNodeState({\n instanceId,\n nodeId: node.id,\n state: {\n ...workbenchState,\n conversationRailCollapsed: collapsed\n },\n typeId: agentGuiWorkbenchTypeId\n });\n };\n const announceConversationRailCollapsed = (collapsed: boolean) => {\n window.dispatchEvent(\n new CustomEvent<AgentGuiWorkbenchConversationRailToggleDetail>(\n AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT,\n {\n detail: {\n conversationRailCollapsed: collapsed,\n instanceId\n }\n }\n )\n );\n };\n const announceNewConversation = () => {\n window.dispatchEvent(\n new CustomEvent<AgentGuiWorkbenchNewConversationDetail>(\n AGENT_GUI_WORKBENCH_NEW_CONVERSATION_EVENT,\n {\n detail: {\n instanceId\n }\n }\n )\n );\n };\n\n return createElement(AgentGuiWorkbenchHeader, {\n copy,\n conversationTitle: isConversationRailCollapsed\n ? (input.resolveDockPopupTitle?.(workbenchState) ??\n nodeState.lastActiveConversationTitle ??\n null)\n : null,\n defaultActions,\n isConversationRailAutoCollapsed,\n isConversationRailCollapsed,\n title: providerTitle,\n ...dragHandleProps,\n onCreateConversation: announceNewConversation,\n onPointerDown: (event) => {\n dragHandleProps.onPointerDown?.(event);\n if (!isFocused) {\n windowActions.focus();\n }\n },\n onToggleConversationRail: (nextCollapsed) => {\n announceConversationRailCollapsed(nextCollapsed);\n if (\n isConversationRailCollapsed &&\n nextCollapsed === false &&\n node.displayMode !== \"fullscreen\"\n ) {\n const expandedFrame = resolveAgentGUIExpandedWindowFrame({\n conversationRailWidthPx: nodeState.conversationRailWidthPx,\n desktopSize: surfaceSize,\n height: node.frame.height,\n position: {\n x: node.frame.x,\n y: node.frame.y\n },\n width: node.frame.width\n });\n\n windowActions.resize({\n ...node.frame,\n height: expandedFrame.size.height,\n width: expandedFrame.size.width,\n x: expandedFrame.position.x,\n y: expandedFrame.position.y\n });\n }\n\n persistConversationRailCollapsed(nextCollapsed);\n }\n });\n },\n title: copy.nodeTitle,\n typeId: agentGuiWorkbenchTypeId,\n window: {\n closable: true,\n defaultOpen: false,\n minimizedDock: renderMinimizedPreview\n ? {\n kind: \"component\",\n providePreview: (item) =>\n createAgentGuiWorkbenchPreviewContent({\n item,\n renderPreview: renderMinimizedPreview,\n resolveDockPopupTitle: input.resolveDockPopupTitle\n })\n }\n : {\n kind: \"snapshot\"\n },\n minimizable: true\n }\n }\n ],\n onLaunchRequest: (request) => {\n if (request.typeId !== agentGuiWorkbenchTypeId) {\n return null;\n }\n\n const {\n activation,\n dockEntryId,\n instanceId,\n provider,\n reuseDockEntryNode,\n targetAgentSessionId\n } = createAgentGuiWorkbenchLaunchDescriptor(request);\n const title = resolveAgentGuiWorkbenchProviderLabel(provider);\n if (targetAgentSessionId) {\n const previousState = nodeStateSource.readNodeState({\n instanceId,\n typeId: agentGuiWorkbenchTypeId\n });\n nodeStateSource.writeNodeState({\n instanceId,\n state: {\n ...normalizeAgentGuiWorkbenchState(previousState),\n ...(targetAgentSessionId\n ? { lastActiveAgentSessionId: targetAgentSessionId }\n : {})\n },\n typeId: agentGuiWorkbenchTypeId\n });\n }\n const defaultFrame = resolveAgentGuiWorkbenchDefaultLaunchFrame({\n frame,\n request\n });\n return {\n activation,\n defaultFrame,\n dockEntryId,\n framePolicy: isAgentGuiWorkbenchCompactVisibleFrame(defaultFrame, frame)\n ? \"absolute\"\n : \"cascade-same-type-centered\",\n instanceId,\n reuseDockEntryNode,\n title,\n typeId: agentGuiWorkbenchTypeId\n };\n }\n };\n}\n\nexport function resolveAgentGuiWorkbenchDefaultLaunchFrame(input: {\n frame: WorkbenchFrame;\n request: Pick<\n WorkbenchHostLaunchRequest,\n \"layoutConstraints\" | \"surfaceSize\"\n >;\n}): WorkbenchFrame {\n const layoutFrame = getWorkbenchLayoutFrame(\n input.request.surfaceSize,\n input.request.layoutConstraints\n );\n const defaultHeight = Math.round(\n layoutFrame.height * agentGuiWorkbenchDefaultUsableHeightRatio\n );\n const shouldUseCompactWidth = layoutFrame.width < input.frame.width;\n const shouldUseCompactHeight =\n layoutFrame.height <\n input.frame.height / agentGuiWorkbenchCompactVisibleAreaRatio;\n\n if (shouldUseCompactWidth || shouldUseCompactHeight) {\n const width = shouldUseCompactWidth\n ? Math.round(layoutFrame.width * agentGuiWorkbenchCompactVisibleAreaRatio)\n : input.frame.width;\n const height = Math.round(\n layoutFrame.height * agentGuiWorkbenchCompactVisibleAreaRatio\n );\n\n return {\n height,\n width,\n x: Math.round(layoutFrame.x + (layoutFrame.width - width) / 2),\n y: Math.round(layoutFrame.y + (layoutFrame.height - height) / 2)\n };\n }\n\n return {\n ...input.frame,\n height: defaultHeight\n };\n}\n\nfunction isAgentGuiWorkbenchCompactVisibleFrame(\n frame: WorkbenchFrame,\n defaultFrame: WorkbenchFrame\n): boolean {\n return frame.width !== defaultFrame.width || frame.x !== defaultFrame.x;\n}\n\nexport function resolveAgentGuiWorkbenchContributionCopy(\n copy?: AgentGuiWorkbenchContributionCopyOverrides\n): AgentGuiWorkbenchContributionCopy {\n return {\n ...agentGuiWorkbenchDefaultCopy,\n ...copy\n };\n}\n\nfunction createAgentGuiWorkbenchDockEntry(input: {\n iconUrl?: string;\n label: string;\n order: number;\n provider: AgentGuiWorkbenchProvider;\n renderPreview?: CreateAgentGuiWorkbenchContributionInput[\"renderPreview\"];\n resolveDockPopupTitle?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupTitle\"];\n sectionId: string;\n visibility: WorkbenchHostDockEntry[\"visibility\"];\n}): WorkbenchHostDockEntry {\n return {\n icon: createElement(\"img\", {\n alt: \"\",\n draggable: false,\n src: input.iconUrl\n }),\n iconSize: \"large\",\n id: agentGuiWorkbenchDockEntryId(input.provider),\n label: input.label,\n launchBehavior: \"enabled\",\n launchPayload: { provider: input.provider },\n matchNode: (node) =>\n node.data.typeId === agentGuiWorkbenchTypeId &&\n agentGuiWorkbenchProviderFromIdentifier(node.data.instanceId) ===\n input.provider,\n order: input.order,\n providePopupItemPreview: (item) =>\n input.renderPreview\n ? createAgentGuiWorkbenchPreviewContent({\n item,\n label: input.label,\n provider: input.provider,\n renderPreview: input.renderPreview,\n resolveDockPopupTitle: input.resolveDockPopupTitle\n })\n : null,\n resolvePopupItem: ({ externalNodeState }) => {\n const title =\n input.resolveDockPopupTitle?.(\n normalizeAgentGuiWorkbenchState(externalNodeState)\n ) ?? null;\n return {\n revision: `${input.provider}\\n${title ?? \"\"}`,\n title\n };\n },\n sectionId: input.sectionId,\n typeId: agentGuiWorkbenchTypeId,\n visibility: input.visibility\n };\n}\n\nfunction createAgentGuiWorkbenchPreviewContent(input: {\n item: WorkbenchHostDockPopupItemInput;\n label?: string;\n provider?: AgentGuiWorkbenchProvider;\n renderPreview: NonNullable<\n CreateAgentGuiWorkbenchContributionInput[\"renderPreview\"]\n >;\n resolveDockPopupTitle?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupTitle\"];\n}): WorkbenchDockPreviewContent {\n const { externalNodeState, node } = input.item;\n const state = normalizeAgentGuiWorkbenchState(externalNodeState);\n const title = input.resolveDockPopupTitle?.(state) ?? node.title;\n const provider =\n input.provider ??\n agentGuiWorkbenchProviderFromIdentifier(node.data.instanceId) ??\n agentGuiWorkbenchProviderFromInstanceId(node.data.instanceId);\n const label = input.label ?? resolveAgentGuiWorkbenchProviderLabel(provider);\n const lines = [label, state.lastActiveAgentSessionId].filter(\n (line): line is string => Boolean(line?.trim())\n );\n return {\n element: input.renderPreview(\n createAgentGuiWorkbenchPreviewBodyContext(input.item),\n {\n nodeTypeId: agentGuiWorkbenchTypeId,\n onStateChange: () => undefined,\n provider\n }\n ),\n kind: \"component\",\n revision: `${provider}\\n${title}\\n${lines.join(\"\\n\")}`\n };\n}\n\nfunction createAgentGuiWorkbenchPreviewBodyContext(\n input: WorkbenchHostDockPopupItemInput\n): WorkbenchHostNodeBodyContext<AgentGuiWorkbenchState | null, unknown> {\n return {\n activation: null,\n displayMode: input.node.displayMode,\n externalNodeState: input.externalNodeState as AgentGuiWorkbenchState | null,\n externalWorkspaceState: input.externalWorkspaceState,\n focus: () => undefined,\n host: input.host,\n instanceId: input.node.data.instanceId,\n instanceKey: input.node.data.instanceKey ?? null,\n isFocused: false,\n node: input.node,\n setNodeRuntimeState: () => undefined,\n setSnapshotNodeState: () => undefined\n };\n}\n","import { createElement, type HTMLAttributes, type ReactNode } from \"react\";\nimport { Button, PanelIcon, cn } from \"@tutti-os/ui-system\";\nimport { EditIcon } from \"@tutti-os/ui-system/icons\";\n\nexport interface AgentGuiWorkbenchHeaderCopy {\n collapseConversationRail: string;\n expandConversationRail: string;\n fallbackAgentLabel: string;\n newConversation: string;\n}\n\nexport interface AgentGuiWorkbenchHeaderProps extends HTMLAttributes<HTMLElement> {\n copy: AgentGuiWorkbenchHeaderCopy;\n defaultActions?: ReactNode;\n isConversationRailAutoCollapsed: boolean;\n isConversationRailCollapsed: boolean;\n conversationTitle?: string | null;\n onCreateConversation?: () => void;\n onToggleConversationRail: (nextCollapsed: boolean) => void;\n title?: string;\n}\n\nexport function AgentGuiWorkbenchHeader({\n className,\n copy,\n defaultActions,\n isConversationRailAutoCollapsed,\n isConversationRailCollapsed,\n conversationTitle,\n onCreateConversation,\n onToggleConversationRail,\n title,\n ...headerProps\n}: AgentGuiWorkbenchHeaderProps): ReactNode {\n const toggleLabel = isConversationRailCollapsed\n ? copy.expandConversationRail\n : copy.collapseConversationRail;\n const appTitle = title?.trim() || copy.fallbackAgentLabel;\n const sessionTitle = conversationTitle?.trim() || \"\";\n\n return createElement(\n \"header\",\n {\n ...headerProps,\n className: cn(\n \"flex h-full min-h-0 items-center justify-between gap-3 bg-[var(--background-panel)] px-2 pl-3\",\n className\n )\n },\n createElement(\n \"div\",\n { className: \"flex min-w-0 flex-1 items-center gap-1\" },\n createElement(\n \"span\",\n {\n className:\n \"shrink-0 truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]\"\n },\n appTitle\n ),\n createElement(\n Button as never,\n {\n \"aria-label\": toggleLabel,\n className: \"cursor-pointer rounded-md\",\n \"data-agent-gui-conversation-rail-auto-collapsed\":\n isConversationRailAutoCollapsed ? \"true\" : undefined,\n \"data-agent-gui-conversation-rail-collapsed\":\n isConversationRailCollapsed ? \"true\" : undefined,\n \"data-testid\": \"agent-gui-toggle-conversation-rail\",\n size: \"icon-xs\",\n title: toggleLabel,\n type: \"button\",\n variant: \"ghost\",\n onClick: (event) => {\n event.stopPropagation();\n onToggleConversationRail(!isConversationRailCollapsed);\n },\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n createElement(PanelIcon, { className: \"size-[18px]\" })\n ),\n isConversationRailCollapsed && onCreateConversation\n ? createElement(\n Button as never,\n {\n \"aria-label\": copy.newConversation,\n className: \"cursor-pointer rounded-md\",\n size: \"icon-xs\",\n title: copy.newConversation,\n type: \"button\",\n variant: \"ghost\",\n onClick: (event) => {\n event.stopPropagation();\n onCreateConversation();\n },\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n createElement(EditIcon, {\n \"aria-hidden\": true,\n className: \"size-[16px]\"\n })\n )\n : null,\n isConversationRailCollapsed && sessionTitle\n ? createElement(\n \"span\",\n {\n className:\n \"min-w-0 max-w-[360px] flex-1 truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]\"\n },\n sessionTitle\n )\n : null\n ),\n createElement(\n \"div\",\n {\n className: \"flex flex-none items-center gap-1\",\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n defaultActions\n )\n );\n}\n"],"mappings":"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","names":["createElement","createElement"]}
@@ -1,5 +1,5 @@
1
- import { f as AgentMentionSearchState, A as AgentContextMentionItem, a as AgentMentionBrowseCategory, b as AgentMentionFilterId, d as AgentMentionGroupId } from '../AgentMentionSearchController-DqssJ2-b.js';
2
- export { c as AgentMentionGroup, e as AgentMentionSearchController } from '../AgentMentionSearchController-DqssJ2-b.js';
1
+ import { f as AgentMentionSearchState, A as AgentContextMentionItem, a as AgentMentionBrowseCategory, b as AgentMentionFilterId, d as AgentMentionGroupId } from '../AgentMentionSearchController-2Vjvmzh3.js';
2
+ export { c as AgentMentionGroup, e as AgentMentionSearchController } from '../AgentMentionSearchController-2Vjvmzh3.js';
3
3
  export { AGENT_CONTEXT_MENTION_PROVIDER_IDS, AgentContextMentionInsertResult, AgentContextMentionProvider, AgentContextMentionProviderId, AgentContextMentionQueryInput } from '../context-mention-provider.js';
4
4
  import '@tutti-os/ui-rich-text/at-panel';
5
5
  import '@tutti-os/ui-rich-text/types';
@@ -4,20 +4,20 @@ import {
4
4
  AgentMentionSearchController,
5
5
  flattenAgentMentionPaletteEntries,
6
6
  groupStartKeys
7
- } from "../chunk-VNAQ6QFE.js";
8
- import "../chunk-OJ5WX7SZ.js";
9
- import "../chunk-CDTTIUPL.js";
7
+ } from "../chunk-5BVKJM77.js";
8
+ import "../chunk-B7DTDZVT.js";
9
+ import "../chunk-F7XLV7M3.js";
10
10
  import "../chunk-MTFSQWZ6.js";
11
11
  import "../chunk-IBIMGLCD.js";
12
- import "../chunk-KHTIC52P.js";
12
+ import "../chunk-XAQQN6MP.js";
13
13
  import "../chunk-XJ34OIEQ.js";
14
- import "../chunk-O5TUTXHT.js";
14
+ import "../chunk-222YHU5Z.js";
15
15
  import "../chunk-TYGL25EL.js";
16
16
  import {
17
17
  AGENT_CONTEXT_MENTION_PROVIDER_IDS
18
- } from "../chunk-HIREVEZM.js";
18
+ } from "../chunk-JM24HADP.js";
19
19
  import "../chunk-GCBDIQDX.js";
20
- import "../chunk-65YMY2M3.js";
20
+ import "../chunk-GLDKFIWM.js";
21
21
  import "../chunk-LUGELG5V.js";
22
22
  import "../chunk-PJP5BUU6.js";
23
23
  export {
@@ -1,4 +1,4 @@
1
- import { RichTextTriggerProvider, RichTextTriggerQueryInput } from '@tutti-os/ui-rich-text/types';
1
+ import { RichTextTriggerProvider, RichTextTriggerInsertResult, RichTextTriggerQueryInput } from '@tutti-os/ui-rich-text/types';
2
2
  import { TuttiExternalAtProviderId } from '@tutti-os/workspace-external-core/contracts';
3
3
 
4
4
  declare const AGENT_CONTEXT_MENTION_PROVIDER_IDS: {
@@ -12,45 +12,9 @@ type AgentContextMentionProviderId = TuttiExternalAtProviderId;
12
12
  type AgentContextMentionQueryInput = RichTextTriggerQueryInput & {
13
13
  trigger: "@";
14
14
  };
15
- interface AgentContextMentionPresentation {
16
- agentProviderId?: string;
17
- agentIconUrl?: string;
18
- iconUrl?: string;
19
- thumbnailUrl?: string;
20
- subtitle?: string;
21
- description?: string;
22
- participant?: string;
23
- status?: string;
24
- statusDataStatus?: string;
25
- statusLabel?: string;
26
- statusPulse?: string;
27
- userAvatarPlaceholderUrl?: string;
28
- /**
29
- * 应用是否能够提供产物文件(reference)。"true" 表示支持,缺省/其它值表示不支持。
30
- * 仅用于 @ 面板行末尾「查看产物文件」入口的展示判断,不持久化到 mention 节点。
31
- */
32
- referencesListSupported?: string;
33
- }
34
- type AgentContextMentionInsertResult = {
35
- kind: "mention";
36
- mention: {
37
- entityId: string;
38
- label: string;
39
- scope?: Readonly<Record<string, string>>;
40
- presentation?: AgentContextMentionPresentation;
41
- };
42
- } | {
43
- kind: "markdown-link";
44
- label: string;
45
- href: string;
46
- } | {
47
- kind: "text";
48
- text: string;
49
- };
50
- type AgentContextMentionProvider<TItem = any> = Omit<RichTextTriggerProvider<TItem>, "toInsertResult"> & {
15
+ type AgentContextMentionInsertResult = RichTextTriggerInsertResult;
16
+ type AgentContextMentionProvider<TItem = any> = Omit<RichTextTriggerProvider<TItem>, "trigger"> & {
51
17
  trigger: "@";
52
- toInsertResult: (item: TItem) => AgentContextMentionInsertResult;
53
- getItemIconUrl?: (item: TItem) => string | null | undefined | Promise<string | null | undefined>;
54
18
  };
55
19
 
56
- export { AGENT_CONTEXT_MENTION_PROVIDER_IDS, type AgentContextMentionInsertResult, type AgentContextMentionPresentation, type AgentContextMentionProvider, type AgentContextMentionProviderId, type AgentContextMentionQueryInput };
20
+ export { AGENT_CONTEXT_MENTION_PROVIDER_IDS, type AgentContextMentionInsertResult, type AgentContextMentionProvider, type AgentContextMentionProviderId, type AgentContextMentionQueryInput };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AGENT_CONTEXT_MENTION_PROVIDER_IDS
3
- } from "./chunk-HIREVEZM.js";
3
+ } from "./chunk-JM24HADP.js";
4
4
  export {
5
5
  AGENT_CONTEXT_MENTION_PROVIDER_IDS
6
6
  };
@@ -471,6 +471,7 @@ declare const agentGuiI18nResources: {
471
471
  readonly slashStatusContextUnavailable: "Context usage unavailable";
472
472
  readonly slashStatusLimitsUnavailable: "Rate limits unavailable from this agent";
473
473
  readonly usageChipLabel: "Context {{percent}}%";
474
+ readonly usageTooltipLabel: "Context usage";
474
475
  readonly usagePopoverTitle: "Plan usage";
475
476
  readonly usageContextWindowLabel: "Context window";
476
477
  readonly usageTokensLabel: "Tokens";
@@ -624,6 +625,7 @@ declare const agentGuiI18nResources: {
624
625
  readonly sectionEarlier: "Earlier";
625
626
  readonly projectSectionEdit: "New session";
626
627
  readonly projectSectionMoreActions: "Project actions";
628
+ readonly projectSectionViewFiles: "Open folder";
627
629
  readonly projectRailCreateProject: "New project";
628
630
  readonly projectRailLinkExistingProject: "Link existing project folder";
629
631
  readonly removeProject: "Remove";
@@ -768,7 +770,7 @@ declare const agentGuiI18nResources: {
768
770
  readonly referenceWorkspaceFiles: "Reference workspace files";
769
771
  readonly referencePicker: {
770
772
  readonly clearFilter: "Clear filter";
771
- readonly confirm: "Use selected references";
773
+ readonly confirm: "Use references";
772
774
  readonly emptyDirectory: "This folder is empty.";
773
775
  readonly emptyPreview: "Select a file to see details";
774
776
  readonly emptySearch: "No matching files or folders.";
@@ -2846,6 +2848,7 @@ declare const agentGuiI18nResources: {
2846
2848
  readonly slashStatusContextUnavailable: "上下文用量不可用";
2847
2849
  readonly slashStatusLimitsUnavailable: "当前 Agent 未提供额度限制";
2848
2850
  readonly usageChipLabel: "上下文 {{percent}}%";
2851
+ readonly usageTooltipLabel: "上下文用量";
2849
2852
  readonly usagePopoverTitle: "计划用量";
2850
2853
  readonly usageContextWindowLabel: "上下文窗口";
2851
2854
  readonly usageTokensLabel: "Token 用量";
@@ -2999,6 +3002,7 @@ declare const agentGuiI18nResources: {
2999
3002
  readonly sectionEarlier: "更早";
3000
3003
  readonly projectSectionEdit: "新建会话";
3001
3004
  readonly projectSectionMoreActions: "项目操作";
3005
+ readonly projectSectionViewFiles: "打开文件夹";
3002
3006
  readonly projectRailCreateProject: "新建项目";
3003
3007
  readonly projectRailLinkExistingProject: "关联已有项目文件";
3004
3008
  readonly removeProject: "移除";
@@ -3143,7 +3147,7 @@ declare const agentGuiI18nResources: {
3143
3147
  readonly referenceWorkspaceFiles: "引用空间文件";
3144
3148
  readonly referencePicker: {
3145
3149
  readonly clearFilter: "清除筛选";
3146
- readonly confirm: "使用已选引用";
3150
+ readonly confirm: "引用文件";
3147
3151
  readonly emptyDirectory: "当前目录为空";
3148
3152
  readonly emptyPreview: "选择一个文件查看详情";
3149
3153
  readonly emptySearch: "没有匹配的文件或文件夹";
@@ -6,7 +6,7 @@ import {
6
6
  translate,
7
7
  translateInUiLanguage,
8
8
  useTranslation
9
- } from "../chunk-65YMY2M3.js";
9
+ } from "../chunk-GLDKFIWM.js";
10
10
  export {
11
11
  AgentGuiI18nProvider,
12
12
  agentGuiI18nModule,
package/dist/index.d.ts CHANGED
@@ -7,9 +7,9 @@ import { I18nRuntime } from '@tutti-os/ui-i18n-runtime';
7
7
  import { WorkspaceUserProjectService } from '@tutti-os/workspace-user-project/contracts';
8
8
  import { ReferenceLocateTarget, WorkspaceFileReferenceAdapter, WorkspaceFileReference } from '@tutti-os/workspace-file-reference/contracts';
9
9
  import { ReferenceSourceAggregator } from '@tutti-os/workspace-file-reference/core';
10
- import { W as WorkspaceLinkAction } from './workspaceLinkActions-Mjktl_Be.js';
11
- import { A as AgentContextMentionItem } from './AgentMentionSearchController-DqssJ2-b.js';
12
- export { p as preloadAgentMentionBrowse } from './AgentMentionSearchController-DqssJ2-b.js';
10
+ import { W as WorkspaceLinkAction } from './workspaceLinkActions-CqWZaCY4.js';
11
+ import { A as AgentContextMentionItem } from './AgentMentionSearchController-2Vjvmzh3.js';
12
+ export { p as preloadAgentMentionBrowse } from './AgentMentionSearchController-2Vjvmzh3.js';
13
13
  import { AgentContextMentionProvider } from './context-mention-provider.js';
14
14
  export { AGENT_CONTEXT_MENTION_PROVIDER_IDS, AgentContextMentionProviderId } from './context-mention-provider.js';
15
15
  import { A as AgentMessageMarkdownWorkspaceAppIcon } from './AgentMessageMarkdown-DeYPURtF.js';
@@ -293,6 +293,16 @@ interface AgentActivityRuntimeReadSessionAttachmentInput {
293
293
  attachmentId: string;
294
294
  workspaceId: string;
295
295
  }
296
+ type AgentActivityRuntimePromptContentBlock = AgentActivitySendInput["content"][number] & {
297
+ url?: string;
298
+ };
299
+ interface AgentActivityRuntimeUploadPromptContentInput {
300
+ content: AgentActivityRuntimePromptContentBlock[];
301
+ workspaceId: string;
302
+ }
303
+ interface AgentActivityRuntimeUploadPromptContentResult {
304
+ content: AgentActivityRuntimePromptContentBlock[];
305
+ }
296
306
  interface AgentActivityRuntimeSessionAttachment {
297
307
  attachmentId: string;
298
308
  mimeType: string;
@@ -317,6 +327,7 @@ interface AgentActivityRuntime {
317
327
  /** @deprecated Use ensureSessionSynchronized. */
318
328
  retainSessionEvents(input: AgentActivityRuntimeRetainSessionEventsInput): () => void;
319
329
  sendInput(input: AgentActivitySendInput): Promise<AgentActivitySession>;
330
+ uploadPromptContent?(input: AgentActivityRuntimeUploadPromptContentInput): Promise<AgentActivityRuntimeUploadPromptContentResult>;
320
331
  readSessionAttachment?(input: AgentActivityRuntimeReadSessionAttachmentInput): Promise<AgentActivityRuntimeSessionAttachment>;
321
332
  setSessionPinned(input: AgentActivityRuntimeSetSessionPinnedInput): Promise<AgentActivitySession>;
322
333
  trackSettingsProjectChange?(input: AgentActivityRuntimeTrackSettingsProjectChangeInput): Promise<void>;
@@ -849,4 +860,4 @@ interface AgentActivityHostProviderProps extends PropsWithChildren {
849
860
  }
850
861
  declare function AgentActivityHostProvider({ agentActivityRuntime, agentHostApi, children }: AgentActivityHostProviderProps): JSX.Element;
851
862
 
852
- export { AgentActivityHostProvider, type AgentActivityHostProviderProps, type AgentActivityRuntime, type AgentActivityRuntimeListSessionMessagesInput, AgentActivityRuntimeProvider, type AgentActivityRuntimeProviderProps, type AgentActivityRuntimeRetainSessionEventsInput, type AgentActivityRuntimeSetSessionPinnedInput, type AgentActivityRuntimeUpdateSessionSettingsInput, type AgentActivityRuntimeWarmupOpenclawGatewayInput, type AgentActivitySnapshotProjection, AgentContextMentionProvider, AgentGUI, type AgentGUIProps, AgentGuiI18nLocale, type AgentHostApi, type AgentHostInputApi, type AgentHostRuntimeApi, type AgentProbeProvider, type AgentProbeSnapshot, type AgentProviderProbeListInput, type AgentProviderProbeListResult, type AgentUsageQuota, type AgentUsageSnapshot, agentGuiDockIconUrl, agentGuiDockIconUrls, agentHostSnapshotFromAgentActivitySnapshot, buildAgentActivitySnapshotProjection, getAgentActivityRuntime, getOptionalAgentActivityRuntime, projectCoreSessionStatus, resetAgentActivityRuntimeForTests, resolveAgentGUIExpandedWindowFrame, setAgentActivityRuntimeForTests, shouldAutoCollapseAgentGUIConversationRail, useAgentActivityRuntime, useAgentActivitySnapshot, useOptionalAgentActivityRuntime };
863
+ export { AgentActivityHostProvider, type AgentActivityHostProviderProps, type AgentActivityRuntime, type AgentActivityRuntimeListSessionMessagesInput, type AgentActivityRuntimePromptContentBlock, AgentActivityRuntimeProvider, type AgentActivityRuntimeProviderProps, type AgentActivityRuntimeRetainSessionEventsInput, type AgentActivityRuntimeSetSessionPinnedInput, type AgentActivityRuntimeUpdateSessionSettingsInput, type AgentActivityRuntimeUploadPromptContentInput, type AgentActivityRuntimeUploadPromptContentResult, type AgentActivityRuntimeWarmupOpenclawGatewayInput, type AgentActivitySnapshotProjection, AgentContextMentionProvider, AgentGUI, type AgentGUIProps, AgentGuiI18nLocale, type AgentHostApi, type AgentHostInputApi, type AgentHostRuntimeApi, type AgentProbeProvider, type AgentProbeSnapshot, type AgentProviderProbeListInput, type AgentProviderProbeListResult, type AgentUsageQuota, type AgentUsageSnapshot, agentGuiDockIconUrl, agentGuiDockIconUrls, agentHostSnapshotFromAgentActivitySnapshot, buildAgentActivitySnapshotProjection, getAgentActivityRuntime, getOptionalAgentActivityRuntime, projectCoreSessionStatus, resetAgentActivityRuntimeForTests, resolveAgentGUIExpandedWindowFrame, setAgentActivityRuntimeForTests, shouldAutoCollapseAgentGUIConversationRail, useAgentActivityRuntime, useAgentActivitySnapshot, useOptionalAgentActivityRuntime };