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
package/README.md CHANGED
@@ -166,6 +166,24 @@ Enables `ghostrail respond`. Omit the whole section to leave it disabled.
166
166
  | Key | Type | Values | Default | Required |
167
167
  | --- | --- | --- | --- | --- |
168
168
  | `prompt` | string | path to a prompt file, relative to the config | none | yes, if `[respond]` is present |
169
+ | `ignore_authors` | array of strings | comment authors respond never acts on | `[]` | no |
170
+ | `every` | string | duration, or `"off"` | `"5m"` | no |
171
+
172
+ Respond skips a comment when it carries ghostrail's hidden marker (so it never
173
+ answers itself) or when its author is on the ignore list. The list it actually
174
+ uses is the union of three things:
175
+
176
+ 1. Built-in defaults for the source kind. A `linear` source ignores `linear`,
177
+ because the Linear GitHub integration posts a linkback comment on every
178
+ factory PR whose body is the issue's own description. Left unfiltered, that
179
+ reads as fresh human feedback and the agent is handed the issue description
180
+ as a review, once per open PR.
181
+ 2. `ignore_authors` here.
182
+ 3. The `GHOSTRAIL_SELF_LOGINS` environment variable, comma-separated.
183
+
184
+ Matching is case-insensitive. The union only ever adds, so nothing can
185
+ un-ignore a built-in default. `ghostrail doctor` warns when open factory PRs
186
+ carry comments from an author that is neither you nor ghostrail.
169
187
 
170
188
  ### `[triage]` (optional)
171
189
 
@@ -175,6 +193,14 @@ Required by `ghostrail triage`; without it, that command has nothing to run.
175
193
  | --- | --- | --- | --- | --- |
176
194
  | `prompt` | string | path to a prompt file, relative to the config | none | yes, if `[triage]` is present |
