aios-core 4.2.7 → 4.2.8
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.
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
# - SHA256 hashes for change detection
|
|
8
8
|
# - File types for categorization
|
|
9
9
|
#
|
|
10
|
-
version: 4.2.
|
|
11
|
-
generated_at: "2026-02-16T14:
|
|
10
|
+
version: 4.2.8
|
|
11
|
+
generated_at: "2026-02-16T14:40:32.757Z"
|
|
12
12
|
generator: scripts/generate-install-manifest.js
|
|
13
13
|
file_count: 1004
|
|
14
14
|
files:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aios-core",
|
|
3
|
-
"version": "4.2.
|
|
3
|
+
"version": "4.2.8",
|
|
4
4
|
"description": "Synkra AIOS: AI-Orchestrated System for Full Stack Development - Core Framework",
|
|
5
5
|
"bin": {
|
|
6
6
|
"aios": "bin/aios.js",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"validate:gemini-integration": "node .aios-core/infrastructure/scripts/validate-gemini-integration.js",
|
|
56
56
|
"sync:skills:codex": "node .aios-core/infrastructure/scripts/codex-skills-sync/index.js",
|
|
57
57
|
"sync:skills:codex:global": "node .aios-core/infrastructure/scripts/codex-skills-sync/index.js --global --global-only",
|
|
58
|
-
|
|
58
|
+
"validate:codex-skills": "node .aios-core/infrastructure/scripts/codex-skills-sync/validate.js --strict",
|
|
59
59
|
"validate:paths": "node .aios-core/infrastructure/scripts/validate-paths.js",
|
|
60
60
|
"validate:parity": "node .aios-core/infrastructure/scripts/validate-parity.js",
|
|
61
61
|
"validate:semantic-lint": "node scripts/semantic-lint.js",
|
|
@@ -16,6 +16,13 @@ const path = require('path');
|
|
|
16
16
|
const yaml = require('js-yaml');
|
|
17
17
|
const { hashFileAsync, hashFilesMatchAsync } = require('../installer/file-hasher');
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Directories excluded from scaffolding (private/internal squads).
|
|
21
|
+
*/
|
|
22
|
+
const SCAFFOLD_EXCLUDES = [
|
|
23
|
+
'mmos-squad',
|
|
24
|
+
];
|
|
25
|
+
|
|
19
26
|
/**
|
|
20
27
|
* Items to scaffold from pro package into user project.
|
|
21
28
|
* Each entry defines source (relative to proSourceDir) and dest (relative to targetDir).
|
|
@@ -114,6 +121,12 @@ async function scaffoldProContent(targetDir, proSourceDir, options = {}) {
|
|
|
114
121
|
}
|
|
115
122
|
}
|
|
116
123
|
|
|
124
|
+
// Merge pro-config into core-config
|
|
125
|
+
const merged = await mergeProConfig(targetDir);
|
|
126
|
+
if (merged && onProgress) {
|
|
127
|
+
onProgress({ item: 'pro-config', status: 'done', message: 'Pro config merged into core-config.yaml' });
|
|
128
|
+
}
|
|
129
|
+
|
|
117
130
|
// Generate pro-version.json (AC4)
|
|
118
131
|
const versionInfo = await generateProVersionJson(targetDir, proSourceDir, result.copiedFiles);
|
|
119
132
|
result.versionInfo = versionInfo;
|
|
@@ -162,6 +175,11 @@ async function scaffoldDirectory(sourceDir, destDir, options = {}) {
|
|
|
162
175
|
const items = await fs.readdir(sourceDir, { withFileTypes: true });
|
|
163
176
|
|
|
164
177
|
for (const item of items) {
|
|
178
|
+
// Skip excluded directories (e.g. private squads)
|
|
179
|
+
if (SCAFFOLD_EXCLUDES.includes(item.name)) {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
|
|
165
183
|
const sourcePath = path.join(sourceDir, item.name);
|
|
166
184
|
const destPath = path.join(destDir, item.name);
|
|
167
185
|
|
|
@@ -324,6 +342,36 @@ async function rollbackScaffold(rollbackFiles) {
|
|
|
324
342
|
return { removed, errors };
|
|
325
343
|
}
|
|
326
344
|
|
|
345
|
+
/**
|
|
346
|
+
* Merge pro-config.yaml sections into core-config.yaml.
|
|
347
|
+
* Deep merges top-level keys (pro, memory, metrics, integrations, squads).
|
|
348
|
+
*
|
|
349
|
+
* @param {string} targetDir - Project root directory
|
|
350
|
+
* @returns {Promise<boolean>} True if merge was performed
|
|
351
|
+
*/
|
|
352
|
+
async function mergeProConfig(targetDir) {
|
|
353
|
+
const coreConfigPath = path.join(targetDir, '.aios-core', 'core-config.yaml');
|
|
354
|
+
const proConfigPath = path.join(targetDir, '.aios-core', 'pro-config.yaml');
|
|
355
|
+
|
|
356
|
+
if (!await fs.pathExists(proConfigPath) || !await fs.pathExists(coreConfigPath)) {
|
|
357
|
+
return false;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
const coreConfig = yaml.load(await fs.readFile(coreConfigPath, 'utf8')) || {};
|
|
361
|
+
const proConfig = yaml.load(await fs.readFile(proConfigPath, 'utf8')) || {};
|
|
362
|
+
|
|
363
|
+
for (const [key, value] of Object.entries(proConfig)) {
|
|
364
|
+
if (coreConfig[key] && typeof coreConfig[key] === 'object' && typeof value === 'object' && !Array.isArray(value)) {
|
|
365
|
+
coreConfig[key] = { ...coreConfig[key], ...value };
|
|
366
|
+
} else {
|
|
367
|
+
coreConfig[key] = value;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
await fs.writeFile(coreConfigPath, yaml.dump(coreConfig, { lineWidth: -1 }), 'utf8');
|
|
372
|
+
return true;
|
|
373
|
+
}
|
|
374
|
+
|
|
327
375
|
module.exports = {
|
|
328
376
|
scaffoldProContent,
|
|
329
377
|
scaffoldDirectory,
|
|
@@ -331,5 +379,7 @@ module.exports = {
|
|
|
331
379
|
generateProVersionJson,
|
|
332
380
|
generateInstalledManifest,
|
|
333
381
|
rollbackScaffold,
|
|
382
|
+
mergeProConfig,
|
|
334
383
|
SCAFFOLD_ITEMS,
|
|
384
|
+
SCAFFOLD_EXCLUDES,
|
|
335
385
|
};
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# MMOS Architecture Guard - Pre-commit Hook
|
|
3
|
-
# Version: 1.0
|
|
4
|
-
# Purpose: Prevent architectural violations in file placement
|
|
5
|
-
|
|
6
|
-
set -e
|
|
7
|
-
|
|
8
|
-
echo "🛡️ Running MMOS Architecture Guard..."
|
|
9
|
-
|
|
10
|
-
# Colors
|
|
11
|
-
RED='\033[0;31m'
|
|
12
|
-
GREEN='\033[0;32m'
|
|
13
|
-
YELLOW='\033[1;33m'
|
|
14
|
-
NC='\033[0m' # No Color
|
|
15
|
-
|
|
16
|
-
violations=0
|
|
17
|
-
|
|
18
|
-
# Get staged files
|
|
19
|
-
staged_files=$(git diff --cached --name-only --diff-filter=ACM)
|
|
20
|
-
|
|
21
|
-
# Rule 1: No mind-specific folders in docs/mmos/
|
|
22
|
-
echo "Checking Rule 1: No mind-specific folders in docs/mmos/..."
|
|
23
|
-
|
|
24
|
-
if echo "$staged_files" | grep -qE "docs/mmos/(validations|migrations)/[a-z_-]+"; then
|
|
25
|
-
echo -e "${RED}❌ VIOLATION: Mind-specific folders detected in docs/mmos/${NC}"
|
|
26
|
-
echo ""
|
|
27
|
-
echo "Found:"
|
|
28
|
-
echo "$staged_files" | grep -E "docs/mmos/(validations|migrations)/[a-z_-]+" | sed 's/^/ - /'
|
|
29
|
-
echo ""
|
|
30
|
-
echo -e "${YELLOW}Fix: Move to outputs/minds/{slug}/docs/ instead${NC}"
|
|
31
|
-
echo ""
|
|
32
|
-
echo "Examples:"
|
|
33
|
-
echo " ❌ docs/mmos/validations/pedro-valerio-checklist.md"
|
|
34
|
-
echo " ✅ outputs/minds/pedro_valerio/docs/validation-checklist.md"
|
|
35
|
-
echo ""
|
|
36
|
-
violations=$((violations + 1))
|
|
37
|
-
fi
|
|
38
|
-
|
|
39
|
-
# Rule 2: No output files in expansion pack
|
|
40
|
-
echo "Checking Rule 2: No output files in expansion pack..."
|
|
41
|
-
|
|
42
|
-
if echo "$staged_files" | grep -qE "expansion-packs/mmos/(benchmarks|outputs|results)/"; then
|
|
43
|
-
echo -e "${RED}❌ VIOLATION: Output files in expansion pack${NC}"
|
|
44
|
-
echo ""
|
|
45
|
-
echo "Found:"
|
|
46
|
-
echo "$staged_files" | grep -E "expansion-packs/mmos/(benchmarks|outputs|results)/" | sed 's/^/ - /'
|
|
47
|
-
echo ""
|
|
48
|
-
echo -e "${YELLOW}Fix: Move to docs/mmos/qa/benchmarks/ or appropriate output location${NC}"
|
|
49
|
-
echo ""
|
|
50
|
-
violations=$((violations + 1))
|
|
51
|
-
fi
|
|
52
|
-
|
|
53
|
-
# Rule 3: Check for common naming violations
|
|
54
|
-
echo "Checking Rule 3: Mind-specific files should be in outputs/minds/..."
|
|
55
|
-
|
|
56
|
-
# Check for files with mind names in docs/mmos/ (excluding allowed folders)
|
|
57
|
-
for mind_name in $(ls outputs/minds/ 2>/dev/null | grep -v "^README" || true); do
|
|
58
|
-
if echo "$staged_files" | grep -qE "docs/mmos/.*${mind_name}"; then
|
|
59
|
-
# Exclude allowed locations (reports can mention minds)
|
|
60
|
-
if ! echo "$staged_files" | grep -qE "docs/mmos/(reports|architecture)/"; then
|
|
61
|
-
echo -e "${YELLOW}⚠️ WARNING: File containing mind name '$mind_name' in docs/mmos/${NC}"
|
|
62
|
-
echo "$staged_files" | grep -E "docs/mmos/.*${mind_name}" | sed 's/^/ - /'
|
|
63
|
-
echo ""
|
|
64
|
-
echo "Verify this is system-level documentation, not mind-specific"
|
|
65
|
-
echo ""
|
|
66
|
-
fi
|
|
67
|
-
fi
|
|
68
|
-
done
|
|
69
|
-
|
|
70
|
-
# Rule 4: Verify outputs/minds/{slug}/ structure
|
|
71
|
-
echo "Checking Rule 4: outputs/minds/{slug}/ structure..."
|
|
72
|
-
|
|
73
|
-
if echo "$staged_files" | grep -qE "outputs/minds/[^/]+/[^/]+\.(md|yaml|json)$"; then
|
|
74
|
-
echo -e "${YELLOW}⚠️ WARNING: Files in outputs/minds/{slug}/ root detected${NC}"
|
|
75
|
-
echo ""
|
|
76
|
-
echo "Found:"
|
|
77
|
-
echo "$staged_files" | grep -E "outputs/minds/[^/]+/[^/]+\.(md|yaml|json)$" | sed 's/^/ - /'
|
|
78
|
-
echo ""
|
|
79
|
-
echo "Pipeline outputs should be in subfolders:"
|
|
80
|
-
echo " - analysis/, synthesis/, implementation/, system_prompts/, kb/"
|
|
81
|
-
echo " - Process docs should be in docs/"
|
|
82
|
-
echo " - Logs should be in logs/"
|
|
83
|
-
echo ""
|
|
84
|
-
fi
|
|
85
|
-
|
|
86
|
-
# Final verdict
|
|
87
|
-
echo ""
|
|
88
|
-
if [ $violations -gt 0 ]; then
|
|
89
|
-
echo -e "${RED}❌ COMMIT REJECTED: $violations architectural violation(s) found${NC}"
|
|
90
|
-
echo ""
|
|
91
|
-
echo "Review:"
|
|
92
|
-
echo " - docs/mmos/ARCHITECTURE_RULES.md"
|
|
93
|
-
echo " - .aios-core/checklists/mmos-architecture-guard.md"
|
|
94
|
-
echo ""
|
|
95
|
-
exit 1
|
|
96
|
-
else
|
|
97
|
-
echo -e "${GREEN}✅ Architecture guard passed${NC}"
|
|
98
|
-
exit 0
|
|
99
|
-
fi
|