Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
cf855b6
chore: initial project setup with Gradle
jher235 Jan 25, 2026
dc594e6
chore: setup build configuration with Shadow plugin and essential dep…
jher235 Jan 25, 2026
a05c432
chore: config codeRabbit yaml
jher235 Jan 26, 2026
01445f4
chore: config agent.md
jher235 Jan 26, 2026
20cfacc
chore: config Pull Request template
jher235 Jan 26, 2026
b327f62
chore: add auto generate PR workflow
jher235 Jan 26, 2026
6056199
chore: ignore all .idea/ file
jher235 Jan 26, 2026
edbd9c9
fix: remove .idea files and add missing dependencies
jher235 Jan 26, 2026
8ea01aa
fix: upgrade github-script version
jher235 Jan 26, 2026
b3fdba9
chore: add dependency about jgit & assertJ
jher235 Jan 26, 2026
450457b
fix: append to GITHUB_ENV file
jher235 Jan 26, 2026
4542a2b
chore: upgrade dependency versions and specify jdk version
jher235 Jan 26, 2026
0eea39d
chore: set mainClassName for shadowJar tasks
jher235 Jan 26, 2026
46964a3
Merge pull request #1 from jher235/setting/init-project
jher235 Jan 26, 2026
e0ad2e5
feat: create PathResolver
jher235 Jan 26, 2026
c8daaff
feat: create ProjectParser
jher235 Jan 26, 2026
787704a
refactor: improve ProjectParser to use JavaParser instance
jher235 Jan 26, 2026
05448a2
feat: create JFocusCli class to Main
jher235 Jan 26, 2026
0ffb5a3
refactor: union markers and seek first
jher235 Jan 26, 2026
0ebe872
refactor: config find upper bound
jher235 Jan 26, 2026
612f5e3
feat: add PathResolverTest
jher235 Jan 26, 2026
19c0a4a
feat: add ProjectParserTest
jher235 Jan 26, 2026
9734807
refactor: enhance ProjectParser ambiguity handling
jher235 Jan 27, 2026
bc6c1e5
refactor: enhance parseFile to fail fast when path does not exist
jher235 Jan 27, 2026
4f9df70
Merge pull request #2 from jher235/feat/create-parser
jher235 Jan 27, 2026
24fe13d
feat: add MethodExtractor to find methods from AST
jher235 Jan 27, 2026
f2807d8
feat: add MethodExtractor test
jher235 Jan 27, 2026
1cef97a
Merge pull request #3 from jher235/feat/method-extractor
jher235 Jan 27, 2026
975ccbb
feat: Implement DependencyResolver for AST-based dependency analysis
jher235 Jan 27, 2026
b163f97
feat: Add ContextResult model to store analyzed context layers
jher235 Jan 27, 2026
a2b1550
feat: Implement ContextExtractor to orchestrate dependency layering
jher235 Jan 27, 2026
206fad5
refactor: Improve resolveFields to support FieldAccessExpr
jher235 Jan 27, 2026
d40b925
Merge pull request #4 from jher235/feat/extractor-dependency-and-context
jher235 Jan 27, 2026
ef938ab
feat: Add MarkdownExporter to format analysis results
jher235 Jan 27, 2026
f43d766
chore: generate pr body to file
jher235 Jan 27, 2026
bcfbb0a
Merge pull request #5 from jher235/feat/markdown-exporter
jher235 Jan 27, 2026
2084d43
feat: Add verbose mode to MarkdownExporter for optional full external…
jher235 Jan 31, 2026
3943e58
refactor: enhance using ExportConfig
jher235 Jan 31, 2026
8eb0030
refactor: improve ProjectParser and fix symbol resolution
jher235 Jan 31, 2026
c6b4241
feat(cli): implement JFocusCli with interactive mode and clipboard su…
jher235 Feb 3, 2026
cf7ec75
refactor: re-prompting when empty input becomes ".java"
jher235 Feb 3, 2026
d1c59d0
refactor: when multiple overloads exist, client can choose method
jher235 Feb 3, 2026
806689f
refactor: Add projectRoot fallback to prevent path duplication when r…
jher235 Feb 3, 2026
00b3850
fix: add short-circuit logic to file path resolution in ProjectParser
jher235 Feb 3, 2026
59adc68
refactor: early return when IOException occurred in parseFile
jher235 Feb 3, 2026
8245354
Merge pull request #6 from jher235/feat/cli
jher235 Feb 3, 2026
9c808c1
feat: implement case-insensitive fuzzy search for files and methods
jher235 Feb 3, 2026
56fba8c
fix: improve file search robustness in ProjectParser
jher235 Feb 3, 2026
9dabea5
Merge pull request #7 from jher235/feat/fuzzy-and-insensitive-search
jher235 Feb 4, 2026
0da7481
feat: add install script for macOS and Linux
jher235 Feb 4, 2026
da5e22c
feat: add install script for window
jher235 Feb 4, 2026
c4fd21d
fix: modify main class package
jher235 Feb 4, 2026
fd69925
refactor: initialize ProjectParser with execution-context-aware PathR…
jher235 Feb 4, 2026
7b4efeb
refactor: validate exist + directory
jher235 Feb 4, 2026
a5c0503
refactor: ensure that file extensions normalize even if they are uppe…
jher235 Feb 4, 2026
c65e5b0
fix: synchronize installer download URL with script version
jher235 Feb 4, 2026
d25f373
fix: support case-sensitive file systems in file resolution
jher235 Feb 4, 2026
a3ea903
chore: change version
jher235 Feb 4, 2026
53441ef
feat: add SHA256 checksum verification to Windows installer
jher235 Feb 4, 2026
b1ff5e6
Merge pull request #8 from jher235/feat/install-setting
jher235 Feb 4, 2026
22e0671
fix: prioritize exact filename matches in fuzzy search
jher235 Feb 4, 2026
94cc6bf
feat: enhance file resolution with smart sorting and interactive CLI
jher235 Feb 4, 2026
9ca9163
fix: normalize file extension to lowercase for cross-platform support
jher235 Feb 5, 2026
6e3f643
fix: handle invalid path characters gracefully
jher235 Feb 5, 2026
ffb3f58
This change ensures that if a user provides a path like api/controlle…
jher235 Feb 5, 2026
953285e
fix: prevent infinite blocking in non-interactive environments
jher235 Feb 5, 2026
3970863
fix: resolve exact matches correctly when input contains path separators
jher235 Feb 5, 2026
d5aa456
fix: prevent NullPointerException when resolving parent path
jher235 Feb 5, 2026
0164a80
Merge pull request #9 from jher235/feat/inhance-cli-accuracy
jher235 Feb 5, 2026
55f683a
feat: add recursive logic to traverse the entire call graph within cl…
jher235 Feb 5, 2026
5462eb8
fix: inject SymbolSolver into resolved nodes to enable deep recursive…
jher235 Feb 5, 2026
279a9ea
refactor: injectSolver method extract
jher235 Feb 5, 2026
a853c9d
feat: Improve dependency resolution with AST fallback and local varia…
jher235 Feb 5, 2026
19130b8
feat: Implement dynamic source root detection based on package declar…
jher235 Feb 5, 2026
ba3650a
refactor: Extract known JDK types to dedicated class for better maint…
jher235 Feb 5, 2026
242b6be
refactor: Optimize dependency deduplication using method signatures" …
jher235 Feb 5, 2026
f4c61cd
fix(core): Fix resource leaks and improve path comparison robustness
jher235 Feb 5, 2026
3e9bf93
test: Cleanup unused solver setupsetup
jher235 Feb 5, 2026
38f7942
refactor: AST-based fallback resolution has limitations with generic …
jher235 Feb 5, 2026
4f318c1
fix: Improve AST resolution scope and method identification
jher235 Feb 5, 2026
f2ad702
fix: Enable AST fallback for unscoped and explicitly scoped calls
jher235 Feb 5, 2026
b4b6fa3
fix: Enhance AST resolution with overloading support and scope handling
jher235 Feb 5, 2026
7a44aef
fix: Support inherited methods and fix nested class collisions
jher235 Feb 5, 2026
9368a98
fix: Support full inheritance chain traversal and internal 'this' res…
jher235 Feb 8, 2026
1784c30
fix: Improve method lookup precision and field deduplication
jher235 Feb 8, 2026
29bb62f
fix: Refine class lookup filtering
jher235 Feb 8, 2026
48c5607
fix: Deduplicate field declarations correctly for multi-variable stat…
jher235 Feb 8, 2026
6329b06
fix: Align method ID generation in ContextExtractor with DependencyRe…
jher235 Feb 8, 2026
a9263f8
refactor: Extract ID generation logic to AstUtils
jher235 Feb 8, 2026
b626934
ci: Add GitHub Actions workflow for Java 21 and Gradle build
jher235 Feb 9, 2026
d7d029a
fix: Update Gradle workflow syntax for setup-gradle@v4
jher235 Feb 9, 2026
01c4415
Merge pull request #11 from jher235/feat/ci-workflow
jher235 Feb 9, 2026
fecb062
Merge pull request #10 from jher235/feat/recursive-logic-to-entire-call
jher235 Feb 9, 2026
60fb6a4
feat: Switch default output to stdout for AI agent compatibility
jher235 Feb 15, 2026
f303143
feat: Add JFocus Alias script
jher235 Feb 15, 2026
e7d2dd3
docs: add comprehensive JFocus guide for AI context
jher235 Feb 15, 2026
c683997
docs: add AI agent integration rules
jher235 Feb 15, 2026
13289aa
docs: refactor README for global audience and senior engineering stan…
jher235 Feb 15, 2026
61999b1
docs: consolidate AI rules into rules.md as single source of truth
jher235 Feb 15, 2026
377327e
docs: add markdown backtic
jher235 Feb 15, 2026
a7b31bc
docs: Fix Table of Contents link fragments
jher235 Feb 15, 2026
33aef76
feat: Fix Installation Script Shell Detection
jher235 Feb 15, 2026
b380af8
docs: remove unnecessary blank
jher235 Feb 15, 2026
fcaaa36
docs: fix table of contents links in README
jher235 Feb 15, 2026
81d711b
feat: update SHA256 checksums and improve shell detection
jher235 Feb 15, 2026
34db10e
Merge pull request #12 from jher235/docs/add-md-file
jher235 Feb 15, 2026
46623cd
docs: move README files to project root and update relative links
jher235 Feb 15, 2026
cd4e8e5
docs: overhaul README structure, fix anchors and consolidate agent rules
jher235 Feb 15, 2026
cea2106
refactor: move scripts to root directory
jher235 Feb 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## πŸ“ Description
## ❓ Why is this change required?
## ✨ What does this PR do?
113 changes: 113 additions & 0 deletions .github/workflows/auto-generate-pr-to-develop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
name: auto-generate-pr-to-develop.yml

