ghostrail 0.17.1 → 0.20.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 (119) hide show
  1. package/README.md +29 -0
  2. package/dist/agent/claude-code.d.ts +18 -1
  3. package/dist/agent/claude-code.d.ts.map +1 -1
  4. package/dist/agent/claude-code.js +36 -4
  5. package/dist/agent/claude-code.js.map +1 -1
  6. package/dist/board/page.d.ts.map +1 -1
  7. package/dist/board/page.js +44 -10
  8. package/dist/board/page.js.map +1 -1
  9. package/dist/cli/commands.d.ts +12 -7
  10. package/dist/cli/commands.d.ts.map +1 -1
  11. package/dist/cli/commands.js +261 -43
  12. package/dist/cli/commands.js.map +1 -1
  13. package/dist/commands/help.d.ts.map +1 -1
  14. package/dist/commands/help.js +5 -3
  15. package/dist/commands/help.js.map +1 -1
  16. package/dist/config/load.d.ts.map +1 -1
  17. package/dist/config/load.js +20 -3
  18. package/dist/config/load.js.map +1 -1
  19. package/dist/config/schema.d.ts +57 -0
  20. package/dist/config/schema.d.ts.map +1 -1
  21. package/dist/config/schema.js +19 -0
  22. package/dist/config/schema.js.map +1 -1
  23. package/dist/dashboard/index.d.ts +3 -2
  24. package/dist/dashboard/index.d.ts.map +1 -1
  25. package/dist/dashboard/index.js +3 -2
  26. package/dist/dashboard/index.js.map +1 -1
  27. package/dist/dashboard/page.d.ts.map +1 -1
  28. package/dist/dashboard/page.js +64 -10
  29. package/dist/dashboard/page.js.map +1 -1
  30. package/dist/dashboard/review-page.d.ts +14 -0
  31. package/dist/dashboard/review-page.d.ts.map +1 -0
  32. package/dist/dashboard/review-page.js +256 -0
  33. package/dist/dashboard/review-page.js.map +1 -0
  34. package/dist/dashboard/routes.d.ts +18 -0
  35. package/dist/dashboard/routes.d.ts.map +1 -1
  36. package/dist/dashboard/routes.js +24 -0
  37. package/dist/dashboard/routes.js.map +1 -1
  38. package/dist/dashboard/server.d.ts +19 -0
  39. package/dist/dashboard/server.d.ts.map +1 -1
  40. package/dist/dashboard/server.js +71 -1
  41. package/dist/dashboard/server.js.map +1 -1
  42. package/dist/doctor/checks.d.ts +21 -0
  43. package/dist/doctor/checks.d.ts.map +1 -1
  44. package/dist/doctor/checks.js +44 -0
  45. package/dist/doctor/checks.js.map +1 -1
  46. package/dist/doctor/probes.d.ts +15 -0
  47. package/dist/doctor/probes.d.ts.map +1 -1
  48. package/dist/doctor/probes.js +33 -0
  49. package/dist/doctor/probes.js.map +1 -1
  50. package/dist/doctor/run.d.ts +2 -1
  51. package/dist/doctor/run.d.ts.map +1 -1
  52. package/dist/doctor/run.js +25 -2
  53. package/dist/doctor/run.js.map +1 -1
  54. package/dist/factory/build.d.ts +6 -0
  55. package/dist/factory/build.d.ts.map +1 -1
  56. package/dist/factory/build.js +17 -4
  57. package/dist/factory/build.js.map +1 -1
  58. package/dist/global/tempdir.d.ts +19 -0
  59. package/dist/global/tempdir.d.ts.map +1 -0
  60. package/dist/global/tempdir.js +47 -0
  61. package/dist/global/tempdir.js.map +1 -0
  62. package/dist/init/greenroom.d.ts +18 -0
  63. package/dist/init/greenroom.d.ts.map +1 -0
  64. package/dist/init/greenroom.js +24 -0
  65. package/dist/init/greenroom.js.map +1 -0
  66. package/dist/loop/engine.d.ts +10 -1
  67. package/dist/loop/engine.d.ts.map +1 -1
  68. package/dist/loop/engine.js +116 -18
  69. package/dist/loop/engine.js.map +1 -1
  70. package/dist/loop/index.d.ts +1 -0
  71. package/dist/loop/index.d.ts.map +1 -1
  72. package/dist/loop/index.js +1 -0
  73. package/dist/loop/index.js.map +1 -1
  74. package/dist/loop/ports.d.ts +7 -0
  75. package/dist/loop/ports.d.ts.map +1 -1
  76. package/dist/loop/record.d.ts +6 -1
  77. package/dist/loop/record.d.ts.map +1 -1
  78. package/dist/loop/retry.d.ts +50 -0
  79. package/dist/loop/retry.d.ts.map +1 -0
  80. package/dist/loop/retry.js +77 -0
  81. package/dist/loop/retry.js.map +1 -0
  82. package/dist/loop/schedule.d.ts +33 -0
  83. package/dist/loop/schedule.d.ts.map +1 -0
  84. package/dist/loop/schedule.js +28 -0
  85. package/dist/loop/schedule.js.map +1 -0
  86. package/dist/respond/authors.d.ts +38 -0
  87. package/dist/respond/authors.d.ts.map +1 -0
  88. package/dist/respond/authors.js +50 -0
  89. package/dist/respond/authors.js.map +1 -0
  90. package/dist/respond/merge.d.ts.map +1 -1
  91. package/dist/respond/merge.js +47 -0
  92. package/dist/respond/merge.js.map +1 -1
  93. package/dist/respond/respond.d.ts +10 -0
  94. package/dist/respond/respond.d.ts.map +1 -1
  95. package/dist/respond/respond.js +62 -5
  96. package/dist/respond/respond.js.map +1 -1
  97. package/dist/respond/run-id.d.ts +17 -0
  98. package/dist/respond/run-id.d.ts.map +1 -0
  99. package/dist/respond/run-id.js +23 -0
  100. package/dist/respond/run-id.js.map +1 -0
  101. package/dist/respond/run-row.d.ts +24 -0
  102. package/dist/respond/run-row.d.ts.map +1 -0
  103. package/dist/respond/run-row.js +28 -0
  104. package/dist/respond/run-row.js.map +1 -0
  105. package/dist/store/events.d.ts +25 -0
  106. package/dist/store/events.d.ts.map +1 -1
  107. package/dist/store/events.js +30 -3
  108. package/dist/store/events.js.map +1 -1
  109. package/dist/store/index.d.ts +1 -1
  110. package/dist/store/index.d.ts.map +1 -1
  111. package/dist/store/index.js +1 -1
  112. package/dist/store/index.js.map +1 -1
  113. package/dist/triage/engine.d.ts +14 -0
  114. package/dist/triage/engine.d.ts.map +1 -1
  115. package/dist/triage/engine.js +73 -3
  116. package/dist/triage/engine.js.map +1 -1
  117. package/package.json +1 -1
  118. package/templates/code/ghostrail.toml +4 -0
  119. package/templates/content/ghostrail.toml +4 -0
