@zhixuan92/multi-model-agent-core 5.0.3 → 5.1.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 (162) hide show
  1. package/dist/events/plain-log-entry.d.ts +1 -1
  2. package/dist/events/plain-log-entry.d.ts.map +1 -1
  3. package/dist/events/plain-log-entry.js +5 -1
  4. package/dist/events/plain-log-entry.js.map +1 -1
  5. package/dist/events/wire-schema.d.ts +4 -4
  6. package/dist/lifecycle/derive-completion.d.ts +4 -0
  7. package/dist/lifecycle/derive-completion.d.ts.map +1 -1
  8. package/dist/lifecycle/derive-completion.js +14 -1
  9. package/dist/lifecycle/derive-completion.js.map +1 -1
  10. package/dist/lifecycle/git-exec.d.ts +62 -0
  11. package/dist/lifecycle/git-exec.d.ts.map +1 -0
  12. package/dist/lifecycle/git-exec.js +135 -0
  13. package/dist/lifecycle/git-exec.js.map +1 -0
  14. package/dist/lifecycle/goal-builder.d.ts +35 -0
  15. package/dist/lifecycle/goal-builder.d.ts.map +1 -0
  16. package/dist/lifecycle/goal-builder.js +56 -0
  17. package/dist/lifecycle/goal-builder.js.map +1 -0
  18. package/dist/lifecycle/goal-preconditions.d.ts +21 -0
  19. package/dist/lifecycle/goal-preconditions.d.ts.map +1 -0
  20. package/dist/lifecycle/goal-preconditions.js +33 -0
  21. package/dist/lifecycle/goal-preconditions.js.map +1 -0
  22. package/dist/lifecycle/goal-prompts.d.ts +27 -0
  23. package/dist/lifecycle/goal-prompts.d.ts.map +1 -0
  24. package/dist/lifecycle/goal-prompts.js +204 -0
  25. package/dist/lifecycle/goal-prompts.js.map +1 -0
  26. package/dist/lifecycle/goal-report.d.ts +42 -0
  27. package/dist/lifecycle/goal-report.d.ts.map +1 -0
  28. package/dist/lifecycle/goal-report.js +125 -0
  29. package/dist/lifecycle/goal-report.js.map +1 -0
  30. package/dist/lifecycle/handlers/annotate-stage.d.ts.map +1 -1
  31. package/dist/lifecycle/handlers/annotate-stage.js +27 -0
  32. package/dist/lifecycle/handlers/annotate-stage.js.map +1 -1
  33. package/dist/lifecycle/handlers/prepare-execution-context-handler.d.ts +3 -3
  34. package/dist/lifecycle/handlers/prepare-execution-context-handler.d.ts.map +1 -1
  35. package/dist/lifecycle/handlers/prepare-execution-context-handler.js +3 -25
  36. package/dist/lifecycle/handlers/prepare-execution-context-handler.js.map +1 -1
  37. package/dist/lifecycle/handlers/review-fix-stage.d.ts +9 -0
  38. package/dist/lifecycle/handlers/review-fix-stage.d.ts.map +1 -0
  39. package/dist/lifecycle/handlers/review-fix-stage.js +75 -0
  40. package/dist/lifecycle/handlers/review-fix-stage.js.map +1 -0
  41. package/dist/lifecycle/handlers/terminal-handlers.d.ts.map +1 -1
  42. package/dist/lifecycle/handlers/terminal-handlers.js +15 -3
  43. package/dist/lifecycle/handlers/terminal-handlers.js.map +1 -1
  44. package/dist/lifecycle/stage-io.d.ts +0 -23
  45. package/dist/lifecycle/stage-io.d.ts.map +1 -1
  46. package/dist/lifecycle/stage-io.js +0 -11
  47. package/dist/lifecycle/stage-io.js.map +1 -1
  48. package/dist/lifecycle/stage-plan-builder.d.ts.map +1 -1
  49. package/dist/lifecycle/stage-plan-builder.js +42 -49
  50. package/dist/lifecycle/stage-plan-builder.js.map +1 -1
  51. package/dist/lifecycle/stage-plan-types.d.ts +8 -8
  52. package/dist/lifecycle/stage-plan-types.d.ts.map +1 -1
  53. package/dist/lifecycle/stage-plan-types.js.map +1 -1
  54. package/dist/lifecycle/task-executor.d.ts.map +1 -1
  55. package/dist/lifecycle/task-executor.js +46 -1
  56. package/dist/lifecycle/task-executor.js.map +1 -1
  57. package/dist/lifecycle/task-runner.d.ts.map +1 -1
  58. package/dist/lifecycle/task-runner.js +3 -1
  59. package/dist/lifecycle/task-runner.js.map +1 -1
  60. package/dist/lifecycle/write-goal-lock.d.ts +29 -0
  61. package/dist/lifecycle/write-goal-lock.d.ts.map +1 -0
  62. package/dist/lifecycle/write-goal-lock.js +70 -0
  63. package/dist/lifecycle/write-goal-lock.js.map +1 -0
  64. package/dist/providers/claude-session.d.ts.map +1 -1
  65. package/dist/providers/claude-session.js +14 -0
  66. package/dist/providers/claude-session.js.map +1 -1
  67. package/dist/research/adapters/arxiv.d.ts.map +1 -1
  68. package/dist/research/adapters/arxiv.js +6 -1
  69. package/dist/research/adapters/arxiv.js.map +1 -1
  70. package/dist/tools/delegate/brief-slot.d.ts +14 -11
  71. package/dist/tools/delegate/brief-slot.d.ts.map +1 -1
  72. package/dist/tools/delegate/brief-slot.js +29 -53
  73. package/dist/tools/delegate/brief-slot.js.map +1 -1
  74. package/dist/tools/delegate/schema.d.ts +0 -4
  75. package/dist/tools/delegate/schema.d.ts.map +1 -1
  76. package/dist/tools/delegate/schema.js +3 -2
  77. package/dist/tools/delegate/schema.js.map +1 -1
  78. package/dist/tools/delegate/tool-config.d.ts.map +1 -1
  79. package/dist/tools/delegate/tool-config.js +20 -17
  80. package/dist/tools/delegate/tool-config.js.map +1 -1
  81. package/dist/tools/execute-plan/brief-slot.d.ts +11 -5
  82. package/dist/tools/execute-plan/brief-slot.d.ts.map +1 -1
  83. package/dist/tools/execute-plan/brief-slot.js +57 -13
  84. package/dist/tools/execute-plan/brief-slot.js.map +1 -1
  85. package/dist/tools/execute-plan/tool-config.d.ts.map +1 -1
  86. package/dist/tools/execute-plan/tool-config.js +18 -67
  87. package/dist/tools/execute-plan/tool-config.js.map +1 -1
  88. package/dist/tools/journal/record/brief-slot.d.ts +9 -6
  89. package/dist/tools/journal/record/brief-slot.d.ts.map +1 -1
  90. package/dist/tools/journal/record/brief-slot.js +18 -14
  91. package/dist/tools/journal/record/brief-slot.js.map +1 -1
  92. package/dist/tools/journal/record/tool-config.d.ts.map +1 -1
  93. package/dist/tools/journal/record/tool-config.js +18 -11
  94. package/dist/tools/journal/record/tool-config.js.map +1 -1
  95. package/dist/tools/retry/brief-slot.d.ts +1 -1
  96. package/dist/tools/retry/brief-slot.d.ts.map +1 -1
  97. package/dist/tools/retry/brief-slot.js +2 -1
  98. package/dist/tools/retry/brief-slot.js.map +1 -1
  99. package/dist/tools/retry/schema.d.ts +0 -1
  100. package/dist/tools/retry/schema.d.ts.map +1 -1
  101. package/dist/tools/retry/schema.js +6 -6
  102. package/dist/tools/retry/schema.js.map +1 -1
  103. package/dist/tools/retry/tool-config.d.ts.map +1 -1
  104. package/dist/tools/retry/tool-config.js +23 -28
  105. package/dist/tools/retry/tool-config.js.map +1 -1
  106. package/dist/types/goal.d.ts +47 -0
  107. package/dist/types/goal.d.ts.map +1 -0
  108. package/dist/types/goal.js +2 -0
  109. package/dist/types/goal.js.map +1 -0
  110. package/dist/types/task-spec.d.ts +11 -0
  111. package/dist/types/task-spec.d.ts.map +1 -1
  112. package/dist/types.d.ts +1 -0
  113. package/dist/types.d.ts.map +1 -1
  114. package/package.json +1 -1
  115. package/dist/lifecycle/diff-tracker.d.ts +0 -88
  116. package/dist/lifecycle/diff-tracker.d.ts.map +0 -1
  117. package/dist/lifecycle/diff-tracker.js +0 -429
  118. package/dist/lifecycle/diff-tracker.js.map +0 -1
  119. package/dist/lifecycle/handlers/compose-commit-message.d.ts +0 -15
  120. package/dist/lifecycle/handlers/compose-commit-message.d.ts.map +0 -1
  121. package/dist/lifecycle/handlers/compose-commit-message.js +0 -227
  122. package/dist/lifecycle/handlers/compose-commit-message.js.map +0 -1
  123. package/dist/lifecycle/handlers/git-commit-handler.d.ts +0 -4
  124. package/dist/lifecycle/handlers/git-commit-handler.d.ts.map +0 -1
  125. package/dist/lifecycle/handlers/git-commit-handler.js +0 -202
  126. package/dist/lifecycle/handlers/git-commit-handler.js.map +0 -1
  127. package/dist/lifecycle/handlers/journal-review-prompt.d.ts +0 -7
  128. package/dist/lifecycle/handlers/journal-review-prompt.d.ts.map +0 -1
  129. package/dist/lifecycle/handlers/journal-review-prompt.js +0 -54
  130. package/dist/lifecycle/handlers/journal-review-prompt.js.map +0 -1
  131. package/dist/lifecycle/handlers/parse-review-report.d.ts +0 -15
  132. package/dist/lifecycle/handlers/parse-review-report.d.ts.map +0 -1
  133. package/dist/lifecycle/handlers/parse-review-report.js +0 -40
  134. package/dist/lifecycle/handlers/parse-review-report.js.map +0 -1
  135. package/dist/lifecycle/handlers/quality-review-prompt.d.ts +0 -7
  136. package/dist/lifecycle/handlers/quality-review-prompt.d.ts.map +0 -1
  137. package/dist/lifecycle/handlers/quality-review-prompt.js +0 -50
  138. package/dist/lifecycle/handlers/quality-review-prompt.js.map +0 -1
  139. package/dist/lifecycle/handlers/review-stage.d.ts +0 -4
  140. package/dist/lifecycle/handlers/review-stage.d.ts.map +0 -1
  141. package/dist/lifecycle/handlers/review-stage.js +0 -277
  142. package/dist/lifecycle/handlers/review-stage.js.map +0 -1
  143. package/dist/lifecycle/handlers/rework-prompt.d.ts +0 -6
  144. package/dist/lifecycle/handlers/rework-prompt.d.ts.map +0 -1
  145. package/dist/lifecycle/handlers/rework-prompt.js +0 -18
  146. package/dist/lifecycle/handlers/rework-prompt.js.map +0 -1
  147. package/dist/lifecycle/handlers/rework-stage.d.ts +0 -4
  148. package/dist/lifecycle/handlers/rework-stage.d.ts.map +0 -1
  149. package/dist/lifecycle/handlers/rework-stage.js +0 -191
  150. package/dist/lifecycle/handlers/rework-stage.js.map +0 -1
  151. package/dist/lifecycle/handlers/spec-review-prompt.d.ts +0 -8
  152. package/dist/lifecycle/handlers/spec-review-prompt.d.ts.map +0 -1
  153. package/dist/lifecycle/handlers/spec-review-prompt.js +0 -47
  154. package/dist/lifecycle/handlers/spec-review-prompt.js.map +0 -1
  155. package/dist/lifecycle/handlers/tier-policy.d.ts +0 -11
  156. package/dist/lifecycle/handlers/tier-policy.d.ts.map +0 -1
  157. package/dist/lifecycle/handlers/tier-policy.js +0 -12
  158. package/dist/lifecycle/handlers/tier-policy.js.map +0 -1
  159. package/dist/lifecycle/repo-commit-lock.d.ts +0 -20
  160. package/dist/lifecycle/repo-commit-lock.d.ts.map +0 -1
  161. package/dist/lifecycle/repo-commit-lock.js +0 -40
  162. package/dist/lifecycle/repo-commit-lock.js.map +0 -1
