ghostrail 0.15.1 → 0.16.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 (139) hide show
  1. package/README.md +206 -1
  2. package/dist/agent/claude-code.d.ts.map +1 -1
  3. package/dist/agent/claude-code.js +4 -1
  4. package/dist/agent/claude-code.js.map +1 -1
  5. package/dist/board/page.d.ts +1 -1
  6. package/dist/board/page.d.ts.map +1 -1
  7. package/dist/board/page.js +2 -1
  8. package/dist/board/page.js.map +1 -1
  9. package/dist/board/server.d.ts +1 -1
  10. package/dist/board/server.d.ts.map +1 -1
  11. package/dist/board/server.js +7 -1
  12. package/dist/board/server.js.map +1 -1
  13. package/dist/board/stats.d.ts +1 -1
  14. package/dist/board/stats.d.ts.map +1 -1
  15. package/dist/board/stats.js +2 -1
  16. package/dist/board/stats.js.map +1 -1
  17. package/dist/claude-profile/index.d.ts +1 -1
  18. package/dist/claude-profile/index.d.ts.map +1 -1
  19. package/dist/claude-profile/index.js +1 -1
  20. package/dist/claude-profile/index.js.map +1 -1
  21. package/dist/claude-profile/setup.d.ts +7 -0
  22. package/dist/claude-profile/setup.d.ts.map +1 -1
  23. package/dist/claude-profile/setup.js +7 -0
  24. package/dist/claude-profile/setup.js.map +1 -1
  25. package/dist/cli/commands.d.ts +6 -0
  26. package/dist/cli/commands.d.ts.map +1 -1
  27. package/dist/cli/commands.js +142 -33
  28. package/dist/cli/commands.js.map +1 -1
  29. package/dist/cli/update-diagnosis.d.ts +52 -0
  30. package/dist/cli/update-diagnosis.d.ts.map +1 -0
  31. package/dist/cli/update-diagnosis.js +87 -0
  32. package/dist/cli/update-diagnosis.js.map +1 -0
  33. package/dist/cli.d.ts.map +1 -1
  34. package/dist/cli.js +3 -1
  35. package/dist/cli.js.map +1 -1
  36. package/dist/commands/help.d.ts.map +1 -1
  37. package/dist/commands/help.js +11 -0
  38. package/dist/commands/help.js.map +1 -1
  39. package/dist/config/load.d.ts.map +1 -1
  40. package/dist/config/load.js +18 -2
  41. package/dist/config/load.js.map +1 -1
  42. package/dist/config/schema.d.ts +8 -2
  43. package/dist/config/schema.d.ts.map +1 -1
  44. package/dist/config/schema.js.map +1 -1
  45. package/dist/dashboard/index.d.ts +1 -1
  46. package/dist/dashboard/index.d.ts.map +1 -1
  47. package/dist/dashboard/index.js +1 -1
  48. package/dist/dashboard/index.js.map +1 -1
  49. package/dist/dashboard/page.d.ts +7 -1
  50. package/dist/dashboard/page.d.ts.map +1 -1
  51. package/dist/dashboard/page.js +204 -39
  52. package/dist/dashboard/page.js.map +1 -1
  53. package/dist/dashboard/routes.d.ts +32 -0
  54. package/dist/dashboard/routes.d.ts.map +1 -1
  55. package/dist/dashboard/routes.js +45 -0
  56. package/dist/dashboard/routes.js.map +1 -1
  57. package/dist/dashboard/server.d.ts +55 -10
  58. package/dist/dashboard/server.d.ts.map +1 -1
  59. package/dist/dashboard/server.js +91 -14
  60. package/dist/dashboard/server.js.map +1 -1
  61. package/dist/doctor/checks.d.ts +87 -0
  62. package/dist/doctor/checks.d.ts.map +1 -0
  63. package/dist/doctor/checks.js +414 -0
  64. package/dist/doctor/checks.js.map +1 -0
  65. package/dist/doctor/index.d.ts +6 -0
  66. package/dist/doctor/index.d.ts.map +1 -0
  67. package/dist/doctor/index.js +5 -0
  68. package/dist/doctor/index.js.map +1 -0
  69. package/dist/doctor/probes.d.ts +42 -0
  70. package/dist/doctor/probes.d.ts.map +1 -0
  71. package/dist/doctor/probes.js +136 -0
  72. package/dist/doctor/probes.js.map +1 -0
  73. package/dist/doctor/report.d.ts +13 -0
  74. package/dist/doctor/report.d.ts.map +1 -0
  75. package/dist/doctor/report.js +32 -0
  76. package/dist/doctor/report.js.map +1 -0
  77. package/dist/doctor/run.d.ts +48 -0
  78. package/dist/doctor/run.d.ts.map +1 -0
  79. package/dist/doctor/run.js +109 -0
  80. package/dist/doctor/run.js.map +1 -0
  81. package/dist/doctor/types.d.ts +17 -0
  82. package/dist/doctor/types.d.ts.map +1 -0
  83. package/dist/doctor/types.js +6 -0
  84. package/dist/doctor/types.js.map +1 -0
  85. package/dist/factory/state.d.ts +1 -0
  86. package/dist/factory/state.d.ts.map +1 -1
  87. package/dist/factory/state.js +44 -1
  88. package/dist/factory/state.js.map +1 -1
  89. package/dist/loop/budget.d.ts +11 -2
  90. package/dist/loop/budget.d.ts.map +1 -1
  91. package/dist/loop/budget.js +13 -3
  92. package/dist/loop/budget.js.map +1 -1
  93. package/dist/loop/comments.d.ts +20 -0
  94. package/dist/loop/comments.d.ts.map +1 -0
  95. package/dist/loop/comments.js +35 -0
  96. package/dist/loop/comments.js.map +1 -0
  97. package/dist/loop/engine.d.ts.map +1 -1
  98. package/dist/loop/engine.js +18 -0
  99. package/dist/loop/engine.js.map +1 -1
  100. package/dist/loop/index.d.ts +1 -0
  101. package/dist/loop/index.d.ts.map +1 -1
  102. package/dist/loop/index.js +1 -0
  103. package/dist/loop/index.js.map +1 -1
  104. package/dist/source/dependencies.d.ts +81 -0
  105. package/dist/source/dependencies.d.ts.map +1 -0
  106. package/dist/source/dependencies.js +218 -0
  107. package/dist/source/dependencies.js.map +1 -0
  108. package/dist/source/index.d.ts +1 -0
  109. package/dist/source/index.d.ts.map +1 -1
  110. package/dist/source/index.js +1 -0
  111. package/dist/source/index.js.map +1 -1
  112. package/dist/source/linear.d.ts +17 -1
  113. package/dist/source/linear.d.ts.map +1 -1
  114. package/dist/source/linear.js +75 -9
  115. package/dist/source/linear.js.map +1 -1
  116. package/dist/store/events.d.ts +8 -0
  117. package/dist/store/events.d.ts.map +1 -1
  118. package/dist/store/events.js +10 -0
  119. package/dist/store/events.js.map +1 -1
  120. package/dist/store/file-store.d.ts +1 -1
  121. package/dist/store/file-store.d.ts.map +1 -1
  122. package/dist/store/file-store.js +7 -0
  123. package/dist/store/file-store.js.map +1 -1
  124. package/dist/store/index.d.ts +1 -1
  125. package/dist/store/index.d.ts.map +1 -1
  126. package/dist/store/index.js +1 -1
  127. package/dist/store/index.js.map +1 -1
  128. package/dist/store/port.d.ts +15 -0
  129. package/dist/store/port.d.ts.map +1 -1
  130. package/dist/store/port.js +17 -1
  131. package/dist/store/port.js.map +1 -1
  132. package/dist/triage/engine.d.ts.map +1 -1
  133. package/dist/triage/engine.js +2 -0
  134. package/dist/triage/engine.js.map +1 -1
  135. package/package.json +3 -1
  136. package/skill/ghostrail/SKILL.md +30 -29
  137. package/templates/code/prompts/resolve-issue.md +7 -0
  138. package/templates/code/prompts/triage.md +7 -0
  139. package/templates/content/prompts/draft.md +7 -0
