@zhixuan92/multi-model-agent-core 5.0.2 → 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 (280) hide show
  1. package/README.md +2 -2
  2. package/dist/bounded-execution/cost-compute.js +2 -0
  3. package/dist/bounded-execution/cost-compute.js.map +1 -1
  4. package/dist/bounded-execution/file-artifact-check.js +1 -1
  5. package/dist/bounded-execution/file-artifact-check.js.map +1 -1
  6. package/dist/bounded-execution/progress-events-subscriber.d.ts.map +1 -1
  7. package/dist/bounded-execution/progress-events-subscriber.js +1 -0
  8. package/dist/bounded-execution/progress-events-subscriber.js.map +1 -1
  9. package/dist/bounded-execution/scope-match.d.ts.map +1 -1
  10. package/dist/bounded-execution/scope-match.js +6 -9
  11. package/dist/bounded-execution/scope-match.js.map +1 -1
  12. package/dist/config/load.js +3 -3
  13. package/dist/config/load.js.map +1 -1
  14. package/dist/error-codes.d.ts +1 -0
  15. package/dist/error-codes.d.ts.map +1 -1
  16. package/dist/error-codes.js +12 -0
  17. package/dist/error-codes.js.map +1 -1
  18. package/dist/events/log-writer.d.ts +1 -0
  19. package/dist/events/log-writer.d.ts.map +1 -1
  20. package/dist/events/log-writer.js +2 -0
  21. package/dist/events/log-writer.js.map +1 -1
  22. package/dist/events/plain-log-entry.d.ts +1 -1
  23. package/dist/events/plain-log-entry.d.ts.map +1 -1
  24. package/dist/events/plain-log-entry.js +5 -1
  25. package/dist/events/plain-log-entry.js.map +1 -1
  26. package/dist/events/task-envelope.d.ts +1 -1
  27. package/dist/events/task-envelope.d.ts.map +1 -1
  28. package/dist/events/task-envelope.js +1 -1
  29. package/dist/events/task-envelope.js.map +1 -1
  30. package/dist/events/wire-schema.d.ts +4 -4
  31. package/dist/events/wire-schema.d.ts.map +1 -1
  32. package/dist/events/wire-schema.js +5 -0
  33. package/dist/events/wire-schema.js.map +1 -1
  34. package/dist/identity/claude-oauth.d.ts +1 -4
  35. package/dist/identity/claude-oauth.d.ts.map +1 -1
  36. package/dist/identity/claude-oauth.js +3 -3
  37. package/dist/identity/claude-oauth.js.map +1 -1
  38. package/dist/index.d.ts +1 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/journal/types.d.ts +11 -0
  41. package/dist/journal/types.d.ts.map +1 -1
  42. package/dist/journal/types.js.map +1 -1
  43. package/dist/lifecycle/derive-completion.d.ts +4 -0
  44. package/dist/lifecycle/derive-completion.d.ts.map +1 -1
  45. package/dist/lifecycle/derive-completion.js +14 -1
  46. package/dist/lifecycle/derive-completion.js.map +1 -1
  47. package/dist/lifecycle/git-exec.d.ts +62 -0
  48. package/dist/lifecycle/git-exec.d.ts.map +1 -0
  49. package/dist/lifecycle/git-exec.js +135 -0
  50. package/dist/lifecycle/git-exec.js.map +1 -0
  51. package/dist/lifecycle/git-toplevel.d.ts +1 -6
  52. package/dist/lifecycle/git-toplevel.d.ts.map +1 -1
  53. package/dist/lifecycle/git-toplevel.js +17 -38
  54. package/dist/lifecycle/git-toplevel.js.map +1 -1
  55. package/dist/lifecycle/goal-builder.d.ts +35 -0
  56. package/dist/lifecycle/goal-builder.d.ts.map +1 -0
  57. package/dist/lifecycle/goal-builder.js +56 -0
  58. package/dist/lifecycle/goal-builder.js.map +1 -0
  59. package/dist/lifecycle/goal-preconditions.d.ts +21 -0
  60. package/dist/lifecycle/goal-preconditions.d.ts.map +1 -0
  61. package/dist/lifecycle/goal-preconditions.js +33 -0
  62. package/dist/lifecycle/goal-preconditions.js.map +1 -0
  63. package/dist/lifecycle/goal-prompts.d.ts +27 -0
  64. package/dist/lifecycle/goal-prompts.d.ts.map +1 -0
  65. package/dist/lifecycle/goal-prompts.js +204 -0
  66. package/dist/lifecycle/goal-prompts.js.map +1 -0
  67. package/dist/lifecycle/goal-report.d.ts +42 -0
  68. package/dist/lifecycle/goal-report.d.ts.map +1 -0
  69. package/dist/lifecycle/goal-report.js +125 -0
  70. package/dist/lifecycle/goal-report.js.map +1 -0
  71. package/dist/lifecycle/handlers/annotate-stage.d.ts.map +1 -1
  72. package/dist/lifecycle/handlers/annotate-stage.js +29 -0
  73. package/dist/lifecycle/handlers/annotate-stage.js.map +1 -1
  74. package/dist/lifecycle/handlers/implement-stage.d.ts +3 -3
  75. package/dist/lifecycle/handlers/implement-stage.d.ts.map +1 -1
  76. package/dist/lifecycle/handlers/implement-stage.js +50 -3
  77. package/dist/lifecycle/handlers/implement-stage.js.map +1 -1
  78. package/dist/lifecycle/handlers/prepare-execution-context-handler.d.ts +3 -3
  79. package/dist/lifecycle/handlers/prepare-execution-context-handler.d.ts.map +1 -1
  80. package/dist/lifecycle/handlers/prepare-execution-context-handler.js +3 -25
  81. package/dist/lifecycle/handlers/prepare-execution-context-handler.js.map +1 -1
  82. package/dist/lifecycle/handlers/review-fix-stage.d.ts +9 -0
  83. package/dist/lifecycle/handlers/review-fix-stage.d.ts.map +1 -0
  84. package/dist/lifecycle/handlers/review-fix-stage.js +75 -0
  85. package/dist/lifecycle/handlers/review-fix-stage.js.map +1 -0
  86. package/dist/lifecycle/handlers/terminal-handlers.d.ts.map +1 -1
  87. package/dist/lifecycle/handlers/terminal-handlers.js +69 -3
  88. package/dist/lifecycle/handlers/terminal-handlers.js.map +1 -1
  89. package/dist/lifecycle/lifecycle-driver.d.ts.map +1 -1
  90. package/dist/lifecycle/lifecycle-driver.js +16 -0
  91. package/dist/lifecycle/lifecycle-driver.js.map +1 -1
  92. package/dist/lifecycle/normalize-output-targets.d.ts.map +1 -1
  93. package/dist/lifecycle/normalize-output-targets.js +2 -4
  94. package/dist/lifecycle/normalize-output-targets.js.map +1 -1
  95. package/dist/lifecycle/perform-implementation.d.ts +1 -11
  96. package/dist/lifecycle/perform-implementation.d.ts.map +1 -1
  97. package/dist/lifecycle/perform-implementation.js +7 -10
  98. package/dist/lifecycle/perform-implementation.js.map +1 -1
  99. package/dist/lifecycle/stage-io.d.ts +0 -23
  100. package/dist/lifecycle/stage-io.d.ts.map +1 -1
  101. package/dist/lifecycle/stage-io.js +0 -11
  102. package/dist/lifecycle/stage-io.js.map +1 -1
  103. package/dist/lifecycle/stage-plan-builder.d.ts.map +1 -1
  104. package/dist/lifecycle/stage-plan-builder.js +42 -49
  105. package/dist/lifecycle/stage-plan-builder.js.map +1 -1
  106. package/dist/lifecycle/stage-plan-types.d.ts +8 -8
  107. package/dist/lifecycle/stage-plan-types.d.ts.map +1 -1
  108. package/dist/lifecycle/stage-plan-types.js.map +1 -1
  109. package/dist/lifecycle/stage-progression.d.ts +1 -0
  110. package/dist/lifecycle/stage-progression.d.ts.map +1 -1
  111. package/dist/lifecycle/stage-progression.js +13 -0
  112. package/dist/lifecycle/stage-progression.js.map +1 -1
  113. package/dist/lifecycle/task-executor.d.ts +1 -8
  114. package/dist/lifecycle/task-executor.d.ts.map +1 -1
  115. package/dist/lifecycle/task-executor.js +69 -5
  116. package/dist/lifecycle/task-executor.js.map +1 -1
  117. package/dist/lifecycle/task-runner.d.ts.map +1 -1
  118. package/dist/lifecycle/task-runner.js +3 -1
  119. package/dist/lifecycle/task-runner.js.map +1 -1
  120. package/dist/lifecycle/worker-output-contract.d.ts.map +1 -1
  121. package/dist/lifecycle/worker-output-contract.js +3 -1
  122. package/dist/lifecycle/worker-output-contract.js.map +1 -1
  123. package/dist/lifecycle/write-goal-lock.d.ts +29 -0
  124. package/dist/lifecycle/write-goal-lock.d.ts.map +1 -0
  125. package/dist/lifecycle/write-goal-lock.js +70 -0
  126. package/dist/lifecycle/write-goal-lock.js.map +1 -0
  127. package/dist/providers/claude-session.d.ts +0 -2
  128. package/dist/providers/claude-session.d.ts.map +1 -1
  129. package/dist/providers/claude-session.js +16 -2
  130. package/dist/providers/claude-session.js.map +1 -1
  131. package/dist/providers/claude.d.ts.map +1 -1
  132. package/dist/providers/codex-cli-session.d.ts.map +1 -1
  133. package/dist/providers/codex-cli-session.js.map +1 -1
  134. package/dist/providers/codex.d.ts.map +1 -1
  135. package/dist/providers/normalize-claude.js.map +1 -1
  136. package/dist/reporting/headline-composer.d.ts +11 -0
  137. package/dist/reporting/headline-composer.d.ts.map +1 -1
  138. package/dist/reporting/headline-composer.js +9 -1
  139. package/dist/reporting/headline-composer.js.map +1 -1
  140. package/dist/reporting/report-parser-slots/investigate-report.d.ts.map +1 -1
  141. package/dist/reporting/report-parser-slots/investigate-report.js +1 -0
  142. package/dist/reporting/report-parser-slots/investigate-report.js.map +1 -1
  143. package/dist/reporting/structured-report-parser.d.ts +5 -0
  144. package/dist/reporting/structured-report-parser.d.ts.map +1 -1
  145. package/dist/reporting/structured-report-parser.js +7 -1
  146. package/dist/reporting/structured-report-parser.js.map +1 -1
  147. package/dist/research/adapters/arxiv.d.ts.map +1 -1
  148. package/dist/research/adapters/arxiv.js +12 -7
  149. package/dist/research/adapters/arxiv.js.map +1 -1
  150. package/dist/research/adapters/github-search.d.ts.map +1 -1
  151. package/dist/research/adapters/github-search.js +10 -9
  152. package/dist/research/adapters/github-search.js.map +1 -1
  153. package/dist/research/adapters/semantic-scholar.d.ts.map +1 -1
  154. package/dist/research/adapters/semantic-scholar.js +7 -7
  155. package/dist/research/adapters/semantic-scholar.js.map +1 -1
  156. package/dist/research/index.js +0 -7
  157. package/dist/research/index.js.map +1 -1
  158. package/dist/research/web-search.d.ts.map +1 -1
  159. package/dist/research/web-search.js +11 -6
  160. package/dist/research/web-search.js.map +1 -1
  161. package/dist/tools/audit/tool-config.d.ts +1 -1
  162. package/dist/tools/audit/tool-config.d.ts.map +1 -1
  163. package/dist/tools/debug/tool-config.d.ts +1 -1
  164. package/dist/tools/debug/tool-config.d.ts.map +1 -1
  165. package/dist/tools/debug/tool-config.js.map +1 -1
  166. package/dist/tools/delegate/brief-slot.d.ts +14 -11
  167. package/dist/tools/delegate/brief-slot.d.ts.map +1 -1
  168. package/dist/tools/delegate/brief-slot.js +29 -53
  169. package/dist/tools/delegate/brief-slot.js.map +1 -1
  170. package/dist/tools/delegate/schema.d.ts +0 -4
  171. package/dist/tools/delegate/schema.d.ts.map +1 -1
  172. package/dist/tools/delegate/schema.js +3 -2
  173. package/dist/tools/delegate/schema.js.map +1 -1
  174. package/dist/tools/delegate/tool-config.d.ts +1 -1
  175. package/dist/tools/delegate/tool-config.d.ts.map +1 -1
  176. package/dist/tools/delegate/tool-config.js +20 -17
  177. package/dist/tools/delegate/tool-config.js.map +1 -1
  178. package/dist/tools/execute-plan/brief-slot.d.ts +11 -5
  179. package/dist/tools/execute-plan/brief-slot.d.ts.map +1 -1
  180. package/dist/tools/execute-plan/brief-slot.js +59 -15
  181. package/dist/tools/execute-plan/brief-slot.js.map +1 -1
  182. package/dist/tools/execute-plan/tool-config.d.ts +1 -1
  183. package/dist/tools/execute-plan/tool-config.d.ts.map +1 -1
  184. package/dist/tools/execute-plan/tool-config.js +18 -67
  185. package/dist/tools/execute-plan/tool-config.js.map +1 -1
  186. package/dist/tools/investigate/tool-config.d.ts +1 -1
  187. package/dist/tools/investigate/tool-config.d.ts.map +1 -1
  188. package/dist/tools/investigate/tool-config.js.map +1 -1
  189. package/dist/tools/journal/recall/tool-config.d.ts +1 -1
  190. package/dist/tools/journal/recall/tool-config.d.ts.map +1 -1
  191. package/dist/tools/journal/record/brief-slot.d.ts +9 -6
  192. package/dist/tools/journal/record/brief-slot.d.ts.map +1 -1
  193. package/dist/tools/journal/record/brief-slot.js +18 -14
  194. package/dist/tools/journal/record/brief-slot.js.map +1 -1
  195. package/dist/tools/journal/record/tool-config.d.ts +1 -1
  196. package/dist/tools/journal/record/tool-config.d.ts.map +1 -1
  197. package/dist/tools/journal/record/tool-config.js +18 -11
  198. package/dist/tools/journal/record/tool-config.js.map +1 -1
  199. package/dist/tools/register-context-block/tool-config.d.ts +1 -1
  200. package/dist/tools/register-context-block/tool-config.d.ts.map +1 -1
  201. package/dist/tools/research/tool-config.d.ts +1 -1
  202. package/dist/tools/research/tool-config.d.ts.map +1 -1
  203. package/dist/tools/research/two-turn-driver.d.ts.map +1 -1
  204. package/dist/tools/research/two-turn-driver.js.map +1 -1
  205. package/dist/tools/retry/brief-slot.d.ts +1 -1
  206. package/dist/tools/retry/brief-slot.d.ts.map +1 -1
  207. package/dist/tools/retry/brief-slot.js +2 -1
  208. package/dist/tools/retry/brief-slot.js.map +1 -1
  209. package/dist/tools/retry/schema.d.ts +0 -1
  210. package/dist/tools/retry/schema.d.ts.map +1 -1
  211. package/dist/tools/retry/schema.js +6 -6
  212. package/dist/tools/retry/schema.js.map +1 -1
  213. package/dist/tools/retry/tool-config.d.ts +1 -1
  214. package/dist/tools/retry/tool-config.d.ts.map +1 -1
  215. package/dist/tools/retry/tool-config.js +23 -28
  216. package/dist/tools/retry/tool-config.js.map +1 -1
  217. package/dist/tools/review/tool-config.d.ts +1 -1
  218. package/dist/tools/review/tool-config.d.ts.map +1 -1
  219. package/dist/tools/review/tool-config.js.map +1 -1
  220. package/dist/transport/http-listener.d.ts +7 -8
  221. package/dist/transport/http-listener.d.ts.map +1 -1
  222. package/dist/transport/http-listener.js +20 -21
  223. package/dist/transport/http-listener.js.map +1 -1
  224. package/dist/types/goal.d.ts +47 -0
  225. package/dist/types/goal.d.ts.map +1 -0
  226. package/dist/types/goal.js +2 -0
  227. package/dist/types/goal.js.map +1 -0
  228. package/dist/types/task-spec.d.ts +11 -0
  229. package/dist/types/task-spec.d.ts.map +1 -1
  230. package/dist/types.d.ts +1 -0
  231. package/dist/types.d.ts.map +1 -1
  232. package/package.json +3 -49
  233. package/dist/lifecycle/diff-tracker.d.ts +0 -88
  234. package/dist/lifecycle/diff-tracker.d.ts.map +0 -1
  235. package/dist/lifecycle/diff-tracker.js +0 -429
  236. package/dist/lifecycle/diff-tracker.js.map +0 -1
  237. package/dist/lifecycle/handlers/compose-commit-message.d.ts +0 -15
  238. package/dist/lifecycle/handlers/compose-commit-message.d.ts.map +0 -1
  239. package/dist/lifecycle/handlers/compose-commit-message.js +0 -227
  240. package/dist/lifecycle/handlers/compose-commit-message.js.map +0 -1
  241. package/dist/lifecycle/handlers/git-commit-handler.d.ts +0 -4
  242. package/dist/lifecycle/handlers/git-commit-handler.d.ts.map +0 -1
  243. package/dist/lifecycle/handlers/git-commit-handler.js +0 -210
  244. package/dist/lifecycle/handlers/git-commit-handler.js.map +0 -1
  245. package/dist/lifecycle/handlers/journal-review-prompt.d.ts +0 -7
  246. package/dist/lifecycle/handlers/journal-review-prompt.d.ts.map +0 -1
  247. package/dist/lifecycle/handlers/journal-review-prompt.js +0 -54
  248. package/dist/lifecycle/handlers/journal-review-prompt.js.map +0 -1
  249. package/dist/lifecycle/handlers/parse-review-report.d.ts +0 -15
  250. package/dist/lifecycle/handlers/parse-review-report.d.ts.map +0 -1
  251. package/dist/lifecycle/handlers/parse-review-report.js +0 -40
  252. package/dist/lifecycle/handlers/parse-review-report.js.map +0 -1
  253. package/dist/lifecycle/handlers/quality-review-prompt.d.ts +0 -7
  254. package/dist/lifecycle/handlers/quality-review-prompt.d.ts.map +0 -1
  255. package/dist/lifecycle/handlers/quality-review-prompt.js +0 -50
  256. package/dist/lifecycle/handlers/quality-review-prompt.js.map +0 -1
  257. package/dist/lifecycle/handlers/review-stage.d.ts +0 -4
  258. package/dist/lifecycle/handlers/review-stage.d.ts.map +0 -1
  259. package/dist/lifecycle/handlers/review-stage.js +0 -277
  260. package/dist/lifecycle/handlers/review-stage.js.map +0 -1
  261. package/dist/lifecycle/handlers/rework-prompt.d.ts +0 -6
  262. package/dist/lifecycle/handlers/rework-prompt.d.ts.map +0 -1
  263. package/dist/lifecycle/handlers/rework-prompt.js +0 -18
  264. package/dist/lifecycle/handlers/rework-prompt.js.map +0 -1
  265. package/dist/lifecycle/handlers/rework-stage.d.ts +0 -4
  266. package/dist/lifecycle/handlers/rework-stage.d.ts.map +0 -1
  267. package/dist/lifecycle/handlers/rework-stage.js +0 -191
  268. package/dist/lifecycle/handlers/rework-stage.js.map +0 -1
  269. package/dist/lifecycle/handlers/spec-review-prompt.d.ts +0 -8
  270. package/dist/lifecycle/handlers/spec-review-prompt.d.ts.map +0 -1
  271. package/dist/lifecycle/handlers/spec-review-prompt.js +0 -47
  272. package/dist/lifecycle/handlers/spec-review-prompt.js.map +0 -1
  273. package/dist/lifecycle/handlers/tier-policy.d.ts +0 -11
  274. package/dist/lifecycle/handlers/tier-policy.d.ts.map +0 -1
  275. package/dist/lifecycle/handlers/tier-policy.js +0 -12
  276. package/dist/lifecycle/handlers/tier-policy.js.map +0 -1
  277. package/dist/lifecycle/repo-commit-lock.d.ts +0 -20
  278. package/dist/lifecycle/repo-commit-lock.d.ts.map +0 -1
  279. package/dist/lifecycle/repo-commit-lock.js +0 -40
  280. package/dist/lifecycle/repo-commit-lock.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,17 @@ export interface JournalEdge {
6
6
  type: EdgeType;
7
7
  target: string;
8
8
  }
