Skip to content

Latest commit

ย 

History

101 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

data_flow_analyse

ๅŸบไบŽ pi ๅคšๆ™บ่ƒฝไฝ“ๆก†ๆžถ็š„ C/C++ ๆ•ฐๆฎๆตๆฑก็‚นๅˆ†ๆž็ณป็ปŸใ€‚
ไปŽไธ€ไธชๅทฒ็Ÿฅๅ…ฅๅฃๅ‡ฝๆ•ฐๅ‡บๅ‘๏ผŒ้€’ๅฝ’่ฟฝ่ธชๅค–้ƒจ่พ“ๅ…ฅๅœจๅ‡ฝๆ•ฐ่ฐƒ็”จ้“พไธญ็š„ไผ ๆ’ญ่ทฏๅพ„๏ผŒ่พ“ๅ‡บๅˆๅนถๅŽ็š„ๅฎŒๆ•ดๆ•ฐๆฎๆตๅˆ†ๆžๆŠฅๅ‘Šใ€‚


ๆžถๆž„ๆฆ‚่งˆ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  cli.py  โ†  ็”จๆˆท prompt๏ผˆ"ๅˆ†ๆž foo.c ็š„ Bar ๅ‡ฝๆ•ฐ"๏ผ‰       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                        โ”‚
                        โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Orchestrator (app/orchestrator.py)                      โ”‚
โ”‚                                                          โ”‚
โ”‚  execute_recursive(depth=0)                              โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚  Round 1..N  (max_rounds=-1 โ†’ โˆž)                 โ”‚   โ”‚
โ”‚  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”‚   โ”‚
โ”‚  โ”‚  โ”‚  Workers ร— W    โ”‚   โ”‚  Judges ร— J     โ”‚       โ”‚   โ”‚
โ”‚  โ”‚  โ”‚  (ๅนถ่กŒ)          โ”‚โ”€โ”€โ–ถโ”‚  (ๅนถ่กŒ)          โ”‚       โ”‚   โ”‚
โ”‚  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ”‚   โ”‚
โ”‚  โ”‚                                 โ”‚ pass?           โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                    โ”‚                      โ”‚
โ”‚  ่งฃๆž callee ๅˆ—่กจ โ†’ ๅนถ่กŒ้€’ๅฝ’        โ”‚                      โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚                      โ”‚
โ”‚  โ”‚  callee_1 โ†’ execute_recursiveโ”‚ โ”‚                      โ”‚
โ”‚  โ”‚  callee_2 โ†’ execute_recursiveโ”‚โ—€โ”˜  (asyncio.gather)   โ”‚
โ”‚  โ”‚  callee_3 โ†’ execute_recursiveโ”‚                        โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                       โ”‚
โ”‚                                    โ–ผ                      โ”‚
โ”‚  Merge Agent (ๅˆๅนถๆ‰€ๆœ‰ dataflow-*.md)                     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆ ธๅฟƒ็ป„ไปถ

ๆ–‡ไปถ ่Œ่ดฃ
cli.py CLI ๅ…ฅๅฃ๏ผŒ่งฃๆž prompt๏ผŒ้ฉฑๅŠจ Orchestrator๏ผŒๆ ‘็Šถ่ฟ›ๅบฆ่พ“ๅ‡บ
app/orchestrator.py ็ผ–ๆŽ’ Worker+Judge ๆตๆฐด็บฟ๏ผŒ้€’ๅฝ’่ฐƒ็”จ้“พ่ฟฝ่ธช๏ผŒๅนถ่กŒ callee ๅˆ†ๆž
app/runner.py ่ฐƒ็”จ pi ่ฟ›็จ‹ๆ‰ง่กŒๅ•ไธช Agent๏ผŒๅค„็†้‡่ฏ•/้”™่ฏฏๆฃ€ๆต‹/ๆตๅผ่พ“ๅ‡บ
app/config.py ่งฃๆž config.json๏ผŒๆž„ๅปบ TaskConfig
app/models.py Pydantic ๆ•ฐๆฎๆจกๅž‹๏ผˆTaskConfig, ServiceConfig, SwarmEvent ็ญ‰๏ผ‰
prompts/workers/ Worker Agent ็ณป็ปŸๆ็คบ่ฏ
prompts/judges/ Judge Agent ็ณป็ปŸๆ็คบ่ฏ
prompts/merge/ Merge Agent ็ณป็ปŸๆ็คบ่ฏ
tools/extract_func.py ๅ‡ฝๆ•ฐๆๅ–ๅทฅๅ…ท๏ผˆextract_func ๅ‘ฝไปค๏ผ‰

