@tacuchi/agent-workflow-cli 5.0.2 → 5.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/dist/adapters/node-file-system.d.ts +7 -0
- package/dist/adapters/node-file-system.d.ts.map +1 -1
- package/dist/adapters/node-file-system.js +22 -2
- package/dist/adapters/node-file-system.js.map +1 -1
- package/dist/application/artifacts-service.d.ts.map +1 -1
- package/dist/application/artifacts-service.js +15 -13
- package/dist/application/artifacts-service.js.map +1 -1
- 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 +152 -0
- package/dist/application/checkpoint/state-reader.js.map +1 -0
- package/dist/application/checkpoint-service.d.ts.map +1 -1
- package/dist/application/checkpoint-service.js +15 -16
- package/dist/application/checkpoint-service.js.map +1 -1
- 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/decisiones-service.d.ts.map +1 -1
- package/dist/application/decisiones-service.js +5 -5
- package/dist/application/decisiones-service.js.map +1 -1
- package/dist/application/dependencias-service.d.ts.map +1 -1
- package/dist/application/dependencias-service.js +5 -5
- package/dist/application/dependencias-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 +148 -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/handoff.d.ts.map +1 -1
- package/dist/application/handoff.js +14 -11
- package/dist/application/handoff.js.map +1 -1
- package/dist/application/markdown.d.ts +18 -0
- package/dist/application/markdown.d.ts.map +1 -1
- package/dist/application/markdown.js +129 -0
- package/dist/application/markdown.js.map +1 -1
- 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/objetivo-service.d.ts.map +1 -1
- package/dist/application/objetivo-service.js +3 -3
- package/dist/application/objetivo-service.js.map +1 -1
- package/dist/application/parsers/objetivo.d.ts.map +1 -1
- package/dist/application/parsers/objetivo.js +7 -10
- package/dist/application/parsers/objetivo.js.map +1 -1
- package/dist/application/phase-detect-service.d.ts.map +1 -1
- package/dist/application/phase-detect-service.js +6 -6
- package/dist/application/phase-detect-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 +105 -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 +51 -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/session-artifacts.d.ts +48 -0
- package/dist/application/session-artifacts.d.ts.map +1 -0
- package/dist/application/session-artifacts.js +116 -0
- package/dist/application/session-artifacts.js.map +1 -0
- package/dist/application/session-create-service.d.ts.map +1 -1
- package/dist/application/session-create-service.js +45 -15
- package/dist/application/session-create-service.js.map +1 -1
- package/dist/application/session-resolver.d.ts.map +1 -1
- package/dist/application/session-resolver.js +10 -15
- package/dist/application/session-resolver.js.map +1 -1
- package/dist/application/session-resume-service.d.ts.map +1 -1
- package/dist/application/session-resume-service.js +3 -2
- package/dist/application/session-resume-service.js.map +1 -1
- package/dist/application/templates/objetivo.js +32 -32
- 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-create.js +2 -2
- package/dist/cli/commands/session-create.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/dist/domain/session.d.ts +2 -2
- package/dist/domain/session.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,243 +1,12 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { parseProjectBlock } from "./parsers/project-block.js";
|
|
3
3
|
import { relpath } from "./paths.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
checkpoint: "CHECKPOINT.md",
|
|
11
|
-
};
|
|
12
|
-
const SCRIPTS_SUBDIR = "scripts";
|
|
13
|
-
function sessionCodeInt(code) {
|
|
14
|
-
if (!code)
|
|
15
|
-
return null;
|
|
16
|
-
let s = String(code)
|
|
17
|
-
.trim()
|
|
18
|
-
.replace(/session/g, "");
|
|
19
|
-
s = (s.split("-")[0] ?? "").trim();
|
|
20
|
-
const n = Number.parseInt(s, 10);
|
|
21
|
-
return Number.isNaN(n) ? null : n;
|
|
22
|
-
}
|
|
23
|
-
export async function listSessionsForRelease(fs, cwd, paths, options = {}) {
|
|
24
|
-
void cwd;
|
|
25
|
-
const includeOpen = options.includeOpen ?? true;
|
|
26
|
-
const includeClosed = options.includeClosed ?? true;
|
|
27
|
-
const qtcDir = paths.cwdSessionsDir();
|
|
28
|
-
if (!(await fs.exists(qtcDir)))
|
|
29
|
-
return [];
|
|
30
|
-
const sinceInt = sessionCodeInt(options.since);
|
|
31
|
-
const entries = (await fs.list(qtcDir))
|
|
32
|
-
.filter((e) => e.type === "dir" && /^session\d{3}-/.test(e.name))
|
|
33
|
-
.sort((a, b) => a.name.localeCompare(b.name));
|
|
34
|
-
const result = [];
|
|
35
|
-
for (const folder of entries) {
|
|
36
|
-
const entry = (await buildSessionEntry(fs, folder.path, folder.name));
|
|
37
|
-
const codeInt = sessionCodeInt(entry.code);
|
|
38
|
-
if (sinceInt !== null && codeInt !== null && codeInt <= sinceInt)
|
|
39
|
-
continue;
|
|
40
|
-
if (entry.state === "active" && !includeOpen)
|
|
41
|
-
continue;
|
|
42
|
-
if (entry.state === "closed" && !includeClosed)
|
|
43
|
-
continue;
|
|
44
|
-
const hasObjetivo = await fs.exists(join(folder.path, "OBJETIVO.md"));
|
|
45
|
-
const hasRequirements = await fs.exists(join(folder.path, "REQUIREMENTS.md"));
|
|
46
|
-
entry.is_legacy_format = hasRequirements && !hasObjetivo;
|
|
47
|
-
entry.release_eligible = !entry.is_legacy_format;
|
|
48
|
-
result.push(entry);
|
|
49
|
-
}
|
|
50
|
-
return result;
|
|
51
|
-
}
|
|
52
|
-
export async function readSessionArtifacts(fs, env, paths, sessionCode, kinds, runtime) {
|
|
53
|
-
void env;
|
|
54
|
-
const found = await findSessionFolder(fs, paths.cwdSessionsDir(), sessionCode);
|
|
55
|
-
if (!found)
|
|
56
|
-
return { error: `session_not_found:${sessionCode}` };
|
|
57
|
-
const { sessionPath, folderName } = found;
|
|
58
|
-
const legacyCheck = await detectLegacyFormat(fs, sessionPath, folderName, runtime);
|
|
59
|
-
if (legacyCheck)
|
|
60
|
-
return legacyCheck;
|
|
61
|
-
const entry = await buildSessionEntry(fs, sessionPath, folderName);
|
|
62
|
-
const result = {
|
|
63
|
-
session: entry.folder,
|
|
64
|
-
path: entry.path,
|
|
65
|
-
code: entry.code,
|
|
66
|
-
flow: entry.flow,
|
|
67
|
-
state: entry.state,
|
|
68
|
-
phase: entry.phase,
|
|
69
|
-
};
|
|
70
|
-
const targetKinds = kinds ?? [...Object.keys(ARTIFACT_FILES), "scripts"];
|
|
71
|
-
for (const kind of targetKinds) {
|
|
72
|
-
if (kind === "scripts") {
|
|
73
|
-
result.scripts = await readScriptsArtifacts(fs, sessionPath);
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
result[kind] = await readArtifactKind(fs, sessionPath, kind);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return result;
|
|
80
|
-
}
|
|
81
|
-
async function findSessionFolder(fs, qtcDir, sessionCode) {
|
|
82
|
-
const targetInt = sessionCodeInt(sessionCode);
|
|
83
|
-
if (!(await fs.exists(qtcDir)) || targetInt === null)
|
|
84
|
-
return null;
|
|
85
|
-
const folders = (await fs.list(qtcDir)).filter((e) => e.type === "dir" && /^session\d{3}-/.test(e.name));
|
|
86
|
-
const match = folders.find((f) => sessionCodeInt(parseSessionFolder(f.name).code) === targetInt);
|
|
87
|
-
if (!match)
|
|
88
|
-
return null;
|
|
89
|
-
return { sessionPath: match.path, folderName: match.name };
|
|
90
|
-
}
|
|
91
|
-
async function detectLegacyFormat(fs, sessionPath, folderName, runtime) {
|
|
92
|
-
const hasReq = await fs.exists(join(sessionPath, "REQUIREMENTS.md"));
|
|
93
|
-
const hasObj = await fs.exists(join(sessionPath, "OBJETIVO.md"));
|
|
94
|
-
if (!hasReq || hasObj)
|
|
95
|
-
return null;
|
|
96
|
-
const migrateCmd = runtime?.slashCommands?.migrate ?? "(run namespace-specific migrate command)";
|
|
97
|
-
return {
|
|
98
|
-
error: "legacy_format",
|
|
99
|
-
session: folderName,
|
|
100
|
-
path: sessionPath,
|
|
101
|
-
hint: `La sesión usa REQUIREMENTS.md (formato pre-0.9). Migrar con ${migrateCmd} --upgrade-topology antes de consumir release.`,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
async function readScriptsArtifacts(fs, sessionPath) {
|
|
105
|
-
const scriptsDir = join(sessionPath, SCRIPTS_SUBDIR);
|
|
106
|
-
if (!(await fs.exists(scriptsDir)))
|
|
107
|
-
return [];
|
|
108
|
-
const files = await collectFilesByExt(fs, scriptsDir, ".sql");
|
|
109
|
-
files.sort((a, b) => a.localeCompare(b));
|
|
110
|
-
const items = [];
|
|
111
|
-
for (const f of files) {
|
|
112
|
-
let size = null;
|
|
113
|
-
try {
|
|
114
|
-
size = (await fs.stat(f)).size;
|
|
115
|
-
}
|
|
116
|
-
catch {
|
|
117
|
-
// ignore
|
|
118
|
-
}
|
|
119
|
-
items.push({
|
|
120
|
-
name: f.split("/").pop() ?? f,
|
|
121
|
-
path: f,
|
|
122
|
-
size,
|
|
123
|
-
is_rollback: f.endsWith(".rollback.sql"),
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
return items;
|
|
127
|
-
}
|
|
128
|
-
async function readArtifactKind(fs, sessionPath, kind) {
|
|
129
|
-
const filename = ARTIFACT_FILES[kind];
|
|
130
|
-
if (!filename)
|
|
131
|
-
return { error: `unknown_kind:${kind}` };
|
|
132
|
-
const artifactPath = join(sessionPath, filename);
|
|
133
|
-
if (!(await fs.exists(artifactPath)))
|
|
134
|
-
return null;
|
|
135
|
-
try {
|
|
136
|
-
const content = await fs.readText(artifactPath);
|
|
137
|
-
const size = (await fs.stat(artifactPath)).size;
|
|
138
|
-
return { path: artifactPath, content, size };
|
|
139
|
-
}
|
|
140
|
-
catch (e) {
|
|
141
|
-
return { path: artifactPath, error: e.message };
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
export async function listGraduatedBundles(fs, cwd, paths, options = {}) {
|
|
145
|
-
let docsDir;
|
|
146
|
-
try {
|
|
147
|
-
docsDir = await getDocsDir(fs, cwd, paths, options.sourceAlias);
|
|
148
|
-
}
|
|
149
|
-
catch {
|
|
150
|
-
return [];
|
|
151
|
-
}
|
|
152
|
-
const scriptsDir = join(docsDir, "scripts");
|
|
153
|
-
if (!(await fs.exists(scriptsDir)))
|
|
154
|
-
return [];
|
|
155
|
-
const targetCode = options.sessionCode ? sessionCodeInt(options.sessionCode) : null;
|
|
156
|
-
const dirEntries = (await fs.list(scriptsDir))
|
|
157
|
-
.filter((e) => e.type === "dir")
|
|
158
|
-
.sort((a, b) => a.name.localeCompare(b.name));
|
|
159
|
-
const bundles = [];
|
|
160
|
-
for (const entry of dirEntries) {
|
|
161
|
-
const m = entry.name.match(/^(\d{3})-session(\d{3})-(.+)$/);
|
|
162
|
-
if (!m || !m[1] || !m[2] || !m[3])
|
|
163
|
-
continue;
|
|
164
|
-
const nnn = m[1];
|
|
165
|
-
const sessionNnn = m[2];
|
|
166
|
-
const slug = m[3];
|
|
167
|
-
if (targetCode !== null && Number.parseInt(sessionNnn, 10) !== targetCode)
|
|
168
|
-
continue;
|
|
169
|
-
const sqlFiles = await collectFilesByExt(fs, entry.path, ".sql");
|
|
170
|
-
const rollback = sqlFiles.filter((f) => f.endsWith(".rollback.sql"));
|
|
171
|
-
const forward = sqlFiles.filter((f) => !f.endsWith(".rollback.sql"));
|
|
172
|
-
bundles.push({
|
|
173
|
-
nnn,
|
|
174
|
-
session_code: sessionNnn,
|
|
175
|
-
slug,
|
|
176
|
-
path: entry.path,
|
|
177
|
-
forward_count: forward.length,
|
|
178
|
-
rollback_count: rollback.length,
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
return bundles;
|
|
182
|
-
}
|
|
183
|
-
async function getDocsDir(fs, cwd, paths, sourceAlias) {
|
|
184
|
-
if (!sourceAlias)
|
|
185
|
-
return join(cwd, "docs");
|
|
186
|
-
const sources = await readSources(fs, cwd, paths);
|
|
187
|
-
const found = sources.find((s) => s.alias === sourceAlias);
|
|
188
|
-
if (!found) {
|
|
189
|
-
throw new Error(`Fuente '${sourceAlias}' no encontrada. Aliases disponibles: ${sources
|
|
190
|
-
.map((s) => s.alias)
|
|
191
|
-
.join(", ")}`);
|
|
192
|
-
}
|
|
193
|
-
return join(found.path, "docs");
|
|
194
|
-
}
|
|
195
|
-
async function getReleaseDir(fs, cwd, paths, sourceAlias) {
|
|
196
|
-
return join(await getDocsDir(fs, cwd, paths, sourceAlias), "release");
|
|
197
|
-
}
|
|
198
|
-
async function readSources(fs, cwd, paths) {
|
|
199
|
-
for (const file of [join(cwd, "CLAUDE.md"), join(cwd, "AGENTS.md")]) {
|
|
200
|
-
if (!(await fs.exists(file)))
|
|
201
|
-
continue;
|
|
202
|
-
const block = parseProjectBlock(await fs.readText(file), paths.blockMarkers());
|
|
203
|
-
if (block)
|
|
204
|
-
return block.fuentes;
|
|
205
|
-
}
|
|
206
|
-
return [];
|
|
207
|
-
}
|
|
208
|
-
async function readWorkspaceMode(fs, cwd, paths) {
|
|
209
|
-
for (const file of [join(cwd, "CLAUDE.md"), join(cwd, "AGENTS.md")]) {
|
|
210
|
-
if (!(await fs.exists(file)))
|
|
211
|
-
continue;
|
|
212
|
-
const block = parseProjectBlock(await fs.readText(file), paths.blockMarkers());
|
|
213
|
-
if (block)
|
|
214
|
-
return block.mode;
|
|
215
|
-
}
|
|
216
|
-
return "project";
|
|
217
|
-
}
|
|
218
|
-
async function collectFilesByExt(fs, dir, ext) {
|
|
219
|
-
const result = [];
|
|
220
|
-
const stack = [dir];
|
|
221
|
-
while (stack.length > 0) {
|
|
222
|
-
const current = stack.pop();
|
|
223
|
-
if (!current)
|
|
224
|
-
break;
|
|
225
|
-
let entries;
|
|
226
|
-
try {
|
|
227
|
-
entries = await fs.list(current);
|
|
228
|
-
}
|
|
229
|
-
catch {
|
|
230
|
-
continue;
|
|
231
|
-
}
|
|
232
|
-
for (const e of entries) {
|
|
233
|
-
if (e.type === "dir")
|
|
234
|
-
stack.push(e.path);
|
|
235
|
-
else if (e.type === "file" && e.name.endsWith(ext))
|
|
236
|
-
result.push(e.path);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
return result;
|
|
240
|
-
}
|
|
4
|
+
import { listGraduatedBundles } from "./release-data/bundles.js";
|
|
5
|
+
import { getDocsDir, getReleaseDir } from "./release-data/common.js";
|
|
6
|
+
import { enrichSessionsWithLegacyMeta, listSessionsForRelease, } from "./release-data/sessions.js";
|
|
7
|
+
export { listSessionsForRelease } from "./release-data/sessions.js";
|
|
8
|
+
export { readSessionArtifacts } from "./release-data/artifacts.js";
|
|
9
|
+
export { listGraduatedBundles } from "./release-data/bundles.js";
|
|
241
10
|
export async function runReleaseData(fs, env, paths, input, runtime) {
|
|
242
11
|
const cwd = env.cwd();
|
|
243
12
|
const verbose = input.verbose ?? false;
|
|
@@ -284,21 +53,14 @@ export async function runReleaseData(fs, env, paths, input, runtime) {
|
|
|
284
53
|
}
|
|
285
54
|
return payload;
|
|
286
55
|
}
|
|
287
|
-
function
|
|
288
|
-
const
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
legacy.push(s.folder);
|
|
295
|
-
item.legacy_warning = `Sesión usa formato pre-0.9 (REQUIREMENTS.md). Migrar con ${migrateCmd} --upgrade-topology antes de release.`;
|
|
296
|
-
}
|
|
297
|
-
// Mirror Python build_session_entry compact=True: path always relative.
|
|
298
|
-
if (item.path)
|
|
299
|
-
item.path = relpath(item.path, cwd);
|
|
300
|
-
enriched.push(item);
|
|
56
|
+
async function readWorkspaceMode(fs, cwd, paths) {
|
|
57
|
+
for (const file of [join(cwd, "CLAUDE.md"), join(cwd, "AGENTS.md")]) {
|
|
58
|
+
if (!(await fs.exists(file)))
|
|
59
|
+
continue;
|
|
60
|
+
const block = parseProjectBlock(await fs.readText(file), paths.blockMarkers());
|
|
61
|
+
if (block)
|
|
62
|
+
return block.mode;
|
|
301
63
|
}
|
|
302
|
-
return
|
|
64
|
+
return "project";
|
|
303
65
|
}
|
|
304
66
|
//# sourceMappingURL=release-data-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-data-service.js","sourceRoot":"","sources":["../../src/application/release-data-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"release-data-service.js","sourceRoot":"","sources":["../../src/application/release-data-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { FileSystemPort } from "../ports/file-system.js";
|
|
2
|
+
/**
|
|
3
|
+
* Canonical kinds of session artifacts. Stable enum used as the bridge between
|
|
4
|
+
* runtime code and on-disk filenames; lets us migrate filenames (R1/R3) without
|
|
5
|
+
* touching call-sites.
|
|
6
|
+
*/
|
|
7
|
+
export type ArtifactKind = "objective" | "findings" | "decisions" | "evidence" | "conclusions" | "recommendation" | "delivery" | "dependencies" | "discovery" | "problem" | "tasks" | "checkpoint" | "status" | "requirements";
|
|
8
|
+
/**
|
|
9
|
+
* Filename candidates per kind. Order matters: EN UPPERCASE first (canonical
|
|
10
|
+
* for new writes), ES UPPERCASE second (legacy fallback for sessions created
|
|
11
|
+
* before R3 Sprint 1). Lookup in {@link findArtifact} is case-insensitive.
|
|
12
|
+
*
|
|
13
|
+
* `tasks`/`checkpoint`/`status`/`requirements` are already English and have no
|
|
14
|
+
* Spanish predecessor — they keep a single entry.
|
|
15
|
+
*/
|
|
16
|
+
export declare const ARTIFACT_FILENAMES: Record<ArtifactKind, readonly string[]>;
|
|
17
|
+
/** Canonical EN UPPERCASE filename for `kind`. Use when writing a new artifact. */
|
|
18
|
+
export declare function canonicalArtifactFilename(kind: ArtifactKind): string;
|
|
19
|
+
/** Canonical EN UPPERCASE path inside `folder` for `kind`. Use when writing a new artifact. */
|
|
20
|
+
export declare function canonicalArtifactPath(folder: string, kind: ArtifactKind): string;
|
|
21
|
+
/**
|
|
22
|
+
* Find an existing artifact of `kind` inside `folder`. Tries each candidate
|
|
23
|
+
* filename (EN preferred → ES legacy) using case-insensitive matching, so
|
|
24
|
+
* `Objective.md` and `objetivo.md` both resolve. Returns the absolute path of
|
|
25
|
+
* the first match, or `null` if none exist (or `folder` itself is missing).
|
|
26
|
+
*
|
|
27
|
+
* Use {@link canonicalArtifactPath} when the caller wants to write a brand-new
|
|
28
|
+
* artifact and doesn't care whether a legacy version exists.
|
|
29
|
+
*
|
|
30
|
+
* Implementation: lists the folder once for case-insensitive lookup, then falls
|
|
31
|
+
* back to direct {@link FileSystemPort.exists} probes for each candidate. The
|
|
32
|
+
* fallback covers (a) folders that don't list cleanly (e.g. fake fs in tests
|
|
33
|
+
* that adds files without registering parent dir entries) and (b) any race
|
|
34
|
+
* where a file appeared after the listing.
|
|
35
|
+
*/
|
|
36
|
+
export declare function findArtifact(folder: string, kind: ArtifactKind, fs: FileSystemPort): Promise<string | null>;
|
|
37
|
+
/**
|
|
38
|
+
* Bulk variant of {@link findArtifact}: lists `folder` once and resolves all
|
|
39
|
+
* known artifact kinds in a single pass. Returns a record `kind → path | null`.
|
|
40
|
+
* Use when checking presence of multiple artifacts on the same folder (e.g.
|
|
41
|
+
* `listArtefacts` in checkpoint state-reader) — avoids N readdir calls.
|
|
42
|
+
*
|
|
43
|
+
* Falls back to {@link FileSystemPort.exists} per candidate when the listing
|
|
44
|
+
* doesn't include a candidate filename, mirroring the resilience of
|
|
45
|
+
* {@link findArtifact}.
|
|
46
|
+
*/
|
|
47
|
+
export declare function listExistingArtifacts(folder: string, fs: FileSystemPort): Promise<Record<ArtifactKind, string | null>>;
|
|
48
|
+
//# sourceMappingURL=session-artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-artifacts.d.ts","sourceRoot":"","sources":["../../src/application/session-artifacts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D;;;;GAIG;AACH,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,UAAU,GACV,WAAW,GACX,UAAU,GACV,aAAa,GACb,gBAAgB,GAChB,UAAU,GACV,cAAc,GACd,WAAW,GACX,SAAS,GACT,OAAO,GACP,YAAY,GACZ,QAAQ,GACR,cAAc,CAAC;AAEnB;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAetE,CAAC;AAEF,mFAAmF;AACnF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAGpE;AAED,+FAA+F;AAC/F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM,CAEhF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,EAClB,EAAE,EAAE,cAAc,GACjB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWxB;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,cAAc,GACjB,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAiB9C"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
/**
|
|
3
|
+
* Filename candidates per kind. Order matters: EN UPPERCASE first (canonical
|
|
4
|
+
* for new writes), ES UPPERCASE second (legacy fallback for sessions created
|
|
5
|
+
* before R3 Sprint 1). Lookup in {@link findArtifact} is case-insensitive.
|
|
6
|
+
*
|
|
7
|
+
* `tasks`/`checkpoint`/`status`/`requirements` are already English and have no
|
|
8
|
+
* Spanish predecessor — they keep a single entry.
|
|
9
|
+
*/
|
|
10
|
+
export const ARTIFACT_FILENAMES = {
|
|
11
|
+
objective: ["OBJECTIVE.md", "OBJETIVO.md"],
|
|
12
|
+
findings: ["FINDINGS.md", "HALLAZGOS.md"],
|
|
13
|
+
decisions: ["DECISIONS.md", "DECISIONES.md"],
|
|
14
|
+
evidence: ["EVIDENCE.md", "EVIDENCIA.md"],
|
|
15
|
+
conclusions: ["CONCLUSIONS.md", "CONCLUSIONES.md"],
|
|
16
|
+
recommendation: ["RECOMMENDATION.md", "RECOMENDACION.md"],
|
|
17
|
+
delivery: ["DELIVERY.md", "ENTREGA.md"],
|
|
18
|
+
dependencies: ["DEPENDENCIES.md", "DEPENDENCIAS.md"],
|
|
19
|
+
discovery: ["DISCOVERY.md"],
|
|
20
|
+
problem: ["PROBLEM.md", "PROBLEMA.md"],
|
|
21
|
+
tasks: ["TASKS.md"],
|
|
22
|
+
checkpoint: ["CHECKPOINT.md"],
|
|
23
|
+
status: ["STATUS.md"],
|
|
24
|
+
requirements: ["REQUIREMENTS.md"],
|
|
25
|
+
};
|
|
26
|
+
/** Canonical EN UPPERCASE filename for `kind`. Use when writing a new artifact. */
|
|
27
|
+
export function canonicalArtifactFilename(kind) {
|
|
28
|
+
const names = ARTIFACT_FILENAMES[kind];
|
|
29
|
+
return names[0];
|
|
30
|
+
}
|
|
31
|
+
/** Canonical EN UPPERCASE path inside `folder` for `kind`. Use when writing a new artifact. */
|
|
32
|
+
export function canonicalArtifactPath(folder, kind) {
|
|
33
|
+
return join(folder, canonicalArtifactFilename(kind));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Find an existing artifact of `kind` inside `folder`. Tries each candidate
|
|
37
|
+
* filename (EN preferred → ES legacy) using case-insensitive matching, so
|
|
38
|
+
* `Objective.md` and `objetivo.md` both resolve. Returns the absolute path of
|
|
39
|
+
* the first match, or `null` if none exist (or `folder` itself is missing).
|
|
40
|
+
*
|
|
41
|
+
* Use {@link canonicalArtifactPath} when the caller wants to write a brand-new
|
|
42
|
+
* artifact and doesn't care whether a legacy version exists.
|
|
43
|
+
*
|
|
44
|
+
* Implementation: lists the folder once for case-insensitive lookup, then falls
|
|
45
|
+
* back to direct {@link FileSystemPort.exists} probes for each candidate. The
|
|
46
|
+
* fallback covers (a) folders that don't list cleanly (e.g. fake fs in tests
|
|
47
|
+
* that adds files without registering parent dir entries) and (b) any race
|
|
48
|
+
* where a file appeared after the listing.
|
|
49
|
+
*/
|
|
50
|
+
export async function findArtifact(folder, kind, fs) {
|
|
51
|
+
const index = await buildFolderIndex(folder, fs);
|
|
52
|
+
const fromIndex = findArtifactInIndex(folder, kind, index);
|
|
53
|
+
if (fromIndex)
|
|
54
|
+
return fromIndex;
|
|
55
|
+
for (const candidate of ARTIFACT_FILENAMES[kind]) {
|
|
56
|
+
const candidatePath = join(folder, candidate);
|
|
57
|
+
if (await fs.exists(candidatePath)) {
|
|
58
|
+
return candidatePath;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Bulk variant of {@link findArtifact}: lists `folder` once and resolves all
|
|
65
|
+
* known artifact kinds in a single pass. Returns a record `kind → path | null`.
|
|
66
|
+
* Use when checking presence of multiple artifacts on the same folder (e.g.
|
|
67
|
+
* `listArtefacts` in checkpoint state-reader) — avoids N readdir calls.
|
|
68
|
+
*
|
|
69
|
+
* Falls back to {@link FileSystemPort.exists} per candidate when the listing
|
|
70
|
+
* doesn't include a candidate filename, mirroring the resilience of
|
|
71
|
+
* {@link findArtifact}.
|
|
72
|
+
*/
|
|
73
|
+
export async function listExistingArtifacts(folder, fs) {
|
|
74
|
+
const index = await buildFolderIndex(folder, fs);
|
|
75
|
+
const result = {};
|
|
76
|
+
for (const kind of Object.keys(ARTIFACT_FILENAMES)) {
|
|
77
|
+
let found = findArtifactInIndex(folder, kind, index);
|
|
78
|
+
if (!found) {
|
|
79
|
+
for (const candidate of ARTIFACT_FILENAMES[kind]) {
|
|
80
|
+
const candidatePath = join(folder, candidate);
|
|
81
|
+
if (await fs.exists(candidatePath)) {
|
|
82
|
+
found = candidatePath;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
result[kind] = found;
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
async function buildFolderIndex(folder, fs) {
|
|
92
|
+
const index = new Map();
|
|
93
|
+
let entries;
|
|
94
|
+
try {
|
|
95
|
+
entries = await fs.list(folder);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return index;
|
|
99
|
+
}
|
|
100
|
+
for (const e of entries) {
|
|
101
|
+
if (e.type !== "file")
|
|
102
|
+
continue;
|
|
103
|
+
index.set(e.name.toLowerCase(), e.name);
|
|
104
|
+
}
|
|
105
|
+
return index;
|
|
106
|
+
}
|
|
107
|
+
function findArtifactInIndex(folder, kind, index) {
|
|
108
|
+
for (const candidate of ARTIFACT_FILENAMES[kind]) {
|
|
109
|
+
const actual = index.get(candidate.toLowerCase());
|
|
110
|
+
if (actual) {
|
|
111
|
+
return join(folder, actual);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=session-artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-artifacts.js","sourceRoot":"","sources":["../../src/application/session-artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-create-service.d.ts","sourceRoot":"","sources":["../../src/application/session-create-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"session-create-service.d.ts","sourceRoot":"","sources":["../../src/application/session-create-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,gCAAgC,CAAC;AAmCxC,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,qBAAqB,CAAC;IACjC,aAAa,EAAE,yBAAyB,CAAC;CAC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,uBAAuB,GAAG,kBAAkB,CAAC,CAyBvD"}
|
|
@@ -3,9 +3,32 @@ import { renderOrigenBlock, resolveOrigen } from "./handoff.js";
|
|
|
3
3
|
import { buildRow, upsertRow } from "./history-table.js";
|
|
4
4
|
import { runProjectMdUpsertWrite, } from "./project-md-upsert-service.js";
|
|
5
5
|
import { renderRefs } from "./render/history-row.js";
|
|
6
|
+
import { canonicalArtifactPath } from "./session-artifacts.js";
|
|
6
7
|
import { getObjetivoTemplate, renderTemplate } from "./templates/objetivo.js";
|
|
7
|
-
const
|
|
8
|
-
|
|
8
|
+
const TIPO_ALIASES = {
|
|
9
|
+
proyecto: "project",
|
|
10
|
+
project: "project",
|
|
11
|
+
sistema: "system",
|
|
12
|
+
system: "system",
|
|
13
|
+
};
|
|
14
|
+
const VALID_TIPOS_DESIGN = ["project", "system"];
|
|
15
|
+
const TIPO_LEGACY_ACCEPTED = ["proyecto", "sistema"];
|
|
16
|
+
const MODALIDAD_ALIASES = {
|
|
17
|
+
tecnica: "technical",
|
|
18
|
+
technical: "technical",
|
|
19
|
+
datos: "data",
|
|
20
|
+
data: "data",
|
|
21
|
+
incidente: "incident",
|
|
22
|
+
incident: "incident",
|
|
23
|
+
};
|
|
24
|
+
const VALID_MODALIDADES_ANALYZE = ["technical", "data", "incident"];
|
|
25
|
+
const MODALIDAD_LEGACY_ACCEPTED = ["tecnica", "datos", "incidente"];
|
|
26
|
+
function normalizeTipo(raw) {
|
|
27
|
+
return TIPO_ALIASES[raw.trim().toLowerCase()] ?? raw;
|
|
28
|
+
}
|
|
29
|
+
function normalizeModalidad(raw) {
|
|
30
|
+
return MODALIDAD_ALIASES[raw.trim().toLowerCase()] ?? raw;
|
|
31
|
+
}
|
|
9
32
|
export async function runSessionCreate(fs, env, paths, input) {
|
|
10
33
|
const validated = validateInput(input);
|
|
11
34
|
if ("error" in validated)
|
|
@@ -88,7 +111,7 @@ async function writeObjetivo(fs, folderInfo, flow, input, origen) {
|
|
|
88
111
|
values.tipo = input.tipo;
|
|
89
112
|
if (flow === "analyze" && input.modalidad)
|
|
90
113
|
values.modalidad = input.modalidad;
|
|
91
|
-
await fs.writeText(
|
|
114
|
+
await fs.writeText(canonicalArtifactPath(folderInfo.sessionPath, "objective"), renderTemplate(template, values));
|
|
92
115
|
}
|
|
93
116
|
async function writeHistoryRow(fs, paths, code, flow, input, origen) {
|
|
94
117
|
const today = formatToday();
|
|
@@ -127,7 +150,7 @@ function composeRecord(folderInfo, flow, input, branches, origen) {
|
|
|
127
150
|
path: folderInfo.sessionPath,
|
|
128
151
|
phase: "planning",
|
|
129
152
|
branches,
|
|
130
|
-
objective_path:
|
|
153
|
+
objective_path: canonicalArtifactPath(folderInfo.sessionPath, "objective"),
|
|
131
154
|
history_updated: true,
|
|
132
155
|
origen: origen ? { flow: origen.flow, code: origen.code, folder: origen.folder } : null,
|
|
133
156
|
...(flow === "design" && input.tipo ? { tipo: input.tipo } : {}),
|
|
@@ -145,40 +168,47 @@ function validateFlowSpecifics(flow, input) {
|
|
|
145
168
|
function validateDesignArgs(input) {
|
|
146
169
|
if (!input.tipo) {
|
|
147
170
|
return {
|
|
148
|
-
error: "--
|
|
171
|
+
error: "--type es obligatorio para flow=design",
|
|
149
172
|
expected: [...VALID_TIPOS_DESIGN],
|
|
150
173
|
};
|
|
151
174
|
}
|
|
152
|
-
|
|
153
|
-
|
|
175
|
+
const normalized = normalizeTipo(input.tipo);
|
|
176
|
+
if (!VALID_TIPOS_DESIGN.includes(normalized)) {
|
|
177
|
+
return {
|
|
178
|
+
error: `--type inválido: '${input.tipo}'`,
|
|
179
|
+
expected: [...VALID_TIPOS_DESIGN, ...TIPO_LEGACY_ACCEPTED],
|
|
180
|
+
};
|
|
154
181
|
}
|
|
182
|
+
input.tipo = normalized;
|
|
155
183
|
if (input.modalidad)
|
|
156
|
-
return { error: "--
|
|
184
|
+
return { error: "--modality sólo aplica a flow=analyze" };
|
|
157
185
|
return null;
|
|
158
186
|
}
|
|
159
187
|
function validateAnalyzeArgs(input) {
|
|
160
188
|
if (!input.modalidad) {
|
|
161
189
|
return {
|
|
162
|
-
error: "--
|
|
190
|
+
error: "--modality es obligatorio para flow=analyze",
|
|
163
191
|
expected: [...VALID_MODALIDADES_ANALYZE],
|
|
164
192
|
};
|
|
165
193
|
}
|
|
166
|
-
|
|
194
|
+
const normalized = normalizeModalidad(input.modalidad);
|
|
195
|
+
if (!VALID_MODALIDADES_ANALYZE.includes(normalized)) {
|
|
167
196
|
return {
|
|
168
|
-
error: `--
|
|
169
|
-
expected: [...VALID_MODALIDADES_ANALYZE],
|
|
197
|
+
error: `--modality inválido: '${input.modalidad}'`,
|
|
198
|
+
expected: [...VALID_MODALIDADES_ANALYZE, ...MODALIDAD_LEGACY_ACCEPTED],
|
|
170
199
|
};
|
|
171
200
|
}
|
|
201
|
+
input.modalidad = normalized;
|
|
172
202
|
if (input.tipo)
|
|
173
|
-
return { error: "--
|
|
203
|
+
return { error: "--type sólo aplica a flow=design" };
|
|
174
204
|
return null;
|
|
175
205
|
}
|
|
176
206
|
function validateDevArgs(input) {
|
|
177
207
|
if (input.tipo) {
|
|
178
|
-
return { error: "--
|
|
208
|
+
return { error: "--type sólo aplica a flow=design (flow actual: 'dev')" };
|
|
179
209
|
}
|
|
180
210
|
if (input.modalidad) {
|
|
181
|
-
return { error: "--
|
|
211
|
+
return { error: "--modality sólo aplica a flow=analyze (flow actual: 'dev')" };
|
|
182
212
|
}
|
|
183
213
|
return null;
|
|
184
214
|
}
|