@@ -98,6 +98,13 @@ export type AgentOutcome = AgentSpend & ({
98
98
  } | {
99
99
  status: "failed";
100
100
  error: string;
101
+ /**
102
+ * Set true when the failure looks like flakiness rather than a wrong
103
+ * change (a provisioning error, a timeout) — worth a cheaper retry
104
+ * allowance than a red gate or an agent-reported failure. Absent (the
105
+ * default) is treated as not transient. See `loop/retry.ts`.
106
+ */
107
+ transient?: boolean;
101
108
  } | {
102
109
  status: "noop";
103
110
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/loop/ports.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/loop/ports.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { FailureKind } from "../store/events.js";
1
2
  import type { GateResult } from "./ports.js";
2
3
  /**
3
4
  * Terminal state of a single item's run.
@@ -6,8 +7,10 @@ import type { GateResult } from "./ports.js";
6
7
  * - `failed` — the agent failed, the gate went red, or an error was thrown.
7
8
  * - `noop` — the agent made no change.
8
9
  * - `skipped` — the claim was lost to another run; nothing was done.
10
+ * - `abandoned` — too many prior failures (see `loop/retry.ts`); the item was
11
+ * not retried and was handed to a human instead of the agent running again.
9
12
  */
10
- export type RunState = "done" | "blocked" | "failed" | "noop" | "skipped";
13
+ export type RunState = "done" | "blocked" | "failed" | "noop" | "skipped" | "abandoned";
11
14
  /** What happened to one work item during a tick. */
12
15
  export interface RunResult {
13
16
  itemId: string;
@@ -16,6 +19,8 @@ export interface RunResult {
16
19
  gate?: GateResult;
17
20
  summary?: string;
18
21
  error?: string;
22
+ /** Set only when `state` is "failed"; see {@link FailureKind}. */
23
+ failureKind?: FailureKind;
19
24
  }
20
25
  /** The result of a whole tick. */
21
26
  export interface TickResult {
@@ -1 +1 @@
1
- {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/loop/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAE1E,oDAAoD;AACpD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB"}
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/loop/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;;GASG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;AAExF,oDAAoD;AACpD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB"}
@@ -0,0 +1,50 @@
1
+ import { type Guardrails } from "../config/schema.js";
2
+ import type { RunRow } from "../store/events.js";
3
+ /**
4
+ * Deciding whether a failing item is claimed again this tick, made to wait, or
5
+ * given up on — read at discovery time from the run history the store already
6
+ * keeps, so no new bookkeeping is needed. See specs/failing-item-backoff.spec.md.
7
+ */
8
+ export interface ResolvedRetryGuardrails {
9
+ maxFailures: number;
10
+ maxTransientFailures: number;
11
+ backoffBaseMs: number;
12
+ backoffCapMs: number;
13
+ }
14
+ /** Fill in the retry guardrails, falling back to the documented defaults for any unset field. */
15
+ export declare function resolveRetryGuardrails(guardrails: Guardrails): ResolvedRetryGuardrails;
16
+ export type RetryAction = "ready" | "waiting" | "giveUp";
17
+ export interface RetryDecision {
18
+ action: RetryAction;
19
+ persistentFailures: number;
20
+ transientFailures: number;
21
+ /** Only set when `action` is "waiting": the epoch-ms this item becomes eligible again. */
22
+ nextAttemptAt?: number;
23
+ }
24
+ /**
25
+ * An item's run rows, most-recent-first, up to but not including the first row
26
+ * whose state is not "failed". A row with no state (e.g. a crash mid-run, never
27
+ * folded an outcome) also ends the streak: unknown is not a counted failure.
28
+ */
29
+ export declare function failureStreak(rows: readonly RunRow[]): RunRow[];
30
+ /** Exponential backoff for a 1-based attempt count: `baseMs * 2^(attempt - 1)`, capped at `capMs`. */
31
+ export declare function backoffMs(attempt: number, baseMs: number, capMs: number): number;
32
+ /**
33
+ * Whether an item with this run history should be claimed now ("ready"), made
34
+ * to wait out a widening backoff ("waiting"), or given up on ("giveUp").
35
+ *
36
+ * Persistent and transient failures are counted separately (each against its
37
+ * own allowance in `guardrails`), so a run of transient flakes cannot spend
38
+ * down the allowance a genuine dead end needs, and a genuine dead end cannot
39
+ * hide behind a transient-failure allowance meant for flakes. Give-up wins
40
+ * over backoff: once either allowance is exhausted, `nextAttemptAt` no longer
41
+ * matters.
42
+ *
43
+ * The streak (and so the counts) resets at the first non-"failed" row, so an
44
+ * item that fails and then succeeds — or that a human sends back into the
45
+ * pool after a give-up — starts counting from zero again.
46
+ */
47
+ export declare function decideRetry(rows: readonly RunRow[], now: number, guardrails: ResolvedRetryGuardrails): RetryDecision;
48
+ /** The tracker comment explaining a give-up, naming what was exhausted. */
49
+ export declare function giveUpReason(decision: RetryDecision, guardrails: ResolvedRetryGuardrails): string;
50
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/loop/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;GAIG;AAEH,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,iGAAiG;AACjG,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,UAAU,GAAG,uBAAuB,CAOtF;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0FAA0F;IAC1F,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAU/D;AAED,sGAAsG;AACtG,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,uBAAuB,GAClC,aAAa,CAsBf;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,uBAAuB,GAAG,MAAM,CAUjG"}
@@ -0,0 +1,77 @@
1
+ import { DEFAULT_MAX_FAILURES, DEFAULT_MAX_TRANSIENT_FAILURES, DEFAULT_RETRY_BACKOFF_CAP_MS, DEFAULT_RETRY_BACKOFF_MS, } from "../config/schema.js";
2
+ /** Fill in the retry guardrails, falling back to the documented defaults for any unset field. */
3
+ export function resolveRetryGuardrails(guardrails) {
4
+ return {
5
+ maxFailures: guardrails.maxFailures ?? DEFAULT_MAX_FAILURES,
6
+ maxTransientFailures: guardrails.maxTransientFailures ?? DEFAULT_MAX_TRANSIENT_FAILURES,
7
+ backoffBaseMs: guardrails.retryBackoffMs ?? DEFAULT_RETRY_BACKOFF_MS,
8
+ backoffCapMs: guardrails.retryBackoffCapMs ?? DEFAULT_RETRY_BACKOFF_CAP_MS,
9
+ };
10
+ }
11
+ /**
12
+ * An item's run rows, most-recent-first, up to but not including the first row
13
+ * whose state is not "failed". A row with no state (e.g. a crash mid-run, never
14
+ * folded an outcome) also ends the streak: unknown is not a counted failure.
15
+ */
16
+ export function failureStreak(rows) {
17
+ const sorted = [...rows].sort((a, b) => (b.finishedAt ?? b.startedAt ?? 0) - (a.finishedAt ?? a.startedAt ?? 0));
18
+ const streak = [];
19
+ for (const row of sorted) {
20
+ if (row.state !== "failed")
21
+ break;
22
+ streak.push(row);
23
+ }
24
+ return streak;
25
+ }
26
+ /** Exponential backoff for a 1-based attempt count: `baseMs * 2^(attempt - 1)`, capped at `capMs`. */
27
+ export function backoffMs(attempt, baseMs, capMs) {
28
+ if (attempt <= 0)
29
+ return 0;
30
+ return Math.min(capMs, baseMs * 2 ** (attempt - 1));
31
+ }
32
+ /**
33
+ * Whether an item with this run history should be claimed now ("ready"), made
34
+ * to wait out a widening backoff ("waiting"), or given up on ("giveUp").
35
+ *
36
+ * Persistent and transient failures are counted separately (each against its
37
+ * own allowance in `guardrails`), so a run of transient flakes cannot spend
38
+ * down the allowance a genuine dead end needs, and a genuine dead end cannot
39
+ * hide behind a transient-failure allowance meant for flakes. Give-up wins
40
+ * over backoff: once either allowance is exhausted, `nextAttemptAt` no longer
41
+ * matters.
42
+ *
43
+ * The streak (and so the counts) resets at the first non-"failed" row, so an
44
+ * item that fails and then succeeds — or that a human sends back into the
45
+ * pool after a give-up — starts counting from zero again.
46
+ */
47
+ export function decideRetry(rows, now, guardrails) {
48
+ const streak = failureStreak(rows);
49
+ const persistentFailures = streak.filter((row) => row.failureKind !== "transient").length;
50
+ const transientFailures = streak.length - persistentFailures;
51
+ if (persistentFailures >= guardrails.maxFailures ||
52
+ transientFailures >= guardrails.maxTransientFailures) {
53
+ return { action: "giveUp", persistentFailures, transientFailures };
54
+ }
55
+ const mostRecent = streak[0];
56
+ if (mostRecent === undefined) {
57
+ return { action: "ready", persistentFailures, transientFailures };
58
+ }
59
+ const since = mostRecent.finishedAt ?? mostRecent.startedAt ?? now;
60
+ const nextAttemptAt = since + backoffMs(streak.length, guardrails.backoffBaseMs, guardrails.backoffCapMs);
61
+ return nextAttemptAt <= now
62
+ ? { action: "ready", persistentFailures, transientFailures }
63
+ : { action: "waiting", persistentFailures, transientFailures, nextAttemptAt };
64
+ }
65
+ /** The tracker comment explaining a give-up, naming what was exhausted. */
66
+ export function giveUpReason(decision, guardrails) {
67
+ const parts = [];
68
+ if (decision.persistentFailures >= guardrails.maxFailures) {
69
+ parts.push(`${decision.persistentFailures} failed run(s)`);
70
+ }
71
+ if (decision.transientFailures >= guardrails.maxTransientFailures) {
72
+ parts.push(`${decision.transientFailures} transient (provisioning/timeout) failure(s)`);
73
+ }
74
+ const tally = parts.length > 0 ? parts.join(" and ") : "too many failed attempts";
75
+ return `The factory gave up on this item after ${tally} and will not retry it automatically. A human needs to look at it.`;
76
+ }
77
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/loop/retry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Which passes a `watch` tick should run. Pure, so the rule is testable
3
+ * without a clock, a tracker, or a daemon. See specs/watch-all-passes.spec.md.
4
+ */
5
+ /** The passes `watch` can run, in the order a tick runs them. */
6
+ export declare const PASS_ORDER: readonly ["fix", "respond", "triage"];
7
+ export type PassName = (typeof PASS_ORDER)[number];
8
+ /** A schedulable pass's interval, in ms. Absent means the pass is not scheduled. */
9
+ export interface PassIntervals {
10
+ respond?: number;
11
+ triage?: number;
12
+ }
13
+ /** When each pass last finished, in epoch millis. Absent means it has never run. */
14
+ export interface PassLastRun {
15
+ respond?: number;
16
+ triage?: number;
17
+ }
18
+ export interface DuePassesInput {
19
+ now: number;
20
+ intervals: PassIntervals;
21
+ lastRunAt: PassLastRun;
22
+ }
23
+ /**
24
+ * The passes due on this tick, in `PASS_ORDER`.
25
+ *
26
+ * `fix` is always due: it runs every base tick, which is what `--interval` has
27
+ * always meant and what `watch` did before it ran anything else. A pass with no
28
+ * interval is never due (its config section is absent, or its `every` is
29
+ * `"off"`). A pass that has never run is due now, so starting `watch` picks up
30
+ * work left while the machine was off instead of waiting out one interval.
31
+ */
32
+ export declare function duePasses(input: DuePassesInput): PassName[];
33
+ //# sourceMappingURL=schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/loop/schedule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,eAAO,MAAM,UAAU,uCAAwC,CAAC;AAChE,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,oFAAoF;AACpF,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,aAAa,CAAC;IACzB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,QAAQ,EAAE,CAS3D"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Which passes a `watch` tick should run. Pure, so the rule is testable
3
+ * without a clock, a tracker, or a daemon. See specs/watch-all-passes.spec.md.
4
+ */
5
+ /** The passes `watch` can run, in the order a tick runs them. */
6
+ export const PASS_ORDER = ["fix", "respond", "triage"];
7
+ /**
8
+ * The passes due on this tick, in `PASS_ORDER`.
9
+ *
10
+ * `fix` is always due: it runs every base tick, which is what `--interval` has
11
+ * always meant and what `watch` did before it ran anything else. A pass with no
12
+ * interval is never due (its config section is absent, or its `every` is
13
+ * `"off"`). A pass that has never run is due now, so starting `watch` picks up
14
+ * work left while the machine was off instead of waiting out one interval.
15
+ */
16
+ export function duePasses(input) {
17
+ const due = ["fix"];
18
+ for (const pass of ["respond", "triage"]) {
19
+ const interval = input.intervals[pass];
20
+ if (interval === undefined)
21
+ continue;
22
+ const last = input.lastRunAt[pass];
23
+ if (last === undefined || input.now - last >= interval)
24
+ due.push(pass);
25
+ }
26
+ return due;
27
+ }
28
+ //# sourceMappingURL=schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/loop/schedule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAC;AAqBhE;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,GAAG,GAAe,CAAC,KAAK,CAAC,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,QAAQ,KAAK,SAAS;YAAE,SAAS;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { SourceKind } from "../config/schema.js";
2
+ /**
3
+ * Comment authors the respond pass ignores by default, per source kind.
4
+ *
5
+ * A Linear-backed factory always has the Linear GitHub integration posting a
6
+ * linkback comment on every PR it opens, and that comment's body is the
7
+ * issue's own description. Without this it reads as fresh human feedback and
8
+ * the agent is handed the issue description as a review, once per open PR, on
9
+ * the first respond pass. Nothing about that is opt-in, so neither is the
10
+ * default (see specs/respond-comment-filtering.spec.md).
11
+ */
12
+ export declare const BUILT_IN_IGNORED_AUTHORS: Partial<Record<SourceKind, readonly string[]>>;
13
+ /** Split a comma-separated author list: trimmed, empties dropped. */
14
+ export declare function parseAuthorList(value: string | undefined): string[];
15
+ export interface IgnoredAuthorsInput {
16
+ /** The configured source kind, which decides the built-in defaults. */
17
+ sourceKind?: SourceKind;
18
+ /** `[respond].ignore_authors` from the config. */
19
+ configured?: readonly string[];
20
+ /** Raw `GHOSTRAIL_SELF_LOGINS` value, comma-separated. */
21
+ env?: string;
22
+ }
23
+ /**
24
+ * The author logins the respond pass ignores: the union of the source kind's
25
+ * built-in defaults, `[respond].ignore_authors`, and `GHOSTRAIL_SELF_LOGINS`,
26
+ * in that order.
27
+ *
28
+ * Union rather than override, so no source can un-ignore what another added.
29
+ * The one entry that matters most (`linear`) is the one nobody should have to
30
+ * know about, and a comment that is a copy of the issue description is never
31
+ * the review feedback the pass exists to act on.
32
+ *
33
+ * Entries are trimmed, lowercased, and deduped, preserving first-seen order.
34
+ * `selectNewComments` already matches case-insensitively; lowercasing here is
35
+ * what makes the dedupe agree with that match.
36
+ */
37
+ export declare function resolveIgnoredAuthors(input: IgnoredAuthorsInput): string[];
38
+ //# sourceMappingURL=authors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authors.d.ts","sourceRoot":"","sources":["../../src/respond/authors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC,CAEnF,CAAC;AAEF,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAMnE;AAED,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kDAAkD;IAClD,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAY1E"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Comment authors the respond pass ignores by default, per source kind.
3
+ *
4
+ * A Linear-backed factory always has the Linear GitHub integration posting a
5
+ * linkback comment on every PR it opens, and that comment's body is the
6
+ * issue's own description. Without this it reads as fresh human feedback and
7
+ * the agent is handed the issue description as a review, once per open PR, on
8
+ * the first respond pass. Nothing about that is opt-in, so neither is the
9
+ * default (see specs/respond-comment-filtering.spec.md).
10
+ */
11
+ export const BUILT_IN_IGNORED_AUTHORS = {
12
+ linear: ["linear"],
13
+ };
14
+ /** Split a comma-separated author list: trimmed, empties dropped. */
15
+ export function parseAuthorList(value) {
16
+ if (value === undefined)
17
+ return [];
18
+ return value
19
+ .split(",")
20
+ .map((author) => author.trim())
21
+ .filter((author) => author.length > 0);
22
+ }
23
+ /**
24
+ * The author logins the respond pass ignores: the union of the source kind's
25
+ * built-in defaults, `[respond].ignore_authors`, and `GHOSTRAIL_SELF_LOGINS`,
26
+ * in that order.
27
+ *
28
+ * Union rather than override, so no source can un-ignore what another added.
29
+ * The one entry that matters most (`linear`) is the one nobody should have to
30
+ * know about, and a comment that is a copy of the issue description is never
31
+ * the review feedback the pass exists to act on.
32
+ *
33
+ * Entries are trimmed, lowercased, and deduped, preserving first-seen order.
34
+ * `selectNewComments` already matches case-insensitively; lowercasing here is
35
+ * what makes the dedupe agree with that match.
36
+ */
37
+ export function resolveIgnoredAuthors(input) {
38
+ const builtIn = input.sourceKind === undefined ? [] : (BUILT_IN_IGNORED_AUTHORS[input.sourceKind] ?? []);
39
+ const seen = new Set();
40
+ const authors = [];
41
+ for (const raw of [...builtIn, ...(input.configured ?? []), ...parseAuthorList(input.env)]) {
42
+ const author = raw.trim().toLowerCase();
43
+ if (author.length === 0 || seen.has(author))
44
+ continue;
45
+ seen.add(author);
46
+ authors.push(author);
47
+ }
48
+ return authors;
49
+ }
50
+ //# sourceMappingURL=authors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authors.js","sourceRoot":"","sources":["../../src/respond/authors.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAmD;IACtF,MAAM,EAAE,CAAC,QAAQ,CAAC;CACnB,CAAC;AAEF,qEAAqE;AACrE,MAAM,UAAU,eAAe,CAAC,KAAyB;IACvD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SAC9B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC;AAWD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAA0B;IAC9D,MAAM,OAAO,GACX,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC3F,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS;QACtD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/respond/merge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAgB,MAAM,EAAY,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,aAAa,EAGnB,MAAM,cAAc,CAAC;AAGtB;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAK3D;AAED,kGAAkG;AAClG,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAa9F;AAiFD,iGAAiG;AACjG,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,CAAC,CAQxB"}
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/respond/merge.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgB,MAAM,EAAY,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,aAAa,EAGnB,MAAM,cAAc,CAAC;AAItB;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAK3D;AAED,kGAAkG;AAClG,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAa9F;AAiFD,iGAAiG;AACjG,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,CAAC,CAQxB"}
@@ -1,5 +1,8 @@
1
+ import { randomUUID } from "node:crypto";
1
2
  import { writeWorkspaceFile } from "../backend/fs.js";
3
+ import { emitEvent } from "../store/events.js";
2
4
  import { FEEDBACK_PATH, commitAndPush, markedComment, } from "./respond.js";
5
+ import { findExistingRunId } from "./run-id.js";
3
6
  import { latestTimestamp } from "./select.js";
4
7
  /**
5
8
  * Parse `git diff --name-only --diff-filter=U` output into the paths still
@@ -88,8 +91,33 @@ export async function resolveConflictsAndMergeSafely(deps, config, pr, fresh, lo
88
91
  }
89
92
  }
90
93
  async function resolveConflictsAndMerge(deps, config, pr, fresh, logger) {
94
+ // This is a respond pass like any other: it provisions a workspace and runs
95
+ // an agent, so it belongs on the board and the dashboard while it runs and
96
+ // once it lands (TJ-1653). Like the comment-answering pass it continues the
97
+ // row the item already has rather than opening one beside it (TJ-1665):
98
+ // resolving conflicts and merging is the last thing that happens to that
99
+ // item, not a separate item.
100
+ const existingRunId = await findExistingRunId(deps, pr, logger);
101
+ const runId = existingRunId ?? randomUUID();
91
102
  let workspace;
92
103
  try {
104
+ if (existingRunId === undefined) {
105
+ await emitEvent(deps.events, {
106
+ type: "claimed",
107
+ runId,
108
+ ts: Date.now(),
109
+ itemId: `PR-${pr.number}-merge`,
110
+ title: `resolve conflicts with ${deps.baseBranch} for PR #${pr.number}`,
111
+ url: pr.url,
112
+ });
113
+ await emitEvent(deps.events, {
114
+ type: "pr_opened",
115
+ runId,
116
+ ts: Date.now(),
117
+ prNumber: pr.number,
118
+ prUrl: pr.url,
119
+ });
120
+ }
93
121
  workspace = await deps.backend.provision({
94
122
  repoPath: deps.repoPath,
95
123
  baseBranch: pr.headBranch,
@@ -98,6 +126,18 @@ async function resolveConflictsAndMerge(deps, config, pr, fresh, logger) {
98
126
  ...(deps.claudeProfileDir === undefined ? {} : { profileDir: deps.claudeProfileDir }),
99
127
  });
100
128
  const result = await runMerge(deps, config, pr, workspace, logger);
129
+ await emitEvent(deps.events, {
130
+ type: "outcome",
131
+ runId,
132
+ ts: Date.now(),
133
+ state: result.state,
134
+ ...(result.state === "failed" && result.summary !== undefined
135
+ ? { error: result.summary }
136
+ : {}),
137
+ ...(result.state !== "failed" && result.summary !== undefined
138
+ ? { summary: result.summary }
139
+ : {}),
140
+ });
101
141
  const mark = latestTimestamp(fresh);
102
142
  if (mark !== undefined)
103
143
  await deps.watermarks.set(pr.number, mark);
@@ -106,6 +146,13 @@ async function resolveConflictsAndMerge(deps, config, pr, fresh, logger) {
106
146
  catch (error) {
107
147
  const message = error instanceof Error ? error.message : String(error);
108
148
  logger.warn(`merge #${pr.number}: errored: ${message}`);
149
+ await emitEvent(deps.events, {
150
+ type: "outcome",
151
+ runId,
152
+ ts: Date.now(),
153
+ state: "failed",
154
+ error: message,
155
+ });
109
156
  return { prNumber: pr.number, state: "failed", summary: message };
110
157
  }
111
158
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/respond/merge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/respond/merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAItD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EACL,aAAa,EAIb,aAAa,EACb,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,yBAAyB,CAAC,UAAkB,EAAE,KAAwB;IACpF,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO;QACL,2BAA2B;QAC3B,EAAE;QACF,aAAa,UAAU,+CAA+C;QACtE,EAAE;QACF,IAAI;QACJ,EAAE;QACF,0EAA0E;QAC1E,0EAA0E;QAC1E,0CAA0C;KAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAOD;;;;;GAKG;AACH,KAAK,UAAU,mBAAmB,CAChC,OAAgB,EAChB,SAAoB,EACpB,UAAkB;IAElB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IACpF,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,oBAAoB,UAAU,YAAY,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CACvF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;QAC1C,KAAK;QACL,OAAO;QACP,UAAU,UAAU,EAAE;QACtB,WAAW;KACZ,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5F,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAClG,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,oBAAoB,UAAU,YAAY,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CACvF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,gBAAgB,CAC7B,IAAiB,EACjB,MAAqB,EACrB,EAAU,EACV,SAAoB,EACpB,UAAkB,EAClB,KAAwB;IAExB,MAAM,kBAAkB,CACtB,IAAI,CAAC,OAAO,EACZ,SAAS,EACT,aAAa,EACb,yBAAyB,CAAC,UAAU,EAAE,KAAK,CAAC,CAC7C,CAAC;IACF,MAAM,IAAI,GAAa;QACrB,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,QAAQ;QAC3B,KAAK,EAAE,0BAA0B,UAAU,YAAY,EAAE,CAAC,MAAM,EAAE;QAClE,GAAG,EAAE,EAAE,CAAC,GAAG;KACZ,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACpB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS;QACT,IAAI;QACJ,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC,CAAC;AACL,CAAC;AAED,iGAAiG;AACjG,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,IAAiB,EACjB,MAAqB,EACrB,EAAU,EACV,KAA2B,EAC3B,MAAc;IAEd,IAAI,CAAC;QACH,OAAO,MAAM,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;QAC/C,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACpE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,IAAiB,EACjB,MAAqB,EACrB,EAAU,EACV,KAA2B,EAC3B,MAAc;IAEd,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,wEAAwE;IACxE,yEAAyE;IACzE,6BAA6B;IAC7B,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,aAAa,IAAI,UAAU,EAAE,CAAC;IAC5C,IAAI,SAAgC,CAAC;IACrC,IAAI,CAAC;QACH,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC3B,IAAI,EAAE,SAAS;gBACf,KAAK;gBACL,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,QAAQ;gBAC/B,KAAK,EAAE,0BAA0B,IAAI,CAAC,UAAU,YAAY,EAAE,CAAC,MAAM,EAAE;gBACvE,GAAG,EAAE,EAAE,CAAC,GAAG;aACZ,CAAC,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC3B,IAAI,EAAE,WAAW;gBACjB,KAAK;gBACL,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,QAAQ,EAAE,EAAE,CAAC,MAAM;gBACnB,KAAK,EAAE,EAAE,CAAC,GAAG;aACd,CAAC,CAAC;QACL,CAAC;QAED,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,MAAM,EAAE,EAAE,CAAC,UAAU;YACrB,IAAI,EAAE,QAAQ;YACd,GAAG,CAAC,IAAI,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACtF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE;YAC3B,IAAI,EAAE,SAAS;YACf,KAAK;YACL,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;gBAC3D,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE;gBAC3B,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;gBAC3D,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;gBAC7B,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACnE,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,cAAc,OAAO,EAAE,CAAC,CAAC;QACxD,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE;YAC3B,IAAI,EAAE,SAAS;YACf,KAAK;YACL,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,OAAO;SACf,CAAC,CAAC;QACH,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACpE,CAAC;YAAS,CAAC;QACT,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACzC,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,IAAiB,EACjB,MAAqB,EACrB,EAAU,EACV,SAAoB,EACpB,MAAc;IAEd,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAElF,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,gBAAgB,CACpC,IAAI,EACJ,MAAM,EACN,EAAE,EACF,SAAS,EACT,IAAI,CAAC,UAAU,EACf,KAAK,CAAC,KAAK,CACZ,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,aAAa,CACnC,IAAI,CAAC,OAAO,EACZ,SAAS,EACT,iCAAiC,IAAI,CAAC,UAAU,EAAE,CACnD,CAAC;QACF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,0CAA0C,IAAI,CAAC,UAAU,gCAAgC,CAAC;YACvG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACjE,CAAC;IACH,CAAC;SAAM,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7F,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,6EAA6E;QAC7E,8EAA8E;QAC9E,0EAA0E;QAC1E,6EAA6E;QAC7E,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,GACR,KAAK,CAAC,MAAM,KAAK,UAAU;YACzB,CAAC,CAAC,6BAA6B,IAAI,CAAC,UAAU,6CAA6C,OAAO,EAAE;YACpG,CAAC,CAAC,mCAAmC,IAAI,CAAC,UAAU,kCAAkC,OAAO,EAAE,CAAC;QACpG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,IAAI,GACR,KAAK,CAAC,MAAM,KAAK,UAAU;QACzB,CAAC,CAAC,6BAA6B,IAAI,CAAC,UAAU,gBAAgB;QAC9D,CAAC,CAAC,iBAAiB,IAAI,CAAC,UAAU,KAAK,CAAC;IAC5C,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,UAAU,CAAC,CAAC;IAC3C,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACpE,CAAC;AAED,iGAAiG;AACjG,KAAK,UAAU,cAAc,CAC3B,IAAiB,EACjB,EAAU,EACV,UAAkB,EAClB,OAAkD;IAElD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,0CAA0C,UAAU,wBAAwB,OAAO,CAAC,SAAS,EAAE,CAAC;QAC7G,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;IAC/E,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,uDAAuD,UAAU,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;QACrG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IAC1E,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,2BAA2B,CAAC;IAC7D,MAAM,IAAI,GAAG,0CAA0C,UAAU,OAAO,MAAM,GAAG,CAAC;IAClF,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACnE,CAAC"}
@@ -2,6 +2,8 @@ import type { Backend, Workspace } from "../backend/types.js";
2
2
  import type { AgentConfig, Guardrails } from "../config/schema.js";
3
3
  import type { Agent, Logger, Source } from "../loop/ports.js";
4
4
  import { type GitHost, type PrComment } from "../publish/githost.js";
5
+ import { type EventSink } from "../store/events.js";
6
+ import type { RunLookup } from "./run-row.js";
5
7
  import type { WatermarkStore } from "./store.js";
6
8
  /** Where the respond pass drops the human feedback for the agent to read. */
7
9
  export declare const FEEDBACK_PATH = ".ghostrail/feedback.md";
@@ -23,6 +25,14 @@ export interface RespondDeps {
23
25
  /** Host path to the composed Claude profile, staged into the workspace. */
24
26
  claudeProfileDir?: string;
25
27
  logger?: Logger;
28
+ /** Optional run-event sink (the store). Omit to record nothing. */
29
+ events?: EventSink;
30
+ /**
31
+ * Optional read side of the same store, used to find the row an item
32
+ * already has so a respond pass continues it instead of opening a sibling
33
+ * (TJ-1665). Omitted, every pass starts a row of its own.
34
+ */
35
+ runs?: RunLookup;
26
36
  }
27
37
  /**
28
38
  * Recover the tracker issue id (e.g. "TJ-123") from a factory branch name, or
@@ -1 +1 @@
1
- {"version":3,"file":"respond.d.ts","sourceRoot":"","sources":["../../src/respond/respond.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,KAAK,EAAE,KAAK,EAAyB,MAAM,EAAE,MAAM,EAAY,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAEL,KAAK,OAAO,EAEZ,KAAK,SAAS,EAEf,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,6EAA6E;AAC7E,eAAO,MAAM,aAAa,2BAA2B,CAAC;AAItD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,cAAc,CAAC;IAC3B;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;iFAC6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGrE;AAED,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,kFAAkF;IAClF,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAGrE;AAYD,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,aAAa,EAAE,CAAC,CAqC1B;AA2KD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAgBlB"}
1
+ {"version":3,"file":"respond.d.ts","sourceRoot":"","sources":["../../src/respond/respond.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,KAAK,EAAE,KAAK,EAAyB,MAAM,EAAE,MAAM,EAAY,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAEL,KAAK,OAAO,EAEZ,KAAK,SAAS,EAEf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,oBAAoB,CAAC;AAG/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,6EAA6E;AAC7E,eAAO,MAAM,aAAa,2BAA2B,CAAC;AAItD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,cAAc,CAAC;IAC3B;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;iFAC6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAKD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGrE;AAED,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,kFAAkF;IAClF,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAGrE;AAYD,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,aAAa,EAAE,CAAC,CAqC1B;AAmOD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAgBlB"}