@tutti-os/agent-gui 0.0.107 → 0.0.109

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 (126) hide show
  1. package/dist/{AgentGUI-Do6py-T_.d.ts → AgentGUI-BSr3cWcJ.d.ts} +6 -3
  2. package/dist/AgentRichTextReadonly-42TUVYX5.js +18 -0
  3. package/dist/agent-conversation/index.d.ts +4 -4
  4. package/dist/agent-conversation/index.js +13 -12
  5. package/dist/agent-conversation/index.js.map +1 -1
  6. package/dist/agent-env/index.js +1 -1
  7. package/dist/agent-gui.d.ts +5 -4
  8. package/dist/agent-gui.js +27 -25
  9. package/dist/agent-message-center/index.d.ts +12 -3
  10. package/dist/agent-message-center/index.js +75 -31
  11. package/dist/agent-message-center/index.js.map +1 -1
  12. package/dist/{agentConversationVM-Bf3Zv3iI.d.ts → agentConversationVM-D3Dn2LqN.d.ts} +18 -2
  13. package/dist/{agentGuiNodeTypes-DbgQBiYz.d.ts → agentGuiNodeTypes-CR_l4HhU.d.ts} +6 -3
  14. package/dist/agents.d.ts +1 -1
  15. package/dist/agents.js +1 -1
  16. package/dist/app/renderer/agentactivity.css +65 -3
  17. package/dist/app/renderer/assets/icons/agent-vinyl-beta-tag.svg +5 -0
  18. package/dist/{chunk-OWW7CU4U.js → chunk-25BPR75P.js} +2 -2
  19. package/dist/{chunk-N4WVVCNI.js → chunk-2QHKXI5N.js} +2 -2
  20. package/dist/{chunk-ZWY32ZKZ.js → chunk-34JD75OB.js} +1296 -737
  21. package/dist/chunk-34JD75OB.js.map +1 -0
  22. package/dist/{chunk-KJQERFKX.js → chunk-6CUELYIF.js} +3 -3
  23. package/dist/chunk-6CUELYIF.js.map +1 -0
  24. package/dist/{chunk-TKBEVCHG.js → chunk-7BN2WQ2M.js} +32 -2
  25. package/dist/chunk-7BN2WQ2M.js.map +1 -0
  26. package/dist/chunk-7KVZPJ3O.js +25 -0
  27. package/dist/chunk-7KVZPJ3O.js.map +1 -0
  28. package/dist/{chunk-C35SNDVZ.js → chunk-7OYHDOGG.js} +2 -1
  29. package/dist/chunk-7OYHDOGG.js.map +1 -0
  30. package/dist/{chunk-P3CVAWGJ.js → chunk-A5UXTAYJ.js} +5 -5
  31. package/dist/{chunk-4ZWV57MF.js → chunk-AIZJHA4Q.js} +14 -9
  32. package/dist/chunk-AIZJHA4Q.js.map +1 -0
  33. package/dist/{chunk-QY22OBJS.js → chunk-AY5AFMT2.js} +8 -84
  34. package/dist/chunk-AY5AFMT2.js.map +1 -0
  35. package/dist/{chunk-V5ROOS2O.js → chunk-BM3CSFWU.js} +22 -6
  36. package/dist/chunk-BM3CSFWU.js.map +1 -0
  37. package/dist/{chunk-F7Q7QK42.js → chunk-BRLKORQI.js} +1432 -1902
  38. package/dist/chunk-BRLKORQI.js.map +1 -0
  39. package/dist/{chunk-LDZ6C3YV.js → chunk-E74BMFHI.js} +3 -3
  40. package/dist/chunk-E74BMFHI.js.map +1 -0
  41. package/dist/{chunk-ZSJBCZUH.js → chunk-EBXOSQ5G.js} +102 -73
  42. package/dist/chunk-EBXOSQ5G.js.map +1 -0
  43. package/dist/chunk-J4K7KIFZ.js +75 -0
  44. package/dist/chunk-J4K7KIFZ.js.map +1 -0
  45. package/dist/{chunk-UFIEUC3Y.js → chunk-JBX3JPTC.js} +9 -8
  46. package/dist/chunk-JBX3JPTC.js.map +1 -0
  47. package/dist/{chunk-4YVKAPKW.js → chunk-JLRPIEIE.js} +2 -17
  48. package/dist/chunk-JLRPIEIE.js.map +1 -0
  49. package/dist/{chunk-BXOKBZH4.js → chunk-K7WFXVSD.js} +81 -45
  50. package/dist/chunk-K7WFXVSD.js.map +1 -0
  51. package/dist/{chunk-4YG7YK7S.js → chunk-L2GENUG3.js} +3 -3
  52. package/dist/{chunk-J2HG7UCP.js → chunk-OEYXSD3O.js} +3 -3
  53. package/dist/{chunk-L3GMMGRS.js → chunk-R2ZADXRB.js} +2 -2
  54. package/dist/chunk-R7AXDQCA.js +146 -0
  55. package/dist/chunk-R7AXDQCA.js.map +1 -0
  56. package/dist/{chunk-7MPN2JGL.js → chunk-U4CVBCHD.js} +37 -119
  57. package/dist/chunk-U4CVBCHD.js.map +1 -0
  58. package/dist/{chunk-4YCCATI4.js → chunk-USIFGHT3.js} +17 -4
  59. package/dist/chunk-USIFGHT3.js.map +1 -0
  60. package/dist/{chunk-7BXWPI4F.js → chunk-VMQNG2KI.js} +13 -1
  61. package/dist/{chunk-7BXWPI4F.js.map → chunk-VMQNG2KI.js.map} +1 -1
  62. package/dist/{chunk-SN6UYX54.js → chunk-W6TO6K2X.js} +4 -4
  63. package/dist/{chunk-UGVI47X6.js → chunk-YNSXUEIR.js} +6 -6
  64. package/dist/context-mention-palette/index.js +13 -12
  65. package/dist/{contribution-C6K5YfJ7.d.ts → contribution-C2LDwLA7.d.ts} +3 -2
  66. package/dist/dock-icons.js +3 -3
  67. package/dist/i18n/index.d.ts +31 -1
  68. package/dist/i18n/index.js +2 -2
  69. package/dist/index.d.ts +8 -7
  70. package/dist/index.js +27 -25
  71. package/dist/index.js.map +1 -1
  72. package/dist/mention-search.js +11 -10
  73. package/dist/provider-icons.js +1 -1
  74. package/dist/provider-identity.js +1 -1
  75. package/dist/{types-CnT8rNUI.d.ts → types-yF_0mrNS.d.ts} +1 -0
  76. package/dist/workbench/contribution.d.ts +2 -2
  77. package/dist/workbench/contribution.js +11 -11
  78. package/dist/workbench/index.d.ts +4 -4
  79. package/dist/workbench/index.js +22 -28
  80. package/dist/workbench/launch.d.ts +11 -14
  81. package/dist/workbench/launch.js +5 -11
  82. package/dist/workbench/providerCatalog.js +2 -2
  83. package/dist/workbench/sessionTitle.js +3 -3
  84. package/dist/workbench/state.d.ts +2 -12
  85. package/dist/workbench/state.js +3 -9
  86. package/dist/workspace-agent-generated-files.js +2 -1
  87. package/dist/workspace-query-cache.d.ts +19 -0
  88. package/dist/workspace-query-cache.js +7 -0
  89. package/dist/workspace-query-cache.js.map +1 -0
  90. package/package.json +21 -14
  91. package/dist/@-bold-lined-BLLFKBFI.svg +0 -10
  92. package/dist/AgentRichTextReadonly-F6PHC5SX.js +0 -18
  93. package/dist/add-lined-bold-5QPUDZCU.svg +0 -3
  94. package/dist/chunk-4YCCATI4.js.map +0 -1
  95. package/dist/chunk-4YVKAPKW.js.map +0 -1
  96. package/dist/chunk-4ZWV57MF.js.map +0 -1
  97. package/dist/chunk-7MPN2JGL.js.map +0 -1
  98. package/dist/chunk-BXOKBZH4.js.map +0 -1
  99. package/dist/chunk-C35SNDVZ.js.map +0 -1
  100. package/dist/chunk-F7Q7QK42.js.map +0 -1
  101. package/dist/chunk-H6IQ63DQ.js +0 -14
  102. package/dist/chunk-H6IQ63DQ.js.map +0 -1
  103. package/dist/chunk-KJQERFKX.js.map +0 -1
  104. package/dist/chunk-LDZ6C3YV.js.map +0 -1
  105. package/dist/chunk-QY22OBJS.js.map +0 -1
  106. package/dist/chunk-TKBEVCHG.js.map +0 -1
  107. package/dist/chunk-UFIEUC3Y.js.map +0 -1
  108. package/dist/chunk-V5ROOS2O.js.map +0 -1
  109. package/dist/chunk-ZSJBCZUH.js.map +0 -1
  110. package/dist/chunk-ZWY32ZKZ.js.map +0 -1
  111. package/dist/claudecode-flat-filled-NHO4JCVK.svg +0 -10
  112. package/dist/codex-flat-filled-WYHCF5VR.svg +0 -10
  113. package/dist/cursor-flat-filled-CL7N3BTZ.svg +0 -3
  114. package/dist/handoff-lined-4WQUBVG3.svg +0 -11
  115. package/dist/open-link-lined-JWEKUKME.svg +0 -4
  116. package/dist/opencode-flat-filled-CYAJPX45.svg +0 -4
  117. package/dist/tutti-flat-filled-K32QBTZE.svg +0 -12
  118. /package/dist/{AgentRichTextReadonly-F6PHC5SX.js.map → AgentRichTextReadonly-42TUVYX5.js.map} +0 -0
  119. /package/dist/{chunk-OWW7CU4U.js.map → chunk-25BPR75P.js.map} +0 -0
  120. /package/dist/{chunk-N4WVVCNI.js.map → chunk-2QHKXI5N.js.map} +0 -0
  121. /package/dist/{chunk-P3CVAWGJ.js.map → chunk-A5UXTAYJ.js.map} +0 -0
  122. /package/dist/{chunk-4YG7YK7S.js.map → chunk-L2GENUG3.js.map} +0 -0
  123. /package/dist/{chunk-J2HG7UCP.js.map → chunk-OEYXSD3O.js.map} +0 -0
  124. /package/dist/{chunk-L3GMMGRS.js.map → chunk-R2ZADXRB.js.map} +0 -0
  125. /package/dist/{chunk-SN6UYX54.js.map → chunk-W6TO6K2X.js.map} +0 -0
  126. /package/dist/{chunk-UGVI47X6.js.map → chunk-YNSXUEIR.js.map} +0 -0
