@tacuchi/agent-workflow-cli 5.0.1 → 5.2.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/dist/application/checkpoint/markdown.d.ts +3 -0
- package/dist/application/checkpoint/markdown.d.ts.map +1 -0
- package/dist/application/checkpoint/markdown.js +86 -0
- package/dist/application/checkpoint/markdown.js.map +1 -0
- package/dist/application/checkpoint/state-reader.d.ts +28 -0
- package/dist/application/checkpoint/state-reader.d.ts.map +1 -0
- package/dist/application/checkpoint/state-reader.js +151 -0
- package/dist/application/checkpoint/state-reader.js.map +1 -0
- package/dist/application/checkpoint-write-service.d.ts.map +1 -1
- package/dist/application/checkpoint-write-service.js +2 -235
- package/dist/application/checkpoint-write-service.js.map +1 -1
- package/dist/application/dev-graduate-service.d.ts +2 -48
- package/dist/application/dev-graduate-service.d.ts.map +1 -1
- package/dist/application/dev-graduate-service.js +1 -226
- package/dist/application/dev-graduate-service.js.map +1 -1
- package/dist/application/graduate/handlers.d.ts +61 -0
- package/dist/application/graduate/handlers.d.ts.map +1 -0
- package/dist/application/graduate/handlers.js +135 -0
- package/dist/application/graduate/handlers.js.map +1 -0
- package/dist/application/graduate/helpers.d.ts +13 -0
- package/dist/application/graduate/helpers.d.ts.map +1 -0
- package/dist/application/graduate/helpers.js +82 -0
- package/dist/application/graduate/helpers.js.map +1 -0
- package/dist/application/multiroot/claude.d.ts +26 -0
- package/dist/application/multiroot/claude.d.ts.map +1 -0
- package/dist/application/multiroot/claude.js +125 -0
- package/dist/application/multiroot/claude.js.map +1 -0
- package/dist/application/multiroot/codex.d.ts +36 -0
- package/dist/application/multiroot/codex.d.ts.map +1 -0
- package/dist/application/multiroot/codex.js +221 -0
- package/dist/application/multiroot/codex.js.map +1 -0
- package/dist/application/multiroot/paths.d.ts +6 -0
- package/dist/application/multiroot/paths.d.ts.map +1 -0
- package/dist/application/multiroot/paths.js +23 -0
- package/dist/application/multiroot/paths.js.map +1 -0
- package/dist/application/multiroot-service.d.ts +2 -52
- package/dist/application/multiroot-service.d.ts.map +1 -1
- package/dist/application/multiroot-service.js +2 -364
- package/dist/application/multiroot-service.js.map +1 -1
- package/dist/application/plugin-doctor/common.d.ts +27 -0
- package/dist/application/plugin-doctor/common.d.ts.map +1 -0
- package/dist/application/plugin-doctor/common.js +28 -0
- package/dist/application/plugin-doctor/common.js.map +1 -0
- package/dist/application/plugin-doctor/exported-skills.d.ts +8 -0
- package/dist/application/plugin-doctor/exported-skills.d.ts.map +1 -0
- package/dist/application/plugin-doctor/exported-skills.js +128 -0
- package/dist/application/plugin-doctor/exported-skills.js.map +1 -0
- package/dist/application/plugin-doctor/hooks.d.ts +8 -0
- package/dist/application/plugin-doctor/hooks.d.ts.map +1 -0
- package/dist/application/plugin-doctor/hooks.js +53 -0
- package/dist/application/plugin-doctor/hooks.js.map +1 -0
- package/dist/application/plugin-doctor/manifests.d.ts +11 -0
- package/dist/application/plugin-doctor/manifests.d.ts.map +1 -0
- package/dist/application/plugin-doctor/manifests.js +83 -0
- package/dist/application/plugin-doctor/manifests.js.map +1 -0
- package/dist/application/plugin-doctor/mcp.d.ts +10 -0
- package/dist/application/plugin-doctor/mcp.d.ts.map +1 -0
- package/dist/application/plugin-doctor/mcp.js +58 -0
- package/dist/application/plugin-doctor/mcp.js.map +1 -0
- package/dist/application/plugin-doctor/skills.d.ts +16 -0
- package/dist/application/plugin-doctor/skills.d.ts.map +1 -0
- package/dist/application/plugin-doctor/skills.js +167 -0
- package/dist/application/plugin-doctor/skills.js.map +1 -0
- package/dist/application/plugin-doctor-service.d.ts +2 -23
- package/dist/application/plugin-doctor-service.d.ts.map +1 -1
- package/dist/application/plugin-doctor-service.js +10 -514
- package/dist/application/plugin-doctor-service.js.map +1 -1
- package/dist/application/release-data/artifacts.d.ts +32 -0
- package/dist/application/release-data/artifacts.d.ts.map +1 -0
- package/dist/application/release-data/artifacts.js +104 -0
- package/dist/application/release-data/artifacts.js.map +1 -0
- package/dist/application/release-data/bundles.d.ts +15 -0
- package/dist/application/release-data/bundles.d.ts.map +1 -0
- package/dist/application/release-data/bundles.js +42 -0
- package/dist/application/release-data/bundles.js.map +1 -0
- package/dist/application/release-data/common.d.ts +11 -0
- package/dist/application/release-data/common.d.ts.map +1 -0
- package/dist/application/release-data/common.js +61 -0
- package/dist/application/release-data/common.js.map +1 -0
- package/dist/application/release-data/sessions.d.ts +19 -0
- package/dist/application/release-data/sessions.d.ts.map +1 -0
- package/dist/application/release-data/sessions.js +50 -0
- package/dist/application/release-data/sessions.js.map +1 -0
- package/dist/application/release-data-service.d.ts +8 -50
- package/dist/application/release-data-service.d.ts.map +1 -1
- package/dist/application/release-data-service.js +14 -252
- package/dist/application/release-data-service.js.map +1 -1
- package/dist/application/render/history-row.d.ts.map +1 -1
- package/dist/application/render/history-row.js +2 -0
- package/dist/application/render/history-row.js.map +1 -1
- package/dist/application/session-close-service.d.ts +1 -0
- package/dist/application/session-close-service.d.ts.map +1 -1
- package/dist/application/session-close-service.js +1 -0
- package/dist/application/session-close-service.js.map +1 -1
- package/dist/cli/commands/auto-plan-decide.d.ts +3 -0
- package/dist/cli/commands/auto-plan-decide.d.ts.map +1 -0
- package/dist/cli/commands/auto-plan-decide.js +19 -0
- package/dist/cli/commands/auto-plan-decide.js.map +1 -0
- package/dist/cli/commands/bootstrap-dsn.d.ts +3 -0
- package/dist/cli/commands/bootstrap-dsn.d.ts.map +1 -0
- package/dist/cli/commands/bootstrap-dsn.js +20 -0
- package/dist/cli/commands/bootstrap-dsn.js.map +1 -0
- package/dist/cli/commands/check-branch.d.ts +3 -0
- package/dist/cli/commands/check-branch.d.ts.map +1 -0
- package/dist/cli/commands/check-branch.js +30 -0
- package/dist/cli/commands/check-branch.js.map +1 -0
- package/dist/cli/commands/checkpoint-read.d.ts +3 -0
- package/dist/cli/commands/checkpoint-read.d.ts.map +1 -0
- package/dist/cli/commands/checkpoint-read.js +19 -0
- package/dist/cli/commands/checkpoint-read.js.map +1 -0
- package/dist/cli/commands/code-scan.d.ts +3 -0
- package/dist/cli/commands/code-scan.d.ts.map +1 -0
- package/dist/cli/commands/code-scan.js +74 -0
- package/dist/cli/commands/code-scan.js.map +1 -0
- package/dist/cli/commands/compress-checkpoint.d.ts +3 -0
- package/dist/cli/commands/compress-checkpoint.d.ts.map +1 -0
- package/dist/cli/commands/compress-checkpoint.js +28 -0
- package/dist/cli/commands/compress-checkpoint.js.map +1 -0
- package/dist/cli/commands/graduate.d.ts +3 -0
- package/dist/cli/commands/graduate.d.ts.map +1 -0
- package/dist/cli/commands/graduate.js +36 -0
- package/dist/cli/commands/graduate.js.map +1 -0
- package/dist/cli/commands/hub-init.d.ts.map +1 -1
- package/dist/cli/commands/hub-init.js +13 -43
- package/dist/cli/commands/hub-init.js.map +1 -1
- package/dist/cli/commands/phase-detect.d.ts +3 -0
- package/dist/cli/commands/phase-detect.d.ts.map +1 -0
- package/dist/cli/commands/phase-detect.js +19 -0
- package/dist/cli/commands/phase-detect.js.map +1 -0
- package/dist/cli/commands/phase-next.d.ts +3 -0
- package/dist/cli/commands/phase-next.d.ts.map +1 -0
- package/dist/cli/commands/phase-next.js +23 -0
- package/dist/cli/commands/phase-next.js.map +1 -0
- package/dist/cli/commands/project-md-upsert.d.ts.map +1 -1
- package/dist/cli/commands/project-md-upsert.js +2 -49
- package/dist/cli/commands/project-md-upsert.js.map +1 -1
- package/dist/cli/commands/resume-summary.d.ts +3 -0
- package/dist/cli/commands/resume-summary.d.ts.map +1 -0
- package/dist/cli/commands/resume-summary.js +10 -0
- package/dist/cli/commands/resume-summary.js.map +1 -0
- package/dist/cli/commands/session-close.d.ts.map +1 -1
- package/dist/cli/commands/session-close.js +3 -0
- package/dist/cli/commands/session-close.js.map +1 -1
- package/dist/cli/commands/skill-index.d.ts +3 -0
- package/dist/cli/commands/skill-index.d.ts.map +1 -0
- package/dist/cli/commands/skill-index.js +20 -0
- package/dist/cli/commands/skill-index.js.map +1 -0
- package/dist/cli/commands/sources.d.ts +3 -0
- package/dist/cli/commands/sources.d.ts.map +1 -0
- package/dist/cli/commands/sources.js +30 -0
- package/dist/cli/commands/sources.js.map +1 -0
- package/dist/cli/commands/specialty-choose.d.ts +3 -0
- package/dist/cli/commands/specialty-choose.d.ts.map +1 -0
- package/dist/cli/commands/specialty-choose.js +30 -0
- package/dist/cli/commands/specialty-choose.js.map +1 -0
- package/dist/cli/commands/stack.d.ts +3 -0
- package/dist/cli/commands/stack.d.ts.map +1 -0
- package/dist/cli/commands/stack.js +11 -0
- package/dist/cli/commands/stack.js.map +1 -0
- package/dist/cli/commands/topic-change-check.d.ts +3 -0
- package/dist/cli/commands/topic-change-check.d.ts.map +1 -0
- package/dist/cli/commands/topic-change-check.js +23 -0
- package/dist/cli/commands/topic-change-check.js.map +1 -0
- package/dist/cli/commands/upgrade-hub-mode.d.ts +3 -0
- package/dist/cli/commands/upgrade-hub-mode.d.ts.map +1 -0
- package/dist/cli/commands/upgrade-hub-mode.js +11 -0
- package/dist/cli/commands/upgrade-hub-mode.js.map +1 -0
- package/dist/cli/commands/workflows.d.ts +3 -0
- package/dist/cli/commands/workflows.d.ts.map +1 -0
- package/dist/cli/commands/workflows.js +30 -0
- package/dist/cli/commands/workflows.js.map +1 -0
- package/dist/cli/commands/workspace-mode.d.ts +3 -0
- package/dist/cli/commands/workspace-mode.d.ts.map +1 -0
- package/dist/cli/commands/workspace-mode.js +11 -0
- package/dist/cli/commands/workspace-mode.js.map +1 -0
- package/dist/cli/helpers/objetivo-loader.d.ts +3 -0
- package/dist/cli/helpers/objetivo-loader.d.ts.map +1 -0
- package/dist/cli/helpers/objetivo-loader.js +17 -0
- package/dist/cli/helpers/objetivo-loader.js.map +1 -0
- package/dist/cli/main.js +18 -4
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/parsers/fuentes.d.ts +11 -0
- package/dist/cli/parsers/fuentes.d.ts.map +1 -0
- package/dist/cli/parsers/fuentes.js +37 -0
- package/dist/cli/parsers/fuentes.js.map +1 -0
- package/dist/cli/parsers/working-branches.d.ts +2 -0
- package/dist/cli/parsers/working-branches.d.ts.map +1 -0
- package/dist/cli/parsers/working-branches.js +14 -0
- package/dist/cli/parsers/working-branches.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { buildSessionEntry, parseSessionFolder } from "../session-resolver.js";
|
|
3
|
+
import { collectFilesByExt, sessionCodeInt } from "./common.js";
|
|
4
|
+
const ARTIFACT_FILES = {
|
|
5
|
+
objetivo: "OBJETIVO.md",
|
|
6
|
+
decisiones: "DECISIONES.md",
|
|
7
|
+
tasks: "TASKS.md",
|
|
8
|
+
dependencias: "DEPENDENCIAS.md",
|
|
9
|
+
checkpoint: "CHECKPOINT.md",
|
|
10
|
+
};
|
|
11
|
+
const SCRIPTS_SUBDIR = "scripts";
|
|
12
|
+
export async function readSessionArtifacts(fs, env, paths, sessionCode, kinds, runtime) {
|
|
13
|
+
void env;
|
|
14
|
+
const found = await findSessionFolder(fs, paths.cwdSessionsDir(), sessionCode);
|
|
15
|
+
if (!found)
|
|
16
|
+
return { error: `session_not_found:${sessionCode}` };
|
|
17
|
+
const { sessionPath, folderName } = found;
|
|
18
|
+
const legacyCheck = await detectLegacyFormat(fs, sessionPath, folderName, runtime);
|
|
19
|
+
if (legacyCheck)
|
|
20
|
+
return legacyCheck;
|
|
21
|
+
const entry = await buildSessionEntry(fs, sessionPath, folderName);
|
|
22
|
+
const result = {
|
|
23
|
+
session: entry.folder,
|
|
24
|
+
path: entry.path,
|
|
25
|
+
code: entry.code,
|
|
26
|
+
flow: entry.flow,
|
|
27
|
+
state: entry.state,
|
|
28
|
+
phase: entry.phase,
|
|
29
|
+
};
|
|
30
|
+
const targetKinds = kinds ?? [...Object.keys(ARTIFACT_FILES), "scripts"];
|
|
31
|
+
for (const kind of targetKinds) {
|
|
32
|
+
if (kind === "scripts") {
|
|
33
|
+
result.scripts = await readScriptsArtifacts(fs, sessionPath);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
result[kind] = await readArtifactKind(fs, sessionPath, kind);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
async function findSessionFolder(fs, qtcDir, sessionCode) {
|
|
42
|
+
const targetInt = sessionCodeInt(sessionCode);
|
|
43
|
+
if (!(await fs.exists(qtcDir)) || targetInt === null)
|
|
44
|
+
return null;
|
|
45
|
+
const folders = (await fs.list(qtcDir)).filter((e) => e.type === "dir" && /^session\d{3}-/.test(e.name));
|
|
46
|
+
const match = folders.find((f) => sessionCodeInt(parseSessionFolder(f.name).code) === targetInt);
|
|
47
|
+
if (!match)
|
|
48
|
+
return null;
|
|
49
|
+
return { sessionPath: match.path, folderName: match.name };
|
|
50
|
+
}
|
|
51
|
+
async function detectLegacyFormat(fs, sessionPath, folderName, runtime) {
|
|
52
|
+
const hasReq = await fs.exists(join(sessionPath, "REQUIREMENTS.md"));
|
|
53
|
+
const hasObj = await fs.exists(join(sessionPath, "OBJETIVO.md"));
|
|
54
|
+
if (!hasReq || hasObj)
|
|
55
|
+
return null;
|
|
56
|
+
const migrateCmd = runtime?.slashCommands?.migrate ?? "(run namespace-specific migrate command)";
|
|
57
|
+
return {
|
|
58
|
+
error: "legacy_format",
|
|
59
|
+
session: folderName,
|
|
60
|
+
path: sessionPath,
|
|
61
|
+
hint: `La sesión usa REQUIREMENTS.md (formato pre-0.9). Migrar con ${migrateCmd} --upgrade-topology antes de consumir release.`,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
async function readScriptsArtifacts(fs, sessionPath) {
|
|
65
|
+
const scriptsDir = join(sessionPath, SCRIPTS_SUBDIR);
|
|
66
|
+
if (!(await fs.exists(scriptsDir)))
|
|
67
|
+
return [];
|
|
68
|
+
const files = await collectFilesByExt(fs, scriptsDir, ".sql");
|
|
69
|
+
files.sort((a, b) => a.localeCompare(b));
|
|
70
|
+
const items = [];
|
|
71
|
+
for (const f of files) {
|
|
72
|
+
let size = null;
|
|
73
|
+
try {
|
|
74
|
+
size = (await fs.stat(f)).size;
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// ignore
|
|
78
|
+
}
|
|
79
|
+
items.push({
|
|
80
|
+
name: f.split("/").pop() ?? f,
|
|
81
|
+
path: f,
|
|
82
|
+
size,
|
|
83
|
+
is_rollback: f.endsWith(".rollback.sql"),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return items;
|
|
87
|
+
}
|
|
88
|
+
async function readArtifactKind(fs, sessionPath, kind) {
|
|
89
|
+
const filename = ARTIFACT_FILES[kind];
|
|
90
|
+
if (!filename)
|
|
91
|
+
return { error: `unknown_kind:${kind}` };
|
|
92
|
+
const artifactPath = join(sessionPath, filename);
|
|
93
|
+
if (!(await fs.exists(artifactPath)))
|
|
94
|
+
return null;
|
|
95
|
+
try {
|
|
96
|
+
const content = await fs.readText(artifactPath);
|
|
97
|
+
const size = (await fs.stat(artifactPath)).size;
|
|
98
|
+
return { path: artifactPath, content, size };
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
return { path: artifactPath, error: e.message };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../src/application/release-data/artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { FileSystemPort } from "../../ports/file-system.js";
|
|
2
|
+
import type { PathsService } from "../paths-service.js";
|
|
3
|
+
export interface GraduatedBundle {
|
|
4
|
+
nnn: string;
|
|
5
|
+
session_code: string;
|
|
6
|
+
slug: string;
|
|
7
|
+
path: string;
|
|
8
|
+
forward_count: number;
|
|
9
|
+
rollback_count: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function listGraduatedBundles(fs: FileSystemPort, cwd: string, paths: PathsService, options?: {
|
|
12
|
+
sessionCode?: string;
|
|
13
|
+
sourceAlias?: string;
|
|
14
|
+
}): Promise<GraduatedBundle[]>;
|
|
15
|
+
//# sourceMappingURL=bundles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundles.d.ts","sourceRoot":"","sources":["../../../src/application/release-data/bundles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3D,OAAO,CAAC,eAAe,EAAE,CAAC,CAoC5B"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { collectFilesByExt, getDocsDir, sessionCodeInt } from "./common.js";
|
|
3
|
+
export async function listGraduatedBundles(fs, cwd, paths, options = {}) {
|
|
4
|
+
let docsDir;
|
|
5
|
+
try {
|
|
6
|
+
docsDir = await getDocsDir(fs, cwd, paths, options.sourceAlias);
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
const scriptsDir = join(docsDir, "scripts");
|
|
12
|
+
if (!(await fs.exists(scriptsDir)))
|
|
13
|
+
return [];
|
|
14
|
+
const targetCode = options.sessionCode ? sessionCodeInt(options.sessionCode) : null;
|
|
15
|
+
const dirEntries = (await fs.list(scriptsDir))
|
|
16
|
+
.filter((e) => e.type === "dir")
|
|
17
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
18
|
+
const bundles = [];
|
|
19
|
+
for (const entry of dirEntries) {
|
|
20
|
+
const m = entry.name.match(/^(\d{3})-session(\d{3})-(.+)$/);
|
|
21
|
+
if (!m || !m[1] || !m[2] || !m[3])
|
|
22
|
+
continue;
|
|
23
|
+
const nnn = m[1];
|
|
24
|
+
const sessionNnn = m[2];
|
|
25
|
+
const slug = m[3];
|
|
26
|
+
if (targetCode !== null && Number.parseInt(sessionNnn, 10) !== targetCode)
|
|
27
|
+
continue;
|
|
28
|
+
const sqlFiles = await collectFilesByExt(fs, entry.path, ".sql");
|
|
29
|
+
const rollback = sqlFiles.filter((f) => f.endsWith(".rollback.sql"));
|
|
30
|
+
const forward = sqlFiles.filter((f) => !f.endsWith(".rollback.sql"));
|
|
31
|
+
bundles.push({
|
|
32
|
+
nnn,
|
|
33
|
+
session_code: sessionNnn,
|
|
34
|
+
slug,
|
|
35
|
+
path: entry.path,
|
|
36
|
+
forward_count: forward.length,
|
|
37
|
+
rollback_count: rollback.length,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return bundles;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=bundles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundles.js","sourceRoot":"","sources":["../../../src/application/release-data/bundles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAW5E,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAAkB,EAClB,GAAW,EACX,KAAmB,EACnB,UAA0D,EAAE;IAE5D,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAE9C,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpF,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC3C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;SAC/B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhD,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC5D,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QAC5C,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,UAAU,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,UAAU;YAAE,SAAS;QACpF,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC;YACX,GAAG;YACH,YAAY,EAAE,UAAU;YACxB,IAAI;YACJ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,aAAa,EAAE,OAAO,CAAC,MAAM;YAC7B,cAAc,EAAE,QAAQ,CAAC,MAAM;SAChC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FileSystemPort } from "../../ports/file-system.js";
|
|
2
|
+
import type { PathsService } from "../paths-service.js";
|
|
3
|
+
export declare function sessionCodeInt(code: string | null | undefined): number | null;
|
|
4
|
+
export declare function collectFilesByExt(fs: FileSystemPort, dir: string, ext: string): Promise<string[]>;
|
|
5
|
+
export declare function readSources(fs: FileSystemPort, cwd: string, paths: PathsService): Promise<{
|
|
6
|
+
alias: string;
|
|
7
|
+
path: string;
|
|
8
|
+
}[]>;
|
|
9
|
+
export declare function getDocsDir(fs: FileSystemPort, cwd: string, paths: PathsService, sourceAlias: string | undefined): Promise<string>;
|
|
10
|
+
export declare function getReleaseDir(fs: FileSystemPort, cwd: string, paths: PathsService, sourceAlias: string | undefined): Promise<string>;
|
|
11
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/application/release-data/common.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAQ7E;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,EAAE,CAAC,CAkBnB;AAED,wBAAsB,WAAW,CAC/B,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAO5C;AAED,wBAAsB,UAAU,CAC9B,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,OAAO,CAAC,MAAM,CAAC,CAEjB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { parseProjectBlock } from "../parsers/project-block.js";
|
|
3
|
+
export function sessionCodeInt(code) {
|
|
4
|
+
if (!code)
|
|
5
|
+
return null;
|
|
6
|
+
let s = String(code)
|
|
7
|
+
.trim()
|
|
8
|
+
.replace(/session/g, "");
|
|
9
|
+
s = (s.split("-")[0] ?? "").trim();
|
|
10
|
+
const n = Number.parseInt(s, 10);
|
|
11
|
+
return Number.isNaN(n) ? null : n;
|
|
12
|
+
}
|
|
13
|
+
export async function collectFilesByExt(fs, dir, ext) {
|
|
14
|
+
const result = [];
|
|
15
|
+
const stack = [dir];
|
|
16
|
+
while (stack.length > 0) {
|
|
17
|
+
const current = stack.pop();
|
|
18
|
+
if (!current)
|
|
19
|
+
break;
|
|
20
|
+
let entries;
|
|
21
|
+
try {
|
|
22
|
+
entries = await fs.list(current);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
for (const e of entries) {
|
|
28
|
+
if (e.type === "dir")
|
|
29
|
+
stack.push(e.path);
|
|
30
|
+
else if (e.type === "file" && e.name.endsWith(ext))
|
|
31
|
+
result.push(e.path);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
export async function readSources(fs, cwd, paths) {
|
|
37
|
+
for (const file of [join(cwd, "CLAUDE.md"), join(cwd, "AGENTS.md")]) {
|
|
38
|
+
if (!(await fs.exists(file)))
|
|
39
|
+
continue;
|
|
40
|
+
const block = parseProjectBlock(await fs.readText(file), paths.blockMarkers());
|
|
41
|
+
if (block)
|
|
42
|
+
return block.fuentes;
|
|
43
|
+
}
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
export async function getDocsDir(fs, cwd, paths, sourceAlias) {
|
|
47
|
+
if (!sourceAlias)
|
|
48
|
+
return join(cwd, "docs");
|
|
49
|
+
const sources = await readSources(fs, cwd, paths);
|
|
50
|
+
const found = sources.find((s) => s.alias === sourceAlias);
|
|
51
|
+
if (!found) {
|
|
52
|
+
throw new Error(`Fuente '${sourceAlias}' no encontrada. Aliases disponibles: ${sources
|
|
53
|
+
.map((s) => s.alias)
|
|
54
|
+
.join(", ")}`);
|
|
55
|
+
}
|
|
56
|
+
return join(found.path, "docs");
|
|
57
|
+
}
|
|
58
|
+
export async function getReleaseDir(fs, cwd, paths, sourceAlias) {
|
|
59
|
+
return join(await getDocsDir(fs, cwd, paths, sourceAlias), "release");
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/application/release-data/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { FileSystemPort } from "../../ports/file-system.js";
|
|
2
|
+
import type { ResolvedRuntime } from "../../runtime/types.js";
|
|
3
|
+
import type { PathsService } from "../paths-service.js";
|
|
4
|
+
import { type SessionEntry } from "../session-resolver.js";
|
|
5
|
+
export interface ReleaseSession extends SessionEntry {
|
|
6
|
+
is_legacy_format?: boolean;
|
|
7
|
+
release_eligible?: boolean;
|
|
8
|
+
legacy_warning?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function listSessionsForRelease(fs: FileSystemPort, cwd: string, paths: PathsService, options?: {
|
|
11
|
+
since?: string;
|
|
12
|
+
includeOpen?: boolean;
|
|
13
|
+
includeClosed?: boolean;
|
|
14
|
+
}): Promise<ReleaseSession[]>;
|
|
15
|
+
export declare function enrichSessionsWithLegacyMeta(sessions: ReleaseSession[], cwd: string, runtime: ResolvedRuntime | undefined): {
|
|
16
|
+
enriched: ReleaseSession[];
|
|
17
|
+
legacy: string[];
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=sessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/application/release-data/sessions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,wBAAwB,CAAC;AAG9E,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/E,OAAO,CAAC,cAAc,EAAE,CAAC,CA2B3B;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,cAAc,EAAE,EAC1B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,eAAe,GAAG,SAAS,GACnC;IAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAclD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { relpath } from "../paths.js";
|
|
3
|
+
import { buildSessionEntry } from "../session-resolver.js";
|
|
4
|
+
import { sessionCodeInt } from "./common.js";
|
|
5
|
+
export async function listSessionsForRelease(fs, cwd, paths, options = {}) {
|
|
6
|
+
void cwd;
|
|
7
|
+
const includeOpen = options.includeOpen ?? true;
|
|
8
|
+
const includeClosed = options.includeClosed ?? true;
|
|
9
|
+
const qtcDir = paths.cwdSessionsDir();
|
|
10
|
+
if (!(await fs.exists(qtcDir)))
|
|
11
|
+
return [];
|
|
12
|
+
const sinceInt = sessionCodeInt(options.since);
|
|
13
|
+
const entries = (await fs.list(qtcDir))
|
|
14
|
+
.filter((e) => e.type === "dir" && /^session\d{3}-/.test(e.name))
|
|
15
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
16
|
+
const result = [];
|
|
17
|
+
for (const folder of entries) {
|
|
18
|
+
const entry = (await buildSessionEntry(fs, folder.path, folder.name));
|
|
19
|
+
const codeInt = sessionCodeInt(entry.code);
|
|
20
|
+
if (sinceInt !== null && codeInt !== null && codeInt <= sinceInt)
|
|
21
|
+
continue;
|
|
22
|
+
if (entry.state === "active" && !includeOpen)
|
|
23
|
+
continue;
|
|
24
|
+
if (entry.state === "closed" && !includeClosed)
|
|
25
|
+
continue;
|
|
26
|
+
const hasObjetivo = await fs.exists(join(folder.path, "OBJETIVO.md"));
|
|
27
|
+
const hasRequirements = await fs.exists(join(folder.path, "REQUIREMENTS.md"));
|
|
28
|
+
entry.is_legacy_format = hasRequirements && !hasObjetivo;
|
|
29
|
+
entry.release_eligible = !entry.is_legacy_format;
|
|
30
|
+
result.push(entry);
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
export function enrichSessionsWithLegacyMeta(sessions, cwd, runtime) {
|
|
35
|
+
const migrateCmd = runtime?.slashCommands?.migrate ?? "(run namespace-specific migrate command)";
|
|
36
|
+
const enriched = [];
|
|
37
|
+
const legacy = [];
|
|
38
|
+
for (const s of sessions) {
|
|
39
|
+
const item = { ...s };
|
|
40
|
+
if (s.is_legacy_format) {
|
|
41
|
+
legacy.push(s.folder);
|
|
42
|
+
item.legacy_warning = `Sesión usa formato pre-0.9 (REQUIREMENTS.md). Migrar con ${migrateCmd} --upgrade-topology antes de release.`;
|
|
43
|
+
}
|
|
44
|
+
if (item.path)
|
|
45
|
+
item.path = relpath(item.path, cwd);
|
|
46
|
+
enriched.push(item);
|
|
47
|
+
}
|
|
48
|
+
return { enriched, legacy };
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/application/release-data/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,20 +2,14 @@ import type { EnvPort } from "../ports/env.js";
|
|
|
2
2
|
import type { FileSystemPort } from "../ports/file-system.js";
|
|
3
3
|
import type { ResolvedRuntime } from "../runtime/types.js";
|
|
4
4
|
import type { PathsService } from "./paths-service.js";
|
|
5
|
-
import { type
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
session_code: string;
|
|
14
|
-
slug: string;
|
|
15
|
-
path: string;
|
|
16
|
-
forward_count: number;
|
|
17
|
-
rollback_count: number;
|
|
18
|
-
}
|
|
5
|
+
import { type GraduatedBundle } from "./release-data/bundles.js";
|
|
6
|
+
import { type ReleaseSession } from "./release-data/sessions.js";
|
|
7
|
+
export type { ReleaseSession } from "./release-data/sessions.js";
|
|
8
|
+
export type { GraduatedBundle } from "./release-data/bundles.js";
|
|
9
|
+
export type { SessionArtifactsResult } from "./release-data/artifacts.js";
|
|
10
|
+
export { listSessionsForRelease } from "./release-data/sessions.js";
|
|
11
|
+
export { readSessionArtifacts } from "./release-data/artifacts.js";
|
|
12
|
+
export { listGraduatedBundles } from "./release-data/bundles.js";
|
|
19
13
|
export interface ReleaseDataInput {
|
|
20
14
|
since?: string;
|
|
21
15
|
sourceAlias?: string;
|
|
@@ -41,41 +35,5 @@ export interface ReleaseDataError {
|
|
|
41
35
|
error: string;
|
|
42
36
|
workspace_mode?: "project" | "hub";
|
|
43
37
|
}
|
|
44
|
-
export declare function listSessionsForRelease(fs: FileSystemPort, cwd: string, paths: PathsService, options?: {
|
|
45
|
-
since?: string;
|
|
46
|
-
includeOpen?: boolean;
|
|
47
|
-
includeClosed?: boolean;
|
|
48
|
-
}): Promise<ReleaseSession[]>;
|
|
49
|
-
export interface SessionArtifactsResult {
|
|
50
|
-
session?: string;
|
|
51
|
-
path?: string;
|
|
52
|
-
code?: string | null;
|
|
53
|
-
flow?: string | null;
|
|
54
|
-
state?: string;
|
|
55
|
-
phase?: string;
|
|
56
|
-
scripts?: {
|
|
57
|
-
name: string;
|
|
58
|
-
path: string;
|
|
59
|
-
size: number | null;
|
|
60
|
-
is_rollback: boolean;
|
|
61
|
-
}[];
|
|
62
|
-
error?: string;
|
|
63
|
-
hint?: string;
|
|
64
|
-
[k: string]: unknown | {
|
|
65
|
-
path: string;
|
|
66
|
-
content: string;
|
|
67
|
-
size: number;
|
|
68
|
-
} | {
|
|
69
|
-
path: string;
|
|
70
|
-
error: string;
|
|
71
|
-
} | {
|
|
72
|
-
error: string;
|
|
73
|
-
} | null;
|
|
74
|
-
}
|
|
75
|
-
export declare function readSessionArtifacts(fs: FileSystemPort, env: EnvPort, paths: PathsService, sessionCode: string, kinds?: string[], runtime?: ResolvedRuntime): Promise<SessionArtifactsResult>;
|
|
76
|
-
export declare function listGraduatedBundles(fs: FileSystemPort, cwd: string, paths: PathsService, options?: {
|
|
77
|
-
sessionCode?: string;
|
|
78
|
-
sourceAlias?: string;
|
|
79
|
-
}): Promise<GraduatedBundle[]>;
|
|
80
38
|
export declare function runReleaseData(fs: FileSystemPort, env: EnvPort, paths: PathsService, input: ReleaseDataInput, runtime?: ResolvedRuntime): Promise<ReleaseDataOutput | ReleaseDataError>;
|
|
81
39
|
//# sourceMappingURL=release-data-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-data-service.d.ts","sourceRoot":"","sources":["../../src/application/release-data-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"release-data-service.d.ts","sourceRoot":"","sources":["../../src/application/release-data-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,KAAK,eAAe,EAAwB,MAAM,2BAA2B,CAAC;AAEvF,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,SAAS,GAAG,KAAK,CAAC;IAClC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,eAAe,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;CACpC;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,gBAAgB,EACvB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,CA4C/C"}
|