ๆ‰ง่กŒๆต็จ‹

ๅ•ๅ‡ฝๆ•ฐๅˆ†ๆž๏ผˆไธ€่ฝฎ๏ผ‰

Worker โ”€โ”€โ”€ ่ฏปๅ–ๆบ็  โ†’ ่ฟฝ่ธชๆฑก็‚น่ทฏๅพ„ โ†’ ่พ“ๅ‡บ dataflow-*.md
           โ†‘
           ็”จ extract_func ็ฒพ็กฎๆๅ–ๅ‡ฝๆ•ฐไปฃ็ ๏ผˆ่€Œ้ž่ฏปๆ•ดไธชๆ–‡ไปถ๏ผ‰

Judge โ”€โ”€โ”€โ”€ ่ฏป Worker ่พ“ๅ‡บ โ†’ ๆ‰“ๅˆ† (0-100) โ†’ pass/fail
           โ†‘
           ้€š่ฟ‡/ๅคฑ่ดฅ้˜ˆๅ€ผ: pass_threshold๏ผˆ้ป˜่ฎค๏ผšceil(judges/2)๏ผ‰

Round ้€š่ฟ‡ โ†’ ้€’ๅฝ’ๅˆ†ๆž callees
Round ๅคฑ่ดฅ โ†’ ็”Ÿๆˆ feedback โ†’ ไธ‹ไธ€่ฝฎๆณจๅ…ฅ Worker

้€’ๅฝ’่ฐƒ็”จ้“พ่ฟฝ่ธช

HandleCommissioningSet (depth=0)
โ”œโ”€โ”€ ็ฌฌไธ€ๆญฅ๏ผšWorker ๅˆ†ๆž๏ผŒJudge ้€š่ฟ‡
โ”œโ”€โ”€ ่งฃๆž callee ่กจๆ ผ
โ”‚   ๆ‰พๅˆฐ๏ผšSetCommissioningData, SendCommissioningSetResponse
โ”‚
โ”œโ”€โ”€ grep ้ข„ๆฃ€๏ผˆ_function_has_definition๏ผ‰
โ”‚   ่ฟ‡ๆปค๏ผšmemcpy/malloc ็ญ‰ๆ ‡ๅ‡†ๅบ“ๅ‡ฝๆ•ฐ๏ผˆ_STDLIB_SKIP ้ป‘ๅๅ•๏ผ‰
โ”‚   ่ฟ‡ๆปค๏ผšextern ็บฏๅฃฐๆ˜Ž
โ”‚
โ””โ”€โ”€ asyncio.gather ๅนถ่กŒๅฏๅŠจ๏ผˆๅ— callee_concurrency ้™ๅˆถ๏ผ‰
    โ”œโ”€โ”€ SetCommissioningData (depth=1)  โ”€โ”
    โ””โ”€โ”€ SendCommissioningSetResponse    โ”€โ”ค ๅŒๆ—ถ่ฟ่กŒ
                                         โ†“
                                    Merge Agent ๅˆๅนถ

ๅนถ่กŒๅŒ–

ๅฑ‚ๆฌก ๅฎž็Žฐ ่ฏดๆ˜Ž
ๅคš Worker run_agents_parallel ๅŒ่ฝฎๅคš Worker ๅนถๅ‘ๅˆ†ๆžๅŒไธ€ๅ‡ฝๆ•ฐ
ๅคš Judge asyncio.gather ๅคš Judge ๅŒๆ—ถ่ฏ„ๅฎก๏ผŒๆฏไธช Judge ็‹ฌ็ซ‹ไธŠไธ‹ๆ–‡
Judge ๅ†…ๅคš Worker ่ฏ„ๅˆค asyncio.gather ๅ• Judge ๅนถๅ‘่ฏ„ๅˆคๅ„ Worker ่พ“ๅ‡บ
callee ้€’ๅฝ’ asyncio.gather + Semaphore ๅ…„ๅผŸ callee ๅนถๅ‘ๅˆ†ๆž๏ผŒcallee_concurrency ้™้€Ÿ