@@ -1,8 +1,6 @@
1
1
  import {
2
2
  agentGuiWorkbenchDockEntryId,
3
3
  agentGuiWorkbenchDockIdentityFromIdentifier,
4
- agentGuiWorkbenchInstanceId,
5
- agentGuiWorkbenchProviderFromIdentifier,
6
4
  agentGuiWorkbenchProviderFromLaunchRequest,
7
5
  agentGuiWorkbenchTypeId,
8
6
  agentGuiWorkbenchUnifiedDockEntryId,
@@ -10,20 +8,17 @@ import {
10
8
  createAgentGuiWorkbenchInstanceId,
11
9
  createAgentGuiWorkbenchLaunchDescriptor,
12
10
  createAgentGuiWorkbenchSessionLaunchRequest,
13
- resolveAgentGuiWorkbenchLaunchDockEntryId,
14
- shouldReuseAgentGuiWorkbenchDockEntryNode
15
- } from "../chunk-QY22OBJS.js";
16
- import "../chunk-L3GMMGRS.js";
11
+ resolveAgentGuiWorkbenchLaunchDockEntryId
12
+ } from "../chunk-AY5AFMT2.js";
13
+ import "../chunk-R2ZADXRB.js";
17
14
  import {
18
15
  agentGuiWorkbenchPrefillPromptActivationType
19
16
  } from "../chunk-UHBCM6RO.js";
20
- import "../chunk-KJQERFKX.js";
17
+ import "../chunk-6CUELYIF.js";
21
18
  export {
22
19
  agentGuiWorkbenchDockEntryId,
23
20
  agentGuiWorkbenchDockIdentityFromIdentifier,
24
- agentGuiWorkbenchInstanceId,
25
21
  agentGuiWorkbenchPrefillPromptActivationType,
26
- agentGuiWorkbenchProviderFromIdentifier,
27
22
  agentGuiWorkbenchProviderFromLaunchRequest,
28
23
  agentGuiWorkbenchTypeId,
29
24
  agentGuiWorkbenchUnifiedDockEntryId,
@@ -31,7 +26,6 @@ export {
31
26
  createAgentGuiWorkbenchInstanceId,
32
27
  createAgentGuiWorkbenchLaunchDescriptor,
33
28
  createAgentGuiWorkbenchSessionLaunchRequest,
34
- resolveAgentGuiWorkbenchLaunchDockEntryId,
35
- shouldReuseAgentGuiWorkbenchDockEntryNode
29
+ resolveAgentGuiWorkbenchLaunchDockEntryId
36
30
  };
37
31
  //# sourceMappingURL=launch.js.map
@@ -10,8 +10,8 @@ import {
10
10
  isAgentGuiWorkbenchProvider,
11
11
  normalizeAgentGuiWorkbenchProvider,
12
12
  resolveAgentGuiWorkbenchProviderLabel
13
- } from "../chunk-L3GMMGRS.js";
14
- import "../chunk-KJQERFKX.js";
13
+ } from "../chunk-R2ZADXRB.js";
14
+ import "../chunk-6CUELYIF.js";
15
15
  export {
16
16
  agentGuiWorkbenchComingSoonProviders,
17
17
  agentGuiWorkbenchDefaultDockProviders,
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  resolveAgentGuiWorkbenchHeaderTitle,
3
3
  resolveAgentGuiWorkbenchSessionTitle
4
- } from "../chunk-V5ROOS2O.js";
4
+ } from "../chunk-BM3CSFWU.js";
5
5
  import "../chunk-MIJXEELH.js";
