@tienne/gestalt 0.83.2 → 0.84.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/CLAUDE.md +3 -2
  2. package/README.ko.md +3 -1
  3. package/README.md +3 -1
  4. package/dist/package.json +1 -1
  5. package/dist/plugin/review-agents/harness-reviewer/AGENT.md +211 -0
  6. package/dist/plugin/role-agents/_shared/references/comment-rules.md +1 -1
  7. package/dist/plugin/role-agents/suggestion-verifier/AGENT.md +7 -1
  8. package/dist/plugin/skills/_shared/proactive-routing.md +1 -0
  9. package/dist/plugin/skills/_shared/rule-sources.md +1 -1
  10. package/dist/plugin/skills/agent/SKILL.md +2 -0
  11. package/dist/plugin/skills/review/SKILL.md +343 -7
  12. package/dist/plugin/skills/review-loop/SKILL.md +124 -2
  13. package/dist/plugin/skills/ship/SKILL.md +40 -1
  14. package/dist/schemas/gestalt.schema.json +12 -0
  15. package/dist/src/cli/commands/approve-gate.d.ts +24 -0
  16. package/dist/src/cli/commands/approve-gate.d.ts.map +1 -0
  17. package/dist/src/cli/commands/approve-gate.js +90 -0
  18. package/dist/src/cli/commands/approve-gate.js.map +1 -0
  19. package/dist/src/cli/commands/harness-refs-cross-pr.d.ts +218 -0
  20. package/dist/src/cli/commands/harness-refs-cross-pr.d.ts.map +1 -0
  21. package/dist/src/cli/commands/harness-refs-cross-pr.js +934 -0
  22. package/dist/src/cli/commands/harness-refs-cross-pr.js.map +1 -0
  23. package/dist/src/cli/commands/harness-refs.d.ts +19 -0
  24. package/dist/src/cli/commands/harness-refs.d.ts.map +1 -0
  25. package/dist/src/cli/commands/harness-refs.js +51 -0
  26. package/dist/src/cli/commands/harness-refs.js.map +1 -0
  27. package/dist/src/cli/index.d.ts.map +1 -1
  28. package/dist/src/cli/index.js +97 -0
  29. package/dist/src/cli/index.js.map +1 -1
  30. package/dist/src/core/config.d.ts +3 -0
  31. package/dist/src/core/config.d.ts.map +1 -1
  32. package/dist/src/core/config.js +23 -0
  33. package/dist/src/core/config.js.map +1 -1
  34. package/dist/src/core/types.d.ts +2 -0
  35. package/dist/src/core/types.d.ts.map +1 -1
  36. package/dist/src/harness-review/approve-gate.d.ts +53 -0
  37. package/dist/src/harness-review/approve-gate.d.ts.map +1 -0
  38. package/dist/src/harness-review/approve-gate.js +148 -0
  39. package/dist/src/harness-review/approve-gate.js.map +1 -0
  40. package/dist/src/harness-review/backward-search.d.ts +50 -0
  41. package/dist/src/harness-review/backward-search.d.ts.map +1 -0
  42. package/dist/src/harness-review/backward-search.js +183 -0
  43. package/dist/src/harness-review/backward-search.js.map +1 -0
  44. package/dist/src/harness-review/collect.d.ts +75 -0
  45. package/dist/src/harness-review/collect.d.ts.map +1 -0
  46. package/dist/src/harness-review/collect.js +253 -0
  47. package/dist/src/harness-review/collect.js.map +1 -0
  48. package/dist/src/harness-review/copy-drift.d.ts +83 -0
  49. package/dist/src/harness-review/copy-drift.d.ts.map +1 -0
  50. package/dist/src/harness-review/copy-drift.js +477 -0
  51. package/dist/src/harness-review/copy-drift.js.map +1 -0
  52. package/dist/src/harness-review/follow-up-marker.d.ts +29 -0
  53. package/dist/src/harness-review/follow-up-marker.d.ts.map +1 -0
  54. package/dist/src/harness-review/follow-up-marker.js +143 -0
  55. package/dist/src/harness-review/follow-up-marker.js.map +1 -0
  56. package/dist/src/harness-review/forward-search.d.ts +30 -0
  57. package/dist/src/harness-review/forward-search.d.ts.map +1 -0
  58. package/dist/src/harness-review/forward-search.js +381 -0
  59. package/dist/src/harness-review/forward-search.js.map +1 -0
  60. package/dist/src/harness-review/github-backend.d.ts +42 -0
  61. package/dist/src/harness-review/github-backend.d.ts.map +1 -0
  62. package/dist/src/harness-review/github-backend.js +130 -0
  63. package/dist/src/harness-review/github-backend.js.map +1 -0
  64. package/dist/src/harness-review/github-code-search.d.ts +46 -0
  65. package/dist/src/harness-review/github-code-search.d.ts.map +1 -0
  66. package/dist/src/harness-review/github-code-search.js +94 -0
  67. package/dist/src/harness-review/github-code-search.js.map +1 -0
  68. package/dist/src/harness-review/identifiers.d.ts +75 -0
  69. package/dist/src/harness-review/identifiers.d.ts.map +1 -0
  70. package/dist/src/harness-review/identifiers.js +678 -0
  71. package/dist/src/harness-review/identifiers.js.map +1 -0
  72. package/dist/src/harness-review/placeholders.d.ts +44 -0
  73. package/dist/src/harness-review/placeholders.d.ts.map +1 -0
  74. package/dist/src/harness-review/placeholders.js +138 -0
  75. package/dist/src/harness-review/placeholders.js.map +1 -0
  76. package/dist/src/harness-review/related-pr.d.ts +133 -0
  77. package/dist/src/harness-review/related-pr.d.ts.map +1 -0
  78. package/dist/src/harness-review/related-pr.js +553 -0
  79. package/dist/src/harness-review/related-pr.js.map +1 -0
  80. package/dist/src/harness-review/related-repos.d.ts +69 -0
  81. package/dist/src/harness-review/related-repos.d.ts.map +1 -0
  82. package/dist/src/harness-review/related-repos.js +430 -0
  83. package/dist/src/harness-review/related-repos.js.map +1 -0
  84. package/dist/src/harness-review/remote-url.d.ts +8 -0
  85. package/dist/src/harness-review/remote-url.d.ts.map +1 -0
  86. package/dist/src/harness-review/remote-url.js +35 -0
  87. package/dist/src/harness-review/remote-url.js.map +1 -0
  88. package/dist/src/harness-review/replay.d.ts +163 -0
  89. package/dist/src/harness-review/replay.d.ts.map +1 -0
  90. package/dist/src/harness-review/replay.js +575 -0
  91. package/dist/src/harness-review/replay.js.map +1 -0
  92. package/dist/src/harness-review/rule-id-lists.d.ts +38 -0
  93. package/dist/src/harness-review/rule-id-lists.d.ts.map +1 -0
  94. package/dist/src/harness-review/rule-id-lists.js +189 -0
  95. package/dist/src/harness-review/rule-id-lists.js.map +1 -0
  96. package/dist/src/harness-review/search-backend.d.ts +59 -0
  97. package/dist/src/harness-review/search-backend.d.ts.map +1 -0
  98. package/dist/src/harness-review/search-backend.js +178 -0
  99. package/dist/src/harness-review/search-backend.js.map +1 -0
  100. package/dist/src/harness-review/self-contamination.d.ts +83 -0
  101. package/dist/src/harness-review/self-contamination.d.ts.map +1 -0
  102. package/dist/src/harness-review/self-contamination.js +560 -0
  103. package/dist/src/harness-review/self-contamination.js.map +1 -0
  104. package/dist/src/harness-review/self-references.d.ts +20 -0
  105. package/dist/src/harness-review/self-references.d.ts.map +1 -0
  106. package/dist/src/harness-review/self-references.js +173 -0
  107. package/dist/src/harness-review/self-references.js.map +1 -0
  108. package/dist/src/harness-review/three-state.d.ts +79 -0
  109. package/dist/src/harness-review/three-state.d.ts.map +1 -0
  110. package/dist/src/harness-review/three-state.js +238 -0
  111. package/dist/src/harness-review/three-state.js.map +1 -0
  112. package/dist/src/harness-review/types.d.ts +148 -0
  113. package/dist/src/harness-review/types.d.ts.map +1 -0
  114. package/dist/src/harness-review/types.js +74 -0
  115. package/dist/src/harness-review/types.js.map +1 -0
  116. package/dist/src/index.d.ts +1 -0
  117. package/dist/src/index.d.ts.map +1 -1
  118. package/dist/src/index.js +1 -0
  119. package/dist/src/index.js.map +1 -1
  120. package/dist/src/mcp/tools/review-passthrough.js +7 -1
  121. package/dist/src/mcp/tools/review-passthrough.js.map +1 -1
  122. package/dist/src/review/agent-matcher.d.ts +16 -1
  123. package/dist/src/review/agent-matcher.d.ts.map +1 -1
  124. package/dist/src/review/agent-matcher.js +31 -4
  125. package/dist/src/review/agent-matcher.js.map +1 -1
  126. package/dist/src/review/passthrough-engine.d.ts.map +1 -1
  127. package/dist/src/review/passthrough-engine.js +40 -2
  128. package/dist/src/review/passthrough-engine.js.map +1 -1
  129. package/package.json +1 -1
  130. package/plugin/.codex-plugin/plugin.json +1 -1
  131. package/plugin/.mcp.json +1 -1
  132. package/plugin/mcp.json +1 -1
  133. package/plugin/review-agents/harness-reviewer/AGENT.md +211 -0
  134. package/plugin/role-agents/_shared/references/comment-rules.md +1 -1
  135. package/plugin/role-agents/suggestion-verifier/AGENT.md +7 -1
  136. package/plugin/skills/_shared/proactive-routing.md +1 -0
  137. package/plugin/skills/_shared/rule-sources.md +1 -1
  138. package/plugin/skills/agent/SKILL.md +2 -0
  139. package/plugin/skills/review/SKILL.md +343 -7
  140. package/plugin/skills/review-loop/SKILL.md +124 -2
  141. package/plugin/skills/ship/SKILL.md +40 -1
  142. package/schemas/gestalt.schema.json +12 -0
