Files
playbook/antigravity-awesome-skills/tools/lib/aas-v1/selection.js
T
2026-07-20 00:03:02 +00:00

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 };