9
+ export interface JournalNode {
10
+ id: string;
11
+ title: string;
12
+ status: JournalStatus;
13
+ tags: string[];
14
+ date: string;
15
+ links: JournalEdge[];
16
+ supersededBy: string | null;
17
+ context: string;
18
+ consequences: string;
19
+ }
9
20
  export declare const isEdgeType: (v: unknown) => v is EdgeType;
10
21
  export declare const isStatus: (v: unknown) => v is JournalStatus;
11
22
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/journal/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,sFAAkF,CAAC;AAC1G,MAAM,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AACjD,eAAO,MAAM,aAAa,+DAA6D,CAAC;AACxF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAEzD,MAAM,WAAW,WAAW;IAAG,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CAAE;AAEhE,eAAO,MAAM,UAAU,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,QAA8C,CAAC;AAC5F,eAAO,MAAM,QAAQ,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,aAA2D,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/journal/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,sFAAkF,CAAC;AAC1G,MAAM,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AACjD,eAAO,MAAM,aAAa,+DAA6D,CAAC;AACxF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAEzD,MAAM,WAAW,WAAW;IAAG,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CAAE;AAChE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,UAAU,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,QAA8C,CAAC;AAC5F,eAAO,MAAM,QAAQ,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,aAA2D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/journal/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,YAAY,EAAC,SAAS,EAAC,SAAS,EAAC,YAAY,EAAC,aAAa,EAAC,QAAQ,CAAU,CAAC;AAE1G,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAC,SAAS,EAAC,cAAc,EAAC,YAAY,CAAU,CAAC;AAKxF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAU,EAAiB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAa,CAAC,CAAC;AAC5F,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAsB,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAkB,CAAC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/journal/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,YAAY,EAAC,SAAS,EAAC,SAAS,EAAC,YAAY,EAAC,aAAa,EAAC,QAAQ,CAAU,CAAC;AAE1G,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAC,SAAS,EAAC,cAAc,EAAC,YAAY,CAAU,CAAC;AAgBxF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAU,EAAiB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAa,CAAC,CAAC;AAC5F,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAsB,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAkB,CAAC,CAAC"}
@@ -13,6 +13,10 @@ export interface CompletionInputs {
13
13
  unaddressedFindingIds: string[] | undefined;
14
14
  commitKind: 'committed' | 'no_op' | undefined;
15
15
  criteriaSucceeded: string[] | undefined;
16
+ /** Goal mode (write routes): commits in baseSha..HEAD. When defined, the
17
+ * goal branch applies — completion = implement advanced AND ≥1 commit
18
+ * (the agent self-commits; there is no MMA review verdict / commit gate). */
19
+ goalCommitCount?: number;
16
20
  }
