@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.
Files changed (230) hide show
  1. package/dist/adapters/node-file-system.d.ts +7 -0
  2. package/dist/adapters/node-file-system.d.ts.map +1 -1
  3. package/dist/adapters/node-file-system.js +22 -2
  4. package/dist/adapters/node-file-system.js.map +1 -1
  5. package/dist/application/artifacts-service.d.ts.map +1 -1
  6. package/dist/application/artifacts-service.js +15 -13
  7. package/dist/application/artifacts-service.js.map +1 -1
  8. package/dist/application/checkpoint/markdown.d.ts +3 -0
  9. package/dist/application/checkpoint/markdown.d.ts.map +1 -0
  10. package/dist/application/checkpoint/markdown.js +86 -0
  11. package/dist/application/checkpoint/markdown.js.map +1 -0
  12. package/dist/application/checkpoint/state-reader.d.ts +28 -0
  13. package/dist/application/checkpoint/state-reader.d.ts.map +1 -0
  14. package/dist/application/checkpoint/state-reader.js +152 -0
  15. package/dist/application/checkpoint/state-reader.js.map +1 -0
  16. package/dist/application/checkpoint-service.d.ts.map +1 -1
  17. package/dist/application/checkpoint-service.js +15 -16
  18. package/dist/application/checkpoint-service.js.map +1 -1
  19. package/dist/application/checkpoint-write-service.d.ts.map +1 -1
  20. package/dist/application/checkpoint-write-service.js +2 -235
  21. package/dist/application/checkpoint-write-service.js.map +1 -1
  22. package/dist/application/decisiones-service.d.ts.map +1 -1
  23. package/dist/application/decisiones-service.js +5 -5
  24. package/dist/application/decisiones-service.js.map +1 -1
  25. package/dist/application/dependencias-service.d.ts.map +1 -1
  26. package/dist/application/dependencias-service.js +5 -5
  27. package/dist/application/dependencias-service.js.map +1 -1
  28. package/dist/application/dev-graduate-service.d.ts +2 -48
  29. package/dist/application/dev-graduate-service.d.ts.map +1 -1
  30. package/dist/application/dev-graduate-service.js +1 -226
  31. package/dist/application/dev-graduate-service.js.map +1 -1
  32. package/dist/application/graduate/handlers.d.ts +61 -0
  33. package/dist/application/graduate/handlers.d.ts.map +1 -0
  34. package/dist/application/graduate/handlers.js +148 -0
  35. package/dist/application/graduate/handlers.js.map +1 -0
  36. package/dist/application/graduate/helpers.d.ts +13 -0
  37. package/dist/application/graduate/helpers.d.ts.map +1 -0
  38. package/dist/application/graduate/helpers.js +82 -0
  39. package/dist/application/graduate/helpers.js.map +1 -0
  40. package/dist/application/handoff.d.ts.map +1 -1
  41. package/dist/application/handoff.js +14 -11
  42. package/dist/application/handoff.js.map +1 -1
  43. package/dist/application/markdown.d.ts +18 -0
  44. package/dist/application/markdown.d.ts.map +1 -1
  45. package/dist/application/markdown.js +129 -0
  46. package/dist/application/markdown.js.map +1 -1
  47. package/dist/application/multiroot/claude.d.ts +26 -0
  48. package/dist/application/multiroot/claude.d.ts.map +1 -0
  49. package/dist/application/multiroot/claude.js +125 -0
  50. package/dist/application/multiroot/claude.js.map +1 -0
  51. package/dist/application/multiroot/codex.d.ts +36 -0
  52. package/dist/application/multiroot/codex.d.ts.map +1 -0
  53. package/dist/application/multiroot/codex.js +221 -0
  54. package/dist/application/multiroot/codex.js.map +1 -0
  55. package/dist/application/multiroot/paths.d.ts +6 -0
  56. package/dist/application/multiroot/paths.d.ts.map +1 -0
  57. package/dist/application/multiroot/paths.js +23 -0
  58. package/dist/application/multiroot/paths.js.map +1 -0
  59. package/dist/application/multiroot-service.d.ts +2 -52
  60. package/dist/application/multiroot-service.d.ts.map +1 -1
  61. package/dist/application/multiroot-service.js +2 -364
  62. package/dist/application/multiroot-service.js.map +1 -1
  63. package/dist/application/objetivo-service.d.ts.map +1 -1
  64. package/dist/application/objetivo-service.js +3 -3
  65. package/dist/application/objetivo-service.js.map +1 -1
  66. package/dist/application/parsers/objetivo.d.ts.map +1 -1
  67. package/dist/application/parsers/objetivo.js +7 -10
  68. package/dist/application/parsers/objetivo.js.map +1 -1
  69. package/dist/application/phase-detect-service.d.ts.map +1 -1
  70. package/dist/application/phase-detect-service.js +6 -6
  71. package/dist/application/phase-detect-service.js.map +1 -1
  72. package/dist/application/plugin-doctor/common.d.ts +27 -0
  73. package/dist/application/plugin-doctor/common.d.ts.map +1 -0
  74. package/dist/application/plugin-doctor/common.js +28 -0
  75. package/dist/application/plugin-doctor/common.js.map +1 -0
  76. package/dist/application/plugin-doctor/exported-skills.d.ts +8 -0
  77. package/dist/application/plugin-doctor/exported-skills.d.ts.map +1 -0
  78. package/dist/application/plugin-doctor/exported-skills.js +128 -0
  79. package/dist/application/plugin-doctor/exported-skills.js.map +1 -0
  80. package/dist/application/plugin-doctor/hooks.d.ts +8 -0
  81. package/dist/application/plugin-doctor/hooks.d.ts.map +1 -0
  82. package/dist/application/plugin-doctor/hooks.js +53 -0
  83. package/dist/application/plugin-doctor/hooks.js.map +1 -0
  84. package/dist/application/plugin-doctor/manifests.d.ts +11 -0
  85. package/dist/application/plugin-doctor/manifests.d.ts.map +1 -0
  86. package/dist/application/plugin-doctor/manifests.js +83 -0
  87. package/dist/application/plugin-doctor/manifests.js.map +1 -0
  88. package/dist/application/plugin-doctor/mcp.d.ts +10 -0
  89. package/dist/application/plugin-doctor/mcp.d.ts.map +1 -0
  90. package/dist/application/plugin-doctor/mcp.js +58 -0
  91. package/dist/application/plugin-doctor/mcp.js.map +1 -0
  92. package/dist/application/plugin-doctor/skills.d.ts +16 -0
  93. package/dist/application/plugin-doctor/skills.d.ts.map +1 -0
  94. package/dist/application/plugin-doctor/skills.js +167 -0
  95. package/dist/application/plugin-doctor/skills.js.map +1 -0
  96. package/dist/application/plugin-doctor-service.d.ts +2 -23
  97. package/dist/application/plugin-doctor-service.d.ts.map +1 -1
  98. package/dist/application/plugin-doctor-service.js +10 -514
  99. package/dist/application/plugin-doctor-service.js.map +1 -1
  100. package/dist/application/release-data/artifacts.d.ts +32 -0
  101. package/dist/application/release-data/artifacts.d.ts.map +1 -0
  102. package/dist/application/release-data/artifacts.js +105 -0
  103. package/dist/application/release-data/artifacts.js.map +1 -0
  104. package/dist/application/release-data/bundles.d.ts +15 -0
  105. package/dist/application/release-data/bundles.d.ts.map +1 -0
  106. package/dist/application/release-data/bundles.js +42 -0
  107. package/dist/application/release-data/bundles.js.map +1 -0
  108. package/dist/application/release-data/common.d.ts +11 -0
  109. package/dist/application/release-data/common.d.ts.map +1 -0
  110. package/dist/application/release-data/common.js +61 -0
  111. package/dist/application/release-data/common.js.map +1 -0
  112. package/dist/application/release-data/sessions.d.ts +19 -0
  113. package/dist/application/release-data/sessions.d.ts.map +1 -0
  114. package/dist/application/release-data/sessions.js +51 -0
  115. package/dist/application/release-data/sessions.js.map +1 -0
  116. package/dist/application/release-data-service.d.ts +8 -50
  117. package/dist/application/release-data-service.d.ts.map +1 -1
  118. package/dist/application/release-data-service.js +14 -252
  119. package/dist/application/release-data-service.js.map +1 -1
  120. package/dist/application/session-artifacts.d.ts +48 -0
  121. package/dist/application/session-artifacts.d.ts.map +1 -0
  122. package/dist/application/session-artifacts.js +116 -0
  123. package/dist/application/session-artifacts.js.map +1 -0
  124. package/dist/application/session-create-service.d.ts.map +1 -1
  125. package/dist/application/session-create-service.js +45 -15
  126. package/dist/application/session-create-service.js.map +1 -1
  127. package/dist/application/session-resolver.d.ts.map +1 -1
  128. package/dist/application/session-resolver.js +10 -15
  129. package/dist/application/session-resolver.js.map +1 -1
  130. package/dist/application/session-resume-service.d.ts.map +1 -1
  131. package/dist/application/session-resume-service.js +3 -2
  132. package/dist/application/session-resume-service.js.map +1 -1
  133. package/dist/application/templates/objetivo.js +32 -32
  134. package/dist/cli/commands/auto-plan-decide.d.ts +3 -0
  135. package/dist/cli/commands/auto-plan-decide.d.ts.map +1 -0
  136. package/dist/cli/commands/auto-plan-decide.js +19 -0
  137. package/dist/cli/commands/auto-plan-decide.js.map +1 -0
  138. package/dist/cli/commands/bootstrap-dsn.d.ts +3 -0
  139. package/dist/cli/commands/bootstrap-dsn.d.ts.map +1 -0
  140. package/dist/cli/commands/bootstrap-dsn.js +20 -0
  141. package/dist/cli/commands/bootstrap-dsn.js.map +1 -0
  142. package/dist/cli/commands/check-branch.d.ts +3 -0
  143. package/dist/cli/commands/check-branch.d.ts.map +1 -0
  144. package/dist/cli/commands/check-branch.js +30 -0
  145. package/dist/cli/commands/check-branch.js.map +1 -0
  146. package/dist/cli/commands/checkpoint-read.d.ts +3 -0
  147. package/dist/cli/commands/checkpoint-read.d.ts.map +1 -0
  148. package/dist/cli/commands/checkpoint-read.js +19 -0
  149. package/dist/cli/commands/checkpoint-read.js.map +1 -0
  150. package/dist/cli/commands/code-scan.d.ts +3 -0
  151. package/dist/cli/commands/code-scan.d.ts.map +1 -0
  152. package/dist/cli/commands/code-scan.js +74 -0
  153. package/dist/cli/commands/code-scan.js.map +1 -0
  154. package/dist/cli/commands/compress-checkpoint.d.ts +3 -0
  155. package/dist/cli/commands/compress-checkpoint.d.ts.map +1 -0
  156. package/dist/cli/commands/compress-checkpoint.js +28 -0
  157. package/dist/cli/commands/compress-checkpoint.js.map +1 -0
  158. package/dist/cli/commands/graduate.d.ts +3 -0
  159. package/dist/cli/commands/graduate.d.ts.map +1 -0
  160. package/dist/cli/commands/graduate.js +36 -0
  161. package/dist/cli/commands/graduate.js.map +1 -0
  162. package/dist/cli/commands/hub-init.d.ts.map +1 -1
  163. package/dist/cli/commands/hub-init.js +13 -43
  164. package/dist/cli/commands/hub-init.js.map +1 -1
  165. package/dist/cli/commands/phase-detect.d.ts +3 -0
  166. package/dist/cli/commands/phase-detect.d.ts.map +1 -0
  167. package/dist/cli/commands/phase-detect.js +19 -0
  168. package/dist/cli/commands/phase-detect.js.map +1 -0
  169. package/dist/cli/commands/phase-next.d.ts +3 -0
  170. package/dist/cli/commands/phase-next.d.ts.map +1 -0
  171. package/dist/cli/commands/phase-next.js +23 -0
  172. package/dist/cli/commands/phase-next.js.map +1 -0
  173. package/dist/cli/commands/project-md-upsert.d.ts.map +1 -1
  174. package/dist/cli/commands/project-md-upsert.js +2 -49
  175. package/dist/cli/commands/project-md-upsert.js.map +1 -1
  176. package/dist/cli/commands/resume-summary.d.ts +3 -0
  177. package/dist/cli/commands/resume-summary.d.ts.map +1 -0
  178. package/dist/cli/commands/resume-summary.js +10 -0
  179. package/dist/cli/commands/resume-summary.js.map +1 -0
  180. package/dist/cli/commands/session-create.js +2 -2
  181. package/dist/cli/commands/session-create.js.map +1 -1
  182. package/dist/cli/commands/skill-index.d.ts +3 -0
  183. package/dist/cli/commands/skill-index.d.ts.map +1 -0
  184. package/dist/cli/commands/skill-index.js +20 -0
  185. package/dist/cli/commands/skill-index.js.map +1 -0
  186. package/dist/cli/commands/sources.d.ts +3 -0
  187. package/dist/cli/commands/sources.d.ts.map +1 -0
  188. package/dist/cli/commands/sources.js +30 -0
  189. package/dist/cli/commands/sources.js.map +1 -0
  190. package/dist/cli/commands/specialty-choose.d.ts +3 -0
  191. package/dist/cli/commands/specialty-choose.d.ts.map +1 -0
  192. package/dist/cli/commands/specialty-choose.js +30 -0
  193. package/dist/cli/commands/specialty-choose.js.map +1 -0
  194. package/dist/cli/commands/stack.d.ts +3 -0
  195. package/dist/cli/commands/stack.d.ts.map +1 -0
  196. package/dist/cli/commands/stack.js +11 -0
  197. package/dist/cli/commands/stack.js.map +1 -0
  198. package/dist/cli/commands/topic-change-check.d.ts +3 -0
  199. package/dist/cli/commands/topic-change-check.d.ts.map +1 -0
  200. package/dist/cli/commands/topic-change-check.js +23 -0
  201. package/dist/cli/commands/topic-change-check.js.map +1 -0
  202. package/dist/cli/commands/upgrade-hub-mode.d.ts +3 -0
  203. package/dist/cli/commands/upgrade-hub-mode.d.ts.map +1 -0
  204. package/dist/cli/commands/upgrade-hub-mode.js +11 -0
  205. package/dist/cli/commands/upgrade-hub-mode.js.map +1 -0
  206. package/dist/cli/commands/workflows.d.ts +3 -0
  207. package/dist/cli/commands/workflows.d.ts.map +1 -0
  208. package/dist/cli/commands/workflows.js +30 -0
  209. package/dist/cli/commands/workflows.js.map +1 -0
  210. package/dist/cli/commands/workspace-mode.d.ts +3 -0
  211. package/dist/cli/commands/workspace-mode.d.ts.map +1 -0
  212. package/dist/cli/commands/workspace-mode.js +11 -0
  213. package/dist/cli/commands/workspace-mode.js.map +1 -0
  214. package/dist/cli/helpers/objetivo-loader.d.ts +3 -0
  215. package/dist/cli/helpers/objetivo-loader.d.ts.map +1 -0
  216. package/dist/cli/helpers/objetivo-loader.js +17 -0
  217. package/dist/cli/helpers/objetivo-loader.js.map +1 -0
  218. package/dist/cli/main.js +18 -4
  219. package/dist/cli/main.js.map +1 -1
  220. package/dist/cli/parsers/fuentes.d.ts +11 -0
  221. package/dist/cli/parsers/fuentes.d.ts.map +1 -0
  222. package/dist/cli/parsers/fuentes.js +37 -0
  223. package/dist/cli/parsers/fuentes.js.map +1 -0
  224. package/dist/cli/parsers/working-branches.d.ts +2 -0
  225. package/dist/cli/parsers/working-branches.d.ts.map +1 -0
  226. package/dist/cli/parsers/working-branches.js +14 -0
  227. package/dist/cli/parsers/working-branches.js.map +1 -0
  228. package/dist/domain/session.d.ts +2 -2
  229. package/dist/domain/session.d.ts.map +1 -1
  230. 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 { buildSessionEntry, parseSessionFolder } from "./session-resolver.js";
