claude-review-tool 0.1.0 → 0.3.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 (79) hide show
  1. package/README.md +10 -10
  2. package/dist/args.js +7 -1
  3. package/dist/args.js.map +1 -1
  4. package/dist/capture-schema.js +1 -0
  5. package/dist/capture-schema.js.map +1 -1
  6. package/dist/cli.js +153 -22
  7. package/dist/cli.js.map +1 -1
  8. package/dist/doctor.js +199 -0
  9. package/dist/doctor.js.map +1 -0
  10. package/dist/http.js +1 -1
  11. package/dist/http.js.map +1 -1
  12. package/dist/init.js +163 -21
  13. package/dist/init.js.map +1 -1
  14. package/dist/intake-message.js +35 -9
  15. package/dist/intake-message.js.map +1 -1
  16. package/dist/intake.md +7 -7
  17. package/dist/mcp-stdio.js +212 -0
  18. package/dist/mcp-stdio.js.map +1 -0
  19. package/dist/overlay.js +200 -70
  20. package/dist/plugin-marketplace/.claude-plugin/marketplace.json +22 -0
  21. package/dist/plugin-marketplace/plugin/.claude-plugin/plugin.json +9 -0
  22. package/dist/plugin-marketplace/plugin/hooks/hooks.json +16 -0
  23. package/dist/plugin-marketplace/plugin/hooks/session-start.mjs +80 -0
  24. package/dist/plugin-marketplace/plugin/skills/done/SKILL.md +15 -0
  25. package/dist/plugin-marketplace/plugin/skills/intake/SKILL.md +35 -0
  26. package/dist/plugin-marketplace/plugin/skills/next/SKILL.md +72 -0
  27. package/dist/plugin-marketplace/plugin/skills/serve/SKILL.md +67 -0
  28. package/dist/plugin-marketplace/plugin/skills/task/SKILL.md +17 -0
  29. package/dist/plugin-marketplace/plugin/skills/tasks/SKILL.md +11 -0
  30. package/dist/probes.js +107 -0
  31. package/dist/probes.js.map +1 -0
  32. package/dist/prompt.js +78 -0
  33. package/dist/prompt.js.map +1 -0
  34. package/dist/provider-routes.js +91 -0
  35. package/dist/provider-routes.js.map +1 -0
  36. package/dist/providers/claude.js +522 -0
  37. package/dist/providers/claude.js.map +1 -0
  38. package/dist/providers/codex.js +543 -0
  39. package/dist/providers/codex.js.map +1 -0
  40. package/dist/providers/detect.js +116 -0
  41. package/dist/providers/detect.js.map +1 -0
  42. package/dist/providers/exec.js +205 -0
  43. package/dist/providers/exec.js.map +1 -0
  44. package/dist/{session-stub.js → providers/stub.js} +106 -12
  45. package/dist/providers/stub.js.map +1 -0
  46. package/dist/providers/types.js +14 -0
  47. package/dist/providers/types.js.map +1 -0
  48. package/dist/proxy.js +172 -8
  49. package/dist/proxy.js.map +1 -1
  50. package/dist/serve.js +148 -43
  51. package/dist/serve.js.map +1 -1
  52. package/dist/session-events.js +5 -4
  53. package/dist/session-events.js.map +1 -1
  54. package/dist/session.js +212 -379
  55. package/dist/session.js.map +1 -1
  56. package/dist/sessions.js +235 -25
  57. package/dist/sessions.js.map +1 -1
  58. package/dist/setup.js +71 -0
  59. package/dist/setup.js.map +1 -0
  60. package/dist/skills/done/SKILL.md +15 -0
  61. package/dist/skills/intake/SKILL.md +35 -0
  62. package/dist/skills/next/SKILL.md +72 -0
  63. package/dist/skills/serve/SKILL.md +67 -0
  64. package/dist/skills/task/SKILL.md +17 -0
  65. package/dist/skills/tasks/SKILL.md +11 -0
  66. package/dist/skills.js +86 -0
  67. package/dist/skills.js.map +1 -0
  68. package/dist/start.js +218 -0
  69. package/dist/start.js.map +1 -0
  70. package/dist/target.js +86 -28
  71. package/dist/target.js.map +1 -1
  72. package/dist/tasks.js +18 -8
  73. package/dist/tasks.js.map +1 -1
  74. package/dist/version.js +19 -0
  75. package/dist/version.js.map +1 -0
  76. package/dist/write-task.js +42 -0
  77. package/dist/write-task.js.map +1 -0
  78. package/package.json +4 -2
  79. package/dist/session-stub.js.map +0 -1
