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
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { Button, Card, Drawer, Form, Input, Popconfirm, Space, Switch, Table, Tag, Typography, message } from 'antd';
3
3
  import { DeleteOutlined, EditOutlined, PlusOutlined } from '@ant-design/icons';
4
4
  import { useApiClient as useAPIClient, useRequest } from '../hooks/useApiRequest';
5
+ import { useT } from '../skill-hub/locale';
5
6
 
6
7
  const { Text } = Typography;
7
8
 
@@ -13,6 +14,7 @@ const parseSettings = (value: string) => {
13
14
 
14
15
  export const HarnessProfilesTab: React.FC = () => {
15
16
  const api = useAPIClient();
17
+ const t = useT();
16
18
  const [open, setOpen] = React.useState(false);
17
19
  const [editingRecord, setEditingRecord] = React.useState<any>(null);
18
20
  const [form] = Form.useForm();
@@ -46,11 +48,12 @@ export const HarnessProfilesTab: React.FC = () => {
46
48
  enabled: true,
47
49
  settingsText: JSON.stringify(
48
50
  {
49
- requirePlanApproval: true,
50
- allowSubAgents: true,
51
- allowToolCalls: true,
52
- maxParallelSubAgents: 3,
53
- maxControllerSteps: 100,
51
+ nativeObserverEnabled: true,
52
+ memoryInjectionEnabled: true,
53
+ memoryScopes: ['public', 'user', 'agent_user'],
54
+ knowledgeScopes: ['public', 'private'],
55
+ maxMemoryContextChars: 6000,
56
+ tracingRetentionDays: 30,
54
57
  },
55
58
  null,
56
59
  2,
@@ -70,7 +73,7 @@ export const HarnessProfilesTab: React.FC = () => {
70
73
  try {
71
74
  settings = parseSettings(values.settingsText);
72
75
  } catch (error: any) {
73
- message.error(`Settings JSON is invalid: ${error?.message || error}`);
76
+ message.error(t('Settings JSON is invalid: {{message}}', { message: error?.message || error }));
74
77
  return;
75
78
  }
76
79
 
@@ -90,20 +93,20 @@ export const HarnessProfilesTab: React.FC = () => {
90
93
  params: { filterByTk: editingRecord.id },
91
94
  data: payload,
92
95
  });
93
- message.success('Harness profile updated');
96
+ message.success(t('Policy profile updated'));
94
97
  } else {
95
98
  await api.request({
96
99
  url: 'agentHarnessProfiles:create',
97
100
  method: 'post',
98
101
  data: payload,
99
102
  });
100
- message.success('Harness profile created');
103
+ message.success(t('Policy profile created'));
101
104
  }
102
105
  closeDrawer();
103
106
  refresh();
104
107
  } catch (error: any) {
105
108
  const msg = error?.response?.data?.errors?.[0]?.message || error?.message || 'unknown error';
106
- message.error(`Save failed: ${msg}`);
109
+ message.error(t('Save failed: {{message}}', { message: msg }));
107
110
  }
108
111
  };
109
112
 
@@ -114,29 +117,29 @@ export const HarnessProfilesTab: React.FC = () => {
114
117
  method: 'delete',
115
118
  params: { filterByTk: id },
116
119
  });
117
- message.success('Harness profile deleted');
120
+ message.success(t('Policy profile deleted'));
118
121
  refresh();
119
122
  } catch (error: any) {
120
- message.error(`Delete failed: ${error?.message || 'unknown error'}`);
123
+ message.error(t('Delete failed: {{message}}', { message: error?.message || t('unknown error') }));
121
124
  }
122
125
  };
123
126
 
