@renaiss-shipflow/cli 0.2.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 (114) hide show
  1. package/README.md +13 -0
  2. package/dist/__tests__/gh.test.d.ts +2 -0
  3. package/dist/__tests__/gh.test.d.ts.map +1 -0
  4. package/dist/__tests__/gh.test.js +46 -0
  5. package/dist/__tests__/gh.test.js.map +1 -0
  6. package/dist/__tests__/login.test.d.ts +2 -0
  7. package/dist/__tests__/login.test.d.ts.map +1 -0
  8. package/dist/__tests__/login.test.js +25 -0
  9. package/dist/__tests__/login.test.js.map +1 -0
  10. package/dist/__tests__/project.test.d.ts +2 -0
  11. package/dist/__tests__/project.test.d.ts.map +1 -0
  12. package/dist/__tests__/project.test.js +17 -0
  13. package/dist/__tests__/project.test.js.map +1 -0
  14. package/dist/client.d.ts +220 -0
  15. package/dist/client.d.ts.map +1 -0
  16. package/dist/client.js +171 -0
  17. package/dist/client.js.map +1 -0
  18. package/dist/commands/activity.d.ts +3 -0
  19. package/dist/commands/activity.d.ts.map +1 -0
  20. package/dist/commands/activity.js +38 -0
  21. package/dist/commands/activity.js.map +1 -0
  22. package/dist/commands/auth.d.ts +3 -0
  23. package/dist/commands/auth.d.ts.map +1 -0
  24. package/dist/commands/auth.js +58 -0
  25. package/dist/commands/auth.js.map +1 -0
  26. package/dist/commands/channels.d.ts +3 -0
  27. package/dist/commands/channels.d.ts.map +1 -0
  28. package/dist/commands/channels.js +60 -0
  29. package/dist/commands/channels.js.map +1 -0
  30. package/dist/commands/claims.d.ts +3 -0
  31. package/dist/commands/claims.d.ts.map +1 -0
  32. package/dist/commands/claims.js +33 -0
  33. package/dist/commands/claims.js.map +1 -0
  34. package/dist/commands/helpers.d.ts +9 -0
  35. package/dist/commands/helpers.d.ts.map +1 -0
  36. package/dist/commands/helpers.js +36 -0
  37. package/dist/commands/helpers.js.map +1 -0
  38. package/dist/commands/init.d.ts +3 -0
  39. package/dist/commands/init.d.ts.map +1 -0
  40. package/dist/commands/init.js +41 -0
  41. package/dist/commands/init.js.map +1 -0
  42. package/dist/commands/issue.d.ts +3 -0
  43. package/dist/commands/issue.d.ts.map +1 -0
  44. package/dist/commands/issue.js +151 -0
  45. package/dist/commands/issue.js.map +1 -0
  46. package/dist/commands/issues.d.ts +3 -0
  47. package/dist/commands/issues.d.ts.map +1 -0
  48. package/dist/commands/issues.js +34 -0
  49. package/dist/commands/issues.js.map +1 -0
  50. package/dist/commands/login.d.ts +3 -0
  51. package/dist/commands/login.d.ts.map +1 -0
  52. package/dist/commands/login.js +50 -0
  53. package/dist/commands/login.js.map +1 -0
  54. package/dist/commands/pr.d.ts +3 -0
  55. package/dist/commands/pr.d.ts.map +1 -0
  56. package/dist/commands/pr.js +93 -0
  57. package/dist/commands/pr.js.map +1 -0
  58. package/dist/commands/regression.d.ts +3 -0
  59. package/dist/commands/regression.d.ts.map +1 -0
  60. package/dist/commands/regression.js +29 -0
  61. package/dist/commands/regression.js.map +1 -0
  62. package/dist/commands/release.d.ts +3 -0
  63. package/dist/commands/release.d.ts.map +1 -0
  64. package/dist/commands/release.js +48 -0
  65. package/dist/commands/release.js.map +1 -0
  66. package/dist/commands/repos.d.ts +3 -0
  67. package/dist/commands/repos.d.ts.map +1 -0
  68. package/dist/commands/repos.js +88 -0
  69. package/dist/commands/repos.js.map +1 -0
  70. package/dist/commands/stats.d.ts +3 -0
  71. package/dist/commands/stats.d.ts.map +1 -0
  72. package/dist/commands/stats.js +34 -0
  73. package/dist/commands/stats.js.map +1 -0
  74. package/dist/commands/status.d.ts +3 -0
  75. package/dist/commands/status.d.ts.map +1 -0
  76. package/dist/commands/status.js +35 -0
  77. package/dist/commands/status.js.map +1 -0
  78. package/dist/commands/test.d.ts +3 -0
  79. package/dist/commands/test.d.ts.map +1 -0
  80. package/dist/commands/test.js +44 -0
  81. package/dist/commands/test.js.map +1 -0
  82. package/dist/commands/trigger.d.ts +3 -0
  83. package/dist/commands/trigger.d.ts.map +1 -0
  84. package/dist/commands/trigger.js +25 -0
  85. package/dist/commands/trigger.js.map +1 -0
  86. package/dist/commands/workflows.d.ts +3 -0
  87. package/dist/commands/workflows.d.ts.map +1 -0
  88. package/dist/commands/workflows.js +108 -0
  89. package/dist/commands/workflows.js.map +1 -0
  90. package/dist/config.d.ts +39 -0
  91. package/dist/config.d.ts.map +1 -0
  92. package/dist/config.js +67 -0
  93. package/dist/config.js.map +1 -0
  94. package/dist/gh.d.ts +45 -0
  95. package/dist/gh.d.ts.map +1 -0
  96. package/dist/gh.js +82 -0
  97. package/dist/gh.js.map +1 -0
  98. package/dist/index.d.ts +3 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +45 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/output.d.ts +12 -0
  103. package/dist/output.d.ts.map +1 -0
  104. package/dist/output.js +71 -0
  105. package/dist/output.js.map +1 -0
  106. package/dist/project.d.ts +15 -0
  107. package/dist/project.d.ts.map +1 -0
  108. package/dist/project.js +64 -0
  109. package/dist/project.js.map +1 -0
  110. package/dist/prompts.d.ts +4 -0
  111. package/dist/prompts.d.ts.map +1 -0
  112. package/dist/prompts.js +24 -0
  113. package/dist/prompts.js.map +1 -0
  114. package/package.json +46 -0
