@react-grab/claude-code 0.0.71 → 0.0.72

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/cli.cjs CHANGED
@@ -111,7 +111,7 @@ var import_picocolors = __toESM(require_picocolors());
111
111
  var DEFAULT_PORT = 4567;
112
112
 
113
113
  // src/cli.ts
114
- var VERSION = "0.0.71";
114
+ var VERSION = "0.0.72";
115
115
  var __filename$1 = url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli.cjs', document.baseURI).href)));
116
116
  var __dirname$1 = path.dirname(__filename$1);
117
117
  var serverPath = path.join(__dirname$1, "server.js");
package/dist/cli.js CHANGED
@@ -108,7 +108,7 @@ var import_picocolors = __toESM(require_picocolors());
108
108
  var DEFAULT_PORT = 4567;
109
109
 
110
110
  // src/cli.ts
111
- var VERSION = "0.0.71";
111
+ var VERSION = "0.0.72";
112
112
  var __filename = fileURLToPath(import.meta.url);
113
113
  var __dirname = dirname(__filename);
114
114
  var serverPath = join(__dirname, "server.js");
package/dist/client.cjs CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  // src/constants.ts
4
4
  var DEFAULT_PORT = 4567;
5
+ var CONNECTION_CHECK_TTL_MS = 5e3;
5
6
 
6
7
  // src/client.ts
7
8
  var DEFAULT_SERVER_URL = `http://localhost:${DEFAULT_PORT}`;
@@ -87,6 +88,7 @@ async function* streamFromServer(serverUrl, context, signal) {
87
88
  }
