plugin-agent-orchestrator 1.0.27 → 1.0.32

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 (110) hide show
  1. package/README.md +9 -7
  2. package/dist/client/index.js +1 -1
  3. package/dist/client-v2/{214.723affb37c13bf7a.js → 214.79650a549273f163.js} +1 -1
  4. package/dist/client-v2/264.718a107e43fc163c.js +10 -0
  5. package/dist/client-v2/373.f5d5292e53c4e832.js +10 -0
  6. package/dist/client-v2/{41.1805b2edfaa4afe2.js → 41.ba6e080cc0488143.js} +1 -1
  7. package/dist/client-v2/418.29e713f79131eece.js +10 -0
  8. package/dist/client-v2/619.bd3c5698b40705c3.js +10 -0
  9. package/dist/client-v2/677.a991ce0250ff5c77.js +10 -0
  10. package/dist/client-v2/{70.a15d7fcec7c41768.js → 70.bda9518881c05360.js} +1 -1
  11. package/dist/client-v2/925.f5370de8f6632d65.js +10 -0
  12. package/dist/client-v2/index.js +1 -1
  13. package/dist/externalVersion.js +7 -10
  14. package/dist/locale/en-US.json +94 -25
  15. package/dist/locale/vi-VN.json +94 -25
  16. package/dist/locale/zh-CN.json +94 -25
  17. package/dist/server/collections/agent-execution-spans.js +37 -0
  18. package/dist/server/collections/agent-harness-profiles.js +2 -2
  19. package/dist/server/collections/agent-memory-contexts.js +125 -0
  20. package/dist/server/collections/orchestrator-logs.js +2 -2
  21. package/dist/server/migrations/20260425000000-add-interaction-schema.js +3 -1
  22. package/dist/server/migrations/20260427000000-change-packages-to-text.js +3 -1
  23. package/dist/server/migrations/20260427000001-change-other-json-to-text.js +6 -2
  24. package/dist/server/migrations/20260524001000-add-plan-approval-and-harness-profiles.js +21 -19
  25. package/dist/server/migrations/20260621000000-native-policy-profile-defaults.js +193 -0
  26. package/dist/server/plugin.js +128 -74
  27. package/dist/server/resources/agent-monitor.js +454 -0
  28. package/dist/server/services/AgentHarness.js +24 -499
  29. package/dist/server/services/AgentMemoryContextService.js +216 -0
  30. package/dist/server/services/ExecutionSpanService.js +2 -2
  31. package/dist/server/services/NativeSubAgentObserver.js +413 -0
  32. package/dist/server/skill-hub/mcp/McpController.js +16 -5
  33. package/dist/server/skill-hub/plugin.js +81 -5
  34. package/dist/server/skill-hub/tasks/SkillExecutionTask.js +9 -3
  35. package/dist/server/tools/delegate-task.js +11 -589
  36. package/dist/server/utils/skill-settings.js +18 -1
  37. package/package.json +47 -49
  38. package/src/client/AIEmployeesContext.tsx +5 -18
  39. package/src/client/AgentRunsTab.tsx +2 -771
  40. package/src/client/HarnessProfilesTab.tsx +2 -257
  41. package/src/client/OrchestratorSettings.tsx +97 -106
  42. package/src/client/RulesTab.tsx +2 -788
  43. package/src/client/plugin.tsx +0 -2
  44. package/src/client/skill-hub/components/ExecutionHistory.tsx +200 -202
  45. package/src/client/skill-hub/components/ExecutionProgress.tsx +51 -55
  46. package/src/client/skill-hub/components/LoopSettings.tsx +331 -331
  47. package/src/client/skill-hub/components/SkillEditor.tsx +43 -39
  48. package/src/client/skill-hub/components/SkillManager.tsx +194 -181
  49. package/src/client/skill-hub/components/SkillTestPanel.tsx +141 -145
  50. package/src/client/skill-hub/locale.ts +16 -16
  51. package/src/client/skill-hub/tools/SkillHubCard.tsx +104 -109
  52. package/src/client/skill-hub/tools/loopTemplates.ts +52 -52
  53. package/src/client/skill-hub/utils/jsonFields.ts +7 -3
  54. package/src/client-v2/components/AIEmployeesContext.tsx +3 -16
  55. package/src/client-v2/components/AgentRunsTab.tsx +182 -455
  56. package/src/client-v2/components/HarnessProfilesTab.tsx +34 -31
  57. package/src/client-v2/components/RulesTab.tsx +2 -782
  58. package/src/client-v2/components/TracingTab.tsx +1 -1
  59. package/src/client-v2/hooks/useApiRequest.ts +8 -1
  60. package/src/client-v2/pages/RulesPage.tsx +2 -2
  61. package/src/client-v2/plugin.tsx +3 -3
  62. package/src/locale/en-US.json +94 -25
  63. package/src/locale/vi-VN.json +94 -25
  64. package/src/locale/zh-CN.json +94 -25
  65. package/src/server/__tests__/native-sub-agent-observer.test.ts +246 -0
  66. package/src/server/__tests__/skill-settings.test.ts +6 -6
  67. package/src/server/__tests__/smoke.test.ts +1 -0
  68. package/src/server/collections/agent-execution-spans.ts +37 -0
  69. package/src/server/collections/agent-harness-profiles.ts +59 -59
  70. package/src/server/collections/agent-loop-events.ts +71 -71
  71. package/src/server/collections/agent-loop-steps.ts +144 -144
  72. package/src/server/collections/agent-memory-contexts.ts +95 -0
  73. package/src/server/collections/orchestrator-logs.ts +4 -4
  74. package/src/server/collections/skill-definitions.ts +111 -111
  75. package/src/server/collections/skill-executions.ts +106 -106
  76. package/src/server/collections/skill-loop-configs.ts +65 -65
  77. package/src/server/migrations/20260423000000-add-progress-fields.ts +14 -14
  78. package/src/server/migrations/20260425000000-add-interaction-schema.ts +3 -1
  79. package/src/server/migrations/20260427000000-change-packages-to-text.ts +4 -2
  80. package/src/server/migrations/20260427000001-change-other-json-to-text.ts +9 -5
  81. package/src/server/migrations/20260524000000-add-agent-loop-fields-to-skill-executions.ts +30 -30
  82. package/src/server/migrations/20260524001000-add-plan-approval-and-harness-profiles.ts +145 -142
  83. package/src/server/migrations/20260615000000-normalize-ai-employee-tool-bindings.ts +2 -2
  84. package/src/server/migrations/20260621000000-native-policy-profile-defaults.ts +193 -0
  85. package/src/server/plugin.ts +151 -94
  86. package/src/server/resources/agent-monitor.ts +482 -0
  87. package/src/server/services/AgentHarness.ts +38 -623
  88. package/src/server/services/AgentMemoryContextService.ts +256 -0
  89. package/src/server/services/AgentPlanValidator.ts +73 -73
  90. package/src/server/services/ExecutionSpanService.ts +6 -2
  91. package/src/server/services/FileManager.ts +144 -144
  92. package/src/server/services/NativeSubAgentObserver.ts +507 -0
  93. package/src/server/services/SkillManager.ts +583 -583
  94. package/src/server/services/SkillRepositoryService.ts +5 -7
  95. package/src/server/services/TokenTracker.ts +3 -3
  96. package/src/server/services/WorkerEnvManager.ts +1 -2
  97. package/src/server/skill-hub/actions/git-import.ts +5 -7
  98. package/src/server/skill-hub/mcp/McpController.ts +41 -14
  99. package/src/server/skill-hub/plugin.ts +89 -6
  100. package/src/server/skill-hub/tasks/SkillExecutionTask.ts +470 -460
  101. package/src/server/skill-hub/utils/json-fields.ts +1 -1
  102. package/src/server/tools/delegate-task.ts +13 -847
  103. package/src/server/utils/skill-settings.ts +24 -6
  104. package/dist/client-v2/264.0533912e6c5ea2d7.js +0 -10
  105. package/dist/client-v2/418.5ae055abf141820e.js +0 -10
  106. package/dist/client-v2/619.d99d3c9e61c99064.js +0 -10
  107. package/dist/client-v2/892.72db4161511c8a16.js +0 -10
  108. package/dist/client-v2/926.87f660b670d85bcc.js +0 -10
  109. package/src/client/tools/PlanApprovalCard.tsx +0 -176
  110. package/src/client/tools/registerOrchestratorCards.ts +0 -17
