@react-grab/opencode 0.0.71 → 0.0.73

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 = 6567;
112
112
 
113
113
  // src/cli.ts
114
- var VERSION = "0.0.71";
114
+ var VERSION = "0.0.73";
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 = 6567;
109
109
 
110
110
  // src/cli.ts
111
- var VERSION = "0.0.71";
111
+ var VERSION = "0.0.73";
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 = 6567;
5
+ var CONNECTION_CHECK_TTL_MS = 5e3;
5
6
 
6
7
  // src/client.ts
7
8
  var DEFAULT_SERVER_URL = `http://localhost:${DEFAULT_PORT}`;
@@ -74,6 +75,7 @@ var streamFromServer = async function* (serverUrl, context, signal) {
74
75
  };
75
76
  var createOpencodeAgentProvider = (options = {}) => {
76
77
  const { serverUrl = DEFAULT_SERVER_URL, getOptions } = options;
78
+ let connectionCache = null;
77
79
  const mergeOptions = (contextOptions) => ({
78
80
  ...getOptions?.() ?? {},
79
81
  ...contextOptions ?? {}
@@ -104,7 +106,28 @@ var createOpencodeAgentProvider = (options = {}) => {
104
106
  yield "Resuming...";
105
107
  yield* streamFromServer(serverUrl, combinedContext, signal);
106
108
  },
107
- supportsResume: true
109
+ supportsResume: true,
110
+ checkConnection: async () => {
111
+ const now = Date.now();
112
+ if (connectionCache && now - connectionCache.timestamp < CONNECTION_CHECK_TTL_MS) {
113
+ return connectionCache.result;
114
+ }
115
+ try {
116
+ const response = await fetch(`${serverUrl}/health`, { method: "GET" });
117
+ const result = response.ok;
118
+ connectionCache = { result, timestamp: now };
119
+ return result;
120
+ } catch {
121
+ connectionCache = { result: false, timestamp: now };
122
+ return false;
123
+ }
124
+ },
125
+ undo: async () => {
126
+ try {
127
+ await fetch(`${serverUrl}/undo`, { method: "POST" });
128
+ } catch {
129
+ }
130
+ }
108
131
  };
109
132
  };
110
133
  var attachAgent = async () => {
@@ -1,4 +1,4 @@
1
- var ReactGrabOpencode=(function(exports){'use strict';var O=`http://localhost:${6567}`,S="react-grab:agent-sessions",y=r=>{let t="",n="";for(let e of r.split(`
2
- `))e.startsWith("event:")?t=e.slice(6).trim():e.startsWith("data:")&&(n=e.slice(5).trim());return {eventType:t,data:n}},u=async function*(r,t){let n=r.getReader(),e=new TextDecoder,o="",s=false,i=()=>{s=true,n.cancel().catch(()=>{});};t.addEventListener("abort",i);try{if(t.aborted)throw new DOMException("Aborted","AbortError");for(;;){let d=await n.read();if(s||t.aborted)throw new DOMException("Aborted","AbortError");let{done:A,value:c}=d;c&&(o+=e.decode(c,{stream:!0}));let a;for(;(a=o.indexOf(`
1
+ var ReactGrabOpencode=(function(exports){'use strict';var m=`http://localhost:${6567}`,O="react-grab:agent-sessions",y=r=>{let t="",n="";for(let e of r.split(`
2
+ `))e.startsWith("event:")?t=e.slice(6).trim():e.startsWith("data:")&&(n=e.slice(5).trim());return {eventType:t,data:n}},E=async function*(r,t){let n=r.getReader(),e=new TextDecoder,s="",o=false,a=()=>{o=true,n.cancel().catch(()=>{});};t.addEventListener("abort",a);try{if(t.aborted)throw new DOMException("Aborted","AbortError");for(;;){let i=await n.read();if(o||t.aborted)throw new DOMException("Aborted","AbortError");let{done:g,value:l}=i;l&&(s+=e.decode(l,{stream:!0}));let c;for(;(c=s.indexOf(`
3
3
 
4
- `))!==-1;){let{eventType:p,data:g}=y(o.slice(0,a));if(o=o.slice(a+2),p==="done")return;if(p==="error")throw new Error(g||"Agent error");g&&(yield g);}if(A)break}}finally{t.removeEventListener("abort",i);try{n.releaseLock();}catch{}}},f=async function*(r,t,n){let e=await fetch(`${r}/agent`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),signal:n});if(!e.ok)throw new Error(`Server error: ${e.status}`);if(!e.body)throw new Error("No response body");yield*u(e.body,n);},E=(r={})=>{let{serverUrl:t=O,getOptions:n}=r,e=o=>({...n?.()??{},...o??{}});return {send:async function*(o,s){let i={...o,options:e(o.options)};yield*f(t,i,s);},resume:async function*(o,s,i){let d=i.getItem(S);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 a=c.context,p={...a,options:e(a.options)};yield "Resuming...",yield*f(t,p,s);},supportsResume:true}},b=async()=>{if(typeof window>"u")return;let r=E(),t=window.__REACT_GRAB__;if(t){t.setAgent({provider:r,storage:sessionStorage});return}window.addEventListener("react-grab:init",n=>{if(n instanceof CustomEvent){let e=n;e.detail&&typeof e.detail.setAgent=="function"&&e.detail.setAgent({provider:r,storage:sessionStorage});}},{once:true});};b();exports.attachAgent=b;exports.createOpencodeAgentProvider=E;return exports;})({});
4
+ `))!==-1;){let{eventType:d,data:p}=y(s.slice(0,c));if(s=s.slice(c+2),d==="done")return;if(d==="error")throw new Error(p||"Agent error");p&&(yield p);}if(g)break}}finally{t.removeEventListener("abort",a);try{n.releaseLock();}catch{}}},f=async function*(r,t,n){let e=await fetch(`${r}/agent`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),signal:n});if(!e.ok)throw new Error(`Server error: ${e.status}`);if(!e.body)throw new Error("No response body");yield*E(e.body,n);},S=(r={})=>{let{serverUrl:t=m,getOptions:n}=r,e=null,s=o=>({...n?.()??{},...o??{}});return {send:async function*(o,a){let i={...o,options:s(o.options)};yield*f(t,i,a);},resume:async function*(o,a,i){let g=i.getItem(O);if(!g)throw new Error("No sessions to resume");let c=JSON.parse(g)[o];if(!c)throw new Error(`Session ${o} not found`);let d=c.context,p={...d,options:s(d.options)};yield "Resuming...",yield*f(t,p,a);},supportsResume:true,checkConnection:async()=>{let o=Date.now();if(e&&o-e.timestamp<5e3)return e.result;try{let i=(await fetch(`${t}/health`,{method:"GET"})).ok;return e={result:i,timestamp:o},i}catch{return e={result:false,timestamp:o},false}},undo:async()=>{try{await fetch(`${t}/undo`,{method:"POST"});}catch{}}}},b=async()=>{if(typeof window>"u")return;let r=S(),t=window.__REACT_GRAB__;if(t){t.setAgent({provider:r,storage:sessionStorage});return}window.addEventListener("react-grab:init",n=>{if(n instanceof CustomEvent){let e=n;e.detail&&typeof e.detail.setAgent=="function"&&e.detail.setAgent({provider:r,storage:sessionStorage});}},{once:true});};b();exports.attachAgent=b;exports.createOpencodeAgentProvider=S;return exports;})({});
package/dist/client.js CHANGED
@@ -1,5 +1,6 @@
1
1
  // src/constants.ts