6
- import "../chunk-TKBEVCHG.js";
7
- import "../chunk-KJQERFKX.js";
6
+ import "../chunk-7BN2WQ2M.js";
7
+ import "../chunk-6CUELYIF.js";
8
8
  export {
9
9
  resolveAgentGuiWorkbenchHeaderTitle,
10
10
  resolveAgentGuiWorkbenchSessionTitle
@@ -1,5 +1,5 @@
1
1
  import { WorkbenchHostExternalStateSource, WorkbenchHostExternalStateLookupInput } from '@tutti-os/workbench-surface';
2
- import { AgentGuiWorkbenchProvider, AgentGuiWorkbenchNodeState, AgentGuiWorkbenchState, AgentGuiWorkbenchWorkspaceState } from './types.js';
2
+ import { AgentGuiWorkbenchNodeState, AgentGuiWorkbenchState, AgentGuiWorkbenchWorkspaceState, AgentGuiWorkbenchProvider } from './types.js';
3
3
 
4
4
  type AgentGuiWorkbenchStateLookupRequest = Pick<WorkbenchHostExternalStateLookupInput, "instanceId" | "typeId"> & Partial<Pick<WorkbenchHostExternalStateLookupInput, "nodeId">>;
5
5
  declare function createDefaultAgentGuiWorkbenchNodeState(provider?: AgentGuiWorkbenchProvider): AgentGuiWorkbenchNodeState;
@@ -14,16 +14,6 @@ declare function projectAgentGuiWorkbenchState(state: AgentGuiWorkbenchNodeState
14
14
  declare function areAgentGuiWorkbenchStatesEqual(left: AgentGuiWorkbenchState, right: AgentGuiWorkbenchState): boolean;
15
15
  declare function normalizeAgentGuiWorkbenchNodeState(state: unknown, fallbackProvider?: AgentGuiWorkbenchProvider): AgentGuiWorkbenchNodeState;
16
16
  declare function areAgentGuiWorkbenchNodeStatesEqual(left: AgentGuiWorkbenchNodeState, right: AgentGuiWorkbenchNodeState): boolean;
17
- declare function agentGuiWorkbenchProviderFromInstanceId(instanceId: string | null | undefined): AgentGuiWorkbenchProvider;
18
- /**
19
- * Like {@link agentGuiWorkbenchProviderFromInstanceId} but returns `null`
20
- * instead of defaulting to `"codex"` when the provider cannot be determined
21
- * yet (e.g. a freshly created session whose instanceId does not encode a
22
- * provider). Callers that render a provider icon use this so they can show a
23
- * neutral placeholder during that transient window instead of flashing the
24
- * wrong provider's icon.
25
- */
26
- declare function agentGuiWorkbenchProviderFromInstanceIdOrNull(instanceId: string | null | undefined): AgentGuiWorkbenchProvider | null;
27
17
  declare function createAgentGuiWorkbenchNodeStateSource(input: {
28
18
  typeId?: string;
29
19
  workspaceId: string;
@@ -41,4 +31,4 @@ declare function createAgentGuiWorkbenchNodeStateSource(input: {
41
31
  findInstanceIdByAgentSessionId: (agentSessionId: string) => string | null;
42
32
  };
43
33
 
44
- export { agentGuiWorkbenchProviderFromInstanceId, agentGuiWorkbenchProviderFromInstanceIdOrNull, areAgentGuiWorkbenchNodeStatesEqual, areAgentGuiWorkbenchStatesEqual, createAgentGuiWorkbenchNodeStateSource, createDefaultAgentGuiWorkbenchNodeState, migrateLegacyAgentGuiWorkbenchState, normalizeAgentGuiWorkbenchNodeState, normalizeAgentGuiWorkbenchState, projectAgentGuiWorkbenchState };
34
+ export { areAgentGuiWorkbenchNodeStatesEqual, areAgentGuiWorkbenchStatesEqual, createAgentGuiWorkbenchNodeStateSource, createDefaultAgentGuiWorkbenchNodeState, migrateLegacyAgentGuiWorkbenchState, normalizeAgentGuiWorkbenchNodeState, normalizeAgentGuiWorkbenchState, projectAgentGuiWorkbenchState };
@@ -1,6 +1,4 @@
1
1
  import {
2
- agentGuiWorkbenchProviderFromInstanceId,
3
- agentGuiWorkbenchProviderFromInstanceIdOrNull,
4
2
  areAgentGuiWorkbenchNodeStatesEqual,
5
3
  areAgentGuiWorkbenchStatesEqual,
6
4
  createAgentGuiWorkbenchNodeStateSource,
@@ -9,14 +7,10 @@ import {
9
7
  normalizeAgentGuiWorkbenchNodeState,
10
8
  normalizeAgentGuiWorkbenchState,
11
9
  projectAgentGuiWorkbenchState
12
- } from "../chunk-4YVKAPKW.js";
13
- import "../chunk-QY22OBJS.js";
14
- import "../chunk-L3GMMGRS.js";
15
- import "../chunk-UHBCM6RO.js";
16
- import "../chunk-KJQERFKX.js";
10
+ } from "../chunk-JLRPIEIE.js";
11
+ import "../chunk-R2ZADXRB.js";
12
+ import "../chunk-6CUELYIF.js";
17
13
  export {
18
- agentGuiWorkbenchProviderFromInstanceId,
19
- agentGuiWorkbenchProviderFromInstanceIdOrNull,
20
14
  areAgentGuiWorkbenchNodeStatesEqual,
21
15
  areAgentGuiWorkbenchStatesEqual,
22
16
  createAgentGuiWorkbenchNodeStateSource,
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  changedFilesForSession,
3
3
  collectWorkspaceAgentGeneratedFiles
4
- } from "./chunk-4YCCATI4.js";
4
+ } from "./chunk-USIFGHT3.js";
5
+ import "./chunk-R7AXDQCA.js";
5
6
  import "./chunk-F5UR6EJG.js";
6
7
  export {
7
8
  changedFilesForSession,
@@ -0,0 +1,19 @@
1
+ interface WorkspaceQueryCacheEntry<TValue> {
2
+ readonly resolvedAtUnixMs: number;
3
+ readonly stale: boolean;
4
+ readonly value: TValue;
5
+ readonly version: number;
6
+ }
7
+ interface WorkspaceQueryCache<TValue> {
8
+ claimIngestion(key: string, version: number): boolean;
9
+ invalidate(key?: string): void;
10
+ read(key: string): WorkspaceQueryCacheEntry<TValue> | null;
11
+ request(key: string, load: () => Promise<TValue>): Promise<WorkspaceQueryCacheEntry<TValue>>;
12
+ write(key: string, value: TValue): WorkspaceQueryCacheEntry<TValue>;
13
+ }
14
+ declare function createWorkspaceQueryCache<TValue>(options?: {
15
+ maxEntries?: number;
16
+ now?: () => number;
17
+ }): WorkspaceQueryCache<TValue>;
18
+
19
+ export { type WorkspaceQueryCache, type WorkspaceQueryCacheEntry, createWorkspaceQueryCache };
@@ -0,0 +1,7 @@
1
+ import {
2
+ createWorkspaceQueryCache
3
+ } from "./chunk-J4K7KIFZ.js";
4
+ export {
5
+ createWorkspaceQueryCache
6
+ };
7
+ //# sourceMappingURL=workspace-query-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tutti-os/agent-gui",
3
- "version": "0.0.107",
3
+ "version": "0.0.109",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -73,6 +73,10 @@
73
73
  "types": "./dist/workspace-agent-generated-files.d.ts",
74
74
  "import": "./dist/workspace-agent-generated-files.js"
75
75
  },
76
+ "./workspace-query-cache": {
77
+ "types": "./dist/workspace-query-cache.d.ts",
78
+ "import": "./dist/workspace-query-cache.js"
79
+ },
76
80
  "./i18n": {
77
81
  "types": "./dist/i18n/index.d.ts",
78
82
  "import": "./dist/i18n/index.js"
@@ -124,17 +128,17 @@
124
128
  "@tiptap/react": "^3.11.1",
125
129
  "@tiptap/starter-kit": "^3.11.1",
126
130
  "@tiptap/suggestion": "^3.11.1",
127
- "@tutti-os/agent-activity-core": "0.0.107",
128
- "@tutti-os/ui-i18n-runtime": "0.0.107",
129
- "@tutti-os/ui-react-hooks": "0.0.107",
130
- "@tutti-os/ui-rich-text": "0.0.107",
131
- "@tutti-os/ui-system": "0.0.107",
132
- "@tutti-os/workbench-surface": "0.0.107",
133
- "@tutti-os/workspace-external-core": "0.0.107",
134
- "@tutti-os/workspace-file-manager": "0.0.107",
135
- "@tutti-os/workspace-file-reference": "0.0.107",
136
- "@tutti-os/workspace-issue-manager": "0.0.107",
137
- "@tutti-os/workspace-user-project": "0.0.107",
131
+ "@tutti-os/agent-activity-core": "0.0.109",
132
+ "@tutti-os/ui-i18n-runtime": "0.0.109",
133
+ "@tutti-os/ui-react-hooks": "0.0.109",
134
+ "@tutti-os/ui-rich-text": "0.0.109",
135
+ "@tutti-os/ui-system": "0.0.109",
136
+ "@tutti-os/workbench-surface": "0.0.109",
137
+ "@tutti-os/workspace-external-core": "0.0.109",
138
+ "@tutti-os/workspace-file-manager": "0.0.109",
139
+ "@tutti-os/workspace-file-reference": "0.0.109",
140
+ "@tutti-os/workspace-issue-manager": "0.0.109",
141
+ "@tutti-os/workspace-user-project": "0.0.109",
138
142
  "clsx": "^2.1.1",
139
143
  "framer-motion": "^12.40.0",
140
144
  "lodash": "^4.17.21",
@@ -162,8 +166,8 @@
162
166
  "typescript": "^5.8.3",
163
167
  "vite": "^6.4.2",
164
168
  "vitest": "^4.0.13",
165
- "@tutti-os/client-tuttid-ts": "0.0.0",
166
- "@tutti-os/config-tsconfig": "0.0.0"
169
+ "@tutti-os/config-tsconfig": "0.0.0",
170
+ "@tutti-os/client-tuttid-ts": "0.0.0"
167
171
  },
168
172
  "peerDependencies": {
169
173
  "react": "^19.1.0",
@@ -230,6 +234,9 @@
230
234
  "workspace-agent-generated-files": [
231
235
  "./dist/workspace-agent-generated-files.d.ts"
232
236
  ],
237
+ "workspace-query-cache": [
238
+ "./dist/workspace-query-cache.d.ts"
239
+ ],
233
240
  "i18n": [
234
241
  "./dist/i18n/index.d.ts"
235
242
  ],
@@ -1,10 +0,0 @@
1
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g clip-path="url(#clip0_3781_26699)">
3
- <path d="M7.23227 1.81049C9.52757 0.736535 12.1185 0.468536 14.5848 1.05073C17.0512 1.63299 19.2485 3.03141 20.8211 5.0185C22.3939 7.00572 23.2498 9.46568 23.2498 11.9999V12.9999C23.2498 14.1271 22.8018 15.2078 22.0047 16.0048C21.2077 16.8018 20.127 17.2499 18.9998 17.2499C17.8727 17.2499 16.792 16.8018 15.995 16.0048C15.8984 15.9082 15.8067 15.8076 15.7206 15.7031C14.7698 16.6583 13.454 17.2499 11.9998 17.2499C9.10043 17.2499 6.74985 14.8994 6.74985 11.9999C6.74988 9.10053 9.10045 6.75003 11.9998 6.74995C13.0401 6.74995 14.0093 7.05327 14.825 7.57514C14.999 7.09414 15.4588 6.75001 15.9998 6.74995C16.6902 6.74995 17.2498 7.30962 17.2498 7.99995V12.9999C17.2498 13.464 17.4344 13.9091 17.7625 14.2372C18.0907 14.5654 18.5358 14.7499 18.9998 14.7499C19.464 14.7499 19.909 14.5654 20.2372 14.2372C20.5653 13.9091 20.7498 13.4641 20.7498 12.9999V11.9999C20.7498 10.029 20.0843 8.11582 18.8612 6.57026C17.638 5.0248 15.9288 3.93724 14.0106 3.48432C12.0923 3.03151 10.0771 3.23983 8.29184 4.07514C6.50657 4.91055 5.05517 6.32388 4.17368 8.08686C3.29224 9.84974 3.03167 11.8587 3.43442 13.788C3.83728 15.7175 4.88014 17.4547 6.3934 18.7177C7.90663 19.9806 9.802 20.6957 11.7723 20.747C13.7427 20.7982 15.673 20.1826 17.2498 18.9999C17.8021 18.5858 18.5856 18.6978 18.9998 19.2499C19.4141 19.8022 19.3021 20.5857 18.7498 20.9999C16.7225 22.5204 14.2412 23.3118 11.7079 23.246C9.17468 23.1802 6.73743 22.2612 4.79184 20.6376C2.8463 19.0139 1.50518 16.7803 0.987154 14.2997C0.469201 11.819 0.804003 9.2354 1.93735 6.9687C3.0707 4.702 4.9369 2.88459 7.23227 1.81049ZM11.9998 9.24994C10.4812 9.25003 9.24988 10.4812 9.24985 11.9999C9.24985 13.5187 10.4811 14.7499 11.9998 14.7499C13.5186 14.7499 14.7498 13.5187 14.7498 11.9999C14.7498 10.4812 13.5186 9.24994 11.9998 9.24994Z" fill="black"/>
4
- </g>
5
- <defs>
6
- <clipPath id="clip0_3781_26699">
7
- <rect width="24" height="24" fill="white"/>
8
- </clipPath>
9
- </defs>
10
- </svg>
@@ -1,18 +0,0 @@
1
- import {
2
- AgentRichTextReadonly
3
- } from "./chunk-UFIEUC3Y.js";
4
- import "./chunk-J2HG7UCP.js";
5
- import "./chunk-LUGELG5V.js";
6
- import "./chunk-KPMQGPYU.js";
7
- import "./chunk-SN6UYX54.js";
8
- import "./chunk-PJP5BUU6.js";
9
- import "./chunk-H6IQ63DQ.js";
10
- import "./chunk-OWW7CU4U.js";
11
- import "./chunk-TKBEVCHG.js";
12
- import "./chunk-D2JUDUYY.js";
13
- import "./chunk-KJQERFKX.js";
14
- import "./chunk-UGVI47X6.js";
15
- export {
16
- AgentRichTextReadonly
17
- };
18
- //# sourceMappingURL=AgentRichTextReadonly-F6PHC5SX.js.map
@@ -1,3 +0,0 @@
1
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M12 1.75C12.6904 1.75 13.25 2.30964 13.25 3V10.75H21C21.6904 10.75 22.25 11.3096 22.25 12C22.25 12.6904 21.6904 13.25 21 13.25H13.25V21C13.25 21.6904 12.6904 22.25 12 22.25C11.3096 22.25 10.75 21.6904 10.75 21V13.25H3C2.30964 13.25 1.75 12.6904 1.75 12C1.75 11.3096 2.30964 10.75 3 10.75H10.75V3C10.75 2.30964 11.3096 1.75 12 1.75Z" fill="black"/>
3
- </svg>
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../shared/workspaceAgentSessionMessageAliases.ts","../shared/workspaceAgentGeneratedFiles.ts"],"sourcesContent":["import type { AgentActivitySession } from \"@tutti-os/agent-activity-core\";\n\nexport function workspaceAgentSessionMessageAliases(\n session: AgentActivitySession\n): string[] {\n const values = [session.agentSessionId, session.providerSessionId];\n const seen = new Set<string>();\n const aliases: string[] = [];\n for (const value of values) {\n const normalized = value?.trim() ?? \"\";\n if (!normalized || seen.has(normalized)) continue;\n seen.add(normalized);\n aliases.push(normalized);\n }\n return aliases;\n}\n","import { fileChangePathsFromChanges } from \"./workspaceAgentFileChangePayload.ts\";\nimport type {\n AgentActivityMessage,\n AgentActivitySession\n} from \"@tutti-os/agent-activity-core\";\nimport type {\n CollectWorkspaceAgentGeneratedFilesOptions,\n WorkspaceAgentChangedFile\n} from \"./workspaceAgentActivityListTypes\";\nimport { workspaceAgentSessionMessageAliases } from \"./workspaceAgentSessionMessageAliases.ts\";\n\nexport interface WorkspaceAgentGeneratedFilesSource {\n sessionMessagesById: Readonly<Record<string, AgentActivityMessage[]>>;\n sessions: readonly AgentActivitySession[];\n}\n\nexport function collectWorkspaceAgentGeneratedFiles(\n source: WorkspaceAgentGeneratedFilesSource,\n options: CollectWorkspaceAgentGeneratedFilesOptions = {}\n): WorkspaceAgentChangedFile[] {\n const sessionCwdFilter = normalizeComparablePath(options.sessionCwd ?? \"\");\n const allowedAgentTargetIds = options.agentTargetIds\n ? new Set(options.agentTargetIds.map((id) => id.trim()).filter(Boolean))\n : null;\n const provenanceSessions = allowedAgentTargetIds\n ? source.sessions.filter(\n (session) =>\n session.agentTargetId !== null &&\n allowedAgentTargetIds.has(session.agentTargetId)\n )\n : source.sessions;\n const workspaceRoot =\n sessionCwdFilter ||\n normalizeComparablePath(options.workspaceRoot ?? \"\") ||\n resolveWorkspaceRootFromSessions(provenanceSessions);\n const sessions = sessionCwdFilter\n ? provenanceSessions.filter(\n (session) =>\n normalizeComparablePath(session.cwd ?? \"\") === sessionCwdFilter\n )\n : provenanceSessions;\n const filesByPath = new Map<string, WorkspaceAgentChangedFile>();\n\n for (const session of sessions) {\n const sessionCwd =\n normalizeComparablePath(session.cwd ?? \"\") || workspaceRoot;\n const normalizePath = createAgentGeneratedFilePathNormalizer({\n sessionCwd,\n workspaceRoot\n });\n const messages = resolveWorkspaceAgentSessionMessages(\n source.sessionMessagesById,\n session\n );\n if (messages.length === 0) {\n continue;\n }\n for (const file of changedFilesForSession(messages, normalizePath, {\n requireSuccessfulFileChangeTool: true\n })) {\n filesByPath.set(file.path, file);\n }\n for (const path of imageGenerationPathsFromMessages(\n messages,\n normalizePath\n )) {\n if (filesByPath.has(path)) {\n continue;\n }\n filesByPath.set(path, {\n path,\n label: path.split(\"/\").filter(Boolean).at(-1) ?? path\n });\n }\n }\n\n return applyShortestUniqueFileLabels([...filesByPath.values()]);\n}\n\ntype ChangedFilePathNormalizer = (value: unknown) => string | null;\n\ninterface ChangedFileCollectionOptions {\n requireSuccessfulFileChangeTool?: boolean;\n}\n\nexport function changedFilesForSession(\n messages: readonly AgentActivityMessage[],\n normalizePath: ChangedFilePathNormalizer = defaultChangedFilePathNormalizer,\n options: ChangedFileCollectionOptions = {}\n): WorkspaceAgentChangedFile[] {\n const changedFilesByPath = new Map<string, WorkspaceAgentChangedFile>();\n const appendPath = (path: string | null): void => {\n if (!path || changedFilesByPath.has(path)) {\n return;\n }\n changedFilesByPath.set(path, {\n path,\n label: path\n });\n };\n\n for (const message of messages) {\n for (const path of changedFilePathsFromMessage(\n message,\n normalizePath,\n options\n )) {\n appendPath(path);\n }\n }\n\n return applyShortestUniqueFileLabels(Array.from(changedFilesByPath.values()));\n}\n\nfunction changedFilePathsFromMessage(\n message: AgentActivityMessage,\n normalizePath: ChangedFilePathNormalizer = defaultChangedFilePathNormalizer,\n options: ChangedFileCollectionOptions = {}\n): string[] {\n const isSuccessfulFileChangeTool = isSuccessfulFileChangeToolMessage(message);\n if (options.requireSuccessfulFileChangeTool && !isSuccessfulFileChangeTool) {\n return [];\n }\n const payload = objectValue(message.payload);\n const explicitFileChanges = fileChangePaths(\n arrayValue(objectValue(payload?.fileChanges)?.files),\n normalizePath\n );\n if (explicitFileChanges.length > 0) {\n return explicitFileChanges;\n }\n if (!isSuccessfulFileChangeTool) {\n return [];\n }\n\n const toolState = objectValue(payload?.tool_state);\n const input =\n objectValue(payload?.input) ?? objectValue(toolState?.input) ?? null;\n const output = objectValue(payload?.output);\n const paths = dedupeStrings([\n ...pathsValue(payload?.paths, normalizePath),\n ...pathsValue(output?.paths, normalizePath),\n ...pathsValue(input?.paths, normalizePath),\n ...changeMapPaths(payload?.changes, normalizePath),\n ...changeMapPaths(output?.changes, normalizePath),\n ...changeMapPaths(input?.changes, normalizePath),\n ...contentDiffPaths(payload?.content, normalizePath),\n ...contentDiffPaths(output?.content, normalizePath),\n ...contentDiffPaths(input?.content, normalizePath),\n stringValue(payload?.path),\n stringValue(payload?.filePath),\n stringValue(payload?.file_path),\n stringValue(input?.path),\n stringValue(input?.filePath),\n stringValue(input?.file_path),\n stringValue(output?.path),\n stringValue(output?.filePath),\n stringValue(output?.file_path)\n ]);\n return paths\n .map((path) => normalizePath(path))\n .filter((path): path is string => path !== null);\n}\n\nfunction defaultChangedFilePathNormalizer(value: unknown): string | null {\n return normalizedChangedFilePath(value);\n}\n\nfunction resolveWorkspaceRootFromSessions(\n sessions: readonly AgentActivitySession[]\n): string {\n for (const session of sessions) {\n const cwd = normalizeComparablePath(session.cwd ?? \"\");\n if (cwd) {\n return cwd;\n }\n }\n return \"\";\n}\n\nfunction normalizeComparablePath(path: string): string {\n return path.trim().replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\");\n}\n\nfunction createAgentGeneratedFilePathNormalizer(input: {\n sessionCwd?: string | null;\n workspaceRoot?: string | null;\n}): ChangedFilePathNormalizer {\n const workspaceRoot = input.workspaceRoot?.trim().replace(/\\/+$/, \"\") ?? \"\";\n const sessionCwd =\n input.sessionCwd?.trim().replace(/\\/+$/, \"\") || workspaceRoot;\n return (value: unknown) => {\n if (typeof value !== \"string\") {\n return null;\n }\n return resolveAgentGeneratedFilePath(value, workspaceRoot, sessionCwd);\n };\n}\n\nfunction resolveAgentGeneratedFilePath(\n rawPath: string,\n workspaceRoot: string,\n sessionCwd: string\n): string | null {\n const path = rawPath.trim();\n if (!path || isStructuredPayloadPath(path)) {\n return null;\n }\n if (path.startsWith(\"/workspace/\")) {\n return path;\n }\n if (isAgentStateGeneratedImagePath(path)) {\n return path;\n }\n if (isAbsoluteAgentGeneratedFilePath(path)) {\n if (\n workspaceRoot &&\n !isPathInsideOrEqual(path, workspaceRoot) &&\n !isAgentStateGeneratedImagePath(path)\n ) {\n return null;\n }\n return path.replace(/\\\\/g, \"/\");\n }\n\n const base = sessionCwd || workspaceRoot;\n if (!base) {\n return null;\n }\n const resolved = joinAgentGeneratedFilePath(base, path.replace(/^\\.?\\//, \"\"));\n if (\n workspaceRoot &&\n !isPathInsideOrEqual(resolved, workspaceRoot) &&\n !isAgentStateGeneratedImagePath(resolved)\n ) {\n return null;\n }\n return resolved;\n}\n\nfunction isAbsoluteAgentGeneratedFilePath(path: string): boolean {\n return path.startsWith(\"/\") || /^[A-Za-z]:[\\\\/]/.test(path);\n}\n\nfunction isPathInsideOrEqual(path: string, root: string): boolean {\n const normalizedPath = path.replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\");\n const normalizedRoot = root.replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\");\n if (!normalizedRoot) {\n return false;\n }\n return (\n normalizedPath === normalizedRoot ||\n normalizedPath.startsWith(`${normalizedRoot}/`)\n );\n}\n\nfunction joinAgentGeneratedFilePath(\n base: string,\n relativePath: string\n): string {\n const normalizedBase = base.replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\");\n const normalizedRelative = relativePath.replace(/\\\\/g, \"/\");\n return `${normalizedBase}/${normalizedRelative}`;\n}\n\nfunction imageGenerationPathsFromMessages(\n messages: readonly AgentActivityMessage[],\n normalizePath: ChangedFilePathNormalizer\n): string[] {\n const paths: string[] = [];\n for (const message of messages) {\n const payload = objectValue(message.payload);\n if (!payload) {\n continue;\n }\n const output = objectValue(payload.output);\n for (const uri of [\n ...imageGenerationUris(payload.content),\n ...imageGenerationUris(output?.content)\n ]) {\n const normalized = normalizePath(uri);\n if (normalized) {\n paths.push(normalized);\n }\n }\n }\n return dedupeStrings(paths);\n}\n\nfunction imageGenerationUris(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n const uris: string[] = [];\n for (const item of value) {\n const record = objectValue(item);\n if (!record) {\n continue;\n }\n const type = stringValue(record.type)?.toLowerCase();\n const uri = stringValue(record.uri) ?? stringValue(record.path);\n if (!uri) {\n continue;\n }\n if (\n type === \"image\" ||\n uri.toLowerCase().includes(\"generated_images\") ||\n /\\.(?:png|jpe?g|gif|webp|bmp|svg)$/i.test(uri)\n ) {\n uris.push(uri);\n }\n }\n return uris;\n}\n\nfunction isAgentStateGeneratedImagePath(path: string): boolean {\n const segments = path.split(\"/\").filter(Boolean);\n const stateRootIndex = segments.findIndex(\n (segment) => segment === \".tutti\" || segment === \".tutti-dev\"\n );\n if (stateRootIndex < 0) {\n return false;\n }\n const statePath = segments.slice(stateRootIndex);\n return (\n statePath[1] === \"agent\" &&\n statePath[2] === \"runs\" &&\n statePath.includes(\"generated_images\")\n );\n}\n\nfunction normalizedChangedFilePath(\n value: unknown,\n options: { allowRelative?: boolean } = {}\n): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const path = value.trim();\n if (!path || isStructuredPayloadPath(path)) {\n return null;\n }\n if (!options.allowRelative && !path.startsWith(\"/workspace/\")) {\n return null;\n }\n return path;\n}\n\nfunction applyShortestUniqueFileLabels(\n files: WorkspaceAgentChangedFile[]\n): WorkspaceAgentChangedFile[] {\n const suffixByPath = shortestUniquePathSuffixByPath(\n files.map((file) => file.path)\n );\n return files.map((file) => ({\n ...file,\n label: suffixByPath.get(file.path) ?? file.label\n }));\n}\n\nfunction shortestUniquePathSuffixByPath(paths: string[]): Map<string, string> {\n const partsByPath = new Map(\n paths.map((path) => [path, splitPathSegments(path)])\n );\n const labels = new Map<string, string>();\n const unresolved = new Set(paths);\n\n for (let depth = 1; unresolved.size > 0; depth += 1) {\n const grouped = new Map<string, string[]>();\n\n for (const path of unresolved) {\n const parts = partsByPath.get(path) ?? [];\n const suffix = parts.slice(-Math.min(depth, parts.length)).join(\"/\");\n const fallback = parts.at(-1) ?? path;\n const label = suffix || fallback;\n const group = grouped.get(label);\n if (group) {\n group.push(path);\n } else {\n grouped.set(label, [path]);\n }\n }\n\n let resolvedCount = 0;\n for (const [label, group] of grouped) {\n if (group.length !== 1) {\n continue;\n }\n const path = group[0];\n if (!path) {\n continue;\n }\n labels.set(path, label);\n unresolved.delete(path);\n resolvedCount += 1;\n }\n\n if (resolvedCount === 0) {\n for (const path of unresolved) {\n labels.set(path, path);\n }\n break;\n }\n }\n\n return labels;\n}\n\nfunction splitPathSegments(path: string): string[] {\n return path.trim().split(/[\\\\/]/).filter(Boolean);\n}\n\nfunction isSuccessfulFileChangeToolMessage(\n message: AgentActivityMessage\n): boolean {\n if (normalizeToken(message.kind) !== \"tool_call\") {\n return false;\n }\n if (!isSuccessfulFileChangeStatus(message.status ?? undefined)) {\n return false;\n }\n const payload = objectValue(message.payload);\n if (!isSuccessfulFileChangePayloadStatus(payload)) {\n return false;\n }\n return hasFileChangeSignal(payload);\n}\n\nfunction isSuccessfulFileChangePayloadStatus(\n payload: Record<string, unknown> | null\n): boolean {\n if (!payload) {\n return true;\n }\n if (!isSuccessfulFileChangeRecordStatus(payload)) {\n return false;\n }\n const output = objectValue(payload.output);\n if (output && !isSuccessfulFileChangeRecordStatus(output)) {\n return false;\n }\n return true;\n}\n\nfunction isSuccessfulFileChangeRecordStatus(\n record: Record<string, unknown>\n): boolean {\n const status = stringValue(record.status);\n if (status && !isSuccessfulFileChangeStatus(status)) {\n return false;\n }\n const success = booleanValue(record.success);\n if (success === false) {\n return false;\n }\n return true;\n}\n\nfunction isSuccessfulFileChangeStatus(value: string | undefined): boolean {\n const normalizedStatus = normalizeToken(value);\n return (\n !normalizedStatus ||\n normalizedStatus === \"completed\" ||\n normalizedStatus === \"success\" ||\n normalizedStatus === \"succeeded\" ||\n normalizedStatus === \"ok\"\n );\n}\n\nfunction hasFileChangeSignal(payload: Record<string, unknown> | null): boolean {\n if (!payload) {\n return false;\n }\n const toolState = objectValue(payload.tool_state);\n return [\n payload,\n objectValue(payload.input),\n objectValue(payload.output),\n objectValue(toolState?.input)\n ].some((record) => record !== null && recordHasFileChangeToolSignal(record));\n}\n\nfunction recordHasFileChangeToolSignal(\n record: Record<string, unknown>\n): boolean {\n const activityKind = stringValue(record.activityKind);\n if (\n activityKind &&\n isFileChangeNormalizedToolName(normalizeToolName(activityKind))\n ) {\n return true;\n }\n if (stringValue(record.fileChangeKind)) {\n return true;\n }\n const toolCall = objectValue(record.toolCall);\n const toolCallKind = normalizeToken(stringValue(toolCall?.kind) ?? undefined);\n if (\n toolCallKind === \"write\" ||\n toolCallKind === \"edit\" ||\n toolCallKind === \"delete\"\n ) {\n return true;\n }\n const toolName = normalizeToolName(\n stringValue(record.toolName) ??\n stringValue(record.title) ??\n stringValue(record.name) ??\n \"\"\n );\n return isFileChangeNormalizedToolName(toolName);\n}\n\nfunction isFileChangeNormalizedToolName(normalizedToolName: string): boolean {\n if (!normalizedToolName) {\n return false;\n }\n const exactMatches = new Set([\n \"write\",\n \"writefile\",\n \"create\",\n \"createfile\",\n \"delete\",\n \"deletefile\",\n \"edit\",\n \"editfile\",\n \"multiedit\",\n \"applypatch\",\n \"move\",\n \"notebookedit\"\n ]);\n if (exactMatches.has(normalizedToolName)) {\n return true;\n }\n for (const prefix of exactMatches) {\n if (normalizedToolName.startsWith(`${prefix}/`)) {\n return true;\n }\n }\n return false;\n}\n\nfunction fileChangePaths(\n files: readonly unknown[] | null,\n normalizePath: ChangedFilePathNormalizer = defaultChangedFilePathNormalizer\n): string[] {\n if (!files) {\n return [];\n }\n return files\n .map((file) => normalizePath(objectValue(file)?.path))\n .filter((path): path is string => path !== null);\n}\n\nfunction changeMapPaths(\n value: unknown,\n normalizePath: ChangedFilePathNormalizer = defaultChangedFilePathNormalizer\n): string[] {\n return fileChangePathsFromChanges(value)\n .map((path) => normalizePath(path))\n .filter((path): path is string => path !== null);\n}\n\nfunction contentDiffPaths(\n value: unknown,\n normalizePath: ChangedFilePathNormalizer = defaultChangedFilePathNormalizer\n): string[] {\n const content = arrayValue(value);\n if (!content) {\n return [];\n }\n return content\n .map((entry) => {\n const record = objectValue(entry);\n if (!record || stringValue(record.type) !== \"diff\") {\n return null;\n }\n return normalizePath(record.path);\n })\n .filter((path): path is string => path !== null);\n}\n\nfunction pathsValue(\n value: unknown,\n normalizePath: ChangedFilePathNormalizer = defaultChangedFilePathNormalizer\n): string[] {\n const paths = arrayValue(value);\n if (!paths) {\n return [];\n }\n return paths\n .map((path) => normalizePath(path))\n .filter((path): path is string => path !== null);\n}\n\nfunction objectValue(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\nfunction arrayValue(value: unknown): readonly unknown[] | null {\n return Array.isArray(value) ? value : null;\n}\n\nfunction stringValue(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction booleanValue(value: unknown): boolean | null {\n return typeof value === \"boolean\" ? value : null;\n}\n\nfunction dedupeStrings(values: Array<string | null>): string[] {\n return [\n ...new Set(\n values.filter(\n (value): value is string =>\n typeof value === \"string\" && value.length > 0\n )\n )\n ];\n}\n\nfunction normalizeToolName(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replaceAll(\"_\", \"\")\n .replaceAll(\"-\", \"\")\n .replaceAll(\" \", \"\");\n}\n\nfunction isStructuredPayloadPath(path: string): boolean {\n if (/[\\r\\n]/.test(path)) {\n return true;\n }\n if (!path.startsWith(\"{\") && !path.startsWith(\"[\")) {\n return false;\n }\n try {\n JSON.parse(path);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction resolveWorkspaceAgentSessionMessages(\n sessionMessagesById: Record<string, AgentActivityMessage[]> | undefined,\n session: AgentActivitySession\n): AgentActivityMessage[] {\n if (!sessionMessagesById) {\n return [];\n }\n for (const alias of workspaceAgentSessionMessageAliases(session)) {\n const messages = sessionMessagesById[alias];\n if (messages) {\n return messages;\n }\n }\n return [];\n}\n\nfunction normalizeToken(value: string | undefined): string {\n return value?.trim().toLowerCase() ?? \"\";\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../workbench/state.ts"],"sourcesContent":["import type {\n WorkbenchHostExternalStateLookupInput,\n WorkbenchHostExternalStateSource\n} from \"@tutti-os/workbench-surface\";\nimport {\n agentGuiWorkbenchProviders,\n normalizeAgentGuiWorkbenchProvider\n} from \"./providerCatalog.ts\";\nimport { agentGuiWorkbenchProviderFromIdentifier } from \"./launch.ts\";\nimport type {\n AgentGuiWorkbenchComposerOverrides,\n AgentGuiWorkbenchComposerOverridesByAgentTargetId,\n AgentGuiWorkbenchComposerOverridesByProvider,\n AgentGuiWorkbenchNodeState,\n AgentGuiWorkbenchProvider,\n AgentGuiWorkbenchState,\n AgentGuiWorkbenchWorkspaceState\n} from \"./types.ts\";\n\ntype AgentGuiWorkbenchStateLookupRequest = Pick<\n WorkbenchHostExternalStateLookupInput,\n \"instanceId\" | \"typeId\"\n> &\n Partial<Pick<WorkbenchHostExternalStateLookupInput, \"nodeId\">>;\n\nexport function createDefaultAgentGuiWorkbenchNodeState(\n provider: AgentGuiWorkbenchProvider = \"codex\"\n): AgentGuiWorkbenchNodeState {\n return {\n agentTargetId: null,\n composerOverrides: null,\n composerOverridesByAgentTargetId: null,\n composerOverridesByProvider: null,\n conversationCount: null,\n conversationRailCollapsed: false,\n conversationRailWidthPx: null,\n lastActiveAgentSessionId: null,\n provider\n };\n}\n\nexport function normalizeAgentGuiWorkbenchState(\n state: unknown\n): AgentGuiWorkbenchState {\n if (!isRecord(state)) {\n return createDefaultAgentGuiWorkbenchState();\n }\n const agentTargetId = normalizeOptionalNonEmptyString(state.agentTargetId);\n return {\n ...(agentTargetId ? { agentTargetId } : {}),\n conversationRailCollapsed: state.conversationRailCollapsed === true,\n conversationRailWidthPx: normalizeOptionalPositiveNumber(\n state.conversationRailWidthPx\n ),\n lastActiveAgentSessionId:\n typeof state.lastActiveAgentSessionId === \"string\"\n ? state.lastActiveAgentSessionId\n : null\n };\n}\n\n/**\n * One-time persisted-state reader for snapshots written before agentTargetId\n * became the canonical AgentGUI selection key. Current-state normalizers stay\n * strict so live callers cannot continue using the removed alias.\n */\nexport function migrateLegacyAgentGuiWorkbenchState(state: unknown): unknown {\n if (\n !isRecord(state) ||\n normalizeOptionalNonEmptyString(state.agentTargetId)\n ) {\n return state;\n }\n const legacyAgentTargetId = normalizeOptionalNonEmptyString(\n state.providerTargetId\n );\n return legacyAgentTargetId\n ? { ...state, agentTargetId: legacyAgentTargetId }\n : state;\n}\n\nexport function projectAgentGuiWorkbenchState(\n state: AgentGuiWorkbenchNodeState\n): AgentGuiWorkbenchState {\n const agentTargetId = normalizeOptionalNonEmptyString(state.agentTargetId);\n return {\n ...(agentTargetId ? { agentTargetId } : {}),\n conversationRailCollapsed: state.conversationRailCollapsed === true,\n conversationRailWidthPx: normalizeOptionalPositiveNumber(\n state.conversationRailWidthPx\n ),\n lastActiveAgentSessionId: state.lastActiveAgentSessionId ?? null\n };\n}\n\nexport function areAgentGuiWorkbenchStatesEqual(\n left: AgentGuiWorkbenchState,\n right: AgentGuiWorkbenchState\n): boolean {\n return (\n (left.agentTargetId ?? null) === (right.agentTargetId ?? null) &&\n left.conversationRailCollapsed === right.conversationRailCollapsed &&\n left.conversationRailWidthPx === right.conversationRailWidthPx &&\n left.lastActiveAgentSessionId === right.lastActiveAgentSessionId\n );\n}\n\nexport function normalizeAgentGuiWorkbenchNodeState(\n state: unknown,\n fallbackProvider: AgentGuiWorkbenchProvider = \"codex\"\n): AgentGuiWorkbenchNodeState {\n const persistedState = isRecord(state) ? state : {};\n const provider =\n persistedState.provider === undefined || persistedState.provider === null\n ? fallbackProvider\n : normalizeAgentGuiWorkbenchProvider(persistedState.provider);\n return {\n ...createDefaultAgentGuiWorkbenchNodeState(provider),\n agentTargetId: normalizeOptionalNonEmptyString(\n persistedState.agentTargetId\n ),\n composerOverrides: normalizeAgentGuiWorkbenchComposerOverrides(\n persistedState.composerOverrides\n ),\n composerOverridesByAgentTargetId:\n normalizeAgentGuiWorkbenchComposerOverridesByAgentTargetId(\n persistedState.composerOverridesByAgentTargetId\n ),\n composerOverridesByProvider:\n normalizeAgentGuiWorkbenchComposerOverridesByProvider(\n persistedState.composerOverridesByProvider\n ),\n conversationCount: normalizeOptionalNonNegativeNumber(\n persistedState.conversationCount\n ),\n conversationRailCollapsed:\n persistedState.conversationRailCollapsed === true,\n conversationRailWidthPx: normalizeOptionalPositiveNumber(\n persistedState.conversationRailWidthPx\n ),\n lastActiveAgentSessionId:\n typeof persistedState.lastActiveAgentSessionId === \"string\"\n ? persistedState.lastActiveAgentSessionId\n : null,\n provider\n };\n}\n\nexport function areAgentGuiWorkbenchNodeStatesEqual(\n left: AgentGuiWorkbenchNodeState,\n right: AgentGuiWorkbenchNodeState\n): boolean {\n return (\n (left.agentTargetId ?? null) === (right.agentTargetId ?? null) &&\n composerOverridesEqual(left.composerOverrides, right.composerOverrides) &&\n composerOverridesByAgentTargetIdEqual(\n left.composerOverridesByAgentTargetId,\n right.composerOverridesByAgentTargetId\n ) &&\n composerOverridesByProviderEqual(\n left.composerOverridesByProvider,\n right.composerOverridesByProvider\n ) &&\n left.conversationCount === right.conversationCount &&\n left.conversationRailCollapsed === right.conversationRailCollapsed &&\n left.conversationRailWidthPx === right.conversationRailWidthPx &&\n left.lastActiveAgentSessionId === right.lastActiveAgentSessionId &&\n left.provider === right.provider &&\n (left.agentTargetId ?? null) === (right.agentTargetId ?? null)\n );\n}\n\nexport function agentGuiWorkbenchProviderFromInstanceId(\n instanceId: string | null | undefined\n): AgentGuiWorkbenchProvider {\n const provider = agentGuiWorkbenchProviderFromInstanceIdOrNull(instanceId);\n if (!provider) {\n throw new Error(\"agent_gui_workbench.instance_provider_required\");\n }\n return provider;\n}\n\n/**\n * Like {@link agentGuiWorkbenchProviderFromInstanceId} but returns `null`\n * instead of defaulting to `\"codex\"` when the provider cannot be determined\n * yet (e.g. a freshly created session whose instanceId does not encode a\n * provider). Callers that render a provider icon use this so they can show a\n * neutral placeholder during that transient window instead of flashing the\n * wrong provider's icon.\n */\nexport function agentGuiWorkbenchProviderFromInstanceIdOrNull(\n instanceId: string | null | undefined\n): AgentGuiWorkbenchProvider | null {\n return agentGuiWorkbenchProviderFromIdentifier(instanceId);\n}\n\nexport function createAgentGuiWorkbenchNodeStateSource(input: {\n typeId?: string;\n workspaceId: string;\n}): {\n externalStateSource: WorkbenchHostExternalStateSource<\n AgentGuiWorkbenchState | null,\n AgentGuiWorkbenchWorkspaceState\n >;\n readNodeState: (\n request: AgentGuiWorkbenchStateLookupRequest\n ) => AgentGuiWorkbenchState | null;\n writeNodeState: (\n request: AgentGuiWorkbenchStateLookupRequest & {\n state: AgentGuiWorkbenchState;\n }\n ) => void;\n /**\n * Returns the launch instanceId of an open node currently showing the given\n * agent session, or null when none is found. Used to focus an existing\n * conversation instead of launching a duplicate node.\n */\n findInstanceIdByAgentSessionId: (agentSessionId: string) => string | null;\n} {\n const typeId = input.typeId ?? \"agent-gui\";\n const nodeStateByKey = new Map<string, AgentGuiWorkbenchState>();\n // Tracks the launch instanceId behind each state key so a node can be located\n // by the session it is currently showing, even when its key is node-scoped.\n const instanceIdByKey = new Map<string, string>();\n const listeners = new Set<() => void>();\n\n const lookupState = (request: AgentGuiWorkbenchStateLookupRequest) => {\n const nodeState = request.nodeId\n ? nodeStateByKey.get(agentGuiWorkbenchNodeStateKey(request))\n : null;\n const state =\n nodeState ??\n nodeStateByKey.get(agentGuiWorkbenchInstanceStateKey(request));\n return state ? { ...state } : null;\n };\n\n const notify = () => {\n for (const listener of listeners) {\n listener();\n }\n };\n\n return {\n externalStateSource: {\n getNodeState(request) {\n if (request.typeId !== typeId) {\n return null;\n }\n return lookupState(request);\n },\n getSnapshotNodeState(request) {\n if (request.typeId !== typeId) {\n return null;\n }\n return lookupState(request);\n },\n getWorkspaceState() {\n return {\n workspaceId: input.workspaceId\n };\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n }\n },\n readNodeState(request) {\n if (request.typeId !== typeId) {\n return null;\n }\n return lookupState(request);\n },\n findInstanceIdByAgentSessionId(agentSessionId) {\n const target = agentSessionId.trim();\n if (!target) {\n return null;\n }\n for (const [key, state] of nodeStateByKey) {\n if (state.lastActiveAgentSessionId?.trim() === target) {\n return instanceIdByKey.get(key) ?? null;\n }\n }\n return null;\n },\n writeNodeState(request) {\n if (request.typeId !== typeId) {\n return;\n }\n const key = agentGuiWorkbenchNodeStateKey(request);\n instanceIdByKey.set(key, request.instanceId);\n const previous = nodeStateByKey.get(key);\n let clearedInstanceSeed = false;\n if (request.nodeId) {\n const instanceKey = agentGuiWorkbenchInstanceStateKey(request);\n instanceIdByKey.delete(instanceKey);\n clearedInstanceSeed = nodeStateByKey.delete(instanceKey);\n }\n const next = {\n ...normalizeAgentGuiWorkbenchState(request.state)\n };\n nodeStateByKey.set(key, next);\n if (\n !clearedInstanceSeed &&\n previous &&\n areAgentGuiWorkbenchMemoryStatesEqual(previous, next)\n ) {\n return;\n }\n notify();\n }\n };\n}\n\nfunction areAgentGuiWorkbenchMemoryStatesEqual(\n left: AgentGuiWorkbenchState,\n right: AgentGuiWorkbenchState\n): boolean {\n return areAgentGuiWorkbenchStatesEqual(left, right);\n}\n\nfunction agentGuiWorkbenchNodeStateKey(\n request: Pick<WorkbenchHostExternalStateLookupInput, \"instanceId\"> &\n Partial<Pick<WorkbenchHostExternalStateLookupInput, \"nodeId\">>\n): string {\n return request.nodeId\n ? `node:${request.nodeId}`\n : agentGuiWorkbenchInstanceStateKey(request);\n}\n\nfunction agentGuiWorkbenchInstanceStateKey(\n request: Pick<WorkbenchHostExternalStateLookupInput, \"instanceId\">\n): string {\n return `instance:${request.instanceId}`;\n}\n\nfunction createDefaultAgentGuiWorkbenchState(): AgentGuiWorkbenchState {\n return {\n conversationRailCollapsed: false,\n conversationRailWidthPx: null,\n lastActiveAgentSessionId: null\n };\n}\n\nfunction normalizeOptionalNonEmptyString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction normalizeAgentGuiWorkbenchComposerOverrides(\n value: unknown\n): AgentGuiWorkbenchComposerOverrides | null {\n if (!isRecord(value)) {\n return null;\n }\n const composerOverrides: AgentGuiWorkbenchComposerOverrides = {};\n if (typeof value.model === \"string\" && value.model.trim()) {\n composerOverrides.model = value.model.trim();\n }\n if (\n typeof value.reasoningEffort === \"string\" &&\n value.reasoningEffort.trim()\n ) {\n composerOverrides.reasoningEffort = value.reasoningEffort.trim();\n }\n if (\n typeof value.permissionModeId === \"string\" &&\n value.permissionModeId.trim()\n ) {\n composerOverrides.permissionModeId = value.permissionModeId.trim();\n }\n if (typeof value.planMode === \"boolean\") {\n composerOverrides.planMode = value.planMode;\n }\n return Object.keys(composerOverrides).length > 0 ? composerOverrides : null;\n}\n\nfunction normalizeAgentGuiWorkbenchComposerOverridesByProvider(\n value: unknown\n): AgentGuiWorkbenchComposerOverridesByProvider | null {\n if (!isRecord(value)) {\n return null;\n }\n const result: AgentGuiWorkbenchComposerOverridesByProvider = {};\n for (const provider of agentGuiWorkbenchProviders) {\n const overrides = normalizeAgentGuiWorkbenchComposerOverrides(\n value[provider]\n );\n if (overrides) {\n result[provider] = overrides;\n }\n }\n return Object.keys(result).length > 0 ? result : null;\n}\n\nfunction normalizeAgentGuiWorkbenchComposerOverridesByAgentTargetId(\n value: unknown\n): AgentGuiWorkbenchComposerOverridesByAgentTargetId | null {\n if (!isRecord(value)) {\n return null;\n }\n const result: AgentGuiWorkbenchComposerOverridesByAgentTargetId = {};\n for (const [rawAgentTargetId, rawOverrides] of Object.entries(value)) {\n const agentTargetId = normalizeOptionalNonEmptyString(rawAgentTargetId);\n if (!agentTargetId) {\n continue;\n }\n const overrides = normalizeAgentGuiWorkbenchComposerOverrides(rawOverrides);\n if (overrides) {\n result[agentTargetId] = overrides;\n }\n }\n return Object.keys(result).length > 0 ? result : null;\n}\n\nfunction normalizeOptionalPositiveNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0\n ? Math.round(value)\n : null;\n}\n\nfunction normalizeOptionalNonNegativeNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? Math.round(value)\n : null;\n}\n\nfunction composerOverridesEqual(\n left: AgentGuiWorkbenchComposerOverrides | null | undefined,\n right: AgentGuiWorkbenchComposerOverrides | null | undefined\n): boolean {\n return (\n (left?.model ?? null) === (right?.model ?? null) &&\n (left?.permissionModeId ?? null) === (right?.permissionModeId ?? null) &&\n (left?.planMode ?? null) === (right?.planMode ?? null) &&\n (left?.reasoningEffort ?? null) === (right?.reasoningEffort ?? null)\n );\n}\n\nfunction composerOverridesByProviderEqual(\n left: AgentGuiWorkbenchComposerOverridesByProvider | null | undefined,\n right: AgentGuiWorkbenchComposerOverridesByProvider | null | undefined\n): boolean {\n for (const provider of agentGuiWorkbenchProviders) {\n if (!composerOverridesEqual(left?.[provider], right?.[provider])) {\n return false;\n }\n }\n return true;\n}\n\nfunction composerOverridesByAgentTargetIdEqual(\n left: AgentGuiWorkbenchComposerOverridesByAgentTargetId | null | undefined,\n right: AgentGuiWorkbenchComposerOverridesByAgentTargetId | null | undefined\n): boolean {\n const leftKeys = Object.keys(left ?? {}).sort();\n const rightKeys = Object.keys(right ?? {}).sort();\n if (leftKeys.length !== rightKeys.length) {\n return false;\n }\n return leftKeys.every(\n (key, index) =>\n key === rightKeys[index] &&\n composerOverridesEqual(left?.[key], right?.[key])\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n"],"mappings":"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","names":[]}