@@ -11,20 +11,26 @@ function isRecord(value: unknown): value is RecordLike {
11
11
 
12
12
  export function isOrchestratorToolName(name: string) {
13
13
  return (
14
- name === 'orchestrator_plan_goal' ||
15
- name === 'orchestrator_execute_plan' ||
16
- name === 'orchestrator_status' ||
17
- name === 'orchestrator_cancel' ||
14
+ name === 'dispatch-sub-agent-task' ||
18
15
  name === 'external_rag_search' ||
19
16
  name === 'skill_hub_execute' ||
20
- name.startsWith('delegate_') ||
21
- name.startsWith('dispatch_subagents_') ||
22
17
  name.startsWith('skill_hub_') ||
23
18
  name.startsWith('browser_') ||
24
19
  name.startsWith('drawio-')
25
20
  );
26
21
  }
27
22
 
23
+ export function isRetiredOrchestratorToolName(name: string) {
24
+ return (
25
+ name === 'orchestrator_plan_goal' ||
26
+ name === 'orchestrator_execute_plan' ||
27
+ name === 'orchestrator_status' ||
28
+ name === 'orchestrator_cancel' ||
29
+ name.startsWith('delegate_') ||
30
+ name.startsWith('dispatch_subagents_')
31
+ );
32
+ }
33
+
28
34
  function toToolBinding(value: unknown): EmployeeToolBinding | null {
29
35
  if (typeof value === 'string') {
30
36
  const name = value.trim();
@@ -64,6 +70,10 @@ export function normalizeAIEmployeeSkillSettings(value: unknown): {
64
70
  for (const item of sourceTools) {
65
71
  const binding = toToolBinding(item);
66
72
  if (binding) {
73
+ if (isRetiredOrchestratorToolName(binding.name)) {
74
+ changed = true;
75
+ continue;
76
+ }
67
77
  addToolBinding(toolsByName, binding);
68
78
  if (typeof item === 'string') {
69
79
  changed = true;
@@ -83,6 +93,10 @@ export function normalizeAIEmployeeSkillSettings(value: unknown): {
83
93
  changed = true;
84
94
  continue;
85
95
  }
96
+ if (isRetiredOrchestratorToolName(name)) {
97
+ changed = true;
98
+ continue;
99
+ }
86
100
  if (isOrchestratorToolName(name)) {
87
101
  addToolBinding(toolsByName, { name, autoCall: false });
88
102
  changed = true;
@@ -97,6 +111,10 @@ export function normalizeAIEmployeeSkillSettings(value: unknown): {
97
111
 
98
112
  const legacyToolBinding = toToolBinding(item);
99
113
  if (legacyToolBinding) {
114
+ if (isRetiredOrchestratorToolName(legacyToolBinding.name)) {
115
+ changed = true;
116
+ continue;
117
+ }
100
118
  addToolBinding(toolsByName, legacyToolBinding);
101
119
  }
102
120
  changed = true;
@@ -1,10 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
-
10
- "use strict";(self.webpackChunkplugin_agent_orchestrator_client_v2=self.webpackChunkplugin_agent_orchestrator_client_v2||[]).push([["264"],{715:function(e,t,r){r.r(t),r.d(t,{default:function(){return b}});var n=r(155),a=r.n(n),l=r(59),o=r(375),u=r(608),i=r(603),c=r(204),s=r(472);function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function d(e,t,r,n,a,l,o){try{var u=e[l](o),i=u.value}catch(e){r(e);return}u.done?t(i):Promise.resolve(i).then(n,a)}function p(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var l=e.apply(t,r);function o(e){d(l,n,a,o,u,"next",e)}function u(e){d(l,n,a,o,u,"throw",e)}o(void 0)})}}function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,u=!1;try{for(a=a.call(e);!(o=(r=a.next()).done)&&(l.push(r.value),!t||l.length!==t);o=!0);}catch(e){u=!0,n=e}finally{try{o||null==a.return||a.return()}finally{if(u)throw n}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return f(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return f(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){var r,n,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),u=Object.defineProperty;return u(o,"next",{value:i(0)}),u(o,"throw",{value:i(1)}),u(o,"return",{value:i(2)}),"function"==typeof Symbol&&u(o,Symbol.iterator,{value:function(){return this}}),o;function i(u){return function(i){var c=[u,i];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,c[0]&&(l=0)),l;)try{if(r=1,n&&(a=2&c[0]?n.return:c[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,c[1])).done)return a;switch(n=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return l.label++,{value:c[1],done:!1};case 5:l.label++,n=c[1],c=[0];continue;case 7:c=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){l=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){l.label=c[1];break}if(6===c[0]&&l.label<a[1]){l.label=a[1],a=c;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(c);break}a[2]&&l.ops.pop(),l.trys.pop();continue}c=t.call(e,l)}catch(e){c=[6,e],n=0}finally{r=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var v={pending:"default",running:"processing",succeeded:"success",failed:"error",canceled:"warning",timeout:"error"},m=function(){var e=(0,u.R)(),t=(0,i.k)(),r=y((0,n.useState)([]),2),f=r[0],d=r[1],m=y((0,n.useState)(!1),2),b=m[0],g=m[1],w=y((0,n.useState)(1),2),k=w[0],S=w[1],x=y((0,n.useState)(0),2),E=x[0],O=x[1],A=(0,n.useCallback)(function(){return p(function(){var t,r,n,a,l,o;return h(this,function(u){switch(u.label){case 0:g(!0),u.label=1;case 1:return u.trys.push([1,3,4,5]),[4,e.request({url:"skillExecutions:list",params:{page:k,pageSize:20,sort:["-createdAt"],appends:["skill","triggeredBy"]}})];case 2:return d(Array.isArray(o=null!=(t=null!=(r=null==(l=u.sent().data)||null==(n=l.data)?void 0:n.data)?r:null==l?void 0:l.data)?t:[])?o:[]),O((null==l||null==(a=l.meta)?void 0:a.count)||0),[3,5];case 3:return u.sent(),[3,5];case 4:return g(!1),[7];case 5:return[2]}})})()},[e,k]);(0,n.useEffect)(function(){A()},[A]);var j=[{title:"ID",dataIndex:"id",key:"id",width:80},{title:t("Skill"),dataIndex:["skill","title"],key:"skill",width:180},{title:t("Status"),dataIndex:"status",key:"status",width:120,render:function(e){return a().createElement(l.Tag,{color:v[e]||"default"},e)}},{title:t("Duration"),dataIndex:"durationMs",key:"duration",width:100,render:function(e){return e?"".concat((e/1e3).toFixed(1),"s"):"-"}},{title:t("Files"),dataIndex:"outputFiles",key:"files",width:250,render:function(e,t){var r=(0,c.lk)(e,[]);if(!Array.isArray(r)||!r.length)return"-";var n=r.map(function(e){return{name:e.name,url:"/api/skillHub:download?execId=".concat(t.id,"&filename=").concat(encodeURIComponent(e.name))}});return a().createElement(s.H,{files:n})}},{title:t("Triggered By"),dataIndex:["triggeredBy","nickname"],key:"triggeredBy",width:120,render:function(e){return e||"-"}},{title:t("Created At"),dataIndex:"createdAt",key:"createdAt",width:180,render:function(e){return e?new Date(e).toLocaleString():"-"}},{title:t("Output"),key:"output",width:200,render:function(e,t){return a().createElement(l.Space,{direction:"vertical",size:0},t.stdout&&a().createElement(l.Tooltip,{title:t.stdout},a().createElement(l.Typography.Text,{style:{fontSize:12,maxWidth:200},ellipsis:!0},t.stdout)),t.stderr&&a().createElement(l.Tooltip,{title:t.stderr},a().createElement(l.Typography.Text,{type:"danger",style:{fontSize:12,maxWidth:200},ellipsis:!0},t.stderr)))}},{title:t("Actions"),key:"actions",width:80,fixed:"right",render:function(r,n){return a().createElement(l.Space,{size:"middle"},a().createElement(l.Popconfirm,{title:t("Are you sure to delete this execution history and its files?"),onConfirm:function(){var r;return r=n.id,p(function(){var n,a,o,u,i;return h(this,function(c){switch(c.label){case 0:return c.trys.push([0,2,,3]),[4,e.request({url:"skillExecutions:destroy",method:"POST",params:{filterByTk:r}})];case 1:return c.sent(),l.message.success(t("Deleted successfully")),A(),[3,3];case 2:return n=c.sent(),l.message.error((null==n||null==(i=n.response)||null==(u=i.data)||null==(o=u.errors)||null==(a=o[0])?void 0:a.message)||t("Delete failed")),[3,3];case 3:return[2]}})})()},okText:t("Yes"),cancelText:t("No")},a().createElement(l.Button,{type:"text",danger:!0,icon:a().createElement(o.DeleteOutlined,null),size:"small"})))}}];return a().createElement(l.Card,{title:t("Execution History"),extra:a().createElement(l.Space,null,a().createElement(l.Button,{icon:a().createElement(o.ReloadOutlined,null),onClick:A,loading:b},t("Refresh")))},a().createElement(l.Table,{dataSource:f,columns:j,rowKey:"id",loading:b,size:"middle",pagination:{current:k,pageSize:20,total:E,onChange:S,showTotal:function(e){return"Total: ".concat(e)}},scroll:{x:1200}}))},b=function(){return a().createElement("div",{style:{padding:"0 24px 24px"}},a().createElement(m,null))}},472:function(e,t,r){r.d(t,{H:function(){return u}});var n=r(155),a=r.n(n),l=r(59),o=r(375),u=function(e){var t=e.files;return Array.isArray(t)&&0!==t.length?a().createElement(l.Space,{direction:"vertical",size:2,style:{width:"100%"}},t.map(function(e,t){var r=e.downloadUrl||e.url,n=e.name||"file-".concat(t+1);return r?a().createElement("a",{key:"".concat(n,"-").concat(t),href:r,target:"_blank",rel:"noreferrer"},a().createElement(o.PaperClipOutlined,null)," ",n):a().createElement(l.Typography.Text,{key:"".concat(n,"-").concat(t)},a().createElement(o.PaperClipOutlined,null)," ",n)})):a().createElement(l.Typography.Text,{type:"secondary"},"-")}},608:function(e,t,r){r.d(t,{R:function(){return i},b:function(){return c}});var n=r(485),a=r(155);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function o(e,t,r,n,a,l,o){try{var u=e[l](o),i=u.value}catch(e){r(e);return}u.done?t(i):Promise.resolve(i).then(n,a)}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,u=!1;try{for(a=a.call(e);!(o=(r=a.next()).done)&&(l.push(r.value),!t||l.length!==t);o=!0);}catch(e){u=!0,n=e}finally{try{o||null==a.return||a.return()}finally{if(u)throw n}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return l(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(){return(0,n.useApp)().apiClient}function c(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=i(),n=t.manual,l=void 0!==n&&n,c=t.refreshDeps,s=t.onSuccess,f=t.onError,d=u((0,a.useState)(void 0),2),p=d[0],y=d[1],h=u((0,a.useState)(!l),2),v=h[0],m=h[1],b=u((0,a.useState)(void 0),2),g=b[0],w=b[1],k=(0,a.useRef)(e);k.current=e;var S=(0,a.useRef)(s);S.current=s;var x=(0,a.useRef)(f);x.current=f;var E=(0,a.useCallback)(function(e){var t;return(t=function(){var t,n,a,l,o,u;return function(e,t){var r,n,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),u=Object.defineProperty;return u(o,"next",{value:i(0)}),u(o,"throw",{value:i(1)}),u(o,"return",{value:i(2)}),"function"==typeof Symbol&&u(o,Symbol.iterator,{value:function(){return this}}),o;function i(u){return function(i){var c=[u,i];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,c[0]&&(l=0)),l;)try{if(r=1,n&&(a=2&c[0]?n.return:c[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,c[1])).done)return a;switch(n=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return l.label++,{value:c[1],done:!1};case 5:l.label++,n=c[1],c=[0];continue;case 7:c=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){l=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){l.label=c[1];break}if(6===c[0]&&l.label<a[1]){l.label=a[1],a=c;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(c);break}a[2]&&l.ops.pop(),l.trys.pop();continue}c=t.call(e,l)}catch(e){c=[6,e],n=0}finally{r=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(i){switch(i.label){case 0:t=k.current,m(!0),w(void 0),i.label=1;case 1:if(i.trys.push([1,6,7,8]),"function"!=typeof t)return[3,3];return[4,t()];case 2:return a=i.sent(),[3,5];case 3:return[4,r.request({url:t.url,method:t.method||"get",params:function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},t.params||{},e||{}),data:t.data})];case 4:a=null==(l=i.sent())?void 0:l.data,i.label=5;case 5:return y(a),null==(n=S.current)||n.call(S,a),[2,a];case 6:return w(o=i.sent()),null==(u=x.current)||u.call(x,o),[2,void 0];case 7:return m(!1),[7];case 8:return[2]}})},function(){var e=this,r=arguments;return new Promise(function(n,a){var l=t.apply(e,r);function u(e){o(l,n,a,u,i,"next",e)}function i(e){o(l,n,a,u,i,"throw",e)}u(void 0)})})()},[r]),O=(0,a.useCallback)(function(){E()},[E]);return(0,a.useEffect)(function(){l||E()},void 0===c?[]:c),{data:p,loading:v,error:g,refresh:O,run:E}}},603:function(e,t,r){r.d(t,{k:function(){return l}});var n=r(485),a=r(155);function l(){var e=(0,n.useApp)();return(0,a.useCallback)(function(t,r){return e.i18n.t(t,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({ns:["plugin-agent-orchestrator","client"]},r))},[e.i18n])}},204:function(e,t,r){function n(e,t){if(null==e||""===e)return t;if("string"!=typeof e)return e;var r=e.trim(),n=r.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i),a=n?n[1].trim():r;try{var l=JSON.parse(a);if("string"==typeof l){var o=l.trim(),u=o.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i),i=u?u[1].trim():o;try{l=JSON.parse(i)}catch(e){}}return l}catch(e){return t}}function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=n(e,void 0),a=void 0===r?null==e||""===e?t:e:r;return null==a?"":"string"==typeof a?a:JSON.stringify(a,null,2)}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=n(e,void 0),a=void 0===r?null==e||""===e?t:e:r;return"```json\n".concat(JSON.stringify(a,null,2),"\n```")}r.d(t,{Bz:function(){return a},Nx:function(){return l},lk:function(){return n}})}}]);
@@ -1,10 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
-
10
- "use strict";(self.webpackChunkplugin_agent_orchestrator_client_v2=self.webpackChunkplugin_agent_orchestrator_client_v2||[]).push([["418"],{393:function(e,t,r){r.r(t),r.d(t,{default:function(){return b}});var n=r(155),a=r.n(n),l=r(59),o=r(375),u=r(608);function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function c(e,t,r,n,a,l,o){try{var u=e[l](o),i=u.value}catch(e){r(e);return}u.done?t(i):Promise.resolve(i).then(n,a)}function s(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var l=e.apply(t,r);function o(e){c(l,n,a,o,u,"next",e)}function u(e){c(l,n,a,o,u,"throw",e)}o(void 0)})}}function f(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,u=!1;try{for(a=a.call(e);!(o=(r=a.next()).done)&&(l.push(r.value),!t||l.length!==t);o=!0);}catch(e){u=!0,n=e}finally{try{o||null==a.return||a.return()}finally{if(u)throw n}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return i(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(e,t){var r,n,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),u=Object.defineProperty;return u(o,"next",{value:i(0)}),u(o,"throw",{value:i(1)}),u(o,"return",{value:i(2)}),"function"==typeof Symbol&&u(o,Symbol.iterator,{value:function(){return this}}),o;function i(u){return function(i){var c=[u,i];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,c[0]&&(l=0)),l;)try{if(r=1,n&&(a=2&c[0]?n.return:c[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,c[1])).done)return a;switch(n=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return l.label++,{value:c[1],done:!1};case 5:l.label++,n=c[1],c=[0];continue;case 7:c=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){l=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){l.label=c[1];break}if(6===c[0]&&l.label<a[1]){l.label=a[1],a=c;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(c);break}a[2]&&l.ops.pop(),l.trys.pop();continue}c=t.call(e,l)}catch(e){c=[6,e],n=0}finally{r=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var d=l.Typography.Text,m=function(e){var t=String(e||"").trim();return t?JSON.parse(t):{}},y=function(){var e=(0,u.R)(),t=f(a().useState(!1),2),r=t[0],n=t[1],i=f(a().useState(null),2),c=i[0],y=i[1],b=f(l.Form.useForm(),1)[0],g=(0,u.b)({url:"agentHarnessProfiles:list",params:{sort:["tag"],pageSize:100}}),h=g.data,v=g.loading,w=g.refresh,S=a().useMemo(function(){var e=null==h?void 0:h.data;return Array.isArray(e)?e:[]},[h]),O=function(e){var t,r;y(e||null),b.resetFields(),b.setFieldsValue(e?(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},e),r=r={settingsText:JSON.stringify(e.settings||{},null,2)},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t):{tag:"",title:"",description:"",enabled:!0,settingsText:JSON.stringify({requirePlanApproval:!0,allowSubAgents:!0,allowToolCalls:!0,maxParallelSubAgents:3,maxControllerSteps:100},null,2)}),n(!0)},E=function(){n(!1),y(null)},k=[{title:"Tag",dataIndex:"tag",key:"tag",width:140,render:function(e){return a().createElement(l.Tag,{color:"blue"},e)}},{title:"Title",dataIndex:"title",key:"title",render:function(e,t){return e||t.tag}},{title:"Enabled",dataIndex:"enabled",key:"enabled",width:90,render:function(t,r){return a().createElement(l.Switch,{size:"small",checked:!1!==t,onChange:function(t){return s(function(){return p(this,function(n){switch(n.label){case 0:return[4,e.request({url:"agentHarnessProfiles:update",method:"put",params:{filterByTk:r.id},data:{enabled:t}})];case 1:return n.sent(),w(),[2]}})})()}})}},{title:"Settings",key:"settings",render:function(e,t){return a().createElement(l.Space,{size:4,wrap:!0},Object.entries(t.settings||{}).slice(0,5).map(function(e){var t=f(e,2),r=t[0],n=t[1];return a().createElement(l.Tag,{key:r},r,": ",String(n))}))}},{title:"Actions",key:"actions",width:150,render:function(t,r){return a().createElement(l.Space,null,a().createElement(l.Button,{type:"link",size:"small",icon:a().createElement(o.EditOutlined,null),onClick:function(){return O(r)}},"Edit"),a().createElement(l.Popconfirm,{title:"Delete this profile?",onConfirm:function(){var t;return t=r.id,s(function(){var r;return p(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.request({url:"agentHarnessProfiles:destroy",method:"delete",params:{filterByTk:t}})];case 1:return n.sent(),l.message.success("Harness profile deleted"),w(),[3,3];case 2:return r=n.sent(),l.message.error("Delete failed: ".concat((null==r?void 0:r.message)||"unknown error")),[3,3];case 3:return[2]}})})()}},a().createElement(l.Button,{type:"link",size:"small",danger:!0,icon:a().createElement(o.DeleteOutlined,null)},"Delete")))}}];return a().createElement("div",null,a().createElement(l.Card,{bordered:!1},a().createElement(l.Space,{direction:"vertical",size:16,style:{width:"100%"}},a().createElement("div",{style:{display:"flex",justifyContent:"space-between",gap:16}},a().createElement(d,{type:"secondary"},"Harness profiles are selected by orchestration rules through the harnessTag field."),a().createElement(l.Button,{type:"primary",icon:a().createElement(o.PlusOutlined,null),onClick:function(){return O()}},"New Profile")),a().createElement(l.Table,{rowKey:"id",loading:v,dataSource:S,columns:k,pagination:!1,scroll:{x:"max-content"}}))),a().createElement(l.Drawer,{title:c?"Edit Harness Profile":"New Harness Profile",width:560,open:r,onClose:E,extra:a().createElement(l.Space,null,a().createElement(l.Button,{onClick:E},"Cancel"),a().createElement(l.Button,{type:"primary",onClick:function(){return b.submit()}},"Save"))},a().createElement(l.Form,{form:b,layout:"vertical",onFinish:function(t){return s(function(){var r,n,a,o,u,i,s,f;return p(this,function(p){switch(p.label){case 0:try{r=m(t.settingsText)}catch(e){return l.message.error("Settings JSON is invalid: ".concat((null==e?void 0:e.message)||e)),[2]}n={tag:String(t.tag||"").trim(),title:t.title,description:t.description,enabled:!1!==t.enabled,settings:r},p.label=1;case 1:if(p.trys.push([1,6,,7]),!c)return[3,3];return[4,e.request({url:"agentHarnessProfiles:update",method:"put",params:{filterByTk:c.id},data:n})];case 2:return p.sent(),l.message.success("Harness profile updated"),[3,5];case 3:return[4,e.request({url:"agentHarnessProfiles:create",method:"post",data:n})];case 4:p.sent(),l.message.success("Harness profile created"),p.label=5;case 5:return E(),w(),[3,7];case 6:return f=(null==(a=p.sent())||null==(s=a.response)||null==(i=s.data)||null==(u=i.errors)||null==(o=u[0])?void 0:o.message)||(null==a?void 0:a.message)||"unknown error",l.message.error("Save failed: ".concat(f)),[3,7];case 7:return[2]}})})()}},a().createElement(l.Form.Item,{name:"tag",label:"Tag",rules:[{required:!0,message:"Tag is required"}]},a().createElement(l.Input,{placeholder:"default",disabled:(null==c?void 0:c.tag)==="default"})),a().createElement(l.Form.Item,{name:"title",label:"Title"},a().createElement(l.Input,null)),a().createElement(l.Form.Item,{name:"description",label:"Description"},a().createElement(l.Input.TextArea,{rows:3})),a().createElement(l.Form.Item,{name:"settingsText",label:"Settings JSON",rules:[{required:!0,message:"Settings JSON is required"}]},a().createElement(l.Input.TextArea,{rows:12,spellCheck:!1})),a().createElement(l.Form.Item,{name:"enabled",label:"Enabled",valuePropName:"checked"},a().createElement(l.Switch,null)))))},b=function(){return a().createElement("div",{style:{padding:"0 24px 24px"}},a().createElement(y,null))}},608:function(e,t,r){r.d(t,{R:function(){return i},b:function(){return c}});var n=r(485),a=r(155);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function o(e,t,r,n,a,l,o){try{var u=e[l](o),i=u.value}catch(e){r(e);return}u.done?t(i):Promise.resolve(i).then(n,a)}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,u=!1;try{for(a=a.call(e);!(o=(r=a.next()).done)&&(l.push(r.value),!t||l.length!==t);o=!0);}catch(e){u=!0,n=e}finally{try{o||null==a.return||a.return()}finally{if(u)throw n}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return l(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(){return(0,n.useApp)().apiClient}function c(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=i(),n=t.manual,l=void 0!==n&&n,c=t.refreshDeps,s=t.onSuccess,f=t.onError,p=u((0,a.useState)(void 0),2),d=p[0],m=p[1],y=u((0,a.useState)(!l),2),b=y[0],g=y[1],h=u((0,a.useState)(void 0),2),v=h[0],w=h[1],S=(0,a.useRef)(e);S.current=e;var O=(0,a.useRef)(s);O.current=s;var E=(0,a.useRef)(f);E.current=f;var k=(0,a.useCallback)(function(e){var t;return(t=function(){var t,n,a,l,o,u;return function(e,t){var r,n,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),u=Object.defineProperty;return u(o,"next",{value:i(0)}),u(o,"throw",{value:i(1)}),u(o,"return",{value:i(2)}),"function"==typeof Symbol&&u(o,Symbol.iterator,{value:function(){return this}}),o;function i(u){return function(i){var c=[u,i];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,c[0]&&(l=0)),l;)try{if(r=1,n&&(a=2&c[0]?n.return:c[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,c[1])).done)return a;switch(n=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return l.label++,{value:c[1],done:!1};case 5:l.label++,n=c[1],c=[0];continue;case 7:c=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){l=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){l.label=c[1];break}if(6===c[0]&&l.label<a[1]){l.label=a[1],a=c;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(c);break}a[2]&&l.ops.pop(),l.trys.pop();continue}c=t.call(e,l)}catch(e){c=[6,e],n=0}finally{r=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(i){switch(i.label){case 0:t=S.current,g(!0),w(void 0),i.label=1;case 1:if(i.trys.push([1,6,7,8]),"function"!=typeof t)return[3,3];return[4,t()];case 2:return a=i.sent(),[3,5];case 3:return[4,r.request({url:t.url,method:t.method||"get",params:function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},t.params||{},e||{}),data:t.data})];case 4:a=null==(l=i.sent())?void 0:l.data,i.label=5;case 5:return m(a),null==(n=O.current)||n.call(O,a),[2,a];case 6:return w(o=i.sent()),null==(u=E.current)||u.call(E,o),[2,void 0];case 7:return g(!1),[7];case 8:return[2]}})},function(){var e=this,r=arguments;return new Promise(function(n,a){var l=t.apply(e,r);function u(e){o(l,n,a,u,i,"next",e)}function i(e){o(l,n,a,u,i,"throw",e)}u(void 0)})})()},[r]),P=(0,a.useCallback)(function(){k()},[k]);return(0,a.useEffect)(function(){l||k()},void 0===c?[]:c),{data:d,loading:b,error:v,refresh:P,run:k}}}}]);
@@ -1,10 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
-
10
- "use strict";(self.webpackChunkplugin_agent_orchestrator_client_v2=self.webpackChunkplugin_agent_orchestrator_client_v2||[]).push([["619"],{532:function(e,t,r){r.d(t,{j:function(){return m},l:function(){return s}});var n=r(155),a=r.n(n),l=r(608);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function i(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e){if(e){if("string"==typeof e)return o(e,void 0);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o(e,void 0)}}(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var u=(0,n.createContext)({employees:[],employeeMap:new Map,toolNamesMap:new Map,loading:!1,refresh:function(){}}),c=new Set(["orchestrator_plan_goal","orchestrator_execute_plan","orchestrator_status","orchestrator_cancel","external_rag_search","skill_hub_execute"]),s=function(e){var t=e.children,r=(0,l.b)({url:"aiEmployees:list",params:{pageSize:200}}),n=r.data,o=r.loading,s=r.refresh,m=a().useMemo(function(){var e=((null==n?void 0:n.data)||[]).map(function(e){var t,r,n,a,l=(r=Array.isArray(null==(t=e.skillSettings)?void 0:t.tools)?t.tools.map(function(e){return"string"==typeof e?e:null==e?void 0:e.name}).filter(function(e){return"string"==typeof e&&e.length>0}):[],n=Array.isArray(null==t?void 0:t.skills)?t.skills.map(function(e){if("string"==typeof e)return c.has(e)||e.startsWith("delegate_")||e.startsWith("dispatch_subagents_")||e.startsWith("skill_hub_")||e.startsWith("browser_")||e.startsWith("drawio-")?e:null;return null==e?void 0:e.name}).filter(function(e){return"string"==typeof e&&e.length>0}):[],Array.from(new Set(i(r).concat(i(n)))));return{username:e.username,nickname:e.nickname||e.username,about:null==(a=e.about)?void 0:a.substring(0,80),tools:l}}),t=new Map,r=new Map,a=!0,l=!1,u=void 0;try{for(var m,f=e[Symbol.iterator]();!(a=(m=f.next()).done);a=!0){var p=m.value;t.set(p.username,p.nickname),r.set(p.username,new Set(p.tools))}}catch(e){l=!0,u=e}finally{try{a||null==f.return||f.return()}finally{if(l)throw u}}return{employees:e,employeeMap:t,toolNamesMap:r,loading:o,refresh:s}},[n,o,s]);return a().createElement(u.Provider,{value:m},t)},m=function(){return(0,n.useContext)(u)}},230:function(e,t,r){r.r(t),r.d(t,{default:function(){return g}});var n=r(155),a=r.n(n),l=r(532),o=r(59),i=r(375),u=r(608);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function s(e,t,r,n,a,l,o){try{var i=e[l](o),u=i.value}catch(e){r(e);return}i.done?t(u):Promise.resolve(u).then(n,a)}function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(r=a.next()).done)&&(l.push(r.value),!t||l.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw n}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return c(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var f=o.Typography.Text,p=o.Typography.Paragraph,d=o.DatePicker.RangePicker,y=function(){var e,t=(0,u.R)(),r=m((0,n.useState)(null),2),c=r[0],y=r[1],g=m((0,n.useState)(!1),2),h=g[0],b=g[1],v=m((0,n.useState)(1),2),E=v[0],w=v[1],S=m((0,n.useState)(20),2),A=S[0],k=S[1],x=m((0,n.useState)({}),2),C=x[0],O=x[1],I=(0,l.j)(),T=I.employees,j=I.employeeMap,D=(0,n.useMemo)(function(){var e={};return C.leader&&(e.leaderUsername=C.leader),C.subAgent&&(e.subAgentUsername=C.subAgent),C.status&&(e.status=C.status),C.range&&(C.range[0]||C.range[1])&&(e.createdAt={},C.range[0]&&(e.createdAt.$gte=C.range[0].toDate().toISOString()),C.range[1]&&(e.createdAt.$lte=C.range[1].toDate().toISOString())),{sort:["-createdAt"],page:E,pageSize:A,filter:e}},[E,A,C]),_=(0,u.b)({url:"orchestratorTracing:list",params:D},{refreshDeps:[D]}),z=_.data,M=_.loading,P=_.refresh,U=(0,n.useMemo)(function(){var e=null==z?void 0:z.data;return Array.isArray(e)?e:[]},[z]),N=(0,n.useMemo)(function(){var e,t=null==z||null==(e=z.meta)?void 0:e.count;return"number"==typeof t?t:0},[z]),B=function(e){return e?e>=1e3?"".concat((e/1e3).toFixed(1),"s"):"".concat(e,"ms"):"-"},R=function(e){var r;return(r=function(){var r,n;return function(e,t){var r,n,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:u(0)}),i(o,"throw",{value:u(1)}),i(o,"return",{value:u(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function u(i){return function(u){var c=[i,u];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,c[0]&&(l=0)),l;)try{if(r=1,n&&(a=2&c[0]?n.return:c[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,c[1])).done)return a;switch(n=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return l.label++,{value:c[1],done:!1};case 5:l.label++,n=c[1],c=[0];continue;case 7:c=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){l=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){l.label=c[1];break}if(6===c[0]&&l.label<a[1]){l.label=a[1],a=c;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(c);break}a[2]&&l.ops.pop(),l.trys.pop();continue}c=t.call(e,l)}catch(e){c=[6,e],n=0}finally{r=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(a){switch(a.label){case 0:y(e),b(!0),a.label=1;case 1:return a.trys.push([1,,3,4]),[4,t.request({url:"orchestratorTracing:get",params:{filterByTk:e.id,source:e.hasUnifiedTrace?"span":"log"}})];case 2:return y((null==(n=a.sent())||null==(r=n.data)?void 0:r.data)||(null==n?void 0:n.data)||e),[3,4];case 3:return b(!1),[7];case 4:return[2]}})},function(){var e=this,t=arguments;return new Promise(function(n,a){var l=r.apply(e,t);function o(e){s(l,n,a,o,i,"next",e)}function i(e){s(l,n,a,o,i,"throw",e)}o(void 0)})})()},F=function(e){O(function(t){return function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},t,e)}),w(1)},W=(0,n.useMemo)(function(){return T.map(function(e){return{label:e.nickname||e.username,value:e.username}})},[T]),L=!!(C.leader||C.subAgent||C.status||C.range&&(C.range[0]||C.range[1])),$=[{title:"Time",dataIndex:"createdAt",key:"createdAt",width:170,render:function(e){return e?new Date(e).toLocaleString():"-"}},{title:"Leader",dataIndex:"leaderUsername",key:"leaderUsername",render:function(e){return a().createElement(o.Tag,{color:"blue"},j.get(e)||e)}},{title:"Sub-Agent",dataIndex:"subAgentUsername",key:"subAgentUsername",render:function(e){return a().createElement(o.Tag,{color:"green"},j.get(e)||e)}},{title:"Task",dataIndex:"task",key:"task",render:function(e){return a().createElement(f,{ellipsis:!0,style:{maxWidth:280}},(null==e?void 0:e.substring(0,100))||"-")}},{title:"Status",dataIndex:"status",key:"status",width:90,render:function(e){return a().createElement(o.Tag,{icon:"success"===e?a().createElement(i.CheckCircleOutlined,null):a().createElement(i.CloseCircleOutlined,null),color:"success"===e?"success":"error"},e)}},{title:"Duration",dataIndex:"durationMs",key:"durationMs",width:90,render:B},{title:"Depth",dataIndex:"depth",key:"depth",width:60,render:function(e){return null!=e?e:0}},{title:"",key:"actions",width:80,render:function(e,t){return a().createElement(o.Button,{type:"link",size:"small",icon:a().createElement(i.EyeOutlined,null),onClick:function(){return R(t)}},"Detail")}}];return a().createElement("div",null,a().createElement(o.Alert,{type:"info",showIcon:!0,style:{marginBottom:16},message:"Execution Tracing",description:a().createElement(f,{type:"secondary"},"View orchestration execution logs. Each row represents one sub-agent invocation, with child tool and Skill Hub executions shown in the detail flow.")}),a().createElement(o.Card,{bordered:!1},a().createElement(o.Form,{layout:"inline",style:{marginBottom:16,rowGap:8,flexWrap:"wrap"}},a().createElement(o.Form.Item,{label:"Leader"},a().createElement(o.Select,{allowClear:!0,placeholder:"Any leader",style:{minWidth:180},options:W,value:C.leader,onChange:function(e){return F({leader:e})},showSearch:!0,optionFilterProp:"label"})),a().createElement(o.Form.Item,{label:"Sub-Agent"},a().createElement(o.Select,{allowClear:!0,placeholder:"Any sub-agent",style:{minWidth:180},options:W,value:C.subAgent,onChange:function(e){return F({subAgent:e})},showSearch:!0,optionFilterProp:"label"})),a().createElement(o.Form.Item,{label:"Status"},a().createElement(o.Select,{allowClear:!0,placeholder:"Any status",style:{minWidth:140},options:[{label:"Success",value:"success"},{label:"Error",value:"error"},{label:"Running",value:"running"}],value:C.status,onChange:function(e){return F({status:e})}})),a().createElement(o.Form.Item,{label:"Time"},a().createElement(d,{showTime:!0,value:C.range,onChange:function(e){return F({range:e})}})),a().createElement(o.Form.Item,null,a().createElement(o.Space,null,a().createElement(o.Button,{onClick:function(){O({}),w(1)},disabled:!L},"Reset"),a().createElement(o.Button,{icon:a().createElement(i.ReloadOutlined,null),onClick:P},"Refresh")))),a().createElement(o.Table,{rowKey:"id",loading:M,dataSource:U,columns:$,size:"middle",scroll:{x:"max-content"},pagination:{current:E,pageSize:A,total:N,showSizeChanger:!0,pageSizeOptions:[10,20,50,100],showTotal:function(e){return"".concat(e," execution").concat(1===e?"":"s")},onChange:function(e,t){w(e),t&&t!==A&&k(t)}},locale:{emptyText:a().createElement(o.Empty,{description:L?"No executions match the current filters":"No delegation executions yet"})}})),a().createElement(o.Drawer,{title:"Execution Detail",width:820,onClose:function(){return y(null)},open:!!c},c&&a().createElement(o.Spin,{spinning:h},a().createElement(a().Fragment,null,a().createElement(o.Descriptions,{column:1,bordered:!0,size:"small",style:{marginBottom:16}},a().createElement(o.Descriptions.Item,{label:"Status"},a().createElement(o.Tag,{icon:"success"===c.status?a().createElement(i.CheckCircleOutlined,null):a().createElement(i.CloseCircleOutlined,null),color:"success"===c.status?"success":"error"},c.status)),a().createElement(o.Descriptions.Item,{label:"Leader"},a().createElement(o.Tag,{color:"blue"},j.get(c.leaderUsername)||c.leaderUsername)),a().createElement(o.Descriptions.Item,{label:"Sub-Agent"},a().createElement(o.Tag,{color:"green"},j.get(c.subAgentUsername)||c.subAgentUsername)),a().createElement(o.Descriptions.Item,{label:"Tool"},a().createElement(f,{code:!0},c.toolName)),a().createElement(o.Descriptions.Item,{label:"Depth"},null!=(e=c.depth)?e:0),a().createElement(o.Descriptions.Item,{label:"Duration"},B(c.durationMs)),a().createElement(o.Descriptions.Item,{label:"Time"},c.createdAt?new Date(c.createdAt).toLocaleString():"-")),a().createElement(o.Card,{title:"Task",size:"small",style:{marginBottom:16}},a().createElement(p,{style:{whiteSpace:"pre-wrap",margin:0,fontSize:13}},c.task||"No task description")),c.context&&a().createElement(o.Card,{title:"Context",size:"small",style:{marginBottom:16}},a().createElement(p,{style:{whiteSpace:"pre-wrap",margin:0,fontSize:13}},c.context)),a().createElement(o.Card,{title:"Execution Flow",size:"small",style:{marginBottom:16}},Array.isArray(c.trace)&&c.trace.length?a().createElement(o.Timeline,{items:c.trace.map(function(e,t){return{key:t,color:"error"===e.status?"red":"tool_call"===e.type?"blue":"green",children:a().createElement("div",null,a().createElement(o.Space,{direction:"vertical",size:2,style:{width:"100%"}},a().createElement(f,{strong:!0},e.title||e.type),a().createElement(f,{type:"secondary"},e.at?new Date(e.at).toLocaleString():""),e.toolName&&a().createElement(f,{code:!0},e.toolName),e.skillExecutionId&&a().createElement(f,{type:"secondary"},"Skill execution #",e.skillExecutionId),e.content&&a().createElement(p,{style:{whiteSpace:"pre-wrap",margin:0,fontSize:13}},e.content),e.args&&a().createElement(p,{style:{whiteSpace:"pre-wrap",margin:0,fontSize:12}},JSON.stringify(e.args,null,2))))}})}):a().createElement(o.Empty,{description:"No execution flow captured"})),Array.isArray(c.messages)&&c.messages.length>0&&a().createElement(o.Collapse,{style:{marginBottom:16},items:[{key:"messages",label:"Raw messages (".concat(c.messages.length,")"),children:a().createElement(o.Space,{direction:"vertical",style:{width:"100%"}},c.messages.map(function(e){var t;return a().createElement(o.Card,{key:e.index,size:"small",title:"".concat(e.index+1,". ").concat(e.type)},a().createElement(p,{style:{whiteSpace:"pre-wrap",margin:0,fontSize:12}},e.content||JSON.stringify(e.toolCalls||e,null,2)),(null==(t=e.toolCalls)?void 0:t.length)>0&&a().createElement(p,{style:{whiteSpace:"pre-wrap",margin:"8px 0 0",fontSize:12}},JSON.stringify(e.toolCalls,null,2)))}))}]}),a().createElement(o.Card,{title:"Result",size:"small",style:{marginBottom:16,borderColor:"success"===c.status?"#b7eb8f":"#ffa39e"}},a().createElement(p,{style:{whiteSpace:"pre-wrap",margin:0,fontSize:13},ellipsis:{rows:20,expandable:!0}},c.result||c.error||"No result")),c.error&&a().createElement(o.Card,{title:"Error",size:"small",style:{borderColor:"#ffa39e"}},a().createElement(p,{type:"danger",style:{whiteSpace:"pre-wrap",margin:0,fontSize:13}},c.error))))))},g=function(){return a().createElement(l.l,null,a().createElement("div",{style:{padding:"0 24px 24px"}},a().createElement(y,null)))}},608:function(e,t,r){r.d(t,{R:function(){return u},b:function(){return c}});var n=r(485),a=r(155);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function o(e,t,r,n,a,l,o){try{var i=e[l](o),u=i.value}catch(e){r(e);return}i.done?t(u):Promise.resolve(u).then(n,a)}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(r=a.next()).done)&&(l.push(r.value),!t||l.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw n}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return l(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(){return(0,n.useApp)().apiClient}function c(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=u(),n=t.manual,l=void 0!==n&&n,c=t.refreshDeps,s=t.onSuccess,m=t.onError,f=i((0,a.useState)(void 0),2),p=f[0],d=f[1],y=i((0,a.useState)(!l),2),g=y[0],h=y[1],b=i((0,a.useState)(void 0),2),v=b[0],E=b[1],w=(0,a.useRef)(e);w.current=e;var S=(0,a.useRef)(s);S.current=s;var A=(0,a.useRef)(m);A.current=m;var k=(0,a.useCallback)(function(e){var t;return(t=function(){var t,n,a,l,o,i;return function(e,t){var r,n,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:u(0)}),i(o,"throw",{value:u(1)}),i(o,"return",{value:u(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function u(i){return function(u){var c=[i,u];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,c[0]&&(l=0)),l;)try{if(r=1,n&&(a=2&c[0]?n.return:c[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,c[1])).done)return a;switch(n=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return l.label++,{value:c[1],done:!1};case 5:l.label++,n=c[1],c=[0];continue;case 7:c=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){l=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){l.label=c[1];break}if(6===c[0]&&l.label<a[1]){l.label=a[1],a=c;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(c);break}a[2]&&l.ops.pop(),l.trys.pop();continue}c=t.call(e,l)}catch(e){c=[6,e],n=0}finally{r=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(u){switch(u.label){case 0:t=w.current,h(!0),E(void 0),u.label=1;case 1:if(u.trys.push([1,6,7,8]),"function"!=typeof t)return[3,3];return[4,t()];case 2:return a=u.sent(),[3,5];case 3:return[4,r.request({url:t.url,method:t.method||"get",params:function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},t.params||{},e||{}),data:t.data})];case 4:a=null==(l=u.sent())?void 0:l.data,u.label=5;case 5:return d(a),null==(n=S.current)||n.call(S,a),[2,a];case 6:return E(o=u.sent()),null==(i=A.current)||i.call(A,o),[2,void 0];case 7:return h(!1),[7];case 8:return[2]}})},function(){var e=this,r=arguments;return new Promise(function(n,a){var l=t.apply(e,r);function i(e){o(l,n,a,i,u,"next",e)}function u(e){o(l,n,a,i,u,"throw",e)}i(void 0)})})()},[r]),x=(0,a.useCallback)(function(){k()},[k]);return(0,a.useEffect)(function(){l||k()},void 0===c?[]:c),{data:p,loading:g,error:v,refresh:x,run:k}}}}]);
@@ -1,10 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
-
10
- "use strict";(self.webpackChunkplugin_agent_orchestrator_client_v2=self.webpackChunkplugin_agent_orchestrator_client_v2||[]).push([["892"],{532:function(e,t,r){r.d(t,{j:function(){return m},l:function(){return c}});var n=r(155),a=r.n(n),l=r(608);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function i(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e){if(e){if("string"==typeof e)return o(e,void 0);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o(e,void 0)}}(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var u=(0,n.createContext)({employees:[],employeeMap:new Map,toolNamesMap:new Map,loading:!1,refresh:function(){}}),s=new Set(["orchestrator_plan_goal","orchestrator_execute_plan","orchestrator_status","orchestrator_cancel","external_rag_search","skill_hub_execute"]),c=function(e){var t=e.children,r=(0,l.b)({url:"aiEmployees:list",params:{pageSize:200}}),n=r.data,o=r.loading,c=r.refresh,m=a().useMemo(function(){var e=((null==n?void 0:n.data)||[]).map(function(e){var t,r,n,a,l=(r=Array.isArray(null==(t=e.skillSettings)?void 0:t.tools)?t.tools.map(function(e){return"string"==typeof e?e:null==e?void 0:e.name}).filter(function(e){return"string"==typeof e&&e.length>0}):[],n=Array.isArray(null==t?void 0:t.skills)?t.skills.map(function(e){if("string"==typeof e)return s.has(e)||e.startsWith("delegate_")||e.startsWith("dispatch_subagents_")||e.startsWith("skill_hub_")||e.startsWith("browser_")||e.startsWith("drawio-")?e:null;return null==e?void 0:e.name}).filter(function(e){return"string"==typeof e&&e.length>0}):[],Array.from(new Set(i(r).concat(i(n)))));return{username:e.username,nickname:e.nickname||e.username,about:null==(a=e.about)?void 0:a.substring(0,80),tools:l}}),t=new Map,r=new Map,a=!0,l=!1,u=void 0;try{for(var m,d=e[Symbol.iterator]();!(a=(m=d.next()).done);a=!0){var f=m.value;t.set(f.username,f.nickname),r.set(f.username,new Set(f.tools))}}catch(e){l=!0,u=e}finally{try{a||null==d.return||d.return()}finally{if(l)throw u}}return{employees:e,employeeMap:t,toolNamesMap:r,loading:o,refresh:c}},[n,o,c]);return a().createElement(u.Provider,{value:m},t)},m=function(){return(0,n.useContext)(u)}},447:function(e,t,r){r.r(t),r.d(t,{default:function(){return I}});var n=r(155),a=r.n(n),l=r(532),o=r(59),i=r(375),u=r(608),s=function(e){var t=e.value,r=e.onChange,n=e.exclude,i=e.placeholder,u=(0,l.j)(),s=u.employees,c=u.loading,m=a().useMemo(function(){return s.filter(function(e){return!n||e.username!==n}).map(function(e){return{label:e.nickname,value:e.username,description:e.about}})},[s,n]);return a().createElement(o.Select,{loading:c,options:m,value:t,onChange:r,placeholder:void 0===i?"Select AI Employee...":i,showSearch:!0,filterOption:function(e,t){var r,n;return(null!=(r=null==t?void 0:t.label)?r:"").toString().toLowerCase().includes(e.toLowerCase())||(null!=(n=null==t?void 0:t.value)?n:"").toString().toLowerCase().includes(e.toLowerCase())},optionRender:function(e){return a().createElement("div",null,a().createElement("div",{style:{fontWeight:500}},e.label),e.data.description&&a().createElement("div",{style:{fontSize:12,color:"#888"}},e.data.description))}})};function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function m(e,t,r,n,a,l,o){try{var i=e[l](o),u=i.value}catch(e){r(e);return}i.done?t(u):Promise.resolve(u).then(n,a)}function d(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var l=e.apply(t,r);function o(e){m(l,n,a,o,i,"next",e)}function i(e){m(l,n,a,o,i,"throw",e)}o(void 0)})}}function f(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(r=a.next()).done)&&(l.push(r.value),!t||l.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw n}}return l}}(e,t)||g(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e){return function(e){if(Array.isArray(e))return c(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||g(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return c(e,t)}}function b(e,t){var r,n,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:u(0)}),i(o,"throw",{value:u(1)}),i(o,"return",{value:u(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function u(i){return function(u){var s=[i,u];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,s[0]&&(l=0)),l;)try{if(r=1,n&&(a=2&s[0]?n.return:s[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,s[1])).done)return a;switch(n=0,a&&(s=[2&s[0],a.value]),s[0]){case 0:case 1:a=s;break;case 4:return l.label++,{value:s[1],done:!1};case 5:l.label++,n=s[1],s=[0];continue;case 7:s=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===s[0]||2===s[0])){l=0;continue}if(3===s[0]&&(!a||s[1]>a[0]&&s[1]<a[3])){l.label=s[1];break}if(6===s[0]&&l.label<a[1]){l.label=a[1],a=s;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(s);break}a[2]&&l.ops.pop(),l.trys.pop();continue}s=t.call(e,l)}catch(e){s=[6,e],n=0}finally{r=a=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}}}var v=o.Typography.Text,E=function(e){return(e||"").replace(/[^a-zA-Z0-9_-]/g,"_")},w=function(e,t){return"delegate_".concat(E(e),"_to_").concat(E(t))},S=function(e){return"dispatch_subagents_".concat(E(e))},A=["orchestrator_plan_goal","orchestrator_execute_plan","orchestrator_status","orchestrator_cancel"],k=new Set(h(A).concat(["external_rag_search","skill_hub_execute"])),O=function(e){var t="string"==typeof e?e:null==e?void 0:e.name;return"string"==typeof t&&t.trim()?{name:t.trim(),autoCall:(null==e?void 0:e.autoCall)===!0}:null},x=function(e){var t=e&&(void 0===e?"undefined":e&&"u">typeof Symbol&&e.constructor===Symbol?"symbol":typeof e)=="object"?e:{},r=new Map,n=function(e){!e||r.has(e.name)||r.set(e.name,e)};if(Array.isArray(t.tools)){var a=!0,l=!1,o=void 0;try{for(var i,u=t.tools[Symbol.iterator]();!(a=(i=u.next()).done);a=!0){var s=i.value;n(O(s))}}catch(e){l=!0,o=e}finally{try{a||null==u.return||u.return()}finally{if(l)throw o}}}var c=[];if(Array.isArray(t.skills)){var m=!0,d=!1,y=void 0;try{for(var h,g=t.skills[Symbol.iterator]();!(m=(h=g.next()).done);m=!0){var b=h.value;if("string"==typeof b){var v=b.trim();if(!v)continue;k.has(v)||v.startsWith("delegate_")||v.startsWith("dispatch_subagents_")||v.startsWith("skill_hub_")||v.startsWith("browser_")||v.startsWith("drawio-")?n({name:v,autoCall:!1}):c.push(v);continue}n(O(b))}}catch(e){d=!0,y=e}finally{try{m||null==g.return||g.return()}finally{if(d)throw y}}}return p(f({},t),{skills:c,tools:Array.from(r.values())})},_=function(){var e=(0,u.R)(),t=y((0,n.useState)(!1),2),r=t[0],c=t[1],m=y((0,n.useState)(null),2),g=m[0],E=m[1],k=y(o.Form.useForm(),1)[0],O=(0,u.b)({url:"orchestratorConfig:list",params:{sort:["-createdAt"]}}),_=O.data,I=O.loading,T=O.refresh,C=(0,u.b)({url:"ai:listAllEnabledModels"}),U=C.data,j=C.loading,M=(0,u.b)({url:"agentHarnessProfiles:list",params:{filter:{enabled:!0},sort:["tag"],pageSize:100}}),L=M.data,P=M.loading,z=a().useMemo(function(){var e,t=null!=(e=null==U?void 0:U.data)?e:U;return Array.isArray(t)?t:Array.isArray(null==t?void 0:t.data)?t.data:[]},[U]),B=a().useMemo(function(){var e,t=null!=(e=null==L?void 0:L.data)?e:L;return Array.isArray(t)?t:Array.isArray(null==t?void 0:t.data)?t.data:[]},[L]),F=(0,l.j)(),D=F.employeeMap,N=F.toolNamesMap,R=F.refresh,W=a().useMemo(function(){var e=null==_?void 0:_.data;return Array.isArray(e)?e:[]},[_]),q=function(t,r){return d(function(){var n,a,l,i,u,s,c,m,d;return b(this,function(y){switch(y.label){case 0:return y.trys.push([0,6,,7]),[4,e.request({url:"aiEmployees:get",params:{filterByTk:t}})];case 1:if(!(l=null==(a=y.sent())||null==(n=a.data)?void 0:n.data))return o.message.error("Could not load AI employee."),[2];if(u=new Set((i=x(l.skillSettings)).tools.map(function(e){return e.name})),s=r.filter(function(e){return!u.has(e)}),c=JSON.stringify(i)!==JSON.stringify(l.skillSettings||{}),!(!s.length&&!c))return[3,3];return o.message.info("Tools already present."),[4,R()];case 2:return y.sent(),[2];case 3:return m=h(i.tools).concat(h(s.map(function(e){return{name:e,autoCall:!1}}))),[4,e.request({url:"aiEmployees:update",method:"put",params:{filterByTk:t},data:{skillSettings:p(f({},i),{tools:m})}})];case 4:return y.sent(),o.message.success(s.length?"Added ".concat(s.length," tool").concat(s.length>1?"s":""," to ").concat(t,"."):"Normalized tool bindings for ".concat(t,".")),[4,R()];case 5:return y.sent(),[3,7];case 6:return d=y.sent(),o.message.error("Auto-assign failed: ".concat((null==d?void 0:d.message)||"unknown error")),[3,7];case 7:return[2]}})})()},H=function(e,t){return d(function(){return b(this,function(r){switch(r.label){case 0:return[4,q(e,[t])];case 1:return r.sent(),[2]}})})()},V=a().useMemo(function(){var e=new Map,t=!0,r=!1,n=void 0;try{for(var a,l=W[Symbol.iterator]();!(t=(a=l.next()).done);t=!0){var o=a.value,i=e.get(o.subAgentUsername)||new Set;i.add(o.leaderUsername),e.set(o.subAgentUsername,i)}}catch(e){r=!0,n=e}finally{try{t||null==l.return||l.return()}finally{if(r)throw n}}return e},[W]),G=a().useMemo(function(){return Array.from(V.entries()).filter(function(e){return y(e,2)[1].size>1}).map(function(e){var t=y(e,2);return{sub:t[0],leaders:Array.from(t[1])}})},[V]),K=a().useMemo(function(){var e=new Map,t=!0,r=!1,n=void 0;try{for(var a,l=W[Symbol.iterator]();!(t=(a=l.next()).done);t=!0){var o=a.value,i=o.leaderUsername||"unknown",u=e.get(i);u||(u=[],e.set(i,u)),u.push(o)}}catch(e){r=!0,n=e}finally{try{t||null==l.return||l.return()}finally{if(r)throw n}}return Array.from(e.entries()).map(function(e){var t=y(e,2);return{leaderUsername:t[0],items:t[1]}})},[W]),$=function(e){E(e),e?k.setFieldsValue(e):(k.resetFields(),k.setFieldsValue({enabled:!0,maxDepth:1,timeout:12e4,recursionLimit:50,harnessTag:"default"})),c(!0)},J=function(){c(!1),E(null)},Z=[{title:"Leader (Orchestrator)",dataIndex:"leaderUsername",key:"leaderUsername",render:function(e){return a().createElement(o.Tag,{color:"blue"},D.get(e)||e)}},{title:"",key:"arrow",width:50,render:function(){return a().createElement(i.SwapRightOutlined,{style:{color:"#999",fontSize:18}})}},{title:"Sub-Agent",dataIndex:"subAgentUsername",key:"subAgentUsername",render:function(e){return a().createElement(o.Tag,{color:"green"},D.get(e)||e)}},{title:"Harness",dataIndex:"harnessTag",key:"harnessTag",width:120,render:function(e){return a().createElement(o.Tag,{color:"purple"},e||"default")}},{title:"Max Depth",dataIndex:"maxDepth",key:"maxDepth",width:100,render:function(e){return null!=e?e:1}},{title:"Timeout",dataIndex:"timeout",key:"timeout",width:100,render:function(e){return"".concat(((null!=e?e:12e4)/1e3).toFixed(0),"s")}},{title:"LLM Override",key:"llmOverride",width:140,render:function(e,t){if(t.llmService&&t.model){var r=z.find(function(e){return e.llmService===t.llmService}),n=r?r.llmServiceTitle:t.llmService;return a().createElement(o.Space,{direction:"vertical",size:0},a().createElement(v,{style:{fontSize:12}},n),a().createElement(v,{type:"secondary",style:{fontSize:12}},t.model))}return a().createElement(v,{type:"secondary",style:{fontSize:12}},"Inherited")}},{title:"Enabled",dataIndex:"enabled",key:"enabled",width:80,render:function(t,r){return a().createElement(o.Switch,{checked:t,size:"small",onChange:function(t){return d(function(){return b(this,function(n){switch(n.label){case 0:return[4,e.request({url:"orchestratorConfig:update",method:"put",params:{filterByTk:r.id},data:{enabled:t}})];case 1:return n.sent(),T(),[2]}})})()}})}},{title:"Tool",key:"tool",width:150,render:function(e,t){var r=w(t.leaderUsername,t.subAgentUsername),n=N.get(t.leaderUsername);return n?n.has(r)?a().createElement(o.Tag,{color:"success"},"Assigned"):a().createElement(o.Space,{size:4},a().createElement(o.Tag,{icon:a().createElement(i.WarningOutlined,null),color:"warning"},"Missing"),a().createElement(o.Button,{type:"link",size:"small",icon:a().createElement(i.ThunderboltOutlined,null),onClick:function(){return d(function(){return b(this,function(e){switch(e.label){case 0:return[4,H(t.leaderUsername,w(t.leaderUsername,t.subAgentUsername))];case 1:return e.sent(),[2]}})})()}},"Auto-add")):a().createElement(v,{type:"secondary",style:{fontSize:12}},"—")}},{title:"Actions",key:"actions",width:160,render:function(t,r){return a().createElement(o.Space,null,a().createElement(o.Button,{type:"link",size:"small",icon:a().createElement(i.EditOutlined,null),onClick:function(){return $(r)}},"Edit"),a().createElement(o.Popconfirm,{title:"Delete this rule?",onConfirm:function(){var t;return t=r.id,d(function(){var r;return b(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e.request({url:"orchestratorConfig:destroy",method:"delete",params:{filterByTk:t}})];case 1:return n.sent(),o.message.success("Rule deleted"),T(),[3,3];case 2:return r=n.sent(),o.message.error("Delete failed: ".concat(r.message)),[3,3];case 3:return[2]}})})()}},a().createElement(o.Button,{type:"link",size:"small",danger:!0,icon:a().createElement(i.DeleteOutlined,null)},"Delete")))}}],Q=o.Form.useWatch("leaderUsername",k),X=a().useMemo(function(){return W.reduce(function(e,t){var r=N.get(t.leaderUsername);if(!r)return e;var n=w(t.leaderUsername,t.subAgentUsername);return r.has(n)?e:e+1},0)},[W,N]),Y=a().useMemo(function(){return K.map(function(e){var t=N.get(e.leaderUsername);if(!t)return null;var r=S(e.leaderUsername);return t.has(r)?null:{leaderUsername:e.leaderUsername,toolName:r,count:e.items.length}}).filter(Boolean)},[K,N]),ee=a().useMemo(function(){return K.map(function(e){var t=N.get(e.leaderUsername);if(!t)return null;var r=A.filter(function(e){return!t.has(e)});return r.length?{leaderUsername:e.leaderUsername,missing:r}:null}).filter(Boolean)},[K,N]);return a().createElement("div",null,a().createElement(o.Alert,{type:"info",showIcon:!0,style:{marginBottom:16},message:"Orchestration Rules",description:a().createElement(v,{type:"secondary"},"Configure which AI Employees can act as Leaders (Orchestrators) and which ones they can delegate tasks to. Each rule creates a callable tool for the Leader to invoke the Sub-Agent.")}),X>0&&a().createElement(o.Alert,{type:"warning",showIcon:!0,style:{marginBottom:16},message:"".concat(X," rule").concat(X>1?"s":""," missing required tool assignment"),description:a().createElement(v,{type:"secondary"},"The Leader employee hasn't added the corresponding"," ",a().createElement(v,{code:!0},"delegate_<leader>_to_<sub>")," tool to its skillSettings.tools, so the LLM cannot actually call these sub-agents. Use the ",a().createElement("b",null,"Auto-add")," button in the Tool column to fix.")}),ee.length>0&&a().createElement(o.Alert,{type:"warning",showIcon:!0,style:{marginBottom:16},message:"".concat(ee.length," leader").concat(ee.length>1?"s":""," missing orchestrator controller tools"),description:a().createElement(o.Space,{direction:"vertical",size:6},a().createElement(v,{type:"secondary"},"Leaders need the orchestrator controller tools to create an approval-first plan and execute it after the user accepts the card."),ee.map(function(e){var t=e.leaderUsername,r=e.missing;return a().createElement(o.Space,{key:t,size:8,wrap:!0},a().createElement(o.Tag,{color:"blue"},D.get(t)||t),a().createElement(v,{type:"secondary"},r.length," missing"),a().createElement(o.Button,{type:"link",size:"small",icon:a().createElement(i.ThunderboltOutlined,null),onClick:function(){return q(t,r)}},"Auto-add"))}))}),Y.length>0&&a().createElement(o.Alert,{type:"warning",showIcon:!0,style:{marginBottom:16},message:"".concat(Y.length," leader").concat(Y.length>1?"s":""," missing dispatch tool assignment"),description:a().createElement(o.Space,{direction:"vertical",size:6},a().createElement(v,{type:"secondary"},"The fan-out tool lets a Leader dispatch multiple independent sub-tasks in one call. Add it to the Leader's tools to enable the new multi-agent flow."),Y.map(function(e){var t=e.leaderUsername,r=e.toolName,n=e.count;return a().createElement(o.Space,{key:t,size:8,wrap:!0},a().createElement(o.Tag,{color:"blue"},D.get(t)||t),a().createElement(v,{type:"secondary"},n," sub-agent",n>1?"s":""),a().createElement(v,{code:!0},r),a().createElement(o.Button,{type:"link",size:"small",icon:a().createElement(i.ThunderboltOutlined,null),onClick:function(){return d(function(){return b(this,function(e){switch(e.label){case 0:return[4,H(t,S(t))];case 1:return e.sent(),[2]}})})()}},"Auto-add"))}))}),G.length>0&&a().createElement(o.Alert,{type:"warning",showIcon:!0,style:{marginBottom:16},message:"Legacy delegate_to_<sub> alias is no longer registered for these sub-agents",description:a().createElement(o.Space,{direction:"vertical",size:2},G.map(function(e){var t=e.sub,r=e.leaders;return a().createElement(v,{key:t,type:"secondary"},a().createElement(o.Tag,{color:"green"},D.get(t)||t),"has multiple leaders (",r.map(function(e){return D.get(e)||e}).join(", "),"). The legacy alias is dropped to avoid ambiguity — leaders must use ",a().createElement(v,{code:!0},"delegate_<leader>_to_<sub>")," ","in their tools.")}))}),a().createElement(o.Card,{bordered:!1},a().createElement("div",{style:{marginBottom:16,display:"flex",justifyContent:"flex-end"}},a().createElement(o.Button,{type:"primary",icon:a().createElement(i.PlusOutlined,null),onClick:function(){return $()}},"New Rule")),K.length?a().createElement(o.Collapse,{bordered:!1,defaultActiveKey:K.map(function(e){return e.leaderUsername}),items:K.map(function(e){return{key:e.leaderUsername,label:a().createElement(o.Space,null,a().createElement(o.Tag,{color:"blue"},D.get(e.leaderUsername)||e.leaderUsername),a().createElement(v,{type:"secondary"},e.items.length," sub-agent",e.items.length>1?"s":""),Y.some(function(t){return t.leaderUsername===e.leaderUsername})&&a().createElement(o.Tag,{color:"warning"},"Dispatch missing")),children:a().createElement(o.Table,{rowKey:"id",loading:I,dataSource:e.items,columns:Z,pagination:!1,size:"middle",scroll:{x:"max-content"}})}})}):a().createElement(o.Table,{rowKey:"id",loading:I,dataSource:[],columns:Z,pagination:!1,size:"middle",scroll:{x:"max-content"},locale:{emptyText:a().createElement(o.Empty,{description:"No orchestration rules yet"})}})),a().createElement(o.Drawer,{title:g?"Edit Orchestration Rule":"New Orchestration Rule",width:480,onClose:J,open:r,styles:{body:{paddingBottom:80}},extra:a().createElement(o.Space,null,a().createElement(o.Button,{onClick:J},"Cancel"),a().createElement(o.Button,{onClick:function(){return k.submit()},type:"primary"},"Save"))},a().createElement(o.Form,{form:k,layout:"vertical",onFinish:function(t){return d(function(){var r,n,a,l,i,u;return b(this,function(s){switch(s.label){case 0:if(t.leaderUsername===t.subAgentUsername)return o.message.error("Leader and Sub-Agent cannot be the same employee."),[2];s.label=1;case 1:if(s.trys.push([1,6,,7]),!g)return[3,3];return[4,e.request({url:"orchestratorConfig:update",method:"put",params:{filterByTk:g.id},data:t})];case 2:return s.sent(),o.message.success("Rule updated"),[3,5];case 3:return[4,e.request({url:"orchestratorConfig:create",method:"post",data:t})];case 4:s.sent(),o.message.success("Rule created"),s.label=5;case 5:return J(),T(),[3,7];case 6:return u=(null==(r=s.sent())||null==(i=r.response)||null==(l=i.data)||null==(a=l.errors)||null==(n=a[0])?void 0:n.message)||r.message,o.message.error("Save failed: ".concat(u)),[3,7];case 7:return[2]}})})()}},a().createElement(o.Form.Item,{name:"leaderUsername",label:"Leader (Orchestrator)",rules:[{required:!0,message:"Please select a Leader"}],tooltip:"The AI Employee that will be able to delegate tasks to the Sub-Agent"},a().createElement(s,{placeholder:"Select Leader AI Employee..."})),a().createElement(o.Form.Item,{name:"subAgentUsername",label:"Sub-Agent",rules:[{required:!0,message:"Please select a Sub-Agent"}],tooltip:"The AI Employee that will receive delegated tasks"},a().createElement(s,{placeholder:"Select Sub-Agent AI Employee...",exclude:Q})),a().createElement(o.Form.Item,{name:"maxDepth",label:"Max Delegation Depth",tooltip:"How many layers of delegation are allowed (1 = leader calls sub-agent, sub-agent cannot delegate further)"},a().createElement(o.InputNumber,{min:1,max:3,style:{width:"100%"}})),a().createElement(o.Form.Item,{name:"timeout",label:"Timeout (ms)",tooltip:"Maximum time in milliseconds for the sub-agent to complete its task"},a().createElement(o.InputNumber,{min:1e4,max:6e5,step:1e4,style:{width:"100%"}})),a().createElement(o.Form.Item,{name:"recursionLimit",label:"Recursion Limit",tooltip:"Max LangGraph reasoning steps per delegation. Higher = more complex multi-step tasks; lower = stricter cap on token usage. Default 50."},a().createElement(o.InputNumber,{min:5,max:200,step:5,style:{width:"100%"}})),a().createElement(o.Form.Item,{name:"harnessTag",label:"Harness Profile",tooltip:"Profile tag used by plan approval, controller limits, and orchestration policy."},a().createElement(o.Select,{loading:P,options:[{label:"default",value:"default"}].concat(h(B.filter(function(e){return"default"!==e.tag}).map(function(e){return{label:e.title?"".concat(e.tag," - ").concat(e.title):e.tag,value:e.tag}})))})),a().createElement(o.Form.Item,{name:"llmService",label:"Override LLM Service",tooltip:"Optional: Provider name. Leave empty to inherit from Leader."},a().createElement(o.Select,{allowClear:!0,placeholder:"Inherit from Leader",loading:j,options:z.map(function(e){return{label:e.llmServiceTitle||e.llmService,value:e.llmService}}),onChange:function(){return k.setFieldValue("model",void 0)}})),a().createElement(o.Form.Item,{noStyle:!0,shouldUpdate:function(e,t){return e.llmService!==t.llmService}},function(){var e=k.getFieldValue("llmService"),t=z.find(function(t){return t.llmService===e}),r=Array.isArray(null==t?void 0:t.enabledModels)?t.enabledModels:[];return a().createElement(o.Form.Item,{name:"model",label:"Override Model",tooltip:"Optional: Model name. Leave empty to inherit from Leader.",rules:[{required:!!e,message:"Please select a model"}]},a().createElement(o.Select,{allowClear:!0,placeholder:e?"Select a model":"Inherit from Leader",disabled:!e,options:r.map(function(e){return{label:e.label,value:e.value}})}))}),a().createElement(o.Form.Item,{name:"enabled",label:"Enabled",valuePropName:"checked"},a().createElement(o.Switch,null)))))},I=function(){return a().createElement(l.l,null,a().createElement("div",{style:{padding:"0 24px 24px"}},a().createElement(_,null)))}},608:function(e,t,r){r.d(t,{R:function(){return u},b:function(){return s}});var n=r(485),a=r(155);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function o(e,t,r,n,a,l,o){try{var i=e[l](o),u=i.value}catch(e){r(e);return}i.done?t(u):Promise.resolve(u).then(n,a)}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(r=a.next()).done)&&(l.push(r.value),!t||l.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw n}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return l(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(){return(0,n.useApp)().apiClient}function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=u(),n=t.manual,l=void 0!==n&&n,s=t.refreshDeps,c=t.onSuccess,m=t.onError,d=i((0,a.useState)(void 0),2),f=d[0],p=d[1],y=i((0,a.useState)(!l),2),h=y[0],g=y[1],b=i((0,a.useState)(void 0),2),v=b[0],E=b[1],w=(0,a.useRef)(e);w.current=e;var S=(0,a.useRef)(c);S.current=c;var A=(0,a.useRef)(m);A.current=m;var k=(0,a.useCallback)(function(e){var t;return(t=function(){var t,n,a,l,o,i;return function(e,t){var r,n,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:u(0)}),i(o,"throw",{value:u(1)}),i(o,"return",{value:u(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function u(i){return function(u){var s=[i,u];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,s[0]&&(l=0)),l;)try{if(r=1,n&&(a=2&s[0]?n.return:s[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,s[1])).done)return a;switch(n=0,a&&(s=[2&s[0],a.value]),s[0]){case 0:case 1:a=s;break;case 4:return l.label++,{value:s[1],done:!1};case 5:l.label++,n=s[1],s=[0];continue;case 7:s=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===s[0]||2===s[0])){l=0;continue}if(3===s[0]&&(!a||s[1]>a[0]&&s[1]<a[3])){l.label=s[1];break}if(6===s[0]&&l.label<a[1]){l.label=a[1],a=s;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(s);break}a[2]&&l.ops.pop(),l.trys.pop();continue}s=t.call(e,l)}catch(e){s=[6,e],n=0}finally{r=a=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}}}(this,function(u){switch(u.label){case 0:t=w.current,g(!0),E(void 0),u.label=1;case 1:if(u.trys.push([1,6,7,8]),"function"!=typeof t)return[3,3];return[4,t()];case 2:return a=u.sent(),[3,5];case 3:return[4,r.request({url:t.url,method:t.method||"get",params:function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},t.params||{},e||{}),data:t.data})];case 4:a=null==(l=u.sent())?void 0:l.data,u.label=5;case 5:return p(a),null==(n=S.current)||n.call(S,a),[2,a];case 6:return E(o=u.sent()),null==(i=A.current)||i.call(A,o),[2,void 0];case 7:return g(!1),[7];case 8:return[2]}})},function(){var e=this,r=arguments;return new Promise(function(n,a){var l=t.apply(e,r);function i(e){o(l,n,a,i,u,"next",e)}function u(e){o(l,n,a,i,u,"throw",e)}i(void 0)})})()},[r]),O=(0,a.useCallback)(function(){k()},[k]);return(0,a.useEffect)(function(){l||k()},void 0===s?[]:s),{data:f,loading:h,error:v,refresh:O,run:k}}}}]);
@@ -1,10 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
-
10
- "use strict";(self.webpackChunkplugin_agent_orchestrator_client_v2=self.webpackChunkplugin_agent_orchestrator_client_v2||[]).push([["926"],{532:function(e,t,r){r.d(t,{j:function(){return d},l:function(){return s}});var n=r(155),a=r.n(n),l=r(608);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function i(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e){if(e){if("string"==typeof e)return o(e,void 0);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o(e,void 0)}}(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var u=(0,n.createContext)({employees:[],employeeMap:new Map,toolNamesMap:new Map,loading:!1,refresh:function(){}}),c=new Set(["orchestrator_plan_goal","orchestrator_execute_plan","orchestrator_status","orchestrator_cancel","external_rag_search","skill_hub_execute"]),s=function(e){var t=e.children,r=(0,l.b)({url:"aiEmployees:list",params:{pageSize:200}}),n=r.data,o=r.loading,s=r.refresh,d=a().useMemo(function(){var e=((null==n?void 0:n.data)||[]).map(function(e){var t,r,n,a,l=(r=Array.isArray(null==(t=e.skillSettings)?void 0:t.tools)?t.tools.map(function(e){return"string"==typeof e?e:null==e?void 0:e.name}).filter(function(e){return"string"==typeof e&&e.length>0}):[],n=Array.isArray(null==t?void 0:t.skills)?t.skills.map(function(e){if("string"==typeof e)return c.has(e)||e.startsWith("delegate_")||e.startsWith("dispatch_subagents_")||e.startsWith("skill_hub_")||e.startsWith("browser_")||e.startsWith("drawio-")?e:null;return null==e?void 0:e.name}).filter(function(e){return"string"==typeof e&&e.length>0}):[],Array.from(new Set(i(r).concat(i(n)))));return{username:e.username,nickname:e.nickname||e.username,about:null==(a=e.about)?void 0:a.substring(0,80),tools:l}}),t=new Map,r=new Map,a=!0,l=!1,u=void 0;try{for(var d,p=e[Symbol.iterator]();!(a=(d=p.next()).done);a=!0){var m=d.value;t.set(m.username,m.nickname),r.set(m.username,new Set(m.tools))}}catch(e){l=!0,u=e}finally{try{a||null==p.return||p.return()}finally{if(l)throw u}}return{employees:e,employeeMap:t,toolNamesMap:r,loading:o,refresh:s}},[n,o,s]);return a().createElement(u.Provider,{value:d},t)},d=function(){return(0,n.useContext)(u)}},925:function(e,t,r){r.r(t),r.d(t,{default:function(){return S}});var n=r(155),a=r.n(n),l=r(532),o=r(59),i=r(375),u=r(608);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function s(e,t,r,n,a,l,o){try{var i=e[l](o),u=i.value}catch(e){r(e);return}i.done?t(u):Promise.resolve(u).then(n,a)}function d(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var l=e.apply(t,r);function o(e){s(l,n,a,o,i,"next",e)}function i(e){s(l,n,a,o,i,"throw",e)}o(void 0)})}}function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(r=a.next()).done)&&(l.push(r.value),!t||l.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw n}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return c(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function m(e,t){var r,n,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:u(0)}),i(o,"throw",{value:u(1)}),i(o,"return",{value:u(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function u(i){return function(u){var c=[i,u];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,c[0]&&(l=0)),l;)try{if(r=1,n&&(a=2&c[0]?n.return:c[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,c[1])).done)return a;switch(n=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return l.label++,{value:c[1],done:!1};case 5:l.label++,n=c[1],c=[0];continue;case 7:c=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){l=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){l.label=c[1];break}if(6===c[0]&&l.label<a[1]){l.label=a[1],a=c;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(c);break}a[2]&&l.ops.pop(),l.trys.pop();continue}c=t.call(e,l)}catch(e){c=[6,e],n=0}finally{r=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var f=o.Typography.Paragraph,y=o.Typography.Text,h=new Set(["succeeded","failed","rejected","canceled"]);function v(e){var t=e.status;return a().createElement(o.Tag,{icon:function(e){switch(e){case"succeeded":case"success":return a().createElement(i.CheckCircleOutlined,null);case"failed":case"error":return a().createElement(i.CloseCircleOutlined,null);case"waiting_user":case"waiting_plan_approval":case"needs_replan":return a().createElement(i.PauseCircleOutlined,null);case"approved":case"running":case"planning":return a().createElement(i.ClockCircleOutlined,null);default:return}}(t),color:function(e){switch(e){case"succeeded":case"success":return"success";case"failed":case"error":return"error";case"waiting_user":case"waiting_plan_approval":case"needs_replan":return"warning";case"approved":case"running":case"planning":return"processing";default:return"default"}}(t)},t||"-")}function g(e){return e?new Date(e).toLocaleString():"-"}function b(e,t){if(!e)return"-";var r=new Date(e).getTime(),n=Math.max(0,(t?new Date(t).getTime():Date.now())-r);return n>=6e4?"".concat(Math.round(n/6e4),"m"):n>=1e3?"".concat((n/1e3).toFixed(1),"s"):"".concat(n,"ms")}function E(e){var t=e.value,r=e.rows,n=function(e){if(null==e||""===e)return"";if("string"==typeof e)return e;try{return JSON.stringify(e,null,2)}catch(t){return String(e)}}(t);return n?a().createElement(f,{style:{whiteSpace:"pre-wrap",wordBreak:"break-word",margin:0,fontSize:12},ellipsis:{rows:void 0===r?10:r,expandable:!0}},n):a().createElement(y,{type:"secondary"},"-")}var w=function(){var e,t=(0,u.R)(),r=(0,l.j)(),c=r.employees,s=r.employeeMap,w=p((0,n.useState)({}),2),S=w[0],k=w[1],A=p((0,n.useState)(1),2),x=A[0],I=A[1],C=p((0,n.useState)(20),2),O=C[0],_=C[1],j=p((0,n.useState)(null),2),T=j[0],D=j[1],z=p((0,n.useState)(null),2),P=z[0],R=z[1],M=p((0,n.useState)(!1),2),N=M[0],B=M[1],L=p((0,n.useState)(!1),2),F=L[0],U=L[1],W=(0,n.useMemo)(function(){var e={};return S.leader&&(e.leaderUsername=S.leader),S.status&&(e.status=S.status),{sort:["-createdAt"],page:x,pageSize:O,filter:e}},[S,x,O]),q=(0,u.b)({url:"agentLoops:list",params:W},{refreshDeps:[W]}),G=q.data,$=q.loading,K=q.refresh,H=(0,n.useMemo)(function(){var e=null==G?void 0:G.data;return Array.isArray(e)?e:[]},[G]),J=(0,n.useMemo)(function(){var e,t=null==G||null==(e=G.meta)?void 0:e.count;return"number"==typeof t?t:0},[G]),V=(0,n.useMemo)(function(){return c.map(function(e){return{label:e.nickname||e.username,value:e.username}})},[c]),Q=function(e,r){return d(function(){var n,a;return m(this,function(l){switch(l.label){case 0:D(r||T||{id:e}),B(!0),l.label=1;case 1:return l.trys.push([1,,3,4]),[4,t.request({url:"agentLoops:get",params:{filterByTk:e}})];case 2:return R((null==(a=l.sent())||null==(n=a.data)?void 0:n.data)||(null==a?void 0:a.data)||null),[3,4];case 3:return B(!1),[7];case 4:return[2]}})})()},X=function(e){k(function(t){return function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},t,e)}),I(1)},Y=function(e,r){return d(function(){var n,a;return m(this,function(l){switch(l.label){case 0:U(!0),l.label=1;case 1:return l.trys.push([1,4,5,6]),[4,t.request({url:"cancel"===e?"agentLoops:cancel":"agentLoops:resume",method:"POST",data:"cancel"===e?{runId:r}:{runId:r,stepId:null==P||null==(n=P.run)?void 0:n.currentStepId,approved:!0}})];case 2:return l.sent(),o.message.success("cancel"===e?"Run canceled":"Run resumed"),K(),[4,Q(r)];case 3:return l.sent(),[3,6];case 4:return a=l.sent(),o.message.error((null==a?void 0:a.message)||"Failed to ".concat(e," run")),[3,6];case 5:return U(!1),[7];case 6:return[2]}})})()},Z=[{title:"Time",dataIndex:"createdAt",key:"createdAt",width:170,render:g},{title:"Leader",dataIndex:"leaderUsername",key:"leaderUsername",width:160,render:function(e){return a().createElement(o.Tag,{color:"blue"},s.get(e)||e||"-")}},{title:"Goal",dataIndex:"goal",key:"goal",render:function(e){return a().createElement(y,{ellipsis:!0,style:{maxWidth:380}},e||"-")}},{title:"Status",dataIndex:"status",key:"status",width:130,render:function(e){return a().createElement(v,{status:e})}},{title:"Iterations",dataIndex:"iterationCount",key:"iterationCount",width:90,render:function(e){return null!=e?e:0}},{title:"Duration",key:"duration",width:100,render:function(e,t){return b(t.startedAt||t.createdAt,t.endedAt)}},{title:"",key:"actions",width:90,render:function(e,t){return a().createElement(o.Button,{type:"link",size:"small",icon:a().createElement(i.EyeOutlined,null),onClick:function(){return Q(t.id,t)}},"Detail")}}],ee=Array.isArray(null==P?void 0:P.steps)?P.steps:[],et=Array.isArray(null==P?void 0:P.events)?P.events:[],er=Array.isArray(null==P?void 0:P.spans)?P.spans:[],en=Array.isArray(null==P?void 0:P.skillExecutions)?P.skillExecutions:[],ea=(null==P?void 0:P.run)||T,el=!!(S.leader||S.status),eo=[{title:"#",dataIndex:"index",key:"index",width:56,render:function(e){return Number(null!=e?e:0)+1}},{title:"Status",dataIndex:"status",key:"status",width:130,render:function(e){return a().createElement(v,{status:e})}},{title:"Type",dataIndex:"type",key:"type",width:110,render:function(e){return a().createElement(o.Tag,null,e)}},{title:"Step",key:"step",render:function(e,t){return a().createElement(o.Space,{direction:"vertical",size:2,style:{width:"100%"}},a().createElement(y,{strong:!0},t.title||t.planKey),t.description&&a().createElement(y,{type:"secondary"},t.description),t.target&&a().createElement(y,{code:!0},t.target))}},{title:"Depends",dataIndex:"dependsOn",key:"dependsOn",width:130,render:function(e){return Array.isArray(e)&&e.length?e.map(function(e){return a().createElement(o.Tag,{key:e},e)}):"-"}},{title:"Attempts",key:"attempts",width:90,render:function(e,t){return"".concat(t.attempt||0,"/").concat(t.maxAttempts||0)}},{title:"",key:"actions",width:90,render:function(e,r){return"failed"===r.status&&Number(r.attempt||0)<Number(r.maxAttempts||0)?a().createElement(o.Button,{type:"link",size:"small",icon:a().createElement(i.RedoOutlined,null),loading:F,onClick:function(){var e;return e=r.id,d(function(){var r,n,a;return m(this,function(l){switch(l.label){case 0:n=(null==P||null==(r=P.run)?void 0:r.id)||(null==T?void 0:T.id),U(!0),l.label=1;case 1:return l.trys.push([1,5,6,7]),[4,t.request({url:"agentLoops:retryStep",method:"POST",data:{stepId:e}})];case 2:if(l.sent(),o.message.success("Step queued for retry"),K(),!n)return[3,4];return[4,Q(n)];case 3:l.sent(),l.label=4;case 4:return[3,7];case 5:return a=l.sent(),o.message.error((null==a?void 0:a.message)||"Failed to retry step"),[3,7];case 6:return U(!1),[7];case 7:return[2]}})})()}},"Retry"):null}}];return a().createElement("div",null,a().createElement(o.Alert,{type:"info",showIcon:!0,style:{marginBottom:16},message:"Agent Runs",description:a().createElement(y,{type:"secondary"},"Persistent loop runs created by the orchestrator tools. Each run stores the goal, plan, step state, approvals, and linked Skill Hub or sub-agent traces.")}),a().createElement(o.Card,{bordered:!1},a().createElement(o.Form,{layout:"inline",style:{marginBottom:16,rowGap:8,flexWrap:"wrap"}},a().createElement(o.Form.Item,{label:"Leader"},a().createElement(o.Select,{allowClear:!0,showSearch:!0,optionFilterProp:"label",placeholder:"Any leader",style:{minWidth:180},options:V,value:S.leader,onChange:function(e){return X({leader:e})}})),a().createElement(o.Form.Item,{label:"Status"},a().createElement(o.Select,{allowClear:!0,placeholder:"Any status",style:{minWidth:160},value:S.status,onChange:function(e){return X({status:e})},options:[{label:"Planning",value:"planning"},{label:"Waiting plan approval",value:"waiting_plan_approval"},{label:"Approved",value:"approved"},{label:"Running",value:"running"},{label:"Waiting user",value:"waiting_user"},{label:"Needs replan",value:"needs_replan"},{label:"Succeeded",value:"succeeded"},{label:"Failed",value:"failed"},{label:"Rejected",value:"rejected"},{label:"Canceled",value:"canceled"}]})),a().createElement(o.Form.Item,null,a().createElement(o.Space,null,a().createElement(o.Button,{onClick:function(){k({}),I(1)},disabled:!el},"Reset"),a().createElement(o.Button,{icon:a().createElement(i.ReloadOutlined,null),onClick:K},"Refresh")))),a().createElement(o.Table,{rowKey:"id",loading:$,dataSource:H,columns:Z,scroll:{x:"max-content"},pagination:{current:x,pageSize:O,total:J,showSizeChanger:!0,pageSizeOptions:[10,20,50,100],showTotal:function(e){return"".concat(e," run").concat(1===e?"":"s")},onChange:function(e,t){I(e),t&&t!==O&&_(t)}},locale:{emptyText:a().createElement(o.Empty,{description:el?"No runs match the current filters":"No agent runs yet"})}})),a().createElement(o.Drawer,{title:"Agent Run Detail",width:980,onClose:function(){D(null),R(null)},open:!!T},ea&&a().createElement(o.Spin,{spinning:N},a().createElement(o.Space,{direction:"vertical",size:16,style:{width:"100%"}},a().createElement(o.Space,{wrap:!0},a().createElement(o.Button,{icon:a().createElement(i.ReloadOutlined,null),onClick:function(){return Q(ea.id)},loading:N},"Refresh"),"waiting_user"===ea.status&&a().createElement(o.Button,{type:"primary",icon:a().createElement(i.PlayCircleOutlined,null),loading:F,onClick:function(){return Y("resume",ea.id)}},"Resume"),!h.has(ea.status)&&a().createElement(o.Popconfirm,{title:"Cancel this run?",onConfirm:function(){return Y("cancel",ea.id)}},a().createElement(o.Button,{danger:!0,icon:a().createElement(i.StopOutlined,null),loading:F},"Cancel run"))),a().createElement(o.Descriptions,{bordered:!0,size:"small",column:2},a().createElement(o.Descriptions.Item,{label:"Status"},a().createElement(v,{status:ea.status})),a().createElement(o.Descriptions.Item,{label:"Leader"},a().createElement(o.Tag,{color:"blue"},s.get(ea.leaderUsername)||ea.leaderUsername||"-")),a().createElement(o.Descriptions.Item,{label:"Root run"},a().createElement(y,{code:!0},ea.rootRunId||"-")),a().createElement(o.Descriptions.Item,{label:"Current step"},a().createElement(y,{code:!0},ea.currentStepId||"-")),a().createElement(o.Descriptions.Item,{label:"Iterations"},ea.iterationCount||0),a().createElement(o.Descriptions.Item,{label:"Approval"},ea.approvalStatus||"-"),a().createElement(o.Descriptions.Item,{label:"Plan version"},ea.planVersion||"-"),a().createElement(o.Descriptions.Item,{label:"Harness"},(null==(e=ea.metadata)?void 0:e.harnessTag)||"-"),a().createElement(o.Descriptions.Item,{label:"Duration"},b(ea.startedAt||ea.createdAt,ea.endedAt)),a().createElement(o.Descriptions.Item,{label:"Started"},g(ea.startedAt||ea.createdAt)),a().createElement(o.Descriptions.Item,{label:"Ended"},g(ea.endedAt))),a().createElement(o.Card,{title:"Goal",size:"small"},a().createElement(E,{value:ea.goal,rows:6})),a().createElement(o.Card,{title:"Plan",size:"small",extra:a().createElement(i.BranchesOutlined,null)},a().createElement(o.Table,{rowKey:"id",size:"small",dataSource:ee,columns:eo,pagination:!1,scroll:{x:"max-content"},expandable:{expandedRowRender:function(e){return a().createElement(o.Space,{direction:"vertical",size:12,style:{width:"100%"}},a().createElement(o.Card,{size:"small",title:"Input"},a().createElement(E,{value:e.input,rows:8})),a().createElement(o.Card,{size:"small",title:"Output"},a().createElement(E,{value:e.output,rows:8})),e.approval&&Object.keys(e.approval).length>0&&a().createElement(o.Card,{size:"small",title:"Approval"},a().createElement(E,{value:e.approval,rows:8})),e.error&&a().createElement(o.Card,{size:"small",title:"Error",style:{borderColor:"#ffa39e"}},a().createElement(E,{value:e.error,rows:8})))}},locale:{emptyText:a().createElement(o.Empty,{description:"No plan steps"})}})),a().createElement(o.Card,{title:"Event Timeline",size:"small"},et.length?a().createElement(o.Timeline,{items:et.map(function(e){return{key:e.id,color:function(e){switch(e){case"succeeded":case"success":return"green";case"failed":case"error":return"red";case"waiting_user":case"waiting_plan_approval":case"needs_replan":return"orange";case"approved":case"running":case"planning":return"blue";default:return"gray"}}(e.status),children:a().createElement(o.Space,{direction:"vertical",size:2,style:{width:"100%"}},a().createElement(o.Space,{wrap:!0},a().createElement(y,{strong:!0},e.title||e.type),a().createElement(v,{status:e.status}),e.stepId&&a().createElement(y,{type:"secondary"},"step #",e.stepId)),a().createElement(y,{type:"secondary"},g(e.createdAt)),e.content&&a().createElement(E,{value:e.content,rows:4}))}})}):a().createElement(o.Empty,{description:"No events captured"})),a().createElement(o.Collapse,{items:[{key:"spans",label:"Linked spans (".concat(er.length,")"),children:er.length?a().createElement(o.Table,{rowKey:"id",size:"small",dataSource:er,pagination:!1,scroll:{x:"max-content"},columns:[{title:"Type",dataIndex:"type",key:"type",width:110,render:function(e){return a().createElement(o.Tag,null,e)}},{title:"Status",dataIndex:"status",key:"status",width:110,render:function(e){return a().createElement(v,{status:e})}},{title:"Title",dataIndex:"title",key:"title"},{title:"Tool",dataIndex:"toolName",key:"toolName",render:function(e){return e?a().createElement(y,{code:!0},e):"-"}},{title:"Duration",dataIndex:"durationMs",key:"durationMs",width:100,render:function(e){return e?"".concat(e,"ms"):"-"}},{title:"Skill Exec",dataIndex:"skillExecutionId",key:"skillExecutionId",width:110,render:function(e){return e||"-"}}]}):a().createElement(o.Empty,{description:"No linked spans"})},{key:"skills",label:"Skill executions (".concat(en.length,")"),children:en.length?a().createElement(o.Space,{direction:"vertical",size:12,style:{width:"100%"}},en.map(function(e){var t=function(e,t){if(null==e||""===e)return t;if("string"!=typeof e)return e;var r=e.trim(),n=r.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i),a=n?n[1].trim():r;try{var l=JSON.parse(a);if("string"==typeof l){var o=l.trim(),i=o.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i),u=i?i[1].trim():o;try{l=JSON.parse(u)}catch(e){}}return l}catch(e){return t}}(e.outputFiles,[]);return a().createElement(o.Card,{key:e.id,size:"small",title:a().createElement(o.Space,{wrap:!0},a().createElement(y,null,"Skill execution #",e.id),a().createElement(v,{status:e.status}),e.agentLoopStepId&&a().createElement(y,{type:"secondary"},"step #",e.agentLoopStepId))},a().createElement(o.Space,{direction:"vertical",size:8,style:{width:"100%"}},a().createElement(o.Descriptions,{size:"small",column:2},a().createElement(o.Descriptions.Item,{label:"Duration"},e.durationMs?"".concat(e.durationMs,"ms"):"-"),a().createElement(o.Descriptions.Item,{label:"Created"},g(e.createdAt))),a().createElement(o.Collapse,{size:"small",items:[{key:"stdout",label:"stdout",children:a().createElement(E,{value:e.stdout,rows:10})},{key:"stderr",label:"stderr",children:a().createElement(E,{value:e.stderr,rows:10})},{key:"files",label:"files (".concat(t.length,")"),children:t.length?a().createElement(o.Space,{direction:"vertical"},t.map(function(t,r){var n,l;return n=(null==t?void 0:t.downloadUrl)?t.downloadUrl:(null==e?void 0:e.id)&&(null==t?void 0:t.name)?"/api/skillHub:download?execId=".concat(e.id,"&filename=").concat(encodeURIComponent(t.name)):"",l=t.name||t.path||"file-".concat(r+1),n?a().createElement("a",{key:r,href:n,target:"_blank",rel:"noreferrer"},l):a().createElement(y,{key:r},l)})):a().createElement(o.Empty,{description:"No files"})}]})))})):a().createElement(o.Empty,{description:"No linked skill executions"})}]}),(ea.finalAnswer||ea.summary)&&a().createElement(o.Card,{title:"Final Output",size:"small"},ea.summary&&a().createElement(f,{style:{whiteSpace:"pre-wrap",marginBottom:12}},a().createElement(y,{strong:!0},"Summary: "),ea.summary),a().createElement(E,{value:ea.finalAnswer,rows:16}))))))},S=function(){return a().createElement(l.l,null,a().createElement("div",{style:{padding:"0 24px 24px"}},a().createElement(w,null)))}},608:function(e,t,r){r.d(t,{R:function(){return u},b:function(){return c}});var n=r(485),a=r(155);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function o(e,t,r,n,a,l,o){try{var i=e[l](o),u=i.value}catch(e){r(e);return}i.done?t(u):Promise.resolve(u).then(n,a)}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(r=a.next()).done)&&(l.push(r.value),!t||l.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw n}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return l(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(){return(0,n.useApp)().apiClient}function c(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=u(),n=t.manual,l=void 0!==n&&n,c=t.refreshDeps,s=t.onSuccess,d=t.onError,p=i((0,a.useState)(void 0),2),m=p[0],f=p[1],y=i((0,a.useState)(!l),2),h=y[0],v=y[1],g=i((0,a.useState)(void 0),2),b=g[0],E=g[1],w=(0,a.useRef)(e);w.current=e;var S=(0,a.useRef)(s);S.current=s;var k=(0,a.useRef)(d);k.current=d;var A=(0,a.useCallback)(function(e){var t;return(t=function(){var t,n,a,l,o,i;return function(e,t){var r,n,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(o,"next",{value:u(0)}),i(o,"throw",{value:u(1)}),i(o,"return",{value:u(2)}),"function"==typeof Symbol&&i(o,Symbol.iterator,{value:function(){return this}}),o;function u(i){return function(u){var c=[i,u];if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,c[0]&&(l=0)),l;)try{if(r=1,n&&(a=2&c[0]?n.return:c[0]?n.throw||((a=n.return)&&a.call(n),0):n.next)&&!(a=a.call(n,c[1])).done)return a;switch(n=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return l.label++,{value:c[1],done:!1};case 5:l.label++,n=c[1],c=[0];continue;case 7:c=l.ops.pop(),l.trys.pop();continue;default:if(!(a=(a=l.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){l=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){l.label=c[1];break}if(6===c[0]&&l.label<a[1]){l.label=a[1],a=c;break}if(a&&l.label<a[2]){l.label=a[2],l.ops.push(c);break}a[2]&&l.ops.pop(),l.trys.pop();continue}c=t.call(e,l)}catch(e){c=[6,e],n=0}finally{r=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(u){switch(u.label){case 0:t=w.current,v(!0),E(void 0),u.label=1;case 1:if(u.trys.push([1,6,7,8]),"function"!=typeof t)return[3,3];return[4,t()];case 2:return a=u.sent(),[3,5];case 3:return[4,r.request({url:t.url,method:t.method||"get",params:function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}({},t.params||{},e||{}),data:t.data})];case 4:a=null==(l=u.sent())?void 0:l.data,u.label=5;case 5:return f(a),null==(n=S.current)||n.call(S,a),[2,a];case 6:return E(o=u.sent()),null==(i=k.current)||i.call(k,o),[2,void 0];case 7:return v(!1),[7];case 8:return[2]}})},function(){var e=this,r=arguments;return new Promise(function(n,a){var l=t.apply(e,r);function i(e){o(l,n,a,i,u,"next",e)}function u(e){o(l,n,a,i,u,"throw",e)}i(void 0)})})()},[r]),x=(0,a.useCallback)(function(){A()},[A]);return(0,a.useEffect)(function(){l||A()},void 0===c?[]:c),{data:m,loading:h,error:b,refresh:x,run:A}}}}]);
@@ -1,176 +0,0 @@
1
- import React from 'react';
2
- import { Alert, Button, Card, Input, List, Space, Tag, Typography, message } from 'antd';
3
- import { ToolsUIProperties } from '@nocobase/client';
4
- import { useApp } from '@nocobase/client-v2';
5
-
6
- const { Paragraph, Text } = Typography;
7
-
8
- const extractData = (response: any) => response?.data?.data ?? response?.data ?? response;
9
-
10
- const summarizeArgsPlan = (plan: any[]) =>
11
- (Array.isArray(plan) ? plan : []).map((step, index) => ({
12
- id: step.id || step.planKey || index,
13
- planKey: step.planKey || step.key || step.id || `step_${index + 1}`,
14
- title: step.title || `Step ${index + 1}`,
15
- description: step.description || '',
16
- type: step.type || 'tool',
17
- target: step.target || '',
18
- dependsOn: step.dependsOn || [],
19
- }));
20
-
21
- export const PlanApprovalCard: React.FC<ToolsUIProperties> = ({ toolCall, decisions }) => {
22
- const api = useApp().apiClient;
23
- const rawArgs = (toolCall.args as Record<string, any>) || {};
24
- const runId = rawArgs.runId;
25
- const [detail, setDetail] = React.useState<any>(null);
26
- const [loading, setLoading] = React.useState(false);
27
- const [submitting, setSubmitting] = React.useState(false);
28
- const [feedback, setFeedback] = React.useState('');
29
-
30
- const interrupted = toolCall.invokeStatus === 'init' || toolCall.invokeStatus === 'interrupted';
31
-
32
- React.useEffect(() => {
33
- if (!interrupted || !runId) return;
34
- let mounted = true;
35
- setLoading(true);
36
- api
37
- .request({
38
- url: 'agentLoops:get',
39
- params: { filterByTk: runId },
40
- })
41
- .then((response) => {
42
- if (mounted) setDetail(extractData(response));
43
- })
44
- .catch(() => {
45
- if (mounted) setDetail(null);
46
- })
47
- .finally(() => {
48
- if (mounted) setLoading(false);
49
- });
50
- return () => {
51
- mounted = false;
52
- };
53
- }, [api, interrupted, runId]);
54
-
55
- if (!interrupted) {
56
- return null;
57
- }
58
-
59
- const run = detail?.run || {};
60
- const steps = summarizeArgsPlan(detail?.steps || rawArgs.plan || []);
61
- const goal = run.goal || rawArgs.goal || '';
62
-
63
- const rejectPlan = async () => {
64
- if (!runId) {
65
- await decisions.reject('missing_run_id');
66
- return;
67
- }
68
- setSubmitting(true);
69
- try {
70
- await api.request({
71
- url: 'agentLoops:rejectPlan',
72
- method: 'post',
73
- data: { runId, reason: feedback || 'Plan rejected by user.' },
74
- });
75
- await decisions.reject(JSON.stringify({ reason: 'plan_rejected', runId, feedback }));
76
- } catch (error: any) {
77
- message.error(error?.message || 'Failed to reject plan');
78
- } finally {
79
- setSubmitting(false);
80
- }
81
- };
82
-
83
- const requestChanges = async () => {
84
- if (!feedback.trim()) {
85
- message.warning('Add feedback before requesting changes.');
86
- return;
87
- }
88
- setSubmitting(true);
89
- try {
90
- await api.request({
91
- url: 'agentLoops:requestPlanChanges',
92
- method: 'post',
93
- data: { runId, feedback },
94
- });
95
- await decisions.reject(JSON.stringify({ reason: 'changes_requested', runId, feedback }));
96
- } catch (error: any) {
97
- message.error(error?.message || 'Failed to request plan changes');
98
- } finally {
99
- setSubmitting(false);
100
- }
101
- };
102
-
103
- return (
104
- <Card size="small" style={{ marginTop: 8 }}>
105
- <Space direction="vertical" size={12} style={{ width: '100%' }}>
106
- <Alert
107
- type="info"
108
- showIcon
109
- message="Review orchestrator plan"
110
- description="Execution starts only after you approve this plan."
111
- />
112
-
113
- <Space size={8} wrap>
114
- {runId && <Tag color="blue">Run #{runId}</Tag>}
115
- <Tag color="purple">Plan v{run.planVersion || rawArgs.planVersion || 1}</Tag>
116
- <Tag color={run.approvalStatus === 'pending' ? 'gold' : 'default'}>
117
- {run.approvalStatus || 'pending'}
118
- </Tag>
119
- {run.metadata?.harnessTag && <Tag>{run.metadata.harnessTag}</Tag>}
120
- </Space>
121
-
122
- {goal && (
123
- <Paragraph style={{ marginBottom: 0 }}>
124
- <Text strong>Goal: </Text>
125
- {goal}
126
- </Paragraph>
127
- )}
128
-
129
- <List
130
- size="small"
131
- loading={loading}
132
- dataSource={steps}
133
- locale={{ emptyText: 'No plan steps found.' }}
134
- renderItem={(step: any, index) => (
135
- <List.Item>
136
- <Space direction="vertical" size={2} style={{ width: '100%' }}>
137
- <Space size={8} wrap>
138
- <Text strong>
139
- {index + 1}. {step.title}
140
- </Text>
141
- <Tag>{step.type}</Tag>
142
- {step.target && <Tag color="green">{step.target}</Tag>}
143
- </Space>
144
- {step.description && <Text type="secondary">{step.description}</Text>}
145
- {step.dependsOn?.length > 0 && (
146
- <Text type="secondary" style={{ fontSize: 12 }}>
147
- Depends on: {step.dependsOn.join(', ')}
148
- </Text>
149
- )}
150
- </Space>
151
- </List.Item>
152
- )}
153
- />
154
-
155
- <Input.TextArea
156
- rows={3}
157
- value={feedback}
158
- onChange={(event) => setFeedback(event.target.value)}
159
- placeholder="Optional rejection reason or requested changes"
160
- />
161
-
162
- <Space wrap>
163
- <Button type="primary" loading={submitting} onClick={() => decisions.approve()}>
164
- Accept & Run
165
- </Button>
166
- <Button loading={submitting} onClick={requestChanges}>
167
- Request changes
168
- </Button>
169
- <Button danger loading={submitting} onClick={rejectPlan}>
170
- Reject
171
- </Button>
172
- </Space>
173
- </Space>
174
- </Card>
175
- );
176
- };
@@ -1,17 +0,0 @@
1
- import { PlanApprovalCard } from './PlanApprovalCard';
2
-
3
- const registerToolCard = (toolsManager: any, name: string) => {
4
- try {
5
- toolsManager.registerTools(name, { ui: { card: PlanApprovalCard } });
6
- } catch (err: unknown) {
7
- if (!(err instanceof Error) || !err.message.includes('override existing keys')) {
8
- throw err;
9
- }
10
- }
11
- };
12
-
13
- export async function registerOrchestratorCards(app: any) {
14
- const toolsManager = app.aiManager?.toolsManager;
15
- if (!toolsManager) return;
16
- registerToolCard(toolsManager, 'orchestrator_execute_plan');
17
- }