intentpatch 0.8.0 → 0.9.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/README.ko.md +45 -11
- package/README.md +46 -11
- package/dist/application/rules/added-dependency-usage-rule.js +2 -2
- package/dist/application/rules/added-dependency-usage-rule.js.map +1 -1
- package/dist/application/rules/npm-workspace-dependency-rule.d.ts +1 -1
- package/dist/application/rules/npm-workspace-dependency-rule.d.ts.map +1 -1
- package/dist/application/rules/npm-workspace-dependency-rule.js +30 -14
- package/dist/application/rules/npm-workspace-dependency-rule.js.map +1 -1
- package/dist/application/rules/package-json-workspace-dependency-rule.d.ts +5 -0
- package/dist/application/rules/package-json-workspace-dependency-rule.d.ts.map +1 -0
- package/dist/application/rules/package-json-workspace-dependency-rule.js +5 -0
- package/dist/application/rules/package-json-workspace-dependency-rule.js.map +1 -0
- package/dist/application/services/workspace-manifest-analysis.d.ts +1 -0
- package/dist/application/services/workspace-manifest-analysis.d.ts.map +1 -1
- package/dist/application/services/workspace-manifest-analysis.js +2 -2
- package/dist/application/services/workspace-manifest-analysis.js.map +1 -1
- package/dist/infrastructure/config/write-change-contract.d.ts +4 -0
- package/dist/infrastructure/config/write-change-contract.d.ts.map +1 -0
- package/dist/infrastructure/config/write-change-contract.js +24 -0
- package/dist/infrastructure/config/write-change-contract.js.map +1 -0
- package/dist/presentation/analyze-repository.js +2 -2
- package/dist/presentation/analyze-repository.js.map +1 -1
- package/dist/presentation/cli/arguments.d.ts +13 -1
- package/dist/presentation/cli/arguments.d.ts.map +1 -1
- package/dist/presentation/cli/arguments.js +82 -0
- package/dist/presentation/cli/arguments.js.map +1 -1
- package/dist/presentation/cli/main.js +34 -0
- package/dist/presentation/cli/main.js.map +1 -1
- package/package.json +1 -1
package/README.ko.md
CHANGED
|
@@ -19,9 +19,24 @@ IntentPatch는 이러한 질문에 답하기 위해 **Git diff, 정적 분석,
|
|
|
19
19
|
LLM 없이도 재현 가능한 분석을 제공하고, AI 설명 기능은 선택적으로 결합하는 것을 목표로
|
|
20
20
|
합니다.
|
|
21
21
|
|
|
22
|
+
## 실제 보고서 바로 보기
|
|
23
|
+
|
|
24
|
+
저장소를 복제한 뒤 실제 커밋 하나를 분석하는 명령을 실행합니다.
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
git clone https://github.com/xx2xxjaeil/intent-patch.git
|
|
28
|
+
cd intent-patch
|
|
29
|
+
npx --yes intentpatch@0.9.0 analyze --base '1cc489b^' --head 1cc489b --format html --output intentpatch-report.html
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
생성된 `intentpatch-report.html`을 로컬 브라우저에서 여세요. 이 변경에서는 나중에 수정된
|
|
33
|
+
공개 API 위험과 중복 코드 후보가 보고됩니다. 판단 근거는 [실제 변경 사례](./docs/real-world-evaluation.md)에
|
|
34
|
+
정리했고, [저장된 HTML 보고서](./docs/examples/intent-input-change.html)도 확인할 수 있습니다.
|
|
35
|
+
GitHub에서는 HTML 화면 대신 소스가 보일 수 있습니다.
|
|
36
|
+
|
|
22
37
|
## 빠른 시작
|
|
23
38
|
|
|
24
|
-
Node.js 20 이상과 Git이 설치되어 있어야 합니다. npm에 공개된 v0.
|
|
39
|
+
Node.js 20 이상과 Git이 설치되어 있어야 합니다. npm에 공개된 v0.9.0은 전역 설치 없이
|
|
25
40
|
실행할 수 있습니다.
|
|
26
41
|
|
|
27
42
|
```bash
|
|
@@ -67,7 +82,7 @@ jobs:
|
|
|
67
82
|
|
|
68
83
|
- name: Analyze pull request
|
|
69
84
|
id: intentpatch
|
|
70
|
-
uses: xx2xxjaeil/intent-patch@v0.
|
|
85
|
+
uses: xx2xxjaeil/intent-patch@v0.9.0
|
|
71
86
|
with:
|
|
72
87
|
fail-on: high
|
|
73
88
|
|
|
@@ -79,8 +94,9 @@ jobs:
|
|
|
79
94
|
path: intentpatch-report
|
|
80
95
|
```
|
|
81
96
|
|
|
82
|
-
Action은 릴리스 버전이나 불변 commit SHA로 고정하는 방식을 권장합니다. v0.
|
|
83
|
-
|
|
97
|
+
Action은 릴리스 버전이나 불변 commit SHA로 고정하는 방식을 권장합니다. v0.9.0에는 Yarn
|
|
98
|
+
workspace dependency 분석과 Change Contract를 안전하게 만드는 `init` 명령이 추가되었습니다.
|
|
99
|
+
Yarn 4 lockfile 분석, 소스와 테스트의 명시적 연결, 보고서 필터와 영향 그래프 탐색 개선,
|
|
84
100
|
패키지 진입점 기준 공개 API 경고, 삭제된 모듈의 이전 import 영향 분석, 선택적 Claude Code·Codex·Cursor
|
|
85
101
|
Hook도 사용할 수 있습니다. 공개 API 규칙의 별도 외부 평가 결과와 한계는
|
|
86
102
|
[평가 보고서](./docs/external-repository-evaluation.md)에 기록했습니다. `@main`은 미릴리스 변경을 따라갑니다.
|
|
@@ -147,9 +163,9 @@ LOW 구현체가 하나뿐인 추상화 추가
|
|
|
147
163
|
|
|
148
164
|
## 현재 구현된 기능
|
|
149
165
|
|
|
150
|
-
|
|
151
|
-
최상위 TypeScript·JavaScript 심볼과 공개 export
|
|
152
|
-
영향 범위와 테스트 동반
|
|
166
|
+
CLI는 Git 변경사항, 루트 및 npm·pnpm·Yarn workspace manifest의 직접 dependency,
|
|
167
|
+
lockfile 변경, 최상위 TypeScript·JavaScript 심볼과 공개 export, 기존 구현 중복·단일 구현
|
|
168
|
+
추상화 신호, import graph 기반 영향 범위와 테스트 동반 변경을 분석합니다.
|
|
153
169
|
|
|
154
170
|
- `HEAD`와 현재 working tree 비교
|
|
155
171
|
- 두 Git reference 또는 브랜치 비교
|
|
@@ -170,6 +186,7 @@ LOW 구현체가 하나뿐인 추상화 추가
|
|
|
170
186
|
- pnpm `pnpm-lock.yaml` v9의 레지스트리 패키지 추가·삭제·버전 변경 비교(2개 문서 형식 포함)
|
|
171
187
|
- 잘못되었거나 미지원인 lockfile을 누락하지 않고 finding으로 보고
|
|
172
188
|
- 루트 `workspaces` 패턴에 속한 변경 manifest의 직접 dependency를 workspace별로 보고
|
|
189
|
+
- 루트 `workspaces` 패턴에 속한 Yarn workspace manifest 변경도 분석하고 Yarn 근거를 표시
|
|
173
190
|
- `pnpm-workspace.yaml`의 포함·제외 패턴에 속한 변경 manifest의 직접 dependency를 보고
|
|
174
191
|
- workspace 설정 변경과 manifest의 workspace 안팎 이동을 탐지
|
|
175
192
|
- finding 심각도(`high`, `medium`, `low`) 집계
|
|
@@ -263,6 +280,21 @@ intentpatch analyze --intent-file request.md --format html --output report.html
|
|
|
263
280
|
|
|
264
281
|
### Change Contract로 요청 범위 검사
|
|
265
282
|
|
|
283
|
+
`intentpatch init` 명령은 기존 파일을 덮어쓰지 않고 `.intentpatch.json`을 생성합니다.
|
|
284
|
+
자연어 요청만으로 경로를 추측하지 않으므로 이번 작업의 실제 경로를 전달하세요.
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
intentpatch init \
|
|
288
|
+
--intent "회원 탈퇴 기능 구현" \
|
|
289
|
+
--include 'src/user/**' --include 'tests/user/**' \
|
|
290
|
+
--allow package.json \
|
|
291
|
+
--test-source 'src/**/*.ts' --test-file 'tests/**/*.test.ts'
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
인자 없이 실행하면 비어 있지만 유효한 계약을 생성합니다. `scope.include` 경로를 지정하기
|
|
295
|
+
전까지 범위 검사는 꺼져 있고, 테스트 변경 검사는 `--test-source`와 `--test-file`을 함께
|
|
296
|
+
지정해야 켜집니다. 다른 디렉터리는 `--cwd`로 지정합니다. 이 명령은 v0.9.0부터 제공됩니다.
|
|
297
|
+
|
|
266
298
|
분석할 저장소의 `.intentpatch.json`에 이번 요청의 기대 범위를 선언할 수 있습니다.
|
|
267
299
|
|
|
268
300
|
```json
|
|
@@ -444,7 +476,7 @@ npm pack --dry-run
|
|
|
444
476
|
|
|
445
477
|
## 릴리스
|
|
446
478
|
|
|
447
|
-
`v0.
|
|
479
|
+
`v0.9.0`처럼 `package.json` 버전과 일치하는 태그를 기본 브랜치의 커밋에 push하면 릴리스
|
|
448
480
|
워크플로가 다음 작업을 순서대로 수행합니다.
|
|
449
481
|
|
|
450
482
|
1. 태그·버전·기본 브랜치 포함 여부 검증
|
|
@@ -472,7 +504,7 @@ npm provenance가 자동 생성됩니다. 아직 npm에 존재하지 않는 신
|
|
|
472
504
|
- ✅ pnpm `pnpm-lock.yaml` v9의 레지스트리 패키지 변경
|
|
473
505
|
- ✅ pnpm workspace manifest의 직접 dependency 변경
|
|
474
506
|
- ✅ Yarn 4 metadata-v8 `yarn.lock` 레지스트리 패키지 변경
|
|
475
|
-
- Yarn workspace manifest
|
|
507
|
+
- ✅ Yarn workspace manifest의 직접 dependency 변경
|
|
476
508
|
7. ✅ 직접 export된 공개 심볼 삭제와 export 해제 탐지
|
|
477
509
|
- ✅ JavaScript ESM의 이름 있는 export·default export 삭제 탐지
|
|
478
510
|
8. ✅ 단일 HTML 대시보드와 SVG 기반 dependency 영향 그래프
|
|
@@ -490,7 +522,7 @@ npm provenance가 자동 생성됩니다. 아직 npm에 존재하지 않는 신
|
|
|
490
522
|
- 분석 대상은 최소 한 번 이상 커밋된 Git 저장소여야 합니다.
|
|
491
523
|
- untracked symbolic link는 안전을 위해 내용을 읽지 않습니다.
|
|
492
524
|
- 10 MiB를 초과하는 untracked 파일은 라인 수를 측정하지 않습니다.
|
|
493
|
-
- 직접 dependency 선언 분석은 저장소 루트와 변경된 npm·pnpm workspace `package.json`의
|
|
525
|
+
- 직접 dependency 선언 분석은 저장소 루트와 변경된 npm·pnpm·Yarn workspace `package.json`의
|
|
494
526
|
`dependencies`와 `devDependencies`를 대상으로 합니다.
|
|
495
527
|
- 정적 참조 없음 finding은 미사용 확정이 아닌 검토 후보입니다. 유지보수 대상 JS/TS
|
|
496
528
|
소스의 명시적 import·re-export·문자열 `require()`·`import()`를 살펴봅니다. CLI나 설정
|
|
@@ -501,8 +533,10 @@ npm provenance가 자동 생성됩니다. 아직 npm에 존재하지 않는 신
|
|
|
501
533
|
- pnpm `pnpm-lock.yaml` v9은 프로젝트 문서의 레지스트리 패키지 ID와 버전을 비교합니다.
|
|
502
534
|
integrity만 바뀐 경우, 로컬·Git 패키지, snapshot의 peer 변형, 부모 dependency 귀속은 분석하지 않습니다.
|
|
503
535
|
루트의 직접 dependency 여부는 루트 importer를 기준으로 표시합니다.
|
|
504
|
-
- workspace 판별은 루트의
|
|
536
|
+
- npm·Yarn workspace 판별은 루트의 `workspaces` 배열과 명시 경로, `*`·`**`·`?` 패턴을 지원합니다.
|
|
505
537
|
부정·중괄호·문자 클래스 패턴은 미지원 finding으로 보고합니다.
|
|
538
|
+
- Yarn 여부는 루트 `packageManager` 또는 `yarn.lock`으로 구분합니다. pnpm 설정이 함께
|
|
539
|
+
있으면 중복 보고를 막기 위해 pnpm을 우선합니다.
|
|
506
540
|
- pnpm workspace는 `pnpm-workspace.yaml`의 `packages`에 명시한 `*`·`**`·`?`와 선행 `!`
|
|
507
541
|
제외 패턴을 지원합니다. npm 설정이 함께 있으면 중복 보고를 막기 위해 pnpm 설정을
|
|
508
542
|
우선합니다. 그 외 glob 문법과 catalog는 해석하지 않습니다.
|
package/README.md
CHANGED
|
@@ -16,9 +16,24 @@ AI coding agents such as Codex, Claude Code, and Cursor can change many files fr
|
|
|
16
16
|
|
|
17
17
|
IntentPatch combines **Git diff analysis, static analysis, and dependency analysis** to answer those questions. Its core analysis is deterministic and works without an LLM. Optional AI explanations can be added later without making the core tool dependent on a model provider.
|
|
18
18
|
|
|
19
|
+
## See a real report
|
|
20
|
+
|
|
21
|
+
Clone the repository, then run one analysis command against a real change in its history:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
git clone https://github.com/xx2xxjaeil/intent-patch.git
|
|
25
|
+
cd intent-patch
|
|
26
|
+
npx --yes intentpatch@0.9.0 analyze --base '1cc489b^' --head 1cc489b --format html --output intentpatch-report.html
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Open `intentpatch-report.html` locally. This case reports a public-API risk and a duplicate-code
|
|
30
|
+
candidate that were later fixed; [the case study](./docs/real-world-evaluation.md) explains the
|
|
31
|
+
review decisions. The [checked-in HTML report](./docs/examples/intent-input-change.html) is the
|
|
32
|
+
same real-change example, not a mockup. GitHub may show the HTML source rather than render it.
|
|
33
|
+
|
|
19
34
|
## Quick start
|
|
20
35
|
|
|
21
|
-
IntentPatch requires Node.js 20 or later and Git. Run the published v0.
|
|
36
|
+
IntentPatch requires Node.js 20 or later and Git. Run the published v0.9.0 CLI without
|
|
22
37
|
installing it globally:
|
|
23
38
|
|
|
24
39
|
```bash
|
|
@@ -62,7 +77,7 @@ jobs:
|
|
|
62
77
|
|
|
63
78
|
- name: Analyze pull request
|
|
64
79
|
id: intentpatch
|
|
65
|
-
uses: xx2xxjaeil/intent-patch@v0.
|
|
80
|
+
uses: xx2xxjaeil/intent-patch@v0.9.0
|
|
66
81
|
with:
|
|
67
82
|
fail-on: high
|
|
68
83
|
|
|
@@ -74,10 +89,11 @@ jobs:
|
|
|
74
89
|
path: intentpatch-report
|
|
75
90
|
```
|
|
76
91
|
|
|
77
|
-
Pin the action to a released version or an immutable commit SHA. v0.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
92
|
+
Pin the action to a released version or an immutable commit SHA. v0.9.0 adds Yarn workspace
|
|
93
|
+
dependency analysis and a safe `init` command for creating a Change Contract. It also includes
|
|
94
|
+
Yarn 4 lockfile analysis, explicit source-to-test mappings, report filters, improved impact-graph
|
|
95
|
+
navigation, package-entrypoint-aware public API warnings, historical import impact for deleted
|
|
96
|
+
modules, and opt-in Claude Code, Codex, and Cursor Hooks.
|
|
81
97
|
See [the evaluation report](./docs/external-repository-evaluation.md) for the separately measured
|
|
82
98
|
public-API rules and their limits. `@main` follows unreleased changes.
|
|
83
99
|
|
|
@@ -142,7 +158,9 @@ open the HTML file locally in a browser; GitHub may show its source rather than
|
|
|
142
158
|
|
|
143
159
|
## Implemented capabilities
|
|
144
160
|
|
|
145
|
-
The
|
|
161
|
+
The CLI analyzes Git changes, direct dependencies in the root and npm/pnpm/Yarn workspace manifests,
|
|
162
|
+
lockfile changes, top-level TypeScript and JavaScript symbols and public exports, possible duplicate
|
|
163
|
+
implementations, single-implementation abstractions, import-graph impact, and related test changes.
|
|
146
164
|
|
|
147
165
|
### Git and reporting
|
|
148
166
|
|
|
@@ -170,6 +188,7 @@ The current source tree analyzes Git changes, direct dependencies in the root `p
|
|
|
170
188
|
- Compare resolved registry package changes in pnpm `pnpm-lock.yaml` v9, including two-document lockfiles.
|
|
171
189
|
- Report malformed or unsupported lockfiles as findings rather than silently skipping them.
|
|
172
190
|
- Attribute direct dependency changes to changed npm workspace manifests selected by the root `workspaces` patterns.
|
|
191
|
+
- Attribute changed Yarn workspace manifests using the same root `workspaces` patterns, with Yarn provenance when `packageManager` or `yarn.lock` identifies Yarn.
|
|
173
192
|
- Analyze changed pnpm workspace manifests selected by `pnpm-workspace.yaml`, including exclusion patterns.
|
|
174
193
|
- Report changes to workspace patterns and manifest moves into or out of a configured workspace.
|
|
175
194
|
- Extract top-level named functions, classes, interfaces, and type aliases from `.ts` and `.tsx` files.
|
|
@@ -256,6 +275,22 @@ intentpatch analyze --intent-file request.md --format html --output report.html
|
|
|
256
275
|
|
|
257
276
|
### Check request scope with a Change Contract
|
|
258
277
|
|
|
278
|
+
`intentpatch init` creates `.intentpatch.json` without overwriting an
|
|
279
|
+
existing file. Supply actual paths for the requested change; it never guesses scope from the
|
|
280
|
+
request text:
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
intentpatch init \
|
|
284
|
+
--intent "Implement account deletion" \
|
|
285
|
+
--include 'src/user/**' --include 'tests/user/**' \
|
|
286
|
+
--allow package.json \
|
|
287
|
+
--test-source 'src/**/*.ts' --test-file 'tests/**/*.test.ts'
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
`init` with no options creates a valid blank contract. Scope checks remain off until you add an
|
|
291
|
+
expected `--include` path; test-change checks require both `--test-source` and `--test-file`.
|
|
292
|
+
Use `--cwd` to target another directory. This command is included in v0.9.0 and later.
|
|
293
|
+
|
|
259
294
|
Create `.intentpatch.json` in the repository being analyzed and declare the expected scope of the request:
|
|
260
295
|
|
|
261
296
|
```json
|
|
@@ -439,7 +474,7 @@ npm pack --dry-run
|
|
|
439
474
|
|
|
440
475
|
## Release process
|
|
441
476
|
|
|
442
|
-
Pushing a tag such as `v0.
|
|
477
|
+
Pushing a tag such as `v0.9.0`, matching the version in `package.json`, from a commit contained in the default branch triggers the release workflow:
|
|
443
478
|
|
|
444
479
|
1. Validate the tag, package version, and default-branch ancestry.
|
|
445
480
|
2. Run the full quality suite and inspect the npm package with a dry run.
|
|
@@ -463,7 +498,7 @@ No long-lived npm token is stored as a GitHub secret. Public packages published
|
|
|
463
498
|
- ✅ pnpm `pnpm-lock.yaml` v9 resolved registry package changes
|
|
464
499
|
- ✅ pnpm workspace manifest dependency changes
|
|
465
500
|
- ✅ Yarn 4 metadata-v8 `yarn.lock` resolved registry package changes
|
|
466
|
-
- Yarn workspace manifest changes
|
|
501
|
+
- ✅ Yarn workspace manifest dependency changes
|
|
467
502
|
7. ✅ Detection of removed public exports
|
|
468
503
|
- ✅ Named and default ESM exports in JavaScript, without inferred type compatibility
|
|
469
504
|
8. ✅ Standalone HTML dashboard and SVG dependency-impact graph
|
|
@@ -481,11 +516,11 @@ No long-lived npm token is stored as a GitHub secret. Public packages published
|
|
|
481
516
|
- The target must be a Git repository with at least one commit.
|
|
482
517
|
- Untracked symbolic links are not read for safety.
|
|
483
518
|
- Line counts are skipped for untracked files larger than 10 MiB.
|
|
484
|
-
- Direct dependency declarations are analyzed from `dependencies` and `devDependencies` in the root `package.json` and changed npm/pnpm workspace manifests.
|
|
519
|
+
- Direct dependency declarations are analyzed from `dependencies` and `devDependencies` in the root `package.json` and changed npm/pnpm/Yarn workspace manifests.
|
|
485
520
|
- The no-static-reference finding is a review candidate, not proof that a package is unused. It checks explicit JS/TS imports, re-exports, literal `require()` and `import()` across maintained source files; CLI-only/configuration usage may not appear. It does not emit a candidate if source reads or parsing are incomplete, a computed module load exists, no source was scanned, or more than 5,000 source files are present.
|
|
486
521
|
- npm `package-lock.json` v2/v3 analysis compares installed package paths and versions, not dependency provenance, integrity hashes, or vulnerability data. It does not attribute transitive packages to their parents.
|
|
487
522
|
- pnpm `pnpm-lock.yaml` v9 analysis compares registry package IDs and versions in the project document. It ignores integrity-only edits, local/Git packages, snapshot peer variants, and dependency provenance. Root-direct evidence comes from the root importer only.
|
|
488
|
-
-
|
|
523
|
+
- npm and Yarn workspace detection supports the root `workspaces` array with explicit paths and `*`, `**`, and `?` globs. Negation, brace, and character-class patterns are reported as unsupported. Yarn is identified by the root `packageManager` field or `yarn.lock`; when pnpm config also exists, pnpm takes precedence.
|
|
489
524
|
- pnpm workspace detection reads `pnpm-workspace.yaml` `packages` patterns with `*`, `**`, `?`, and leading `!` exclusions. When both npm and pnpm workspace settings exist, pnpm settings take precedence to avoid duplicate findings. Other glob features and pnpm catalogs are not interpreted.
|
|
490
525
|
- Yarn 4 `yarn.lock` metadata-v8 analysis compares registry package resolutions and versions.
|
|
491
526
|
Yarn Classic and other metadata versions are reported as unsupported. Workspace, patch, file,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isMaintainedSourcePath } from "../services/is-maintained-source-path.js";
|
|
2
|
-
import { NpmWorkspaceDependencyRule } from "./npm-workspace-dependency-rule.js";
|
|
3
2
|
import { PackageDependencyRule } from "./package-dependency-rule.js";
|
|
3
|
+
import { PackageJsonWorkspaceDependencyRule } from "./package-json-workspace-dependency-rule.js";
|
|
4
4
|
import { PnpmWorkspaceDependencyRule } from "./pnpm-workspace-dependency-rule.js";
|
|
5
5
|
const rootManifest = "package.json";
|
|
6
6
|
/** 새 직접 dependency의 정적 소스 참조가 없을 때만 검토 후보를 제시한다. */
|
|
@@ -18,7 +18,7 @@ export class AddedDependencyUsageRule {
|
|
|
18
18
|
async analyze(context) {
|
|
19
19
|
const manifestFindings = (await Promise.all([
|
|
20
20
|
new PackageDependencyRule(this.snapshots, rootManifest).analyze(context),
|
|
21
|
-
new
|
|
21
|
+
new PackageJsonWorkspaceDependencyRule(this.snapshots).analyze(context),
|
|
22
22
|
new PnpmWorkspaceDependencyRule(this.snapshots, this.pnpmWorkspaceParser).analyze(context),
|
|
23
23
|
])).flat();
|
|
24
24
|
const added = manifestFindings.filter((finding) => finding.ruleId === "dependency/new-production" ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"added-dependency-usage-rule.js","sourceRoot":"","sources":["../../../src/application/rules/added-dependency-usage-rule.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"added-dependency-usage-rule.js","sourceRoot":"","sources":["../../../src/application/rules/added-dependency-usage-rule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Finding } from "../../domain/finding.js";
|
|
2
2
|
import type { AnalysisContext, AnalysisRule } from "../ports/analysis-rule.js";
|
|
3
3
|
import type { FileSnapshotSource } from "../ports/file-snapshot-source.js";
|
|
4
|
-
/**
|
|
4
|
+
/** 기존 공개 클래스명을 유지하며 package.json workspaces를 npm 또는 Yarn으로 분류한다. */
|
|
5
5
|
export declare class NpmWorkspaceDependencyRule implements AnalysisRule {
|
|
6
6
|
private readonly snapshots;
|
|
7
7
|
constructor(snapshots: FileSnapshotSource);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm-workspace-dependency-rule.d.ts","sourceRoot":"","sources":["../../../src/application/rules/npm-workspace-dependency-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAY3E,
|
|
1
|
+
{"version":3,"file":"npm-workspace-dependency-rule.d.ts","sourceRoot":"","sources":["../../../src/application/rules/npm-workspace-dependency-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAY3E,oEAAoE;AACpE,qBAAa,0BAA2B,YAAW,YAAY;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,kBAAkB;IAEpD,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;CA+D5E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isRecord } from "../../domain/value-guards.js";
|
|
2
2
|
import { analyzeWorkspaceManifests, isNestedManifestChange, } from "../services/workspace-manifest-analysis.js";
|
|
3
3
|
const rootManifestPath = "package.json";
|
|
4
|
-
/**
|
|
4
|
+
/** 기존 공개 클래스명을 유지하며 package.json workspaces를 npm 또는 Yarn으로 분류한다. */
|
|
5
5
|
export class NpmWorkspaceDependencyRule {
|
|
6
6
|
snapshots;
|
|
7
7
|
constructor(snapshots) {
|
|
@@ -13,16 +13,20 @@ export class NpmWorkspaceDependencyRule {
|
|
|
13
13
|
if (manifestChanges.length === 0 && !rootChanged) {
|
|
14
14
|
return [];
|
|
15
15
|
}
|
|
16
|
-
// pnpm
|
|
16
|
+
// pnpm 설정이 있으면 별도 규칙이 담당한다. Yarn lockfile이 있으면 Yarn으로 귀속한다.
|
|
17
17
|
const pnpmConfig = await this.snapshots.read(context.target, "pnpm-workspace.yaml");
|
|
18
18
|
if (pnpmConfig.before !== undefined || pnpmConfig.after !== undefined)
|
|
19
19
|
return [];
|
|
20
20
|
const snapshot = await this.snapshots.read(context.target, rootManifestPath);
|
|
21
21
|
const before = parseWorkspaceConfig(snapshot.before);
|
|
22
22
|
const after = parseWorkspaceConfig(snapshot.after);
|
|
23
|
+
const yarnLock = await this.snapshots.read(context.target, "yarn.lock");
|
|
24
|
+
const manager = (after.ok ? after.managerHint : undefined) ??
|
|
25
|
+
(before.ok ? before.managerHint : undefined) ??
|
|
26
|
+
(yarnLock.before !== undefined || yarnLock.after !== undefined ? "yarn" : "npm");
|
|
23
27
|
const errors = [
|
|
24
|
-
...(!before.ok ? [configFinding("base", before)] : []),
|
|
25
|
-
...(!after.ok ? [configFinding("current", after)] : []),
|
|
28
|
+
...(!before.ok ? [configFinding("base", before, manager)] : []),
|
|
29
|
+
...(!after.ok ? [configFinding("current", after, manager)] : []),
|
|
26
30
|
];
|
|
27
31
|
if (errors.length > 0) {
|
|
28
32
|
return errors;
|
|
@@ -33,20 +37,23 @@ export class NpmWorkspaceDependencyRule {
|
|
|
33
37
|
const findings = [];
|
|
34
38
|
if (rootChanged && JSON.stringify(before.patterns) !== JSON.stringify(after.patterns)) {
|
|
35
39
|
findings.push({
|
|
36
|
-
ruleId: "
|
|
40
|
+
ruleId: manager === "yarn"
|
|
41
|
+
? "dependency/yarn-workspace-config-changed"
|
|
42
|
+
: "dependency/workspace-config-changed",
|
|
37
43
|
severity: "low",
|
|
38
|
-
title:
|
|
44
|
+
title: `${manager} workspace configuration changed`,
|
|
39
45
|
description: "The root package.json workspace patterns changed.",
|
|
40
46
|
file: rootManifestPath,
|
|
41
47
|
evidence: {
|
|
42
48
|
from: JSON.stringify(before.patterns),
|
|
43
49
|
to: JSON.stringify(after.patterns),
|
|
50
|
+
...(manager === "yarn" ? { packageManager: manager } : {}),
|
|
44
51
|
},
|
|
45
52
|
});
|
|
46
53
|
}
|
|
47
54
|
return [
|
|
48
55
|
...findings,
|
|
49
|
-
...(await analyzeWorkspaceManifests(context, this.snapshots, manifestChanges, { includes: before.patterns, excludes: [] }, { includes: after.patterns, excludes: [] },
|
|
56
|
+
...(await analyzeWorkspaceManifests(context, this.snapshots, manifestChanges, { includes: before.patterns, excludes: [] }, { includes: after.patterns, excludes: [] }, manager)),
|
|
50
57
|
];
|
|
51
58
|
}
|
|
52
59
|
}
|
|
@@ -64,8 +71,13 @@ function parseWorkspaceConfig(content) {
|
|
|
64
71
|
if (!isRecord(manifest)) {
|
|
65
72
|
return { ok: false, kind: "invalid", reason: "The root package.json must be an object." };
|
|
66
73
|
}
|
|
74
|
+
const managerHint = typeof manifest.packageManager === "string" && manifest.packageManager.startsWith("yarn@")
|
|
75
|
+
? "yarn"
|
|
76
|
+
: typeof manifest.packageManager === "string" && manifest.packageManager.startsWith("npm@")
|
|
77
|
+
? "npm"
|
|
78
|
+
: undefined;
|
|
67
79
|
if (manifest.workspaces === undefined) {
|
|
68
|
-
return { ok: true, patterns: [] };
|
|
80
|
+
return { ok: true, patterns: [], ...(managerHint === undefined ? {} : { managerHint }) };
|
|
69
81
|
}
|
|
70
82
|
if (!Array.isArray(manifest.workspaces)) {
|
|
71
83
|
return { ok: false, kind: "invalid", reason: "workspaces must be an array of paths." };
|
|
@@ -88,20 +100,24 @@ function parseWorkspaceConfig(content) {
|
|
|
88
100
|
}
|
|
89
101
|
patterns.push(pattern);
|
|
90
102
|
}
|
|
91
|
-
return { ok: true, patterns };
|
|
103
|
+
return { ok: true, patterns, ...(managerHint === undefined ? {} : { managerHint }) };
|
|
92
104
|
}
|
|
93
|
-
function configFinding(side, result) {
|
|
105
|
+
function configFinding(side, result, manager) {
|
|
94
106
|
return {
|
|
95
107
|
ruleId: result.kind === "invalid"
|
|
96
108
|
? "dependency/invalid-workspace-config"
|
|
97
109
|
: "dependency/unsupported-workspace-pattern",
|
|
98
110
|
severity: result.kind === "invalid" ? "high" : "low",
|
|
99
111
|
title: result.kind === "invalid"
|
|
100
|
-
?
|
|
101
|
-
:
|
|
102
|
-
description: `Could not analyze the ${side}
|
|
112
|
+
? `Invalid ${manager} workspace configuration`
|
|
113
|
+
: `Unsupported ${manager} workspace pattern`,
|
|
114
|
+
description: `Could not analyze the ${side} ${manager} workspaces: ${result.reason}`,
|
|
103
115
|
file: rootManifestPath,
|
|
104
|
-
evidence: {
|
|
116
|
+
evidence: {
|
|
117
|
+
side,
|
|
118
|
+
reason: result.reason,
|
|
119
|
+
...(manager === "yarn" ? { packageManager: manager } : {}),
|
|
120
|
+
},
|
|
105
121
|
};
|
|
106
122
|
}
|
|
107
123
|
//# sourceMappingURL=npm-workspace-dependency-rule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm-workspace-dependency-rule.js","sourceRoot":"","sources":["../../../src/application/rules/npm-workspace-dependency-rule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGxD,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,4CAA4C,CAAC;AAEpD,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAMxC,
|
|
1
|
+
{"version":3,"file":"npm-workspace-dependency-rule.js","sourceRoot":"","sources":["../../../src/application/rules/npm-workspace-dependency-rule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { NpmWorkspaceDependencyRule } from "./npm-workspace-dependency-rule.js";
|
|
2
|
+
/** npm과 Yarn이 공유하는 package.json workspace 규칙의 명시적 이름. */
|
|
3
|
+
export declare class PackageJsonWorkspaceDependencyRule extends NpmWorkspaceDependencyRule {
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=package-json-workspace-dependency-rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-json-workspace-dependency-rule.d.ts","sourceRoot":"","sources":["../../../src/application/rules/package-json-workspace-dependency-rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAEhF,yDAAyD;AACzD,qBAAa,kCAAmC,SAAQ,0BAA0B;CAAG"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { NpmWorkspaceDependencyRule } from "./npm-workspace-dependency-rule.js";
|
|
2
|
+
/** npm과 Yarn이 공유하는 package.json workspace 규칙의 명시적 이름. */
|
|
3
|
+
export class PackageJsonWorkspaceDependencyRule extends NpmWorkspaceDependencyRule {
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=package-json-workspace-dependency-rule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-json-workspace-dependency-rule.js","sourceRoot":"","sources":["../../../src/application/rules/package-json-workspace-dependency-rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAEhF,yDAAyD;AACzD,MAAM,OAAO,kCAAmC,SAAQ,0BAA0B;CAAG"}
|
|
@@ -9,4 +9,5 @@ export interface WorkspacePatterns {
|
|
|
9
9
|
export declare function isNestedManifestChange(change: FileChange): boolean;
|
|
10
10
|
/** 패키지 매니저별 설정 해석 뒤에는 같은 manifest 비교·membership 규칙을 적용한다. */
|
|
11
11
|
export declare function analyzeWorkspaceManifests(context: AnalysisContext, snapshots: FileSnapshotSource, changes: readonly FileChange[], before: WorkspacePatterns, after: WorkspacePatterns, manager: "npm" | "pnpm"): Promise<Finding[]>;
|
|
12
|
+
export declare function analyzeWorkspaceManifests(context: AnalysisContext, snapshots: FileSnapshotSource, changes: readonly FileChange[], before: WorkspacePatterns, after: WorkspacePatterns, manager: "npm" | "pnpm" | "yarn"): Promise<Finding[]>;
|
|
12
13
|
//# sourceMappingURL=workspace-manifest-analysis.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-manifest-analysis.d.ts","sourceRoot":"","sources":["../../../src/application/services/workspace-manifest-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAM3E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAElE;AAED,6DAA6D;AAC7D,
|
|
1
|
+
{"version":3,"file":"workspace-manifest-analysis.d.ts","sourceRoot":"","sources":["../../../src/application/services/workspace-manifest-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAM3E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAElE;AAED,6DAA6D;AAC7D,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,kBAAkB,EAC7B,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,KAAK,GAAG,MAAM,GACtB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AACtB,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,kBAAkB,EAC7B,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAC/B,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC"}
|
|
@@ -4,7 +4,6 @@ const manifestSuffix = "/package.json";
|
|
|
4
4
|
export function isNestedManifestChange(change) {
|
|
5
5
|
return isNestedManifestPath(change.path) || isNestedManifestPath(change.previousPath);
|
|
6
6
|
}
|
|
7
|
-
/** 패키지 매니저별 설정 해석 뒤에는 같은 manifest 비교·membership 규칙을 적용한다. */
|
|
8
7
|
export async function analyzeWorkspaceManifests(context, snapshots, changes, before, after, manager) {
|
|
9
8
|
const results = await Promise.all(changes.map(async (change) => {
|
|
10
9
|
const previousPath = change.kind === "renamed" ? (change.previousPath ?? change.path) : change.path;
|
|
@@ -28,6 +27,7 @@ export async function analyzeWorkspaceManifests(context, snapshots, changes, bef
|
|
|
28
27
|
currentPath,
|
|
29
28
|
fromWorkspace: wasWorkspace,
|
|
30
29
|
toWorkspace: isCurrentWorkspace,
|
|
30
|
+
...(manager === "npm" ? {} : { packageManager: manager }),
|
|
31
31
|
},
|
|
32
32
|
},
|
|
33
33
|
]
|
|
@@ -40,7 +40,7 @@ export async function analyzeWorkspaceManifests(context, snapshots, changes, bef
|
|
|
40
40
|
evidence: {
|
|
41
41
|
...finding.evidence,
|
|
42
42
|
workspace,
|
|
43
|
-
...(manager === "
|
|
43
|
+
...(manager === "npm" ? {} : { packageManager: manager }),
|
|
44
44
|
},
|
|
45
45
|
})),
|
|
46
46
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-manifest-analysis.js","sourceRoot":"","sources":["../../../src/application/services/workspace-manifest-analysis.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,cAAc,GAAG,eAAe,CAAC;AAOvC,MAAM,UAAU,sBAAsB,CAAC,MAAkB;IACvD,OAAO,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACxF,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace-manifest-analysis.js","sourceRoot":"","sources":["../../../src/application/services/workspace-manifest-analysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ChangeContract } from "../../domain/change-contract.js";
|
|
2
|
+
/** 기존 계약을 덮어쓰지 않고 새 저장소 설정만 생성한다. */
|
|
3
|
+
export declare function writeChangeContract(workingDirectory: string, contract: ChangeContract): Promise<string>;
|
|
4
|
+
//# sourceMappingURL=write-change-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-change-contract.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/config/write-change-contract.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,qCAAqC;AACrC,wBAAsB,mBAAmB,CACvC,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC,CAejB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { writeFile } from "node:fs/promises";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
/** 기존 계약을 덮어쓰지 않고 새 저장소 설정만 생성한다. */
|
|
4
|
+
export async function writeChangeContract(workingDirectory, contract) {
|
|
5
|
+
const path = resolve(workingDirectory, ".intentpatch.json");
|
|
6
|
+
try {
|
|
7
|
+
await writeFile(path, `${JSON.stringify(contract, null, 2)}\n`, {
|
|
8
|
+
encoding: "utf8",
|
|
9
|
+
flag: "wx",
|
|
10
|
+
mode: 0o600,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (isAlreadyExists(error)) {
|
|
15
|
+
throw new Error(`Change contract already exists: ${path}`);
|
|
16
|
+
}
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
return path;
|
|
20
|
+
}
|
|
21
|
+
function isAlreadyExists(error) {
|
|
22
|
+
return error instanceof Error && "code" in error && error.code === "EEXIST";
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=write-change-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-change-contract.js","sourceRoot":"","sources":["../../../src/infrastructure/config/write-change-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,gBAAwB,EACxB,QAAwB;IAExB,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YAC9D,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9E,CAAC"}
|
|
@@ -4,8 +4,8 @@ import { DuplicateImplementationRule } from "../application/rules/duplicate-impl
|
|
|
4
4
|
import { ExpectedScopeRule } from "../application/rules/expected-scope-rule.js";
|
|
5
5
|
import { MissingTestChangeRule } from "../application/rules/missing-test-change-rule.js";
|
|
6
6
|
import { NpmLockfileRule } from "../application/rules/npm-lockfile-rule.js";
|
|
7
|
-
import { NpmWorkspaceDependencyRule } from "../application/rules/npm-workspace-dependency-rule.js";
|
|
8
7
|
import { PackageDependencyRule } from "../application/rules/package-dependency-rule.js";
|
|
8
|
+
import { PackageJsonWorkspaceDependencyRule } from "../application/rules/package-json-workspace-dependency-rule.js";
|
|
9
9
|
import { PnpmLockfileRule } from "../application/rules/pnpm-lockfile-rule.js";
|
|
10
10
|
import { PnpmWorkspaceDependencyRule } from "../application/rules/pnpm-workspace-dependency-rule.js";
|
|
11
11
|
import { PublicApiCompatibilityRule } from "../application/rules/public-api-compatibility-rule.js";
|
|
@@ -58,7 +58,7 @@ export async function analyzeRepository(options) {
|
|
|
58
58
|
new NpmLockfileRule(snapshotSource, new NpmPackageLockParser()),
|
|
59
59
|
new PnpmLockfileRule(snapshotSource, new PnpmYamlLockParser()),
|
|
60
60
|
new YarnLockfileRule(snapshotSource, new YarnYamlLockParser()),
|
|
61
|
-
new
|
|
61
|
+
new PackageJsonWorkspaceDependencyRule(snapshotSource),
|
|
62
62
|
new PnpmWorkspaceDependencyRule(snapshotSource, pnpmWorkspaceParser),
|
|
63
63
|
new ExpectedScopeRule(),
|
|
64
64
|
new ChangeBudgetRule(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-repository.js","sourceRoot":"","sources":["../../src/presentation/analyze-repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qDAAqD,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,uDAAuD,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kDAAkD,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"analyze-repository.js","sourceRoot":"","sources":["../../src/presentation/analyze-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,18 @@ export interface AnalyzeCommandOptions {
|
|
|
12
12
|
readonly outputPath?: string;
|
|
13
13
|
readonly failOn?: Severity;
|
|
14
14
|
}
|
|
15
|
+
export interface InitCommandOptions {
|
|
16
|
+
readonly command: "init";
|
|
17
|
+
readonly workingDirectory: string;
|
|
18
|
+
readonly intent?: string;
|
|
19
|
+
readonly include: readonly string[];
|
|
20
|
+
readonly allow: readonly string[];
|
|
21
|
+
readonly maxFiles?: number;
|
|
22
|
+
readonly maxLines?: number;
|
|
23
|
+
readonly testSources: readonly string[];
|
|
24
|
+
readonly testFiles: readonly string[];
|
|
25
|
+
readonly testExcludes: readonly string[];
|
|
26
|
+
}
|
|
15
27
|
export interface HelpCommandOptions {
|
|
16
28
|
readonly command: "help";
|
|
17
29
|
}
|
|
@@ -33,7 +45,7 @@ export interface CursorHookCommandOptions {
|
|
|
33
45
|
readonly command: "cursor-hook";
|
|
34
46
|
readonly action: CursorHookAction;
|
|
35
47
|
}
|
|
36
|
-
export type CliOptions = AnalyzeCommandOptions | ClaudeHookCommandOptions | CodexHookCommandOptions | CursorHookCommandOptions | HelpCommandOptions | VersionCommandOptions;
|
|
48
|
+
export type CliOptions = AnalyzeCommandOptions | InitCommandOptions | ClaudeHookCommandOptions | CodexHookCommandOptions | CursorHookCommandOptions | HelpCommandOptions | VersionCommandOptions;
|
|
37
49
|
export declare class CliUsageError extends Error {
|
|
38
50
|
constructor(message: string);
|
|
39
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arguments.d.ts","sourceRoot":"","sources":["../../../src/presentation/cli/arguments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,yBAAyB,CAAC;AAEpE,eAAO,MAAM,aAAa,mCAAoC,CAAC;AAE/D,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;CAC7B;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CACnC;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CACnC;AAED,MAAM,MAAM,UAAU,GAClB,qBAAqB,GACrB,wBAAwB,GACxB,uBAAuB,GACvB,wBAAwB,GACxB,kBAAkB,GAClB,qBAAqB,CAAC;AAE1B,qBAAa,aAAc,SAAQ,KAAK;gBACnB,OAAO,EAAE,MAAM;CAInC;AAED,wBAAgB,cAAc,CAC5B,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,gBAAgB,EAAE,MAAM,GACvB,UAAU,
|
|
1
|
+
{"version":3,"file":"arguments.d.ts","sourceRoot":"","sources":["../../../src/presentation/cli/arguments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,MAAM,yBAAyB,CAAC;AAEpE,eAAO,MAAM,aAAa,mCAAoC,CAAC;AAE/D,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;CAC7B;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CACnC;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CACnC;AAED,MAAM,MAAM,UAAU,GAClB,qBAAqB,GACrB,kBAAkB,GAClB,wBAAwB,GACxB,uBAAuB,GACvB,wBAAwB,GACxB,kBAAkB,GAClB,qBAAqB,CAAC;AAE1B,qBAAa,aAAc,SAAQ,KAAK;gBACnB,OAAO,EAAE,MAAM;CAInC;AAED,wBAAgB,cAAc,CAC5B,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,gBAAgB,EAAE,MAAM,GACvB,UAAU,CAuGZ;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAmCjC"}
|
|
@@ -14,6 +14,9 @@ export function parseArguments(arguments_, currentDirectory) {
|
|
|
14
14
|
return { command: "version" };
|
|
15
15
|
}
|
|
16
16
|
const [command, ...options] = arguments_;
|
|
17
|
+
if (command === "init") {
|
|
18
|
+
return parseInitOptions(options, currentDirectory);
|
|
19
|
+
}
|
|
17
20
|
if (command === "claude-hook") {
|
|
18
21
|
const [action] = options;
|
|
19
22
|
if (options.length !== 1 ||
|
|
@@ -104,6 +107,7 @@ export function helpText() {
|
|
|
104
107
|
|
|
105
108
|
Usage:
|
|
106
109
|
intentpatch analyze [options]
|
|
110
|
+
intentpatch init [options] Create .intentpatch.json without overwriting it
|
|
107
111
|
intentpatch claude-hook <capture|analyze|clear> Read Claude Code hook JSON from stdin
|
|
108
112
|
intentpatch codex-hook <capture|analyze|clear> Read Codex hook JSON from stdin
|
|
109
113
|
intentpatch cursor-hook <capture|analyze> Read Cursor hook JSON from stdin
|
|
@@ -122,10 +126,88 @@ Options:
|
|
|
122
126
|
Write the report to a file instead of standard output
|
|
123
127
|
--fail-on <severity>
|
|
124
128
|
Exit with code 1 for findings at or above high, medium, or low
|
|
129
|
+
init --intent <text> Requested change (optional)
|
|
130
|
+
init --include <pattern> Expected path; repeatable (enables scope checks)
|
|
131
|
+
init --allow <pattern> Allowed exception; repeatable
|
|
132
|
+
init --max-files <number> Maximum changed files
|
|
133
|
+
init --max-lines <number> Maximum changed lines
|
|
134
|
+
init --test-source <pattern> Source path requiring a test change; repeatable
|
|
135
|
+
init --test-file <pattern> Test file path; repeatable
|
|
136
|
+
init --test-exclude <pattern> Excluded source path; repeatable
|
|
125
137
|
-v, --version Show the installed IntentPatch version
|
|
126
138
|
-h, --help Show this help
|
|
127
139
|
`;
|
|
128
140
|
}
|
|
141
|
+
function parseInitOptions(options, currentDirectory) {
|
|
142
|
+
let workingDirectory = currentDirectory;
|
|
143
|
+
let intent;
|
|
144
|
+
const include = [];
|
|
145
|
+
const allow = [];
|
|
146
|
+
let maxFiles;
|
|
147
|
+
let maxLines;
|
|
148
|
+
const testSources = [];
|
|
149
|
+
const testFiles = [];
|
|
150
|
+
const testExcludes = [];
|
|
151
|
+
for (let index = 0; index < options.length; index += 1) {
|
|
152
|
+
const option = options[index];
|
|
153
|
+
switch (option) {
|
|
154
|
+
case "--cwd":
|
|
155
|
+
workingDirectory = requireOptionValue(options, ++index, option);
|
|
156
|
+
break;
|
|
157
|
+
case "--intent":
|
|
158
|
+
intent = requireOptionValue(options, ++index, option);
|
|
159
|
+
break;
|
|
160
|
+
case "--include":
|
|
161
|
+
include.push(requireOptionValue(options, ++index, option));
|
|
162
|
+
break;
|
|
163
|
+
case "--allow":
|
|
164
|
+
allow.push(requireOptionValue(options, ++index, option));
|
|
165
|
+
break;
|
|
166
|
+
case "--max-files":
|
|
167
|
+
maxFiles = parseBudget(requireOptionValue(options, ++index, option), option);
|
|
168
|
+
break;
|
|
169
|
+
case "--max-lines":
|
|
170
|
+
maxLines = parseBudget(requireOptionValue(options, ++index, option), option);
|
|
171
|
+
break;
|
|
172
|
+
case "--test-source":
|
|
173
|
+
testSources.push(requireOptionValue(options, ++index, option));
|
|
174
|
+
break;
|
|
175
|
+
case "--test-file":
|
|
176
|
+
testFiles.push(requireOptionValue(options, ++index, option));
|
|
177
|
+
break;
|
|
178
|
+
case "--test-exclude":
|
|
179
|
+
testExcludes.push(requireOptionValue(options, ++index, option));
|
|
180
|
+
break;
|
|
181
|
+
default:
|
|
182
|
+
throw new CliUsageError(`Unknown init option: ${option ?? ""}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if ((testSources.length === 0) !== (testFiles.length === 0)) {
|
|
186
|
+
throw new CliUsageError("--test-source and --test-file must be used together");
|
|
187
|
+
}
|
|
188
|
+
if (testExcludes.length > 0 && testSources.length === 0) {
|
|
189
|
+
throw new CliUsageError("--test-exclude requires --test-source and --test-file");
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
command: "init",
|
|
193
|
+
workingDirectory,
|
|
194
|
+
...(intent === undefined ? {} : { intent }),
|
|
195
|
+
include,
|
|
196
|
+
allow,
|
|
197
|
+
...(maxFiles === undefined ? {} : { maxFiles }),
|
|
198
|
+
...(maxLines === undefined ? {} : { maxLines }),
|
|
199
|
+
testSources,
|
|
200
|
+
testFiles,
|
|
201
|
+
testExcludes,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
function parseBudget(value, option) {
|
|
205
|
+
const number = Number(value);
|
|
206
|
+
if (!/^(0|[1-9]\d*)$/u.test(value) || !Number.isSafeInteger(number)) {
|
|
207
|
+
throw new CliUsageError(`${option} must be a non-negative integer`);
|
|
208
|
+
}
|
|
209
|
+
return number;
|
|
210
|
+
}
|
|
129
211
|
function parseOutputFormat(value) {
|
|
130
212
|
if (outputFormats.some((format) => format === value)) {
|
|
131
213
|
return value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arguments.js","sourceRoot":"","sources":["../../../src/presentation/cli/arguments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEpE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"arguments.js","sourceRoot":"","sources":["../../../src/presentation/cli/arguments.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { readFile } from "node:fs/promises";
|
|
3
3
|
import process from "node:process";
|
|
4
|
+
import { createChangeContract } from "../../domain/change-contract.js";
|
|
4
5
|
import { TextIntentLoader } from "../../infrastructure/config/text-intent-loader.js";
|
|
6
|
+
import { writeChangeContract } from "../../infrastructure/config/write-change-contract.js";
|
|
5
7
|
import { GitPrivateAgentIntentStore } from "../../infrastructure/git/git-private-agent-intent-store.js";
|
|
6
8
|
import { GitPrivateAgentReportWriter } from "../../infrastructure/git/git-private-agent-report-writer.js";
|
|
7
9
|
import { CommandExecutionError } from "../../infrastructure/process/command-runner.js";
|
|
@@ -26,6 +28,38 @@ async function main() {
|
|
|
26
28
|
process.stdout.write(`IntentPatch ${await readPackageVersion()}\n`);
|
|
27
29
|
return;
|
|
28
30
|
}
|
|
31
|
+
if (options.command === "init") {
|
|
32
|
+
let contract;
|
|
33
|
+
try {
|
|
34
|
+
contract = createChangeContract({
|
|
35
|
+
...(options.intent === undefined ? {} : { intent: options.intent }),
|
|
36
|
+
scope: {
|
|
37
|
+
include: options.include,
|
|
38
|
+
allow: options.allow,
|
|
39
|
+
...(options.maxFiles === undefined ? {} : { maxFiles: options.maxFiles }),
|
|
40
|
+
...(options.maxLines === undefined ? {} : { maxLines: options.maxLines }),
|
|
41
|
+
},
|
|
42
|
+
...(options.testSources.length === 0
|
|
43
|
+
? {}
|
|
44
|
+
: {
|
|
45
|
+
tests: {
|
|
46
|
+
requireFor: options.testSources,
|
|
47
|
+
include: options.testFiles,
|
|
48
|
+
exclude: options.testExcludes,
|
|
49
|
+
},
|
|
50
|
+
}),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
throw new CliUsageError(error instanceof Error ? error.message : String(error));
|
|
55
|
+
}
|
|
56
|
+
const path = await writeChangeContract(options.workingDirectory, contract);
|
|
57
|
+
process.stdout.write(`IntentPatch change contract created at ${path}\n`);
|
|
58
|
+
if (contract.scope.include.length === 0) {
|
|
59
|
+
process.stdout.write("Scope checks are off until scope.include has an expected path.\n");
|
|
60
|
+
}
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
29
63
|
if (options.command === "claude-hook") {
|
|
30
64
|
const output = await runClaudeHook(options.action, await readClaudeHookInput(process.stdin), {
|
|
31
65
|
store: new GitPrivateAgentIntentStore(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/presentation/cli/main.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/presentation/cli/main.ts"],"names":[],"mappings":"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"}
|