124
127
  const columns = [
125
128
  {
126
- title: 'Tag',
129
+ title: t('Tag'),
127
130
  dataIndex: 'tag',
128
131
  key: 'tag',
129
132
  width: 140,
130
133
  render: (tag: string) => <Tag color="blue">{tag}</Tag>,
131
134
  },
132
135
  {
133
- title: 'Title',
136
+ title: t('Title'),
134
137
  dataIndex: 'title',
135
138
  key: 'title',
136
139
  render: (title: string, record: any) => title || record.tag,
137
140
  },
138
141
  {
139
- title: 'Enabled',
142
+ title: t('Enabled'),
140
143
  dataIndex: 'enabled',
141
144
  key: 'enabled',
142
145
  width: 90,
@@ -157,7 +160,7 @@ export const HarnessProfilesTab: React.FC = () => {
157
160
  ),
158
161
  },
159
162
  {
160
- title: 'Settings',
163
+ title: t('Settings'),
161
164
  key: 'settings',
162
165
  render: (_: any, record: any) => (
163
166
  <Space size={4} wrap>
@@ -172,17 +175,17 @@ export const HarnessProfilesTab: React.FC = () => {
172
175
  ),
173
176
  },
174
177
  {
175
- title: 'Actions',
178
+ title: t('Actions'),
176
179
  key: 'actions',
177
180
  width: 150,
178
181
  render: (_: any, record: any) => (
179
182
  <Space>
180
183
  <Button type="link" size="small" icon={<EditOutlined />} onClick={() => openDrawer(record)}>
181
- Edit
184
+ {t('Edit')}
182
185
  </Button>
183
- <Popconfirm title="Delete this profile?" onConfirm={() => deleteProfile(record.id)}>
186
+ <Popconfirm title={t('Delete this profile?')} onConfirm={() => deleteProfile(record.id)}>
184
187
  <Button type="link" size="small" danger icon={<DeleteOutlined />}>
185
- Delete
188
+ {t('Delete')}
186
189
  </Button>
187
190
  </Popconfirm>
188
191
  </Space>
@@ -196,10 +199,10 @@ export const HarnessProfilesTab: React.FC = () => {
196
199
  <Space direction="vertical" size={16} style={{ width: '100%' }}>
197
200
  <div style={{ display: 'flex', justifyContent: 'space-between', gap: 16 }}>
198
201
  <Text type="secondary">
199
- Harness profiles are selected by orchestration rules through the harnessTag field.
202
+ {t('Policy profiles control native observer, tracing retention, and memory/knowledge scopes.')}
200
203
  </Text>
201
204
  <Button type="primary" icon={<PlusOutlined />} onClick={() => openDrawer()}>
202
- New Profile
205
+ {t('New Policy')}
203
206
  </Button>
204
207
  </div>
205
208
  <Table
@@ -214,37 +217,37 @@ export const HarnessProfilesTab: React.FC = () => {
214
217
  </Card>
215
218
 
216
219
  <Drawer
217
- title={editingRecord ? 'Edit Harness Profile' : 'New Harness Profile'}
220
+ title={editingRecord ? t('Edit Policy Profile') : t('New Policy Profile')}
218
221
  width={560}
219
222
  open={open}
220
223
  onClose={closeDrawer}
221
224
  extra={
222
225
  <Space>
223
- <Button onClick={closeDrawer}>Cancel</Button>
226
+ <Button onClick={closeDrawer}>{t('Cancel')}</Button>
224
227
  <Button type="primary" onClick={() => form.submit()}>
225
- Save
228
+ {t('Save')}
226
229
  </Button>
227
230
  </Space>
228
231
  }
229
232
  >
230
233
  <Form form={form} layout="vertical" onFinish={saveProfile}>
231
- <Form.Item name="tag" label="Tag" rules={[{ required: true, message: 'Tag is required' }]}>
232
- <Input placeholder="default" disabled={editingRecord?.tag === 'default'} />
234
+ <Form.Item name="tag" label={t('Tag')} rules={[{ required: true, message: t('Tag is required') }]}>
235
+ <Input placeholder={t('default')} disabled={editingRecord?.tag === 'default'} />
233
236
  </Form.Item>
234
- <Form.Item name="title" label="Title">
237
+ <Form.Item name="title" label={t('Title')}>
235
238
  <Input />
236
239
  </Form.Item>
237
- <Form.Item name="description" label="Description">
240
+ <Form.Item name="description" label={t('Description')}>
238
241
  <Input.TextArea rows={3} />
239
242
  </Form.Item>
240
243
  <Form.Item
241
244
  name="settingsText"
242
- label="Settings JSON"
243
- rules={[{ required: true, message: 'Settings JSON is required' }]}
245
+ label={t('Settings JSON')}
246
+ rules={[{ required: true, message: t('Settings JSON is required') }]}
244
247
  >
245
248
  <Input.TextArea rows={12} spellCheck={false} />
246
249
  </Form.Item>
247
- <Form.Item name="enabled" label="Enabled" valuePropName="checked">
250
+ <Form.Item name="enabled" label={t('Enabled')} valuePropName="checked">
248
251
  <Switch />
249
252
  </Form.Item>
250
253
  </Form>