loadouts 0.2.2 → 0.2.5
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/builtins/agent-transforms.d.ts +9 -0
- package/dist/builtins/agent-transforms.d.ts.map +1 -0
- package/dist/builtins/agent-transforms.js +231 -0
- package/dist/builtins/agent-transforms.js.map +1 -0
- package/dist/builtins/index.d.ts.map +1 -1
- package/dist/builtins/index.js +7 -0
- package/dist/builtins/index.js.map +1 -1
- package/dist/builtins/kinds/agent.d.ts +3 -0
- package/dist/builtins/kinds/agent.d.ts.map +1 -0
- package/dist/builtins/kinds/agent.js +8 -0
- package/dist/builtins/kinds/agent.js.map +1 -0
- package/dist/builtins/tools/claude-code.d.ts.map +1 -1
- package/dist/builtins/tools/claude-code.js +7 -1
- package/dist/builtins/tools/claude-code.js.map +1 -1
- package/dist/builtins/tools/codex.d.ts.map +1 -1
- package/dist/builtins/tools/codex.js +10 -1
- package/dist/builtins/tools/codex.js.map +1 -1
- package/dist/builtins/tools/cursor.d.ts.map +1 -1
- package/dist/builtins/tools/cursor.js +7 -1
- package/dist/builtins/tools/cursor.js.map +1 -1
- package/dist/builtins/tools/opencode.d.ts.map +1 -1
- package/dist/builtins/tools/opencode.js +7 -0
- package/dist/builtins/tools/opencode.js.map +1 -1
- package/dist/cli/commands/activate.d.ts.map +1 -1
- package/dist/cli/commands/activate.js +2 -0
- package/dist/cli/commands/activate.js.map +1 -1
- package/dist/cli/commands/add-to.d.ts +13 -0
- package/dist/cli/commands/add-to.d.ts.map +1 -0
- package/dist/cli/commands/add-to.js +56 -0
- package/dist/cli/commands/add-to.js.map +1 -0
- package/dist/cli/commands/docs.d.ts.map +1 -1
- package/dist/cli/commands/docs.js +3 -1
- package/dist/cli/commands/docs.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +10 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +5 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/commands/install.js +15 -3
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/loadout-include.d.ts +29 -0
- package/dist/cli/commands/loadout-include.d.ts.map +1 -0
- package/dist/cli/commands/loadout-include.js +138 -0
- package/dist/cli/commands/loadout-include.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +31 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +223 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/remove-from.d.ts +9 -0
- package/dist/cli/commands/remove-from.d.ts.map +1 -0
- package/dist/cli/commands/remove-from.js +51 -0
- package/dist/cli/commands/remove-from.js.map +1 -0
- package/dist/cli/commands/render-engine.d.ts +1 -0
- package/dist/cli/commands/render-engine.d.ts.map +1 -1
- package/dist/cli/commands/render-engine.js +10 -35
- package/dist/cli/commands/render-engine.js.map +1 -1
- package/dist/cli/commands/runtime.d.ts +21 -0
- package/dist/cli/commands/runtime.d.ts.map +1 -0
- package/dist/cli/commands/runtime.js +100 -0
- package/dist/cli/commands/runtime.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +8 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/agent-migration.d.ts +13 -0
- package/dist/core/agent-migration.d.ts.map +1 -0
- package/dist/core/agent-migration.js +397 -0
- package/dist/core/agent-migration.js.map +1 -0
- package/dist/core/import-discovery.d.ts.map +1 -1
- package/dist/core/import-discovery.js +27 -0
- package/dist/core/import-discovery.js.map +1 -1
- package/dist/core/kindLoader.d.ts +10 -4
- package/dist/core/kindLoader.d.ts.map +1 -1
- package/dist/core/kindLoader.js +22 -10
- package/dist/core/kindLoader.js.map +1 -1
- package/dist/core/registry.d.ts +4 -2
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js.map +1 -1
- package/dist/core/render.d.ts.map +1 -1
- package/dist/core/render.js +14 -6
- package/dist/core/render.js.map +1 -1
- package/dist/core/resolve.d.ts +17 -1
- package/dist/core/resolve.d.ts.map +1 -1
- package/dist/core/resolve.js +50 -27
- package/dist/core/resolve.js.map +1 -1
- package/dist/core/runtime.d.ts +79 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +345 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/lib/artifact-paths.d.ts.map +1 -1
- package/dist/lib/artifact-paths.js +4 -0
- package/dist/lib/artifact-paths.js.map +1 -1
- package/dist/lib/artifact-table.d.ts.map +1 -1
- package/dist/lib/artifact-table.js +13 -1
- package/dist/lib/artifact-table.js.map +1 -1
- package/dist/lib/gitignore.d.ts.map +1 -1
- package/dist/lib/gitignore.js +2 -0
- package/dist/lib/gitignore.js.map +1 -1
- package/docs/authoring.md +81 -4
- package/docs/commands.md +45 -0
- package/docs/compatibility.md +41 -0
- package/docs/concepts.md +8 -7
- package/docs/examples/opencode-runtime-plugin.ts +143 -0
- package/docs/index.md +2 -0
- package/docs/quickstart.md +1 -0
- package/docs/runtime.md +72 -0
- package/package.json +1 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import * as path from "node:path";
|
|
2
|
+
import * as yaml from "yaml";
|
|
3
|
+
import { getContext } from "../../core/discovery.js";
|
|
4
|
+
import { parseLoadoutDefinition } from "../../core/config.js";
|
|
5
|
+
import { registry } from "../../core/registry.js";
|
|
6
|
+
import { requireScopeForName } from "../../core/scope.js";
|
|
7
|
+
import { fileExists, isDirectory, writeFile } from "../../lib/fs.js";
|
|
8
|
+
const LOADOUTS_DIR = "loadouts";
|
|
9
|
+
function toPosix(value) {
|
|
10
|
+
return value.replace(/\\/g, "/");
|
|
11
|
+
}
|
|
12
|
+
function isPathWithin(parentPath, childPath) {
|
|
13
|
+
const rel = path.relative(parentPath, childPath);
|
|
14
|
+
return rel === "" || (!!rel && !rel.startsWith("..") && !path.isAbsolute(rel));
|
|
15
|
+
}
|
|
16
|
+
export function includePathOf(entry) {
|
|
17
|
+
return typeof entry === "string" ? entry : entry.path;
|
|
18
|
+
}
|
|
19
|
+
export function normalizeIncludePath(raw, loadoutRoot) {
|
|
20
|
+
const trimmed = raw.trim();
|
|
21
|
+
if (!trimmed) {
|
|
22
|
+
throw new Error("Artifact path cannot be empty.");
|
|
23
|
+
}
|
|
24
|
+
let includePath;
|
|
25
|
+
if (path.isAbsolute(trimmed)) {
|
|
26
|
+
if (!loadoutRoot) {
|
|
27
|
+
throw new Error(`Absolute artifact path requires a loadout root: ${trimmed}`);
|
|
28
|
+
}
|
|
29
|
+
const resolvedRoot = path.resolve(loadoutRoot);
|
|
30
|
+
const resolvedPath = path.resolve(trimmed);
|
|
31
|
+
if (!isPathWithin(resolvedRoot, resolvedPath)) {
|
|
32
|
+
throw new Error(`Artifact path must be inside ${loadoutRoot}: ${trimmed}`);
|
|
33
|
+
}
|
|
34
|
+
includePath = path.relative(resolvedRoot, resolvedPath);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
includePath = trimmed;
|
|
38
|
+
}
|
|
39
|
+
includePath = toPosix(includePath).replace(/^\.\//, "");
|
|
40
|
+
if (includePath === ".loadouts") {
|
|
41
|
+
throw new Error("Artifact path must point to an artifact inside .loadouts.");
|
|
42
|
+
}
|
|
43
|
+
if (includePath.startsWith(".loadouts/")) {
|
|
44
|
+
includePath = includePath.slice(".loadouts/".length);
|
|
45
|
+
}
|
|
46
|
+
includePath = path.posix.normalize(includePath);
|
|
47
|
+
if (includePath === "." || includePath === "" || includePath === ".." || includePath.startsWith("../")) {
|
|
48
|
+
throw new Error(`Artifact path cannot escape .loadouts: ${raw}`);
|
|
49
|
+
}
|
|
50
|
+
return includePath;
|
|
51
|
+
}
|
|
52
|
+
export function hasInclude(definition, includePath) {
|
|
53
|
+
return definition.include.some((entry) => includePathOf(entry) === includePath);
|
|
54
|
+
}
|
|
55
|
+
export function addIncludes(definition, includes) {
|
|
56
|
+
const result = { changed: [], skipped: [] };
|
|
57
|
+
for (const include of includes) {
|
|
58
|
+
if (hasInclude(definition, include.path)) {
|
|
59
|
+
result.skipped.push({ path: include.path, reason: "already included" });
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
definition.include.push(include.tools ? { path: include.path, tools: include.tools } : include.path);
|
|
63
|
+
result.changed.push(include.path);
|
|
64
|
+
}
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
export function removeIncludes(definition, includePaths) {
|
|
68
|
+
const result = { changed: [], skipped: [] };
|
|
69
|
+
for (const includePath of includePaths) {
|
|
70
|
+
const before = definition.include.length;
|
|
71
|
+
definition.include = definition.include.filter((entry) => includePathOf(entry) !== includePath);
|
|
72
|
+
if (definition.include.length === before) {
|
|
73
|
+
result.skipped.push({ path: includePath, reason: "not included" });
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
result.changed.push(includePath);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
export function parseToolsOption(raw) {
|
|
82
|
+
if (!raw)
|
|
83
|
+
return undefined;
|
|
84
|
+
const tools = [...new Set(raw.split(",").map((tool) => tool.trim()).filter(Boolean))];
|
|
85
|
+
if (tools.length === 0) {
|
|
86
|
+
throw new Error("--tools requires at least one tool name.");
|
|
87
|
+
}
|
|
88
|
+
for (const tool of tools) {
|
|
89
|
+
if (!registry.getTool(tool)) {
|
|
90
|
+
throw new Error(`Unknown tool: ${tool}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return tools;
|
|
94
|
+
}
|
|
95
|
+
export function findLoadoutPath(loadoutRoot, name) {
|
|
96
|
+
const yamlPath = path.join(loadoutRoot, LOADOUTS_DIR, `${name}.yaml`);
|
|
97
|
+
const ymlPath = path.join(loadoutRoot, LOADOUTS_DIR, `${name}.yml`);
|
|
98
|
+
if (fileExists(yamlPath))
|
|
99
|
+
return yamlPath;
|
|
100
|
+
if (fileExists(ymlPath))
|
|
101
|
+
return ymlPath;
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
export async function resolveLoadoutMutationTarget(name, options, cwd = process.cwd()) {
|
|
105
|
+
if (options.local && options.global) {
|
|
106
|
+
throw new Error("Use either --local or --global, not both.");
|
|
107
|
+
}
|
|
108
|
+
const scope = await requireScopeForName(name, options, cwd);
|
|
109
|
+
const ctx = await getContext(scope, cwd);
|
|
110
|
+
const loadoutPath = findLoadoutPath(ctx.configPath, name);
|
|
111
|
+
if (!loadoutPath) {
|
|
112
|
+
throw new Error(`Loadout '${name}' not found in ${scope} scope.`);
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
ctx,
|
|
116
|
+
loadoutPath,
|
|
117
|
+
definition: parseLoadoutDefinition(loadoutPath),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
export function normalizeAndValidateArtifact(raw, loadoutRoot) {
|
|
121
|
+
const includePath = normalizeIncludePath(raw, loadoutRoot);
|
|
122
|
+
const kind = registry.allKinds().find((candidate) => candidate.detect(includePath));
|
|
123
|
+
if (!kind) {
|
|
124
|
+
throw new Error(`Unsupported artifact path: ${includePath}`);
|
|
125
|
+
}
|
|
126
|
+
const artifactPath = path.join(loadoutRoot, includePath);
|
|
127
|
+
const exists = kind.layout === "dir"
|
|
128
|
+
? isDirectory(artifactPath)
|
|
129
|
+
: fileExists(artifactPath) && !isDirectory(artifactPath);
|
|
130
|
+
if (!exists) {
|
|
131
|
+
throw new Error(`Artifact not found: ${includePath}`);
|
|
132
|
+
}
|
|
133
|
+
return { path: includePath };
|
|
134
|
+
}
|
|
135
|
+
export function writeLoadoutDefinition(loadoutPath, definition) {
|
|
136
|
+
writeFile(loadoutPath, yaml.stringify(definition));
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=loadout-include.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadout-include.js","sourceRoot":"","sources":["../../../src/cli/commands/loadout-include.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { type AgentHarness } from "../../core/agent-migration.js";
|
|
3
|
+
import { type ScopeFlags } from "../../core/scope.js";
|
|
4
|
+
import type { CommandContext } from "../../core/types.js";
|
|
5
|
+
export interface MigrateOptions extends ScopeFlags {
|
|
6
|
+
from?: AgentHarness;
|
|
7
|
+
dryRun?: boolean;
|
|
8
|
+
keep?: boolean;
|
|
9
|
+
force?: boolean;
|
|
10
|
+
to?: string;
|
|
11
|
+
}
|
|
12
|
+
interface AgentMigrationCandidate {
|
|
13
|
+
sourcePath: string;
|
|
14
|
+
relativePath: string | null;
|
|
15
|
+
harness: AgentHarness;
|
|
16
|
+
name: string;
|
|
17
|
+
destRelativePath: string;
|
|
18
|
+
destPath: string;
|
|
19
|
+
content: string;
|
|
20
|
+
}
|
|
21
|
+
export interface MigrationResult {
|
|
22
|
+
migrated: AgentMigrationCandidate[];
|
|
23
|
+
skipped: Array<{
|
|
24
|
+
sourcePath: string;
|
|
25
|
+
reason: string;
|
|
26
|
+
}>;
|
|
27
|
+
}
|
|
28
|
+
export declare function runMigrateAgents(ctx: CommandContext, source: string | undefined, options: MigrateOptions): Promise<MigrationResult>;
|
|
29
|
+
export declare const migrateCommand: Command;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAA+C,KAAK,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE/G,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIpF,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,qBAAqB,CAAC;AAE1E,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,UAAU,uBAAuB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,OAAO,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AA4JD,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAiD1B;AAED,eAAO,MAAM,cAAc,SACoC,CAAC"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import * as yaml from "yaml";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import { canonicalizeAgentContent, inferAgentHarness } from "../../core/agent-migration.js";
|
|
6
|
+
import { parseLoadoutDefinition } from "../../core/config.js";
|
|
7
|
+
import { resolveContexts, SCOPE_FLAGS } from "../../core/scope.js";
|
|
8
|
+
import { fileExists, isDirectory, listFiles, readFile, removeFile, walkDir, writeFile } from "../../lib/fs.js";
|
|
9
|
+
import { rebuildAllGitignores } from "../../lib/gitignore.js";
|
|
10
|
+
import { heading, log } from "../../lib/output.js";
|
|
11
|
+
function isAgentFile(filePath) {
|
|
12
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
13
|
+
return ext === ".md" || ext === ".toml";
|
|
14
|
+
}
|
|
15
|
+
function isPathWithin(parentPath, childPath) {
|
|
16
|
+
const rel = path.relative(parentPath, childPath);
|
|
17
|
+
return rel === "" || (!!rel && !rel.startsWith("..") && !path.isAbsolute(rel));
|
|
18
|
+
}
|
|
19
|
+
function toPosix(filePath) {
|
|
20
|
+
return filePath.split(path.sep).join("/");
|
|
21
|
+
}
|
|
22
|
+
function relativeToLoadout(loadoutPath, sourcePath) {
|
|
23
|
+
const rel = path.relative(loadoutPath, sourcePath);
|
|
24
|
+
if (!rel || rel.startsWith("..") || path.isAbsolute(rel))
|
|
25
|
+
return null;
|
|
26
|
+
return toPosix(rel);
|
|
27
|
+
}
|
|
28
|
+
function shouldConsiderPath(relativePath, sourcePath) {
|
|
29
|
+
const normalized = (relativePath ?? sourcePath.replace(/\\/g, "/")).replace(/^\/+/, "");
|
|
30
|
+
return /(^|\/)agents\/[^/]+\.(md|toml)$/i.test(normalized);
|
|
31
|
+
}
|
|
32
|
+
function collectAgentFiles(sourcePath) {
|
|
33
|
+
if (!fileExists(sourcePath))
|
|
34
|
+
return [];
|
|
35
|
+
if (!isDirectory(sourcePath))
|
|
36
|
+
return isAgentFile(sourcePath) ? [sourcePath] : [];
|
|
37
|
+
return walkDir(sourcePath)
|
|
38
|
+
.map((rel) => path.join(sourcePath, rel))
|
|
39
|
+
.filter(isAgentFile);
|
|
40
|
+
}
|
|
41
|
+
function buildCandidate(ctx, sourcePath, options) {
|
|
42
|
+
const relativePath = relativeToLoadout(ctx.configPath, sourcePath);
|
|
43
|
+
if (!shouldConsiderPath(relativePath, sourcePath))
|
|
44
|
+
return null;
|
|
45
|
+
const raw = readFile(sourcePath);
|
|
46
|
+
const harness = options.from ?? inferAgentHarness(sourcePath, raw);
|
|
47
|
+
const canonical = canonicalizeAgentContent(raw, { harness, sourcePath });
|
|
48
|
+
const destRelativePath = `agents/${canonical.name}.md`;
|
|
49
|
+
const destPath = path.join(ctx.configPath, destRelativePath);
|
|
50
|
+
return {
|
|
51
|
+
sourcePath,
|
|
52
|
+
relativePath,
|
|
53
|
+
harness: canonical.harness,
|
|
54
|
+
name: canonical.name,
|
|
55
|
+
destRelativePath,
|
|
56
|
+
destPath,
|
|
57
|
+
content: canonical.content,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function candidateSources(ctx, source) {
|
|
61
|
+
if (source) {
|
|
62
|
+
const sourcePath = path.isAbsolute(source) ? source : path.resolve(process.cwd(), source);
|
|
63
|
+
return collectAgentFiles(sourcePath);
|
|
64
|
+
}
|
|
65
|
+
const roots = [
|
|
66
|
+
path.join(ctx.configPath, "opencode", "agents"),
|
|
67
|
+
path.join(ctx.configPath, "cursor", "agents"),
|
|
68
|
+
path.join(ctx.configPath, "claude-code", "agents"),
|
|
69
|
+
path.join(ctx.configPath, "claude", "agents"),
|
|
70
|
+
path.join(ctx.configPath, "codex", "agents"),
|
|
71
|
+
path.join(ctx.configPath, "agents"),
|
|
72
|
+
];
|
|
73
|
+
return roots.flatMap(collectAgentFiles);
|
|
74
|
+
}
|
|
75
|
+
function sourceToolForInclude(harness) {
|
|
76
|
+
return harness === "canonical" ? undefined : harness;
|
|
77
|
+
}
|
|
78
|
+
function includePath(include) {
|
|
79
|
+
return typeof include === "string" ? include : include.path;
|
|
80
|
+
}
|
|
81
|
+
function includeWithPathAndTools(original, pathValue, harness) {
|
|
82
|
+
const existingTools = typeof original === "string" ? undefined : original.tools;
|
|
83
|
+
const sourceTool = sourceToolForInclude(harness);
|
|
84
|
+
if (existingTools)
|
|
85
|
+
return { path: pathValue, tools: existingTools };
|
|
86
|
+
if (sourceTool)
|
|
87
|
+
return { path: pathValue, tools: [sourceTool] };
|
|
88
|
+
return pathValue;
|
|
89
|
+
}
|
|
90
|
+
function updateLoadoutIncludes(ctx, candidates, options) {
|
|
91
|
+
const loadoutsDir = path.join(ctx.configPath, "loadouts");
|
|
92
|
+
if (!isDirectory(loadoutsDir))
|
|
93
|
+
return [];
|
|
94
|
+
const changed = [];
|
|
95
|
+
const candidateByRelative = new Map(candidates
|
|
96
|
+
.filter((candidate) => candidate.relativePath)
|
|
97
|
+
.map((candidate) => [candidate.relativePath, candidate]));
|
|
98
|
+
if (candidateByRelative.size === 0)
|
|
99
|
+
return [];
|
|
100
|
+
const loadoutFiles = listFiles(loadoutsDir)
|
|
101
|
+
.filter((entry) => entry.endsWith(".yaml") || entry.endsWith(".yml"))
|
|
102
|
+
.filter((entry) => !options.to || entry.replace(/\.ya?ml$/, "") === options.to);
|
|
103
|
+
for (const file of loadoutFiles) {
|
|
104
|
+
const filePath = path.join(loadoutsDir, file);
|
|
105
|
+
const def = parseLoadoutDefinition(filePath);
|
|
106
|
+
let modified = false;
|
|
107
|
+
const seen = new Set();
|
|
108
|
+
const nextIncludes = [];
|
|
109
|
+
for (const entry of def.include) {
|
|
110
|
+
const currentPath = includePath(entry);
|
|
111
|
+
const candidate = candidateByRelative.get(currentPath);
|
|
112
|
+
if (!candidate) {
|
|
113
|
+
const key = `${currentPath}:${JSON.stringify(typeof entry === "string" ? undefined : entry.tools)}`;
|
|
114
|
+
if (!seen.has(key)) {
|
|
115
|
+
seen.add(key);
|
|
116
|
+
nextIncludes.push(entry);
|
|
117
|
+
}
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
const replacement = includeWithPathAndTools(entry, candidate.destRelativePath, candidate.harness);
|
|
121
|
+
const replacementKey = `${candidate.destRelativePath}:${JSON.stringify(typeof replacement === "string" ? undefined : replacement.tools)}`;
|
|
122
|
+
if (!seen.has(replacementKey)) {
|
|
123
|
+
seen.add(replacementKey);
|
|
124
|
+
nextIncludes.push(replacement);
|
|
125
|
+
}
|
|
126
|
+
modified = true;
|
|
127
|
+
}
|
|
128
|
+
if (modified) {
|
|
129
|
+
def.include = nextIncludes;
|
|
130
|
+
if (!options.dryRun)
|
|
131
|
+
writeFile(filePath, yaml.stringify(def));
|
|
132
|
+
changed.push(file);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return changed;
|
|
136
|
+
}
|
|
137
|
+
export async function runMigrateAgents(ctx, source, options) {
|
|
138
|
+
const skipped = [];
|
|
139
|
+
const candidates = candidateSources(ctx, source)
|
|
140
|
+
.map((filePath) => buildCandidate(ctx, filePath, options))
|
|
141
|
+
.filter((candidate) => !!candidate);
|
|
142
|
+
const unique = new Map();
|
|
143
|
+
for (const candidate of candidates) {
|
|
144
|
+
if (!unique.has(candidate.sourcePath))
|
|
145
|
+
unique.set(candidate.sourcePath, candidate);
|
|
146
|
+
}
|
|
147
|
+
const migrated = [];
|
|
148
|
+
for (const candidate of unique.values()) {
|
|
149
|
+
const samePath = path.resolve(candidate.sourcePath) === path.resolve(candidate.destPath);
|
|
150
|
+
if (fileExists(candidate.destPath) && !samePath && !options.force) {
|
|
151
|
+
skipped.push({ sourcePath: candidate.sourcePath, reason: `${candidate.destRelativePath} already exists` });
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
if (!options.dryRun) {
|
|
155
|
+
writeFile(candidate.destPath, candidate.content);
|
|
156
|
+
if (!options.keep && !samePath && isPathWithin(ctx.configPath, candidate.sourcePath)) {
|
|
157
|
+
removeFile(candidate.sourcePath);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
migrated.push(candidate);
|
|
161
|
+
}
|
|
162
|
+
const changedLoadouts = updateLoadoutIncludes(ctx, migrated, options);
|
|
163
|
+
if (!options.dryRun && migrated.length > 0) {
|
|
164
|
+
rebuildAllGitignores(ctx.configPath, ctx.projectRoot, ctx.scope);
|
|
165
|
+
}
|
|
166
|
+
if (migrated.length > 0 || skipped.length > 0) {
|
|
167
|
+
heading(options.dryRun ? "Agent Migration Preview" : "Agent Migration");
|
|
168
|
+
for (const candidate of migrated) {
|
|
169
|
+
const sourceLabel = candidate.relativePath ?? candidate.sourcePath;
|
|
170
|
+
log.success(`${sourceLabel} -> ${candidate.destRelativePath}`);
|
|
171
|
+
log.dim(` source harness: ${candidate.harness}`);
|
|
172
|
+
}
|
|
173
|
+
for (const item of skipped) {
|
|
174
|
+
log.warn(`Skipped ${item.sourcePath}: ${item.reason}`);
|
|
175
|
+
}
|
|
176
|
+
if (changedLoadouts.length > 0) {
|
|
177
|
+
log.dim(` Updated loadouts: ${changedLoadouts.join(", ")}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return { migrated, skipped };
|
|
181
|
+
}
|
|
182
|
+
export const migrateCommand = new Command("migrate")
|
|
183
|
+
.description("Migrate legacy artifacts to canonical formats");
|
|
184
|
+
migrateCommand
|
|
185
|
+
.command("agents")
|
|
186
|
+
.description("Migrate native harness agent definitions to canonical agents")
|
|
187
|
+
.argument("[source]", "Optional agent file or directory to migrate")
|
|
188
|
+
.option(...SCOPE_FLAGS.local)
|
|
189
|
+
.option(...SCOPE_FLAGS.global)
|
|
190
|
+
.option(...SCOPE_FLAGS.all)
|
|
191
|
+
.option("--from <harness>", "Source harness override (opencode, cursor, claude-code, codex)")
|
|
192
|
+
.option("--to <loadout>", "Only update includes in this loadout")
|
|
193
|
+
.option("--dry-run", "Preview migration without writing files")
|
|
194
|
+
.option("--keep", "Keep old files after writing canonical agents")
|
|
195
|
+
.option("--force", "Overwrite existing canonical agents")
|
|
196
|
+
.action(async (source, options) => {
|
|
197
|
+
let contexts = [];
|
|
198
|
+
try {
|
|
199
|
+
({ contexts } = await resolveContexts(options, process.cwd()));
|
|
200
|
+
}
|
|
201
|
+
catch (err) {
|
|
202
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
203
|
+
process.exit(1);
|
|
204
|
+
}
|
|
205
|
+
let totalMigrated = 0;
|
|
206
|
+
let totalSkipped = 0;
|
|
207
|
+
for (const ctx of contexts) {
|
|
208
|
+
const result = await runMigrateAgents(ctx, source, options);
|
|
209
|
+
totalMigrated += result.migrated.length;
|
|
210
|
+
totalSkipped += result.skipped.length;
|
|
211
|
+
}
|
|
212
|
+
if (totalMigrated === 0 && totalSkipped === 0) {
|
|
213
|
+
log.dim("No agent files found to migrate.");
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
console.log();
|
|
217
|
+
const summary = `${totalMigrated} migrated, ${totalSkipped} skipped`;
|
|
218
|
+
if (totalSkipped > 0)
|
|
219
|
+
log.warn(summary);
|
|
220
|
+
else
|
|
221
|
+
log.success(chalk.green(summary));
|
|
222
|
+
});
|
|
223
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/cli/commands/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { type ScopeFlags } from "../../core/scope.js";
|
|
3
|
+
import { type IncludeMutationResult } from "./loadout-include.js";
|
|
4
|
+
export interface RemoveFromResult extends IncludeMutationResult {
|
|
5
|
+
loadout: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function runRemoveFrom(loadout: string, artifacts: string[], options: ScopeFlags, cwd?: string): Promise<RemoveFromResult>;
|
|
8
|
+
export declare const removeFromCommand: Command;
|
|
9
|
+
//# sourceMappingURL=remove-from.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-from.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/remove-from.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAKL,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC7D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,EAAE,UAAU,EACnB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAc3B;AAsBD,eAAO,MAAM,iBAAiB,SAa1B,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { SCOPE_FLAGS } from "../../core/scope.js";
|
|
4
|
+
import { log, heading } from "../../lib/output.js";
|
|
5
|
+
import { normalizeIncludePath, removeIncludes, resolveLoadoutMutationTarget, writeLoadoutDefinition, } from "./loadout-include.js";
|
|
6
|
+
export async function runRemoveFrom(loadout, artifacts, options, cwd = process.cwd()) {
|
|
7
|
+
if (artifacts.length === 0) {
|
|
8
|
+
throw new Error("Provide at least one artifact path.");
|
|
9
|
+
}
|
|
10
|
+
const target = await resolveLoadoutMutationTarget(loadout, options, cwd);
|
|
11
|
+
const includePaths = artifacts.map((artifact) => normalizeIncludePath(artifact, target.ctx.configPath));
|
|
12
|
+
const result = removeIncludes(target.definition, includePaths);
|
|
13
|
+
if (result.changed.length > 0) {
|
|
14
|
+
writeLoadoutDefinition(target.loadoutPath, target.definition);
|
|
15
|
+
}
|
|
16
|
+
return { loadout, ...result };
|
|
17
|
+
}
|
|
18
|
+
function printResult(result) {
|
|
19
|
+
if (result.changed.length === 0) {
|
|
20
|
+
log.dim(`No changes to ${result.loadout}.`);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
heading(`Removed from ${result.loadout}`);
|
|
24
|
+
for (const includePath of result.changed) {
|
|
25
|
+
console.log(chalk.red(`- ${includePath}`));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
for (const skipped of result.skipped) {
|
|
29
|
+
console.log(chalk.dim(`- ${skipped.path} ${skipped.reason}`));
|
|
30
|
+
}
|
|
31
|
+
if (result.changed.length > 0) {
|
|
32
|
+
console.log();
|
|
33
|
+
log.info(`Run ${chalk.cyan("loadouts sync")} to apply changes.`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export const removeFromCommand = new Command("remove-from")
|
|
37
|
+
.description("Remove artifacts from a loadout without deleting files")
|
|
38
|
+
.argument("<loadout>", "Loadout to update")
|
|
39
|
+
.argument("<artifacts...>", "Artifact paths relative to .loadouts/")
|
|
40
|
+
.option(...SCOPE_FLAGS.local)
|
|
41
|
+
.option(...SCOPE_FLAGS.global)
|
|
42
|
+
.action(async (loadout, artifacts, options) => {
|
|
43
|
+
try {
|
|
44
|
+
printResult(await runRemoveFrom(loadout, artifacts, options));
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=remove-from.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-from.js","sourceRoot":"","sources":["../../../src/cli/commands/remove-from.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-engine.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/render-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"render-engine.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/render-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,OAAO,KAAK,EAAE,cAAc,EAAqC,MAAM,qBAAqB,CAAC;AAE7F,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AA+BD;;GAEG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,cAAc,EACnB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CA+HtB"}
|
|
@@ -9,8 +9,7 @@
|
|
|
9
9
|
* - Artifacts as rows, tools as columns
|
|
10
10
|
* - Consistent change indicators (+, ~, -, ✓)
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
13
|
-
import { resolveLoadout, getInstructionItem } from "../../core/resolve.js";
|
|
12
|
+
import { loadResolvedLoadouts } from "../../core/resolve.js";
|
|
14
13
|
import { parseRootConfig } from "../../core/config.js";
|
|
15
14
|
import { planRender, applyMultiPlan, removeManaged } from "../../core/render.js";
|
|
16
15
|
import { loadState, clearState } from "../../core/manifest.js";
|
|
@@ -19,40 +18,16 @@ import { groupOutputsByArtifact, renderChangeTable, renderChangeSummary, renderD
|
|
|
19
18
|
/**
|
|
20
19
|
* Resolve multiple loadouts and their render plans.
|
|
21
20
|
*/
|
|
22
|
-
async function resolveMultipleLoadouts(names, ctx) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (!globalRoot)
|
|
28
|
-
throw new Error("No global loadout found at ~/.config/loadouts");
|
|
29
|
-
// Global scope: global root + any sources it declares + bundled
|
|
30
|
-
const collected = collectRootsWithSources(globalRoot, false, true);
|
|
31
|
-
roots = collected.roots;
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
const discovered = await discoverLoadoutRoots(ctx.projectRoot);
|
|
35
|
-
if (discovered.length === 0) {
|
|
36
|
-
throw new Error("No .loadouts/ directory found. Run 'loadouts init' first.");
|
|
37
|
-
}
|
|
38
|
-
// Project scope: project root + sources + global + bundled
|
|
39
|
-
const collected = collectRootsWithSources(discovered[0], true, true);
|
|
40
|
-
roots = collected.roots;
|
|
41
|
-
}
|
|
42
|
-
const rootConfig = parseRootConfig(ctx.configPath);
|
|
21
|
+
async function resolveMultipleLoadouts(names, ctx, options = {}) {
|
|
22
|
+
const { loadouts } = await loadResolvedLoadouts(ctx, names, {
|
|
23
|
+
includeBundled: true,
|
|
24
|
+
showKindNamespaceNotes: options.showKindNamespaceNotes,
|
|
25
|
+
});
|
|
43
26
|
const results = [];
|
|
44
|
-
for (const
|
|
45
|
-
const loadout = resolveLoadout(name, roots, rootConfig);
|
|
46
|
-
// Auto-inject AGENTS.md if not already in includes
|
|
47
|
-
const alreadyHasInstruction = loadout.items.some((i) => i.relativePath === "AGENTS.md");
|
|
48
|
-
if (!alreadyHasInstruction) {
|
|
49
|
-
const instructionItem = getInstructionItem(ctx.configPath, loadout.tools);
|
|
50
|
-
if (instructionItem)
|
|
51
|
-
loadout.items.push(instructionItem);
|
|
52
|
-
}
|
|
27
|
+
for (const loadout of loadouts) {
|
|
53
28
|
const plan = await planRender(loadout, ctx.projectRoot, ctx.scope, ctx.configPath);
|
|
54
29
|
if (plan.errors.length > 0) {
|
|
55
|
-
log.error(`Errors planning "${name}":`);
|
|
30
|
+
log.error(`Errors planning "${loadout.name}":`);
|
|
56
31
|
list(plan.errors);
|
|
57
32
|
process.exit(1);
|
|
58
33
|
}
|
|
@@ -84,7 +59,7 @@ export async function clearAllOutputs(ctx, options = {}) {
|
|
|
84
59
|
* set should be (see policy.ts).
|
|
85
60
|
*/
|
|
86
61
|
export async function applyTargetSet(ctx, targets, options = {}) {
|
|
87
|
-
const { dryRun, verb = "Applied" } = options;
|
|
62
|
+
const { dryRun, verb = "Applied", showKindNamespaceNotes } = options;
|
|
88
63
|
// Empty target set means clear — delegate to clearAllOutputs
|
|
89
64
|
if (targets.length === 0) {
|
|
90
65
|
await clearAllOutputs(ctx, { dryRun });
|
|
@@ -93,7 +68,7 @@ export async function applyTargetSet(ctx, targets, options = {}) {
|
|
|
93
68
|
// Resolve all target loadouts
|
|
94
69
|
let plans;
|
|
95
70
|
try {
|
|
96
|
-
plans = await resolveMultipleLoadouts(targets, ctx);
|
|
71
|
+
plans = await resolveMultipleLoadouts(targets, ctx, { showKindNamespaceNotes });
|
|
97
72
|
}
|
|
98
73
|
catch (err) {
|
|
99
74
|
log.error(err instanceof Error ? err.message : String(err));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-engine.js","sourceRoot":"","sources":["../../../src/cli/commands/render-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"render-engine.js","sourceRoot":"","sources":["../../../src/cli/commands/render-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,GAEpB,MAAM,6BAA6B,CAAC;AAerC;;GAEG;AACH,KAAK,UAAU,uBAAuB,CACpC,KAAe,EACf,GAAmB,EACnB,UAAgD,EAAE;IAElD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE;QAC1D,cAAc,EAAE,IAAI;QACpB,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;KACvD,CAAC,CAAC;IACH,MAAM,OAAO,GAA0D,EAAE,CAAC;IAE1E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QAEnF,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,KAAK,CAAC,oBAAoB,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAmB,EACnB,UAAgC,EAAE;IAElC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;QACzC,OAAO,CAAC,6BAA6B,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;QACnD,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,2BAA2B,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACpF,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC3B,OAAO,CAAC,yBAAyB,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;IAC/C,GAAG,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,kBAAkB,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAmB,EACnB,OAAiB,EACjB,UAAwB,EAAE;IAE1B,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,SAAS,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC;IAErE,6DAA6D;IAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,eAAe,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAC5C,CAAC;IAED,8BAA8B;IAC9B,IAAI,KAAK,CAAC;IACV,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAClF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9E,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAC7C,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,yBAAyB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;QAEtE,mEAAmE;QACnE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAQ,CAAC;QAChC,MAAM,OAAO,GAGR,EAAE,CAAC;QAER,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;YAC7B,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAClD,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAEhD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,gDAAgD,CAAC,CAAC;YAChF,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC5B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAC1C,CAAC;IAED,iBAAiB;IACjB,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,KAAK,EACL,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,WAAW,EACf,UAAU,CAAC,IAAI,EACf,GAAG,CAAC,KAAK,CACV,CAAC;IAEF,OAAO,CAAC,GAAG,IAAI,cAAc,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;IAElE,gDAAgD;IAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAQ,CAAC;IAEhC,MAAM,OAAO,GAGR,EAAE,CAAC;IAER,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;QAC7B,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,MAAM,GAAe,WAAW,CAAC;YACrC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;gBAAE,MAAM,GAAG,OAAO,CAAC;iBAC/C,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;gBAAE,MAAM,GAAG,SAAS,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,4EAA4E;IAC5E,qCAAqC;IAErC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAElD,uCAAuC;IACvC,MAAM,YAAY,GAChB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM;QAC7B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;QAC3B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;IAEhC,IAAI,YAAY,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,mBAAmB,CACjB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAC3B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAC7B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAC9B,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,uCAAuC,CAAC,CAAC;QACvE,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAC5C,CAAC;QACD,GAAG,CAAC,GAAG,CACL,gFAAgF,CACjF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;AAC9D,CAAC"}
|