@ariso-ai/ivan 1.0.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.md +412 -0
- package/dist/agent.d.ts +11 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +48 -0
- package/dist/agent.js.map +1 -0
- package/dist/config/config.d.ts +20 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +187 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config.d.ts +46 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +414 -0
- package/dist/config.js.map +1 -0
- package/dist/database/database.d.ts +12 -0
- package/dist/database/database.d.ts.map +1 -0
- package/dist/database/database.js +45 -0
- package/dist/database/database.js.map +1 -0
- package/dist/database/migration.d.ts +11 -0
- package/dist/database/migration.d.ts.map +1 -0
- package/dist/database/migration.js +64 -0
- package/dist/database/migration.js.map +1 -0
- package/dist/database/migrations/001_create_jobs_table.d.ts +3 -0
- package/dist/database/migrations/001_create_jobs_table.d.ts.map +1 -0
- package/dist/database/migrations/001_create_jobs_table.js +14 -0
- package/dist/database/migrations/001_create_jobs_table.js.map +1 -0
- package/dist/database/migrations/001_initial_schema.d.ts +3 -0
- package/dist/database/migrations/001_initial_schema.d.ts.map +1 -0
- package/dist/database/migrations/001_initial_schema.js +66 -0
- package/dist/database/migrations/001_initial_schema.js.map +1 -0
- package/dist/database/migrations/002_create_tasks_table.d.ts +3 -0
- package/dist/database/migrations/002_create_tasks_table.d.ts.map +1 -0
- package/dist/database/migrations/002_create_tasks_table.js +16 -0
- package/dist/database/migrations/002_create_tasks_table.js.map +1 -0
- package/dist/database/migrations/003_add_log_to_tasks.d.ts +3 -0
- package/dist/database/migrations/003_add_log_to_tasks.d.ts.map +1 -0
- package/dist/database/migrations/003_add_log_to_tasks.js +11 -0
- package/dist/database/migrations/003_add_log_to_tasks.js.map +1 -0
- package/dist/database/migrations/004_add_branch_to_tasks.d.ts +3 -0
- package/dist/database/migrations/004_add_branch_to_tasks.d.ts.map +1 -0
- package/dist/database/migrations/004_add_branch_to_tasks.js +11 -0
- package/dist/database/migrations/004_add_branch_to_tasks.js.map +1 -0
- package/dist/database/migrations/005_add_type_to_tasks.d.ts +3 -0
- package/dist/database/migrations/005_add_type_to_tasks.d.ts.map +1 -0
- package/dist/database/migrations/005_add_type_to_tasks.js +11 -0
- package/dist/database/migrations/005_add_type_to_tasks.js.map +1 -0
- package/dist/database/migrations/006_add_comment_url_and_commit_to_tasks.d.ts +3 -0
- package/dist/database/migrations/006_add_comment_url_and_commit_to_tasks.d.ts.map +1 -0
- package/dist/database/migrations/006_add_comment_url_and_commit_to_tasks.js +15 -0
- package/dist/database/migrations/006_add_comment_url_and_commit_to_tasks.js.map +1 -0
- package/dist/database/migrations/006_add_comment_url_to_tasks.d.ts +3 -0
- package/dist/database/migrations/006_add_comment_url_to_tasks.d.ts.map +1 -0
- package/dist/database/migrations/006_add_comment_url_to_tasks.js +14 -0
- package/dist/database/migrations/006_add_comment_url_to_tasks.js.map +1 -0
- package/dist/database/migrations/007_add_commit_to_tasks.d.ts +3 -0
- package/dist/database/migrations/007_add_commit_to_tasks.d.ts.map +1 -0
- package/dist/database/migrations/007_add_commit_to_tasks.js +13 -0
- package/dist/database/migrations/007_add_commit_to_tasks.js.map +1 -0
- package/dist/database/migrations/008_add_lint_and_test_task_type.d.ts +3 -0
- package/dist/database/migrations/008_add_lint_and_test_task_type.d.ts.map +1 -0
- package/dist/database/migrations/008_add_lint_and_test_task_type.js +42 -0
- package/dist/database/migrations/008_add_lint_and_test_task_type.js.map +1 -0
- package/dist/database/migrations/index.d.ts +3 -0
- package/dist/database/migrations/index.d.ts.map +1 -0
- package/dist/database/migrations/index.js +19 -0
- package/dist/database/migrations/index.js.map +1 -0
- package/dist/database/types.d.ts +34 -0
- package/dist/database/types.d.ts.map +1 -0
- package/dist/database/types.js +2 -0
- package/dist/database/types.js.map +1 -0
- package/dist/database.d.ts +13 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +32 -0
- package/dist/database.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +285 -0
- package/dist/index.js.map +1 -0
- package/dist/scripts/task-executor.d.ts +3 -0
- package/dist/scripts/task-executor.d.ts.map +1 -0
- package/dist/scripts/task-executor.js +139 -0
- package/dist/scripts/task-executor.js.map +1 -0
- package/dist/scripts/task-planner.d.ts +3 -0
- package/dist/scripts/task-planner.d.ts.map +1 -0
- package/dist/scripts/task-planner.js +81 -0
- package/dist/scripts/task-planner.js.map +1 -0
- package/dist/services/address-executor.d.ts +13 -0
- package/dist/services/address-executor.d.ts.map +1 -0
- package/dist/services/address-executor.js +202 -0
- package/dist/services/address-executor.js.map +1 -0
- package/dist/services/address-task-executor.d.ts +19 -0
- package/dist/services/address-task-executor.d.ts.map +1 -0
- package/dist/services/address-task-executor.js +736 -0
- package/dist/services/address-task-executor.js.map +1 -0
- package/dist/services/claude-cli-executor.d.ts +14 -0
- package/dist/services/claude-cli-executor.d.ts.map +1 -0
- package/dist/services/claude-cli-executor.js +241 -0
- package/dist/services/claude-cli-executor.js.map +1 -0
- package/dist/services/claude-executor.d.ts +14 -0
- package/dist/services/claude-executor.d.ts.map +1 -0
- package/dist/services/claude-executor.js +274 -0
- package/dist/services/claude-executor.js.map +1 -0
- package/dist/services/claude-planner.d.ts +15 -0
- package/dist/services/claude-planner.d.ts.map +1 -0
- package/dist/services/claude-planner.js +107 -0
- package/dist/services/claude-planner.js.map +1 -0
- package/dist/services/docker-orchestrator.d.ts +11 -0
- package/dist/services/docker-orchestrator.d.ts.map +1 -0
- package/dist/services/docker-orchestrator.js +85 -0
- package/dist/services/docker-orchestrator.js.map +1 -0
- package/dist/services/executor-factory.d.ts +14 -0
- package/dist/services/executor-factory.d.ts.map +1 -0
- package/dist/services/executor-factory.js +14 -0
- package/dist/services/executor-factory.js.map +1 -0
- package/dist/services/git-manager.d.ts +36 -0
- package/dist/services/git-manager.d.ts.map +1 -0
- package/dist/services/git-manager.js +728 -0
- package/dist/services/git-manager.js.map +1 -0
- package/dist/services/index.d.ts +9 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +9 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/job-manager.d.ts +30 -0
- package/dist/services/job-manager.d.ts.map +1 -0
- package/dist/services/job-manager.js +337 -0
- package/dist/services/job-manager.js.map +1 -0
- package/dist/services/openai-service.d.ts +14 -0
- package/dist/services/openai-service.d.ts.map +1 -0
- package/dist/services/openai-service.js +186 -0
- package/dist/services/openai-service.js.map +1 -0
- package/dist/services/pr-service.d.ts +31 -0
- package/dist/services/pr-service.d.ts.map +1 -0
- package/dist/services/pr-service.js +291 -0
- package/dist/services/pr-service.js.map +1 -0
- package/dist/services/repository-manager.d.ts +12 -0
- package/dist/services/repository-manager.d.ts.map +1 -0
- package/dist/services/repository-manager.js +101 -0
- package/dist/services/repository-manager.js.map +1 -0
- package/dist/services/task-executor.d.ts +20 -0
- package/dist/services/task-executor.d.ts.map +1 -0
- package/dist/services/task-executor.js +717 -0
- package/dist/services/task-executor.js.map +1 -0
- package/dist/types/non-interactive-config.d.ts +28 -0
- package/dist/types/non-interactive-config.d.ts.map +1 -0
- package/dist/types/non-interactive-config.js +2 -0
- package/dist/types/non-interactive-config.js.map +1 -0
- package/dist/web-server.d.ts +16 -0
- package/dist/web-server.d.ts.map +1 -0
- package/dist/web-server.js +488 -0
- package/dist/web-server.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address-task-executor.js","sourceRoot":"","sources":["../../src/services/address-task-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAmB,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,OAAO,mBAAmB;IACtB,UAAU,CAAa;IACvB,UAAU,GAAsB,IAAI,CAAC;IACrC,cAAc,GAA2B,IAAI,CAAC;IAC9C,aAAa,GAAyB,IAAI,CAAC;IAC3C,aAAa,CAAgB;IAC7B,SAAS,GAAqB,IAAI,CAAC;IACnC,UAAU,CAAS;IACnB,gBAAgB,CAAqB;IAE7C;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,KAAa;QACrC,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,wBAAwB;YACxB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,8BAA8B,EAAE,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;YAEzD,8CAA8C;YAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,MAAM,EAAE;iBACjB,UAAU,CAAC,MAAM,CAAC;iBAClB,SAAS,EAAE;iBACX,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;iBACrC,gBAAgB,EAAE,CAAC;YAEtB,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEhD,IAAI,CAAC,UAAU,CAAC,6BAA6B,EAAE,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;YAEtD,IAAI,CAAC,UAAU,CAAC,+BAA+B,EAAE,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;YAE1D,+BAA+B;YAC/B,IAAI,CAAC,gBAAgB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEtF,wBAAwB;YACxB,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;gBACxC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC/B,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAChC,CAAC;gBACD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACxC,IAAI,KAAK,EAAE,CAAC;oBACV,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;YAED,kCAAkC;YAClC,KAAK,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,aAAa,EAAE,CAAC;gBAClD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC,CAAC;oBAC3E,SAAS;gBACX,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oCAAoC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAE3E,IAAI,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;gBAClD,IAAI,YAAY,GAAkB,IAAI,CAAC;gBAEvC,IAAI,CAAC;oBACH,iCAAiC;oBACjC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;wBACrB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;oBAChD,CAAC;oBACD,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;oBAC5D,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;oBAC/C,OAAO,CAAC,OAAO,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;gBACvD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,yCAAyC,MAAM,EAAE,CAAC,CAAC;oBAChE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACrB,SAAS;gBACX,CAAC;gBAED,wCAAwC;gBACxC,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;gBAC7E,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;gBAEnE,oCAAoC;gBACpC,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;oBAE5D,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAE5D,0CAA0C;oBAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBAC1D,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAEvE,OAAO,GAAG,GAAG,CAAC,iCAAiC,CAAC,CAAC,KAAK,EAAE,CAAC;oBAEzD,IAAI,UAAU,GAAG,EAAE,CAAC;oBACpB,IAAI,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;wBACnC,IAAI,CAAC;4BACH,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;4BACrE,IAAI,UAAU,EAAE,CAAC;gCACf,OAAO,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;4BACjD,CAAC;iCAAM,CAAC;gCACN,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;4BAC/C,CAAC;wBACH,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;4BACpD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBACvB,CAAC;oBACH,CAAC;oBAED,OAAO,GAAG,GAAG,CAAC,sDAAsD,CAAC,CAAC,KAAK,EAAE,CAAC;oBAE9E,gCAAgC;oBAChC,IAAI,MAAM,GAAG,0DAA0D,CAAC;oBACxE,MAAM,IAAI,oDAAoD,CAAC;oBAC/D,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,0CAA0C,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC;oBAE5F,+CAA+C;oBAC/C,IAAI,UAAU,EAAE,CAAC;wBACf,MAAM,IAAI,uCAAuC,CAAC;wBAClD,MAAM,IAAI,UAAU,CAAC;wBACrB,MAAM,IAAI,2BAA2B,CAAC;oBACxC,CAAC;oBAED,MAAM,IAAI,iHAAiH,CAAC;oBAC5H,MAAM,IAAI,qEAAqE,CAAC;oBAEhF,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBAC1B,MAAM,IAAI,0CAA0C,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC9E,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;wBACnG,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;wBAEnD,MAAM,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;wBAEpE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;4BACrB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;wBAChD,CAAC;wBACD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;wBACvD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;4BACjD,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;4BAC/D,SAAS;wBACX,CAAC;wBAED,+BAA+B;wBAC/B,OAAO,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;wBAC5C,MAAM,aAAa,GAAG,gGAAgG,CAAC;wBAEvH,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;4BACrB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;wBAChD,CAAC;wBAED,mDAAmD;wBACnD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAChD,aAAa,EACb,IAAI,EACJ,YAAY,IAAI,IAAI,CAAC,UAAU,EAC/B,OAAO,CACR,CAAC;wBAEF,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;4BAC3B,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;wBACvC,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;4BACzD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;wBACjE,CAAC;wBAED,sBAAsB;wBACtB,MAAM,UAAU,GAAG,QAAQ,CAAC,oBAAoB,EAAE;4BAChD,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU;4BACpC,QAAQ,EAAE,OAAO;yBAClB,CAAC,CAAC,IAAI,EAAE,CAAC;wBAEV,2BAA2B;wBAC3B,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;wBAE9D,8BAA8B;wBAC9B,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;wBAC3C,IAAI,CAAC;4BACH,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gCACrB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;4BAChD,CAAC;4BACD,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;4BACzC,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;wBAChD,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;4BACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBACvB,CAAC;wBAED,4CAA4C;wBAC5C,IAAI,YAAY,EAAE,CAAC;4BACjB,OAAO,GAAG,GAAG,CAAC,kCAAkC,CAAC,CAAC,KAAK,EAAE,CAAC;4BAC1D,IAAI,CAAC;gCACH,MAAM,aAAa,GAAG,iGAAiG,CAAC;gCAExH,QAAQ,CACN,iBAAiB,YAAY,YAAY,aAAa,GAAG,EACzD;oCACE,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU;oCACpC,KAAK,EAAE,MAAM;iCACd,CACF,CAAC;gCACF,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;4BAClD,CAAC;4BAAC,OAAO,KAAK,EAAE,CAAC;gCACf,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;gCAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;4BACvB,CAAC;wBACH,CAAC;wBAED,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oBAEjE,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;wBACrD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBAErB,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACxE,MAAM,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,QAAQ,EAAE,CAAC,CAAC;wBAC9E,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;oBACnE,CAAC;gBACH,CAAC;gBAED,qDAAqD;gBACrD,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC9D,IAAI,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC;oBACvE,SAAS;gBACX,CAAC;gBACD,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAE7C,wDAAwD;gBACxD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9B,SAAS;gBACX,CAAC;gBAED,2CAA2C;gBAC3C,OAAO,GAAG,GAAG,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;gBACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACzC,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACvE,OAAO,CAAC,OAAO,CAAC,SAAS,QAAQ,CAAC,MAAM,uBAAuB,CAAC,CAAC;gBAEjE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;oBACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,CAAC;oBAC/D,SAAS;gBACX,CAAC;gBAED,uBAAuB;gBACvB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBAE3G,8BAA8B;oBAC9B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACjC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;wBACtC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CACtD,CAAC;oBAEF,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAAC;wBAChE,SAAS;oBACX,CAAC;oBAED,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAE5D,mBAAmB;oBACnB,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;wBACf,MAAM,QAAQ,GAAG,QAAQ,CACvB,gCAAgC,EAChC;4BACE,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU;4BACpC,QAAQ,EAAE,OAAO;yBAClB,CACF,CAAC;wBACF,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;wBACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;4BACd,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;wBACzC,CAAC;wBACD,MAAM,UAAU,GAAG,sBAAsB,KAAK,CAAC,KAAK,IAAI,QAAQ,SAAS,QAAQ,gBAAgB,OAAO,CAAC,EAAE,EAAE,CAAC;wBAC9G,MAAM,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;oBACpE,CAAC;oBAED,OAAO,GAAG,GAAG,CAAC,2CAA2C,CAAC,CAAC,KAAK,EAAE,CAAC;oBAEnE,gCAAgC;oBAChC,IAAI,MAAM,GAAG,8CAA8C,CAAC;oBAC5D,MAAM,IAAI,iBAAiB,OAAO,CAAC,MAAM,OAAO,OAAO,CAAC,IAAI,OAAO,CAAC;oBAEpE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACjB,MAAM,IAAI,SAAS,OAAO,CAAC,IAAI,EAAE,CAAC;wBAClC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;4BACjB,MAAM,IAAI,UAAU,OAAO,CAAC,IAAI,GAAG,CAAC;wBACtC,CAAC;wBACD,MAAM,IAAI,MAAM,CAAC;oBACnB,CAAC;oBAED,MAAM,IAAI,4DAA4D,CAAC;oBAEvE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBAC1B,MAAM,IAAI,0CAA0C,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC9E,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;wBACnG,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;wBAEnD,MAAM,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;wBAEpE,8CAA8C;wBAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;wBAEvC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;4BACrB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;wBAChD,CAAC;wBACD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;wBACvD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gEAAgE,CAAC,CAAC,CAAC;4BAE5F,2DAA2D;4BAC3D,OAAO,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;4BAChD,IAAI,CAAC;gCACH,6EAA6E;gCAC7E,MAAM,SAAS,GAAG,KAAK,CAAC;gCACxB,IAAI,SAAS,GAAG,SAAS,WAAW,IAAI,0EAA0E,EAAE,CAAC;gCAErH,IAAI,SAAS,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;oCACjC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,6BAA6B,CAAC;gCAChF,CAAC;gCAED,sDAAsD;gCACtD,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gCACzD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;gCACtC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gCACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gCAElE,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gCAEnC,IAAI,CAAC;oCACH,2DAA2D;oCAC3D,MAAM,QAAQ,GAAG,QAAQ,CACvB,gCAAgC,EAChC;wCACE,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU;wCACpC,QAAQ,EAAE,OAAO;qCAClB,CACF,CAAC;oCACF,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oCAEvD,4CAA4C;oCAC5C,MAAM,WAAW,GAAG;;2CAEK,KAAK,CAAC,KAAK,aAAa,QAAQ;8CAC7B,QAAQ;;;;;;;;;;;;;;mBAcnC,CAAC;oCAEF,MAAM,YAAY,GAAG,QAAQ,CAC3B,4BAA4B,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EACjE;wCACE,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU;wCACpC,QAAQ,EAAE,OAAO;qCAClB,CACF,CAAC;oCAEF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;oCAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC;oCAErF,0CAA0C;oCAC1C,IAAI,QAAQ,GAAG,IAAI,CAAC;oCACpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;wCAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC;wCAC9C,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAA0B,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;4CAC3F,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;4CACrB,MAAM;wCACR,CAAC;oCACH,CAAC;oCAED,IAAI,CAAC,QAAQ,EAAE,CAAC;wCACd,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;oCAC9D,CAAC;oCAED,mCAAmC;oCACnC,MAAM,QAAQ,GAAG;;;sDAGmB,QAAQ;gCAC9B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;;;;;mBAOtC,CAAC;oCAEF,QAAQ,CACN,4BAA4B,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAC9D;wCACE,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU;wCACpC,KAAK,EAAE,MAAM;qCACd,CACF,CAAC;oCACF,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;gCAC5C,CAAC;wCAAS,CAAC;oCACT,UAAU,CAAC,QAAQ,CAAC,CAAC;gCACvB,CAAC;4BACH,CAAC;4BAAC,OAAO,KAAK,EAAE,CAAC;gCACf,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;gCAC3C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;4BACvB,CAAC;4BAED,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;4BAC/D,SAAS;wBACX,CAAC;wBAED,+BAA+B;wBAC/B,OAAO,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;wBAC5C,MAAM,aAAa,GAAG,gCAAgC,OAAO,CAAC,MAAM;;EAE9E,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;;iEAER,CAAC;wBAEtD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;4BACrB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;wBAChD,CAAC;wBAED,mDAAmD;wBACnD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAChD,aAAa,EACb,IAAI,EACJ,YAAY,IAAI,IAAI,CAAC,UAAU,EAC/B,OAAO,CACR,CAAC;wBAEF,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;4BAC3B,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;wBACvC,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;4BACzD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;wBACjE,CAAC;wBAED,sBAAsB;wBACtB,MAAM,UAAU,GAAG,QAAQ,CAAC,oBAAoB,EAAE;4BAChD,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU;4BACpC,QAAQ,EAAE,OAAO;yBAClB,CAAC,CAAC,IAAI,EAAE,CAAC;wBAEV,2BAA2B;wBAC3B,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;wBAE9D,8BAA8B;wBAC9B,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;wBAC3C,IAAI,CAAC;4BACH,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gCACrB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;4BAChD,CAAC;4BACD,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;4BACzC,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;wBAChD,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;4BACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBACvB,CAAC;wBAED,oCAAoC;wBACpC,OAAO,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;wBAChD,IAAI,CAAC;4BACH,6EAA6E;4BAC7E,MAAM,SAAS,GAAG,KAAK,CAAC;4BACxB,IAAI,SAAS,GAAG,WAAW;gCACzB,CAAC,CAAC,SAAS,WAAW,yCAAyC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;gCAC3F,CAAC,CAAC,2CAA2C,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;4BAE5E,IAAI,SAAS,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;gCACjC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,iCAAiC;oCAC/E,qCAAqC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;4BACtE,CAAC;4BAED,2DAA2D;4BAC3D,MAAM,QAAQ,GAAG,QAAQ,CACvB,gCAAgC,EAChC;gCACE,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU;gCACpC,QAAQ,EAAE,OAAO;6BAClB,CACF,CAAC;4BACF,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;4BAEvD,4CAA4C;4BAC5C,MAAM,WAAW,GAAG;;uCAEK,KAAK,CAAC,KAAK,aAAa,QAAQ;0CAC7B,QAAQ;;;;;;;;;;;;;;eAcnC,CAAC;4BAEF,MAAM,YAAY,GAAG,QAAQ,CAC3B,4BAA4B,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EACjE;gCACE,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU;gCACpC,QAAQ,EAAE,OAAO;6BAClB,CACF,CAAC;4BAEF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;4BAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC;4BAErF,0CAA0C;4BAC1C,IAAI,QAAQ,GAAG,IAAI,CAAC;4BACpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gCAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC;gCAC9C,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAA0B,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;oCAC3F,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;oCACrB,MAAM;gCACR,CAAC;4BACH,CAAC;4BAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gCACd,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;4BAC9D,CAAC;4BAED,mCAAmC;4BACnC,MAAM,QAAQ,GAAG;;;kDAGmB,QAAQ;4BAC9B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;;;;;;eAOtC,CAAC;4BAEF,QAAQ,CACN,4BAA4B,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAC9D;gCACE,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU;gCACpC,KAAK,EAAE,MAAM;6BACd,CACF,CAAC;4BACF,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;wBAC5C,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;4BAC3C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBACvB,CAAC;wBAED,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oBAEjE,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;wBAC1C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBAErB,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACxE,MAAM,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,QAAQ,EAAE,CAAC,CAAC;wBAC9E,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;oBACnE,CAAC;gBACH,CAAC;gBAED,0FAA0F;gBAC1F,IAAI,QAAQ,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;oBACzE,OAAO,GAAG,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;oBACtD,IAAI,CAAC;wBACH,gCAAgC;wBAChC,MAAM,YAAY,GAAG,QAAQ,CAAC,oBAAoB,EAAE;4BAClD,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU;4BACpC,QAAQ,EAAE,OAAO;yBAClB,CAAC,CAAC,IAAI,EAAE,CAAC;wBAEV,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,YAAY,0BAA0B,EAAE;4BAC9E,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU;4BACpC,QAAQ,EAAE,OAAO;yBAClB,CAAC,CAAC;wBAEH,MAAM,YAAY,GAAG,QAAQ,CAAC,oCAAoC,YAAY,EAAE,EAAE;4BAChF,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU;4BACpC,QAAQ,EAAE,OAAO;yBAClB,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;wBAEtC,qDAAqD;wBACrD,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAC9D,UAAU,EACV,YAAY,EACZ,QAAQ,CAAC,QAAQ,CAAC,CACnB,CAAC;wBAEF,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;wBAE5C,yBAAyB;wBACzB,OAAO,GAAG,GAAG,CAAC,kCAAkC,CAAC,CAAC,KAAK,EAAE,CAAC;wBAC1D,MAAM,aAAa,GAAG,UAAU,kBAAkB,EAAE,CAAC;wBAErD,QAAQ,CACN,iBAAiB,QAAQ,YAAY,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAC1E;4BACE,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU;4BACpC,KAAK,EAAE,MAAM;yBACd,CACF,CAAC;wBACF,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;oBAClD,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;wBAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC;gBAED,4CAA4C;gBAC5C,IAAI,IAAI,CAAC,UAAU,IAAI,YAAY,EAAE,CAAC;oBACpC,IAAI,CAAC;wBACH,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;wBACtC,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;oBAC/C,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC,CAAC;oBACxE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAEnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,EAAE,KAAK,CAAC,CAAC;YACnE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,QAAgB;QAQnD,IAAI,CAAC;YACH,6BAA6B;YAC7B,MAAM,QAAQ,GAAG,QAAQ,CACvB,gCAAgC,EAChC;gBACE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,UAAU;gBAC/D,QAAQ,EAAE,OAAO;aAClB,CACF,CAAC;YACF,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAEvD,yDAAyD;YACzD,MAAM,YAAY,GAAG;;+BAEI,KAAK,CAAC,KAAK,aAAa,QAAQ;kCAC7B,QAAQ;;;;;;;;;;;;;;;;;;;;;;OAsBnC,CAAC;YAEF,MAAM,aAAa,GAAG,QAAQ,CAC5B,4BAA4B,YAAY,GAAG,EAC3C;gBACE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,UAAU;gBAC/D,QAAQ,EAAE,OAAO;aAClB,CACF,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC;YACjF,MAAM,mBAAmB,GAOpB,EAAE,CAAC;YAER,sBAAsB;YACtB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,wBAAwB;gBACxB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtB,SAAS;gBACX,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBAED,kDAAkD;gBAClD,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAEjC,+DAA+D;gBAC/D,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;gBAEvC,IAAI,CAAC,UAAU,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;oBACrC,8EAA8E;oBAC9E,mBAAmB,CAAC,IAAI,CAAC;wBACvB,EAAE,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE;wBAClF,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK;wBACjC,IAAI,EAAE,YAAY,CAAC,IAAI;wBACvB,SAAS,EAAE,YAAY,CAAC,SAAS;wBACjC,IAAI,EAAE,YAAY,CAAC,IAAI;wBACvB,IAAI,EAAE,YAAY,CAAC,IAAI;qBACxB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,0BAA0B,CACtC,IAAY,EACZ,YAAsB,EACtB,SAAiB;QAEjB,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC;YAE/C,MAAM,MAAM,GAAG;;;;EAInB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAGvB,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;qHASuC,CAAC;YAEhH,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACtD,KAAK,EAAE,aAAa;gBACpB,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,8FAA8F;qBACxG;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,MAAM;qBAChB;iBACF;gBACD,WAAW,EAAE,GAAG;gBAChB,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAEtE,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,8FAA8F,CAAC;YACxG,CAAC;YAED,OAAO,aAAa,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;YAC9D,gDAAgD;YAChD,OAAO,8FAA8F,CAAC;QACxG,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,aAAqB,EACrB,IAAU,EACV,UAAkB,EAClB,OAAY;QAEZ,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,MAAM,iBAAiB,GAAG,CAAC,CAAC;QAC5B,IAAI,eAAe,GAAG,KAAK,CAAC;QAE5B,OAAO,cAAc,GAAG,iBAAiB,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9D,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;oBACrB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAChD,CAAC;gBACD,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;gBACnD,eAAe,GAAG,IAAI,CAAC;gBACvB,qCAAqC;gBACrC,IAAI,cAAc,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;oBAC7C,OAAO,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;gBACrB,cAAc,EAAE,CAAC;gBAEjB,MAAM,YAAY,GAAG,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAE9F,6CAA6C;gBAC7C,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,cAAc,GAAG,iBAAiB,EAAE,CAAC;oBAC9E,OAAO,CAAC,IAAI,CAAC,mCAAmC,cAAc,IAAI,iBAAiB,GAAG,CAAC,CAAC;oBACxF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC,CAAC;oBAE3E,kDAAkD;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC;oBAElC,8CAA8C;oBAC9C,MAAM,SAAS,GAAG,gDAAgD,YAAY,qGAAqG,CAAC;oBAEpL,OAAO,GAAG,GAAG,CAAC,4CAA4C,CAAC,CAAC,KAAK,EAAE,CAAC;oBAEpE,IAAI,CAAC;wBACH,+BAA+B;wBAC/B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;wBACpF,OAAO,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;wBAEtD,gDAAgD;wBAChD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACzE,MAAM,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAC1C,IAAI,CAAC,IAAI,EACT,GAAG,WAAW,kCAAkC,cAAc,SAAS,SAAS,CAAC,GAAG,EAAE,CACvF,CAAC;wBAEF,4CAA4C;wBAC5C,OAAO,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;oBAC9C,CAAC;oBAAC,OAAO,QAAQ,EAAE,CAAC;wBAClB,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;wBACnD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,QAAQ,CAAC,CAAC;wBACjE,MAAM,WAAW,CAAC,CAAC,8BAA8B;oBACnD,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,iDAAiD;oBACjD,MAAM,WAAW,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;IACxC,CAAC;CAEF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IClaudeExecutor } from './executor-factory.js';
|
|
2
|
+
export declare class ClaudeCliExecutor implements IClaudeExecutor {
|
|
3
|
+
private configManager;
|
|
4
|
+
constructor();
|
|
5
|
+
private checkClaudeCliInstalled;
|
|
6
|
+
executeTask(taskDescription: string, workingDir: string, sessionId?: string): Promise<{
|
|
7
|
+
log: string;
|
|
8
|
+
lastMessage: string;
|
|
9
|
+
sessionId: string;
|
|
10
|
+
}>;
|
|
11
|
+
generateTaskBreakdown(jobDescription: string, workingDir: string): Promise<string[]>;
|
|
12
|
+
validateClaudeCodeInstallation(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=claude-cli-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-cli-executor.d.ts","sourceRoot":"","sources":["../../src/services/claude-cli-executor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,qBAAa,iBAAkB,YAAW,eAAe;IACvD,OAAO,CAAC,aAAa,CAAgB;;IAMrC,OAAO,CAAC,uBAAuB;IASzB,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAiJ9I,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA8GpF,8BAA8B,IAAI,OAAO,CAAC,IAAI,CAAC;CAMtD"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { ConfigManager } from '../config.js';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { execSync } from 'child_process';
|
|
6
|
+
export class ClaudeCliExecutor {
|
|
7
|
+
configManager;
|
|
8
|
+
constructor() {
|
|
9
|
+
this.configManager = new ConfigManager();
|
|
10
|
+
}
|
|
11
|
+
checkClaudeCliInstalled() {
|
|
12
|
+
try {
|
|
13
|
+
execSync('which claude', { stdio: 'ignore' });
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async executeTask(taskDescription, workingDir, sessionId) {
|
|
21
|
+
console.log(chalk.blue(`š¤ Executing task with Claude Code CLI: ${taskDescription}`));
|
|
22
|
+
console.log(chalk.yellow('š” Press Ctrl+C to cancel the task'));
|
|
23
|
+
// Check if Claude CLI is installed
|
|
24
|
+
if (!this.checkClaudeCliInstalled()) {
|
|
25
|
+
throw new Error('Claude CLI is not installed. Please install it first or use the SDK executor.');
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
// Determine the original repo path (in case we're in a worktree)
|
|
29
|
+
let originalRepoPath = workingDir;
|
|
30
|
+
// Check if we're in a worktree by looking for .git file (not directory)
|
|
31
|
+
try {
|
|
32
|
+
const gitPath = path.join(workingDir, '.git');
|
|
33
|
+
const gitInfo = execSync(`cat "${gitPath}"`, { encoding: 'utf8' }).trim();
|
|
34
|
+
if (gitInfo.startsWith('gitdir:')) {
|
|
35
|
+
// We're in a worktree, extract the main repo path
|
|
36
|
+
const gitDirPath = gitInfo.replace('gitdir:', '').trim();
|
|
37
|
+
// Go up from .git/worktrees/<name> to get the main repo
|
|
38
|
+
if (gitDirPath.includes('/worktrees/')) {
|
|
39
|
+
originalRepoPath = path.resolve(gitDirPath, '../../..');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Not a worktree or couldn't determine, use workingDir as-is
|
|
45
|
+
}
|
|
46
|
+
// Get repository-specific allowed tools using the original repo path
|
|
47
|
+
const allowedTools = await this.configManager.getRepoAllowedTools(originalRepoPath);
|
|
48
|
+
// Get the selected model
|
|
49
|
+
const model = this.configManager.getClaudeModel();
|
|
50
|
+
console.log(chalk.gray(`Working directory: ${workingDir}`));
|
|
51
|
+
console.log(chalk.gray(`Model: ${model}`));
|
|
52
|
+
if (allowedTools && allowedTools.length > 0) {
|
|
53
|
+
console.log(chalk.gray(`Allowed tools: ${allowedTools.join(', ')}`));
|
|
54
|
+
}
|
|
55
|
+
console.log(chalk.yellow('ā³ Starting Claude Code CLI execution...'));
|
|
56
|
+
let lastMessage = '';
|
|
57
|
+
const currentSessionId = sessionId || '';
|
|
58
|
+
// Build Claude CLI arguments - options must come before the prompt
|
|
59
|
+
const args = [
|
|
60
|
+
'--print', // Non-interactive mode
|
|
61
|
+
'--model', model,
|
|
62
|
+
'--permission-mode', 'bypassPermissions' // Skip permission prompts
|
|
63
|
+
];
|
|
64
|
+
// Add allowed tools if specified
|
|
65
|
+
if (allowedTools && allowedTools.length > 0 && !allowedTools.includes('*')) {
|
|
66
|
+
args.push('--allowed-tools', ...allowedTools);
|
|
67
|
+
}
|
|
68
|
+
// Add resume flag if we have a session ID
|
|
69
|
+
if (sessionId) {
|
|
70
|
+
args.push('--resume', sessionId);
|
|
71
|
+
}
|
|
72
|
+
// Add the task description as the last argument (after all options)
|
|
73
|
+
args.push(taskDescription);
|
|
74
|
+
return new Promise((resolve, reject) => {
|
|
75
|
+
// Spawn the Claude CLI process with inherited stdio for real-time output
|
|
76
|
+
const claudeProcess = spawn('claude', args, {
|
|
77
|
+
cwd: workingDir,
|
|
78
|
+
stdio: ['ignore', 'pipe', 'pipe']
|
|
79
|
+
});
|
|
80
|
+
let fullOutput = '';
|
|
81
|
+
let stderr = '';
|
|
82
|
+
// Handle stdout - stream output in real-time
|
|
83
|
+
claudeProcess.stdout.on('data', (data) => {
|
|
84
|
+
const output = data.toString();
|
|
85
|
+
fullOutput += output;
|
|
86
|
+
// Stream output directly to console in real-time
|
|
87
|
+
process.stdout.write(output);
|
|
88
|
+
// Track the last non-empty line as lastMessage
|
|
89
|
+
const lines = output.split('\n').filter((line) => line.trim());
|
|
90
|
+
if (lines.length > 0) {
|
|
91
|
+
lastMessage = lines[lines.length - 1].trim();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
// Handle stderr - stream in real-time as well
|
|
95
|
+
claudeProcess.stderr.on('data', (data) => {
|
|
96
|
+
const output = data.toString();
|
|
97
|
+
stderr += output;
|
|
98
|
+
// Stream stderr to console (it may contain useful status info)
|
|
99
|
+
process.stderr.write(chalk.gray(output));
|
|
100
|
+
});
|
|
101
|
+
// Handle process exit
|
|
102
|
+
claudeProcess.on('close', (code) => {
|
|
103
|
+
if (code === 0) {
|
|
104
|
+
console.log(chalk.green('ā
Claude Code CLI execution completed'));
|
|
105
|
+
resolve({ log: fullOutput, lastMessage, sessionId: currentSessionId });
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
console.error(chalk.red('ā Claude Code CLI execution failed'));
|
|
109
|
+
if (stderr) {
|
|
110
|
+
console.error(chalk.red('Error output:'), stderr);
|
|
111
|
+
}
|
|
112
|
+
reject(new Error(`Claude CLI exited with code ${code}: ${stderr}`));
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
// Handle process errors
|
|
116
|
+
claudeProcess.on('error', (error) => {
|
|
117
|
+
console.error(chalk.red('ā Failed to start Claude CLI'));
|
|
118
|
+
reject(new Error(`Failed to start Claude CLI: ${error.message}`));
|
|
119
|
+
});
|
|
120
|
+
// Handle Ctrl+C
|
|
121
|
+
const handleInterrupt = () => {
|
|
122
|
+
claudeProcess.kill('SIGINT');
|
|
123
|
+
console.log(chalk.yellow('\nā ļø Task cancelled by user (Ctrl+C)'));
|
|
124
|
+
reject(new Error('Task execution cancelled by user'));
|
|
125
|
+
};
|
|
126
|
+
process.on('SIGINT', handleInterrupt);
|
|
127
|
+
// Clean up handler when process exits
|
|
128
|
+
claudeProcess.on('close', () => {
|
|
129
|
+
process.removeListener('SIGINT', handleInterrupt);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
const err = error;
|
|
135
|
+
if (err.message?.includes('cancel')) {
|
|
136
|
+
throw new Error('Task execution cancelled by user');
|
|
137
|
+
}
|
|
138
|
+
console.error(chalk.red('ā Claude Code CLI execution failed:'));
|
|
139
|
+
throw new Error(`Claude Code CLI execution failed: ${err.message}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
async generateTaskBreakdown(jobDescription, workingDir) {
|
|
143
|
+
// Check if Claude CLI is installed
|
|
144
|
+
if (!this.checkClaudeCliInstalled()) {
|
|
145
|
+
throw new Error('Claude CLI is not installed. Please install it first or use the SDK executor.');
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
const prompt = `Return a new-line separated list of tasks you would do to best accomplish the following: '${jobDescription}'. Respond with ONLY the new line separated list, do not introduce the results. Each task should be considered as something that should be opened as a pull request. do NOT include tasks like searching, finding/locating files or researching, analyzing the codebase or looking for certain parts of the code.`;
|
|
149
|
+
console.log(chalk.blue('š¤ Generating task breakdown with Claude Code CLI...'));
|
|
150
|
+
console.log(chalk.yellow('š” Press Ctrl+C to cancel'));
|
|
151
|
+
console.log(chalk.gray(`Working directory: ${workingDir}`));
|
|
152
|
+
// Get the selected model for consistency
|
|
153
|
+
const model = this.configManager.getClaudeModel();
|
|
154
|
+
// Build Claude CLI arguments for task breakdown
|
|
155
|
+
const args = [
|
|
156
|
+
'--print', // Non-interactive mode
|
|
157
|
+
'--model', model,
|
|
158
|
+
'--max-turns', '1', // Only one turn needed for task breakdown
|
|
159
|
+
prompt
|
|
160
|
+
];
|
|
161
|
+
return new Promise((resolve, reject) => {
|
|
162
|
+
// Spawn the Claude CLI process
|
|
163
|
+
const claudeProcess = spawn('claude', args, {
|
|
164
|
+
cwd: workingDir,
|
|
165
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
166
|
+
});
|
|
167
|
+
let taskList = '';
|
|
168
|
+
let stderr = '';
|
|
169
|
+
// Handle stdout - stream in real-time
|
|
170
|
+
claudeProcess.stdout.on('data', (data) => {
|
|
171
|
+
const output = data.toString();
|
|
172
|
+
taskList += output;
|
|
173
|
+
// Stream output directly to console in real-time
|
|
174
|
+
process.stdout.write(output);
|
|
175
|
+
});
|
|
176
|
+
// Handle stderr - stream in real-time
|
|
177
|
+
claudeProcess.stderr.on('data', (data) => {
|
|
178
|
+
const output = data.toString();
|
|
179
|
+
stderr += output;
|
|
180
|
+
// Stream stderr to console
|
|
181
|
+
process.stderr.write(chalk.gray(output));
|
|
182
|
+
});
|
|
183
|
+
// Handle process exit
|
|
184
|
+
claudeProcess.on('close', (code) => {
|
|
185
|
+
if (code === 0) {
|
|
186
|
+
if (!taskList.trim()) {
|
|
187
|
+
reject(new Error('No task list returned from Claude Code CLI'));
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
const tasks = taskList
|
|
191
|
+
.split('\n')
|
|
192
|
+
.map((task) => task.trim())
|
|
193
|
+
.filter((task) => task.length > 0)
|
|
194
|
+
.map((task) => task.replace(/^\d+\.\s*/, '')) // Remove numbering like "1. "
|
|
195
|
+
.map((task) => task.replace(/^-\s*/, '')); // Remove bullet points like "- "
|
|
196
|
+
console.log(chalk.green(`ā
Generated ${tasks.length} tasks`));
|
|
197
|
+
resolve(tasks);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
console.error(chalk.red('ā Failed to generate task breakdown with Claude Code CLI'));
|
|
201
|
+
if (stderr) {
|
|
202
|
+
console.error(chalk.red('Error output:'), stderr);
|
|
203
|
+
}
|
|
204
|
+
reject(new Error(`Claude CLI exited with code ${code}: ${stderr}`));
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
// Handle process errors
|
|
208
|
+
claudeProcess.on('error', (error) => {
|
|
209
|
+
console.error(chalk.red('ā Failed to start Claude CLI'));
|
|
210
|
+
reject(new Error(`Failed to start Claude CLI: ${error.message}`));
|
|
211
|
+
});
|
|
212
|
+
// Handle Ctrl+C
|
|
213
|
+
const handleInterrupt = () => {
|
|
214
|
+
claudeProcess.kill('SIGINT');
|
|
215
|
+
console.log(chalk.yellow('\nā ļø Task breakdown generation cancelled by user (Ctrl+C)'));
|
|
216
|
+
reject(new Error('Task breakdown generation cancelled by user'));
|
|
217
|
+
};
|
|
218
|
+
process.on('SIGINT', handleInterrupt);
|
|
219
|
+
// Clean up handler when process exits
|
|
220
|
+
claudeProcess.on('close', () => {
|
|
221
|
+
process.removeListener('SIGINT', handleInterrupt);
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
const err = error;
|
|
227
|
+
if (err.message?.includes('cancel')) {
|
|
228
|
+
throw new Error('Task breakdown generation cancelled by user');
|
|
229
|
+
}
|
|
230
|
+
console.error(chalk.red('ā Failed to generate task breakdown with Claude Code CLI'));
|
|
231
|
+
throw new Error(`Failed to generate task breakdown: ${err.message}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
async validateClaudeCodeInstallation() {
|
|
235
|
+
if (!this.checkClaudeCliInstalled()) {
|
|
236
|
+
throw new Error('Claude CLI is not installed. Install it from: https://docs.claude.com/en/docs/claude-code/installation');
|
|
237
|
+
}
|
|
238
|
+
console.log(chalk.green('ā
Claude CLI is installed and ready to use'));
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=claude-cli-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-cli-executor.js","sourceRoot":"","sources":["../../src/services/claude-cli-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,MAAM,OAAO,iBAAiB;IACpB,aAAa,CAAgB;IAErC;QACE,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC3C,CAAC;IAEO,uBAAuB;QAC7B,IAAI,CAAC;YACH,QAAQ,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,eAAuB,EAAE,UAAkB,EAAE,SAAkB;QAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,eAAe,EAAE,CAAC,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAEhE,mCAAmC;QACnC,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;QACnG,CAAC;QAED,IAAI,CAAC;YACH,iEAAiE;YACjE,IAAI,gBAAgB,GAAG,UAAU,CAAC;YAElC,wEAAwE;YACxE,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,OAAO,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC1E,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAClC,kDAAkD;oBAClD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBACzD,wDAAwD;oBACxD,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;wBACvC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;oBAC1D,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,6DAA6D;YAC/D,CAAC;YAED,qEAAqE;YACrE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;YAEpF,yBAAyB;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;YAElD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC;YAC3C,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC,CAAC;YAErE,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,MAAM,gBAAgB,GAAG,SAAS,IAAI,EAAE,CAAC;YAEzC,mEAAmE;YACnE,MAAM,IAAI,GAAa;gBACrB,SAAS,EAAE,uBAAuB;gBAClC,SAAS,EAAE,KAAK;gBAChB,mBAAmB,EAAE,mBAAmB,CAAC,0BAA0B;aACpE,CAAC;YAEF,iCAAiC;YACjC,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3E,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,YAAY,CAAC,CAAC;YAChD,CAAC;YAED,0CAA0C;YAC1C,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACnC,CAAC;YAED,oEAAoE;YACpE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAE3B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,yEAAyE;gBACzE,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE;oBAC1C,GAAG,EAAE,UAAU;oBACf,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;iBAClC,CAAC,CAAC;gBAEH,IAAI,UAAU,GAAG,EAAE,CAAC;gBACpB,IAAI,MAAM,GAAG,EAAE,CAAC;gBAEhB,6CAA6C;gBAC7C,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC/B,UAAU,IAAI,MAAM,CAAC;oBAErB,iDAAiD;oBACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAE7B,+CAA+C;oBAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;oBACvE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACrB,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC/C,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,8CAA8C;gBAC9C,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC/B,MAAM,IAAI,MAAM,CAAC;oBAEjB,+DAA+D;oBAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC3C,CAAC,CAAC,CAAC;gBAEH,sBAAsB;gBACtB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;oBACjC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;wBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;wBAClE,OAAO,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;oBACzE,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;wBAC/D,IAAI,MAAM,EAAE,CAAC;4BACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;wBACpD,CAAC;wBACD,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,wBAAwB;gBACxB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;oBACzD,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACpE,CAAC,CAAC,CAAC;gBAEH,gBAAgB;gBAChB,MAAM,eAAe,GAAG,GAAG,EAAE;oBAC3B,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,CAAC;oBACnE,MAAM,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;gBACxD,CAAC,CAAC;gBACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;gBAEtC,sCAAsC;gBACtC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBAC7B,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;gBACpD,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QAEL,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,KAAqC,CAAC;YAElD,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,cAAsB,EAAE,UAAkB;QACpE,mCAAmC;QACnC,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;QACnG,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,6FAA6F,cAAc,mTAAmT,CAAC;YAE9a,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC,CAAC;YAE5D,yCAAyC;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;YAElD,gDAAgD;YAChD,MAAM,IAAI,GAAa;gBACrB,SAAS,EAAE,uBAAuB;gBAClC,SAAS,EAAE,KAAK;gBAChB,aAAa,EAAE,GAAG,EAAE,0CAA0C;gBAC9D,MAAM;aACP,CAAC;YAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,+BAA+B;gBAC/B,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE;oBAC1C,GAAG,EAAE,UAAU;oBACf,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;iBAChC,CAAC,CAAC;gBAEH,IAAI,QAAQ,GAAG,EAAE,CAAC;gBAClB,IAAI,MAAM,GAAG,EAAE,CAAC;gBAEhB,sCAAsC;gBACtC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC/B,QAAQ,IAAI,MAAM,CAAC;oBAEnB,iDAAiD;oBACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;gBAEH,sCAAsC;gBACtC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC/B,MAAM,IAAI,MAAM,CAAC;oBAEjB,2BAA2B;oBAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC3C,CAAC,CAAC,CAAC;gBAEH,sBAAsB;gBACtB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;oBACjC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;wBACf,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;4BACrB,MAAM,CAAC,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;4BAChE,OAAO;wBACT,CAAC;wBAED,MAAM,KAAK,GAAG,QAAQ;6BACnB,KAAK,CAAC,IAAI,CAAC;6BACX,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;6BAClC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;6BACzC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,8BAA8B;6BACnF,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,iCAAiC;wBAEtF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC;wBAC9D,OAAO,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC,CAAC;wBACrF,IAAI,MAAM,EAAE,CAAC;4BACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;wBACpD,CAAC;wBACD,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,wBAAwB;gBACxB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;oBACzD,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACpE,CAAC,CAAC,CAAC;gBAEH,gBAAgB;gBAChB,MAAM,eAAe,GAAG,GAAG,EAAE;oBAC3B,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4DAA4D,CAAC,CAAC,CAAC;oBACxF,MAAM,CAAC,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;gBACnE,CAAC,CAAC;gBACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;gBAEtC,sCAAsC;gBACtC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBAC7B,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;gBACpD,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QAEL,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,KAAc,CAAC;YAE3B,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC,CAAC;YACrF,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,8BAA8B;QAClC,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,wGAAwG,CAAC,CAAC;QAC5H,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;IACzE,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IClaudeExecutor } from './executor-factory.js';
|
|
2
|
+
export declare class ClaudeExecutor implements IClaudeExecutor {
|
|
3
|
+
private configManager;
|
|
4
|
+
constructor();
|
|
5
|
+
private getApiKey;
|
|
6
|
+
executeTask(taskDescription: string, workingDir: string, sessionId?: string): Promise<{
|
|
7
|
+
log: string;
|
|
8
|
+
lastMessage: string;
|
|
9
|
+
sessionId: string;
|
|
10
|
+
}>;
|
|
11
|
+
generateTaskBreakdown(jobDescription: string, workingDir: string): Promise<string[]>;
|
|
12
|
+
validateClaudeCodeInstallation(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=claude-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-executor.d.ts","sourceRoot":"","sources":["../../src/services/claude-executor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,aAAa,CAAgB;;YAMvB,SAAS;IAgBjB,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAoK9I,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAsGpF,8BAA8B,IAAI,OAAO,CAAC,IAAI,CAAC;CAItD"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { query } from '@anthropic-ai/claude-agent-sdk';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { ConfigManager } from '../config.js';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { execSync } from 'child_process';
|
|
6
|
+
export class ClaudeExecutor {
|
|
7
|
+
configManager;
|
|
8
|
+
constructor() {
|
|
9
|
+
this.configManager = new ConfigManager();
|
|
10
|
+
}
|
|
11
|
+
async getApiKey() {
|
|
12
|
+
let config = this.configManager.getConfig();
|
|
13
|
+
if (!config?.anthropicApiKey || config.anthropicApiKey === '') {
|
|
14
|
+
// Prompt for the API key
|
|
15
|
+
await this.configManager.promptForMissingConfig('anthropicApiKey');
|
|
16
|
+
config = this.configManager.getConfig();
|
|
17
|
+
}
|
|
18
|
+
if (!config?.anthropicApiKey) {
|
|
19
|
+
throw new Error('Failed to obtain Anthropic API key');
|
|
20
|
+
}
|
|
21
|
+
return config.anthropicApiKey;
|
|
22
|
+
}
|
|
23
|
+
async executeTask(taskDescription, workingDir, sessionId) {
|
|
24
|
+
console.log(chalk.blue(`š¤ Executing task with Claude Code: ${taskDescription}`));
|
|
25
|
+
console.log(chalk.yellow('š” Press Ctrl+C to cancel the task'));
|
|
26
|
+
try {
|
|
27
|
+
// Set the API key in environment for the SDK
|
|
28
|
+
process.env.ANTHROPIC_API_KEY = await this.getApiKey();
|
|
29
|
+
// Determine the original repo path (in case we're in a worktree)
|
|
30
|
+
let originalRepoPath = workingDir;
|
|
31
|
+
// Check if we're in a worktree by looking for .git file (not directory)
|
|
32
|
+
try {
|
|
33
|
+
const gitPath = path.join(workingDir, '.git');
|
|
34
|
+
const gitInfo = execSync(`cat "${gitPath}"`, { encoding: 'utf8' }).trim();
|
|
35
|
+
if (gitInfo.startsWith('gitdir:')) {
|
|
36
|
+
// We're in a worktree, extract the main repo path
|
|
37
|
+
const gitDirPath = gitInfo.replace('gitdir:', '').trim();
|
|
38
|
+
// Go up from .git/worktrees/<name> to get the main repo
|
|
39
|
+
if (gitDirPath.includes('/worktrees/')) {
|
|
40
|
+
originalRepoPath = path.resolve(gitDirPath, '../../..');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Not a worktree or couldn't determine, use workingDir as-is
|
|
46
|
+
}
|
|
47
|
+
// Get repository-specific allowed tools using the original repo path
|
|
48
|
+
const allowedTools = await this.configManager.getRepoAllowedTools(originalRepoPath);
|
|
49
|
+
// Get the selected model
|
|
50
|
+
const model = this.configManager.getClaudeModel();
|
|
51
|
+
console.log(chalk.gray(`Working directory: ${workingDir}`));
|
|
52
|
+
console.log(chalk.gray(`Model: ${model}`));
|
|
53
|
+
if (allowedTools && allowedTools.length > 0) {
|
|
54
|
+
console.log(chalk.gray(`Allowed tools: ${allowedTools.join(', ')}`));
|
|
55
|
+
}
|
|
56
|
+
console.log(chalk.yellow('ā³ Starting Claude Code execution...'));
|
|
57
|
+
let result = '';
|
|
58
|
+
let currentResponse = '';
|
|
59
|
+
let lastMessage = '';
|
|
60
|
+
let currentSessionId = sessionId; // Move this outside the try block
|
|
61
|
+
const abortController = new globalThis.AbortController();
|
|
62
|
+
// Handle Ctrl+C
|
|
63
|
+
const handleInterrupt = () => {
|
|
64
|
+
abortController.abort();
|
|
65
|
+
console.log(chalk.yellow('\nā ļø Task cancelled by user (Ctrl+C)'));
|
|
66
|
+
};
|
|
67
|
+
process.on('SIGINT', handleInterrupt);
|
|
68
|
+
try {
|
|
69
|
+
// Change to working directory
|
|
70
|
+
const originalDir = process.cwd();
|
|
71
|
+
process.chdir(workingDir);
|
|
72
|
+
// Execute the task using the SDK
|
|
73
|
+
for await (const message of query({
|
|
74
|
+
prompt: taskDescription,
|
|
75
|
+
options: {
|
|
76
|
+
abortController: abortController,
|
|
77
|
+
// 1) Point Claude at the exact worktree it should edit:
|
|
78
|
+
cwd: workingDir,
|
|
79
|
+
// 2) (Optional) If you sometimes hop folders, explicitly whitelist them:
|
|
80
|
+
additionalDirectories: [workingDir],
|
|
81
|
+
// 3) Allow edit tools in headless mode:
|
|
82
|
+
// Use 'acceptEdits' for safer default; 'bypassPermissions' is most permissive.
|
|
83
|
+
permissionMode: 'bypassPermissions',
|
|
84
|
+
allowedTools: allowedTools,
|
|
85
|
+
model: model,
|
|
86
|
+
// Resume from previous session if provided
|
|
87
|
+
resume: sessionId
|
|
88
|
+
}
|
|
89
|
+
})) {
|
|
90
|
+
// Handle different message types based on the SDK types
|
|
91
|
+
if (message.type === 'assistant') {
|
|
92
|
+
// Assistant messages contain the actual content
|
|
93
|
+
if (message.message.content) {
|
|
94
|
+
for (const content of message.message.content) {
|
|
95
|
+
if (content.type === 'text') {
|
|
96
|
+
console.log(content.text);
|
|
97
|
+
currentResponse += content.text + '\n';
|
|
98
|
+
lastMessage = content.text; // Also capture text responses as last message
|
|
99
|
+
}
|
|
100
|
+
else if (content.type === 'tool_use') {
|
|
101
|
+
console.log(chalk.gray(`Using tool: ${content.name}`));
|
|
102
|
+
// Add tool call to the log
|
|
103
|
+
const toolCall = `[Tool Call: ${content.name}]`;
|
|
104
|
+
if (content.input) {
|
|
105
|
+
const inputStr = typeof content.input === 'object'
|
|
106
|
+
? JSON.stringify(content.input, null, 2)
|
|
107
|
+
: String(content.input);
|
|
108
|
+
currentResponse += `${toolCall}\n${inputStr}\n\n`;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
currentResponse += `${toolCall}\n\n`;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else if (message.type === 'stream_event') {
|
|
118
|
+
// Stream events may contain tool results
|
|
119
|
+
if ('event' in message && message.event?.type === 'tool_result') {
|
|
120
|
+
const toolResult = `[Tool Result]\n${typeof message.event.result === 'object'
|
|
121
|
+
? JSON.stringify(message.event.result, null, 2)
|
|
122
|
+
: String(message.event.result)}\n`;
|
|
123
|
+
currentResponse += toolResult;
|
|
124
|
+
// Add separation after tool result for next Claude response
|
|
125
|
+
if (currentResponse.trim()) {
|
|
126
|
+
result += currentResponse + '\n' + 'ā'.repeat(80) + '\n\n';
|
|
127
|
+
currentResponse = '';
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else if (message.type === 'result') {
|
|
132
|
+
// Final result message
|
|
133
|
+
if ('result' in message) {
|
|
134
|
+
console.log(chalk.green(`Result: ${message.result}`));
|
|
135
|
+
currentResponse += message.result + '\n';
|
|
136
|
+
lastMessage = message.result; // Capture the last message
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else if (message.type === 'system') {
|
|
140
|
+
// System messages for initialization
|
|
141
|
+
if (message.subtype === 'init') {
|
|
142
|
+
console.log(chalk.gray(`Initialized with model: ${message.model}`));
|
|
143
|
+
result += `[System: Initialized with model: ${message.model}]\n\n`;
|
|
144
|
+
// Extract session ID from the system message if available
|
|
145
|
+
if ('session_id' in message && typeof message.session_id === 'string') {
|
|
146
|
+
currentSessionId = message.session_id;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else if ('session_id' in message && typeof message.session_id === 'string') {
|
|
151
|
+
// Capture session ID from any message that has it
|
|
152
|
+
currentSessionId = message.session_id;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Add any remaining response
|
|
156
|
+
if (currentResponse.trim()) {
|
|
157
|
+
result += currentResponse + '\n' + 'ā'.repeat(80) + '\n\n';
|
|
158
|
+
}
|
|
159
|
+
// Restore original directory
|
|
160
|
+
process.chdir(originalDir);
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
process.removeListener('SIGINT', handleInterrupt);
|
|
164
|
+
}
|
|
165
|
+
console.log(chalk.green('ā
Claude Code execution completed'));
|
|
166
|
+
return { log: result, lastMessage, sessionId: currentSessionId || '' };
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
const err = error;
|
|
170
|
+
if (err.message?.includes('abort')) {
|
|
171
|
+
throw new Error('Task execution cancelled by user');
|
|
172
|
+
}
|
|
173
|
+
console.error(chalk.red('ā Claude Code execution failed:'));
|
|
174
|
+
throw new Error(`Claude Code execution failed: ${err.message}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
async generateTaskBreakdown(jobDescription, workingDir) {
|
|
178
|
+
try {
|
|
179
|
+
// Set the API key in environment for the SDK
|
|
180
|
+
process.env.ANTHROPIC_API_KEY = await this.getApiKey();
|
|
181
|
+
const prompt = `Return a new-line separated list of tasks you would do to best accomplish the following: '${jobDescription}'. Respond with ONLY the new line separated list, do not introduce the results. Each task should be considered as something that should be opened as a pull request. do NOT include tasks like searching, finding/locating files or researching, analyzing the codebase or looking for certain parts of the code.`;
|
|
182
|
+
console.log(chalk.blue('š¤ Generating task breakdown with Claude Code...'));
|
|
183
|
+
console.log(chalk.yellow('š” Press Ctrl+C to cancel'));
|
|
184
|
+
console.log(chalk.gray(`Working directory: ${workingDir}`));
|
|
185
|
+
let taskList = '';
|
|
186
|
+
const abortController = new globalThis.AbortController();
|
|
187
|
+
// Handle Ctrl+C
|
|
188
|
+
const handleInterrupt = () => {
|
|
189
|
+
abortController.abort();
|
|
190
|
+
console.log(chalk.yellow('\nā ļø Task breakdown generation cancelled by user (Ctrl+C)'));
|
|
191
|
+
};
|
|
192
|
+
process.on('SIGINT', handleInterrupt);
|
|
193
|
+
try {
|
|
194
|
+
// Change to working directory
|
|
195
|
+
const originalDir = process.cwd();
|
|
196
|
+
process.chdir(workingDir);
|
|
197
|
+
// Get the selected model for consistency
|
|
198
|
+
const model = this.configManager.getClaudeModel();
|
|
199
|
+
// Generate task breakdown using the SDK in plan mode
|
|
200
|
+
for await (const message of query({
|
|
201
|
+
prompt,
|
|
202
|
+
options: {
|
|
203
|
+
abortController,
|
|
204
|
+
systemPrompt: 'You are a task breakdown generator. Respond only with a newline-separated list of tasks.',
|
|
205
|
+
cwd: workingDir,
|
|
206
|
+
model: model,
|
|
207
|
+
// Use plan mode for task breakdown
|
|
208
|
+
permissionMode: 'plan'
|
|
209
|
+
// No allowedTools restriction for task breakdown
|
|
210
|
+
}
|
|
211
|
+
})) {
|
|
212
|
+
// Handle different message types
|
|
213
|
+
if (message.type === 'assistant') {
|
|
214
|
+
// Assistant messages contain the actual content
|
|
215
|
+
if (message.message.content) {
|
|
216
|
+
for (const content of message.message.content) {
|
|
217
|
+
if (content.type === 'text') {
|
|
218
|
+
// Output Claude's message as it comes through
|
|
219
|
+
console.log(content.text);
|
|
220
|
+
taskList += content.text;
|
|
221
|
+
}
|
|
222
|
+
else if (content.type === 'tool_use') {
|
|
223
|
+
// Output tool usage information
|
|
224
|
+
console.log(chalk.gray(`Using tool: ${content.name}`));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else if (message.type === 'system') {
|
|
230
|
+
// System messages for initialization
|
|
231
|
+
if (message.subtype === 'init') {
|
|
232
|
+
console.log(chalk.gray(`Initialized with model: ${message.model} in plan mode`));
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
else if (message.type === 'result') {
|
|
236
|
+
// Final result message
|
|
237
|
+
if ('result' in message) {
|
|
238
|
+
taskList += message.result;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// Restore original directory
|
|
243
|
+
process.chdir(originalDir);
|
|
244
|
+
}
|
|
245
|
+
finally {
|
|
246
|
+
process.removeListener('SIGINT', handleInterrupt);
|
|
247
|
+
}
|
|
248
|
+
if (!taskList) {
|
|
249
|
+
throw new Error('No task list returned from Claude Code');
|
|
250
|
+
}
|
|
251
|
+
const tasks = taskList
|
|
252
|
+
.split('\n')
|
|
253
|
+
.map((task) => task.trim())
|
|
254
|
+
.filter((task) => task.length > 0)
|
|
255
|
+
.map((task) => task.replace(/^\d+\.\s*/, '')) // Remove numbering like "1. "
|
|
256
|
+
.map((task) => task.replace(/^-\s*/, '')); // Remove bullet points like "- "
|
|
257
|
+
console.log(chalk.green(`ā
Generated ${tasks.length} tasks`));
|
|
258
|
+
return tasks;
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
const err = error;
|
|
262
|
+
if (err.message?.includes('abort')) {
|
|
263
|
+
throw new Error('Task breakdown generation cancelled by user');
|
|
264
|
+
}
|
|
265
|
+
console.error(chalk.red('ā Failed to generate task breakdown with Claude Code'));
|
|
266
|
+
throw new Error(`Failed to generate task breakdown: ${err.message}`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
async validateClaudeCodeInstallation() {
|
|
270
|
+
// This will prompt for API key if missing
|
|
271
|
+
await this.getApiKey();
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=claude-executor.js.map
|