@tacuchi/agent-workflow-cli 20.15.0 → 20.17.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/README.md +2 -2
- package/dist/application/branch-resolver.js +28 -0
- package/dist/application/branch-resolver.js.map +1 -1
- package/dist/application/check-branch-service.js.map +1 -1
- package/dist/application/git-flow-service.js +59 -40
- package/dist/application/git-flow-service.js.map +1 -1
- package/dist/application/history-table.js +106 -13
- package/dist/application/history-table.js.map +1 -1
- package/dist/application/history-update-service.js +5 -9
- package/dist/application/history-update-service.js.map +1 -1
- package/dist/application/parsers/project-block.js +23 -3
- package/dist/application/parsers/project-block.js.map +1 -1
- package/dist/application/project-md-upsert-service.js +12 -5
- package/dist/application/project-md-upsert-service.js.map +1 -1
- package/dist/application/project-tab-data.js +37 -2
- package/dist/application/project-tab-data.js.map +1 -1
- package/dist/application/render/project-block.js +23 -1
- package/dist/application/render/project-block.js.map +1 -1
- package/dist/application/session-resolver.js +16 -1
- package/dist/application/session-resolver.js.map +1 -1
- package/dist/application/status-service.js +1 -2
- package/dist/application/status-service.js.map +1 -1
- package/dist/application/templates/session.js +13 -5
- package/dist/application/templates/session.js.map +1 -1
- package/dist/application/workspace-init-service.js +5 -3
- package/dist/application/workspace-init-service.js.map +1 -1
- package/dist/cli/commands/git-flow.js +3 -3
- package/dist/cli/commands/git-flow.js.map +1 -1
- package/dist/cli/commands/history-update.js +3 -4
- package/dist/cli/commands/history-update.js.map +1 -1
- package/dist/cli/tui/app.js +21 -1
- package/dist/cli/tui/app.js.map +1 -1
- package/dist/cli/tui/components/git-flow-actions.js +1 -0
- package/dist/cli/tui/components/git-flow-actions.js.map +1 -1
- package/dist/cli/tui/tabs/config-tab.js +88 -19
- package/dist/cli/tui/tabs/config-tab.js.map +1 -1
- package/dist/cli/tui/tabs/project-tab.js +10 -2
- package/dist/cli/tui/tabs/project-tab.js.map +1 -1
- package/package.json +1 -1
- package/skills/w/SKILL.md +1 -1
- package/skills/w/artifacts/README.md +2 -2
- package/skills/w/artifacts/artifacts-core/BACKLOG.md +1 -4
- package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +2 -2
- package/skills/w/artifacts/artifacts-core/SESSION.md +2 -5
- package/skills/w/commands/export-diagrams.md +2 -2
- package/skills/w/commands/export-manuals.md +1 -1
- package/skills/w/commands/plan-exec.md +1 -1
- package/skills/w/commands/plan-new.md +4 -4
- package/skills/w/commands/plan-refine.md +4 -4
- package/skills/w/commands/quick.md +1 -1
- package/skills/w/commands/spec-new.md +2 -2
- package/skills/w/commands/spec-refine.md +3 -3
- package/skills/w/exports/README.md +2 -2
- package/skills/w/exports/export-diagrams/EXPORT.md +5 -5
- package/skills/w/exports/export-manuals/EXPORT.md +4 -4
- package/skills/w/loops/CHASSIS.md +3 -3
- package/skills/w/loops/plan-exec-loop/LOOP.md +8 -6
- package/skills/w/loops/plan-new-loop/LOOP.md +22 -21
- package/skills/w/loops/plan-refine-loop/LOOP.md +13 -15
- package/skills/w/loops/spec-refine-loop/LOOP.md +19 -18
package/README.md
CHANGED
|
@@ -71,7 +71,7 @@ Running `agent-workflow` (or `aw`) with no arguments opens the tab-based TUI:
|
|
|
71
71
|
| **Project** | Workspace sources, branches and git-flow actions. |
|
|
72
72
|
| **MCP** | dbhub connections. **Install writes the host's user-scope config** (e.g. `~/.claude.json`, `~/.codex/config.toml`) — never the project `.mcp.json`; install once, use it in every project. `aw mcp setup` remains the workspace-capable CLI path (workspace by default; `--workspace <dir>` / `--global --force`). |
|
|
73
73
|
| **Skills** | Standalone third-party skills manager (skills.sh model): register from `owner/repo`, a git URL (`#ref` supported) or an absolute local path; install materializes a canonical copy in `~/.agents/skills/<name>` (the open-standard dir every non-Claude host scans) plus a symlink replica in `~/.claude/skills/<name>` (copy fallback where symlinks are unavailable). Seeded with the recommended external skills from the companion marketplace README — keep both lists in sync. |
|
|
74
|
-
| **Config** | Namespace
|
|
74
|
+
| **Config** | Namespace, host-targeting preferences, and the workspace branch defaults (written to the WORKSPACE block). |
|
|
75
75
|
|
|
76
76
|
## Multi-empresa via profile.json
|
|
77
77
|
|
|
@@ -102,7 +102,7 @@ Workspace artifacts live under `.<namespace>/`. Resolution order (first match wi
|
|
|
102
102
|
- `sessions` / `session-create --type <research|refine|exec|quick>` / `session-close` / `session-resume` / `session-artifacts` — internal session lifecycle (used by the loops).
|
|
103
103
|
- `checkpoint-read` / `checkpoint-write` — `CHECKPOINT.md` handling.
|
|
104
104
|
- `sources` / `check-branch` / `set-working-branch` / `set-qa-branch` — multi-source git-safety (per-source base / working / QA branches).
|
|
105
|
-
- `git-flow <sync|to-qa|to-prod> [--source|--all] [--target] [--dry-run]` — run the per-source branch flows (sync working ← base, promote to QA
|
|
105
|
+
- `git-flow <sync|to-dev|to-qa|to-prod> [--source|--all] [--target] [--dry-run]` — run the per-source branch flows (sync working ← base, promote to dev/QA/prod) with conflict-pause; `--all` processes every source and reports each one. Also surfaced as Project-tab actions.
|
|
106
106
|
- `release-data` — corpus reader backing the `export-*` skills.
|
|
107
107
|
- `self install-skill` / `self doctor` / `self update` / `mcp` — CLI maintenance.
|
|
108
108
|
|
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
/** Floor applied when the workspace declares no default for a role. */
|
|
2
|
+
export const BRANCH_ROLE_FALLBACKS = {
|
|
3
|
+
principal: "main",
|
|
4
|
+
desarrollo: "development",
|
|
5
|
+
qa: "qa",
|
|
6
|
+
};
|
|
7
|
+
/** Workspace defaults with the fallback floor applied. */
|
|
8
|
+
export function resolveDefaultBranches(defaults) {
|
|
9
|
+
return {
|
|
10
|
+
principal: defaults?.principal || BRANCH_ROLE_FALLBACKS.principal,
|
|
11
|
+
desarrollo: defaults?.desarrollo || BRANCH_ROLE_FALLBACKS.desarrollo,
|
|
12
|
+
qa: defaults?.qa || BRANCH_ROLE_FALLBACKS.qa,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Resolve every branch role for a source: per-source value → workspace default
|
|
17
|
+
* → hardcoded fallback. Single chain shared by git-flow and the Project tab, so
|
|
18
|
+
* what the TUI shows is what the flows act on.
|
|
19
|
+
*/
|
|
20
|
+
export function resolveSourceBranches(source, block) {
|
|
21
|
+
const defaults = resolveDefaultBranches(block?.default_branches);
|
|
22
|
+
return {
|
|
23
|
+
prod: source.main_branch || defaults.principal,
|
|
24
|
+
work: block?.working_branches[source.alias] || defaults.desarrollo,
|
|
25
|
+
qa: block?.qa_branches[source.alias] || defaults.qa,
|
|
26
|
+
dev: defaults.desarrollo,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
1
29
|
/**
|
|
2
30
|
* Single shared resolver for the expected WORKING branch of a source.
|
|
3
31
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branch-resolver.js","sourceRoot":"","sources":["../../src/application/branch-resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"branch-resolver.js","sourceRoot":"","sources":["../../src/application/branch-resolver.ts"],"names":[],"mappings":"AAMA,uEAAuE;AACvE,MAAM,CAAC,MAAM,qBAAqB,GAA8B;IAC9D,SAAS,EAAE,MAAM;IACjB,UAAU,EAAE,aAAa;IACzB,EAAE,EAAE,IAAI;CACT,CAAC;AAcF,0DAA0D;AAC1D,MAAM,UAAU,sBAAsB,CACpC,QAAqC;IAErC,OAAO;QACL,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,qBAAqB,CAAC,SAAS;QACjE,UAAU,EAAE,QAAQ,EAAE,UAAU,IAAI,qBAAqB,CAAC,UAAU;QACpE,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,qBAAqB,CAAC,EAAE;KAC7C,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAqB,EACrB,KAA+F;IAE/F,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACjE,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,SAAS;QAC9C,IAAI,EAAE,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,UAAU;QAClE,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,EAAE;QACnD,GAAG,EAAE,QAAQ,CAAC,UAAU;KACzB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAqB,EACrB,eAAuC;IAEvC,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAC9B,OAAiC,EACjC,QAAgB;IAEhB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-branch-service.js","sourceRoot":"","sources":["../../src/application/check-branch-service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAsB,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"check-branch-service.js","sourceRoot":"","sources":["../../src/application/check-branch-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { resolveSourceBranches } from "./branch-resolver.js";
|
|
1
2
|
import { readWorkspaceBlock } from "./parsers/project-block.js";
|
|
2
|
-
const VALID_ACTIONS = new Set(["sync", "to-qa", "to-prod"]);
|
|
3
|
+
const VALID_ACTIONS = new Set(["sync", "to-dev", "to-qa", "to-prod"]);
|
|
3
4
|
export async function runGitFlow(fs, git, paths, input) {
|
|
4
5
|
if (!VALID_ACTIONS.has(input.action)) {
|
|
5
6
|
return errorResult(input.action, `Unknown action: ${input.action}`);
|
|
@@ -20,27 +21,40 @@ export async function runGitFlow(fs, git, paths, input) {
|
|
|
20
21
|
const results = [];
|
|
21
22
|
let overall = "ok";
|
|
22
23
|
for (const source of selected.sources) {
|
|
23
|
-
const branches =
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
const branches = resolveSourceBranches(source, block);
|
|
25
|
+
// Promoting work→dev when they are the same branch would merge a branch onto
|
|
26
|
+
// itself: report it as done instead of running redundant merges.
|
|
27
|
+
const noop = noopReason(input.action, branches, input.target);
|
|
28
|
+
if (noop !== null) {
|
|
29
|
+
results.push({
|
|
30
|
+
source: source.alias,
|
|
31
|
+
status: "ok",
|
|
32
|
+
steps: [{ step: input.action, status: "skipped", detail: noop }],
|
|
33
|
+
});
|
|
34
|
+
continue;
|
|
29
35
|
}
|
|
30
36
|
const ops = buildPlan(input.action, branches, input.target);
|
|
31
37
|
if (dryRun) {
|
|
32
38
|
results.push({ source: source.alias, status: "ok", steps: ops.map(toDryStep) });
|
|
33
39
|
continue;
|
|
34
40
|
}
|
|
35
|
-
|
|
41
|
+
// Any throw belongs to THIS source, never to the batch: the precondition
|
|
42
|
+
// probes (isMerging/isDirty) reject when the path is not a usable repo, and
|
|
43
|
+
// an uncaught one would strand every remaining source.
|
|
44
|
+
const sourceResult = await executePlan(git, source, ops).catch((err) => sourceError(source.alias, err instanceof Error ? err.message : String(err)));
|
|
36
45
|
results.push(sourceResult);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
46
|
+
// Continue-on-failure: one source failing must not strand the rest. Each
|
|
47
|
+
// source is independent (its own repo), so the batch reports every one and
|
|
48
|
+
// the overall status is the WORST case seen.
|
|
49
|
+
overall = worst(overall, sourceResult.status);
|
|
41
50
|
}
|
|
42
51
|
return { action: input.action, dry_run: dryRun, status: overall, results };
|
|
43
52
|
}
|
|
53
|
+
/** Severity order of the batch status: a later ok never masks an earlier failure. */
|
|
54
|
+
const STATUS_SEVERITY = { ok: 0, conflict: 1, error: 2 };
|
|
55
|
+
function worst(a, b) {
|
|
56
|
+
return STATUS_SEVERITY[b] > STATUS_SEVERITY[a] ? b : a;
|
|
57
|
+
}
|
|
44
58
|
// --- source selection ---------------------------------------------------------
|
|
45
59
|
function selectSources(sources, input) {
|
|
46
60
|
if (input.all === true) {
|
|
@@ -55,27 +69,23 @@ function selectSources(sources, input) {
|
|
|
55
69
|
}
|
|
56
70
|
return { sources: [match] };
|
|
57
71
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (!branches.work) {
|
|
69
|
-
return "No working branch declared for this source (Status → Ramas de trabajo actuales)";
|
|
70
|
-
}
|
|
71
|
-
// --target overrides the qa destination, so a declared qa branch isn't required then.
|
|
72
|
-
if (action === "to-qa" && !branches.qa && !target) {
|
|
73
|
-
return "No QA branch declared for this source (Status → Ramas QA actuales). Pass --target to override.";
|
|
74
|
-
}
|
|
75
|
-
return null;
|
|
72
|
+
/**
|
|
73
|
+
* Why this action has nothing to do for this source, or null when it does.
|
|
74
|
+
* Only `to-dev` can degenerate: work and dev share the `desarrollo` default, so
|
|
75
|
+
* a source that declares no working branch resolves both roles to it.
|
|
76
|
+
*/
|
|
77
|
+
function noopReason(action, branches, target) {
|
|
78
|
+
if (action !== "to-dev")
|
|
79
|
+
return null;
|
|
80
|
+
const dest = target ?? branches.dev;
|
|
81
|
+
return dest === branches.work ? `nada que enviar: work ya es ${dest}` : null;
|
|
76
82
|
}
|
|
77
83
|
// --- plan construction --------------------------------------------------------
|
|
78
|
-
/**
|
|
84
|
+
/**
|
|
85
|
+
* Build the ordered op list for an action. Every role is already resolved
|
|
86
|
+
* (per-source value → workspace default → fallback), so no branch can be
|
|
87
|
+
* missing here — that is why no validation step precedes this.
|
|
88
|
+
*/
|
|
79
89
|
function buildPlan(action, branches, target) {
|
|
80
90
|
const prod = branches.prod;
|
|
81
91
|
const work = branches.work;
|
|
@@ -98,15 +108,27 @@ function buildPlan(action, branches, target) {
|
|
|
98
108
|
{ kind: "push", branch: dest, label: `push ${dest}` },
|
|
99
109
|
];
|
|
100
110
|
}
|
|
111
|
+
if (action === "to-dev") {
|
|
112
|
+
return promotePlan(prod, work, target ?? branches.dev, "dev", branches.dev);
|
|
113
|
+
}
|
|
101
114
|
// to-qa
|
|
102
|
-
|
|
115
|
+
return promotePlan(prod, work, target ?? branches.qa, "qa", branches.qa);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* sync, then land prod and work onto a promotion branch and push it. Shared by
|
|
119
|
+
* to-dev and to-qa — they differ only in which role names the destination.
|
|
120
|
+
* `roleName` keeps the step labels role-shaped ("merge work→qa") while a
|
|
121
|
+
* `--target` override shows the literal branch instead.
|
|
122
|
+
*/
|
|
123
|
+
function promotePlan(prod, work, dest, roleName, roleBranch) {
|
|
124
|
+
const label = dest === roleBranch ? roleName : dest;
|
|
103
125
|
return [
|
|
104
126
|
...syncPlan(prod, work),
|
|
105
|
-
{ kind: "checkout", branch:
|
|
106
|
-
{ kind: "pull", label: `pull ${
|
|
107
|
-
{ kind: "merge", from: prod, onto:
|
|
108
|
-
{ kind: "merge", from: work, onto:
|
|
109
|
-
{ kind: "push", branch:
|
|
127
|
+
{ kind: "checkout", branch: dest, label: `checkout ${dest}` },
|
|
128
|
+
{ kind: "pull", label: `pull ${dest}` },
|
|
129
|
+
{ kind: "merge", from: prod, onto: dest, label: `merge prod→${label}` },
|
|
130
|
+
{ kind: "merge", from: work, onto: dest, label: `merge work→${label}` },
|
|
131
|
+
{ kind: "push", branch: dest, label: `push ${dest}` },
|
|
110
132
|
];
|
|
111
133
|
}
|
|
112
134
|
/** sync sequence onto a work-role branch (overridable by `--target`). */
|
|
@@ -119,9 +141,6 @@ function syncPlan(prod, workDest) {
|
|
|
119
141
|
{ kind: "merge", from: prod, onto: workDest, label: "merge prod→work" },
|
|
120
142
|
];
|
|
121
143
|
}
|
|
122
|
-
function qaLabel(resolved, declared) {
|
|
123
|
-
return resolved === declared ? "qa" : resolved;
|
|
124
|
-
}
|
|
125
144
|
// --- execution ----------------------------------------------------------------
|
|
126
145
|
async function executePlan(git, source, ops) {
|
|
127
146
|
const repo = source.path;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-flow-service.js","sourceRoot":"","sources":["../../src/application/git-flow-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"git-flow-service.js","sourceRoot":"","sources":["../../src/application/git-flow-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,35 +1,128 @@
|
|
|
1
1
|
// The history file path itself is resolved by callers via
|
|
2
2
|
// `PathsService.cwdHistoryFile()` and passed in.
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
+
// Slim 4-column table: `Sesión` (row key — the `NNN-<slug>-<flow>` folder
|
|
5
|
+
// identity), `Fecha`, `Estado`, `Refs`. The legacy `#`/`Flujo`/`Resumen`
|
|
6
|
+
// columns were derivable or dead ("#" = the Sesión prefix, "Flujo" always "—",
|
|
7
|
+
// "Resumen" = the slug re-spaced) and are dropped; legacy tables are migrated
|
|
8
|
+
// in place on the first upsert.
|
|
4
9
|
const HISTORY_TEMPLATE = "# Session History\n\n" +
|
|
5
|
-
"|
|
|
6
|
-
"
|
|
10
|
+
"| Sesión | Fecha | Estado | Refs |\n" +
|
|
11
|
+
"|--------|-------|--------|------|\n";
|
|
7
12
|
export async function ensureHistoryFile(fs, path) {
|
|
8
13
|
if (await fs.exists(path))
|
|
9
14
|
return;
|
|
10
15
|
await fs.mkdirp(join(path, ".."));
|
|
11
16
|
await fs.writeText(path, HISTORY_TEMPLATE);
|
|
12
17
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
18
|
+
/** First cell of the slim row: the session's folder identity, always keyed by code. */
|
|
19
|
+
function rowKey(code, sesionName) {
|
|
20
|
+
if (!sesionName || sesionName === code)
|
|
21
|
+
return code;
|
|
22
|
+
return sesionName.startsWith(`${code}-`) ? sesionName : `${code}-${sesionName}`;
|
|
16
23
|
}
|
|
17
24
|
export function buildRow(params) {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
25
|
+
const key = rowKey(params.code, params.sesionName);
|
|
26
|
+
return `| ${key} | ${params.date} | ${params.state} | ${params.refs} |`;
|
|
27
|
+
}
|
|
28
|
+
/** Header row cells, lowercased. Empty when the file has no table header. */
|
|
29
|
+
function headerCells(text) {
|
|
30
|
+
const m = text.match(/^\|([^\n]+)\|\s*$/m);
|
|
31
|
+
if (!m?.[1])
|
|
32
|
+
return [];
|
|
33
|
+
return m[1].split("|").map((c) => c.trim().toLowerCase());
|
|
34
|
+
}
|
|
35
|
+
function isLegacyHeader(cells) {
|
|
36
|
+
return cells.includes("#") || cells.includes("flujo") || cells.includes("resumen");
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Rewrite a legacy table (7-col `# | Flujo | Sesión | …` or 6-col without
|
|
40
|
+
* Flujo) into the slim 4-col shape, mapping every data row by header index:
|
|
41
|
+
* drop `#`/`Flujo`/`Resumen`, and prefix the Sesión cell with its `#` when it
|
|
42
|
+
* does not already carry it (the code is the durable row key — losing it would
|
|
43
|
+
* orphan the row for future upserts).
|
|
44
|
+
*
|
|
45
|
+
* Scoped to the history table ONLY: rewriting stops at the first blank/non-pipe
|
|
46
|
+
* line after the header, so a second markdown table further down the file is
|
|
47
|
+
* left untouched. Returns `null` when the table cannot be safely mapped (no
|
|
48
|
+
* separator row, or the Sesión column is missing) — the caller then leaves the
|
|
49
|
+
* file as-is and falls back to append-only. HISTORY.md is the workspace's
|
|
50
|
+
* durable git-tracked record: never rewrite what we cannot parse.
|
|
51
|
+
*/
|
|
52
|
+
function migrateLegacyTable(text, cells) {
|
|
53
|
+
const idx = (name) => cells.indexOf(name);
|
|
54
|
+
const iCode = idx("#");
|
|
55
|
+
const iSesion = idx("sesión") !== -1 ? idx("sesión") : idx("sesion");
|
|
56
|
+
const iFecha = idx("fecha");
|
|
57
|
+
const iEstado = idx("estado");
|
|
58
|
+
const iRefs = idx("refs");
|
|
59
|
+
if (iSesion === -1 && iCode === -1)
|
|
60
|
+
return null; // no row key → unmappable
|
|
61
|
+
const out = [];
|
|
62
|
+
let headerDone = false;
|
|
63
|
+
let tableClosed = false;
|
|
64
|
+
for (const line of text.split("\n")) {
|
|
65
|
+
const trimmed = line.trim();
|
|
66
|
+
const isPipeLine = trimmed.startsWith("|");
|
|
67
|
+
if (headerDone && !tableClosed && !isPipeLine) {
|
|
68
|
+
tableClosed = true; // the history table ended — everything below is verbatim
|
|
69
|
+
}
|
|
70
|
+
if (tableClosed || !isPipeLine) {
|
|
71
|
+
out.push(line);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (!headerDone) {
|
|
75
|
+
// Header + separator collapse into the slim template's pair.
|
|
76
|
+
if (/^\|[\s|:-]+\|?$/.test(trimmed)) {
|
|
77
|
+
headerDone = true;
|
|
78
|
+
out.push("| Sesión | Fecha | Estado | Refs |");
|
|
79
|
+
out.push("|--------|-------|--------|------|");
|
|
80
|
+
}
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const parts = line.split("|").map((c) => c.trim());
|
|
84
|
+
// `| a | b |` splits into ["", "a", "b", ""] — data cells start at 1.
|
|
85
|
+
const cell = (i) => (i >= 0 ? (parts[i + 1] ?? "") : "");
|
|
86
|
+
const code = cell(iCode);
|
|
87
|
+
const sesion = cell(iSesion);
|
|
88
|
+
out.push(buildRow({
|
|
89
|
+
code: code || sesion,
|
|
90
|
+
sesionName: sesion || code,
|
|
91
|
+
date: cell(iFecha),
|
|
92
|
+
state: cell(iEstado),
|
|
93
|
+
refs: cell(iRefs) || "—",
|
|
94
|
+
}));
|
|
21
95
|
}
|
|
22
|
-
|
|
96
|
+
if (!headerDone)
|
|
97
|
+
return null; // separator never matched → do not touch the file
|
|
98
|
+
return out.join("\n");
|
|
23
99
|
}
|
|
24
100
|
export async function upsertRow(fs, historyFile, code, buildNewRow) {
|
|
25
101
|
await ensureHistoryFile(fs, historyFile);
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
102
|
+
let text = await fs.readText(historyFile);
|
|
103
|
+
const cells = headerCells(text);
|
|
104
|
+
let migrated = false;
|
|
105
|
+
if (isLegacyHeader(cells)) {
|
|
106
|
+
const rewritten = migrateLegacyTable(text, cells);
|
|
107
|
+
if (rewritten !== null) {
|
|
108
|
+
text = rewritten;
|
|
109
|
+
migrated = true;
|
|
110
|
+
}
|
|
111
|
+
// Unmappable legacy table (hand-edited, no separator): leave it verbatim and
|
|
112
|
+
// append below it — losing rows would be worse than a mixed-shape table.
|
|
113
|
+
}
|
|
114
|
+
const newRow = buildNewRow();
|
|
115
|
+
// Match by the first cell: exactly the code, or the `NNN-<slug>-<flow>` key.
|
|
116
|
+
// `code` is never empty (validated upstream); an empty one would let the
|
|
117
|
+
// optional `-…` branch match the separator row.
|
|
118
|
+
if (code.trim() === "")
|
|
119
|
+
throw new Error("upsertRow: code must not be empty");
|
|
120
|
+
const rowRegex = new RegExp(`^\\|\\s*${escapeRegex(code)}(-[^|]*)?\\s*\\|.*$`, "m");
|
|
30
121
|
const existing = text.match(rowRegex);
|
|
31
122
|
if (existing) {
|
|
32
123
|
if (existing[0] === newRow) {
|
|
124
|
+
if (migrated)
|
|
125
|
+
await fs.writeText(historyFile, text); // persist the migration even when the row is unchanged
|
|
33
126
|
return "unchanged";
|
|
34
127
|
}
|
|
35
128
|
const updated = text.replace(rowRegex, newRow);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-table.js","sourceRoot":"","sources":["../../src/application/history-table.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,iDAAiD;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,gBAAgB,GACpB,uBAAuB;IACvB,
|
|
1
|
+
{"version":3,"file":"history-table.js","sourceRoot":"","sources":["../../src/application/history-table.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,iDAAiD;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,0EAA0E;AAC1E,yEAAyE;AACzE,+EAA+E;AAC/E,8EAA8E;AAC9E,gCAAgC;AAChC,MAAM,gBAAgB,GACpB,uBAAuB;IACvB,sCAAsC;IACtC,sCAAsC,CAAC;AAIzC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAkB,EAAE,IAAY;IACtE,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO;IAClC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAClC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAC7C,CAAC;AAED,uFAAuF;AACvF,SAAS,MAAM,CAAC,IAAY,EAAE,UAA8B;IAC1D,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACpD,OAAO,UAAU,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,UAAU,EAAE,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAMxB;IACC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACnD,OAAO,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,IAAI,IAAI,CAAC;AAC1E,CAAC;AAED,6EAA6E;AAC7E,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC3C,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,cAAc,CAAC,KAAe;IACrC,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACrF,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,kBAAkB,CAAC,IAAY,EAAE,KAAe;IACvD,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,0BAA0B;IAE3E,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,UAAU,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9C,WAAW,GAAG,IAAI,CAAC,CAAC,yDAAyD;QAC/E,CAAC;QACD,IAAI,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC;YAC/B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,6DAA6D;YAC7D,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpC,UAAU,GAAG,IAAI,CAAC;gBAClB,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;gBAC/C,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YACjD,CAAC;YACD,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,sEAAsE;QACtE,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,GAAG,CAAC,IAAI,CACN,QAAQ,CAAC;YACP,IAAI,EAAE,IAAI,IAAI,MAAM;YACpB,UAAU,EAAE,MAAM,IAAI,IAAI;YAC1B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAClB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG;SACzB,CAAC,CACH,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC,CAAC,kDAAkD;IAChF,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAkB,EAClB,WAAmB,EACnB,IAAY,EACZ,WAAyB;IAEzB,MAAM,iBAAiB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACzC,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,SAAS,CAAC;YACjB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,6EAA6E;QAC7E,yEAAyE;IAC3E,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAE7B,6EAA6E;IAC7E,yEAAyE;IACzE,gDAAgD;IAChD,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,WAAW,WAAW,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YAC3B,IAAI,QAAQ;gBAAE,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,uDAAuD;YAC5G,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,QAAQ,IAAI,IAAI,CAAC;IAC/C,QAAQ,IAAI,GAAG,MAAM,IAAI,CAAC;IAC1B,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -14,17 +14,16 @@ export async function runHistoryUpdate(fs, env, paths, input) {
|
|
|
14
14
|
const refsRendered = renderRefs(input.refs);
|
|
15
15
|
const codeNum = normalizeCode(code);
|
|
16
16
|
return withCwdLock(fs, paths, async () => {
|
|
17
|
-
const action = await upsertRow(fs, paths.cwdHistoryFile(), codeNum, (
|
|
17
|
+
const action = await upsertRow(fs, paths.cwdHistoryFile(), codeNum, () => buildRow({
|
|
18
18
|
code: codeNum,
|
|
19
|
-
flow: fields.flow,
|
|
20
19
|
sesionName: fields.sesionName,
|
|
21
20
|
date: fields.date,
|
|
22
21
|
state,
|
|
23
|
-
summary: fields.summary,
|
|
24
22
|
refs: refsRendered,
|
|
25
|
-
hasFlow,
|
|
26
23
|
}));
|
|
27
|
-
|
|
24
|
+
// `flow` stays in the output shape for consumer compat; sessions carry no
|
|
25
|
+
// flow segment anymore, so it is always null.
|
|
26
|
+
return { code: codeNum, flow: null, action, state };
|
|
28
27
|
});
|
|
29
28
|
}
|
|
30
29
|
function validate(input) {
|
|
@@ -38,10 +37,7 @@ function validate(input) {
|
|
|
38
37
|
function mergeFields(input, session, code) {
|
|
39
38
|
const sesionName = input.sesionName || session?.name || code;
|
|
40
39
|
const date = input.date || session?.date || localDateIso(new Date());
|
|
41
|
-
|
|
42
|
-
// Sessions no longer carry a `flow` segment (removed from the model). The
|
|
43
|
-
// HISTORY.md "Flujo" column is preserved for legacy tables and renders "—".
|
|
44
|
-
return { flow: null, sesionName, date, summary };
|
|
40
|
+
return { sesionName, date };
|
|
45
41
|
}
|
|
46
42
|
function normalizeCode(code) {
|
|
47
43
|
return code.includes("session") ? (code.replace("session", "").split("-")[0] ?? code) : code;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-update-service.js","sourceRoot":"","sources":["../../src/application/history-update-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAqB,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAqB,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"history-update-service.js","sourceRoot":"","sources":["../../src/application/history-update-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAqB,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAqB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAuB1E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAkB,EAClB,GAAY,EACZ,KAAmB,EACnB,KAAyB;IAEzB,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC;IAEtC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAEpC,OAAO,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CACvE,QAAQ,CAAC;YACP,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK;YACL,IAAI,EAAE,YAAY;SACnB,CAAC,CACH,CAAC;QACF,0EAA0E;QAC1E,8CAA8C;QAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,KAAyB;IACzC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;IACvF,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACzD,OAAO,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC;IACzD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAOD,SAAS,WAAW,CAClB,KAAyB,EACzB,OAA4B,EAC5B,IAAY;IAEZ,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;IAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,IAAI,IAAI,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACrE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/F,CAAC"}
|
|
@@ -55,6 +55,7 @@ function parseWithMarkers(text, markers) {
|
|
|
55
55
|
proyecto: stripLegacyModeLine(proyectoText),
|
|
56
56
|
fuentes,
|
|
57
57
|
stack,
|
|
58
|
+
default_branches: status.defaultBranches,
|
|
58
59
|
working_branches: status.workingBranches,
|
|
59
60
|
qa_branches: status.qaBranches,
|
|
60
61
|
last_activity: status.lastActivity,
|
|
@@ -89,7 +90,8 @@ function parseFuentesTable(text) {
|
|
|
89
90
|
fuentes.push({
|
|
90
91
|
alias,
|
|
91
92
|
path,
|
|
92
|
-
|
|
93
|
+
// Empty cell = undeclared: the workspace default applies at resolution time.
|
|
94
|
+
main_branch: mainBranch !== undefined && mainBranch.length > 0 ? mainBranch : null,
|
|
93
95
|
});
|
|
94
96
|
}
|
|
95
97
|
return fuentes;
|
|
@@ -108,7 +110,9 @@ function parseStackList(text) {
|
|
|
108
110
|
}
|
|
109
111
|
return stack;
|
|
110
112
|
}
|
|
113
|
+
const DEFAULT_BRANCH_KEYS = new Set(["principal", "desarrollo", "qa"]);
|
|
111
114
|
function parseStatusBlock(text) {
|
|
115
|
+
const defaultBranches = {};
|
|
112
116
|
const workingBranches = {};
|
|
113
117
|
const qaBranches = {};
|
|
114
118
|
let lastActivity = null;
|
|
@@ -126,16 +130,21 @@ function parseStatusBlock(text) {
|
|
|
126
130
|
if (!stripped.startsWith("- "))
|
|
127
131
|
continue;
|
|
128
132
|
const entry = stripped.slice(2).trim();
|
|
129
|
-
if (section === "
|
|
133
|
+
if (section === "defaults") {
|
|
134
|
+
addDefaultBranch(defaultBranches, entry);
|
|
135
|
+
}
|
|
136
|
+
else if (section === "working") {
|
|
130
137
|
addWorkingBranch(workingBranches, entry);
|
|
131
138
|
}
|
|
132
139
|
else if (section === "qa") {
|
|
133
140
|
addWorkingBranch(qaBranches, entry);
|
|
134
141
|
}
|
|
135
142
|
}
|
|
136
|
-
return { workingBranches, qaBranches, lastActivity };
|
|
143
|
+
return { defaultBranches, workingBranches, qaBranches, lastActivity };
|
|
137
144
|
}
|
|
138
145
|
function transitionSection(stripped) {
|
|
146
|
+
if (stripped.startsWith("- Ramas por defecto:"))
|
|
147
|
+
return { handled: true, next: "defaults" };
|
|
139
148
|
if (stripped.startsWith("- Ramas de trabajo actuales:"))
|
|
140
149
|
return { handled: true, next: "working" };
|
|
141
150
|
if (stripped.startsWith("- Ramas QA actuales:"))
|
|
@@ -153,6 +162,17 @@ function transitionSection(stripped) {
|
|
|
153
162
|
}
|
|
154
163
|
return { handled: false, next: "none" };
|
|
155
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
|
+
}
|
|
156
176
|
function addWorkingBranch(out, entry) {
|
|
157
177
|
const colon = entry.indexOf(":");
|
|
158
178
|
if (colon <= 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-block.js","sourceRoot":"","sources":["../../../src/application/parsers/project-block.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAkB,EAClB,GAAW,EACX,OAA4B,EAC5B,SAAiD,GAAG,EAAE,CAAC,IAAI;IAE3D,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,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,OAAO,CAAC,CAAC;QAClE,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;
|
|
1
|
+
{"version":3,"file":"project-block.js","sourceRoot":"","sources":["../../../src/application/parsers/project-block.ts"],"names":[],"mappings":"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"}
|