aios-core 2.2.1 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/.aios-core/.session/current-session.json +14 -14
  2. package/.aios-core/cli/commands/migrate/validate.js +1 -1
  3. package/.aios-core/core/docs/session-update-pattern.md +17 -10
  4. package/.aios-core/core/elicitation/elicitation-engine.js +11 -6
  5. package/.aios-core/core/elicitation/session-manager.js +2 -1
  6. package/.aios-core/core/registry/registry-schema.json +166 -166
  7. package/.aios-core/core/registry/service-registry.json +6585 -6585
  8. package/.aios-core/core-config.yaml +12 -1
  9. package/.aios-core/data/agent-config-requirements.yaml +5 -5
  10. package/.aios-core/development/agents/devops.md +12 -0
  11. package/.aios-core/development/scripts/squad/README.md +112 -0
  12. package/.aios-core/development/scripts/squad/index.js +41 -0
  13. package/.aios-core/development/scripts/squad/squad-loader.js +359 -0
  14. package/.aios-core/development/scripts/squad/squad-validator.js +685 -0
  15. package/.aios-core/development/tasks/add-mcp.md +11 -5
  16. package/.aios-core/development/tasks/search-mcp.md +309 -0
  17. package/.aios-core/development/tasks/setup-mcp-docker.md +11 -8
  18. package/.aios-core/development/tasks/squad-creator-validate.md +151 -0
  19. package/.aios-core/docs/standards/AGENT-PERSONALIZATION-STANDARD-V1.md +3 -3
  20. package/.aios-core/index.d.ts +7 -7
  21. package/.aios-core/index.js +1 -1
  22. package/.aios-core/infrastructure/scripts/batch-creator.js +1 -1
  23. package/.aios-core/infrastructure/scripts/component-generator.js +1 -1
  24. package/.aios-core/infrastructure/templates/coderabbit.yaml.template +279 -279
  25. package/.aios-core/infrastructure/templates/github-workflows/ci.yml.template +169 -169
  26. package/.aios-core/infrastructure/templates/github-workflows/pr-automation.yml.template +330 -330
  27. package/.aios-core/infrastructure/templates/github-workflows/release.yml.template +196 -196
  28. package/.aios-core/infrastructure/templates/gitignore/gitignore-aios-base.tmpl +63 -63
  29. package/.aios-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -18
  30. package/.aios-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -85
  31. package/.aios-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -145
  32. package/.aios-core/infrastructure/tests/utilities-audit-results.json +500 -500
  33. package/.aios-core/infrastructure/tools/README.md +1 -1
  34. package/.aios-core/install-manifest.yaml +4 -1
  35. package/.aios-core/manifests/schema/manifest-schema.json +190 -190
  36. package/.aios-core/manifests/workers.csv +203 -203
  37. package/.aios-core/package.json +102 -102
  38. package/.aios-core/product/templates/activation-instructions-template.md +7 -7
  39. package/.aios-core/product/templates/adr.hbs +125 -125
  40. package/.aios-core/product/templates/component-react-tmpl.tsx +98 -98
  41. package/.aios-core/product/templates/dbdr.hbs +241 -241
  42. package/.aios-core/product/templates/engine/schemas/adr.schema.json +102 -102
  43. package/.aios-core/product/templates/engine/schemas/dbdr.schema.json +205 -205
  44. package/.aios-core/product/templates/engine/schemas/epic.schema.json +175 -175
  45. package/.aios-core/product/templates/engine/schemas/pmdr.schema.json +175 -175
  46. package/.aios-core/product/templates/engine/schemas/prd-v2.schema.json +300 -300
  47. package/.aios-core/product/templates/engine/schemas/prd.schema.json +152 -152
  48. package/.aios-core/product/templates/engine/schemas/story.schema.json +222 -222
  49. package/.aios-core/product/templates/engine/schemas/task.schema.json +154 -154
  50. package/.aios-core/product/templates/epic.hbs +212 -212
  51. package/.aios-core/product/templates/eslintrc-security.json +32 -32
  52. package/.aios-core/product/templates/github-actions-cd.yml +212 -212
  53. package/.aios-core/product/templates/github-actions-ci.yml +172 -172
  54. package/.aios-core/product/templates/pmdr.hbs +186 -186
  55. package/.aios-core/product/templates/prd-v2.0.hbs +216 -216
  56. package/.aios-core/product/templates/prd.hbs +201 -201
  57. package/.aios-core/product/templates/shock-report-tmpl.html +502 -502
  58. package/.aios-core/product/templates/story.hbs +263 -263
  59. package/.aios-core/product/templates/task.hbs +170 -170
  60. package/.aios-core/product/templates/tmpl-comment-on-examples.sql +158 -158
  61. package/.aios-core/product/templates/tmpl-migration-script.sql +91 -91
  62. package/.aios-core/product/templates/tmpl-rls-granular-policies.sql +104 -104
  63. package/.aios-core/product/templates/tmpl-rls-kiss-policy.sql +10 -10
  64. package/.aios-core/product/templates/tmpl-rls-roles.sql +135 -135
  65. package/.aios-core/product/templates/tmpl-rls-simple.sql +77 -77
  66. package/.aios-core/product/templates/tmpl-rls-tenant.sql +152 -152
  67. package/.aios-core/product/templates/tmpl-rollback-script.sql +77 -77
  68. package/.aios-core/product/templates/tmpl-seed-data.sql +140 -140
  69. package/.aios-core/product/templates/tmpl-smoke-test.sql +16 -16
  70. package/.aios-core/product/templates/tmpl-staging-copy-merge.sql +139 -139
  71. package/.aios-core/product/templates/tmpl-stored-proc.sql +140 -140
  72. package/.aios-core/product/templates/tmpl-trigger.sql +152 -152
  73. package/.aios-core/product/templates/tmpl-view-materialized.sql +133 -133
  74. package/.aios-core/product/templates/tmpl-view.sql +177 -177
  75. package/.aios-core/product/templates/token-exports-css-tmpl.css +240 -240
  76. package/.aios-core/quality/schemas/quality-metrics.schema.json +233 -233
  77. package/.aios-core/schemas/squad-schema.json +185 -0
  78. package/.aios-core/scripts/README.md +90 -322
  79. package/.aios-core/scripts/migrate-framework-docs.sh +300 -300
  80. package/.claude/rules/mcp-usage.md +116 -100
  81. package/LICENSE +48 -48
  82. package/README.md +3 -4
  83. package/bin/aios-init.js +11 -6
  84. package/bin/aios.js +2 -1
  85. package/package.json +2 -3
  86. package/packages/installer/package.json +39 -39
  87. package/packages/installer/tests/integration/environment-configuration.test.js +2 -2
  88. package/packages/installer/tests/unit/env-template.test.js +4 -3
  89. package/templates/squad/LICENSE +21 -21
  90. package/templates/squad/README.md +37 -37
  91. package/templates/squad/agents/example-agent.yaml +36 -36
  92. package/templates/squad/package.json +19 -19
  93. package/templates/squad/squad.yaml +25 -25
  94. package/templates/squad/tasks/example-task.yaml +46 -46
  95. package/templates/squad/templates/example-template.md +24 -24
  96. package/templates/squad/tests/example-agent.test.js +53 -53
  97. package/templates/squad/workflows/example-workflow.yaml +54 -54
  98. package/tools/diagnose-npx-issue.ps1 +96 -96
  99. package/tools/quick-diagnose.cmd +85 -85
  100. package/tools/quick-diagnose.ps1 +117 -117
  101. package/.aios-core/core/data/agent-config-requirements.yaml +0 -368
  102. package/.aios-core/core/data/aios-kb.md +0 -924
  103. package/.aios-core/core/data/workflow-patterns.yaml +0 -267
  104. package/.aios-core/product/templates/1mcp-config.yaml +0 -225
  105. package/.aios-core/scripts/context-detector.js +0 -226
  106. package/.aios-core/scripts/elicitation-engine.js +0 -385
  107. package/.aios-core/scripts/elicitation-session-manager.js +0 -300
  108. package/.claude/CLAUDE.md +0 -221
