@shuttle-ai/render-react 0.0.5 → 0.0.7

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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("react/jsx-runtime"),a=require("react"),s=require("antd"),v=require("@ant-design/icons");function x({toolId:u,result:t,agent:d,getConfirmResult:i,getNewArgs:h,onAfterConfirm:f}){const[r,p]=a.useState(t?.type==="reject"?"reject":"accept"),[c,j]=a.useState(t?.reason||""),[m,y]=a.useState(!1);a.useEffect(()=>{t?.type&&p(t.type==="reject"?"reject":"accept")},[t?.type]),a.useEffect(()=>{t?.reason&&j(t.reason)},[t?.reason]);const o=a.useCallback(async()=>{if(r==="reject"&&!c){s.message.warning("请输入拒绝原因");return}y(!0);try{const e=r==="accept"?{type:"confirm",newArgs:await h?.()}:{type:"reject",reason:c};if(e.type==="confirm"&&i){const l=await i();l&&(e.result=l.result,e.newArgs=l.newArgs,e.type="confirmWithResult")}await d.confirmTool(u,e),f?.()}catch(e){throw e}finally{y(!1)}},[r,c,u,d,i,f]),g=a.useCallback(e=>{e.shiftKey||(e.preventDefault(),o())},[o]);return n.jsxs("div",{className:"fn-tool-confirm",children:[n.jsx("span",{className:"fn-tool-confirm-tip",children:"是否允许执行?"}),n.jsxs("div",{className:"fn-tool-confirm-button-group",children:[n.jsxs(s.Radio.Group,{size:"small",optionType:"button",value:r,disabled:!!t,onChange:e=>p(e.target.value),children:[n.jsx(s.Radio,{value:"accept",children:"接受"}),n.jsx(s.Radio,{value:"reject",children:"拒绝"})]}),n.jsx(s.Button,{disabled:!!t,size:"small",type:"primary",danger:r==="reject",loading:m,onClick:o,icon:n.jsx(v.SendOutlined,{}),children:"提交"})]}),r==="reject"&&n.jsx(s.Input.TextArea,{disabled:!!t,placeholder:"请输入拒绝原因",value:c,onChange:e=>j(e.target.value),rows:3,onPressEnter:g})]})}exports.default=x;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("react/jsx-runtime"),a=require("react"),s=require("antd"),x=require("@ant-design/icons");function b({toolId:u,result:t,agent:d,getConfirmResult:i,getNewArgs:f,onAfterConfirm:p}){const[r,j]=a.useState(t?.type==="reject"?"reject":"accept"),[c,y]=a.useState(t?.reason||""),[m,h]=a.useState(!1);a.useEffect(()=>{t?.type&&j(t.type==="reject"?"reject":"accept")},[t?.type]),a.useEffect(()=>{t?.reason&&y(t.reason)},[t?.reason]);const o=a.useCallback(async()=>{if(r==="reject"&&!c){s.message.warning("请输入拒绝原因");return}h(!0);try{const e=r==="accept"?{type:"confirm",newArgs:await f?.()}:{type:"reject",reason:c};if(e.type==="confirm"&&i){const l=await i();l&&(e.result=l.result,e.newArgs=l.newArgs,e.type="confirmWithResult")}await d.confirmTool(u,e),p?.()}catch(e){throw e}finally{h(!1)}},[r,c,u,d,i,f,p]),v=a.useCallback(e=>{e.shiftKey||(e.preventDefault(),o())},[o]);return n.jsxs("div",{className:"fn-tool-confirm",children:[n.jsx("span",{className:"fn-tool-confirm-tip",children:"是否允许执行?"}),n.jsxs("div",{className:"fn-tool-confirm-button-group",children:[n.jsxs(s.Radio.Group,{size:"small",optionType:"button",value:r,disabled:!!t,onChange:e=>j(e.target.value),children:[n.jsx(s.Radio,{value:"accept",children:"接受"}),n.jsx(s.Radio,{value:"reject",children:"拒绝"})]}),n.jsx(s.Button,{disabled:!!t,size:"small",type:"primary",danger:r==="reject",loading:m,onClick:o,icon:n.jsx(x.SendOutlined,{}),children:"提交"})]}),r==="reject"&&n.jsx(s.Input.TextArea,{disabled:!!t,placeholder:"请输入拒绝原因",value:c,onChange:e=>y(e.target.value),rows:3,onPressEnter:v})]})}exports.default=b;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),o=require("react"),c=require("../../../hooks/useToolMessage.cjs");require("../../../context/agentWork/base.cjs");require("@shuttle-ai/client");const a=require("../../../context/agent/useAgent.cjs");require("../../../context/agent/base.cjs");require("../../../context/tool/base.cjs");const f=require("../../../context/tool/provider.cjs"),d=require("./confirm.cjs");;/* empty css */function m({toolCall:e}){const n=a.useAgent(),t=c.default(n,e.id),s=o.useMemo(()=>n.options.tools?.find(i=>i.name===e.name),[n,e.name]);return t?r.jsx("div",{className:"agent-work-agent-tool",children:s?.run.type!=="render"?r.jsxs("div",{className:"agent-work-agent-fn-tool",children:[r.jsx("p",{className:"fn-tool-name",children:e.name}),r.jsx("pre",{className:"fn-tool-args",children:u(e.args)}),r.jsx("pre",{className:"fn-tool-result",children:u(t.content||t.confirm?.result)}),r.jsx(d.default,{result:t.confirm,toolId:e.id,agent:n})]}):r.jsx(f.default,{toolId:e.id,agent:n,args:e.args,content:t.content,confirmResult:t.confirm,run:s.run})}):null}function u(e){if(typeof e=="object")return JSON.stringify(e,null,2);try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}exports.default=m;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),o=require("react"),c=require("../../../hooks/useToolMessage.cjs");require("../../../context/agentWork/base.cjs");require("@shuttle-ai/client");const a=require("../../../context/agent/useAgent.cjs");require("../../../context/agent/base.cjs");require("../../../context/tool/base.cjs");const l=require("../../../context/tool/provider.cjs"),d=require("./confirm.cjs");;/* empty css */function f({toolCall:e}){const n=a.useAgent(),s=c.default(n,e.id),t=o.useMemo(()=>n.options.tools?.find(i=>i.name===e.name),[n,e.name]);return s?r.jsx("div",{className:"agent-work-agent-tool",children:t?.run.type!=="render"?r.jsxs("div",{className:"agent-work-agent-fn-tool",children:[r.jsx("p",{className:"fn-tool-name",children:t?.label||e.name}),r.jsx("pre",{className:"fn-tool-args",children:u(e.args)}),r.jsx("pre",{className:"fn-tool-result",children:u(s.result||s.confirm?.result)}),r.jsx(d.default,{result:s.confirm,toolId:e.id,agent:n})]}):r.jsxs("div",{className:"agent-work-agent-render-tool",children:[r.jsx("p",{className:"render-tool-name",children:t?.label||e.name}),r.jsx(l.default,{toolId:e.id,agent:n,args:e.args,result:s.result,confirmResult:s.confirm,run:t.run})]})}):null}function u(e){if(typeof e=="object")return JSON.stringify(e,null,2);try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}exports.default=f;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),e=t.createContext({args:{},agent:{},toolId:""});exports.toolContext=e;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),e=t.createContext({args:{},effectArgs:{},agent:{},toolId:"",updateArg:()=>{}});exports.toolContext=e;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const f=require("react/jsx-runtime"),t=require("react"),n=require("./base.cjs");function p({args:r,content:o,toolId:u,confirmResult:i,agent:s,run:e}){const l=t.useCallback(c=>s.confirmTool(u,c),[s,u]),d=t.useMemo(()=>({args:r,agent:s,toolId:u,content:o,confirmResult:i,confirm:l}),[r,s,u,o,i,l]),a=t.useMemo(()=>e.defaultProps?typeof e.defaultProps=="function"?e.defaultProps({args:r,content:o}):e.defaultProps:{},[e.defaultProps,r,o]);return f.jsx(n.toolContext.Provider,{value:d,children:f.jsx(e.Render,{...a})})}exports.default=p;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const A=require("react/jsx-runtime"),r=require("react"),C=require("./base.cjs");function M({args:e,result:s,toolId:f,confirmResult:o,agent:u,run:t}){const i=r.useCallback(n=>u.confirmTool(f,n),[u,f]),[d,a]=r.useState(o?.newArgs||e);r.useEffect(()=>{a(o?.newArgs||e)},[o?.newArgs,e]);const v=r.useCallback((n,w)=>{a(x=>{const p={...x};let l=p;for(let c=0;c<n.length;c++){const P=n[c];c===n.length-1?l[P]=w:l={...l[P]}}return p})},[]),b=r.useMemo(()=>({args:e,effectArgs:d,agent:u,toolId:f,result:s,confirmResult:o,confirm:i,updateArg:v}),[e,u,f,s,o,d,i]),j=r.useMemo(()=>t.defaultProps?typeof t.defaultProps=="function"?t.defaultProps({args:e,result:s}):t.defaultProps:{},[t.defaultProps,e,s]);return A.jsx(C.toolContext.Provider,{value:b,children:A.jsx(t.Render,{...j})})}exports.default=M;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("@shuttle-ai/type");;/* empty css */const e=require("./agentWork/render.cjs"),r=require("./agentWork/agent/index.cjs"),t=require("./agentWork/action/index.cjs"),o=require("./agentWork/agent/aiMessage/index.cjs"),u=require("./agentWork/agent/userMessage/index.cjs"),s=require("./agentWork/agent/toolRender/index.cjs"),n=require("./agentWork/agent/toolRender/confirm.cjs"),i=require("./context/agentWork/useWork.cjs"),d=require("./context/agentWork/useWorkContext.cjs"),a=require("./context/agentWork/provider.cjs"),l=require("./context/agent/useAgent.cjs"),c=require("./context/agent/provider.cjs"),g=require("./context/tool/useTool.cjs"),q=require("./context/tool/provider.cjs"),f=require("./hooks/useWorkStatus.cjs"),A=require("./hooks/useWorkAutoRunScope.cjs"),k=require("./hooks/useRootAgent.cjs"),W=require("./hooks/useAgentMessages.cjs"),T=require("./hooks/useAgentStatus.cjs"),x=require("./hooks/useToolMessage.cjs"),M=require("./hooks/useAiMessage.cjs"),R=require("./tools/writeTodos/index.cjs"),S=require("./markdownRender/index.cjs");exports.AgentWorkRender=e.default;exports.AgentWorkAgent=r.default;exports.AgentWorkAction=t.default;exports.AiMessageRender=o.default;exports.UserMessageRender=u.default;exports.ToolRender=s.default;exports.ToolConfirmRender=n.default;exports.useWork=i.useWork;exports.useWorkContext=d.useWorkContext;exports.AgentWorkProvider=a.default;exports.useAgent=l.useAgent;exports.AgentProvider=c.default;exports.useTool=g.useTool;exports.ToolProvider=q.default;exports.useWorkStatus=f.default;exports.useWorkAutoRunScope=A.default;exports.useRootAgent=k.default;exports.useAgentMessages=W.default;exports.useAgentStatus=T.default;exports.useToolMessage=x.default;exports.useAiMessage=M.default;exports.writeTodosTool=R.default;exports.MarkdownRender=S.default;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("@shuttle-ai/type");;/* empty css */const t=require("./agentWork/render.cjs"),o=require("./agentWork/agent/index.cjs"),u=require("./agentWork/action/index.cjs"),s=require("./agentWork/agent/aiMessage/index.cjs"),n=require("./agentWork/agent/userMessage/index.cjs"),i=require("./agentWork/agent/toolRender/index.cjs"),d=require("./agentWork/agent/toolRender/confirm.cjs"),a=require("./context/agentWork/useWork.cjs"),c=require("./context/agentWork/useWorkContext.cjs"),l=require("./context/agentWork/provider.cjs"),f=require("./context/agent/useAgent.cjs"),g=require("./context/agent/provider.cjs"),q=require("./context/tool/useTool.cjs"),A=require("./context/tool/provider.cjs"),W=require("./hooks/useWorkStatus.cjs"),k=require("./hooks/useWorkAutoRunScope.cjs"),p=require("./hooks/useRootAgent.cjs"),T=require("./hooks/useAgentMessages.cjs"),x=require("./hooks/useAgentStatus.cjs"),M=require("./hooks/useToolMessage.cjs"),R=require("./hooks/useAiMessage.cjs"),S=require("./tools/writeTodos/index.cjs"),$=require("./markdownRender/index.cjs");exports.AgentWorkRender=t.default;exports.AgentWorkAgent=o.default;exports.AgentWorkAction=u.default;exports.AiMessageRender=s.default;exports.UserMessageRender=n.default;exports.ToolRender=i.default;exports.ToolConfirmRender=d.default;exports.useWork=a.useWork;exports.useWorkContext=c.useWorkContext;exports.AgentWorkProvider=l.default;exports.useAgent=f.useAgent;exports.AgentProvider=g.default;exports.useTool=q.useTool;exports.ToolProvider=A.default;exports.useWorkStatus=W.default;exports.useWorkAutoRunScope=k.default;exports.useRootAgent=p.default;exports.useAgentMessages=T.default;exports.useAgentStatus=x.default;exports.useToolMessage=M.default;exports.useAiMessage=R.default;exports.writeTodosTool=S.default;exports.MarkdownRender=$.default;Object.keys(r).forEach(e=>{e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:()=>r[e]})});
@@ -1 +1 @@
1
- .agent-work{display:flex;flex-direction:column}.agent-work .agent-work-main{flex:1;overflow-y:auto;padding:12px}.agent-work .agent-work-main .agent-work-agent{display:flex;flex-direction:column;gap:1rem;position:relative}.agent-work .agent-work-main .agent-work-agent:before{content:" ";display:inline-block;position:absolute;top:8px;left:0;width:1px;z-index:-1;height:calc(100% - 8px);background-color:#0000001a}.agent-work .agent-work-main .agent-work-agent-message{padding:0 12px;display:flex;flex-direction:column;gap:1rem}.agent-work-agent-message.user-message{position:relative}.agent-work-agent-message.user-message .agent-work-agent-message-expand-icon{position:absolute;top:8px;left:0;transform:translate(-50%);width:1rem;height:1rem;display:flex;align-items:center;justify-content:center;border-radius:50%;background-color:#fff;box-shadow:0 0 4px #0000001a;font-size:12px;cursor:pointer}.agent-work-agent-message.user-message .agent-work-agent-message-content{background-color:#fff;box-shadow:0 0 8px #0000001a;padding:8px 12px;border-radius:8px;margin:0;font-size:1rem}.agent-work-agent-tool{display:flex;flex-direction:column;padding:8px;border-radius:8px;background-color:#1677ff33;box-shadow:0 0 8px #0000001a}.agent-work-agent-tool .agent-work-agent-fn-tool{display:flex;flex-direction:column;gap:8px}.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-name{margin:0;font-weight:700}.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-args,.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-result{margin:0;padding-top:8px;border-top:1px solid #d9d9d9}.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-result:empty{display:none}.agent-work-agent-tool .fn-tool-confirm{display:flex;flex-direction:column;gap:4px;padding-top:8px;border-top:1px solid #d9d9d9}.agent-work-agent-tool .fn-tool-confirm .fn-tool-confirm-tip{font-size:14px}.agent-work-agent-tool .fn-tool-confirm .fn-tool-confirm-button-group{display:flex;align-items:center;gap:2rem}.agent-work-agent-message.ai-message .ai-message-content{padding:8px;border-radius:8px;background-color:#aff0b566;box-shadow:0 0 8px #0000001a}.agent-work-agent-message.ai-message .ai-message-content>.markdown-body{background-color:transparent}.agent-work-agent-message.ai-message .agent-work-agent-children,.agent-work-agent-message.ai-message .agent-work-agent-tools{display:flex;flex-direction:column;gap:1rem}.agent-work-action{display:flex;flex-direction:column;border-radius:8px;border:1px solid #d9d9d9}.agent-work-action:has(.agent-work-action-input:focus){border-color:#1677ff;box-shadow:0 0 4px #4096ffaa}.agent-work-action:has(.agent-work-action-input.ant-input-disabled){background-color:#0000000a}.agent-work-action .agent-work-action-input.ant-input-disabled{background-color:transparent}.agent-work-action .agent-work-action-input{border:none;outline:none;box-shadow:none;resize:none}.agent-work-action .agent-work-action-btns{display:flex;align-items:center;justify-content:flex-end;padding:4px 11px;gap:8px}.shuttle-ai-tool-todo{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-header{font-size:14px;font-weight:500;color:#333}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-item{display:inline-block;width:fit-content;font-size:14px}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-item.status-in_progress{color:transparent;-webkit-background-clip:text;background-clip:text;background-image:linear-gradient(90deg,#000 0% 45%,#f5222d 45%,#52c41a,#1677ff 55%,#000 55% 100%);background-size:200% auto;animation:bg-scan 1s linear infinite}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-item.status-completed{text-decoration:line-through;color:#888}@keyframes bg-scan{0%{background-position:100% center}to{background-position:0% center}}
1
+ .agent-work{display:flex;flex-direction:column}.agent-work .agent-work-main{flex:1;overflow-y:auto;padding:12px}.agent-work .agent-work-main .agent-work-agent{display:flex;flex-direction:column;gap:1rem;position:relative}.agent-work .agent-work-main .agent-work-agent:before{content:" ";display:inline-block;position:absolute;top:8px;left:0;width:1px;z-index:-1;height:calc(100% - 8px);background-color:#0000001a}.agent-work .agent-work-main .agent-work-agent-message{padding:0 12px;display:flex;flex-direction:column;gap:1rem}.agent-work-agent-message.user-message{position:relative}.agent-work-agent-message.user-message .agent-work-agent-message-expand-icon{position:absolute;top:8px;left:0;transform:translate(-50%);width:1rem;height:1rem;display:flex;align-items:center;justify-content:center;border-radius:50%;background-color:#fff;box-shadow:0 0 4px #0000001a;font-size:12px;cursor:pointer}.agent-work-agent-message.user-message .agent-work-agent-message-content{background-color:#fff;box-shadow:0 0 8px #0000001a;padding:8px 12px;border-radius:8px;margin:0;font-size:1rem}.agent-work-agent-tool{display:flex;flex-direction:column;padding:8px;border-radius:8px;background-color:#1677ff33;box-shadow:0 0 8px #0000001a}.agent-work-agent-tool .agent-work-agent-fn-tool{display:flex;flex-direction:column;gap:8px}.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-name{margin:0;font-weight:700}.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-args,.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-result{margin:0;padding-top:8px;border-top:1px solid #d9d9d9}.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-result:empty{display:none}.agent-work-agent-tool .agent-work-agent-render-tool{display:flex;flex-direction:column;gap:8px}.agent-work-agent-tool .agent-work-agent-render-tool .render-tool-name{margin:0;font-weight:700}.agent-work-agent-tool .fn-tool-confirm{display:flex;flex-direction:column;gap:4px;padding-top:8px;border-top:1px solid #d9d9d9}.agent-work-agent-tool .fn-tool-confirm .fn-tool-confirm-tip{font-size:14px}.agent-work-agent-tool .fn-tool-confirm .fn-tool-confirm-button-group{display:flex;align-items:center;gap:2rem}.agent-work-agent-message.ai-message .ai-message-content{padding:8px;border-radius:8px;background-color:#aff0b566;box-shadow:0 0 8px #0000001a}.agent-work-agent-message.ai-message .ai-message-content>.markdown-body{background-color:transparent}.agent-work-agent-message.ai-message .agent-work-agent-children,.agent-work-agent-message.ai-message .agent-work-agent-tools{display:flex;flex-direction:column;gap:1rem}.agent-work-action{display:flex;flex-direction:column;border-radius:8px;border:1px solid #d9d9d9}.agent-work-action:has(.agent-work-action-input:focus){border-color:#1677ff;box-shadow:0 0 4px #4096ffaa}.agent-work-action:has(.agent-work-action-input.ant-input-disabled){background-color:#0000000a}.agent-work-action .agent-work-action-input.ant-input-disabled{background-color:transparent}.agent-work-action .agent-work-action-input{border:none;outline:none;box-shadow:none;resize:none}.agent-work-action .agent-work-action-btns{display:flex;align-items:center;justify-content:flex-end;padding:4px 11px;gap:8px}.shuttle-ai-tool-todo{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-header{font-size:14px;font-weight:500;color:#333}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-item{display:inline-block;width:fit-content;font-size:14px}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-item.status-in_progress{color:transparent;-webkit-background-clip:text;background-clip:text;background-image:linear-gradient(90deg,#000 0% 45%,#f5222d 45%,#52c41a,#1677ff 55%,#000 55% 100%);background-size:200% auto;animation:bg-scan 1s linear infinite}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-item.status-completed{text-decoration:line-through;color:#888}@keyframes bg-scan{0%{background-position:100% center}to{background-position:0% center}}
@@ -1,33 +1,33 @@
1
1
  import { jsxs as s, jsx as r } from "react/jsx-runtime";
2
- import { useState as l, useEffect as j, useCallback as g } from "react";
3
- import { message as x, Radio as p, Button as T, Input as A } from "antd";
4
- import { SendOutlined as E } from "@ant-design/icons";
5
- function z({
2
+ import { useState as l, useEffect as v, useCallback as g } from "react";
3
+ import { message as x, Radio as p, Button as T, Input as E } from "antd";
4
+ import { SendOutlined as R } from "@ant-design/icons";
5
+ function C({
6
6
  toolId: f,
7
7
  result: t,
8
8
  agent: d,
9
9
  getConfirmResult: o,
10
- getNewArgs: v,
11
- onAfterConfirm: m
10
+ getNewArgs: m,
11
+ onAfterConfirm: u
12
12
  }) {
13
- const [n, u] = l(
13
+ const [n, y] = l(
14
14
  t?.type === "reject" ? "reject" : "accept"
15
- ), [a, y] = l(t?.reason || ""), [w, h] = l(!1);
16
- j(() => {
17
- t?.type && u(t.type === "reject" ? "reject" : "accept");
18
- }, [t?.type]), j(() => {
19
- t?.reason && y(t.reason);
15
+ ), [a, h] = l(t?.reason || ""), [w, j] = l(!1);
16
+ v(() => {
17
+ t?.type && y(t.type === "reject" ? "reject" : "accept");
18
+ }, [t?.type]), v(() => {
19
+ t?.reason && h(t.reason);
20
20
  }, [t?.reason]);
21
21
  const c = g(async () => {
22
22
  if (n === "reject" && !a) {
23
23
  x.warning("请输入拒绝原因");
24
24
  return;
25
25
  }
26
- h(!0);
26
+ j(!0);
27
27
  try {
28
28
  const e = n === "accept" ? {
29
29
  type: "confirm",
30
- newArgs: await v?.()
30
+ newArgs: await m?.()
31
31
  } : {
32
32
  type: "reject",
33
33
  reason: a
@@ -36,13 +36,21 @@ function z({
36
36
  const i = await o();
37
37
  i && (e.result = i.result, e.newArgs = i.newArgs, e.type = "confirmWithResult");
38
38
  }
39
- await d.confirmTool(f, e), m?.();
39
+ await d.confirmTool(f, e), u?.();
40
40
  } catch (e) {
41
41
  throw e;
42
42
  } finally {
43
- h(!1);
43
+ j(!1);
44
44
  }
45
- }, [n, a, f, d, o, m]), b = g(
45
+ }, [
46
+ n,
47
+ a,
48
+ f,
49
+ d,
50
+ o,
51
+ m,
52
+ u
53
+ ]), b = g(
46
54
  (e) => {
47
55
  e.shiftKey || (e.preventDefault(), c());
48
56
  },
@@ -58,7 +66,7 @@ function z({
58
66
  optionType: "button",
59
67
  value: n,
60
68
  disabled: !!t,
61
- onChange: (e) => u(e.target.value),
69
+ onChange: (e) => y(e.target.value),
62
70
  children: [
63
71
  /* @__PURE__ */ r(p, { value: "accept", children: "接受" }),
64
72
  /* @__PURE__ */ r(p, { value: "reject", children: "拒绝" })
@@ -74,18 +82,18 @@ function z({
74
82
  danger: n === "reject",
75
83
  loading: w,
76
84
  onClick: c,
77
- icon: /* @__PURE__ */ r(E, {}),
85
+ icon: /* @__PURE__ */ r(R, {}),
78
86
  children: "提交"
79
87
  }
80
88
  )
81
89
  ] }),
82
90
  n === "reject" && /* @__PURE__ */ r(
83
- A.TextArea,
91
+ E.TextArea,
84
92
  {
85
93
  disabled: !!t,
86
94
  placeholder: "请输入拒绝原因",
87
95
  value: a,
88
- onChange: (e) => y(e.target.value),
96
+ onChange: (e) => h(e.target.value),
89
97
  rows: 3,
90
98
  onPressEnter: b
91
99
  }
@@ -93,5 +101,5 @@ function z({
93
101
  ] });
94
102
  }
95
103
  export {
96
- z as default
104
+ C as default
97
105
  };
@@ -1,39 +1,42 @@
1
- import { jsx as o, jsxs as m } from "react/jsx-runtime";
2
- import { useMemo as f } from "react";
1
+ import { jsx as e, jsxs as s } from "react/jsx-runtime";
2
+ import { useMemo as a } from "react";
3
3
  import c from "../../../hooks/useToolMessage.mjs";
4
4
  import "../../../context/agentWork/base.mjs";
5
5
  import "@shuttle-ai/client";
6
- import { useAgent as u } from "../../../context/agent/useAgent.mjs";
6
+ import { useAgent as f } from "../../../context/agent/useAgent.mjs";
7
7
  import "../../../context/agent/base.mjs";
8
8
  import "../../../context/tool/base.mjs";
9
- import p from "../../../context/tool/provider.mjs";
10
- import a from "./confirm.mjs";
9
+ import u from "../../../context/tool/provider.mjs";
10
+ import l from "./confirm.mjs";
11
11
  /* empty css */
12
- function R({ toolCall: r }) {
13
- const e = u(), n = c(e, r.id), t = f(() => e.options.tools?.find((s) => s.name === r.name), [e, r.name]);
14
- return n ? /* @__PURE__ */ o("div", { className: "agent-work-agent-tool", children: t?.run.type !== "render" ? /* @__PURE__ */ m("div", { className: "agent-work-agent-fn-tool", children: [
15
- /* @__PURE__ */ o("p", { className: "fn-tool-name", children: r.name }),
16
- /* @__PURE__ */ o("pre", { className: "fn-tool-args", children: i(r.args) }),
17
- /* @__PURE__ */ o("pre", { className: "fn-tool-result", children: i(n.content || n.confirm?.result) }),
18
- /* @__PURE__ */ o(
19
- a,
12
+ function w({ toolCall: r }) {
13
+ const n = f(), o = c(n, r.id), t = a(() => n.options.tools?.find((m) => m.name === r.name), [n, r.name]);
14
+ return o ? /* @__PURE__ */ e("div", { className: "agent-work-agent-tool", children: t?.run.type !== "render" ? /* @__PURE__ */ s("div", { className: "agent-work-agent-fn-tool", children: [
15
+ /* @__PURE__ */ e("p", { className: "fn-tool-name", children: t?.label || r.name }),
16
+ /* @__PURE__ */ e("pre", { className: "fn-tool-args", children: i(r.args) }),
17
+ /* @__PURE__ */ e("pre", { className: "fn-tool-result", children: i(o.result || o.confirm?.result) }),
18
+ /* @__PURE__ */ e(
19
+ l,
20
20
  {
21
- result: n.confirm,
21
+ result: o.confirm,
22
22
  toolId: r.id,
23
- agent: e
23
+ agent: n
24
24
  }
25
25
  )
26
- ] }) : /* @__PURE__ */ o(
27
- p,
28
- {
29
- toolId: r.id,
30
- agent: e,
31
- args: r.args,
32
- content: n.content,
33
- confirmResult: n.confirm,
34
- run: t.run
35
- }
36
- ) }) : null;
26
+ ] }) : /* @__PURE__ */ s("div", { className: "agent-work-agent-render-tool", children: [
27
+ /* @__PURE__ */ e("p", { className: "render-tool-name", children: t?.label || r.name }),
28
+ /* @__PURE__ */ e(
29
+ u,
30
+ {
31
+ toolId: r.id,
32
+ agent: n,
33
+ args: r.args,
34
+ result: o.result,
35
+ confirmResult: o.confirm,
36
+ run: t.run
37
+ }
38
+ )
39
+ ] }) }) : null;
37
40
  }
38
41
  function i(r) {
39
42
  if (typeof r == "object")
@@ -45,5 +48,5 @@ function i(r) {
45
48
  }
46
49
  }
47
50
  export {
48
- R as default
51
+ w as default
49
52
  };
@@ -1,8 +1,11 @@
1
1
  import { createContext as t } from "react";
2
2
  const e = t({
3
3
  args: {},
4
+ effectArgs: {},
4
5
  agent: {},
5
- toolId: ""
6
+ toolId: "",
7
+ updateArg: () => {
8
+ }
6
9
  });
7
10
  export {
8
11
  e as toolContext
@@ -1,33 +1,49 @@
1
- import { jsx as t } from "react/jsx-runtime";
2
- import { useCallback as P, useMemo as u } from "react";
3
- import { toolContext as a } from "./base.mjs";
4
- function x({
5
- args: r,
6
- content: e,
7
- toolId: f,
8
- confirmResult: l,
9
- agent: i,
1
+ import { jsx as A } from "react/jsx-runtime";
2
+ import { useCallback as m, useState as E, useEffect as T, useMemo as a } from "react";
3
+ import { toolContext as b } from "./base.mjs";
4
+ function M({
5
+ args: e,
6
+ result: f,
7
+ toolId: n,
8
+ confirmResult: t,
9
+ agent: c,
10
10
  run: o
11
11
  }) {
12
- const p = P(
13
- (s) => i.confirmTool(f, s),
14
- [i, f]
15
- ), d = u(
12
+ const s = m(
13
+ (r) => c.confirmTool(n, r),
14
+ [c, n]
15
+ ), [d, l] = E(t?.newArgs || e);
16
+ T(() => {
17
+ l(t?.newArgs || e);
18
+ }, [t?.newArgs, e]);
19
+ const v = m((r, x) => {
20
+ l((C) => {
21
+ const u = { ...C };
22
+ let p = u;
23
+ for (let i = 0; i < r.length; i++) {
24
+ const P = r[i];
25
+ i === r.length - 1 ? p[P] = x : p = { ...p[P] };
26
+ }
27
+ return u;
28
+ });
29
+ }, []), w = a(
16
30
  () => ({
17
- args: r,
18
- agent: i,
19
- toolId: f,
20
- content: e,
21
- confirmResult: l,
22
- confirm: p
31
+ args: e,
32
+ effectArgs: d,
33
+ agent: c,
34
+ toolId: n,
35
+ result: f,
36
+ confirmResult: t,
37
+ confirm: s,
38
+ updateArg: v
23
39
  }),
24
- [r, i, f, e, l, p]
25
- ), m = u(() => o.defaultProps ? typeof o.defaultProps == "function" ? o.defaultProps({
26
- args: r,
27
- content: e
28
- }) : o.defaultProps : {}, [o.defaultProps, r, e]);
29
- return /* @__PURE__ */ t(a.Provider, { value: d, children: /* @__PURE__ */ t(o.Render, { ...m }) });
40
+ [e, c, n, f, t, d, s]
41
+ ), h = a(() => o.defaultProps ? typeof o.defaultProps == "function" ? o.defaultProps({
42
+ args: e,
43
+ result: f
44
+ }) : o.defaultProps : {}, [o.defaultProps, e, f]);
45
+ return /* @__PURE__ */ A(b.Provider, { value: w, children: /* @__PURE__ */ A(o.Render, { ...h }) });
30
46
  }
31
47
  export {
32
- x as default
48
+ M as default
33
49
  };
package/dist/es/index.css CHANGED
@@ -1 +1 @@
1
- .agent-work{display:flex;flex-direction:column}.agent-work .agent-work-main{flex:1;overflow-y:auto;padding:12px}.agent-work .agent-work-main .agent-work-agent{display:flex;flex-direction:column;gap:1rem;position:relative}.agent-work .agent-work-main .agent-work-agent:before{content:" ";display:inline-block;position:absolute;top:8px;left:0;width:1px;z-index:-1;height:calc(100% - 8px);background-color:#0000001a}.agent-work .agent-work-main .agent-work-agent-message{padding:0 12px;display:flex;flex-direction:column;gap:1rem}.agent-work-agent-message.user-message{position:relative}.agent-work-agent-message.user-message .agent-work-agent-message-expand-icon{position:absolute;top:8px;left:0;transform:translate(-50%);width:1rem;height:1rem;display:flex;align-items:center;justify-content:center;border-radius:50%;background-color:#fff;box-shadow:0 0 4px #0000001a;font-size:12px;cursor:pointer}.agent-work-agent-message.user-message .agent-work-agent-message-content{background-color:#fff;box-shadow:0 0 8px #0000001a;padding:8px 12px;border-radius:8px;margin:0;font-size:1rem}.agent-work-agent-tool{display:flex;flex-direction:column;padding:8px;border-radius:8px;background-color:#1677ff33;box-shadow:0 0 8px #0000001a}.agent-work-agent-tool .agent-work-agent-fn-tool{display:flex;flex-direction:column;gap:8px}.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-name{margin:0;font-weight:700}.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-args,.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-result{margin:0;padding-top:8px;border-top:1px solid #d9d9d9}.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-result:empty{display:none}.agent-work-agent-tool .fn-tool-confirm{display:flex;flex-direction:column;gap:4px;padding-top:8px;border-top:1px solid #d9d9d9}.agent-work-agent-tool .fn-tool-confirm .fn-tool-confirm-tip{font-size:14px}.agent-work-agent-tool .fn-tool-confirm .fn-tool-confirm-button-group{display:flex;align-items:center;gap:2rem}.agent-work-agent-message.ai-message .ai-message-content{padding:8px;border-radius:8px;background-color:#aff0b566;box-shadow:0 0 8px #0000001a}.agent-work-agent-message.ai-message .ai-message-content>.markdown-body{background-color:transparent}.agent-work-agent-message.ai-message .agent-work-agent-children,.agent-work-agent-message.ai-message .agent-work-agent-tools{display:flex;flex-direction:column;gap:1rem}.agent-work-action{display:flex;flex-direction:column;border-radius:8px;border:1px solid #d9d9d9}.agent-work-action:has(.agent-work-action-input:focus){border-color:#1677ff;box-shadow:0 0 4px #4096ffaa}.agent-work-action:has(.agent-work-action-input.ant-input-disabled){background-color:#0000000a}.agent-work-action .agent-work-action-input.ant-input-disabled{background-color:transparent}.agent-work-action .agent-work-action-input{border:none;outline:none;box-shadow:none;resize:none}.agent-work-action .agent-work-action-btns{display:flex;align-items:center;justify-content:flex-end;padding:4px 11px;gap:8px}.shuttle-ai-tool-todo{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-header{font-size:14px;font-weight:500;color:#333}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-item{display:inline-block;width:fit-content;font-size:14px}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-item.status-in_progress{color:transparent;-webkit-background-clip:text;background-clip:text;background-image:linear-gradient(90deg,#000 0% 45%,#f5222d 45%,#52c41a,#1677ff 55%,#000 55% 100%);background-size:200% auto;animation:bg-scan 1s linear infinite}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-item.status-completed{text-decoration:line-through;color:#888}@keyframes bg-scan{0%{background-position:100% center}to{background-position:0% center}}
1
+ .agent-work{display:flex;flex-direction:column}.agent-work .agent-work-main{flex:1;overflow-y:auto;padding:12px}.agent-work .agent-work-main .agent-work-agent{display:flex;flex-direction:column;gap:1rem;position:relative}.agent-work .agent-work-main .agent-work-agent:before{content:" ";display:inline-block;position:absolute;top:8px;left:0;width:1px;z-index:-1;height:calc(100% - 8px);background-color:#0000001a}.agent-work .agent-work-main .agent-work-agent-message{padding:0 12px;display:flex;flex-direction:column;gap:1rem}.agent-work-agent-message.user-message{position:relative}.agent-work-agent-message.user-message .agent-work-agent-message-expand-icon{position:absolute;top:8px;left:0;transform:translate(-50%);width:1rem;height:1rem;display:flex;align-items:center;justify-content:center;border-radius:50%;background-color:#fff;box-shadow:0 0 4px #0000001a;font-size:12px;cursor:pointer}.agent-work-agent-message.user-message .agent-work-agent-message-content{background-color:#fff;box-shadow:0 0 8px #0000001a;padding:8px 12px;border-radius:8px;margin:0;font-size:1rem}.agent-work-agent-tool{display:flex;flex-direction:column;padding:8px;border-radius:8px;background-color:#1677ff33;box-shadow:0 0 8px #0000001a}.agent-work-agent-tool .agent-work-agent-fn-tool{display:flex;flex-direction:column;gap:8px}.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-name{margin:0;font-weight:700}.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-args,.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-result{margin:0;padding-top:8px;border-top:1px solid #d9d9d9}.agent-work-agent-tool .agent-work-agent-fn-tool .fn-tool-result:empty{display:none}.agent-work-agent-tool .agent-work-agent-render-tool{display:flex;flex-direction:column;gap:8px}.agent-work-agent-tool .agent-work-agent-render-tool .render-tool-name{margin:0;font-weight:700}.agent-work-agent-tool .fn-tool-confirm{display:flex;flex-direction:column;gap:4px;padding-top:8px;border-top:1px solid #d9d9d9}.agent-work-agent-tool .fn-tool-confirm .fn-tool-confirm-tip{font-size:14px}.agent-work-agent-tool .fn-tool-confirm .fn-tool-confirm-button-group{display:flex;align-items:center;gap:2rem}.agent-work-agent-message.ai-message .ai-message-content{padding:8px;border-radius:8px;background-color:#aff0b566;box-shadow:0 0 8px #0000001a}.agent-work-agent-message.ai-message .ai-message-content>.markdown-body{background-color:transparent}.agent-work-agent-message.ai-message .agent-work-agent-children,.agent-work-agent-message.ai-message .agent-work-agent-tools{display:flex;flex-direction:column;gap:1rem}.agent-work-action{display:flex;flex-direction:column;border-radius:8px;border:1px solid #d9d9d9}.agent-work-action:has(.agent-work-action-input:focus){border-color:#1677ff;box-shadow:0 0 4px #4096ffaa}.agent-work-action:has(.agent-work-action-input.ant-input-disabled){background-color:#0000000a}.agent-work-action .agent-work-action-input.ant-input-disabled{background-color:transparent}.agent-work-action .agent-work-action-input{border:none;outline:none;box-shadow:none;resize:none}.agent-work-action .agent-work-action-btns{display:flex;align-items:center;justify-content:flex-end;padding:4px 11px;gap:8px}.shuttle-ai-tool-todo{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-header{font-size:14px;font-weight:500;color:#333}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-item{display:inline-block;width:fit-content;font-size:14px}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-item.status-in_progress{color:transparent;-webkit-background-clip:text;background-clip:text;background-image:linear-gradient(90deg,#000 0% 45%,#f5222d 45%,#52c41a,#1677ff 55%,#000 55% 100%);background-size:200% auto;animation:bg-scan 1s linear infinite}.shuttle-ai-tool-todo .shuttle-ai-tool-todo-item.status-completed{text-decoration:line-through;color:#888}@keyframes bg-scan{0%{background-position:100% center}to{background-position:0% center}}
package/dist/es/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import "@shuttle-ai/type";
1
+ export * from "@shuttle-ai/type";
2
2
  /* empty css */
3
3
  import { default as a } from "./agentWork/render.mjs";
4
4
  import { default as f } from "./agentWork/agent/index.mjs";
@@ -2,10 +2,17 @@ import { ShuttleAi } from '@shuttle-ai/type';
2
2
  import { Agent } from '@shuttle-ai/client';
3
3
  export interface ToolContext<T extends Record<string, any> = Record<string, any>> {
4
4
  args: T;
5
+ effectArgs: T;
5
6
  agent: Agent;
6
7
  toolId: string;
7
- content?: string;
8
- confirmResult?: ShuttleAi.Tool.ConfirmResult;
9
- confirm?: (result: ShuttleAi.Tool.ConfirmResult) => Promise<void>;
8
+ result?: ShuttleAi.Tool.Result;
9
+ confirmResult?: ShuttleAi.Tool.ConfirmResult<T>;
10
+ confirm?: (result: ShuttleAi.Tool.ConfirmResult<T>) => Promise<void>;
11
+ updateArg: <P extends ObjectArrayPaths<T>>(paths: P, v: PathValue<T, P>) => void;
10
12
  }
11
13
  export declare const toolContext: import('react').Context<ToolContext<Record<string, any>>>;
14
+ type ObjectArrayPaths<T, Prefix extends string[] = [], Depth extends number = 6, Counter extends unknown[] = []> = Counter['length'] extends Depth ? never : T extends Record<string, any> ? {
15
+ [K in keyof T]: K extends string ? [...Prefix, K] | ObjectArrayPaths<T[K], [...Prefix, K], Depth, [...Counter, 1]> : never;
16
+ }[keyof T] : never;
17
+ type PathValue<T, P extends string[]> = P extends [] ? T : P extends [infer First, ...infer Rest] ? First extends keyof T ? Rest extends [] ? T[First] : Rest extends string[] ? PathValue<T[First], Rest> : never : never : never;
18
+ export {};
@@ -2,11 +2,11 @@ import { Agent } from '@shuttle-ai/client';
2
2
  import { ShuttleAi } from '@shuttle-ai/type';
3
3
  interface Props {
4
4
  args: Record<string, any>;
5
- content?: string;
5
+ result?: ShuttleAi.Tool.Result;
6
6
  toolId: string;
7
7
  confirmResult?: ShuttleAi.Tool.ConfirmResult;
8
8
  agent: Agent;
9
9
  run: ShuttleAi.Client.Agent.RenderTool;
10
10
  }
11
- export default function ToolProvider({ args, content, toolId, confirmResult, agent, run, }: Props): import("react/jsx-runtime").JSX.Element;
11
+ export default function ToolProvider({ args, result, toolId, confirmResult, agent, run, }: Props): import("react/jsx-runtime").JSX.Element;
12
12
  export {};
@@ -1,2 +1,2 @@
1
1
  import { Agent } from '@shuttle-ai/client';
2
- export default function useAgentMessages(agent: Agent): ShuttleAi.Message.Define[];
2
+ export default function useAgentMessages(agent: Agent): import("@shuttle-ai/type").ShuttleAi.Message.Define[];
@@ -1,2 +1,3 @@
1
1
  import { Agent } from '@shuttle-ai/client';
2
- export default function useAiMessage(agent: Agent, messageId: string): any;
2
+ import { ShuttleAi } from '@shuttle-ai/type';
3
+ export default function useAiMessage(agent: Agent, messageId: string): ShuttleAi.Message.AI | undefined;
@@ -1,2 +1,3 @@
1
1
  import { Agent } from '@shuttle-ai/client';
2
- export default function useToolMessage(agent: Agent, messageId: string): any;
2
+ import { ShuttleAi } from '@shuttle-ai/type';
3
+ export default function useToolMessage(agent: Agent, messageId: string): ShuttleAi.Message.Tool | undefined;
@@ -1,3 +1,4 @@
1
+ export * from './type';
1
2
  export * from './agentWork';
2
3
  export * from './context';
3
4
  export * from './hooks';
@@ -1,3 +1,4 @@
1
+ export * from '@shuttle-ai/type';
1
2
  declare module '@shuttle-ai/type' {
2
3
  namespace ShuttleAi {
3
4
  namespace Client {
@@ -6,7 +7,7 @@ declare module '@shuttle-ai/type' {
6
7
  Render: React.FC<any>;
7
8
  defaultProps?: Record<string, any> | ((params: {
8
9
  args: Record<string, any>;
9
- content?: string;
10
+ result?: Tool.Result;
10
11
  }) => Record<string, any>);
11
12
  }
12
13
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shuttle-ai/render-react",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "author": "Mingbing-get <1508850533@qq.com>",
5
5
  "license": "MIT",
6
6
  "description": "Shuttle AI web端智能体react渲染库",
@@ -35,8 +35,8 @@
35
35
  "remark-breaks": "^4.0.0",
36
36
  "remark-frontmatter": "^5.0.0",
37
37
  "remark-gfm": "^4.0.1",
38
- "@shuttle-ai/client": "0.0.5",
39
- "@shuttle-ai/type": "0.0.5"
38
+ "@shuttle-ai/client": "0.0.7",
39
+ "@shuttle-ai/type": "0.0.7"
40
40
  },
41
41
  "devDependencies": {
42
42
  "typescript": "^5.3.3",