intentpatch 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.ko.md +16 -11
  2. package/README.md +13 -8
  3. package/dist/application/use-cases/analyze-agent-turn.d.ts +20 -0
  4. package/dist/application/use-cases/analyze-agent-turn.d.ts.map +1 -0
  5. package/dist/application/use-cases/analyze-agent-turn.js +28 -0
  6. package/dist/application/use-cases/analyze-agent-turn.js.map +1 -0
  7. package/dist/infrastructure/git/git-private-agent-intent-store.js +7 -7
  8. package/dist/infrastructure/git/git-private-agent-intent-store.js.map +1 -1
  9. package/dist/infrastructure/git/git-private-agent-report-writer.d.ts +8 -0
  10. package/dist/infrastructure/git/git-private-agent-report-writer.d.ts.map +1 -0
  11. package/dist/infrastructure/git/git-private-agent-report-writer.js +45 -0
  12. package/dist/infrastructure/git/git-private-agent-report-writer.js.map +1 -0
  13. package/dist/infrastructure/typescript/typescript-function-signature-compatibility.d.ts.map +1 -1
  14. package/dist/infrastructure/typescript/typescript-function-signature-compatibility.js +47 -3
  15. package/dist/infrastructure/typescript/typescript-function-signature-compatibility.js.map +1 -1
  16. package/dist/presentation/agent-hook/input.d.ts +3 -0
  17. package/dist/presentation/agent-hook/input.d.ts.map +1 -0
  18. package/dist/presentation/agent-hook/input.js +20 -0
  19. package/dist/presentation/agent-hook/input.js.map +1 -0
  20. package/dist/presentation/agent-hook/summary.d.ts +4 -0
  21. package/dist/presentation/agent-hook/summary.d.ts.map +1 -0
  22. package/dist/presentation/agent-hook/summary.js +8 -0
  23. package/dist/presentation/agent-hook/summary.js.map +1 -0
  24. package/dist/presentation/claude-code/hook.d.ts +2 -7
  25. package/dist/presentation/claude-code/hook.d.ts.map +1 -1
  26. package/dist/presentation/claude-code/hook.js +12 -38
  27. package/dist/presentation/claude-code/hook.js.map +1 -1
  28. package/dist/presentation/cli/arguments.d.ts +11 -1
  29. package/dist/presentation/cli/arguments.d.ts.map +1 -1
  30. package/dist/presentation/cli/arguments.js +17 -0
  31. package/dist/presentation/cli/arguments.js.map +1 -1
  32. package/dist/presentation/cli/main.js +25 -0
  33. package/dist/presentation/cli/main.js.map +1 -1
  34. package/dist/presentation/codex/hook.d.ts +5 -0
  35. package/dist/presentation/codex/hook.d.ts.map +1 -0
  36. package/dist/presentation/codex/hook.js +62 -0
  37. package/dist/presentation/codex/hook.js.map +1 -0
  38. package/dist/presentation/cursor/hook.d.ts +12 -0
  39. package/dist/presentation/cursor/hook.d.ts.map +1 -0
  40. package/dist/presentation/cursor/hook.js +69 -0
  41. package/dist/presentation/cursor/hook.js.map +1 -0
  42. package/package.json +1 -1
package/README.ko.md CHANGED
@@ -21,7 +21,7 @@ LLM 없이도 재현 가능한 분석을 제공하고, AI 설명 기능은 선
21
21
 
22
22
  ## 빠른 시작
23
23
 
24
- Node.js 20 이상과 Git이 설치되어 있어야 합니다. npm에 공개된 v0.6.0은 전역 설치 없이
24
+ Node.js 20 이상과 Git이 설치되어 있어야 합니다. npm에 공개된 v0.7.0은 전역 설치 없이
25
25
  실행할 수 있습니다.
26
26
 
27
27
  ```bash
@@ -67,7 +67,7 @@ jobs:
67
67
 
68
68
  - name: Analyze pull request
69
69
  id: intentpatch
70
- uses: xx2xxjaeil/intent-patch@v0.6.0
70
+ uses: xx2xxjaeil/intent-patch@v0.7.0
71
71
  with:
72
72
  fail-on: high
73
73
 
@@ -79,8 +79,8 @@ jobs:
79
79
  path: intentpatch-report
80
80
  ```
81
81
 
82
- Action은 릴리스 버전이나 불변 commit SHA로 고정하는 방식을 권장합니다. v0.6.0에는
83
- 패키지 진입점 기준 공개 API 경고, 삭제된 모듈의 이전 import 영향 분석, 선택적 Claude Code
82
+ Action은 릴리스 버전이나 불변 commit SHA로 고정하는 방식을 권장합니다. v0.7.0에는
83
+ 패키지 진입점 기준 공개 API 경고, 삭제된 모듈의 이전 import 영향 분석, 선택적 Claude Code·Codex·Cursor
84
84
  Hook이 포함됩니다. 공개 API 규칙의 별도 외부 평가 결과와 한계는
85
85
  [평가 보고서](./docs/external-repository-evaluation.md)에 기록했습니다. `@main`은 미릴리스 변경을 따라갑니다.
86
86
  Action은 PR·push 이벤트의 commit 범위를 자동으로 선택하고 다음 결과를 남깁니다.
@@ -98,6 +98,10 @@ Action은 PR·push 이벤트의 commit 범위를 자동으로 선택하고 다
98
98
 
