@tacuchi/agent-workflow-cli 21.8.0 → 21.10.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 (106) hide show
  1. package/dist/adapters/git-cli.js +217 -0
  2. package/dist/adapters/git-cli.js.map +1 -1
  3. package/dist/application/check-branch-service.js +48 -20
  4. package/dist/application/check-branch-service.js.map +1 -1
  5. package/dist/application/dev-only-services.js +53 -4
  6. package/dist/application/dev-only-services.js.map +1 -1
  7. package/dist/application/flow/advance.js +10 -3
  8. package/dist/application/flow/advance.js.map +1 -1
  9. package/dist/application/flow/flow-service.js +7 -0
  10. package/dist/application/flow/flow-service.js.map +1 -1
  11. package/dist/application/flow/internal-actions.js +74 -3
  12. package/dist/application/flow/internal-actions.js.map +1 -1
  13. package/dist/application/flow/internal-drive.js +1 -0
  14. package/dist/application/flow/internal-drive.js.map +1 -1
  15. package/dist/application/flow/run-projection.js +10 -4
  16. package/dist/application/flow/run-projection.js.map +1 -1
  17. package/dist/application/flow/submit.js +164 -15
  18. package/dist/application/flow/submit.js.map +1 -1
  19. package/dist/application/history-table.js +37 -0
  20. package/dist/application/history-table.js.map +1 -1
  21. package/dist/application/hook-branch-check.js +17 -0
  22. package/dist/application/hook-branch-check.js.map +1 -1
  23. package/dist/application/local-proposal.js +37 -0
  24. package/dist/application/local-proposal.js.map +1 -1
  25. package/dist/application/resume-service.js +1 -0
  26. package/dist/application/resume-service.js.map +1 -1
  27. package/dist/application/retirement/apply.js +448 -0
  28. package/dist/application/retirement/apply.js.map +1 -0
  29. package/dist/application/retirement/attribution.js +395 -0
  30. package/dist/application/retirement/attribution.js.map +1 -0
  31. package/dist/application/retirement/graph.js +196 -0
  32. package/dist/application/retirement/graph.js.map +1 -0
  33. package/dist/application/retirement/history-events.js +158 -0
  34. package/dist/application/retirement/history-events.js.map +1 -0
  35. package/dist/application/retirement/journal.js +113 -0
  36. package/dist/application/retirement/journal.js.map +1 -0
  37. package/dist/application/retirement/prepare.js +233 -0
  38. package/dist/application/retirement/prepare.js.map +1 -0
  39. package/dist/application/retirement/preview.js +101 -0
  40. package/dist/application/retirement/preview.js.map +1 -0
  41. package/dist/application/retirement/resolve.js +356 -0
  42. package/dist/application/retirement/resolve.js.map +1 -0
  43. package/dist/application/session-close-service.js +108 -14
  44. package/dist/application/session-close-service.js.map +1 -1
  45. package/dist/application/session-create-service.js +103 -12
  46. package/dist/application/session-create-service.js.map +1 -1
  47. package/dist/application/session-custody-recorder.js +137 -0
  48. package/dist/application/session-custody-recorder.js.map +1 -0
  49. package/dist/application/session-custody-service.js +171 -0
  50. package/dist/application/session-custody-service.js.map +1 -0
  51. package/dist/application/session-resolver.js +21 -0
  52. package/dist/application/session-resolver.js.map +1 -1
  53. package/dist/application/status-service.js +5 -0
  54. package/dist/application/status-service.js.map +1 -1
  55. package/dist/application/workline-index-service.js +31 -0
  56. package/dist/application/workline-index-service.js.map +1 -1
  57. package/dist/application/worktree-service.js +247 -34
  58. package/dist/application/worktree-service.js.map +1 -1
  59. package/dist/cli/commands/check-branch.js +9 -5
  60. package/dist/cli/commands/check-branch.js.map +1 -1
  61. package/dist/cli/commands/dev-only.js +21 -2
  62. package/dist/cli/commands/dev-only.js.map +1 -1
  63. package/dist/cli/commands/flow.js +6 -2
  64. package/dist/cli/commands/flow.js.map +1 -1
  65. package/dist/cli/commands/index.js +6 -0
  66. package/dist/cli/commands/index.js.map +1 -1
  67. package/dist/cli/commands/retirement.js +137 -0
  68. package/dist/cli/commands/retirement.js.map +1 -0
  69. package/dist/cli/commands/session-close.js +12 -1
  70. package/dist/cli/commands/session-close.js.map +1 -1
  71. package/dist/cli/commands/session-create.js +4 -1
  72. package/dist/cli/commands/session-create.js.map +1 -1
  73. package/dist/cli/commands/sources.js +8 -4
  74. package/dist/cli/commands/sources.js.map +1 -1
  75. package/dist/cli/commands/worktree.js +14 -7
  76. package/dist/cli/commands/worktree.js.map +1 -1
  77. package/dist/cli/help-groups.js +4 -0
  78. package/dist/cli/help-groups.js.map +1 -1
  79. package/dist/cli/parser.js +26 -0
  80. package/dist/cli/parser.js.map +1 -1
  81. package/dist/domain/flow/answer.js +72 -4
  82. package/dist/domain/flow/answer.js.map +1 -1
  83. package/dist/domain/flow/authority.js +219 -47
  84. package/dist/domain/flow/authority.js.map +1 -1
  85. package/dist/domain/flow/rules.js +8 -1
  86. package/dist/domain/flow/rules.js.map +1 -1
  87. package/dist/domain/flow/run-state.js +34 -1
  88. package/dist/domain/flow/run-state.js.map +1 -1
  89. package/dist/domain/reservation.js +33 -0
  90. package/dist/domain/reservation.js.map +1 -0
  91. package/dist/domain/retirement/proposal.js +83 -0
  92. package/dist/domain/retirement/proposal.js.map +1 -0
  93. package/dist/domain/retirement/selector.js +109 -0
  94. package/dist/domain/retirement/selector.js.map +1 -0
  95. package/dist/domain/session/custody.js +176 -0
  96. package/dist/domain/session/custody.js.map +1 -0
  97. package/dist/domain/workline-node.js +56 -0
  98. package/dist/domain/workline-node.js.map +1 -0
  99. package/package.json +1 -1
  100. package/skills/w/commands/discard.md +49 -0
  101. package/skills/w/commands/reset.md +50 -0
  102. package/skills/w/context/MANIFEST.json +147 -139
  103. package/skills/w/loops/CODE-POLICIES.md +9 -9
  104. package/skills/w/loops/plan-exec-loop/LOOP.md +23 -13
  105. package/skills/w/loops/plan-new-loop/LOOP.md +1 -1
  106. package/skills/w/modules/PLAN-INPUT.md +1 -1
