ghostrail 0.21.0 → 0.22.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 (87) hide show
  1. package/dist/board/page.d.ts.map +1 -1
  2. package/dist/board/page.js +68 -13
  3. package/dist/board/page.js.map +1 -1
  4. package/dist/board/server.d.ts +10 -0
  5. package/dist/board/server.d.ts.map +1 -1
  6. package/dist/board/server.js +24 -0
  7. package/dist/board/server.js.map +1 -1
  8. package/dist/cli/commands.d.ts +49 -0
  9. package/dist/cli/commands.d.ts.map +1 -1
  10. package/dist/cli/commands.js +125 -11
  11. package/dist/cli/commands.js.map +1 -1
  12. package/dist/cli.d.ts.map +1 -1
  13. package/dist/cli.js +3 -1
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands/help.d.ts.map +1 -1
  16. package/dist/commands/help.js +7 -0
  17. package/dist/commands/help.js.map +1 -1
  18. package/dist/config/load.d.ts.map +1 -1
  19. package/dist/config/load.js +19 -0
  20. package/dist/config/load.js.map +1 -1
  21. package/dist/config/schema.d.ts +13 -0
  22. package/dist/config/schema.d.ts.map +1 -1
  23. package/dist/config/schema.js.map +1 -1
  24. package/dist/dashboard/page.d.ts.map +1 -1
  25. package/dist/dashboard/page.js +104 -9
  26. package/dist/dashboard/page.js.map +1 -1
  27. package/dist/dashboard/routes.d.ts +4 -0
  28. package/dist/dashboard/routes.d.ts.map +1 -1
  29. package/dist/dashboard/routes.js +4 -0
  30. package/dist/dashboard/routes.js.map +1 -1
  31. package/dist/dashboard/server.d.ts +29 -0
  32. package/dist/dashboard/server.d.ts.map +1 -1
  33. package/dist/dashboard/server.js +75 -4
  34. package/dist/dashboard/server.js.map +1 -1
  35. package/dist/factory/build.d.ts +6 -0
  36. package/dist/factory/build.d.ts.map +1 -1
  37. package/dist/factory/build.js +23 -0
  38. package/dist/factory/build.js.map +1 -1
  39. package/dist/loop/next-tick.d.ts +43 -5
  40. package/dist/loop/next-tick.d.ts.map +1 -1
  41. package/dist/loop/next-tick.js +68 -18
  42. package/dist/loop/next-tick.js.map +1 -1
  43. package/dist/loop/schedule.d.ts +11 -2
  44. package/dist/loop/schedule.d.ts.map +1 -1
  45. package/dist/loop/schedule.js +3 -1
  46. package/dist/loop/schedule.js.map +1 -1
  47. package/dist/publish/gh.d.ts +43 -2
  48. package/dist/publish/gh.d.ts.map +1 -1
  49. package/dist/publish/gh.js +80 -2
  50. package/dist/publish/gh.js.map +1 -1
  51. package/dist/publish/githost.d.ts +18 -1
  52. package/dist/publish/githost.d.ts.map +1 -1
  53. package/dist/publish/githost.js +13 -0
  54. package/dist/publish/githost.js.map +1 -1
  55. package/dist/publish/index.d.ts +1 -1
  56. package/dist/publish/index.d.ts.map +1 -1
  57. package/dist/publish/index.js +1 -1
  58. package/dist/publish/index.js.map +1 -1
  59. package/dist/release/index.d.ts +2 -0
  60. package/dist/release/index.d.ts.map +1 -0
  61. package/dist/release/index.js +2 -0
  62. package/dist/release/index.js.map +1 -0
  63. package/dist/release/release.d.ts +67 -0
  64. package/dist/release/release.d.ts.map +1 -0
  65. package/dist/release/release.js +193 -0
  66. package/dist/release/release.js.map +1 -0
  67. package/dist/respond/ci-fix-queue.d.ts +40 -0
  68. package/dist/respond/ci-fix-queue.d.ts.map +1 -0
  69. package/dist/respond/ci-fix-queue.js +74 -0
  70. package/dist/respond/ci-fix-queue.js.map +1 -0
  71. package/dist/respond/index.d.ts +2 -1
  72. package/dist/respond/index.d.ts.map +1 -1
  73. package/dist/respond/index.js +2 -1
  74. package/dist/respond/index.js.map +1 -1
  75. package/dist/respond/merge.d.ts.map +1 -1
  76. package/dist/respond/merge.js +14 -1
  77. package/dist/respond/merge.js.map +1 -1
  78. package/dist/respond/respond.d.ts +26 -1
  79. package/dist/respond/respond.d.ts.map +1 -1
  80. package/dist/respond/respond.js +154 -9
  81. package/dist/respond/respond.js.map +1 -1
  82. package/package.json +1 -1
  83. package/skill/ghostrail/SKILL.md +15 -4
  84. package/templates/code/ghostrail.toml +3 -0
  85. package/templates/code/prompts/release.md +40 -0
  86. package/templates/code/prompts/respond.md +2 -1
  87. package/templates/content/prompts/respond.md +3 -1