package/README.md CHANGED
@@ -1,17 +1,17 @@
1
1
  # claude-review-tool
2
2
 
3
- The `crt` CLI for the **Claude Review Tool**: a local proxy that injects an annotation overlay into your running dev site, lets you talk to Claude in the page, and writes self-contained task files to `.crt/tasks/` that any later Claude Code session can complete with `/crt:next`.
3
+ The `crt` CLI for the **Claude Review Tool**: a local proxy that injects an annotation overlay into your running dev site, lets you talk to Claude (or Codex) in the page, and writes self-contained task files to `.crt/tasks/` that any later Claude Code session can complete with `/crt:next`.
4
4
 
5
5
  ```bash
6
- cd my-app && npm run dev # your dev server
7
- npx claude-review-tool serve --open # proxies it at http://localhost:4400 and opens the browser
8
- ```
9
-
10
- Most people install it through the Claude Code plugin instead, which adds `/crt:serve`, `/crt:next`, `/crt:tasks`, `/crt:task` and `/crt:done`:
6
+ # one-time, per machine
7
+ npm i -g claude-review-tool
8
+ crt setup # registers the bundled Claude Code plugin: /crt:serve, /crt:next, /crt:tasks, /crt:task, /crt:done, /crt:intake
11
9
 
12
- ```bash
13
- claude plugin marketplace add simv/crt
14
- claude plugin install crt@crt
10
+ # per project
11
+ cd my-app && npm run dev # your normal dev server
12
+ crt # finds it (or asks for its URL once) → http://localhost:4400 opens; browse, annotate, send
15
13
  ```
16
14
 