้…็ฝฎ่ฏดๆ˜Ž

config.json ๅฎŒๆ•ดๅญ—ๆฎต

{
    "max_rounds": -1,           // ๆฏๅ‡ฝๆ•ฐๆœ€ๅคง่ฝฎๆ•ฐ๏ผŒ-1=ๆ— ้™
    "min_rounds": 1,            // ๆœ€ๅฐ‘่ฝฎๆ•ฐ๏ผˆๅณไฝฟ็ฌฌ1่ฝฎ้€š่ฟ‡ไนŸ็ปง็ปญ๏ผ‰
    "pass_threshold": 1,        // Judge ้€š่ฟ‡็ฅจๆ•ฐ้˜ˆๅ€ผ๏ผˆ้ป˜่ฎค ceil(J/2)๏ผ‰
    "max_trace_depth": 5,       // ๅ‡ฝๆ•ฐ่ฐƒ็”จ้€’ๅฝ’ๆœ€ๅคงๆทฑๅบฆ
    "callee_concurrency": -1,   // callee ๅนถ่กŒๆ•ฐ๏ผŒ-1=ไธ้™๏ผŒ1=ไธฒ่กŒ๏ผŒN=ๆœ€ๅคšNไธช
    "agent_max_retries": 50,    // API ้”™่ฏฏ้‡่ฏ•ๆฌกๆ•ฐ
    "agent_retry_delay": 15,    // ้‡่ฏ•ๅˆๅง‹็ญ‰ๅพ…็ง’๏ผˆๆŒ‡ๆ•ฐ้€€้ฟ๏ผ‰
    "pi_max_retries": -1,       // pi ่ฟ›็จ‹ๆ‹‰่ตทๅคฑ่ดฅ้‡่ฏ•ๆฌกๆ•ฐ๏ผŒ-1=ๆ— ้™
    "pi_retry_delay": 5,        // pi ่ฟ›็จ‹้‡่ฏ•็ญ‰ๅพ…็ง’
    "workers": {
        "default_tools": ["read", "bash", "edit", "write", "find"],
        "system_prompt_dir": "/opt/data_flow_analyse/prompts/workers",
        "default_thinking_level": "off",
        "agents": [
            { "model": "icsl_vllm_2/MiniMax/MiniMax-M2.5" }
        ]
    },
    "judges": {
        "default_tools": ["read", "bash", "find"],
        "system_prompt_dir": "/opt/data_flow_analyse/prompts/judges",
        "default_thinking_level": "off",
        "agents": [
            { "model": "icsl_vllm_2/MiniMax/MiniMax-M2.5" }
        ]
    },
    "output_dir": "/data/output",
    "archive_dir": "/data/output",
    "result_dir":  "/data/output"
}

models.json๏ผˆpi ๆจกๅž‹้…็ฝฎ๏ผ‰

ๆ”พๅœจ /data/config/models.json๏ผŒๅฎนๅ™จๅฏๅŠจๆ—ถ่‡ชๅŠจ้“พๆŽฅๅˆฐ pi ้…็ฝฎ็›ฎๅฝ•ใ€‚

็คบไพ‹๏ผˆๅ†…็ฝ‘ vllm ๆจกๅž‹๏ผ‰๏ผš

{
  "models": [
    {
      "name": "icsl_vllm_2/MiniMax/MiniMax-M2.5",
      "provider": "openai-completions",
      "baseUrl": "http://172.31.23.100:8002/v1",
      "model": "MiniMax/MiniMax-M2.5"
    }
  ]
}

Docker ้ƒจ็ฝฒ

ๆž„ๅปบ้•œๅƒ

docker build --network host -t data_flow_analyse .

ๅŸบ็ก€้•œๅƒ dfa-base:layer5 ๅทฒ้ข„่ฃ…๏ผš

  • Node.js + pi agent
  • Python 3
  • ripgrep๏ผˆrg๏ผŒ้ฟๅ… pi grep ๅทฅๅ…ท่ฟ่กŒๆ—ถไธ‹่ฝฝ๏ผ‰

้•œๅƒ้ขๅค–ๅฎ‰่ฃ…๏ผš

  • extract_func ๅ‘ฝไปค๏ผˆ/usr/local/bin/extract_func๏ผ‰

่ฟ่กŒ