5
- const ARTIFACT_FILES = {
6
- objetivo: "OBJETIVO.md",
7
- decisiones: "DECISIONES.md",
8
- tasks: "TASKS.md",
9
- dependencias: "DEPENDENCIAS.md",
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 enrichSessionsWithLegacyMeta(sessions, cwd, runtime) {
288
- const migrateCmd = runtime?.slashCommands?.migrate ?? "(run namespace-specific migrate command)";
289
- const enriched = [];
290
- const legacy = [];
291
- for (const s of sessions) {
292
- const item = { ...s };
293
- if (s.is_legacy_format) {
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 { enriched, legacy };
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":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAwB,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAEL,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AAKpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AA8BjE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAkB,EAClB,GAAY,EACZ,KAAmB,EACnB,KAAuB,EACvB,OAAyB;IAEzB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IACtB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC;IACvC,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAE9D,IAAI,QAAgB,CAAC;IACrB,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/D,WAAW,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,KAAK,EAAG,CAAW,CAAC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;IACxE,CAAC;IAED,MAAM,SAAS,GAAuE;QACpF,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;QACtC,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,IAAI;KAC3C,CAAC;IACF,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC7D,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACzE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,4BAA4B,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAElF,MAAM,OAAO,GAAsB;QACjC,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;QACvC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;QACtD,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;QAC/D,QAAQ,EAAE,QAAQ;QAClB,cAAc,EAAE,QAAQ,CAAC,MAAM;KAChC,CAAC;IACF,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,GAAG,aAAa,KAAK,KAAK,CAAC;QACzC,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC;IACnC,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC;IACnC,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAE3D,IAAI,KAAK,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,GAA6B,EAAE,CAAC;QAC1C,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;YAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAC1E,OAAO,CAAC,iBAAiB,GAAG,MAAM,oBAAoB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,EAAkB,EAClB,GAAW,EACX,KAAmB;IAEnB,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAAE,SAAS;QACvC,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QAC/E,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAC/B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -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;AASxC,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"}
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 VALID_TIPOS_DESIGN = ["proyecto", "sistema"];
8
- const VALID_MODALIDADES_ANALYZE = ["tecnica", "datos", "incidente"];
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(join(folderInfo.sessionPath, "OBJETIVO.md"), renderTemplate(template, values));
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: join(folderInfo.sessionPath, "OBJETIVO.md"),
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: "--tipo es obligatorio para flow=design",
171
+ error: "--type es obligatorio para flow=design",
149
172
  expected: [...VALID_TIPOS_DESIGN],
150
173
  };
151
174
  }
152
- if (!VALID_TIPOS_DESIGN.includes(input.tipo)) {
153
- return { error: `--tipo inválido: '${input.tipo}'`, expected: [...VALID_TIPOS_DESIGN] };
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: "--modalidad sólo aplica a flow=analyze" };
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: "--modalidad es obligatorio para flow=analyze",
190
+ error: "--modality es obligatorio para flow=analyze",
163
191
  expected: [...VALID_MODALIDADES_ANALYZE],
164
192
  };
165
193
  }
166
- if (!VALID_MODALIDADES_ANALYZE.includes(input.modalidad)) {
194
+ const normalized = normalizeModalidad(input.modalidad);
195
+ if (!VALID_MODALIDADES_ANALYZE.includes(normalized)) {
167
196
  return {
168
- error: `--modalidad inválido: '${input.modalidad}'`,
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: "--tipo sólo aplica a flow=design" };
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: "--tipo sólo aplica a flow=design (flow actual: 'dev')" };
208
+ return { error: "--type sólo aplica a flow=design (flow actual: 'dev')" };
179
209
  }
180
210
  if (input.modalidad) {
181
- return { error: "--modalidad sólo aplica a flow=analyze (flow actual: 'dev')" };
211
+ return { error: "--modality sólo aplica a flow=analyze (flow actual: 'dev')" };
182
212
  }
183
213
  return null;
184
214
  }