17
- Full documentation — the loop, the task format, script-tag mode, troubleshooting — is in the repository README: https://github.com/simv/crt#readme. Node ≥ 20; Windows, macOS and Linux. MIT.
15
+ The plugin ships inside this package (`dist/plugin-marketplace/`), so `crt setup` needs no GitHub access and the plugin version always equals the `crt` version. `npx claude-review-tool` works with no install at all (the first run downloads ~220 MB). `crt doctor` checks node, project, target, port, agents and plugin when something is off.
16
+
17
+ Full documentation — install options, the loop, providers, the task format, script-tag mode, troubleshooting — is in the repository README: https://github.com/simv/crt#readme. Node ≥ 20; Windows, macOS and Linux. MIT.
package/dist/args.js CHANGED
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Minimal argv parser: first positional is the command, `--k v` / `--k=v` / `--flag` become flags.
3
+ * Switches that never take a value are listed so `crt --yes 3000` keeps `3000` as the target (F-69).
4
+ */
5
+ export const BOOLEAN_FLAGS = new Set(["open", "no-open", "yes", "replace", "json", "refresh", "validate", "global", "help", "h", "version"]);
1
6
  export function parseArgs(argv) {
2
7
  const positionals = [];
3
8
  const flags = {};
@@ -9,8 +14,9 @@ export function parseArgs(argv) {
9
14
  flags[a.slice(2, eq)] = a.slice(eq + 1);
10
15
  }
11
16
  else {
17
+ const name = a.slice(2);
12
18
  const next = argv[i + 1];
13
- if (next !== undefined && !next.startsWith("--")) {
19
+ if (!BOOLEAN_FLAGS.has(name) && next !== undefined && !next.startsWith("--")) {
14
20
  flags[a.slice(2)] = next;
15
21
  i++;
16
22
  }
package/dist/args.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,KAAK,GAAqC,EAAE,CAAC;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACnB,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;gBACd,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzB,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjD,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;oBACzB,CAAC,EAAE,CAAC;gBACN,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;AAC/E,CAAC"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;AAQ7I,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,KAAK,GAAqC,EAAE,CAAC;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACnB,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;gBACd,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACxB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7E,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;oBACzB,CAAC,EAAE,CAAC;gBACN,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;AAC/E,CAAC"}
@@ -218,6 +218,7 @@ export const CaptureBundleSchema = obj({
218
218
  id: str("F-23 capture id, assigned by the server (empty when sent by the overlay)"),
219
219
  page: PageSchema,
220
220
  framework: FrameworkSchema,
221
+ note: optional(str("F-68 the developer's message for a page-level chat (a capture with no annotations); absent otherwise", { max: 4000 })),
221
222
  annotations: arr(AnnotationSchema, "F-11 the frozen annotation set, in badge order"),
222
223
  console: arr(ConsoleEntrySchema, "F-20 console.error/warn + uncaught errors since overlay load, oldest first", {
223
224
  max: MAX_CONSOLE_ENTRIES,
@@ -1 +1 @@
1
- {"version":3,"file":"capture-schema.js","sourceRoot":"","sources":["../src/capture-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture-schema.js","sourceRoot":"","sources":["../src/capture-schema.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -2,56 +2,147 @@
2
2
  /**
3
3
  * CRT command-line entry point.
4
4
  *
5
- * Commands (see docs/PRD.md §6):
6
- * crt serve [--target <url>] [--port <n>] [--open] F-1, F-5
7
- * crt init F-35
8
- * crt tasks [--json] F-33 (also refreshes the README index, F-34)
9
- * crt task <ID> [--validate] F-33 (F-32 format check)
5
+ * Commands (see docs/PRD.md §6, docs/PRD-providers.md §6 and docs/PRD-setup.md §6.1):
6
+ * crt [target] [--port <n>] [--open|--no-open] [--yes] [--replace] [--provider <id>] F-69…F-73 (the guided start)
7
+ * crt serve [target] [--target <url>] … the same under its explicit name (F-1, F-5, F-43)
8
+ * crt doctor F-76
9
+ * crt setup [--claude <path>] F-86 (registers the bundled plugin with Claude Code)
10
+ * crt init F-35
11
+ * crt tasks [--json] F-33 (also refreshes the README index, F-34)
12
+ * crt task <ID> [--validate] F-33 (F-32 format check)
13
+ * crt providers [--json] [--refresh] F-45 (every provider's state + the F-44 decision)
14
+ * crt mcp F-49 (stdio write_task server; spawned by an agent, not by hand)
15
+ * crt skills install [--provider <id>] [--global] [--dir <path>] F-58 (the plugin's skills as portable Agent Skills)
16
+ * crt help | --help | -h, crt --version F-69
10
17
  *
11
- * Every failure is one `crt: <message>` line on stderr and a non-zero exit (N-6).
18
+ * Every failure is one `crt: <message>` line on stderr and a non-zero exit (N-6). The server
19
+ * and provider modules (and with them the Agent SDK) are imported only by the commands that
20
+ * need them, so `crt mcp` starts fast and prints nothing but protocol frames on stdout.
12
21
  */
13
22
  import { readFileSync } from "node:fs";
14
23
  import { basename, resolve } from "node:path";
15
24
  import { fileURLToPath } from "node:url";
16
25
  import { parseArgs } from "./args.js";
17
26
  import { CrtError } from "./errors.js";
18
- import { initProject, readConfig } from "./init.js";
27
+ import { describeInit, initProject, readConfig } from "./init.js";
19
28
  import { findProjectRoot } from "./project.js";
20
- import { serve } from "./serve.js";
29
+ import { looksLikeTarget } from "./target.js";
21
30
  import { findTaskFile, listTasks, validateTaskText, writeIndex } from "./tasks.js";
31
+ import { packageVersion } from "./version.js";
22
32
  const USAGE = [
23
33
  "crt — Claude Review Tool",
24
34
  "",
25
35
  "Usage:",
26
- " crt serve [--target <url>] [--port <n>] [--open]",
36
+ " crt [target] start: find the dev server (or ask once), open http://localhost:4400",
37
+ " crt serve [target] the same, under its explicit name",
38
+ " [--target <url>] [--port <n>] [--open | --no-open] [--yes] [--replace] [--provider <id>]",
39
+ " crt doctor check node, project, .crt, target, port, providers, plugin",
40
+ " crt setup register the bundled Claude Code plugin (/crt:serve, /crt:next, …) [--claude <path>]",
27
41
  " crt init",
28
42
  " crt tasks [--json]",
29
43
  " crt task <ID> [--validate]",
44
+ " crt providers [--json] [--refresh]",
45
+ " crt mcp (stdio write_task server for agents; needs CRT_MCP_TOKEN and CRT_MCP_PORT)",
46
+ " crt --version",
47
+ "",
48
+ "A target is a port (3000), host:port (localhost:3000) or a URL. `crt` remembers the one you",
49
+ "typed or picked in .crt/config.local.json; `crt <port>` switches it.",
30
50
  ].join("\n");
51
+ const COMMANDS = new Set(["serve", "doctor", "setup", "init", "tasks", "task", "providers", "mcp", "skills", "help"]);
52
+ /** F-77: a second Ctrl+C within this window exits at once. */
53
+ const FORCE_EXIT_MS = 2_000;
31
54
  async function main(argv) {
32
- const { command, positionals, flags } = parseArgs(argv);
55
+ const parsed = parseArgs(argv);
56
+ let { command, positionals } = parsed;
57
+ const { flags } = parsed;
58
+ // F-69: `crt --version`, `crt help` / `--help` / `-h`.
59
+ if (command === undefined && flags.version === true) {
60
+ const { sdkVersion } = await import("./providers/claude.js");
61
+ console.log(`crt ${packageVersion()} (agent sdk ${sdkVersion() ?? "not installed"})`);
62
+ return 0;
63
+ }
64
+ if (command === "help" || command === "-h" || flags.help === true || flags.h === true) {
65
+ console.log(USAGE);
66
+ return 0;
67
+ }
68
+ // F-69: bare `crt` and `crt <target>` start.
69
+ if (command === undefined || looksLikeTarget(command)) {
70
+ positionals = command === undefined ? [] : [command, ...positionals];
71
+ command = "serve";
72
+ }
73
+ else if (!COMMANDS.has(command)) {
74
+ throw new CrtError(`unknown command "${command}" — a target is a port, host:port or URL; \`crt help\` lists commands`, 2);
75
+ }
33
76
  switch (command) {
77
+ case "mcp": {
78
+ // F-49: stdout is the MCP transport from here on; nothing else may write to it.
79
+ const { runMcpStdio } = await import("./mcp-stdio.js");
80
+ return runMcpStdio({ input: process.stdin, output: process.stdout, env: process.env });
81
+ }
34
82
  case "serve": {
35
- const handle = await serve({
83
+ const positional = positionals[0];
84
+ if (positional !== undefined && !looksLikeTarget(positional)) {
85
+ throw new CrtError(`target "${positional}" is not a port, host:port or URL — try 3000, localhost:3000 or http://…`, 2);
86
+ }
87
+ if (positionals.length > 1)
88
+ throw new CrtError(`unexpected argument "${positionals[1]}" — \`crt help\` lists commands`, 2);
89
+ const { isInteractive, createTerminalPrompter } = await import("./prompt.js");
90
+ const interactive = isInteractive({ yes: flags.yes === true });
91
+ // §5.2: the browser opens by default on a terminal (`--no-open` suppresses) and only with `--open` otherwise.
92
+ const open = flags["no-open"] === true ? false : flags.open === true || interactive;
93
+ const { serve } = await import("./serve.js");
94
+ const result = await serve({
95
+ positional,
36
96
  target: stringFlag(flags.target, "--target <url>"),
37
97
  port: portFlag(flags.port),
38
- open: flags.open === true,
98
+ open,
99
+ replace: flags.replace === true,
100
+ provider: stringFlag(flags.provider, "--provider <id>"),
101
+ interactive,
102
+ ...(interactive ? { prompt: createTerminalPrompter({ input: process.stdin, output: process.stdout }) } : {}),
39
103
  overlayPath: fileURLToPath(new URL("./overlay.js", import.meta.url)),
40
104
  intakePromptPath: fileURLToPath(new URL("./intake.md", import.meta.url)),
41
105
  });
106
+ if (result.kind === "reused")
107
+ return 0;
108
+ const { handle } = result;
109
+ // F-77: Ctrl+C / SIGTERM close cleanly and exit 0; a second Ctrl+C within 2 s exits at once.
110
+ let stopping = false;
42
111
  const stop = () => {
112
+ if (stopping)
113
+ process.exit(0);
114
+ stopping = true;
115
+ const n = handle.openSessions();
116
+ console.log(`Stopping CRT … ${n} session${n === 1 ? "" : "s"} ended; written task files are kept.`);
43
117
  void handle.close().then(() => process.exit(0));
118
+ setTimeout(() => process.exit(0), FORCE_EXIT_MS).unref();
44
119
  };
45
- process.once("SIGINT", stop);
46
- process.once("SIGTERM", stop);
120
+ process.on("SIGINT", stop);
121
+ process.on("SIGTERM", stop);
47
122
  return -1; // keep running
48
123
  }
124
+ case "doctor": {
125
+ const { runDoctor } = await import("./doctor.js");
126
+ const r = await runDoctor({ version: packageVersion() });
127
+ console.log(r.text);
128
+ return r.exitCode;
129
+ }
130
+ case "setup": {
131
+ // F-86: the marketplace built by F-85 sits next to cli.js in the published package.
132
+ const { runSetup } = await import("./setup.js");
133
+ const r = await runSetup({
134
+ version: packageVersion(),
135
+ marketplaceDir: resolve(fileURLToPath(new URL("./plugin-marketplace/", import.meta.url))),
136
+ claude: stringFlag(flags.claude, "--claude <path>") ?? null,
137
+ });
138
+ for (const line of r.lines)
139
+ console.log(line);
140
+ return 0;
141
+ }
49
142
  case "init": {
50
143
  const root = findProjectRoot();
51
144
  const r = initProject(root);
52
- console.log(r.created.length
53
- ? `crt init: created ${r.created.join(", ")}`
54
- : `crt init: ${root} already initialised`);
145
+ console.log(describeInit(root, r) ?? `crt init: ${root} already initialised`);
55
146
  return 0;
56
147
  }
57
148
  case "tasks": {
@@ -68,8 +159,11 @@ async function main(argv) {
68
159
  }
69
160
  const statusW = Math.max(...tasks.map((t) => t.status.length));
70
161
  const priorityW = Math.max(...tasks.map((t) => t.priority.length));
162
+ const providerW = Math.max(...tasks.map((t) => (t.provider ?? "").length));
71
163
  for (const t of tasks) {
72
- console.log(`${t.id} ${t.status.padEnd(statusW)} ${t.priority.padEnd(priorityW)} ${t.title} (${t.updated.slice(0, 10)})`);
164
+ // F-48: the provider as one word after the status (blank for v0.1 files, column omitted when none has one).
165
+ const provider = providerW ? `${(t.provider ?? "").padEnd(providerW)} ` : "";
166
+ console.log(`${t.id} ${t.status.padEnd(statusW)} ${provider}${t.priority.padEnd(priorityW)} ${t.title} (${t.updated.slice(0, 10)})`);
73
167
  }
74
168
  const backlog = tasks.filter((t) => t.status === "backlog").length;
75
169
  console.log(`${tasks.length} task${tasks.length === 1 ? "" : "s"}, ${backlog} in backlog`);
@@ -97,12 +191,49 @@ async function main(argv) {
97
191
  process.stdout.write(text);
98
192
  return 0;
99
193
  }
100
- case undefined:
101
- console.log(USAGE);
194
+ case "providers": {
195
+ // F-45: one row per built-in profile and the F-44 decision. A CLI run is always fresh, so
196
+ // --refresh (which bypasses a running server's cache) is accepted and changes nothing here.
197
+ const root = findProjectRoot();
198
+ const { ProviderRegistry, renderProviders } = await import("./session.js");
199
+ const providers = new ProviderRegistry({ root, config: readConfig(root) });
200
+ await providers.refresh();
201
+ if (flags.json === true) {
202
+ console.log(JSON.stringify(providers.payload(), null, 2));
203
+ return 0;
204
+ }
205
+ console.log(renderProviders(providers.status(), providers.detection()));
206
+ return 0;
207
+ }
208
+ case "skills": {
209
+ // F-58: the plugin's skills as Agent Skills for another agent; the sources ship in dist/skills.
210
+ if (positionals[0] !== "install")
211
+ throw new CrtError("usage: crt skills install [--provider <id>] [--global] [--dir <path>]", 2);
212
+ const root = findProjectRoot();
213
+ const dir = stringFlag(flags.dir, "--dir <path>") ?? null;
214
+ const providerId = stringFlag(flags.provider, "--provider <id>");
215
+ const { ProviderRegistry } = await import("./session.js");
216
+ const { installSkills } = await import("./skills.js");
217
+ const providers = new ProviderRegistry({ root, config: readConfig(root) });
218
+ let profile = null;
219
+ if (providerId) {
220
+ profile = providers.get(providerId);
221
+ if (!profile)
222
+ throw new CrtError(`--provider must be one of ${providers.ids().join(", ")} (got "${providerId}")`);
223
+ }
224
+ else if (!dir) {
225
+ // No --provider and no --dir: the provider the project resolves to (F-43 layers 3–6).
226
+ profile = providers.get(providers.resolve(null).provider);
227
+ }
228
+ const r = installSkills({ sourceDir: fileURLToPath(new URL("./skills/", import.meta.url)), root, profile, global: flags.global === true, dir });
229
+ for (const p of r.written)
230
+ console.log(`crt skills: wrote ${p}`);
231
+ console.log(r.written.length ? `crt skills: ${r.written.length} skill${r.written.length === 1 ? "" : "s"} installed in ${r.dir}` : `crt skills: ${r.dir} already up to date (${r.unchanged.length} skills)`);
102
232
  return 0;
233
+ }
103
234
  default:
104
- console.error(`crt: unknown command "${command}"\n\n${USAGE}`);
105
- return 1;
235
+ console.log(USAGE);
236
+ return 0;
106
237
  }
107
238
  }
108
239
  function tasksDirOf(root) {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/doctor.js ADDED
@@ -0,0 +1,199 @@
1
+ /**
2
+ * `crt doctor` (PRD-setup F-76): a read-only checklist, one row per check — node, project, .crt,
3
+ * target, port, one per provider, plugin — with `ok` / `FAIL` / `warn` / `--` as words (N-17),
4
+ * exit 1 on any `FAIL`. `FAIL` is reserved for what stops `crt` from serving: Node too old, no
5
+ * target or target down, port held, the *resolved* provider unusable. Every other provider's
6
+ * problem and the plugin row are `warn`, so a Claude-only machine passes.
7
+ *
8
+ * Split in two so the rows are unit rows (test/doctor.test.ts): `doctorRows(facts)` is pure over
9
+ * `DoctorFacts`; `collectDoctorFacts` gathers them from the machine with localhost probes only
10
+ * (N-16). The guided start reuses the same rows (minus target and plugin) before its first
11
+ * prompt; the plugin row spawns `claude plugin list --json` and so runs only inside `crt doctor`
12
+ * (PRD-setup §13 decision 5).
13
+ */
14
+ import { existsSync, readFileSync } from "node:fs";
15
+ import { join, resolve } from "node:path";
16
+ import { ignoreEntriesPresent, readConfig } from "./init.js";
17
+ import { fetchHealth, isPortFree } from "./probes.js";
18
+ import { findProjectRoot } from "./project.js";
19
+ import { findOnPath, runExecutable } from "./providers/exec.js";
20
+ import { preflightPasses } from "./providers/types.js";
21
+ import { describeResolution, loginWord, ProviderRegistry } from "./session.js";
22
+ import { sameProject } from "./start.js";
23
+ import { countTaskFiles } from "./tasks.js";
24
+ import { isReachable, normalizeTarget, probeAll } from "./target.js";
25
+ export const MIN_NODE_MAJOR = 20;
26
+ export function doctorRows(f) {
27
+ const rows = [];
28
+ const major = Number(/^v?(\d+)/.exec(f.node)?.[1] ?? 0);
29
+ rows.push(major >= MIN_NODE_MAJOR
30
+ ? { status: "ok", name: "node", detail: `${f.node} (needs ${MIN_NODE_MAJOR} or newer)` }
31
+ : { status: "FAIL", name: "node", detail: `${f.node} — CRT needs Node ${MIN_NODE_MAJOR} or newer` });
32
+ rows.push(f.project.git
33
+ ? { status: "ok", name: "project", detail: `${f.project.root} (.git)` }
34
+ : { status: "warn", name: "project", detail: `${f.project.root} — no .git above; .crt/ will be created here (run from the repo root, or git init)` });
35
+ if (f.crt === null) {
36
+ rows.push({ status: "--", name: ".crt", detail: "not initialised — crt creates it" });
37
+ }
38
+ else {
39
+ const parts = [
40
+ f.crt.tasks === null ? "no tasks/" : `tasks/ (${f.crt.tasks} task${f.crt.tasks === 1 ? "" : "s"})`,
41
+ f.crt.config ? "config.json" : "no config.json",
42
+ ...(f.crt.localConfig ? ["config.local.json"] : []),
43
+ f.crt.ignore ? ".gitignore entries" : "no .gitignore entries",
44
+ ];
45
+ rows.push({ status: "ok", name: ".crt", detail: parts.join(", ") });
46
+ }
47
+ if (f.target !== undefined) {
48
+ if (f.target === null)
49
+ rows.push({ status: "FAIL", name: "target", detail: "none set and nothing on the probed ports — crt <port>" });
50
+ else {
51
+ const label = f.target.source === "local" ? "(remembered)" : f.target.source === "project" ? "(.crt/config.json)" : "(found)";
52
+ rows.push(f.target.up
53
+ ? { status: "ok", name: "target", detail: `${f.target.origin} ${label} — responding` }
54
+ : { status: "FAIL", name: "target", detail: `${f.target.origin} ${label} — not responding` });
55
+ }
56
+ }
57
+ const p = f.port;
58
+ if (p.state === "free")
59
+ rows.push({ status: "ok", name: "port", detail: `${p.port} free` });
60
+ else if (p.state === "crt") {
61
+ const where = p.thisProject ? "this project" : `project ${p.health.projectRoot}`;
62
+ const fix = p.thisProject ? "crt --replace" : `crt starts on ${p.port + 1}, or crt --replace`;
63
+ rows.push({ status: "FAIL", name: "port", detail: `${p.port} held by CRT ${p.health.version ?? "(unknown version)"} → ${p.health.target} (${where}) — ${fix}` });
64
+ }
65
+ else
66
+ rows.push({ status: "FAIL", name: "port", detail: `${p.port} in use by a non-CRT process — crt --port ${p.port + 1}` });
67
+ for (const r of f.providers) {
68
+ const usable = preflightPasses({ installed: r.installed, loggedIn: r.loggedIn, version: r.version, problem: r.problem });
69
+ const name = withVersion(r.agentName, r.version);
70
+ const detail = r.state === "ready"
71
+ ? `${name} — ${loginWord(r.loggedIn)}`
72
+ : r.state === "not logged in"
73
+ ? `${name} — not logged in — ${r.hints.login}`
74
+ : `${name} — ${r.problem ?? r.state}`;
75
+ rows.push({ status: usable ? "ok" : r.id === f.resolution.provider ? "FAIL" : "warn", name: r.id, detail });
76
+ }
77
+ if (f.plugin !== undefined) {
78
+ if (!f.plugin.claudeOnPath)
79
+ rows.push({ status: "--", name: "plugin", detail: "claude not on PATH — skipped" });
80
+ else if (f.plugin.error !== undefined)
81
+ rows.push({ status: "warn", name: "plugin", detail: `could not read \`claude plugin list --json\` (${f.plugin.error}) — run crt setup` });
82
+ else if (f.plugin.installed === null)
83
+ rows.push({ status: "warn", name: "plugin", detail: "crt@crt not installed — run crt setup" });
84
+ else if (f.plugin.installed === f.version)
85
+ rows.push({ status: "ok", name: "plugin", detail: `crt@crt ${f.version} installed (claude on PATH)` });
86
+ else
87
+ rows.push({ status: "warn", name: "plugin", detail: `crt@crt ${f.plugin.installed} installed, this is ${f.version} — run crt setup` });
88
+ }
89
+ return { rows, decision: `→ ${describeResolution(f.resolution)}`, exitCode: rows.some((r) => r.status === "FAIL") ? 1 : 0 };
90
+ }
91
+ /** `Claude Code (Agent SDK)` + `0.3.270` → `Claude Code (Agent SDK 0.3.270)`; `Codex CLI` + `0.154.0` → `Codex CLI 0.154.0`. */
92
+ function withVersion(agentName, version) {
93
+ if (!version)
94
+ return agentName;
95
+ return agentName.endsWith(")") ? `${agentName.slice(0, -1)} ${version})` : `${agentName} ${version}`;
96
+ }
97
+ /** The F-76 layout: `ok node v22.4.0 (needs 20 or newer)`. */
98
+ export function renderRow(r) {
99
+ return `${r.status.padEnd(6)}${r.name.padEnd(10)}${r.detail}`;
100
+ }
101
+ export function renderDoctor(report) {
102
+ return [...report.rows.map(renderRow), report.decision].join("\n");
103
+ }
104
+ export async function collectDoctorFacts(opts) {
105
+ const env = opts.env ?? process.env;
106
+ const root = findProjectRoot(opts.cwd ?? process.cwd());
107
+ const config = readConfig(root);
108
+ const crtDir = join(root, ".crt");
109
+ const tasksDir = resolve(root, config.tasksDir);
110
+ const providers = opts.providers ?? new ProviderRegistry({ root, config, env });
111
+ if (!opts.providers)
112
+ await providers.refresh();
113
+ const facts = {
114
+ node: process.version,
115
+ project: { root, git: existsSync(join(root, ".git")) },
116
+ crt: existsSync(crtDir)
117
+ ? {
118
+ tasks: existsSync(tasksDir) ? countTaskFiles(tasksDir) : null,
119
+ config: existsSync(join(crtDir, "config.json")),
120
+ localConfig: existsSync(join(crtDir, "config.local.json")),
121
+ ignore: ignoreEntriesPresent(root),
122
+ }
123
+ : null,
124
+ port: await portFact(config.port, root),
125
+ providers: providers.status(),
126
+ resolution: providers.resolve(null),
127
+ version: opts.version,
128
+ };
129
+ if (opts.target) {
130
+ if (config.target && config.targetSource) {
131
+ let origin = config.target;
132
+ try {
133
+ origin = normalizeTarget(config.target);
134
+ }
135
+ catch {
136
+ // an unparseable value: probe it as written, which fails, so the row says "not responding"
137
+ }
138
+ facts.target = { origin, source: config.targetSource, up: await isReachable(origin) };
139
+ }
140
+ else {
141
+ const hits = await probeAll();
142
+ facts.target = hits.length ? { origin: hits[0].origin, source: "probe", up: true } : null;
143
+ }
144
+ }
145
+ if (opts.plugin)
146
+ facts.plugin = await pluginFact(env);
147
+ return facts;
148
+ }
149
+ async function portFact(port, root) {
150
+ if (await isPortFree(port))
151
+ return { port, state: "free" };
152
+ const health = await fetchHealth(port);
153
+ if (!health)
154
+ return { port, state: "busy" };
155
+ return { port, state: "crt", health, thisProject: sameProject(health.projectRoot, root) };
156
+ }
157
+ /** F-76 plugin row: `claude plugin list --json` (observed shape: `[{ id: "crt@crt", version, … }]`), parsed defensively (§12 rule 2). */
158
+ async function pluginFact(env) {
159
+ const claude = findOnPath("claude", process.platform, env);
160
+ if (!claude)
161
+ return { claudeOnPath: false };
162
+ const r = await runExecutable(claude, ["plugin", "list", "--json"], { env, timeoutMs: 10_000 });
163
+ if (r.status !== 0)
164
+ return { claudeOnPath: true, installed: null, error: r.error ?? r.stderr.trim().split(/\r?\n/)[0] ?? `exit ${r.status}` };
165
+ return { claudeOnPath: true, installed: installedPluginVersion(r.stdout) };
166
+ }
167
+ /** The `crt@crt` entry's version in `claude plugin list --json` output, or null (absent, or not parseable). */
168
+ export function installedPluginVersion(stdout) {
169
+ try {
170
+ const parsed = JSON.parse(stdout);
171
+ const list = Array.isArray(parsed) ? parsed : parsed && typeof parsed === "object" && Array.isArray(parsed.plugins) ? parsed.plugins : [];
172
+ for (const item of list) {
173
+ if (item && typeof item === "object" && item.id === "crt@crt") {
174
+ const v = item.version;
175
+ return typeof v === "string" ? v : "?";
176
+ }
177
+ }
178
+ }
179
+ catch {
180
+ // not JSON
181
+ }
182
+ return null;
183
+ }
184
+ /** Everything `crt doctor` prints, and its exit code. */
185
+ export async function runDoctor(opts) {
186
+ const report = doctorRows(await collectDoctorFacts({ ...opts, target: true, plugin: true }));
187
+ return { text: renderDoctor(report), exitCode: report.exitCode };
188
+ }
189
+ /** Whether a `package.json` in `root` has `scripts.dev` (the F-71 hint). */
190
+ export function hasDevScript(root) {
191
+ try {
192
+ const pkg = JSON.parse(readFileSync(join(root, "package.json"), "utf8"));
193
+ return typeof pkg.scripts?.dev === "string";
194
+ }
195
+ catch {
196
+ return false;
197
+ }
198
+ }
199
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
package/dist/http.js CHANGED
@@ -20,7 +20,7 @@ export function isLocalOrigin(origin) {
20
20
  const host = url.hostname.toLowerCase();
21
21
  return host === "localhost" || host.endsWith(".localhost") || host === "127.0.0.1" || host === "[::1]";
22
22
  }
23
- export const CORS_METHODS = "GET, POST, DELETE, OPTIONS";
23
+ export const CORS_METHODS = "GET, POST, PUT, DELETE, OPTIONS";
24
24
  export const CORS_HEADERS = "content-type, last-event-id";
25
25
  /**
26
26
  * Add the CORS response headers for an allowed local origin (a no-op for same-origin requests,