17
21
  export interface CompletionResult {
18
22
  completed: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"derive-completion.d.ts","sourceRoot":"","sources":["../../src/lifecycle/derive-completion.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAM1D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,CAAC;IACjB,gBAAgB,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1D,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,WAAW,GAAG,MAAM,CAAC;IAC7D,aAAa,EAAE,UAAU,GAAG,UAAU,GAAG,kBAAkB,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5G,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,qBAAqB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5C,UAAU,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IAC9C,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CA8B3E;AAMD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,gBAAgB,CAwB/E"}
1
+ {"version":3,"file":"derive-completion.d.ts","sourceRoot":"","sources":["../../src/lifecycle/derive-completion.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAM1D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,CAAC;IACjB,gBAAgB,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1D,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,WAAW,GAAG,MAAM,CAAC;IAC7D,aAAa,EAAE,UAAU,GAAG,UAAU,GAAG,kBAAkB,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5G,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,qBAAqB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5C,UAAU,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IAC9C,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC;;kFAE8E;IAC9E,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAwC3E;AAMD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,gBAAgB,CA2B/E"}
@@ -22,7 +22,17 @@ export function deriveCompletion(inputs) {
22
22
  reasons.push('no successful criteria');
23
23
  return { completed: implementOk && criteriaOk, reasons };
24
24
  }
25
- // 3. Write routes: review + commit must pass
25
+ // 3a. Goal-mode write routes: the agent self-commits and there is no MMA
26
+ // review verdict / commit gate. Completion = implementer advanced AND at
27
+ // least one commit landed in baseSha..HEAD (mirrors the status truth table:
28
+ // failed only on zero commits).
29
+ if (inputs.goalCommitCount !== undefined) {
30
+ const committed = inputs.goalCommitCount > 0;
31
+ if (!committed)
32
+ reasons.push('no commits landed');
33
+ return { completed: implementOk && committed, reasons };
34
+ }
35
+ // 3. Write routes (legacy non-goal): review + commit must pass
26
36
  const reviewOk = inputs.reviewPolicy === 'none' ||
27
37
  inputs.reviewVerdict === 'approved' ||
28
38
  (inputs.reviewVerdict === 'changes_required' &&
@@ -61,6 +71,9 @@ export function extractCompletionInputs(state) {
61
71
  unaddressedFindingIds: state.unaddressedFindingIds ?? last?.unaddressedFindingIds,
62
72
  commitKind,
63
73
  criteriaSucceeded: last?.criteriaSucceeded,
74
+ ...(state.goalCommitCount !== undefined && {
75
+ goalCommitCount: state.goalCommitCount,
76
+ }),
64
77
  };
65
78
  }
66
79
  //# sourceMappingURL=derive-completion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"derive-completion.js","sourceRoot":"","sources":["../../src/lifecycle/derive-completion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"derive-completion.js","sourceRoot":"","sources":["../../src/lifecycle/derive-completion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ export interface GitResult {
2
+ stdout: string;
3
+ stderr: string;
4
+ code: number;
5
+ }
6
+ /**
7
+ * Run a git subcommand in `cwd`. Never throws — a non-zero exit (or spawn
8
+ * failure) is returned as `{ code, stderr }`. Shared by the goal-set executor
9
+ * (preconditions, baseSha capture, git-log report) so git plumbing lives in one
10
+ * place rather than inline in a handler.
11
+ */
12
+ export declare function gitC(cwd: string, args: string[]): Promise<GitResult>;
13
+ /** True when `cwd` is inside a git work-tree. */
14
+ export declare function isInsideWorkTree(cwd: string): Promise<boolean>;
15
+ /** Resolved HEAD sha, or null when HEAD is unborn / unresolvable. */
16
+ export declare function currentHead(cwd: string): Promise<string | null>;
17
+ /**
18
+ * True when the work-tree has no uncommitted changes (tracked or untracked).
19
+ * Uses `git status --porcelain` — empty output means clean.
20
+ */
21
+ export declare function isCleanWorkTree(cwd: string): Promise<boolean>;
22
+ /** True when `ancestor` is an ancestor of (or equal to) `descendant`. */
23
+ export declare function isAncestor(cwd: string, ancestor: string, descendant: string): Promise<boolean>;
24
+ /** Number of commits in `base..HEAD` (0 when none / base unresolved). */
25
+ export declare function commitCount(cwd: string, base: string): Promise<number>;
26
+ export interface GitLogCommit {
27
+ sha: string;
28
+ subject: string;
29
+ filesChanged: string[];
30
+ }
31
+ /**
32
+ * Structured commit list for `base..HEAD`, oldest-first. Subjects + changed
33
+ * files only (no patch bodies) so the payload stays bounded — see the spec's
34
+ * git-log-format note. Returns [] when base is unresolved or there are none.
35
+ */
36
+ export declare function gitLogCommits(cwd: string, base: string): Promise<GitLogCommit[]>;
37
+ /**
38
+ * Render `base..HEAD` as `git log --stat`-style text for the phase-2 handoff,
39
+ * truncated to `maxBytes` with a marker. Subjects + per-commit file lists, no
40
+ * patch body.
41
+ */
42
+ export declare function renderGitLogStat(cwd: string, base: string, maxBytes?: number): Promise<{
43
+ text: string;
44
+ truncated: boolean;
45
+ }>;
46
+ /**
47
+ * Render the UNCOMMITTED working-tree state for the phase-2 prompt: `git status
48
+ * --short` plus a `--stat` of staged+unstaged changes (no patch body). This is
49
+ * what lets the review-fix tier see work the implementer wrote but did NOT
50
+ * commit — without it, an implementer that under-commits leaves phase 2 blind.
51
+ * Returns '(clean working tree)' when there are no uncommitted changes.
52
+ */
53
+ export declare function renderWorkingTreeStatus(cwd: string, maxBytes?: number): Promise<string>;
54
+ /**
55
+ * Ensure a committer identity is resolvable for the agent's own `git commit`
56
+ * calls. The agent commits in its own subprocess, so env overrides won't reach
57
+ * it — instead, when the repo/global config has no identity, set a goal-set
58
+ * identity in the **local repo config** so the agent's commits inherit it.
59
+ * Returns true when it set one, false when an identity already existed.
60
+ */
61
+ export declare function ensureGitIdentity(cwd: string, goalId: string): Promise<boolean>;
62
+ //# sourceMappingURL=git-exec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-exec.d.ts","sourceRoot":"","sources":["../../src/lifecycle/git-exec.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAY1E;AAED,iDAAiD;AACjD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGpE;AAED,qEAAqE;AACrE,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKrE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGnE;AAED,yEAAyE;AACzE,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAIpG;AAED,yEAAyE;AACzE,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAK5E;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAkBtF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAa,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAOtI;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,SAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAShG;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOrF"}
@@ -0,0 +1,135 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ const execFileP = promisify(execFile);
4
+ /**
5
+ * Run a git subcommand in `cwd`. Never throws — a non-zero exit (or spawn
6
+ * failure) is returned as `{ code, stderr }`. Shared by the goal-set executor
7
+ * (preconditions, baseSha capture, git-log report) so git plumbing lives in one
8
+ * place rather than inline in a handler.
9
+ */
10
+ export async function gitC(cwd, args) {
11
+ try {
12
+ const { stdout, stderr } = await execFileP('git', ['-C', cwd, ...args], { windowsHide: true });
13
+ return { stdout, stderr, code: 0 };
14
+ }
15
+ catch (err) {
16
+ const e = err;
17
+ return {
18
+ stdout: e.stdout ?? '',
19
+ stderr: e.stderr ?? e.message ?? String(err),
20
+ code: typeof e.code === 'number' ? e.code : 1,
21
+ };
22
+ }
23
+ }
24
+ /** True when `cwd` is inside a git work-tree. */
25
+ export async function isInsideWorkTree(cwd) {
26
+ const r = await gitC(cwd, ['rev-parse', '--is-inside-work-tree']);
27
+ return r.code === 0 && r.stdout.trim() === 'true';
28
+ }
29
+ /** Resolved HEAD sha, or null when HEAD is unborn / unresolvable. */
30
+ export async function currentHead(cwd) {
31
+ const r = await gitC(cwd, ['rev-parse', 'HEAD']);
32
+ if (r.code !== 0)
33
+ return null;
34
+ const sha = r.stdout.trim();
35
+ return sha.length > 0 ? sha : null;
36
+ }
37
+ /**
38
+ * True when the work-tree has no uncommitted changes (tracked or untracked).
39
+ * Uses `git status --porcelain` — empty output means clean.
40
+ */
41
+ export async function isCleanWorkTree(cwd) {
42
+ const r = await gitC(cwd, ['status', '--porcelain']);
43
+ return r.code === 0 && r.stdout.trim() === '';
44
+ }
45
+ /** True when `ancestor` is an ancestor of (or equal to) `descendant`. */
46
+ export async function isAncestor(cwd, ancestor, descendant) {
47
+ if (ancestor === descendant)
48
+ return true;
49
+ const r = await gitC(cwd, ['merge-base', '--is-ancestor', ancestor, descendant]);
50
+ return r.code === 0;
51
+ }
52
+ /** Number of commits in `base..HEAD` (0 when none / base unresolved). */
53
+ export async function commitCount(cwd, base) {
54
+ const r = await gitC(cwd, ['rev-list', '--count', `${base}..HEAD`]);
55
+ if (r.code !== 0)
56
+ return 0;
57
+ const n = Number.parseInt(r.stdout.trim(), 10);
58
+ return Number.isFinite(n) ? n : 0;
59
+ }
60
+ /**
61
+ * Structured commit list for `base..HEAD`, oldest-first. Subjects + changed
62
+ * files only (no patch bodies) so the payload stays bounded — see the spec's
63
+ * git-log-format note. Returns [] when base is unresolved or there are none.
64
+ */
65
+ export async function gitLogCommits(cwd, base) {
66
+ // %x00 record sep, %x1e field sep: sha, subject. Then --name-only file lines.
67
+ const r = await gitC(cwd, [
68
+ 'log', '--reverse', '--name-only', '--no-color',
69
+ '--pretty=format:%x1e%H%x1f%s', `${base}..HEAD`,
70
+ ]);
71
+ if (r.code !== 0 || r.stdout.trim() === '')
72
+ return [];
73
+ const commits = [];
74
+ const records = r.stdout.split('\x1e').filter((s) => s.length > 0);
75
+ for (const rec of records) {
76
+ const nlIdx = rec.indexOf('\n');
77
+ const header = nlIdx === -1 ? rec : rec.slice(0, nlIdx);
78
+ const [sha, subject] = header.split('\x1f');
79
+ const fileBlock = nlIdx === -1 ? '' : rec.slice(nlIdx + 1);
80
+ const filesChanged = fileBlock.split('\n').map((l) => l.trim()).filter((l) => l.length > 0);
81
+ commits.push({ sha: (sha ?? '').trim(), subject: (subject ?? '').trim(), filesChanged });
82
+ }
83
+ return commits;
84
+ }
85
+ /**
86
+ * Render `base..HEAD` as `git log --stat`-style text for the phase-2 handoff,
87
+ * truncated to `maxBytes` with a marker. Subjects + per-commit file lists, no
88
+ * patch body.
89
+ */
90
+ export async function renderGitLogStat(cwd, base, maxBytes = 128 * 1024) {
91
+ const r = await gitC(cwd, ['log', '--stat', '--no-patch', '--no-color', `${base}..HEAD`]);
92
+ const full = r.code === 0 ? r.stdout : '';
93
+ if (Buffer.byteLength(full, 'utf8') <= maxBytes)
94
+ return { text: full, truncated: false };
95
+ // Truncate on a UTF-8-safe boundary.
96
+ const buf = Buffer.from(full, 'utf8').subarray(0, maxBytes);
97
+ return { text: buf.toString('utf8') + '\n…[git_log_truncated]…\n', truncated: true };
98
+ }
99
+ /**
100
+ * Render the UNCOMMITTED working-tree state for the phase-2 prompt: `git status
101
+ * --short` plus a `--stat` of staged+unstaged changes (no patch body). This is
102
+ * what lets the review-fix tier see work the implementer wrote but did NOT
103
+ * commit — without it, an implementer that under-commits leaves phase 2 blind.
104
+ * Returns '(clean working tree)' when there are no uncommitted changes.
105
+ */
106
+ export async function renderWorkingTreeStatus(cwd, maxBytes = 64 * 1024) {
107
+ const status = await gitC(cwd, ['status', '--short']);
108
+ if (status.code !== 0)
109
+ return '(working-tree status unavailable)';
110
+ if (status.stdout.trim() === '')
111
+ return '(clean working tree — nothing uncommitted)';
112
+ const stat = await gitC(cwd, ['diff', 'HEAD', '--stat', '--no-color']);
113
+ const text = `Uncommitted changes (git status --short):\n${status.stdout}\n` +
114
+ (stat.code === 0 && stat.stdout.trim() ? `\nDiff stat vs HEAD:\n${stat.stdout}` : '');
115
+ if (Buffer.byteLength(text, 'utf8') <= maxBytes)
116
+ return text;
117
+ return Buffer.from(text, 'utf8').subarray(0, maxBytes).toString('utf8') + '\n…[truncated]…\n';
118
+ }
119
+ /**
120
+ * Ensure a committer identity is resolvable for the agent's own `git commit`
121
+ * calls. The agent commits in its own subprocess, so env overrides won't reach
122
+ * it — instead, when the repo/global config has no identity, set a goal-set
123
+ * identity in the **local repo config** so the agent's commits inherit it.
124
+ * Returns true when it set one, false when an identity already existed.
125
+ */
126
+ export async function ensureGitIdentity(cwd, goalId) {
127
+ const name = await gitC(cwd, ['config', 'user.name']);
128
+ const email = await gitC(cwd, ['config', 'user.email']);
129
+ if (name.code === 0 && name.stdout.trim() && email.code === 0 && email.stdout.trim())
130
+ return false;
131
+ await gitC(cwd, ['config', 'user.name', `MMA Goal ${goalId}`]);
132
+ await gitC(cwd, ['config', 'user.email', 'noreply@mmagent.local']);
133
+ return true;
134
+ }
135
+ //# sourceMappingURL=git-exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-exec.js","sourceRoot":"","sources":["../../src/lifecycle/git-exec.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,12 @@
1
1
  export interface ResolveOptions {
2
2
  timeoutMs?: number;
3
- /** Max spawn attempts on a TRANSIENT failure (spawn error / timeout). Default 3. */
4
- maxAttempts?: number;
5
3
  }
6
4
  /**
7
5
  * Returns the canonical absolute path of the git toplevel for `cwd`, or
8
6
  * null if `cwd` is not in a git repo, git is unavailable, the directory
9
7
  * does not exist, or the spawn times out (default 5 s).
10
8
  *
11
- * Pure function of (cwd, filesystem state). Never throws. Retries on TRANSIENT
12
- * spawn failures (EAGAIN/ENOMEM/timeout — common when many git subprocesses
13
- * fork concurrently under load); a definitive "not a repo" result is returned
14
- * immediately without retry.
9
+ * Pure function of (cwd, filesystem state). Never throws.
15
10
  */
16
11
  export declare function resolveGitToplevel(cwd: string, opts?: ResolveOptions): Promise<string | null>;
17
12
  //# sourceMappingURL=git-toplevel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"git-toplevel.d.ts","sourceRoot":"","sources":["../../src/lifecycle/git-toplevel.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8CD;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASxB"}
1
+ {"version":3,"file":"git-toplevel.d.ts","sourceRoot":"","sources":["../../src/lifecycle/git-toplevel.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmCxB"}
@@ -1,13 +1,20 @@
1
1
  import { spawn } from 'node:child_process';
2
- import { resolve as resolvePath } from 'node:path';
3
- function attemptOnce(cwd, timeoutMs) {
2
+ /**
3
+ * Returns the canonical absolute path of the git toplevel for `cwd`, or
4
+ * null if `cwd` is not in a git repo, git is unavailable, the directory
5
+ * does not exist, or the spawn times out (default 5 s).
6
+ *
7
+ * Pure function of (cwd, filesystem state). Never throws.
8
+ */
9
+ export async function resolveGitToplevel(cwd, opts = {}) {
10
+ const timeoutMs = opts.timeoutMs ?? 5000;
4
11
  return new Promise((resolve) => {
5
12
  let settled = false;
6
- const settle = (value, transient = false) => {
13
+ const settle = (value) => {
7
14
  if (settled)
8
15
  return;
9
16
  settled = true;
10
- resolve({ value, transient });
17
+ resolve(value);
11
18
  };
12
19
  let child;
13
20
  try {
@@ -19,55 +26,27 @@ function attemptOnce(cwd, timeoutMs) {
19
26
  });
20
27
  }
21
28
  catch {
22
- settle(null, true); // synchronous spawn throw → transient
29
+ settle(null);
23
30
  return;
24
31
  }
25
32
  let stdout = '';
26
33
  child.stdout?.on('data', (b) => { stdout += b.toString('utf8'); });
27
34
  child.stderr?.on('data', () => { });
28
- // A spawn-level 'error' (EAGAIN/ENOMEM under fork pressure) is transient.
29
- child.on('error', () => settle(null, true));
35
+ child.on('error', () => settle(null));
30
36
  child.on('exit', (code) => {
31
- // `git --show-toplevel` emits forward-slash paths even on Windows;
32
- // normalize to an OS-native absolute path so callers comparing against
33
- // realpath/process.cwd() (backslashes on win32) match.
34
- if (code === 0) {
35
- const out = stdout.trim();
36
- settle(out ? resolvePath(out) : null);
37
- }
37
+ if (code === 0)
38
+ settle(stdout.trim() || null);
38
39
  else
39
- settle(null); // git ran and said "not a repo" → definitive, do not retry
40
+ settle(null);
40
41
  });
41
42
  const t = setTimeout(() => {
42
43
  try {
43
44
  child.kill('SIGKILL');
44
45
  }
45
46
  catch { /* ignore */ }
46
- settle(null, true); // timeout → transient
47
+ settle(null);
47
48
  }, timeoutMs);
48
49
  child.on('exit', () => clearTimeout(t));
49
50
  });
50
51
  }
51
- /**
52
- * Returns the canonical absolute path of the git toplevel for `cwd`, or
53
- * null if `cwd` is not in a git repo, git is unavailable, the directory
54
- * does not exist, or the spawn times out (default 5 s).
55
- *
56
- * Pure function of (cwd, filesystem state). Never throws. Retries on TRANSIENT
57
- * spawn failures (EAGAIN/ENOMEM/timeout — common when many git subprocesses
58
- * fork concurrently under load); a definitive "not a repo" result is returned
59
- * immediately without retry.
60
- */
61
- export async function resolveGitToplevel(cwd, opts = {}) {
62
- const timeoutMs = opts.timeoutMs ?? 5000;
63
- const maxAttempts = Math.max(1, opts.maxAttempts ?? 3);
64
- for (let i = 0; i < maxAttempts; i++) {
65
- const { value, transient } = await attemptOnce(cwd, timeoutMs);
66
- if (!transient)
67
- return value;
68
- if (i < maxAttempts - 1)
69
- await new Promise((r) => setTimeout(r, 25 * (i + 1)));
70
- }
71
- return null;
72
- }
73
52
  //# sourceMappingURL=git-toplevel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"git-toplevel.js","sourceRoot":"","sources":["../../src/lifecycle/git-toplevel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-toplevel.js","sourceRoot":"","sources":["../../src/lifecycle/git-toplevel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAW,EACX,OAAuB,EAAE;IAEzB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;IACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,KAAoB,EAAE,EAAE;YACtC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC;QACF,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAE;gBAChE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,qEAAqE;gBACrE,0EAA0E;gBAC1E,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QACD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAiB,CAAC,CAAC,CAAC;QAClD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC;gBAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;;gBACzC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE;YACxB,IAAI,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { Goal, GoalPhase, GoalSource, GoalReviewPolicy } from '../types/goal.js';
2
+ import type { ToolMode, SandboxPolicy } from '../types/task-spec.js';
3
+ export interface TaskInput {
4
+ heading: string;
5
+ body: string;
6
+ /** 1-based plan-phase; defaults to 1 (single checkpoint). */
7
+ phase?: number;
8
+ }
9
+ export interface AssembleGoalArgs {
10
+ source: GoalSource;
11
+ cwd: string;
12
+ tasks: TaskInput[];
13
+ /** Phase tiers. [implement] or [implement, review-fix]. */
14
+ phases: GoalPhase[];
15
+ reviewPolicy: GoalReviewPolicy;
16
+ tools: ToolMode;
17
+ sandboxPolicy: SandboxPolicy;
18
+ skills?: string[];
19
+ contextBlockIds?: string[];
20
+ goalId?: string;
21
+ /** Route-specific procedure prepended to both phase prompts. */
22
+ preamble?: string;
23
+ /** Operator's per-task wall-clock budget (config.defaults.timeoutMs); the phase
24
+ * deadline scales off it. Falls back to PER_TASK_DEFAULT_MS when unset. */
25
+ perTaskTimeoutMs?: number;
26
+ }
27
+ export declare function assembleGoal(args: AssembleGoalArgs): Goal;
28
+ /**
29
+ * Map a goal into the single TaskSpec the executor dispatches. The implement
30
+ * prompt is materialized into `prompt`; phase-1 tier becomes `agentType`;
31
+ * `reviewPolicy` collapses to the lifecycle's none/full axis (the review-fix
32
+ * stage only distinguishes none vs run).
33
+ */
34
+ export declare function goalToTaskSpec(goal: Goal, implementPrompt: string, timeoutMs: number): import('../types.js').TaskSpec;
35
+ //# sourceMappingURL=goal-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-builder.d.ts","sourceRoot":"","sources":["../../src/lifecycle/goal-builder.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAY,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAChG,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGrE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,2DAA2D;IAC3D,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,EAAE,gBAAgB,CAAC;IAC/B,KAAK,EAAE,QAAQ,CAAC;IAChB,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;gFAC4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CA2BzD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO,aAAa,EAAE,QAAQ,CAchC"}
@@ -0,0 +1,56 @@
1
+ // Shared Goal assembler. Each write route's briefSlot derives its task list +
2
+ // tiers + reviewPolicy and calls assembleGoal, which renders the planText and
3
+ // fills the Goal. This is the single construction point — adding a write route
4
+ // means a new briefSlot calling this, nothing else.
5
+ import { randomUUID } from 'node:crypto';
6
+ import { renderPlanText, derivePhaseTimeoutMs, GOAL_IDLE_STALL_MS } from './goal-prompts.js';
7
+ export function assembleGoal(args) {
8
+ const goalTasks = args.tasks.map((t, i) => ({
9
+ n: i + 1,
10
+ heading: t.heading.trim() || `task ${i + 1}`,
11
+ body: t.body,
12
+ phase: t.phase ?? 1,
13
+ }));
14
+ const phaseCount = new Set(goalTasks.map((t) => t.phase)).size;
15
+ // reviewPolicy='none' collapses to phase-1 only (configured phase-1 tier).
16
+ const phases = args.reviewPolicy === 'none' ? [args.phases[0]] : args.phases;
17
+ return {
18
+ goalId: args.goalId ?? randomUUID(),
19
+ cwd: args.cwd,
20
+ source: args.source,
21
+ tasks: goalTasks,
22
+ phaseCount,
23
+ planText: renderPlanText(goalTasks, phaseCount),
24
+ ...(args.preamble && { preamble: args.preamble }),
25
+ phases,
26
+ reviewPolicy: args.reviewPolicy,
27
+ sandboxPolicy: args.sandboxPolicy,
28
+ tools: args.tools,
29
+ ...(args.skills && args.skills.length > 0 && { skills: args.skills }),
30
+ ...(args.contextBlockIds && args.contextBlockIds.length > 0 && { contextBlockIds: args.contextBlockIds }),
31
+ goalPhaseTimeoutMs: derivePhaseTimeoutMs(goalTasks.length, args.perTaskTimeoutMs),
32
+ goalIdleStallMs: GOAL_IDLE_STALL_MS,
33
+ };
34
+ }
35
+ /**
36
+ * Map a goal into the single TaskSpec the executor dispatches. The implement
37
+ * prompt is materialized into `prompt`; phase-1 tier becomes `agentType`;
38
+ * `reviewPolicy` collapses to the lifecycle's none/full axis (the review-fix
39
+ * stage only distinguishes none vs run).
40
+ */
41
+ export function goalToTaskSpec(goal, implementPrompt, timeoutMs) {
42
+ return {
43
+ prompt: implementPrompt,
44
+ goal,
45
+ agentType: goal.phases[0].tier,
46
+ reviewPolicy: goal.reviewPolicy === 'none' ? 'none' : 'full',
47
+ cwd: goal.cwd,
48
+ tools: goal.tools,
49
+ sandboxPolicy: goal.sandboxPolicy,
50
+ timeoutMs: goal.goalPhaseTimeoutMs ?? timeoutMs,
51
+ ...(goal.goalIdleStallMs !== undefined && { idleStallMs: goal.goalIdleStallMs }),
52
+ ...(goal.skills && { skills: goal.skills }),
53
+ ...(goal.contextBlockIds && { contextBlockIds: goal.contextBlockIds }),
54
+ };
55
+ }
56
+ //# sourceMappingURL=goal-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-builder.js","sourceRoot":"","sources":["../../src/lifecycle/goal-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Goal } from '../types/goal.js';
2
+ export type GoalPreconditionCode = 'empty_plan' | 'plan_too_large' | 'not_a_git_repo' | 'dirty_working_tree';
3
+ export type GoalPreconditionResult = {
4
+ ok: true;
5
+ baseSha: string;
6
+ } | {
7
+ ok: false;
8
+ code: GoalPreconditionCode;
9
+ message: string;
10
+ };
11
+ /** Synchronous build-time guards (no git): empty plan, oversized plan. */
12
+ export declare function checkGoalShape(goal: Goal): {
13
+ ok: true;
14
+ } | {
15
+ ok: false;
16
+ code: GoalPreconditionCode;
17
+ message: string;
18
+ };
19
+ /** Git preconditions + baseSha capture. Run inside withWriteGoalLock. */
20
+ export declare function checkGitPreconditions(goal: Goal): Promise<GoalPreconditionResult>;
21
+ //# sourceMappingURL=goal-preconditions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-preconditions.d.ts","sourceRoot":"","sources":["../../src/lifecycle/goal-preconditions.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,MAAM,oBAAoB,GAC5B,YAAY,GACZ,gBAAgB,GAChB,gBAAgB,GAChB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,sBAAsB,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,oBAAoB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,oBAAoB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CASpH;AAED,yEAAyE;AACzE,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAcvF"}
@@ -0,0 +1,33 @@
1
+ // Hard-fail preconditions for a write goal-set, plus baseSha capture. ALL of
2
+ // this runs INSIDE withWriteGoalLock so the clean-tree-at-baseSha guarantee
3
+ // holds against other serialized goal-sets on the same repo.
4
+ import { isInsideWorkTree, currentHead, isCleanWorkTree, ensureGitIdentity } from './git-exec.js';
5
+ import { MAX_PLAN_TEXT_BYTES } from './goal-prompts.js';
6
+ /** Synchronous build-time guards (no git): empty plan, oversized plan. */
7
+ export function checkGoalShape(goal) {
8
+ if (!goal.tasks || goal.tasks.length === 0) {
9
+ return { ok: false, code: 'empty_plan', message: 'goal has no tasks' };
10
+ }
11
+ const bytes = Buffer.byteLength(goal.planText, 'utf8');
12
+ if (bytes > MAX_PLAN_TEXT_BYTES) {
13
+ return { ok: false, code: 'plan_too_large', message: `planText ${bytes}B exceeds ${MAX_PLAN_TEXT_BYTES}B` };
14
+ }
15
+ return { ok: true };
16
+ }
17
+ /** Git preconditions + baseSha capture. Run inside withWriteGoalLock. */
18
+ export async function checkGitPreconditions(goal) {
19
+ const cwd = goal.cwd;
20
+ if (!(await isInsideWorkTree(cwd))) {
21
+ return { ok: false, code: 'not_a_git_repo', message: `${cwd} is not inside a git work-tree` };
22
+ }
23
+ const head = await currentHead(cwd);
24
+ if (!head) {
25
+ return { ok: false, code: 'not_a_git_repo', message: `${cwd} has no resolvable HEAD (unborn branch)` };
26
+ }
27
+ if (!(await isCleanWorkTree(cwd))) {
28
+ return { ok: false, code: 'dirty_working_tree', message: `${cwd} has uncommitted changes; goal mode requires a clean tree` };
29
+ }
30
+ await ensureGitIdentity(cwd, goal.goalId);
31
+ return { ok: true, baseSha: head };
32
+ }
33
+ //# sourceMappingURL=goal-preconditions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-preconditions.js","sourceRoot":"","sources":["../../src/lifecycle/goal-preconditions.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,4EAA4E;AAC5E,6DAA6D;AAC7D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAaxD,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAAC,IAAU;IACvC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;IACzE,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvD,IAAI,KAAK,GAAG,mBAAmB,EAAE,CAAC;QAChC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY,KAAK,aAAa,mBAAmB,GAAG,EAAE,CAAC;IAC9G,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAU;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,IAAI,CAAC,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,GAAG,gCAAgC,EAAE,CAAC;IAChG,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,GAAG,yCAAyC,EAAE,CAAC;IACzG,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,GAAG,GAAG,2DAA2D,EAAE,CAAC;IAC/H,CAAC;IACD,MAAM,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC"}