smol-symphony 0.1.0 → 0.2.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 (140) hide show
  1. package/AGENTS.md +105 -38
  2. package/PRODUCT.md +2 -1
  3. package/README.md +195 -98
  4. package/SPEC.md +543 -1915
  5. package/WORKFLOW.md +654 -179
  6. package/WORKFLOW.template.md +761 -121
  7. package/dist/acp-bridge.js +324 -0
  8. package/dist/acp-bridge.js.map +1 -0
  9. package/dist/actions/cache.js +191 -0
  10. package/dist/actions/cache.js.map +1 -0
  11. package/dist/actions/effects.js +41 -0
  12. package/dist/actions/effects.js.map +1 -0
  13. package/dist/actions/executor.js +570 -0
  14. package/dist/actions/executor.js.map +1 -0
  15. package/dist/actions/index.js +13 -0
  16. package/dist/actions/index.js.map +1 -0
  17. package/dist/actions/parsing.js +273 -0
  18. package/dist/actions/parsing.js.map +1 -0
  19. package/dist/actions/predicate-env.js +27 -0
  20. package/dist/actions/predicate-env.js.map +1 -0
  21. package/dist/actions/predicates.js +49 -0
  22. package/dist/actions/predicates.js.map +1 -0
  23. package/dist/actions/templating.js +66 -0
  24. package/dist/actions/templating.js.map +1 -0
  25. package/dist/actions/types.js +15 -0
  26. package/dist/actions/types.js.map +1 -0
  27. package/dist/agent/acp.js +232 -63
  28. package/dist/agent/acp.js.map +1 -1
  29. package/dist/agent/adapter-names.js +159 -0
  30. package/dist/agent/adapter-names.js.map +1 -0
  31. package/dist/agent/adapters.js +338 -102
  32. package/dist/agent/adapters.js.map +1 -1
  33. package/dist/agent/credential-extractors.js +342 -0
  34. package/dist/agent/credential-extractors.js.map +1 -0
  35. package/dist/agent/credential-secrets.js +628 -0
  36. package/dist/agent/credential-secrets.js.map +1 -0
  37. package/dist/agent/credential-ticker.js +57 -0
  38. package/dist/agent/credential-ticker.js.map +1 -0
  39. package/dist/agent/gondolin-creds-staging.js +356 -0
  40. package/dist/agent/gondolin-creds-staging.js.map +1 -0
  41. package/dist/agent/gondolin-dispatch.js +375 -0
  42. package/dist/agent/gondolin-dispatch.js.map +1 -0
  43. package/dist/agent/gondolin.js +124 -0
  44. package/dist/agent/gondolin.js.map +1 -0
  45. package/dist/agent/runner-decisions.js +134 -0
  46. package/dist/agent/runner-decisions.js.map +1 -0
  47. package/dist/agent/runner.js +1352 -290
  48. package/dist/agent/runner.js.map +1 -1
  49. package/dist/agent/tool-call-summary.js +102 -0
  50. package/dist/agent/tool-call-summary.js.map +1 -0
  51. package/dist/agent/vm-acp-mapping.js +73 -0
  52. package/dist/agent/vm-acp-mapping.js.map +1 -0
  53. package/dist/agent/vm-guards.js +262 -0
  54. package/dist/agent/vm-guards.js.map +1 -0
  55. package/dist/agent/vm-port.js +22 -0
  56. package/dist/agent/vm-port.js.map +1 -0
  57. package/dist/agent/vm-process-registry.js +79 -0
  58. package/dist/agent/vm-process-registry.js.map +1 -0
  59. package/dist/bin/cli-args.js +105 -0
  60. package/dist/bin/cli-args.js.map +1 -0
  61. package/dist/bin/symphony.js +719 -130
  62. package/dist/bin/symphony.js.map +1 -1
  63. package/dist/errors.js +15 -0
  64. package/dist/errors.js.map +1 -0
  65. package/dist/http-disk.js +135 -0
  66. package/dist/http-disk.js.map +1 -0
  67. package/dist/http-handlers.js +180 -0
  68. package/dist/http-handlers.js.map +1 -0
  69. package/dist/http.js +1476 -764
  70. package/dist/http.js.map +1 -1
  71. package/dist/issues.js +178 -0
  72. package/dist/issues.js.map +1 -0
  73. package/dist/logging.js +163 -5
  74. package/dist/logging.js.map +1 -1
  75. package/dist/mcp.js +391 -163
  76. package/dist/mcp.js.map +1 -1
  77. package/dist/memory.js +85 -0
  78. package/dist/memory.js.map +1 -0
  79. package/dist/orchestrator-decisions.js +331 -0
  80. package/dist/orchestrator-decisions.js.map +1 -0
  81. package/dist/orchestrator.js +1189 -303
  82. package/dist/orchestrator.js.map +1 -1
  83. package/dist/prompt.js +5 -5
  84. package/dist/prompt.js.map +1 -1
  85. package/dist/reconciler/cache.js +65 -0
  86. package/dist/reconciler/cache.js.map +1 -0
  87. package/dist/reconciler/index.js +448 -0
  88. package/dist/reconciler/index.js.map +1 -0
  89. package/dist/reconciler/ledger.js +131 -0
  90. package/dist/reconciler/ledger.js.map +1 -0
  91. package/dist/reconciler/pr-adapters.js +174 -0
  92. package/dist/reconciler/pr-adapters.js.map +1 -0
  93. package/dist/reconciler/pr-decide.js +167 -0
  94. package/dist/reconciler/pr-decide.js.map +1 -0
  95. package/dist/reconciler/pr.js +422 -0
  96. package/dist/reconciler/pr.js.map +1 -0
  97. package/dist/reconciler/types.js +12 -0
  98. package/dist/reconciler/types.js.map +1 -0
  99. package/dist/reconciler/vm.js +243 -0
  100. package/dist/reconciler/vm.js.map +1 -0
  101. package/dist/reconciler/workspace-defaults.js +83 -0
  102. package/dist/reconciler/workspace-defaults.js.map +1 -0
  103. package/dist/reconciler/workspace.js +272 -0
  104. package/dist/reconciler/workspace.js.map +1 -0
  105. package/dist/runlog.js +403 -0
  106. package/dist/runlog.js.map +1 -0
  107. package/dist/scaffold.js +165 -0
  108. package/dist/scaffold.js.map +1 -0
  109. package/dist/trackers/local.js +234 -133
  110. package/dist/trackers/local.js.map +1 -1
  111. package/dist/trackers/types.js +1 -1
  112. package/dist/trackers/types.js.map +1 -1
  113. package/dist/types.js +1 -1
  114. package/dist/util/clock.js +12 -0
  115. package/dist/util/clock.js.map +1 -0
  116. package/dist/util/crypto.js +25 -0
  117. package/dist/util/crypto.js.map +1 -0
  118. package/dist/util/frontmatter.js +70 -0
  119. package/dist/util/frontmatter.js.map +1 -0
  120. package/dist/util/fs-issues.js +22 -0
  121. package/dist/util/fs-issues.js.map +1 -0
  122. package/dist/util/process.js +152 -0
  123. package/dist/util/process.js.map +1 -0
  124. package/dist/util/workspace-key.js +10 -0
  125. package/dist/util/workspace-key.js.map +1 -0
  126. package/dist/workflow-loader.js +147 -0
  127. package/dist/workflow-loader.js.map +1 -0
  128. package/dist/workflow.js +656 -219
  129. package/dist/workflow.js.map +1 -1
  130. package/dist/workspace-types.js +8 -0
  131. package/dist/workspace-types.js.map +1 -0
  132. package/dist/workspace.js +367 -120
  133. package/dist/workspace.js.map +1 -1
  134. package/package.json +14 -6
  135. package/scripts/vm-agent.mjs +211 -0
  136. package/dist/agent/codex.js +0 -439
  137. package/dist/agent/codex.js.map +0 -1
  138. package/dist/agent/smolvm.js +0 -174
  139. package/dist/agent/smolvm.js.map +0 -1
  140. package/scripts/build-vm.sh +0 -67
