@retasc/cli 1.51.0 → 1.52.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.
package/CHANGELOG.md CHANGED
@@ -6,10 +6,28 @@ release commits and the issues they reference.
6
6
 
7
7
  Dates are the npm publish date. Each entry names the RTSC issue behind it.
8
8
 
9
- ## 1.51.0 (2026-09-13)
9
+ ## 1.52.0 (2026-09-14)
10
10
 
11
11
  - TODO: describe this release, and name the RTSC issue behind it.
12
12
 
13
+ ## 1.51.0 (2026-09-13)
14
+
15
+ - **RTSC-962** — the proxy now reports git worktrees nobody claimed, so Retasc can see
16
+ work an agent started without saying so. Retasc fenced the END of work and nothing at
17
+ the START: `done` rejects on a claim mismatch, `review` demands a handoff, but the
18
+ server never sees an agent edit a file — so an agent could build thousands of lines
19
+ against an issue the queue still showed as free, and a second agent would read it as
20
+ untouched and duplicate or decompose it.
21
+ The server still reads no git. This process does: a `rtsc-NN/<slug>` worktree with no
22
+ live claim behind it is reported, and the issue gets a **provisional hold** — visible
23
+ on `get_issue`, withheld from `next_issue` / `next_batch`, lapsing after an hour.
24
+ A hold is not a lease and never refuses an explicit `claim_issue`, so the agent that
25
+ forgot to claim always gets its own work back.
26
+ Only ACTIVE worktrees count (uncommitted changes, or a commit in the last day), so an
27
+ abandoned directory cannot park an issue; git runs asynchronously and off the critical
28
+ path, so the census never delays a tool call; and each unclaimed worktree is announced
29
+ once, not on every call. A server without the tool simply produces no holds.
30
+
13
31
  ## 1.50.0 (2026-09-11)
14
32
 
15
33
  - **RTSC-901** — `retasc plan`: which subscription pays for each of your agents, listed
@@ -513,7 +513,6 @@ export async function completeWorkspaceSetup(args) {
513
513
  : (await api.mintKey({
514
514
  orgId,
515
515
  projectId: projectId,
516
- agentName: opts.agent,
517
516
  runtime: opts.runtime ?? "claude-code",
518
517
  // RTSC-859 — bind is the folder door, so this is a workspace key, and the row
519
518
  // says so rather than leaving it to the server's default.
@@ -4,8 +4,10 @@ import { ask, isInteractive, select } from "../lib/prompt.js";
4
4
  // for that: an agent name or a plan label carrying \x1b[ can move the cursor, clear
5
5
  // the line and rewrite the rows above it. That matters most HERE, because this
6
6
  // command prints a list and then asks a question the reader answers by number, and
7
- // `mintKey` stores `agentName` and `runtime` verbatim — so any member of the org can
8
- // choose what lands on an owner's terminal.
7
+ // `mintKey` stores `runtime` verbatim — so any member of the org can choose what lands
8
+ // on an owner's terminal. Since RTSC-958 the NAME is no longer one of those values: it
9
+ // is generated server-side. `clean` still covers it, because every name typed before
10
+ // that change is still stored, and `runtime` is caller-supplied either way.
9
11
  import { clean } from "../lib/text.js";
10
12
  // Nothing about plans is compiled in here — not the list, and not the two terminal
11
13
  // answers either. `cli/src/lib/outcome.ts` records why the CLI cannot import
package/dist/index.js CHANGED
@@ -146,7 +146,6 @@ program
146
146
  .option("--org-id <id>", "Use an existing org id instead of creating one")
147
147
  .requiredOption("--project <name>", "Project name")
148
148
  .requiredOption("--prefix <PREFIX>", "Project prefix, e.g. XEN")
149
- .option("--agent <name>", "Agent member name (default: auto, \"{you}'s {runtime}\")")
150
149
  .option("--runtime <runtime>", "Label for this agent in the Dash (claude-code | codex | grok | …). Does NOT choose where MCP config is written — `retasc setup` wires every harness on the machine.", "claude-code")
151
150
  .option("-y, --yes", "Don't prompt to confirm replacing an existing binding")
152
151
  .option("--no-install", "Don't install `retasc` on this machine; wire the pinned npx launcher instead")
@@ -190,7 +189,6 @@ program
190
189
  opts: {
191
190
  project: opts.project,
192
191
  prefix: opts.prefix,
193
- agent: opts.agent,
194
192
  runtime: opts.runtime,
195
193
  install: opts.install,
196
194
  yes: opts.yes,
@@ -214,7 +212,6 @@ program
214
212
  .option("--project-id <id>", "Use an existing project id")
215
213
  .option("--project <name>", "Create a new project with this name (with --prefix)")
216
214
  .option("--prefix <PREFIX>", "Prefix for a new project, e.g. ACME")
217
- .option("--agent <name>", "Agent member name (default: auto)")
218
215
  .option("--runtime <runtime>", "Label for this agent in the Dash (claude-code | codex | grok | …). Does NOT choose where MCP config is written — `retasc setup` wires every harness on the machine.", "claude-code")
219
216
  .option("-y, --yes", "Don't prompt to confirm replacing an existing binding")
220
217
  // RTSC-523 — decline the global install without a TTY. `bind`/`join` ask when a human
@@ -371,7 +368,6 @@ key
371
368
  .command("mint")
372
369
  .requiredOption("--org-id <id>")
373
370
  .requiredOption("--project-id <id>")
374
- .option("--agent <name>", "Agent member name (default: auto, \"{you}'s {runtime}\")")
375
371
  .option("--runtime <runtime>", "Label for this agent in the Dash (claude-code | codex | grok | …). Does NOT choose where MCP config is written — `retasc setup` wires every harness on the machine.", "claude-code")
376
372
  .option("--name <label>", "Key label")
377
373
  // RTSC-859 — say at mint that this key will never have a local runner. Without it
@@ -394,7 +390,6 @@ key
394
390
  const res = (await api.mintKey({
395
391
  orgId: opts.orgId,
396
392
  projectId: opts.projectId,
397
- agentName: opts.agent,
398
393
  runtime: opts.runtime,
399
394
  keyName: opts.name,
400
395
  // RTSC-859 — said only when the caller actually said something. `--hosted` is
@@ -553,7 +548,6 @@ program
553
548
  .argument("<link>", "The invite link you were given (or just the rtscinv_… code)")
554
549
  .option("--no-bind", "Redeem only — don't set this folder up")
555
550
  .option("--project-id <id>", "Which project to bind to (skips the picker)")
556
- .option("--agent <name>", "Agent member name (default: auto)")
557
551
  .option("--runtime <runtime>", "Label for this agent in the Dash (claude-code | codex | grok | …). Does NOT choose where MCP config is written — `retasc setup` wires every harness on the machine.", "claude-code")
558
552
  // RTSC-477 — name the way back. `--yes` skips the identity question and must never answer
559
553
  // it, so the flag that causes the gap is the right place to say how to close it.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@retasc/cli",
3
- "version": "1.51.0",
3
+ "version": "1.52.0",
4
4
  "description": "Retasc CLI — the issue tracker AI agents pull work from. Sign in with GitHub or Google, create projects, mint agent API keys, and wire your agent to the Retasc MCP server in one command.",
5
5
  "type": "module",
6
6
  "bin": {