lastlight 0.1.15 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +265 -118
- package/agent-context/rules.md +62 -9
- package/agent-context/security.md +69 -0
- package/config/default.yaml +89 -0
- package/deploy/.env.production.example +20 -2
- package/deploy/entrypoint.sh +16 -17
- package/deploy/native/README.md +160 -0
- package/deploy/native/install.sh +110 -0
- package/deploy/native/lastlight.env.example +95 -0
- package/deploy/native/lastlight.service +50 -0
- package/deploy/sandbox-entrypoint.sh +59 -42
- package/dist/admin/auth.d.ts +1 -1
- package/dist/admin/auth.js +3 -1
- package/dist/admin/auth.js.map +1 -1
- package/dist/admin/chat-session-reader.d.ts +11 -14
- package/dist/admin/chat-session-reader.js +27 -51
- package/dist/admin/chat-session-reader.js.map +1 -1
- package/dist/admin/docker.d.ts +37 -0
- package/dist/admin/docker.js +86 -1
- package/dist/admin/docker.js.map +1 -1
- package/dist/admin/index.js +38 -3
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/log-search.test.d.ts +1 -0
- package/dist/admin/log-search.test.js +78 -0
- package/dist/admin/log-search.test.js.map +1 -0
- package/dist/admin/routes.d.ts +52 -3
- package/dist/admin/routes.js +780 -63
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/routes.test.js +680 -14
- package/dist/admin/routes.test.js.map +1 -1
- package/dist/admin/server-logs.test.d.ts +1 -0
- package/dist/admin/server-logs.test.js +58 -0
- package/dist/admin/server-logs.test.js.map +1 -0
- package/dist/admin/sessions.d.ts +26 -39
- package/dist/admin/sessions.js +86 -310
- package/dist/admin/sessions.js.map +1 -1
- package/dist/admin/sessions.test.d.ts +1 -0
- package/dist/admin/sessions.test.js +78 -0
- package/dist/admin/sessions.test.js.map +1 -0
- package/dist/admin/version.d.ts +15 -0
- package/dist/admin/version.js +73 -0
- package/dist/admin/version.js.map +1 -0
- package/dist/admin/version.test.d.ts +1 -0
- package/dist/admin/version.test.js +71 -0
- package/dist/admin/version.test.js.map +1 -0
- package/dist/cli-config.d.ts +55 -0
- package/dist/cli-config.js +119 -0
- package/dist/cli-config.js.map +1 -0
- package/dist/cli-config.test.d.ts +1 -0
- package/dist/cli-config.test.js +92 -0
- package/dist/cli-config.test.js.map +1 -0
- package/dist/cli-format.d.ts +19 -0
- package/dist/cli-format.js +107 -0
- package/dist/cli-format.js.map +1 -0
- package/dist/cli-server.d.ts +73 -0
- package/dist/cli-server.js +347 -0
- package/dist/cli-server.js.map +1 -0
- package/dist/cli-server.test.d.ts +1 -0
- package/dist/cli-server.test.js +38 -0
- package/dist/cli-server.test.js.map +1 -0
- package/dist/cli-timeline.d.ts +35 -0
- package/dist/cli-timeline.js +373 -0
- package/dist/cli-timeline.js.map +1 -0
- package/dist/cli-timeline.test.d.ts +1 -0
- package/dist/cli-timeline.test.js +104 -0
- package/dist/cli-timeline.test.js.map +1 -0
- package/dist/cli.d.ts +0 -19
- package/dist/cli.js +910 -194
- package/dist/cli.js.map +1 -1
- package/dist/config-overlay.test.d.ts +1 -0
- package/dist/config-overlay.test.js +112 -0
- package/dist/config-overlay.test.js.map +1 -0
- package/dist/config-resolve.d.ts +28 -0
- package/dist/config-resolve.js +47 -0
- package/dist/config-resolve.js.map +1 -0
- package/dist/config-resolve.test.d.ts +1 -0
- package/dist/config-resolve.test.js +68 -0
- package/dist/config-resolve.test.js.map +1 -0
- package/dist/config.d.ts +62 -49
- package/dist/config.js +452 -76
- package/dist/config.js.map +1 -1
- package/dist/config.test.js +201 -32
- package/dist/config.test.js.map +1 -1
- package/dist/connectors/github-webhook.js +83 -5
- package/dist/connectors/github-webhook.js.map +1 -1
- package/dist/connectors/github-webhook.test.d.ts +1 -0
- package/dist/connectors/github-webhook.test.js +156 -0
- package/dist/connectors/github-webhook.test.js.map +1 -0
- package/dist/connectors/messaging/session-manager.d.ts +18 -0
- package/dist/connectors/messaging/session-manager.js +83 -2
- package/dist/connectors/messaging/session-manager.js.map +1 -1
- package/dist/connectors/messaging/session-manager.test.d.ts +1 -0
- package/dist/connectors/messaging/session-manager.test.js +144 -0
- package/dist/connectors/messaging/session-manager.test.js.map +1 -0
- package/dist/connectors/slack/connector.d.ts +9 -0
- package/dist/connectors/slack/connector.js +15 -0
- package/dist/connectors/slack/connector.js.map +1 -1
- package/dist/connectors/slack/mrkdwn.js +81 -0
- package/dist/connectors/slack/mrkdwn.js.map +1 -1
- package/dist/connectors/slack/mrkdwn.test.js +49 -0
- package/dist/connectors/slack/mrkdwn.test.js.map +1 -1
- package/dist/connectors/types.d.ts +1 -1
- package/dist/cron/fanout.d.ts +33 -0
- package/dist/cron/fanout.js +55 -0
- package/dist/cron/fanout.js.map +1 -0
- package/dist/cron/fanout.test.d.ts +1 -0
- package/dist/cron/fanout.test.js +73 -0
- package/dist/cron/fanout.test.js.map +1 -0
- package/dist/cron/jobs.d.ts +5 -0
- package/dist/cron/jobs.js +10 -3
- package/dist/cron/jobs.js.map +1 -1
- package/dist/cron/scheduler.d.ts +12 -0
- package/dist/cron/scheduler.js +27 -1
- package/dist/cron/scheduler.js.map +1 -1
- package/dist/engine/agent-executor.d.ts +158 -0
- package/dist/engine/agent-executor.js +1140 -0
- package/dist/engine/agent-executor.js.map +1 -0
- package/dist/engine/agent-executor.test.d.ts +1 -0
- package/dist/engine/agent-executor.test.js +395 -0
- package/dist/engine/agent-executor.test.js.map +1 -0
- package/dist/engine/chat-runner.d.ts +123 -0
- package/dist/engine/chat-runner.js +379 -0
- package/dist/engine/chat-runner.js.map +1 -0
- package/dist/engine/chat-runner.test.d.ts +1 -0
- package/dist/engine/chat-runner.test.js +104 -0
- package/dist/engine/chat-runner.test.js.map +1 -0
- package/dist/engine/chat-skills.d.ts +45 -0
- package/dist/engine/chat-skills.js +184 -0
- package/dist/engine/chat-skills.js.map +1 -0
- package/dist/engine/chat-skills.test.d.ts +1 -0
- package/dist/engine/chat-skills.test.js +20 -0
- package/dist/engine/chat-skills.test.js.map +1 -0
- package/dist/engine/chat.d.ts +20 -23
- package/dist/engine/chat.js +251 -155
- package/dist/engine/chat.js.map +1 -1
- package/dist/engine/chat.test.d.ts +1 -0
- package/dist/engine/chat.test.js +42 -0
- package/dist/engine/chat.test.js.map +1 -0
- package/dist/engine/classifier.d.ts +35 -2
- package/dist/engine/classifier.js +170 -31
- package/dist/engine/classifier.js.map +1 -1
- package/dist/engine/classifier.test.d.ts +1 -0
- package/dist/engine/classifier.test.js +115 -0
- package/dist/engine/classifier.test.js.map +1 -0
- package/dist/engine/dispatcher.d.ts +60 -0
- package/dist/engine/dispatcher.js +601 -0
- package/dist/engine/dispatcher.js.map +1 -0
- package/dist/engine/dispatcher.test.d.ts +1 -0
- package/dist/engine/dispatcher.test.js +511 -0
- package/dist/engine/dispatcher.test.js.map +1 -0
- package/dist/engine/event-shim.d.ts +117 -0
- package/dist/engine/event-shim.js +435 -0
- package/dist/engine/event-shim.js.map +1 -0
- package/dist/engine/event-shim.test.d.ts +1 -0
- package/dist/engine/event-shim.test.js +194 -0
- package/dist/engine/event-shim.test.js.map +1 -0
- package/dist/engine/git-auth.d.ts +13 -17
- package/dist/engine/git-auth.js +99 -42
- package/dist/engine/git-auth.js.map +1 -1
- package/dist/engine/git-auth.test.d.ts +1 -0
- package/dist/engine/git-auth.test.js +117 -0
- package/dist/engine/git-auth.test.js.map +1 -0
- package/dist/engine/github-app-client.d.ts +7 -0
- package/dist/engine/github-app-client.js +16 -0
- package/dist/engine/github-app-client.js.map +1 -0
- package/dist/engine/github-app-client.test.d.ts +1 -0
- package/dist/engine/github-app-client.test.js +44 -0
- package/dist/engine/github-app-client.test.js.map +1 -0
- package/dist/engine/github-tools.d.ts +12 -0
- package/dist/engine/github-tools.js +261 -0
- package/dist/engine/github-tools.js.map +1 -0
- package/dist/engine/github.d.ts +1027 -43
- package/dist/engine/github.js +153 -14
- package/dist/engine/github.js.map +1 -1
- package/dist/engine/llm.d.ts +47 -0
- package/dist/engine/llm.js +221 -0
- package/dist/engine/llm.js.map +1 -0
- package/dist/engine/llm.test.d.ts +1 -0
- package/dist/engine/llm.test.js +189 -0
- package/dist/engine/llm.test.js.map +1 -0
- package/dist/engine/profiles.d.ts +249 -0
- package/dist/engine/profiles.js +42 -0
- package/dist/engine/profiles.js.map +1 -0
- package/dist/engine/router.d.ts +12 -6
- package/dist/engine/router.js +339 -81
- package/dist/engine/router.js.map +1 -1
- package/dist/engine/router.test.js +428 -78
- package/dist/engine/router.test.js.map +1 -1
- package/dist/engine/screen.d.ts +41 -0
- package/dist/engine/screen.js +93 -0
- package/dist/engine/screen.js.map +1 -0
- package/dist/engine/screen.test.d.ts +1 -0
- package/dist/engine/screen.test.js +82 -0
- package/dist/engine/screen.test.js.map +1 -0
- package/dist/index.js +377 -432
- package/dist/index.js.map +1 -1
- package/dist/managed-repos.d.ts +7 -9
- package/dist/managed-repos.js +12 -15
- package/dist/managed-repos.js.map +1 -1
- package/dist/managed-repos.test.js +24 -19
- package/dist/managed-repos.test.js.map +1 -1
- package/dist/notify/index.d.ts +15 -0
- package/dist/notify/index.js +6 -0
- package/dist/notify/index.js.map +1 -0
- package/dist/notify/model.d.ts +57 -0
- package/dist/notify/model.js +89 -0
- package/dist/notify/model.js.map +1 -0
- package/dist/notify/model.test.d.ts +1 -0
- package/dist/notify/model.test.js +109 -0
- package/dist/notify/model.test.js.map +1 -0
- package/dist/notify/notifier.d.ts +17 -0
- package/dist/notify/notifier.js +87 -0
- package/dist/notify/notifier.js.map +1 -0
- package/dist/notify/notifier.test.d.ts +1 -0
- package/dist/notify/notifier.test.js +100 -0
- package/dist/notify/notifier.test.js.map +1 -0
- package/dist/notify/render.d.ts +21 -0
- package/dist/notify/render.js +59 -0
- package/dist/notify/render.js.map +1 -0
- package/dist/notify/render.test.d.ts +1 -0
- package/dist/notify/render.test.js +65 -0
- package/dist/notify/render.test.js.map +1 -0
- package/dist/notify/transports/github.d.ts +26 -0
- package/dist/notify/transports/github.js +26 -0
- package/dist/notify/transports/github.js.map +1 -0
- package/dist/notify/transports/slack.d.ts +26 -0
- package/dist/notify/transports/slack.js +28 -0
- package/dist/notify/transports/slack.js.map +1 -0
- package/dist/notify/transports.test.d.ts +1 -0
- package/dist/notify/transports.test.js +71 -0
- package/dist/notify/transports.test.js.map +1 -0
- package/dist/notify/types.d.ts +95 -0
- package/dist/notify/types.js +16 -0
- package/dist/notify/types.js.map +1 -0
- package/dist/sandbox/docker-compose.test.d.ts +1 -0
- package/dist/sandbox/docker-compose.test.js +128 -0
- package/dist/sandbox/docker-compose.test.js.map +1 -0
- package/dist/sandbox/docker.d.ts +97 -9
- package/dist/sandbox/docker.js +192 -41
- package/dist/sandbox/docker.js.map +1 -1
- package/dist/sandbox/docker.test.d.ts +1 -0
- package/dist/sandbox/docker.test.js +137 -0
- package/dist/sandbox/docker.test.js.map +1 -0
- package/dist/sandbox/egress-allowlist.d.ts +69 -0
- package/dist/sandbox/egress-allowlist.js +164 -0
- package/dist/sandbox/egress-allowlist.js.map +1 -0
- package/dist/sandbox/egress-allowlist.test.d.ts +1 -0
- package/dist/sandbox/egress-allowlist.test.js +65 -0
- package/dist/sandbox/egress-allowlist.test.js.map +1 -0
- package/dist/sandbox/egress-firewall-config.d.ts +127 -0
- package/dist/sandbox/egress-firewall-config.js +434 -0
- package/dist/sandbox/egress-firewall-config.js.map +1 -0
- package/dist/sandbox/egress-firewall-config.test.d.ts +1 -0
- package/dist/sandbox/egress-firewall-config.test.js +244 -0
- package/dist/sandbox/egress-firewall-config.test.js.map +1 -0
- package/dist/sandbox/images.d.ts +23 -0
- package/dist/sandbox/images.js +55 -0
- package/dist/sandbox/images.js.map +1 -0
- package/dist/sandbox/index.d.ts +82 -3
- package/dist/sandbox/index.js +223 -93
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/index.test.d.ts +1 -0
- package/dist/sandbox/index.test.js +157 -0
- package/dist/sandbox/index.test.js.map +1 -0
- package/dist/session-log.d.ts +63 -0
- package/dist/session-log.js +290 -0
- package/dist/session-log.js.map +1 -0
- package/dist/session-log.test.d.ts +1 -0
- package/dist/session-log.test.js +85 -0
- package/dist/session-log.test.js.map +1 -0
- package/dist/setup.d.ts +30 -1
- package/dist/setup.js +241 -25
- package/dist/setup.js.map +1 -1
- package/dist/setup.test.js +138 -6
- package/dist/setup.test.js.map +1 -1
- package/dist/state/approval-store.d.ts +86 -0
- package/dist/state/approval-store.js +140 -0
- package/dist/state/approval-store.js.map +1 -0
- package/dist/state/build-assets.d.ts +50 -0
- package/dist/state/build-assets.js +154 -0
- package/dist/state/build-assets.js.map +1 -0
- package/dist/state/build-assets.test.d.ts +1 -0
- package/dist/state/build-assets.test.js +106 -0
- package/dist/state/build-assets.test.js.map +1 -0
- package/dist/state/db.d.ts +65 -333
- package/dist/state/db.js +112 -835
- package/dist/state/db.js.map +1 -1
- package/dist/state/db.test.js +127 -91
- package/dist/state/db.test.js.map +1 -1
- package/dist/state/execution-store.d.ts +257 -0
- package/dist/state/execution-store.js +527 -0
- package/dist/state/execution-store.js.map +1 -0
- package/dist/state/migrate.d.ts +15 -0
- package/dist/state/migrate.js +175 -0
- package/dist/state/migrate.js.map +1 -0
- package/dist/state/workflow-run-store.d.ts +195 -0
- package/dist/state/workflow-run-store.js +363 -0
- package/dist/state/workflow-run-store.js.map +1 -0
- package/dist/state/workflow-run-store.test.d.ts +1 -0
- package/dist/state/workflow-run-store.test.js +264 -0
- package/dist/state/workflow-run-store.test.js.map +1 -0
- package/dist/telemetry/index.d.ts +38 -0
- package/dist/telemetry/index.js +253 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/index.test.d.ts +1 -0
- package/dist/telemetry/index.test.js +73 -0
- package/dist/telemetry/index.test.js.map +1 -0
- package/dist/telemetry/pi-events.d.ts +12 -0
- package/dist/telemetry/pi-events.js +134 -0
- package/dist/telemetry/pi-events.js.map +1 -0
- package/dist/telemetry/pi-events.test.d.ts +1 -0
- package/dist/telemetry/pi-events.test.js +69 -0
- package/dist/telemetry/pi-events.test.js.map +1 -0
- package/dist/workflows/dag.d.ts +13 -1
- package/dist/workflows/dag.js +7 -3
- package/dist/workflows/dag.js.map +1 -1
- package/dist/workflows/dag.test.js +22 -0
- package/dist/workflows/dag.test.js.map +1 -1
- package/dist/workflows/golden-build.test.d.ts +1 -0
- package/dist/workflows/golden-build.test.js +45 -0
- package/dist/workflows/golden-build.test.js.map +1 -0
- package/dist/workflows/loader-overlay.test.d.ts +1 -0
- package/dist/workflows/loader-overlay.test.js +101 -0
- package/dist/workflows/loader-overlay.test.js.map +1 -0
- package/dist/workflows/loader.d.ts +36 -11
- package/dist/workflows/loader.js +311 -87
- package/dist/workflows/loader.js.map +1 -1
- package/dist/workflows/loader.test.js +114 -10
- package/dist/workflows/loader.test.js.map +1 -1
- package/dist/workflows/loop-eval.js +2 -0
- package/dist/workflows/loop-eval.js.map +1 -1
- package/dist/workflows/loop-eval.test.js +14 -0
- package/dist/workflows/loop-eval.test.js.map +1 -1
- package/dist/workflows/phase-executor.d.ts +145 -0
- package/dist/workflows/phase-executor.js +691 -0
- package/dist/workflows/phase-executor.js.map +1 -0
- package/dist/workflows/phase-executor.test.d.ts +1 -0
- package/dist/workflows/phase-executor.test.js +434 -0
- package/dist/workflows/phase-executor.test.js.map +1 -0
- package/dist/workflows/phase-ref.d.ts +44 -0
- package/dist/workflows/phase-ref.js +78 -0
- package/dist/workflows/phase-ref.js.map +1 -0
- package/dist/workflows/phase-ref.test.d.ts +1 -0
- package/dist/workflows/phase-ref.test.js +24 -0
- package/dist/workflows/phase-ref.test.js.map +1 -0
- package/dist/workflows/resume.d.ts +5 -11
- package/dist/workflows/resume.js +88 -7
- package/dist/workflows/resume.js.map +1 -1
- package/dist/workflows/runner.d.ts +34 -27
- package/dist/workflows/runner.js +252 -930
- package/dist/workflows/runner.js.map +1 -1
- package/dist/workflows/runner.test.js +346 -35
- package/dist/workflows/runner.test.js.map +1 -1
- package/dist/workflows/schema.d.ts +52 -10
- package/dist/workflows/schema.js +147 -7
- package/dist/workflows/schema.js.map +1 -1
- package/dist/workflows/simple.d.ts +67 -3
- package/dist/workflows/simple.js +248 -87
- package/dist/workflows/simple.js.map +1 -1
- package/dist/workflows/simple.test.d.ts +1 -0
- package/dist/workflows/simple.test.js +107 -0
- package/dist/workflows/simple.test.js.map +1 -0
- package/dist/workflows/templates.d.ts +29 -0
- package/dist/workflows/templates.js +42 -4
- package/dist/workflows/templates.js.map +1 -1
- package/dist/workflows/templates.test.js +103 -0
- package/dist/workflows/templates.test.js.map +1 -1
- package/dist/workflows/triggers.d.ts +21 -0
- package/dist/workflows/triggers.js +44 -0
- package/dist/workflows/triggers.js.map +1 -0
- package/dist/workflows/verdict.d.ts +19 -0
- package/dist/workflows/verdict.js +30 -0
- package/dist/workflows/verdict.js.map +1 -0
- package/dist/workflows/verdict.test.d.ts +1 -0
- package/dist/workflows/verdict.test.js +44 -0
- package/dist/workflows/verdict.test.js.map +1 -0
- package/dist/worktree/manager.d.ts +1 -1
- package/dist/worktree/manager.js +14 -14
- package/dist/worktree/manager.js.map +1 -1
- package/dist/worktree/manager.test.d.ts +1 -0
- package/dist/worktree/manager.test.js +87 -0
- package/dist/worktree/manager.test.js.map +1 -0
- package/docker-compose.yml +206 -5
- package/package.json +19 -9
- package/sandbox.Dockerfile +97 -18
- package/skills/README.md +40 -0
- package/skills/browser-qa/SKILL.md +193 -0
- package/skills/browser-qa/scripts/agent-browser.mjs +380 -0
- package/skills/building/SKILL.md +95 -0
- package/skills/chat/SKILL.md +30 -11
- package/skills/code-review/SKILL.md +59 -0
- package/skills/debug-production/SKILL.md +108 -0
- package/skills/demo/SKILL.md +194 -0
- package/skills/demo/scripts/compose-demo.sh +205 -0
- package/skills/issue-answer/SKILL.md +90 -0
- package/skills/issue-comment/SKILL.md +38 -24
- package/skills/issue-triage/SKILL.md +103 -37
- package/skills/issue-triage/references/AGENT-BRIEF.md +61 -0
- package/skills/pr-comment/SKILL.md +64 -0
- package/skills/pr-review/SKILL.md +65 -49
- package/skills/qa-test/SKILL.md +97 -0
- package/skills/repo-health/SKILL.md +48 -45
- package/skills/security-feedback/SKILL.md +173 -0
- package/skills/security-feedback/references/templates.md +77 -0
- package/skills/security-review/SKILL.md +213 -0
- package/skills/security-review/references/issue-format.md +302 -0
- package/skills/verify/SKILL.md +118 -0
- package/workflows/answer.yaml +37 -0
- package/workflows/build.yaml +32 -22
- package/workflows/cron-security.yaml +6 -0
- package/workflows/demo.yaml +55 -0
- package/workflows/explore.yaml +9 -0
- package/workflows/pr-comment.yaml +16 -0
- package/workflows/pr-fix.yaml +3 -0
- package/workflows/pr-review.yaml +4 -1
- package/workflows/prompts/answer.md +67 -0
- package/workflows/prompts/architect.md +24 -7
- package/workflows/prompts/demo.md +100 -0
- package/workflows/prompts/executor.md +29 -20
- package/workflows/prompts/explore-ask.md +51 -22
- package/workflows/prompts/explore-publish.md +2 -2
- package/workflows/prompts/explore-read.md +24 -10
- package/workflows/prompts/explore-synthesize.md +15 -8
- package/workflows/prompts/fix.md +9 -10
- package/workflows/prompts/guardrails.md +26 -8
- package/workflows/prompts/pr-fix.md +6 -7
- package/workflows/prompts/pr.md +11 -10
- package/workflows/prompts/qa-browser.md +95 -0
- package/workflows/prompts/qa-synth.md +44 -0
- package/workflows/prompts/qa-test.md +60 -0
- package/workflows/prompts/re-reviewer.md +8 -9
- package/workflows/prompts/reviewer.md +10 -9
- package/workflows/prompts/verify-browser.md +93 -0
- package/workflows/prompts/verify-synth.md +44 -0
- package/workflows/prompts/verify.md +63 -0
- package/workflows/qa-test.yaml +87 -0
- package/workflows/security-feedback.yaml +25 -0
- package/workflows/security-review.yaml +29 -0
- package/workflows/verify.yaml +85 -0
- package/deploy/mcp-config.tmpl.json +0 -14
- package/dist/cron/rate-limits.d.ts +0 -26
- package/dist/cron/rate-limits.js +0 -193
- package/dist/cron/rate-limits.js.map +0 -1
- package/dist/engine/executor.d.ts +0 -75
- package/dist/engine/executor.js +0 -292
- package/dist/engine/executor.js.map +0 -1
- package/mcp-github-app/package.json +0 -18
- package/mcp-github-app/src/auth.js +0 -66
- package/mcp-github-app/src/github.js +0 -371
- package/mcp-github-app/src/index.js +0 -534
- package/skills/devops/webhook-subscriptions/SKILL.md +0 -180
- package/skills/github/DESCRIPTION.md +0 -3
- package/skills/github/codebase-inspection/SKILL.md +0 -115
- package/skills/github/github-auth/SKILL.md +0 -54
- package/skills/github/github-auth/scripts/gh-env.sh +0 -66
- package/skills/github/github-code-review/SKILL.md +0 -480
- package/skills/github/github-code-review/references/review-output-template.md +0 -74
- package/skills/github/github-issues/SKILL.md +0 -369
- package/skills/github/github-issues/templates/bug-report.md +0 -35
- package/skills/github/github-issues/templates/feature-request.md +0 -31
- package/skills/github/github-pr-workflow/SKILL.md +0 -395
- package/skills/github/github-pr-workflow/references/ci-troubleshooting.md +0 -183
- package/skills/github/github-pr-workflow/references/conventional-commits.md +0 -71
- package/skills/github/github-pr-workflow/templates/pr-body-bugfix.md +0 -35
- package/skills/github/github-pr-workflow/templates/pr-body-feature.md +0 -33
- package/skills/github/github-repo-management/SKILL.md +0 -515
- package/skills/github/github-repo-management/references/github-api-cheatsheet.md +0 -161
- package/skills/github-orchestrator/SKILL.md +0 -103
- package/skills/mcp/DESCRIPTION.md +0 -3
- package/skills/mcp/mcporter/SKILL.md +0 -122
- package/skills/mcp/native-mcp/SKILL.md +0 -356
- package/skills/software-development/architect/SKILL.md +0 -154
- package/skills/software-development/assure-guardrails/SKILL.md +0 -239
- package/skills/software-development/plan/SKILL.md +0 -64
- package/skills/software-development/requesting-code-review/SKILL.md +0 -291
- package/skills/software-development/subagent-driven-development/SKILL.md +0 -433
- package/skills/software-development/systematic-debugging/SKILL.md +0 -366
- package/skills/software-development/test-driven-development/SKILL.md +0 -342
package/dist/engine/executor.js
DELETED
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
import { readFileSync, readdirSync } from "fs";
|
|
2
|
-
import { join, resolve } from "path";
|
|
3
|
-
import { randomUUID } from "crypto";
|
|
4
|
-
import { createTaskSandbox } from "../sandbox/index.js";
|
|
5
|
-
import { refreshGitAuth } from "./git-auth.js";
|
|
6
|
-
/** Default directory for agent context files (soul, rules, etc.) */
|
|
7
|
-
const AGENT_CONTEXT_DIR = resolve("agent-context");
|
|
8
|
-
const GITHUB_PERMISSION_PROFILES = {
|
|
9
|
-
read: {
|
|
10
|
-
contents: "read",
|
|
11
|
-
issues: "read",
|
|
12
|
-
pull_requests: "read",
|
|
13
|
-
metadata: "read",
|
|
14
|
-
},
|
|
15
|
-
"issues-write": {
|
|
16
|
-
contents: "read",
|
|
17
|
-
issues: "write",
|
|
18
|
-
pull_requests: "read",
|
|
19
|
-
metadata: "read",
|
|
20
|
-
},
|
|
21
|
-
"review-write": {
|
|
22
|
-
contents: "read",
|
|
23
|
-
issues: "write",
|
|
24
|
-
pull_requests: "write",
|
|
25
|
-
metadata: "read",
|
|
26
|
-
},
|
|
27
|
-
"repo-write": {
|
|
28
|
-
contents: "write",
|
|
29
|
-
issues: "write",
|
|
30
|
-
pull_requests: "write",
|
|
31
|
-
metadata: "read",
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* Load all .md files from the agent-context directory and concatenate
|
|
36
|
-
* them into a single system prompt string.
|
|
37
|
-
*/
|
|
38
|
-
function loadAgentContext(dir) {
|
|
39
|
-
const contextDir = dir || AGENT_CONTEXT_DIR;
|
|
40
|
-
try {
|
|
41
|
-
const files = readdirSync(contextDir)
|
|
42
|
-
.filter((f) => f.endsWith(".md"))
|
|
43
|
-
.sort();
|
|
44
|
-
return files
|
|
45
|
-
.map((f) => readFileSync(join(contextDir, f), "utf-8"))
|
|
46
|
-
.join("\n\n---\n\n");
|
|
47
|
-
}
|
|
48
|
-
catch {
|
|
49
|
-
console.warn(`[executor] No agent context found at ${contextDir}`);
|
|
50
|
-
return "";
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Execute an agent task.
|
|
55
|
-
*
|
|
56
|
-
* Execution modes (automatic):
|
|
57
|
-
* 1. Docker sandbox — if Docker + sandbox image available, runs `claude --print`
|
|
58
|
-
* inside an isolated container. Full sandboxing.
|
|
59
|
-
* 2. Direct — runs Agent SDK query() in-process. Local dev fallback.
|
|
60
|
-
*/
|
|
61
|
-
export async function executeAgent(prompt, config, opts) {
|
|
62
|
-
const taskId = opts?.taskId || `task-${randomUUID().slice(0, 8)}`;
|
|
63
|
-
const stateDir = config.stateDir || resolve("data");
|
|
64
|
-
// Generate a fresh GitHub App token for the sandbox so git works immediately
|
|
65
|
-
const env = {};
|
|
66
|
-
const access = opts?.githubAccess;
|
|
67
|
-
if (process.env.GITHUB_APP_ID) {
|
|
68
|
-
const allowMcpAppAuth = access?.allowMcpAppAuth === true;
|
|
69
|
-
env.ALLOW_APP_PEM = allowMcpAppAuth ? "1" : "0";
|
|
70
|
-
env.GITHUB_APP_ID = allowMcpAppAuth ? process.env.GITHUB_APP_ID : "";
|
|
71
|
-
env.GITHUB_APP_INSTALLATION_ID = allowMcpAppAuth
|
|
72
|
-
? (process.env.GITHUB_APP_INSTALLATION_ID || "")
|
|
73
|
-
: "";
|
|
74
|
-
// sandbox-entrypoint materializes app.pem at this path only when ALLOW_APP_PEM=1
|
|
75
|
-
env.GITHUB_APP_PRIVATE_KEY_PATH = allowMcpAppAuth ? "/home/agent/.claude/app.pem" : "";
|
|
76
|
-
try {
|
|
77
|
-
const permissions = access ? GITHUB_PERMISSION_PROFILES[access.profile] : undefined;
|
|
78
|
-
const repositories = access?.repo ? [access.repo] : undefined;
|
|
79
|
-
console.log(`[executor] Minting git token: profile=${access?.profile ?? "default"}, ` +
|
|
80
|
-
`repo=${access?.repo || "(unscoped)"}, permissions=${permissions ? Object.keys(permissions).join(",") : "all"}`);
|
|
81
|
-
const { token } = await refreshGitAuth({
|
|
82
|
-
appId: process.env.GITHUB_APP_ID,
|
|
83
|
-
privateKeyPath: process.env.GITHUB_APP_PRIVATE_KEY_PATH || "",
|
|
84
|
-
installationId: process.env.GITHUB_APP_INSTALLATION_ID || "",
|
|
85
|
-
permissions,
|
|
86
|
-
repositories,
|
|
87
|
-
});
|
|
88
|
-
// Git CLI helper inside the sandbox
|
|
89
|
-
env.GIT_TOKEN = token;
|
|
90
|
-
// MCP GitHub server static-token mode
|
|
91
|
-
env.GITHUB_TOKEN = token;
|
|
92
|
-
}
|
|
93
|
-
catch (err) {
|
|
94
|
-
console.warn(`[executor] Could not generate git token (repo=${access?.repo || "none"}, ` +
|
|
95
|
-
`profile=${access?.profile ?? "default"}): ${err.message}`);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
// Try Docker sandbox first
|
|
99
|
-
const sbx = await createTaskSandbox({
|
|
100
|
-
taskId,
|
|
101
|
-
stateDir,
|
|
102
|
-
sandboxDir: config.sandboxDir,
|
|
103
|
-
env,
|
|
104
|
-
});
|
|
105
|
-
if (sbx) {
|
|
106
|
-
return executeSandboxed(prompt, config, sbx.sandbox, taskId, sbx.cleanup, opts?.onSessionId);
|
|
107
|
-
}
|
|
108
|
-
// Direct execution only if explicitly enabled — sandboxing is the default
|
|
109
|
-
if (process.env.ENABLE_DIRECT_FALLBACK === "true") {
|
|
110
|
-
console.warn(` [executor] No sandbox available — falling back to direct execution`);
|
|
111
|
-
return executeDirect(prompt, config);
|
|
112
|
-
}
|
|
113
|
-
throw new Error("Docker sandbox not available and ENABLE_DIRECT_FALLBACK is not enabled. Install Docker and build the sandbox image (docker-compose build sandbox), or set ENABLE_DIRECT_FALLBACK=true.");
|
|
114
|
-
}
|
|
115
|
-
// ── Docker sandbox execution ────────────────────────────────────────
|
|
116
|
-
async function executeSandboxed(prompt, config, sandbox, taskId, cleanup, onSessionId) {
|
|
117
|
-
const startTime = Date.now();
|
|
118
|
-
console.log(` [executor] Running in sandbox (task: ${taskId})`);
|
|
119
|
-
// Track whether we've already notified the caller of the session id, so
|
|
120
|
-
// the parser doesn't fire the callback twice (init line + later result).
|
|
121
|
-
let notifiedSessionId = false;
|
|
122
|
-
try {
|
|
123
|
-
const output = await sandbox.runAgent(taskId, prompt, {
|
|
124
|
-
model: config.model,
|
|
125
|
-
onLine: (line) => {
|
|
126
|
-
if (notifiedSessionId || !onSessionId)
|
|
127
|
-
return;
|
|
128
|
-
if (!line.startsWith("{"))
|
|
129
|
-
return;
|
|
130
|
-
try {
|
|
131
|
-
const msg = JSON.parse(line);
|
|
132
|
-
if (msg.type === "system" &&
|
|
133
|
-
msg.subtype === "init" &&
|
|
134
|
-
typeof msg.session_id === "string") {
|
|
135
|
-
notifiedSessionId = true;
|
|
136
|
-
onSessionId(msg.session_id);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
catch { /* not a complete json line yet — ignore */ }
|
|
140
|
-
},
|
|
141
|
-
});
|
|
142
|
-
// Parse stream-json for final result, session id, and usage metrics
|
|
143
|
-
const lines = output.split("\n").filter(l => l.startsWith("{"));
|
|
144
|
-
let result = "";
|
|
145
|
-
let turns = 0;
|
|
146
|
-
let subtype = "unknown";
|
|
147
|
-
let sessionId;
|
|
148
|
-
let costUsd;
|
|
149
|
-
let inputTokens;
|
|
150
|
-
let cacheCreationInputTokens;
|
|
151
|
-
let cacheReadInputTokens;
|
|
152
|
-
let outputTokens;
|
|
153
|
-
let apiDurationMs;
|
|
154
|
-
for (const line of lines) {
|
|
155
|
-
try {
|
|
156
|
-
const msg = JSON.parse(line);
|
|
157
|
-
if (msg.type === "system" && msg.subtype === "init" && typeof msg.session_id === "string") {
|
|
158
|
-
sessionId = msg.session_id;
|
|
159
|
-
}
|
|
160
|
-
if (msg.type === "result") {
|
|
161
|
-
result = msg.result || "";
|
|
162
|
-
turns = msg.num_turns || 0;
|
|
163
|
-
subtype = msg.subtype || "unknown";
|
|
164
|
-
if (typeof msg.total_cost_usd === "number")
|
|
165
|
-
costUsd = msg.total_cost_usd;
|
|
166
|
-
if (typeof msg.duration_api_ms === "number")
|
|
167
|
-
apiDurationMs = msg.duration_api_ms;
|
|
168
|
-
if (msg.usage) {
|
|
169
|
-
const u = msg.usage;
|
|
170
|
-
if (typeof u.input_tokens === "number")
|
|
171
|
-
inputTokens = u.input_tokens;
|
|
172
|
-
if (typeof u.cache_creation_input_tokens === "number")
|
|
173
|
-
cacheCreationInputTokens = u.cache_creation_input_tokens;
|
|
174
|
-
if (typeof u.cache_read_input_tokens === "number")
|
|
175
|
-
cacheReadInputTokens = u.cache_read_input_tokens;
|
|
176
|
-
if (typeof u.output_tokens === "number")
|
|
177
|
-
outputTokens = u.output_tokens;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
catch { /* skip */ }
|
|
182
|
-
}
|
|
183
|
-
const durationMs = Date.now() - startTime;
|
|
184
|
-
const success = subtype === "success";
|
|
185
|
-
const costStr = costUsd !== undefined ? `, $${costUsd.toFixed(4)}` : "";
|
|
186
|
-
console.log(` [executor] Result: ${subtype} (${turns} turns, ${Math.round(durationMs / 1000)}s${costStr})${sessionId ? ` [session ${sessionId}]` : ""}`);
|
|
187
|
-
if (!success) {
|
|
188
|
-
console.error(` [executor] Error: ${result || subtype}`);
|
|
189
|
-
}
|
|
190
|
-
const metrics = {
|
|
191
|
-
sessionId,
|
|
192
|
-
costUsd,
|
|
193
|
-
inputTokens,
|
|
194
|
-
cacheCreationInputTokens,
|
|
195
|
-
cacheReadInputTokens,
|
|
196
|
-
outputTokens,
|
|
197
|
-
apiDurationMs,
|
|
198
|
-
stopReason: subtype,
|
|
199
|
-
};
|
|
200
|
-
// Detect billing/auth errors
|
|
201
|
-
const lower = (result || "").toLowerCase();
|
|
202
|
-
if (lower.includes("credit balance") || lower.includes("rate limit") || lower.includes("unauthorized")) {
|
|
203
|
-
console.error(` [executor] Account error: ${result}`);
|
|
204
|
-
return { success: false, output: result, turns, error: result, durationMs, ...metrics };
|
|
205
|
-
}
|
|
206
|
-
return { success, output: result, turns, durationMs, ...metrics };
|
|
207
|
-
}
|
|
208
|
-
catch (err) {
|
|
209
|
-
console.error(` [executor] Sandbox error: ${err.message}`);
|
|
210
|
-
return {
|
|
211
|
-
success: false,
|
|
212
|
-
output: "",
|
|
213
|
-
turns: 0,
|
|
214
|
-
error: err.message,
|
|
215
|
-
durationMs: Date.now() - startTime,
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
finally {
|
|
219
|
-
await cleanup();
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
// ── Direct Agent SDK execution (fallback) ───────────────────────────
|
|
223
|
-
async function executeDirect(prompt, config) {
|
|
224
|
-
const startTime = Date.now();
|
|
225
|
-
let turns = 0;
|
|
226
|
-
let output = "";
|
|
227
|
-
console.log(` [executor] Running directly (no sandbox)`);
|
|
228
|
-
try {
|
|
229
|
-
const { query } = await import("@anthropic-ai/claude-agent-sdk");
|
|
230
|
-
const systemPrompt = loadAgentContext(config.agentContextDir);
|
|
231
|
-
const options = {
|
|
232
|
-
permissionMode: "bypassPermissions",
|
|
233
|
-
maxTurns: config.maxTurns || 200,
|
|
234
|
-
settingSources: [],
|
|
235
|
-
};
|
|
236
|
-
if (config.cwd)
|
|
237
|
-
options.cwd = config.cwd;
|
|
238
|
-
if (systemPrompt)
|
|
239
|
-
options.systemPrompt = systemPrompt;
|
|
240
|
-
if (config.model)
|
|
241
|
-
options.model = config.model;
|
|
242
|
-
if (config.mcpConfigPath) {
|
|
243
|
-
try {
|
|
244
|
-
const mcpConfig = JSON.parse(readFileSync(config.mcpConfigPath, "utf-8"));
|
|
245
|
-
options.mcpServers = mcpConfig.mcpServers;
|
|
246
|
-
}
|
|
247
|
-
catch (err) {
|
|
248
|
-
console.warn(`[executor] Could not load MCP config: ${err}`);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
let sessionId = "";
|
|
252
|
-
console.log(` [executor] Starting agent (model: ${config.model || "default"}, maxTurns: ${options.maxTurns})`);
|
|
253
|
-
for await (const message of query({ prompt, options })) {
|
|
254
|
-
const msg = message;
|
|
255
|
-
if (msg.type === "system" && msg.subtype === "init") {
|
|
256
|
-
sessionId = msg.session_id || "";
|
|
257
|
-
if (sessionId) {
|
|
258
|
-
console.log(` [executor] Session: ${sessionId}`);
|
|
259
|
-
console.log(` [executor] Log: ~/.claude/projects/*/${sessionId}.jsonl`);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
if (msg.type === "assistant")
|
|
263
|
-
turns++;
|
|
264
|
-
if (msg.type === "result") {
|
|
265
|
-
output = msg.result || msg.subtype || "";
|
|
266
|
-
const duration = msg.duration_ms ? `${Math.round(msg.duration_ms / 1000)}s` : "";
|
|
267
|
-
console.log(` [executor] Result: ${msg.subtype} (${turns} turns, ${duration})`);
|
|
268
|
-
if (msg.subtype !== "success") {
|
|
269
|
-
console.error(` [executor] Error: ${msg.error || msg.result || msg.subtype}`);
|
|
270
|
-
}
|
|
271
|
-
const lower = (output || "").toLowerCase();
|
|
272
|
-
if (lower.includes("credit balance") || lower.includes("rate limit") || lower.includes("unauthorized")) {
|
|
273
|
-
console.error(` [executor] Account error: ${output}`);
|
|
274
|
-
return { success: false, output, turns, error: output, durationMs: Date.now() - startTime };
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
return { success: true, output, turns, durationMs: Date.now() - startTime, sessionId: sessionId || undefined };
|
|
279
|
-
}
|
|
280
|
-
catch (err) {
|
|
281
|
-
const errorDetail = err.stderr ? `${err.message}\nstderr: ${err.stderr}` : err.message || String(err);
|
|
282
|
-
console.error(` [executor] Error: ${errorDetail}`);
|
|
283
|
-
return {
|
|
284
|
-
success: false,
|
|
285
|
-
output: output || errorDetail,
|
|
286
|
-
turns,
|
|
287
|
-
error: output ? `${output} (${errorDetail})` : errorDetail,
|
|
288
|
-
durationMs: Date.now() - startTime,
|
|
289
|
-
};
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
//# sourceMappingURL=executor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/engine/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAsB,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAA+B,MAAM,eAAe,CAAC;AAE5E,oEAAoE;AACpE,MAAM,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AA8DnD,MAAM,0BAA0B,GAAqD;IACnF,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,MAAM;QACd,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,MAAM;KACjB;IACD,cAAc,EAAE;QACd,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,OAAO;QACf,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,MAAM;KACjB;IACD,cAAc,EAAE;QACd,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,OAAO;QACf,aAAa,EAAE,OAAO;QACtB,QAAQ,EAAE,MAAM;KACjB;IACD,YAAY,EAAE;QACZ,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,OAAO;QACf,aAAa,EAAE,OAAO;QACtB,QAAQ,EAAE,MAAM;KACjB;CACF,CAAC;AAEF;;;GAGG;AACH,SAAS,gBAAgB,CAAC,GAAY;IACpC,MAAM,UAAU,GAAG,GAAG,IAAI,iBAAiB,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC;aAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAChC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;aACtD,IAAI,CAAC,aAAa,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,wCAAwC,UAAU,EAAE,CAAC,CAAC;QACnE,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,MAAsB,EACtB,IAUC;IAED,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,QAAQ,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpD,6EAA6E;IAC7E,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,EAAE,YAAY,CAAC;IAClC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC9B,MAAM,eAAe,GAAG,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;QACzD,GAAG,CAAC,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAChD,GAAG,CAAC,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,0BAA0B,GAAG,eAAe;YAC9C,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,EAAE,CAAC;YAChD,CAAC,CAAC,EAAE,CAAC;QACP,iFAAiF;QACjF,GAAG,CAAC,2BAA2B,GAAG,eAAe,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,CAAC;QAEvF,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACpF,MAAM,YAAY,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9D,OAAO,CAAC,GAAG,CACT,yCAAyC,MAAM,EAAE,OAAO,IAAI,SAAS,IAAI;gBACzE,QAAQ,MAAM,EAAE,IAAI,IAAI,YAAY,iBAAiB,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAChH,CAAC;YACF,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,CAAC;gBACrC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;gBAChC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,EAAE;gBAC7D,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,EAAE;gBAC5D,WAAW;gBACX,YAAY;aACb,CAAC,CAAC;YACH,oCAAoC;YACpC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;YACtB,sCAAsC;YACtC,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CACV,iDAAiD,MAAM,EAAE,IAAI,IAAI,MAAM,IAAI;gBAC3E,WAAW,MAAM,EAAE,OAAO,IAAI,SAAS,MAAM,GAAG,CAAC,OAAO,EAAE,CAC3D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC;QAClC,MAAM;QACN,QAAQ;QACR,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,GAAG;KACJ,CAAC,CAAC;IAEH,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/F,CAAC;IAED,0EAA0E;IAC1E,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,MAAM,EAAE,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;QACrF,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,wLAAwL,CAAC,CAAC;AAC5M,CAAC;AAGD,uEAAuE;AAEvE,KAAK,UAAU,gBAAgB,CAC7B,MAAc,EACd,MAAsB,EACtB,OAAsB,EACtB,MAAc,EACd,OAA4B,EAC5B,WAAyC;IAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,0CAA0C,MAAM,GAAG,CAAC,CAAC;IAEjE,wEAAwE;IACxE,yEAAyE;IACzE,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE;YACpD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACf,IAAI,iBAAiB,IAAI,CAAC,WAAW;oBAAE,OAAO;gBAC9C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,OAAO;gBAClC,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC7B,IACE,GAAG,CAAC,IAAI,KAAK,QAAQ;wBACrB,GAAG,CAAC,OAAO,KAAK,MAAM;wBACtB,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAClC,CAAC;wBACD,iBAAiB,GAAG,IAAI,CAAC;wBACzB,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAC,2CAA2C,CAAC,CAAC;YACzD,CAAC;SACF,CAAC,CAAC;QAEH,oEAAoE;QACpE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,OAAO,GAAG,SAAS,CAAC;QACxB,IAAI,SAA6B,CAAC;QAClC,IAAI,OAA2B,CAAC;QAChC,IAAI,WAA+B,CAAC;QACpC,IAAI,wBAA4C,CAAC;QACjD,IAAI,oBAAwC,CAAC;QAC7C,IAAI,YAAgC,CAAC;QACrC,IAAI,aAAiC,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,MAAM,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;oBAC1F,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC;gBAC7B,CAAC;gBACD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC1B,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;oBAC1B,KAAK,GAAG,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC;oBAC3B,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;oBACnC,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ;wBAAE,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC;oBACzE,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ;wBAAE,aAAa,GAAG,GAAG,CAAC,eAAe,CAAC;oBACjF,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;wBACd,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;wBACpB,IAAI,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ;4BAAE,WAAW,GAAG,CAAC,CAAC,YAAY,CAAC;wBACrE,IAAI,OAAO,CAAC,CAAC,2BAA2B,KAAK,QAAQ;4BAAE,wBAAwB,GAAG,CAAC,CAAC,2BAA2B,CAAC;wBAChH,IAAI,OAAO,CAAC,CAAC,uBAAuB,KAAK,QAAQ;4BAAE,oBAAoB,GAAG,CAAC,CAAC,uBAAuB,CAAC;wBACpG,IAAI,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ;4BAAE,YAAY,GAAG,CAAC,CAAC,aAAa,CAAC;oBAC1E,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAC1C,MAAM,OAAO,GAAG,OAAO,KAAK,SAAS,CAAC;QACtC,MAAM,OAAO,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,KAAK,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,aAAa,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE1J,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,uBAAuB,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,OAAO,GAAG;YACd,SAAS;YACT,OAAO;YACP,WAAW;YACX,wBAAwB;YACxB,oBAAoB;YACpB,YAAY;YACZ,aAAa;YACb,UAAU,EAAE,OAAO;SACpB,CAAC;QAEF,6BAA6B;QAC7B,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACvG,OAAO,CAAC,KAAK,CAAC,+BAA+B,MAAM,EAAE,CAAC,CAAC;YACvD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC;QAC1F,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC;IACpE,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5D,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,GAAG,CAAC,OAAO;YAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,uEAAuE;AAEvE,KAAK,UAAU,aAAa,CAC1B,MAAc,EACd,MAAsB;IAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAE1D,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAE9D,MAAM,OAAO,GAA4B;YACvC,cAAc,EAAE,mBAAmB;YACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,GAAG;YAChC,cAAc,EAAE,EAAE;SACnB,CAAC;QAEF,IAAI,MAAM,CAAC,GAAG;YAAE,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACzC,IAAI,YAAY;YAAE,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;QACtD,IAAI,MAAM,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAE/C,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;YAC5C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,IAAI,SAAS,GAAG,EAAE,CAAC;QAEnB,OAAO,CAAC,GAAG,CAAC,uCAAuC,MAAM,CAAC,KAAK,IAAI,SAAS,eAAe,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QAEhH,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YACvD,MAAM,GAAG,GAAG,OAAc,CAAC;YAE3B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;gBACpD,SAAS,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;gBACjC,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,yBAAyB,SAAS,EAAE,CAAC,CAAC;oBAClD,OAAO,CAAC,GAAG,CAAC,0CAA0C,SAAS,QAAQ,CAAC,CAAC;gBAC3E,CAAC;YACH,CAAC;YAED,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;gBAAE,KAAK,EAAE,CAAC;YAEtC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;gBACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,OAAO,KAAK,KAAK,WAAW,QAAQ,GAAG,CAAC,CAAC;gBAEjF,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC9B,OAAO,CAAC,KAAK,CAAC,uBAAuB,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACjF,CAAC;gBAED,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC3C,IAAI,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;oBACvG,OAAO,CAAC,KAAK,CAAC,+BAA+B,MAAM,EAAE,CAAC,CAAC;oBACvD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;gBAC9F,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,SAAS,IAAI,SAAS,EAAE,CAAC;IACjH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,aAAa,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;QACtG,OAAO,CAAC,KAAK,CAAC,uBAAuB,WAAW,EAAE,CAAC,CAAC;QACpD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM,IAAI,WAAW;YAC7B,KAAK;YACL,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,WAAW,GAAG,CAAC,CAAC,CAAC,WAAW;YAC1D,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "mcp-github-app",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"description": "MCP server for GitHub with native GitHub App authentication and automatic token refresh",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "src/index.js",
|
|
7
|
-
"bin": {
|
|
8
|
-
"mcp-github-app": "src/index.js"
|
|
9
|
-
},
|
|
10
|
-
"scripts": {
|
|
11
|
-
"start": "node src/index.js"
|
|
12
|
-
},
|
|
13
|
-
"dependencies": {
|
|
14
|
-
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
15
|
-
"jsonwebtoken": "^9.0.2",
|
|
16
|
-
"@octokit/rest": "^21.1.1"
|
|
17
|
-
}
|
|
18
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from "fs";
|
|
2
|
-
import { resolve } from "path";
|
|
3
|
-
import jwt from "jsonwebtoken";
|
|
4
|
-
|
|
5
|
-
export class GitHubAppAuth {
|
|
6
|
-
constructor({ appId, privateKeyPath, installationId }) {
|
|
7
|
-
this.appId = appId;
|
|
8
|
-
this.installationId = installationId;
|
|
9
|
-
this.privateKey = readFileSync(resolve(privateKeyPath), "utf8");
|
|
10
|
-
this._token = null;
|
|
11
|
-
this._expiresAt = null;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
_generateJWT() {
|
|
15
|
-
const now = Math.floor(Date.now() / 1000);
|
|
16
|
-
return jwt.sign(
|
|
17
|
-
{ iat: now - 60, exp: now + 600, iss: this.appId },
|
|
18
|
-
this.privateKey,
|
|
19
|
-
{ algorithm: "RS256" }
|
|
20
|
-
);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
async getToken() {
|
|
24
|
-
// Return cached token if still valid (5-min buffer)
|
|
25
|
-
if (this._token && this._expiresAt) {
|
|
26
|
-
const bufferMs = 5 * 60 * 1000;
|
|
27
|
-
if (Date.now() + bufferMs < this._expiresAt.getTime()) {
|
|
28
|
-
return this._token;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const jwtToken = this._generateJWT();
|
|
33
|
-
const res = await fetch(
|
|
34
|
-
`https://api.github.com/app/installations/${this.installationId}/access_tokens`,
|
|
35
|
-
{
|
|
36
|
-
method: "POST",
|
|
37
|
-
headers: {
|
|
38
|
-
Authorization: `Bearer ${jwtToken}`,
|
|
39
|
-
Accept: "application/vnd.github+json",
|
|
40
|
-
},
|
|
41
|
-
}
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
if (!res.ok) {
|
|
45
|
-
const body = await res.text();
|
|
46
|
-
throw new Error(`Failed to get installation token (${res.status}): ${body}`);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const data = await res.json();
|
|
50
|
-
this._token = data.token;
|
|
51
|
-
this._expiresAt = new Date(data.expires_at);
|
|
52
|
-
return this._token;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
async getAuthHeaders() {
|
|
56
|
-
const token = await this.getToken();
|
|
57
|
-
return {
|
|
58
|
-
Authorization: `token ${token}`,
|
|
59
|
-
Accept: "application/vnd.github+json",
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
get expiresAt() {
|
|
64
|
-
return this._expiresAt;
|
|
65
|
-
}
|
|
66
|
-
}
|