@@ -1,7 +1,12 @@
1
1
  import { join } from "node:path";
2
+ import { checkSafeRelativePath } from "../domain/safe-path.js";
3
+ import { nodeFromDocPath } from "../domain/workline-node.js";
4
+ import { localDateIso } from "./dates.js";
5
+ import { maxHistoryNumber } from "./history-table.js";
2
6
  import { withCwdLock } from "./lock-service.js";
3
7
  import { canonicalArtifactPath } from "./session-artifacts.js";
4
8
  import { bindContextToSession, readBindingRegistry } from "./session-binding-service.js";
9
+ import { baselineOf, birthCustody, custodyPath, writeCustody } from "./session-custody-service.js";
5
10
  import { renderSessionMarkdown } from "./templates/session.js";
6
11
  const VALID_TYPES = ["research", "refine", "exec", "quick"];
7
12
  export async function runSessionCreate(fs, paths, input) {
@@ -9,7 +14,14 @@ export async function runSessionCreate(fs, paths, input) {
9
14
  if ("error" in validated)
10
15
  return validated;
11
16
  const { type, name, objetivo } = validated;
12
- const folderInfo = await claimSessionFolder(fs, paths, name, input.contextId);
17
+ // Baselines are read BEFORE the claim so the bytes sealed are the ones that
18
+ // existed before this session could touch anything, and a declared input that
19
+ // cannot be read fails the creation instead of producing a custody that
20
+ // pretends to know what it received.
21
+ const baselines = await readBaselines(fs, paths, input.inputs ?? []);
22
+ if ("error" in baselines)
23
+ return baselines;
24
+ const folderInfo = await claimSessionFolder(fs, paths, name, input.contextId, baselines.artifacts);
13
25
  if ("error" in folderInfo)
14
26
  return folderInfo;
15
27
  const sessionPath = folderInfo.sessionPath;
@@ -28,11 +40,47 @@ export async function runSessionCreate(fs, paths, input) {
28
40
  folder: folderInfo.folder,
29
41
  path: sessionPath,
30
42
  session_path: sessionFilePath,
43
+ custody_path: folderInfo.custodyPath,
44
+ inputs: baselines.artifacts.map((a) => a.path),
31
45
  };
32
46
  if (origin && origin.length > 0)
33
47
  record.origin = origin;
34
48
  return { sessionCreate: record };
35
49
  }
50
+ /**
51
+ * The sealed previous state of every declared input, or the refusal.
52
+ *
53
+ * The path guard is the workspace's own (`checkSafeRelativePath`), the same one
54
+ * every other write boundary uses: a second, hand-rolled version of "is this
55
+ * relative" is how two boundaries end up disagreeing about which paths are
56
+ * allowed. A repeated input is collapsed rather than sealed twice — the baseline
57
+ * of a path is one fact.
58
+ */
59
+ async function readBaselines(fs, paths, inputs) {
60
+ const artifacts = [];
61
+ const root = paths.workspaceDir();
62
+ for (const raw of inputs) {
63
+ const safe = checkSafeRelativePath(raw);
64
+ if (!safe.ok) {
65
+ return {
66
+ error: `--input '${raw}' tiene que ser una ruta relativa al workspace: ${safe.why}`,
67
+ code: "INVALID_INPUT",
68
+ };
69
+ }
70
+ if (artifacts.some((a) => a.path === safe.path))
71
+ continue;
72
+ try {
73
+ artifacts.push(await baselineOf(fs, root, safe.path));
74
+ }
75
+ catch (err) {
76
+ return {
77
+ error: `no se pudo sellar el estado previo de '${safe.path}': ${err instanceof Error ? err.message : String(err)}`,
78
+ code: "CUSTODY_BASELINE_UNREADABLE",
79
+ };
80
+ }
81
+ }
82
+ return { artifacts };
83
+ }
36
84
  function validateInput(input) {
37
85
  const type = input.type?.trim().toLowerCase();
38
86
  if (!type) {
@@ -56,11 +104,17 @@ function validateInput(input) {
56
104
  return { type: type, name, objetivo };
57
105
  }
58
106
  /**
59
- * Claim number + folder + conversation association under ONE lock: two
107
+ * Claim number + folder + custody + conversation association under ONE lock: two
60
108
  * concurrent creations must not read the same counter and race for the same
61
- * `NNN`, and the new line must belong to its conversation the moment it exists.
109
+ * `NNN`, and the new line must belong to its conversation and hold its sealed
110
+ * baseline — the moment it exists.
111
+ *
112
+ * The custody is written INSIDE the critical section for the same reason the
113
+ * number is minted there: a session that becomes visible before its baseline is
114
+ * sealed is a session another process can start driving, and the first mutation
115
+ * would then land against a custody nobody had written yet.
62
116
  */
63
- async function claimSessionFolder(fs, paths, name, contextId) {
117
+ async function claimSessionFolder(fs, paths, name, contextId, artifacts) {
64
118
  const id = contextId?.trim() ?? "";
65
119
  const result = await withCwdLock(fs, paths, async () => {
66
120
  // Fail before creating anything when the registry cannot be read: a session
@@ -82,30 +136,67 @@ async function claimSessionFolder(fs, paths, name, contextId) {
82
136
  // `NNN-` prefix is assigned here. A descriptor that already carries a leading
83
137
  // `NNN-` is normalized away first so the prefix can't double up.
84
138
  const descriptor = name.replace(/^\d{3}-/, "");
85
- const number = await nextSessionNumber(fs, sessionsDir);
139
+ const number = await nextSessionNumber(fs, paths, sessionsDir);
86
140
  const folder = `${number}-${descriptor}`;
87
141
  const sessionPath = join(sessionsDir, folder);
88
142
  if (await fs.exists(sessionPath)) {
89
143
  return { ok: false, failure: { error: `Ya existe ${sessionPath}` } };
90
144
  }
91
145
  await fs.mkdirp(sessionPath);
146
+ await writeCustody(fs, sessionPath, birthCustody({
147
+ subject: { kind: "session", key: folder },
148
+ subjectPath: sessionPath,
149
+ parents: parentsOf(artifacts),
150
+ artifacts,
151
+ created: localDateIso(new Date()),
152
+ }));
92
153
  if (id.length > 0)
93
154
  await bindContextToSession(fs, paths, id, folder);
94
- return { ok: true, info: { folder, number, sessionPath } };
155
+ return {
156
+ ok: true,
157
+ info: { folder, number, sessionPath, custodyPath: custodyPath(sessionPath) },
158
+ };
95
159
  });
96
160
  if ("error" in result)
97
161
  return { error: result.error, code: "LOCK_BUSY" };
98
162
  return result.ok ? result.info : result.failure;
99
163
  }
100
164
  /**
101
- * Next global session number: scan `.workflow/sessions/` for any entry whose name
102
- * starts with a 3-digit code and return max+1, zero-padded. Type-agnostic — one
103
- * sequence for every session regardless of kind. Legacy `sessionNNN-…` folders
104
- * (no leading digit) don't match and are ignored, so the new sequence starts fresh.
165
+ * The typed parents a set of declared inputs implies.
166
+ *
167
+ * An input is the document the run works ON, so the document IS its parent — and
168
+ * the edge is provable, because the path was declared by the caller and its
169
+ * identity is fixed by the workspace layout. An input that names no spec or plan
170
+ * (a checkpoint, a loose file) contributes no parent rather than a guessed one.
171
+ */
172
+ function parentsOf(artifacts) {
173
+ const parents = [];
174
+ for (const artifact of artifacts) {
175
+ const node = nodeFromDocPath(artifact.path);
176
+ if (node === null)
177
+ continue;
178
+ if (parents.some((p) => p.kind === node.kind && p.key === node.key))
179
+ continue;
180
+ parents.push(node);
181
+ }
182
+ return parents;
183
+ }
184
+ /**
185
+ * Next global session number: the maximum of what the sessions folder holds and
186
+ * what `HISTORY.md` remembers, plus one, zero-padded. Type-agnostic — one
187
+ * sequence for every session regardless of kind.
188
+ *
189
+ * HISTORY is read as well as the folder because a RETIRED session leaves no
190
+ * folder behind: scanning live directories alone would hand `119` to a new
191
+ * session after the old `119` was discarded, and the two would then share a row
192
+ * key, a unit branch and a `--code`. Numbering is monotonic even across
193
+ * deletions — an identity is spent once. Legacy `sessionNNN-…` folders carry no
194
+ * leading digit and are ignored by the folder half, while the history half still
195
+ * recognizes their rows.
105
196
  */
106
- async function nextSessionNumber(fs, sessionsDir) {
197
+ async function nextSessionNumber(fs, paths, sessionsDir) {
107
198
  const entries = await fs.list(sessionsDir);
108
- let max = 0;
199
+ let max = await maxHistoryNumber(fs, paths.cwdHistoryFile());
109
200
  for (const entry of entries) {
110
201
  const m = entry.name.match(/^(\d{3})/);
111
202
  if (m?.[1])
@@ -1 +1 @@
1
- {"version":3,"file":"session-create-service.js","sourceRoot":"","sources":["../../src/application/session-create-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-create-service.js","sourceRoot":"","sources":["../../src/application/session-create-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Recording into custody what an operation REALLY did.
3
+ *
4
+ * One module rather than a call scattered through each service, for a reason
5
+ * that outlives the code: everything here has to be an observation of a result,
6
+ * and keeping the observations together is what makes it checkable that none of
7
+ * them is a re-derivation. A recorder that read the repository to decide what to
8
+ * write would be a second opinion about the same facts — and the one that goes
9
+ * stale.
10
+ *
11
+ * Every function is a no-op on a session with NO custody. That is the legacy
12
+ * path and it is deliberate: a session born before custody existed keeps running
13
+ * exactly as it did, and it is `discard/reset prepare` — not these writes — that
14
+ * refuses to act without evidence.
15
+ */
16
+ import { ABSENT_BASELINE, preservedBaseline } from "../domain/session/custody.js";
17
+ import { semanticDigest } from "./semantic-operation/protocol.js";
18
+ import { effectNow, extendCustody, withArtifacts, withEffect, withSourceBaseline, } from "./session-custody-service.js";
19
+ /** Where a session's custody lives, given the folder name the caller holds. */
20
+ function sessionPathOf(paths, sessionFolder) {
21
+ return `${paths.cwdSessionsDir()}/${sessionFolder}`;
22
+ }
23
+ /**
24
+ * A session took its isolation unit: seal how the source stood at that moment.
25
+ *
26
+ * The dirty state is recorded because it is the only way to later refuse to
27
+ * discard a change we did not make: whatever was already uncommitted here at
28
+ * baseline belongs to somebody else, and no diff taken afterwards can tell the
29
+ * two apart on its own.
30
+ */
31
+ export async function recordUnitTaken(deps, sessionFolder, facts) {
32
+ const source = await readSourceBaseline(deps, facts);
33
+ return extendCustody(deps.fs, sessionPathOf(deps.paths, sessionFolder), (custody) => withEffect(withSourceBaseline(custody, source), {
34
+ ...effectNow("unit_taken", {
35
+ alias: facts.alias,
36
+ after: source.baseline_head,
37
+ ref: `refs/heads/${facts.unitBranch}`,
38
+ }),
39
+ }));
40
+ }
41
+ async function readSourceBaseline(deps, facts) {
42
+ const dirty = await safeChangedFiles(deps.git, facts.sourcePath);
43
+ return {
44
+ alias: facts.alias,
45
+ path: facts.sourcePath,
46
+ branch: (await safeBranch(deps.git, facts.sourcePath)) ?? facts.base,
47
+ baseline_head: await safeHead(deps.git, facts.unitPath, facts.sourcePath),
48
+ unit_branch: facts.unitBranch,
49
+ unit_path: facts.unitPath,
50
+ dirty_digest: semanticDigest([...dirty].sort()),
51
+ dirty_paths: [...dirty].sort(),
52
+ };
53
+ }
54
+ /**
55
+ * The unit's own HEAD when it can be read, the source's otherwise.
56
+ *
57
+ * The unit is the tree the session will commit into, so ITS tip is the point its
58
+ * commits start from. Falling back to the source covers the call that records
59
+ * the baseline before the tree is materialized — same branch, same commit.
60
+ */
61
+ async function safeHead(git, unitPath, sourcePath) {
62
+ const fromUnit = await tryHead(git, unitPath);
63
+ return fromUnit ?? (await tryHead(git, sourcePath));
64
+ }
65
+ async function tryHead(git, path) {
66
+ try {
67
+ return await git.head(path);
68
+ }
69
+ catch {
70
+ return null;
71
+ }
72
+ }
73
+ async function safeBranch(git, path) {
74
+ try {
75
+ return await git.currentBranch(path);
76
+ }
77
+ catch {
78
+ return undefined;
79
+ }
80
+ }
81
+ async function safeChangedFiles(git, path) {
82
+ try {
83
+ return await git.changedFiles(path);
84
+ }
85
+ catch {
86
+ return [];
87
+ }
88
+ }
89
+ /** An integration landed: the merge commit it produced is the session's own. */
90
+ export async function recordIntegration(deps, sessionFolder, facts) {
91
+ const after = await tryHead(deps.git, facts.sourcePath);
92
+ return extendCustody(deps.fs, sessionPathOf(deps.paths, sessionFolder), (custody) => withEffect(custody, {
93
+ ...effectNow("unit_integrated", {
94
+ alias: facts.alias,
95
+ before: facts.before,
96
+ after,
97
+ ref: `refs/heads/${facts.into}`,
98
+ }),
99
+ }));
100
+ }
101
+ /** A typed commit reported its SHAs; they go in verbatim. */
102
+ export async function recordCommit(deps, sessionFolder, alias, receipt) {
103
+ return extendCustody(deps.fs, sessionPathOf(deps.paths, sessionFolder), (custody) => withEffect(custody, {
104
+ ...effectNow("commit", {
105
+ alias,
106
+ before: receipt.before,
107
+ after: receipt.after,
108
+ parents: receipt.parents,
109
+ ref: receipt.branch === null ? null : `refs/heads/${receipt.branch}`,
110
+ }),
111
+ }));
112
+ }
113
+ /**
114
+ * A publication landed: each destination becomes an input or an output.
115
+ *
116
+ * The role comes from what was on disk before the write — the caller reads that
117
+ * and passes it — because after the write the two cases are indistinguishable,
118
+ * and getting them backwards is the difference between a reset that restores a
119
+ * document and one that deletes it.
120
+ */
121
+ export async function recordPublication(deps, sessionFolder, published) {
122
+ if (published.length === 0)
123
+ return { status: "absent" };
124
+ const artifacts = published.map((entry) => ({
125
+ path: entry.path,
126
+ role: entry.previous === null ? "output" : "input",
127
+ before: entry.previous === null ? ABSENT_BASELINE : preservedBaseline(entry.previous),
128
+ }));
129
+ return extendCustody(deps.fs, sessionPathOf(deps.paths, sessionFolder), (custody) => withEffect(withArtifacts(custody, artifacts), {
130
+ ...effectNow("artifact_published", { paths: artifacts.map((a) => a.path) }),
131
+ }));
132
+ }
133
+ /** The run adopted a flow: which one, so the trail says what this session IS. */
134
+ export async function recordFlowAdoption(deps, sessionFolder, flow) {
135
+ return extendCustody(deps.fs, sessionPathOf(deps.paths, sessionFolder), (custody) => withEffect(custody, { ...effectNow("flow_adopted", { paths: [flow] }) }));
136
+ }
137
+ //# sourceMappingURL=session-custody-recorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-custody-recorder.js","sourceRoot":"","sources":["../../src/application/session-custody-recorder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Reading and extending a session's custody — the only path that writes it.
3
+ *
4
+ * Every mutation here is an APPEND of something that really happened plus a
5
+ * re-seal, and never a recomputation of the record from the current state of the
6
+ * workspace. That distinction is the whole value of the file: a custody rebuilt
7
+ * from what exists now could only ever agree with what exists now, which is the
8
+ * one thing a baseline must not do.
9
+ */
10
+ import { join } from "node:path";
11
+ import { ABSENT_BASELINE, CUSTODY_FILE, preservedBaseline, sealCustody, } from "../domain/session/custody.js";
12
+ import { localDateIso } from "./dates.js";
13
+ export function custodyPath(sessionPath) {
14
+ return join(sessionPath, CUSTODY_FILE);
15
+ }
16
+ export async function readCustody(fs, sessionPath) {
17
+ const path = custodyPath(sessionPath);
18
+ if (!(await fs.exists(path)))
19
+ return { status: "absent" };
20
+ let raw;
21
+ try {
22
+ raw = await fs.readText(path);
23
+ }
24
+ catch (err) {
25
+ return { status: "unreadable", reason: `no se pudo leer ${CUSTODY_FILE}: ${message(err)}` };
26
+ }
27
+ let parsed;
28
+ try {
29
+ parsed = JSON.parse(raw);
30
+ }
31
+ catch (err) {
32
+ return { status: "unreadable", reason: `${CUSTODY_FILE} no es JSON válido: ${message(err)}` };
33
+ }
34
+ if (!isCustodyShape(parsed)) {
35
+ return { status: "unreadable", reason: `${CUSTODY_FILE} no tiene la forma de una custodia` };
36
+ }
37
+ return { status: "present", custody: parsed };
38
+ }
39
+ export async function writeCustody(fs, sessionPath, custody) {
40
+ await fs.writeText(custodyPath(sessionPath), `${JSON.stringify(custody, null, 2)}\n`);
41
+ }
42
+ export function birthCustody(input) {
43
+ return sealCustody({
44
+ subject: input.subject,
45
+ subjectPath: input.subjectPath,
46
+ parents: input.parents,
47
+ created: input.created,
48
+ artifacts: input.artifacts,
49
+ });
50
+ }
51
+ /**
52
+ * The baseline of one declared input, read from disk BEFORE the run touches it.
53
+ *
54
+ * A path that is not there yet is recorded as an explicit absence rather than
55
+ * skipped: `reset` has to be able to delete a file back out of existence, and it
56
+ * can only do that if somebody wrote down that it did not exist.
57
+ */
58
+ export async function baselineOf(fs, workspaceRoot, relativePath) {
59
+ const absolute = join(workspaceRoot, relativePath);
60
+ if (!(await fs.exists(absolute))) {
61
+ return { path: relativePath, role: "input", before: ABSENT_BASELINE };
62
+ }
63
+ return {
64
+ path: relativePath,
65
+ role: "input",
66
+ before: preservedBaseline(await fs.readText(absolute)),
67
+ };
68
+ }
69
+ export async function extendCustody(fs, sessionPath, extend) {
70
+ const read = await readCustody(fs, sessionPath);
71
+ if (read.status !== "present")
72
+ return read;
73
+ const next = extend(read.custody);
74
+ await writeCustody(fs, sessionPath, next);
75
+ return { status: "updated", custody: next };
76
+ }
77
+ /** Re-seal a record after appending to it: the digest always covers the whole. */
78
+ function reseal(custody, changes) {
79
+ return sealCustody({
80
+ subject: changes.subject ?? custody.subject,
81
+ subjectPath: changes.subject_path ?? custody.subject_path,
82
+ parents: changes.parents ?? custody.parents,
83
+ created: changes.created ?? custody.created,
84
+ artifacts: changes.artifacts ?? custody.artifacts,
85
+ sources: changes.sources ?? custody.sources,
86
+ effects: changes.effects ?? custody.effects,
87
+ });
88
+ }
89
+ /**
90
+ * Record a source as this session first found it, and never again.
91
+ *
92
+ * Idempotent by alias on purpose: `worktree ensure` is idempotent, and a second
93
+ * call re-reading HEAD would overwrite the baseline with a state the session
94
+ * itself produced — the exact way a baseline stops being one.
95
+ */
96
+ export function withSourceBaseline(custody, source) {
97
+ const known = custody.sources.find((s) => s.alias === source.alias);
98
+ if (known !== undefined) {
99
+ // The unit is the one field a later call may legitimately fill: a session can
100
+ // record the source first and take its unit afterwards.
101
+ if (known.unit_branch !== null || source.unit_branch === null)
102
+ return custody;
103
+ const merged = {
104
+ ...known,
105
+ unit_branch: source.unit_branch,
106
+ unit_path: source.unit_path,
107
+ };
108
+ return reseal(custody, {
109
+ sources: custody.sources.map((s) => (s.alias === source.alias ? merged : s)),
110
+ });
111
+ }
112
+ return reseal(custody, { sources: [...custody.sources, source] });
113
+ }
114
+ export function withEffect(custody, effect) {
115
+ return reseal(custody, { effects: [...custody.effects, effect] });
116
+ }
117
+ /**
118
+ * Record what a publication really wrote.
119
+ *
120
+ * The role is decided by what was on disk BEFORE the write, not by what the
121
+ * proposal called itself: an artifact that already existed is an input this
122
+ * session modified — a reset owes its previous bytes back — and one that did not
123
+ * is an output, which a reset simply removes. Re-publishing the same path never
124
+ * downgrades an input into an output, because the first baseline is the true one.
125
+ */
126
+ export function withArtifacts(custody, artifacts) {
127
+ const merged = [...custody.artifacts];
128
+ for (const artifact of artifacts) {
129
+ if (merged.some((known) => known.path === artifact.path))
130
+ continue;
131
+ merged.push(artifact);
132
+ }
133
+ return merged.length === custody.artifacts.length
134
+ ? custody
135
+ : reseal(custody, { artifacts: merged });
136
+ }
137
+ export function effectNow(kind, fields = {}, now = new Date()) {
138
+ return {
139
+ kind,
140
+ alias: fields.alias ?? null,
141
+ before: fields.before ?? null,
142
+ after: fields.after ?? null,
143
+ parents: fields.parents ?? [],
144
+ ref: fields.ref ?? null,
145
+ paths: fields.paths ?? [],
146
+ at: localDateIso(now),
147
+ };
148
+ }
149
+ function isCustodyShape(value) {
150
+ if (value === null || typeof value !== "object")
151
+ return false;
152
+ const candidate = value;
153
+ return (typeof candidate.version === "number" &&
154
+ typeof candidate.digest === "string" &&
155
+ typeof candidate.subject_path === "string" &&
156
+ isNode(candidate.subject) &&
157
+ Array.isArray(candidate.parents) &&
158
+ Array.isArray(candidate.artifacts) &&
159
+ Array.isArray(candidate.sources) &&
160
+ Array.isArray(candidate.effects));
161
+ }
162
+ function isNode(value) {
163
+ if (value === null || typeof value !== "object")
164
+ return false;
165
+ const node = value;
166
+ return typeof node.kind === "string" && typeof node.key === "string";
167
+ }
168
+ function message(err) {
169
+ return err instanceof Error ? err.message : String(err);
170
+ }
171
+ //# sourceMappingURL=session-custody-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-custody-service.js","sourceRoot":"","sources":["../../src/application/session-custody-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,eAAe,EACf,YAAY,EAKZ,iBAAiB,EACjB,WAAW,GACZ,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,OAAO,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AACzC,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAkB,EAAE,WAAmB;IACvE,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC1D,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,mBAAmB,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAC9F,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,YAAY,uBAAuB,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAChG,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,YAAY,oCAAoC,EAAE,CAAC;IAC/F,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,EAAkB,EAClB,WAAmB,EACnB,OAAuB;IAEvB,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACxF,CAAC;AAkBD,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,OAAO,WAAW,CAAC;QACjB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,EAAkB,EAClB,aAAqB,EACrB,YAAoB;IAEpB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACxE,CAAC;IACD,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,iBAAiB,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KACvD,CAAC;AACJ,CAAC;AAgBD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAkB,EAClB,WAAmB,EACnB,MAAmD;IAEnD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAChD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,YAAY,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,kFAAkF;AAClF,SAAS,MAAM,CAAC,OAAuB,EAAE,OAAgC;IACvE,OAAO,WAAW,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;QAC3C,WAAW,EAAE,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY;QACzD,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;QAC3C,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;QAC3C,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;QACjD,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;QAC3C,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;KAC5C,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAuB,EAAE,MAAqB;IAC/E,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;IACpE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,8EAA8E;QAC9E,wDAAwD;QACxD,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;QAC9E,MAAM,MAAM,GAAkB;YAC5B,GAAG,KAAK;YACR,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC;QACF,OAAO,MAAM,CAAC,OAAO,EAAE;YACrB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7E,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAuB,EAAE,MAAqB;IACvE,OAAO,MAAM,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AACpE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAuB,EACvB,SAAqC;IAErC,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QACnE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,MAAM;QAC/C,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,IAA2B,EAC3B,SAAsD,EAAE,EACxD,MAAY,IAAI,IAAI,EAAE;IAEtB,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;QAC7B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC7B,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,IAAI;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;QACzB,EAAE,EAAE,YAAY,CAAC,GAAG,CAAC;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,OAAO,CACL,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;QACrC,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ;QACpC,OAAO,SAAS,CAAC,YAAY,KAAK,QAAQ;QAC1C,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;QACzB,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QAChC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC;QAClC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QAChC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CACjC,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,IAAI,GAAG,KAAgC,CAAC;IAC9C,OAAO,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC;AACvE,CAAC;AAED,SAAS,OAAO,CAAC,GAAY;IAC3B,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC"}
@@ -87,6 +87,27 @@ export function sessionNumericCode(folder) {
87
87
  const m = folder.match(/^(?:session)?(\d+)-/);
88
88
  return m?.[1] ?? null;
89
89
  }
90
+ /**
91
+ * The slug a session folder carries: `roles-ficha` for `067-roles-ficha-plan-new`.
92
+ *
93
+ * The folder is `NNN-<slug>-<flow>` by construction — that is the name
94
+ * `session-create` is told to use, and the loops spell it that way — so the slug
95
+ * is a fact the engine already holds rather than something a run has to narrate.
96
+ * The flow is passed in and matched as a SUFFIX instead of being guessed: a slug
97
+ * may itself end in a word a flow name starts with, and the flow the state knows
98
+ * is the only unambiguous place to cut.
99
+ *
100
+ * `null` for a folder that does not fit the shape, and null is the point of the
101
+ * return type: a slug this function had to invent would end up in a filename.
102
+ */
103
+ export function sessionSlug(folder, flow) {
104
+ const rest = folder.match(/^(?:session)?\d+-(.+)$/)?.[1];
105
+ const suffix = `-${flow}`;
106
+ if (rest === undefined || !rest.endsWith(suffix))
107
+ return null;
108
+ const slug = rest.slice(0, -suffix.length);
109
+ return slug.length > 0 ? slug : null;
110
+ }
90
111
  export async function resolveSessionTarget(fs, paths, request) {
91
112
  const resolution = await walkPrecedence(fs, paths, request);
92
113
  if (resolution.outcome !== "resolved" || request.bind !== true)
@@ -1 +1 @@
1
- {"version":3,"file":"session-resolver.js","sourceRoot":"","sources":["../../src/application/session-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAElG,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAEnF,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAElD,8DAA8D;AAC9D,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AAmBvC,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAI/C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,iFAAiF;QACjF,yDAAyD;QACzD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACxC,CAAC;IACD,0EAA0E;IAC1E,+EAA+E;IAC/E,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAkB,EAClB,WAAmB,EACnB,MAAc;IAEd,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAElD,8EAA8E;IAC9E,uEAAuE;IACvE,MAAM,KAAK,GAAiB,MAAM,qBAAqB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAEzE,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,CAAC,MAAM,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAiB;QAC1B,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,IAAI,EAAE,WAAW;QACjB,KAAK;QACL,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,OAAO;QACP,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9D,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAmB,EACnB,GAAW,EACX,UAAiC,EAAE;IAEnC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC7D,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAkB,EAClB,GAAW;IAEX,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,4EAA4E;IAC5E,yEAAyE;IACzE,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC;AA8DD;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAGlC;IACC,OAAO;QACL,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;KACX,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAAkB,EAClB,KAAmB,EACnB,OAA8B;IAE9B,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAI,UAAU,CAAC,OAAO,KAAK,UAAU,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC;IAClF,OAAO,CAAC,MAAM,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC;AAC1F,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,EAAkB,EAClB,KAAmB,EACnB,OAA8B;IAE9B,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAE/C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAClD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC3E,IAAI,UAAU,KAAK,IAAI;YAAE,OAAO,UAAU,CAAC;IAC7C,CAAC;IAED,OAAO,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,gBAAgB,CAC7B,EAAkB,EAClB,KAAmB,EACnB,SAA6B,EAC7B,UAAyD;IAEzD,MAAM,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACnC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACjE,yEAAyE;IACzE,8EAA8E;IAC9E,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEvD,0EAA0E;IAC1E,8EAA8E;IAC9E,yEAAyE;IACzE,sEAAsE;IACtE,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC5F,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5F,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAChD,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAC/D,CAAC;IACF,IAAI,OAAO,IAAI,OAAO;QAAE,OAAO,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACjF,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,cAAc,CAAC,OAAqB,EAAE,MAAc;IAC3D,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,yCAAyC,OAAO,CAAC,MAAM,MAAM,MAAM,EAAE;QAC9E,UAAU,EAAE;YACV,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;SAC3F;QACD,MAAM,EAAE,sEAAsE;KAC/E,CAAC;AACJ,CAAC;AASD,KAAK,UAAU,WAAW,CACxB,EAAkB,EAClB,OAAyC;IAEzC,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC;YACrC,KAAK,EAAE,MAAM,qBAAqB,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC;SACpD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,EAAkB,EAClB,OAAwB,EACxB,IAAY,EACZ,WAAoB;IAEpB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC;YACzB,CAAC,CAAC,eAAe,CACb,mBAAmB,EACnB,0CAA0C,IAAI,GAAG,EACjD,OAAO,EACP,oEAAoE,CACrE;YACH,CAAC,CAAC,eAAe,CACb,mBAAmB,EACnB,IAAI,IAAI,kBAAkB,OAAO,CAAC,MAAM,WAAW,EACnD,OAAO,EACP,8CAA8C,CAC/C,CAAC;IACR,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,OAAO,eAAe,CACpB,gBAAgB,EAChB,cAAc,IAAI,CAAC,IAAI,gBAAgB,EACvC,CAAC,IAAI,CAAC,EACN,kFAAkF,CACnF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,UAAU;QACnB,GAAG,EAAE,UAAU;QACf,OAAO,EAAE,MAAM,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,KAAK,UAAU,kBAAkB,CAC/B,EAAkB,EAClB,KAAmB,EACnB,OAAwB,EACxB,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,eAAe,CACpB,yBAAyB,EACzB,MAAM,CAAC,MAAM,EACb,OAAO,EACP,yFAAyF,CAC1F,CAAC;IACJ,CAAC;IACD,6EAA6E;IAC7E,iEAAiE;IACjE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,eAAe,CACpB,yBAAyB,EACzB,oCAAoC,MAAM,CAAC,MAAM,qBAAqB,EACtE,OAAO,EACP,+DAA+D,CAChE,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,eAAe,CACpB,yBAAyB,EACzB,oCAAoC,MAAM,CAAC,MAAM,qBAAqB,EACtE,OAAO,EACP,wEAAwE,CACzE,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,UAAU;QACnB,GAAG,EAAE,SAAS;QACd,OAAO,EAAE,MAAM,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,EAAkB,EAClB,OAAwB;IAExB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO;YACL,OAAO,EAAE,UAAU;YACnB,GAAG,EAAE,aAAa;YAClB,OAAO,EAAE,MAAM,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;SAC3D,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,eAAe,CACpB,mBAAmB,EACnB,yCAAyC,EACzC,OAAO,EACP,oEAAoE,CACrE,CAAC;IACJ,CAAC;IACD,OAAO,eAAe,CACpB,mBAAmB,EACnB,OAAO,OAAO,CAAC,MAAM,6DAA6D,EAClF,OAAO,EACP,8BAA8B,CAC/B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,MAAc,EAAE,KAAa;IACpD,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,MAAM,GAAG,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC5C,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzD,CAAC;AAED,SAAS,eAAe,CACtB,IAAsB,EACtB,OAAe,EACf,UAA2B,EAC3B,MAAc;IAEd,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,IAAI;QACJ,OAAO;QACP,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACrF,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,sCAAsC,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IACzE,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,MAAM,CAAC;IACjD,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,qBAAqB,CAClC,EAAkB,EAClB,WAAmB;IAEnB,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnF,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,EAAkB,EAClB,WAAmB;IAEnB,0EAA0E;IAC1E,6EAA6E;IAC7E,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAChE,MAAM,IAAI,GACR,CAAC,MAAM,YAAY,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC,MAAM,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtE,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAE7B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrF,MAAM,OAAO,GACX,uBAAuB,CAAC,IAAI,EAAE,eAAe,CAAC;QAC9C,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC;QACtC,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC;QACzC,uBAAuB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,OAAO;QACL,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,EAAkB,EAAE,IAAY;IACzD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"session-resolver.js","sourceRoot":"","sources":["../../src/application/session-resolver.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { projectRun } from "./flow/run-projection.js";
2
+ import { readEvents } from "./retirement/history-events.js";
2
3
  import { buildWorklineIndex, } from "./workline-index-service.js";
3
4
  /**
4
5
  * Read-only whole-workspace status aggregator. Never throws on a reachable cwd:
@@ -7,6 +8,7 @@ import { buildWorklineIndex, } from "./workline-index-service.js";
7
8
  */
8
9
  export async function runStatusCommand(fs, env, paths, input = {}) {
9
10
  const index = await buildWorklineIndex(fs, env, paths, input);
11
+ const events = await readEvents(fs, paths);
10
12
  const active = [];
11
13
  const closed = [];
12
14
  for (const session of index.sessions) {
@@ -29,6 +31,8 @@ export async function runStatusCommand(fs, env, paths, input = {}) {
29
31
  plans: index.plans,
30
32
  sessions: { active, closed },
31
33
  discarded: index.discarded,
34
+ terminal_events: events,
35
+ pending_retirements: index.pending_retirements,
32
36
  pipeline: index.pipeline,
33
37
  designs: index.designs,
34
38
  orphan_units: index.orphan_units,
@@ -39,6 +43,7 @@ export async function runStatusCommand(fs, env, paths, input = {}) {
39
43
  sessions_active: active.length,
40
44
  sessions_closed: closed.length,
41
45
  discarded: index.discarded.length,
46
+ terminal_events: events.length,
42
47
  pending: index.pipeline.length,
43
48
  },
44
49
  };