pi-daddy 0.41.0 → 0.43.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 (138) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/contracts/ledger-record/v1/fixtures/capability-decision.json +3 -1
  3. package/contracts/ledger-record/v1/fixtures/child-lifecycle.json +25 -0
  4. package/contracts/ledger-record/v1/fixtures/episode-cost-gate.json +14 -0
  5. package/contracts/ledger-record/v1/fixtures/episode-outcome.json +12 -0
  6. package/contracts/ledger-record/v1/fixtures/ledger-record.jsonl +6 -3
  7. package/contracts/ledger-record/v1/fixtures/session-config.json +14 -0
  8. package/contracts/ledger-record/v1/governance-event.schema.json +356 -0
  9. package/dist/advisors/advisor.d.ts +24 -1
  10. package/dist/advisors/advisor.d.ts.map +1 -1
  11. package/dist/advisors/advisor.js +19 -1
  12. package/dist/advisors/advisor.js.map +1 -1
  13. package/dist/advisors/decider.d.ts +11 -0
  14. package/dist/advisors/decider.d.ts.map +1 -1
  15. package/dist/advisors/decider.js.map +1 -1
  16. package/dist/advisors/jev.d.ts.map +1 -1
  17. package/dist/advisors/jev.js +32 -1
  18. package/dist/advisors/jev.js.map +1 -1
  19. package/dist/cli.d.ts +7 -1
  20. package/dist/cli.d.ts.map +1 -1
  21. package/dist/cli.js +87 -1
  22. package/dist/cli.js.map +1 -1
  23. package/dist/executors/activity-session.d.ts +13 -0
  24. package/dist/executors/activity-session.d.ts.map +1 -1
  25. package/dist/executors/activity-session.js +44 -2
  26. package/dist/executors/activity-session.js.map +1 -1
  27. package/dist/governance/episode-cost-gate.d.ts +31 -0
  28. package/dist/governance/episode-cost-gate.d.ts.map +1 -0
  29. package/dist/governance/episode-cost-gate.js +112 -0
  30. package/dist/governance/episode-cost-gate.js.map +1 -0
  31. package/dist/governance/ledger-events.d.ts +108 -1
  32. package/dist/governance/ledger-events.d.ts.map +1 -1
  33. package/dist/governance/ledger-events.js +64 -0
  34. package/dist/governance/ledger-events.js.map +1 -1
  35. package/dist/governance/ledger-v3-validation.d.ts.map +1 -1
  36. package/dist/governance/ledger-v3-validation.js +124 -0
  37. package/dist/governance/ledger-v3-validation.js.map +1 -1
  38. package/dist/governance/ledger.d.ts +8 -2
  39. package/dist/governance/ledger.d.ts.map +1 -1
  40. package/dist/governance/ledger.js +18 -2
  41. package/dist/governance/ledger.js.map +1 -1
  42. package/dist/kernel/context-handoff.d.ts.map +1 -1
  43. package/dist/kernel/context-handoff.js +4 -1
  44. package/dist/kernel/context-handoff.js.map +1 -1
  45. package/dist/kernel/definitions.d.ts +5 -0
  46. package/dist/kernel/definitions.d.ts.map +1 -1
  47. package/dist/kernel/definitions.js +30 -1
  48. package/dist/kernel/definitions.js.map +1 -1
  49. package/dist/kernel/delegate-types.d.ts +4 -0
  50. package/dist/kernel/delegate-types.d.ts.map +1 -1
  51. package/dist/kernel/delegate-types.js.map +1 -1
  52. package/dist/kernel/delegate.d.ts.map +1 -1
  53. package/dist/kernel/delegate.js +20 -5
  54. package/dist/kernel/delegate.js.map +1 -1
  55. package/dist/kernel/env-names.d.ts +5 -0
  56. package/dist/kernel/env-names.d.ts.map +1 -1
  57. package/dist/kernel/env-names.js +9 -0
  58. package/dist/kernel/env-names.js.map +1 -1
  59. package/dist/kernel/grant-env.d.ts +2 -0
  60. package/dist/kernel/grant-env.d.ts.map +1 -1
  61. package/dist/kernel/grant-env.js +1 -0
  62. package/dist/kernel/grant-env.js.map +1 -1
  63. package/dist/kernel/propagation.d.ts +2 -2
  64. package/dist/kernel/propagation.d.ts.map +1 -1
  65. package/dist/kernel/propagation.js +7 -2
  66. package/dist/kernel/propagation.js.map +1 -1
  67. package/dist/products/dashboard-cli.d.ts +4 -0
  68. package/dist/products/dashboard-cli.d.ts.map +1 -1
  69. package/dist/products/dashboard-cli.js +32 -4
  70. package/dist/products/dashboard-cli.js.map +1 -1
  71. package/dist/products/dashboard-handshake.d.ts +8 -0
  72. package/dist/products/dashboard-handshake.d.ts.map +1 -1
  73. package/dist/products/dashboard-handshake.js +3 -0
  74. package/dist/products/dashboard-handshake.js.map +1 -1
  75. package/dist/products/dashboard-herdr.d.ts +4 -0
  76. package/dist/products/dashboard-herdr.d.ts.map +1 -1
  77. package/dist/products/dashboard-herdr.js +10 -2
  78. package/dist/products/dashboard-herdr.js.map +1 -1
  79. package/dist/products/dashboard-projection.d.ts.map +1 -1
  80. package/dist/products/dashboard-projection.js +13 -6
  81. package/dist/products/dashboard-projection.js.map +1 -1
  82. package/dist/products/dashboard-render.d.ts +10 -0
  83. package/dist/products/dashboard-render.d.ts.map +1 -1
  84. package/dist/products/dashboard-render.js +9 -0
  85. package/dist/products/dashboard-render.js.map +1 -1
  86. package/dist/products/dashboard-session-client.d.ts +17 -0
  87. package/dist/products/dashboard-session-client.d.ts.map +1 -0
  88. package/dist/products/dashboard-session-client.js +28 -0
  89. package/dist/products/dashboard-session-client.js.map +1 -0
  90. package/dist/products/episode-outcomes.d.ts +32 -0
  91. package/dist/products/episode-outcomes.d.ts.map +1 -0
  92. package/dist/products/episode-outcomes.js +280 -0
  93. package/dist/products/episode-outcomes.js.map +1 -0
  94. package/dist/products/episode-report.d.ts +59 -0
  95. package/dist/products/episode-report.d.ts.map +1 -0
  96. package/dist/products/episode-report.js +311 -0
  97. package/dist/products/episode-report.js.map +1 -0
  98. package/extensions/chain-ledger.ts +2 -0
  99. package/extensions/chain-plan.ts +4 -2
  100. package/extensions/context-shape.ts +19 -4
  101. package/extensions/dashboard-session-server.ts +86 -0
  102. package/extensions/definition-runtime.ts +93 -0
  103. package/extensions/delegate-chain.ts +31 -2
  104. package/extensions/delegation-ledger.ts +2 -0
  105. package/extensions/delegation.ts +24 -0
  106. package/extensions/effort-advice.ts +12 -0
  107. package/extensions/execute-child.ts +148 -9
  108. package/extensions/grants-command.ts +32 -2
  109. package/extensions/grants.ts +23 -1
  110. package/extensions/pruning-advice.ts +3 -1
  111. package/extensions/run-delegation.ts +54 -6
  112. package/extensions/session-model-prompt.ts +179 -0
  113. package/extensions/session.ts +104 -3
  114. package/package.json +1 -1
  115. package/src/advisors/advisor.ts +45 -2
  116. package/src/advisors/decider.ts +8 -0
  117. package/src/advisors/jev.ts +34 -1
  118. package/src/cli.ts +90 -2
  119. package/src/executors/activity-session.ts +56 -2
  120. package/src/governance/episode-cost-gate.ts +128 -0
  121. package/src/governance/ledger-events.ts +173 -1
  122. package/src/governance/ledger-v3-validation.ts +146 -0
  123. package/src/governance/ledger.ts +29 -1
  124. package/src/kernel/context-handoff.ts +5 -1
  125. package/src/kernel/definitions.ts +32 -1
  126. package/src/kernel/delegate-types.ts +4 -0
  127. package/src/kernel/delegate.ts +22 -5
  128. package/src/kernel/env-names.ts +10 -0
  129. package/src/kernel/grant-env.ts +3 -0
  130. package/src/kernel/propagation.ts +7 -0
  131. package/src/products/dashboard-cli.ts +32 -4
  132. package/src/products/dashboard-handshake.ts +5 -0
  133. package/src/products/dashboard-herdr.ts +15 -1
  134. package/src/products/dashboard-projection.ts +13 -6
  135. package/src/products/dashboard-render.ts +11 -0
  136. package/src/products/dashboard-session-client.ts +35 -0
  137. package/src/products/episode-outcomes.ts +317 -0
  138. package/src/products/episode-report.ts +372 -0
