@tutti-os/agent-gui 0.0.132 → 0.0.133

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 (54) hide show
  1. package/README.md +5 -2
  2. package/dist/agent-conversation/index.d.ts +4 -6
  3. package/dist/agent-conversation/index.js +3 -3
  4. package/dist/agent-env/index.d.ts +10 -27
  5. package/dist/agent-env/index.js +14 -290
  6. package/dist/agent-env/index.js.map +1 -1
  7. package/dist/agent-gui.d.ts +1090 -20
  8. package/dist/agent-gui.js +7 -7
  9. package/dist/agent-message-center/index.d.ts +42 -7
  10. package/dist/agent-message-center/index.js +2 -2
  11. package/dist/{agentConversationVM-BD0-gg6C.d.ts → agentConversationVM-DWEy7jzx.d.ts} +41 -2
  12. package/dist/{agentGuiNodeTypes-5TL1hyCN.d.ts → agentGuiNodeTypes-B57MfwVo.d.ts} +5 -22
  13. package/dist/agents.d.ts +1 -1
  14. package/dist/agents.js +1 -1
  15. package/dist/app/renderer/agentactivity.css +1 -0
  16. package/dist/app/renderer/assets/icons/@-lined.svg +1 -8
  17. package/dist/{chunk-JZS4SWFJ.js → chunk-A6NSHCRP.js} +8 -7
  18. package/dist/chunk-A6NSHCRP.js.map +1 -0
  19. package/dist/chunk-FM42UN2J.js +462 -0
  20. package/dist/chunk-FM42UN2J.js.map +1 -0
  21. package/dist/{chunk-PQJXWXTS.js → chunk-GBBNYGL7.js} +2 -2
  22. package/dist/{chunk-GCQYN7BR.js → chunk-HCRROERX.js} +2 -2
  23. package/dist/{chunk-G75CPIVV.js → chunk-IZ626FDO.js} +563 -444
  24. package/dist/chunk-IZ626FDO.js.map +1 -0
  25. package/dist/{chunk-YWHGCKMT.js → chunk-N62NVPHT.js} +7 -7
  26. package/dist/chunk-N62NVPHT.js.map +1 -0
  27. package/dist/{chunk-T2NICA5D.js → chunk-VS5BRBY6.js} +4 -1
  28. package/dist/chunk-VS5BRBY6.js.map +1 -0
  29. package/dist/{contribution-yc4CGJmy.d.ts → contribution-BbW-kkpi.d.ts} +52 -1
  30. package/dist/custom-mention.d.ts +4 -2
  31. package/dist/i18n/index.d.ts +11 -6
  32. package/dist/index.d.ts +7982 -33
  33. package/dist/index.js +7 -7
  34. package/dist/runtime-Dwf44VKc.d.ts +7 -0
  35. package/dist/{types-BicfRVrV.d.ts → types-BeAVr4of.d.ts} +3 -5
  36. package/dist/workbench/contribution.d.ts +1 -2
  37. package/dist/workbench/contribution.js +2 -2
  38. package/dist/workbench/index.d.ts +1 -2
  39. package/dist/workbench/index.js +2 -2
  40. package/dist/workspace-agent-generated-files.d.ts +12 -1
  41. package/package.json +13 -13
  42. package/dist/AgentGUI-DxypmD7b.d.ts +0 -1080
  43. package/dist/agentPlanPromptDispatch-C7cCMjve.d.ts +0 -37
  44. package/dist/chunk-G75CPIVV.js.map +0 -1
  45. package/dist/chunk-JZS4SWFJ.js.map +0 -1
  46. package/dist/chunk-T2NICA5D.js.map +0 -1
  47. package/dist/chunk-VMQNG2KI.js +0 -178
  48. package/dist/chunk-VMQNG2KI.js.map +0 -1
  49. package/dist/chunk-YWHGCKMT.js.map +0 -1
  50. package/dist/pastedTextKinds-D-XuInaS.d.ts +0 -4
  51. package/dist/runtime-BBNdWgDU.d.ts +0 -10
  52. package/dist/workspaceAgentActivityListTypes-DZfS_HgG.d.ts +0 -48
  53. /package/dist/{chunk-PQJXWXTS.js.map → chunk-GBBNYGL7.js.map} +0 -0
  54. /package/dist/{chunk-GCQYN7BR.js.map → chunk-HCRROERX.js.map} +0 -0
