@react-grab/cursor 0.0.78 → 0.0.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js CHANGED
@@ -55,19 +55,33 @@ async function* streamSSE(stream, signal) {
55
55
  }
56
56
  }
57
57
  async function* streamFromServer(serverUrl, context, signal) {
58
- const response = await fetch(`${serverUrl}/agent`, {
59
- method: "POST",
60
- headers: { "Content-Type": "application/json" },
61
- body: JSON.stringify(context),
62
- signal
63
- });
64
- if (!response.ok) {
65
- throw new Error(`Server error: ${response.status}`);
66
- }
67
- if (!response.body) {
68
- throw new Error("No response body");
58
+ const sessionId = context.sessionId;
59
+ const handleAbort = () => {
60
+ if (sessionId) {
61
+ fetch(`${serverUrl}/abort/${sessionId}`, { method: "POST" }).catch(
62
+ () => {
63
+ }
64
+ );
65
+ }
66
+ };
67
+ signal.addEventListener("abort", handleAbort);
68
+ try {
69
+ const response = await fetch(`${serverUrl}/agent`, {
70
+ method: "POST",
71
+ headers: { "Content-Type": "application/json" },
72
+ body: JSON.stringify(context),
73
+ signal
74
+ });
75
+ if (!response.ok) {
76
+ throw new Error(`Server error: ${response.status}`);
77
+ }
78
+ if (!response.body) {
79
+ throw new Error("No response body");
80
+ }
81
+ yield* streamSSE(response.body, signal);
82
+ } finally {
83
+ signal.removeEventListener("abort", handleAbort);
69
84
  }
70
- yield* streamSSE(response.body, signal);
71
85
  }
72
86
  var createCursorAgentProvider = (providerOptions = {}) => {
73
87
  const { serverUrl = DEFAULT_SERVER_URL, getOptions } = providerOptions;
@@ -103,6 +117,7 @@ var createCursorAgentProvider = (providerOptions = {}) => {
103
117
  yield* streamFromServer(serverUrl, mergedContext, signal);
104
118
  },
105
119
  supportsResume: true,
120
+ supportsFollowUp: true,
106
121
  checkConnection: async () => {
107
122
  const now = Date.now();
108
123
  if (connectionCache && now - connectionCache.timestamp < CONNECTION_CHECK_TTL_MS) {
@@ -118,9 +133,9 @@ var createCursorAgentProvider = (providerOptions = {}) => {
118
133
  return false;
119
134
  }
120
135
  },
121
- undo: async () => {
136
+ abort: async (sessionId) => {
122
137
  try {
123
- await fetch(`${serverUrl}/undo`, { method: "POST" });
138
+ await fetch(`${serverUrl}/abort/${sessionId}`, { method: "POST" });
124
139
  } catch {
125
140
  }
126
141
  }
@@ -129,19 +144,26 @@ var createCursorAgentProvider = (providerOptions = {}) => {
129
144
  var attachAgent = async () => {
130
145
  if (typeof window === "undefined") return;
131
146
  const provider = createCursorAgentProvider();
147
+ const attach = (api2) => {
148
+ api2.setAgent({ provider, storage: sessionStorage });
149
+ };
132
150
  const api = window.__REACT_GRAB__;
133
151
  if (api) {
134
- api.setAgent({ provider, storage: sessionStorage });
152
+ attach(api);
135
153
  return;
136
154
  }
137
155
  window.addEventListener(
138
156
  "react-grab:init",
139
157
  (event) => {
140
158
  const customEvent = event;
141
- customEvent.detail.setAgent({ provider, storage: sessionStorage });
159
+ attach(customEvent.detail);
142
160
  },
143
161
  { once: true }
144
162
  );
163
+ const apiAfterListener = window.__REACT_GRAB__;
164
+ if (apiAfterListener) {
165
+ attach(apiAfterListener);
166
+ }
145
167
  };
146
168
  attachAgent();
147
169