@@ -0,0 +1,163 @@
1
+ import { type CollectBackend } from './collect.js';
2
+ /**
3
+ * 과거 하네스 PR 재현 스크립트(scripts/local/replay-harness-prs.ts)의 순수 로직.
4
+ *
5
+ * 스크립트는 사내 레포를 다루므로 gitignore 자리에 두고 커밋하지 않는다. 테스트가 그 경로를
6
+ * import하면 CI에서 파일이 없어 깨지니 인자 해석과 리포트 조립만 여기로 뺐다. 이 모듈은
7
+ * 측정값을 표로 옮길 뿐 합격이나 불합격을 가르지 않는다. 기준 수치는 첫 측정을 본 뒤에 정한다.
8
+ */
9
+ export declare const DEFAULT_OLD_VERSION = "0.83.2";
10
+ /**
11
+ * 새 버전 칸의 이름. package.json 버전은 배포 전까지 옛 버전과 같은 번호라 커밋으로 가른다.
12
+ * 미커밋 변경이 있으면 그 커밋과도 다른 코드가 돈 것이라 따로 적는다.
13
+ */
14
+ export declare function checkoutLabel(shortSha: string | null, dirty?: boolean): string;
15
+ export interface ReplayArgs {
16
+ prList: string;
17
+ repoDir: string;
18
+ oldVersion: string;
19
+ repeat: number;
20
+ backend: CollectBackend;
21
+ /** collect의 `--repo-dir`로 그대로 넘긴다 (`owner/name=<path>` 또는 `<path>`) */
22
+ relatedDirs: string[];
23
+ /** 리뷰 리포트를 만드는 셸 명령. 없으면 collect 후보만 잰다 */
24
+ reviewCmd: string | null;
25
+ /** 회차마다 워크트리의 `.gestalt/code-graph.db`로 복사할 DB. 없으면 co-change 경로를 못 돈다 */
26
+ codeGraphDb: string | null;
27
+ }
28
+ export type ParseResult<T> = {
29
+ ok: true;
30
+ value: T;
31
+ } | {
32
+ ok: false;
33
+ error: string;
34
+ };
35
+ export declare const REPLAY_USAGE: string;
36
+ export declare function parseReplayArgs(argv: string[], cwd: string): ParseResult<ReplayArgs>;
37
+ /** fix가 따라온 PR에서 리뷰가 잡았어야 하는 자리 하나 */
38
+ export interface ReplayExpectation {
39
+ id: string;
40
+ description: string;
41
+ /** 코멘트가 달린 파일이나 후보가 가리키는 파일 중 하나와 같아야 한다 */
42
+ path?: string;
43
+ line?: number;
44
+ /** 줄 번호를 몇 줄까지 어긋나도 같은 자리로 볼지. 없으면 정확히 같아야 한다 */
45
+ lineTolerance?: number;
46
+ /** 코멘트 본문에 들어 있어야 하는 글자 */
47
+ text?: string;
48
+ }
49
+ export interface ReplayEntry {
50
+ id: string;
51
+ pr: number | null;
52
+ /** `gh pr view --repo`로 넘긴다. 없으면 레포 디렉토리의 원격을 따른다 */
53
+ repo: string | null;
54
+ base: string | null;
55
+ head: string | null;
56
+ followedByFix: boolean;
57
+ expected: ReplayExpectation[];
58
+ note: string | null;
59
+ }
60
+ /**
61
+ * PR 목록 파일을 읽는다. 배열이거나 `{ "entries": [...] }`다.
62
+ *
63
+ * 항목마다 `pr`(번호) 또는 `base`와 `head`(커밋)가 있어야 한다. `followedByFix`를 안 적으면
64
+ * `expected`가 있는지로 정한다.
65
+ */
66
+ export declare function parseReplayList(text: string): ParseResult<ReplayEntry[]>;
67
+ export type ReplayCommentSource = 'collect' | 'review';
68
+ /** 한 회차가 낸 코멘트 하나. collect 후보와 리뷰 리포트 이슈를 같은 모양으로 맞춘다 */
69
+ export interface ReplayComment {
70
+ source: ReplayCommentSource;
71
+ kind: string;
72
+ path: string;
73
+ line: number | null;
74
+ /** 후보가 가리키는 다른 자리. 리뷰 코멘트면 null */
75
+ relatedPath: string | null;
76
+ /** relatedPath 안의 줄. 후보가 줄을 안 주면 null */
77
+ relatedLine: number | null;
78
+ body: string;
79
+ }
80
+ /** `gestalt harness-refs collect --json` 출력에서 후보를 꺼낸다. 모양이 다르면 빈 배열이다 */
81
+ export declare function commentsFromCollect(json: unknown): ReplayComment[];
82
+ /**
83
+ * 리뷰 명령이 쓴 JSON에서 코멘트를 꺼낸다.
84
+ *
85
+ * ReviewIssue 배열, `{ issues }`나 `{ comments }`, ReviewResult 배열 중 무엇이든 받는다.
86
+ * 이 텍스트는 세어서 표에 옮길 뿐 재현 절차에 영향을 주지 않는다.
87
+ */
88
+ export declare function commentsFromReview(json: unknown): ReplayComment[];
89
+ /** 회차를 넘어 같은 코멘트로 묶을 때 쓰는 키. 본문 공백 차이는 무시한다 */
90
+ export declare function commentFingerprint(c: ReplayComment): string;
91
+ export declare function matchesExpectation(c: ReplayComment, e: ReplayExpectation): boolean;
92
+ export declare const STEP_STATUSES: readonly ["ok", "unsupported", "failed", "skipped"];
93
+ export type StepStatus = (typeof STEP_STATUSES)[number];
94
+ export interface ReplayStep {
95
+ status: StepStatus;
96
+ detail?: string;
97
+ }
98
+ export type ReplayVersion = 'old' | 'new';
99
+ export interface ReplayRun {
100
+ version: ReplayVersion;
101
+ iteration: number;
102
+ collect: ReplayStep & {
103
+ referenceCheckSkipped?: boolean;
104
+ lookupBlocked?: number;
105
+ };
106
+ review: ReplayStep;
107
+ comments: ReplayComment[];
108
+ }
109
+ export interface ReplayEntryResult {
110
+ entry: ReplayEntry;
111
+ base: string | null;
112
+ head: string | null;
113
+ /** base와 head를 못 구했거나 워크트리를 못 만든 경우. 이때 runs는 비어 있다 */
114
+ error: string | null;
115
+ runs: ReplayRun[];
116
+ }
117
+ export interface ReplayReportInput {
118
+ runId: string;
119
+ createdAt: string;
120
+ repoLabel: string;
121
+ backend: CollectBackend;
122
+ repeat: number;
123
+ reviewCmdGiven: boolean;
124
+ versions: Record<ReplayVersion, string>;
125
+ results: ReplayEntryResult[];
126
+ }
127
+ export interface VersionSummary {
128
+ counts: number[];
129
+ mean: number | null;
130
+ notes: string[];
131
+ }
132
+ export declare function summarizeVersion(runs: ReplayRun[], version: ReplayVersion): VersionSummary;
133
+ export interface ExpectationHits {
134
+ expectation: ReplayExpectation;
135
+ hits: Record<ReplayVersion, {
136
+ runs: number;
137
+ total: number;
138
+ }>;
139
+ }
140
+ export declare function expectationHits(result: ReplayEntryResult): ExpectationHits[];
141
+ /** 측정 리포트 본문. 숫자와 회차별 상태만 적고 통과 여부는 적지 않는다 */
142
+ export declare function buildReplayReport(input: ReplayReportInput): string;
143
+ export interface LabelItem {
144
+ entryId: string;
145
+ comment: ReplayComment;
146
+ /** 새 버전 회차 중 이 코멘트가 나온 횟수 */
147
+ seenRuns: number;
148
+ totalRuns: number;
149
+ inOldVersion: boolean;
150
+ }
151
+ /** 새 버전이 낸 코멘트를 회차를 넘어 중복 없이 모은다 */
152
+ export declare function collectLabelItems(results: ReplayEntryResult[]): LabelItem[];
153
+ export declare const LABEL_PREFIX = "label:";
154
+ /** 사용자가 코멘트마다 correct나 incorrect를 적는 시트 */
155
+ export declare function buildLabelSheet(input: ReplayReportInput): string;
156
+ /**
157
+ * 재현 중 자식 프로세스가 부르는 gh가 읽기만 하는지 본다.
158
+ *
159
+ * 리뷰 명령이 review 스킬을 돌리면 PR 대상일 때 코멘트를 게시하려 한다. 재현은 게시 없이
160
+ * 리포트만 내야 하므로 스크립트가 PATH 앞에 둔 gh 가림막이 이 함수로 쓰기 호출을 끊는다.
161
+ */
162
+ export declare function isReadOnlyGhCall(args: string[]): boolean;
163
+ //# sourceMappingURL=replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../../src/harness-review/replay.ts"],"names":[],"mappings":"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"}