aios-core 4.2.7 ā 4.2.9
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-
|
|
10
|
+
version: 4.2.9
|
|
11
|
+
generated_at: "2026-02-16T15:01:11.763Z"
|
|
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.9",
|
|
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
|
};
|
|
@@ -710,10 +710,12 @@ async function runWizard(options = {}) {
|
|
|
710
710
|
const isCI = process.env.CI === 'true' || !process.stdout.isTTY;
|
|
711
711
|
const hasProKey = !!process.env.AIOS_PRO_KEY;
|
|
712
712
|
|
|
713
|
+
const proOptions = { targetDir: process.cwd() };
|
|
714
|
+
|
|
713
715
|
if (isCI && hasProKey) {
|
|
714
716
|
// CI mode: auto-run if AIOS_PRO_KEY is set
|
|
715
717
|
console.log('\nš Pro license key detected, running Pro setup...');
|
|
716
|
-
const proResult = await runProWizard({ quiet: true });
|
|
718
|
+
const proResult = await runProWizard({ ...proOptions, quiet: true });
|
|
717
719
|
answers.proInstalled = proResult.success;
|
|
718
720
|
answers.proResult = proResult;
|
|
719
721
|
} else if (!isCI && !options.quiet) {
|
|
@@ -728,15 +730,19 @@ async function runWizard(options = {}) {
|
|
|
728
730
|
]);
|
|
729
731
|
|
|
730
732
|
if (hasPro) {
|
|
731
|
-
const proResult = await runProWizard();
|
|
733
|
+
const proResult = await runProWizard(proOptions);
|
|
732
734
|
answers.proInstalled = proResult.success;
|
|
733
735
|
answers.proResult = proResult;
|
|
736
|
+
|
|
737
|
+
if (!proResult.success && proResult.error) {
|
|
738
|
+
console.error(`\nā ļø Pro installation issue: ${proResult.error}`);
|
|
739
|
+
}
|
|
734
740
|
} else {
|
|
735
741
|
answers.proInstalled = false;
|
|
736
742
|
}
|
|
737
743
|
}
|
|
738
|
-
} catch {
|
|
739
|
-
|
|
744
|
+
} catch (error) {
|
|
745
|
+
console.error(`\nā ļø Pro setup error: ${error.message}`);
|
|
740
746
|
answers.proInstalled = false;
|
|
741
747
|
}
|
|
742
748
|
}
|
|
@@ -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
|