@renaiss-shipflow/cli 0.15.1 → 0.16.1

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 (66) hide show
  1. package/dist/commands/activity.d.ts.map +1 -1
  2. package/dist/commands/activity.js +20 -28
  3. package/dist/commands/activity.js.map +1 -1
  4. package/dist/commands/auth.d.ts.map +1 -1
  5. package/dist/commands/auth.js +6 -2
  6. package/dist/commands/auth.js.map +1 -1
  7. package/dist/commands/channels.d.ts.map +1 -1
  8. package/dist/commands/channels.js +28 -42
  9. package/dist/commands/channels.js.map +1 -1
  10. package/dist/commands/claims.d.ts.map +1 -1
  11. package/dist/commands/claims.js +14 -25
  12. package/dist/commands/claims.js.map +1 -1
  13. package/dist/commands/config.d.ts.map +1 -1
  14. package/dist/commands/config.js +23 -6
  15. package/dist/commands/config.js.map +1 -1
  16. package/dist/commands/features.d.ts.map +1 -1
  17. package/dist/commands/features.js +27 -38
  18. package/dist/commands/features.js.map +1 -1
  19. package/dist/commands/helpers.d.ts +84 -4
  20. package/dist/commands/helpers.d.ts.map +1 -1
  21. package/dist/commands/helpers.js +77 -24
  22. package/dist/commands/helpers.js.map +1 -1
  23. package/dist/commands/inbox.d.ts.map +1 -1
  24. package/dist/commands/inbox.js +17 -28
  25. package/dist/commands/inbox.js.map +1 -1
  26. package/dist/commands/init.d.ts.map +1 -1
  27. package/dist/commands/init.js +5 -11
  28. package/dist/commands/init.js.map +1 -1
  29. package/dist/commands/issue.d.ts.map +1 -1
  30. package/dist/commands/issue.js +29 -52
  31. package/dist/commands/issue.js.map +1 -1
  32. package/dist/commands/issues.d.ts.map +1 -1
  33. package/dist/commands/issues.js +13 -25
  34. package/dist/commands/issues.js.map +1 -1
  35. package/dist/commands/pr.d.ts.map +1 -1
  36. package/dist/commands/pr.js +53 -118
  37. package/dist/commands/pr.js.map +1 -1
  38. package/dist/commands/regression.d.ts.map +1 -1
  39. package/dist/commands/regression.js +4 -22
  40. package/dist/commands/regression.js.map +1 -1
  41. package/dist/commands/release.d.ts.map +1 -1
  42. package/dist/commands/release.js +11 -22
  43. package/dist/commands/release.js.map +1 -1
  44. package/dist/commands/repos.d.ts.map +1 -1
  45. package/dist/commands/repos.js +45 -65
  46. package/dist/commands/repos.js.map +1 -1
  47. package/dist/commands/stats.d.ts.map +1 -1
  48. package/dist/commands/stats.js +35 -43
  49. package/dist/commands/stats.js.map +1 -1
  50. package/dist/commands/status.d.ts.map +1 -1
  51. package/dist/commands/status.js +16 -27
  52. package/dist/commands/status.js.map +1 -1
  53. package/dist/commands/test.d.ts.map +1 -1
  54. package/dist/commands/test.js +20 -5
  55. package/dist/commands/test.js.map +1 -1
  56. package/dist/commands/trigger.d.ts.map +1 -1
  57. package/dist/commands/trigger.js +11 -17
  58. package/dist/commands/trigger.js.map +1 -1
  59. package/dist/commands/workflows.d.ts.map +1 -1
  60. package/dist/commands/workflows.js +38 -67
  61. package/dist/commands/workflows.js.map +1 -1
  62. package/dist/packet.d.ts +77 -1
  63. package/dist/packet.d.ts.map +1 -1
  64. package/dist/packet.js +87 -16
  65. package/dist/packet.js.map +1 -1
  66. package/package.json +1 -1
@@ -1,34 +1,96 @@
1
1
  import { ShipFlowClient } from "../client.js";
2
- import { resolveApiUrl, resolveApiKey, resolveAuthToken, loadCredentials, refreshOpts } from "../config.js";
2
+ import { resolveApiUrl, resolveAuthToken, loadCredentials, refreshOpts } from "../config.js";
3
3
  import { resolveProject } from "../project.js";
