@urateam/core 0.1.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/dist/__tests__/assembler.test.d.ts +2 -0
- package/dist/__tests__/assembler.test.d.ts.map +1 -0
- package/dist/__tests__/assembler.test.js +63 -0
- package/dist/__tests__/assembler.test.js.map +1 -0
- package/dist/__tests__/auth-check.test.d.ts +2 -0
- package/dist/__tests__/auth-check.test.d.ts.map +1 -0
- package/dist/__tests__/auth-check.test.js +88 -0
- package/dist/__tests__/auth-check.test.js.map +1 -0
- package/dist/__tests__/auto-merge.test.d.ts +15 -0
- package/dist/__tests__/auto-merge.test.d.ts.map +1 -0
- package/dist/__tests__/auto-merge.test.js +428 -0
- package/dist/__tests__/auto-merge.test.js.map +1 -0
- package/dist/__tests__/bec89-unified-schema.test.d.ts +2 -0
- package/dist/__tests__/bec89-unified-schema.test.d.ts.map +1 -0
- package/dist/__tests__/bec89-unified-schema.test.js +235 -0
- package/dist/__tests__/bec89-unified-schema.test.js.map +1 -0
- package/dist/__tests__/conflict-detector.test.d.ts +2 -0
- package/dist/__tests__/conflict-detector.test.d.ts.map +1 -0
- package/dist/__tests__/conflict-detector.test.js +206 -0
- package/dist/__tests__/conflict-detector.test.js.map +1 -0
- package/dist/__tests__/coordination.test.d.ts +2 -0
- package/dist/__tests__/coordination.test.d.ts.map +1 -0
- package/dist/__tests__/coordination.test.js +257 -0
- package/dist/__tests__/coordination.test.js.map +1 -0
- package/dist/__tests__/db-postgres.test.d.ts +14 -0
- package/dist/__tests__/db-postgres.test.d.ts.map +1 -0
- package/dist/__tests__/db-postgres.test.js +289 -0
- package/dist/__tests__/db-postgres.test.js.map +1 -0
- package/dist/__tests__/db.test.d.ts +2 -0
- package/dist/__tests__/db.test.d.ts.map +1 -0
- package/dist/__tests__/db.test.js +182 -0
- package/dist/__tests__/db.test.js.map +1 -0
- package/dist/__tests__/deep-review.test.d.ts +2 -0
- package/dist/__tests__/deep-review.test.d.ts.map +1 -0
- package/dist/__tests__/deep-review.test.js +322 -0
- package/dist/__tests__/deep-review.test.js.map +1 -0
- package/dist/__tests__/devcontainer.test.d.ts +2 -0
- package/dist/__tests__/devcontainer.test.d.ts.map +1 -0
- package/dist/__tests__/devcontainer.test.js +89 -0
- package/dist/__tests__/devcontainer.test.js.map +1 -0
- package/dist/__tests__/distributed-lock.test.d.ts +18 -0
- package/dist/__tests__/distributed-lock.test.d.ts.map +1 -0
- package/dist/__tests__/distributed-lock.test.js +237 -0
- package/dist/__tests__/distributed-lock.test.js.map +1 -0
- package/dist/__tests__/e2e-pipeline.test.d.ts +25 -0
- package/dist/__tests__/e2e-pipeline.test.d.ts.map +1 -0
- package/dist/__tests__/e2e-pipeline.test.js +517 -0
- package/dist/__tests__/e2e-pipeline.test.js.map +1 -0
- package/dist/__tests__/error-classifier.test.d.ts +2 -0
- package/dist/__tests__/error-classifier.test.d.ts.map +1 -0
- package/dist/__tests__/error-classifier.test.js +33 -0
- package/dist/__tests__/error-classifier.test.js.map +1 -0
- package/dist/__tests__/executor-integration.test.d.ts +11 -0
- package/dist/__tests__/executor-integration.test.d.ts.map +1 -0
- package/dist/__tests__/executor-integration.test.js +246 -0
- package/dist/__tests__/executor-integration.test.js.map +1 -0
- package/dist/__tests__/executor-issue-id.test.d.ts +13 -0
- package/dist/__tests__/executor-issue-id.test.d.ts.map +1 -0
- package/dist/__tests__/executor-issue-id.test.js +211 -0
- package/dist/__tests__/executor-issue-id.test.js.map +1 -0
- package/dist/__tests__/executor.test.d.ts +2 -0
- package/dist/__tests__/executor.test.d.ts.map +1 -0
- package/dist/__tests__/executor.test.js +164 -0
- package/dist/__tests__/executor.test.js.map +1 -0
- package/dist/__tests__/extract-handoff.test.d.ts +2 -0
- package/dist/__tests__/extract-handoff.test.d.ts.map +1 -0
- package/dist/__tests__/extract-handoff.test.js +131 -0
- package/dist/__tests__/extract-handoff.test.js.map +1 -0
- package/dist/__tests__/fail-on-auto-commit.test.d.ts +2 -0
- package/dist/__tests__/fail-on-auto-commit.test.d.ts.map +1 -0
- package/dist/__tests__/fail-on-auto-commit.test.js +156 -0
- package/dist/__tests__/fail-on-auto-commit.test.js.map +1 -0
- package/dist/__tests__/fixtures/webhook-comment.json +5 -0
- package/dist/__tests__/fixtures/webhook-state-change.json +15 -0
- package/dist/__tests__/force-push-agent-branches.test.d.ts +12 -0
- package/dist/__tests__/force-push-agent-branches.test.d.ts.map +1 -0
- package/dist/__tests__/force-push-agent-branches.test.js +348 -0
- package/dist/__tests__/force-push-agent-branches.test.js.map +1 -0
- package/dist/__tests__/github-webhook.test.d.ts +2 -0
- package/dist/__tests__/github-webhook.test.d.ts.map +1 -0
- package/dist/__tests__/github-webhook.test.js +370 -0
- package/dist/__tests__/github-webhook.test.js.map +1 -0
- package/dist/__tests__/gitlab.test.d.ts +28 -0
- package/dist/__tests__/gitlab.test.d.ts.map +1 -0
- package/dist/__tests__/gitlab.test.js +241 -0
- package/dist/__tests__/gitlab.test.js.map +1 -0
- package/dist/__tests__/integration/auto-commit.test.d.ts +2 -0
- package/dist/__tests__/integration/auto-commit.test.d.ts.map +1 -0
- package/dist/__tests__/integration/auto-commit.test.js +207 -0
- package/dist/__tests__/integration/auto-commit.test.js.map +1 -0
- package/dist/__tests__/integration/bec99-cross-worktree-guard.test.d.ts +10 -0
- package/dist/__tests__/integration/bec99-cross-worktree-guard.test.d.ts.map +1 -0
- package/dist/__tests__/integration/bec99-cross-worktree-guard.test.js +183 -0
- package/dist/__tests__/integration/bec99-cross-worktree-guard.test.js.map +1 -0
- package/dist/__tests__/integration/reproduce-bec99.test.d.ts +32 -0
- package/dist/__tests__/integration/reproduce-bec99.test.d.ts.map +1 -0
- package/dist/__tests__/integration/reproduce-bec99.test.js +243 -0
- package/dist/__tests__/integration/reproduce-bec99.test.js.map +1 -0
- package/dist/__tests__/integration/vitest-changed.test.d.ts +10 -0
- package/dist/__tests__/integration/vitest-changed.test.d.ts.map +1 -0
- package/dist/__tests__/integration/vitest-changed.test.js +128 -0
- package/dist/__tests__/integration/vitest-changed.test.js.map +1 -0
- package/dist/__tests__/license.test.d.ts +2 -0
- package/dist/__tests__/license.test.d.ts.map +1 -0
- package/dist/__tests__/license.test.js +53 -0
- package/dist/__tests__/license.test.js.map +1 -0
- package/dist/__tests__/mcp-resolver.test.d.ts +2 -0
- package/dist/__tests__/mcp-resolver.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-resolver.test.js +65 -0
- package/dist/__tests__/mcp-resolver.test.js.map +1 -0
- package/dist/__tests__/migrator.test.d.ts +2 -0
- package/dist/__tests__/migrator.test.d.ts.map +1 -0
- package/dist/__tests__/migrator.test.js +300 -0
- package/dist/__tests__/migrator.test.js.map +1 -0
- package/dist/__tests__/notifier-discord.test.d.ts +2 -0
- package/dist/__tests__/notifier-discord.test.d.ts.map +1 -0
- package/dist/__tests__/notifier-discord.test.js +166 -0
- package/dist/__tests__/notifier-discord.test.js.map +1 -0
- package/dist/__tests__/notifier-slack.test.d.ts +2 -0
- package/dist/__tests__/notifier-slack.test.d.ts.map +1 -0
- package/dist/__tests__/notifier-slack.test.js +157 -0
- package/dist/__tests__/notifier-slack.test.js.map +1 -0
- package/dist/__tests__/notifier.test.d.ts +2 -0
- package/dist/__tests__/notifier.test.d.ts.map +1 -0
- package/dist/__tests__/notifier.test.js +207 -0
- package/dist/__tests__/notifier.test.js.map +1 -0
- package/dist/__tests__/pipeline-config.test.d.ts +2 -0
- package/dist/__tests__/pipeline-config.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline-config.test.js +143 -0
- package/dist/__tests__/pipeline-config.test.js.map +1 -0
- package/dist/__tests__/pipeline-runner.test.d.ts +2 -0
- package/dist/__tests__/pipeline-runner.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline-runner.test.js +359 -0
- package/dist/__tests__/pipeline-runner.test.js.map +1 -0
- package/dist/__tests__/pm-approvals-n1.repro.test.d.ts +9 -0
- package/dist/__tests__/pm-approvals-n1.repro.test.d.ts.map +1 -0
- package/dist/__tests__/pm-approvals-n1.repro.test.js +175 -0
- package/dist/__tests__/pm-approvals-n1.repro.test.js.map +1 -0
- package/dist/__tests__/pm-approvals.test.d.ts +2 -0
- package/dist/__tests__/pm-approvals.test.d.ts.map +1 -0
- package/dist/__tests__/pm-approvals.test.js +162 -0
- package/dist/__tests__/pm-approvals.test.js.map +1 -0
- package/dist/__tests__/pm-budget.test.d.ts +2 -0
- package/dist/__tests__/pm-budget.test.d.ts.map +1 -0
- package/dist/__tests__/pm-budget.test.js +65 -0
- package/dist/__tests__/pm-budget.test.js.map +1 -0
- package/dist/__tests__/pm-conflict.test.d.ts +2 -0
- package/dist/__tests__/pm-conflict.test.d.ts.map +1 -0
- package/dist/__tests__/pm-conflict.test.js +87 -0
- package/dist/__tests__/pm-conflict.test.js.map +1 -0
- package/dist/__tests__/pm-promote.test.d.ts +2 -0
- package/dist/__tests__/pm-promote.test.d.ts.map +1 -0
- package/dist/__tests__/pm-promote.test.js +82 -0
- package/dist/__tests__/pm-promote.test.js.map +1 -0
- package/dist/__tests__/pm-recover.test.d.ts +2 -0
- package/dist/__tests__/pm-recover.test.d.ts.map +1 -0
- package/dist/__tests__/pm-recover.test.js +100 -0
- package/dist/__tests__/pm-recover.test.js.map +1 -0
- package/dist/__tests__/pm-scheduler.test.d.ts +2 -0
- package/dist/__tests__/pm-scheduler.test.d.ts.map +1 -0
- package/dist/__tests__/pm-scheduler.test.js +112 -0
- package/dist/__tests__/pm-scheduler.test.js.map +1 -0
- package/dist/__tests__/pm-slack-interface.test.d.ts +2 -0
- package/dist/__tests__/pm-slack-interface.test.d.ts.map +1 -0
- package/dist/__tests__/pm-slack-interface.test.js +372 -0
- package/dist/__tests__/pm-slack-interface.test.js.map +1 -0
- package/dist/__tests__/pm-slack.test.d.ts +2 -0
- package/dist/__tests__/pm-slack.test.d.ts.map +1 -0
- package/dist/__tests__/pm-slack.test.js +83 -0
- package/dist/__tests__/pm-slack.test.js.map +1 -0
- package/dist/__tests__/pm-triage.test.d.ts +2 -0
- package/dist/__tests__/pm-triage.test.d.ts.map +1 -0
- package/dist/__tests__/pm-triage.test.js +198 -0
- package/dist/__tests__/pm-triage.test.js.map +1 -0
- package/dist/__tests__/pm-types.test.d.ts +2 -0
- package/dist/__tests__/pm-types.test.d.ts.map +1 -0
- package/dist/__tests__/pm-types.test.js +76 -0
- package/dist/__tests__/pm-types.test.js.map +1 -0
- package/dist/__tests__/pr-automerge.test.d.ts +18 -0
- package/dist/__tests__/pr-automerge.test.d.ts.map +1 -0
- package/dist/__tests__/pr-automerge.test.js +645 -0
- package/dist/__tests__/pr-automerge.test.js.map +1 -0
- package/dist/__tests__/pr-description.test.d.ts +2 -0
- package/dist/__tests__/pr-description.test.d.ts.map +1 -0
- package/dist/__tests__/pr-description.test.js +728 -0
- package/dist/__tests__/pr-description.test.js.map +1 -0
- package/dist/__tests__/prompt-injection.test.d.ts +2 -0
- package/dist/__tests__/prompt-injection.test.d.ts.map +1 -0
- package/dist/__tests__/prompt-injection.test.js +446 -0
- package/dist/__tests__/prompt-injection.test.js.map +1 -0
- package/dist/__tests__/ralph-gate.test.d.ts +19 -0
- package/dist/__tests__/ralph-gate.test.d.ts.map +1 -0
- package/dist/__tests__/ralph-gate.test.js +593 -0
- package/dist/__tests__/ralph-gate.test.js.map +1 -0
- package/dist/__tests__/ralph-review-fix-regression.test.d.ts +18 -0
- package/dist/__tests__/ralph-review-fix-regression.test.d.ts.map +1 -0
- package/dist/__tests__/ralph-review-fix-regression.test.js +306 -0
- package/dist/__tests__/ralph-review-fix-regression.test.js.map +1 -0
- package/dist/__tests__/ralph.test.d.ts +2 -0
- package/dist/__tests__/ralph.test.d.ts.map +1 -0
- package/dist/__tests__/ralph.test.js +96 -0
- package/dist/__tests__/ralph.test.js.map +1 -0
- package/dist/__tests__/recover-stuck.test.d.ts +8 -0
- package/dist/__tests__/recover-stuck.test.d.ts.map +1 -0
- package/dist/__tests__/recover-stuck.test.js +399 -0
- package/dist/__tests__/recover-stuck.test.js.map +1 -0
- package/dist/__tests__/repo.test.d.ts +2 -0
- package/dist/__tests__/repo.test.d.ts.map +1 -0
- package/dist/__tests__/repo.test.js +295 -0
- package/dist/__tests__/repo.test.js.map +1 -0
- package/dist/__tests__/repro-bec58-n-plus-one.test.d.ts +2 -0
- package/dist/__tests__/repro-bec58-n-plus-one.test.d.ts.map +1 -0
- package/dist/__tests__/repro-bec58-n-plus-one.test.js +187 -0
- package/dist/__tests__/repro-bec58-n-plus-one.test.js.map +1 -0
- package/dist/__tests__/reproduce-bec113-pagination-warning.test.d.ts +16 -0
- package/dist/__tests__/reproduce-bec113-pagination-warning.test.d.ts.map +1 -0
- package/dist/__tests__/reproduce-bec113-pagination-warning.test.js +226 -0
- package/dist/__tests__/reproduce-bec113-pagination-warning.test.js.map +1 -0
- package/dist/__tests__/reproduce-bec43-updatedat.test.d.ts +2 -0
- package/dist/__tests__/reproduce-bec43-updatedat.test.d.ts.map +1 -0
- package/dist/__tests__/reproduce-bec43-updatedat.test.js +76 -0
- package/dist/__tests__/reproduce-bec43-updatedat.test.js.map +1 -0
- package/dist/__tests__/reproduce-bec48-distributed-race.test.d.ts +18 -0
- package/dist/__tests__/reproduce-bec48-distributed-race.test.d.ts.map +1 -0
- package/dist/__tests__/reproduce-bec48-distributed-race.test.js +178 -0
- package/dist/__tests__/reproduce-bec48-distributed-race.test.js.map +1 -0
- package/dist/__tests__/reproduce-bec62.test.d.ts +2 -0
- package/dist/__tests__/reproduce-bec62.test.d.ts.map +1 -0
- package/dist/__tests__/reproduce-bec62.test.js +86 -0
- package/dist/__tests__/reproduce-bec62.test.js.map +1 -0
- package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.d.ts +13 -0
- package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.d.ts.map +1 -0
- package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js +220 -0
- package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js.map +1 -0
- package/dist/__tests__/review-feedback.test.d.ts +2 -0
- package/dist/__tests__/review-feedback.test.d.ts.map +1 -0
- package/dist/__tests__/review-feedback.test.js +383 -0
- package/dist/__tests__/review-feedback.test.js.map +1 -0
- package/dist/__tests__/sanitizer.test.d.ts +2 -0
- package/dist/__tests__/sanitizer.test.d.ts.map +1 -0
- package/dist/__tests__/sanitizer.test.js +162 -0
- package/dist/__tests__/sanitizer.test.js.map +1 -0
- package/dist/__tests__/security.test.d.ts +2 -0
- package/dist/__tests__/security.test.d.ts.map +1 -0
- package/dist/__tests__/security.test.js +52 -0
- package/dist/__tests__/security.test.js.map +1 -0
- package/dist/__tests__/server.test.d.ts +2 -0
- package/dist/__tests__/server.test.d.ts.map +1 -0
- package/dist/__tests__/server.test.js +61 -0
- package/dist/__tests__/server.test.js.map +1 -0
- package/dist/__tests__/slack-alerts.test.d.ts +2 -0
- package/dist/__tests__/slack-alerts.test.d.ts.map +1 -0
- package/dist/__tests__/slack-alerts.test.js +214 -0
- package/dist/__tests__/slack-alerts.test.js.map +1 -0
- package/dist/__tests__/stage-models.test.d.ts +14 -0
- package/dist/__tests__/stage-models.test.d.ts.map +1 -0
- package/dist/__tests__/stage-models.test.js +244 -0
- package/dist/__tests__/stage-models.test.js.map +1 -0
- package/dist/__tests__/start-todo.test.d.ts +2 -0
- package/dist/__tests__/start-todo.test.d.ts.map +1 -0
- package/dist/__tests__/start-todo.test.js +175 -0
- package/dist/__tests__/start-todo.test.js.map +1 -0
- package/dist/__tests__/tech-stack.test.d.ts +2 -0
- package/dist/__tests__/tech-stack.test.d.ts.map +1 -0
- package/dist/__tests__/tech-stack.test.js +75 -0
- package/dist/__tests__/tech-stack.test.js.map +1 -0
- package/dist/__tests__/templates.test.d.ts +2 -0
- package/dist/__tests__/templates.test.d.ts.map +1 -0
- package/dist/__tests__/templates.test.js +161 -0
- package/dist/__tests__/templates.test.js.map +1 -0
- package/dist/__tests__/test-quality.test.d.ts +2 -0
- package/dist/__tests__/test-quality.test.d.ts.map +1 -0
- package/dist/__tests__/test-quality.test.js +329 -0
- package/dist/__tests__/test-quality.test.js.map +1 -0
- package/dist/__tests__/token-budget.test.d.ts +2 -0
- package/dist/__tests__/token-budget.test.d.ts.map +1 -0
- package/dist/__tests__/token-budget.test.js +198 -0
- package/dist/__tests__/token-budget.test.js.map +1 -0
- package/dist/__tests__/types.test.d.ts +2 -0
- package/dist/__tests__/types.test.d.ts.map +1 -0
- package/dist/__tests__/types.test.js +156 -0
- package/dist/__tests__/types.test.js.map +1 -0
- package/dist/__tests__/validate.test.d.ts +2 -0
- package/dist/__tests__/validate.test.d.ts.map +1 -0
- package/dist/__tests__/validate.test.js +128 -0
- package/dist/__tests__/validate.test.js.map +1 -0
- package/dist/__tests__/webhook-handler.test.d.ts +2 -0
- package/dist/__tests__/webhook-handler.test.d.ts.map +1 -0
- package/dist/__tests__/webhook-handler.test.js +286 -0
- package/dist/__tests__/webhook-handler.test.js.map +1 -0
- package/dist/__tests__/webhook.test.d.ts +2 -0
- package/dist/__tests__/webhook.test.d.ts.map +1 -0
- package/dist/__tests__/webhook.test.js +58 -0
- package/dist/__tests__/webhook.test.js.map +1 -0
- package/dist/db/client.d.ts +56 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +201 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/index.d.ts +4 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +4 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrations/postgres/001_initial_schema.sql +78 -0
- package/dist/db/migrations/postgres/002_pg_timestamps.sql +78 -0
- package/dist/db/migrations/postgres/003_retry_count.sql +10 -0
- package/dist/db/migrations/postgres/004_review_feedback.sql +20 -0
- package/dist/db/migrations/postgres/005_auto_merge.sql +15 -0
- package/dist/db/migrations/sqlite/001_initial_schema.sql +78 -0
- package/dist/db/migrations/sqlite/002_retry_count.sql +5 -0
- package/dist/db/migrations/sqlite/003_review_feedback.sql +7 -0
- package/dist/db/migrations/sqlite/004_auto_merge.sql +6 -0
- package/dist/db/migrator.d.ts +51 -0
- package/dist/db/migrator.d.ts.map +1 -0
- package/dist/db/migrator.js +188 -0
- package/dist/db/migrator.js.map +1 -0
- package/dist/db/schema.d.ts +1114 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +129 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/entrypoint.d.ts +2 -0
- package/dist/entrypoint.d.ts.map +1 -0
- package/dist/entrypoint.js +113 -0
- package/dist/entrypoint.js.map +1 -0
- package/dist/executor/agent-config.d.ts +10 -0
- package/dist/executor/agent-config.d.ts.map +1 -0
- package/dist/executor/agent-config.js +81 -0
- package/dist/executor/agent-config.js.map +1 -0
- package/dist/executor/agent-stream.d.ts +65 -0
- package/dist/executor/agent-stream.d.ts.map +1 -0
- package/dist/executor/agent-stream.js +101 -0
- package/dist/executor/agent-stream.js.map +1 -0
- package/dist/executor/auth-check.d.ts +10 -0
- package/dist/executor/auth-check.d.ts.map +1 -0
- package/dist/executor/auth-check.js +52 -0
- package/dist/executor/auth-check.js.map +1 -0
- package/dist/executor/deep-review.d.ts +61 -0
- package/dist/executor/deep-review.d.ts.map +1 -0
- package/dist/executor/deep-review.js +308 -0
- package/dist/executor/deep-review.js.map +1 -0
- package/dist/executor/executor.d.ts +27 -0
- package/dist/executor/executor.d.ts.map +1 -0
- package/dist/executor/executor.js +168 -0
- package/dist/executor/executor.js.map +1 -0
- package/dist/executor/extract-handoff.d.ts +14 -0
- package/dist/executor/extract-handoff.d.ts.map +1 -0
- package/dist/executor/extract-handoff.js +80 -0
- package/dist/executor/extract-handoff.js.map +1 -0
- package/dist/executor/handoff.d.ts +24 -0
- package/dist/executor/handoff.d.ts.map +1 -0
- package/dist/executor/handoff.js +63 -0
- package/dist/executor/handoff.js.map +1 -0
- package/dist/executor/index.d.ts +8 -0
- package/dist/executor/index.d.ts.map +1 -0
- package/dist/executor/index.js +8 -0
- package/dist/executor/index.js.map +1 -0
- package/dist/executor/mcp-resolver.d.ts +29 -0
- package/dist/executor/mcp-resolver.d.ts.map +1 -0
- package/dist/executor/mcp-resolver.js +80 -0
- package/dist/executor/mcp-resolver.js.map +1 -0
- package/dist/executor/permissions.d.ts +11 -0
- package/dist/executor/permissions.d.ts.map +1 -0
- package/dist/executor/permissions.js +32 -0
- package/dist/executor/permissions.js.map +1 -0
- package/dist/executor/profiles.d.ts +5 -0
- package/dist/executor/profiles.d.ts.map +1 -0
- package/dist/executor/profiles.js +35 -0
- package/dist/executor/profiles.js.map +1 -0
- package/dist/executor/prompt/assembler.d.ts +10 -0
- package/dist/executor/prompt/assembler.d.ts.map +1 -0
- package/dist/executor/prompt/assembler.js +28 -0
- package/dist/executor/prompt/assembler.js.map +1 -0
- package/dist/executor/prompt/index.d.ts +5 -0
- package/dist/executor/prompt/index.d.ts.map +1 -0
- package/dist/executor/prompt/index.js +5 -0
- package/dist/executor/prompt/index.js.map +1 -0
- package/dist/executor/prompt/sanitizer.d.ts +25 -0
- package/dist/executor/prompt/sanitizer.d.ts.map +1 -0
- package/dist/executor/prompt/sanitizer.js +81 -0
- package/dist/executor/prompt/sanitizer.js.map +1 -0
- package/dist/executor/prompt/schema-mapper.d.ts +7 -0
- package/dist/executor/prompt/schema-mapper.d.ts.map +1 -0
- package/dist/executor/prompt/schema-mapper.js +59 -0
- package/dist/executor/prompt/schema-mapper.js.map +1 -0
- package/dist/executor/prompt/templates.d.ts +31 -0
- package/dist/executor/prompt/templates.d.ts.map +1 -0
- package/dist/executor/prompt/templates.js +283 -0
- package/dist/executor/prompt/templates.js.map +1 -0
- package/dist/executor/ralph.d.ts +19 -0
- package/dist/executor/ralph.d.ts.map +1 -0
- package/dist/executor/ralph.js +112 -0
- package/dist/executor/ralph.js.map +1 -0
- package/dist/executor/test-quality.d.ts +117 -0
- package/dist/executor/test-quality.d.ts.map +1 -0
- package/dist/executor/test-quality.js +261 -0
- package/dist/executor/test-quality.js.map +1 -0
- package/dist/executor/validate.d.ts +15 -0
- package/dist/executor/validate.d.ts.map +1 -0
- package/dist/executor/validate.js +124 -0
- package/dist/executor/validate.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/license.d.ts +18 -0
- package/dist/license.d.ts.map +1 -0
- package/dist/license.js +44 -0
- package/dist/license.js.map +1 -0
- package/dist/logger.d.ts +43 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +91 -0
- package/dist/logger.js.map +1 -0
- package/dist/notifier/composite.d.ts +13 -0
- package/dist/notifier/composite.d.ts.map +1 -0
- package/dist/notifier/composite.js +28 -0
- package/dist/notifier/composite.js.map +1 -0
- package/dist/notifier/discord.d.ts +14 -0
- package/dist/notifier/discord.d.ts.map +1 -0
- package/dist/notifier/discord.js +105 -0
- package/dist/notifier/discord.js.map +1 -0
- package/dist/notifier/index.d.ts +6 -0
- package/dist/notifier/index.d.ts.map +1 -0
- package/dist/notifier/index.js +6 -0
- package/dist/notifier/index.js.map +1 -0
- package/dist/notifier/linear.d.ts +28 -0
- package/dist/notifier/linear.d.ts.map +1 -0
- package/dist/notifier/linear.js +138 -0
- package/dist/notifier/linear.js.map +1 -0
- package/dist/notifier/slack-alerts.d.ts +62 -0
- package/dist/notifier/slack-alerts.d.ts.map +1 -0
- package/dist/notifier/slack-alerts.js +184 -0
- package/dist/notifier/slack-alerts.js.map +1 -0
- package/dist/notifier/slack.d.ts +14 -0
- package/dist/notifier/slack.d.ts.map +1 -0
- package/dist/notifier/slack.js +146 -0
- package/dist/notifier/slack.js.map +1 -0
- package/dist/pipeline/automerge.d.ts +44 -0
- package/dist/pipeline/automerge.d.ts.map +1 -0
- package/dist/pipeline/automerge.js +135 -0
- package/dist/pipeline/automerge.js.map +1 -0
- package/dist/pipeline/config.d.ts +5 -0
- package/dist/pipeline/config.d.ts.map +1 -0
- package/dist/pipeline/config.js +68 -0
- package/dist/pipeline/config.js.map +1 -0
- package/dist/pipeline/distributed-lock.d.ts +50 -0
- package/dist/pipeline/distributed-lock.d.ts.map +1 -0
- package/dist/pipeline/distributed-lock.js +114 -0
- package/dist/pipeline/distributed-lock.js.map +1 -0
- package/dist/pipeline/error-classifier.d.ts +9 -0
- package/dist/pipeline/error-classifier.d.ts.map +1 -0
- package/dist/pipeline/error-classifier.js +25 -0
- package/dist/pipeline/error-classifier.js.map +1 -0
- package/dist/pipeline/index.d.ts +9 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +9 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/pr-description.d.ts +35 -0
- package/dist/pipeline/pr-description.d.ts.map +1 -0
- package/dist/pipeline/pr-description.js +52 -0
- package/dist/pipeline/pr-description.js.map +1 -0
- package/dist/pipeline/queue.d.ts +7 -0
- package/dist/pipeline/queue.d.ts.map +1 -0
- package/dist/pipeline/queue.js +39 -0
- package/dist/pipeline/queue.js.map +1 -0
- package/dist/pipeline/router.d.ts +6 -0
- package/dist/pipeline/router.d.ts.map +1 -0
- package/dist/pipeline/router.js +19 -0
- package/dist/pipeline/router.js.map +1 -0
- package/dist/pipeline/runner.d.ts +142 -0
- package/dist/pipeline/runner.d.ts.map +1 -0
- package/dist/pipeline/runner.js +1848 -0
- package/dist/pipeline/runner.js.map +1 -0
- package/dist/pm/actions/approval-helpers.d.ts +11 -0
- package/dist/pm/actions/approval-helpers.d.ts.map +1 -0
- package/dist/pm/actions/approval-helpers.js +34 -0
- package/dist/pm/actions/approval-helpers.js.map +1 -0
- package/dist/pm/actions/cancel.d.ts +11 -0
- package/dist/pm/actions/cancel.d.ts.map +1 -0
- package/dist/pm/actions/cancel.js +68 -0
- package/dist/pm/actions/cancel.js.map +1 -0
- package/dist/pm/actions/deprioritize.d.ts +12 -0
- package/dist/pm/actions/deprioritize.d.ts.map +1 -0
- package/dist/pm/actions/deprioritize.js +55 -0
- package/dist/pm/actions/deprioritize.js.map +1 -0
- package/dist/pm/actions/promote.d.ts +11 -0
- package/dist/pm/actions/promote.d.ts.map +1 -0
- package/dist/pm/actions/promote.js +78 -0
- package/dist/pm/actions/promote.js.map +1 -0
- package/dist/pm/actions/recover-stuck.d.ts +42 -0
- package/dist/pm/actions/recover-stuck.d.ts.map +1 -0
- package/dist/pm/actions/recover-stuck.js +143 -0
- package/dist/pm/actions/recover-stuck.js.map +1 -0
- package/dist/pm/actions/recover.d.ts +18 -0
- package/dist/pm/actions/recover.d.ts.map +1 -0
- package/dist/pm/actions/recover.js +56 -0
- package/dist/pm/actions/recover.js.map +1 -0
- package/dist/pm/actions/resolve-approvals.d.ts +17 -0
- package/dist/pm/actions/resolve-approvals.d.ts.map +1 -0
- package/dist/pm/actions/resolve-approvals.js +92 -0
- package/dist/pm/actions/resolve-approvals.js.map +1 -0
- package/dist/pm/actions/start-todo.d.ts +28 -0
- package/dist/pm/actions/start-todo.d.ts.map +1 -0
- package/dist/pm/actions/start-todo.js +117 -0
- package/dist/pm/actions/start-todo.js.map +1 -0
- package/dist/pm/actions/triage.d.ts +13 -0
- package/dist/pm/actions/triage.d.ts.map +1 -0
- package/dist/pm/actions/triage.js +109 -0
- package/dist/pm/actions/triage.js.map +1 -0
- package/dist/pm/budget.d.ts +9 -0
- package/dist/pm/budget.d.ts.map +1 -0
- package/dist/pm/budget.js +62 -0
- package/dist/pm/budget.js.map +1 -0
- package/dist/pm/call-claude.d.ts +3 -0
- package/dist/pm/call-claude.d.ts.map +1 -0
- package/dist/pm/call-claude.js +37 -0
- package/dist/pm/call-claude.js.map +1 -0
- package/dist/pm/conflict-detector.d.ts +42 -0
- package/dist/pm/conflict-detector.d.ts.map +1 -0
- package/dist/pm/conflict-detector.js +116 -0
- package/dist/pm/conflict-detector.js.map +1 -0
- package/dist/pm/conflict.d.ts +20 -0
- package/dist/pm/conflict.d.ts.map +1 -0
- package/dist/pm/conflict.js +63 -0
- package/dist/pm/conflict.js.map +1 -0
- package/dist/pm/coordination.d.ts +50 -0
- package/dist/pm/coordination.d.ts.map +1 -0
- package/dist/pm/coordination.js +163 -0
- package/dist/pm/coordination.js.map +1 -0
- package/dist/pm/linear-helpers.d.ts +2 -0
- package/dist/pm/linear-helpers.d.ts.map +1 -0
- package/dist/pm/linear-helpers.js +16 -0
- package/dist/pm/linear-helpers.js.map +1 -0
- package/dist/pm/scheduler.d.ts +47 -0
- package/dist/pm/scheduler.d.ts.map +1 -0
- package/dist/pm/scheduler.js +346 -0
- package/dist/pm/scheduler.js.map +1 -0
- package/dist/pm/slack-helpers.d.ts +2 -0
- package/dist/pm/slack-helpers.d.ts.map +1 -0
- package/dist/pm/slack-helpers.js +24 -0
- package/dist/pm/slack-helpers.js.map +1 -0
- package/dist/pm/slack-interface.d.ts +133 -0
- package/dist/pm/slack-interface.d.ts.map +1 -0
- package/dist/pm/slack-interface.js +641 -0
- package/dist/pm/slack-interface.js.map +1 -0
- package/dist/pm/slack.d.ts +18 -0
- package/dist/pm/slack.d.ts.map +1 -0
- package/dist/pm/slack.js +144 -0
- package/dist/pm/slack.js.map +1 -0
- package/dist/pm/types.d.ts +99 -0
- package/dist/pm/types.d.ts.map +1 -0
- package/dist/pm/types.js +17 -0
- package/dist/pm/types.js.map +1 -0
- package/dist/repo/config.d.ts +35 -0
- package/dist/repo/config.d.ts.map +1 -0
- package/dist/repo/config.js +72 -0
- package/dist/repo/config.js.map +1 -0
- package/dist/repo/devcontainer.d.ts +33 -0
- package/dist/repo/devcontainer.d.ts.map +1 -0
- package/dist/repo/devcontainer.js +90 -0
- package/dist/repo/devcontainer.js.map +1 -0
- package/dist/repo/git.d.ts +185 -0
- package/dist/repo/git.d.ts.map +1 -0
- package/dist/repo/git.js +586 -0
- package/dist/repo/git.js.map +1 -0
- package/dist/repo/github.d.ts +56 -0
- package/dist/repo/github.d.ts.map +1 -0
- package/dist/repo/github.js +164 -0
- package/dist/repo/github.js.map +1 -0
- package/dist/repo/gitlab.d.ts +47 -0
- package/dist/repo/gitlab.d.ts.map +1 -0
- package/dist/repo/gitlab.js +91 -0
- package/dist/repo/gitlab.js.map +1 -0
- package/dist/repo/index.d.ts +7 -0
- package/dist/repo/index.d.ts.map +1 -0
- package/dist/repo/index.js +5 -0
- package/dist/repo/index.js.map +1 -0
- package/dist/repo/tech-stack.d.ts +13 -0
- package/dist/repo/tech-stack.d.ts.map +1 -0
- package/dist/repo/tech-stack.js +112 -0
- package/dist/repo/tech-stack.js.map +1 -0
- package/dist/security/index.d.ts +3 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +3 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/review-checklist.d.ts +9 -0
- package/dist/security/review-checklist.d.ts.map +1 -0
- package/dist/security/review-checklist.js +46 -0
- package/dist/security/review-checklist.js.map +1 -0
- package/dist/security/sandbox.d.ts +7 -0
- package/dist/security/sandbox.d.ts.map +1 -0
- package/dist/security/sandbox.js +31 -0
- package/dist/security/sandbox.js.map +1 -0
- package/dist/server.d.ts +48 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +90 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +1230 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +225 -0
- package/dist/types.js.map +1 -0
- package/dist/webhook/github-handler.d.ts +39 -0
- package/dist/webhook/github-handler.d.ts.map +1 -0
- package/dist/webhook/github-handler.js +439 -0
- package/dist/webhook/github-handler.js.map +1 -0
- package/dist/webhook/handler.d.ts +16 -0
- package/dist/webhook/handler.d.ts.map +1 -0
- package/dist/webhook/handler.js +171 -0
- package/dist/webhook/handler.js.map +1 -0
- package/dist/webhook/index.d.ts +5 -0
- package/dist/webhook/index.d.ts.map +1 -0
- package/dist/webhook/index.js +5 -0
- package/dist/webhook/index.js.map +1 -0
- package/dist/webhook/parser.d.ts +18 -0
- package/dist/webhook/parser.d.ts.map +1 -0
- package/dist/webhook/parser.js +30 -0
- package/dist/webhook/parser.js.map +1 -0
- package/dist/webhook/signature.d.ts +2 -0
- package/dist/webhook/signature.d.ts.map +1 -0
- package/dist/webhook/signature.js +14 -0
- package/dist/webhook/signature.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/repo/github.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAiC9B;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,OAAO,GAAG,QAAQ,GAAG,QAAmB,GACpD,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA6B/C;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAsBlB"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { Octokit } from "@octokit/rest";
|
|
2
|
+
import { createAppAuth } from "@octokit/auth-app";
|
|
3
|
+
/**
|
|
4
|
+
* Create an authenticated Octokit instance using GitHub App credentials.
|
|
5
|
+
*/
|
|
6
|
+
export async function createGitHubClient(config) {
|
|
7
|
+
const octokit = new Octokit({
|
|
8
|
+
authStrategy: createAppAuth,
|
|
9
|
+
auth: {
|
|
10
|
+
appId: config.appId,
|
|
11
|
+
privateKey: config.privateKey,
|
|
12
|
+
installationId: config.installationId,
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
return octokit;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create a pull request and return the PR URL (html_url).
|
|
19
|
+
*/
|
|
20
|
+
export async function createPR(octokit, options) {
|
|
21
|
+
const response = await octokit.pulls.create({
|
|
22
|
+
owner: options.owner,
|
|
23
|
+
repo: options.repo,
|
|
24
|
+
head: options.branch,
|
|
25
|
+
base: options.base,
|
|
26
|
+
title: options.title,
|
|
27
|
+
body: options.body,
|
|
28
|
+
draft: options.draft ?? false,
|
|
29
|
+
});
|
|
30
|
+
return response.data.html_url;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Add a comment to a pull request.
|
|
34
|
+
*/
|
|
35
|
+
export async function addPRComment(octokit, owner, repo, prNumber, body) {
|
|
36
|
+
await octokit.issues.createComment({
|
|
37
|
+
owner,
|
|
38
|
+
repo,
|
|
39
|
+
issue_number: prNumber,
|
|
40
|
+
body,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Count the number of unique approving reviews on a PR.
|
|
45
|
+
* Uses the latest state per reviewer — a reviewer who approved then requested changes
|
|
46
|
+
* is not counted as approving.
|
|
47
|
+
*/
|
|
48
|
+
export async function getPRApprovalCount(octokit, owner, repo, prNumber) {
|
|
49
|
+
const { data: reviews } = await octokit.pulls.listReviews({
|
|
50
|
+
owner,
|
|
51
|
+
repo,
|
|
52
|
+
pull_number: prNumber,
|
|
53
|
+
per_page: 100,
|
|
54
|
+
});
|
|
55
|
+
// Keep only the latest review state per reviewer user id
|
|
56
|
+
const latestByReviewer = new Map();
|
|
57
|
+
for (const review of reviews) {
|
|
58
|
+
const userId = review.user?.id ?? 0;
|
|
59
|
+
latestByReviewer.set(userId, review.state);
|
|
60
|
+
}
|
|
61
|
+
return [...latestByReviewer.values()].filter((state) => state === "APPROVED").length;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get all passing/failing check names for a commit SHA.
|
|
65
|
+
* Covers both legacy commit statuses and modern GitHub check runs.
|
|
66
|
+
* Returns a map from check name → conclusion ("success" | "failure" | "pending" | …).
|
|
67
|
+
*/
|
|
68
|
+
export async function getPRCheckResults(octokit, owner, repo, sha) {
|
|
69
|
+
const results = new Map();
|
|
70
|
+
// Legacy commit statuses
|
|
71
|
+
try {
|
|
72
|
+
const { data: combined } = await octokit.repos.getCombinedStatusForRef({
|
|
73
|
+
owner,
|
|
74
|
+
repo,
|
|
75
|
+
ref: sha,
|
|
76
|
+
});
|
|
77
|
+
for (const status of combined.statuses) {
|
|
78
|
+
results.set(status.context, status.state); // "success" | "failure" | "pending" | "error"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// Ignore — repo may not use legacy statuses
|
|
83
|
+
}
|
|
84
|
+
// Modern check runs
|
|
85
|
+
try {
|
|
86
|
+
const { data: checkData } = await octokit.checks.listForRef({
|
|
87
|
+
owner,
|
|
88
|
+
repo,
|
|
89
|
+
ref: sha,
|
|
90
|
+
per_page: 100,
|
|
91
|
+
});
|
|
92
|
+
for (const run of checkData.check_runs) {
|
|
93
|
+
results.set(run.name, run.conclusion ?? "pending");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Ignore — repo may not use checks API
|
|
98
|
+
}
|
|
99
|
+
return results;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Merge a pull request via the GitHub API.
|
|
103
|
+
* Returns { merged: true } on success.
|
|
104
|
+
* Returns { merged: false, message } if branch protection prevents the merge or there is a conflict.
|
|
105
|
+
* Throws on unexpected errors.
|
|
106
|
+
*/
|
|
107
|
+
export async function mergePRViaApi(octokit, owner, repo, prNumber, mergeMethod = "squash") {
|
|
108
|
+
try {
|
|
109
|
+
const response = await octokit.pulls.merge({
|
|
110
|
+
owner,
|
|
111
|
+
repo,
|
|
112
|
+
pull_number: prNumber,
|
|
113
|
+
merge_method: mergeMethod,
|
|
114
|
+
});
|
|
115
|
+
return {
|
|
116
|
+
merged: response.data.merged,
|
|
117
|
+
message: response.data.message ?? "Merged successfully",
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
const status = err?.status ?? 0;
|
|
122
|
+
const message = err?.message ?? String(err);
|
|
123
|
+
if (status === 405) {
|
|
124
|
+
// Branch protection rules prevented the merge
|
|
125
|
+
return { merged: false, message: `Branch protection prevented merge: ${message}` };
|
|
126
|
+
}
|
|
127
|
+
if (status === 409) {
|
|
128
|
+
// Merge conflict
|
|
129
|
+
return { merged: false, message: `Merge conflict: ${message}` };
|
|
130
|
+
}
|
|
131
|
+
if (status === 422) {
|
|
132
|
+
// Validation failed (e.g. PR already merged)
|
|
133
|
+
return { merged: false, message: `Merge validation failed: ${message}` };
|
|
134
|
+
}
|
|
135
|
+
throw err;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Re-request review from the current reviewers on a pull request.
|
|
140
|
+
* Fetches the list of requested reviewers from the PR and re-requests them.
|
|
141
|
+
* Returns true if review was re-requested, false if there were no reviewers to re-request.
|
|
142
|
+
*/
|
|
143
|
+
export async function rerequestPRReview(octokit, owner, repo, prNumber) {
|
|
144
|
+
// Get current requested reviewers
|
|
145
|
+
const { data: pr } = await octokit.pulls.get({
|
|
146
|
+
owner,
|
|
147
|
+
repo,
|
|
148
|
+
pull_number: prNumber,
|
|
149
|
+
});
|
|
150
|
+
const reviewers = pr.requested_reviewers?.map((r) => r.login) ?? [];
|
|
151
|
+
const teamReviewers = pr.requested_teams?.map((t) => t.slug) ?? [];
|
|
152
|
+
if (reviewers.length === 0 && teamReviewers.length === 0) {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
await octokit.pulls.requestReviewers({
|
|
156
|
+
owner,
|
|
157
|
+
repo,
|
|
158
|
+
pull_number: prNumber,
|
|
159
|
+
reviewers,
|
|
160
|
+
team_reviewers: teamReviewers,
|
|
161
|
+
});
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/repo/github.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitLab repo provider.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Clone via GitLab deploy tokens (embed credentials in the remote URL).
|
|
6
|
+
* - Merge request creation via the GitLab REST API.
|
|
7
|
+
* - Self-hosted GitLab instances via the optional `host` field.
|
|
8
|
+
*/
|
|
9
|
+
export interface GitLabConfig {
|
|
10
|
+
/** Personal access token, project access token, or deploy token with api scope. */
|
|
11
|
+
token: string;
|
|
12
|
+
/**
|
|
13
|
+
* GitLab host (no trailing slash). Defaults to "https://gitlab.com".
|
|
14
|
+
* Override for self-hosted instances, e.g. "https://gitlab.example.com".
|
|
15
|
+
*/
|
|
16
|
+
host?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface CreateMROptions {
|
|
19
|
+
/** GitLab namespace+project path, e.g. "myorg/myrepo". */
|
|
20
|
+
projectPath: string;
|
|
21
|
+
/** Source branch to merge from. */
|
|
22
|
+
sourceBranch: string;
|
|
23
|
+
/** Target branch to merge into. */
|
|
24
|
+
targetBranch: string;
|
|
25
|
+
title: string;
|
|
26
|
+
description: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Inject deploy-token credentials into a GitLab HTTPS clone URL so that
|
|
30
|
+
* `git clone` / `git push` works without interactive prompts.
|
|
31
|
+
*
|
|
32
|
+
* Input: https://gitlab.com/myorg/myrepo.git
|
|
33
|
+
* Output: https://<tokenUser>:<token>@gitlab.com/myorg/myrepo.git
|
|
34
|
+
*
|
|
35
|
+
* If the URL already contains credentials this is a no-op.
|
|
36
|
+
*/
|
|
37
|
+
export declare function buildAuthenticatedUrl(repoUrl: string, config: GitLabConfig, tokenUser?: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Create a merge request via the GitLab REST API.
|
|
40
|
+
* Returns the MR web URL on success.
|
|
41
|
+
*/
|
|
42
|
+
export declare function createMR(config: GitLabConfig, options: CreateMROptions): Promise<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Add a comment (note) to an existing merge request.
|
|
45
|
+
*/
|
|
46
|
+
export declare function addMRComment(config: GitLabConfig, projectPath: string, mrIid: number, body: string): Promise<void>;
|
|
47
|
+
//# sourceMappingURL=gitlab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitlab.d.ts","sourceRoot":"","sources":["../../src/repo/gitlab.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,YAAY;IAC3B,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,SAAS,SAAW,GACnB,MAAM,CASR;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CA4CjB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitLab repo provider.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Clone via GitLab deploy tokens (embed credentials in the remote URL).
|
|
6
|
+
* - Merge request creation via the GitLab REST API.
|
|
7
|
+
* - Self-hosted GitLab instances via the optional `host` field.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Inject deploy-token credentials into a GitLab HTTPS clone URL so that
|
|
11
|
+
* `git clone` / `git push` works without interactive prompts.
|
|
12
|
+
*
|
|
13
|
+
* Input: https://gitlab.com/myorg/myrepo.git
|
|
14
|
+
* Output: https://<tokenUser>:<token>@gitlab.com/myorg/myrepo.git
|
|
15
|
+
*
|
|
16
|
+
* If the URL already contains credentials this is a no-op.
|
|
17
|
+
*/
|
|
18
|
+
export function buildAuthenticatedUrl(repoUrl, config, tokenUser = "oauth2") {
|
|
19
|
+
const parsed = new URL(repoUrl);
|
|
20
|
+
if (parsed.username) {
|
|
21
|
+
// Already has credentials — don't overwrite.
|
|
22
|
+
return repoUrl;
|
|
23
|
+
}
|
|
24
|
+
parsed.username = tokenUser;
|
|
25
|
+
parsed.password = config.token;
|
|
26
|
+
return parsed.toString();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Create a merge request via the GitLab REST API.
|
|
30
|
+
* Returns the MR web URL on success.
|
|
31
|
+
*/
|
|
32
|
+
export async function createMR(config, options) {
|
|
33
|
+
const host = config.host ?? "https://gitlab.com";
|
|
34
|
+
const encodedPath = encodeURIComponent(options.projectPath);
|
|
35
|
+
const apiUrl = `${host}/api/v4/projects/${encodedPath}/merge_requests`;
|
|
36
|
+
const body = JSON.stringify({
|
|
37
|
+
source_branch: options.sourceBranch,
|
|
38
|
+
target_branch: options.targetBranch,
|
|
39
|
+
title: options.title,
|
|
40
|
+
description: options.description,
|
|
41
|
+
remove_source_branch: true,
|
|
42
|
+
});
|
|
43
|
+
const response = await fetch(apiUrl, {
|
|
44
|
+
method: "POST",
|
|
45
|
+
headers: {
|
|
46
|
+
"Content-Type": "application/json",
|
|
47
|
+
"PRIVATE-TOKEN": config.token,
|
|
48
|
+
},
|
|
49
|
+
body,
|
|
50
|
+
});
|
|
51
|
+
if (response.status === 409) {
|
|
52
|
+
// MR already exists for this source→target — fetch the existing one
|
|
53
|
+
const listUrl = `${host}/api/v4/projects/${encodedPath}/merge_requests?source_branch=${encodeURIComponent(options.sourceBranch)}&target_branch=${encodeURIComponent(options.targetBranch)}&state=opened`;
|
|
54
|
+
const listResp = await fetch(listUrl, {
|
|
55
|
+
headers: { "PRIVATE-TOKEN": config.token },
|
|
56
|
+
});
|
|
57
|
+
if (listResp.ok) {
|
|
58
|
+
const mrs = (await listResp.json());
|
|
59
|
+
if (mrs.length > 0)
|
|
60
|
+
return mrs[0].web_url;
|
|
61
|
+
}
|
|
62
|
+
// Couldn't find existing MR — fall through to error
|
|
63
|
+
}
|
|
64
|
+
if (!response.ok) {
|
|
65
|
+
await response.text().catch(() => { }); // drain body
|
|
66
|
+
throw new Error(`GitLab API error ${response.status} creating MR`);
|
|
67
|
+
}
|
|
68
|
+
const data = (await response.json());
|
|
69
|
+
return data.web_url;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Add a comment (note) to an existing merge request.
|
|
73
|
+
*/
|
|
74
|
+
export async function addMRComment(config, projectPath, mrIid, body) {
|
|
75
|
+
const host = config.host ?? "https://gitlab.com";
|
|
76
|
+
const encodedPath = encodeURIComponent(projectPath);
|
|
77
|
+
const apiUrl = `${host}/api/v4/projects/${encodedPath}/merge_requests/${mrIid}/notes`;
|
|
78
|
+
const response = await fetch(apiUrl, {
|
|
79
|
+
method: "POST",
|
|
80
|
+
headers: {
|
|
81
|
+
"Content-Type": "application/json",
|
|
82
|
+
"PRIVATE-TOKEN": config.token,
|
|
83
|
+
},
|
|
84
|
+
body: JSON.stringify({ body }),
|
|
85
|
+
});
|
|
86
|
+
if (!response.ok) {
|
|
87
|
+
const text = await response.text().catch(() => "<no body>");
|
|
88
|
+
throw new Error(`GitLab API error ${response.status} adding MR comment: ${text}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=gitlab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/repo/gitlab.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { gitExec, gitExecSafe, gitExecRaw, cloneRepo, fetchLatest, createWorktree, createWorktreeFromRemote, deleteWorktree, pushBranch, pushBranchForce, autoCommitChanges, rebaseBranch, abortRebase, createPRViaCli, mergePRViaCli, getDiffLineCount, checkDuplicateBranch, branchName, getCurrentBranch, verifyBranchMatch, installPrePushHook, cleanupWorktrees, } from "./git.js";
|
|
2
|
+
export { createGitHubClient, createPR, addPRComment, } from "./github.js";
|
|
3
|
+
export type { GitHubConfig, CreatePROptions } from "./github.js";
|
|
4
|
+
export { buildAuthenticatedUrl, createMR, addMRComment, } from "./gitlab.js";
|
|
5
|
+
export type { GitLabConfig, CreateMROptions } from "./gitlab.js";
|
|
6
|
+
export { resolveRepo, parseRepoUrl, parseGitLabUrl } from "./config.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,wBAAwB,EACxB,cAAc,EACd,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EACL,qBAAqB,EACrB,QAAQ,EACR,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { gitExec, gitExecSafe, gitExecRaw, cloneRepo, fetchLatest, createWorktree, createWorktreeFromRemote, deleteWorktree, pushBranch, pushBranchForce, autoCommitChanges, rebaseBranch, abortRebase, createPRViaCli, mergePRViaCli, getDiffLineCount, checkDuplicateBranch, branchName, getCurrentBranch, verifyBranchMatch, installPrePushHook, cleanupWorktrees, } from "./git.js";
|
|
2
|
+
export { createGitHubClient, createPR, addPRComment, } from "./github.js";
|
|
3
|
+
export { buildAuthenticatedUrl, createMR, addMRComment, } from "./gitlab.js";
|
|
4
|
+
export { resolveRepo, parseRepoUrl, parseGitLabUrl } from "./config.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,wBAAwB,EACxB,cAAc,EACd,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,YAAY,GACb,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,qBAAqB,EACrB,QAAQ,EACR,YAAY,GACb,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface TechStackProfile {
|
|
2
|
+
languages: string[];
|
|
3
|
+
frameworks: string[];
|
|
4
|
+
buildSystems: string[];
|
|
5
|
+
hasDevcontainer: boolean;
|
|
6
|
+
devcontainerPath?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Detect the tech stack of a project by scanning for marker files.
|
|
10
|
+
* Fast, file-existence-based detection — no AST parsing.
|
|
11
|
+
*/
|
|
12
|
+
export declare function detectTechStack(worktreePath: string): Promise<TechStackProfile>;
|
|
13
|
+
//# sourceMappingURL=tech-stack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tech-stack.d.ts","sourceRoot":"","sources":["../../src/repo/tech-stack.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAgED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4CrF"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { access, readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
const MARKERS = [
|
|
4
|
+
{
|
|
5
|
+
file: "package.json",
|
|
6
|
+
language: "javascript",
|
|
7
|
+
buildSystem: "npm",
|
|
8
|
+
detectFrameworks: (content) => {
|
|
9
|
+
const frameworks = [];
|
|
10
|
+
try {
|
|
11
|
+
const pkg = JSON.parse(content);
|
|
12
|
+
const allDeps = {
|
|
13
|
+
...pkg.dependencies,
|
|
14
|
+
...pkg.devDependencies,
|
|
15
|
+
};
|
|
16
|
+
if (allDeps.typescript || pkg.devDependencies?.typescript)
|
|
17
|
+
frameworks.push("typescript");
|
|
18
|
+
if (allDeps.react)
|
|
19
|
+
frameworks.push("react");
|
|
20
|
+
if (allDeps.next)
|
|
21
|
+
frameworks.push("nextjs");
|
|
22
|
+
if (allDeps.vue)
|
|
23
|
+
frameworks.push("vue");
|
|
24
|
+
if (allDeps["@angular/core"])
|
|
25
|
+
frameworks.push("angular");
|
|
26
|
+
if (allDeps.express)
|
|
27
|
+
frameworks.push("express");
|
|
28
|
+
if (allDeps["@nestjs/core"])
|
|
29
|
+
frameworks.push("nestjs");
|
|
30
|
+
if (allDeps.hono)
|
|
31
|
+
frameworks.push("hono");
|
|
32
|
+
if (allDeps.svelte)
|
|
33
|
+
frameworks.push("svelte");
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// Invalid JSON — skip framework detection
|
|
37
|
+
}
|
|
38
|
+
return frameworks;
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
{ file: "tsconfig.json", language: "typescript" },
|
|
42
|
+
{ file: "Cargo.toml", language: "rust", buildSystem: "cargo" },
|
|
43
|
+
{ file: "go.mod", language: "go", buildSystem: "go-mod" },
|
|
44
|
+
{ file: "pyproject.toml", language: "python", buildSystem: "poetry" },
|
|
45
|
+
{ file: "requirements.txt", language: "python", buildSystem: "pip" },
|
|
46
|
+
{ file: "Pipfile", language: "python", buildSystem: "pipenv" },
|
|
47
|
+
{ file: "pom.xml", language: "java", buildSystem: "maven" },
|
|
48
|
+
{ file: "build.gradle", language: "java", buildSystem: "gradle" },
|
|
49
|
+
{ file: "build.gradle.kts", language: "kotlin", buildSystem: "gradle" },
|
|
50
|
+
{ file: "Gemfile", language: "ruby", buildSystem: "bundler" },
|
|
51
|
+
{ file: "composer.json", language: "php", buildSystem: "composer" },
|
|
52
|
+
{ file: "mix.exs", language: "elixir", buildSystem: "mix" },
|
|
53
|
+
{ file: "pnpm-lock.yaml", buildSystem: "pnpm" },
|
|
54
|
+
{ file: "yarn.lock", buildSystem: "yarn" },
|
|
55
|
+
{ file: "bun.lockb", buildSystem: "bun" },
|
|
56
|
+
];
|
|
57
|
+
async function fileExists(path) {
|
|
58
|
+
try {
|
|
59
|
+
await access(path);
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Detect the tech stack of a project by scanning for marker files.
|
|
68
|
+
* Fast, file-existence-based detection — no AST parsing.
|
|
69
|
+
*/
|
|
70
|
+
export async function detectTechStack(worktreePath) {
|
|
71
|
+
const languages = new Set();
|
|
72
|
+
const frameworks = new Set();
|
|
73
|
+
const buildSystems = new Set();
|
|
74
|
+
// Check all markers in parallel
|
|
75
|
+
const checks = MARKERS.map(async (marker) => {
|
|
76
|
+
const filePath = join(worktreePath, marker.file);
|
|
77
|
+
const exists = await fileExists(filePath);
|
|
78
|
+
if (!exists)
|
|
79
|
+
return;
|
|
80
|
+
if (marker.language)
|
|
81
|
+
languages.add(marker.language);
|
|
82
|
+
if (marker.buildSystem)
|
|
83
|
+
buildSystems.add(marker.buildSystem);
|
|
84
|
+
if (marker.detectFrameworks) {
|
|
85
|
+
try {
|
|
86
|
+
const content = await readFile(filePath, "utf-8");
|
|
87
|
+
for (const fw of marker.detectFrameworks(content)) {
|
|
88
|
+
frameworks.add(fw);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Can't read file — skip framework detection
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
await Promise.all(checks);
|
|
97
|
+
// Typescript detection from tsconfig upgrades javascript → typescript
|
|
98
|
+
if (languages.has("typescript") && languages.has("javascript")) {
|
|
99
|
+
languages.delete("javascript");
|
|
100
|
+
}
|
|
101
|
+
// Check for devcontainer
|
|
102
|
+
const devcontainerPath = ".devcontainer/devcontainer.json";
|
|
103
|
+
const hasDevcontainer = await fileExists(join(worktreePath, devcontainerPath));
|
|
104
|
+
return {
|
|
105
|
+
languages: [...languages],
|
|
106
|
+
frameworks: [...frameworks],
|
|
107
|
+
buildSystems: [...buildSystems],
|
|
108
|
+
hasDevcontainer,
|
|
109
|
+
devcontainerPath: hasDevcontainer ? devcontainerPath : undefined,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=tech-stack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tech-stack.js","sourceRoot":"","sources":["../../src/repo/tech-stack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security review checklist used by the review stage agent.
|
|
3
|
+
*/
|
|
4
|
+
export declare const SECURITY_REVIEW_CHECKLIST = "## Security Review Checklist\n\n### 1. INJECTION VULNERABILITIES\n- [ ] No SQL injection: all queries use parameterized statements or an ORM\n- [ ] No XSS: user input is escaped before rendering in HTML\n- [ ] No command injection: shell commands do not interpolate user input\n- [ ] No path traversal: file paths are validated and canonicalized\n\n### 2. AUTHENTICATION & AUTHORIZATION\n- [ ] All endpoints require authentication unless explicitly public\n- [ ] Authorization checks verify the caller owns or has access to the resource\n- [ ] Tokens and sessions have appropriate expiration\n- [ ] Sensitive operations require re-authentication or elevated permissions\n\n### 3. DATA EXPOSURE\n- [ ] No secrets or credentials in source code or logs\n- [ ] API responses do not leak internal IDs, stack traces, or PII\n- [ ] Error messages are generic and do not reveal implementation details\n- [ ] Sensitive data is encrypted at rest and in transit\n\n### 4. DEPENDENCY SAFETY\n- [ ] No known vulnerable dependencies (check advisories)\n- [ ] Dependencies are pinned to specific versions or ranges\n- [ ] No unnecessary dependencies added\n- [ ] Sub-dependencies do not introduce supply-chain risk\n";
|
|
5
|
+
/**
|
|
6
|
+
* Instructions for the review agent on how to format findings as JSON.
|
|
7
|
+
*/
|
|
8
|
+
export declare const REVIEW_OUTPUT_FORMAT = "Output your findings as a JSON array. Each finding must have this shape:\n\n{\n \"severity\": \"blocking\" | \"warning\" | \"suggestion\",\n \"file\": \"path/to/file.ts\",\n \"line\": 42,\n \"category\": \"SQL Injection\" | \"XSS\" | \"Command Injection\" | \"Path Traversal\" | \"Auth\" | \"Data Exposure\" | \"Dependency\" | \"Other\",\n \"description\": \"Clear explanation of the issue\",\n \"fix\": \"Suggested remediation\"\n}\n\nIf no issues are found, return an empty array: []\n";
|
|
9
|
+
//# sourceMappingURL=review-checklist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-checklist.d.ts","sourceRoot":"","sources":["../../src/security/review-checklist.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,yBAAyB,srCAyBrC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,kfAYhC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security review checklist used by the review stage agent.
|
|
3
|
+
*/
|
|
4
|
+
export const SECURITY_REVIEW_CHECKLIST = `## Security Review Checklist
|
|
5
|
+
|
|
6
|
+
### 1. INJECTION VULNERABILITIES
|
|
7
|
+
- [ ] No SQL injection: all queries use parameterized statements or an ORM
|
|
8
|
+
- [ ] No XSS: user input is escaped before rendering in HTML
|
|
9
|
+
- [ ] No command injection: shell commands do not interpolate user input
|
|
10
|
+
- [ ] No path traversal: file paths are validated and canonicalized
|
|
11
|
+
|
|
12
|
+
### 2. AUTHENTICATION & AUTHORIZATION
|
|
13
|
+
- [ ] All endpoints require authentication unless explicitly public
|
|
14
|
+
- [ ] Authorization checks verify the caller owns or has access to the resource
|
|
15
|
+
- [ ] Tokens and sessions have appropriate expiration
|
|
16
|
+
- [ ] Sensitive operations require re-authentication or elevated permissions
|
|
17
|
+
|
|
18
|
+
### 3. DATA EXPOSURE
|
|
19
|
+
- [ ] No secrets or credentials in source code or logs
|
|
20
|
+
- [ ] API responses do not leak internal IDs, stack traces, or PII
|
|
21
|
+
- [ ] Error messages are generic and do not reveal implementation details
|
|
22
|
+
- [ ] Sensitive data is encrypted at rest and in transit
|
|
23
|
+
|
|
24
|
+
### 4. DEPENDENCY SAFETY
|
|
25
|
+
- [ ] No known vulnerable dependencies (check advisories)
|
|
26
|
+
- [ ] Dependencies are pinned to specific versions or ranges
|
|
27
|
+
- [ ] No unnecessary dependencies added
|
|
28
|
+
- [ ] Sub-dependencies do not introduce supply-chain risk
|
|
29
|
+
`;
|
|
30
|
+
/**
|
|
31
|
+
* Instructions for the review agent on how to format findings as JSON.
|
|
32
|
+
*/
|
|
33
|
+
export const REVIEW_OUTPUT_FORMAT = `Output your findings as a JSON array. Each finding must have this shape:
|
|
34
|
+
|
|
35
|
+
{
|
|
36
|
+
"severity": "blocking" | "warning" | "suggestion",
|
|
37
|
+
"file": "path/to/file.ts",
|
|
38
|
+
"line": 42,
|
|
39
|
+
"category": "SQL Injection" | "XSS" | "Command Injection" | "Path Traversal" | "Auth" | "Data Exposure" | "Dependency" | "Other",
|
|
40
|
+
"description": "Clear explanation of the issue",
|
|
41
|
+
"fix": "Suggested remediation"
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
If no issues are found, return an empty array: []
|
|
45
|
+
`;
|
|
46
|
+
//# sourceMappingURL=review-checklist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-checklist.js","sourceRoot":"","sources":["../../src/security/review-checklist.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBxC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;CAYnC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SandboxConfig } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a sandbox configuration for an agent run.
|
|
4
|
+
* Each run gets an isolated workdir under the base directory.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createSandboxConfig(runId: string, baseDir?: string): SandboxConfig;
|
|
7
|
+
//# sourceMappingURL=sandbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/security/sandbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAwBjD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,MAAyB,GACjC,aAAa,CAOf"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const DEFAULT_BASE_DIR = "/var/agent-runs";
|
|
2
|
+
const ALLOWED_DOMAINS = [
|
|
3
|
+
"github.com",
|
|
4
|
+
"api.linear.app",
|
|
5
|
+
"mcp.linear.app",
|
|
6
|
+
"registry.npmjs.org",
|
|
7
|
+
"pypi.org",
|
|
8
|
+
];
|
|
9
|
+
const DENY_READ = [
|
|
10
|
+
"~/.ssh/*",
|
|
11
|
+
"~/.aws/*",
|
|
12
|
+
"/etc/shadow",
|
|
13
|
+
"~/.claude/*",
|
|
14
|
+
];
|
|
15
|
+
const DENY_WRITE = [
|
|
16
|
+
"/etc/*",
|
|
17
|
+
"~/.claude/*",
|
|
18
|
+
];
|
|
19
|
+
/**
|
|
20
|
+
* Creates a sandbox configuration for an agent run.
|
|
21
|
+
* Each run gets an isolated workdir under the base directory.
|
|
22
|
+
*/
|
|
23
|
+
export function createSandboxConfig(runId, baseDir = DEFAULT_BASE_DIR) {
|
|
24
|
+
return {
|
|
25
|
+
workdir: `${baseDir}/${runId}/worktree`,
|
|
26
|
+
allowedDomains: [...ALLOWED_DOMAINS],
|
|
27
|
+
denyRead: [...DENY_READ],
|
|
28
|
+
denyWrite: [...DENY_WRITE],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/security/sandbox.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAE3C,MAAM,eAAe,GAAG;IACtB,YAAY;IACZ,gBAAgB;IAChB,gBAAgB;IAChB,oBAAoB;IACpB,UAAU;CACX,CAAC;AAEF,MAAM,SAAS,GAAG;IAChB,UAAU;IACV,UAAU;IACV,aAAa;IACb,aAAa;CACd,CAAC;AAEF,MAAM,UAAU,GAAG;IACjB,QAAQ;IACR,aAAa;CACd,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,UAAkB,gBAAgB;IAElC,OAAO;QACL,OAAO,EAAE,GAAG,OAAO,IAAI,KAAK,WAAW;QACvC,cAAc,EAAE,CAAC,GAAG,eAAe,CAAC;QACpC,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC;QACxB,SAAS,EAAE,CAAC,GAAG,UAAU,CAAC;KAC3B,CAAC;AACJ,CAAC"}
|