@@ -1 +1 @@
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;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;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;AAoOD;;;;;;;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,EACd,KAAK,QAAQ,EAGd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,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;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;iFAC6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,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;AAaD,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAGrE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAShE;AASD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAG1D;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,CA8C1B;AAuVD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAgBlB"}
@@ -1,7 +1,7 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { writeWorkspaceFile } from "../backend/fs.js";
3
3
  import { mapWithConcurrency } from "../loop/concurrency.js";
4
- import { GHOSTRAIL_MARKER, gitStageAllArgs, } from "../publish/githost.js";
4
+ import { GHOSTRAIL_MARKER, gitStageAllArgs, hasFailingCheck, } from "../publish/githost.js";
5
5
  import { emitEvent } from "../store/events.js";
6
6
  import { resolveConflictsAndMergeSafely } from "./merge.js";
7
7
  import { findExistingRunId } from "./run-id.js";
@@ -20,11 +20,45 @@ export function extractIssueId(headBranch) {
20
20
  const id = ISSUE_ID_RE.exec(headBranch)?.[1];
21
21
  return id === undefined ? undefined : id.toUpperCase();
22
22
  }
23
+ const NOT_ACTIONABLE = { actionable: false };
23
24
  /** Render fresh human comments into the feedback document the agent reads. */
24
25
  export function renderFeedback(comments) {
25
26
  const blocks = comments.map((c) => `> from @${c.author} at ${c.createdAt}\n\n${c.body.trim()}`);
26
27
  return `# New feedback to address\n\n${blocks.join("\n\n---\n\n")}\n`;
27
28
  }