@@ -1,15 +0,0 @@
1
- import type { LifecycleState } from '../stage-plan-types.js';
2
- /**
3
- * Deterministic commit-message composition per spec Fix A.
4
- *
5
- * Derives a conventional-commit message from:
6
- * - Subject: execute-plan heading or delegate/retry prompt first line
7
- * - Type: inferred from leading verb (feat/fix/chore)
8
- * - Scope: most-common first-segment-after-src/ from filesChanged, omitted if tied or zero
9
- * - (Task N) trailer: execute-plan only, when present in heading
10
- * - Body: worker summary, only when summaryTrustworthy === true
11
- * - Plan footer: execute-plan only
12
- * - Rework annotation: preserved when review.verdict === 'changes_required' and unaddressedFindingIds non-empty
13
- */
14
- export declare function composeCommitMessage(state: LifecycleState, filesChanged: string[], cwd: string): string;
15
- //# sourceMappingURL=compose-commit-message.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compose-commit-message.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/compose-commit-message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,MAAM,EAAE,EACtB,GAAG,EAAE,MAAM,GACV,MAAM,CA4GR"}
@@ -1,227 +0,0 @@
1
- import { currentWork } from '../stage-io.js';
2
- /**
3
- * Deterministic commit-message composition per spec Fix A.
4
- *
5
- * Derives a conventional-commit message from:
6
- * - Subject: execute-plan heading or delegate/retry prompt first line
7
- * - Type: inferred from leading verb (feat/fix/chore)
8
- * - Scope: most-common first-segment-after-src/ from filesChanged, omitted if tied or zero
9
- * - (Task N) trailer: execute-plan only, when present in heading
10
- * - Body: worker summary, only when summaryTrustworthy === true
11
- * - Plan footer: execute-plan only
12
- * - Rework annotation: preserved when review.verdict === 'changes_required' and unaddressedFindingIds non-empty
13
- */
14
- export function composeCommitMessage(state, filesChanged, cwd) {
15
- const work = state.gates ? currentWork(state) : null;
16
- const route = state.route;
17
- const isExecutePlan = route === 'execute-plan';
18
- const task = state.task;
19
- // ─── Step 1: Extract source text (heading or prompt) ───────────────────
20
- let sourceText = '';
21
- let taskNumber = null;
22
- // taskDescriptor is the clean subject source for ANY write route (it carries
23
- // the raw task intent — plan heading for execute-plan, the caller's task text
24
- // for delegate, the learning for journal-record). Falling back to task.prompt
25
- // is wrong for routes whose prompt is a COMPILED prompt led by orientation
26
- // boilerplate (delegate/retry/journal-record), so prefer taskDescriptor first.
27
- if (task?.taskDescriptor) {
28
- sourceText = task.taskDescriptor;
29
- // Extract Task N if present (only execute-plan headings carry it; the
30
- // trailer below is still execute-plan-gated regardless).
31
- const taskMatch = sourceText.match(/Task\s+(\d+)/i);
32
- if (taskMatch) {
33
- taskNumber = taskMatch[1];
34
- }
35
- }
36
- else if (task?.prompt) {
37
- sourceText = task.prompt;
38
- }
39
- // ─── Step 2: Resolve to first usable line ────────────────────────────
40
- const subjectLine = resolveSubjectLine(sourceText);
41
- const isUsingFallback = subjectLine === 'feat: update requested files';
42
- // ─── Early return if using fallback (no scope/trailer recomposition) ──
43
- if (isUsingFallback) {
44
- // Body and annotation are not included in fallback case
45
- return subjectLine;
46
- }
47
- // ─── Step 3: Clean and normalize subject ─────────────────────────────
48
- let cleanSubject = cleanSubjectText(subjectLine);
49
- // ─── Step 4: Infer type from leading verb ────────────────────────────
50
- const type = inferType(cleanSubject);
51
- // ─── Step 5: Derive scope from filesChanged ──────────────────────────
52
- const scope = deriveScope(filesChanged, cwd);
53
- // ─── Step 6: Build subject line (type, scope, subject) ──────────────
54
- let subjectLine_ = scope ? `${type}(${scope}): ${cleanSubject}` : `${type}: ${cleanSubject}`;
55
- // Add (Task N) trailer if execute-plan and present in heading
56
- if (isExecutePlan && taskNumber) {
57
- subjectLine_ += ` (Task ${taskNumber})`;
58
- }
59
- // Trim to 72 chars
60
- if (subjectLine_.length > 72) {
61
- subjectLine_ = subjectLine_.slice(0, 72);
62
- }
63
- // ─── Step 7: Build body (summary only when trustworthy) ──────────────
64
- let body = '';
65
- if (work && work.summary && work.summaryTrustworthy === true) {
66
- body = work.summary;
67
- }
68
- // ─── Step 8: Build footer (Plan: basename for execute-plan only) ────
69
- let footer = '';
70
- if (isExecutePlan && task?.planBasename) {
71
- footer = `Plan: ${task.planBasename}`;
72
- }
73
- // ─── Step 9: Rework annotation (preserve when applicable) ────────────
74
- let annotation = '';
75
- const reviewGate = state.gates?.['review'];
76
- const reviewVerdict = reviewGate?.payload?.verdict;
77
- const unaddressed = work?.unaddressedFindingIds ?? [];
78
- if (reviewVerdict === 'changes_required' && unaddressed.length > 0) {
79
- annotation = `Rework left ${unaddressed.length} findings unaddressed: ${unaddressed.join(', ')}.`;
80
- }
81
- // ─── Step 10: Assemble message ──────────────────────────────────────
82
- let message = subjectLine_;
83
- if (body) {
84
- message += `\n\n${body}`;
85
- }
86
- if (annotation) {
87
- message += `\n\n${annotation}`;
88
- }
89
- if (footer) {
90
- message += `\n\n${footer}`;
91
- }
92
- return message;
93
- }
94
- /**
95
- * Resolve to first usable line.
96
- * Usable = after stripping Task N: / # / ## / >, contains [A-Za-z].
97
- * Falls through: source → first usable after skipping empty/quote → "feat: update requested files".
98
- */
99
- function resolveSubjectLine(sourceText) {
100
- if (!sourceText) {
101
- return 'feat: update requested files';
102
- }
103
- const lines = sourceText.split('\n');
104
- for (let i = 0; i < lines.length; i++) {
105
- const line = lines[i].trim();
106
- // Skip empty
107
- if (!line)
108
- continue;
109
- // Check if this line is usable
110
- const usable = isUsable(line);
111
- if (usable) {
112
- return line;
113
- }
114
- }
115
- // No usable line found
116
- return 'feat: update requested files';
117
- }
118
- /**
119
- * A line is usable if, after stripping Task N: / # / ## / >, it contains [A-Za-z].
120
- */
121
- function isUsable(line) {
122
- let cleaned = line;
123
- // Strip leading markdown/task markers
124
- cleaned = cleaned.replace(/^#+\s*/, ''); // Strip # and ##
125
- cleaned = cleaned.replace(/^>\s*/, ''); // Strip >
126
- cleaned = cleaned.replace(/^Task\s+\d+:\s*/i, ''); // Strip Task N:
127
- cleaned = cleaned.trim();
128
- // Check for at least one letter
129
- return /[A-Za-z]/.test(cleaned);
130
- }
131
- /**
132
- * Clean subject text:
133
- * - Strip Task N: / # / ## / > markers
134
- * - Lowercase first letter
135
- * - Return trimmed result
136
- */
137
- function cleanSubjectText(line) {
138
- let cleaned = line;
139
- // Strip leading markers
140
- cleaned = cleaned.replace(/^#+\s*/, '');
141
- cleaned = cleaned.replace(/^>\s*/, '');
142
- cleaned = cleaned.replace(/^Task\s+\d+:\s*/i, '');
143
- cleaned = cleaned.trim();
144
- // Lowercase first letter
145
- if (cleaned.length > 0) {
146
- cleaned = cleaned[0].toLowerCase() + cleaned.slice(1);
147
- }
148
- return cleaned;
149
- }
150
- /**
151
- * Infer type from leading verb.
152
- * - add/implement/create → feat
153
- * - fix/correct/repair → fix
154
- * - remove/delete/drop → chore
155
- * - else → feat
156
- */
157
- function inferType(subject) {
158
- const firstWord = subject.split(/\s+/)[0].toLowerCase();
159
- if (/^(add|implement|create)/.test(firstWord)) {
160
- return 'feat';
161
- }
162
- if (/^(fix|correct|repair)/.test(firstWord)) {
163
- return 'fix';
164
- }
165
- if (/^(remove|delete|drop)/.test(firstWord)) {
166
- return 'chore';
167
- }
168
- return 'feat';
169
- }
170
- /**
171
- * Derive scope from filesChanged.
172
- * - Consider only paths that contain a "src/" directory segment
173
- * - For each match, take first segment after src/ (e.g., packages/core/src/lifecycle/… → lifecycle)
174
- * - Pick most common segment
175
- * - Omit scope if zero matches, or if top scopes are tied
176
- * - Return scope string or empty string
177
- */
178
- function deriveScope(filesChanged, cwd) {
179
- // Find all segments (first after src/)
180
- const segments = [];
181
- for (const file of filesChanged) {
182
- // Resolve to relative path if absolute
183
- const rel = file.startsWith('/') ? file : `${cwd}/${file}`;
184
- // Check if path matches */src/*
185
- if (!rel.includes('/src/')) {
186
- continue;
187
- }
188
- // Extract segment: text after /src/ and before next /
189
- const srcIdx = rel.indexOf('/src/');
190
- const afterSrc = rel.slice(srcIdx + 5); // +5 to skip '/src/'
191
- const segment = afterSrc.split('/')[0];
192
- if (segment) {
193
- segments.push(segment);
194
- }
195
- }
196
- // No matching paths
197
- if (segments.length === 0) {
198
- return '';
199
- }
200
- // Count occurrences
201
- const counts = new Map();
202
- for (const seg of segments) {
203
- counts.set(seg, (counts.get(seg) ?? 0) + 1);
204
- }
205
- // Find max count
206
- let maxCount = 0;
207
- for (const count of counts.values()) {
208
- if (count > maxCount) {
209
- maxCount = count;
210
- }
211
- }
212
- // Count how many have max count (check for tie)
213
- let tiedCount = 0;
214
- let topSegment = '';
215
- for (const [seg, count] of counts.entries()) {
216
- if (count === maxCount) {
217
- tiedCount++;
218
- topSegment = seg;
219
- }
220
- }
221
- // Omit scope if tied
222
- if (tiedCount > 1) {
223
- return '';
224
- }
225
- return topSegment;
226
- }
227
- //# sourceMappingURL=compose-commit-message.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compose-commit-message.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/compose-commit-message.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { LifecycleState } from '../stage-plan-types.js';
2
- import type { StageGate, CommitPayload } from '../stage-io.js';
3
- export declare function commitHandler(state: LifecycleState): Promise<StageGate<CommitPayload>>;
4
- //# sourceMappingURL=git-commit-handler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-commit-handler.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/git-commit-handler.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AA8G/D,wBAAsB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CA4F5F"}
@@ -1,202 +0,0 @@
1
- // Stage I/O standardization — commitHandler emits StageGate<CommitPayload>.
2
- //
3
- // Gate logic per the spec:
4
- // no_repo, no_diff, validation_failed, validation_stale, hook_failed
5
- //
6
- // The spec (Step 13) supersedes the v4.4.x behavior:
7
- // - Returns StageGate<CommitPayload> (tagged union { committed | no_op })
8
- // - Detached HEAD maps to kind: 'no_op', reason: 'no_repo'
9
- // - Commit message includes 'rework left N findings unaddressed' annotation
10
- // when applicable
11
- // - Does NOT mutate state.lastRunResult or state.commits (those are retired from active use).
12
- // - Downstream consumers (annotate-parser, annotate-prompts, seal handler) read state.gates.commit.payload.kind
13
- // directly via deriveCompletion() — the legacy state.commits[] mirror is dead.
14
- import { execFile } from 'node:child_process';
15
- import { promisify } from 'node:util';
16
- import { isAbsolute, join, relative } from 'node:path';
17
- import { existsSync } from 'node:fs';
18
- import { withRepoCommitLock } from '../repo-commit-lock.js';
19
- import { resolveGitToplevel } from '../git-toplevel.js';
20
- import { composeCommitMessage } from './compose-commit-message.js';
21
- const execFileP = promisify(execFile);
22
- /**
23
- * The files THIS worker actually wrote, resolved to absolute paths inside cwd.
24
- *
25
- * Source is the harness-tracked tool writes (lastRunResult.filesWritten — unioned
26
- * across implement+rework by replaceLastRunResultPreservingTrackers), NOT a
27
- * repo-wide `git diff`. Under concurrency (multiple workers in the same repo at
28
- * once) a git diff would see every worker's changes; sourcing from this worker's
29
- * own tracked writes guarantees we commit only its own work. Paths the worker
30
- * passed that fall outside cwd or never landed on disk (e.g. a hallucinated
31
- * `/workspace/x` or `/x`) are dropped.
32
- */
33
- function workerWrittenFiles(state, cwd) {
34
- const raw = (state.lastRunResult?.filesWritten) ?? [];
35
- const seen = new Set();
36
- const out = [];
37
- for (const w of raw) {
38
- if (!w || typeof w !== 'string')
39
- continue;
40
- const abs = isAbsolute(w) ? w : join(cwd, w);
41
- const rel = relative(cwd, abs);
42
- if (rel === '' || rel.startsWith('..') || isAbsolute(rel))
43
- continue; // outside cwd
44
- if (!existsSync(abs))
45
- continue; // bogus path or never written
46
- if (seen.has(abs))
47
- continue;
48
- seen.add(abs);
49
- out.push(abs);
50
- }
51
- return out;
52
- }
53
- async function gitC(cwd, args) {
54
- try {
55
- const { stdout, stderr } = await execFileP('git', ['-C', cwd, ...args], { windowsHide: true });
56
- return { stdout, stderr, code: 0 };
57
- }
58
- catch (err) {
59
- const e = err;
60
- return {
61
- stdout: e.stdout ?? '',
62
- stderr: e.stderr ?? e.message ?? String(err),
63
- code: typeof e.code === 'number' ? e.code : 1,
64
- };
65
- }
66
- }
67
- async function isInsideWorkTree(cwd) {
68
- const r = await gitC(cwd, ['rev-parse', '--is-inside-work-tree']);
69
- return r.code === 0 && r.stdout.trim() === 'true';
70
- }
71
- async function currentHead(cwd) {
72
- const r = await gitC(cwd, ['rev-parse', 'HEAD']);
73
- return r.code === 0 ? r.stdout.trim() : null;
74
- }
75
- // ─── Payload helpers ─────────────────────────────────────────────────────────
76
- function advanceNoOp(reason, t0, detail) {
77
- return {
78
- outcome: 'advance',
79
- payload: { kind: 'no_op', reason, detail },
80
- telemetry: {
81
- stageLabel: 'committing',
82
- durationMs: Date.now() - t0,
83
- costUSD: 0,
84
- turnsUsed: 0,
85
- stopReason: 'normal',
86
- },
87
- };
88
- }
89
- function haltCommit(comment, t0) {
90
- return {
91
- outcome: 'halt',
92
- comment,
93
- payload: { kind: 'no_op', reason: 'no_diff' }, // placeholder; halt path
94
- telemetry: {
95
- stageLabel: 'committing',
96
- durationMs: Date.now() - t0,
97
- costUSD: 0,
98
- turnsUsed: 0,
99
- stopReason: 'transport_error',
100
- },
101
- };
102
- }
103
- function isHookFailure(err) {
104
- if (err instanceof Error) {
105
- return /pre-commit hook|hook failed|hook rejected/i.test(err.message);
106
- }
107
- // gitC result shape: { code, stdout, stderr }
108
- if (typeof err === 'object' && err !== null) {
109
- const r = err;
110
- const text = `${r.stderr ?? ''} ${r.stdout ?? ''}`;
111
- return /pre-commit hook|hook failed|hook rejected|hook script|\.git\/hooks\//i.test(text);
112
- }
113
- return false;
114
- }
115
- // ─── Main handler ─────────────────────────────────────────────────────────────
116
- export async function commitHandler(state) {
117
- const t0 = Date.now();
118
- const cwd = state.cwd ?? state.executionContext?.cwd;
119
- if (!cwd) {
120
- return advanceNoOp('no_repo', t0, 'no cwd available');
121
- }
122
- // Gate 1: no_repo
123
- if (!await isInsideWorkTree(cwd)) {
124
- return advanceNoOp('no_repo', t0);
125
- }
126
- // Gate 2: detached HEAD / no branch → no_repo
127
- const head = await currentHead(cwd);
128
- if (!head) {
129
- return advanceNoOp('no_repo', t0, 'detached HEAD or no branch');
130
- }
131
- // Concurrency-safe attribution: commit ONLY the files THIS worker wrote,
132
- // resolved to cwd from the harness-tracked tool writes. A repo-wide git diff
133
- // would, under concurrent same-repo tasks, sweep in other workers' changes.
134
- const ownFiles = workerWrittenFiles(state, cwd);
135
- if (ownFiles.length === 0) {
136
- return advanceNoOp('no_diff', t0);
137
- }
138
- const filesChanged = ownFiles;
139
- // Per-repo commit mutex: serialize the staging+commit section against any
140
- // other worker committing to the SAME repo so concurrent same-repo tasks
141
- // never collide on `.git/index.lock`. Distinct repos run concurrently.
142
- // Read-only probes above (worktree check, HEAD) run outside the lock.
143
- const repoKey = (await resolveGitToplevel(cwd)) ?? cwd;
144
- return withRepoCommitLock(repoKey, async () => {
145
- // Stage ONLY this worker's files.
146
- const addR = await gitC(cwd, ['add', '--', ...ownFiles]);
147
- if (addR.code !== 0) {
148
- return advanceNoOp('hook_failed', t0, addR.stderr || 'git add failed');
149
- }
150
- // Confirm THESE paths have staged changes (scoped — ignores anything a
151
- // concurrent worker may have staged). Exits 0 when nothing staged for them.
152
- const diffR = await gitC(cwd, ['diff', '--cached', '--quiet', '--', ...ownFiles]);
153
- if (diffR.code === 0) {
154
- return advanceNoOp('no_diff', t0);
155
- }
156
- const commitMessage = composeCommitMessage(state, filesChanged, cwd);
157
- try {
158
- // Pathspec-scoped commit: commits ONLY ownFiles, even if a concurrent
159
- // worker has other paths staged in the same index.
160
- const commitR = await gitC(cwd, ['commit', '-m', commitMessage, '--', ...ownFiles]);
161
- if (commitR.code !== 0) {
162
- // Hook failure is the dominant case: we've already validated repo,
163
- // diff, and HEAD; if `git commit` still fails, the most likely cause
164
- // is a pre-commit hook (or other policy hook) rejecting the commit.
165
- // We treat non-zero exit as hook_failed unless the stderr indicates
166
- // something structurally worse (corrupted index, fs errors).
167
- const stderr = commitR.stderr ?? '';
168
- const looksStructural = /index|object|corrupt|permission denied|read-only/i.test(stderr);
169
- if (!looksStructural) {
170
- return advanceNoOp('hook_failed', t0, stderr || 'commit rejected (likely pre-commit hook)');
171
- }
172
- return haltCommit(`commit_failed: ${stderr || 'unknown error'}`, t0);
173
- }
174
- const sha = (await currentHead(cwd)) ?? '';
175
- const authoredAt = new Date().toISOString();
176
- return {
177
- outcome: 'advance',
178
- payload: {
179
- kind: 'committed',
180
- commitSha: sha,
181
- commitMessage,
182
- filesChanged,
183
- authoredAt,
184
- },
185
- telemetry: {
186
- stageLabel: 'committing',
187
- durationMs: Date.now() - t0,
188
- costUSD: 0,
189
- turnsUsed: 0,
190
- stopReason: 'normal',
191
- },
192
- };
193
- }
194
- catch (err) {
195
- if (isHookFailure(err)) {
196
- return advanceNoOp('hook_failed', t0, err instanceof Error ? err.message : String(err));
197
- }
198
- return haltCommit(`commit_failed: ${err instanceof Error ? err.message : String(err)}`, t0);
199
- }
200
- });
201
- }
202
- //# sourceMappingURL=git-commit-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-commit-handler.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/git-commit-handler.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- export declare function journalReviewPrompt(ctx: {
2
- brief: string;
3
- workerSummary: string;
4
- filesChanged: string[];
5
- diff?: string;
6
- }): string;
7
- //# sourceMappingURL=journal-review-prompt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"journal-review-prompt.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/journal-review-prompt.ts"],"names":[],"mappings":"AA2BA,wBAAgB,mBAAmB,CAAC,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CA2BhI"}
@@ -1,54 +0,0 @@
1
- // Dedicated cross-agent review for the journal-record write route. Its
2
- // "diff" is markdown ADR nodes under .mmagent/journal/, NOT source code, so
3
- // the generic spec/quality code-review prompts mis-fit (they can produce a
4
- // degenerate `changes_required` with no findings). This validates the NODE on
5
- // its own terms. Output format is identical to the quality reviewer so
6
- // parse-review-report.ts parses it unchanged.
7
- const OUTPUT_FORMAT = `Output format (mandatory):
8
-
9
- ## Verdict
10
- approved | changes_required
11
-
12
- ## Finding N: <one-line claim for this finding>
13
- - Severity: critical | high | medium | low
14
- - Category: frontmatter | edges | schema | confinement | dedup | content
15
- - Evidence: <quote the offending frontmatter / line>
16
- - Suggestion: <specific, actionable fix>
17
-
18
- ## Outcome
19
- found | clean
20
-
21
- Rules:
22
- - "approved" when the node is well-formed and faithfully records the learning. Minor wording is NOT a blocker.
23
- - "changes_required" ONLY for real schema/correctness problems below — and when you do, you MUST enumerate at least one ## Finding. Never return changes_required with no findings.
24
- - If approved: write "## Verdict\\napproved", omit the ## Finding sections, then "## Outcome\\nclean".
25
- - Read-only investigation; do NOT use editor tools.`;
26
- export function journalReviewPrompt(ctx) {
27
- const diffContent = ctx.diff && ctx.diff.trim() ? ctx.diff : '(no diff available)';
28
- return `You are the journal reviewer. You are validating a change to a project's
29
- learnings journal — markdown ADR "node" files under \`.mmagent/journal/\`, NOT
30
- source code. Judge the node on its own terms; do not apply code-quality criteria.
31
-
32
- Brief: ${ctx.brief}
33
-
34
- Worker said: ${ctx.workerSummary}
35
-
36
- Files changed: ${ctx.filesChanged.join(', ') || '(none)'}
37
-
38
- Diff (authoritative — what actually changed on disk):
39
- ${diffContent}
40
-
41
- Validate the node(s):
42
- 1. FRONTMATTER well-formed: id (zero-padded 4-digit string, e.g. "0007"), title, status ∈ {adopted, dropped, inconclusive, superseded}, tags (lowercase kebab-case), date (ISO YYYY-MM-DD), links (array of {type, target}), supersededBy (an id or null).
43
- 2. EDGES use only: supersedes, refines, relates, depends-on, contradicts, parent.
44
- 3. CONTENT: the body has "## Context" and "## Consequences" sections, coherent and faithful to the learning in the brief.
45
- 4. CONFINEMENT: all changed paths are under \`.mmagent/journal/\` (nodes/, index.md, log.md, schema.md). Flag any file written outside it.
46
- 5. DEDUP integrity: on a supersede, the superseded node's status is "superseded" with supersededBy set; index.md gained the row and log.md gained exactly one line.
47
-
48
- Guardrails:
49
- - the diff above is ground truth — do NOT claim files are missing/untracked
50
- - this is markdown/docs, not code — judge the node's correctness, not code style
51
-
52
- ${OUTPUT_FORMAT}`;
53
- }
54
- //# sourceMappingURL=journal-review-prompt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"journal-review-prompt.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/journal-review-prompt.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,4EAA4E;AAC5E,2EAA2E;AAC3E,8EAA8E;AAC9E,uEAAuE;AACvE,8CAA8C;AAE9C,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;oDAkB8B,CAAC;AAErD,MAAM,UAAU,mBAAmB,CAAC,GAAoF;IACtH,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC;IACnF,OAAO;;;;SAIA,GAAG,CAAC,KAAK;;eAEH,GAAG,CAAC,aAAa;;iBAEf,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ;;;EAGtD,WAAW;;;;;;;;;;;;;EAaX,aAAa,EAAE,CAAC;AAClB,CAAC"}
@@ -1,15 +0,0 @@
1
- import type { FindingsOutcomeKind } from '../../reporting/findings-outcome.js';
2
- export interface ParsedReviewReport {
3
- verdict: 'approved' | 'changes_required';
4
- findings: Array<{
5
- severity: 'critical' | 'high' | 'medium' | 'low';
6
- category: string;
7
- claim: string;
8
- evidence?: string;
9
- suggestion?: string;
10
- }>;
11
- }
12
- type WarnSink = (event: string, data: Record<string, unknown>) => void;
13
- export declare function parseReviewReport(text: string, legalOutcomes?: readonly FindingsOutcomeKind[], warnSink?: WarnSink): ParsedReviewReport;
14
- export {};
15
- //# sourceMappingURL=parse-review-report.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-review-report.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/parse-review-report.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,UAAU,GAAG,kBAAkB,CAAC;IACzC,QAAQ,EAAE,KAAK,CAAC;QACd,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QACjD,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAKD,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;AAEvE,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,aAAa,GAAE,SAAS,mBAAmB,EAAyC,EACpF,QAAQ,CAAC,EAAE,QAAQ,GAClB,kBAAkB,CAsCpB"}
@@ -1,40 +0,0 @@
1
- import { parseFindings } from '../findings-parser.js';
2
- const VERDICT_HEADER = /^##\s*verdict\s*$/im;
3
- const FINDINGS_HEADER = /^##\s*findings\s*$/im;
4
- export function parseReviewReport(text, legalOutcomes = ['found', 'clean', 'not_applicable'], warnSink) {
5
- const safe = (text ?? '').toString();
6
- const verdictMatch = safe.match(VERDICT_HEADER);
7
- const findingsMatch = safe.match(FINDINGS_HEADER);
8
- let verdict = 'changes_required';
9
- if (verdictMatch) {
10
- const after = safe.slice(verdictMatch.index + verdictMatch[0].length);
11
- const firstLine = after.split('\n').map(s => s.trim()).find(s => s.length > 0) ?? '';
12
- if (/approved/i.test(firstLine) && !/changes/i.test(firstLine)) {
13
- verdict = 'approved';
14
- }
15
- }
16
- else if (/\bapproved\b/i.test(safe) && !/changes[\s_-]?required/i.test(safe)) {
17
- verdict = 'approved';
18
- }
19
- // Delegate finding extraction to the canonical parseFindings parser.
20
- // parseFindings is imported from lifecycle/findings-parser and handles the
21
- // ## Finding N: block format with severity/category/claim/evidence/suggestion.
22
- const findingsSection = findingsMatch
23
- ? safe.slice(findingsMatch.index + findingsMatch[0].length)
24
- : '';
25
- const result = parseFindings(findingsSection, 'reviewer', legalOutcomes, warnSink);
26
- const findings = result.findings;
27
- // Severity-gated verdict override. The reviewer prompt is explicit that
28
- // "approved" means ship-able and that medium/low findings are nice-to-fix,
29
- // not blockers (see lifecycle/handlers/quality-review-prompt.ts:23-24). A blanket
30
- // "any finding flips approved → changes_required" rule contradicted that
31
- // contract and triggered a full rework cycle for a single low-severity
32
- // nit. Only critical/high findings are blockers, matching the ladder the
33
- // LLM was instructed to use.
34
- if (verdict === 'approved'
35
- && findings.some(f => f.severity === 'critical' || f.severity === 'high')) {
36
- verdict = 'changes_required';
37
- }
38
- return { verdict, findings };
39
- }
40
- //# sourceMappingURL=parse-review-report.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-review-report.js","sourceRoot":"","sources":["../../../src/lifecycle/handlers/parse-review-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AActD,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAC7C,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAI/C,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,gBAAgD,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,CAAC,EACpF,QAAmB;IAEnB,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAElD,IAAI,OAAO,GAAoC,kBAAkB,CAAC;IAClE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACrF,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,OAAO,GAAG,UAAU,CAAC;QACvB,CAAC;IACH,CAAC;SAAM,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/E,OAAO,GAAG,UAAU,CAAC;IACvB,CAAC;IAED,qEAAqE;IACrE,2EAA2E;IAC3E,+EAA+E;IAC/E,MAAM,eAAe,GAAG,aAAa;QACnC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5D,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG,aAAa,CAAC,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEjC,wEAAwE;IACxE,2EAA2E;IAC3E,kFAAkF;IAClF,yEAAyE;IACzE,uEAAuE;IACvE,yEAAyE;IACzE,6BAA6B;IAC7B,IAAI,OAAO,KAAK,UAAU;WACnB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,EAAE,CAAC;QAC9E,OAAO,GAAG,kBAAkB,CAAC;IAC/B,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC"}
@@ -1,7 +0,0 @@
1
- export declare function qualityReviewPrompt(ctx: {
2
- brief: string;
3
- workerSummary: string;
4
- filesChanged: string[];
5
- diff?: string;
6
- }): string;
7
- //# sourceMappingURL=quality-review-prompt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quality-review-prompt.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/handlers/quality-review-prompt.ts"],"names":[],"mappings":"AA+BA,wBAAgB,mBAAmB,CAAC,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAkBhI"}