@tienne/gestalt 0.68.0 → 0.69.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +9 -2
- package/README.md +1 -0
- package/dist/package.json +2 -1
- package/dist/plugin/review-agents/quality-reviewer/AGENT.md +1 -1
- package/dist/plugin/review-agents/writing-reviewer/AGENT.md +2 -2
- package/dist/plugin/skills/local-pr/SKILL.md +201 -0
- package/dist/plugin/skills/pr/SKILL.md +73 -4
- package/dist/plugin/skills/review/SKILL.md +190 -18
- package/dist/plugin/skills/review-reply/SKILL.md +144 -7
- package/dist/src/cli/commands/pr.d.ts +133 -0
- package/dist/src/cli/commands/pr.d.ts.map +1 -0
- package/dist/src/cli/commands/pr.js +489 -0
- package/dist/src/cli/commands/pr.js.map +1 -0
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +85 -0
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/core/config.d.ts.map +1 -1
- package/dist/src/core/config.js +4 -3
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/home.d.ts +20 -0
- package/dist/src/core/home.d.ts.map +1 -0
- package/dist/src/core/home.js +52 -0
- package/dist/src/core/home.js.map +1 -0
- package/dist/src/core/types.d.ts +38 -0
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/version.d.ts.map +1 -1
- package/dist/src/core/version.js +4 -7
- package/dist/src/core/version.js.map +1 -1
- package/dist/src/events/store.d.ts +32 -0
- package/dist/src/events/store.d.ts.map +1 -1
- package/dist/src/events/store.js +68 -3
- package/dist/src/events/store.js.map +1 -1
- package/dist/src/local-pr/engine.d.ts +176 -0
- package/dist/src/local-pr/engine.d.ts.map +1 -0
- package/dist/src/local-pr/engine.js +373 -0
- package/dist/src/local-pr/engine.js.map +1 -0
- package/dist/src/local-pr/git.d.ts +190 -0
- package/dist/src/local-pr/git.d.ts.map +1 -0
- package/dist/src/local-pr/git.js +580 -0
- package/dist/src/local-pr/git.js.map +1 -0
- package/dist/src/local-pr/index.d.ts +6 -0
- package/dist/src/local-pr/index.d.ts.map +1 -0
- package/dist/src/local-pr/index.js +8 -0
- package/dist/src/local-pr/index.js.map +1 -0
- package/dist/src/local-pr/policy.d.ts +77 -0
- package/dist/src/local-pr/policy.d.ts.map +1 -0
- package/dist/src/local-pr/policy.js +80 -0
- package/dist/src/local-pr/policy.js.map +1 -0
- package/dist/src/local-pr/registry.d.ts +79 -0
- package/dist/src/local-pr/registry.d.ts.map +1 -0
- package/dist/src/local-pr/registry.js +307 -0
- package/dist/src/local-pr/registry.js.map +1 -0
- package/dist/src/local-pr/repository.d.ts +67 -0
- package/dist/src/local-pr/repository.d.ts.map +1 -0
- package/dist/src/local-pr/repository.js +251 -0
- package/dist/src/local-pr/repository.js.map +1 -0
- package/dist/src/local-pr/types.d.ts +151 -0
- package/dist/src/local-pr/types.d.ts.map +1 -0
- package/dist/src/local-pr/types.js +9 -0
- package/dist/src/local-pr/types.js.map +1 -0
- package/dist/src/local-pr-web/engine.d.ts +24 -0
- package/dist/src/local-pr-web/engine.d.ts.map +1 -0
- package/dist/src/local-pr-web/engine.js +112 -0
- package/dist/src/local-pr-web/engine.js.map +1 -0
- package/dist/src/local-pr-web/html-generator.d.ts +24 -0
- package/dist/src/local-pr-web/html-generator.d.ts.map +1 -0
- package/dist/src/local-pr-web/html-generator.js +385 -0
- package/dist/src/local-pr-web/html-generator.js.map +1 -0
- package/dist/src/local-pr-web/index.d.ts +5 -0
- package/dist/src/local-pr-web/index.d.ts.map +1 -0
- package/dist/src/local-pr-web/index.js +5 -0
- package/dist/src/local-pr-web/index.js.map +1 -0
- package/dist/src/local-pr-web/server.d.ts +126 -0
- package/dist/src/local-pr-web/server.d.ts.map +1 -0
- package/dist/src/local-pr-web/server.js +394 -0
- package/dist/src/local-pr-web/server.js.map +1 -0
- package/dist/src/local-pr-web/types.d.ts +11 -0
- package/dist/src/local-pr-web/types.d.ts.map +1 -0
- package/dist/src/local-pr-web/types.js +2 -0
- package/dist/src/local-pr-web/types.js.map +1 -0
- package/dist/src/mcp/schemas.d.ts +79 -4
- package/dist/src/mcp/schemas.d.ts.map +1 -1
- package/dist/src/mcp/schemas.js +80 -2
- package/dist/src/mcp/schemas.js.map +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +13 -2
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/pr.d.ts +5 -0
- package/dist/src/mcp/tools/pr.d.ts.map +1 -0
- package/dist/src/mcp/tools/pr.js +165 -0
- package/dist/src/mcp/tools/pr.js.map +1 -0
- package/dist/src/mcp/tools/review-passthrough.d.ts.map +1 -1
- package/dist/src/mcp/tools/review-passthrough.js +264 -15
- package/dist/src/mcp/tools/review-passthrough.js.map +1 -1
- package/dist/src/memory/user-profile-store.d.ts.map +1 -1
- package/dist/src/memory/user-profile-store.js +3 -4
- package/dist/src/memory/user-profile-store.js.map +1 -1
- package/dist/src/review/context-collector.d.ts +1 -1
- package/dist/src/review/context-collector.js +1 -1
- package/dist/src/review/passthrough-engine.d.ts +1 -0
- package/dist/src/review/passthrough-engine.d.ts.map +1 -1
- package/dist/src/review/passthrough-engine.js +7 -2
- package/dist/src/review/passthrough-engine.js.map +1 -1
- package/dist/src/spec/text-based-spec-generator.d.ts.map +1 -1
- package/dist/src/spec/text-based-spec-generator.js +5 -2
- package/dist/src/spec/text-based-spec-generator.js.map +1 -1
- package/package.json +2 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/review-agents/quality-reviewer/AGENT.md +1 -1
- package/plugin/review-agents/writing-reviewer/AGENT.md +2 -2
- package/plugin/skills/local-pr/SKILL.md +201 -0
- package/plugin/skills/pr/SKILL.md +73 -4
- package/plugin/skills/review/SKILL.md +190 -18
- package/plugin/skills/review-reply/SKILL.md +144 -7
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type { PullRequest } from '../../local-pr/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* `gestalt pr` — 로컬 PR CLI.
|
|
4
|
+
*
|
|
5
|
+
* 에이전트가 부르는 정본 표면이다. MCP가 없거나 끊긴 런타임에서도 돌아야 해서
|
|
6
|
+
* 셸만 있으면 되는 이 경로를 먼저 만든다.
|
|
7
|
+
*/
|
|
8
|
+
export interface PrCommonOptions {
|
|
9
|
+
repoRoot?: string;
|
|
10
|
+
json?: boolean;
|
|
11
|
+
author?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function prCreateCommand(opts: PrCommonOptions & {
|
|
14
|
+
title: string;
|
|
15
|
+
base?: string;
|
|
16
|
+
head?: string;
|
|
17
|
+
bodyFile?: string;
|
|
18
|
+
}): void;
|
|
19
|
+
export declare function prListCommand(opts: PrCommonOptions & {
|
|
20
|
+
status?: PullRequest['status'];
|
|
21
|
+
}): void;
|
|
22
|
+
export declare function prShowCommand(opts: PrCommonOptions & {
|
|
23
|
+
id: string;
|
|
24
|
+
}): void;
|
|
25
|
+
export declare function prDiffCommand(opts: PrCommonOptions & {
|
|
26
|
+
id: string;
|
|
27
|
+
}): void;
|
|
28
|
+
/**
|
|
29
|
+
* `gestalt pr checkout <id>` — PR head를 임시 워크트리로 떼어낸다.
|
|
30
|
+
*
|
|
31
|
+
* `--remove`면 지운다. 붙였다 뗐다를 한 명령에 둔 이유는 경로 규칙이 하나라서다.
|
|
32
|
+
* 리뷰어는 id만 알면 되고 경로를 적어둘 필요가 없다.
|
|
33
|
+
*/
|
|
34
|
+
export declare function prCheckoutCommand(opts: PrCommonOptions & {
|
|
35
|
+
id: string;
|
|
36
|
+
remove?: boolean;
|
|
37
|
+
force?: boolean;
|
|
38
|
+
}): void;
|
|
39
|
+
export declare function prCommentCommand(opts: PrCommonOptions & {
|
|
40
|
+
id: string;
|
|
41
|
+
path: string;
|
|
42
|
+
line?: string;
|
|
43
|
+
bodyFile?: string;
|
|
44
|
+
replyTo?: string;
|
|
45
|
+
}): void;
|
|
46
|
+
export declare function prCommentsCommand(opts: PrCommonOptions & {
|
|
47
|
+
id: string;
|
|
48
|
+
unresolved?: boolean;
|
|
49
|
+
}): void;
|
|
50
|
+
export declare function prResolveCommand(opts: PrCommonOptions & {
|
|
51
|
+
commentId: string;
|
|
52
|
+
id: string;
|
|
53
|
+
}): void;
|
|
54
|
+
export declare function prReviewCommand(opts: PrCommonOptions & {
|
|
55
|
+
id: string;
|
|
56
|
+
verdict: string;
|
|
57
|
+
bodyFile?: string;
|
|
58
|
+
}): void;
|
|
59
|
+
export declare function prUpdateCommand(opts: PrCommonOptions & {
|
|
60
|
+
id: string;
|
|
61
|
+
head?: string;
|
|
62
|
+
}): void;
|
|
63
|
+
/**
|
|
64
|
+
* `gestalt pr edit <id>` — 제목과 본문을 고친다.
|
|
65
|
+
*
|
|
66
|
+
* 본문은 `--body-file`로만 받는다. `pr create`와 `pr comment`가 같은 이유로 그렇게
|
|
67
|
+
* 받는다 — 인자로 넘기면 셸이 한글과 백틱과 줄바꿈을 건드린다. 제목은 원래 인자로
|
|
68
|
+
* 받던 값이라 `--title` 그대로다.
|
|
69
|
+
*
|
|
70
|
+
* `--body-file`을 준 순간 본문은 그 파일 내용이다. 빈 파일이면 본문을 비운다 —
|
|
71
|
+
* 코멘트와 달리 여기서 빈 본문을 막지 않는 건 "잘못 쓴 본문을 지운다"가 실제로
|
|
72
|
+
* 있는 쓰임이어서다.
|
|
73
|
+
*/
|
|
74
|
+
export declare function prEditCommand(opts: PrCommonOptions & {
|
|
75
|
+
id: string;
|
|
76
|
+
title?: string;
|
|
77
|
+
bodyFile?: string;
|
|
78
|
+
}): void;
|
|
79
|
+
export declare function prMergeCommand(opts: PrCommonOptions & {
|
|
80
|
+
id: string;
|
|
81
|
+
deleteBranch?: boolean;
|
|
82
|
+
}): void;
|
|
83
|
+
export declare function prCloseCommand(opts: PrCommonOptions & {
|
|
84
|
+
id: string;
|
|
85
|
+
reason?: string;
|
|
86
|
+
}): void;
|
|
87
|
+
/**
|
|
88
|
+
* `gestalt pr prune` — 붙잡아 둘 이유가 끝난 ref를 놓는다.
|
|
89
|
+
*
|
|
90
|
+
* `refs/gestalt/` 아래는 지금까지 늘기만 했다. 무엇을 언제 놓는지는 엔진의 `prune`
|
|
91
|
+
* 주석에 있다. 되돌릴 수 없는 갈래(체크아웃 자국)는 `--checkouts`로 뜻을 밝혀야 놓는다.
|
|
92
|
+
*/
|
|
93
|
+
export declare function prPruneCommand(opts: PrCommonOptions & {
|
|
94
|
+
checkouts?: boolean;
|
|
95
|
+
dryRun?: boolean;
|
|
96
|
+
}): void;
|
|
97
|
+
/**
|
|
98
|
+
* `--repo-root`가 지금 자리와 다른 레포를 가리키면 막는다.
|
|
99
|
+
*
|
|
100
|
+
* `pr serve`는 뜨면서 그 경로를 뷰어 목록에 영구히 넣는다. 목록에 넣는 문을 좁게
|
|
101
|
+
* 둔 근거가 "사람이 그 레포에서 웹 UI를 직접 띄운 순간"인데, `--repo-root`를 그대로
|
|
102
|
+
* 받으면 그 전제가 깨진다 — 에이전트가 셸로 `pr serve --repo-root /남의/레포
|
|
103
|
+
* --no-browser`를 한 번 돌리면 그 레포가 인증 없는 뷰어 목록에 들어간다. 이후 전혀
|
|
104
|
+
* 다른 레포에서 serve를 띄워도 그 레포의 diff와 코멘트가 계속 나간다.
|
|
105
|
+
*
|
|
106
|
+
* 그래서 `--repo-root`는 지금 자리와 같은 레포를 가리킬 때만 받는다. 워크트리나
|
|
107
|
+
* 하위 디렉토리를 가리키는 쓰임은 그대로 살고(키가 같다), 남의 레포를 넣는 쓰임만
|
|
108
|
+
* 닫힌다. 다른 레포를 보려면 거기서 한 번 띄우면 된다.
|
|
109
|
+
*
|
|
110
|
+
* 목록에 넣는 호출 자체는 `local-pr-web/engine.ts`에 있다. 거기서 "cwd만 등록하고
|
|
111
|
+
* 나머지는 조회만"으로 가르는 게 더 좁은 문이지만 그건 이 파일 밖이다.
|
|
112
|
+
*
|
|
113
|
+
* 서버를 안 띄우고 이 판단만 볼 수 있게 내보낸다. 통과 갈래를 `prServeCommand`로
|
|
114
|
+
* 확인하려면 진짜 서버가 떠 버린다.
|
|
115
|
+
*/
|
|
116
|
+
export declare function assertServeRoot(repoRoot: string): void;
|
|
117
|
+
/** `gestalt pr serve` — 브라우저에서 PR을 읽는 읽기 전용 웹 UI. 코멘트 작성은 CLI 몫으로 남긴다 */
|
|
118
|
+
export declare function prServeCommand(opts: PrCommonOptions & {
|
|
119
|
+
port?: number;
|
|
120
|
+
noBrowser?: boolean;
|
|
121
|
+
}): Promise<void>;
|
|
122
|
+
/**
|
|
123
|
+
* `gestalt pr repos` — 웹 UI가 열어 주는 레포 목록.
|
|
124
|
+
*
|
|
125
|
+
* `unregister`가 키를 받으므로 그 키를 어디선가 볼 수 있어야 한다. 무엇이 인증 없는
|
|
126
|
+
* 뷰어에 실려 있는지 확인하는 자리이기도 하다.
|
|
127
|
+
*/
|
|
128
|
+
export declare function prReposCommand(opts: PrCommonOptions): void;
|
|
129
|
+
/** `gestalt pr unregister <key>` — 그 레포를 웹 UI 목록에서 뺀다. 레포 자체는 안 건드린다 */
|
|
130
|
+
export declare function prUnregisterCommand(opts: PrCommonOptions & {
|
|
131
|
+
key: string;
|
|
132
|
+
}): void;
|
|
133
|
+
//# sourceMappingURL=pr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/pr.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,yBAAyB,CAAC;AAG1E;;;;;GAKG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAyDD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACzF,IAAI,CAoBN;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;CAAE,GAAG,IAAI,CAgB9F;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAsC1E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAU1E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACxE,IAAI,CAuCN;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,eAAe,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,IAAI,CAoBN;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3D,IAAI,CAqBN;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUhG;AAQD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE,IAAI,CAsBN;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAY3F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACxE,IAAI,CAwBN;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7D,IAAI,CAgBN;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAU5F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,eAAe,GAAG;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAChE,IAAI,CAkBN;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAiBtD;AAED,yEAAyE;AACzE,wBAAsB,cAAc,CAClC,IAAI,EAAE,eAAe,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7D,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAW1D;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQjF"}
|
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { LocalPrEngine, PrError } from '../../local-pr/engine.js';
|
|
4
|
+
import { openThreads, resolveActor, unresolvedComments, unresolvedCount, } from '../../local-pr/policy.js';
|
|
5
|
+
import { listRepos, repoKey, unregisterRepo } from '../../local-pr/registry.js';
|
|
6
|
+
import { PrWebEngine } from '../../local-pr-web/engine.js';
|
|
7
|
+
/**
|
|
8
|
+
* 본문을 파일이나 stdin에서 읽는다.
|
|
9
|
+
*
|
|
10
|
+
* 인자로 받지 않는 이유는 셸을 타면 한글과 백틱, 줄바꿈이 깨지기 때문이다.
|
|
11
|
+
* `-`면 stdin이다 — gh가 --body-file에 쓰는 방식과 같다.
|
|
12
|
+
*/
|
|
13
|
+
function readBody(bodyFile) {
|
|
14
|
+
if (bodyFile === undefined)
|
|
15
|
+
return '';
|
|
16
|
+
// 빈 문자열은 "안 줬다"가 아니라 "빈 경로를 줬다"다. 안 갈라 두면 셸에서 안 풀린
|
|
17
|
+
// `--body-file "$F"`가 본문을 조용히 지운다 — 없는 경로는 ENOENT로 죽는데
|
|
18
|
+
// 이 자리만 성공으로 끝난다
|
|
19
|
+
if (bodyFile === '')
|
|
20
|
+
throw new PrError('--body-file에 경로가 비어 있어요', 1);
|
|
21
|
+
return readFileSync(bodyFile === '-' ? 0 : bodyFile, 'utf-8');
|
|
22
|
+
}
|
|
23
|
+
function actorOf(opts) {
|
|
24
|
+
return resolveActor(opts.author);
|
|
25
|
+
}
|
|
26
|
+
function engineOf(opts) {
|
|
27
|
+
return new LocalPrEngine(resolve(opts.repoRoot ?? process.cwd()));
|
|
28
|
+
}
|
|
29
|
+
/** 에이전트가 파싱할 자리라 --json이면 객체만 내보낸다 */
|
|
30
|
+
function emit(value, json, human) {
|
|
31
|
+
if (json) {
|
|
32
|
+
console.log(JSON.stringify(value, null, 2));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
human();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function summarize(pr) {
|
|
39
|
+
const unresolved = unresolvedCount(pr);
|
|
40
|
+
const round = pr.rounds[pr.rounds.length - 1].number;
|
|
41
|
+
return `${pr.id} [${pr.status}] ${pr.title} (라운드 ${round}, 미해결 ${unresolved})`;
|
|
42
|
+
}
|
|
43
|
+
/** 오류를 종료 코드로 옮긴다. 에이전트가 stdout을 안 읽고도 갈래를 탄다 */
|
|
44
|
+
function run(fn) {
|
|
45
|
+
try {
|
|
46
|
+
fn();
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
// `process.exit`이 여기서 흐름을 끊는 건 런타임의 성질이지 이 갈래가 한 약속이
|
|
50
|
+
// 아니다. 갈라 두지 않으면 테스트가 exit을 가로챌 때 두 번 나간다
|
|
51
|
+
if (e instanceof PrError) {
|
|
52
|
+
console.error(e.message);
|
|
53
|
+
process.exit(e.exitCode);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.error(e instanceof Error ? e.message : String(e));
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export function prCreateCommand(opts) {
|
|
62
|
+
run(() => {
|
|
63
|
+
const engine = engineOf(opts);
|
|
64
|
+
try {
|
|
65
|
+
const pr = engine.create({
|
|
66
|
+
title: opts.title,
|
|
67
|
+
body: readBody(opts.bodyFile),
|
|
68
|
+
author: actorOf(opts),
|
|
69
|
+
base: opts.base,
|
|
70
|
+
head: opts.head,
|
|
71
|
+
});
|
|
72
|
+
emit(pr, opts.json, () => {
|
|
73
|
+
console.log(`PR을 만들었어요: ${pr.id}`);
|
|
74
|
+
console.log(` base ${pr.baseSha.slice(0, 8)} → head ${pr.headSha.slice(0, 8)}`);
|
|
75
|
+
console.log(` 리뷰: gestalt pr show ${pr.id}`);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
engine.dispose();
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
export function prListCommand(opts) {
|
|
84
|
+
run(() => {
|
|
85
|
+
const engine = engineOf(opts);
|
|
86
|
+
try {
|
|
87
|
+
const prs = engine.list(opts.status);
|
|
88
|
+
emit(prs, opts.json, () => {
|
|
89
|
+
if (prs.length === 0) {
|
|
90
|
+
console.log('PR이 없어요');
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
for (const pr of prs)
|
|
94
|
+
console.log(summarize(pr));
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
engine.dispose();
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
export function prShowCommand(opts) {
|
|
103
|
+
run(() => {
|
|
104
|
+
const engine = engineOf(opts);
|
|
105
|
+
try {
|
|
106
|
+
const pr = engine.get(opts.id);
|
|
107
|
+
if (!pr)
|
|
108
|
+
throw new PrError(`PR을 못 찾았어요: ${opts.id}`, 3);
|
|
109
|
+
emit(pr, opts.json, () => {
|
|
110
|
+
console.log(summarize(pr));
|
|
111
|
+
console.log(` 작성 ${pr.author}`);
|
|
112
|
+
if (pr.body)
|
|
113
|
+
console.log(`\n${pr.body}\n`);
|
|
114
|
+
for (const round of pr.rounds) {
|
|
115
|
+
const verdict = round.verdict ?? '진행 중';
|
|
116
|
+
console.log(`\n라운드 ${round.number} — ${verdict} (코멘트 ${round.commentCount})`);
|
|
117
|
+
for (const review of pr.reviews.filter((r) => r.round === round.number)) {
|
|
118
|
+
console.log(` ${review.reviewer}: ${review.verdict} — ${review.summary}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// 머리글의 "미해결 N"과 이 목록이 같은 함수에서 나온다. 따로 세면 머리글은
|
|
122
|
+
// 스레드를, 목록은 코멘트를 세어 한 화면에서 수가 갈린다
|
|
123
|
+
const threads = openThreads(pr);
|
|
124
|
+
if (threads.length > 0) {
|
|
125
|
+
console.log('\n미해결 스레드');
|
|
126
|
+
for (const { root, comments } of threads) {
|
|
127
|
+
const at = root.line === null ? root.path : `${root.path}:${root.line}`;
|
|
128
|
+
const replies = comments.length - 1;
|
|
129
|
+
const tail = replies > 0 ? ` (답글 ${replies}개)` : '';
|
|
130
|
+
console.log(` [${root.id}] ${at} (${root.author})${tail}`);
|
|
131
|
+
console.log(` ${root.body.split('\n')[0]}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
engine.dispose();
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
export function prDiffCommand(opts) {
|
|
142
|
+
run(() => {
|
|
143
|
+
const engine = engineOf(opts);
|
|
144
|
+
try {
|
|
145
|
+
const diff = engine.diff(opts.id);
|
|
146
|
+
emit({ diff }, opts.json, () => console.log(diff));
|
|
147
|
+
}
|
|
148
|
+
finally {
|
|
149
|
+
engine.dispose();
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* `gestalt pr checkout <id>` — PR head를 임시 워크트리로 떼어낸다.
|
|
155
|
+
*
|
|
156
|
+
* `--remove`면 지운다. 붙였다 뗐다를 한 명령에 둔 이유는 경로 규칙이 하나라서다.
|
|
157
|
+
* 리뷰어는 id만 알면 되고 경로를 적어둘 필요가 없다.
|
|
158
|
+
*/
|
|
159
|
+
export function prCheckoutCommand(opts) {
|
|
160
|
+
run(() => {
|
|
161
|
+
const engine = engineOf(opts);
|
|
162
|
+
try {
|
|
163
|
+
if (opts.remove) {
|
|
164
|
+
const result = engine.removeCheckout(opts.id, { force: opts.force });
|
|
165
|
+
emit(result, opts.json, () => {
|
|
166
|
+
if (result.removed) {
|
|
167
|
+
console.log(`워크트리를 지웠어요: ${result.path}`);
|
|
168
|
+
if (result.savedRef) {
|
|
169
|
+
console.log(` 여기서 커밋한 변경은 ${result.savedRef}로 붙잡아 뒀어요`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
console.log(`안 지웠어요 — ${result.reason}`);
|
|
174
|
+
console.log(` ${result.path}`);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
// 안 지운 건 실패가 아니라 판단을 되돌려준 것이다. 에이전트가 종료 코드로
|
|
178
|
+
// 갈래를 타게 4(상태 충돌)를 준다. 지킨 갈래는 `dirty`, `diverged`, `stale`
|
|
179
|
+
// 셋이고 앞으로 늘 수 있다. 그 셋을 나열하는 대신 "지운 두 갈래가 아니면"으로
|
|
180
|
+
// 적는다. `absent`를 뺀 이유는 지울 자리가 없는 게 정리의 목표가 이미 이뤄진
|
|
181
|
+
// 상태여서다. 4로 주면 `--remove`를 두 번 부르는 `set -e` 스크립트가 두 번째에
|
|
182
|
+
// 죽는다. 이 갈림은 --json의 status로도 읽을 수 있다 — 산문 reason을 부분
|
|
183
|
+
// 문자열로 긁을 필요가 없다
|
|
184
|
+
if (result.status !== 'removed' && result.status !== 'absent')
|
|
185
|
+
process.exit(4);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const checkout = engine.checkout(opts.id);
|
|
189
|
+
emit(checkout, opts.json, () => {
|
|
190
|
+
console.log(checkout.created ? '워크트리를 뗐어요' : '이미 떼어둔 워크트리가 있어요');
|
|
191
|
+
console.log(` ${checkout.path}`);
|
|
192
|
+
console.log(` head ${checkout.headSha.slice(0, 8)}`);
|
|
193
|
+
console.log(` 정리: gestalt pr checkout ${opts.id} --remove`);
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
finally {
|
|
197
|
+
engine.dispose();
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
export function prCommentCommand(opts) {
|
|
202
|
+
run(() => {
|
|
203
|
+
const engine = engineOf(opts);
|
|
204
|
+
try {
|
|
205
|
+
const body = readBody(opts.bodyFile);
|
|
206
|
+
if (!body.trim())
|
|
207
|
+
throw new PrError('본문이 비었어요. --body-file로 넘겨주세요', 1);
|
|
208
|
+
const pr = engine.comment(opts.id, {
|
|
209
|
+
author: actorOf(opts),
|
|
210
|
+
path: opts.path,
|
|
211
|
+
line: opts.line ? Number(opts.line) : undefined,
|
|
212
|
+
body,
|
|
213
|
+
replyTo: opts.replyTo,
|
|
214
|
+
});
|
|
215
|
+
const added = pr.comments[pr.comments.length - 1];
|
|
216
|
+
emit(added, opts.json, () => console.log(`코멘트 ${added.id} 추가`));
|
|
217
|
+
}
|
|
218
|
+
finally {
|
|
219
|
+
engine.dispose();
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
export function prCommentsCommand(opts) {
|
|
224
|
+
run(() => {
|
|
225
|
+
const engine = engineOf(opts);
|
|
226
|
+
try {
|
|
227
|
+
const pr = engine.get(opts.id);
|
|
228
|
+
if (!pr)
|
|
229
|
+
throw new PrError(`PR을 못 찾았어요: ${opts.id}`, 3);
|
|
230
|
+
const comments = opts.unresolved ? unresolvedComments(pr) : pr.comments;
|
|
231
|
+
emit(comments, opts.json, () => {
|
|
232
|
+
for (const c of comments) {
|
|
233
|
+
const at = c.line === null ? c.path : `${c.path}:${c.line}`;
|
|
234
|
+
const mark = c.resolved ? '해결' : '열림';
|
|
235
|
+
console.log(`[${c.id}] ${at} (${c.author}, ${mark})`);
|
|
236
|
+
console.log(c.body);
|
|
237
|
+
console.log('');
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
engine.dispose();
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
export function prResolveCommand(opts) {
|
|
247
|
+
run(() => {
|
|
248
|
+
const engine = engineOf(opts);
|
|
249
|
+
try {
|
|
250
|
+
const pr = engine.resolve(opts.id, opts.commentId, actorOf(opts));
|
|
251
|
+
emit(pr, opts.json, () => console.log(`코멘트 ${opts.commentId} 스레드를 닫았어요`));
|
|
252
|
+
}
|
|
253
|
+
finally {
|
|
254
|
+
engine.dispose();
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
const VERDICTS = {
|
|
259
|
+
approve: 'approve',
|
|
260
|
+
'request-changes': 'request_changes',
|
|
261
|
+
comment: 'comment',
|
|
262
|
+
};
|
|
263
|
+
export function prReviewCommand(opts) {
|
|
264
|
+
run(() => {
|
|
265
|
+
const verdict = VERDICTS[opts.verdict];
|
|
266
|
+
if (!verdict) {
|
|
267
|
+
throw new PrError('판정은 approve, request-changes, comment 중 하나예요', 1);
|
|
268
|
+
}
|
|
269
|
+
const engine = engineOf(opts);
|
|
270
|
+
try {
|
|
271
|
+
const pr = engine.review(opts.id, {
|
|
272
|
+
reviewer: actorOf(opts),
|
|
273
|
+
verdict,
|
|
274
|
+
summary: readBody(opts.bodyFile).trim(),
|
|
275
|
+
});
|
|
276
|
+
emit(pr, opts.json, () => {
|
|
277
|
+
console.log(`판정을 남겼어요: ${opts.verdict} — 상태 ${pr.status}`);
|
|
278
|
+
console.log(` 라운드 ${pr.rounds[pr.rounds.length - 1].number}`);
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
finally {
|
|
282
|
+
engine.dispose();
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
export function prUpdateCommand(opts) {
|
|
287
|
+
run(() => {
|
|
288
|
+
const engine = engineOf(opts);
|
|
289
|
+
try {
|
|
290
|
+
const pr = engine.update(opts.id, opts.head);
|
|
291
|
+
emit(pr, opts.json, () => {
|
|
292
|
+
console.log(`head를 ${pr.headSha.slice(0, 8)}로 옮겼어요 — 상태 ${pr.status}`);
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
finally {
|
|
296
|
+
engine.dispose();
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* `gestalt pr edit <id>` — 제목과 본문을 고친다.
|
|
302
|
+
*
|
|
303
|
+
* 본문은 `--body-file`로만 받는다. `pr create`와 `pr comment`가 같은 이유로 그렇게
|
|
304
|
+
* 받는다 — 인자로 넘기면 셸이 한글과 백틱과 줄바꿈을 건드린다. 제목은 원래 인자로
|
|
305
|
+
* 받던 값이라 `--title` 그대로다.
|
|
306
|
+
*
|
|
307
|
+
* `--body-file`을 준 순간 본문은 그 파일 내용이다. 빈 파일이면 본문을 비운다 —
|
|
308
|
+
* 코멘트와 달리 여기서 빈 본문을 막지 않는 건 "잘못 쓴 본문을 지운다"가 실제로
|
|
309
|
+
* 있는 쓰임이어서다.
|
|
310
|
+
*/
|
|
311
|
+
export function prEditCommand(opts) {
|
|
312
|
+
run(() => {
|
|
313
|
+
if (opts.title === undefined && opts.bodyFile === undefined) {
|
|
314
|
+
throw new PrError('고칠 것을 주세요 — --title이나 --body-file 중 하나는 있어야 해요', 1);
|
|
315
|
+
}
|
|
316
|
+
const engine = engineOf(opts);
|
|
317
|
+
try {
|
|
318
|
+
const pr = engine.edit(opts.id, {
|
|
319
|
+
...(opts.title !== undefined ? { title: opts.title } : {}),
|
|
320
|
+
...(opts.bodyFile !== undefined ? { body: readBody(opts.bodyFile) } : {}),
|
|
321
|
+
}, actorOf(opts));
|
|
322
|
+
emit(pr, opts.json, () => {
|
|
323
|
+
console.log(`PR ${pr.id}을 고쳤어요 — 상태 ${pr.status}`);
|
|
324
|
+
console.log(` ${pr.title}`);
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
finally {
|
|
328
|
+
engine.dispose();
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
export function prMergeCommand(opts) {
|
|
333
|
+
run(() => {
|
|
334
|
+
const engine = engineOf(opts);
|
|
335
|
+
try {
|
|
336
|
+
const before = engine.get(opts.id);
|
|
337
|
+
const unresolved = before ? unresolvedCount(before) : 0;
|
|
338
|
+
const pr = engine.merge(opts.id, actorOf(opts), { deleteBranch: opts.deleteBranch });
|
|
339
|
+
emit(pr, opts.json, () => {
|
|
340
|
+
console.log(`PR을 머지했어요: ${pr.id}`);
|
|
341
|
+
if (unresolved > 0)
|
|
342
|
+
console.log(` 미해결 스레드 ${unresolved}개가 남은 채로 머지했어요`);
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
finally {
|
|
346
|
+
engine.dispose();
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
export function prCloseCommand(opts) {
|
|
351
|
+
run(() => {
|
|
352
|
+
const engine = engineOf(opts);
|
|
353
|
+
try {
|
|
354
|
+
const pr = engine.closePr(opts.id, actorOf(opts), opts.reason ?? '');
|
|
355
|
+
emit(pr, opts.json, () => console.log(`PR을 닫았어요: ${opts.id}`));
|
|
356
|
+
}
|
|
357
|
+
finally {
|
|
358
|
+
engine.dispose();
|
|
359
|
+
}
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* `gestalt pr prune` — 붙잡아 둘 이유가 끝난 ref를 놓는다.
|
|
364
|
+
*
|
|
365
|
+
* `refs/gestalt/` 아래는 지금까지 늘기만 했다. 무엇을 언제 놓는지는 엔진의 `prune`
|
|
366
|
+
* 주석에 있다. 되돌릴 수 없는 갈래(체크아웃 자국)는 `--checkouts`로 뜻을 밝혀야 놓는다.
|
|
367
|
+
*/
|
|
368
|
+
export function prPruneCommand(opts) {
|
|
369
|
+
run(() => {
|
|
370
|
+
const engine = engineOf(opts);
|
|
371
|
+
try {
|
|
372
|
+
const result = engine.prune({ checkouts: opts.checkouts, dryRun: opts.dryRun });
|
|
373
|
+
emit(result, opts.json, () => {
|
|
374
|
+
const verb = result.dryRun ? '놓을 참이에요' : '놓았어요';
|
|
375
|
+
console.log(`ref ${result.released.length}개를 ${verb}`);
|
|
376
|
+
for (const ref of result.released)
|
|
377
|
+
console.log(` ${ref}`);
|
|
378
|
+
for (const k of result.kept)
|
|
379
|
+
console.log(` 남김 ${k.prId} — ${k.reason}`);
|
|
380
|
+
if (!opts.checkouts) {
|
|
381
|
+
console.log(' 체크아웃 자국은 그대로예요. 놓으려면 --checkouts를 붙여주세요');
|
|
382
|
+
}
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
finally {
|
|
386
|
+
engine.dispose();
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* `--repo-root`가 지금 자리와 다른 레포를 가리키면 막는다.
|
|
392
|
+
*
|
|
393
|
+
* `pr serve`는 뜨면서 그 경로를 뷰어 목록에 영구히 넣는다. 목록에 넣는 문을 좁게
|
|
394
|
+
* 둔 근거가 "사람이 그 레포에서 웹 UI를 직접 띄운 순간"인데, `--repo-root`를 그대로
|
|
395
|
+
* 받으면 그 전제가 깨진다 — 에이전트가 셸로 `pr serve --repo-root /남의/레포
|
|
396
|
+
* --no-browser`를 한 번 돌리면 그 레포가 인증 없는 뷰어 목록에 들어간다. 이후 전혀
|
|
397
|
+
* 다른 레포에서 serve를 띄워도 그 레포의 diff와 코멘트가 계속 나간다.
|
|
398
|
+
*
|
|
399
|
+
* 그래서 `--repo-root`는 지금 자리와 같은 레포를 가리킬 때만 받는다. 워크트리나
|
|
400
|
+
* 하위 디렉토리를 가리키는 쓰임은 그대로 살고(키가 같다), 남의 레포를 넣는 쓰임만
|
|
401
|
+
* 닫힌다. 다른 레포를 보려면 거기서 한 번 띄우면 된다.
|
|
402
|
+
*
|
|
403
|
+
* 목록에 넣는 호출 자체는 `local-pr-web/engine.ts`에 있다. 거기서 "cwd만 등록하고
|
|
404
|
+
* 나머지는 조회만"으로 가르는 게 더 좁은 문이지만 그건 이 파일 밖이다.
|
|
405
|
+
*
|
|
406
|
+
* 서버를 안 띄우고 이 판단만 볼 수 있게 내보낸다. 통과 갈래를 `prServeCommand`로
|
|
407
|
+
* 확인하려면 진짜 서버가 떠 버린다.
|
|
408
|
+
*/
|
|
409
|
+
export function assertServeRoot(repoRoot) {
|
|
410
|
+
const cwd = process.cwd();
|
|
411
|
+
if (resolve(repoRoot) === resolve(cwd))
|
|
412
|
+
return;
|
|
413
|
+
let same;
|
|
414
|
+
try {
|
|
415
|
+
same = repoKey(repoRoot) === repoKey(cwd);
|
|
416
|
+
}
|
|
417
|
+
catch {
|
|
418
|
+
same = false;
|
|
419
|
+
}
|
|
420
|
+
if (same)
|
|
421
|
+
return;
|
|
422
|
+
throw new PrError(`--repo-root가 지금 자리와 다른 레포를 가리켜요: ${repoRoot}\n` +
|
|
423
|
+
'웹 UI는 띄우는 순간 그 레포를 인증 없는 뷰어 목록에 넣어요. 그 레포로 옮겨가서 띄워주세요', 4);
|
|
424
|
+
}
|
|
425
|
+
/** `gestalt pr serve` — 브라우저에서 PR을 읽는 읽기 전용 웹 UI. 코멘트 작성은 CLI 몫으로 남긴다 */
|
|
426
|
+
export async function prServeCommand(opts) {
|
|
427
|
+
const repoRoot = resolve(opts.repoRoot ?? process.cwd());
|
|
428
|
+
if (opts.repoRoot !== undefined) {
|
|
429
|
+
try {
|
|
430
|
+
assertServeRoot(repoRoot);
|
|
431
|
+
}
|
|
432
|
+
catch (e) {
|
|
433
|
+
console.error(e instanceof Error ? e.message : String(e));
|
|
434
|
+
process.exit(e instanceof PrError ? e.exitCode : 1);
|
|
435
|
+
return;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
const engine = new PrWebEngine();
|
|
439
|
+
try {
|
|
440
|
+
const result = await engine.start({
|
|
441
|
+
repoRoot,
|
|
442
|
+
port: opts.port,
|
|
443
|
+
openBrowser: !opts.noBrowser,
|
|
444
|
+
});
|
|
445
|
+
console.log(`\n로컬 PR 웹 UI: ${result.url}`);
|
|
446
|
+
console.log(result.message);
|
|
447
|
+
console.log('\nCtrl+C로 멈춥니다.\n');
|
|
448
|
+
// 서버의 SIGINT 핸들러가 프로세스를 끝낼 때까지 살려둔다
|
|
449
|
+
await new Promise(() => {
|
|
450
|
+
/* Ctrl+C까지 대기 */
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
catch (err) {
|
|
454
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
455
|
+
console.error(`웹 UI를 못 띄웠어요: ${msg}`);
|
|
456
|
+
process.exit(1);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* `gestalt pr repos` — 웹 UI가 열어 주는 레포 목록.
|
|
461
|
+
*
|
|
462
|
+
* `unregister`가 키를 받으므로 그 키를 어디선가 볼 수 있어야 한다. 무엇이 인증 없는
|
|
463
|
+
* 뷰어에 실려 있는지 확인하는 자리이기도 하다.
|
|
464
|
+
*/
|
|
465
|
+
export function prReposCommand(opts) {
|
|
466
|
+
run(() => {
|
|
467
|
+
const repos = listRepos();
|
|
468
|
+
emit(repos, opts.json, () => {
|
|
469
|
+
if (repos.length === 0) {
|
|
470
|
+
console.log('등록된 레포가 없어요');
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
for (const r of repos)
|
|
474
|
+
console.log(`${r.key} ${r.name} ${r.path}`);
|
|
475
|
+
});
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
/** `gestalt pr unregister <key>` — 그 레포를 웹 UI 목록에서 뺀다. 레포 자체는 안 건드린다 */
|
|
479
|
+
export function prUnregisterCommand(opts) {
|
|
480
|
+
run(() => {
|
|
481
|
+
const gone = unregisterRepo(opts.key);
|
|
482
|
+
if (!gone)
|
|
483
|
+
throw new PrError(`목록에 없는 키예요: ${opts.key}`, 3);
|
|
484
|
+
emit({ key: opts.key, removed: true }, opts.json, () => {
|
|
485
|
+
console.log(`목록에서 뺐어요: ${opts.key}`);
|
|
486
|
+
});
|
|
487
|
+
});
|
|
488
|
+
}
|
|
489
|
+
//# sourceMappingURL=pr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr.js","sourceRoot":"","sources":["../../../../src/cli/commands/pr.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgCpC,wBAAgB,SAAS,IAAI,OAAO,CAiNnC"}
|