99
99
  선택적으로 Hook을 연결하면 한 턴의 원래 요청과 시작 commit을 보관하고, Claude Code가 응답을 마칠 때 변경 파일·finding 개수를 짧게 보여줍니다. 요청문을 외부 서비스로 보내지 않습니다. 설치 방법, 설정 예시, 로컬 임시 저장의 보안상 주의점은 [설정 문서](https://github.com/xx2xxjaeil/intent-patch/blob/main/docs/claude-code.md)를 참고하세요.
100
100
 
101
+ ## Codex·Cursor Hook
102
+
103
+ v0.7.0부터 선택형 [Codex](./docs/codex.md)·[Cursor](./docs/cursor.md) 턴 분석을 사용할 수 있습니다. 동일한 결정론적 분석기를 사용하며 API 키나 유료 모델은 필요하지 않습니다. Codex는 Hook에 개수만 요약하고, Cursor는 Git 메타데이터에 비공개 HTML 보고서를 저장한 뒤 경로를 로그로 남깁니다. Cursor에 새 AI 요청을 자동 제출하지 않습니다.
104
+
101
105
  ## 프로젝트가 지향하는 결과
102
106
 
103
107
  ```text
@@ -135,7 +139,7 @@ LOW 구현체가 하나뿐인 추상화 추가
135
139
 
136
140
  실제 커밋을 분석한 [독립 실행형 HTML 예시](./docs/examples/intent-input-change.html),
137
141
  [자체 저장소 변경 3건의 사례 연구](./docs/real-world-evaluation.md),
138
- [외부 저장소 변경 20건·규칙별 판정 23건의 평가 결과](./docs/external-repository-evaluation.md)를 볼 수 있습니다. 저장소를 clone한
142
+ [외부 저장소 변경 26건·규칙별 판정 29건의 평가 결과](./docs/external-repository-evaluation.md)를 볼 수 있습니다. 저장소를 clone한
139
143
  뒤 HTML 파일을 브라우저에서 열어 주세요. GitHub 파일 화면은 렌더링 대신 소스를 보여줄 수
140
144
  있습니다.
141
145
 
@@ -416,7 +420,7 @@ npm run check
416
420
  - 생성한 npm tarball을 임시 프로젝트에 설치하고 실행하는 패키지 통합 테스트
417
421
  - 계층 간 의존 방향을 검증하는 아키텍처 테스트
418
422
 
419
- 외부 저장소의 실제 변경 20건에서 공개 API 규칙 4개의 경고를 사람이 검토한 기대 결과와 비교하는
423
+ 외부 저장소의 실제 변경 26건에서 공개 API 규칙 4개의 경고를 사람이 검토한 기대 결과와 비교하는
420
424
  방법은 [외부 저장소 평가 문서](./docs/external-repository-evaluation.md)에 정리했습니다.
421
425
 
422
426
  프로덕션 빌드만 확인하려면 다음 명령을 사용합니다.
@@ -433,7 +437,7 @@ npm pack --dry-run
433
437
 
434
438
  ## 릴리스
435
439
 
436
- `v0.6.0`처럼 `package.json` 버전과 일치하는 태그를 기본 브랜치의 커밋에 push하면 릴리스
440
+ `v0.7.0`처럼 `package.json` 버전과 일치하는 태그를 기본 브랜치의 커밋에 push하면 릴리스
437
441
  워크플로가 다음 작업을 순서대로 수행합니다.
438
442
 
439
443
  1. 태그·버전·기본 브랜치 포함 여부 검증
@@ -470,7 +474,7 @@ npm provenance가 자동 생성됩니다. 아직 npm에 존재하지 않는 신
470
474
  12. 요청 입력과 에이전트 adapter
471
475
  - ✅ CLI 요청 문서와 선택적 GitHub PR 본문 입력
472
476
  - ✅ 선택적 Claude Code Hook
473
- - Codex·Cursor 전용 adapter
477
+ - ✅ 선택적 Codex·Cursor 전용 adapter (v0.7.0)
474
478
  13. 근거 기반 결과에 대한 선택적 LLM 설명
475
479
 
476
480
  ## 현재 제한사항
@@ -512,9 +516,10 @@ npm provenance가 자동 생성됩니다. 아직 npm에 존재하지 않는 신
512
516
  완전한 타입 할당 가능성은 해석하지 않습니다. 지원하지
513
517
  않는 타입 별칭 형태에서는 구성원 삭제 finding을 내지 않습니다.
514
518
  - 함수 호환성은 먼저 기록된 시그니처를 비교하고, 외부 참조 없이 해석할 수 있는 명시적 타입은
515
- TypeScript의 엄격한 할당 가능성 검사로 기존 호출 유지 여부를 확인합니다. 미해결 타입 이름,
516
- 추론된 타입, 파싱할 수 없는 시그니처는 확인 불가로 남겨 검토 경고를 유지합니다. 전체 프로젝트의
517
- 타입 검사나 런타임 호환성 보증은 아닙니다.
519
+ TypeScript의 엄격한 할당 가능성 검사로 기존 호출 유지 여부를 확인합니다. 반환형 표기가
520
+ 그대로인 기본형 인자가 합집합 타입으로 확장된 경우는 제한적인 구문 검사로도 확인합니다.
521
+ 그 밖의 미해결 타입 이름, 추론된 타입, 파싱할 수 없는 시그니처는 확인 불가로 남겨 검토
522
+ 경고를 유지합니다. 전체 프로젝트의 타입 검사나 런타임 호환성 보증은 아닙니다.
518
523
  - 중복 구현 후보는 새로 추가된 최상위 함수와 기존 최상위 함수의 토큰이 공백·주석을 제외하고
519
524
  완전히 같으며 본문이 12토큰 이상일 때만 보고합니다. 식별자 이름이 바뀐 유사 코드, 메서드,
520
525
  의미적으로만 같은 구현은 탐지하지 않습니다.
package/README.md CHANGED
@@ -18,7 +18,7 @@ IntentPatch combines **Git diff analysis, static analysis, and dependency analys
18
18
 
19
19
  ## Quick start
20
20
 
21
- IntentPatch requires Node.js 20 or later and Git. Run the published v0.6.0 CLI without
21
+ IntentPatch requires Node.js 20 or later and Git. Run the published v0.7.0 CLI without
22
22
  installing it globally:
23
23
 
24
24
  ```bash
@@ -62,7 +62,7 @@ jobs:
62
62
 
63
63
  - name: Analyze pull request
64
64
  id: intentpatch
65
- uses: xx2xxjaeil/intent-patch@v0.6.0
65
+ uses: xx2xxjaeil/intent-patch@v0.7.0
66
66
  with:
67
67
  fail-on: high
68
68
 
@@ -74,8 +74,9 @@ jobs:
74
74
  path: intentpatch-report
75
75
  ```
76
76
 
77
- Pin the action to a released version or an immutable commit SHA. v0.6.0 adds package-entrypoint-aware
78
- public API warnings, historical import impact for deleted modules, and the opt-in Claude Code Hook.
77
+ Pin the action to a released version or an immutable commit SHA. v0.7.0 includes
78
+ package-entrypoint-aware public API warnings, historical import impact for deleted modules,
79
+ and opt-in Claude Code, Codex, and Cursor Hooks.
79
80
  See [the evaluation report](./docs/external-repository-evaluation.md) for the separately measured
80
81
  public-API rules and their limits. `@main` follows unreleased changes.
81
82
 
@@ -93,6 +94,10 @@ See the [GitHub Action guide](./docs/github-action.md) for inputs, outputs, and
93
94
 
94
95
  An opt-in Hook adapter captures a turn's original prompt and starting commit, then shows a small change/finding summary when Claude Code stops. It does not send the prompt to an external service. See the [setup guide](https://github.com/xx2xxjaeil/intent-patch/blob/main/docs/claude-code.md) for installation, the Hook configuration example, and local-state security notes.
95
96
 
97
+ ## Codex and Cursor Hooks
98
+
99
+ Version 0.7.0 adds opt-in turn analysis for [Codex](./docs/codex.md) and [Cursor](./docs/cursor.md). These adapters use the same deterministic analyzer and require no API key or paid model. Codex returns a count-only Hook message. Cursor writes a private HTML report under Git metadata and logs its path without auto-submitting another AI prompt.
100
+
96
101
  ## What the report looks like
97
102
 
98
103
  ```text
@@ -130,7 +135,7 @@ Every finding includes the relevant file, a stable rule ID, and evidence for the
130
135
  For reports generated from actual commits, see the
131
136
  [standalone HTML example](./docs/examples/intent-input-change.html), the
132
137
  [three-case self-repository study](./docs/real-world-evaluation.md), and the
133
- [external evaluation of 20 changes and 23 rule checks](./docs/external-repository-evaluation.md). After cloning,
138
+ [external evaluation of 26 changes and 29 rule checks](./docs/external-repository-evaluation.md). After cloning,
134
139
  open the HTML file locally in a browser; GitHub may show its source rather than render it.
135
140
 
136
141
  ## Implemented capabilities
@@ -422,7 +427,7 @@ npm pack --dry-run
422
427
 
423
428
  ## Release process
424
429
 
425
- Pushing a tag such as `v0.6.0`, matching the version in `package.json`, from a commit contained in the default branch triggers the release workflow:
430
+ Pushing a tag such as `v0.7.0`, matching the version in `package.json`, from a commit contained in the default branch triggers the release workflow:
426
431
 
427
432
  1. Validate the tag, package version, and default-branch ancestry.
428
433
  2. Run the full quality suite and inspect the npm package with a dry run.
@@ -455,7 +460,7 @@ No long-lived npm token is stored as a GitHub secret. Public packages published
455
460
  12. Request capture and agent adapters
456
461
  - ✅ CLI request file and opt-in GitHub PR body
457
462
  - ✅ Opt-in Claude Code Hook
458
- - Codex and Cursor-specific adapters
463
+ - ✅ Opt-in Codex and Cursor-specific adapters (v0.7.0)
459
464
  13. Optional LLM explanations grounded in deterministic evidence
460
465
 
461
466
  ## Current limitations
@@ -473,7 +478,7 @@ No long-lived npm token is stored as a GitHub secret. Public packages published
473
478
  - Working-tree `package-lock.json` and `pnpm-lock.yaml` files are limited to 10 MiB; other text snapshots retain the 1 MiB limit.
474
479
  - TypeScript symbol analysis supports named top-level functions, classes, interfaces, and type aliases in `.ts` and `.tsx` files. JavaScript symbol analysis supports named top-level functions, classes, variables, and identifiable ESM exports in `.js`, `.jsx`, `.mjs`, and `.cjs` files.
475
480
  - TypeScript public API analysis supports named top-level functions and interfaces, plus member removal from exported object type aliases composed of type literals and same-file, non-generic aliases/intersections. Local `export { name }`, external `export { name } from`, and `export * from` are tracked as export evidence. JavaScript supports identifiable named and default ESM export removal, but does not infer function signatures. Previous root or nested package `exports` are followed through explicit source targets and relative re-exports. This is a file-level approximation: a named re-export may still expose only some symbols from its module. If an entrypoint is generated, unresolved, or unsupported, IntentPatch retains the earlier conservative warnings instead of claiming a file is private. CommonJS `module.exports`, class contracts, generic alias instantiation, unions, cross-file type references, and full type assignability are not interpreted yet. Unsupported type-alias shapes do not produce member-removal findings.
476
- - Function compatibility first compares recorded signatures. For self-contained, explicitly typed declarations it then uses strict TypeScript assignability to avoid warning on compatible changes. Unresolved names, inferred types, malformed or unsupported signature shapes remain unverified and keep the review warning; this is not a whole-project type check or a runtime compatibility guarantee.
481
+ - Function compatibility first compares recorded signatures. For self-contained, explicitly typed declarations it then uses strict TypeScript assignability to avoid warning on compatible changes. A narrow syntactic check also accepts primitive parameters widened by union arms when the return text is unchanged. Other unresolved names, inferred types, malformed or unsupported signature shapes remain unverified and keep the review warning; this is not a whole-project type check or a runtime compatibility guarantee.
477
482
  - Duplicate candidates require a newly added top-level function and an existing top-level function to have exactly the same normalized tokens after comments and whitespace are removed, with at least 12 body tokens. Renamed identifiers, methods, and semantically equivalent implementations are not detected.
478
483
  - A single-implementation abstraction is reported only when exactly one named class explicitly uses `implements` for a new interface. Structural implementation, factory return types, and runtime registration are not calculated.
479
484
  - Methods, TypeScript variable declarations, enums, and nested declarations are not included in symbol analysis.
@@ -0,0 +1,20 @@
1
+ import type { ChangeReport } from "../../domain/report.js";
2
+ import type { AgentIntentSessionStore } from "../ports/agent-intent-session-store.js";
3
+ export interface AgentTurnAnalysisRequest {
4
+ readonly workingDirectory: string;
5
+ readonly baseRef: string;
6
+ readonly intentOverride: string;
7
+ }
8
+ export interface AgentTurnDependencies {
9
+ readonly store: AgentIntentSessionStore;
10
+ readonly analyze: (request: AgentTurnAnalysisRequest) => Promise<ChangeReport>;
11
+ }
12
+ /** 에이전트별 이벤트 형식과 무관하게 요청 보관·Git 비교를 한 흐름으로 묶는다. */
13
+ export declare class AnalyzeAgentTurn {
14
+ private readonly dependencies;
15
+ constructor(dependencies: AgentTurnDependencies);
16
+ capture(key: string, cwd: string, prompt: string): Promise<void>;
17
+ analyze(key: string, cwd: string): Promise<ChangeReport | undefined>;
18
+ clear(key: string, cwd: string): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=analyze-agent-turn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-agent-turn.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/analyze-agent-turn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAItF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CAChF;AAED,mDAAmD;AACnD,qBAAa,gBAAgB;IACR,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,qBAAqB;IAE1D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAUpE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG5D"}
@@ -0,0 +1,28 @@
1
+ const maximumPromptBytes = 64 * 1024;
2
+ /** 에이전트별 이벤트 형식과 무관하게 요청 보관·Git 비교를 한 흐름으로 묶는다. */
3
+ export class AnalyzeAgentTurn {
4
+ dependencies;
5
+ constructor(dependencies) {
6
+ this.dependencies = dependencies;
7
+ }
8
+ async capture(key, cwd, prompt) {
9
+ if (prompt.trim().length === 0 || Buffer.byteLength(prompt, "utf8") > maximumPromptBytes) {
10
+ throw new Error("Agent hook prompt must be nonempty and at most 64 KiB");
11
+ }
12
+ await this.dependencies.store.capture(key, cwd, prompt);
13
+ }
14
+ async analyze(key, cwd) {
15
+ const captured = await this.dependencies.store.take(key, cwd);
16
+ if (captured === undefined)
17
+ return undefined;
18
+ return this.dependencies.analyze({
19
+ workingDirectory: cwd,
20
+ baseRef: captured.baseRef,
21
+ intentOverride: captured.intent,
22
+ });
23
+ }
24
+ async clear(key, cwd) {
25
+ await this.dependencies.store.clear(key, cwd);
26
+ }
27
+ }
28
+ //# sourceMappingURL=analyze-agent-turn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-agent-turn.js","sourceRoot":"","sources":["../../../src/application/use-cases/analyze-agent-turn.ts"],"names":[],"mappings":"AAGA,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC;AAarC,mDAAmD;AACnD,MAAM,OAAO,gBAAgB;IACS;IAApC,YAAoC,YAAmC;QAAnC,iBAAY,GAAZ,YAAY,CAAuB;IAAG,CAAC;IAEpE,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,GAAW,EAAE,MAAc;QAC3D,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,kBAAkB,EAAE,CAAC;YACzF,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,GAAW;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9D,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC7C,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAC/B,gBAAgB,EAAE,GAAG;YACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,cAAc,EAAE,QAAQ,CAAC,MAAM;SAChC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,GAAW;QACzC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;CACF"}
@@ -17,7 +17,7 @@ export class GitPrivateAgentIntentStore {
17
17
  cwd: workingDirectory,
18
18
  })).trim();