177
195
  | `eligible` | inline table | same shape as [`[source.eligible]`](#sourceeligible) | `{ labels: [] }` | no |
196
+ | `every` | string | duration, or `"off"` | `"30m"` | no |
197
+
198
+ `every` is how often `ghostrail watch` runs the pass. `watch` ticks the fix
199
+ queue on its own `--interval` and runs respond and triage on theirs, in one
200
+ loop, one pass at a time (they share the global lock, so running them at once
201
+ would just make them skip each other). Set `every = "off"` to leave a pass out
202
+ of the watch loop while keeping the command usable by hand. A section that is
203
+ absent entirely is never scheduled.
178
204
 
179
205
  ### A complete example
180
206
 
@@ -225,10 +251,13 @@ artifacts = ["style-guide"] # optional: shared references staged into every
225
251
 
226
252
  [respond] # optional: enables `ghostrail respond`
227
253
  prompt = "prompts/respond.md"
254
+ ignore_authors = ["linear"] # comment authors respond never acts on
255
+ every = "5m" # how often `watch` runs it; "off" to exclude it
228
256
 
229
257
  [triage] # optional: required by `ghostrail triage`
230
258
  prompt = "prompts/triage.md"
231
259
  eligible = { state = "Todo", label = "triage", assignee = "unassigned" }
260
+ every = "30m" # how often `watch` runs it; "off" to exclude it
232
261
  ```
233
262
 
234
263
  ## Credentials
@@ -35,13 +35,30 @@ export declare function buildClaudeArgs(options: ClaudeArgsOptions): string[];
35
35
  */
36
36
  export declare class ClaudeCodeAgent implements Agent {
37
37
  private readonly profileDir?;
38
+ private readonly promptSourceDir?;
38
39
  /**
39
40
  * @param profileDir Optional ghostrail Claude profile. When set, the run uses
40
41
  * it as Claude's config home (via `HOME`/`CLAUDE_CONFIG_DIR`) and its
41
42
  * settings.json, so factory runs get the pinned skills/CLAUDE.md and never the
42
43
  * user's interactive config.
44
+ * @param promptSourceDir Host directory to read the prompt file from, instead
45
+ * of the provisioned workspace. Set only when the config actually in use was
46
+ * found outside the repo (a greenroom directory): none of the backends carry
47
+ * untracked host files into a fresh worktree/clone, so a prompt that is never
48
+ * committed to the repo has to be read from the host directly. Left undefined
49
+ * for the default case, which reads the prompt from the workspace exactly as
50
+ * before.
43
51
  */
44
- constructor(profileDir?: string | undefined);
52
+ constructor(profileDir?: string | undefined, promptSourceDir?: string | undefined);
45
53
  run(context: AgentContext): Promise<AgentOutcome>;
54
+ /**
55
+ * Read the prompt template. From the host, under `promptSourceDir`, when one
56
+ * is set (a greenroom directory); otherwise from the provisioned workspace,
57
+ * exactly as ever. Never falls back from one to the other: a greenroom
58
+ * directory that cannot supply the prompt is a configuration error, not a
59
+ * reason to go looking for it somewhere the run's own branch might disagree
60
+ * with.
61
+ */
62
+ private readPrompt;
46
63
  }
47
64
  //# sourceMappingURL=claude-code.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/agent/claude-code.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAc,MAAM,kBAAkB,CAAC;AAKtF,+EAA+E;AAC/E,eAAO,MAAM,WAAW,2BAA2B,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;IAC/C,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAwBpE;AAYD;;;;;;GAMG;AACH,qBAAa,eAAgB,YAAW,KAAK;IAO/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IANxC;;;;;OAKG;gBAC0B,UAAU,CAAC,EAAE,MAAM,YAAA;IAE1C,GAAG,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;CAuExD"}
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/agent/claude-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAc,MAAM,kBAAkB,CAAC;AAKtF,+EAA+E;AAC/E,eAAO,MAAM,WAAW,2BAA2B,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;IAC/C,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAwBpE;AAYD;;;;;;GAMG;AACH,qBAAa,eAAgB,YAAW,KAAK;IAezC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IAfnC;;;;;;;;;;;;OAYG;gBAEgB,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,eAAe,CAAC,EAAE,MAAM,YAAA;IAGrC,GAAG,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IA4EvD;;;;;;;OAOG;YACW,UAAU;CAczB"}
@@ -1,3 +1,4 @@
1
+ import { readFile as readHostFile } from "node:fs/promises";
1
2
  import { join } from "node:path";
2
3
  import { costFromJson, describeAgentFailure, describeSilentRun, spokenReason } from "./failure.js";
3
4
  import { renderPrompt } from "./prompt.js";
@@ -49,14 +50,23 @@ async function readFile(backend, workspace, path) {
49
50
  */
50
51
  export class ClaudeCodeAgent {
51
52
  profileDir;
53
+ promptSourceDir;
52
54
  /**
53
55
  * @param profileDir Optional ghostrail Claude profile. When set, the run uses
54
56
  * it as Claude's config home (via `HOME`/`CLAUDE_CONFIG_DIR`) and its
55
57
  * settings.json, so factory runs get the pinned skills/CLAUDE.md and never the
56
58
  * user's interactive config.
59
+ * @param promptSourceDir Host directory to read the prompt file from, instead
60
+ * of the provisioned workspace. Set only when the config actually in use was
61
+ * found outside the repo (a greenroom directory): none of the backends carry
62
+ * untracked host files into a fresh worktree/clone, so a prompt that is never
63
+ * committed to the repo has to be read from the host directly. Left undefined
64
+ * for the default case, which reads the prompt from the workspace exactly as
65
+ * before.
57
66
  */
58
- constructor(profileDir) {
67
+ constructor(profileDir, promptSourceDir) {
59
68
  this.profileDir = profileDir;
69
+ this.promptSourceDir = promptSourceDir;
60
70
  }
61
71
  async run(context) {
62
72
  const { backend, workspace, item, agent, guardrails } = context;
@@ -67,9 +77,12 @@ export class ClaudeCodeAgent {
67
77
  // path; on an isolating backend it would point at nothing, which is why a
68
78
  // backend that stages a profile must report where it put it.
69
79
  const profileDir = workspace.profilePath ?? this.profileDir;
70
- const template = await readFile(backend, workspace, agent.prompt);
80
+ const template = await this.readPrompt(backend, workspace, agent.prompt);
71
81
  if (template === undefined) {
72
- return { status: "failed", error: `could not read prompt file: ${agent.prompt}` };
82
+ const from = this.promptSourceDir === undefined
83
+ ? agent.prompt
84
+ : join(this.promptSourceDir, agent.prompt);
85
+ return { status: "failed", error: `could not read prompt file: ${from}` };
73
86
  }
74
87
  const args = buildClaudeArgs({
75
88
  prompt: renderPrompt(template, item),
@@ -95,7 +108,7 @@ export class ClaudeCodeAgent {
95
108
  // which the caller charges as an assumption rather than as free.
96
109
  const spend = withSpend(costFromJson(run.stdout));
97
110
  if (run.timedOut) {
98
- return { ...spend, status: "failed", error: "agent timed out" };
111
+ return { ...spend, status: "failed", error: "agent timed out", transient: true };
99
112
  }
100
113
  const raw = await readFile(backend, workspace, RESULT_PATH);
101
114
  if (raw !== undefined && raw.trim().length > 0) {
@@ -125,6 +138,25 @@ export class ClaudeCodeAgent {
125
138
  // what the agent said so the two can be told apart after the fact.
126
139
  return { ...spend, status: "noop", reason: describeSilentRun(run.stdout, run.stderr) };
127
140
  }
141
+ /**
142
+ * Read the prompt template. From the host, under `promptSourceDir`, when one
143
+ * is set (a greenroom directory); otherwise from the provisioned workspace,
144
+ * exactly as ever. Never falls back from one to the other: a greenroom
145
+ * directory that cannot supply the prompt is a configuration error, not a
146
+ * reason to go looking for it somewhere the run's own branch might disagree
147
+ * with.
148
+ */
149
+ async readPrompt(backend, workspace, promptPath) {
150
+ if (this.promptSourceDir === undefined) {
151
+ return readFile(backend, workspace, promptPath);
152
+ }
153
+ try {
154
+ return await readHostFile(join(this.promptSourceDir, promptPath), "utf8");
155
+ }
156
+ catch {
157
+ return undefined;
158
+ }
159
+ }
128
160
  }
129
161
  /** An optional cost as a spreadable object, so absent stays absent. */
130
162
  function withSpend(costUsd) {
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/agent/claude-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/agent/claude-code.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/board/page.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,eAAO,MAAM,SAAS,QA2Od,CAAC"}
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/board/page.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,eAAO,MAAM,SAAS,QA6Qd,CAAC"}
@@ -16,8 +16,8 @@ export const PAGE_HTML = `<!doctype html>
16
16
  table { border-collapse: collapse; width: 100%; }
17
17
  th, td { text-align: left; padding: .4rem .6rem; border-bottom: 1px solid #8883; }
18
18
  .state { font-weight: 600; }
19
- .done { color: #2a9d3a; } .failed { color: #d33; } .blocked { color: #d90; }
20
- .noop, .skipped { opacity: .6; } .muted { opacity: .6; }
19
+ .done, .merged, .responded { color: #2a9d3a; } .failed { color: #d33; } .blocked, .abandoned { color: #d90; }
20
+ .noop, .skipped, .closed { opacity: .6; } .muted { opacity: .6; }
21
21
  a { color: inherit; }
22
22
  .twirl {
23
23
  background: none; border: none; cursor: pointer; font: inherit; padding: 0 .3rem;
@@ -42,6 +42,11 @@ export const PAGE_HTML = `<!doctype html>
42
42
  const esc = (s) => String(s ?? "").replace(/[&<>"]/g, (c) => (
43
43
  { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;" }[c]
44
44
  ));
45
+ // Every link on the board opens in a new tab. rel="noopener noreferrer" always
46
+ // rides along with target="_blank": without it the opened page's script can
47
+ // reach back into window.opener and repoint this tab.
48
+ const NEW_TAB = 'target="_blank" rel="noopener noreferrer"';
49
+ const link = (href, label) => '<a href="' + esc(href) + '" ' + NEW_TAB + '>' + label + "</a>";
45
50
  const expanded = new Set();
46
51
  const detailHtml = new Map();
47
52
  const prStatusCache = new Map();
@@ -63,7 +68,7 @@ function gateStepsHtml(gate) {
63
68
  function artifactsHtml(artifacts) {
64
69
  if (!artifacts || artifacts.length === 0) return "";
65
70
  const items = artifacts.map((a) =>
66
- '<li><a href="api/artifacts/' + esc(a.hash) + '">' + esc(a.name) + "</a></li>"
71
+ "<li>" + link("api/artifacts/" + a.hash, esc(a.name)) + "</li>"
67
72
  ).join("");
68
73
  return "<div><b>Artifacts</b><ul>" + items + "</ul></div>";
69
74
  }
@@ -71,7 +76,7 @@ function artifactsHtml(artifacts) {
71
76
  function checkLineHtml(c) {
72
77
  const label = c.conclusion || c.status;
73
78
  const cls = c.conclusion === "success" ? "done" : c.conclusion ? "failed" : "muted";
74
- const name = c.url ? '<a href="' + esc(c.url) + '">' + esc(c.name) + "</a>" : esc(c.name);
79
+ const name = c.url ? link(c.url, esc(c.name)) : esc(c.name);
75
80
  return "<li>" + name + ": <span class='" + cls + "'>" + esc(label) + "</span></li>";
76
81
  }
77
82
 
@@ -95,7 +100,9 @@ function prStatusHtml(status) {
95
100
 
96
101
  function detailBodyHtml(row) {
97
102
  const parts = [];
98
- parts.push("<div><b>Item</b> " + esc(row.itemId || "") + (row.kind ? " (" + esc(row.kind) + ")" : "") + "</div>");
103
+ const itemLabel = esc(row.itemId || "");
104
+ const item = row.url ? link(row.url, itemLabel) : itemLabel;
105
+ parts.push("<div><b>Item</b> " + item + (row.kind ? " (" + esc(row.kind) + ")" : "") + "</div>");
99
106
  if (row.branch) parts.push("<div><b>Branch</b> " + esc(row.branch) + "</div>");
100
107
  if (row.costUsd !== undefined) {
101
108
  parts.push("<div><b>Cost</b> $" + esc(Number(row.costUsd).toFixed(4)) + "</div>");
@@ -107,12 +114,13 @@ function detailBodyHtml(row) {
107
114
  if (row.error) parts.push("<div><b>Error</b><pre class=failed>" + esc(row.error) + "</pre></div>");
108
115
  if (row.summary) parts.push("<div><b>Comment</b><pre>" + esc(row.summary) + "</pre></div>");
109
116
  if (row.prUrl) {
110
- parts.push('<div><b>PR</b> <a href="' + esc(row.prUrl) + '">' + esc(row.prUrl) + "</a></div>");
117
+ parts.push("<div><b>PR</b> " + link(row.prUrl, esc(row.prUrl)) + "</div>");
111
118
  }
112
119
  parts.push(artifactsHtml(row.artifacts));
113
120
  parts.push(
114
121
  "<div class=muted>started " + esc(fmtWhen(row.startedAt)) +
115
- ", finished " + esc(fmtWhen(row.finishedAt)) + "</div>",
122
+ (row.finishedAt ? ", finished " + esc(fmtWhen(row.finishedAt)) : ", still running") +
123
+ "</div>",
116
124
  );
117
125
  return parts.join("");
118
126
  }
@@ -148,6 +156,21 @@ async function loadPrStatus(runId) {
148
156
  if (el) el.innerHTML = prStatusHtml(status);
149
157
  }
150
158
 
159
+ // "merged" and "closed" are terminal: a PR does not come back from either, so
160
+ // once cached there is nothing to gain from asking again on every refresh.
161
+ function isTerminalPrStatus(status) {
162
+ return Boolean(status && status.available && status.state !== "open");
163
+ }
164
+
165
+ // What the summary table's State cell shows: the live PR status once it
166
+ // resolves to something other than "open" (e.g. "merged" instead of "done"),
167
+ // falling back to the run's own state exactly like before.
168
+ function mainLineState(r) {
169
+ const status = prStatusCache.get(r.runId);
170
+ if (isTerminalPrStatus(status)) return status.state;
171
+ return r.state || ${JSON.stringify(IN_PROGRESS_STATE)};
172
+ }
173
+
151
174
  function paintDetail(runId) {
152
175
  const cell = document.getElementById("detail-" + runId);
153
176
  if (cell) cell.innerHTML = detailHtml.get(runId) || "<div class=muted>loading…</div>";
@@ -170,13 +193,15 @@ function toggle(runId) {
170
193
  function rowHtml(r) {
171
194
  const isOpen = expanded.has(r.runId);
172
195
  const gate = (r.gate || []).map((s) => (s.exitCode === 0 ? "✓" : "✗")).join("");
173
- const pr = r.prUrl ? '<a href="' + esc(r.prUrl) + '">#' + esc(r.prNumber) + "</a>" : "";
196
+ const pr = r.prUrl ? link(r.prUrl, "#" + esc(r.prNumber)) : "";
174
197
  const when = fmtWhen(r.startedAt);
175
- const state = esc(r.state || ${JSON.stringify(IN_PROGRESS_STATE)});
198
+ const itemLabel = esc(r.title || r.itemId || "");
199
+ const item = r.url ? link(r.url, itemLabel) : itemLabel;
200
+ const state = esc(mainLineState(r));
176
201
  const main = "<tr class=run-row>" +
177
202
  "<td><button class='twirl" + (isOpen ? " open" : "") + "' data-run-id='" + esc(r.runId) + "'>▶</button></td>" +
178
203
  "<td class=muted>" + esc(r.runId.slice(0, 8)) + "</td>" +
179
- "<td>" + esc(r.title || r.itemId || "") + "</td>" +
204
+ "<td>" + item + "</td>" +
180
205
  "<td class='state " + state + "'>" + state + "</td>" +
181
206
  "<td>" + esc(r.backend || "") + "</td>" +
182
207
  "<td>" + gate + "</td>" +
@@ -222,6 +247,15 @@ async function refresh() {
222
247
  fetch("api/stats").then((r) => r.json()),
223
248
  fetch("api/control").then((r) => r.json()),
224
249
  ]);
250
+ // So the summary table's State cell can show a live "merged"/"closed"
251
+ // without the row being expanded. Skips rows already known terminal, so
252
+ // this does not grow into "poll every PR this repo has ever had" as run
253
+ // history accumulates.
254
+ await Promise.all(
255
+ runs
256
+ .filter((r) => r.prNumber !== undefined && !isTerminalPrStatus(prStatusCache.get(r.runId)))
257
+ .map((r) => loadPrStatus(r.runId)),
258
+ );
225
259
  if (!toggling) runningBox.checked = control.enabled;
226
260
  document.getElementById("stats").innerHTML = [
227
261
  ["runs", stats.total],
@@ -1 +1 @@
1
- {"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/board/page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,kFAAkF;AAClF,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCA4KQ,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+D1D,CAAC"}
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/board/page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,kFAAkF;AAClF,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAwKH,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqG/C,CAAC"}
@@ -32,7 +32,6 @@ interface WatchFlags {
32
32
  * and an optional `--max-ticks <n>`. Returns undefined for a malformed interval.
33
33
  */
34
34
  export declare function parseWatchFlags(argv: readonly string[]): WatchFlags | undefined;
35
- /** `ghostrail watch`: run ticks on an interval until interrupted (no cron needed). */
36
35
  export declare function cmdWatch(argv: readonly string[], streams: CommandStreams, env?: CommandEnv, cwd?: string): Promise<number>;
37
36
  /** `ghostrail triage`: decompose large issues in the triage queue into sub-issues. */
38
37
  export declare function cmdTriage(argv: readonly string[], streams: CommandStreams, env?: CommandEnv, cwd?: string): Promise<number>;
@@ -87,12 +86,18 @@ export declare function cmdStatus(argv: readonly string[], streams: CommandStrea
87
86
  /** The quickstart templates bundled with the package. */
88
87
  export declare const TEMPLATES: readonly ["code", "content"];
89
88
  /**
90
- * `ghostrail init <template> [--repo <path>] [--force|--diff|--update]`: scaffold
91
- * `ghostrail.toml` and `prompts/` from a quickstart template. Safe for a fresh OR
92
- * an existing repo: existing files are left untouched (skipped) unless `--force`
93
- * is given. `--diff` reports drift instead of writing anything, and `--update`
94
- * takes the template changes this repo never edited while naming what a
95
- * customized file is missing.
89
+ * `ghostrail init <template> [--repo <path>] [--force|--diff|--update|--greenroom [<path>]] [--register]`:
90
+ * scaffold `ghostrail.toml` and `prompts/` from a quickstart template. Safe for
91
+ * a fresh OR an existing repo: existing files are left untouched (skipped)
92
+ * unless `--force` is given. `--diff` reports drift instead of writing
93
+ * anything, `--update` takes the template changes this repo never edited while
94
+ * naming what a customized file is missing, and `--greenroom` scaffolds into a
95
+ * directory outside the repo instead of into it (see
96
+ * specs/greenroom-compatibility.spec.md), converting an existing plain `init`
97
+ * in place when the repo already has one.
98
+ *
99
+ * Registration is skipped, not just the write, when the target looks like a
100
+ * temp directory (TJ-1654); `--register` registers it anyway.
96
101
  */
97
102
  export declare function cmdInit(argv: readonly string[], streams: CommandStreams, cwd?: string, env?: CommandEnv): Promise<number>;
98
103
  interface SkillFlags {
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}