51 lines
1.7 KiB
JavaScript
51 lines
1.7 KiB
JavaScript
"use strict";
|
|
|
|
const { validateInstance } = require("./schema-validator");
|
|
const { getSkill } = require("./search");
|
|
const { validateManifest } = require("./stack");
|
|
|
|
function composeStack(catalog, input) {
|
|
validateInstance("selection-input.schema.json", input, "AAS_SELECTION_INPUT_INVALID", "invalidInput");
|
|
const targets = input.targets || [{ host: "codex", scope: "project" }];
|
|
const selected = input.skillIds.map((id) => getSkill(catalog, id));
|
|
const profile = {
|
|
goals: [...input.profile.goals],
|
|
...(input.profile.projectType ? { projectType: input.profile.projectType } : {}),
|
|
languages: [...(input.profile.languages || [])],
|
|
frameworks: [...(input.profile.frameworks || [])],
|
|
constraints: [...(input.profile.constraints || [])],
|
|
};
|
|
const manifest = {
|
|
schemaVersion: 2,
|
|
name: input.name || "aas-stack",
|
|
catalog: { package: catalog.package, version: catalog.version, integrity: catalog.digest },
|
|
targets,
|
|
profile,
|
|
skills: input.skillIds.map((id) => ({ id })),
|
|
};
|
|
const validation = validateManifest(manifest);
|
|
if (!validation.ok) {
|
|
const error = new Error(validation.code);
|
|
error.code = validation.code;
|
|
error.category = validation.category;
|
|
error.details = validation.details;
|
|
throw error;
|
|
}
|
|
return {
|
|
ok: true,
|
|
status: "composed",
|
|
catalog: { package: catalog.package, version: catalog.version, digest: catalog.digest },
|
|
selectionSource: "agent",
|
|
selectedSkills: selected.map((skill) => ({
|
|
id: skill.id,
|
|
name: skill.name,
|
|
description: skill.description,
|
|
category: skill.category,
|
|
})),
|
|
manifest,
|
|
manifestDigest: validation.manifestDigest,
|
|
};
|
|
}
|
|
|
|
module.exports = { composeStack };
|