@react-grab/opencode 0.0.91 → 0.0.93
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 +1 -1
- package/dist/cli.js +1 -1
- package/dist/client.cjs +1 -1
- package/dist/client.global.js +2 -2
- package/dist/client.js +1 -1
- package/dist/server.cjs +45 -13
- package/dist/server.js +45 -13
- package/package.json +3 -3
package/dist/cli.cjs
CHANGED
|
@@ -7138,7 +7138,7 @@ var import_picocolors = __toESM(require_picocolors());
|
|
|
7138
7138
|
var DEFAULT_PORT = 6567;
|
|
7139
7139
|
|
|
7140
7140
|
// src/cli.ts
|
|
7141
|
-
var VERSION = "0.0.
|
|
7141
|
+
var VERSION = "0.0.93";
|
|
7142
7142
|
var serverPath = path2.join(__dirname, "server.cjs");
|
|
7143
7143
|
execa(process.execPath, [serverPath], {
|
|
7144
7144
|
detached: true,
|
package/dist/cli.js
CHANGED
|
@@ -7130,7 +7130,7 @@ var import_picocolors = __toESM(require_picocolors());
|
|
|
7130
7130
|
var DEFAULT_PORT = 6567;
|
|
7131
7131
|
|
|
7132
7132
|
// src/cli.ts
|
|
7133
|
-
var VERSION = "0.0.
|
|
7133
|
+
var VERSION = "0.0.93";
|
|
7134
7134
|
var serverPath = join(__dirname, "server.cjs");
|
|
7135
7135
|
execa(process.execPath, [serverPath], {
|
|
7136
7136
|
detached: true,
|
package/dist/client.cjs
CHANGED
|
@@ -71,7 +71,7 @@ var getStoredAgentContext = (storage, sessionId, storageKey = STORAGE_KEY) => {
|
|
|
71
71
|
if (!isRecord(context)) throw new Error(`Session ${sessionId} is invalid`);
|
|
72
72
|
const content = context.content;
|
|
73
73
|
const prompt = context.prompt;
|
|
74
|
-
if (
|
|
74
|
+
if (!Array.isArray(content) || typeof prompt !== "string") {
|
|
75
75
|
throw new Error(`Session ${sessionId} is invalid`);
|
|
76
76
|
}
|
|
77
77
|
const options = context.options;
|
package/dist/client.global.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var ReactGrabOpenCode=(function(exports){'use strict';var
|
|
1
|
+
var ReactGrabOpenCode=(function(exports){'use strict';var m=5e3,O="react-grab:agent-sessions",b=t=>{let e="",o="";for(let r of t.split(`
|
|
2
2
|
`))r.startsWith("event:")?e=r.slice(6).trim():r.startsWith("data:")&&(o=r.slice(5).trim());return {eventType:e,data:o}},v=async function*(t,e){let o=t.getReader(),r=new TextDecoder,n="",s=false,a=()=>{s=true,o.cancel().catch(()=>{});};e.addEventListener("abort",a);try{if(e.aborted)throw new DOMException("Aborted","AbortError");for(;;){let d=await o.read();if(s||e.aborted)throw new DOMException("Aborted","AbortError");let{done:i,value:p}=d;p&&(n+=r.decode(p,{stream:!0}));let c;for(;(c=n.indexOf(`
|
|
3
3
|
|
|
4
|
-
`))!==-1;){let{eventType:f,data:l}=b(n.slice(0,c));if(n=n.slice(c+2),f==="done")return;if(f==="error")throw new Error(l||"Agent error");l&&(yield l);}if(i)break}}finally{e.removeEventListener("abort",a);try{o.releaseLock();}catch{}}},
|
|
4
|
+
`))!==-1;){let{eventType:f,data:l}=b(n.slice(0,c));if(n=n.slice(c+2),f==="done")return;if(f==="error")throw new Error(l||"Agent error");l&&(yield l);}if(i)break}}finally{e.removeEventListener("abort",a);try{o.releaseLock();}catch{}}},A=t=>typeof t=="object"&&t!==null,S=(t,e,o=O)=>{let r=t.getItem(o);if(!r)throw new Error("No sessions to resume");let n;try{n=JSON.parse(r);}catch{throw new Error("Failed to parse stored sessions")}if(!A(n))throw new Error("Invalid stored sessions");let s=n[e];if(!A(s))throw new Error(`Session ${e} not found`);let a=s.context;if(!A(a))throw new Error(`Session ${e} is invalid`);let d=a.content,i=a.prompt;if(!Array.isArray(d)||typeof i!="string")throw new Error(`Session ${e} is invalid`);let p=a.options,c=a.sessionId;return {content:d,prompt:i,options:p,sessionId:typeof c=="string"?c:void 0}},y=async function*(t,e,o){let r=Date.now(),n=e.sessionId,s=t.pollIntervalMs??100,a=`${t.serverUrl}${t.agentPath??"/agent"}`,d=()=>{if(!n)return;let i=t.abortPath?.(n)??`/abort/${n}`;fetch(`${t.serverUrl}${i}`,{method:"POST"}).catch(()=>{});};o.addEventListener("abort",d);try{let i=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),signal:o});if(!i.ok)throw new Error(`Server error: ${i.status}`);if(!i.body)throw new Error("No response body");let p=v(i.body,o)[Symbol.asyncIterator](),c=!1,f=p.next(),l=null;for(;!c;){let C=await Promise.race([f.then(u=>({type:"status",iteratorResult:u})),new Promise(u=>setTimeout(()=>u({type:"timeout"}),s))]),g=(Date.now()-r)/1e3;if(C.type==="status"){let u=C.iteratorResult;c=u.done??!1,!c&&u.value&&(l=u.value,f=p.next());}l===t.completedStatus?yield `Completed in ${g.toFixed(1)}s`:l?yield `${l} ${g.toFixed(1)}s`:yield `Working\u2026 ${g.toFixed(1)}s`;}}finally{o.removeEventListener("abort",d);}},E=(t,e=m)=>{let o=null;return async()=>{let r=Date.now();if(o&&r-o.timestamp<e)return o.result;try{let n=await t();return o={result:n,timestamp:r},n}catch{return o={result:false,timestamp:r},false}}};var w="Completed successfully";var x=`http://localhost:${6567}`,h=t=>typeof t=="object"&&t!==null&&"setAgent"in t,_=(t={})=>{let{serverUrl:e=x,getOptions:o}=t,r=s=>({...o?.()??{},...s??{}}),n=E(async()=>(await fetch(`${e}/health`,{method:"GET"})).ok,m);return {send:async function*(s,a){let d={...s,options:r(s.options)};yield*y({serverUrl:e,completedStatus:w},d,a);},resume:async function*(s,a,d){let i=S(d,s),p={content:i.content,prompt:i.prompt,options:i.options,sessionId:i.sessionId??s},c={...p,options:r(p.options)};yield "Resuming...",yield*y({serverUrl:e,completedStatus:w},c,a);},supportsResume:true,supportsFollowUp:true,checkConnection:n,undo:async()=>{try{await fetch(`${e}/undo`,{method:"POST"});}catch{}}}},R=async()=>{if(typeof window>"u")return;let t=_(),e=n=>{n.setAgent({provider:t,storage:sessionStorage});},o=window.__REACT_GRAB__;if(h(o)){e(o);return}window.addEventListener("react-grab:init",n=>{n instanceof CustomEvent&&h(n.detail)&&e(n.detail);},{once:true});let r=window.__REACT_GRAB__;h(r)&&e(r);};R();
|
|
5
5
|
exports.attachAgent=R;exports.createOpenCodeAgentProvider=_;return exports;})({});
|
package/dist/client.js
CHANGED
|
@@ -69,7 +69,7 @@ var getStoredAgentContext = (storage, sessionId, storageKey = STORAGE_KEY) => {
|
|
|
69
69
|
if (!isRecord(context)) throw new Error(`Session ${sessionId} is invalid`);
|
|
70
70
|
const content = context.content;
|
|
71
71
|
const prompt = context.prompt;
|
|
72
|
-
if (
|
|
72
|
+
if (!Array.isArray(content) || typeof prompt !== "string") {
|
|
73
73
|
throw new Error(`Session ${sessionId} is invalid`);
|
|
74
74
|
}
|
|
75
75
|
const options = context.options;
|
package/dist/server.cjs
CHANGED
|
@@ -7343,7 +7343,7 @@ var COMPLETED_STATUS = "Completed successfully";
|
|
|
7343
7343
|
|
|
7344
7344
|
// ../utils/dist/server.js
|
|
7345
7345
|
var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
7346
|
-
var VERSION = "0.0.
|
|
7346
|
+
var VERSION = "0.0.93";
|
|
7347
7347
|
try {
|
|
7348
7348
|
fetch(
|
|
7349
7349
|
`https://www.react-grab.com/api/version?source=opencode&t=${Date.now()}`
|
|
@@ -7525,24 +7525,56 @@ var createServer = () => {
|
|
|
7525
7525
|
const requestBody = await context.req.json();
|
|
7526
7526
|
const { content, prompt, options, sessionId } = requestBody;
|
|
7527
7527
|
const isFollowUp = Boolean(sessionId && sessionMap.has(sessionId));
|
|
7528
|
-
const
|
|
7528
|
+
const contentItems = Array.isArray(content) ? content : [content];
|
|
7529
|
+
return streamSSE(context, async (stream2) => {
|
|
7530
|
+
if (isFollowUp) {
|
|
7531
|
+
for await (const message of runAgent(prompt, {
|
|
7532
|
+
...options,
|
|
7533
|
+
sessionId
|
|
7534
|
+
})) {
|
|
7535
|
+
if (message.type === "error") {
|
|
7536
|
+
await stream2.writeSSE({
|
|
7537
|
+
data: `Error: ${message.content}`,
|
|
7538
|
+
event: "error"
|
|
7539
|
+
});
|
|
7540
|
+
} else {
|
|
7541
|
+
await stream2.writeSSE({
|
|
7542
|
+
data: message.content,
|
|
7543
|
+
event: message.type
|
|
7544
|
+
});
|
|
7545
|
+
}
|
|
7546
|
+
}
|
|
7547
|
+
return;
|
|
7548
|
+
}
|
|
7549
|
+
for (let i = 0; i < contentItems.length; i++) {
|
|
7550
|
+
const elementContent = contentItems[i];
|
|
7551
|
+
const formattedPrompt = `
|
|
7529
7552
|
User Request: ${prompt}
|
|
7530
7553
|
|
|
7531
7554
|
Context:
|
|
7532
|
-
${
|
|
7555
|
+
${elementContent}
|
|
7533
7556
|
`;
|
|
7534
|
-
|
|
7535
|
-
for await (const message of runAgent(formattedPrompt, {
|
|
7536
|
-
...options,
|
|
7537
|
-
sessionId
|
|
7538
|
-
})) {
|
|
7539
|
-
if (message.type === "error") {
|
|
7557
|
+
if (contentItems.length > 1) {
|
|
7540
7558
|
await stream2.writeSSE({
|
|
7541
|
-
data: `
|
|
7542
|
-
event: "
|
|
7559
|
+
data: `Processing element ${i + 1} of ${contentItems.length}...`,
|
|
7560
|
+
event: "status"
|
|
7543
7561
|
});
|
|
7544
|
-
}
|
|
7545
|
-
|
|
7562
|
+
}
|
|
7563
|
+
for await (const message of runAgent(formattedPrompt, {
|
|
7564
|
+
...options,
|
|
7565
|
+
sessionId
|
|
7566
|
+
})) {
|
|
7567
|
+
if (message.type === "error") {
|
|
7568
|
+
await stream2.writeSSE({
|
|
7569
|
+
data: `Error: ${message.content}`,
|
|
7570
|
+
event: "error"
|
|
7571
|
+
});
|
|
7572
|
+
} else {
|
|
7573
|
+
await stream2.writeSSE({
|
|
7574
|
+
data: message.content,
|
|
7575
|
+
event: message.type
|
|
7576
|
+
});
|
|
7577
|
+
}
|
|
7546
7578
|
}
|
|
7547
7579
|
}
|
|
7548
7580
|
});
|
package/dist/server.js
CHANGED
|
@@ -7332,7 +7332,7 @@ var COMPLETED_STATUS = "Completed successfully";
|
|
|
7332
7332
|
|
|
7333
7333
|
// ../utils/dist/server.js
|
|
7334
7334
|
var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
7335
|
-
var VERSION = "0.0.
|
|
7335
|
+
var VERSION = "0.0.93";
|
|
7336
7336
|
try {
|
|
7337
7337
|
fetch(
|
|
7338
7338
|
`https://www.react-grab.com/api/version?source=opencode&t=${Date.now()}`
|
|
@@ -7514,24 +7514,56 @@ var createServer = () => {
|
|
|
7514
7514
|
const requestBody = await context.req.json();
|
|
7515
7515
|
const { content, prompt, options, sessionId } = requestBody;
|
|
7516
7516
|
const isFollowUp = Boolean(sessionId && sessionMap.has(sessionId));
|
|
7517
|
-
const
|
|
7517
|
+
const contentItems = Array.isArray(content) ? content : [content];
|
|
7518
|
+
return streamSSE(context, async (stream2) => {
|
|
7519
|
+
if (isFollowUp) {
|
|
7520
|
+
for await (const message of runAgent(prompt, {
|
|
7521
|
+
...options,
|
|
7522
|
+
sessionId
|
|
7523
|
+
})) {
|
|
7524
|
+
if (message.type === "error") {
|
|
7525
|
+
await stream2.writeSSE({
|
|
7526
|
+
data: `Error: ${message.content}`,
|
|
7527
|
+
event: "error"
|
|
7528
|
+
});
|
|
7529
|
+
} else {
|
|
7530
|
+
await stream2.writeSSE({
|
|
7531
|
+
data: message.content,
|
|
7532
|
+
event: message.type
|
|
7533
|
+
});
|
|
7534
|
+
}
|
|
7535
|
+
}
|
|
7536
|
+
return;
|
|
7537
|
+
}
|
|
7538
|
+
for (let i = 0; i < contentItems.length; i++) {
|
|
7539
|
+
const elementContent = contentItems[i];
|
|
7540
|
+
const formattedPrompt = `
|
|
7518
7541
|
User Request: ${prompt}
|
|
7519
7542
|
|
|
7520
7543
|
Context:
|
|
7521
|
-
${
|
|
7544
|
+
${elementContent}
|
|
7522
7545
|
`;
|
|
7523
|
-
|
|
7524
|
-
for await (const message of runAgent(formattedPrompt, {
|
|
7525
|
-
...options,
|
|
7526
|
-
sessionId
|
|
7527
|
-
})) {
|
|
7528
|
-
if (message.type === "error") {
|
|
7546
|
+
if (contentItems.length > 1) {
|
|
7529
7547
|
await stream2.writeSSE({
|
|
7530
|
-
data: `
|
|
7531
|
-
event: "
|
|
7548
|
+
data: `Processing element ${i + 1} of ${contentItems.length}...`,
|
|
7549
|
+
event: "status"
|
|
7532
7550
|
});
|
|
7533
|
-
}
|
|
7534
|
-
|
|
7551
|
+
}
|
|
7552
|
+
for await (const message of runAgent(formattedPrompt, {
|
|
7553
|
+
...options,
|
|
7554
|
+
sessionId
|
|
7555
|
+
})) {
|
|
7556
|
+
if (message.type === "error") {
|
|
7557
|
+
await stream2.writeSSE({
|
|
7558
|
+
data: `Error: ${message.content}`,
|
|
7559
|
+
event: "error"
|
|
7560
|
+
});
|
|
7561
|
+
} else {
|
|
7562
|
+
await stream2.writeSSE({
|
|
7563
|
+
data: message.content,
|
|
7564
|
+
event: message.type
|
|
7565
|
+
});
|
|
7566
|
+
}
|
|
7535
7567
|
}
|
|
7536
7568
|
}
|
|
7537
7569
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-grab/opencode",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.93",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"react-grab-opencode": "./dist/cli.cjs"
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/node": "^22.10.7",
|
|
28
28
|
"tsup": "^8.4.0",
|
|
29
|
-
"@react-grab/utils": "0.0.
|
|
29
|
+
"@react-grab/utils": "0.0.93"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@hono/node-server": "^1.19.6",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"fkill": "^9.0.0",
|
|
36
36
|
"hono": "^4.0.0",
|
|
37
37
|
"picocolors": "^1.1.1",
|
|
38
|
-
"react-grab": "0.0.
|
|
38
|
+
"react-grab": "0.0.93"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
41
|
"dev": "tsup --watch",
|