docker run --rm --network host \
  -v /path/to/firmware:/data/target:ro \
  -v /path/to/config:/data/config:ro \
  -v /path/to/output:/data/output \
  data_flow_analyse \
  python3 cli.py "ๅฏน src-vul/openthread/.../foo.cpp ็š„ Bar::Process ๅ‡ฝๆ•ฐๅฎŒๆˆๆ•ฐๆฎๆตๅˆ†ๆž"

็›ฎๅฝ•ๆŒ‚่ฝฝ

ๅฎนๅ™จ่ทฏๅพ„ ่ฏดๆ˜Ž
/data/target ๅช่ฏป๏ผŒๅพ…ๅˆ†ๆžๆบ็ ็›ฎๅฝ•
/data/config ๅช่ฏป๏ผŒconfig.json + models.json
/data/output ่ฏปๅ†™๏ผŒๅˆ†ๆž็ป“ๆžœ + ๆ—ฅๅฟ—ๅŽ‹็ผฉๅŒ…

่พ“ๅ‡บๆ ผๅผ

/data/output/
โ”œโ”€โ”€ flag                          # 0=ๆœชๅฎŒๆˆ/ๅคฑ่ดฅ, 1=PASSED
โ”œโ”€โ”€ <src>_<Func>.md               # ๅˆๅนถๅŽ็š„ๅฎŒๆ•ดๆ•ฐๆฎๆตๅˆ†ๆžๆŠฅๅ‘Š
โ””โ”€โ”€ <src>_<Func>_log.zip          # ๆ‰€ๆœ‰่ฝฎๆฌก็š„ Worker/Judge ไบคไบ’่ฎฐๅฝ•

CLI ่พ“ๅ‡บ็คบไพ‹

โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
  โ–ถ Leader::HandleCommissioningSet
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
    [Leader::HandleCommissioningSet] R1:
    [Leader::HandleCommissioningSet] W ........ W[โœ“] (245s)
    [Leader::HandleCommissioningSet] J ....  J[82] โœ…
      โ†’ โœ… 1/1 (420s)
  โ†’ 2 callees: SetCommissioningData, SendCommissioningSetResponse

  โ”œโ”€ [d1] SetCommissioningData       โ†โ”€โ”€ ๅนถ่กŒๅฏๅŠจ
  โ”œโ”€ [d1] SendCommissioningSetResponse โ†โ”€โ”€ ๅนถ่กŒๅฏๅŠจ

    [SetCommissioningData] R1:
    [SetCommissioningData] W ... W[โœ“] (180s)   โ†โ”€โ”€ ไบค้”™่พ“ๅ‡บ
    [SendCommissioningSetResponse] R1:
    [SendCommissioningSetResponse] W .... W[โœ“] (200s)
    ...

  ๐Ÿ”€ Merging 3 documents... โœ… (12.4KB)

โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
  โœ… PASSED  โ”‚  3 functions  โ”‚  820s
  ๐Ÿ“„ /data/output/network_data_leader_ftd_Leader__HandleCommissioningSet.md
  ๐Ÿ“ฆ /data/output/network_data_leader_ftd_Leader__HandleCommissioningSet_log.zip
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

extract_func ๅทฅๅ…ท

ๅ†…็ฝฎไบŽๅฎนๅ™จ็š„ๅ‡ฝๆ•ฐๆๅ–ๅทฅๅ…ท๏ผŒWorker Agent ๅฏ้€š่ฟ‡ bash ่ฐƒ็”จ๏ผŒ้ฟๅ…่ฏปๅ–ๆ•ดไธชๅคงๆ–‡ไปถใ€‚

# ๆๅ–ๆŒ‡ๅฎšๅ‡ฝๆ•ฐ
extract_func src-vul/openthread/src/core/thread/network_data_leader_ftd.cpp \
    Leader::HandleCommissioningSet

# ๅธฆไธŠไธ‹ๆ–‡๏ผˆๅ‰5่กŒ๏ผ‰
extract_func file.cpp process_packet --context 5

# ๅˆ—ๅ‡บๆ–‡ไปถไธญๆ‰€ๆœ‰ๅ‡ฝๆ•ฐ
extract_func file.cpp --list

่พ“ๅ‡บ็คบไพ‹๏ผš

