@kanyun-ai-infra/band-cli 0.1.1 → 0.2.1

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.
Files changed (81) hide show
  1. package/bundled/examples/aitutor-tool/band/views/release/package.json +1 -1
  2. package/bundled/examples/aitutor-tool/band/views/tool-preview/package.json +1 -1
  3. package/bundled/examples/analysis/band/views/intake/package.json +1 -1
  4. package/bundled/examples/compliance/band/views/compliance/package.json +1 -1
  5. package/bundled/examples/content-review/band/views/checklist/package.json +1 -1
  6. package/bundled/examples/rush-site/band/views/rush-db/package.json +1 -1
  7. package/bundled/examples/rush-site/band/views/rush-deploy/package.json +1 -1
  8. package/bundled/examples/video/band/views/timeline/package.json +1 -1
  9. package/bundled/kernel/fixture.js +1 -1
  10. package/bundled/kernel/index.js +1 -1
  11. package/bundled/official/activity/package.json +4 -4
  12. package/bundled/official/approval/package.json +4 -4
  13. package/bundled/official/artifacts/package.json +4 -4
  14. package/bundled/official/chat/dist/index.js +1 -1
  15. package/bundled/official/chat/package.json +4 -4
  16. package/bundled/official/chunks/chunk-7XYETT7C.js +1 -0
  17. package/bundled/official/comment/dist/index.js +1 -1
  18. package/bundled/official/comment/package.json +4 -4
  19. package/bundled/official/header/package.json +4 -4
  20. package/bundled/official/home/dist/index.js +1 -1
  21. package/bundled/official/home/package.json +4 -4
  22. package/bundled/official/layouts/package.json +4 -4
  23. package/bundled/official/library/dist/index.js +1 -1
  24. package/bundled/official/library/package.json +4 -4
  25. package/bundled/official/members/dist/index.js +1 -1
  26. package/bundled/official/members/package.json +4 -4
  27. package/bundled/official/memory/package.json +4 -4
  28. package/bundled/official/native/package.json +2 -2
  29. package/bundled/official/params-form/package.json +4 -4
  30. package/bundled/official/plugins/package.json +4 -4
  31. package/bundled/official/project/dist/index.js +1 -1
  32. package/bundled/official/project/package.json +4 -4
  33. package/bundled/official/queue/package.json +4 -4
  34. package/bundled/official/settings/dist/index.js +1 -1
  35. package/bundled/official/settings/package.json +4 -4
  36. package/bundled/official/shell/dist/index.js +1 -1
  37. package/bundled/official/shell/package.json +4 -4
  38. package/bundled/official/stages/package.json +4 -4
  39. package/bundled/official/threads/dist/index.js +1 -1
  40. package/bundled/official/threads/package.json +4 -4
  41. package/bundled/official/turn-bar/package.json +4 -4
  42. package/bundled/official/turn-trace/package.json +4 -4
  43. package/bundled/official/version-switch/dist/index.js +1 -1
  44. package/bundled/official/version-switch/package.json +4 -4
  45. package/bundled/official/viewer-entity/package.json +2 -2
  46. package/bundled/official/viewer-external/package.json +2 -2
  47. package/bundled/official/viewer-image/package.json +2 -2
  48. package/bundled/official/viewer-media/package.json +2 -2
  49. package/bundled/official/viewer-storyboard/package.json +2 -2
  50. package/bundled/official/viewer-text/package.json +4 -4
  51. package/bundled/official/viewer-tool/package.json +2 -2
  52. package/bundled/official/viewer-web/package.json +2 -2
  53. package/bundled/official/viewer-web-app/package.json +2 -2
  54. package/bundled/official/workshops/dist/index.js +2 -2
  55. package/bundled/official/workshops/package.json +4 -4
  56. package/bundled/official/workshops/plugin.yaml +2 -2
  57. package/bundled/skills/band-plugin/references/code.md +2 -2
  58. package/bundled/skills/band-plugin/references/manifest.md +2 -2
  59. package/bundled/skills/band-plugin/references/rules.md +1 -0
  60. package/bundled/skills/band-plugin/references/testing-publish.md +1 -1
  61. package/bundled/skills/band-plugin/templates/panel/package.json +1 -1
  62. package/bundled/tokens/components.css +1 -1
  63. package/dev-host/app.tsx +32 -12
  64. package/dev-host/host.css +7 -0
  65. package/dist/bin.js +3 -3
  66. package/dist/build-plugin.d.ts +1 -1
  67. package/dist/build-plugin.js +1 -1
  68. package/dist/{chunk-VTAJX7NN.js → chunk-FGPWXAOA.js} +165 -26
  69. package/dist/{chunk-TQHHHXXU.js → chunk-LGYGWMSY.js} +18 -16
  70. package/dist/{chunk-JWZU3NOD.js → chunk-XPLYTHNX.js} +1 -1
  71. package/dist/{dev-server-SB5FMSVP.js → dev-server-IBR3PKDE.js} +33 -5
  72. package/dist/fixture.d.ts +11 -0
  73. package/dist/index.d.ts +4 -2
  74. package/dist/index.js +3 -3
  75. package/dist/vite.d.ts +1 -1
  76. package/dist/vite.js +2 -2
  77. package/dist/{workshop-repo-Uq6blxyt.d.ts → workshop-repo-DqoVdcGu.d.ts} +9 -9
  78. package/package.json +10 -7
  79. package/src/dev-managers.ts +16 -0
  80. package/src/inspector-default.ts +9 -0
  81. package/bundled/official/chunks/chunk-SB74RUTN.js +0 -1
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@kanyun-ai-infra/band-library",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "产物库与产物:项目里的产物一页看,或按人跨项目平铺",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": "./dist/index.js"
8
8
  },
9
9
  "peerDependencies": {
10
- "@kanyun-ai-infra/band-plugin-sdk": "^1.222.0",
11
- "react": "^18.3.1",
12
- "react-dom": "^18.3.1",
10
+ "@kanyun-ai-infra/band-plugin-sdk": "^2.1.0",
11
+ "react": "^19.0.0",
12
+ "react-dom": "^19.0.0",
13
13
  "@kanyun-ai-infra/band-shell": "*",
14
14
  "@kanyun-ai-infra/band-project": "*"
15
15
  }
