@tacuchi/agent-workflow-cli 21.13.0 → 21.15.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/parsers/project-block.js +164 -54
- package/dist/application/parsers/project-block.js.map +1 -1
- package/dist/application/project-md-upsert-service.js +153 -46
- package/dist/application/project-md-upsert-service.js.map +1 -1
- package/dist/application/render/project-block.js +37 -16
- package/dist/application/render/project-block.js.map +1 -1
- package/dist/application/retirement/graph.js +12 -2
- package/dist/application/retirement/graph.js.map +1 -1
- package/dist/application/retirement/prepare.js +21 -2
- package/dist/application/retirement/prepare.js.map +1 -1
- package/dist/application/retirement/preview.js +32 -0
- package/dist/application/retirement/preview.js.map +1 -1
- package/dist/application/retirement/resolve.js +4 -4
- package/dist/application/retirement/resolve.js.map +1 -1
- package/dist/application/session-create-service.js +94 -4
- package/dist/application/session-create-service.js.map +1 -1
- package/dist/application/workspace-init-service.js +43 -27
- package/dist/application/workspace-init-service.js.map +1 -1
- package/dist/cli/commands/retirement.js +10 -1
- package/dist/cli/commands/retirement.js.map +1 -1
- package/dist/cli/commands/session-create.js +1 -1
- package/dist/cli/commands/session-create.js.map +1 -1
- package/dist/cli/commands/workspace-init.js +12 -0
- package/dist/cli/commands/workspace-init.js.map +1 -1
- package/dist/domain/flow/authority.js +25 -6
- package/dist/domain/flow/authority.js.map +1 -1
- package/dist/domain/retirement/proposal.js +1 -0
- package/dist/domain/retirement/proposal.js.map +1 -1
- package/package.json +1 -1
- package/skills/w/loops/CHASSIS.md +6 -5
|
@@ -6,7 +6,7 @@ import { parseMdSection } from "../markdown.js";
|
|
|
6
6
|
* the read loop previously pasted per service.
|
|
7
7
|
*/
|
|
8
8
|
export async function readWorkspaceBlock(fs, dir, markers, accept = () => true) {
|
|
9
|
-
for (const name of
|
|
9
|
+
for (const name of BLOCK_MIRROR_FILES) {
|
|
10
10
|
const path = join(dir, name);
|
|
11
11
|
if (!(await fs.exists(path)))
|
|
12
12
|
continue;
|
|
@@ -16,10 +16,22 @@ export async function readWorkspaceBlock(fs, dir, markers, accept = () => true)
|
|
|
16
16
|
}
|
|
17
17
|
return null;
|
|
18
18
|
}
|
|
19
|
+
/** The block is written to both files at once; a reader takes the first that has it. */
|
|
20
|
+
export const BLOCK_MIRROR_FILES = ["CLAUDE.md", "AGENTS.md"];
|
|
19
21
|
export const LEGACY_QTC_MARKERS = {
|
|
20
22
|
start: "<!-- QTC-PROJECT-START -->",
|
|
21
23
|
end: "<!-- QTC-PROJECT-END -->",
|
|
22
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* Lines the render emits by itself when a section has no data. They belong to
|
|
27
|
+
* the CLI, never to a person: preserving one would duplicate it on the next
|
|
28
|
+
* write (the render re-emits it AND the carried copy would come back too).
|
|
29
|
+
*/
|
|
30
|
+
export const BLOCK_PLACEHOLDER_PROYECTO = "_Describe el proyecto aquí: qué es y por qué existe._";
|
|
31
|
+
export const BLOCK_PLACEHOLDER_FUENTES = "_Sin fuentes declaradas. Edita manualmente o usa `project-md-upsert --init`._";
|
|
32
|
+
export const BLOCK_PLACEHOLDER_STACK = "_Stack sin detectar._";
|
|
33
|
+
/** Emitted by the pre-TypeScript generator for an undetectable stack. */
|
|
34
|
+
const LEGACY_STACK_PLACEHOLDER = "Edita manualmente si aplica.";
|
|
23
35
|
const STACK_KEY_MAP = {
|
|
24
36
|
lenguaje: "language",
|
|
25
37
|
framework: "framework",
|
|
@@ -50,24 +62,77 @@ function parseWithMarkers(text, markers) {
|
|
|
50
62
|
const statusText = parseMdSection(inner, "Status") ?? "";
|
|
51
63
|
const fuentes = parseFuentesTable(fuentesText);
|
|
52
64
|
const stack = parseStackList(stackText);
|
|
53
|
-
|
|
54
|
-
|
|
65
|
+
// Aliases first: a Status entry is a branch because it names a DECLARED
|
|
66
|
+
// source, not because of where it sits (see `readNestedRecord`).
|
|
67
|
+
const status = parseStatusBlock(statusText, new Set(fuentes.fuentes.map((f) => f.alias)));
|
|
68
|
+
const block = {
|
|
55
69
|
proyecto: stripLegacyModeLine(proyectoText),
|
|
56
|
-
fuentes,
|
|
57
|
-
stack,
|
|
70
|
+
fuentes: fuentes.fuentes,
|
|
71
|
+
stack: stack.stack,
|
|
58
72
|
default_branches: status.defaultBranches,
|
|
59
73
|
working_branches: status.workingBranches,
|
|
60
74
|
qa_branches: status.qaBranches,
|
|
61
75
|
last_activity: status.lastActivity,
|
|
62
76
|
};
|
|
77
|
+
const preserved = [
|
|
78
|
+
...fuentes.preserved,
|
|
79
|
+
...stack.preserved,
|
|
80
|
+
...status.preserved,
|
|
81
|
+
...foreignSections(inner),
|
|
82
|
+
];
|
|
83
|
+
if (preserved.length > 0)
|
|
84
|
+
block.preserved_lines = preserved;
|
|
85
|
+
if (status.dropped.length > 0)
|
|
86
|
+
block.dropped_lines = status.dropped;
|
|
87
|
+
return block;
|
|
88
|
+
}
|
|
89
|
+
/** The four `##` sections this block owns; anything else under a heading is somebody else's. */
|
|
90
|
+
const OWNED_SECTIONS = new Set(["proyecto", "fuentes", "stack", "status"]);
|
|
91
|
+
/**
|
|
92
|
+
* Whole sections the block does not own, heading included.
|
|
93
|
+
*
|
|
94
|
+
* The four owned ones are read BY NAME, so a `## Notas` a person adds was never
|
|
95
|
+
* seen by the parser and never came back — the silent loss this parser exists to
|
|
96
|
+
* stop, arriving through the one shape Markdown makes most natural. They are
|
|
97
|
+
* re-emitted last, after everything the CLI owns, because their original order
|
|
98
|
+
* relative to generated sections is not something a rewrite can honour.
|
|
99
|
+
*/
|
|
100
|
+
function foreignSections(inner) {
|
|
101
|
+
const kept = [];
|
|
102
|
+
let foreign = false;
|
|
103
|
+
for (const raw of inner.split("\n")) {
|
|
104
|
+
const heading = /^##\s+(.+)$/.exec(raw.trim());
|
|
105
|
+
if (heading !== null) {
|
|
106
|
+
foreign = !OWNED_SECTIONS.has((heading[1] ?? "").trim().toLowerCase());
|
|
107
|
+
}
|
|
108
|
+
if (!foreign)
|
|
109
|
+
continue;
|
|
110
|
+
if (raw.trim().length === 0 && kept.length === 0)
|
|
111
|
+
continue;
|
|
112
|
+
kept.push({ slot: "trailing", text: trimTrailing(raw) });
|
|
113
|
+
}
|
|
114
|
+
while (kept.length > 0 && (kept[kept.length - 1]?.text ?? "").length === 0)
|
|
115
|
+
kept.pop();
|
|
116
|
+
return kept;
|
|
117
|
+
}
|
|
118
|
+
/** Trailing blanks carry nothing and would churn the rewrite; indentation is content. */
|
|
119
|
+
function trimTrailing(raw) {
|
|
120
|
+
return raw.replace(/\s+$/, "");
|
|
63
121
|
}
|
|
64
122
|
function parseFuentesTable(text) {
|
|
65
123
|
const fuentes = [];
|
|
124
|
+
const preserved = [];
|
|
66
125
|
let header = null;
|
|
67
126
|
for (const raw of text.split("\n")) {
|
|
68
127
|
const line = raw.trim();
|
|
69
|
-
if (
|
|
128
|
+
if (line.length === 0)
|
|
70
129
|
continue;
|
|
130
|
+
if (!line.startsWith("|")) {
|
|
131
|
+
if (line !== BLOCK_PLACEHOLDER_FUENTES) {
|
|
132
|
+
preserved.push({ slot: "fuentes", text: trimTrailing(raw) });
|
|
133
|
+
}
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
71
136
|
const cells = line
|
|
72
137
|
.replace(/^\|/, "")
|
|
73
138
|
.replace(/\|$/, "")
|
|
@@ -80,13 +145,14 @@ function parseFuentesTable(text) {
|
|
|
80
145
|
header = cells.map((c) => c.toLowerCase());
|
|
81
146
|
continue;
|
|
82
147
|
}
|
|
83
|
-
if (cells.length < 3)
|
|
84
|
-
continue;
|
|
85
148
|
const alias = cells[0];
|
|
86
149
|
const path = cells[1];
|
|
87
150
|
const mainBranch = cells[2];
|
|
88
|
-
if (alias === undefined || path === undefined)
|
|
151
|
+
if (cells.length < 3 || alias === undefined || path === undefined) {
|
|
152
|
+
// A row the table shape cannot read: keep it rather than swallow it.
|
|
153
|
+
preserved.push({ slot: "fuentes", text: trimTrailing(raw) });
|
|
89
154
|
continue;
|
|
155
|
+
}
|
|
90
156
|
fuentes.push({
|
|
91
157
|
alias,
|
|
92
158
|
path,
|
|
@@ -94,94 +160,138 @@ function parseFuentesTable(text) {
|
|
|
94
160
|
main_branch: mainBranch !== undefined && mainBranch.length > 0 ? mainBranch : null,
|
|
95
161
|
});
|
|
96
162
|
}
|
|
97
|
-
return fuentes;
|
|
163
|
+
return { fuentes, preserved };
|
|
98
164
|
}
|
|
99
165
|
function parseStackList(text) {
|
|
100
166
|
const stack = {};
|
|
167
|
+
const preserved = [];
|
|
101
168
|
for (const raw of text.split("\n")) {
|
|
102
169
|
const line = raw.trim();
|
|
170
|
+
if (line.length === 0)
|
|
171
|
+
continue;
|
|
172
|
+
if (line === BLOCK_PLACEHOLDER_STACK || line === LEGACY_STACK_PLACEHOLDER)
|
|
173
|
+
continue;
|
|
103
174
|
const m = line.match(/^[-*]\s+(Lenguaje|Framework|BD|Build):\s*(.+)$/i);
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
175
|
+
const key = m?.[1] ? STACK_KEY_MAP[m[1].toLowerCase()] : undefined;
|
|
176
|
+
if (key && m?.[2]) {
|
|
177
|
+
stack[key] = m[2].trim();
|
|
178
|
+
continue;
|
|
109
179
|
}
|
|
180
|
+
preserved.push({ slot: "stack", text: trimTrailing(raw) });
|
|
110
181
|
}
|
|
111
|
-
return stack;
|
|
182
|
+
return { stack, preserved };
|
|
112
183
|
}
|
|
113
184
|
const DEFAULT_BRANCH_KEYS = new Set(["principal", "desarrollo", "qa"]);
|
|
114
|
-
|
|
185
|
+
/**
|
|
186
|
+
* Read `## Status`. Every line falls in exactly one of three buckets and none of
|
|
187
|
+
* them vanishes: a recognized entry (parsed), a CLI record the block can no
|
|
188
|
+
* longer honour (dropped, and declared by the caller), or anything else — kept
|
|
189
|
+
* verbatim at the slot it was found in.
|
|
190
|
+
*/
|
|
191
|
+
function parseStatusBlock(text, knownAliases) {
|
|
115
192
|
const defaultBranches = {};
|
|
116
193
|
const workingBranches = {};
|
|
117
194
|
const qaBranches = {};
|
|
195
|
+
const preserved = [];
|
|
196
|
+
const dropped = [];
|
|
118
197
|
let lastActivity = null;
|
|
119
198
|
let section = "none";
|
|
199
|
+
let slot = "status:start";
|
|
120
200
|
for (const raw of text.split("\n")) {
|
|
121
201
|
const stripped = raw.trim();
|
|
202
|
+
if (stripped.length === 0)
|
|
203
|
+
continue;
|
|
122
204
|
const transition = transitionSection(stripped);
|
|
123
205
|
if (transition.handled) {
|
|
124
206
|
section = transition.next;
|
|
207
|
+
slot = transition.slot;
|
|
125
208
|
if (transition.lastActivity !== undefined) {
|
|
126
209
|
lastActivity = transition.lastActivity;
|
|
127
210
|
}
|
|
128
211
|
continue;
|
|
129
212
|
}
|
|
130
|
-
|
|
213
|
+
const record = readNestedRecord(raw, stripped);
|
|
214
|
+
if (record === null || section === "none") {
|
|
215
|
+
preserved.push({ slot, text: trimTrailing(raw) });
|
|
131
216
|
continue;
|
|
132
|
-
const entry = stripped.slice(2).trim();
|
|
133
|
-
if (section === "defaults") {
|
|
134
|
-
addDefaultBranch(defaultBranches, entry);
|
|
135
|
-
}
|
|
136
|
-
else if (section === "working") {
|
|
137
|
-
addWorkingBranch(workingBranches, entry);
|
|
138
|
-
}
|
|
139
|
-
else if (section === "qa") {
|
|
140
|
-
addWorkingBranch(qaBranches, entry);
|
|
141
217
|
}
|
|
218
|
+
const out = { defaultBranches, workingBranches, qaBranches };
|
|
219
|
+
if (acceptRecord(section, record, out, knownAliases))
|
|
220
|
+
continue;
|
|
221
|
+
// Shape matched but the block cannot honour the key. Indentation decides
|
|
222
|
+
// WHERE it goes, and only here: an indented entry is one this CLI wrote, so
|
|
223
|
+
// a key nobody declares anymore is its own residue — pruned, and declared.
|
|
224
|
+
// A flush-left one is somebody's note that happens to read like `- k: v`,
|
|
225
|
+
// and deleting it is the very loss this parser exists to stop.
|
|
226
|
+
if (/^\s/.test(raw))
|
|
227
|
+
dropped.push(trimTrailing(raw));
|
|
228
|
+
else
|
|
229
|
+
preserved.push({ slot, text: trimTrailing(raw) });
|
|
142
230
|
}
|
|
143
|
-
return { defaultBranches, workingBranches, qaBranches, lastActivity };
|
|
231
|
+
return { defaultBranches, workingBranches, qaBranches, lastActivity, preserved, dropped };
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* A `- key: value` entry — the shape the render emits for its own records.
|
|
235
|
+
*
|
|
236
|
+
* Position is NOT the signature: that is how a note written after the branch
|
|
237
|
+
* header used to be adopted as a working branch and re-emitted nested under it,
|
|
238
|
+
* perpetuating itself from the first re-run. What identifies a record is its
|
|
239
|
+
* SHAPE plus a key the block already declares (`acceptRecord`).
|
|
240
|
+
*
|
|
241
|
+
* Indentation is deliberately NOT required. The render indents its own entries,
|
|
242
|
+
* but a block hand-edited or written by an older CLI carries them flush left,
|
|
243
|
+
* and demanding the indent would be the positional rule coming back in through
|
|
244
|
+
* another door: those branches would stop being branches, and four consumers
|
|
245
|
+
* read them.
|
|
246
|
+
*/
|
|
247
|
+
function readNestedRecord(_raw, stripped) {
|
|
248
|
+
if (!stripped.startsWith("- "))
|
|
249
|
+
return null;
|
|
250
|
+
const entry = stripped.slice(2).trim();
|
|
251
|
+
const colon = entry.indexOf(":");
|
|
252
|
+
if (colon <= 0)
|
|
253
|
+
return null;
|
|
254
|
+
const key = entry.slice(0, colon).trim();
|
|
255
|
+
const value = entry.slice(colon + 1).trim();
|
|
256
|
+
if (!key || !value)
|
|
257
|
+
return null;
|
|
258
|
+
return { key, value };
|
|
259
|
+
}
|
|
260
|
+
/** True when the record was stored; false when the block cannot honour it. */
|
|
261
|
+
function acceptRecord(section, record, out, knownAliases) {
|
|
262
|
+
if (section === "defaults") {
|
|
263
|
+
const role = record.key.toLowerCase();
|
|
264
|
+
if (!DEFAULT_BRANCH_KEYS.has(role))
|
|
265
|
+
return false;
|
|
266
|
+
out.defaultBranches[role] = record.value;
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
if (!knownAliases.has(record.key))
|
|
270
|
+
return false;
|
|
271
|
+
const target = section === "working" ? out.workingBranches : out.qaBranches;
|
|
272
|
+
target[record.key] = record.value;
|
|
273
|
+
return true;
|
|
144
274
|
}
|
|
145
275
|
function transitionSection(stripped) {
|
|
146
276
|
if (stripped.startsWith("- Ramas por defecto:"))
|
|
147
|
-
return { handled: true, next: "defaults" };
|
|
277
|
+
return { handled: true, next: "defaults", slot: "status:defaults" };
|
|
148
278
|
if (stripped.startsWith("- Ramas de trabajo actuales:"))
|
|
149
|
-
return { handled: true, next: "working" };
|
|
279
|
+
return { handled: true, next: "working", slot: "status:working" };
|
|
150
280
|
if (stripped.startsWith("- Ramas QA actuales:"))
|
|
151
|
-
return { handled: true, next: "qa" };
|
|
281
|
+
return { handled: true, next: "qa", slot: "status:qa" };
|
|
152
282
|
if (stripped.startsWith("- Última actividad:")) {
|
|
153
283
|
const idx = stripped.indexOf(":");
|
|
154
284
|
return {
|
|
155
285
|
handled: true,
|
|
156
286
|
next: "none",
|
|
287
|
+
slot: "status:activity",
|
|
157
288
|
lastActivity: idx >= 0 ? stripped.slice(idx + 1).trim() : null,
|
|
158
289
|
};
|
|
159
290
|
}
|
|
160
291
|
if (stripped.startsWith("- Histórico") || stripped.startsWith("- Historico")) {
|
|
161
|
-
return { handled: true, next: "none" };
|
|
162
|
-
}
|
|
163
|
-
return { handled: false, next: "none" };
|
|
164
|
-
}
|
|
165
|
-
/** `principal: main` → `{ principal: "main" }`. Unknown roles are ignored. */
|
|
166
|
-
function addDefaultBranch(out, entry) {
|
|
167
|
-
const colon = entry.indexOf(":");
|
|
168
|
-
if (colon <= 0)
|
|
169
|
-
return;
|
|
170
|
-
const role = entry.slice(0, colon).trim().toLowerCase();
|
|
171
|
-
const branch = entry.slice(colon + 1).trim();
|
|
172
|
-
if (!branch || !DEFAULT_BRANCH_KEYS.has(role))
|
|
173
|
-
return;
|
|
174
|
-
out[role] = branch;
|
|
175
|
-
}
|
|
176
|
-
function addWorkingBranch(out, entry) {
|
|
177
|
-
const colon = entry.indexOf(":");
|
|
178
|
-
if (colon <= 0)
|
|
179
|
-
return;
|
|
180
|
-
const alias = entry.slice(0, colon).trim();
|
|
181
|
-
const branch = entry.slice(colon + 1).trim();
|
|
182
|
-
if (alias && branch) {
|
|
183
|
-
out[alias] = branch;
|
|
292
|
+
return { handled: true, next: "none", slot: "status:historico" };
|
|
184
293
|
}
|
|
294
|
+
return { handled: false, next: "none", slot: "status:start" };
|
|
185
295
|
}
|
|
186
296
|
/**
|
|
187
297
|
* Drop any legacy `Mode:` line from the Proyecto text. The project/hub mode
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-block.js","sourceRoot":"","sources":["../../../src/application/parsers/project-block.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"project-block.js","sourceRoot":"","sources":["../../../src/application/parsers/project-block.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,114 @@
|
|
|
1
1
|
import { basename, join } from "node:path";
|
|
2
2
|
import { withCwdLock } from "./lock-service.js";
|
|
3
|
-
import { readWorkspaceBlock, } from "./parsers/project-block.js";
|
|
3
|
+
import { BLOCK_MIRROR_FILES, parseProjectBlock, readWorkspaceBlock, } from "./parsers/project-block.js";
|
|
4
4
|
import { relpath } from "./paths.js";
|
|
5
5
|
import { renderProjectBlock } from "./render/project-block.js";
|
|
6
6
|
import { detectStackDict } from "./stack-detect.js";
|
|
7
7
|
export async function runProjectMdUpsertWrite(fs, env, paths, input) {
|
|
8
8
|
const cwd = env.cwd();
|
|
9
|
-
const files = [join(cwd, "CLAUDE.md"), join(cwd, "AGENTS.md")];
|
|
10
9
|
const markers = paths.blockMarkers();
|
|
11
|
-
const
|
|
12
|
-
const renderInput = await buildRenderInput(fs, cwd, input, existing);
|
|
13
|
-
renderInput.markers = markers;
|
|
14
|
-
if (input.lastActivity !== undefined) {
|
|
15
|
-
renderInput.lastActivity = input.lastActivity;
|
|
16
|
-
}
|
|
17
|
-
const block = renderProjectBlock(renderInput);
|
|
10
|
+
const plan = await buildUpsertPlan(fs, cwd, markers, input);
|
|
18
11
|
return withCwdLock(fs, paths, async () => {
|
|
19
|
-
const writeResults = await writeAllFiles(fs,
|
|
20
|
-
return composePayload(input, writeResults,
|
|
12
|
+
const writeResults = await writeAllFiles(fs, cwd, plan.block, markers);
|
|
13
|
+
return composePayload(input, writeResults, plan);
|
|
21
14
|
});
|
|
22
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* What {@link runProjectMdUpsertWrite} WOULD do, decided from the same render
|
|
18
|
+
* and the same per-file rule but without touching disk (no lock either). A
|
|
19
|
+
* preview that recomputed its own answer would be free to disagree with the run.
|
|
20
|
+
*/
|
|
21
|
+
export async function previewProjectMdUpsert(fs, env, paths, input) {
|
|
22
|
+
const cwd = env.cwd();
|
|
23
|
+
const markers = paths.blockMarkers();
|
|
24
|
+
const plan = await buildUpsertPlan(fs, cwd, markers, input);
|
|
25
|
+
const results = [];
|
|
26
|
+
for (const file of blockFiles(cwd)) {
|
|
27
|
+
const write = await planBlockWrite(fs, file, plan.block, markers);
|
|
28
|
+
results.push({ ...fileInfo(file, cwd), action: write.action });
|
|
29
|
+
}
|
|
30
|
+
// A preview whose per-file verdict is hidden behind --detail is not a preview.
|
|
31
|
+
return composePayload({ ...input, verbose: true }, { results, hasError: false }, plan);
|
|
32
|
+
}
|
|
33
|
+
function blockFiles(cwd) {
|
|
34
|
+
return BLOCK_MIRROR_FILES.map((name) => join(cwd, name));
|
|
35
|
+
}
|
|
36
|
+
function fileInfo(file, cwd) {
|
|
37
|
+
return { file: basename(file), path: relpath(file, cwd) };
|
|
38
|
+
}
|
|
39
|
+
async function buildUpsertPlan(fs, cwd, markers, input) {
|
|
40
|
+
const existing = await readWorkspaceBlock(fs, cwd, markers);
|
|
41
|
+
const mirrored = await readMirroredExtras(fs, cwd, markers);
|
|
42
|
+
const render = await buildRenderInput(fs, cwd, input, existing);
|
|
43
|
+
render.markers = markers;
|
|
44
|
+
if (mirrored.preserved.length > 0)
|
|
45
|
+
render.preservedLines = mirrored.preserved;
|
|
46
|
+
if (input.lastActivity !== undefined)
|
|
47
|
+
render.lastActivity = input.lastActivity;
|
|
48
|
+
const dropped = [...mirrored.dropped, ...pruneUndeclaredBranches(input, render)];
|
|
49
|
+
return { block: renderProjectBlock(render), render, dropped };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Foreign and unhonourable lines from BOTH mirrors of the block. The same block
|
|
53
|
+
* lives in CLAUDE.md and AGENTS.md, and a person edits whichever file their host
|
|
54
|
+
* reads — collecting only from the first one would wipe a note left in the other.
|
|
55
|
+
*/
|
|
56
|
+
async function readMirroredExtras(fs, cwd, markers) {
|
|
57
|
+
const preserved = [];
|
|
58
|
+
const dropped = [];
|
|
59
|
+
const seenPreserved = new Set();
|
|
60
|
+
const seenDropped = new Set();
|
|
61
|
+
for (const file of blockFiles(cwd)) {
|
|
62
|
+
if (!(await fs.exists(file)))
|
|
63
|
+
continue;
|
|
64
|
+
const block = parseProjectBlock(await fs.readText(file), markers);
|
|
65
|
+
if (block === null)
|
|
66
|
+
continue;
|
|
67
|
+
for (const line of block.preserved_lines ?? []) {
|
|
68
|
+
const key = `${line.slot}\u0000${line.text}`;
|
|
69
|
+
if (seenPreserved.has(key))
|
|
70
|
+
continue;
|
|
71
|
+
seenPreserved.add(key);
|
|
72
|
+
preserved.push(line);
|
|
73
|
+
}
|
|
74
|
+
for (const line of block.dropped_lines ?? []) {
|
|
75
|
+
if (seenDropped.has(line))
|
|
76
|
+
continue;
|
|
77
|
+
seenDropped.add(line);
|
|
78
|
+
dropped.push(line);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { preserved, dropped };
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Intersect the branch surfaces with the declared sources when the caller is
|
|
85
|
+
* authoritative (`replaceFuentes`). `remove-source` already purges both
|
|
86
|
+
* surfaces; reconciling reaches the same block through another door, and left
|
|
87
|
+
* alone it kept a working branch for a source it had just removed.
|
|
88
|
+
*/
|
|
89
|
+
function pruneUndeclaredBranches(input, render) {
|
|
90
|
+
if (input.replaceFuentes !== true)
|
|
91
|
+
return [];
|
|
92
|
+
const declared = new Set(render.fuentes.map((f) => f.alias));
|
|
93
|
+
return [
|
|
94
|
+
...dropUndeclared(render.workingBranches, declared),
|
|
95
|
+
...dropUndeclared(render.qaBranches, declared),
|
|
96
|
+
];
|
|
97
|
+
}
|
|
98
|
+
function dropUndeclared(branches, declared) {
|
|
99
|
+
if (branches === undefined)
|
|
100
|
+
return [];
|
|
101
|
+
const removed = [];
|
|
102
|
+
for (const [alias, branch] of Object.entries(branches)) {
|
|
103
|
+
if (declared.has(alias))
|
|
104
|
+
continue;
|
|
105
|
+
delete branches[alias];
|
|
106
|
+
removed.push(` - ${alias}: ${branch}`);
|
|
107
|
+
}
|
|
108
|
+
return removed;
|
|
109
|
+
}
|
|
23
110
|
async function buildRenderInput(fs, cwd, input, existing) {
|
|
24
|
-
const proyecto = input.proyecto
|
|
111
|
+
const proyecto = resolveProyectoText(input.proyecto, existing?.proyecto);
|
|
25
112
|
const remove = new Set(input.removeAliases ?? []);
|
|
26
113
|
const fuentes = mergeFuentes(existing?.fuentes ?? [], input).filter((f) => !remove.has(f.alias));
|
|
27
114
|
const stack = existing?.stack && Object.keys(existing.stack).length > 0
|
|
@@ -45,6 +132,26 @@ async function buildRenderInput(fs, cwd, input, existing) {
|
|
|
45
132
|
}
|
|
46
133
|
return { proyecto, fuentes, stack, defaultBranches, workingBranches, qaBranches };
|
|
47
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* `--proyecto` names the workspace; it does not author its description. A single
|
|
137
|
+
* line therefore replaces only the FIRST line of the Proyecto section and keeps
|
|
138
|
+
* the paragraphs under it — those were written by a person, and renaming used to
|
|
139
|
+
* delete them with exit 0 and no warning. A multi-line value is taken verbatim:
|
|
140
|
+
* that caller IS declaring the whole section (it is also how a reconcile hands
|
|
141
|
+
* back the section it just read, which keeps the merge idempotent).
|
|
142
|
+
*/
|
|
143
|
+
function resolveProyectoText(next, existing) {
|
|
144
|
+
const current = (existing ?? "").trim();
|
|
145
|
+
const declared = (next ?? "").trim();
|
|
146
|
+
if (declared.length === 0)
|
|
147
|
+
return current;
|
|
148
|
+
if (declared.includes("\n") || current.length === 0)
|
|
149
|
+
return declared;
|
|
150
|
+
const currentLines = current.split("\n");
|
|
151
|
+
if (currentLines.length === 1)
|
|
152
|
+
return declared;
|
|
153
|
+
return [declared, ...currentLines.slice(1)].join("\n");
|
|
154
|
+
}
|
|
48
155
|
/**
|
|
49
156
|
* Detect the stack from the SOURCE paths, not the workspace folder. In the hub
|
|
50
157
|
* model the workspace dir is just scaffolding (empty), while the real code lives
|
|
@@ -90,11 +197,11 @@ function mergeFuentes(existing, input) {
|
|
|
90
197
|
}
|
|
91
198
|
return Array.from(byAlias.values());
|
|
92
199
|
}
|
|
93
|
-
async function writeAllFiles(fs,
|
|
200
|
+
async function writeAllFiles(fs, cwd, block, markers) {
|
|
94
201
|
const results = [];
|
|
95
202
|
let hasError = false;
|
|
96
|
-
for (const f of
|
|
97
|
-
const baseInfo =
|
|
203
|
+
for (const f of blockFiles(cwd)) {
|
|
204
|
+
const baseInfo = fileInfo(f, cwd);
|
|
98
205
|
try {
|
|
99
206
|
const action = await upsertProjectBlockInFile(fs, f, block, markers);
|
|
100
207
|
results.push({ ...baseInfo, action });
|
|
@@ -109,50 +216,50 @@ async function writeAllFiles(fs, files, cwd, block, markers) {
|
|
|
109
216
|
}
|
|
110
217
|
return { results, hasError };
|
|
111
218
|
}
|
|
112
|
-
function composePayload(input, write,
|
|
219
|
+
function composePayload(input, write, plan) {
|
|
220
|
+
const payload = { ok: !write.hasError, action: input.op };
|
|
113
221
|
if (input.verbose === true) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
working_branches: renderInput.workingBranches ?? {},
|
|
119
|
-
qa_branches: renderInput.qaBranches ?? {},
|
|
120
|
-
results: write.results,
|
|
121
|
-
};
|
|
222
|
+
payload.mode = input.op;
|
|
223
|
+
payload.working_branches = plan.render.workingBranches ?? {};
|
|
224
|
+
payload.qa_branches = plan.render.qaBranches ?? {};
|
|
225
|
+
payload.results = write.results;
|
|
122
226
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
compact.results = write.results.filter((r) => r.error !== undefined);
|
|
227
|
+
else if (write.hasError) {
|
|
228
|
+
payload.results = write.results.filter((r) => r.error !== undefined);
|
|
126
229
|
}
|
|
127
|
-
|
|
230
|
+
// Always reported: a loss the caller cannot see is a loss in silence.
|
|
231
|
+
if (plan.dropped.length > 0)
|
|
232
|
+
payload.dropped_lines = plan.dropped;
|
|
233
|
+
return payload;
|
|
128
234
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
return "created";
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
return replaceBlock(fs, filePath, text, block, markers);
|
|
235
|
+
/** The single decision about a file, shared by the write and by the preview. */
|
|
236
|
+
async function planBlockWrite(fs, filePath, block, markers) {
|
|
237
|
+
if (!(await fs.exists(filePath)))
|
|
238
|
+
return { action: "created", text: `${block}\n` };
|
|
239
|
+
const current = await fs.readText(filePath);
|
|
240
|
+
if (!current.includes(markers.start) || !current.includes(markers.end)) {
|
|
241
|
+
return { action: "appended", text: appendedText(current, block) };
|
|
137
242
|
}
|
|
138
|
-
|
|
243
|
+
const replaced = replacedText(current, block, markers);
|
|
244
|
+
return replaced === current ? { action: "unchanged" } : { action: "updated", text: replaced };
|
|
245
|
+
}
|
|
246
|
+
async function upsertProjectBlockInFile(fs, filePath, block, markers) {
|
|
247
|
+
const plan = await planBlockWrite(fs, filePath, block, markers);
|
|
248
|
+
if (plan.text !== undefined)
|
|
249
|
+
await fs.writeText(filePath, plan.text);
|
|
250
|
+
return plan.action;
|
|
139
251
|
}
|
|
140
|
-
|
|
252
|
+
function replacedText(text, block, markers) {
|
|
141
253
|
const start = text.indexOf(markers.start);
|
|
142
254
|
const end = text.indexOf(markers.end, start) + markers.end.length;
|
|
143
|
-
|
|
144
|
-
if (replaced === text)
|
|
145
|
-
return "unchanged";
|
|
146
|
-
await fs.writeText(filePath, replaced);
|
|
147
|
-
return "updated";
|
|
255
|
+
return text.slice(0, start) + block + text.slice(end);
|
|
148
256
|
}
|
|
149
|
-
|
|
257
|
+
function appendedText(text, block) {
|
|
150
258
|
let appended = text;
|
|
151
259
|
if (appended.length > 0 && !appended.endsWith("\n"))
|
|
152
260
|
appended += "\n";
|
|
153
261
|
if (appended.length > 0 && !appended.endsWith("\n\n"))
|
|
154
262
|
appended += "\n";
|
|
155
|
-
|
|
156
|
-
return "appended";
|
|
263
|
+
return `${appended}${block}\n`;
|
|
157
264
|
}
|
|
158
265
|
//# sourceMappingURL=project-md-upsert-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-md-upsert-service.js","sourceRoot":"","sources":["../../src/application/project-md-upsert-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"project-md-upsert-service.js","sourceRoot":"","sources":["../../src/application/project-md-upsert-service.ts"],"names":[],"mappings":"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"}
|