on:
push:
branches-ignore:
- main
- develop

jobs:
create-pull-request:
runs-on: ubuntu-latest
permissions:
pull-requests: write
contents: read

steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}

- name: Check if PR already exists
id: check_pr
env:
GH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
run: |
EXISTING_PR=$(gh pr list --head ${{ github.ref_name }} --base develop --json number --jq '.[0].number')
if [ -n "$EXISTING_PR" ]; then
echo "exists=true" >> $GITHUB_OUTPUT
else
echo "exists=false" >> $GITHUB_OUTPUT
fi

- name: Get Context (Commits & Diff)
if: steps.check_pr.outputs.exists == 'false'
id: get-context
run: |
git fetch origin develop
DIFF=$(git diff origin/develop...HEAD)
COMMITS=$(git log origin/develop...HEAD --pretty=format:"- %s")

# 파일둜 μ €μž₯ν•˜μ—¬ ν™˜κ²½ λ³€μˆ˜ 크기 μ œν•œ 및 특수문자 문제 λ°©μ§€
echo "$DIFF" > diff_context.txt
echo "$COMMITS" > commits_context.txt

- name: Generate PR Content with Gemini
if: steps.check_pr.outputs.exists == 'false'
id: gemini
uses: actions/github-script@v8
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require('fs');
const diff = fs.readFileSync('diff_context.txt', 'utf8').substring(0, 5000);
const commits = fs.readFileSync('commits_context.txt', 'utf8');

