loadouts 0.2.3 → 0.3.0
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/bundled/embedded/opencode/loadouts-runtime.tsx +14461 -0
- package/bundled/embedded/pi/loadouts-runtime.ts +14638 -0
- package/bundled/extensions/loadouts-runtime/index.ts +14638 -0
- package/bundled/extensions/loadouts-runtime/package.json +6 -0
- package/bundled/loadouts/opencode-runtime.yaml +7 -0
- package/bundled/loadouts/pi-runtime.yaml +5 -0
- package/bundled/opencode/commands/loadouts.md +3 -0
- package/bundled/opencode/plugins/loadouts-runtime-tui.tsx +14461 -0
- package/bundled/opencode/plugins/loadouts-runtime.ts +533 -0
- package/bundled/opencode/tui.jsonc +5 -0
- 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 +232 -0
- package/dist/builtins/agent-transforms.js.map +1 -0
- package/dist/builtins/index.d.ts.map +1 -1
- package/dist/builtins/index.js +13 -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/kinds/extension-dir.d.ts +3 -0
- package/dist/builtins/kinds/extension-dir.d.ts.map +1 -0
- package/dist/builtins/kinds/extension-dir.js +8 -0
- package/dist/builtins/kinds/extension-dir.js.map +1 -0
- package/dist/builtins/kinds/opencode-command.d.ts +3 -0
- package/dist/builtins/kinds/opencode-command.d.ts.map +1 -0
- package/dist/builtins/kinds/opencode-command.js +8 -0
- package/dist/builtins/kinds/opencode-command.js.map +1 -0
- package/dist/builtins/kinds/opencode-plugin.js +1 -1
- package/dist/builtins/kinds/opencode-plugin.js.map +1 -1
- package/dist/builtins/kinds/opencode-tui-config.d.ts +3 -0
- package/dist/builtins/kinds/opencode-tui-config.d.ts.map +1 -0
- package/dist/builtins/kinds/opencode-tui-config.js +8 -0
- package/dist/builtins/kinds/opencode-tui-config.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 +16 -0
- package/dist/builtins/tools/opencode.js.map +1 -1
- package/dist/builtins/tools/pi.d.ts.map +1 -1
- package/dist/builtins/tools/pi.js +2 -1
- package/dist/builtins/tools/pi.js.map +1 -1
- package/dist/cli/commands/activate.d.ts.map +1 -1
- package/dist/cli/commands/activate.js +9 -0
- package/dist/cli/commands/activate.js.map +1 -1
- package/dist/cli/commands/diff.d.ts +10 -0
- package/dist/cli/commands/diff.d.ts.map +1 -1
- package/dist/cli/commands/diff.js +71 -30
- package/dist/cli/commands/diff.js.map +1 -1
- package/dist/cli/commands/docs.d.ts.map +1 -1
- package/dist/cli/commands/docs.js +2 -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/info.d.ts +10 -0
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +45 -1
- package/dist/cli/commands/info.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/list.d.ts +18 -0
- package/dist/cli/commands/list.d.ts.map +1 -1
- package/dist/cli/commands/list.js +27 -0
- package/dist/cli/commands/list.js.map +1 -1
- 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/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/commands/status.d.ts +10 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +100 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/sync.d.ts.map +1 -1
- package/dist/cli/commands/sync.js +6 -0
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/tui.d.ts +3 -0
- package/dist/cli/commands/tui.d.ts.map +1 -0
- package/dist/cli/commands/tui.js +20 -0
- package/dist/cli/commands/tui.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +6 -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 +62 -13
- package/dist/core/render.js.map +1 -1
- package/dist/core/resolve.d.ts +18 -2
- 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/core/types.d.ts.map +1 -1
- package/dist/integrations/opencode-runtime/bridge.d.ts +17 -0
- package/dist/integrations/opencode-runtime/bridge.d.ts.map +1 -0
- package/dist/integrations/opencode-runtime/bridge.js +60 -0
- package/dist/integrations/opencode-runtime/bridge.js.map +1 -0
- package/dist/integrations/opencode-runtime/command.d.ts +4 -0
- package/dist/integrations/opencode-runtime/command.d.ts.map +1 -0
- package/dist/integrations/opencode-runtime/command.js +200 -0
- package/dist/integrations/opencode-runtime/command.js.map +1 -0
- package/dist/integrations/opencode-runtime/index.d.ts +6 -0
- package/dist/integrations/opencode-runtime/index.d.ts.map +1 -0
- package/dist/integrations/opencode-runtime/index.js +5 -0
- package/dist/integrations/opencode-runtime/index.js.map +1 -0
- package/dist/integrations/opencode-runtime/plugin.d.ts +59 -0
- package/dist/integrations/opencode-runtime/plugin.d.ts.map +1 -0
- package/dist/integrations/opencode-runtime/plugin.js +238 -0
- package/dist/integrations/opencode-runtime/plugin.js.map +1 -0
- package/dist/integrations/opencode-runtime/state.d.ts +8 -0
- package/dist/integrations/opencode-runtime/state.d.ts.map +1 -0
- package/dist/integrations/opencode-runtime/state.js +27 -0
- package/dist/integrations/opencode-runtime/state.js.map +1 -0
- package/dist/integrations/opencode-runtime/types.d.ts +38 -0
- package/dist/integrations/opencode-runtime/types.d.ts.map +1 -0
- package/dist/integrations/opencode-runtime/types.js +2 -0
- package/dist/integrations/opencode-runtime/types.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 +4 -0
- package/dist/lib/gitignore.js.map +1 -1
- package/dist/tui/core/actions.d.ts +9 -0
- package/dist/tui/core/actions.d.ts.map +1 -0
- package/dist/tui/core/actions.js +70 -0
- package/dist/tui/core/actions.js.map +1 -0
- package/dist/tui/core/data.d.ts +41 -0
- package/dist/tui/core/data.d.ts.map +1 -0
- package/dist/tui/core/data.js +150 -0
- package/dist/tui/core/data.js.map +1 -0
- package/dist/tui/core/host.d.ts +21 -0
- package/dist/tui/core/host.d.ts.map +1 -0
- package/dist/tui/core/host.js +2 -0
- package/dist/tui/core/host.js.map +1 -0
- package/dist/tui/core/intent.d.ts +80 -0
- package/dist/tui/core/intent.d.ts.map +1 -0
- package/dist/tui/core/intent.js +2 -0
- package/dist/tui/core/intent.js.map +1 -0
- package/dist/tui/core/keymap.d.ts +15 -0
- package/dist/tui/core/keymap.d.ts.map +1 -0
- package/dist/tui/core/keymap.js +36 -0
- package/dist/tui/core/keymap.js.map +1 -0
- package/dist/tui/core/model.d.ts +53 -0
- package/dist/tui/core/model.d.ts.map +1 -0
- package/dist/tui/core/model.js +33 -0
- package/dist/tui/core/model.js.map +1 -0
- package/dist/tui/core/theme.d.ts +15 -0
- package/dist/tui/core/theme.d.ts.map +1 -0
- package/dist/tui/core/theme.js +11 -0
- package/dist/tui/core/theme.js.map +1 -0
- package/dist/tui/core/update.d.ts +8 -0
- package/dist/tui/core/update.d.ts.map +1 -0
- package/dist/tui/core/update.js +192 -0
- package/dist/tui/core/update.js.map +1 -0
- package/dist/tui/core/view.d.ts +4 -0
- package/dist/tui/core/view.d.ts.map +1 -0
- package/dist/tui/core/view.js +150 -0
- package/dist/tui/core/view.js.map +1 -0
- package/dist/tui/core/viewspec.d.ts +44 -0
- package/dist/tui/core/viewspec.d.ts.map +1 -0
- package/dist/tui/core/viewspec.js +2 -0
- package/dist/tui/core/viewspec.js.map +1 -0
- package/dist/tui/hosts/_probe/embed-entry.d.ts +5 -0
- package/dist/tui/hosts/_probe/embed-entry.d.ts.map +1 -0
- package/dist/tui/hosts/_probe/embed-entry.js +8 -0
- package/dist/tui/hosts/_probe/embed-entry.js.map +1 -0
- package/dist/tui/hosts/pi/embed-entry.d.ts +3 -0
- package/dist/tui/hosts/pi/embed-entry.d.ts.map +1 -0
- package/dist/tui/hosts/pi/embed-entry.js +219 -0
- package/dist/tui/hosts/pi/embed-entry.js.map +1 -0
- package/dist/tui/hosts/pi/inject.d.ts +32 -0
- package/dist/tui/hosts/pi/inject.d.ts.map +1 -0
- package/dist/tui/hosts/pi/inject.js +53 -0
- package/dist/tui/hosts/pi/inject.js.map +1 -0
- package/dist/tui/hosts/standalone.d.ts +2 -0
- package/dist/tui/hosts/standalone.d.ts.map +1 -0
- package/dist/tui/hosts/standalone.js +145 -0
- package/dist/tui/hosts/standalone.js.map +1 -0
- package/dist/tui/skins/pi-tui/input.d.ts +5 -0
- package/dist/tui/skins/pi-tui/input.d.ts.map +1 -0
- package/dist/tui/skins/pi-tui/input.js +38 -0
- package/dist/tui/skins/pi-tui/input.js.map +1 -0
- package/dist/tui/skins/pi-tui/pi-theme-adapter.d.ts +4 -0
- package/dist/tui/skins/pi-tui/pi-theme-adapter.d.ts.map +1 -0
- package/dist/tui/skins/pi-tui/pi-theme-adapter.js +27 -0
- package/dist/tui/skins/pi-tui/pi-theme-adapter.js.map +1 -0
- package/dist/tui/skins/pi-tui/render.d.ts +35 -0
- package/dist/tui/skins/pi-tui/render.d.ts.map +1 -0
- package/dist/tui/skins/pi-tui/render.js +154 -0
- package/dist/tui/skins/pi-tui/render.js.map +1 -0
- package/dist/tui/skins/pi-tui/theme.d.ts +10 -0
- package/dist/tui/skins/pi-tui/theme.d.ts.map +1 -0
- package/dist/tui/skins/pi-tui/theme.js +58 -0
- package/dist/tui/skins/pi-tui/theme.js.map +1 -0
- package/docs/authoring.md +119 -2
- package/docs/commands.md +34 -0
- package/docs/compatibility.md +15 -8
- package/docs/concepts.md +10 -7
- package/docs/examples/opencode-runtime-plugin.ts +143 -0
- package/docs/index.md +1 -0
- package/docs/runtime.md +107 -0
- package/docs/troubleshooting.md +18 -1
- package/docs/tui-architecture.md +501 -0
- package/package.json +11 -2
|
@@ -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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"}
|
|
@@ -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":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import type { RuntimeBundle } from "../../core/runtime.js";
|
|
3
|
+
import type { Scope } from "../../core/types.js";
|
|
4
|
+
interface RuntimeOptions {
|
|
5
|
+
tool?: string;
|
|
6
|
+
json?: boolean;
|
|
7
|
+
systemBlock?: boolean;
|
|
8
|
+
local?: boolean;
|
|
9
|
+
global?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface RuntimeCompileResult {
|
|
12
|
+
bundle: RuntimeBundle;
|
|
13
|
+
loadoutNames: string[];
|
|
14
|
+
sourceWarnings: string[];
|
|
15
|
+
scope: Scope;
|
|
16
|
+
}
|
|
17
|
+
export declare function runRuntime(names: string[], options: RuntimeOptions, cwd?: string): Promise<RuntimeCompileResult>;
|
|
18
|
+
export declare function runtimeSystemBlock(bundle: RuntimeBundle): string;
|
|
19
|
+
export declare const runtimeCommand: Command;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAQ,MAAM,qBAAqB,CAAC;AAEvD,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;CACd;AAoCD,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,cAAc,EACvB,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CAc/B;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAEhE;AA6BD,eAAO,MAAM,cAAc,SAwBvB,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { getContext } from "../../core/discovery.js";
|
|
3
|
+
import { loadResolvedLoadouts } from "../../core/resolve.js";
|
|
4
|
+
import { compileRuntimeBundle, renderRuntimeSystemBlock } from "../../core/runtime.js";
|
|
5
|
+
import { registry } from "../../core/registry.js";
|
|
6
|
+
import { requireScopeForName, resolveScopes } from "../../core/scope.js";
|
|
7
|
+
import { heading, keyValue, list, log } from "../../lib/output.js";
|
|
8
|
+
function normalizeToolName(tool) {
|
|
9
|
+
const normalized = tool.trim();
|
|
10
|
+
const toolDef = registry.getTool(normalized);
|
|
11
|
+
if (!toolDef) {
|
|
12
|
+
throw new Error(`Unknown tool: ${tool}`);
|
|
13
|
+
}
|
|
14
|
+
return normalized;
|
|
15
|
+
}
|
|
16
|
+
async function resolveRuntimeScope(names, options, cwd) {
|
|
17
|
+
if (options.local && options.global) {
|
|
18
|
+
throw new Error("Use either --local or --global, not both.");
|
|
19
|
+
}
|
|
20
|
+
if (options.local)
|
|
21
|
+
return "project";
|
|
22
|
+
if (options.global)
|
|
23
|
+
return "global";
|
|
24
|
+
if (names.length > 0) {
|
|
25
|
+
const targetScope = await requireScopeForName(names[0], {}, cwd);
|
|
26
|
+
for (const name of names.slice(1)) {
|
|
27
|
+
const scope = await requireScopeForName(name, {}, cwd);
|
|
28
|
+
if (scope !== targetScope) {
|
|
29
|
+
throw new Error("Loadout names resolve to different scopes. Use --local or --global to choose one scope.");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return targetScope;
|
|
33
|
+
}
|
|
34
|
+
const scopes = await resolveScopes({}, cwd);
|
|
35
|
+
return scopes.includes("project") ? "project" : scopes[0];
|
|
36
|
+
}
|
|
37
|
+
export async function runRuntime(names, options, cwd = process.cwd()) {
|
|
38
|
+
if (options.json && options.systemBlock) {
|
|
39
|
+
throw new Error("Use either --json or --system-block, not both.");
|
|
40
|
+
}
|
|
41
|
+
const tool = normalizeToolName(options.tool || "opencode");
|
|
42
|
+
const scope = await resolveRuntimeScope(names, options, cwd);
|
|
43
|
+
const ctx = await getContext(scope, cwd);
|
|
44
|
+
const { loadouts, loadoutNames, sourceWarnings } = await loadResolvedLoadouts(ctx, names, {
|
|
45
|
+
includeBundled: true,
|
|
46
|
+
});
|
|
47
|
+
const bundle = compileRuntimeBundle(tool, loadouts);
|
|
48
|
+
return { bundle, loadoutNames, sourceWarnings, scope };
|
|
49
|
+
}
|
|
50
|
+
export function runtimeSystemBlock(bundle) {
|
|
51
|
+
return renderRuntimeSystemBlock(bundle);
|
|
52
|
+
}
|
|
53
|
+
function renderRuntimeHuman(result) {
|
|
54
|
+
const { bundle, loadoutNames, scope, sourceWarnings } = result;
|
|
55
|
+
heading(`Runtime bundle (${scope})`);
|
|
56
|
+
keyValue({
|
|
57
|
+
Loadouts: loadoutNames.join(", "),
|
|
58
|
+
Tool: bundle.tool,
|
|
59
|
+
Fingerprint: bundle.fingerprint,
|
|
60
|
+
Injected: `instructions=${bundle.injection.instructions.length}, rules=${bundle.injection.rules.length}, skills=${bundle.injection.skills.length}`,
|
|
61
|
+
});
|
|
62
|
+
log.dim(` Capabilities: mode=${bundle.capabilities.runtimeMode}, modelInjection(instructions=${bundle.capabilities.modelInjection.instructions}, rules=${bundle.capabilities.modelInjection.rules}), skillPathDiscovery=${bundle.capabilities.skillPathDiscovery}, nativeSkillHotSwap=${bundle.capabilities.nativeSkillHotSwap}`);
|
|
63
|
+
if (sourceWarnings.length > 0) {
|
|
64
|
+
console.log();
|
|
65
|
+
log.warn("Source warnings:");
|
|
66
|
+
list(sourceWarnings);
|
|
67
|
+
}
|
|
68
|
+
if (bundle.diagnostics.length > 0) {
|
|
69
|
+
console.log();
|
|
70
|
+
log.warn(`Diagnostics (${bundle.diagnostics.length}):`);
|
|
71
|
+
list(bundle.diagnostics.map((d) => `[${d.code}] ${d.message} (${d.relativePath})`));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export const runtimeCommand = new Command("runtime")
|
|
75
|
+
.description("Compile runtime bundle JSON for a tool")
|
|
76
|
+
.argument("[names...]", "Loadout names (defaults to root default/base)")
|
|
77
|
+
.option("--tool <tool>", "Target tool", "opencode")
|
|
78
|
+
.option("--json", "Output RuntimeBundle JSON only")
|
|
79
|
+
.option("--system-block", "Output renderRuntimeSystemBlock(bundle) only")
|
|
80
|
+
.option("-l, --local", "Project scope only")
|
|
81
|
+
.option("-g, --global", "Global scope only")
|
|
82
|
+
.action(async (names, options) => {
|
|
83
|
+
try {
|
|
84
|
+
const result = await runRuntime(names, options);
|
|
85
|
+
if (options.json) {
|
|
86
|
+
console.log(JSON.stringify(result.bundle, null, 2));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (options.systemBlock) {
|
|
90
|
+
process.stdout.write(runtimeSystemBlock(result.bundle));
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
renderRuntimeHuman(result);
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/cli/commands/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,5 +22,15 @@ import type { CommandContext } from "../../core/types.js";
|
|
|
22
22
|
* Execute status command - unified view of all active loadouts.
|
|
23
23
|
*/
|
|
24
24
|
export declare function executeStatus(contexts: CommandContext[], showReferences: boolean): Promise<boolean>;
|
|
25
|
+
export interface StatusJsonOutput {
|
|
26
|
+
active: string[];
|
|
27
|
+
drift: Array<{
|
|
28
|
+
name: string;
|
|
29
|
+
kind: string;
|
|
30
|
+
path: string;
|
|
31
|
+
reason: string;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
export declare function getStatusJson(contexts: CommandContext[], cwd?: string): Promise<StatusJsonOutput>;
|
|
25
35
|
export declare const statusCommand: Command;
|
|
26
36
|
//# sourceMappingURL=status.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,OAAO,KAAK,EAAE,cAAc,EAAoD,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,OAAO,KAAK,EAAE,cAAc,EAAoD,MAAM,qBAAqB,CAAC;AA4e5G;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,cAAc,EAAE,EAC1B,cAAc,EAAE,OAAO,GACtB,OAAO,CAAC,OAAO,CAAC,CAuClB;AAOD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ;AAMD,wBAAsB,aAAa,CACjC,QAAQ,EAAE,cAAc,EAAE,EAC1B,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAuF3B;AAED,eAAO,MAAM,aAAa,SAwBtB,CAAC"}
|