@@ -6,6 +6,7 @@ function normalizeAgentGUIAgents(agents) {
6
6
  const agentTargetId = agent.agentTargetId.trim();
7
7
  const name = agent.name.trim();
8
8
  const iconUrl = agent.iconUrl.trim();
9
+ const sidebarIconUrl = agent.sidebarIconUrl?.trim() ?? "";
9
10
  const heroImageUrl = agent.heroImageUrl?.trim() ?? "";
10
11
  if (!agentTargetId || !name || !iconUrl || seenAgentTargetIds.has(agentTargetId)) {
11
12
  continue;
@@ -18,6 +19,7 @@ function normalizeAgentGUIAgents(agents) {
18
19
  agentTargetId,
19
20
  name,
20
21
  iconUrl,
22
+ ...sidebarIconUrl ? { sidebarIconUrl } : {},
21
23
  ...heroImageUrl ? { heroImageUrl } : {},
22
24
  ...agent.description?.trim() ? { description: agent.description.trim() } : {},
23
25
  ...ownerName || ownerAvatarUrl ? {
@@ -67,6 +69,7 @@ function projectAgentGUIAgentsToInternalTargets(agents) {
67
69
  availability: agent.availability,
68
70
  ...agent.description ? { description: agent.description } : {},
69
71
  iconUrl: agent.iconUrl,
72
+ ...agent.sidebarIconUrl ? { sidebarIconUrl: agent.sidebarIconUrl } : {},
70
73
  ...agent.heroImageUrl ? { heroImageUrl: agent.heroImageUrl } : {},
71
74
  ...agent.owner?.avatarUrl ? {
72
75
  badge: {
@@ -98,4 +101,4 @@ export {
98
101
  resolveAgentGUISelectedDirectoryAgent,
99
102
  projectAgentGUIAgentsToInternalTargets
100
103
  };
101
- //# sourceMappingURL=chunk-T2NICA5D.js.map
104
+ //# sourceMappingURL=chunk-VS5BRBY6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../agents.ts"],"sourcesContent":["import type {\n AgentGUIAgent,\n AgentGUIAgentAvailabilityStatus,\n AgentGUIAgentTarget\n} from \"./types.ts\";\n\nexport function normalizeAgentGUIAgents(\n agents: readonly AgentGUIAgent[] | null | undefined\n): AgentGUIAgent[] {\n const normalized: AgentGUIAgent[] = [];\n const seenAgentTargetIds = new Set<string>();\n for (const agent of agents ?? []) {\n const agentTargetId = agent.agentTargetId.trim();\n const name = agent.name.trim();\n const iconUrl = agent.iconUrl.trim();\n const sidebarIconUrl = agent.sidebarIconUrl?.trim() ?? \"\";\n const heroImageUrl = agent.heroImageUrl?.trim() ?? \"\";\n if (\n !agentTargetId ||\n !name ||\n !iconUrl ||\n seenAgentTargetIds.has(agentTargetId)\n ) {\n continue;\n }\n seenAgentTargetIds.add(agentTargetId);\n const ownerName = agent.owner?.name?.trim() ?? \"\";\n const ownerAvatarUrl = agent.owner?.avatarUrl?.trim() ?? \"\";\n const reason = agent.availability.reason?.trim() ?? \"\";\n normalized.push({\n agentTargetId,\n name,\n iconUrl,\n ...(sidebarIconUrl ? { sidebarIconUrl } : {}),\n ...(heroImageUrl ? { heroImageUrl } : {}),\n ...(agent.description?.trim()\n ? { description: agent.description.trim() }\n : {}),\n ...(ownerName || ownerAvatarUrl\n ? {\n owner: {\n ...(ownerName ? { name: ownerName } : {}),\n ...(ownerAvatarUrl ? { avatarUrl: ownerAvatarUrl } : {})\n }\n }\n : {}),\n ...(agent.ownership === \"self\" || agent.ownership === \"shared\"\n ? { ownership: agent.ownership }\n : {}),\n availability: {\n status: normalizeAgentGUIAgentAvailabilityStatus(\n agent.availability.status\n ),\n ...(reason ? { reason } : {}),\n ...(agent.availability.pendingAction\n ? { pendingAction: agent.availability.pendingAction }\n : {})\n },\n provider: agent.provider,\n ...(agent.setupKind === \"target_runtime\"\n ? { setupKind: \"target_runtime\" as const }\n : {})\n });\n }\n return normalized;\n}\n\nexport function agentGUIAgentIsReady(agent: AgentGUIAgent): boolean {\n return agent.availability.status === \"ready\";\n}\n\nexport function resolveAgentGUISelectedDirectoryAgent(input: {\n agents: readonly AgentGUIAgent[];\n agentTargetId?: string | null;\n defaultAgentTargetId?: string | null;\n}): AgentGUIAgent | null {\n const explicitAgentTargetId =\n input.agentTargetId?.trim() || input.defaultAgentTargetId?.trim() || \"\";\n if (explicitAgentTargetId) {\n return (\n input.agents.find(\n (agent) => agent.agentTargetId === explicitAgentTargetId\n ) ?? null\n );\n }\n return (\n input.agents.find((agent) => agentGUIAgentIsReady(agent)) ??\n input.agents[0] ??\n null\n );\n}\n\n/** Package-internal bridge while the carried node is migrated to agent names. */\nexport function projectAgentGUIAgentsToInternalTargets(\n agents: readonly AgentGUIAgent[]\n): AgentGUIAgentTarget[] {\n return agents.map((agent) => ({\n targetId: agent.agentTargetId,\n agentTargetId: agent.agentTargetId,\n provider: agent.provider,\n ref: {\n kind: \"agent-directory\",\n provider: agent.provider,\n agentTargetId: agent.agentTargetId,\n ...(agent.setupKind ? { setupKind: agent.setupKind } : {})\n },\n label: agent.name,\n availability: agent.availability,\n ...(agent.description ? { description: agent.description } : {}),\n iconUrl: agent.iconUrl,\n ...(agent.sidebarIconUrl ? { sidebarIconUrl: agent.sidebarIconUrl } : {}),\n ...(agent.heroImageUrl ? { heroImageUrl: agent.heroImageUrl } : {}),\n ...(agent.owner?.avatarUrl\n ? {\n badge: {\n iconUrl: agent.owner.avatarUrl,\n ...(agent.owner.name ? { label: agent.owner.name } : {})\n }\n }\n : {}),\n ...(agent.owner?.name ? { ownerLabel: agent.owner.name } : {}),\n ...(agent.ownership ? { ownership: agent.ownership } : {}),\n ...(agent.availability.status !== \"ready\" && !agent.setupKind\n ? { disabled: true }\n : {}),\n ...(agent.availability.reason\n ? { unavailableReason: agent.availability.reason }\n : {})\n }));\n}\n\nfunction normalizeAgentGUIAgentAvailabilityStatus(\n status: AgentGUIAgentAvailabilityStatus\n): AgentGUIAgentAvailabilityStatus {\n switch (status) {\n case \"ready\":\n case \"checking\":\n case \"coming_soon\":\n case \"not_installed\":\n case \"auth_required\":\n case \"unavailable\":\n return status;\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,9 +1,60 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { AgentSessionEngineState, AgentSessionEngine } from '@tutti-os/agent-activity-core';
3
3
  import { WorkbenchFrame, WorkbenchHostDockEntry, WorkbenchHostLaunchRequest, WorkbenchHostNodeBodyContext, WorkbenchContribution } from '@tutti-os/workbench-surface';
4
- import { A as AgentGUIAgent, d as AgentGUIAgentDirectoryPort } from './types-BicfRVrV.js';
5
4
  import { AgentGuiWorkbenchProvider, AgentGuiWorkbenchState } from './workbench/types.js';
6
5
 
6
+ /**
7
+ * Open runtime metadata reported by an Agent Target.
8
+ *
9
+ * Built-in providers still use AgentProvider, while externally installed ACP
10
+ * extensions use namespaced values such as `acp:gemini`.
11
+ */
12
+ type AgentGUIProvider = string;
13
+ type AgentGUIAgentAvailabilityStatus = "ready" | "checking" | "coming_soon" | "not_installed" | "auth_required" | "unavailable";
14
+ type AgentGUIAgentAvailabilityAction = "install" | "login" | "refresh";
15
+ interface AgentGUIAgentAvailability {
16
+ status: AgentGUIAgentAvailabilityStatus;
17
+ reason?: string | null;
18
+ pendingAction?: AgentGUIAgentAvailabilityAction | null;
19
+ }
20
+ interface AgentGUIAgentOwner {
21
+ name?: string | null;
22
+ avatarUrl?: string | null;
23
+ }
24
+ /** Host-authoritative ownership classification for Agent directory entries. */
25
+ type AgentGUIAgentOwnership = "self" | "shared";
26
+ /**
27
+ * Host-projected entry from the workspace `/agents` directory.
28
+ *
29
+ * `agentTargetId` is the only UI and launch identity. `provider` remains
30
+ * execution metadata for provider-native composer/runtime policy and must not
31
+ * be used to group, deduplicate, name, or select entries.
32
+ */
33
+ interface AgentGUIAgent {
34
+ agentTargetId: string;
35
+ name: string;
36
+ iconUrl: string;
37
+ sidebarIconUrl?: string | null;
38
+ heroImageUrl?: string | null;
39
+ description?: string | null;
40
+ owner?: AgentGUIAgentOwner | null;
41
+ ownership?: AgentGUIAgentOwnership | null;
42
+ availability: AgentGUIAgentAvailability;
43
+ provider: AgentGUIProvider;
44
+ setupKind?: "target_runtime" | null;
45
+ }
46
+ type AgentGUIAgentDirectoryStatus = "idle" | "loading" | "ready" | "error";
47
+ interface AgentGUIAgentDirectorySnapshot {
48
+ agents: readonly AgentGUIAgent[];
49
+ capturedAtUnixMs: number | null;
50
+ error: string | null;
51
+ status: AgentGUIAgentDirectoryStatus;
52
+ }
53
+ interface AgentGUIAgentDirectoryPort {
54
+ getSnapshot(): AgentGUIAgentDirectorySnapshot;
55
+ subscribe(listener: () => void): () => void;
56
+ }
57
+
7
58
  interface AgentGuiWorkbenchConversationIdentity {
8
59
  agentTitle?: string | null;
9
60
  iconUrl?: string | null;
@@ -1,5 +1,4 @@
1
1
  import { ReactNode } from 'react';
2
- export { A as AGENT_PASTED_TEXT_BLOCK_KIND, a as AGENT_PASTED_TEXT_MENTION_KIND } from './pastedTextKinds-D-XuInaS.js';
3
2
 
4
3
  interface AgentCustomMentionIdentity {
5
4
  entityId: string;
@@ -45,4 +44,7 @@ declare function registerAgentCustomMentionKind(definition: AgentCustomMentionKi
45
44
  declare function getAgentCustomMentionKind(kind: string): AgentCustomMentionKindDefinition | undefined;
46
45
  declare function resetAgentCustomMentionKindsForTests(): void;
47
46
 
48
- export { type AgentCustomMentionChipContext, type AgentCustomMentionIdentity, type AgentCustomMentionKindDefinition, type AgentCustomMentionPresentation, getAgentCustomMentionKind, registerAgentCustomMentionKind, resetAgentCustomMentionKindsForTests };
47
+ declare const AGENT_PASTED_TEXT_BLOCK_KIND = "pasted-text";
48
+ declare const AGENT_PASTED_TEXT_MENTION_KIND = "pasted-text";
49
+
50
+ export { AGENT_PASTED_TEXT_BLOCK_KIND, AGENT_PASTED_TEXT_MENTION_KIND, type AgentCustomMentionChipContext, type AgentCustomMentionIdentity, type AgentCustomMentionKindDefinition, type AgentCustomMentionPresentation, getAgentCustomMentionKind, registerAgentCustomMentionKind, resetAgentCustomMentionKindsForTests };
@@ -1,8 +1,13 @@
1
1
  import * as _tutti_os_ui_i18n_runtime from '@tutti-os/ui-i18n-runtime';
2
- import { I18nRuntime } from '@tutti-os/ui-i18n-runtime';
3
- import react__default, { ReactNode } from 'react';
4
- import { A as AgentGuiI18nLocale, T as TranslateFn, g as getActiveUiLanguage$1, t as translate$1, b as translateInUiLanguage$1 } from '../runtime-BBNdWgDU.js';
5
- export { a as TranslateOptions } from '../runtime-BBNdWgDU.js';
2
+ import { I18nParams, I18nRuntime } from '@tutti-os/ui-i18n-runtime';
3
+ import React, { ReactNode } from 'react';
4
+
5
+ type AgentGuiI18nLocale = "en" | "zh-CN";
6
+ type TranslateOptions = I18nParams;
7
+ type TranslateFn = (key: string, options?: TranslateOptions) => string;
8
+ declare function translate$1(key: string, options?: TranslateOptions): string;
9
+ declare function translateInUiLanguage$1(locale: AgentGuiI18nLocale, key: string, options?: TranslateOptions): string;
10
+ declare function getActiveUiLanguage$1(): AgentGuiI18nLocale;
6
11
 
7
12
  declare const agentGuiI18nResources: {
8
13
  readonly en: {
@@ -5183,11 +5188,11 @@ declare function AgentGuiI18nProvider({ children, locale, runtime }: {
5183
5188
  children: ReactNode;
5184
5189
  locale?: AgentGuiI18nLocale;
5185
5190
  runtime?: I18nRuntime<string> | null;
5186
- }): react__default.ReactElement;
5191
+ }): React.ReactElement;
5187
5192
  declare function useTranslation(): {
5188
5193
  i18n: I18nRuntime<string>;
5189
5194
  locale: AgentGuiI18nLocale;
5190
5195
  t: TranslateFn;
5191
5196
  };
5192
5197
 
5193
- export { AgentGuiI18nLocale, AgentGuiI18nProvider, TranslateFn, agentGuiI18nModule, agentGuiI18nResources, getActiveUiLanguage, translate, translateInUiLanguage, useTranslation };
5198
+ export { type AgentGuiI18nLocale, AgentGuiI18nProvider, type TranslateFn, type TranslateOptions, agentGuiI18nModule, agentGuiI18nResources, getActiveUiLanguage, translate, translateInUiLanguage, useTranslation };