@react-grab/claude-code 0.0.78 → 0.0.81

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
@@ -67,19 +67,33 @@ async function* streamSSE(stream, signal) {
67
67
  }
68
68
  }
69
69
  async function* streamFromServer(serverUrl, context, signal) {
70
- const response = await fetch(`${serverUrl}/agent`, {
71
- method: "POST",
72
- headers: { "Content-Type": "application/json" },
73
- body: JSON.stringify(context),
74
- signal
75
- });
76
- if (!response.ok) {
77
- throw new Error(`Server error: ${response.status}`);
78
- }
79
- if (!response.body) {
80
- throw new Error("No response body");
70
+ const sessionId = context.sessionId;
71
+ const handleAbort = () => {
72
+ if (sessionId) {
73
+ fetch(`${serverUrl}/abort/${sessionId}`, { method: "POST" }).catch(
74
+ () => {
75
+ }
76
+ );
77
+ }
78
+ };
79
+ signal.addEventListener("abort", handleAbort);
80
+ try {
81
+ const response = await fetch(`${serverUrl}/agent`, {
82
+ method: "POST",
83
+ headers: { "Content-Type": "application/json" },
84
+ body: JSON.stringify(context),
85
+ signal
86
+ });
87
+ if (!response.ok) {
88
+ throw new Error(`Server error: ${response.status}`);
89
+ }
90
+ if (!response.body) {
91
+ throw new Error("No response body");
92
+ }
93
+ yield* streamSSE(response.body, signal);
94
+ } finally {
95
+ signal.removeEventListener("abort", handleAbort);
81
96
  }
82
- yield* streamSSE(response.body, signal);
83
97
  }
84
98
  var createClaudeAgentProvider = (providerOptions = {}) => {
85
99
  const { serverUrl = DEFAULT_SERVER_URL, getOptions } = providerOptions;
@@ -116,6 +130,7 @@ var createClaudeAgentProvider = (providerOptions = {}) => {
116
130
  yield* streamFromServer(serverUrl, mergedContext, signal);
117
131
  },
118
132
  supportsResume: true,
133
+ supportsFollowUp: true,
119
134
  checkConnection: async () => {
120
135
  const now = Date.now();
121
136
  if (connectionCache && now - connectionCache.timestamp < CONNECTION_CHECK_TTL_MS) {
@@ -142,19 +157,26 @@ var createClaudeAgentProvider = (providerOptions = {}) => {
142
157
  var attachAgent = async () => {
143
158
  if (typeof window === "undefined") return;
144
159
  const provider = createClaudeAgentProvider();
160
+ const attach = (api2) => {
161
+ api2.setAgent({ provider, storage: sessionStorage });
162
+ };
145
163
  const api = window.__REACT_GRAB__;
146
164
  if (api) {
147
- api.setAgent({ provider, storage: sessionStorage });
165
+ attach(api);
148
166
  return;
149
167
  }
150
168
  window.addEventListener(
151
169
  "react-grab:init",
152
170
  (event) => {
153
171
  const customEvent = event;
154
- customEvent.detail.setAgent({ provider, storage: sessionStorage });
172
+ attach(customEvent.detail);
155
173
  },
156
174
  { once: true }
157
175
  );
176
+ const apiAfterListener = window.__REACT_GRAB__;
177
+ if (apiAfterListener) {
178
+ attach(apiAfterListener);
179
+ }
158
180
  };
159
181
  attachAgent();
160
182