88
89
  var createClaudeAgentProvider = (providerOptions = {}) => {
89
90
  const { serverUrl = DEFAULT_SERVER_URL, getOptions } = providerOptions;
91
+ let connectionCache = null;
90
92
  const mergeOptions = (contextOptions) => ({
91
93
  ...DEFAULT_OPTIONS,
92
94
  ...getOptions?.() ?? {},
@@ -118,7 +120,22 @@ var createClaudeAgentProvider = (providerOptions = {}) => {
118
120
  yield "Resuming...";
119
121
  yield* streamFromServer(serverUrl, mergedContext, signal);
120
122
  },
121
- supportsResume: true
123
+ supportsResume: true,
124
+ checkConnection: async () => {
125
+ const now = Date.now();
126
+ if (connectionCache && now - connectionCache.timestamp < CONNECTION_CHECK_TTL_MS) {
127
+ return connectionCache.result;
128
+ }
129
+ try {
130
+ const response = await fetch(`${serverUrl}/health`, { method: "GET" });
131
+ const result = response.ok;
132
+ connectionCache = { result, timestamp: now };
133
+ return result;
134
+ } catch {
135
+ connectionCache = { result: false, timestamp: now };
136
+ return false;
137
+ }
138
+ }
122
139
  };
123
140
  };
124
141
  var attachAgent = async () => {
@@ -1,6 +1,6 @@
1
- var ReactGrabClaudeCode=(function(exports){'use strict';var A=`http://localhost:${4567}`,m="react-grab:agent-sessions",y={systemPrompt:{type:"preset",preset:"claude_code",append:`You are helping a user make changes to a React component based on a selected element.
1
+ var ReactGrabClaudeCode=(function(exports){'use strict';var A=`http://localhost:${4567}`,y="react-grab:agent-sessions",E={systemPrompt:{type:"preset",preset:"claude_code",append:`You are helping a user make changes to a React component based on a selected element.
2
2
  The user has selected an element from their UI and wants you to help modify it.
3
- Provide clear, concise status updates as you work.`},model:"haiku",permissionMode:"bypassPermissions",maxTurns:10},b=r=>{let e="",n="";for(let t of r.split(`
4
- `))t.startsWith("event:")?e=t.slice(6).trim():t.startsWith("data:")&&(n=t.slice(5).trim());return {eventType:e,data:n}};async function*E(r,e){let n=r.getReader(),t=new TextDecoder,o="",s=false,a=()=>{s=true,n.cancel().catch(()=>{});};e.addEventListener("abort",a);try{if(e.aborted)throw new DOMException("Aborted","AbortError");for(;;){let d=await n.read();if(s||e.aborted)throw new DOMException("Aborted","AbortError");let{done:u,value:c}=d;c&&(o+=t.decode(c,{stream:!0}));let i;for(;(i=o.indexOf(`
3
+ Provide clear, concise status updates as you work.`},model:"haiku",permissionMode:"bypassPermissions",maxTurns:10},C=r=>{let t="",o="";for(let e of r.split(`
4
+ `))e.startsWith("event:")?t=e.slice(6).trim():e.startsWith("data:")&&(o=e.slice(5).trim());return {eventType:t,data:o}};async function*b(r,t){let o=r.getReader(),e=new TextDecoder,s="",n=false,i=()=>{n=true,o.cancel().catch(()=>{});};t.addEventListener("abort",i);try{if(t.aborted)throw new DOMException("Aborted","AbortError");for(;;){let a=await o.read();if(n||t.aborted)throw new DOMException("Aborted","AbortError");let{done:p,value:u}=a;u&&(s+=e.decode(u,{stream:!0}));let c;for(;(c=s.indexOf(`
5
5
 
6
- `))!==-1;){let{eventType:l,data:p}=b(o.slice(0,i));if(o=o.slice(i+2),l==="done")return;if(l==="error"){console.error("[react-grab]",p||"Agent error");return}p&&(yield p);}if(u)break}}finally{e.removeEventListener("abort",a);try{n.releaseLock();}catch{}}}async function*g(r,e,n){let t=await fetch(`${r}/agent`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),signal:n});if(!t.ok)throw new Error(`Server error: ${t.status}`);if(!t.body)throw new Error("No response body");yield*E(t.body,n);}var S=(r={})=>{let{serverUrl:e=A,getOptions:n}=r,t=o=>({...y,...n?.()??{},...o??{}});return {send:async function*(o,s){let a={...o,options:t(o.options)};yield*g(e,a,s);},resume:async function*(o,s,a){let d=a.getItem(m);if(!d)throw new Error("No sessions to resume");let c=JSON.parse(d)[o];if(!c)throw new Error(`Session ${o} not found`);let i=c.context,l={...i,options:t(i.options)};yield "Resuming...",yield*g(e,l,s);},supportsResume:true}},v=async()=>{if(typeof window>"u")return;let r=S(),e=window.__REACT_GRAB__;if(e){e.setAgent({provider:r,storage:sessionStorage});return}window.addEventListener("react-grab:init",n=>{n.detail.setAgent({provider:r,storage:sessionStorage});},{once:true});};v();exports.attachAgent=v;exports.createClaudeAgentProvider=S;return exports;})({});
6
+ `))!==-1;){let{eventType:d,data:l}=C(s.slice(0,c));if(s=s.slice(c+2),d==="done")return;if(d==="error"){console.error("[react-grab]",l||"Agent error");return}l&&(yield l);}if(p)break}}finally{t.removeEventListener("abort",i);try{o.releaseLock();}catch{}}}async function*g(r,t,o){let e=await fetch(`${r}/agent`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),signal:o});if(!e.ok)throw new Error(`Server error: ${e.status}`);if(!e.body)throw new Error("No response body");yield*b(e.body,o);}var h=(r={})=>{let{serverUrl:t=A,getOptions:o}=r,e=null,s=n=>({...E,...o?.()??{},...n??{}});return {send:async function*(n,i){let a={...n,options:s(n.options)};yield*g(t,a,i);},resume:async function*(n,i,a){let p=a.getItem(y);if(!p)throw new Error("No sessions to resume");let c=JSON.parse(p)[n];if(!c)throw new Error(`Session ${n} not found`);let d=c.context,l={...d,options:s(d.options)};yield "Resuming...",yield*g(t,l,i);},supportsResume:true,checkConnection:async()=>{let n=Date.now();if(e&&n-e.timestamp<5e3)return e.result;try{let a=(await fetch(`${t}/health`,{method:"GET"})).ok;return e={result:a,timestamp:n},a}catch{return e={result:false,timestamp:n},false}}}},S=async()=>{if(typeof window>"u")return;let r=h(),t=window.__REACT_GRAB__;if(t){t.setAgent({provider:r,storage:sessionStorage});return}window.addEventListener("react-grab:init",o=>{o.detail.setAgent({provider:r,storage:sessionStorage});},{once:true});};S();exports.attachAgent=S;exports.createClaudeAgentProvider=h;return exports;})({});
package/dist/client.js CHANGED
@@ -1,5 +1,6 @@
1
1
  // src/constants.ts