const prompt = `
You are an expert software engineer. Based on the commit messages and code diff below,
write a PR title and body in professional English.

Structure the body exactly as follows:
## πŸ“ Description
...
## ✨ What does this PR do?
...

Context:
- Commits: ${commits}
- Diff: ${diff}

Response Format:
TITLE: [The PR Title]
BODY: [The PR Body]
`;

const apiKey = process.env.GEMINI_API_KEY;
const apiUrl = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=" + apiKey;

const response = await fetch(apiUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
contents: [{ parts: [{ text: prompt }] }],
generationConfig: { temperature: 0.2 }
})
});

const result = await response.json();
const aiResponse = result.candidates[0].content.parts[0].text;

const titleMatch = aiResponse.match(/TITLE: (.*)/);
const bodyMatch = aiResponse.split('BODY:')[1];

const title = titleMatch ? titleMatch[1].trim() : "Update from " + process.env.GITHUB_REF_NAME;
const body = bodyMatch ? bodyMatch.trim() : "No description generated.";

core.setOutput('title', title);
fs.writeFileSync('pr_body.md', body);
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}

- name: Create Pull Request
if: steps.check_pr.outputs.exists == 'false'
env:
GH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
run: |
gh pr create \
--base develop \
--head ${{ github.ref_name }} \
--title "${{ steps.gemini.outputs.title }}" \
--body-file pr_body.md \
--assignee ${{ github.actor }}
33 changes: 33 additions & 0 deletions .github/workflows/ci-with-gradle.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: ci-with-gradle.yml

on:
push:
branches: [ "main", "develop" ]
pull_request:
branches: [ "main", "develop" ]

permissions:
contents: read

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

- name: Build with Gradle
run: ./gradlew build shadowJar
43 changes: 43 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/

### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
.idea/

### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/

### VS Code ###
.vscode/

### Mac OS ###
.DS_Store
Loading