aios-core 4.2.13 → 4.2.15
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.
- package/.aios-core/core/code-intel/helpers/dev-helper.js +206 -0
- package/.aios-core/core/registry/registry-schema.json +166 -166
- package/.aios-core/core/synapse/diagnostics/collectors/hook-collector.js +3 -3
- package/.aios-core/data/entity-registry.yaml +27 -0
- package/.aios-core/development/scripts/approval-workflow.js +642 -642
- package/.aios-core/development/scripts/backup-manager.js +606 -606
- package/.aios-core/development/scripts/branch-manager.js +389 -389
- package/.aios-core/development/scripts/code-quality-improver.js +1311 -1311
- package/.aios-core/development/scripts/commit-message-generator.js +849 -849
- package/.aios-core/development/scripts/conflict-resolver.js +674 -674
- package/.aios-core/development/scripts/dependency-analyzer.js +637 -637
- package/.aios-core/development/scripts/diff-generator.js +351 -351
- package/.aios-core/development/scripts/elicitation-engine.js +384 -384
- package/.aios-core/development/scripts/elicitation-session-manager.js +299 -299
- package/.aios-core/development/scripts/git-wrapper.js +461 -461
- package/.aios-core/development/scripts/manifest-preview.js +244 -244
- package/.aios-core/development/scripts/metrics-tracker.js +775 -775
- package/.aios-core/development/scripts/modification-validator.js +554 -554
- package/.aios-core/development/scripts/pattern-learner.js +1224 -1224
- package/.aios-core/development/scripts/performance-analyzer.js +757 -757
- package/.aios-core/development/scripts/refactoring-suggester.js +1138 -1138
- package/.aios-core/development/scripts/rollback-handler.js +530 -530
- package/.aios-core/development/scripts/security-checker.js +358 -358
- package/.aios-core/development/scripts/template-engine.js +239 -239
- package/.aios-core/development/scripts/template-validator.js +278 -278
- package/.aios-core/development/scripts/test-generator.js +843 -843
- package/.aios-core/development/scripts/transaction-manager.js +589 -589
- package/.aios-core/development/scripts/usage-tracker.js +673 -673
- package/.aios-core/development/scripts/validate-filenames.js +226 -226
- package/.aios-core/development/scripts/version-tracker.js +526 -526
- package/.aios-core/development/scripts/yaml-validator.js +396 -396
- package/.aios-core/development/tasks/build-autonomous.md +10 -4
- package/.aios-core/development/tasks/create-service.md +23 -0
- package/.aios-core/development/tasks/dev-develop-story.md +12 -6
- package/.aios-core/development/tasks/dev-suggest-refactoring.md +7 -1
- package/.aios-core/development/tasks/publish-npm.md +3 -3
- package/.aios-core/hooks/unified/README.md +1 -1
- package/.aios-core/install-manifest.yaml +65 -61
- package/.aios-core/manifests/schema/manifest-schema.json +190 -190
- package/.aios-core/product/templates/component-react-tmpl.tsx +98 -98
- package/.aios-core/product/templates/engine/schemas/adr.schema.json +102 -102
- package/.aios-core/product/templates/engine/schemas/dbdr.schema.json +205 -205
- package/.aios-core/product/templates/engine/schemas/epic.schema.json +175 -175
- package/.aios-core/product/templates/engine/schemas/pmdr.schema.json +175 -175
- package/.aios-core/product/templates/engine/schemas/prd-v2.schema.json +300 -300
- package/.aios-core/product/templates/engine/schemas/prd.schema.json +152 -152
- package/.aios-core/product/templates/engine/schemas/story.schema.json +222 -222
- package/.aios-core/product/templates/engine/schemas/task.schema.json +154 -154
- package/.aios-core/product/templates/eslintrc-security.json +32 -32
- package/.aios-core/product/templates/github-actions-cd.yml +212 -212
- package/.aios-core/product/templates/github-actions-ci.yml +172 -172
- package/.aios-core/product/templates/shock-report-tmpl.html +502 -502
- package/.aios-core/product/templates/token-exports-css-tmpl.css +240 -240
- package/.aios-core/quality/schemas/quality-metrics.schema.json +233 -233
- package/.aios-core/scripts/migrate-framework-docs.sh +300 -300
- package/README.en.md +747 -0
- package/README.md +4 -2
- package/bin/aios.js +7 -4
- package/package.json +1 -1
- package/packages/aios-pro-cli/src/recover.js +1 -1
- package/packages/installer/src/wizard/ide-config-generator.js +6 -6
- package/packages/installer/src/wizard/pro-setup.js +3 -3
- package/pro/license/degradation.js +220 -220
- package/pro/license/errors.js +450 -450
- package/pro/license/feature-gate.js +354 -354
- package/pro/license/index.js +181 -181
- package/pro/license/license-cache.js +523 -523
- package/pro/license/license-crypto.js +303 -303
- package/scripts/package-synapse.js +5 -5
- package/scripts/validate-package-completeness.js +3 -3
- package/.aios-core/.session/current-session.json +0 -14
- package/.aios-core/data/registry-update-log.jsonl +0 -191
- package/.aios-core/docs/SHARD-TRANSLATION-GUIDE.md +0 -335
- package/.aios-core/docs/component-creation-guide.md +0 -458
- package/.aios-core/docs/session-update-pattern.md +0 -307
- package/.aios-core/docs/standards/AIOS-FRAMEWORK-MASTER.md +0 -1963
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-SUMMARY.md +0 -1190
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1.md +0 -439
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO.md +0 -5398
- package/.aios-core/docs/standards/V3-ARCHITECTURAL-DECISIONS.md +0 -523
- package/.aios-core/docs/template-syntax.md +0 -267
- package/.aios-core/docs/troubleshooting-guide.md +0 -625
- package/.aios-core/infrastructure/tests/utilities-audit-results.json +0 -501
- package/.aios-core/manifests/agents.csv +0 -29
- package/.aios-core/manifests/tasks.csv +0 -198
- package/.aios-core/manifests/workers.csv +0 -204
- package/.claude/rules/agent-authority.md +0 -105
- package/.claude/rules/coderabbit-integration.md +0 -93
- package/.claude/rules/ids-principles.md +0 -112
- package/.claude/rules/story-lifecycle.md +0 -139
- package/.claude/rules/workflow-execution.md +0 -150
- package/scripts/glue/README.md +0 -355
- package/scripts/glue/compose-agent-prompt.cjs +0 -362
- /package/.claude/hooks/{precompact-session-digest.js → precompact-session-digest.cjs} +0 -0
- /package/.claude/hooks/{synapse-engine.js → synapse-engine.cjs} +0 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { getEnricher, getClient, isCodeIntelAvailable } = require('../index');
|
|
4
|
+
|
|
5
|
+
// Risk level thresholds based on blast radius (reference count)
|
|
6
|
+
const RISK_THRESHOLDS = {
|
|
7
|
+
LOW_MAX: 4, // 0-4 refs = LOW
|
|
8
|
+
MEDIUM_MAX: 15, // 5-15 refs = MEDIUM
|
|
9
|
+
// >15 refs = HIGH
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
// Minimum references to suggest REUSE (>threshold = REUSE, <=threshold = ADAPT)
|
|
13
|
+
const REUSE_MIN_REFS = 2;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* DevHelper — Code intelligence helper for @dev agent tasks.
|
|
17
|
+
*
|
|
18
|
+
* All functions return null gracefully when no provider is available.
|
|
19
|
+
* Never throws — safe to call unconditionally in task workflows.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Check for duplicates and similar code before writing a new file or function.
|
|
24
|
+
* Used by IDS Gate G4 in dev-develop-story and build-autonomous tasks.
|
|
25
|
+
*
|
|
26
|
+
* @param {string} fileName - Name of the file/function to be created
|
|
27
|
+
* @param {string} description - Description of what it does
|
|
28
|
+
* @returns {Promise<{duplicates: Object, references: Array, suggestion: string}|null>}
|
|
29
|
+
*/
|
|
30
|
+
async function checkBeforeWriting(fileName, description) {
|
|
31
|
+
if (!isCodeIntelAvailable()) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
const enricher = getEnricher();
|
|
37
|
+
const dupes = await enricher.detectDuplicates(description, { path: '.' });
|
|
38
|
+
|
|
39
|
+
// Also search for the fileName as a symbol reference
|
|
40
|
+
const client = getClient();
|
|
41
|
+
const nameRefs = await client.findReferences(fileName);
|
|
42
|
+
|
|
43
|
+
const hasMatches = (dupes && dupes.matches && dupes.matches.length > 0) ||
|
|
44
|
+
(nameRefs && nameRefs.length > 0);
|
|
45
|
+
|
|
46
|
+
if (!hasMatches) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
duplicates: dupes,
|
|
52
|
+
references: nameRefs || [],
|
|
53
|
+
suggestion: _formatSuggestion(dupes, nameRefs),
|
|
54
|
+
};
|
|
55
|
+
} catch {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Suggest reuse of an existing symbol instead of creating a new one.
|
|
62
|
+
* Searches for definitions and references to determine REUSE vs ADAPT.
|
|
63
|
+
*
|
|
64
|
+
* @param {string} symbol - Symbol name to search for
|
|
65
|
+
* @returns {Promise<{file: string, line: number, references: number, suggestion: string}|null>}
|
|
66
|
+
*/
|
|
67
|
+
async function suggestReuse(symbol) {
|
|
68
|
+
if (!isCodeIntelAvailable()) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
try {
|
|
73
|
+
const client = getClient();
|
|
74
|
+
const [definition, refs] = await Promise.all([
|
|
75
|
+
client.findDefinition(symbol),
|
|
76
|
+
client.findReferences(symbol),
|
|
77
|
+
]);
|
|
78
|
+
|
|
79
|
+
if (!definition && (!refs || refs.length === 0)) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const refCount = refs ? refs.length : 0;
|
|
84
|
+
// REUSE if widely used, ADAPT if exists but lightly used
|
|
85
|
+
const suggestion = refCount > REUSE_MIN_REFS ? 'REUSE' : 'ADAPT';
|
|
86
|
+
|
|
87
|
+
return {
|
|
88
|
+
file: definition ? definition.file : (refs[0] ? refs[0].file : null),
|
|
89
|
+
line: definition ? definition.line : (refs[0] ? refs[0].line : null),
|
|
90
|
+
references: refCount,
|
|
91
|
+
suggestion,
|
|
92
|
+
};
|
|
93
|
+
} catch {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Get naming conventions and patterns for a given path.
|
|
100
|
+
* Used to ensure new code follows existing project conventions.
|
|
101
|
+
*
|
|
102
|
+
* @param {string} targetPath - Path to analyze conventions for
|
|
103
|
+
* @returns {Promise<{patterns: Array, stats: Object}|null>}
|
|
104
|
+
*/
|
|
105
|
+
async function getConventionsForPath(targetPath) {
|
|
106
|
+
if (!isCodeIntelAvailable()) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
try {
|
|
111
|
+
const enricher = getEnricher();
|
|
112
|
+
return await enricher.getConventions(targetPath);
|
|
113
|
+
} catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Assess refactoring impact with blast radius and risk level.
|
|
120
|
+
* Used by dev-suggest-refactoring to show impact before changes.
|
|
121
|
+
*
|
|
122
|
+
* @param {string[]} files - Files to assess impact for
|
|
123
|
+
* @returns {Promise<{blastRadius: number, riskLevel: string, references: Array, complexity: Object}|null>}
|
|
124
|
+
*/
|
|
125
|
+
async function assessRefactoringImpact(files) {
|
|
126
|
+
if (!isCodeIntelAvailable()) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
try {
|
|
131
|
+
const enricher = getEnricher();
|
|
132
|
+
const impact = await enricher.assessImpact(files);
|
|
133
|
+
|
|
134
|
+
if (!impact) {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return {
|
|
139
|
+
blastRadius: impact.blastRadius,
|
|
140
|
+
riskLevel: _calculateRiskLevel(impact.blastRadius),
|
|
141
|
+
references: impact.references,
|
|
142
|
+
complexity: impact.complexity,
|
|
143
|
+
};
|
|
144
|
+
} catch {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Format a Code Intelligence Suggestion message from duplicate detection results.
|
|
151
|
+
* @param {Object|null} dupes - Result from detectDuplicates
|
|
152
|
+
* @param {Array|null} nameRefs - Result from findReferences
|
|
153
|
+
* @returns {string} Formatted suggestion message
|
|
154
|
+
* @private
|
|
155
|
+
*/
|
|
156
|
+
function _formatSuggestion(dupes, nameRefs) {
|
|
157
|
+
const parts = [];
|
|
158
|
+
|
|
159
|
+
if (dupes && dupes.matches && dupes.matches.length > 0) {
|
|
160
|
+
parts.push(`Found ${dupes.matches.length} similar match(es) in codebase`);
|
|
161
|
+
const firstMatch = dupes.matches[0];
|
|
162
|
+
if (firstMatch.file) {
|
|
163
|
+
parts.push(`Closest: ${firstMatch.file}${firstMatch.line ? ':' + firstMatch.line : ''}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (nameRefs && nameRefs.length > 0) {
|
|
168
|
+
parts.push(`Symbol already referenced in ${nameRefs.length} location(s)`);
|
|
169
|
+
const firstRef = nameRefs[0];
|
|
170
|
+
if (firstRef.file) {
|
|
171
|
+
parts.push(`First ref: ${firstRef.file}${firstRef.line ? ':' + firstRef.line : ''}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
parts.push('Consider REUSE or ADAPT before creating new code (IDS Article IV-A)');
|
|
176
|
+
|
|
177
|
+
return parts.join('. ') + '.';
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Calculate risk level from blast radius count.
|
|
182
|
+
* @param {number} blastRadius - Number of references affected
|
|
183
|
+
* @returns {string} 'LOW' | 'MEDIUM' | 'HIGH'
|
|
184
|
+
* @private
|
|
185
|
+
*/
|
|
186
|
+
function _calculateRiskLevel(blastRadius) {
|
|
187
|
+
if (blastRadius <= RISK_THRESHOLDS.LOW_MAX) {
|
|
188
|
+
return 'LOW';
|
|
189
|
+
}
|
|
190
|
+
if (blastRadius <= RISK_THRESHOLDS.MEDIUM_MAX) {
|
|
191
|
+
return 'MEDIUM';
|
|
192
|
+
}
|
|
193
|
+
return 'HIGH';
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
module.exports = {
|
|
197
|
+
checkBeforeWriting,
|
|
198
|
+
suggestReuse,
|
|
199
|
+
getConventionsForPath,
|
|
200
|
+
assessRefactoringImpact,
|
|
201
|
+
// Exposed for testing
|
|
202
|
+
_formatSuggestion,
|
|
203
|
+
_calculateRiskLevel,
|
|
204
|
+
RISK_THRESHOLDS,
|
|
205
|
+
REUSE_MIN_REFS,
|
|
206
|
+
};
|
|
@@ -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
|
+
}
|
|
@@ -72,7 +72,7 @@ function collectHookStatus(projectRoot) {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
// Check 2: Hook file exists
|
|
75
|
-
const hookPath = path.join(projectRoot, '.claude', 'hooks', 'synapse-engine.
|
|
75
|
+
const hookPath = path.join(projectRoot, '.claude', 'hooks', 'synapse-engine.cjs');
|
|
76
76
|
const hookExists = fs.existsSync(hookPath);
|
|
77
77
|
|
|
78
78
|
if (hookExists) {
|
|
@@ -82,7 +82,7 @@ function collectHookStatus(projectRoot) {
|
|
|
82
82
|
checks.push({
|
|
83
83
|
name: 'Hook file exists',
|
|
84
84
|
status: 'PASS',
|
|
85
|
-
detail: `.claude/hooks/synapse-engine.
|
|
85
|
+
detail: `.claude/hooks/synapse-engine.cjs (${lineCount} lines, ${stat.size} bytes)`,
|
|
86
86
|
});
|
|
87
87
|
} catch (error) {
|
|
88
88
|
checks.push({
|
|
@@ -95,7 +95,7 @@ function collectHookStatus(projectRoot) {
|
|
|
95
95
|
checks.push({
|
|
96
96
|
name: 'Hook file exists',
|
|
97
97
|
status: 'FAIL',
|
|
98
|
-
detail: '.claude/hooks/synapse-engine.
|
|
98
|
+
detail: '.claude/hooks/synapse-engine.cjs not found',
|
|
99
99
|
});
|
|
100
100
|
}
|
|
101
101
|
|
|
@@ -5997,6 +5997,33 @@ entities:
|
|
|
5997
5997
|
checksum: sha256:310884d94b81be976a346987822306a16a73ba812c08c3b805f4a03216ffef38
|
|
5998
5998
|
lastVerified: '2026-02-15T19:28:17.743Z'
|
|
5999
5999
|
modules:
|
|
6000
|
+
dev-helper:
|
|
6001
|
+
path: .aios-core/core/code-intel/helpers/dev-helper.js
|
|
6002
|
+
type: module
|
|
6003
|
+
purpose: Code intelligence helper for @dev agent tasks - IDS G4 automation, duplicate detection, conventions, blast radius
|
|
6004
|
+
keywords:
|
|
6005
|
+
- code-intel
|
|
6006
|
+
- dev-helper
|
|
6007
|
+
- ids-g4
|
|
6008
|
+
- duplicate-detection
|
|
6009
|
+
- blast-radius
|
|
6010
|
+
- conventions
|
|
6011
|
+
- reuse
|
|
6012
|
+
usedBy:
|
|
6013
|
+
- dev-develop-story
|
|
6014
|
+
- create-service
|
|
6015
|
+
- dev-suggest-refactoring
|
|
6016
|
+
- build-autonomous
|
|
6017
|
+
dependencies:
|
|
6018
|
+
- code-intel
|
|
6019
|
+
adaptability:
|
|
6020
|
+
score: 0.7
|
|
6021
|
+
constraints:
|
|
6022
|
+
- Requires code-intel module (NOG-1)
|
|
6023
|
+
extensionPoints:
|
|
6024
|
+
- Additional helper functions for other agents
|
|
6025
|
+
checksum: ''
|
|
6026
|
+
lastVerified: '2026-02-16T00:00:00.000Z'
|
|
6000
6027
|
registry-syncer:
|
|
6001
6028
|
path: .aios-core/core/code-intel/registry-syncer.js
|
|
6002
6029
|
type: module
|