@cleocode/core 2026.3.45 → 2026.3.46
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/dist/bootstrap.d.ts.map +1 -1
- package/dist/index.js +1475 -372
- package/dist/index.js.map +4 -4
- package/dist/init.d.ts.map +1 -1
- package/dist/injection.d.ts +1 -1
- package/dist/injection.d.ts.map +1 -1
- package/dist/routing/capability-matrix.d.ts +6 -4
- package/dist/routing/capability-matrix.d.ts.map +1 -1
- package/dist/scaffold.d.ts +16 -9
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/skills/agents/install.d.ts.map +1 -1
- package/dist/skills/routing-table.d.ts +17 -16
- package/dist/skills/routing-table.d.ts.map +1 -1
- package/dist/skills/skill-paths.d.ts.map +1 -1
- package/dist/system/health.d.ts.map +1 -1
- package/dist/ui/index.d.ts +0 -1
- package/dist/ui/index.d.ts.map +1 -1
- package/package.json +9 -4
- package/schemas/adr-frontmatter.schema.json +72 -0
- package/schemas/agent-configs.schema.json +120 -0
- package/schemas/agent-registry.json +243 -0
- package/schemas/agent-registry.schema.json +132 -0
- package/schemas/archive/research-manifest.schema.json +257 -0
- package/schemas/archive.schema.json +450 -0
- package/schemas/brain-decision.schema.json +69 -0
- package/schemas/brain-learning.schema.json +57 -0
- package/schemas/brain-pattern.schema.json +72 -0
- package/schemas/config.schema.json +2606 -0
- package/schemas/context-state.schema.json +137 -0
- package/schemas/contribution.schema.json +722 -0
- package/schemas/critical-path.schema.json +246 -0
- package/schemas/deps-cache.schema.json +97 -0
- package/schemas/doctor-output.schema.json +283 -0
- package/schemas/error.schema.json +161 -0
- package/schemas/export-package.schema.json +375 -0
- package/schemas/global-config.schema.json +219 -0
- package/schemas/grade.schema.json +49 -0
- package/schemas/log.schema.json +250 -0
- package/schemas/metrics.schema.json +328 -0
- package/schemas/migrations.schema.json +150 -0
- package/schemas/nexus-registry.schema.json +90 -0
- package/schemas/operation-constitution.schema.json +438 -0
- package/schemas/output.schema.json +164 -0
- package/schemas/project-context.schema.json +164 -0
- package/schemas/project-info.schema.json +180 -0
- package/schemas/projects-registry.schema.json +107 -0
- package/schemas/protocol-frontmatter.schema.json +72 -0
- package/schemas/rcasd-consensus-report.schema.json +10 -0
- package/schemas/rcasd-evidence.schema.json +42 -0
- package/schemas/rcasd-gate-result.schema.json +46 -0
- package/schemas/rcasd-hitl-resolution.schema.json +10 -0
- package/schemas/rcasd-index.schema.json +10 -0
- package/schemas/rcasd-manifest.schema.json +10 -0
- package/schemas/rcasd-research-output.schema.json +10 -0
- package/schemas/rcasd-spec-frontmatter.schema.json +10 -0
- package/schemas/rcasd-stage-transition.schema.json +38 -0
- package/schemas/releases.schema.json +267 -0
- package/schemas/skills-manifest.schema.json +91 -0
- package/schemas/skillsmp.schema.json +208 -0
- package/schemas/spec-index.schema.json +196 -0
- package/schemas/system-flow-atlas.schema.json +125 -0
- package/src/__tests__/injection-chain.test.ts +11 -10
- package/src/__tests__/injection-mvi-tiers.test.ts +4 -2
- package/src/agents/__tests__/capacity.test.d.ts +7 -0
- package/src/agents/__tests__/capacity.test.d.ts.map +1 -0
- package/src/agents/__tests__/capacity.test.js +173 -0
- package/src/agents/__tests__/capacity.test.js.map +1 -0
- package/src/agents/__tests__/registry.test.d.ts +8 -0
- package/src/agents/__tests__/registry.test.d.ts.map +1 -0
- package/src/agents/__tests__/registry.test.js +348 -0
- package/src/agents/__tests__/registry.test.js.map +1 -0
- package/src/agents/__tests__/retry.test.d.ts +7 -0
- package/src/agents/__tests__/retry.test.d.ts.map +1 -0
- package/src/agents/__tests__/retry.test.js +225 -0
- package/src/agents/__tests__/retry.test.js.map +1 -0
- package/src/bootstrap.ts +3 -1
- package/src/init.ts +63 -18
- package/src/injection.ts +11 -5
- package/src/intelligence/__tests__/impact.test.d.ts +15 -0
- package/src/intelligence/__tests__/impact.test.d.ts.map +1 -0
- package/src/intelligence/__tests__/impact.test.js +384 -0
- package/src/intelligence/__tests__/impact.test.js.map +1 -0
- package/src/intelligence/__tests__/patterns.test.d.ts +8 -0
- package/src/intelligence/__tests__/patterns.test.d.ts.map +1 -0
- package/src/intelligence/__tests__/patterns.test.js +370 -0
- package/src/intelligence/__tests__/patterns.test.js.map +1 -0
- package/src/intelligence/__tests__/prediction.test.d.ts +8 -0
- package/src/intelligence/__tests__/prediction.test.d.ts.map +1 -0
- package/src/intelligence/__tests__/prediction.test.js +314 -0
- package/src/intelligence/__tests__/prediction.test.js.map +1 -0
- package/src/nexus/__tests__/nexus-e2e.test.d.ts +12 -0
- package/src/nexus/__tests__/nexus-e2e.test.d.ts.map +1 -0
- package/src/nexus/__tests__/nexus-e2e.test.js +1220 -0
- package/src/nexus/__tests__/nexus-e2e.test.js.map +1 -0
- package/src/nexus/__tests__/transfer.test.d.ts +8 -0
- package/src/nexus/__tests__/transfer.test.d.ts.map +1 -0
- package/src/nexus/__tests__/transfer.test.js +372 -0
- package/src/nexus/__tests__/transfer.test.js.map +1 -0
- package/src/nexus/__tests__/transfer.test.ts +1 -1
- package/src/routing/capability-matrix.ts +1435 -205
- package/src/scaffold.ts +18 -11
- package/src/skills/__tests__/routing-table.test.ts +53 -33
- package/src/skills/agents/install.ts +9 -1
- package/src/skills/routing-table.ts +39 -253
- package/src/skills/skill-paths.ts +3 -2
- package/src/store/__tests__/project-detect.test.ts +1 -1
- package/src/system/health.ts +18 -7
- package/src/ui/index.ts +0 -6
- package/src/validation/operation-gate-validators.ts +2 -2
- package/templates/CLEO-INJECTION.md +120 -0
- package/templates/README.md +29 -0
- package/templates/agent-registry.json +305 -0
- package/templates/cleo-gitignore +74 -0
- package/templates/config.template.json +187 -0
- package/templates/git-hooks/commit-msg +149 -0
- package/templates/git-hooks/pre-commit +40 -0
- package/templates/git-hooks/pre-push +79 -0
- package/templates/github/ISSUE_TEMPLATE/bug_report.yml +143 -0
- package/templates/github/ISSUE_TEMPLATE/config.yml +8 -0
- package/templates/github/ISSUE_TEMPLATE/feature_request.yml +125 -0
- package/templates/github/ISSUE_TEMPLATE/help_question.yml +99 -0
- package/templates/global-config.template.json +56 -0
- package/templates/hooks/precompact-safestop.sh +89 -0
- package/templates/issue-templates/bug_report.yml +143 -0
- package/templates/issue-templates/config.yml +8 -0
- package/templates/issue-templates/feature_request.yml +125 -0
- package/templates/issue-templates/help_question.yml +99 -0
- package/templates/skillsmp.json.example +28 -0
- package/templates/skillsmp.json.example.md +214 -0
- package/dist/ui/injection-legacy.d.ts +0 -26
- package/dist/ui/injection-legacy.d.ts.map +0 -1
- package/src/ui/__tests__/injection-registry.test.d.ts +0 -11
- package/src/ui/__tests__/injection-registry.test.d.ts.map +0 -1
- package/src/ui/__tests__/injection-registry.test.js +0 -46
- package/src/ui/__tests__/injection-registry.test.js.map +0 -1
- package/src/ui/__tests__/injection-registry.test.ts +0 -57
- package/src/ui/injection-legacy.ts +0 -44
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"schemaVersion": "1.0.0",
|
|
4
|
+
"$id": "https://cleo-dev.com/schemas/v1/spec-index.schema.json",
|
|
5
|
+
"title": "Claude-TODO Specification Index",
|
|
6
|
+
"description": "Schema for the authoritative specification index. LLM-agent-first design: structured, queryable, schema-validated.",
|
|
7
|
+
"type": "object",
|
|
8
|
+
"required": ["$schema", "_meta", "authorities", "specs"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"$schema": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"const": "https://cleo-dev.com/schemas/v1/spec-index.schema.json"
|
|
13
|
+
},
|
|
14
|
+
"_meta": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"description": "Index metadata for version tracking and integrity",
|
|
17
|
+
"required": ["version", "lastUpdated", "totalSpecs", "totalReports"],
|
|
18
|
+
"properties": {
|
|
19
|
+
"version": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$",
|
|
22
|
+
"description": "Semantic version of the index format"
|
|
23
|
+
},
|
|
24
|
+
"lastUpdated": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"format": "date",
|
|
27
|
+
"description": "ISO date of last index update"
|
|
28
|
+
},
|
|
29
|
+
"totalSpecs": {
|
|
30
|
+
"type": "integer",
|
|
31
|
+
"minimum": 0,
|
|
32
|
+
"description": "Count of specification documents"
|
|
33
|
+
},
|
|
34
|
+
"totalReports": {
|
|
35
|
+
"type": "integer",
|
|
36
|
+
"minimum": 0,
|
|
37
|
+
"description": "Count of implementation reports"
|
|
38
|
+
},
|
|
39
|
+
"checksum": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"description": "Optional SHA256 for integrity verification"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"authorities": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"description": "Domain to authoritative specification mapping. Query: 'What is the authoritative source for X?'",
|
|
48
|
+
"additionalProperties": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"description": "Filename of authoritative spec for this domain"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"specs": {
|
|
54
|
+
"type": "array",
|
|
55
|
+
"description": "All specification documents with metadata",
|
|
56
|
+
"items": {
|
|
57
|
+
"$ref": "#/definitions/specEntry"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"reports": {
|
|
61
|
+
"type": "array",
|
|
62
|
+
"description": "All implementation reports with progress tracking",
|
|
63
|
+
"items": {
|
|
64
|
+
"$ref": "#/definitions/reportEntry"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"recentChanges": {
|
|
68
|
+
"type": "array",
|
|
69
|
+
"description": "Last 20 changes for change tracking",
|
|
70
|
+
"maxItems": 20,
|
|
71
|
+
"items": {
|
|
72
|
+
"$ref": "#/definitions/changeEntry"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"definitions": {
|
|
77
|
+
"specEntry": {
|
|
78
|
+
"type": "object",
|
|
79
|
+
"required": ["file", "version", "status", "type", "domain", "synopsis", "lastUpdated"],
|
|
80
|
+
"properties": {
|
|
81
|
+
"file": {
|
|
82
|
+
"type": "string",
|
|
83
|
+
"pattern": "^[A-Z0-9-]+\\.(md|json)$",
|
|
84
|
+
"description": "Filename (not path)"
|
|
85
|
+
},
|
|
86
|
+
"version": {
|
|
87
|
+
"type": "string",
|
|
88
|
+
"description": "Semantic version or version string"
|
|
89
|
+
},
|
|
90
|
+
"status": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"enum": ["DRAFT", "APPROVED", "ACTIVE", "IMMUTABLE", "DEPRECATED", "PLANNING", "IMPLEMENTED"],
|
|
93
|
+
"description": "Document lifecycle status"
|
|
94
|
+
},
|
|
95
|
+
"type": {
|
|
96
|
+
"type": "string",
|
|
97
|
+
"enum": ["SPEC", "GUIDELINES", "PLAN"],
|
|
98
|
+
"description": "Document type classification"
|
|
99
|
+
},
|
|
100
|
+
"domain": {
|
|
101
|
+
"type": "string",
|
|
102
|
+
"description": "Primary domain this spec covers"
|
|
103
|
+
},
|
|
104
|
+
"category": {
|
|
105
|
+
"type": "string",
|
|
106
|
+
"enum": ["core-system", "feature", "design-philosophy", "integration", "process"],
|
|
107
|
+
"description": "Organizational category"
|
|
108
|
+
},
|
|
109
|
+
"synopsis": {
|
|
110
|
+
"type": "string",
|
|
111
|
+
"maxLength": 200,
|
|
112
|
+
"description": "1-2 sentence purpose summary"
|
|
113
|
+
},
|
|
114
|
+
"lastUpdated": {
|
|
115
|
+
"type": "string",
|
|
116
|
+
"format": "date",
|
|
117
|
+
"description": "ISO date of last document update"
|
|
118
|
+
},
|
|
119
|
+
"dependsOn": {
|
|
120
|
+
"type": "array",
|
|
121
|
+
"items": {"type": "string"},
|
|
122
|
+
"description": "Specs this document depends on (filenames)"
|
|
123
|
+
},
|
|
124
|
+
"dependedOnBy": {
|
|
125
|
+
"type": "array",
|
|
126
|
+
"items": {"type": "string"},
|
|
127
|
+
"description": "Specs that depend on this document (filenames)"
|
|
128
|
+
},
|
|
129
|
+
"implementationReport": {
|
|
130
|
+
"type": "string",
|
|
131
|
+
"description": "Filename of associated implementation report"
|
|
132
|
+
},
|
|
133
|
+
"isAuthoritativeFor": {
|
|
134
|
+
"type": "array",
|
|
135
|
+
"items": {"type": "string"},
|
|
136
|
+
"description": "Domains this spec is authoritative for"
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
"reportEntry": {
|
|
141
|
+
"type": "object",
|
|
142
|
+
"required": ["file", "relatedSpec", "progress", "lastUpdated"],
|
|
143
|
+
"properties": {
|
|
144
|
+
"file": {
|
|
145
|
+
"type": "string",
|
|
146
|
+
"pattern": "^[A-Z0-9-]+-IMPLEMENTATION-REPORT\\.md$"
|
|
147
|
+
},
|
|
148
|
+
"relatedSpec": {
|
|
149
|
+
"type": "string",
|
|
150
|
+
"description": "Filename of the spec this tracks"
|
|
151
|
+
},
|
|
152
|
+
"progress": {
|
|
153
|
+
"type": "string",
|
|
154
|
+
"description": "Progress indicator (e.g., '85%', '16/18', 'Varies')"
|
|
155
|
+
},
|
|
156
|
+
"phase": {
|
|
157
|
+
"type": "string",
|
|
158
|
+
"description": "Current implementation phase"
|
|
159
|
+
},
|
|
160
|
+
"lastUpdated": {
|
|
161
|
+
"type": "string",
|
|
162
|
+
"format": "date"
|
|
163
|
+
},
|
|
164
|
+
"notes": {
|
|
165
|
+
"type": "string",
|
|
166
|
+
"maxLength": 100,
|
|
167
|
+
"description": "Brief status note"
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
"changeEntry": {
|
|
172
|
+
"type": "object",
|
|
173
|
+
"required": ["date", "file", "changeType", "description"],
|
|
174
|
+
"properties": {
|
|
175
|
+
"date": {
|
|
176
|
+
"type": "string",
|
|
177
|
+
"format": "date"
|
|
178
|
+
},
|
|
179
|
+
"file": {
|
|
180
|
+
"type": "string"
|
|
181
|
+
},
|
|
182
|
+
"changeType": {
|
|
183
|
+
"type": "string",
|
|
184
|
+
"enum": ["Created", "Updated", "StatusChange", "Deprecated"]
|
|
185
|
+
},
|
|
186
|
+
"version": {
|
|
187
|
+
"type": "string"
|
|
188
|
+
},
|
|
189
|
+
"description": {
|
|
190
|
+
"type": "string",
|
|
191
|
+
"maxLength": 100
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "CLEO System Flow Atlas Structure",
|
|
4
|
+
"description": "Validates that a System Flow Atlas document contains all required sections",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"title": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"const": "CLEO System Flow Atlas",
|
|
10
|
+
"description": "Document title"
|
|
11
|
+
},
|
|
12
|
+
"version": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"pattern": "^\\d{4}\\.\\d{1,2}\\.\\d{1,2}$",
|
|
15
|
+
"description": "CalVer version (YYYY.M.D)"
|
|
16
|
+
},
|
|
17
|
+
"status": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"enum": ["DRAFT", "REVIEW", "APPROVED", "STABLE", "SUPERSEDED", "ARCHIVED"],
|
|
20
|
+
"description": "Document lifecycle status"
|
|
21
|
+
},
|
|
22
|
+
"sections": {
|
|
23
|
+
"type": "object",
|
|
24
|
+
"description": "Required sections in the atlas document",
|
|
25
|
+
"properties": {
|
|
26
|
+
"purpose": {
|
|
27
|
+
"type": "boolean",
|
|
28
|
+
"description": "Section 1: Purpose exists"
|
|
29
|
+
},
|
|
30
|
+
"systemDomainMapping": {
|
|
31
|
+
"type": "boolean",
|
|
32
|
+
"description": "Section 2: Four systems mapped to 10 domains"
|
|
33
|
+
},
|
|
34
|
+
"requestFlow": {
|
|
35
|
+
"type": "boolean",
|
|
36
|
+
"description": "Section 3: End-to-end request flow diagram"
|
|
37
|
+
},
|
|
38
|
+
"domainInteractionGraph": {
|
|
39
|
+
"type": "boolean",
|
|
40
|
+
"description": "Section 4: Domain interaction graph"
|
|
41
|
+
},
|
|
42
|
+
"dataStores": {
|
|
43
|
+
"type": "boolean",
|
|
44
|
+
"description": "Section 5: Data stores and ownership boundaries"
|
|
45
|
+
},
|
|
46
|
+
"distillationFlow": {
|
|
47
|
+
"type": "boolean",
|
|
48
|
+
"description": "Section 6: LOOM distillation flow"
|
|
49
|
+
},
|
|
50
|
+
"flowExamples": {
|
|
51
|
+
"type": "boolean",
|
|
52
|
+
"description": "Section 7: Query/mutate flow examples"
|
|
53
|
+
},
|
|
54
|
+
"progressiveDisclosure": {
|
|
55
|
+
"type": "boolean",
|
|
56
|
+
"description": "Section 8: Progressive disclosure in practice"
|
|
57
|
+
},
|
|
58
|
+
"failureRecovery": {
|
|
59
|
+
"type": "boolean",
|
|
60
|
+
"description": "Section 9: Failure and recovery paths"
|
|
61
|
+
},
|
|
62
|
+
"observability": {
|
|
63
|
+
"type": "boolean",
|
|
64
|
+
"description": "Section 10: Observability and audit trails"
|
|
65
|
+
},
|
|
66
|
+
"invariants": {
|
|
67
|
+
"type": "boolean",
|
|
68
|
+
"description": "Section 11: Canonical invariants"
|
|
69
|
+
},
|
|
70
|
+
"glossary": {
|
|
71
|
+
"type": "boolean",
|
|
72
|
+
"description": "Section 12: Glossary"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"required": [
|
|
76
|
+
"purpose",
|
|
77
|
+
"systemDomainMapping",
|
|
78
|
+
"requestFlow",
|
|
79
|
+
"domainInteractionGraph",
|
|
80
|
+
"dataStores",
|
|
81
|
+
"distillationFlow",
|
|
82
|
+
"flowExamples",
|
|
83
|
+
"progressiveDisclosure",
|
|
84
|
+
"failureRecovery",
|
|
85
|
+
"observability",
|
|
86
|
+
"invariants",
|
|
87
|
+
"glossary"
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
"domains": {
|
|
91
|
+
"type": "array",
|
|
92
|
+
"items": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"enum": [
|
|
95
|
+
"tasks",
|
|
96
|
+
"session",
|
|
97
|
+
"memory",
|
|
98
|
+
"check",
|
|
99
|
+
"pipeline",
|
|
100
|
+
"orchestrate",
|
|
101
|
+
"tools",
|
|
102
|
+
"admin",
|
|
103
|
+
"nexus",
|
|
104
|
+
"sticky"
|
|
105
|
+
]
|
|
106
|
+
},
|
|
107
|
+
"minItems": 10,
|
|
108
|
+
"maxItems": 10,
|
|
109
|
+
"uniqueItems": true,
|
|
110
|
+
"description": "All 10 canonical domains MUST be referenced"
|
|
111
|
+
},
|
|
112
|
+
"systems": {
|
|
113
|
+
"type": "array",
|
|
114
|
+
"items": {
|
|
115
|
+
"type": "string",
|
|
116
|
+
"enum": ["BRAIN", "LOOM", "NEXUS", "LAFS"]
|
|
117
|
+
},
|
|
118
|
+
"minItems": 4,
|
|
119
|
+
"maxItems": 4,
|
|
120
|
+
"uniqueItems": true,
|
|
121
|
+
"description": "All 4 conceptual systems MUST be documented"
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"required": ["title", "version", "status", "sections", "domains", "systems"]
|
|
125
|
+
}
|
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Verifies the new AGENTS.md hub injection architecture:
|
|
5
5
|
* 1. Provider files (CLAUDE.md, GEMINI.md) reference @AGENTS.md
|
|
6
|
-
* 2. AGENTS.md references @~/.
|
|
7
|
-
* 3.
|
|
8
|
-
* 4. No
|
|
6
|
+
* 2. Project AGENTS.md references @~/.agents/AGENTS.md (global hub)
|
|
7
|
+
* 3. Global ~/.agents/AGENTS.md references @~/.cleo/templates/CLEO-INJECTION.md
|
|
8
|
+
* 4. No references to @.cleo/templates/AGENT-INJECTION.md anywhere
|
|
9
|
+
* 5. No CLEO:START markers anywhere (CAAMP uses CAAMP:START/END)
|
|
9
10
|
*
|
|
10
11
|
* Since CAAMP functions depend on actual provider installations,
|
|
11
12
|
* they are mocked via vi.mock to isolate the init logic.
|
|
@@ -159,13 +160,13 @@ describe('E2E: injection chain validation (T4694)', () => {
|
|
|
159
160
|
expect(geminiContent).toContain('@AGENTS.md');
|
|
160
161
|
});
|
|
161
162
|
|
|
162
|
-
it('AGENTS.md references @~/.
|
|
163
|
+
it('AGENTS.md references @~/.agents/AGENTS.md (global hub)', async () => {
|
|
163
164
|
await initProject({ name: 'chain-test' });
|
|
164
165
|
|
|
165
166
|
const agentsPath = join(testDir, 'AGENTS.md');
|
|
166
167
|
expect(existsSync(agentsPath)).toBe(true);
|
|
167
168
|
const agentsContent = await readFile(agentsPath, 'utf-8');
|
|
168
|
-
expect(agentsContent).toContain('@~/.
|
|
169
|
+
expect(agentsContent).toContain('@~/.agents/AGENTS.md');
|
|
169
170
|
});
|
|
170
171
|
|
|
171
172
|
it('no references to @.cleo/templates/AGENT-INJECTION.md in generated files', async () => {
|
|
@@ -216,7 +217,7 @@ describe('E2E: injection chain validation (T4694)', () => {
|
|
|
216
217
|
expect(createdStr).toContain('AGENTS.md');
|
|
217
218
|
});
|
|
218
219
|
|
|
219
|
-
it('injection chain: provider -> AGENTS.md -> CLEO-INJECTION.md', async () => {
|
|
220
|
+
it('injection chain: provider -> AGENTS.md -> ~/.agents/AGENTS.md -> CLEO-INJECTION.md', async () => {
|
|
220
221
|
await initProject({ name: 'chain-test' });
|
|
221
222
|
|
|
222
223
|
// Verify the full chain:
|
|
@@ -224,9 +225,9 @@ describe('E2E: injection chain validation (T4694)', () => {
|
|
|
224
225
|
const claudeContent = await readFile(join(testDir, 'CLAUDE.md'), 'utf-8');
|
|
225
226
|
expect(claudeContent).toContain('@AGENTS.md');
|
|
226
227
|
|
|
227
|
-
// AGENTS.md -> @~/.
|
|
228
|
+
// AGENTS.md -> @~/.agents/AGENTS.md (project hub references global hub)
|
|
228
229
|
const agentsContent = await readFile(join(testDir, 'AGENTS.md'), 'utf-8');
|
|
229
|
-
expect(agentsContent).toContain('@~/.
|
|
230
|
+
expect(agentsContent).toContain('@~/.agents/AGENTS.md');
|
|
230
231
|
|
|
231
232
|
// Neither should reference the old AGENT-INJECTION.md pattern
|
|
232
233
|
expect(claudeContent).not.toContain('AGENT-INJECTION.md');
|
|
@@ -241,11 +242,11 @@ describe('E2E: injection chain validation (T4694)', () => {
|
|
|
241
242
|
|
|
242
243
|
await initProject({ name: 'no-provider-test' });
|
|
243
244
|
|
|
244
|
-
// AGENTS.md should still exist and reference
|
|
245
|
+
// AGENTS.md should still exist and reference the global hub
|
|
245
246
|
const agentsPath = join(testDir, 'AGENTS.md');
|
|
246
247
|
expect(existsSync(agentsPath)).toBe(true);
|
|
247
248
|
const agentsContent = await readFile(agentsPath, 'utf-8');
|
|
248
|
-
expect(agentsContent).toContain('@~/.
|
|
249
|
+
expect(agentsContent).toContain('@~/.agents/AGENTS.md');
|
|
249
250
|
});
|
|
250
251
|
|
|
251
252
|
it('updateDocs refreshes injection without full reinit', async () => {
|
|
@@ -17,8 +17,10 @@ import { fileURLToPath } from 'node:url';
|
|
|
17
17
|
import { describe, expect, it } from 'vitest';
|
|
18
18
|
|
|
19
19
|
const thisFile = fileURLToPath(import.meta.url);
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
// Template moved to packages/core/templates/ (was at monorepo root templates/)
|
|
21
|
+
// thisFile is at packages/core/src/__tests__/, go up two levels to reach packages/core/
|
|
22
|
+
const corePackageRoot = resolve(dirname(thisFile), '..', '..');
|
|
23
|
+
const injectionPath = join(corePackageRoot, 'templates', 'CLEO-INJECTION.md');
|
|
22
24
|
|
|
23
25
|
const templateExists = existsSync(injectionPath);
|
|
24
26
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacity.test.d.ts","sourceRoot":"","sources":["capacity.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for capacity tracking and load balancing.
|
|
3
|
+
*
|
|
4
|
+
* @module agents/__tests__/capacity.test
|
|
5
|
+
*/
|
|
6
|
+
import { mkdir, mkdtemp, rm } from 'node:fs/promises';
|
|
7
|
+
import { tmpdir } from 'node:os';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
10
|
+
import { findLeastLoadedAgent, getAvailableCapacity, getCapacitySummary, isOverloaded, updateCapacity, } from '../capacity.js';
|
|
11
|
+
import { registerAgent, updateAgentStatus } from '../registry.js';
|
|
12
|
+
describe('Capacity Tracking', () => {
|
|
13
|
+
let tempDir;
|
|
14
|
+
beforeEach(async () => {
|
|
15
|
+
tempDir = await mkdtemp(join(tmpdir(), 'cleo-capacity-test-'));
|
|
16
|
+
await mkdir(join(tempDir, '.cleo'), { recursive: true });
|
|
17
|
+
await mkdir(join(tempDir, '.cleo', 'backups', 'operational'), { recursive: true });
|
|
18
|
+
});
|
|
19
|
+
afterEach(async () => {
|
|
20
|
+
try {
|
|
21
|
+
const { closeAllDatabases } = await import('../../store/sqlite.js');
|
|
22
|
+
await closeAllDatabases();
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
/* module may not be loaded */
|
|
26
|
+
}
|
|
27
|
+
await Promise.race([
|
|
28
|
+
rm(tempDir, { recursive: true, force: true, maxRetries: 3, retryDelay: 300 }).catch(() => { }),
|
|
29
|
+
new Promise((resolve) => setTimeout(resolve, 8_000)),
|
|
30
|
+
]);
|
|
31
|
+
});
|
|
32
|
+
// ==========================================================================
|
|
33
|
+
// updateCapacity
|
|
34
|
+
// ==========================================================================
|
|
35
|
+
describe('updateCapacity', () => {
|
|
36
|
+
it('updates capacity value', async () => {
|
|
37
|
+
const agent = await registerAgent({ agentType: 'executor' }, tempDir);
|
|
38
|
+
const updated = await updateCapacity(agent.id, 0.5, tempDir);
|
|
39
|
+
expect(updated).not.toBeNull();
|
|
40
|
+
expect(parseFloat(updated.capacity)).toBeCloseTo(0.5, 4);
|
|
41
|
+
});
|
|
42
|
+
it('returns null for non-existent agent', async () => {
|
|
43
|
+
const result = await updateCapacity('agt_nonexistent_abc123', 0.5, tempDir);
|
|
44
|
+
expect(result).toBeNull();
|
|
45
|
+
});
|
|
46
|
+
it('rejects capacity below 0', async () => {
|
|
47
|
+
const agent = await registerAgent({ agentType: 'executor' }, tempDir);
|
|
48
|
+
await expect(updateCapacity(agent.id, -0.1, tempDir)).rejects.toThrow('Capacity must be between 0.0 and 1.0');
|
|
49
|
+
});
|
|
50
|
+
it('rejects capacity above 1', async () => {
|
|
51
|
+
const agent = await registerAgent({ agentType: 'executor' }, tempDir);
|
|
52
|
+
await expect(updateCapacity(agent.id, 1.5, tempDir)).rejects.toThrow('Capacity must be between 0.0 and 1.0');
|
|
53
|
+
});
|
|
54
|
+
it('accepts boundary values', async () => {
|
|
55
|
+
const agent = await registerAgent({ agentType: 'executor' }, tempDir);
|
|
56
|
+
const zero = await updateCapacity(agent.id, 0, tempDir);
|
|
57
|
+
expect(parseFloat(zero.capacity)).toBeCloseTo(0, 4);
|
|
58
|
+
const one = await updateCapacity(agent.id, 1, tempDir);
|
|
59
|
+
expect(parseFloat(one.capacity)).toBeCloseTo(1, 4);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
// ==========================================================================
|
|
63
|
+
// getAvailableCapacity
|
|
64
|
+
// ==========================================================================
|
|
65
|
+
describe('getAvailableCapacity', () => {
|
|
66
|
+
it('sums capacity of active and idle agents', async () => {
|
|
67
|
+
const a1 = await registerAgent({ agentType: 'executor' }, tempDir);
|
|
68
|
+
const a2 = await registerAgent({ agentType: 'researcher' }, tempDir);
|
|
69
|
+
await updateAgentStatus(a1.id, { status: 'active' }, tempDir);
|
|
70
|
+
await updateAgentStatus(a2.id, { status: 'idle' }, tempDir);
|
|
71
|
+
await updateCapacity(a1.id, 0.7, tempDir);
|
|
72
|
+
await updateCapacity(a2.id, 0.3, tempDir);
|
|
73
|
+
const capacity = await getAvailableCapacity(tempDir);
|
|
74
|
+
expect(capacity).toBeCloseTo(1.0, 1);
|
|
75
|
+
});
|
|
76
|
+
it('excludes stopped and crashed agents', async () => {
|
|
77
|
+
const a1 = await registerAgent({ agentType: 'executor' }, tempDir);
|
|
78
|
+
const a2 = await registerAgent({ agentType: 'researcher' }, tempDir);
|
|
79
|
+
const a3 = await registerAgent({ agentType: 'validator' }, tempDir);
|
|
80
|
+
await updateAgentStatus(a1.id, { status: 'active' }, tempDir);
|
|
81
|
+
await updateAgentStatus(a2.id, { status: 'stopped' }, tempDir);
|
|
82
|
+
await updateAgentStatus(a3.id, { status: 'crashed' }, tempDir);
|
|
83
|
+
const capacity = await getAvailableCapacity(tempDir);
|
|
84
|
+
// Only a1 contributes (1.0 default)
|
|
85
|
+
expect(capacity).toBeCloseTo(1.0, 1);
|
|
86
|
+
});
|
|
87
|
+
it('returns 0 when no active agents', async () => {
|
|
88
|
+
const capacity = await getAvailableCapacity(tempDir);
|
|
89
|
+
expect(capacity).toBe(0);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
// ==========================================================================
|
|
93
|
+
// findLeastLoadedAgent
|
|
94
|
+
// ==========================================================================
|
|
95
|
+
describe('findLeastLoadedAgent', () => {
|
|
96
|
+
it('finds agent with highest capacity', async () => {
|
|
97
|
+
const a1 = await registerAgent({ agentType: 'executor' }, tempDir);
|
|
98
|
+
const a2 = await registerAgent({ agentType: 'executor' }, tempDir);
|
|
99
|
+
const a3 = await registerAgent({ agentType: 'executor' }, tempDir);
|
|
100
|
+
await updateAgentStatus(a1.id, { status: 'active' }, tempDir);
|
|
101
|
+
await updateAgentStatus(a2.id, { status: 'active' }, tempDir);
|
|
102
|
+
await updateAgentStatus(a3.id, { status: 'active' }, tempDir);
|
|
103
|
+
await updateCapacity(a1.id, 0.2, tempDir);
|
|
104
|
+
await updateCapacity(a2.id, 0.8, tempDir);
|
|
105
|
+
await updateCapacity(a3.id, 0.5, tempDir);
|
|
106
|
+
const least = await findLeastLoadedAgent(undefined, tempDir);
|
|
107
|
+
expect(least).not.toBeNull();
|
|
108
|
+
expect(least.id).toBe(a2.id);
|
|
109
|
+
});
|
|
110
|
+
it('filters by agent type', async () => {
|
|
111
|
+
const a1 = await registerAgent({ agentType: 'executor' }, tempDir);
|
|
112
|
+
const a2 = await registerAgent({ agentType: 'researcher' }, tempDir);
|
|
113
|
+
await updateAgentStatus(a1.id, { status: 'active' }, tempDir);
|
|
114
|
+
await updateAgentStatus(a2.id, { status: 'active' }, tempDir);
|
|
115
|
+
await updateCapacity(a1.id, 0.3, tempDir);
|
|
116
|
+
await updateCapacity(a2.id, 0.9, tempDir);
|
|
117
|
+
const least = await findLeastLoadedAgent('executor', tempDir);
|
|
118
|
+
expect(least).not.toBeNull();
|
|
119
|
+
expect(least.id).toBe(a1.id);
|
|
120
|
+
expect(least.agentType).toBe('executor');
|
|
121
|
+
});
|
|
122
|
+
it('returns null when no matching agents', async () => {
|
|
123
|
+
const result = await findLeastLoadedAgent('orchestrator', tempDir);
|
|
124
|
+
expect(result).toBeNull();
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
// ==========================================================================
|
|
128
|
+
// isOverloaded
|
|
129
|
+
// ==========================================================================
|
|
130
|
+
describe('isOverloaded', () => {
|
|
131
|
+
it('returns true when capacity below threshold', async () => {
|
|
132
|
+
const a1 = await registerAgent({ agentType: 'executor' }, tempDir);
|
|
133
|
+
await updateAgentStatus(a1.id, { status: 'active' }, tempDir);
|
|
134
|
+
await updateCapacity(a1.id, 0.05, tempDir);
|
|
135
|
+
expect(await isOverloaded(0.1, tempDir)).toBe(true);
|
|
136
|
+
});
|
|
137
|
+
it('returns false when capacity above threshold', async () => {
|
|
138
|
+
const a1 = await registerAgent({ agentType: 'executor' }, tempDir);
|
|
139
|
+
await updateAgentStatus(a1.id, { status: 'active' }, tempDir);
|
|
140
|
+
await updateCapacity(a1.id, 0.5, tempDir);
|
|
141
|
+
expect(await isOverloaded(0.1, tempDir)).toBe(false);
|
|
142
|
+
});
|
|
143
|
+
it('returns true when no active agents (0 capacity)', async () => {
|
|
144
|
+
expect(await isOverloaded(0.1, tempDir)).toBe(true);
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
// ==========================================================================
|
|
148
|
+
// getCapacitySummary
|
|
149
|
+
// ==========================================================================
|
|
150
|
+
describe('getCapacitySummary', () => {
|
|
151
|
+
it('produces correct summary', async () => {
|
|
152
|
+
const a1 = await registerAgent({ agentType: 'executor' }, tempDir);
|
|
153
|
+
const a2 = await registerAgent({ agentType: 'researcher' }, tempDir);
|
|
154
|
+
await updateAgentStatus(a1.id, { status: 'active' }, tempDir);
|
|
155
|
+
await updateAgentStatus(a2.id, { status: 'idle' }, tempDir);
|
|
156
|
+
await updateCapacity(a1.id, 0.6, tempDir);
|
|
157
|
+
await updateCapacity(a2.id, 0.4, tempDir);
|
|
158
|
+
const summary = await getCapacitySummary(0.1, tempDir);
|
|
159
|
+
expect(summary.totalCapacity).toBeCloseTo(1.0, 1);
|
|
160
|
+
expect(summary.activeAgentCount).toBe(2);
|
|
161
|
+
expect(summary.averageCapacity).toBeCloseTo(0.5, 1);
|
|
162
|
+
expect(summary.overloaded).toBe(false);
|
|
163
|
+
expect(summary.threshold).toBe(0.1);
|
|
164
|
+
});
|
|
165
|
+
it('reports overloaded when below threshold', async () => {
|
|
166
|
+
const summary = await getCapacitySummary(0.5, tempDir);
|
|
167
|
+
expect(summary.totalCapacity).toBe(0);
|
|
168
|
+
expect(summary.activeAgentCount).toBe(0);
|
|
169
|
+
expect(summary.overloaded).toBe(true);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
//# sourceMappingURL=capacity.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacity.test.js","sourceRoot":"","sources":["capacity.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["registry.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|