29
+ /**
30
+ * The failing checks on a queued PR, rendered into the same feedback document
31
+ * `renderFeedback` writes to. One line per check: its name, its conclusion, and
32
+ * its URL when it has one. Checks that are not failing (per {@link
33
+ * hasFailingCheck}'s rule) are omitted; a caller only calls this once it has
34
+ * already confirmed at least one check qualifies.
35
+ */
36
+ export function renderCiFailureFeedback(status) {
37
+ const failing = status.checks.filter((check) => check.conclusion !== undefined && check.conclusion !== "success");
38
+ const lines = failing.map((check) => {
39
+ const url = check.url === undefined ? "" : ` (${check.url})`;
40
+ return `- ${check.name}: ${check.conclusion}${url}`;
41
+ });
42
+ return `# CI failure to fix\n\nThe following checks failed on this PR:\n\n${lines.join("\n")}\n`;
43
+ }
44
+ /** The failing check names, for the announcement comment and log lines. */
45
+ function failingCheckNames(status) {
46
+ return status.checks
47
+ .filter((check) => check.conclusion !== undefined && check.conclusion !== "success")
48
+ .map((check) => check.name);
49
+ }
50
+ /**
51
+ * The comment ghostrail posts (to the PR, and to the tracker issue when one is
52
+ * known) when it picks up a queued CI-fix request, before it runs the agent.
53
+ * Always carries the marker (via {@link markedComment} for GitHub, and
54
+ * automatically for the tracker via `Source.comment`), so it reads as the
55
+ * "already being handled" notice the human clicking "Fix CI" is for: nobody
56
+ * needs to also leave a comment asking for the same fix.
57
+ */
58
+ export function ciFixAnnouncement(status) {
59
+ const names = failingCheckNames(status).join(", ");
60
+ return `Attempting a fix for the failing CI check(s): ${names}.`;
61
+ }
28
62
  /**
29
63
  * The PR comment for a respond pass that changed nothing. Same reasoning as the
30
64
  * loop's noop comment: the reason is the only account anyone gets of why the
@@ -53,11 +87,19 @@ export async function respondTick(deps, config) {
53
87
  const logger = deps.logger ?? nullLogger;
54
88
  const prs = await deps.host.listOpenPrs(config.label);
55
89
  logger.info(`respond: ${prs.length} open ${config.label} PR(s)`);
56
- // Fresh comments are read once per PR, up front, so the merge-command check
57
- // below and the flow it dispatches to never re-fetch or re-filter them.
90
+ // A PR that closed or merged since it was queued can never be picked up
91
+ // through the loop below (it iterates `prs`, which is already open-only), so
92
+ // its entry would otherwise wait forever.
93
+ if (deps.ciFixQueue !== undefined) {
94
+ await sweepCiFixQueue(deps.ciFixQueue, prs, logger);
95
+ }
96
+ // Fresh comments and any queued CI-fix request are read once per PR, up
97
+ // front, so the merge-command check below and the flow it dispatches to
98
+ // never re-fetch or re-filter them.
58
99
  const withFresh = await mapWithConcurrency(prs, config.guardrails.concurrency, async (pr) => ({
59
100
  pr,
60
101
  fresh: await freshCommentsFor(deps, config, pr, logger),
102
+ ci: await resolveCiFixRequest(deps, pr, logger),
61
103
  }));
62
104
  const mergeRequests = withFresh.filter(({ fresh }) => fresh.some((c) => isMergeCommand(c.body)));
63
105
  const normal = withFresh.filter(({ fresh }) => !fresh.some((c) => isMergeCommand(c.body)));
@@ -69,7 +111,7 @@ export async function respondTick(deps, config) {
69
111
  // an independent agent run of comparable cost and duration, so a sequential
70
112
  // pass took as long as the sum of them, and this is the pass a human is most
71
113
  // likely to be waiting on: it exists to answer review comments.
72
- const normalResults = await mapWithConcurrency(normal, config.guardrails.concurrency, ({ pr, fresh }) => respondToPrSafely(deps, config, pr, fresh, logger));
114
+ const normalResults = await mapWithConcurrency(normal, config.guardrails.concurrency, ({ pr, fresh, ci }) => respondToPrSafely(deps, config, pr, fresh, ci, logger));
73
115
  const byNumber = new Map([...mergeResults, ...normalResults].map((result) => [result.prNumber, result]));
74
116
  return prs
75
117
  .map((pr) => byNumber.get(pr.number))
@@ -91,6 +133,86 @@ async function freshCommentsFor(deps, config, pr, logger) {
91
133
  ...(since === undefined ? {} : { since }),
92
134
  });
93
135
  }
136
+ /** Drop any queued PR number that is no longer open; best-effort, never throws. */
137
+ async function sweepCiFixQueue(queue, prs, logger) {
138
+ const open = new Set(prs.map((pr) => pr.number));
139
+ try {
140
+ const queued = await queue.list();
141
+ await Promise.all(queued.filter((n) => !open.has(n)).map((n) => queue.remove(n)));
142
+ }
143
+ catch (error) {
144
+ const message = error instanceof Error ? error.message : String(error);
145
+ logger.warn(`respond: could not sweep the CI-fix queue: ${message}`);
146
+ }
147
+ }
148
+ /**
149
+ * Whether `pr` has a queued CI-fix request worth attempting this tick.
150
+ *
151
+ * A request that cannot be confirmed (the queue itself, or the live PR status,
152
+ * could not be read) is treated as not actionable for this tick and left
153
+ * queued for the next one — never dropped on an error that might be transient.
154
+ * A request that can be confirmed but whose checks are no longer failing is
155
+ * dequeued immediately: there is nothing left to attempt.
156
+ */
157
+ async function resolveCiFixRequest(deps, pr, logger) {
158
+ if (deps.ciFixQueue === undefined)
159
+ return NOT_ACTIONABLE;
160
+ let queued;
161
+ try {
162
+ queued = await deps.ciFixQueue.has(pr.number);
163
+ }
164
+ catch (error) {
165
+ const message = error instanceof Error ? error.message : String(error);
166
+ logger.warn(`respond #${pr.number}: could not read the CI-fix queue: ${message}`);
167
+ return NOT_ACTIONABLE;
168
+ }
169
+ if (!queued)
170
+ return NOT_ACTIONABLE;
171
+ let status;
172
+ try {
173
+ status = await deps.host.getPrStatus(pr.number);
174
+ }
175
+ catch (error) {
176
+ const message = error instanceof Error ? error.message : String(error);
177
+ logger.warn(`respond #${pr.number}: could not check CI status for a queued fix: ${message}`);
178
+ return NOT_ACTIONABLE;
179
+ }
180
+ if (!hasFailingCheck(status.checks)) {
181
+ try {
182
+ await deps.ciFixQueue.remove(pr.number);
183
+ }
184
+ catch {
185
+ // best-effort
186
+ }
187
+ return NOT_ACTIONABLE;
188
+ }
189
+ return { actionable: true, status };
190
+ }
191
+ /**
192
+ * Announce a CI-fix attempt on the PR and, when the branch resolves to a
193
+ * tracker issue and a source is configured, on that issue too. Both carry the
194
+ * ghostrail marker (the GitHub one explicitly, the tracker one automatically),
195
+ * so a later tick's `selectNewComments` still ignores them as its own, and a
196
+ * human sees the fix is already in flight before leaving a duplicate request.
197
+ * The tracker post is best-effort, matching `listTrackerComments`; the GitHub
198
+ * post is not, since it is the announcement that matters most for this PR.
199
+ */
200
+ async function announceCiFix(deps, pr, status, logger) {
201
+ const body = ciFixAnnouncement(status);
202
+ await deps.host.postComment(pr.number, markedComment(body));
203
+ if (deps.source === undefined)
204
+ return;
205
+ const issueId = extractIssueId(pr.headBranch);
206
+ if (issueId === undefined)
207
+ return;
208
+ try {
209
+ await deps.source.comment({ id: issueId, title: `issue ${issueId}`, url: pr.url }, body);
210
+ }
211
+ catch (error) {
212
+ const message = error instanceof Error ? error.message : String(error);
213
+ logger.warn(`respond #${pr.number}: could not post the CI-fix announcement to ${issueId}: ${message}`);
214
+ }
215
+ }
94
216
  /**
95
217
  * `respondToPr`, guaranteed not to throw.
96
218
  *
@@ -100,9 +222,9 @@ async function freshCommentsFor(deps, config, pr, logger) {
100
222
  * meet it too. One PR whose host lookup fails is one failed result, not a dead
101
223
  * pass.
102
224
  */