@@ -0,0 +1,422 @@
1
+ // PR autopilot resource (issue 38 / reconciler stage 4). Owns the lifecycle of
2
+ // each terminal-state issue's GitHub PR: arms `gh pr merge --auto` when the
3
+ // PR is mergeable, routes non-mergeable PRs back to the implementing state
4
+ // (where the agent rebases onto a freshly-fetched base as part of its normal
5
+ // flow), and reaps workspace + remote branch once GitHub merges or closes
6
+ // the PR. Sits behind the PR engine toggle (`pr.enabled`) so a workflow that
7
+ // hasn't opted in observes no behavior change at runtime.
8
+ //
9
+ // Desired state per issue:
10
+ // - identifier in `merge_state` (e.g. Done) with a MERGEABLE open PR:
11
+ // `gh pr merge --auto --<strategy>` is armed.
12
+ // - identifier in `merge_state` with a CONFLICTING (or otherwise non-
13
+ // mergeable) open PR: issue is routed back to `conflict_route_to`
14
+ // (default: the first declared active state) with notes; the dispatched
15
+ // agent owns the rebase.
16
+ // - identifier in `merge_state` whose PR has merged or closed:
17
+ // local + (best-effort) remote branch deleted; workspace removed.
18
+ // - identifier in `close_state` (e.g. Cancelled) with an open PR:
19
+ // PR closed without merge; branches deleted.
20
+ //
21
+ // Actual state per issue:
22
+ // - PR view from `gh pr view <#> --json mergeable,base/head ref/oid,…`.
23
+ // Cached for `poll_interval_ms` per PR so a fast reconcile cadence does not
24
+ // storm the GH API.
25
+ //
26
+ // Conflict handling: the autopilot does not rebase. A non-mergeable PR is
27
+ // reported (notes block + state transition) and the dispatched agent does
28
+ // the work. This matches the workspace clone model: the host runs
29
+ // `git fetch origin <base>` before each dispatch so `origin/<base>` is
30
+ // current in the workspace, and the Todo prompt instructs the agent to
31
+ // `git rebase origin/<base>` as the first step.
32
+ //
33
+ // All GH I/O is behind injectable callbacks. Production wires real shell-outs
34
+ // (see `./pr-adapters.ts` — the shell module that implements PrApi against
35
+ // `gh` on the host); tests pass synchronous stubs.
36
+ import { log } from '../logging.js';
37
+ import { realClock } from '../util/clock.js';
38
+ import { ResourceActionLedger } from './ledger.js';
39
+ import { decidePr, } from './pr-decide.js';
40
+ const MAX_ACTION_HISTORY = 64;
41
+ export class PrResource {
42
+ opts;
43
+ id = 'pr';
44
+ dependsOn = [];
45
+ state = new Map();
46
+ lastError = null;
47
+ now;
48
+ actor;
49
+ ledger;
50
+ constructor(opts) {
51
+ this.opts = opts;
52
+ this.now = opts.now ?? realClock;
53
+ this.actor = opts.actor ?? 'pr-autopilot';
54
+ this.ledger = new ResourceActionLedger(this.id, {
55
+ now: this.now,
56
+ maxHistory: MAX_ACTION_HISTORY,
57
+ });
58
+ }
59
+ ready() {
60
+ return true;
61
+ }
62
+ /**
63
+ * One reconcile pass. Returns when every intended issue has been considered
64
+ * (a single in-flight action per issue is awaited in series — concurrent
65
+ * git operations across distinct workspaces are safe in principle, but the
66
+ * orchestrator's broader concurrency model expects serial action ledger
67
+ * writes within a single resource). Errors are caught at the action
68
+ * boundary so one failing issue does not block the rest.
69
+ */
70
+ async reconcile() {
71
+ let intents;
72
+ try {
73
+ intents = await this.opts.intended.prIntended();
74
+ }
75
+ catch (err) {
76
+ const msg = err.message;
77
+ this.lastError = `pr_intended_fetch_failed: ${msg}`;
78
+ log.warn('pr reconcile: intended fetch failed', { error: msg });
79
+ return;
80
+ }
81
+ // For identifiers no longer in the intended set, drop the per-issue
82
+ // state entirely — there is no counter to preserve anymore; the next
83
+ // return to the merge state re-resolves everything from gh.
84
+ const wanted = new Set(intents.map((i) => i.identifier));
85
+ for (const id of [...this.state.keys()]) {
86
+ if (!wanted.has(id))
87
+ this.state.delete(id);
88
+ }
89
+ // Reset per-pass error so a transient failure that has resolved doesn't
90
+ // keep haunting the snapshot. Per-action errors will repopulate it.
91
+ this.lastError = null;
92
+ for (const intent of intents) {
93
+ try {
94
+ await this.processIntent(intent);
95
+ }
96
+ catch (err) {
97
+ const msg = err.message;
98
+ this.lastError = msg;
99
+ log.warn('pr reconcile: per-issue pass threw', {
100
+ identifier: intent.identifier,
101
+ kind: intent.kind,
102
+ error: msg,
103
+ });
104
+ }
105
+ }
106
+ }
107
+ snapshot() {
108
+ return {
109
+ id: this.id,
110
+ ready: true,
111
+ desired_hash: null,
112
+ last_error: this.lastError,
113
+ actions: this.ledger.snapshot(),
114
+ };
115
+ }
116
+ /** Test helper: read the cached PR view (post-pass). */
117
+ viewFor(identifier) {
118
+ return this.state.get(identifier)?.prView ?? null;
119
+ }
120
+ getOrInit(identifier) {
121
+ let st = this.state.get(identifier);
122
+ if (!st) {
123
+ st = {
124
+ prSummary: undefined,
125
+ lastLookupAt: 0,
126
+ prView: null,
127
+ lastViewAt: 0,
128
+ lastObservedHeadSha: null,
129
+ armed: false,
130
+ completed: false,
131
+ };
132
+ this.state.set(identifier, st);
133
+ }
134
+ return st;
135
+ }
136
+ /**
137
+ * Wipe everything except `completed`. Used when we route the issue back
138
+ * to the implementing state so the next return to the merge state starts
139
+ * with a fresh PR view.
140
+ */
141
+ resetTransient(st) {
142
+ st.prSummary = undefined;
143
+ st.lastLookupAt = 0;
144
+ st.prView = null;
145
+ st.lastViewAt = 0;
146
+ st.lastObservedHeadSha = null;
147
+ st.armed = false;
148
+ st.completed = false;
149
+ }
150
+ /**
151
+ * Drive one intent through the decide → apply loop. Observation is rebuilt
152
+ * incrementally as each effect runs: `observe_summary` / `observe_view`
153
+ * populate fields the next `decidePr` call consults; pure cache mutations
154
+ * fold straight into the next iteration's `cache` snapshot. The cap is a
155
+ * defensive guard — decide reduces work on every iteration (a `_resolved`
156
+ * flag flips, or an outcome lands) so it terminates well inside the bound.
157
+ */
158
+ async processIntent(intent) {
159
+ let obs = this.buildObservation(intent);
160
+ for (let i = 0; i < 12; i += 1) {
161
+ const effects = decidePr(obs);
162
+ if (effects.length === 0)
163
+ return;
164
+ for (const eff of effects) {
165
+ obs = await this.applyEffect(eff, obs);
166
+ }
167
+ }
168
+ log.warn('pr reconcile: decide loop iteration cap reached', {
169
+ identifier: intent.identifier,
170
+ });
171
+ }
172
+ buildObservation(intent) {
173
+ const st = this.getOrInit(intent.identifier);
174
+ return {
175
+ intent,
176
+ cache: this.cacheView(st),
177
+ summaryResolved: false,
178
+ summary: null,
179
+ viewResolved: false,
180
+ view: null,
181
+ closeAttempted: false,
182
+ closeOutcome: null,
183
+ halt: false,
184
+ config: {
185
+ strategy: this.opts.strategy,
186
+ conflictRouteTo: this.opts.conflictRouteTo,
187
+ },
188
+ };
189
+ }
190
+ cacheView(st) {
191
+ return {
192
+ completed: st.completed,
193
+ armed: st.armed,
194
+ lastObservedHeadSha: st.lastObservedHeadSha,
195
+ };
196
+ }
197
+ static EMPTY_CACHE = {
198
+ completed: false,
199
+ armed: false,
200
+ lastObservedHeadSha: null,
201
+ };
202
+ /**
203
+ * Apply one effect from `decidePr`. IO effects route through the existing
204
+ * ledger-wrapped port helpers; cache mutations land on the live
205
+ * `PerIssueState` and the returned observation reflects the new cache view
206
+ * so the next `decidePr` call sees the change.
207
+ */
208
+ async applyEffect(eff, obs) {
209
+ switch (eff.kind) {
210
+ case 'observe_summary': {
211
+ const st = this.getOrInit(eff.identifier);
212
+ const summary = await this.lookupPrSummary(obs.intent, st);
213
+ return { ...obs, summaryResolved: true, summary, cache: this.cacheView(st) };
214
+ }
215
+ case 'observe_view': {
216
+ const st = this.getOrInit(eff.identifier);
217
+ const view = await this.fetchPrView(eff.identifier, eff.prNumber, st);
218
+ return { ...obs, viewResolved: true, view, cache: this.cacheView(st) };
219
+ }
220
+ case 'arm_auto_merge': {
221
+ await this.runArmAutoMerge(eff.identifier, eff.prNumber, eff.strategy);
222
+ const st = this.getOrInit(eff.identifier);
223
+ st.armed = true;
224
+ return { ...obs, cache: this.cacheView(st) };
225
+ }
226
+ case 'update_branch': {
227
+ await this.runUpdateBranch(eff.identifier, eff.prNumber);
228
+ // Halt the pass: the cached view still reads BEHIND so re-deciding
229
+ // would re-emit the effect every iteration. The per-PR poll TTL
230
+ // throttles the next `view()` call, by which point gh has refreshed
231
+ // mergeStateStatus (or the head_ref_oid moved). See issue 105.
232
+ return { ...obs, halt: true };
233
+ }
234
+ case 'close_pr': {
235
+ const ok = await this.runClosePr(eff.identifier, eff.prNumber);
236
+ return { ...obs, closeAttempted: true, closeOutcome: { ok } };
237
+ }
238
+ case 'delete_remote_branch': {
239
+ await this.runDeleteRemoteBranch(eff.identifier, eff.branch);
240
+ return obs;
241
+ }
242
+ case 'cleanup_workspace': {
243
+ await this.runCleanupWorkspace(eff.identifier);
244
+ return obs;
245
+ }
246
+ case 'route_conflict': {
247
+ await this.runConflictTransition(eff);
248
+ return { ...obs, halt: true };
249
+ }
250
+ case 'update_observed_head': {
251
+ const st = this.getOrInit(eff.identifier);
252
+ st.lastObservedHeadSha = eff.sha;
253
+ return { ...obs, cache: this.cacheView(st) };
254
+ }
255
+ case 'mark_completed': {
256
+ const st = this.getOrInit(eff.identifier);
257
+ st.completed = true;
258
+ return { ...obs, cache: this.cacheView(st) };
259
+ }
260
+ case 'reset_transient': {
261
+ const st = this.state.get(eff.identifier);
262
+ if (st)
263
+ this.resetTransient(st);
264
+ // Always paired with route_conflict; terminal for this pass.
265
+ return {
266
+ ...obs,
267
+ cache: st ? this.cacheView(st) : PrResource.EMPTY_CACHE,
268
+ halt: true,
269
+ };
270
+ }
271
+ }
272
+ }
273
+ // ─── helpers: per-action wrappers with ledger + cache plumbing ──────────
274
+ async lookupPrSummary(intent, st) {
275
+ // Sticky cache once we have a number: PR numbers don't change, and the
276
+ // PR moving to MERGED/CLOSED must not cause us to "forget" it — that
277
+ // would skip the terminal observation the autopilot needs to drive
278
+ // cleanup. Re-listing is restricted to the never-found-yet / still-null
279
+ // paths below.
280
+ if (st.prSummary)
281
+ return st.prSummary;
282
+ const now = this.now();
283
+ if (st.prSummary === null &&
284
+ now - st.lastLookupAt < this.opts.pollIntervalMs) {
285
+ // Still in the null-result TTL window: defer instead of re-querying.
286
+ return null;
287
+ }
288
+ const actionKey = `list_pr_for_branch:${intent.identifier}`;
289
+ this.ledger.start(actionKey);
290
+ try {
291
+ const result = await this.opts.pr.listForBranch(intent.branch);
292
+ st.prSummary = result;
293
+ st.lastLookupAt = now;
294
+ this.ledger.done(actionKey);
295
+ return result;
296
+ }
297
+ catch (err) {
298
+ const msg = err.message;
299
+ this.lastError = `list_pr_failed: ${msg}`;
300
+ this.ledger.error(actionKey, msg);
301
+ return null;
302
+ }
303
+ }
304
+ async fetchPrView(identifier, prNumber, st) {
305
+ const now = this.now();
306
+ if (st.prView !== null && now - st.lastViewAt < this.opts.pollIntervalMs) {
307
+ return st.prView;
308
+ }
309
+ const actionKey = `view_pr:${prNumber}`;
310
+ this.ledger.start(actionKey);
311
+ try {
312
+ const view = await this.opts.pr.view(prNumber);
313
+ st.prView = view;
314
+ st.lastViewAt = now;
315
+ st.lastObservedHeadSha = view.head_ref_oid;
316
+ st.armed = view.auto_merge_armed;
317
+ this.ledger.done(actionKey);
318
+ return view;
319
+ }
320
+ catch (err) {
321
+ const msg = err.message;
322
+ this.lastError = `view_pr_failed: ${msg}`;
323
+ this.ledger.error(actionKey, msg);
324
+ log.warn('pr reconcile: view failed', {
325
+ identifier,
326
+ pr_number: prNumber,
327
+ error: msg,
328
+ });
329
+ return null;
330
+ }
331
+ }
332
+ async runArmAutoMerge(identifier, prNumber, strategy) {
333
+ const actionKey = `arm_auto_merge:${prNumber}`;
334
+ const res = await this.ledger.run(actionKey, () => this.opts.pr.armAutoMerge(prNumber, strategy));
335
+ if (res.ok) {
336
+ log.info('pr reconcile: armed auto-merge', {
337
+ identifier,
338
+ pr_number: prNumber,
339
+ strategy,
340
+ });
341
+ }
342
+ else {
343
+ this.lastError = res.error;
344
+ }
345
+ }
346
+ async runUpdateBranch(identifier, prNumber) {
347
+ const actionKey = `update_branch:${prNumber}`;
348
+ const res = await this.ledger.run(actionKey, () => this.opts.pr.updateBranch(prNumber));
349
+ if (res.ok) {
350
+ log.info('pr reconcile: updated branch onto base', {
351
+ identifier,
352
+ pr_number: prNumber,
353
+ });
354
+ }
355
+ else {
356
+ this.lastError = res.error;
357
+ }
358
+ }
359
+ async runClosePr(identifier, prNumber) {
360
+ const actionKey = `close_pr:${prNumber}`;
361
+ const res = await this.ledger.run(actionKey, () => this.opts.pr.closePr(prNumber));
362
+ if (res.ok) {
363
+ log.info('pr reconcile: closed pr', { identifier, pr_number: prNumber });
364
+ return true;
365
+ }
366
+ this.lastError = res.error;
367
+ return false;
368
+ }
369
+ async runDeleteRemoteBranch(identifier, branch) {
370
+ const actionKey = `delete_remote_branch:${branch}`;
371
+ const res = await this.ledger.run(actionKey, () => this.opts.pr.deleteRemoteBranch(branch));
372
+ if (!res.ok) {
373
+ // Remote-branch deletion is best-effort — the branch may already be
374
+ // gone (gh exits non-zero), or the operator may have removed it. We
375
+ // log at info, surface in last_error, and move on.
376
+ this.lastError = `delete_remote_branch_failed: ${res.error}`;
377
+ log.info('pr reconcile: remote branch delete failed (best-effort)', {
378
+ identifier,
379
+ branch,
380
+ error: res.error,
381
+ });
382
+ }
383
+ }
384
+ async runCleanupWorkspace(identifier) {
385
+ const actionKey = `cleanup_workspace:${identifier}`;
386
+ const res = await this.ledger.run(actionKey, () => this.opts.cleanup.removeWorkspace(identifier));
387
+ if (!res.ok)
388
+ this.lastError = res.error;
389
+ }
390
+ /**
391
+ * Apply the `route_conflict` effect: same tracker.routeIssue call shape and
392
+ * action-ledger key as before. State cleanup (`reset_transient`) rides as
393
+ * a separate effect emitted by `decidePr` so the routing logic is testable
394
+ * as pure data.
395
+ */
396
+ async runConflictTransition(eff) {
397
+ const actionKey = `route_to_conflict:${eff.identifier}:${eff.toState.toLowerCase()}`;
398
+ const res = await this.ledger.run(actionKey, () => this.opts.transition.routeIssue({
399
+ identifier: eff.identifier,
400
+ fromState: eff.fromState,
401
+ toState: eff.toState,
402
+ notes: eff.notes,
403
+ actor: this.actor,
404
+ }));
405
+ if (res.ok) {
406
+ log.info('pr reconcile: routed to implementing state', {
407
+ identifier: eff.identifier,
408
+ from_state: eff.fromState,
409
+ to_state: eff.toState,
410
+ });
411
+ }
412
+ else {
413
+ this.lastError = res.error;
414
+ log.warn('pr reconcile: conflict route failed', {
415
+ identifier: eff.identifier,
416
+ to_state: eff.toState,
417
+ error: res.error,
418
+ });
419
+ }
420
+ }
421
+ }
422
+ //# sourceMappingURL=pr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../src/reconciler/pr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ // Reconciler types (issue 32 / future issue 31).
2
+ //
3
+ // The reconciler converges managed external resources (VM reaper, workspace
4
+ // janitor, PR autopilot) toward a declared desired state. Each resource
5
+ // describes its work as typed action records — not opaque closures — so
6
+ // per-action progress can be surfaced on Snapshot and the same record shape
7
+ // can be reused for hook-declared actions.
8
+ //
9
+ // Action records carry a discriminant `kind`; new kinds are added as more
10
+ // resources land in later stages of the reconciler refactor.
11
+ export {};
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/reconciler/types.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,4EAA4E;AAC5E,wEAAwE;AACxE,wEAAwE;AACxE,4EAA4E;AAC5E,2CAA2C;AAC3C,EAAE;AACF,0EAA0E;AAC1E,6DAA6D"}