plugin-agent-orchestrator 1.0.19 → 1.0.21

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 (100) hide show
  1. package/dist/client/hooks/useRunEventStream.d.ts +22 -0
  2. package/dist/client/index.d.ts +1 -0
  3. package/dist/client/index.js +1 -1
  4. package/dist/externalVersion.js +6 -6
  5. package/dist/server/collections/agent-execution-spans.js +24 -0
  6. package/dist/server/collections/agent-loop-runs.js +36 -0
  7. package/dist/server/collections/orchestrator-config.js +14 -0
  8. package/dist/server/migrations/20260601000000-add-token-fields.d.ts +7 -0
  9. package/dist/server/migrations/20260601000000-add-token-fields.js +101 -0
  10. package/dist/server/plugin.js +47 -0
  11. package/dist/server/resources/agent-loop.js +33 -25
  12. package/dist/server/resources/tracing.js +5 -8
  13. package/dist/server/services/AgentHarness.d.ts +2 -0
  14. package/dist/server/services/AgentHarness.js +56 -90
  15. package/dist/server/services/AgentLoopController.d.ts +33 -20
  16. package/dist/server/services/AgentLoopController.js +164 -125
  17. package/dist/server/services/AgentLoopRepository.js +16 -34
  18. package/dist/server/services/AgentLoopService.d.ts +28 -18
  19. package/dist/server/services/AgentLoopService.js +7 -1
  20. package/dist/server/services/AgentPlannerService.js +5 -25
  21. package/dist/server/services/AgentRegistryService.d.ts +8 -0
  22. package/dist/server/services/AgentRegistryService.js +34 -24
  23. package/dist/server/services/CircuitBreaker.d.ts +40 -0
  24. package/dist/server/services/CircuitBreaker.js +120 -0
  25. package/dist/server/services/ContextAggregator.d.ts +45 -0
  26. package/dist/server/services/ContextAggregator.js +201 -0
  27. package/dist/server/services/ExecutionSpanService.js +2 -5
  28. package/dist/server/services/RunEventBus.d.ts +9 -0
  29. package/dist/server/services/RunEventBus.js +73 -0
  30. package/dist/server/services/TokenTracker.d.ts +62 -0
  31. package/dist/server/services/TokenTracker.js +173 -0
  32. package/dist/server/skill-hub/plugin.js +6 -6
  33. package/dist/server/skill-hub/tasks/SkillExecutionTask.js +6 -6
  34. package/dist/server/tools/agent-loop.d.ts +8 -8
  35. package/dist/server/tools/agent-loop.js +30 -63
  36. package/dist/server/tools/delegate-task.js +14 -72
  37. package/dist/server/tools/orchestrator-plan.d.ts +6 -6
  38. package/dist/server/tools/orchestrator-plan.js +10 -47
  39. package/dist/server/types.d.ts +47 -0
  40. package/dist/server/types.js +24 -0
  41. package/dist/server/utils/ctx-utils.d.ts +30 -0
  42. package/dist/server/utils/ctx-utils.js +152 -0
  43. package/dist/server/utils/logging.d.ts +6 -0
  44. package/dist/server/utils/logging.js +86 -0
  45. package/package.json +44 -44
  46. package/src/client/AgentRunsTab.tsx +764 -764
  47. package/src/client/HarnessProfilesTab.tsx +247 -247
  48. package/src/client/OrchestratorSettings.tsx +106 -106
  49. package/src/client/RulesTab.tsx +716 -716
  50. package/src/client/hooks/useRunEventStream.ts +76 -0
  51. package/src/client/index.tsx +2 -1
  52. package/src/client/plugin.tsx +27 -27
  53. package/src/client/skill-hub/components/LoopSettings.tsx +331 -331
  54. package/src/client/skill-hub/index.tsx +51 -51
  55. package/src/client/skill-hub/tools/InteractionSchemasProvider.tsx +99 -99
  56. package/src/client/skill-hub/tools/SkillHubCard.tsx +109 -109
  57. package/src/client/skill-hub/tools/loopTemplates.ts +52 -52
  58. package/src/client/skill-hub/tools/registerSkillLoopCards.ts +58 -58
  59. package/src/client/tools/PlanApprovalCard.tsx +175 -175
  60. package/src/client/tools/registerOrchestratorCards.ts +7 -7
  61. package/src/server/__tests__/agent-loop-controller.test.ts +375 -0
  62. package/src/server/__tests__/circuit-breaker.test.ts +169 -0
  63. package/src/server/__tests__/context-aggregator.test.ts +222 -0
  64. package/src/server/__tests__/parallel-execution.test.ts +318 -0
  65. package/src/server/__tests__/smoke.test.ts +120 -0
  66. package/src/server/collections/agent-execution-spans.ts +24 -0
  67. package/src/server/collections/agent-harness-profiles.ts +59 -59
  68. package/src/server/collections/agent-loop-events.ts +71 -71
  69. package/src/server/collections/agent-loop-runs.ts +38 -1
  70. package/src/server/collections/agent-loop-steps.ts +144 -144
  71. package/src/server/collections/orchestrator-config.ts +14 -0
  72. package/src/server/collections/skill-executions.ts +106 -106
  73. package/src/server/collections/skill-loop-configs.ts +65 -65
  74. package/src/server/migrations/20260524000000-add-agent-loop-fields-to-skill-executions.ts +30 -30
  75. package/src/server/migrations/20260524001000-add-plan-approval-and-harness-profiles.ts +142 -142
  76. package/src/server/migrations/20260601000000-add-token-fields.ts +89 -0
  77. package/src/server/plugin.ts +53 -0
  78. package/src/server/resources/agent-loop.ts +21 -12
  79. package/src/server/resources/tracing.ts +3 -7
  80. package/src/server/services/AgentHarness.ts +78 -116
  81. package/src/server/services/AgentLoopController.ts +197 -122
  82. package/src/server/services/AgentLoopRepository.ts +9 -25
  83. package/src/server/services/AgentLoopService.ts +13 -1
  84. package/src/server/services/AgentPlanValidator.ts +73 -73
  85. package/src/server/services/AgentPlannerService.ts +2 -25
  86. package/src/server/services/AgentRegistryService.ts +40 -31
  87. package/src/server/services/CircuitBreaker.ts +116 -0
  88. package/src/server/services/ContextAggregator.ts +239 -0
  89. package/src/server/services/ExecutionSpanService.ts +2 -4
  90. package/src/server/services/RunEventBus.ts +45 -0
  91. package/src/server/services/TokenTracker.ts +209 -0
  92. package/src/server/skill-hub/plugin.ts +898 -897
  93. package/src/server/skill-hub/tasks/SkillExecutionTask.ts +460 -458
  94. package/src/server/tools/agent-loop.ts +18 -57
  95. package/src/server/tools/delegate-task.ts +11 -93
  96. package/src/server/tools/orchestrator-plan.ts +26 -50
  97. package/src/server/tools/skill-execute.ts +160 -160
  98. package/src/server/types.ts +55 -0
  99. package/src/server/utils/ctx-utils.ts +118 -0
  100. package/src/server/utils/logging.ts +63 -0