@@ -1 +1 @@
1
- import"../../chunks/chunk-JFPQMFKF.js";import{Avatar,ErrorNote as ErrorNote2,PaneHeader,SettingsNoAccess,SettingsReadError,SettingsSaveState,instrumentOf,isForbidden,memberOrder,reactMount,roleLabel,useCtxData,useMembers,useRoute}from"@kanyun-ai-infra/band-plugin-react";import{projectPath}from"@kanyun-ai-infra/band-plugin-sdk";import{definePlugin}from"@kanyun-ai-infra/band-plugin-sdk";import{useEffect as useEffect2,useState as useState2}from"react";import{ErrorNote}from"@kanyun-ai-infra/band-plugin-react";import{useEffect,useId,useState}from"react";import{jsx,jsxs}from"react/jsx-runtime";import{SettingsDanger,SettingsDangerRow,SettingsDialog,SettingsEmpty,SettingsFacts,SettingsHead,SettingsLoading,SettingsRow,SettingsRows,SettingsSection}from"@kanyun-ai-infra/band-plugin-react";import{Fragment,jsx as jsx2,jsxs as jsxs2}from"react/jsx-runtime";if(typeof document!=="undefined"&&document.head){const css="/* src/members.css */\n.band-members {\n list-style: none;\n margin: 0;\n padding: 0 16px 12px;\n display: grid;\n gap: 8px;\n font-size: var(--fs-ui);\n}\n.band-members-item {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.band-members-name {\n flex: 0 0.2 auto;\n min-width: 2em;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-members-role {\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-members-cost {\n color: var(--muted);\n font-size: var(--fs-dense);\n white-space: nowrap;\n}\n.band-members-form {\n flex: 1 1 100%;\n display: grid;\n gap: 12px;\n font-size: var(--fs-row);\n}\n.band-members-form:where(fieldset) {\n margin: 0;\n padding: 0;\n border: 0;\n min-width: 0;\n}\n.band-members-form:where(.band-members-row > *) {\n padding-left: 36px;\n}\n.band-members-form p {\n margin: 0;\n}\n.band-members-field {\n position: relative;\n display: grid;\n gap: 4px;\n max-width: 360px;\n}\n.band-members-tags {\n margin: 0;\n padding: 0;\n border: 0;\n display: flex;\n flex-wrap: wrap;\n gap: 4px 16px;\n}\n.band-members-tags legend {\n padding: 0;\n margin-bottom: 4px;\n}\n.band-members-hint {\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-members-cands {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n z-index: 1;\n margin: 4px 0 0;\n padding: 4px;\n list-style: none;\n background: var(--panel);\n border-radius: var(--r);\n box-shadow: var(--shadow-pop);\n max-height: 240px;\n overflow: auto;\n overscroll-behavior: contain;\n}\n.band-members-cands button {\n display: flex;\n width: 100%;\n gap: 8px;\n align-items: baseline;\n padding: 6px 8px;\n border: 0;\n border-radius: var(--r);\n background: none;\n font: inherit;\n color: var(--ink);\n text-align: left;\n cursor: pointer;\n}\n.band-members-cands button:hover,\n.band-members-cands button:focus-visible {\n background: var(--fill);\n}\n.band-members-cands b {\n font-weight: 500;\n}\n.band-members-cands span {\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-members-actions {\n display: flex;\n gap: 8px;\n}\n";let el=document.head.querySelector('style[data-band-style="@kanyun-ai-infra/band-members"]');if(!el){el=document.createElement("style");el.setAttribute("data-band-style","@kanyun-ai-infra/band-members");document.head.prepend(el)}el.textContent=css}var MANAGEMENT_LABEL={owner:"\u521B\u5EFA\u4EBA",maintainer:"\u7BA1\u7406\u5458",member:"\u6210\u5458"};var RANK={member:1,maintainer:2};function grantable(self,current){const all=["member","maintainer"];if(!self)return all;const now=current===void 0?0:current==="owner"?3:RANK[current];return all.filter(r=>RANK[r]<=now)}var failed=e=>e instanceof Error?e.message:String(e);function TagChoices({options,value,onChange,disabled}){return jsxs("fieldset",{className:"band-members-tags",children:[jsxs("legend",{children:["\u89D2\u8272 ",jsx("span",{className:"band-members-hint",children:"\u5FC5\u586B\uFF0C\u81F3\u5C11\u4E00\u4E2A"})]}),options.map(o=>jsxs("label",{className:"choice sm",children:[jsx("input",{type:"checkbox",className:"checkbox",checked:value.includes(o.name),disabled,onChange:e=>onChange(e.target.checked?[...value,o.name]:value.filter(r=>r!==o.name))}),o.label??o.name]},o.name))]})}function RoleSelect({value,options,onChange,disabled,fill}){const id=useId();return jsxs("div",{className:"band-members-field",children:[jsx("label",{htmlFor:id,children:"\u7BA1\u7406\u89D2\u8272"}),jsx("select",{id,className:fill?"field fill":"field",value,disabled:disabled||options.length<2,onChange:e=>onChange(e.target.value==="maintainer"?"maintainer":"member"),children:options.map(r=>jsx("option",{value:r,children:MANAGEMENT_LABEL[r]},r))})]})}function InviteForm({api,settings,onDone,onCancel}){const[q,setQ]=useState("");const[picked,setPicked]=useState(null);const[found,setFound]=useState({q:"",users:[]});const[tags,setTags]=useState([]);const[role,setRole]=useState("member");const[busy,setBusy]=useState(false);const[error,setError]=useState(null);const inputId=useId();const listId=useId();const taken=new Set(settings.people.map(p=>p.userId));const ldap=q.trim();useEffect(()=>{if(picked||ldap===""){setFound({q:"",users:[]});return}let live=true;const t=setTimeout(()=>{api.searchUsers(ldap).then(users=>live&&setFound({q:ldap,users}),()=>live&&setFound({q:"",users:[]}))},200);return()=>{live=false;clearTimeout(t)}},[api,ldap,picked]);const userId=picked?.id??ldap;const settled=found.q===ldap;const exact=settled?found.users.find(u=>u.id===ldap):void 0;const candidates=settled?found.users.filter(u=>!taken.has(u.id)):[];async function submit(){if(userId==="")return setError("\u8FD8\u6CA1\u9009\u4EBA\uFF1A\u8F93\u5165 ldap \u6216\u59D3\u540D\u67E5\u627E");if(/\s/.test(userId))return setError("ldap \u91CC\u4E0D\u80FD\u6709\u7A7A\u683C");if(taken.has(userId))return setError(`${userId} \u5DF2\u7ECF\u662F\u6210\u5458\uFF0C\u5728\u5217\u8868\u91CC\u6539\u89D2\u8272`);if(tags.length===0)return setError("\u8FD8\u5DEE\u89D2\u8272\u6CA1\u9009\uFF1A\u81F3\u5C11\u9009\u4E00\u4E2A");setBusy(true);setError(null);try{let known=picked??void 0;if(!known){try{known=(await api.searchUsers(userId)).find(u=>u.id===userId)}catch(e){return setError(`\u67E5\u7528\u6237\u76EE\u5F55\u5931\u8D25\uFF0C\u8FD8\u6CA1\u9080\u8BF7\uFF1A${failed(e)}`)}}const next=await api.set({userId,roles:tags,role,...known?{}:{displayName:userId}});onDone(next)}catch(e){setError(`\u9080\u8BF7\u5931\u8D25\uFF1A${failed(e)}`)}finally{setBusy(false)}}return jsxs("form",{className:"band-members-form field-host","aria-label":"\u9080\u8BF7\u6210\u5458",onSubmit:e=>{e.preventDefault();void submit()},children:[jsxs("div",{className:"band-members-field",children:[jsxs("label",{htmlFor:inputId,children:["\u9080\u8BF7\u8C01 ",jsx("span",{className:"band-members-hint",children:"\u5FC5\u586B"})]}),jsx("input",{id:inputId,className:"field fill",value:picked?`${picked.displayName}\uFF08${picked.id}\uFF09`:q,placeholder:"\u8F93\u5165 ldap \u6216\u59D3\u540D\u67E5\u627E",autoComplete:"off","aria-controls":listId,disabled:busy,onChange:e=>{setPicked(null);setQ(e.target.value)}}),candidates.length>0&&jsx("ul",{className:"band-members-cands",id:listId,"aria-label":"\u5019\u9009\u7684\u4EBA",children:candidates.map(u=>jsx("li",{children:jsxs("button",{type:"button",onClick:()=>{setPicked(u);setQ(u.id)},children:[jsx("b",{children:u.displayName}),jsx("span",{children:u.id})]})},u.id))}),!picked&&ldap!==""&&settled&&!exact&&!taken.has(ldap)&&jsxs("p",{className:"band-members-hint",children:["\u76EE\u5F55\u91CC\u6CA1\u6709 ",ldap,"\uFF08\u8FD8\u6CA1\u767B\u5F55\u8FC7 Band\uFF09\uFF1A\u7167\u6837\u53EF\u4EE5\u6309\u8FD9\u4E2A ldap \u9080\u8BF7\uFF0C\u4E2D\u6587\u540D\u4E4B\u540E\u81EA\u52A8\u8865\u4E0A\u3002"]})]}),jsx(TagChoices,{options:settings.roles,value:tags,onChange:setTags,disabled:busy}),jsx(RoleSelect,{value:role,options:grantable(false,void 0),onChange:setRole,disabled:busy,fill:true}),jsx(ErrorNote,{children:error}),jsxs("div",{className:"band-members-actions",children:[jsx("button",{type:"submit",className:"btn primary sm",disabled:busy,children:busy?"\u6B63\u5728\u9080\u8BF7\u2026":"\u9080\u8BF7"}),jsx("button",{type:"button",className:"btn ghost sm",disabled:busy,onClick:onCancel,children:"\u53D6\u6D88"})]})]})}function EditPerson({api,settings,person,self,onDone,onCancel}){const known=new Set(settings.roles.map(r=>r.name));const stale=person.roles.filter(r=>!known.has(r));const[tags,setTags]=useState(person.roles.filter(r=>known.has(r)));const[role,setRole]=useState(person.role==="maintainer"?"maintainer":"member");const[busy,setBusy]=useState(false);const[error,setError]=useState(null);const owner=person.role==="owner";async function save(){if(tags.length===0)return setError("\u8FD8\u5DEE\u89D2\u8272\u6CA1\u9009\uFF1A\u81F3\u5C11\u9009\u4E00\u4E2A");setBusy(true);setError(null);try{onDone(await api.set({userId:person.userId,roles:tags,...owner?{}:{role}}))}catch(e){setError(failed(e))}finally{setBusy(false)}}return jsxs("form",{className:"band-members-form","aria-label":`\u6539 ${person.displayName} \u7684\u89D2\u8272`,onSubmit:e=>{e.preventDefault();void save()},children:[jsx(TagChoices,{options:settings.roles,value:tags,onChange:setTags,disabled:busy}),stale.length>0&&jsxs("p",{className:"band-members-hint",children:["\u5DE5\u574A\u91CC\u5DF2\u7ECF\u6CA1\u6709 ",stale.join("\u3001"),"\uFF0C\u4FDD\u5B58\u65F6\u4F1A\u53BB\u6389\u3002"]}),owner?jsx("p",{className:"band-members-hint",children:"\u521B\u5EFA\u4EBA\u7684\u7BA1\u7406\u89D2\u8272\u4E0D\u5728\u8FD9\u91CC\u6539\u3002"}):jsx(RoleSelect,{value:role,options:grantable(self,person.role),onChange:setRole,disabled:busy}),jsx(ErrorNote,{children:error}),jsxs("div",{className:"band-members-actions",children:[jsx("button",{type:"submit",className:"btn primary sm",disabled:busy,children:busy?"\u6B63\u5728\u4FDD\u5B58\u2026":"\u4FDD\u5B58"}),jsx("button",{type:"button",className:"btn ghost sm",disabled:busy,onClick:onCancel,children:"\u53D6\u6D88"})]})]})}var PAGE="@kanyun-ai-infra/band-settings/settings";var SECTION="members";var NEW_ITEM="new";var DESC="\u4EBA\u548C Agent \u90FD\u5728\u8FD9\u91CC\u3002\u7BA1\u7406\u5458\u80FD\u52A0\u4EBA\u3001\u6539\u89D2\u8272\u3002";var DESC_READONLY="\u4EBA\u548C Agent \u90FD\u5728\u8FD9\u91CC\u3002";var src_default=definePlugin({surfaces:{members:reactMount(ctx=>jsx2(Members,{ctx})),"settings-tab":reactMount(ctx=>jsx2(MembersTab,{ctx}))}});function Members({ctx}){const members=useMembers(ctx);const order=memberOrder(members);const peers=members.filter(m=>m.actor.kind==="agent").map(m=>m.actor.id);return jsxs2("section",{"aria-label":"\u6210\u5458",children:[jsx2(PaneHeader,{title:jsxs2(Fragment,{children:["\u6210\u5458 ",members.length]})}),jsx2("ul",{className:"band-members",children:members.map(m=>jsxs2("li",{className:"band-members-item",children:[jsx2(Avatar,{id:m.actor.id,name:m.displayName,agent:m.actor.kind==="agent",...m.actor.kind==="agent"?{instrument:instrumentOf(m.actor.id,peers)}:{},order,decorative:true}),jsx2("span",{className:"band-members-name",title:m.displayName,children:m.displayName}),jsx2("span",{className:"band-members-role",children:roleLabel(members,m.actor.id)})]},m.actor.id))})]})}function params(ctx,item){return{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{},tab:SECTION,...item?{item}:{}}}function href(ctx,item){return projectPath(ctx.project,"settings",...item?[SECTION,item]:[SECTION])}var FRESH_KEY="band-members:fresh:";function markFresh(projectId,userId){try{globalThis.sessionStorage?.setItem(FRESH_KEY+projectId,userId)}catch{}}function useFresh(projectId){const[id]=useState2(()=>{try{return globalThis.sessionStorage?.getItem(FRESH_KEY+projectId)??null}catch{return null}});useEffect2(()=>{if(id===null)return;try{globalThis.sessionStorage?.removeItem(FRESH_KEY+projectId)}catch{}},[id,projectId]);return id}function MembersTab({ctx}){const api=ctx.memberSettings;const route=useRoute(ctx);const item=route.params.item;const loaded=useCtxData(ctx,async()=>{let members2;try{members2=await ctx.members.list()}catch(e){if(isForbidden(e))return{kind:"forbidden"};throw e}let settings2=null;let settingsError=null;if(api){try{settings2=await api.get()}catch(e){if(!isForbidden(e))settingsError=e instanceof Error?e.message:String(e)}}return{kind:"ok",members:members2,settings:settings2,settingsError}},[api],["member.*","run.started"]);const[fresh,setFresh]=useState2(null);const data=loaded.data;const read=data?.kind==="ok"?data:null;const members=read?.members??[];const baseSettings=read?.settings??null;const settings=fresh&&fresh.base===baseSettings?fresh.next:baseSettings;const order=memberOrder(members);const people=members.filter(m=>m.actor.kind!=="agent");const agents=members.filter(m=>m.actor.kind==="agent");const peers=agents.map(m=>m.actor.id);const manage=api&&settings?.canManage?{api,settings}:null;const settingsFailed=read?.settingsError!=null;const settingsDenied=settings!=null&&!settings.canManage;const person=id=>settings?.people.find(p=>p.userId===id);const done=next=>setFresh({base:baseSettings,next});const freshId=useFresh(ctx.project.id);const goList=()=>ctx.app.navigate({page:PAGE,params:params(ctx)});if(data===void 0){return jsxs2(Fragment,{children:[jsx2(SettingsHead,{title:"\u6210\u5458",desc:DESC}),loaded.error?jsxs2(SettingsReadError,{retry:loaded.reload,children:["\u6210\u5458\u6CA1\u8BFB\u51FA\u6765\uFF1A",loaded.error]}):jsx2(SettingsLoading,{text:"\u6B63\u5728\u8BFB\u53D6\u6210\u5458\u2026"})]})}if(data.kind==="forbidden"){return jsxs2(Fragment,{children:[jsx2(SettingsHead,{title:"\u6210\u5458",desc:DESC}),jsx2(SettingsNoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E2A\u9879\u76EE\u7684\u6210\u5458",children:"\u53EA\u6709\u9879\u76EE\u6210\u5458\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB\u9879\u76EE\u7BA1\u7406\u5458\u628A\u4F60\u52A0\u8FDB\u6765\u3002"})]})}if(item===NEW_ITEM){return jsxs2(Fragment,{children:[jsx2(SettingsHead,{title:"\u6DFB\u52A0\u6210\u5458",desc:DESC}),manage?jsx2(InviteForm,{api:manage.api,settings:manage.settings,onDone:next=>{const before=new Set(manage.settings.people.map(p=>p.userId));const added=next.people.find(p=>!before.has(p.userId));done(next);if(added)markFresh(ctx.project.id,added.userId);goList()},onCancel:goList}):settingsFailed?jsxs2(SettingsReadError,{retry:loaded.reload,children:["\u6210\u5458\u8BBE\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",read?.settingsError]}):jsx2("p",{className:"band-sf-muted",children:"\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u80FD\u52A0\u4EBA\u3002"})]})}if(item){const view=members.find(m=>m.actor.kind!=="agent"&&m.actor.id===item);const p=person(item);if(!view){return jsxs2(Fragment,{children:[jsx2(SettingsHead,{title:"\u6210\u5458"}),jsx2("p",{className:"band-sf-muted",children:"\u8FD9\u4E2A\u9879\u76EE\u91CC\u6CA1\u6709\u8FD9\u4E2A\u4EBA\uFF1B\u53EF\u80FD\u5DF2\u7ECF\u88AB\u79FB\u51FA\u3002"})]})}return jsxs2(Fragment,{children:[jsx2(SettingsHead,{title:view.displayName,desc:"\u7BA1\u7406\u5458\u80FD\u6539\u8FD9\u4E2A\u4EBA\u7684\u89D2\u8272\uFF1B\u521B\u5EFA\u4EBA\u7684\u7BA1\u7406\u89D2\u8272\u4E0D\u5728\u8FD9\u91CC\u6539\u3002"}),settingsFailed?jsxs2(SettingsReadError,{retry:loaded.reload,children:["\u6210\u5458\u8BBE\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",read?.settingsError]}):settingsDenied?jsx2("p",{className:"band-sf-muted",children:"\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u80FD\u6539\u3002"}):null,jsx2(SettingsFacts,{items:[{key:"\u540D\u5B57",value:view.displayName},{key:"\u7BA1\u7406\u89D2\u8272",value:p?MANAGEMENT_LABEL[p.role]:"\u6210\u5458"},{key:"\u4E1A\u52A1\u6807\u7B7E",value:settings&&p?tagText(settings,p):roleLabel(members,view.actor.id)||"\u6210\u5458"}]}),manage&&p?jsx2(SettingsSection,{title:"\u89D2\u8272",children:jsx2(EditPerson,{api:manage.api,settings:manage.settings,person:p,self:view.actor.id===ctx.member.id,onDone:done,onCancel:goList})}):null,manage&&p&&p.role!=="owner"?jsx2(SettingsDanger,{children:jsx2(SettingsDangerRow,{title:"\u79FB\u51FA\u9879\u76EE",note:`${view.displayName} \u4E0D\u518D\u80FD\u6253\u5F00\u8FD9\u4E2A\u9879\u76EE\uFF1B\u8FD9\u4E2A\u4EBA\u9009\u5230\u9879\u76EE\u4E0A\u7684\u914D\u7F6E\u81EA\u52A8\u6E05\u7A7A\uFF0C\u8BB0\u5BA1\u8BA1\u3002`,action:jsx2(RemoveButton,{ctx,api:manage.api,person:p,onDone:goList})})}):null]})}const addHref=href(ctx,NEW_ITEM);const addAction=manage||settingsFailed?jsx2("a",{className:"btn primary",href:addHref,onClick:e=>{if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;e.preventDefault();ctx.app.navigate({page:PAGE,params:params(ctx,NEW_ITEM)})},children:"\u6DFB\u52A0\u6210\u5458"}):void 0;if(members.length===0){return jsxs2(Fragment,{children:[jsx2(SettingsHead,{title:"\u6210\u5458",desc:DESC}),settingsFailed?jsxs2(SettingsReadError,{retry:loaded.reload,children:["\u6210\u5458\u8BBE\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",read?.settingsError]}):null,jsx2(SettingsEmpty,{action:addAction,children:"\u8FD9\u4E2A\u9879\u76EE\u8FD8\u6CA1\u6709\u6210\u5458\u3002"})]})}return jsxs2(Fragment,{children:[jsx2(SettingsHead,{title:"\u6210\u5458",desc:settingsDenied?DESC_READONLY:DESC,action:addAction}),settingsDenied?jsx2("p",{className:"band-sf-muted",children:"\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u80FD\u52A0\u4EBA\u3001\u6539\u89D2\u8272\u3002"}):null,jsx2(ErrorNote2,{retry:loaded.reload,children:loaded.error?`\u6210\u5458\u6CA1\u8BFB\u51FA\u6765\uFF1A${loaded.error}`:read?.settingsError?`\u6210\u5458\u8BBE\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A${read.settingsError}`:null}),jsxs2(SettingsRows,{label:`\u6210\u5458 ${members.length}`,children:[people.map(m=>{const p=person(m.actor.id);return jsx2(SettingsRow,{title:m.displayName,meta:settings&&p?[`${MANAGEMENT_LABEL[p.role]} \xB7 ${tagText(settings,p)}`]:[roleLabel(members,m.actor.id)||"\u6210\u5458"],href:href(ctx,m.actor.id),isNew:m.actor.id===freshId,...settings||settingsFailed?{onOpen:()=>ctx.app.navigate({page:PAGE,params:params(ctx,m.actor.id)})}:{}},`human:${m.actor.id}`)}),agents.map(m=>jsx2(SettingsRow,{title:m.displayName,meta:[m.actor.id===ctx.project.agent?"\u9ED8\u8BA4 Agent":"Agent"]},`agent:${m.actor.id}`))]}),settingsDenied?null:jsx2(UsageNote,{ctx,members})]})}function RemoveButton({ctx,api,person,onDone}){const[open,setOpen]=useState2(false);const[busy,setBusy]=useState2(false);const[error,setError]=useState2("");const self=person.userId===ctx.member.id;const remove=async()=>{if(busy)return;setBusy(true);setError("");try{await api.remove(person.userId);onDone()}catch(e){setError(`\u6CA1\u79FB\u6210\uFF1A${e instanceof Error?e.message:String(e)}`)}finally{setBusy(false)}};return jsxs2(Fragment,{children:[jsx2("button",{type:"button",className:"btn danger",onClick:()=>setOpen(true),children:"\u79FB\u51FA\u9879\u76EE"}),open?jsxs2(SettingsDialog,{title:`\u628A${person.displayName}\u79FB\u51FA\u9879\u76EE\uFF1F`,onClose:()=>setOpen(false),actions:jsxs2(Fragment,{children:[jsx2("button",{type:"button",className:"btn",onClick:()=>setOpen(false),children:"\u53D6\u6D88"}),jsx2("button",{type:"button",className:"btn primary",disabled:busy,onClick:()=>void remove(),children:busy?"\u6B63\u5728\u79FB\u9664\u2026":"\u79FB\u51FA\u9879\u76EE"})]}),children:[jsxs2("ul",{children:[jsx2("li",{children:self?"\u4F60\u4E0D\u518D\u80FD\u6253\u5F00\u8FD9\u4E2A\u9879\u76EE\uFF0C\u8981\u522B\u7684\u7BA1\u7406\u5458\u518D\u52A0\u56DE\u6765":`${person.displayName} \u4E0D\u518D\u80FD\u6253\u5F00\u8FD9\u4E2A\u9879\u76EE`}),jsx2("li",{children:"\u8FD9\u4E2A\u4EBA\u9009\u5230\u9879\u76EE\u4E0A\u7684\u914D\u7F6E\u81EA\u52A8\u6E05\u7A7A\uFF0C\u8BB0\u5BA1\u8BA1"}),jsx2("li",{children:"\u5DF2\u6709\u7684\u8BC4\u8BBA\u4FDD\u7559\u7F72\u540D"})]}),error?jsx2(SettingsSaveState,{failed:error}):null]}):null]})}function tagText(settings,p){const label=r=>settings.roles.find(o=>o.name===r)?.label??r;return p.roles.map(label).join("\u3001")||"\u6210\u5458"}function UsageNote({ctx,members}){const usage=useCtxData(ctx,()=>ctx.members.usage(),[],["turn.delivered","turn.failed"]);const data=usage.data;if(!data)return null;const name=actor=>members.find(m=>m.actor.kind==="human"&&m.actor.id===actor)?.displayName??"\u5DF2\u79BB\u5F00\u7684\u6210\u5458";const money=costUsd=>costUsd===void 0?"\u2014":costUsd<.01?"\u4E0D\u5230 $0.01":`$${costUsd.toFixed(2)}`;const line=(key,label,sub,u)=>jsx2(SettingsRow,{title:label,meta:[sub],actions:jsxs2("span",{className:"band-members-cost",children:[u.turns," \u4E2A\u56DE\u5408 \xB7 ",money(u.costUsd)]})},key);return jsx2(SettingsSection,{title:"\u7528\u91CF",desc:"\u53EA\u505A\u8BB0\u5F55\uFF0C\u4E0D\u8BBE\u4E0A\u9650\u3002\u4E2D\u9014\u505C\u4E0B\u7684\u4E0D\u8BA1\u8D39\u7528\uFF0C\u53EA\u8BA1\u6B21\u6570\u3002",children:jsxs2(SettingsRows,{label:"\u7528\u91CF",children:[data.people.map(p=>line(p.actor,name(p.actor),"\u53D1\u8D77\u7684\u4FEE\u6539",p.usage)),line("auto","\u7CFB\u7EDF\u81EA\u52A8\u505A\u7684","\u7B2C\u4E00\u7248\u4EA7\u51FA\uFF0C\u6216\u4E0A\u4E00\u9636\u6BB5\u6709\u65B0\u5185\u5BB9\u65F6\u91CD\u505A",data.auto),line("totals","\u5408\u8BA1","\u5168\u90E8\u56DE\u5408",data.totals)]})})}export{MembersTab,src_default as default};
1
+ import"../../chunks/chunk-JFPQMFKF.js";import{Avatar,ErrorNote as ErrorNote2,PaneHeader,SettingsNoAccess,SettingsReadError,SettingsSaveState,directoryFor,instrumentOf,isForbidden,memberOrder,reactMount,roleLabel,useCtxData,useMembers,useRoute}from"@kanyun-ai-infra/band-plugin-react";import{projectPath}from"@kanyun-ai-infra/band-plugin-sdk";import{definePlugin}from"@kanyun-ai-infra/band-plugin-sdk";import{useEffect,useMemo,useState as useState2}from"react";import{ErrorNote,PersonSearch}from"@kanyun-ai-infra/band-plugin-react";import{useId,useState}from"react";import{jsx,jsxs}from"react/jsx-runtime";import{SettingsDanger,SettingsDangerRow,SettingsDialog,SettingsEmpty,SettingsFacts,SettingsHead,SettingsLoading,SettingsRow,SettingsRows,SettingsSection}from"@kanyun-ai-infra/band-plugin-react";import{Fragment,jsx as jsx2,jsxs as jsxs2}from"react/jsx-runtime";if(typeof document!=="undefined"&&document.head){const css="/* src/members.css */\n.band-members {\n list-style: none;\n margin: 0;\n padding: 0 16px 12px;\n display: grid;\n gap: 8px;\n font-size: var(--fs-ui);\n}\n.band-members-item {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.band-members-name {\n flex: 0 0.2 auto;\n min-width: 2em;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-members-role {\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-members-cost {\n color: var(--muted);\n font-size: var(--fs-dense);\n white-space: nowrap;\n}\n.band-members-form {\n flex: 1 1 100%;\n display: grid;\n gap: 12px;\n font-size: var(--fs-row);\n}\n.band-members-form:where(fieldset) {\n margin: 0;\n padding: 0;\n border: 0;\n min-width: 0;\n}\n.band-members-form:where(.band-members-row > *) {\n padding-left: 36px;\n}\n.band-members-form p {\n margin: 0;\n}\n.band-members-field {\n position: relative;\n display: grid;\n gap: 4px;\n max-width: 360px;\n}\n.band-members-tags {\n margin: 0;\n padding: 0;\n border: 0;\n display: flex;\n flex-wrap: wrap;\n gap: 4px 16px;\n}\n.band-members-tags legend {\n padding: 0;\n margin-bottom: 4px;\n}\n.band-members-label {\n font-size: var(--fs-row);\n color: var(--ink);\n}\n.band-members-hint {\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-members-actions {\n display: flex;\n gap: 8px;\n}\n";let el=document.head.querySelector('style[data-band-style="@kanyun-ai-infra/band-members"]');if(!el){el=document.createElement("style");el.setAttribute("data-band-style","@kanyun-ai-infra/band-members");document.head.prepend(el)}el.textContent=css}var MANAGEMENT_LABEL={owner:"\u521B\u5EFA\u4EBA",maintainer:"\u7BA1\u7406\u5458",member:"\u6210\u5458"};var RANK={member:1,maintainer:2};function grantable(self,current){const all=["member","maintainer"];if(!self)return all;const now=current===void 0?0:current==="owner"?3:RANK[current];return all.filter(r=>RANK[r]<=now)}var failed=e=>e instanceof Error?e.message:String(e);function TagChoices({options,value,onChange,disabled}){return jsxs("fieldset",{className:"band-members-tags",children:[jsxs("legend",{children:["\u89D2\u8272 ",jsx("span",{className:"band-members-hint",children:"\u5FC5\u586B\uFF0C\u81F3\u5C11\u4E00\u4E2A"})]}),options.map(o=>jsxs("label",{className:"choice sm",children:[jsx("input",{type:"checkbox",className:"checkbox",checked:value.includes(o.name),disabled,onChange:e=>onChange(e.target.checked?[...value,o.name]:value.filter(r=>r!==o.name))}),o.label??o.name]},o.name))]})}function RoleSelect({value,options,onChange,disabled,fill}){const id=useId();return jsxs("div",{className:"band-members-field",children:[jsx("label",{htmlFor:id,children:"\u7BA1\u7406\u89D2\u8272"}),jsx("select",{id,className:fill?"field fill":"field",value,disabled:disabled||options.length<2,onChange:e=>onChange(e.target.value==="maintainer"?"maintainer":"member"),children:options.map(r=>jsx("option",{value:r,children:MANAGEMENT_LABEL[r]},r))})]})}function InviteForm({api,directory,settings,onDone,onCancel}){const[picked,setPicked]=useState(null);const[tags,setTags]=useState([]);const[role,setRole]=useState("member");const[busy,setBusy]=useState(false);const[error,setError]=useState(null);const disabled=settings.people.map(p=>({id:p.userId,reason:"\u5DF2\u7ECF\u662F\u6210\u5458\uFF0C\u5728\u5217\u8868\u91CC\u6539\u89D2\u8272"}));async function submit(){if(!picked)return setError("\u8FD8\u6CA1\u9009\u4EBA\uFF1A\u641C\u59D3\u540D\u3001ldap \u6216\u90E8\u95E8");if(settings.people.some(p=>p.userId===picked.id))return setError(`${picked.id} \u5DF2\u7ECF\u662F\u6210\u5458\uFF0C\u5728\u5217\u8868\u91CC\u6539\u89D2\u8272`);if(tags.length===0)return setError("\u8FD8\u5DEE\u89D2\u8272\u6CA1\u9009\uFF1A\u81F3\u5C11\u9009\u4E00\u4E2A");setBusy(true);setError(null);try{const next=await api.set({userId:picked.id,roles:tags,role,...picked.inBand===false?{displayName:picked.name}:{}});onDone(next)}catch(e){setError(`\u9080\u8BF7\u5931\u8D25\uFF1A${failed(e)}`)}finally{setBusy(false)}}return jsxs("form",{className:"band-members-form","aria-label":"\u9080\u8BF7\u6210\u5458",onSubmit:e=>{e.preventDefault();void submit()},children:[jsxs("div",{className:"band-members-field",children:[jsxs("span",{className:"band-members-label",children:["\u9080\u8BF7\u8C01 ",jsx("span",{className:"band-members-hint",children:"\u5FC5\u586B"})]}),jsx(PersonSearch,{label:"\u9080\u8BF7\u8C01",directory,picked:picked?[picked]:[],onPick:p=>{setPicked(p[0]??null);setError(null)},onUnpick:()=>setPicked(null),disabled,allowUnknown:true,busy})]}),jsx(TagChoices,{options:settings.roles,value:tags,onChange:setTags,disabled:busy}),jsx(RoleSelect,{value:role,options:grantable(false,void 0),onChange:setRole,disabled:busy,fill:true}),jsx(ErrorNote,{children:error}),jsxs("div",{className:"band-members-actions",children:[jsx("button",{type:"submit",className:"btn primary sm",disabled:busy||!picked,children:busy?"\u6B63\u5728\u9080\u8BF7\u2026":"\u9080\u8BF7"}),jsx("button",{type:"button",className:"btn ghost sm",disabled:busy,onClick:onCancel,children:"\u53D6\u6D88"})]})]})}function EditPerson({api,settings,person,self,onDone,onCancel}){const known=new Set(settings.roles.map(r=>r.name));const stale=person.roles.filter(r=>!known.has(r));const[tags,setTags]=useState(person.roles.filter(r=>known.has(r)));const[role,setRole]=useState(person.role==="maintainer"?"maintainer":"member");const[busy,setBusy]=useState(false);const[error,setError]=useState(null);const owner=person.role==="owner";async function save(){if(tags.length===0)return setError("\u8FD8\u5DEE\u89D2\u8272\u6CA1\u9009\uFF1A\u81F3\u5C11\u9009\u4E00\u4E2A");setBusy(true);setError(null);try{onDone(await api.set({userId:person.userId,roles:tags,...owner?{}:{role}}))}catch(e){setError(failed(e))}finally{setBusy(false)}}return jsxs("form",{className:"band-members-form","aria-label":`\u6539 ${person.displayName} \u7684\u89D2\u8272`,onSubmit:e=>{e.preventDefault();void save()},children:[jsx(TagChoices,{options:settings.roles,value:tags,onChange:setTags,disabled:busy}),stale.length>0&&jsxs("p",{className:"band-members-hint",children:["\u5DE5\u574A\u91CC\u5DF2\u7ECF\u6CA1\u6709 ",stale.join("\u3001"),"\uFF0C\u4FDD\u5B58\u65F6\u4F1A\u53BB\u6389\u3002"]}),owner?jsx("p",{className:"band-members-hint",children:"\u521B\u5EFA\u4EBA\u7684\u7BA1\u7406\u89D2\u8272\u4E0D\u5728\u8FD9\u91CC\u6539\u3002"}):jsx(RoleSelect,{value:role,options:grantable(self,person.role),onChange:setRole,disabled:busy}),jsx(ErrorNote,{children:error}),jsxs("div",{className:"band-members-actions",children:[jsx("button",{type:"submit",className:"btn primary sm",disabled:busy,children:busy?"\u6B63\u5728\u4FDD\u5B58\u2026":"\u4FDD\u5B58"}),jsx("button",{type:"button",className:"btn ghost sm",disabled:busy,onClick:onCancel,children:"\u53D6\u6D88"})]})]})}var PAGE="@kanyun-ai-infra/band-settings/settings";var SECTION="members";var NEW_ITEM="new";var DESC="\u4EBA\u548C Agent \u90FD\u5728\u8FD9\u91CC\u3002\u7BA1\u7406\u5458\u80FD\u52A0\u4EBA\u3001\u6539\u89D2\u8272\u3002";var DESC_READONLY="\u4EBA\u548C Agent \u90FD\u5728\u8FD9\u91CC\u3002";var src_default=definePlugin({surfaces:{members:reactMount(ctx=>jsx2(Members,{ctx})),"settings-tab":reactMount(ctx=>jsx2(MembersTab,{ctx}))}});function Members({ctx}){const members=useMembers(ctx);const order=memberOrder(members);const peers=members.filter(m=>m.actor.kind==="agent").map(m=>m.actor.id);return jsxs2("section",{"aria-label":"\u6210\u5458",children:[jsx2(PaneHeader,{title:jsxs2(Fragment,{children:["\u6210\u5458 ",members.length]})}),jsx2("ul",{className:"band-members",children:members.map(m=>jsxs2("li",{className:"band-members-item",children:[jsx2(Avatar,{id:m.actor.id,name:m.displayName,agent:m.actor.kind==="agent",...m.actor.kind==="agent"?{instrument:instrumentOf(m.actor.id,peers)}:{},order,decorative:true}),jsx2("span",{className:"band-members-name",title:m.displayName,children:m.displayName}),jsx2("span",{className:"band-members-role",children:roleLabel(members,m.actor.id)})]},m.actor.id))})]})}function params(ctx,item){return{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{},tab:SECTION,...item?{item}:{}}}function href(ctx,item){return projectPath(ctx.project,"settings",...item?[SECTION,item]:[SECTION])}var FRESH_KEY="band-members:fresh:";function markFresh(projectId,userId){try{globalThis.sessionStorage?.setItem(FRESH_KEY+projectId,userId)}catch{}}function useFresh(projectId){const[id]=useState2(()=>{try{return globalThis.sessionStorage?.getItem(FRESH_KEY+projectId)??null}catch{return null}});useEffect(()=>{if(id===null)return;try{globalThis.sessionStorage?.removeItem(FRESH_KEY+projectId)}catch{}},[id,projectId]);return id}function MembersTab({ctx}){const api=ctx.memberSettings;const route=useRoute(ctx);const item=route.params.item;const loaded=useCtxData(ctx,async()=>{let members2;try{members2=await ctx.members.list()}catch(e){if(isForbidden(e))return{kind:"forbidden"};throw e}let settings2=null;let settingsError=null;if(api){try{settings2=await api.get()}catch(e){if(!isForbidden(e))settingsError=e instanceof Error?e.message:String(e)}}return{kind:"ok",members:members2,settings:settings2,settingsError}},[api],["member.*","run.started"]);const[fresh,setFresh]=useState2(null);const data=loaded.data;const read=data?.kind==="ok"?data:null;const members=read?.members??[];const baseSettings=read?.settings??null;const settings=fresh&&fresh.base===baseSettings?fresh.next:baseSettings;const order=memberOrder(members);const people=members.filter(m=>m.actor.kind!=="agent");const agents=members.filter(m=>m.actor.kind==="agent");const peers=agents.map(m=>m.actor.id);const manage=api&&settings?.canManage?{api,settings}:null;const directory=useMemo(()=>directoryFor(ctx.people,q=>api?api.searchUsers(q):Promise.resolve([])),[ctx.people,api]);const settingsFailed=read?.settingsError!=null;const settingsDenied=settings!=null&&!settings.canManage;const person=id=>settings?.people.find(p=>p.userId===id);const done=next=>setFresh({base:baseSettings,next});const freshId=useFresh(ctx.project.id);const goList=()=>ctx.app.navigate({page:PAGE,params:params(ctx)});if(data===void 0){return jsxs2(Fragment,{children:[jsx2(SettingsHead,{title:"\u6210\u5458",desc:DESC}),loaded.error?jsxs2(SettingsReadError,{retry:loaded.reload,children:["\u6210\u5458\u6CA1\u8BFB\u51FA\u6765\uFF1A",loaded.error]}):jsx2(SettingsLoading,{text:"\u6B63\u5728\u8BFB\u53D6\u6210\u5458\u2026"})]})}if(data.kind==="forbidden"){return jsxs2(Fragment,{children:[jsx2(SettingsHead,{title:"\u6210\u5458",desc:DESC}),jsx2(SettingsNoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E2A\u9879\u76EE\u7684\u6210\u5458",children:"\u53EA\u6709\u9879\u76EE\u6210\u5458\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB\u9879\u76EE\u7BA1\u7406\u5458\u628A\u4F60\u52A0\u8FDB\u6765\u3002"})]})}if(item===NEW_ITEM){return jsxs2(Fragment,{children:[jsx2(SettingsHead,{title:"\u6DFB\u52A0\u6210\u5458",desc:DESC}),manage?jsx2(InviteForm,{api:manage.api,directory,settings:manage.settings,onDone:next=>{const before=new Set(manage.settings.people.map(p=>p.userId));const added=next.people.find(p=>!before.has(p.userId));done(next);if(added)markFresh(ctx.project.id,added.userId);goList()},onCancel:goList}):settingsFailed?jsxs2(SettingsReadError,{retry:loaded.reload,children:["\u6210\u5458\u8BBE\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",read?.settingsError]}):jsx2("p",{className:"band-sf-muted",children:"\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u80FD\u52A0\u4EBA\u3002"})]})}if(item){const view=members.find(m=>m.actor.kind!=="agent"&&m.actor.id===item);const p=person(item);if(!view){return jsxs2(Fragment,{children:[jsx2(SettingsHead,{title:"\u6210\u5458"}),jsx2("p",{className:"band-sf-muted",children:"\u8FD9\u4E2A\u9879\u76EE\u91CC\u6CA1\u6709\u8FD9\u4E2A\u4EBA\uFF1B\u53EF\u80FD\u5DF2\u7ECF\u88AB\u79FB\u51FA\u3002"})]})}return jsxs2(Fragment,{children:[jsx2(SettingsHead,{title:view.displayName,desc:"\u7BA1\u7406\u5458\u80FD\u6539\u8FD9\u4E2A\u4EBA\u7684\u89D2\u8272\uFF1B\u521B\u5EFA\u4EBA\u7684\u7BA1\u7406\u89D2\u8272\u4E0D\u5728\u8FD9\u91CC\u6539\u3002"}),settingsFailed?jsxs2(SettingsReadError,{retry:loaded.reload,children:["\u6210\u5458\u8BBE\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",read?.settingsError]}):settingsDenied?jsx2("p",{className:"band-sf-muted",children:"\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u80FD\u6539\u3002"}):null,jsx2(SettingsFacts,{items:[{key:"\u540D\u5B57",value:view.displayName},{key:"\u7BA1\u7406\u89D2\u8272",value:p?MANAGEMENT_LABEL[p.role]:"\u6210\u5458"},{key:"\u4E1A\u52A1\u6807\u7B7E",value:settings&&p?tagText(settings,p):roleLabel(members,view.actor.id)||"\u6210\u5458"}]}),manage&&p?jsx2(SettingsSection,{title:"\u89D2\u8272",children:jsx2(EditPerson,{api:manage.api,settings:manage.settings,person:p,self:view.actor.id===ctx.member.id,onDone:done,onCancel:goList})}):null,manage&&p&&p.role!=="owner"?jsx2(SettingsDanger,{children:jsx2(SettingsDangerRow,{title:"\u79FB\u51FA\u9879\u76EE",note:`${view.displayName} \u4E0D\u518D\u80FD\u6253\u5F00\u8FD9\u4E2A\u9879\u76EE\uFF1B\u8FD9\u4E2A\u4EBA\u9009\u5230\u9879\u76EE\u4E0A\u7684\u914D\u7F6E\u81EA\u52A8\u6E05\u7A7A\uFF0C\u8BB0\u5BA1\u8BA1\u3002`,action:jsx2(RemoveButton,{ctx,api:manage.api,person:p,onDone:goList})})}):null]})}const addHref=href(ctx,NEW_ITEM);const addAction=manage||settingsFailed?jsx2("a",{className:"btn primary",href:addHref,onClick:e=>{if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;e.preventDefault();ctx.app.navigate({page:PAGE,params:params(ctx,NEW_ITEM)})},children:"\u6DFB\u52A0\u6210\u5458"}):void 0;if(members.length===0){return jsxs2(Fragment,{children:[jsx2(SettingsHead,{title:"\u6210\u5458",desc:DESC}),settingsFailed?jsxs2(SettingsReadError,{retry:loaded.reload,children:["\u6210\u5458\u8BBE\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",read?.settingsError]}):null,jsx2(SettingsEmpty,{action:addAction,children:"\u8FD9\u4E2A\u9879\u76EE\u8FD8\u6CA1\u6709\u6210\u5458\u3002"})]})}return jsxs2(Fragment,{children:[jsx2(SettingsHead,{title:"\u6210\u5458",desc:settingsDenied?DESC_READONLY:DESC,action:addAction}),settingsDenied?jsx2("p",{className:"band-sf-muted",children:"\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u80FD\u52A0\u4EBA\u3001\u6539\u89D2\u8272\u3002"}):null,jsx2(ErrorNote2,{retry:loaded.reload,children:loaded.error?`\u6210\u5458\u6CA1\u8BFB\u51FA\u6765\uFF1A${loaded.error}`:read?.settingsError?`\u6210\u5458\u8BBE\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A${read.settingsError}`:null}),jsxs2(SettingsRows,{label:`\u6210\u5458 ${members.length}`,children:[people.map(m=>{const p=person(m.actor.id);return jsx2(SettingsRow,{title:m.displayName,meta:settings&&p?[`${MANAGEMENT_LABEL[p.role]} \xB7 ${tagText(settings,p)}`]:[roleLabel(members,m.actor.id)||"\u6210\u5458"],href:href(ctx,m.actor.id),isNew:m.actor.id===freshId,...settings||settingsFailed?{onOpen:()=>ctx.app.navigate({page:PAGE,params:params(ctx,m.actor.id)})}:{}},`human:${m.actor.id}`)}),agents.map(m=>jsx2(SettingsRow,{title:m.displayName,meta:[m.actor.id===ctx.project.agent?"\u9ED8\u8BA4 Agent":"Agent"]},`agent:${m.actor.id}`))]}),settingsDenied?null:jsx2(UsageNote,{ctx,members})]})}function RemoveButton({ctx,api,person,onDone}){const[open,setOpen]=useState2(false);const[busy,setBusy]=useState2(false);const[error,setError]=useState2("");const self=person.userId===ctx.member.id;const remove=async()=>{if(busy)return;setBusy(true);setError("");try{await api.remove(person.userId);onDone()}catch(e){setError(`\u6CA1\u79FB\u6210\uFF1A${e instanceof Error?e.message:String(e)}`)}finally{setBusy(false)}};return jsxs2(Fragment,{children:[jsx2("button",{type:"button",className:"btn danger",onClick:()=>setOpen(true),children:"\u79FB\u51FA\u9879\u76EE"}),open?jsxs2(SettingsDialog,{title:`\u628A${person.displayName}\u79FB\u51FA\u9879\u76EE\uFF1F`,onClose:()=>setOpen(false),actions:jsxs2(Fragment,{children:[jsx2("button",{type:"button",className:"btn",onClick:()=>setOpen(false),children:"\u53D6\u6D88"}),jsx2("button",{type:"button",className:"btn primary",disabled:busy,onClick:()=>void remove(),children:busy?"\u6B63\u5728\u79FB\u9664\u2026":"\u79FB\u51FA\u9879\u76EE"})]}),children:[jsxs2("ul",{children:[jsx2("li",{children:self?"\u4F60\u4E0D\u518D\u80FD\u6253\u5F00\u8FD9\u4E2A\u9879\u76EE\uFF0C\u8981\u522B\u7684\u7BA1\u7406\u5458\u518D\u52A0\u56DE\u6765":`${person.displayName} \u4E0D\u518D\u80FD\u6253\u5F00\u8FD9\u4E2A\u9879\u76EE`}),jsx2("li",{children:"\u8FD9\u4E2A\u4EBA\u9009\u5230\u9879\u76EE\u4E0A\u7684\u914D\u7F6E\u81EA\u52A8\u6E05\u7A7A\uFF0C\u8BB0\u5BA1\u8BA1"}),jsx2("li",{children:"\u5DF2\u6709\u7684\u8BC4\u8BBA\u4FDD\u7559\u7F72\u540D"})]}),error?jsx2(SettingsSaveState,{failed:error}):null]}):null]})}function tagText(settings,p){const label=r=>settings.roles.find(o=>o.name===r)?.label??r;return p.roles.map(label).join("\u3001")||"\u6210\u5458"}function UsageNote({ctx,members}){const usage=useCtxData(ctx,()=>ctx.members.usage(),[],["turn.delivered","turn.failed"]);const data=usage.data;if(!data)return null;const name=actor=>members.find(m=>m.actor.kind==="human"&&m.actor.id===actor)?.displayName??"\u5DF2\u79BB\u5F00\u7684\u6210\u5458";const money=costUsd=>costUsd===void 0?"\u2014":costUsd<.01?"\u4E0D\u5230 $0.01":`$${costUsd.toFixed(2)}`;const line=(key,label,sub,u)=>jsx2(SettingsRow,{title:label,meta:[sub],actions:jsxs2("span",{className:"band-members-cost",children:[u.turns," \u4E2A\u56DE\u5408 \xB7 ",money(u.costUsd)]})},key);return jsx2(SettingsSection,{title:"\u7528\u91CF",desc:"\u53EA\u505A\u8BB0\u5F55\uFF0C\u4E0D\u8BBE\u4E0A\u9650\u3002\u4E2D\u9014\u505C\u4E0B\u7684\u4E0D\u8BA1\u8D39\u7528\uFF0C\u53EA\u8BA1\u6B21\u6570\u3002",children:jsxs2(SettingsRows,{label:"\u7528\u91CF",children:[data.people.map(p=>line(p.actor,name(p.actor),"\u53D1\u8D77\u7684\u4FEE\u6539",p.usage)),line("auto","\u7CFB\u7EDF\u81EA\u52A8\u505A\u7684","\u7B2C\u4E00\u7248\u4EA7\u51FA\uFF0C\u6216\u4E0A\u4E00\u9636\u6BB5\u6709\u65B0\u5185\u5BB9\u65F6\u91CD\u505A",data.auto),line("totals","\u5408\u8BA1","\u5168\u90E8\u56DE\u5408",data.totals)]})})}export{MembersTab,src_default as default};
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@kanyun-ai-infra/band-members",
3
- "version": "0.1.4",
3
+ "version": "0.2.1",
4
4
  "description": "成员与角色列表,区分人和 Agent",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": "./dist/index.js"
8
8
  },
9
9
  "peerDependencies": {
10
- "@kanyun-ai-infra/band-plugin-sdk": "^1.222.0",
11
- "react": "^18.3.1",
12
- "react-dom": "^18.3.1",
10
+ "@kanyun-ai-infra/band-plugin-sdk": "^2.1.0",
11
+ "react": "^19.0.0",
12
+ "react-dom": "^19.0.0",
13
13
  "@kanyun-ai-infra/band-project": "*",
14
14
  "@kanyun-ai-infra/band-settings": "*"
15
15
  }
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@kanyun-ai-infra/band-memory",
3
- "version": "0.0.4",
3
+ "version": "0.1.0",
4
4
  "description": "项目记忆页:Agent 记下的约定、习惯和术语,人可以改;历史里看每一版、撤回或恢复",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": "./dist/index.js"
8
8
  },
9
9
  "peerDependencies": {
10
- "@kanyun-ai-infra/band-plugin-sdk": "^1.222.0",
11
- "react": "^18.3.1",
12
- "react-dom": "^18.3.1",
10
+ "@kanyun-ai-infra/band-plugin-sdk": "^2.1.0",
11
+ "react": "^19.0.0",
12
+ "react-dom": "^19.0.0",
13
13
  "@kanyun-ai-infra/band-settings": "*"
14
14
  }
15
15
  }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@kanyun-ai-infra/band-native",
3
- "version": "0.0.0",
3
+ "version": "0.1.0",
4
4
  "description": "桌面客户端的本机能力服务,网页里照样提供、标为不可用",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": "./dist/index.js"
8
8
  },
9
9
  "peerDependencies": {
10
- "@kanyun-ai-infra/band-plugin-sdk": "^1.222.0"
10
+ "@kanyun-ai-infra/band-plugin-sdk": "^2.1.0"
11
11
  }
12
12
  }
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@kanyun-ai-infra/band-params-form",
3
- "version": "0.0.2",
3
+ "version": "0.1.0",
4
4
  "description": "阶段开始前填参数的表单,改好参数可以重新运行这一阶段",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": "./dist/index.js"
8
8
  },
9
9
  "peerDependencies": {
10
- "@kanyun-ai-infra/band-plugin-sdk": "^1.222.0",
11
- "react": "^18.3.1",
12
- "react-dom": "^18.3.1",
10
+ "@kanyun-ai-infra/band-plugin-sdk": "^2.1.0",
11
+ "react": "^19.0.0",
12
+ "react-dom": "^19.0.0",
13
13
  "@kanyun-ai-infra/band-project": "*"
14
14
  }
15
15
  }
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@kanyun-ai-infra/band-plugins",
3
- "version": "0.0.1",
3
+ "version": "0.1.0",
4
4
  "description": "插件目录:官方与共享插件一页看,点开看说明、来源与引用写法",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": "./dist/index.js"
8
8
  },
9
9
  "peerDependencies": {
10
- "@kanyun-ai-infra/band-plugin-sdk": "^1.222.0",
11
- "react": "^18.3.1",
12
- "react-dom": "^18.3.1",
10
+ "@kanyun-ai-infra/band-plugin-sdk": "^2.1.0",
11
+ "react": "^19.0.0",
12
+ "react-dom": "^19.0.0",
13
13
  "@kanyun-ai-infra/band-shell": "*"
14
14
  }
15
15
  }
@@ -1 +1 @@
1
- import{ARTIFACT_DIALOG,ArtifactPage,AwaitingFile,DEFAULT_LAYOUT,FirstVersion,HeaderVersion,LOCKED_REFS2,PROJECT,PROJECT_HEAD,ProjectPage,ReviewPage,SLOTS,StageReplay,activePair,approvalPlaced,artifactCaps,candidateGroup,candidateGroupLabel,candidateLabel,isLatestVersion,pickedOf,place,readStageForm,resolvePanel2,shortName,src_default,stageDoer,stageOutputs}from"../../chunks/chunk-SB74RUTN.js";import"../../chunks/chunk-N6N56MWF.js";import{DOCK_SERVICE,mountDockButtons}from"../../chunks/chunk-TWQQ2CCT.js";import"../../chunks/chunk-JFPQMFKF.js";export{ARTIFACT_DIALOG,ArtifactPage,AwaitingFile,DEFAULT_LAYOUT,DOCK_SERVICE,FirstVersion,HeaderVersion,LOCKED_REFS2 as LOCKED_REFS,PROJECT,PROJECT_HEAD,ProjectPage,ReviewPage,SLOTS,StageReplay,activePair,approvalPlaced,artifactCaps,candidateGroup,candidateGroupLabel,candidateLabel,src_default as default,isLatestVersion,mountDockButtons,pickedOf,place,readStageForm,resolvePanel2 as resolvePanel,shortName,stageDoer,stageOutputs};
1
+ import{ARTIFACT_DIALOG,ArtifactPage,AwaitingFile,DEFAULT_LAYOUT,FirstVersion,HeaderVersion,LOCKED_REFS2,PROJECT,PROJECT_HEAD,ProjectPage,ReviewPage,SLOTS,StageReplay,activePair,approvalPlaced,artifactCaps,candidateGroup,candidateGroupLabel,candidateLabel,isLatestVersion,pickedOf,place,readStageForm,resolvePanel2,shortName,src_default,stageDoer,stageOutputs}from"../../chunks/chunk-7XYETT7C.js";import"../../chunks/chunk-N6N56MWF.js";import{DOCK_SERVICE,mountDockButtons}from"../../chunks/chunk-TWQQ2CCT.js";import"../../chunks/chunk-JFPQMFKF.js";export{ARTIFACT_DIALOG,ArtifactPage,AwaitingFile,DEFAULT_LAYOUT,DOCK_SERVICE,FirstVersion,HeaderVersion,LOCKED_REFS2 as LOCKED_REFS,PROJECT,PROJECT_HEAD,ProjectPage,ReviewPage,SLOTS,StageReplay,activePair,approvalPlaced,artifactCaps,candidateGroup,candidateGroupLabel,candidateLabel,src_default as default,isLatestVersion,mountDockButtons,pickedOf,place,readStageForm,resolvePanel2 as resolvePanel,shortName,stageDoer,stageOutputs};
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@kanyun-ai-infra/band-project",
3
- "version": "0.8.9",
3
+ "version": "0.9.1",
4
4
  "description": "项目页和手机评审页的框架,把面板、查看器和阶段界面摆成一页",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": "./dist/index.js"
8
8
  },
9
9
  "peerDependencies": {
10
- "@kanyun-ai-infra/band-plugin-sdk": "^1.222.0",
11
- "react": "^18.3.1",
12
- "react-dom": "^18.3.1",
10
+ "@kanyun-ai-infra/band-plugin-sdk": "^2.1.0",
11
+ "react": "^19.0.0",
12
+ "react-dom": "^19.0.0",
13
13
  "@kanyun-ai-infra/band-shell": "*"
14
14
  }
15
15
  }
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@kanyun-ai-infra/band-queue",
3
- "version": "0.0.0",
3
+ "version": "0.1.0",
4
4
  "description": "排队等交给 Agent 的修改请求",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": "./dist/index.js"
8
8
  },
9
9
  "peerDependencies": {
10
- "@kanyun-ai-infra/band-plugin-sdk": "^1.222.0",
10
+ "@kanyun-ai-infra/band-plugin-sdk": "^2.1.0",
11
11
  "@kanyun-ai-infra/band-project": "*",
12
- "react": "^18.3.1",
13
- "react-dom": "^18.3.1"
12
+ "react": "^19.0.0",
13
+ "react-dom": "^19.0.0"
14
14
  }
15
15
  }