@@ -0,0 +1,280 @@
1
+ /** Compute durable episode outcomes from Git, CI metadata, and the next recorded operator turn. */
2
+ import { execFile } from "node:child_process";
3
+ import { readFile } from "node:fs/promises";
4
+ import { promisify } from "node:util";
5
+ import { appendLedgerEvent, buildEpisodeOutcomeEvent } from "../governance/ledger.js";
6
+ import { readRecords } from "../governance/record.js";
7
+ import { isEpisodeId } from "../kernel/episode-id.js";
8
+ import { readActivityContent } from "./activity-timeline.js";
9
+ const execFileAsync = promisify(execFile);
10
+ const FORTY_EIGHT_HOURS = 48 * 60 * 60 * 1_000;
11
+ const TWENTY_FOUR_HOURS = 24 * 60 * 60 * 1_000;
12
+ export const CORRECTION_PREFIXES = ["no,", "that's wrong", "undo", "revert"];
13
+ async function command(cwd, file, args) {
14
+ try {
15
+ const result = await execFileAsync(file, args, { cwd, maxBuffer: 32 * 1024 * 1024 });
16
+ return { stdout: result.stdout, code: 0 };
17
+ }
18
+ catch (error) {
19
+ const failure = error;
20
+ return { stdout: failure.stdout ?? "", code: typeof failure.code === "number" ? failure.code : 127 };
21
+ }
22
+ }
23
+ function commitsFromLog(log) {
24
+ const commits = [];
25
+ for (const entry of log.split("\u001e")) {
26
+ const [sha, parentText, authored, ...messageParts] = entry.trim().split("\u001f");
27
+ if (!/^[a-f0-9]{40}$/i.test(sha ?? ""))
28
+ continue;
29
+ const parents = parentText.split(" ").filter((parent) => /^[a-f0-9]{40}$/i.test(parent));
30
+ const message = messageParts.join("\u001f");
31
+ const episodes = [...message.matchAll(/^Pi-Episode:\s*(\S+)\s*$/gim)]
32
+ .map((match) => (match[1].startsWith("episode:") ? match[1] : `episode:${match[1]}`))
33
+ .filter(isEpisodeId);
34
+ commits.push({ sha, parents, authoredMs: Date.parse(authored), message, episodes });
35
+ }
36
+ return commits;
37
+ }
38
+ function absentOrThrow(result, operation) {
39
+ if (result.code === 1)
40
+ return true;
41
+ if (result.code !== 0)
42
+ throw new Error(`pi-daddy outcomes: git ${operation} failed`);
43
+ return false;
44
+ }
45
+ async function defaultBranch(runGit) {
46
+ const remote = await runGit(["symbolic-ref", "--quiet", "--short", "refs/remotes/origin/HEAD"]);
47
+ if (remote.code === 0 && remote.stdout.trim())
48
+ return remote.stdout.trim();
49
+ absentOrThrow(remote, "symbolic-ref");
50
+ for (const name of ["main", "master"]) {
51
+ const local = await runGit(["show-ref", "--verify", "--quiet", `refs/heads/${name}`]);
52
+ if (local.code === 0)
53
+ return name;
54
+ absentOrThrow(local, "show-ref");
55
+ }
56
+ const current = await runGit(["symbolic-ref", "--quiet", "--short", "HEAD"]);
57
+ if (current.code === 0 && current.stdout.trim())
58
+ return current.stdout.trim();
59
+ absentOrThrow(current, "symbolic-ref");
60
+ throw new Error("pi-daddy outcomes: no default branch could be resolved");
61
+ }
62
+ export async function gitIsAncestor(cwd, older, newer, runGit = (args) => command(cwd, "git", args)) {
63
+ const result = await runGit(["merge-base", "--is-ancestor", older, newer]);
64
+ if (result.code === 0)
65
+ return true;
66
+ if (result.code === 1)
67
+ return false;
68
+ throw new Error(`pi-daddy outcomes: git merge-base failed for ${older} and ${newer}`);
69
+ }
70
+ async function filesFor(runGit, sha) {
71
+ const result = await runGit(["diff-tree", "--root", "--no-commit-id", "--name-only", "-r", sha]);
72
+ if (result.code !== 0)
73
+ throw new Error(`pi-daddy outcomes: could not read files for ${sha}`);
74
+ return new Set(result.stdout.split("\n").filter(Boolean));
75
+ }
76
+ async function diffFor(runGit, from, to) {
77
+ const result = await runGit(["diff", "--binary", from, to, "--"]);
78
+ if (result.code !== 0)
79
+ throw new Error(`pi-daddy outcomes: git diff failed for ${from} and ${to}`);
80
+ return result.stdout;
81
+ }
82
+ async function commitDiff(runGit, commit) {
83
+ if (commit.parents[0])
84
+ return diffFor(runGit, commit.parents[0], commit.sha);
85
+ const result = await runGit(["show", "--format=", "--binary", "--root", commit.sha, "--"]);
86
+ if (result.code !== 0)
87
+ throw new Error(`pi-daddy outcomes: git show failed for ${commit.sha}`);
88
+ return result.stdout;
89
+ }
90
+ function commitChildren(commits) {
91
+ const children = new Map();
92
+ for (const commit of commits)
93
+ for (const parent of commit.parents)
94
+ children.set(parent, [...(children.get(parent) ?? []), commit.sha]);
95
+ return children;
96
+ }
97
+ function laterDescendants(candidate, commits, children) {
98
+ const later = [];
99
+ const pending = [...(children.get(candidate.sha) ?? [])];
100
+ const visited = new Set();
101
+ while (pending.length > 0) {
102
+ const sha = pending.pop();
103
+ if (visited.has(sha))
104
+ continue;
105
+ visited.add(sha);
106
+ const commit = commits.get(sha);
107
+ if (commit)
108
+ later.push(commit);
109
+ pending.push(...(children.get(sha) ?? []));
110
+ }
111
+ return later;
112
+ }
113
+ function cached(cache, key, load) {
114
+ const existing = cache.get(key);
115
+ if (existing)
116
+ return existing;
117
+ const value = load();
118
+ cache.set(key, value);
119
+ return value;
120
+ }
121
+ async function wasReverted(runGit, candidate, later, commitDiffs, inverseDiffs) {
122
+ const named = later.some((commit) => {
123
+ const lower = commit.message.toLowerCase();
124
+ return lower.includes(candidate.sha.toLowerCase()) || lower.includes(candidate.sha.slice(0, 12).toLowerCase());
125
+ });
126
+ if (named)
127
+ return true;
128
+ const original = await cached(commitDiffs, candidate.sha, () => commitDiff(runGit, candidate));
129
+ for (const commit of later) {
130
+ const inverse = await cached(inverseDiffs, commit.sha, () => diffFor(runGit, commit.sha, `${commit.sha}^`));
131
+ if (inverse === original)
132
+ return true;
133
+ }
134
+ return false;
135
+ }
136
+ async function wasAmended(runGit, candidate, later, filesByCommit) {
137
+ const files = await cached(filesByCommit, candidate.sha, () => filesFor(runGit, candidate.sha));
138
+ if (files.size === 0)
139
+ return false;
140
+ for (const commit of later) {
141
+ const elapsed = commit.authoredMs - candidate.authoredMs;
142
+ if (elapsed < 0 || elapsed > TWENTY_FOUR_HOURS)
143
+ continue;
144
+ if (!/^(fix|fixup|amend)(?:\b|:)/i.test(commit.message.trim()))
145
+ continue;
146
+ const touched = await cached(filesByCommit, commit.sha, () => filesFor(runGit, commit.sha));
147
+ if ([...touched].some((file) => files.has(file)))
148
+ return true;
149
+ }
150
+ return false;
151
+ }
152
+ async function defaultGh(cwd, sha) {
153
+ if ((await command(cwd, "gh", ["--version"])).code !== 0)
154
+ return null;
155
+ const result = await command(cwd, "gh", ["run", "list", "--commit", sha, "--json", "conclusion", "--limit", "100"]);
156
+ if (result.code !== 0)
157
+ throw new Error(`pi-daddy outcomes: gh run list failed for ${sha}`);
158
+ return result.stdout;
159
+ }
160
+ function ciFrom(value) {
161
+ if (value === null)
162
+ return "none";
163
+ try {
164
+ const conclusions = JSON.parse(value).map((run) => String(run.conclusion ?? ""));
165
+ if (conclusions.some((item) => ["failure", "cancelled", "timed_out", "action_required", "startup_failure"].includes(item)))
166
+ return "red";
167
+ return conclusions.some((item) => ["success", "neutral", "skipped"].includes(item)) ? "green" : "none";
168
+ }
169
+ catch {
170
+ throw new Error("pi-daddy outcomes: gh run list returned invalid JSON");
171
+ }
172
+ }
173
+ async function corrections(activityPath) {
174
+ let text;
175
+ try {
176
+ text = await readFile(activityPath, "utf8");
177
+ }
178
+ catch (error) {
179
+ if (error.code === "ENOENT")
180
+ return new Set();
181
+ throw error;
182
+ }
183
+ const parsed = readRecords(text);
184
+ if (parsed.damage)
185
+ throw new Error(`activity ledger damaged at line ${parsed.damage.line}: ${parsed.damage.reason}`);
186
+ const turns = new Map();
187
+ for (const record of parsed.records) {
188
+ const body = record.body;
189
+ if (record.kind !== "activity" || body.kind !== "task_started" || body.agentId !== undefined)
190
+ continue;
191
+ if (!isEpisodeId(body.episodeId))
192
+ continue;
193
+ const list = turns.get(body.episodeId) ?? [];
194
+ list.push({ at: Date.parse(String(body.at)), prompt: body.prompt });
195
+ turns.set(body.episodeId, list);
196
+ }
197
+ const corrected = new Set();
198
+ for (const [episode, entries] of turns) {
199
+ const next = entries.sort((a, b) => a.at - b.at)[1];
200
+ if (!next?.prompt?.ref)
201
+ continue;
202
+ const prompt = (await readActivityContent(activityPath, next.prompt)).trimStart().toLowerCase();
203
+ if (CORRECTION_PREFIXES.some((prefix) => prompt.startsWith(prefix)))
204
+ corrected.add(episode);
205
+ }
206
+ return corrected;
207
+ }
208
+ function priorSignals(ledgerText) {
209
+ const parsed = readRecords(ledgerText);
210
+ if (parsed.damage)
211
+ throw new Error(`grants ledger damaged at line ${parsed.damage.line}: ${parsed.damage.reason}`);
212
+ const prior = new Map();
213
+ for (const record of parsed.records) {
214
+ const body = record.body;
215
+ if (body.event === "episode_outcome" && body.episodeId)
216
+ prior.set(body.episodeId, body);
217
+ }
218
+ return prior;
219
+ }
220
+ function sameSignals(left, right) {
221
+ return (left?.survived === right.survived &&
222
+ left.ci === right.ci &&
223
+ left.amended === right.amended &&
224
+ left.corrected === right.corrected &&
225
+ left.label === right.label);
226
+ }
227
+ export async function updateEpisodeOutcomes(options) {
228
+ const now = options.now ?? new Date();
229
+ const runGit = options.runGit ?? ((args) => command(options.cwd, "git", args));
230
+ let ledgerText = "";
231
+ try {
232
+ ledgerText = await readFile(options.ledgerPath, "utf8");
233
+ }
234
+ catch (error) {
235
+ if (error.code !== "ENOENT")
236
+ throw error;
237
+ }
238
+ const log = await runGit(["log", "--all", "--reflog", "--format=%H%x1f%P%x1f%aI%x1f%B%x1e"]);
239
+ if (log.code !== 0)
240
+ throw new Error("pi-daddy outcomes: git history could not be read");
241
+ const commits = commitsFromLog(log.stdout);
242
+ const branch = await defaultBranch(runGit);
243
+ const correctedEpisodes = await corrections(options.activityPath);
244
+ const commitsBySha = new Map(commits.map((commit) => [commit.sha, commit]));
245
+ const children = commitChildren(commits);
246
+ const latest = new Map();
247
+ for (const commit of commits)
248
+ for (const episode of commit.episodes)
249
+ if (!latest.has(episode))
250
+ latest.set(episode, commit);
251
+ const outcomes = [];
252
+ const commitDiffs = new Map();
253
+ const inverseDiffs = new Map();
254
+ const filesByCommit = new Map();
255
+ for (const [episodeId, candidate] of latest) {
256
+ const later = laterDescendants(candidate, commitsBySha, children);
257
+ const reverted = await wasReverted(runGit, candidate, later, commitDiffs, inverseDiffs);
258
+ const survived = (await gitIsAncestor(options.cwd, candidate.sha, branch, runGit)) && !reverted;
259
+ const ci = ciFrom(await (options.runGh ?? ((sha) => defaultGh(options.cwd, sha)))(candidate.sha));
260
+ const amended = await wasAmended(runGit, candidate, later, filesByCommit);
261
+ const corrected = correctedEpisodes.has(episodeId);
262
+ const oldEnough = now.getTime() - candidate.authoredMs >= FORTY_EIGHT_HOURS;
263
+ const label = !oldEnough
264
+ ? "unknown"
265
+ : !survived || ci === "red" || corrected
266
+ ? "negative"
267
+ : "positive";
268
+ outcomes.push({ episodeId, commit: candidate.sha, survived, ci, amended, corrected, label });
269
+ }
270
+ const prior = priorSignals(ledgerText);
271
+ let appended = 0;
272
+ for (const outcome of outcomes) {
273
+ if (sameSignals(prior.get(outcome.episodeId), outcome))
274
+ continue;
275
+ await appendLedgerEvent({ path: options.ledgerPath }, buildEpisodeOutcomeEvent({ ...outcome, now }));
276
+ appended += 1;
277
+ }
278
+ return { appended, outcomes };
279
+ }
280
+ //# sourceMappingURL=episode-outcomes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"episode-outcomes.js","sourceRoot":"","sources":["../../src/products/episode-outcomes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ export type EpisodeGroupBy = "definition" | "model" | "thinking";
2
+ export interface EpisodeReportOptions {
3
+ since?: string;
4
+ definition?: string;
5
+ model?: string;
6
+ groupBy?: EpisodeGroupBy;
7
+ }
8
+ export interface EpisodeReportRow {
9
+ episode: string;
10
+ started: string;
11
+ definition: string;
12
+ definitionHash: string;
13
+ resolvedModel: string;
14
+ modelSource: string;
15
+ thinkingLevel: string;
16
+ thinkingSource: string;
17
+ inputTokens: number;
18
+ outputTokens: number;
19
+ cacheReadTokens: number;
20
+ reasoningTokens: number;
21
+ cost: number;
22
+ compactions: number;
23
+ turns: number;
24
+ durationMs: number;
25
+ children: number;
26
+ commit: string;
27
+ outcome: "" | "positive" | "negative" | "unknown";
28
+ }
29
+ export interface EpisodeReportGroup {
30
+ value: string;
31
+ count: number;
32
+ inputTokens: number;
33
+ outputTokens: number;
34
+ cacheReadTokens: number;
35
+ reasoningTokens: number;
36
+ cost: number;
37
+ }
38
+ export interface EpisodeReport {
39
+ rows: EpisodeReportRow[];
40
+ groups?: EpisodeReportGroup[];
41
+ groupBy?: EpisodeGroupBy;
42
+ totals?: {
43
+ episodes: number;
44
+ cost: number;
45
+ tokens: number;
46
+ p50EpisodeCost: number;
47
+ p95EpisodeCost: number;
48
+ };
49
+ }
50
+ export declare function reportEpisodes(input: {
51
+ ledgerText: string;
52
+ activityText: string;
53
+ commitByEpisode: ReadonlyMap<string, string>;
54
+ options: EpisodeReportOptions;
55
+ }): EpisodeReport;
56
+ export declare function renderEpisodeReport(report: EpisodeReport, json: boolean): string;
57
+ export declare function commitsFromGitLog(log: string): Map<string, string>;
58
+ export declare function commitsForRepo(cwd: string): Promise<Map<string, string>>;
59
+ //# sourceMappingURL=episode-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"episode-report.d.ts","sourceRoot":"","sources":["../../src/products/episode-report.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,UAAU,CAAC;AACjE,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AACD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,EAAE,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;CACnD;AACD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7G;AAqED,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,OAAO,EAAE,oBAAoB,CAAC;CAC/B,GAAG,aAAa,CA6IhB;AAgBD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAyEhF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAWlE;AACD,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAG9E"}