19
19
  if (!/^[0-9a-f]{40,64}$/u.test(baseRef)) {
20
- throw new Error("Claude Code hook requires a repository with an existing HEAD commit");
20
+ throw new Error("Agent hook requires a repository with an existing HEAD commit");
21
21
  }
22
22
  const temporaryPath = `${statePath}.${randomUUID()}.tmp`;
23
23
  try {
@@ -45,20 +45,20 @@ export class GitPrivateAgentIntentStore {
45
45
  }
46
46
  try {
47
47
  if (!metadata.isFile() || metadata.isSymbolicLink() || metadata.size > maximumSnapshotBytes) {
48
- throw new Error("Claude Code hook state is not a bounded regular file");
48
+ throw new Error("Agent hook state is not a bounded regular file");
49
49
  }
50
50
  if (process.platform !== "win32" && (metadata.mode & 0o077) !== 0) {
51
- throw new Error("Claude Code hook state is not private to its owner");
51
+ throw new Error("Agent hook state is not private to its owner");
52
52
  }
53
53
  let value;
54
54
  try {
55
55
  value = JSON.parse(await readFile(statePath, "utf8"));
56
56
  }
57
57
  catch {
58
- throw new Error("Claude Code hook state is invalid JSON");
58
+ throw new Error("Agent hook state is invalid JSON");
59
59
  }
60
60
  if (!isCapturedIntent(value) || value.repositoryRoot !== repositoryRoot) {
61
- throw new Error("Claude Code hook state does not match this repository");
61
+ throw new Error("Agent hook state does not match this repository");
62
62
  }
63
63
  return { intent: value.intent, baseRef: value.baseRef };
64
64
  }
@@ -89,10 +89,10 @@ export class GitPrivateAgentIntentStore {
89
89
  await mkdir(privateDirectory, { mode: 0o700, recursive: true });
90
90
  const metadata = await lstat(privateDirectory);
91
91
  if (!metadata.isDirectory() || metadata.isSymbolicLink()) {
92
- throw new Error("Claude Code hook state directory is not a regular directory");
92
+ throw new Error("Agent hook state directory is not a regular directory");
93
93
  }
94
94
  if (process.platform !== "win32" && (metadata.mode & 0o077) !== 0) {
95
- throw new Error("Claude Code hook state directory is not private to its owner");
95
+ throw new Error("Agent hook state directory is not private to its owner");
96
96
  }
97
97
  const name = createHash("sha256").update(sessionId).digest("hex");
98
98
  return { statePath: join(privateDirectory, `${name}.json`), repositoryRoot };
@@ -1 +1 @@
1
- {"version":3,"file":"git-private-agent-intent-store.js","sourceRoot":"","sources":["../../../src/infrastructure/git/git-private-agent-intent-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-private-agent-intent-store.js","sourceRoot":"","sources":["../../../src/infrastructure/git/git-private-agent-intent-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKjC,OAAO,EAAsB,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAErF,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvC,6CAA6C;AAC7C,MAAM,OAAO,0BAA0B;IACD;IAApC,YAAoC,WAA0B,IAAI,iBAAiB,EAAE;QAAjD,aAAQ,GAAR,QAAQ,CAAyC;IAAG,CAAC;IAElF,KAAK,CAAC,OAAO,CAAC,SAAiB,EAAE,gBAAwB,EAAE,MAAc;QAC9E,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,CACd,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YACtB,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;YAChC,GAAG,EAAE,gBAAgB;SACtB,CAAC,CACH,CAAC,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,aAAa,GAAG,GAAG,SAAS,IAAI,UAAU,EAAE,MAAM,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE;gBAClF,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YACH,MAAM,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CACf,SAAiB,EACjB,gBAAwB;QAExB,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACvF,IAAI,QAA2C,CAAC;QAChD,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC;YACvC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,QAAQ,CAAC,cAAc,EAAE,IAAI,QAAQ,CAAC,IAAI,GAAG,oBAAoB,EAAE,CAAC;gBAC5F,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClE,CAAC;YACD,IAAI,KAAc,CAAC;YACnB,IAAI,CAAC;gBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAY,CAAC;YACnE,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,CAAC;YACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,cAAc,KAAK,cAAc,EAAE,CAAC;gBACxE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1D,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,SAAiB,EAAE,gBAAwB;QAC5D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACvE,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,QAAQ,CACpB,SAAiB,EACjB,gBAAwB;QAExB,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAChB,UAAU,EAAE,KAAK;gBACjB,SAAS,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC;gBAC3C,GAAG,EAAE,gBAAgB;aACtB,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAChB,UAAU,EAAE,KAAK;gBACjB,SAAS,EAAE,CAAC,WAAW,EAAE,oBAAoB,CAAC;gBAC9C,GAAG,EAAE,gBAAgB;aACtB,CAAC;SACH,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;QACjE,MAAM,KAAK,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/E,CAAC;CACF;AAED,SAAS,gBAAgB,CACvB,KAAc;IAEd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,gBAAgB,IAAI,KAAK;QACzB,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;QACxC,SAAS,IAAI,KAAK;QAClB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QACxC,QAAQ,IAAI,KAAK;QACjB,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAChC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CACxB,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AACnG,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAAE,MAAM,KAAK,CAAC;AACrC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type CommandRunner } from "../process/command-runner.js";
2
+ /** 민감한 요청문이 들어갈 수 있는 HTML을 작업 트리 밖의 Git 메타데이터에 보관한다. */
3
+ export declare class GitPrivateAgentReportWriter {
4
+ private readonly commands;
5
+ constructor(commands?: CommandRunner);
6
+ write(key: string, workingDirectory: string, content: string): Promise<string>;
7
+ }
8
+ //# sourceMappingURL=git-private-agent-report-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-private-agent-report-writer.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/git/git-private-agent-report-writer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,8BAA8B,CAAC;AAErF,wDAAwD;AACxD,qBAAa,2BAA2B;IACnB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,GAAE,aAAuC;IAExE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAiC5F"}
@@ -0,0 +1,45 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { lstat, mkdir, realpath, rename, unlink, writeFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { NodeCommandRunner } from "../process/command-runner.js";
5
+ /** 민감한 요청문이 들어갈 수 있는 HTML을 작업 트리 밖의 Git 메타데이터에 보관한다. */
6
+ export class GitPrivateAgentReportWriter {
7
+ commands;
8
+ constructor(commands = new NodeCommandRunner()) {
9
+ this.commands = commands;
10
+ }
11
+ async write(key, workingDirectory, content) {
12
+ const gitDirectory = await realpath((await this.commands.run({
13
+ executable: "git",
14
+ arguments: ["rev-parse", "--absolute-git-dir"],
15
+ cwd: workingDirectory,
16
+ })).trim());
17
+ const directory = join(gitDirectory, "intentpatch-reports");
18
+ await mkdir(directory, { recursive: true, mode: 0o700 });
19
+ const metadata = await lstat(directory);
20
+ if (!metadata.isDirectory() || metadata.isSymbolicLink()) {
21
+ throw new Error("Agent report directory is not a regular directory");
22
+ }
23
+ if (process.platform !== "win32" && (metadata.mode & 0o077) !== 0) {
24
+ throw new Error("Agent report directory is not private to its owner");
25
+ }
26
+ const name = createHash("sha256").update(key).digest("hex");
27
+ const destination = join(directory, `${name}.html`);
28
+ const temporary = join(directory, `${name}.${randomUUID()}.tmp`);
29
+ try {
30
+ await writeFile(temporary, content, { encoding: "utf8", flag: "wx", mode: 0o600 });
31
+ await rename(temporary, destination);
32
+ }
33
+ finally {
34
+ await unlink(temporary).catch((error) => {
35
+ if (!isMissing(error))
36
+ throw error;
37
+ });
38
+ }
39
+ return destination;
40
+ }
41
+ }
42
+ function isMissing(error) {
43
+ return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
44
+ }
45
+ //# sourceMappingURL=git-private-agent-report-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-private-agent-report-writer.js","sourceRoot":"","sources":["../../../src/infrastructure/git/git-private-agent-report-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAsB,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAErF,wDAAwD;AACxD,MAAM,OAAO,2BAA2B;IACF;IAApC,YAAoC,WAA0B,IAAI,iBAAiB,EAAE;QAAjD,aAAQ,GAAR,QAAQ,CAAyC;IAAG,CAAC;IAElF,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,gBAAwB,EAAE,OAAe;QACvE,MAAM,YAAY,GAAG,MAAM,QAAQ,CACjC,CACE,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YACtB,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,CAAC,WAAW,EAAE,oBAAoB,CAAC;YAC9C,GAAG,EAAE,gBAAgB;SACtB,CAAC,CACH,CAAC,IAAI,EAAE,CACT,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,IAAI,UAAU,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACnF,MAAM,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACvC,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;gBAC/C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;oBAAE,MAAM,KAAK,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AACnG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"typescript-function-signature-compatibility.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/typescript/typescript-function-signature-compatibility.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,6DAA6D,CAAC;AAIlH,kGAAkG;AAClG,qBAAa,wCAAyC,YAAW,8BAA8B;IACtF,sBAAsB,CAC3B,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,OAAO,GAAG,SAAS;CAiDvB"}
1
+ {"version":3,"file":"typescript-function-signature-compatibility.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/typescript/typescript-function-signature-compatibility.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,6DAA6D,CAAC;AAWlH,kGAAkG;AAClG,qBAAa,wCAAyC,YAAW,8BAA8B;IACtF,sBAAsB,CAC3B,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,OAAO,GAAG,SAAS;CAkDvB"}
@@ -1,5 +1,12 @@
1
1
  import ts from "typescript";
2
2
  const comparisonPath = "/__intentpatch_function_signatures__.ts";
3
+ const primitiveParameterTypes = new Set([
4
+ ts.SyntaxKind.StringKeyword,
5
+ ts.SyntaxKind.NumberKeyword,
6
+ ts.SyntaxKind.BooleanKeyword,
7
+ ts.SyntaxKind.BigIntKeyword,
8
+ ts.SyntaxKind.SymbolKeyword,
9
+ ]);
3
10
  /** Uses TypeScript assignability only when both self-contained signature types can be checked. */
4
11
  export class TypeScriptFunctionSignatureCompatibility {
5
12
  preservesPreviousCalls(previous, current) {
@@ -24,10 +31,15 @@ export class TypeScriptFunctionSignatureCompatibility {
24
31
  ? sourceFile
25
32
  : getSourceFile(path, languageVersion, onError, shouldCreateNewSourceFile);
26
33
  const program = ts.createProgram([comparisonPath], options, host);
27
- if (program.getSyntacticDiagnostics(sourceFile).length > 0 ||
28
- program.getSemanticDiagnostics(sourceFile).length > 0) {
34
+ if (program.getSyntacticDiagnostics(sourceFile).length > 0)
35
+ return undefined;
36
+ // A new union arm cannot invalidate calls that supplied the old primitive type.
37
+ // This narrow proof also works when unchanged return names or new union arms are
38
+ // declared outside the isolated comparison program.
39
+ if (preservesPrimitiveParameterCalls(sourceFile))
40
+ return true;
41
+ if (program.getSemanticDiagnostics(sourceFile).length > 0)
29
42
  return undefined;
30
- }
31
43
  const checker = program.getTypeChecker();
32
44
  const declarations = sourceFile.statements.filter(ts.isInterfaceDeclaration);
33
45
  const previousSymbol = declarations[0] && checker.getSymbolAtLocation(declarations[0].name);
@@ -37,6 +49,38 @@ export class TypeScriptFunctionSignatureCompatibility {
37
49
  return checker.isTypeAssignableTo(checker.getDeclaredTypeOfSymbol(currentSymbol), checker.getDeclaredTypeOfSymbol(previousSymbol));
38
50
  }
39
51
  }
52
+ function preservesPrimitiveParameterCalls(sourceFile) {
53
+ const declarations = sourceFile.statements.filter(ts.isInterfaceDeclaration);
54
+ const previousCalls = declarations[0]?.members.filter(ts.isCallSignatureDeclaration) ?? [];
55
+ const currentCalls = declarations[1]?.members.filter(ts.isCallSignatureDeclaration) ?? [];
56
+ return (previousCalls.length > 0 &&
57
+ previousCalls.every((previous) => currentCalls.some((current) => preservesPrimitiveCall(previous, current, sourceFile))));
58
+ }
59
+ function preservesPrimitiveCall(previous, current, sourceFile) {
60
+ if (previous.typeParameters?.length ||
61
+ current.typeParameters?.length ||
62
+ previous.parameters.length !== current.parameters.length ||
63
+ previous.parameters.length === 0 ||
64
+ previous.type?.getText(sourceFile) !== current.type?.getText(sourceFile)) {
65
+ return false;
66
+ }
67
+ return previous.parameters.every((parameter, index) => {
68
+ const currentParameter = current.parameters[index];
69
+ const previousType = parameter.type;
70
+ const currentType = currentParameter?.type;
71
+ if (currentParameter === undefined ||
72
+ previousType === undefined ||
73
+ currentType === undefined ||
74
+ !primitiveParameterTypes.has(previousType.kind) ||
75
+ Boolean(parameter.questionToken) !== Boolean(currentParameter.questionToken) ||
76
+ Boolean(parameter.dotDotDotToken) !== Boolean(currentParameter.dotDotDotToken)) {
77
+ return false;
78
+ }
79
+ return (currentType.kind === previousType.kind ||
80
+ (ts.isUnionTypeNode(currentType) &&
81
+ currentType.types.some((type) => type.kind === previousType.kind)));
82
+ });
83
+ }
40
84
  /** Convert the extractor's name-free display signature into a call signature for the checker. */
41
85
  function toCallSignature(signature) {
42
86
  // The display normalizer is not string-literal-aware; avoid proving compatibility from it.
@@ -1 +1 @@
1
- {"version":3,"file":"typescript-function-signature-compatibility.js","sourceRoot":"","sources":["../../../src/infrastructure/typescript/typescript-function-signature-compatibility.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typescript-function-signature-compatibility.js","sourceRoot":"","sources":["../../../src/infrastructure/typescript/typescript-function-signature-compatibility.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** 파싱 오류에 프롬프트 조각이 포함되지 않도록 원래 예외는 외부에 노출하지 않는다. */
2
+ export declare function readAgentHookInput(input: AsyncIterable<string | Uint8Array>): Promise<unknown>;
3
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/presentation/agent-hook/input.ts"],"names":[],"mappings":"AAEA,oDAAoD;AACpD,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,GACxC,OAAO,CAAC,OAAO,CAAC,CAclB"}
@@ -0,0 +1,20 @@
1
+ const maximumInputBytes = 256 * 1024;
2
+ /** 파싱 오류에 프롬프트 조각이 포함되지 않도록 원래 예외는 외부에 노출하지 않는다. */
3
+ export async function readAgentHookInput(input) {
4
+ const chunks = [];
5
+ let length = 0;
6
+ for await (const chunk of input) {
7
+ const bytes = typeof chunk === "string" ? Buffer.from(chunk) : chunk;
8
+ length += bytes.byteLength;
9
+ if (length > maximumInputBytes)
10
+ throw new Error("Agent hook input exceeds 256 KiB");
11
+ chunks.push(bytes);
12
+ }
13
+ try {
14
+ return JSON.parse(Buffer.concat(chunks).toString("utf8"));
15
+ }
16
+ catch {
17
+ throw new Error("Agent hook input must be valid JSON");
18
+ }
19
+ }
20
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/presentation/agent-hook/input.ts"],"names":[],"mappings":"AAAA,MAAM,iBAAiB,GAAG,GAAG,GAAG,IAAI,CAAC;AAErC,oDAAoD;AACpD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAyC;IAEzC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;QAC3B,IAAI,MAAM,GAAG,iBAAiB;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACpF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAY,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ChangeReport } from "../../domain/report.js";
2
+ /** 요청문과 finding 설명 대신 변경·심각도 집계만 Hook 메시지에 표시한다. */
3
+ export declare function formatAgentHookSummary(report: ChangeReport): string | undefined;
4
+ //# sourceMappingURL=summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../src/presentation/agent-hook/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,oDAAoD;AACpD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAI/E"}
@@ -0,0 +1,8 @@
1
+ /** 요청문과 finding 설명 대신 변경·심각도 집계만 Hook 메시지에 표시한다. */
2
+ export function formatAgentHookSummary(report) {
3
+ if (report.changes.summary.filesChanged === 0)
4
+ return undefined;
5
+ const { bySeverity, total } = report.findings.summary;
6
+ return `IntentPatch: ${report.changes.summary.filesChanged} files changed; ${total} ${total === 1 ? "finding" : "findings"} (high ${bySeverity.high}, medium ${bySeverity.medium}, low ${bySeverity.low}).`;
7
+ }
8
+ //# sourceMappingURL=summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../src/presentation/agent-hook/summary.ts"],"names":[],"mappings":"AAEA,oDAAoD;AACpD,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IACtD,OAAO,gBAAgB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,mBAAmB,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,UAAU,UAAU,CAAC,IAAI,YAAY,UAAU,CAAC,MAAM,SAAS,UAAU,CAAC,GAAG,IAAI,CAAC;AAC9M,CAAC"}
@@ -1,11 +1,6 @@
1
- import type { AgentIntentSessionStore } from "../../application/ports/agent-intent-session-store.js";
2
- import type { ChangeReport } from "../../domain/report.js";
3
- import type { RepositoryAnalysisOptions } from "../analyze-repository.js";
1
+ import { type AgentTurnDependencies } from "../../application/use-cases/analyze-agent-turn.js";
4
2
  import type { ClaudeHookAction } from "../cli/arguments.js";
5
- export interface ClaudeHookDependencies {
6
- readonly store: AgentIntentSessionStore;
7
- readonly analyze: (options: RepositoryAnalysisOptions) => Promise<ChangeReport>;
8
- }
3
+ export type ClaudeHookDependencies = AgentTurnDependencies;
9
4
  /** Hook 입력 크기를 제한해 의도치 않은 대용량 stdin을 메모리에 쌓지 않는다. */
10
5
  export declare function readClaudeHookInput(input: AsyncIterable<string | Uint8Array>): Promise<unknown>;
11
6
  /** 프롬프트는 분석 계약에만 전달하고 Hook 출력에는 집계만 반환한다. */
@@ -1 +1 @@
1
- {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/presentation/claude-code/hook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uDAAuD,CAAC;AACrG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAK5D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CACjF;AAED,qDAAqD;AACrD,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,GACxC,OAAO,CAAC,OAAO,CAAC,CAelB;AAED,6CAA6C;AAC7C,wBAAsB,aAAa,CACjC,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,sBAAsB,GACnC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAsC7B"}
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/presentation/claude-code/hook.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,mDAAmD,CAAC;AAG3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAE3D,qDAAqD;AACrD,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,GACxC,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,6CAA6C;AAC7C,wBAAsB,aAAa,CACjC,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,sBAAsB,GACnC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAyB7B"}
@@ -1,62 +1,36 @@
1
1
  import { isAbsolute } from "node:path";
2
- const maximumInputBytes = 256 * 1024;
3
- const maximumPromptBytes = 64 * 1024;
2
+ import { AnalyzeAgentTurn, } from "../../application/use-cases/analyze-agent-turn.js";
3
+ import { readAgentHookInput } from "../agent-hook/input.js";
4
+ import { formatAgentHookSummary } from "../agent-hook/summary.js";
4
5
  /** Hook 입력 크기를 제한해 의도치 않은 대용량 stdin을 메모리에 쌓지 않는다. */
5
6
  export async function readClaudeHookInput(input) {
6
- const chunks = [];
7
- let length = 0;
8
- for await (const chunk of input) {
9
- const bytes = typeof chunk === "string" ? Buffer.from(chunk) : chunk;
10
- length += bytes.byteLength;
11
- if (length > maximumInputBytes)
12
- throw new Error("Claude Code hook input exceeds 256 KiB");
13
- chunks.push(bytes);
14
- }
15
- try {
16
- return JSON.parse(Buffer.concat(chunks).toString("utf8"));
17
- }
18
- catch {
19
- // JSON parser diagnostics can contain a fragment of the original prompt.
20
- throw new Error("Claude Code hook input must be valid JSON");
21
- }
7
+ return readAgentHookInput(input);
22
8
  }
23
9
  /** 프롬프트는 분석 계약에만 전달하고 Hook 출력에는 집계만 반환한다. */
24
10
  export async function runClaudeHook(action, input, dependencies) {
25
11
  const event = parseEvent(input);
12
+ const turn = new AnalyzeAgentTurn(dependencies);
26
13
  switch (action) {
27
14
  case "capture": {
28
15
  assertEvent(event, "UserPromptSubmit");
29
- if (typeof event.prompt !== "string" ||
30
- event.prompt.trim().length === 0 ||
31
- Buffer.byteLength(event.prompt, "utf8") > maximumPromptBytes) {
32
- throw new Error("Claude Code prompt must be nonempty and at most 64 KiB");
33
- }
34
- await dependencies.store.capture(event.sessionId, event.cwd, event.prompt);
16
+ if (typeof event.prompt !== "string")
17
+ throw new Error("Claude Code prompt is required");
18
+ await turn.capture(event.sessionId, event.cwd, event.prompt);
35
19
  return undefined;
36
20
  }
37
21
  case "analyze": {
38
22
  assertEvent(event, "Stop");
39
23
  if (event.stop_hook_active === true)
40
24
  return undefined;
41
- const captured = await dependencies.store.take(event.sessionId, event.cwd);
42
- if (captured === undefined)
43
- return undefined;
44
- const report = await dependencies.analyze({
45
- workingDirectory: event.cwd,
46
- baseRef: captured.baseRef,
47
- intentOverride: captured.intent,
48
- });
49
- if (report.changes.summary.filesChanged === 0)
50
- return undefined;
51
- const { bySeverity, total } = report.findings.summary;
52
- const message = `IntentPatch: ${report.changes.summary.filesChanged} files changed; ${total} ${total === 1 ? "finding" : "findings"} (high ${bySeverity.high}, medium ${bySeverity.medium}, low ${bySeverity.low}).`;
53
- return `${JSON.stringify({ systemMessage: message })}\n`;
25
+ const report = await turn.analyze(event.sessionId, event.cwd);
26
+ const message = report === undefined ? undefined : formatAgentHookSummary(report);
27
+ return message === undefined ? undefined : `${JSON.stringify({ systemMessage: message })}\n`;
54
28
  }
55
29
  case "clear": {
56
30
  if (event.hook_event_name !== "StopFailure" && event.hook_event_name !== "SessionEnd") {
57
31
  throw new Error("Claude Code clear hook requires StopFailure or SessionEnd");
58
32
  }
59
- await dependencies.store.clear(event.sessionId, event.cwd);
33
+ await turn.clear(event.sessionId, event.cwd);
60
34
  return undefined;
61
35
  }
62
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../src/presentation/claude-code/hook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../src/presentation/claude-code/hook.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,17 @@ export interface ClaudeHookCommandOptions {
23
23
  readonly command: "claude-hook";
24
24
  readonly action: ClaudeHookAction;
25
25
  }
26
- export type CliOptions = AnalyzeCommandOptions | ClaudeHookCommandOptions | HelpCommandOptions | VersionCommandOptions;
26
+ export type CodexHookAction = "capture" | "analyze" | "clear";
27
+ export interface CodexHookCommandOptions {
28
+ readonly command: "codex-hook";
29
+ readonly action: CodexHookAction;
30
+ }
31
+ export type CursorHookAction = "capture" | "analyze";
32
+ export interface CursorHookCommandOptions {
33
+ readonly command: "cursor-hook";
34
+ readonly action: CursorHookAction;
35
+ }
36
+ export type CliOptions = AnalyzeCommandOptions | ClaudeHookCommandOptions | CodexHookCommandOptions | CursorHookCommandOptions | HelpCommandOptions | VersionCommandOptions;
27
37
  export declare class CliUsageError extends Error {
28
38
  constructor(message: string);
29
39
  }
@@ -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,UAAU,GAClB,qBAAqB,GACrB,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,CAmFZ;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAwBjC"}
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,CAoGZ;AAED,wBAAgB,QAAQ,IAAI,MAAM,CA0BjC"}
@@ -22,6 +22,21 @@ export function parseArguments(arguments_, currentDirectory) {
22
22
  }
23
23
  return { command, action };
24
24
  }
25
+ if (command === "codex-hook") {
26
+ const [action] = options;
27
+ if (options.length !== 1 ||
28
+ (action !== "capture" && action !== "analyze" && action !== "clear")) {
29
+ throw new CliUsageError("Usage: intentpatch codex-hook <capture|analyze|clear>");
30
+ }
31
+ return { command, action };
32
+ }
33
+ if (command === "cursor-hook") {
34
+ const [action] = options;
35
+ if (options.length !== 1 || (action !== "capture" && action !== "analyze")) {
36
+ throw new CliUsageError("Usage: intentpatch cursor-hook <capture|analyze>");
37
+ }
38
+ return { command, action };
39
+ }
25
40
  if (command !== "analyze") {
26
41
  throw new CliUsageError(`Unknown command: ${command ?? ""}`);
27
42
  }
@@ -90,6 +105,8 @@ export function helpText() {
90
105
  Usage:
91
106
  intentpatch analyze [options]
92
107
  intentpatch claude-hook <capture|analyze|clear> Read Claude Code hook JSON from stdin
108
+ intentpatch codex-hook <capture|analyze|clear> Read Codex hook JSON from stdin
109
+ intentpatch cursor-hook <capture|analyze> Read Cursor hook JSON from stdin
93
110
 
94
111
  Options:
95
112
  --base <ref> Base Git reference (default: HEAD)
@@ -1 +1 @@
1
- {"version":3,"file":"arguments.js","sourceRoot":"","sources":["../../../src/presentation/cli/arguments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arguments.js","sourceRoot":"","sources":["../../../src/presentation/cli/arguments.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,13 @@ import { readFile } from "node:fs/promises";
3
3
  import process from "node:process";
4
4
  import { TextIntentLoader } from "../../infrastructure/config/text-intent-loader.js";
5
5
  import { GitPrivateAgentIntentStore } from "../../infrastructure/git/git-private-agent-intent-store.js";
6
+ import { GitPrivateAgentReportWriter } from "../../infrastructure/git/git-private-agent-report-writer.js";
6
7
  import { CommandExecutionError } from "../../infrastructure/process/command-runner.js";
8
+ import { readAgentHookInput } from "../agent-hook/input.js";
7
9
  import { analyzeRepository } from "../analyze-repository.js";
8
10
  import { readClaudeHookInput, runClaudeHook } from "../claude-code/hook.js";
11
+ import { runCodexHook } from "../codex/hook.js";
12
+ import { runCursorHook } from "../cursor/hook.js";
9
13
  import { CliUsageError, helpText, parseArguments } from "./arguments.js";
10
14
  import { shouldFail } from "./failure-policy.js";
11
15
  import { writeReportFile } from "./report-file-writer.js";
@@ -31,6 +35,27 @@ async function main() {
31
35
  process.stdout.write(output);
32
36
  return;
33
37
  }
38
+ if (options.command === "codex-hook") {
39
+ const output = await runCodexHook(options.action, await readAgentHookInput(process.stdin), {
40
+ store: new GitPrivateAgentIntentStore(),
41
+ analyze: analyzeRepository,
42
+ });
43
+ if (output !== undefined)
44
+ process.stdout.write(output);
45
+ return;
46
+ }
47
+ if (options.command === "cursor-hook") {
48
+ const writer = new GitPrivateAgentReportWriter();
49
+ const result = await runCursorHook(options.action, await readAgentHookInput(process.stdin), {
50
+ store: new GitPrivateAgentIntentStore(),
51
+ analyze: analyzeRepository,
52
+ writeReport: (key, cwd, html) => writer.write(key, cwd, html),
53
+ });
54
+ process.stdout.write(result.output);
55
+ if (result.notice !== undefined)
56
+ process.stderr.write(`${result.notice}\n`);
57
+ return;
58
+ }
34
59
  const intentOverride = options.intentFilePath === undefined
35
60
  ? undefined
36
61
  : await new TextIntentLoader().load(options.workingDirectory, options.intentFilePath);
@@ -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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"}
@@ -0,0 +1,5 @@
1
+ import { type AgentTurnDependencies } from "../../application/use-cases/analyze-agent-turn.js";
2
+ import type { CodexHookAction } from "../cli/arguments.js";
3
+ /** Codex의 턴 식별자를 사용해 같은 대화의 연속 요청을 서로 덮어쓰지 않는다. */
4
+ export declare function runCodexHook(action: CodexHookAction, input: unknown, dependencies: AgentTurnDependencies): Promise<string | undefined>;
5
+ //# sourceMappingURL=hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/presentation/codex/hook.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,mDAAmD,CAAC;AAE3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAW3D,mDAAmD;AACnD,wBAAsB,YAAY,CAChC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,qBAAqB,GAClC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAyB7B"}
@@ -0,0 +1,62 @@
1
+ import { isAbsolute } from "node:path";
2
+ import { AnalyzeAgentTurn, } from "../../application/use-cases/analyze-agent-turn.js";
3
+ import { formatAgentHookSummary } from "../agent-hook/summary.js";
4
+ /** Codex의 턴 식별자를 사용해 같은 대화의 연속 요청을 서로 덮어쓰지 않는다. */
5
+ export async function runCodexHook(action, input, dependencies) {
6
+ const event = parseEvent(input);
7
+ const key = `codex:${event.sessionId}:${event.turnId}`;
8
+ const turn = new AnalyzeAgentTurn(dependencies);
9
+ switch (action) {
10
+ case "capture": {
11
+ assertEvent(event, "UserPromptSubmit");
12
+ if (typeof event.prompt !== "string")
13
+ throw new Error("Codex prompt is required");
14
+ await turn.capture(key, event.cwd, event.prompt);
15
+ return undefined;
16
+ }
17
+ case "analyze": {
18
+ assertEvent(event, "Stop");
19
+ if (event.stop_hook_active === true)
20
+ return "{}\n";
21
+ const report = await turn.analyze(key, event.cwd);
22
+ const message = report === undefined ? undefined : formatAgentHookSummary(report);
23
+ return message === undefined ? "{}\n" : `${JSON.stringify({ systemMessage: message })}\n`;
24
+ }
25
+ case "clear": {
26
+ assertEvent(event, "Interrupt");
27
+ await turn.clear(key, event.cwd);
28
+ return undefined;
29
+ }
30
+ }
31
+ }
32
+ function parseEvent(value) {
33
+ if (typeof value !== "object" ||
34
+ value === null ||
35
+ !("hook_event_name" in value) ||
36
+ typeof value.hook_event_name !== "string" ||
37
+ !("session_id" in value) ||
38
+ !validId(value.session_id) ||
39
+ !("turn_id" in value) ||
40
+ !validId(value.turn_id) ||
41
+ !("cwd" in value) ||
42
+ typeof value.cwd !== "string" ||
43
+ !isAbsolute(value.cwd)) {
44
+ throw new Error("Codex hook requires an event name, session ID, turn ID, and absolute cwd");
45
+ }
46
+ return {
47
+ hook_event_name: value.hook_event_name,
48
+ sessionId: value.session_id,
49
+ turnId: value.turn_id,
50
+ cwd: value.cwd,
51
+ ...("prompt" in value ? { prompt: value.prompt } : {}),
52
+ ...("stop_hook_active" in value ? { stop_hook_active: value.stop_hook_active } : {}),
53
+ };
54
+ }
55
+ function validId(value) {
56
+ return typeof value === "string" && value.length > 0 && value.length <= 256;
57
+ }
58
+ function assertEvent(event, expected) {
59
+ if (event.hook_event_name !== expected)
60
+ throw new Error(`Codex hook expected ${expected} event`);
61
+ }
62
+ //# sourceMappingURL=hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../src/presentation/codex/hook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type AgentTurnDependencies } from "../../application/use-cases/analyze-agent-turn.js";
2
+ import type { CursorHookAction } from "../cli/arguments.js";
3
+ export interface CursorHookDependencies extends AgentTurnDependencies {
4
+ readonly writeReport: (key: string, cwd: string, html: string) => Promise<string>;
5
+ }
6
+ export interface CursorHookResult {
7
+ readonly output: string;
8
+ readonly notice?: string;
9
+ }
10
+ /** Cursor의 JSON Hook 계약을 로컬 턴 분석으로 변환한다. 후속 모델 턴은 만들지 않는다. */
11
+ export declare function runCursorHook(action: CursorHookAction, input: unknown, dependencies: CursorHookDependencies): Promise<CursorHookResult>;
12
+ //# sourceMappingURL=hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/presentation/cursor/hook.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,mDAAmD,CAAC;AAE3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACnE,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACnF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAWD,8DAA8D;AAC9D,wBAAsB,aAAa,CACjC,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,sBAAsB,GACnC,OAAO,CAAC,gBAAgB,CAAC,CAkC3B"}
@@ -0,0 +1,69 @@
1
+ import { isAbsolute } from "node:path";
2
+ import { AnalyzeAgentTurn, } from "../../application/use-cases/analyze-agent-turn.js";
3
+ import { formatAgentHookSummary } from "../agent-hook/summary.js";
4
+ import { formatReport } from "../cli/report-formatter.js";
5
+ /** Cursor의 JSON Hook 계약을 로컬 턴 분석으로 변환한다. 후속 모델 턴은 만들지 않는다. */
6
+ export async function runCursorHook(action, input, dependencies) {
7
+ const event = parseEvent(input);
8
+ const key = `cursor:${event.conversationId}:${event.generationId}`;
9
+ const turn = new AnalyzeAgentTurn(dependencies);
10
+ switch (action) {
11
+ case "capture": {
12
+ assertEvent(event, "beforeSubmitPrompt");
13
+ if (typeof event.prompt !== "string")
14
+ throw new Error("Cursor prompt is required");
15
+ await turn.capture(key, event.cwd, event.prompt);
16
+ return { output: '{"continue":true}\n' };
17
+ }
18
+ case "analyze": {
19
+ assertEvent(event, "stop");
20
+ if (event.status !== "completed") {
21
+ await turn.clear(key, event.cwd);
22
+ return { output: "{}\n" };
23
+ }
24
+ const report = await turn.analyze(key, event.cwd);
25
+ if (report === undefined || report.changes.summary.filesChanged === 0) {
26
+ return { output: "{}\n" };
27
+ }
28
+ const path = await dependencies.writeReport(`cursor:${event.conversationId}`, event.cwd, formatReport(report, "html"));
29
+ const summary = formatAgentHookSummary(report);
30
+ return {
31
+ output: "{}\n",
32
+ notice: `${summary ?? "IntentPatch report ready."} Report: ${path}`,
33
+ };
34
+ }
35
+ }
36
+ }
37
+ function parseEvent(value) {
38
+ if (typeof value !== "object" ||
39
+ value === null ||
40
+ !("hook_event_name" in value) ||
41
+ typeof value.hook_event_name !== "string" ||
42
+ !("conversation_id" in value) ||
43
+ !validId(value.conversation_id) ||
44
+ !("generation_id" in value) ||
45
+ !validId(value.generation_id) ||
46
+ !("workspace_roots" in value) ||
47
+ !Array.isArray(value.workspace_roots) ||
48
+ value.workspace_roots.length !== 1 ||
49
+ typeof value.workspace_roots[0] !== "string" ||
50
+ !isAbsolute(value.workspace_roots[0])) {
51
+ throw new Error("Cursor hook requires an event name, conversation ID, generation ID, and one absolute workspace root");
52
+ }
53
+ return {
54
+ hook_event_name: value.hook_event_name,
55
+ conversationId: value.conversation_id,
56
+ generationId: value.generation_id,
57
+ cwd: value.workspace_roots[0],
58
+ ...("prompt" in value ? { prompt: value.prompt } : {}),
59
+ ...("status" in value ? { status: value.status } : {}),
60
+ };
61
+ }
62
+ function validId(value) {
63
+ return typeof value === "string" && value.length > 0 && value.length <= 256;
64
+ }
65
+ function assertEvent(event, expected) {
66
+ if (event.hook_event_name !== expected)
67
+ throw new Error(`Cursor hook expected ${expected} event`);
68
+ }
69
+ //# sourceMappingURL=hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../src/presentation/cursor/hook.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "intentpatch",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "Evidence-based change scope analysis for AI-authored code patches.",
5
5
  "license": "MIT",
6
6
  "repository": {