@@ -1,59 +1,59 @@
1
- import { defineCollection } from '@nocobase/database';
2
-
3
- export default defineCollection({
4
- name: 'agentHarnessProfiles',
5
- title: 'Agent Harness Profiles',
6
- fields: [
7
- {
8
- name: 'id',
9
- type: 'bigInt',
10
- autoIncrement: true,
11
- primaryKey: true,
12
- },
13
- {
14
- name: 'tag',
15
- type: 'string',
16
- length: 100,
17
- allowNull: false,
18
- unique: true,
19
- comment: 'Stable harness profile tag used by orchestration rules and agent loop runs.',
20
- },
21
- {
22
- name: 'title',
23
- type: 'string',
24
- length: 200,
25
- },
26
- {
27
- name: 'description',
28
- type: 'text',
29
- },
30
- {
31
- name: 'enabled',
32
- type: 'boolean',
33
- defaultValue: true,
34
- },
35
- {
36
- name: 'settings',
37
- type: 'json',
38
- defaultValue: {},
39
- comment: 'Harness limits and behavior settings such as max parallel sub-agents, approval mode, and tool policy.',
40
- },
41
- {
42
- name: 'createdAt',
43
- type: 'date',
44
- },
45
- {
46
- name: 'updatedAt',
47
- type: 'date',
48
- },
49
- ],
50
- indexes: [
51
- {
52
- unique: true,
53
- fields: ['tag'],
54
- },
55
- {
56
- fields: ['enabled'],
57
- },
58
- ],
59
- });
1
+ import { defineCollection } from '@nocobase/database';
2
+
3
+ export default defineCollection({
4
+ name: 'agentHarnessProfiles',
5
+ title: 'Agent Harness Profiles',
6
+ fields: [
7
+ {
8
+ name: 'id',
9
+ type: 'bigInt',
10
+ autoIncrement: true,
11
+ primaryKey: true,
12
+ },
13
+ {
14
+ name: 'tag',
15
+ type: 'string',
16
+ length: 100,
17
+ allowNull: false,
18
+ unique: true,
19
+ comment: 'Stable harness profile tag used by orchestration rules and agent loop runs.',
20
+ },
21
+ {
22
+ name: 'title',
23
+ type: 'string',
24
+ length: 200,
25
+ },
26
+ {
27
+ name: 'description',
28
+ type: 'text',
29
+ },
30
+ {
31
+ name: 'enabled',
32
+ type: 'boolean',
33
+ defaultValue: true,
34
+ },
35
+ {
36
+ name: 'settings',
37
+ type: 'json',
38
+ defaultValue: {},
39
+ comment: 'Harness limits and behavior settings such as max parallel sub-agents, approval mode, and tool policy.',
40
+ },
41
+ {
42
+ name: 'createdAt',
43
+ type: 'date',
44
+ },
45
+ {
46
+ name: 'updatedAt',
47
+ type: 'date',
48
+ },
49
+ ],
50
+ indexes: [
51
+ {
52
+ unique: true,
53
+ fields: ['tag'],
54
+ },
55
+ {
56
+ fields: ['enabled'],
57
+ },
58
+ ],
59
+ });
@@ -1,71 +1,71 @@
1
- import { defineCollection } from '@nocobase/database';
2
-
3
- export default defineCollection({
4
- name: 'agentLoopEvents',
5
- title: 'Agent Loop Events',
6
- fields: [
7
- {
8
- name: 'id',
9
- type: 'bigInt',
10
- autoIncrement: true,
11
- primaryKey: true,
12
- },
13
- {
14
- name: 'run',
15
- type: 'belongsTo',
16
- target: 'agentLoopRuns',
17
- foreignKey: 'runId',
18
- },
19
- {
20
- name: 'step',
21
- type: 'belongsTo',
22
- target: 'agentLoopSteps',
23
- foreignKey: 'stepId',
24
- },
25
- {
26
- name: 'type',
27
- type: 'string',
28
- length: 80,
29
- },
30
- {
31
- name: 'title',
32
- type: 'string',
33
- length: 500,
34
- },
35
- {
36
- name: 'content',
37
- type: 'text',
38
- },
39
- {
40
- name: 'status',
41
- type: 'string',
42
- length: 30,
43
- },
44
- {
45
- name: 'payload',
46
- type: 'json',
47
- defaultValue: {},
48
- },
49
- {
50
- name: 'user',
51
- type: 'belongsTo',
52
- target: 'users',
53
- foreignKey: 'userId',
54
- },
55
- {
56
- name: 'createdAt',
57
- type: 'date',
58
- },
59
- ],
60
- indexes: [
61
- {
62
- fields: ['runId'],
63
- },
64
- {
65
- fields: ['stepId'],
66
- },
67
- {
68
- fields: ['type'],
69
- },
70
- ],
71
- });
1
+ import { defineCollection } from '@nocobase/database';
2
+
3
+ export default defineCollection({
4
+ name: 'agentLoopEvents',
5
+ title: 'Agent Loop Events',
6
+ fields: [
7
+ {
8
+ name: 'id',
9
+ type: 'bigInt',
10
+ autoIncrement: true,
11
+ primaryKey: true,
12
+ },
13
+ {
14
+ name: 'run',
15
+ type: 'belongsTo',
16
+ target: 'agentLoopRuns',
17
+ foreignKey: 'runId',
18
+ },
19
+ {
20
+ name: 'step',
21
+ type: 'belongsTo',
22
+ target: 'agentLoopSteps',
23
+ foreignKey: 'stepId',
24
+ },
25
+ {
26
+ name: 'type',
27
+ type: 'string',
28
+ length: 80,
29
+ },
30
+ {
31
+ name: 'title',
32
+ type: 'string',
33
+ length: 500,
34
+ },
35
+ {
36
+ name: 'content',
37
+ type: 'text',
38
+ },
39
+ {
40
+ name: 'status',
41
+ type: 'string',
42
+ length: 30,
43
+ },
44
+ {
45
+ name: 'payload',
46
+ type: 'json',
47
+ defaultValue: {},
48
+ },
49
+ {
50
+ name: 'user',
51
+ type: 'belongsTo',
52
+ target: 'users',
53
+ foreignKey: 'userId',
54
+ },
55
+ {
56
+ name: 'createdAt',
57
+ type: 'date',
58
+ },
59
+ ],
60
+ indexes: [
61
+ {
62
+ fields: ['runId'],
63
+ },
64
+ {
65
+ fields: ['stepId'],
66
+ },
67
+ {
68
+ fields: ['type'],
69
+ },
70
+ ],
71
+ });
@@ -40,7 +40,8 @@ export default defineCollection({
40
40
  type: 'string',
41
41
  length: 30,
42
42
  defaultValue: 'planning',
43
- comment: 'planning, waiting_plan_approval, approved, running, waiting_user, needs_replan, succeeded, failed, rejected, canceled',
43
+ comment:
44
+ 'planning, waiting_plan_approval, approved, running, waiting_user, needs_replan, succeeded, failed, rejected, canceled',
44
45
  },
45
46
  {
46
47
  name: 'currentStepId',
@@ -113,6 +114,42 @@ export default defineCollection({
113
114
  name: 'summary',
114
115
  type: 'text',
115
116
  },
117
+ {
118
+ name: 'totalInputTokens',
119
+ type: 'integer',
120
+ defaultValue: 0,
121
+ comment: 'Accumulated input/prompt tokens across all spans in this run',
122
+ },
123
+ {
124
+ name: 'totalOutputTokens',
125
+ type: 'integer',
126
+ defaultValue: 0,
127
+ comment: 'Accumulated output/completion tokens across all spans in this run',
128
+ },
129
+ {
130
+ name: 'totalTokens',
131
+ type: 'integer',
132
+ defaultValue: 0,
133
+ comment: 'Total accumulated tokens (input + output) across all spans in this run',
134
+ },
135
+ {
136
+ name: 'totalCost',
137
+ type: 'float',
138
+ defaultValue: 0,
139
+ comment: 'Estimated total cost in USD across all spans in this run',
140
+ },
141
+ {
142
+ name: 'budgetMaxTokens',
143
+ type: 'integer',
144
+ allowNull: true,
145
+ comment: 'Maximum allowed tokens for this run (null = unlimited)',
146
+ },
147
+ {
148
+ name: 'budgetMaxCost',
149
+ type: 'float',
150
+ allowNull: true,
151
+ comment: 'Maximum allowed cost in USD for this run (null = unlimited)',
152
+ },
116
153
  {
117
154
  name: 'metadata',
118
155
  type: 'json',
@@ -1,144 +1,144 @@
1
- import { defineCollection } from '@nocobase/database';
2
-
3
- export default defineCollection({
4
- name: 'agentLoopSteps',
5
- title: 'Agent Loop Steps',
6
- fields: [
7
- {
8
- name: 'id',
9
- type: 'bigInt',
10
- autoIncrement: true,
11
- primaryKey: true,
12
- },
13
- {
14
- name: 'run',
15
- type: 'belongsTo',
16
- target: 'agentLoopRuns',
17
- foreignKey: 'runId',
18
- },
19
- {
20
- name: 'parentStep',
21
- type: 'belongsTo',
22
- target: 'agentLoopSteps',
23
- foreignKey: 'parentStepId',
24
- },
25
- {
26
- name: 'planKey',
27
- type: 'string',
28
- length: 100,
29
- },
30
- {
31
- name: 'index',
32
- type: 'integer',
33
- defaultValue: 0,
34
- },
35
- {
36
- name: 'title',
37
- type: 'string',
38
- length: 500,
39
- },
40
- {
41
- name: 'description',
42
- type: 'text',
43
- },
44
- {
45
- name: 'type',
46
- type: 'string',
47
- length: 30,
48
- comment: 'reasoning, skill, tool, sub_agent, verification',
49
- },
50
- {
51
- name: 'target',
52
- type: 'string',
53
- length: 200,
54
- },
55
- {
56
- name: 'input',
57
- type: 'json',
58
- defaultValue: {},
59
- },
60
- {
61
- name: 'output',
62
- type: 'json',
63
- defaultValue: {},
64
- },
65
- {
66
- name: 'status',
67
- type: 'string',
68
- length: 30,
69
- defaultValue: 'pending',
70
- comment: 'pending, running, waiting_user, succeeded, failed, skipped',
71
- },
72
- {
73
- name: 'attempt',
74
- type: 'integer',
75
- defaultValue: 0,
76
- },
77
- {
78
- name: 'maxAttempts',
79
- type: 'integer',
80
- defaultValue: 2,
81
- },
82
- {
83
- name: 'dependsOn',
84
- type: 'json',
85
- defaultValue: [],
86
- },
87
- {
88
- name: 'dependencyPolicy',
89
- type: 'string',
90
- length: 30,
91
- defaultValue: 'require_success',
92
- comment: 'require_success or allow_skipped',
93
- },
94
- {
95
- name: 'approval',
96
- type: 'json',
97
- defaultValue: {},
98
- },
99
- {
100
- name: 'error',
101
- type: 'text',
102
- },
103
- {
104
- name: 'agentExecutionSpanId',
105
- type: 'bigInt',
106
- },
107
- {
108
- name: 'skillExecutionId',
109
- type: 'bigInt',
110
- },
111
- {
112
- name: 'metadata',
113
- type: 'json',
114
- defaultValue: {},
115
- },
116
- {
117
- name: 'startedAt',
118
- type: 'date',
119
- },
120
- {
121
- name: 'endedAt',
122
- type: 'date',
123
- },
124
- {
125
- name: 'createdAt',
126
- type: 'date',
127
- },
128
- {
129
- name: 'updatedAt',
130
- type: 'date',
131
- },
132
- ],
133
- indexes: [
134
- {
135
- fields: ['runId'],
136
- },
137
- {
138
- fields: ['status'],
139
- },
140
- {
141
- fields: ['planKey'],
142
- },
143
- ],
144
- });
1
+ import { defineCollection } from '@nocobase/database';
2
+
3
+ export default defineCollection({
4
+ name: 'agentLoopSteps',
5
+ title: 'Agent Loop Steps',
6
+ fields: [
7
+ {
8
+ name: 'id',
9
+ type: 'bigInt',
10
+ autoIncrement: true,
11
+ primaryKey: true,
12
+ },
13
+ {
14
+ name: 'run',
15
+ type: 'belongsTo',
16
+ target: 'agentLoopRuns',
17
+ foreignKey: 'runId',
18
+ },
19
+ {
20
+ name: 'parentStep',
21
+ type: 'belongsTo',
22
+ target: 'agentLoopSteps',
23
+ foreignKey: 'parentStepId',
24
+ },
25
+ {
26
+ name: 'planKey',
27
+ type: 'string',
28
+ length: 100,
29
+ },
30
+ {
31
+ name: 'index',
32
+ type: 'integer',
33
+ defaultValue: 0,
34
+ },
35
+ {
36
+ name: 'title',
37
+ type: 'string',
38
+ length: 500,
39
+ },
40
+ {
41
+ name: 'description',
42
+ type: 'text',
43
+ },
44
+ {
45
+ name: 'type',
46
+ type: 'string',
47
+ length: 30,
48
+ comment: 'reasoning, skill, tool, sub_agent, verification',
49
+ },
50
+ {
51
+ name: 'target',
52
+ type: 'string',
53
+ length: 200,
54
+ },
55
+ {
56
+ name: 'input',
57
+ type: 'json',
58
+ defaultValue: {},
59
+ },
60
+ {
61
+ name: 'output',
62
+ type: 'json',
63
+ defaultValue: {},
64
+ },
65
+ {
66
+ name: 'status',
67
+ type: 'string',
68
+ length: 30,
69
+ defaultValue: 'pending',
70
+ comment: 'pending, running, waiting_user, succeeded, failed, skipped',
71
+ },
72
+ {
73
+ name: 'attempt',
74
+ type: 'integer',
75
+ defaultValue: 0,
76
+ },
77
+ {
78
+ name: 'maxAttempts',
79
+ type: 'integer',
80
+ defaultValue: 2,
81
+ },
82
+ {
83
+ name: 'dependsOn',
84
+ type: 'json',
85
+ defaultValue: [],
86
+ },
87
+ {
88
+ name: 'dependencyPolicy',
89
+ type: 'string',
90
+ length: 30,
91
+ defaultValue: 'require_success',
92
+ comment: 'require_success or allow_skipped',
93
+ },
94
+ {
95
+ name: 'approval',
96
+ type: 'json',
97
+ defaultValue: {},
98
+ },
99
+ {
100
+ name: 'error',
101
+ type: 'text',
102
+ },
103
+ {
104
+ name: 'agentExecutionSpanId',
105
+ type: 'bigInt',
106
+ },
107
+ {
108
+ name: 'skillExecutionId',
109
+ type: 'bigInt',
110
+ },
111
+ {
112
+ name: 'metadata',
113
+ type: 'json',
114
+ defaultValue: {},
115
+ },
116
+ {
117
+ name: 'startedAt',
118
+ type: 'date',
119
+ },
120
+ {
121
+ name: 'endedAt',
122
+ type: 'date',
123
+ },
124
+ {
125
+ name: 'createdAt',
126
+ type: 'date',
127
+ },
128
+ {
129
+ name: 'updatedAt',
130
+ type: 'date',
131
+ },
132
+ ],
133
+ indexes: [
134
+ {
135
+ fields: ['runId'],
136
+ },
137
+ {
138
+ fields: ['status'],
139
+ },
140
+ {
141
+ fields: ['planKey'],
142
+ },
143
+ ],
144
+ });
@@ -46,6 +46,20 @@ export default defineCollection({
46
46
  comment:
47
47
  'Max LangGraph reasoning steps (tool-call + LLM-step iterations) per delegation. Lower = safer; higher = more complex multi-step tasks. Default 50.',
48
48
  },
49
+ {
50
+ name: 'budgetMaxTokens',
51
+ type: 'integer',
52
+ defaultValue: 0,
53
+ allowNull: true,
54
+ comment: 'Maximum tokens allowed per sub-agent invocation (0 = unlimited)',
55
+ },
56
+ {
57
+ name: 'budgetMaxCost',
58
+ type: 'float',
59
+ defaultValue: 0,
60
+ allowNull: true,
61
+ comment: 'Maximum cost in USD allowed per sub-agent invocation (0 = unlimited)',
62
+ },
49
63
  {
50
64
  name: 'harnessTag',
51
65
  type: 'string',