@@ -1,14 +1,14 @@
1
- {
2
- "sessionType": "existing",
3
- "previousAgent": "dev",
4
- "createdAt": 1234567890,
5
- "currentAgent": "qa",
6
- "lastUpdated": 1234567900,
7
- "lastCommands": [
8
- {
9
- "timestamp": 1234567890,
10
- "agent": "dev",
11
- "command": "review"
12
- }
13
- ]
14
- }
1
+ {
2
+ "sessionType": "existing",
3
+ "previousAgent": "dev",
4
+ "createdAt": 1234567890,
5
+ "currentAgent": "qa",
6
+ "lastUpdated": 1234567900,
7
+ "lastCommands": [
8
+ {
9
+ "timestamp": 1234567890,
10
+ "agent": "dev",
11
+ "command": "review"
12
+ }
13
+ ]
14
+ }
@@ -216,7 +216,7 @@ async function runTests(projectRoot, options = {}) {
216
216
  return new Promise((resolve) => {
217
217
  const result = {
218
218
  ran: false,
219
- passed: false,
219
+ success: false,
220
220
  total: 0,
221
221
  passed: 0,
222
222
  failed: 0,
@@ -60,10 +60,11 @@ async function switchAgent(fromAgent, toAgent) {
60
60
  The greeting system automatically uses session state:
61
61
 
62
62
  ```javascript
63
- const { generateGreeting } = require('./.aios-core/scripts/generate-greeting');
63
+ const GreetingBuilder = require('./.aios-core/development/scripts/greeting-builder');
64
+ const builder = new GreetingBuilder();
64
65
 
65
66
  // Session context is loaded automatically
66
- const greeting = await generateGreeting('dev');
67
+ const greeting = await builder.buildGreeting(agentDef, { conversationHistory: [] });
67
68
  console.log(greeting);
68
69
  ```
69
70
 
@@ -151,7 +152,9 @@ await updateSessionAfterCommand('dev', 'develop-yolo');
151
152
  // → sessionType: 'existing'
152
153
 
153
154
  // Next activation shows abbreviated greeting
154
- const greeting = await generateGreeting('dev');
155
+ const GreetingBuilder = require('./.aios-core/development/scripts/greeting-builder');
156
+ const builder = new GreetingBuilder();
157
+ const greeting = await builder.buildGreeting(devAgent, { conversationHistory });
155
158
  // Uses 'existing' session type
156
159
  ```
157
160
 
@@ -177,7 +180,9 @@ await updateSessionAfterCommand('dev', 'apply-qa-fixes');
177
180
  // → sessionType: 'workflow'
178
181
 
179
182
  // Next greeting shows workflow context
180
- const greeting = await generateGreeting('dev');
183
+ const GreetingBuilder = require('./.aios-core/development/scripts/greeting-builder');
184
+ const builder = new GreetingBuilder();
185
+ const greeting = await builder.buildGreeting(devAgent, { conversationHistory });
181
186
  // Includes: "Continuing from @qa review..."
182
187
  ```
183
188
 
@@ -218,14 +223,14 @@ node tests/integration/session-workflow.test.js
218
223
  # Clear session
219
224
  rm .aios-core/.session/current-session.json
220
225
 
221
- # Test new session
222
- node .aios-core/scripts/generate-greeting.js dev
226
+ # Test new session greeting
227
+ node .aios-core/development/scripts/test-greeting-system.js
223
228
 
224
229
  # Simulate command
225
230
  node -e "require('./.aios-core/scripts/command-execution-hook').updateSessionAfterCommand('dev', 'develop-yolo')"
226
231
 
227
- # Test existing session
228
- node .aios-core/scripts/generate-greeting.js dev
232
+ # Test existing session (command history exists)
233
+ node .aios-core/development/scripts/test-greeting-system.js
229
234
  ```
230
235
 
231
236
  ## Troubleshooting
@@ -273,8 +278,10 @@ Old approach (deprecated):
273
278
 
274
279
  New approach (Story 6.1.4):
275
280
  ```javascript
276
- // STEP 3: Execute unified greeting generator
277
- node .aios-core/scripts/generate-greeting.js [agent-id]
281
+ // STEP 3: Build intelligent greeting using GreetingBuilder
282
+ const GreetingBuilder = require('./.aios-core/development/scripts/greeting-builder');
283
+ const builder = new GreetingBuilder();
284
+ const greeting = await builder.buildGreeting(agentDef, { conversationHistory });
278
285
  ```
279
286
 
280
287
  ### Backward Compatibility
@@ -72,7 +72,7 @@ function isSafePattern(pattern) {
72
72
  /\(\.\*\)\+/, // (.*)+ - catastrophic backtracking
73
73
  /\(\.\+\)\*/, // (.+)* - catastrophic backtracking
74
74
  /\(\.\*\)\*/, // (.*)* - catastrophic backtracking
75
- /\(\?\!/, // Negative lookahead (can be slow)
75
+ /\(\?!/, // Negative lookahead (can be slow)
76
76
  ];
77
77
 
78
78
  for (const reDoSPattern of reDoSPatterns) {
@@ -271,16 +271,18 @@ class ElicitationEngine {
271
271
  const { type, source, transform } = smartDefaultConfig;
272
272
 
273
273
  switch (type) {
274
- case 'fromAnswer':
274
+ case 'fromAnswer': {
275
275
  const value = this.sessionData.answers[source];
276
276
  return transform ? transform(value) : value;
277
+ }
277
278
 
278
279
  case 'generated':
279
280
  return this.generateDefault(smartDefaultConfig);
280
281
 
281
- case 'conditional':
282
+ case 'conditional': {
282
283
  const condition = this.evaluateCondition(smartDefaultConfig.condition);
283
284
  return condition ? smartDefaultConfig.ifTrue : smartDefaultConfig.ifFalse;
285
+ }
284
286
 
285
287
  default:
286
288
  return undefined;
@@ -293,9 +295,10 @@ class ElicitationEngine {
293
295
  */
294
296
  generateDefault(config) {
295
297
  switch (config.generator) {
296
- case 'kebabCase':
298
+ case 'kebabCase': {
297
299
  const source = this.sessionData.answers[config.source] || '';
298
300
  return source.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
301
+ }
299
302
 
300
303
  case 'timestamp':
301
304
  return new Date().toISOString();
@@ -373,13 +376,14 @@ class ElicitationEngine {
373
376
 
374
377
  if (typeof validator === 'object') {
375
378
  switch (validator.type) {
376
- case 'regex':
379
+ case 'regex': {
377
380
  // Security: Validate pattern before RegExp construction to prevent ReDoS
378
381
  if (!isSafePattern(validator.pattern)) {
379
382
  return validator.message || 'Invalid or unsafe regex pattern';
380
383
  }
381
384
  const regex = new RegExp(validator.pattern);
382
385
  return regex.test(value) || validator.message;
386
+ }
383
387
 
384
388
  case 'length':
385
389
  if (validator.min && value.length < validator.min) {
@@ -390,9 +394,10 @@ class ElicitationEngine {
390
394
  }
391
395
  return true;
392
396
 
393
- case 'unique':
397
+ case 'unique': {
394
398
  const exists = await this.checkExists(validator.path, value);
395
399
  return !exists || `${value} already exists`;
400
+ }
396
401
 
397
402
  default:
398
403
  return true;
@@ -237,9 +237,10 @@ class ElicitationSessionManager {
237
237
  case 'json':
238
238
  return JSON.stringify(session, null, 2);
239
239
 
240
- case 'yaml':
240
+ case 'yaml': {
241
241
  const yaml = require('js-yaml');
242
242
  return yaml.dump(session);
243
+ }
243
244
 
244
245
  default:
245
246
  throw new Error(`Unsupported export format: ${format}`);
@@ -1,166 +1,166 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://aios.dev/schemas/service-registry.json",
4
- "title": "AIOS Service Registry Schema",
5
- "description": "Schema for the AIOS service registry containing workers, tasks, templates, and scripts",
6
- "type": "object",
7
- "required": ["version", "generated", "totalWorkers", "categories", "workers"],
8
- "properties": {
9
- "version": {
10
- "type": "string",
11
- "pattern": "^\\d+\\.\\d+\\.\\d+$",
12
- "description": "Semantic version of the registry"
13
- },
14
- "generated": {
15
- "type": "string",
16
- "format": "date-time",
17
- "description": "ISO 8601 timestamp when registry was generated"
18
- },
19
- "totalWorkers": {
20
- "type": "integer",
21
- "minimum": 97,
22
- "description": "Total count of workers in registry"
23
- },
24
- "categories": {
25
- "type": "object",
26
- "description": "Category summary with counts and subcategories",
27
- "additionalProperties": {
28
- "type": "object",
29
- "required": ["count"],
30
- "properties": {
31
- "count": {
32
- "type": "integer",
33
- "minimum": 0,
34
- "description": "Number of workers in this category"
35
- },
36
- "subcategories": {
37
- "type": "array",
38
- "items": { "type": "string" },
39
- "description": "List of subcategories within this category"
40
- },
41
- "description": {
42
- "type": "string",
43
- "description": "Human-readable description of the category"
44
- }
45
- }
46
- }
47
- },
48
- "workers": {
49
- "type": "array",
50
- "minItems": 97,
51
- "items": { "$ref": "#/definitions/worker" },
52
- "description": "Array of all registered workers"
53
- }
54
- },
55
- "definitions": {
56
- "worker": {
57
- "type": "object",
58
- "required": ["id", "name", "description", "category", "path", "taskFormat"],
59
- "properties": {
60
- "id": {
61
- "type": "string",
62
- "pattern": "^[a-z0-9-]+$",
63
- "description": "Unique kebab-case identifier"
64
- },
65
- "name": {
66
- "type": "string",
67
- "minLength": 1,
68
- "description": "Human-readable display name"
69
- },
70
- "description": {
71
- "type": "string",
72
- "minLength": 1,
73
- "description": "Brief description of worker purpose"
74
- },
75
- "category": {
76
- "type": "string",
77
- "enum": ["task", "template", "script", "checklist", "workflow", "data", "util"],
78
- "description": "Primary category of the worker"
79
- },
80
- "subcategory": {
81
- "type": "string",
82
- "description": "Subcategory for finer classification"
83
- },
84
- "inputs": {
85
- "type": "array",
86
- "items": { "type": "string" },
87
- "description": "List of input parameters with types"
88
- },
89
- "outputs": {
90
- "type": "array",
91
- "items": { "type": "string" },
92
- "description": "List of output parameters with types"
93
- },
94
- "tags": {
95
- "type": "array",
96
- "items": { "type": "string" },
97
- "description": "Searchable tags for discovery"
98
- },
99
- "path": {
100
- "type": "string",
101
- "pattern": "^\\.aios-core/",
102
- "description": "Relative path from project root"
103
- },
104
- "taskFormat": {
105
- "type": "string",
106
- "enum": ["TASK-FORMAT-V1", "TASK-FORMAT-V2", "SCRIPT", "TEMPLATE", "CHECKLIST", "WORKFLOW"],
107
- "description": "Format specification the worker follows"
108
- },
109
- "executorTypes": {
110
- "type": "array",
111
- "items": {
112
- "type": "string",
113
- "enum": ["Worker", "Agent", "Script", "Task", "CLI", "API"]
114
- },
115
- "description": "Types of executors that can run this worker"
116
- },
117
- "performance": {
118
- "type": "object",
119
- "properties": {
120
- "avgDuration": {
121
- "type": "string",
122
- "pattern": "^\\d+(\\.\\d+)?(ms|s|m)$",
123
- "description": "Average execution duration"
124
- },
125
- "cacheable": {
126
- "type": "boolean",
127
- "description": "Whether results can be cached"
128
- },
129
- "parallelizable": {
130
- "type": "boolean",
131
- "description": "Whether worker can run in parallel"
132
- }
133
- }
134
- },
135
- "dependencies": {
136
- "type": "array",
137
- "items": { "type": "string" },
138
- "description": "IDs of other workers this depends on"
139
- },
140
- "agents": {
141
- "type": "array",
142
- "items": { "type": "string" },
143
- "description": "Agent IDs that primarily use this worker"
144
- },
145
- "metadata": {
146
- "type": "object",
147
- "properties": {
148
- "source": {
149
- "type": "string",
150
- "description": "Module this worker originated from"
151
- },
152
- "addedVersion": {
153
- "type": "string",
154
- "description": "Version when worker was added"
155
- },
156
- "lastModified": {
157
- "type": "string",
158
- "format": "date-time",
159
- "description": "Last modification timestamp"
160
- }
161
- }
162
- }
163
- }
164
- }
165
- }
166
- }
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://aios.dev/schemas/service-registry.json",
4
+ "title": "AIOS Service Registry Schema",
5
+ "description": "Schema for the AIOS service registry containing workers, tasks, templates, and scripts",
6
+ "type": "object",
7
+ "required": ["version", "generated", "totalWorkers", "categories", "workers"],
8
+ "properties": {
9
+ "version": {
10
+ "type": "string",
11
+ "pattern": "^\\d+\\.\\d+\\.\\d+$",
12
+ "description": "Semantic version of the registry"
13
+ },
14
+ "generated": {
15
+ "type": "string",
16
+ "format": "date-time",
17
+ "description": "ISO 8601 timestamp when registry was generated"
18
+ },
19
+ "totalWorkers": {
20
+ "type": "integer",
21
+ "minimum": 97,
22
+ "description": "Total count of workers in registry"
23
+ },
24
+ "categories": {
25
+ "type": "object",
26
+ "description": "Category summary with counts and subcategories",
27
+ "additionalProperties": {
28
+ "type": "object",
29
+ "required": ["count"],
30
+ "properties": {
31
+ "count": {
32
+ "type": "integer",
33
+ "minimum": 0,
34
+ "description": "Number of workers in this category"
35
+ },
36
+ "subcategories": {
37
+ "type": "array",
38
+ "items": { "type": "string" },
39
+ "description": "List of subcategories within this category"
40
+ },
41
+ "description": {
42
+ "type": "string",
43
+ "description": "Human-readable description of the category"
44
+ }
45
+ }
46
+ }
47
+ },
48
+ "workers": {
49
+ "type": "array",
50
+ "minItems": 97,
51
+ "items": { "$ref": "#/definitions/worker" },
52
+ "description": "Array of all registered workers"
53
+ }
54
+ },
55
+ "definitions": {
56
+ "worker": {
57
+ "type": "object",
58
+ "required": ["id", "name", "description", "category", "path", "taskFormat"],
59
+ "properties": {
60
+ "id": {
61
+ "type": "string",
62
+ "pattern": "^[a-z0-9-]+$",
63
+ "description": "Unique kebab-case identifier"
64
+ },
65
+ "name": {
66
+ "type": "string",
67
+ "minLength": 1,
68
+ "description": "Human-readable display name"
69
+ },
70
+ "description": {
71
+ "type": "string",
72
+ "minLength": 1,
73
+ "description": "Brief description of worker purpose"
74
+ },
75
+ "category": {
76
+ "type": "string",
77
+ "enum": ["task", "template", "script", "checklist", "workflow", "data", "util"],
78
+ "description": "Primary category of the worker"
79
+ },
80
+ "subcategory": {
81
+ "type": "string",
82
+ "description": "Subcategory for finer classification"
83
+ },
84
+ "inputs": {
85
+ "type": "array",
86
+ "items": { "type": "string" },
87
+ "description": "List of input parameters with types"
88
+ },
89
+ "outputs": {
90
+ "type": "array",
91
+ "items": { "type": "string" },
92
+ "description": "List of output parameters with types"
93
+ },
94
+ "tags": {
95
+ "type": "array",
96
+ "items": { "type": "string" },
97
+ "description": "Searchable tags for discovery"
98
+ },
99
+ "path": {
100
+ "type": "string",
101
+ "pattern": "^\\.aios-core/",
102
+ "description": "Relative path from project root"
103
+ },
104
+ "taskFormat": {
105
+ "type": "string",
106
+ "enum": ["TASK-FORMAT-V1", "TASK-FORMAT-V2", "SCRIPT", "TEMPLATE", "CHECKLIST", "WORKFLOW"],
107
+ "description": "Format specification the worker follows"
108
+ },
109
+ "executorTypes": {
110
+ "type": "array",
111
+ "items": {
112
+ "type": "string",
113
+ "enum": ["Worker", "Agent", "Script", "Task", "CLI", "API"]
114
+ },
115
+ "description": "Types of executors that can run this worker"
116
+ },
117
+ "performance": {
118
+ "type": "object",
119
+ "properties": {
120
+ "avgDuration": {
121
+ "type": "string",
122
+ "pattern": "^\\d+(\\.\\d+)?(ms|s|m)$",
123
+ "description": "Average execution duration"
124
+ },
125
+ "cacheable": {
126
+ "type": "boolean",
127
+ "description": "Whether results can be cached"
128
+ },
129
+ "parallelizable": {
130
+ "type": "boolean",
131
+ "description": "Whether worker can run in parallel"
132
+ }
133
+ }
134
+ },
135
+ "dependencies": {
136
+ "type": "array",
137
+ "items": { "type": "string" },
138
+ "description": "IDs of other workers this depends on"
139
+ },
140
+ "agents": {
141
+ "type": "array",
142
+ "items": { "type": "string" },
143
+ "description": "Agent IDs that primarily use this worker"
144
+ },
145
+ "metadata": {
146
+ "type": "object",
147
+ "properties": {
148
+ "source": {
149
+ "type": "string",
150
+ "description": "Module this worker originated from"
151
+ },
152
+ "addedVersion": {
153
+ "type": "string",
154
+ "description": "Version when worker was added"
155
+ },
156
+ "lastModified": {
157
+ "type": "string",
158
+ "format": "date-time",
159
+ "description": "Last modification timestamp"
160
+ }
161
+ }
162
+ }
163
+ }
164
+ }
165
+ }
166
+ }