4
- /** Extract common options from any command that has inherited parent opts. */
4
+ export function buildClientAuth(auth, creds) {
5
+ // JWT wins whenever credentials are present (the `login` path). Fall back to
6
+ // sending the token as an API key otherwise — covers legacy sfk_ keys and a
7
+ // bare SHIPFLOW_API_KEY with no stored JWT credentials.
8
+ if (auth.kind === "jwt" && creds)
9
+ return { jwt: auth.token, ...refreshOpts(creds) };
10
+ return { apiKey: auth.token };
11
+ }
12
+ /** A client for the API-key-style commands (repos/workflows/channels/activity/
13
+ * stats/trigger). Resolves credentials through the SAME context as the loop's
14
+ * JWT commands (resolveAuthToken → buildClientAuth), so running `login` is
15
+ * enough to use everything. Exits 1 when nothing is signed in. */
5
16
  export function getClient(cmd) {
6
17
  const opts = cmd.optsWithGlobals();
7
- const apiKey = resolveApiKey();
8
- if (!apiKey) {
9
- console.error("Error: No API key found. Set SHIPFLOW_API_KEY env var or run: renaiss-shipflow auth login");
18
+ const auth = resolveAuthToken();
19
+ if (!auth) {
20
+ console.error("Not signed in. Run: renaiss-shipflow login (or set SHIPFLOW_API_KEY).");
10
21
  process.exit(1);
11
22
  }
12
- return new ShipFlowClient({
13
- baseUrl: resolveApiUrl(opts.apiUrl),
14
- apiKey,
15
- });
23
+ return new ShipFlowClient({ baseUrl: resolveApiUrl(opts.apiUrl), ...buildClientAuth(auth, loadCredentials()) });
16
24
  }
17
- /** Bootstrap a JWT-authenticated client + resolved project for the loop-facing
18
- * `pr`/`issue` commands. Signs in from stored credentials (JWT + refresh),
19
- * wiring transparent token refresh, and resolves the active project from the
20
- * cwd's repo. Exits 1 when not signed in. */
21
- export async function loadCtx(program) {
25
+ /** Resolve a JWT-authenticated client + the shared credential context WITHOUT
26
+ * resolving a project the project-less core of {@link loadCtx}. For commands
27
+ * that hit an org-scoped endpoint but don't need the cwd's project (e.g.
28
+ * `regression status`), or that must run other checks before the project is
29
+ * resolved (`regression` trigger resolves the ref first). Exits 1 when not
30
+ * signed in. */
31
+ export function loadJwtCtx(program) {
22
32
  const auth = resolveAuthToken();
23
33
  const creds = loadCredentials();
24
34
  if (!auth || !creds) {
25
35
  console.error("Not signed in. Run: renaiss-shipflow login");
26
36
  process.exit(1);
27
37
  }
28
- const client = new ShipFlowClient({ baseUrl: resolveApiUrl(program.opts().apiUrl), jwt: auth.token, ...refreshOpts(creds) });
38
+ // optsWithGlobals opts() on the root program (no ancestors), but stays correct
39
+ // if a subcommand is ever passed (PR #187 review).
40
+ const client = new ShipFlowClient({ baseUrl: resolveApiUrl(program.optsWithGlobals().apiUrl), jwt: auth.token, ...refreshOpts(creds) });
41
+ return { auth, creds, client };
42
+ }
43
+ /** Bootstrap a JWT-authenticated client + resolved project for the loop-facing
44
+ * `pr`/`issue` commands. Signs in from stored credentials (JWT + refresh),
45
+ * wiring transparent token refresh, and resolves the active project from the
46
+ * cwd's repo. Exits 1 when not signed in. */
47
+ export async function loadCtx(program) {
48
+ const { auth, creds, client } = loadJwtCtx(program);
29
49
  const project = await resolveProject(client, creds);
30
50
  return { auth, creds, client, project };
31
51
  }
52
+ /** Best-effort `signal`: on failure, warn (prefixing the message with `label` —
53
+ * e.g. "Merged but ShipFlow signal failed") and continue instead of throwing,
54
+ * so a transient signal blip never fails the surrounding command. Returns
55
+ * whether the signal landed. Omit `label` to swallow silently (no warning).
56
+ * The warn-and-continue semantics are load-bearing for the loop — keep exact. */
57
+ export async function signalBestEffort(ctx, refKind, n, action, body, label) {
58
+ try {
59
+ await ctx.client.signal(ctx.creds.org, ctx.project.projectId, refKind, n, action, body);
60
+ return true;
61
+ }
62
+ catch (e) {
63
+ if (label)
64
+ console.warn(`${label}: ${e instanceof Error ? e.message : String(e)}`);
65
+ return false;
66
+ }
67
+ }
68
+ /** Resolve the shared context for the API-key-style commands in one call: an
69
+ * authenticated {@link getClient}, the target {@link getOrg}, and the requested
70
+ * {@link getFormat}. Preserves the getClient-first order so an unsigned-in
71
+ * invocation still exits 1 before anything else runs. */
72
+ export function getApiCtx(cmd) {
73
+ return { client: getClient(cmd), org: getOrg(cmd), format: getFormat(cmd) };
74
+ }
75
+ /** Unpack a `<number>` positional + optional `--repo` override into the numeric
76
+ * issue/PR number and the resolved repo (defaulting to the active project's).
77
+ * Collapses the `parseInt(numberStr, 10)` + `opts.repo ?? ctx.project.repoFullName`
78
+ * pair repeated across the `pr`/`issue` subcommands. */
79
+ export function resolveTarget(ctx, numberStr, opts) {
80
+ return { number: parseInt(numberStr, 10), repo: opts.repo ?? ctx.project.repoFullName };
81
+ }
82
+ /** Print a command's result once, honoring `--json`. In JSON mode, serializes
83
+ * `jsonValue` (compact by default; pretty-printed with 2-space indent when
84
+ * `pretty`) and returns; otherwise runs `humanPrint`. Replaces the hand-rolled
85
+ * `if (opts.json) { console.log(JSON.stringify(x)); return; }` branches across
86
+ * the commands — JSON output stays byte-identical. */
87
+ export function emit(opts, jsonValue, humanPrint, { pretty = false } = {}) {
88
+ if (opts.json) {
89
+ console.log(pretty ? JSON.stringify(jsonValue, null, 2) : JSON.stringify(jsonValue));
90
+ return;
91
+ }
92
+ humanPrint();
93
+ }
32
94
  export function getOrg(cmd) {
33
95
  return cmd.optsWithGlobals().org || "default";
34
96
  }
@@ -40,15 +102,6 @@ export function getFormat(cmd) {
40
102
  return "yaml";
41
103
  return "table";
42
104
  }
43
- export function handleError(err) {
44
- if (err instanceof Error) {
45
- console.error(`Error: ${err.message}`);
46
- }
47
- else {
48
- console.error("An unknown error occurred.");
49
- }
50
- process.exit(1);
51
- }
52
105
  /**
53
106
  * Reserved exit code for an unexpected/transient CLI failure (an unhandled throw
54
107
  * — a network blip, a `gh`/`git` hiccup, etc.). It's deliberately distinct from
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/commands/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/commands/helpers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/commands/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAIrE;;4EAE4E;AAC5E,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,EAAE,GAC5C;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAMtC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsE3D"}
1
+ {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/commands/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAIrE;;4EAE4E;AAC5E,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,EAAE,GAC5C;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAMtC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgE3D"}
@@ -1,9 +1,7 @@
1
- import { ShipFlowClient } from "../client.js";
2
- import { resolveApiUrl, resolveAuthToken, loadCredentials, refreshOpts, resolveStalePrHours } from "../config.js";
3
- import { resolveProject } from "../project.js";
1
+ import { resolveStalePrHours } from "../config.js";
4
2
  import { ghPRListMine, ghCurrentLogin, ghIssueListByLabel, ghReviewThreads } from "../gh.js";
5
3
  import { classifyPR, issueNeedsReply } from "../pr-state.js";
6
- import { runAction } from "./helpers.js";
4
+ import { emit, loadCtx, runAction } from "./helpers.js";
7
5
  // Re-exported so existing import sites/tests (`../commands/inbox.js`) keep working
8
6
  // now that the pure logic lives in pr-state.ts.
9
7
  export { prAttentionReasons, issueNeedsReply } from "../pr-state.js";
@@ -26,14 +24,7 @@ export function registerInboxCommand(program) {
26
24
  .option("--repo <fullname>", "Override target repo")
27
25
  .option("--json", "Output JSON")
28
26
  .action(runAction(async (opts) => {
29
- const auth = resolveAuthToken();
30
- const creds = loadCredentials();
31
- if (!auth || !creds) {
32
- console.error("Not signed in. Run: renaiss-shipflow login");
33
- process.exit(1);
34
- }
35
- const client = new ShipFlowClient({ baseUrl: resolveApiUrl(program.opts().apiUrl), jwt: auth.token, ...refreshOpts(creds) });
36
- const project = await resolveProject(client, creds);
27
+ const { project } = await loadCtx(program);
37
28
  const repo = opts.repo ?? project.repoFullName;
38
29
  const me = ghCurrentLogin();
39
30
  const staleHours = resolveStalePrHours();
@@ -74,22 +65,20 @@ export function registerInboxCommand(program) {
74
65
  parked: prs.filter((p) => p.state === "awaiting_review" || p.state === "ci_pending").length,
75
66
  degraded,
76
67
  };
77
- if (opts.json) {
78
- console.log(JSON.stringify({ repo, prs, issues, summary }, null, 2));
79
- return;
80
- }
81
- console.log(`📥 Inbox for ${repo}`);
82
- console.log(`Open PRs: ${prs.length} (${summary.prsNeedingAttention} need action, ${summary.readyToMerge} ready to merge) · in-progress issues: ${issues.length} (${summary.issuesNeedingAttention} with new comments)`);
83
- if (degraded)
84
- console.log(`⚠️ ${degraded} PR(s) with partial review-thread data (fetch blipped) — marked "degraded".`);
85
- const icon = {
86
- ci_failing: "🔴", changes_requested: "✏️ ", review_comments: "💬", ci_pending: "⏳",
87
- approved_ready: "", stale: "🕰️ ", awaiting_review: "·",
88
- };
89
- for (const p of prs)
90
- console.log(` ${icon[p.state] ?? "·"} PR #${p.number} [${p.state}] — ${p.title} (ci:${p.ciState}, ${p.ageHours}h)${"degraded" in p && p.degraded ? " ⚠️ degraded" : ""}`);
91
- for (const i of issues)
92
- console.log(` ${i.needsAttention ? "💬" : "·"} #${i.number} — ${i.title}${i.newComment ? ` (last: @${i.newComment.author})` : ""}`);
68
+ emit(opts, { repo, prs, issues, summary }, () => {
69
+ console.log(`📥 Inbox for ${repo}`);
70
+ console.log(`Open PRs: ${prs.length} (${summary.prsNeedingAttention} need action, ${summary.readyToMerge} ready to merge) · in-progress issues: ${issues.length} (${summary.issuesNeedingAttention} with new comments)`);
71
+ if (degraded)
72
+ console.log(`⚠️ ${degraded} PR(s) with partial review-thread data (fetch blipped) — marked "degraded".`);
73
+ const icon = {
74
+ ci_failing: "🔴", changes_requested: "✏️ ", review_comments: "💬", ci_pending: "⏳",
75
+ approved_ready: "✅", stale: "🕰️ ", awaiting_review: "·",
76
+ };
77
+ for (const p of prs)
78
+ console.log(` ${icon[p.state] ?? "·"} PR #${p.number} [${p.state}] — ${p.title} (ci:${p.ciState}, ${p.ageHours}h)${"degraded" in p && p.degraded ? " ⚠️ degraded" : ""}`);
79
+ for (const i of issues)
80
+ console.log(` ${i.needsAttention ? "💬" : "·"} #${i.number} — ${i.title}${i.newComment ? ` (last: @${i.newComment.author})` : ""}`);
81
+ }, { pretty: true });
93
82
  }));
94
83
  }
95
84
  //# sourceMappingURL=inbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/commands/inbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/commands/inbox.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8B1D"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2B1D"}
@@ -1,26 +1,20 @@
1
1
  import { resolve } from "node:path";
2
- import { ShipFlowClient } from "../client.js";
3
- import { resolveApiUrl, resolveAuthToken, loadCredentials, refreshOpts, loadProjectCache, saveProjectCache, projectCacheKeyForRepoPath, } from "../config.js";
2
+ import { loadProjectCache, saveProjectCache, projectCacheKeyForRepoPath, } from "../config.js";
4
3
  import { getCwdRepoRoot, getCwdRemote } from "../project.js";
5
4
  import { promptSelect } from "../prompts.js";
5
+ import { loadJwtCtx, runAction } from "./helpers.js";
6
6
  export function registerInitCommand(program) {
7
7
  program
8
8
  .command("init")
9
9
  .description("Link the current repo to a ShipFlow project")
10
- .action(async () => {
11
- const auth = resolveAuthToken();
12
- const creds = loadCredentials();
13
- if (!auth || !creds) {
14
- console.error("Not signed in. Run: renaiss-shipflow login");
15
- process.exit(1);
16
- }
10
+ .action(runAction(async () => {
11
+ const { creds, client } = loadJwtCtx(program);
17
12
  const root = getCwdRepoRoot();
18
13
  const remote = getCwdRemote();
19
14
  if (!root || !remote) {
20
15
  console.error("Not in a git repo with a github.com origin remote.");
21
16
  process.exit(1);
22
17
  }
23
- const client = new ShipFlowClient({ baseUrl: resolveApiUrl(program.opts().apiUrl), jwt: auth.token, ...refreshOpts(creds) });
24
18
  const lookup = await client.getRepoByFullName(creds.org, remote.owner, remote.repo);
25
19
  if (!lookup.projects?.length) {
26
20
  console.error(`Repo ${remote.owner}/${remote.repo} is not in any project on this org.`);
@@ -36,6 +30,6 @@ export function registerInitCommand(program) {
36
30
  };
37
31
  saveProjectCache(cache);
38
32
  console.log(`Linked ${remote.owner}/${remote.repo} → ${chosen.name}.`);
39
- });
33
+ }));
40
34
  }
41
35
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAC7D,gBAAgB,EAAE,gBAAgB,EAAE,0BAA0B,GAC/D,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QACtG,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAE/G,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7H,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACpF,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,QAAQ,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,qCAAqC,CAAC,CAAC;YACxF,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YACzC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY,CAAC,yBAAyB,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAErG,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACjC,KAAK,CAAC,0BAA0B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG;YACjD,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzF,CAAC;QACF,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,gBAAgB,EAAE,gBAAgB,EAAE,0BAA0B,GAC/D,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QAC3B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAE/G,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACpF,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,QAAQ,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,qCAAqC,CAAC,CAAC;YACxF,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YACzC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY,CAAC,yBAAyB,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAErG,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACjC,KAAK,CAAC,0BAA0B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG;YACjD,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzF,CAAC;QACF,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuO3D"}
1
+ {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiO3D"}
@@ -8,7 +8,7 @@ import { resolveSignoffOwner } from "../config.js";
8
8
  import { sortIssuesForPickup, isActionableForPickup, IN_PROGRESS_LABEL, NEEDS_HUMAN_LABEL } from "../issue-order.js";
9
9
  import { validateEvidenceSelection } from "../evidence.js";
10
10
  import { promptText } from "../prompts.js";
11
- import { loadCtx, runAction } from "./helpers.js";
11
+ import { emit, loadCtx, resolveTarget, runAction, signalBestEffort } from "./helpers.js";
12
12
  export function registerIssueCommand(program) {
13
13
  const issue = program.command("issue").description("Issue actions");
14
14
  issue
@@ -19,7 +19,7 @@ export function registerIssueCommand(program) {
19
19
  .option("--body <body>", "Issue body (- for stdin)")
20
20
  .option("--label <name...>", "Label(s) to apply (created if missing) — e.g. bug auto-qa")
21
21
  .option("--json", "Output JSON")
22
- .action(async (opts) => {
22
+ .action(runAction(async (opts) => {
23
23
  const ctx = await loadCtx(program);
24
24
  const repo = opts.repo ?? ctx.project.repoFullName;
25
25
  const title = opts.title ?? await promptText("Title: ");
@@ -30,12 +30,8 @@ export function registerIssueCommand(program) {
30
30
  const created = ghIssueCreate(repo, title, body, labels);
31
31
  // Note: creating an issue does NOT claim it — claims are exclusive
32
32
  // work locks now; run `issue work <n>` to pick it up.
33
- if (opts.json) {
34
- console.log(JSON.stringify({ number: created.number, url: created.url, labels }));
35
- return;
36
- }
37
- console.log(created.url);
38
- });
33
+ emit(opts, { number: created.number, url: created.url, labels }, () => console.log(created.url));
34
+ }));
39
35
  issue
40
36
  .command("work <number>")
41
37
  .description("Exclusively claim an issue (lock + dump context); exits 3 when another agent holds it")
@@ -43,10 +39,9 @@ export function registerIssueCommand(program) {
43
39
  .option("--agent <name>", "Agent label recorded on the claim (default: $SHIPFLOW_AGENT or hostname)")
44
40
  .option("--ttl <minutes>", "Claim lifetime in minutes (default 120)")
45
41
  .option("--json", "Output JSON")
46
- .action(async (numberStr, opts) => {
42
+ .action(runAction(async (numberStr, opts) => {
47
43
  const ctx = await loadCtx(program);
48
- const number = parseInt(numberStr, 10);
49
- const repo = opts.repo ?? ctx.project.repoFullName;
44
+ const { number, repo } = resolveTarget(ctx, numberStr, opts);
50
45
  const agent = opts.agent ?? process.env.SHIPFLOW_AGENT ?? hostname();
51
46
  // Take the exclusive claim FIRST — if another agent holds the issue,
52
47
  // skip it without doing any work.
@@ -65,7 +60,7 @@ export function registerIssueCommand(program) {
65
60
  const issueData = ghIssueView(repo, number);
66
61
  const triage = await ctx.client.getTriage(ctx.creds.org, ctx.project.projectId, repo, number).catch(() => null);
67
62
  printIssueContext(issueData, triage, repo, ctx.project, opts.json);
68
- });
63
+ }));
69
64
  issue
70
65
  .command("next")
71
66
  .description("Pick & claim the next open, unclaimed issue (for the work loop); exits 4 when none remain")
@@ -105,12 +100,7 @@ export function registerIssueCommand(program) {
105
100
  printIssueContext(issueData, triage, repo, ctx.project, opts.json);
106
101
  return;
107
102
  }
108
- if (opts.json) {
109
- console.log(JSON.stringify({ issue: null, reason: "no_actionable_issues" }, null, 2));
110
- }
111
- else {
112
- console.log("✅ No actionable issues — every open issue is claimed or filtered out.");
113
- }
103
+ emit(opts, { issue: null, reason: "no_actionable_issues" }, () => console.log("✅ No actionable issues — every open issue is claimed or filtered out."), { pretty: true });
114
104
  process.exit(4);
115
105
  }));
116
106
  issue
@@ -118,12 +108,13 @@ export function registerIssueCommand(program) {
118
108
  .description("Release an issue (signal only)")
119
109
  .option("--reason <reason>", "Why you're releasing it (e.g. blocked, finished)")
120
110
  .option("--repo <fullname>", "Override target repo")
111
+ .option("--json", "Output JSON")
121
112
  .action(runAction(async (numberStr, opts) => {
122
113
  const ctx = await loadCtx(program);
123
- const number = parseInt(numberStr, 10);
124
- const repo = opts.repo ?? ctx.project.repoFullName;
125
- await ctx.client.signal(ctx.creds.org, ctx.project.projectId, "issues", number, "release-claim", { repo, reason: opts.reason ?? "" });
126
- console.log(`Released #${number}.`);
114
+ const { number, repo } = resolveTarget(ctx, numberStr, opts);
115
+ const reason = opts.reason ?? "";
116
+ await ctx.client.signal(ctx.creds.org, ctx.project.projectId, "issues", number, "release-claim", { repo, reason });
117
+ emit(opts, { number, released: true, reason }, () => console.log(`Released #${number}.`));
127
118
  }));
128
119
  issue
129
120
  .command("escalate <number>")
@@ -156,8 +147,7 @@ export function registerIssueCommand(program) {
156
147
  }
157
148
  }
158
149
  const ctx = await loadCtx(program);
159
- const number = parseInt(numberStr, 10);
160
- const repo = opts.repo ?? ctx.project.repoFullName;
150
+ const { number, repo } = resolveTarget(ctx, numberStr, opts);
161
151
  // Normalize once so the comment body, console line, and JSON all agree
162
152
  // (a raw "--owner @x" would otherwise print "owner @@x" / leak the @).
163
153
  const owner = normalizeOwner(opts.owner ?? resolveSignoffOwner() ?? ghIssueAuthor(repo, number));
@@ -187,19 +177,9 @@ export function registerIssueCommand(program) {
187
177
  ghIssueComment(repo, number, body);
188
178
  let released = false;
189
179
  if (opts.release) {
190
- try {
191
- await ctx.client.signal(ctx.creds.org, ctx.project.projectId, "issues", number, "release-claim", { repo, reason: `escalated: ${reason}` });
192
- released = true;
193
- }
194
- catch (e) {
195
- console.warn(`Escalated, but the release signal failed: ${e.message}`);
196
- }
180
+ released = await signalBestEffort(ctx, "issues", number, "release-claim", { repo, reason: `escalated: ${reason}` }, "Escalated, but the release signal failed");
197
181
  }
198
- if (opts.json) {
199
- console.log(JSON.stringify({ number, escalated: true, label: NEEDS_HUMAN_LABEL, released, reason, owner: owner ?? null, category: opts.category ?? null, updated }));
200
- return;
201
- }
202
- console.log(`🚧 #${number} escalated${updated ? " (existing 🚧 comment updated)" : ""} → labelled "${NEEDS_HUMAN_LABEL}"${owner ? `, owner @${owner}` : ""}${released ? " and claim released" : " (claim kept — loop skips it this run)"}.`);
182
+ emit(opts, { number, escalated: true, label: NEEDS_HUMAN_LABEL, released, reason, owner: owner ?? null, category: opts.category ?? null, updated }, () => console.log(`🚧 #${number} escalated${updated ? " (existing 🚧 comment updated)" : ""} → labelled "${NEEDS_HUMAN_LABEL}"${owner ? `, owner @${owner}` : ""}${released ? " and claim released" : " (claim kept — loop skips it this run)"}.`));
203
183
  }));
204
184
  issue
205
185
  .command("evidence <number>")
@@ -223,8 +203,7 @@ export function registerIssueCommand(program) {
223
203
  process.exit(1);
224
204
  }
225
205
  const ctx = await loadCtx(program);
226
- const number = parseInt(numberStr, 10);
227
- const repo = opts.repo ?? ctx.project.repoFullName;
206
+ const { number, repo } = resolveTarget(ctx, numberStr, opts);
228
207
  const toImg = (p) => ({ filename: basename(p), data: new Uint8Array(readFileSync(p)) });
229
208
  const res = await ctx.client.attachEvidence(ctx.creds.org, ctx.project.projectId, number, {
230
209
  repo,
@@ -235,20 +214,18 @@ export function registerIssueCommand(program) {
235
214
  after: after.map(toImg),
236
215
  images: misc.map(toImg),
237
216
  });
238
- if (opts.json) {
239
- console.log(JSON.stringify(res, null, 2));
240
- return;
241
- }
242
- const where = [];
243
- if (res.threadNotified)
244
- where.push("reporter thread");
245
- if (res.prCommented)
246
- where.push("PR comment");
247
- if (res.githubCommented)
248
- where.push("GitHub issue comment");
249
- console.log(`🧪 Evidence delivered to: ${where.join(" + ") || "nowhere (check server logs)"}`);
250
- for (const u of res.threadImageUrls ?? [])
251
- console.log(` ${u}`);
217
+ emit(opts, res, () => {
218
+ const where = [];
219
+ if (res.threadNotified)
220
+ where.push("reporter thread");
221
+ if (res.prCommented)
222
+ where.push("PR comment");
223
+ if (res.githubCommented)
224
+ where.push("GitHub issue comment");
225
+ console.log(`🧪 Evidence delivered to: ${where.join(" + ") || "nowhere (check server logs)"}`);
226
+ for (const u of res.threadImageUrls ?? [])
227
+ console.log(` ${u}`);
228
+ }, { pretty: true });
252
229
  }));
253
230
  }
254
231
  function printIssueContext(issueData, triage, repo, project, json) {
@@ -1 +1 @@
1
- {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/commands/issues.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6D5D"}
1
+ {"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/commands/issues.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0D5D"}
@@ -1,11 +1,8 @@
1
1
  import { writeFileSync } from "node:fs";
2
2
  import { resolve } from "node:path";
3
- import { ShipFlowClient } from "../client.js";
4
- import { resolveApiUrl, resolveAuthToken, loadCredentials, refreshOpts } from "../config.js";
5
- import { resolveProject } from "../project.js";
6
3
  import { ghIssueList, ghIssueListFiltered } from "../gh.js";
7
4
  import { buildXlsx } from "../xlsx.js";
8
- import { loadCtx } from "./helpers.js";
5
+ import { emit, loadCtx, runAction } from "./helpers.js";
9
6
  const collect = (v, prev) => prev.concat([v]);
10
7
  export function registerIssuesCommand(program) {
11
8
  const issues = program.command("issues").description("Issue listing");
@@ -15,26 +12,17 @@ export function registerIssuesCommand(program) {
15
12
  .option("--state <state>", "Issue state", "open")
16
13
  .option("--limit <n>", "Max results", "30")
17
14
  .option("--json", "Output JSON")
18
- .action(async (opts) => {
19
- const auth = resolveAuthToken();
20
- const creds = loadCredentials();
21
- if (!auth || !creds) {
22
- console.error("Not signed in. Run: renaiss-shipflow login");
23
- process.exit(1);
24
- }
25
- const client = new ShipFlowClient({ baseUrl: resolveApiUrl(program.opts().apiUrl), jwt: auth.token, ...refreshOpts(creds) });
26
- const project = await resolveProject(client, creds);
15
+ .action(runAction(async (opts) => {
16
+ const { project } = await loadCtx(program);
27
17
  const list = ghIssueList(project.repoFullName, opts.state, parseInt(opts.limit, 10));
28
- if (opts.json) {
29
- console.log(JSON.stringify({ project, issues: list }, null, 2));
30
- return;
31
- }
32
- for (const i of list) {
33
- console.log(`#${i.number} ${i.title}`);
34
- if (i.labels.length)
35
- console.log(` ${i.labels.map((l) => l.name).join(", ")}`);
36
- }
37
- });
18
+ emit(opts, { project, issues: list }, () => {
19
+ for (const i of list) {
20
+ console.log(`#${i.number} ${i.title}`);
21
+ if (i.labels.length)
22
+ console.log(` ${i.labels.map((l) => l.name).join(", ")}`);
23
+ }
24
+ }, { pretty: true });
25
+ }));
38
26
  issues
39
27
  .command("export")
40
28
  .description("Export issue details to an Excel (.xlsx) file, with the filters GitHub issues support")
@@ -47,7 +35,7 @@ export function registerIssuesCommand(program) {
47
35
  .option("--search <query>", 'GitHub search syntax (e.g. "error in:title sort:created-asc")')
48
36
  .option("--limit <n>", "Max issues to export", "1000")
49
37
  .option("--out <file>", "Output path (default: shipflow-issues-<repo>-<date>.xlsx)")
50
- .action(async (opts) => {
38
+ .action(runAction(async (opts) => {
51
39
  if (!["open", "closed", "all"].includes(opts.state)) {
52
40
  console.error(`Invalid --state ${JSON.stringify(opts.state)}: use open, closed, or all.`);
53
41
  process.exit(1);
@@ -68,7 +56,7 @@ export function registerIssuesCommand(program) {
68
56
  `shipflow-issues-${repo.replace("/", "-")}-${new Date().toISOString().slice(0, 10)}.xlsx`);
69
57
  writeFileSync(out, buildXlsx("Issues", EXPORT_HEADERS, list.map(issueRow)));
70
58
  console.log(`Exported ${list.length} issue${list.length === 1 ? "" : "s"} from ${repo} to ${out}`);
71
- });
59
+ }));
72
60
  }
73
61
  const EXPORT_HEADERS = [
74
62
  "Number", "Title", "State", "Labels", "Assignees", "Author",