package/README.md ADDED
@@ -0,0 +1,13 @@
1
+ # @renaiss-shipflow/cli
2
+
3
+ Command-line client for [RenaissShipFlow](https://renaiss-shipflow.zeabur.app) — signal issue claims, PRs, and releases to your team while you work.
4
+
5
+ ```sh
6
+ npm install -g @renaiss-shipflow/cli
7
+ renaiss-shipflow login --api-url https://renaiss-shipflow-api.zeabur.app
8
+ renaiss-shipflow init # run inside a tracked repo
9
+ ```
10
+
11
+ Sign-in rides on your GitHub CLI (`gh`) credentials. See the full command
12
+ reference at `/docs/cli` on your ShipFlow dashboard, and the Claude Code
13
+ skill flow at `/tools/claude-cli`.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gh.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gh.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/gh.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import { describe, it, expect, mock, beforeEach } from "bun:test";
2
+ // Mock child_process before importing gh.ts
3
+ let lastCmd = "";
4
+ let mockStdout = "";
5
+ let mockExit = 0;
6
+ mock.module("node:child_process", () => ({
7
+ execSync: (cmd) => {
8
+ lastCmd = cmd;
9
+ if (mockExit !== 0) {
10
+ const e = new Error("non-zero exit");
11
+ e.status = mockExit;
12
+ throw e;
13
+ }
14
+ return mockStdout;
15
+ },
16
+ spawnSync: (cmd, args) => {
17
+ lastCmd = `${cmd} ${args.join(" ")}`;
18
+ return { status: mockExit, stdout: Buffer.from(mockStdout), stderr: Buffer.from("") };
19
+ },
20
+ }));
21
+ const { ghAuthStatus, ghAuthToken, ghAuthLogin, ghIssueView } = await import("../gh.js");
22
+ beforeEach(() => { lastCmd = ""; mockStdout = ""; mockExit = 0; });
23
+ describe("ghAuthStatus", () => {
24
+ it("returns 'logged-in' when gh exits 0", () => {
25
+ mockExit = 0;
26
+ expect(ghAuthStatus()).toBe("logged-in");
27
+ });
28
+ it("returns 'logged-out' when gh exits non-zero", () => {
29
+ mockExit = 1;
30
+ expect(ghAuthStatus()).toBe("logged-out");
31
+ });
32
+ });
33
+ describe("ghAuthToken", () => {
34
+ it("returns the trimmed token", () => {
35
+ mockStdout = "gho_abc123\n";
36
+ expect(ghAuthToken()).toBe("gho_abc123");
37
+ });
38
+ });
39
+ describe("ghIssueView", () => {
40
+ it("parses JSON output", () => {
41
+ mockStdout = JSON.stringify({ number: 42, title: "x", body: "y", state: "open", labels: [], assignees: [], url: "https://x" });
42
+ const issue = ghIssueView("owner/repo", 42);
43
+ expect(issue.number).toBe(42);
44
+ });
45
+ });
46
+ //# sourceMappingURL=gh.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gh.test.js","sourceRoot":"","sources":["../../src/__tests__/gh.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAElE,4CAA4C;AAC5C,IAAI,OAAO,GAAG,EAAE,CAAC;AACjB,IAAI,UAAU,GAAG,EAAE,CAAC;AACpB,IAAI,QAAQ,GAAG,CAAC,CAAC;AAEjB,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,QAAQ,EAAE,CAAC,GAAW,EAAE,EAAE;QACxB,OAAO,GAAG,GAAG,CAAC;QACd,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,GAAQ,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;YAC1C,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC;YACpB,MAAM,CAAC,CAAC;QACV,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,SAAS,EAAE,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE;QACzC,OAAO,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACxF,CAAC;CACF,CAAC,CAAC,CAAC;AAEJ,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzF,UAAU,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnE,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,QAAQ,GAAG,CAAC,CAAC;QACb,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,QAAQ,GAAG,CAAC,CAAC;QACb,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,UAAU,GAAG,cAAc,CAAC;QAC5B,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;QAC/H,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=login.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/login.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ import { describe, it, expect, mock } from "bun:test";
2
+ mock.module("../gh.js", () => ({
3
+ ghInstalled: () => true,
4
+ ghAuthStatus: () => "logged-in",
5
+ ghAuthLogin: () => true,
6
+ ghAuthToken: () => "gho_test",
7
+ }));
8
+ mock.module("../client.js", () => ({
9
+ ShipFlowClient: class {
10
+ async exchangeGhToken() {
11
+ return {
12
+ token: "jwt-1", refreshToken: "rt-1",
13
+ tenants: [{ token: "jwt-1", refreshToken: "rt-1", tenant: { id: "t1", githubOrg: "acme", displayName: "Acme" } }],
14
+ tenant: { id: "t1", githubOrg: "acme", displayName: "Acme" },
15
+ };
16
+ }
17
+ },
18
+ }));
19
+ describe("login command", () => {
20
+ it("imports without throwing", async () => {
21
+ const m = await import("../commands/login.js");
22
+ expect(typeof m.registerLoginCommand).toBe("function");
23
+ });
24
+ });
25
+ //# sourceMappingURL=login.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.test.js","sourceRoot":"","sources":["../../src/__tests__/login.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEtD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI;IACvB,YAAY,EAAE,GAAG,EAAE,CAAC,WAAW;IAC/B,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI;IACvB,WAAW,EAAE,GAAG,EAAE,CAAC,UAAU;CAC9B,CAAC,CAAC,CAAC;AACJ,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,cAAc,EAAE;QACd,KAAK,CAAC,eAAe;YACnB,OAAO;gBACL,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM;gBACpC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC;gBACjH,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE;aAC7D,CAAC;QACJ,CAAC;KACF;CACF,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=project.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/project.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { describe, it, expect } from "bun:test";
2
+ import { parseGitRemote } from "../project.js";
3
+ describe("parseGitRemote", () => {
4
+ it("parses https URL", () => {
5
+ expect(parseGitRemote("https://github.com/owner/repo.git")).toEqual({ owner: "owner", repo: "repo" });
6
+ });
7
+ it("parses git@github.com SSH URL", () => {
8
+ expect(parseGitRemote("git@github.com:owner/repo.git")).toEqual({ owner: "owner", repo: "repo" });
9
+ });
10
+ it("parses URL without .git suffix", () => {
11
+ expect(parseGitRemote("https://github.com/owner/repo")).toEqual({ owner: "owner", repo: "repo" });
12
+ });
13
+ it("returns null for non-github URL", () => {
14
+ expect(parseGitRemote("https://gitlab.com/x/y")).toBeNull();
15
+ });
16
+ });
17
+ //# sourceMappingURL=project.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.test.js","sourceRoot":"","sources":["../../src/__tests__/project.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,CAAC,cAAc,CAAC,mCAAmC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,cAAc,CAAC,+BAA+B,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACpG,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,cAAc,CAAC,+BAA+B,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACpG,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,220 @@
1
+ /**
2
+ * RenaissShipFlow API client for CLI and MCP server usage.
3
+ */
4
+ export declare class ApiError extends Error {
5
+ status: number;
6
+ body: string;
7
+ constructor(status: number, body: string);
8
+ }
9
+ /** An active exclusive issue claim held by an agent. */
10
+ export interface AgentClaim {
11
+ repo: string;
12
+ issueNumber: number;
13
+ actor: string;
14
+ agent?: string;
15
+ claimedAt: string;
16
+ expiresAt: string;
17
+ }
18
+ /** Where uploaded test evidence landed. */
19
+ export interface EvidenceResult {
20
+ threadImageUrls?: string[];
21
+ githubCommented: boolean;
22
+ threadNotified: boolean;
23
+ }
24
+ /** Thrown when claiming an issue another agent already holds. */
25
+ export declare class ClaimConflictError extends Error {
26
+ holder?: AgentClaim | undefined;
27
+ constructor(holder?: AgentClaim | undefined);
28
+ }
29
+ export interface ClientOptions {
30
+ baseUrl: string;
31
+ apiKey?: string;
32
+ }
33
+ export declare class ShipFlowClient {
34
+ private baseUrl;
35
+ private apiKey?;
36
+ constructor(opts: ClientOptions & {
37
+ jwt?: string;
38
+ });
39
+ private request;
40
+ listRepos(org: string): Promise<RepoListItem[]>;
41
+ getRepo(org: string, repo: string): Promise<Repository>;
42
+ updateWorkflow(org: string, repo: string, workflowType: string, body: {
43
+ enabled?: boolean;
44
+ settings?: Record<string, unknown>;
45
+ notificationChannelIds?: string[];
46
+ }): Promise<unknown>;
47
+ listActivity(org: string, params?: {
48
+ cursor?: string;
49
+ limit?: number;
50
+ }): Promise<PaginatedResponse<ActivityEvent>>;
51
+ getStats(org: string): Promise<OrgStats>;
52
+ getOrg(org: string): Promise<OrgSettings>;
53
+ listChannels(org: string): Promise<Channel[]>;
54
+ addChannel(org: string, body: {
55
+ channelType: string;
56
+ channelIdentifier: string;
57
+ label: string;
58
+ config?: Record<string, string>;
59
+ }): Promise<Channel>;
60
+ exchangeGhToken(ghToken: string): Promise<TokenExchangeResult>;
61
+ refreshJWT(refreshToken: string): Promise<{
62
+ token: string;
63
+ refreshToken: string;
64
+ }>;
65
+ getRepoByFullName(org: string, owner: string, repo: string): Promise<{
66
+ projects: {
67
+ id: string;
68
+ name: string;
69
+ }[];
70
+ }>;
71
+ getTriage(org: string, projectId: string, repo: string, issueNumber: number): Promise<TriageView>;
72
+ signal(org: string, projectId: string, refKind: "issues" | "prs", number: number, action: "claim" | "release-claim" | "opened" | "merged", body: Record<string, unknown>): Promise<void>;
73
+ /** Upload testing screenshots for an issue (multipart). */
74
+ attachEvidence(org: string, projectId: string, number: number, opts: {
75
+ repo: string;
76
+ pr?: number;
77
+ previewUrl?: string;
78
+ caption?: string;
79
+ images: {
80
+ filename: string;
81
+ data: Uint8Array;
82
+ }[];
83
+ }): Promise<EvidenceResult>;
84
+ /** Exclusively claim an issue. Throws ClaimConflictError when held by another agent. */
85
+ claimIssue(org: string, projectId: string, number: number, body: {
86
+ repo: string;
87
+ agent?: string;
88
+ ttlMinutes?: number;
89
+ }): Promise<AgentClaim | null>;
90
+ /** Active claims in the project — who is working on what right now. */
91
+ listClaims(org: string, projectId: string): Promise<AgentClaim[]>;
92
+ triggerRelease(org: string, projectId: string, body: {
93
+ repo: string;
94
+ tag: string;
95
+ baseTag?: string;
96
+ env?: string;
97
+ }): Promise<{
98
+ releaseRunId: string;
99
+ workflowRunIds: string[];
100
+ }>;
101
+ triggerWorkflow(org: string, projectId: string, workflowType: string, inputs: Record<string, unknown>): Promise<{
102
+ runId: string;
103
+ }>;
104
+ getProjectStatus(org: string, projectId: string): Promise<ProjectStatus>;
105
+ }
106
+ export interface RepoListItem {
107
+ id: string;
108
+ name: string;
109
+ fullName: string;
110
+ isActive: boolean;
111
+ workflowCount: number;
112
+ enabledWorkflowCount: number;
113
+ lastActivityAt?: string;
114
+ }
115
+ export interface WorkflowConfig {
116
+ workflowType: string;
117
+ enabled: boolean;
118
+ settings: Record<string, unknown>;
119
+ notificationChannelIds?: string[];
120
+ lastRunAt?: string;
121
+ lastRunStatus?: string;
122
+ }
123
+ export interface Repository {
124
+ id: string;
125
+ name: string;
126
+ fullName: string;
127
+ description?: string;
128
+ htmlUrl: string;
129
+ isActive: boolean;
130
+ workflowConfigs: WorkflowConfig[];
131
+ lastActivityAt?: string;
132
+ createdAt: string;
133
+ }
134
+ export interface ActivityEvent {
135
+ id: string;
136
+ workflowType: string;
137
+ repoName: string;
138
+ repoFullName: string;
139
+ triggerEvent: string;
140
+ status: string;
141
+ startedAt: string;
142
+ completedAt?: string;
143
+ durationMs?: number;
144
+ details?: {
145
+ triggerActor?: string;
146
+ errorMessage?: string;
147
+ inputs?: Record<string, string>;
148
+ outputs?: Record<string, string>;
149
+ };
150
+ }
151
+ export interface PaginatedResponse<T> {
152
+ data: T[];
153
+ pagination: {
154
+ cursor?: string;
155
+ hasMore: boolean;
156
+ total?: number;
157
+ };
158
+ }
159
+ export interface Channel {
160
+ id: string;
161
+ channelType: string;
162
+ channelIdentifier: string;
163
+ label: string;
164
+ createdAt: string;
165
+ }
166
+ export interface OrgSettings {
167
+ name: string;
168
+ plan: string;
169
+ usage: {
170
+ workflowRuns: number;
171
+ workflowRunsLimit: number;
172
+ repos: number;
173
+ reposLimit: number;
174
+ };
175
+ github?: {
176
+ connected: boolean;
177
+ org: string;
178
+ installationId?: number;
179
+ appSlug: string;
180
+ };
181
+ }
182
+ export interface OrgStats {
183
+ totalExecutions: number;
184
+ successCount: number;
185
+ failureCount: number;
186
+ activeRepos: number;
187
+ workflowBreakdown: Record<string, number>;
188
+ }
189
+ export interface TokenExchangeResult {
190
+ token: string;
191
+ refreshToken: string;
192
+ tenants: {
193
+ token: string;
194
+ refreshToken: string;
195
+ tenant: {
196
+ id: string;
197
+ githubOrg: string;
198
+ displayName: string;
199
+ };
200
+ }[];
201
+ tenant: {
202
+ id: string;
203
+ githubOrg: string;
204
+ displayName: string;
205
+ };
206
+ }
207
+ export interface TriageView {
208
+ priority?: string;
209
+ suggestedLabels?: string[];
210
+ relatedFeatures?: string[];
211
+ relatedFiles?: string[];
212
+ relatedIssues?: number[];
213
+ relatedCommits?: string[];
214
+ }
215
+ export interface ProjectStatus {
216
+ recentWorkflows?: unknown[];
217
+ latestSummaries?: Record<string, unknown>;
218
+ [key: string]: unknown;
219
+ }
220
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js ADDED
@@ -0,0 +1,171 @@
1
+ /**
2
+ * RenaissShipFlow API client for CLI and MCP server usage.
3
+ */
4
+ export class ApiError extends Error {
5
+ status;
6
+ body;
7
+ constructor(status, body) {
8
+ super(`API error ${status}: ${body}`);
9
+ this.status = status;
10
+ this.body = body;
11
+ this.name = "ApiError";
12
+ }
13
+ }
14
+ /** Thrown when claiming an issue another agent already holds. */
15
+ export class ClaimConflictError extends Error {
16
+ holder;
17
+ constructor(holder) {
18
+ super(holder
19
+ ? `issue claimed by ${holder.actor}${holder.agent ? ` (${holder.agent})` : ""} until ${holder.expiresAt}`
20
+ : "issue already claimed");
21
+ this.holder = holder;
22
+ this.name = "ClaimConflictError";
23
+ }
24
+ }
25
+ export class ShipFlowClient {
26
+ baseUrl;
27
+ apiKey;
28
+ constructor(opts) {
29
+ this.baseUrl = opts.baseUrl.replace(/\/+$/, "");
30
+ this.apiKey = opts.jwt || opts.apiKey;
31
+ }
32
+ async request(method, path, body) {
33
+ const headers = {
34
+ "Content-Type": "application/json",
35
+ };
36
+ if (this.apiKey) {
37
+ headers["Authorization"] = `Bearer ${this.apiKey}`;
38
+ }
39
+ const res = await fetch(`${this.baseUrl}${path}`, {
40
+ method,
41
+ headers,
42
+ body: body ? JSON.stringify(body) : undefined,
43
+ });
44
+ if (!res.ok) {
45
+ const text = await res.text().catch(() => res.statusText);
46
+ throw new ApiError(res.status, text);
47
+ }
48
+ // Some signal endpoints reply 202 with an empty body; res.json() on an
49
+ // empty body throws, so parse defensively.
50
+ const text = await res.text();
51
+ if (!text)
52
+ return undefined;
53
+ return JSON.parse(text);
54
+ }
55
+ // ── Repos ──────────────────────────────────────────────────
56
+ async listRepos(org) {
57
+ return this.request("GET", `/api/v1/orgs/${encodeURIComponent(org)}/repos`);
58
+ }
59
+ async getRepo(org, repo) {
60
+ return this.request("GET", `/api/v1/orgs/${encodeURIComponent(org)}/repos/${encodeURIComponent(repo)}`);
61
+ }
62
+ // ── Workflows ──────────────────────────────────────────────
63
+ async updateWorkflow(org, repo, workflowType, body) {
64
+ return this.request("PUT", `/api/v1/orgs/${encodeURIComponent(org)}/repos/${repo}/workflows/${encodeURIComponent(workflowType)}`, body);
65
+ }
66
+ // ── Activity ───────────────────────────────────────────────
67
+ async listActivity(org, params) {
68
+ const qs = new URLSearchParams();
69
+ if (params?.cursor)
70
+ qs.set("cursor", params.cursor);
71
+ if (params?.limit)
72
+ qs.set("limit", String(params.limit));
73
+ const query = qs.toString();
74
+ return this.request("GET", `/api/v1/orgs/${encodeURIComponent(org)}/activity${query ? `?${query}` : ""}`);
75
+ }
76
+ // ── Stats ──────────────────────────────────────────────────
77
+ async getStats(org) {
78
+ return this.request("GET", `/api/v1/orgs/${encodeURIComponent(org)}/stats`);
79
+ }
80
+ // ── Org ────────────────────────────────────────────────────
81
+ async getOrg(org) {
82
+ return this.request("GET", `/api/v1/orgs/${org}`);
83
+ }
84
+ // ── Channels ───────────────────────────────────────────────
85
+ async listChannels(org) {
86
+ return this.request("GET", `/api/v1/orgs/${encodeURIComponent(org)}/channels`);
87
+ }
88
+ async addChannel(org, body) {
89
+ return this.request("POST", `/api/v1/orgs/${encodeURIComponent(org)}/channels`, body);
90
+ }
91
+ // ── Auth (gh-driven) ──────────────────────────────────────
92
+ async exchangeGhToken(ghToken) {
93
+ return this.request("POST", `/api/v1/auth/token`, { access_token: ghToken });
94
+ }
95
+ async refreshJWT(refreshToken) {
96
+ return this.request("POST", `/api/v1/auth/refresh`, { refreshToken });
97
+ }
98
+ // ── Repo lookup (CLI project resolution) ─────────────────
99
+ async getRepoByFullName(org, owner, repo) {
100
+ return this.request("GET", `/api/v1/orgs/${encodeURIComponent(org)}/repos/by-fullname/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}`);
101
+ }
102
+ // ── Triage ────────────────────────────────────────────────
103
+ async getTriage(org, projectId, repo, issueNumber) {
104
+ const qs = new URLSearchParams({ repo, issue: String(issueNumber) });
105
+ return this.request("GET", `/api/v1/orgs/${encodeURIComponent(org)}/projects/${encodeURIComponent(projectId)}/triage?${qs}`);
106
+ }
107
+ // ── Signals ──────────────────────────────────────────────
108
+ async signal(org, projectId, refKind, number, action, body) {
109
+ await this.request("POST", `/api/v1/orgs/${encodeURIComponent(org)}/projects/${encodeURIComponent(projectId)}/${refKind}/${number}/${action}`, body);
110
+ }
111
+ // ── Test evidence ────────────────────────────────────────
112
+ /** Upload testing screenshots for an issue (multipart). */
113
+ async attachEvidence(org, projectId, number, opts) {
114
+ const form = new FormData();
115
+ form.set("repo", opts.repo);
116
+ if (opts.pr)
117
+ form.set("pr", String(opts.pr));
118
+ if (opts.previewUrl)
119
+ form.set("previewUrl", opts.previewUrl);
120
+ if (opts.caption)
121
+ form.set("caption", opts.caption);
122
+ for (const img of opts.images) {
123
+ form.append("images", new Blob([img.data]), img.filename);
124
+ }
125
+ const headers = {};
126
+ if (this.apiKey)
127
+ headers["Authorization"] = `Bearer ${this.apiKey}`;
128
+ const res = await fetch(`${this.baseUrl}/api/v1/orgs/${encodeURIComponent(org)}/projects/${encodeURIComponent(projectId)}/issues/${number}/evidence`, { method: "POST", headers, body: form });
129
+ if (!res.ok) {
130
+ throw new ApiError(res.status, await res.text().catch(() => res.statusText));
131
+ }
132
+ return res.json();
133
+ }
134
+ // ── Agent claims ─────────────────────────────────────────
135
+ /** Exclusively claim an issue. Throws ClaimConflictError when held by another agent. */
136
+ async claimIssue(org, projectId, number, body) {
137
+ try {
138
+ const res = await this.request("POST", `/api/v1/orgs/${encodeURIComponent(org)}/projects/${encodeURIComponent(projectId)}/issues/${number}/claim`, body);
139
+ return res?.claim ?? null;
140
+ }
141
+ catch (e) {
142
+ if (e instanceof ApiError && e.status === 409) {
143
+ let holder;
144
+ try {
145
+ holder = JSON.parse(e.body).holder;
146
+ }
147
+ catch { /* fall through */ }
148
+ throw new ClaimConflictError(holder);
149
+ }
150
+ throw e;
151
+ }
152
+ }
153
+ /** Active claims in the project — who is working on what right now. */
154
+ async listClaims(org, projectId) {
155
+ const res = await this.request("GET", `/api/v1/orgs/${encodeURIComponent(org)}/projects/${encodeURIComponent(projectId)}/claims`);
156
+ return res?.claims ?? [];
157
+ }
158
+ // ── Release trigger ──────────────────────────────────────
159
+ async triggerRelease(org, projectId, body) {
160
+ return this.request("POST", `/api/v1/orgs/${encodeURIComponent(org)}/projects/${encodeURIComponent(projectId)}/release`, body);
161
+ }
162
+ // ── Workflow trigger (regression) ────────────────────────
163
+ async triggerWorkflow(org, projectId, workflowType, inputs) {
164
+ return this.request("POST", `/api/v1/orgs/${encodeURIComponent(org)}/projects/${encodeURIComponent(projectId)}/workflows/${encodeURIComponent(workflowType)}/trigger`, inputs);
165
+ }
166
+ // ── Status ───────────────────────────────────────────────
167
+ async getProjectStatus(org, projectId) {
168
+ return this.request("GET", `/api/v1/orgs/${encodeURIComponent(org)}/projects/${encodeURIComponent(projectId)}/status`);
169
+ }
170
+ }
171
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerActivityCommand(program: Command): void;
3
+ //# sourceMappingURL=activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/commands/activity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsC9D"}
@@ -0,0 +1,38 @@
1
+ import { getClient, getOrg, getFormat, handleError } from "./helpers.js";
2
+ import { formatOutput, printTable } from "../output.js";
3
+ export function registerActivityCommand(program) {
4
+ program
5
+ .command("activity")
6
+ .description("View recent workflow activity")
7
+ .option("--last <n>", "Number of recent events to show", "10")
8
+ .option("--json", "Output as JSON")
9
+ .option("--yaml", "Output as YAML")
10
+ .action(async function () {
11
+ try {
12
+ const client = getClient(this);
13
+ const org = getOrg(this);
14
+ const opts = this.opts();
15
+ const limit = parseInt(opts.last, 10) || 10;
16
+ const format = getFormat(this);
17
+ const result = await client.listActivity(org, { limit });
18
+ const events = result.data;
19
+ formatOutput(format, events, () => {
20
+ if (events.length === 0) {
21
+ console.log("No recent activity.");
22
+ return;
23
+ }
24
+ printTable(["Time", "Repo", "Workflow", "Status", "Trigger"], events.map((e) => [
25
+ e.startedAt,
26
+ e.repoName || e.repositoryId || "-",
27
+ e.workflowType,
28
+ e.status,
29
+ e.triggerEvent || "-",
30
+ ]));
31
+ });
32
+ }
33
+ catch (err) {
34
+ handleError(err);
35
+ }
36
+ });
37
+ }
38
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/commands/activity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,YAAY,EAAE,iCAAiC,EAAE,IAAI,CAAC;SAC7D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAE/B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;YAE3B,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE;gBAChC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;oBACnC,OAAO;gBACT,CAAC;gBACD,UAAU,CACR,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,EACjD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAChB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,QAAQ,IAAK,CAAS,CAAC,YAAY,IAAI,GAAG;oBAC5C,CAAC,CAAC,YAAY;oBACd,CAAC,CAAC,MAAM;oBACP,CAAS,CAAC,YAAY,IAAI,GAAG;iBAC/B,CAAC,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerAuthCommands(program: Command): void;
3
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0D3D"}