103
- async function respondToPrSafely(deps, config, pr, fresh, logger) {
225
+ async function respondToPrSafely(deps, config, pr, fresh, ci, logger) {
104
226
  try {
105
- return await respondToPr(deps, config, pr, fresh, logger);
227
+ return await respondToPr(deps, config, pr, fresh, ci, logger);
106
228
  }
107
229
  catch (error) {
108
230
  const message = error instanceof Error ? error.message : String(error);
@@ -131,8 +253,8 @@ async function listTrackerComments(deps, pr, logger) {
131
253
  return [];
132
254
  }
133
255
  }
134
- async function respondToPr(deps, config, pr, fresh, logger) {
135
- if (fresh.length === 0) {
256
+ async function respondToPr(deps, config, pr, fresh, ci, logger) {
257
+ if (fresh.length === 0 && !ci.actionable) {
136
258
  return { prNumber: pr.number, state: "noop" };
137
259
  }
138
260
  // The row this PR already has, if any: a respond pass is more work on the
@@ -166,6 +288,9 @@ async function respondToPr(deps, config, pr, fresh, logger) {
166
288
  prUrl: pr.url,
167
289
  });
168
290
  }
291
+ if (ci.actionable && ci.status !== undefined) {
292
+ await announceCiFix(deps, pr, ci.status, logger);
293
+ }
169
294
  workspace = await deps.backend.provision({
170
295
  repoPath: deps.repoPath,
171
296
  baseBranch: pr.headBranch,
@@ -174,7 +299,15 @@ async function respondToPr(deps, config, pr, fresh, logger) {
174
299
  ...(deps.image === undefined ? {} : { image: deps.image }),
175
300
  ...(deps.claudeProfileDir === undefined ? {} : { profileDir: deps.claudeProfileDir }),
176
301
  });
177
- await writeWorkspaceFile(deps.backend, workspace, FEEDBACK_PATH, renderFeedback(fresh));
302
+ // Only a section for what actually applies: a queued PR with no fresh
303
+ // comments (the common case) gets just the CI section, not an empty
304
+ // "New feedback to address" heading with nothing under it.
305
+ const sections = [];
306
+ if (fresh.length > 0)
307
+ sections.push(renderFeedback(fresh));
308
+ if (ci.actionable && ci.status !== undefined)
309
+ sections.push(renderCiFailureFeedback(ci.status));
310
+ await writeWorkspaceFile(deps.backend, workspace, FEEDBACK_PATH, sections.join("\n"));
178
311
  const outcome = await deps.agent.run({
179
312
  backend: deps.backend,
180
313
  workspace,
@@ -209,6 +342,18 @@ async function respondToPr(deps, config, pr, fresh, logger) {
209
342
  const mark = latestTimestamp(fresh);
210
343
  if (mark !== undefined)
211
344
  await deps.watermarks.set(pr.number, mark);
345
+ // Only once this attempt actually reached a terminal outcome: an entry
346
+ // left behind by a thrown error below is retried next tick, the same way
347
+ // a fetch failure in `resolveCiFixRequest` leaves it queued rather than
348
+ // dropping a request nothing was ever attempted for.
349
+ if (ci.actionable && deps.ciFixQueue !== undefined) {
350
+ try {
351
+ await deps.ciFixQueue.remove(pr.number);
352
+ }
353
+ catch {
354
+ // best-effort
355
+ }
356
+ }
212
357
  return result;
213
358
  }
214
359
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"respond.js","sourceRoot":"","sources":["../../src/respond/respond.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"respond.js","sourceRoot":"","sources":["../../src/respond/respond.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ghostrail",
3
- "version": "0.21.0",
3
+ "version": "0.22.0",
4
4
  "description": "Open source software factory for coding agents. Config-driven loops, pluggable isolation backends, human merge gate.",
5
5
  "keywords": [
6
6
  "ai-agents",
@@ -2,10 +2,10 @@
2
2
  name: ghostrail
3
3
  description: Drive ghostrail (the software factory) from inside this repo. Use when the user types /ghostrail, or asks to set up, customize, check, or run a ghostrail factory — scaffolding ghostrail.toml and prompts, tailoring the scaffolded prompts and gate commands to this codebase, carrying a later template improvement into prompts you have customized, diagnosing a broken setup, or kicking off a run/respond/triage tick.
4
4
  user-invocable: true
5
- argument-hint: "[customize | init | update | doctor | status | run | respond | triage]"
5
+ argument-hint: "[customize | init | update | doctor | status | run | respond | triage | release]"
6
6
  license: Apache-2.0
7
7
  metadata:
8
- version: 0.7.0
8
+ version: 0.8.0
9
9
  allowed-tools:
10
10
  - Read
11
11
  - Write
@@ -63,6 +63,13 @@ this tailors them to *this* repo. Never guess: read before proposing.
63
63
  the agent should run. Keep the `.ghostrail/result.json` contract intact.
64
64
  - `prompts/respond.md` — same context; keep it reading `.ghostrail/feedback.md`.
65
65
  - `prompts/triage.md` — what a right-sized issue looks like in this codebase.
66
+ - `prompts/release.md` and `[release]` — only if the user wants a "release"
67
+ button on the dashboard (off by default: no `[release]` section means no
68
+ button). If they do, work out what a release concretely means for *this*
69
+ repo — an npm publish, a build artifact uploaded somewhere, both — from
70
+ its actual CI/release workflow, not a guess, and write that into the
71
+ prompt. `[release]` has no `every`: it never runs on a schedule, only from
72
+ `ghostrail release` or the dashboard button.
66
73
  - `[gate].commands` — mirroring CI exactly.
67
74
  - `[source]` — the team/project/label/assignee filters, if you can tell what
68
75
  they should be. Ask rather than invent tracker identifiers.
@@ -260,7 +267,7 @@ view, suggest `<GR> board`.
260
267
 
261
268
  ---
262
269
 
263
- ## run · respond · triage
270
+ ## run · respond · triage · release
264
271
 
265
272
  Passthroughs. Before executing, state what will happen and confirm, because these
266
273
  act on real tracker items and can open real pull requests. This confirmation is
@@ -272,6 +279,10 @@ real execution, not a no-op you were entitled to skip asking about.
272
279
  a real PR.** Suggest a dry run first (`open_pr = false`) for a new setup.
273
280
  - `respond` — folds new PR and tracker comments into existing factory branches.
274
281
  - `triage` — decomposes large issues into sub-issues (creates real tracker items).
282
+ - `release` — cuts a real release right now, per `[release].prompt` (requires
283
+ a `[release]` section). Whatever that prompt does — a version bump, a tag
284
+ push, a publish — happens for real; confirm even more deliberately than for
285
+ `run`, since a release is usually the hardest of these to undo.
275
286
 
276
287
  Run `<GR> <command>` and summarize the resulting JSON: per item, the state
277
288
  (`done` / `blocked` / `failed` / `noop` / `skipped`), the gate steps if present,
@@ -283,7 +294,7 @@ and any PR URL. On failure, quote the actual error rather than paraphrasing.
283
294
 
284
295
  - **Never** set `auto_merge = true` or merge a factory PR. A human owns merges.
285
296
  - **Never** print or commit a secret. Report credentials as set/unset only.
286
- - **Never** run `run`, `triage`, or `respond` without asking first, including
297
+ - **Never** run `run`, `triage`, `respond`, or `release` without asking first, including
287
298
  from inside **customize**, **init**, **update**, or **doctor** — verifying
288
299
  that a config or prompt change is well-formed is never a reason to skip the
289
300
  confirmation those commands require.
@@ -50,3 +50,6 @@ every = "5m" # how often `watch` runs respond; "off" to exclud
50
50
  [triage] # `ghostrail triage` splits large issues into sub-issues
51
51
  prompt = "prompts/triage.md"
52
52
  eligible = { state = "Todo", label = "triage", assignee = "unassigned" }
53
+
54
+ # [release] # uncomment for a "release" button on the dashboard
55
+ # prompt = "prompts/release.md" # customize it to say what a release means here
@@ -0,0 +1,40 @@
1
+ # Cut a release
2
+
3
+ You are a coding agent in an isolated checkout of this repository, on the base
4
+ branch directly — not a feature branch, not a pull request. Your job is to cut
5
+ a release. What "release" concretely means is repo-specific: for a package
6
+ published to npm it is usually a version bump, a changelog entry, and a tag
7
+ push that CI turns into a publish; for other repos it might also mean building
8
+ and uploading an artifact somewhere. Customize this file to say exactly what a
9
+ release means here, and how CI (or whatever else) turns your work into it
10
+ being live.
11
+
12
+ Unlike the other prompts in this repo, **you likely need git here**: if
13
+ cutting a release means committing a version bump and pushing a tag, that
14
+ commit and that push *are* the release, so there is no factory step afterward
15
+ to do it for you.
16
+
17
+ ## What to do
18
+
19
+ 1. Work out what changed since the last release (the changelog, `git log`,
20
+ merged PRs — whatever this repo tracks that in).
21
+ 2. Decide the next version, if this repo is versioned.
22
+ 3. Make whatever changes constitute a release here (a version bump, a
23
+ changelog entry, ...).
24
+ 4. Run this repo's lint, typecheck, and test commands. A broken main branch
25
+ should never be released; treat a failure here as a `failed` result.
26
+ 5. Commit, tag, and push, if that is how a release here gets published — say
27
+ exactly how in this section once you know.
28
+
29
+ ## Reporting your result (required, do this last)
30
+
31
+ Write a JSON file at `.ghostrail/result.json` with exactly one of:
32
+
33
+ - `{"status":"done","summary":"<what was released>"}`
34
+ - `{"status":"blocked","questions":"<a real decision you need>"}`
35
+ - `{"status":"failed","error":"<why, e.g. which check failed>"}`
36
+ - `{"status":"noop","reason":"<why there is nothing to release>"}`
37
+
38
+ On `done`, this run's job ends at whatever step hands off to publishing (a tag
39
+ push, an upload, ...); it does not wait for or verify that the publish itself
40
+ finished.
@@ -8,7 +8,8 @@ this workspace. Do not use git: the factory owns commits and pushes.
8
8
  <!-- ghostrail:managed id="feedback" -->
9
9
  ## The feedback
10
10
  Read `.ghostrail/feedback.md`. It contains the new comments (author and time),
11
- newest work last. Treat it as the review to act on.
11
+ newest work last, and, when a human queued a fix for a failing CI check, a
12
+ section naming the checks that failed. Treat it as the review to act on.
12
13
  <!-- /ghostrail:managed -->
13
14
 
14
15
  ## What to do
@@ -9,7 +9,9 @@ and pushes.
9
9
  <!-- ghostrail:managed id="feedback" -->
10
10
  ## The feedback
11
11
  Read `.ghostrail/feedback.md`. It contains the new comments (author and time),
12
- newest work last. Treat it as the editorial review to act on.
12
+ newest work last, and, when a human queued a fix for a failing CI check, a
13
+ section naming the checks that failed. Treat it as the editorial review to
14
+ act on.
13
15
  <!-- /ghostrail:managed -->
14
16
 
15
17
  ## What to do