2
2
  var DEFAULT_PORT = 6567;
3
+ var CONNECTION_CHECK_TTL_MS = 5e3;
3
4
 
4
5
  // src/client.ts
5
6
  var DEFAULT_SERVER_URL = `http://localhost:${DEFAULT_PORT}`;
@@ -72,6 +73,7 @@ var streamFromServer = async function* (serverUrl, context, signal) {
72
73
  };
73
74
  var createOpencodeAgentProvider = (options = {}) => {
74
75
  const { serverUrl = DEFAULT_SERVER_URL, getOptions } = options;
76
+ let connectionCache = null;
75
77
  const mergeOptions = (contextOptions) => ({
76
78
  ...getOptions?.() ?? {},
77
79
  ...contextOptions ?? {}
@@ -102,7 +104,28 @@ var createOpencodeAgentProvider = (options = {}) => {
102
104
  yield "Resuming...";
103
105
  yield* streamFromServer(serverUrl, combinedContext, signal);
104
106
  },
105
- supportsResume: true
107
+ supportsResume: true,
108
+ checkConnection: async () => {
109
+ const now = Date.now();
110
+ if (connectionCache && now - connectionCache.timestamp < CONNECTION_CHECK_TTL_MS) {
111
+ return connectionCache.result;
112
+ }
113
+ try {
114
+ const response = await fetch(`${serverUrl}/health`, { method: "GET" });
115
+ const result = response.ok;
116
+ connectionCache = { result, timestamp: now };
117
+ return result;
118
+ } catch {
119
+ connectionCache = { result: false, timestamp: now };
120
+ return false;
121
+ }
122
+ },
123
+ undo: async () => {
124
+ try {
125
+ await fetch(`${serverUrl}/undo`, { method: "POST" });
126
+ } catch {
127
+ }
128
+ }
106
129
  };
107
130
  };
108
131
  var attachAgent = async () => {
package/dist/server.cjs CHANGED
@@ -3877,7 +3877,7 @@ var import_picocolors = __toESM(require_picocolors());
3877
3877
 
3878
3878
  // src/constants.ts
3879
3879
  var DEFAULT_PORT = 6567;
3880
- var VERSION = "0.0.71";
3880
+ var VERSION = "0.0.73";
3881
3881
  var opencodeInstance = null;
3882
3882
  var getOpencodeClient = async () => {
3883
3883
  if (!opencodeInstance) {
package/dist/server.js CHANGED
@@ -3869,7 +3869,7 @@ var import_picocolors = __toESM(require_picocolors());
3869
3869
 
3870
3870
  // src/constants.ts
3871
3871
  var DEFAULT_PORT = 6567;
3872
- var VERSION = "0.0.71";
3872
+ var VERSION = "0.0.73";
3873
3873
  var opencodeInstance = null;
3874
3874
  var getOpencodeClient = async () => {
3875
3875
  if (!opencodeInstance) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-grab/opencode",
3
- "version": "0.0.71",
3
+ "version": "0.0.73",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "react-grab-opencode": "./dist/cli.js"
@@ -31,7 +31,7 @@
31
31
  "@opencode-ai/sdk": "^1.0.0",
32
32
  "hono": "^4.0.0",
33
33
  "picocolors": "^1.1.1",
34
- "react-grab": "0.0.71"
34
+ "react-grab": "0.0.73"
35
35
  },
36
36
  "scripts": {
37
37
  "dev": "tsup --watch",