2
2
  var DEFAULT_PORT = 4567;
3
+ var CONNECTION_CHECK_TTL_MS = 5e3;
3
4
 
4
5
  // src/client.ts
5
6
  var DEFAULT_SERVER_URL = `http://localhost:${DEFAULT_PORT}`;
@@ -85,6 +86,7 @@ async function* streamFromServer(serverUrl, context, signal) {
85
86
  }
86
87
  var createClaudeAgentProvider = (providerOptions = {}) => {
87
88
  const { serverUrl = DEFAULT_SERVER_URL, getOptions } = providerOptions;
89
+ let connectionCache = null;
88
90
  const mergeOptions = (contextOptions) => ({
89
91
  ...DEFAULT_OPTIONS,
90
92
  ...getOptions?.() ?? {},
@@ -116,7 +118,22 @@ var createClaudeAgentProvider = (providerOptions = {}) => {
116
118
  yield "Resuming...";
117
119
  yield* streamFromServer(serverUrl, mergedContext, signal);
118
120
  },
119
- supportsResume: true
121
+ supportsResume: true,
122
+ checkConnection: async () => {
123
+ const now = Date.now();
124
+ if (connectionCache && now - connectionCache.timestamp < CONNECTION_CHECK_TTL_MS) {
125
+ return connectionCache.result;
126
+ }
127
+ try {
128
+ const response = await fetch(`${serverUrl}/health`, { method: "GET" });
129
+ const result = response.ok;
130
+ connectionCache = { result, timestamp: now };
131
+ return result;
132
+ } catch {
133
+ connectionCache = { result: false, timestamp: now };
134
+ return false;
135
+ }
136
+ }
120
137
  };
121
138
  };
122
139
  var attachAgent = async () => {
package/dist/server.cjs CHANGED
@@ -14696,7 +14696,7 @@ function query({
14696
14696
  var DEFAULT_PORT = 4567;
14697
14697
 
14698
14698
  // src/server.ts
14699
- var VERSION = "0.0.71";
14699
+ var VERSION = "0.0.72";
14700
14700
  var isTextBlock = (block) => block.type === "text";
14701
14701
  var createServer = () => {
14702
14702
  const app = new Hono2();
package/dist/server.js CHANGED
@@ -14670,7 +14670,7 @@ function query({
14670
14670
  var DEFAULT_PORT = 4567;
14671
14671
 
14672
14672
  // src/server.ts
14673
- var VERSION = "0.0.71";
14673
+ var VERSION = "0.0.72";
14674
14674
  var isTextBlock = (block) => block.type === "text";
14675
14675
  var createServer = () => {
14676
14676
  const app = new Hono2();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-grab/claude-code",
3
- "version": "0.0.71",
3
+ "version": "0.0.72",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "react-grab-claude-code": "./dist/cli.js"
@@ -31,7 +31,7 @@
31
31
  "@hono/node-server": "^1.19.6",
32
32
  "hono": "^4.0.0",
33
33
  "picocolors": "^1.1.1",
34
- "react-grab": "0.0.71"
34
+ "react-grab": "0.0.72"
35
35
  },
36
36
  "scripts": {
37
37
  "dev": "tsup --watch",