@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/commands/workflows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ export interface StoredConfig {
2
+ apiUrl?: string;
3
+ defaultOrg?: string;
4
+ apiKey?: string;
5
+ }
6
+ export interface StoredCredentials {
7
+ jwt: string;
8
+ refreshToken: string;
9
+ tenantId: string;
10
+ org: string;
11
+ expiresAt: number;
12
+ }
13
+ export interface ProjectCacheEntry {
14
+ projectId: string;
15
+ projectName: string;
16
+ org: string;
17
+ tenantId: string;
18
+ }
19
+ type ProjectCache = Record<string, ProjectCacheEntry>;
20
+ export declare const loadConfig: () => StoredConfig;
21
+ export declare const saveConfig: (c: StoredConfig) => void;
22
+ export declare const clearConfig: () => void;
23
+ export declare const loadCredentials: () => StoredCredentials | null;
24
+ export declare const saveCredentials: (c: StoredCredentials) => void;
25
+ export declare const clearCredentials: () => void;
26
+ export declare const loadProjectCache: () => ProjectCache;
27
+ export declare const saveProjectCache: (c: ProjectCache) => void;
28
+ /** Stable key for a repo path (resolves symlinks / paths to the git work tree). */
29
+ export declare function projectCacheKeyForRepoPath(absRepoRoot: string): string;
30
+ export declare function resolveApiUrl(flagUrl?: string): string;
31
+ /** JWT first, API key fallback. */
32
+ export declare function resolveAuthToken(): {
33
+ token: string;
34
+ kind: "jwt" | "apiKey";
35
+ } | null;
36
+ /** Backward-compat: existing call sites that imported resolveApiKey still work. */
37
+ export declare function resolveApiKey(): string | undefined;
38
+ export {};
39
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAyBtD,eAAO,MAAM,UAAU,QAAO,YAAyD,CAAC;AACxF,eAAO,MAAM,UAAU,GAAI,GAAG,YAAY,KAAG,IAAiC,CAAC;AAC/E,eAAO,MAAM,WAAW,QAAO,IAAqD,CAAC;AAGrF,eAAO,MAAM,eAAe,QAAO,iBAAiB,GAAG,IACC,CAAC;AACzD,eAAO,MAAM,eAAe,GAAI,GAAG,iBAAiB,KAAG,IAAgC,CAAC;AACxF,eAAO,MAAM,gBAAgB,QAAO,IAAoD,CAAC;AAGzF,eAAO,MAAM,gBAAgB,QAAO,YAA2D,CAAC;AAChG,eAAO,MAAM,gBAAgB,GAAI,GAAG,YAAY,KAAG,IAAmC,CAAC;AAEvF,mFAAmF;AACnF,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEtE;AAGD,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,mCAAmC;AACnC,wBAAgB,gBAAgB,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAA;CAAE,GAAG,IAAI,CAKnF;AAED,mFAAmF;AACnF,wBAAgB,aAAa,IAAI,MAAM,GAAG,SAAS,CAGlD"}
package/dist/config.js ADDED
@@ -0,0 +1,67 @@
1
+ import { readFileSync, writeFileSync, mkdirSync, existsSync, unlinkSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { homedir } from "node:os";
4
+ import { createHash } from "node:crypto";
5
+ const CONFIG_DIR = join(homedir(), ".config", "renaissshipflow");
6
+ const CONFIG_FILE = join(CONFIG_DIR, "config.json");
7
+ const CREDS_FILE = join(CONFIG_DIR, "credentials.json");
8
+ const PROJECTS_FILE = join(CONFIG_DIR, "projects.json");
9
+ function ensureDir() {
10
+ if (!existsSync(CONFIG_DIR)) {
11
+ mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
12
+ }
13
+ }
14
+ function readJsonOr(path, fallback) {
15
+ try {
16
+ return JSON.parse(readFileSync(path, "utf-8"));
17
+ }
18
+ catch {
19
+ return fallback;
20
+ }
21
+ }
22
+ function writeJson(path, value) {
23
+ ensureDir();
24
+ writeFileSync(path, JSON.stringify(value, null, 2) + "\n", {
25
+ encoding: "utf-8",
26
+ mode: 0o600,
27
+ });
28
+ }
29
+ // ── config (preferences) ──
30
+ export const loadConfig = () => readJsonOr(CONFIG_FILE, {});
31
+ export const saveConfig = (c) => writeJson(CONFIG_FILE, c);
32
+ export const clearConfig = () => { try {
33
+ unlinkSync(CONFIG_FILE);
34
+ }
35
+ catch { } };
36
+ // ── credentials (JWT) ──
37
+ export const loadCredentials = () => readJsonOr(CREDS_FILE, null);
38
+ export const saveCredentials = (c) => writeJson(CREDS_FILE, c);
39
+ export const clearCredentials = () => { try {
40
+ unlinkSync(CREDS_FILE);
41
+ }
42
+ catch { } };
43
+ // ── project cache ──
44
+ export const loadProjectCache = () => readJsonOr(PROJECTS_FILE, {});
45
+ export const saveProjectCache = (c) => writeJson(PROJECTS_FILE, c);
46
+ /** Stable key for a repo path (resolves symlinks / paths to the git work tree). */
47
+ export function projectCacheKeyForRepoPath(absRepoRoot) {
48
+ return createHash("sha256").update(absRepoRoot).digest("hex").slice(0, 16);
49
+ }
50
+ // ── url + auth resolution ──
51
+ export function resolveApiUrl(flagUrl) {
52
+ return flagUrl || process.env.SHIPFLOW_API_URL || loadConfig().apiUrl || "http://localhost:8080";
53
+ }
54
+ /** JWT first, API key fallback. */
55
+ export function resolveAuthToken() {
56
+ const creds = loadCredentials();
57
+ if (creds?.jwt)
58
+ return { token: creds.jwt, kind: "jwt" };
59
+ const k = process.env.SHIPFLOW_API_KEY || loadConfig().apiKey;
60
+ return k ? { token: k, kind: "apiKey" } : null;
61
+ }
62
+ /** Backward-compat: existing call sites that imported resolveApiKey still work. */
63
+ export function resolveApiKey() {
64
+ const a = resolveAuthToken();
65
+ return a?.token;
66
+ }
67
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACjE,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACpD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;AACxD,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AAyBxD,SAAS,SAAS;IAChB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAI,IAAY,EAAE,QAAW;IAC9C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAM,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,KAAc;IAC7C,SAAS,EAAE,CAAC;IACZ,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QACzD,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED,6BAA6B;AAC7B,MAAM,CAAC,MAAM,UAAU,GAAG,GAAiB,EAAE,CAAC,UAAU,CAAe,WAAW,EAAE,EAAE,CAAC,CAAC;AACxF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAe,EAAQ,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC/E,MAAM,CAAC,MAAM,WAAW,GAAG,GAAS,EAAE,GAAG,IAAI,CAAC;IAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAAC,CAAC;AAAC,MAAM,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC;AAErF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,eAAe,GAAG,GAA6B,EAAE,CAC5D,UAAU,CAA2B,UAAU,EAAE,IAAI,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAoB,EAAQ,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACxF,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAS,EAAE,GAAG,IAAI,CAAC;IAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAAC,CAAC;AAAC,MAAM,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC;AAEzF,sBAAsB;AACtB,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAiB,EAAE,CAAC,UAAU,CAAe,aAAa,EAAE,EAAE,CAAC,CAAC;AAChG,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAe,EAAQ,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AAEvF,mFAAmF;AACnF,MAAM,UAAU,0BAA0B,CAAC,WAAmB;IAC5D,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,UAAU,EAAE,CAAC,MAAM,IAAI,uBAAuB,CAAC;AACnG,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,gBAAgB;IAC9B,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,IAAI,KAAK,EAAE,GAAG;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzD,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,UAAU,EAAE,CAAC,MAAM,CAAC;IAC9D,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,KAAK,CAAC;AAClB,CAAC"}
package/dist/gh.d.ts ADDED
@@ -0,0 +1,45 @@
1
+ import { execSync, spawnSync } from "node:child_process";
2
+ /** Override the exec/spawn implementations (test helper). */
3
+ export declare function _setExec(e: typeof execSync, s?: typeof spawnSync): void;
4
+ /** Reset to the real child_process implementations. */
5
+ export declare function _resetExec(): void;
6
+ export declare function ghInstalled(): boolean;
7
+ export declare function ghAuthStatus(): "logged-in" | "logged-out";
8
+ export declare function ghAuthToken(): string;
9
+ /** Runs `gh auth login` interactively (inheriting stdio). Returns true on success. */
10
+ export declare function ghAuthLogin(): boolean;
11
+ export interface GhIssue {
12
+ number: number;
13
+ title: string;
14
+ body: string;
15
+ state: string;
16
+ labels: {
17
+ name: string;
18
+ }[];
19
+ assignees: {
20
+ login: string;
21
+ }[];
22
+ url: string;
23
+ }
24
+ export declare function ghIssueView(repo: string, number: number): GhIssue;
25
+ export declare function ghIssueCreate(repo: string, title: string, body: string): {
26
+ url: string;
27
+ number: number;
28
+ };
29
+ export declare function ghIssueList(repo: string, state?: string, limit?: number): GhIssue[];
30
+ export interface GhPRCreateResult {
31
+ url: string;
32
+ number: number;
33
+ }
34
+ export declare function ghPRCreate(args: {
35
+ repo: string;
36
+ title?: string;
37
+ body: string;
38
+ base?: string;
39
+ head?: string;
40
+ draft?: boolean;
41
+ }): GhPRCreateResult;
42
+ export declare function ghPRMerge(repo: string, number: number, mode?: "squash" | "merge" | "rebase", deleteBranch?: boolean): {
43
+ mergedSha: string;
44
+ };
45
+ //# sourceMappingURL=gh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gh.d.ts","sourceRoot":"","sources":["../src/gh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAQzD,6DAA6D;AAC7D,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,QAAQ,EAAE,CAAC,GAAE,OAAO,SAAqB,GAAG,IAAI,CAGlF;AAED,uDAAuD;AACvD,wBAAgB,UAAU,IAAI,IAAI,CAGjC;AAED,wBAAgB,WAAW,IAAI,OAAO,CAOrC;AAED,wBAAgB,YAAY,IAAI,WAAW,GAAG,YAAY,CAOzD;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,sFAAsF;AACtF,wBAAgB,WAAW,IAAI,OAAO,CAGrC;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3B,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAKjE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAKxG;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK,SAAK,GAAG,OAAO,EAAE,CAK/E;AAED,MAAM,WAAW,gBAAgB;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CAAE;AAElE,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC3F,GAAG,gBAAgB,CAUnB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,QAAQ,GAAG,OAAO,GAAG,QAAmB,EAAE,YAAY,UAAO,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAQlJ"}
package/dist/gh.js ADDED
@@ -0,0 +1,82 @@
1
+ import { execSync, spawnSync } from "node:child_process";
2
+ const FIELDS = "number,title,body,state,labels,assignees,url";
3
+ // Injected executors — replaceable in tests without module mocking
4
+ let _exec = execSync;
5
+ let _spawn = spawnSync;
6
+ /** Override the exec/spawn implementations (test helper). */
7
+ export function _setExec(e, s = spawnSync) {
8
+ _exec = e;
9
+ _spawn = s;
10
+ }
11
+ /** Reset to the real child_process implementations. */
12
+ export function _resetExec() {
13
+ _exec = execSync;
14
+ _spawn = spawnSync;
15
+ }
16
+ export function ghInstalled() {
17
+ try {
18
+ _exec("command -v gh", { stdio: "ignore" });
19
+ return true;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ export function ghAuthStatus() {
26
+ try {
27
+ _exec("gh auth status", { stdio: "ignore" });
28
+ return "logged-in";
29
+ }
30
+ catch {
31
+ return "logged-out";
32
+ }
33
+ }
34
+ export function ghAuthToken() {
35
+ return _exec("gh auth token").toString().trim();
36
+ }
37
+ /** Runs `gh auth login` interactively (inheriting stdio). Returns true on success. */
38
+ export function ghAuthLogin() {
39
+ const r = _spawn("gh", ["auth", "login"], { stdio: "inherit" });
40
+ return r.status === 0;
41
+ }
42
+ export function ghIssueView(repo, number) {
43
+ const out = _exec(`gh issue view ${number} --repo ${shellQuote(repo)} --json ${FIELDS}`).toString();
44
+ return JSON.parse(out);
45
+ }
46
+ export function ghIssueCreate(repo, title, body) {
47
+ const out = _exec(`gh issue create --repo ${shellQuote(repo)} --title ${shellQuote(title)} --body ${shellQuote(body)} --json number,url`).toString();
48
+ return JSON.parse(out);
49
+ }
50
+ export function ghIssueList(repo, state = "open", limit = 30) {
51
+ const out = _exec(`gh issue list --repo ${shellQuote(repo)} --state ${state} --limit ${limit} --json ${FIELDS}`).toString();
52
+ return JSON.parse(out);
53
+ }
54
+ export function ghPRCreate(args) {
55
+ const parts = ["gh pr create", `--repo ${shellQuote(args.repo)}`, `--body ${shellQuote(args.body)}`];
56
+ if (args.title)
57
+ parts.push(`--title ${shellQuote(args.title)}`);
58
+ if (args.base)
59
+ parts.push(`--base ${shellQuote(args.base)}`);
60
+ if (args.head)
61
+ parts.push(`--head ${shellQuote(args.head)}`);
62
+ if (args.draft)
63
+ parts.push(`--draft`);
64
+ const out = _exec(parts.join(" ")).toString().trim();
65
+ // gh pr create prints the URL on stdout.
66
+ const number = parseInt(out.split("/").pop() || "0", 10);
67
+ return { url: out, number };
68
+ }
69
+ export function ghPRMerge(repo, number, mode = "squash", deleteBranch = true) {
70
+ const flags = [`--${mode}`];
71
+ if (deleteBranch)
72
+ flags.push("--delete-branch");
73
+ _exec(`gh pr merge ${number} --repo ${shellQuote(repo)} ${flags.join(" ")}`, { stdio: "inherit" });
74
+ // gh doesn't return the SHA; fetch it via gh pr view.
75
+ const view = _exec(`gh pr view ${number} --repo ${shellQuote(repo)} --json mergeCommit`).toString();
76
+ const parsed = JSON.parse(view);
77
+ return { mergedSha: parsed.mergeCommit?.oid ?? "" };
78
+ }
79
+ function shellQuote(s) {
80
+ return `'${s.replace(/'/g, `'\\''`)}'`;
81
+ }
82
+ //# sourceMappingURL=gh.js.map
package/dist/gh.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gh.js","sourceRoot":"","sources":["../src/gh.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { registerAuthCommands } from "./commands/auth.js";
4
+ import { registerRepoCommands } from "./commands/repos.js";
5
+ import { registerWorkflowCommands } from "./commands/workflows.js";
6
+ import { registerActivityCommand } from "./commands/activity.js";
7
+ import { registerChannelCommands } from "./commands/channels.js";
8
+ import { registerStatsCommand } from "./commands/stats.js";
9
+ import { registerTriggerCommand } from "./commands/trigger.js";
10
+ import { registerLoginCommand } from "./commands/login.js";
11
+ import { registerInitCommand } from "./commands/init.js";
12
+ import { registerStatusCommand } from "./commands/status.js";
13
+ import { registerIssuesCommand } from "./commands/issues.js";
14
+ import { registerIssueCommand } from "./commands/issue.js";
15
+ import { registerClaimsCommand } from "./commands/claims.js";
16
+ import { registerPRCommand } from "./commands/pr.js";
17
+ import { registerTestCommand } from "./commands/test.js";
18
+ import { registerRegressionCommand } from "./commands/regression.js";
19
+ import { registerReleaseCommand } from "./commands/release.js";
20
+ const program = new Command();
21
+ program
22
+ .name("renaiss-shipflow")
23
+ .description("CLI for RenaissShipFlow - AI-powered project management automation")
24
+ .version("0.2.0")
25
+ .option("--api-url <url>", "RenaissShipFlow API base URL")
26
+ .option("--org <org>", "Organization slug (default: \"default\")", "default");
27
+ registerAuthCommands(program);
28
+ registerRepoCommands(program);
29
+ registerWorkflowCommands(program);
30
+ registerActivityCommand(program);
31
+ registerChannelCommands(program);
32
+ registerStatsCommand(program);
33
+ registerTriggerCommand(program);
34
+ registerLoginCommand(program);
35
+ registerInitCommand(program);
36
+ registerStatusCommand(program);
37
+ registerIssuesCommand(program);
38
+ registerIssueCommand(program);
39
+ registerClaimsCommand(program);
40
+ registerPRCommand(program);
41
+ registerTestCommand(program);
42
+ registerRegressionCommand(program);
43
+ registerReleaseCommand(program);
44
+ program.parse();
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,CAAC,oEAAoE,CAAC;KACjF,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;KACzD,MAAM,CAAC,aAAa,EAAE,0CAA0C,EAAE,SAAS,CAAC,CAAC;AAEhF,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Output formatting for CLI commands.
3
+ * Supports table (default), JSON, and YAML output modes.
4
+ */
5
+ export type OutputFormat = "table" | "json" | "yaml";
6
+ export declare function printJson(data: unknown): void;
7
+ export declare function printYaml(data: unknown): void;
8
+ /** Print a simple ASCII table. */
9
+ export declare function printTable(headers: string[], rows: string[][]): void;
10
+ /** Format data according to the chosen format. For json/yaml, prints raw; for table, caller provides formatter. */
11
+ export declare function formatOutput(format: OutputFormat, data: unknown, tableFormatter: () => void): void;
12
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAG7C;AAkCD,kCAAkC;AAClC,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAYpE;AAED,mHAAmH;AACnH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,MAAM,IAAI,GACzB,IAAI,CAYN"}
package/dist/output.js ADDED
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Output formatting for CLI commands.
3
+ * Supports table (default), JSON, and YAML output modes.
4
+ */
5
+ export function printJson(data) {
6
+ console.log(JSON.stringify(data, null, 2));
7
+ }
8
+ export function printYaml(data) {
9
+ // Simple YAML serializer for flat/shallow objects -- avoids external dependency.
10
+ console.log(toYaml(data, 0));
11
+ }
12
+ function toYaml(value, indent) {
13
+ const prefix = " ".repeat(indent);
14
+ if (value === null || value === undefined)
15
+ return "null";
16
+ if (typeof value === "string")
17
+ return value.includes("\n") ? `|\n${value.split("\n").map((l) => prefix + " " + l).join("\n")}` : value;
18
+ if (typeof value === "number" || typeof value === "boolean")
19
+ return String(value);
20
+ if (Array.isArray(value)) {
21
+ if (value.length === 0)
22
+ return "[]";
23
+ return value.map((item) => {
24
+ const inner = toYaml(item, indent + 1);
25
+ if (typeof item === "object" && item !== null && !Array.isArray(item)) {
26
+ const lines = inner.split("\n");
27
+ return `${prefix}- ${lines[0]}\n${lines.slice(1).map((l) => prefix + " " + l).join("\n")}`;
28
+ }
29
+ return `${prefix}- ${inner}`;
30
+ }).join("\n");
31
+ }
32
+ if (typeof value === "object") {
33
+ const entries = Object.entries(value);
34
+ if (entries.length === 0)
35
+ return "{}";
36
+ return entries
37
+ .map(([k, v]) => {
38
+ const inner = toYaml(v, indent + 1);
39
+ if (typeof v === "object" && v !== null) {
40
+ return `${prefix}${k}:\n${inner}`;
41
+ }
42
+ return `${prefix}${k}: ${inner}`;
43
+ })
44
+ .join("\n");
45
+ }
46
+ return String(value);
47
+ }
48
+ /** Print a simple ASCII table. */
49
+ export function printTable(headers, rows) {
50
+ const widths = headers.map((h, i) => Math.max(h.length, ...rows.map((r) => (r[i] || "").length)));
51
+ const sep = widths.map((w) => "-".repeat(w + 2)).join("+");
52
+ const formatRow = (row) => row.map((cell, i) => ` ${(cell || "").padEnd(widths[i])} `).join("|");
53
+ console.log(formatRow(headers));
54
+ console.log(sep);
55
+ rows.forEach((row) => console.log(formatRow(row)));
56
+ }
57
+ /** Format data according to the chosen format. For json/yaml, prints raw; for table, caller provides formatter. */
58
+ export function formatOutput(format, data, tableFormatter) {
59
+ switch (format) {
60
+ case "json":
61
+ printJson(data);
62
+ break;
63
+ case "yaml":
64
+ printYaml(data);
65
+ break;
66
+ case "table":
67
+ tableFormatter();
68
+ break;
69
+ }
70
+ }
71
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type ProjectCacheEntry, type StoredCredentials } from "./config.js";
2
+ import { ShipFlowClient } from "./client.js";
3
+ export interface RepoCoord {
4
+ owner: string;
5
+ repo: string;
6
+ }
7
+ export declare function parseGitRemote(url: string): RepoCoord | null;
8
+ export declare function getCwdRepoRoot(): string | null;
9
+ export declare function getCwdRemote(): RepoCoord | null;
10
+ export interface ResolvedProject extends ProjectCacheEntry {
11
+ repoFullName: string;
12
+ }
13
+ /** Resolves the ShipFlow project for the cwd repo. Prompts on ambiguity. Caches the choice. */
14
+ export declare function resolveProject(client: ShipFlowClient, creds: StoredCredentials): Promise<ResolvedProject>;
15
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,WAAW,SAAS;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;CAAE;AAE3D,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAQ5D;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAM9C;AAED,wBAAgB,YAAY,IAAI,SAAS,GAAG,IAAI,CAO/C;AAED,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IAAG,YAAY,EAAE,MAAM,CAAC;CAAE;AAEpF,+FAA+F;AAC/F,wBAAsB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAgC/G"}
@@ -0,0 +1,64 @@
1
+ import { execSync } from "node:child_process";
2
+ import { resolve } from "node:path";
3
+ import { loadProjectCache, saveProjectCache, projectCacheKeyForRepoPath, } from "./config.js";
4
+ import { promptSelect } from "./prompts.js";
5
+ export function parseGitRemote(url) {
6
+ // SSH: git@github.com:owner/repo.git
7
+ let m = url.match(/^git@github\.com:([^/]+)\/([^/]+?)(?:\.git)?$/);
8
+ if (m)
9
+ return { owner: m[1], repo: m[2] };
10
+ // HTTPS: https://github.com/owner/repo[.git]
11
+ m = url.match(/^https?:\/\/github\.com\/([^/]+)\/([^/]+?)(?:\.git)?\/?$/);
12
+ if (m)
13
+ return { owner: m[1], repo: m[2] };
14
+ return null;
15
+ }
16
+ export function getCwdRepoRoot() {
17
+ try {
18
+ return execSync("git rev-parse --show-toplevel", { stdio: ["ignore", "pipe", "ignore"] }).toString().trim();
19
+ }
20
+ catch {
21
+ return null;
22
+ }
23
+ }
24
+ export function getCwdRemote() {
25
+ try {
26
+ const url = execSync("git remote get-url origin", { stdio: ["ignore", "pipe", "ignore"] }).toString().trim();
27
+ return parseGitRemote(url);
28
+ }
29
+ catch {
30
+ return null;
31
+ }
32
+ }
33
+ /** Resolves the ShipFlow project for the cwd repo. Prompts on ambiguity. Caches the choice. */
34
+ export async function resolveProject(client, creds) {
35
+ const root = getCwdRepoRoot();
36
+ if (!root) {
37
+ throw new Error("Not in a git repository.");
38
+ }
39
+ const remote = getCwdRemote();
40
+ if (!remote) {
41
+ throw new Error("origin remote is not a github.com URL.");
42
+ }
43
+ const repoFullName = `${remote.owner}/${remote.repo}`;
44
+ const cacheKey = projectCacheKeyForRepoPath(resolve(root));
45
+ const cache = loadProjectCache();
46
+ if (cache[cacheKey])
47
+ return { ...cache[cacheKey], repoFullName };
48
+ const lookup = await client.getRepoByFullName(creds.org, remote.owner, remote.repo);
49
+ if (!lookup.projects || lookup.projects.length === 0) {
50
+ throw new Error(`Repo ${repoFullName} is not in any ShipFlow project. Run \`renaiss-shipflow init\`.`);
51
+ }
52
+ let chosen = lookup.projects[0];
53
+ if (lookup.projects.length > 1) {
54
+ const idx = await promptSelect(`Repo ${repoFullName} is in multiple ShipFlow projects. Pick one:`, lookup.projects.map((p) => p.name));
55
+ chosen = lookup.projects[idx];
56
+ }
57
+ const entry = {
58
+ projectId: chosen.id, projectName: chosen.name, org: creds.org, tenantId: creds.tenantId,
59
+ };
60
+ cache[cacheKey] = entry;
61
+ saveProjectCache(cache);
62
+ return { ...entry, repoFullName };
63
+ }
64
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function promptText(question: string): Promise<string>;
2
+ export declare function promptSelect(question: string, options: string[]): Promise<number>;
3
+ export declare function promptYesNo(question: string, def?: boolean): Promise<boolean>;
4
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKlE;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CASvF;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAIjF"}
@@ -0,0 +1,24 @@
1
+ import { createInterface } from "node:readline";
2
+ export async function promptText(question) {
3
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
4
+ return new Promise((res) => {
5
+ rl.question(question, (a) => { rl.close(); res(a.trim()); });
6
+ });
7
+ }
8
+ export async function promptSelect(question, options) {
9
+ console.log(question);
10
+ options.forEach((o, i) => console.log(` ${i + 1}. ${o}`));
11
+ const ans = await promptText(`Choice (1-${options.length}): `);
12
+ const n = parseInt(ans, 10);
13
+ if (Number.isNaN(n) || n < 1 || n > options.length) {
14
+ throw new Error(`Invalid choice: ${ans}`);
15
+ }
16
+ return n - 1;
17
+ }
18
+ export async function promptYesNo(question, def = false) {
19
+ const ans = (await promptText(`${question} ${def ? "[Y/n]" : "[y/N]"}: `)).toLowerCase();
20
+ if (ans === "")
21
+ return def;
22
+ return ans === "y" || ans === "yes";
23
+ }
24
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,OAAiB;IACpE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,aAAa,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;IAC/D,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5B,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,GAAG,GAAG,KAAK;IAC7D,MAAM,GAAG,GAAG,CAAC,MAAM,UAAU,CAAC,GAAG,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACzF,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,GAAG,CAAC;IAC3B,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK,CAAC;AACtC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@renaiss-shipflow/cli",
3
+ "version": "0.2.0",
4
+ "description": "CLI tool for RenaissShipFlow - AI-powered project management automation",
5
+ "type": "module",
6
+ "bin": {
7
+ "renaiss-shipflow": "./dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "dev": "tsc --watch",
15
+ "start": "node dist/index.js",
16
+ "lint": "tsc --noEmit",
17
+ "prepublishOnly": "npm run build"
18
+ },
19
+ "dependencies": {
20
+ "commander": "^13.1.0",
21
+ "open": "^10.1.0"
22
+ },
23
+ "devDependencies": {
24
+ "@types/node": "^22",
25
+ "typescript": "^5"
26
+ },
27
+ "engines": {
28
+ "node": ">=18"
29
+ },
30
+ "keywords": [
31
+ "renaiss-shipflow",
32
+ "cli",
33
+ "github",
34
+ "automation",
35
+ "ai"
36
+ ],
37
+ "license": "MIT",
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "git+https://github.com/Renaiss-Protocol/renaiss-shipflow.git",
44
+ "directory": "apps/renaissshipflow-cli"
45
+ }
46
+ }