@@ -2,14 +2,27 @@ import { createServer } from "node:http";
2
2
  import { homedir } from "node:os";
3
3
  import process from "node:process";
4
4
  import { isLoopback, normalizeToken } from "../board/server.js";
5
- import { entryKey } from "../global/registry.js";
5
+ import { resolveStateDir } from "../factory/state.js";
6
6
  import { repoStateDir } from "../global/state-dir.js";
7
7
  import { FileStore } from "../store/file-store.js";
8
8
  import { DASHBOARD_PAGE_HTML } from "./page.js";
9
- import { isCrossOriginWrite, parseDashboardRoute, parseWatchUpdate } from "./routes.js";
10
- /** The store dir inside a ghostrail. */
9
+ import { isCrossOriginWrite, parseArtifactHash, parseDashboardRoute, parseDetailQuery, parseWatchUpdate, } from "./routes.js";
11
10
  /** How many runs to show per ghostrail. Enough to see recent activity, not a log. */
12
11
  const RUNS_PER_GHOSTRAIL = 5;
12
+ /**
13
+ * One ghostrail's store: the dep when it was supplied, otherwise a file store
14
+ * over the directory `stateDir` resolved.
15
+ *
16
+ * Every read goes through here, the listing and both detail routes, so nothing
17
+ * in this server can disagree with anything else about where a ghostrail's
18
+ * history lives. That agreement is the whole point: TJ-1639 was two places
19
+ * deriving one directory and reaching different answers.
20
+ */
21
+ async function storeFor(deps, entry) {
22
+ if (deps.store !== undefined)
23
+ return deps.store(entry);
24
+ return new FileStore(await deps.stateDir(entry));
25
+ }
13
26
  function sendJson(res, status, data) {
14
27
  res.writeHead(status, { "content-type": "application/json" });
15
28
  res.end(JSON.stringify(data));
@@ -38,15 +51,7 @@ export async function collectViews(deps, entries) {
38
51
  let runs = [];
39
52
  if (health === "ok") {
40
53
  try {
41
- // Keyed on the ghostrail's identity, not its checkout, so a repo's
42
- // runs are one history however many clones of it exist.
43
- const rows = await new FileStore(repoStateDir(entryKey(entry), process.env, homedir())).listRuns({});
44
- runs = rows.slice(0, RUNS_PER_GHOSTRAIL).map((row) => ({
45
- runId: row.runId,
46
- ...(row.itemId === undefined ? {} : { itemId: row.itemId }),
47
- ...(row.state === undefined ? {} : { state: row.state }),
48
- ...(row.title === undefined ? {} : { title: row.title }),
49
- }));
54
+ runs = (await (await storeFor(deps, entry)).listRuns({})).slice(0, RUNS_PER_GHOSTRAIL);
50
55
  }
51
56
  catch {
52
57
  runs = [];
@@ -57,8 +62,9 @@ export async function collectViews(deps, entries) {
57
62
  return views;
58
63
  }
59
64
  /**
60
- * The dashboard's HTTP server: one page, one listing, and one write route that
61
- * sets a ghostrail's `watch` flag and does nothing else.
65
+ * The dashboard's HTTP server: one page, one listing, two read routes for a
66
+ * single run's live PR status and its artifacts, and one write route that sets
67
+ * a ghostrail's `watch` flag and does nothing else.
62
68
  *
63
69
  * It never starts or stops anything. `start` and the service units act on the
64
70
  * flag, which keeps process control off an HTTP surface: the worst a
@@ -96,6 +102,62 @@ export function createDashboardServer(deps, options = {}) {
96
102
  if (route.kind === "ghostrails") {
97
103
  return sendJson(res, 200, { ghostrails: await collectViews(deps, entries) });
98
104
  }
105
+ if (route.kind === "prStatus" || route.kind === "artifact") {
106
+ // Both are reads. The write route states its verb and these did not,
107
+ // which left a form POST able to reach a store read: harmless on its
108
+ // own, since a cross-origin page cannot read the response either way,
109
+ // but a route that accepts verbs it does not mean is the kind of thing
110
+ // a later guard gets reasoned about wrongly.
111
+ if (req.method !== "GET")
112
+ return sendJson(res, 405, { error: "use GET" });
113
+ const key = route.kind === "prStatus" ? "run" : "hash";
114
+ const query = parseDetailQuery(url.searchParams, key);
115
+ if (query === undefined) {
116
+ return sendJson(res, 400, { error: `expected ?path=<ghostrail path>&${key}=<id>` });
117
+ }
118
+ // Same rule the write route holds to: a ghostrail must already be
119
+ // registered. Reading a store under a path supplied by the request
120
+ // would let a caller name any directory on the machine.
121
+ const entry = entries.find((e) => e.path === query.path);
122
+ if (entry === undefined) {
123
+ return sendJson(res, 404, { error: "no registered ghostrail at that path" });
124
+ }
125
+ if (route.kind === "artifact") {
126
+ // A hash that is not a digest is a 404, not a 400: the request is
127
+ // well formed, it just names something no store could hold (TJ-1641).
128
+ const hash = parseArtifactHash(url.searchParams);
129
+ if (hash === undefined)
130
+ return sendJson(res, 404, { error: "not found" });
131
+ const blob = await (await storeFor(deps, entry)).getArtifact(hash);
132
+ if (blob === undefined)
133
+ return sendJson(res, 404, { error: "not found" });
134
+ res.writeHead(200, { "content-type": "application/octet-stream" });
135
+ return res.end(blob);
136
+ }
137
+ const row = await (await storeFor(deps, entry)).getRun(query.value);
138
+ if (row === undefined)
139
+ return sendJson(res, 404, { error: "not found" });
140
+ if (row.prNumber === undefined) {
141
+ return sendJson(res, 404, { error: "no pull request for this run" });
142
+ }
143
+ if (deps.prStatus === undefined)
144
+ return sendJson(res, 200, { available: false });
145
+ try {
146
+ return sendJson(res, 200, {
147
+ available: true,
148
+ ...(await deps.prStatus(entry, row.prNumber)),
149
+ });
150
+ }
151
+ catch (error) {
152
+ // Never a 500. A route whose whole job is "tell me what is known"
153
+ // answers "not known" when the lookup fails, and the page renders
154
+ // that as a muted line rather than an alarm.
155
+ return sendJson(res, 200, {
156
+ available: false,
157
+ error: error instanceof Error ? error.message : String(error),
158
+ });
159
+ }
160
+ }
99
161
  if (route.kind === "watch") {
100
162
  if (req.method !== "POST")
101
163
  return sendJson(res, 405, { error: "use POST" });
@@ -123,4 +185,19 @@ export function createDashboardServer(deps, options = {}) {
123
185
  })().catch(() => sendJson(res, 500, { error: "internal error" }));
124
186
  });
125
187
  }
188
+ /**
189
+ * The default state-dir resolver: the registry's identity when it has one, else
190
+ * the repo itself.
191
+ *
192
+ * The fast path matters because a listing asks once per ghostrail per request,
193
+ * and an entry that already knows its identity has nothing to look up. The slow
194
+ * path is the one that has to be right: a registry written before identities
195
+ * existed has no `repo`, and falling back to its path keys a directory nothing
196
+ * ever writes to, which is exactly how the dashboard came to show no runs.
197
+ */
198
+ export function defaultStateDir(entry) {
199
+ return entry.repo === undefined
200
+ ? resolveStateDir(entry.path)
201
+ : Promise.resolve(repoStateDir(entry.repo, process.env, homedir()));
202
+ }
126
203
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Pure check functions: each takes already-gathered facts and returns a
3
+ * {@link DoctorCheck} (or one per item, for the checks that repeat per prompt).
4
+ * No I/O here — see probes.ts for that — so every rule is testable without a
5
+ * container, a tracker, or the network. Rules are documented in
6
+ * specs/doctor-command.spec.md.
7
+ */
8
+ import type { ConfigError } from "../config/result.js";
9
+ import type { BackendKind } from "../config/schema.js";
10
+ import type { RunRow } from "../store/events.js";
11
+ import type { DoctorCheck } from "./types.js";
12
+ export declare function checkConfig(parsed: {
13
+ ok: true;
14
+ } | {
15
+ ok: false;
16
+ errors: readonly ConfigError[];
17
+ }): DoctorCheck;
18
+ export type PromptField = "agent.prompt" | "respond.prompt" | "triage.prompt";
19
+ export interface PromptFact {
20
+ field: PromptField;
21
+ path: string;
22
+ exists: boolean;
23
+ committed: boolean;
24
+ }
25
+ /** One check per configured prompt path: exists on disk, and is committed. */
26
+ export declare function checkPrompt(fact: PromptFact): DoctorCheck;
27
+ /**
28
+ * The `package.json` script name a gate command invokes, if it looks like a
29
+ * package-manager script invocation (`pnpm <script>`, `npm run <script>`,
30
+ * `yarn <script>`); undefined for anything else, including a package-manager
31
+ * builtin like `pnpm install`. Best-effort: a command this misses is simply not
32
+ * checked further, never reported as broken on a guess.
33
+ */
34
+ export declare function scriptNameOf(command: string): string | undefined;
35
+ /** Gate commands that name a `package.json` script the project does not have. */
36
+ export declare function unresolvedGateCommands(commands: readonly string[], scripts: Record<string, unknown> | undefined): string[];
37
+ export declare function checkGate(commands: readonly string[], scripts: Record<string, unknown> | undefined): DoctorCheck;
38
+ export interface BackendFacts {
39
+ kind: BackendKind;
40
+ image?: string;
41
+ quick: boolean;
42
+ /** undefined only when `quick` skipped the probe. */
43
+ dockerAvailable?: boolean;
44
+ /** undefined when `quick` skipped, docker is unreachable, or no custom image is configured. */
45
+ imagePresent?: boolean;
46
+ }
47
+ export declare function checkBackend(facts: BackendFacts): DoctorCheck;
48
+ export interface ClaudeProfileFacts {
49
+ present: boolean;
50
+ /** Skills requested via `--pin` at `claude-setup` time, not installed. */
51
+ missingPins: string[];
52
+ }
53
+ export declare function checkClaudeProfile(facts: ClaudeProfileFacts): DoctorCheck;
54
+ export type CredentialShape = "unset" | "blank" | "set";
55
+ /** Whether a raw env value is unset, present-but-blank, or a real value. Never returns the value. */
56
+ export declare function classifyCredential(value: string | undefined): CredentialShape;
57
+ export declare function checkClaudeAuthCredential(anthropicApiKey: string | undefined, oauthToken: string | undefined): DoctorCheck;
58
+ export declare function checkLinearCredential(linearApiKey: string | undefined): DoctorCheck;
59
+ export declare function checkGithubCredential(ghToken: string | undefined, githubToken: string | undefined): DoctorCheck;
60
+ export type ClaudeProbeResult = {
61
+ kind: "skipped";
62
+ } | {
63
+ kind: "ok";
64
+ } | {
65
+ kind: "invalid-token";
66
+ } | {
67
+ kind: "error";
68
+ message: string;
69
+ } | {
70
+ kind: "not-run";
71
+ };
72
+ export declare function checkClaudeProbe(result: ClaudeProbeResult, backendKind: BackendKind): DoctorCheck;
73
+ export type LinearProbeResult = {
74
+ kind: "skipped";
75
+ } | {
76
+ kind: "ok";
77
+ } | {
78
+ kind: "unauthorized";
79
+ } | {
80
+ kind: "error";
81
+ message: string;
82
+ } | {
83
+ kind: "not-run";
84
+ };
85
+ export declare function checkLinearProbe(result: LinearProbeResult): DoctorCheck;
86
+ export declare function checkHistory(rows: readonly RunRow[]): DoctorCheck;
87
+ //# sourceMappingURL=checks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../src/doctor/checks.ts"],"names":[],"mappings":"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"}