@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
package/dist/license.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { createLogger } from "./logger.js";
|
|
2
|
+
const log = createLogger({ component: "license" });
|
|
3
|
+
const COMMERCIAL_FEATURES = new Set([
|
|
4
|
+
"slack-interface",
|
|
5
|
+
"conflict-detection",
|
|
6
|
+
"deep-review",
|
|
7
|
+
"approval-workflows",
|
|
8
|
+
"multi-repo",
|
|
9
|
+
"stage-models",
|
|
10
|
+
"advanced-automerge",
|
|
11
|
+
]);
|
|
12
|
+
let cachedStatus = null;
|
|
13
|
+
/**
|
|
14
|
+
* Check the license status from URATEAM_LICENSE_KEY env var.
|
|
15
|
+
* Result is cached for the lifetime of the process.
|
|
16
|
+
*/
|
|
17
|
+
export function checkLicense() {
|
|
18
|
+
if (cachedStatus)
|
|
19
|
+
return cachedStatus;
|
|
20
|
+
const key = process.env.URATEAM_LICENSE_KEY;
|
|
21
|
+
if (!key) {
|
|
22
|
+
cachedStatus = { licensed: false, tier: "free" };
|
|
23
|
+
return cachedStatus;
|
|
24
|
+
}
|
|
25
|
+
// For now, any non-empty key grants "pro" tier.
|
|
26
|
+
// Future: validate JWT signature, extract tier from claims.
|
|
27
|
+
cachedStatus = { licensed: true, tier: "pro", key };
|
|
28
|
+
log.info({ tier: "pro" }, "license key validated");
|
|
29
|
+
return cachedStatus;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check if a specific feature is available under the current license.
|
|
33
|
+
* Returns true for free features regardless of license status.
|
|
34
|
+
*/
|
|
35
|
+
export function isFeatureLicensed(feature) {
|
|
36
|
+
if (!COMMERCIAL_FEATURES.has(feature))
|
|
37
|
+
return true;
|
|
38
|
+
return checkLicense().licensed;
|
|
39
|
+
}
|
|
40
|
+
/** Reset cached status (for testing). */
|
|
41
|
+
export function _resetLicenseCache() {
|
|
42
|
+
cachedStatus = null;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=license.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;AAQnD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,iBAAiB;IACjB,oBAAoB;IACpB,aAAa;IACb,oBAAoB;IACpB,YAAY;IACZ,cAAc;IACd,oBAAoB;CACrB,CAAC,CAAC;AAEH,IAAI,YAAY,GAAyB,IAAI,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,YAAY,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACjD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,gDAAgD;IAChD,4DAA4D;IAC5D,YAAY,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACpD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,uBAAuB,CAAC,CAAC;IACnD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,OAAO,YAAY,EAAE,CAAC,QAAQ,CAAC;AACjC,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,kBAAkB;IAChC,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import pino from "pino";
|
|
2
|
+
import { Writable } from "node:stream";
|
|
3
|
+
export declare const rootLogger: pino.Logger;
|
|
4
|
+
/**
|
|
5
|
+
* Add an additional Writable destination to the root logger's output.
|
|
6
|
+
* Each log line (serialised JSON) will be forwarded to the stream.
|
|
7
|
+
*
|
|
8
|
+
* No-op when LOG_PRETTY=1 is set (transport mode).
|
|
9
|
+
*
|
|
10
|
+
* Use this to attach the SlackAlertStream at startup:
|
|
11
|
+
* addLogStream(createSlackAlertStream(manager));
|
|
12
|
+
*/
|
|
13
|
+
export declare function addLogStream(stream: Writable): void;
|
|
14
|
+
/**
|
|
15
|
+
* Create a child logger with additional bound fields.
|
|
16
|
+
* Use this to attach correlation IDs (runId, stage, etc.) to every log line.
|
|
17
|
+
*
|
|
18
|
+
* Example:
|
|
19
|
+
* const log = createLogger({ component: "PipelineRunner", runId });
|
|
20
|
+
* log.info("pipeline started");
|
|
21
|
+
* // ā { "runId": "...", "component": "PipelineRunner", "msg": "pipeline started", ... }
|
|
22
|
+
*/
|
|
23
|
+
export declare function createLogger(context: Record<string, unknown>): pino.Logger;
|
|
24
|
+
/**
|
|
25
|
+
* Log context propagated via AsyncLocalStorage so shared modules (git.ts,
|
|
26
|
+
* coordination.ts) can include issueId/runId without changing their signatures.
|
|
27
|
+
*/
|
|
28
|
+
export interface LogContext {
|
|
29
|
+
runId?: string;
|
|
30
|
+
issueId?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Run fn within a log context. All log lines emitted by shared modules
|
|
34
|
+
* (git.ts, coordination.ts) inside fn will automatically include the
|
|
35
|
+
* provided issueId and runId fields.
|
|
36
|
+
*/
|
|
37
|
+
export declare function runWithLogContext<T>(context: LogContext, fn: () => T): T;
|
|
38
|
+
/**
|
|
39
|
+
* Return the current log context from AsyncLocalStorage, or undefined when
|
|
40
|
+
* called outside a runWithLogContext scope.
|
|
41
|
+
*/
|
|
42
|
+
export declare function getLogContext(): LogContext | undefined;
|
|
43
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA4CvC,eAAO,MAAM,UAAU,EAAE,IAAI,CAAC,MASQ,CAAC;AAEvC;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAGnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAE1E;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAExE;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,UAAU,GAAG,SAAS,CAEtD"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import pino from "pino";
|
|
2
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
3
|
+
import { Writable } from "node:stream";
|
|
4
|
+
/**
|
|
5
|
+
* Root structured logger for the Linear Agent Framework.
|
|
6
|
+
*
|
|
7
|
+
* Configuration:
|
|
8
|
+
* LOG_LEVEL ā pino log level (trace | debug | info | warn | error | fatal).
|
|
9
|
+
* Defaults to "info".
|
|
10
|
+
* LOG_PRETTY ā set to "1" for human-readable output during local development.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* A writable stream that fans out to stdout plus any additional streams
|
|
14
|
+
* registered via addLogStream(). This allows Slack alert hooks to be
|
|
15
|
+
* wired in at runtime without recreating the root logger.
|
|
16
|
+
*
|
|
17
|
+
* Note: only used in production mode (LOG_PRETTY !== "1"). When pretty
|
|
18
|
+
* printing is enabled, pino uses a worker-thread transport that bypasses
|
|
19
|
+
* this stream.
|
|
20
|
+
*/
|
|
21
|
+
class DynamicMultiStream extends Writable {
|
|
22
|
+
extras = [];
|
|
23
|
+
addStream(stream) {
|
|
24
|
+
this.extras.push(stream);
|
|
25
|
+
}
|
|
26
|
+
_write(chunk, _enc, callback) {
|
|
27
|
+
process.stdout.write(chunk);
|
|
28
|
+
for (const s of this.extras) {
|
|
29
|
+
s.write(chunk);
|
|
30
|
+
}
|
|
31
|
+
callback();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const _multiStream = new DynamicMultiStream();
|
|
35
|
+
const _pinoOptions = {
|
|
36
|
+
name: "urateam",
|
|
37
|
+
level: process.env.LOG_LEVEL ?? "info",
|
|
38
|
+
timestamp: pino.stdTimeFunctions.isoTime,
|
|
39
|
+
};
|
|
40
|
+
export const rootLogger = process.env.LOG_PRETTY === "1"
|
|
41
|
+
? pino({
|
|
42
|
+
..._pinoOptions,
|
|
43
|
+
transport: {
|
|
44
|
+
target: "pino-pretty",
|
|
45
|
+
options: { colorize: true, translateTime: "SYS:standard" },
|
|
46
|
+
},
|
|
47
|
+
})
|
|
48
|
+
: pino(_pinoOptions, _multiStream);
|
|
49
|
+
/**
|
|
50
|
+
* Add an additional Writable destination to the root logger's output.
|
|
51
|
+
* Each log line (serialised JSON) will be forwarded to the stream.
|
|
52
|
+
*
|
|
53
|
+
* No-op when LOG_PRETTY=1 is set (transport mode).
|
|
54
|
+
*
|
|
55
|
+
* Use this to attach the SlackAlertStream at startup:
|
|
56
|
+
* addLogStream(createSlackAlertStream(manager));
|
|
57
|
+
*/
|
|
58
|
+
export function addLogStream(stream) {
|
|
59
|
+
if (process.env.LOG_PRETTY === "1")
|
|
60
|
+
return;
|
|
61
|
+
_multiStream.addStream(stream);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Create a child logger with additional bound fields.
|
|
65
|
+
* Use this to attach correlation IDs (runId, stage, etc.) to every log line.
|
|
66
|
+
*
|
|
67
|
+
* Example:
|
|
68
|
+
* const log = createLogger({ component: "PipelineRunner", runId });
|
|
69
|
+
* log.info("pipeline started");
|
|
70
|
+
* // ā { "runId": "...", "component": "PipelineRunner", "msg": "pipeline started", ... }
|
|
71
|
+
*/
|
|
72
|
+
export function createLogger(context) {
|
|
73
|
+
return rootLogger.child(context);
|
|
74
|
+
}
|
|
75
|
+
const logContextStorage = new AsyncLocalStorage();
|
|
76
|
+
/**
|
|
77
|
+
* Run fn within a log context. All log lines emitted by shared modules
|
|
78
|
+
* (git.ts, coordination.ts) inside fn will automatically include the
|
|
79
|
+
* provided issueId and runId fields.
|
|
80
|
+
*/
|
|
81
|
+
export function runWithLogContext(context, fn) {
|
|
82
|
+
return logContextStorage.run(context, fn);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Return the current log context from AsyncLocalStorage, or undefined when
|
|
86
|
+
* called outside a runWithLogContext scope.
|
|
87
|
+
*/
|
|
88
|
+
export function getLogContext() {
|
|
89
|
+
return logContextStorage.getStore();
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;;;;;;GAOG;AAEH;;;;;;;;GAQG;AACH,MAAM,kBAAmB,SAAQ,QAAQ;IAC/B,MAAM,GAAe,EAAE,CAAC;IAEhC,SAAS,CAAC,MAAgB;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,IAAoB,EAAE,QAAoB;QAC9D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QACD,QAAQ,EAAE,CAAC;IACb,CAAC;CACF;AAED,MAAM,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAE9C,MAAM,YAAY,GAAuB;IACvC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;IACtC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO;CACzC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GACrB,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG;IAC5B,CAAC,CAAC,IAAI,CAAC;QACH,GAAG,YAAY;QACf,SAAS,EAAE;YACT,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE;SAC3D;KACF,CAAC;IACJ,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAEvC;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,MAAgB;IAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG;QAAE,OAAO;IAC3C,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,OAAgC;IAC3D,OAAO,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAWD,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAc,CAAC;AAE9D;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAI,OAAmB,EAAE,EAAW;IACnE,OAAO,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,iBAAiB,CAAC,QAAQ,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Notifier, PipelineRun, StageResult, PipelineResult, PipelineError, DailyTokenSummary } from "../types.js";
|
|
2
|
+
export declare class CompositeNotifier implements Notifier {
|
|
3
|
+
private notifiers;
|
|
4
|
+
constructor(notifiers: Notifier[]);
|
|
5
|
+
onPipelineStart(run: PipelineRun): Promise<void>;
|
|
6
|
+
onStageComplete(run: PipelineRun, stage: string, result: StageResult): Promise<void>;
|
|
7
|
+
onPipelineComplete(run: PipelineRun, result: PipelineResult): Promise<void>;
|
|
8
|
+
onPipelineFailed(run: PipelineRun, error: PipelineError): Promise<void>;
|
|
9
|
+
onHumanReviewNeeded(run: PipelineRun, prUrl: string, reason: string): Promise<void>;
|
|
10
|
+
onTokenBudgetAlert(run: PipelineRun, usedTokens: number, maxTokens: number): Promise<void>;
|
|
11
|
+
onDailyTokenSummary(summary: DailyTokenSummary): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=composite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composite.d.ts","sourceRoot":"","sources":["../../src/notifier/composite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAExH,qBAAa,iBAAkB,YAAW,QAAQ;IACpC,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,QAAQ,EAAE;IAEnC,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpF,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3E,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnF,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1F,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;CAKrE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export class CompositeNotifier {
|
|
2
|
+
notifiers;
|
|
3
|
+
constructor(notifiers) {
|
|
4
|
+
this.notifiers = notifiers;
|
|
5
|
+
}
|
|
6
|
+
async onPipelineStart(run) {
|
|
7
|
+
await Promise.allSettled(this.notifiers.map(n => n.onPipelineStart(run)));
|
|
8
|
+
}
|
|
9
|
+
async onStageComplete(run, stage, result) {
|
|
10
|
+
await Promise.allSettled(this.notifiers.map(n => n.onStageComplete(run, stage, result)));
|
|
11
|
+
}
|
|
12
|
+
async onPipelineComplete(run, result) {
|
|
13
|
+
await Promise.allSettled(this.notifiers.map(n => n.onPipelineComplete(run, result)));
|
|
14
|
+
}
|
|
15
|
+
async onPipelineFailed(run, error) {
|
|
16
|
+
await Promise.allSettled(this.notifiers.map(n => n.onPipelineFailed(run, error)));
|
|
17
|
+
}
|
|
18
|
+
async onHumanReviewNeeded(run, prUrl, reason) {
|
|
19
|
+
await Promise.allSettled(this.notifiers.map(n => n.onHumanReviewNeeded?.(run, prUrl, reason)));
|
|
20
|
+
}
|
|
21
|
+
async onTokenBudgetAlert(run, usedTokens, maxTokens) {
|
|
22
|
+
await Promise.allSettled(this.notifiers.filter(n => n.onTokenBudgetAlert).map(n => n.onTokenBudgetAlert(run, usedTokens, maxTokens)));
|
|
23
|
+
}
|
|
24
|
+
async onDailyTokenSummary(summary) {
|
|
25
|
+
await Promise.allSettled(this.notifiers.filter(n => n.onDailyTokenSummary).map(n => n.onDailyTokenSummary(summary)));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=composite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composite.js","sourceRoot":"","sources":["../../src/notifier/composite.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAiB;IACR;IAApB,YAAoB,SAAqB;QAArB,cAAS,GAAT,SAAS,CAAY;IAAG,CAAC;IAE7C,KAAK,CAAC,eAAe,CAAC,GAAgB;QACpC,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,GAAgB,EAAE,KAAa,EAAE,MAAmB;QACxE,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,GAAgB,EAAE,MAAsB;QAC/D,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,GAAgB,EAAE,KAAoB;QAC3D,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,GAAgB,EAAE,KAAa,EAAE,MAAc;QACvE,MAAM,OAAO,CAAC,UAAU,CACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CACrE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,GAAgB,EAAE,UAAkB,EAAE,SAAiB;QAC9E,MAAM,OAAO,CAAC,UAAU,CACtB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAC7G,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAA0B;QAClD,MAAM,OAAO,CAAC,UAAU,CACtB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAoB,CAAC,OAAO,CAAC,CAAC,CAC5F,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Notifier, PipelineRun, StageResult, PipelineResult, PipelineError, DailyTokenSummary } from "../types.js";
|
|
2
|
+
export declare class DiscordNotifier implements Notifier {
|
|
3
|
+
private webhookUrl?;
|
|
4
|
+
constructor(webhookUrl?: string | undefined);
|
|
5
|
+
onPipelineStart(run: PipelineRun): Promise<void>;
|
|
6
|
+
onStageComplete(run: PipelineRun, stage: string, result: StageResult): Promise<void>;
|
|
7
|
+
onPipelineComplete(run: PipelineRun, result: PipelineResult): Promise<void>;
|
|
8
|
+
onHumanReviewNeeded(run: PipelineRun, prUrl: string, reason: string): Promise<void>;
|
|
9
|
+
onPipelineFailed(run: PipelineRun, error: PipelineError): Promise<void>;
|
|
10
|
+
onTokenBudgetAlert(run: PipelineRun, usedTokens: number, maxTokens: number): Promise<void>;
|
|
11
|
+
onDailyTokenSummary(summary: DailyTokenSummary): Promise<void>;
|
|
12
|
+
private send;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=discord.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../src/notifier/discord.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AASxH,qBAAa,eAAgB,YAAW,QAAQ;IAClC,OAAO,CAAC,UAAU,CAAC;gBAAX,UAAU,CAAC,EAAE,MAAM,YAAA;IAEjC,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhD,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAapF,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAe3E,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnF,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAevE,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1F,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;YAetD,IAAI;CAYnB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { createLogger } from "../logger.js";
|
|
2
|
+
const log = createLogger({ component: "DiscordNotifier" });
|
|
3
|
+
const COLOR_YELLOW = 0xffaa00;
|
|
4
|
+
const COLOR_GREEN = 0x00ff00;
|
|
5
|
+
const COLOR_RED = 0xff0000;
|
|
6
|
+
export class DiscordNotifier {
|
|
7
|
+
webhookUrl;
|
|
8
|
+
constructor(webhookUrl) {
|
|
9
|
+
this.webhookUrl = webhookUrl;
|
|
10
|
+
}
|
|
11
|
+
async onPipelineStart(run) {
|
|
12
|
+
await this.send({
|
|
13
|
+
embeds: [{
|
|
14
|
+
title: "Pipeline Started",
|
|
15
|
+
description: `**${run.issueTitle}**\nPipeline: \`${run.pipelineKey}\`\nBranch: \`${run.branch}\``,
|
|
16
|
+
color: COLOR_YELLOW,
|
|
17
|
+
}],
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async onStageComplete(run, stage, result) {
|
|
21
|
+
const color = result.status === "completed" ? COLOR_GREEN : COLOR_RED;
|
|
22
|
+
const status = result.status === "completed" ? "Completed" : "Failed";
|
|
23
|
+
await this.send({
|
|
24
|
+
embeds: [{
|
|
25
|
+
title: `Stage ${status}: ${stage}`,
|
|
26
|
+
description: `**${run.issueTitle}**\nTokens: ${result.inputTokens.toLocaleString()} in / ${result.outputTokens.toLocaleString()} out`,
|
|
27
|
+
color,
|
|
28
|
+
}],
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async onPipelineComplete(run, result) {
|
|
32
|
+
let description = `Stages: ${result.stagesCompleted}\nTokens: ${result.totalInputTokens.toLocaleString()} in / ${result.totalOutputTokens.toLocaleString()} out`;
|
|
33
|
+
if (result.prUrl) {
|
|
34
|
+
description += `\n[View PR](${result.prUrl})`;
|
|
35
|
+
}
|
|
36
|
+
await this.send({
|
|
37
|
+
embeds: [{
|
|
38
|
+
title: "Pipeline Complete",
|
|
39
|
+
description,
|
|
40
|
+
color: COLOR_GREEN,
|
|
41
|
+
}],
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
async onHumanReviewNeeded(run, prUrl, reason) {
|
|
45
|
+
await this.send({
|
|
46
|
+
embeds: [{
|
|
47
|
+
title: "Human Review Needed",
|
|
48
|
+
description: `**${run.issueTitle}**\n[View PR](${prUrl})\n\n**Reason:** ${reason}\n\nPipeline: \`${run.pipelineKey}\` | Run: \`${run.id.slice(0, 8)}\``,
|
|
49
|
+
color: COLOR_YELLOW,
|
|
50
|
+
}],
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
async onPipelineFailed(run, error) {
|
|
54
|
+
let description = `**Stage**: ${error.stage}\n**Error**: ${error.message}`;
|
|
55
|
+
if (error.retriesExhausted) {
|
|
56
|
+
description += `\nRetries exhausted`;
|
|
57
|
+
}
|
|
58
|
+
await this.send({
|
|
59
|
+
embeds: [{
|
|
60
|
+
title: "Pipeline Failed",
|
|
61
|
+
description,
|
|
62
|
+
color: COLOR_RED,
|
|
63
|
+
}],
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
async onTokenBudgetAlert(run, usedTokens, maxTokens) {
|
|
67
|
+
const pct = Math.round((usedTokens / maxTokens) * 100);
|
|
68
|
+
await this.send({
|
|
69
|
+
embeds: [{
|
|
70
|
+
title: "Token Budget Alert",
|
|
71
|
+
description: `**${run.issueTitle}**\nUsage: ${usedTokens.toLocaleString()} / ${maxTokens.toLocaleString()} tokens (${pct}%)\n\nPipeline: \`${run.pipelineKey}\` | Run: \`${run.id.slice(0, 8)}\``,
|
|
72
|
+
color: COLOR_YELLOW,
|
|
73
|
+
}],
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
async onDailyTokenSummary(summary) {
|
|
77
|
+
const totalTokens = summary.totalInputTokens + summary.totalOutputTokens;
|
|
78
|
+
await this.send({
|
|
79
|
+
embeds: [{
|
|
80
|
+
title: `Daily Token Summary ā ${summary.date}`,
|
|
81
|
+
description: [
|
|
82
|
+
`**Total tokens**: ${totalTokens.toLocaleString()} (${summary.totalInputTokens.toLocaleString()} in / ${summary.totalOutputTokens.toLocaleString()} out)`,
|
|
83
|
+
`**Runs completed**: ${summary.runsCompleted}`,
|
|
84
|
+
`**Runs failed**: ${summary.runsFailed}`,
|
|
85
|
+
].join("\n"),
|
|
86
|
+
color: COLOR_GREEN,
|
|
87
|
+
}],
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
async send(payload) {
|
|
91
|
+
if (!this.webhookUrl)
|
|
92
|
+
return;
|
|
93
|
+
try {
|
|
94
|
+
await fetch(this.webhookUrl, {
|
|
95
|
+
method: "POST",
|
|
96
|
+
headers: { "Content-Type": "application/json" },
|
|
97
|
+
body: JSON.stringify(payload),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
log.error({ err: e }, "Discord notification failed");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=discord.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discord.js","sourceRoot":"","sources":["../../src/notifier/discord.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAE3D,MAAM,YAAY,GAAG,QAAQ,CAAC;AAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC;AAE3B,MAAM,OAAO,eAAe;IACN;IAApB,YAAoB,UAAmB;QAAnB,eAAU,GAAV,UAAU,CAAS;IAAG,CAAC;IAE3C,KAAK,CAAC,eAAe,CAAC,GAAgB;QACpC,MAAM,IAAI,CAAC,IAAI,CAAC;YACd,MAAM,EAAE,CAAC;oBACP,KAAK,EAAE,kBAAkB;oBACzB,WAAW,EAAE,KAAK,GAAG,CAAC,UAAU,mBAAmB,GAAG,CAAC,WAAW,iBAAiB,GAAG,CAAC,MAAM,IAAI;oBACjG,KAAK,EAAE,YAAY;iBACpB,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,GAAgB,EAAE,KAAa,EAAE,MAAmB;QACxE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;QAEtE,MAAM,IAAI,CAAC,IAAI,CAAC;YACd,MAAM,EAAE,CAAC;oBACP,KAAK,EAAE,SAAS,MAAM,KAAK,KAAK,EAAE;oBAClC,WAAW,EAAE,KAAK,GAAG,CAAC,UAAU,eAAe,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM;oBACrI,KAAK;iBACN,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,GAAgB,EAAE,MAAsB;QAC/D,IAAI,WAAW,GAAG,WAAW,MAAM,CAAC,eAAe,aAAa,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,SAAS,MAAM,CAAC,iBAAiB,CAAC,cAAc,EAAE,MAAM,CAAC;QACjK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,WAAW,IAAI,eAAe,MAAM,CAAC,KAAK,GAAG,CAAC;QAChD,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC;YACd,MAAM,EAAE,CAAC;oBACP,KAAK,EAAE,mBAAmB;oBAC1B,WAAW;oBACX,KAAK,EAAE,WAAW;iBACnB,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,GAAgB,EAAE,KAAa,EAAE,MAAc;QACvE,MAAM,IAAI,CAAC,IAAI,CAAC;YACd,MAAM,EAAE,CAAC;oBACP,KAAK,EAAE,qBAAqB;oBAC5B,WAAW,EAAE,KAAK,GAAG,CAAC,UAAU,iBAAiB,KAAK,oBAAoB,MAAM,mBAAmB,GAAG,CAAC,WAAW,eAAe,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI;oBACvJ,KAAK,EAAE,YAAY;iBACpB,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,GAAgB,EAAE,KAAoB;QAC3D,IAAI,WAAW,GAAG,cAAc,KAAK,CAAC,KAAK,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC;QAC3E,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC3B,WAAW,IAAI,qBAAqB,CAAC;QACvC,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC;YACd,MAAM,EAAE,CAAC;oBACP,KAAK,EAAE,iBAAiB;oBACxB,WAAW;oBACX,KAAK,EAAE,SAAS;iBACjB,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,GAAgB,EAAE,UAAkB,EAAE,SAAiB;QAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,IAAI,CAAC;YACd,MAAM,EAAE,CAAC;oBACP,KAAK,EAAE,oBAAoB;oBAC3B,WAAW,EAAE,KAAK,GAAG,CAAC,UAAU,cAAc,UAAU,CAAC,cAAc,EAAE,MAAM,SAAS,CAAC,cAAc,EAAE,YAAY,GAAG,qBAAqB,GAAG,CAAC,WAAW,eAAe,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI;oBACjM,KAAK,EAAE,YAAY;iBACpB,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAA0B;QAClD,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACzE,MAAM,IAAI,CAAC,IAAI,CAAC;YACd,MAAM,EAAE,CAAC;oBACP,KAAK,EAAE,yBAAyB,OAAO,CAAC,IAAI,EAAE;oBAC9C,WAAW,EAAE;wBACX,qBAAqB,WAAW,CAAC,cAAc,EAAE,KAAK,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,SAAS,OAAO,CAAC,iBAAiB,CAAC,cAAc,EAAE,OAAO;wBACzJ,uBAAuB,OAAO,CAAC,aAAa,EAAE;wBAC9C,oBAAoB,OAAO,CAAC,UAAU,EAAE;qBACzC,CAAC,IAAI,CAAC,IAAI,CAAC;oBACZ,KAAK,EAAE,WAAW;iBACnB,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,OAAe;QAChC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC7B,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC3B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAC9B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,6BAA6B,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { CompositeNotifier } from "./composite.js";
|
|
2
|
+
export { LinearNotifier, type LinearNotifierConfig } from "./linear.js";
|
|
3
|
+
export { SlackNotifier } from "./slack.js";
|
|
4
|
+
export { DiscordNotifier } from "./discord.js";
|
|
5
|
+
export { SlackAlertManager, SlackAlertStream, createSlackAlertStream, initSlackAlertManager, getSlackAlertManager, type AlertEntry, } from "./slack-alerts.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notifier/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { CompositeNotifier } from "./composite.js";
|
|
2
|
+
export { LinearNotifier } from "./linear.js";
|
|
3
|
+
export { SlackNotifier } from "./slack.js";
|
|
4
|
+
export { DiscordNotifier } from "./discord.js";
|
|
5
|
+
export { SlackAlertManager, SlackAlertStream, createSlackAlertStream, initSlackAlertManager, getSlackAlertManager, } from "./slack-alerts.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notifier/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAA6B,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,GAErB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Notifier, PipelineRun, StageResult, PipelineResult, PipelineError } from "../types.js";
|
|
2
|
+
export declare const LINEAR_STATES: {
|
|
3
|
+
readonly IN_PROGRESS: "In Progress";
|
|
4
|
+
readonly IN_REVIEW: "In Review";
|
|
5
|
+
readonly DONE: "Done";
|
|
6
|
+
readonly BLOCKED: "Blocked";
|
|
7
|
+
};
|
|
8
|
+
export interface LinearNotifierConfig {
|
|
9
|
+
apiKey: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class LinearNotifier implements Notifier {
|
|
12
|
+
private apiKey;
|
|
13
|
+
private stateCache;
|
|
14
|
+
private issueIdCache;
|
|
15
|
+
private clientPromise;
|
|
16
|
+
constructor(config: LinearNotifierConfig);
|
|
17
|
+
private getClient;
|
|
18
|
+
onPipelineStart(run: PipelineRun): Promise<void>;
|
|
19
|
+
onStageComplete(run: PipelineRun, stage: string, result: StageResult): Promise<void>;
|
|
20
|
+
onPipelineComplete(run: PipelineRun, result: PipelineResult): Promise<void>;
|
|
21
|
+
onHumanReviewNeeded(run: PipelineRun, prUrl: string, reason: string): Promise<void>;
|
|
22
|
+
onTokenBudgetAlert(run: PipelineRun, usedTokens: number, maxTokens: number): Promise<void>;
|
|
23
|
+
onPipelineFailed(run: PipelineRun, error: PipelineError): Promise<void>;
|
|
24
|
+
private resolveIssueId;
|
|
25
|
+
private postComment;
|
|
26
|
+
private transitionState;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=linear.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../src/notifier/linear.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKrG,eAAO,MAAM,aAAa;;;;;CAKhB,CAAC;AAEX,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,cAAe,YAAW,QAAQ;IAC7C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,YAAY,CAAsD;IAC1E,OAAO,CAAC,aAAa,CAA6B;gBAEtC,MAAM,EAAE,oBAAoB;YAI1B,SAAS;IASjB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAYhD,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpF,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3E,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAenF,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1F,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAY/D,cAAc;YAed,WAAW;YAYX,eAAe;CAuB9B"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { createLogger } from "../logger.js";
|
|
2
|
+
const log = createLogger({ component: "LinearNotifier" });
|
|
3
|
+
export const LINEAR_STATES = {
|
|
4
|
+
IN_PROGRESS: "In Progress",
|
|
5
|
+
IN_REVIEW: "In Review",
|
|
6
|
+
DONE: "Done",
|
|
7
|
+
BLOCKED: "Blocked",
|
|
8
|
+
};
|
|
9
|
+
export class LinearNotifier {
|
|
10
|
+
apiKey;
|
|
11
|
+
stateCache = new Map();
|
|
12
|
+
issueIdCache = new Map();
|
|
13
|
+
clientPromise = null;
|
|
14
|
+
constructor(config) {
|
|
15
|
+
this.apiKey = config.apiKey;
|
|
16
|
+
}
|
|
17
|
+
async getClient() {
|
|
18
|
+
if (!this.clientPromise) {
|
|
19
|
+
this.clientPromise = import("@linear/sdk").then(({ LinearClient }) => new LinearClient({ apiKey: this.apiKey }));
|
|
20
|
+
}
|
|
21
|
+
return this.clientPromise;
|
|
22
|
+
}
|
|
23
|
+
async onPipelineStart(run) {
|
|
24
|
+
await Promise.all([
|
|
25
|
+
this.postComment(run.issueId, `š¤ **Agent Run #${run.id.slice(0, 8)}** ā Pipeline: ${run.pipelineKey}\n\n` +
|
|
26
|
+
`Branch: \`${run.branch}\`\n` +
|
|
27
|
+
`Repo: ${run.repoUrl}\n\n` +
|
|
28
|
+
`Starting pipeline...`),
|
|
29
|
+
this.transitionState(run.issueId, LINEAR_STATES.IN_PROGRESS),
|
|
30
|
+
]);
|
|
31
|
+
}
|
|
32
|
+
async onStageComplete(run, stage, result) {
|
|
33
|
+
const status = result.status === "completed" ? "ā
" : "ā";
|
|
34
|
+
let comment = `š¤ **Agent Run #${run.id.slice(0, 8)}** ā Stage: ${stage} ${status}\n\n`;
|
|
35
|
+
if (result.handoffArtifact) {
|
|
36
|
+
const ha = result.handoffArtifact;
|
|
37
|
+
comment += `**Files changed**: ${ha.filesChanged.join(", ") || "none"}\n`;
|
|
38
|
+
if (ha.context.testResults) {
|
|
39
|
+
const tr = ha.context.testResults;
|
|
40
|
+
comment += `**Tests**: ${tr.passed} passed, ${tr.failed} failed\n`;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
comment += `**Tokens used**: ${result.inputTokens.toLocaleString()} input / ${result.outputTokens.toLocaleString()} output\n`;
|
|
44
|
+
await this.postComment(run.issueId, comment);
|
|
45
|
+
}
|
|
46
|
+
async onPipelineComplete(run, result) {
|
|
47
|
+
let comment = `š¤ **Agent Run #${run.id.slice(0, 8)}** ā Pipeline Complete ā
\n\n`;
|
|
48
|
+
if (result.prUrl) {
|
|
49
|
+
comment += `**PR**: ${result.prUrl}\n`;
|
|
50
|
+
}
|
|
51
|
+
comment += `**Stages completed**: ${result.stagesCompleted}\n`;
|
|
52
|
+
comment += `**Total tokens**: ${result.totalInputTokens.toLocaleString()} input / ${result.totalOutputTokens.toLocaleString()} output\n`;
|
|
53
|
+
if (result.autoMerged) {
|
|
54
|
+
comment += `\nā
**Auto-merged** ā changes were trivial and passed all checks.`;
|
|
55
|
+
}
|
|
56
|
+
const tasks = [this.postComment(run.issueId, comment)];
|
|
57
|
+
if (result.autoMerged) {
|
|
58
|
+
tasks.push(this.transitionState(run.issueId, LINEAR_STATES.DONE));
|
|
59
|
+
}
|
|
60
|
+
await Promise.all(tasks);
|
|
61
|
+
}
|
|
62
|
+
async onHumanReviewNeeded(run, prUrl, reason) {
|
|
63
|
+
await Promise.all([
|
|
64
|
+
this.postComment(run.issueId, `š¤ **Agent Run #${run.id.slice(0, 8)}** ā Human Review Needed š\n\n` +
|
|
65
|
+
`**PR**: ${prUrl}\n` +
|
|
66
|
+
`**Reason**: ${reason}\n\n` +
|
|
67
|
+
`Please review and merge manually.`),
|
|
68
|
+
this.transitionState(run.issueId, LINEAR_STATES.IN_REVIEW),
|
|
69
|
+
]);
|
|
70
|
+
}
|
|
71
|
+
// onDailyTokenSummary intentionally omitted ā daily summaries are cross-run
|
|
72
|
+
// aggregates that don't map to per-issue comments. Use Slack/Discord instead.
|
|
73
|
+
async onTokenBudgetAlert(run, usedTokens, maxTokens) {
|
|
74
|
+
const pct = Math.round((usedTokens / maxTokens) * 100);
|
|
75
|
+
await this.postComment(run.issueId, `š¤ **Agent Run #${run.id.slice(0, 8)}** ā ā ļø Token Budget Warning\n\n` +
|
|
76
|
+
`Usage: ${usedTokens.toLocaleString()} / ${maxTokens.toLocaleString()} tokens (${pct}%)\n` +
|
|
77
|
+
`The run will be aborted if the budget is exceeded.`);
|
|
78
|
+
}
|
|
79
|
+
async onPipelineFailed(run, error) {
|
|
80
|
+
await Promise.all([
|
|
81
|
+
this.postComment(run.issueId, `š¤ **Agent Run #${run.id.slice(0, 8)}** ā Pipeline Failed ā\n\n` +
|
|
82
|
+
`**Failed at stage**: ${error.stage}\n` +
|
|
83
|
+
`**Error**: ${error.message}\n` +
|
|
84
|
+
`**Retries exhausted**: ${error.retriesExhausted ? "Yes" : "No"}\n`),
|
|
85
|
+
this.transitionState(run.issueId, LINEAR_STATES.BLOCKED),
|
|
86
|
+
]);
|
|
87
|
+
}
|
|
88
|
+
async resolveIssueId(issueIdentifier) {
|
|
89
|
+
const cached = this.issueIdCache.get(issueIdentifier);
|
|
90
|
+
if (cached)
|
|
91
|
+
return cached;
|
|
92
|
+
const client = await this.getClient();
|
|
93
|
+
const results = await client.searchIssues(issueIdentifier);
|
|
94
|
+
const issue = results.nodes[0];
|
|
95
|
+
if (!issue)
|
|
96
|
+
return null;
|
|
97
|
+
const teamId = (await issue.team)?.id;
|
|
98
|
+
const resolved = { id: issue.id, teamId };
|
|
99
|
+
this.issueIdCache.set(issueIdentifier, resolved);
|
|
100
|
+
return resolved;
|
|
101
|
+
}
|
|
102
|
+
async postComment(issueIdentifier, body) {
|
|
103
|
+
try {
|
|
104
|
+
const client = await this.getClient();
|
|
105
|
+
const resolved = await this.resolveIssueId(issueIdentifier);
|
|
106
|
+
if (resolved) {
|
|
107
|
+
await client.createComment({ issueId: resolved.id, body });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
log.error({ issueIdentifier, err: e }, "failed to post Linear comment");
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
async transitionState(issueIdentifier, stateName) {
|
|
115
|
+
try {
|
|
116
|
+
const client = await this.getClient();
|
|
117
|
+
const resolved = await this.resolveIssueId(issueIdentifier);
|
|
118
|
+
if (!resolved?.teamId)
|
|
119
|
+
return;
|
|
120
|
+
const { teamId } = resolved;
|
|
121
|
+
if (!this.stateCache.has(`${teamId}:${stateName}`)) {
|
|
122
|
+
const team = await client.team(teamId);
|
|
123
|
+
const states = await team.states();
|
|
124
|
+
for (const state of states.nodes) {
|
|
125
|
+
this.stateCache.set(`${teamId}:${state.name}`, state.id);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const stateId = this.stateCache.get(`${teamId}:${stateName}`);
|
|
129
|
+
if (stateId) {
|
|
130
|
+
await client.updateIssue(resolved.id, { stateId });
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (e) {
|
|
134
|
+
log.error({ issueIdentifier, stateName, err: e }, "failed to transition Linear issue state");
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=linear.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/notifier/linear.ts"],"names":[],"mappings":"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"}
|