// src-vul/.../network_data_leader_ftd.cpp  L228-L282  (55 lines)
otError Leader::HandleCommissioningSet(
    const Coap::Header &aHeader, Message &aMessage,
    const Ip6::MessageInfo &aMessageInfo)
{
    // ... ๅ‡ฝๆ•ฐๅฎŒๆ•ดไปฃ็  ...
}

้”™่ฏฏๅค„็†

้”™่ฏฏ็ฑปๅž‹ ่กŒไธบ
API ้™ๆต / ็ฝ‘็ปœ่ถ…ๆ—ถ ๆŒ‡ๆ•ฐ้€€้ฟ้‡่ฏ•๏ผŒๆœ€ๅคš agent_max_retries ๆฌก
pi ่ฟ›็จ‹ๅฏๅŠจๅคฑ่ดฅ ้‡่ฏ•ๆœ€ๅคš pi_max_retries ๆฌก๏ผˆ-1=ๆ— ้™๏ผ‰
ๆจกๅž‹ๆœชๆ‰พๅˆฐ / 401 ่‡ดๅ‘ฝ้”™่ฏฏ๏ผŒ็ซ‹ๅณ็ปˆๆญข๏ผŒไธ้‡่ฏ•
Node.js ๆจกๅ—็ผบๅคฑ ่‡ดๅ‘ฝ้”™่ฏฏ๏ผŒ็ซ‹ๅณ็ปˆๆญข
callee ๆ— ๅฎšไน‰ grep ้ข„ๆฃ€่ทณ่ฟ‡๏ผŒไธๅฏๅŠจ Worker+Judge ๆตๆฐด็บฟ
ๆ ‡ๅ‡†ๅบ“ๅ‡ฝๆ•ฐ _STDLIB_SKIP ้ป‘ๅๅ•่ฟ‡ๆปค๏ผˆmemcpy/malloc ็ญ‰ 40+ ๅ‡ฝๆ•ฐ๏ผ‰

ๅผ€ๅ‘

ๆœฌๅœฐ่ฟ่กŒ๏ผˆๆ—  Docker๏ผ‰

pip install -r requirements.txt
python3 cli.py --config config.example.json \
    --cwd /path/to/src \
    "ๅฏน foo.c ็š„ bar_func ๅฎŒๆˆๆ•ฐๆฎๆตๅˆ†ๆž"

ๆทปๅŠ ๆ–ฐ็š„ Worker/Judge ๆ็คบ่ฏ

ๅœจ prompts/workers/ ๆˆ– prompts/judges/ ็›ฎๅฝ•ไธญๆ”พ็ฝฎ .md ๆ–‡ไปถ๏ผŒๅœจ config ็š„ system_prompt_dir ๆŒ‡ๅ‘่ฏฅ็›ฎๅฝ•ๅณๅฏใ€‚ๅคšไธช Agent ๅฏ็”จๅ„่‡ช็›ฎๅฝ•ไธ‹ๅฏนๅบ”ๅบๅท็š„ๆ–‡ไปถ๏ผˆ0.md, 1.md๏ผŒๆˆ–ๅ…จ้ƒจไฝฟ็”จ default.md๏ผ‰ใ€‚

ๅ…ณ้”ฎ่ฎพ่ฎกๅ†ณ็ญ–

  • ไธไฝฟ็”จ pi grep ๅทฅๅ…ท๏ผšpi ็š„ grep ๅทฅๅ…ทๅœจๆ— ๅค–็ฝ‘ๆœๅŠกๅ™จไธŠ่ฟ่กŒๆ—ถไผšๅฐ่ฏ•ไธ‹่ฝฝ ripgrep๏ผŒๆ”น็”จ bash grep
  • Docker ไธ่ทŸ้šๅฎฟไธปๆœบ็ฌฆๅท้“พๆŽฅ๏ผšๆŒ‚่ฝฝ่ทฏๅพ„้กปไฝฟ็”จ readlink -f ่งฃๆž็œŸๅฎž่ทฏๅพ„
  • callee ๅนถ่กŒๅฎ‰ๅ…จ๏ผšasyncio ๅ•็บฟ็จ‹๏ผŒanalyzed set ๆ— ็ซžไบ‰๏ผŒ้œ€ๅœจ gather ๅ‰้ข„ๆณจๅ†Œ้˜ฒ้‡ๅค

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages