Repository navigation
v4.0.0
Added
analyticstool (read-only, 5 actions:sprint_velocity,sprint_burndown,cycle_time,throughput,project_summary) backed byAnalyticsService— the surface is now 21 tools / 175 actions.idempotencyKeyon create actions (manage_issuescreate/add_sub_issue/create_draft/create_comment,manage_milestonescreate,manage_projectcreate_field,manage_sprintscreate): a repeat with the same key and arguments within 24 h replays the first result (replayed: true); the same key with different arguments is refused. A result that aged out of memory is recovered from the audit log.- Additive pagination — paged list actions accept
cursorand returnnextCursornext topageInfo(manage_projectlist_templates/list_linked_repos/list_linked_teams/filter_items,manage_issuessearch_advanced/list_sub_issues,manage_status_updateslist). - Per-tool
_meta.schemaVersion(all1.0.0) on everytools/listentry and tool result, pinned by a schema snapshot test. - Mutation audit log — append-only, redacted JSONL of every state-changing tool call (
AUDIT_LOG_ENABLED,AUDIT_LOG_PATH, default.mcp-audit/mutations.jsonl; actor = agent id ortoken). - Opt-in OpenTelemetry tracing —
OTEL_EXPORTER_OTLP_ENDPOINT/OTEL_SERVICE_NAMEenabletool.<name>spans; both audit log and telemetry flush on graceful shutdown. - GitHub App installation auth outranks the PAT through
resolveGitHubAuth()+GitHubRepositoryFactory.fromAuth(a partial App config falls back to the PAT). - One
GitHubRequestExecutor— every GitHub call is gated on the sharedRateLimitManagerbudget (RATE_LIMIT_FLOOR, default 100) and retried (3 attempts) through a single path. - Webhook hardening —
WEBHOOK_HOST(loopback by default),EVENTS_AUTH_TOKENfor/events/*,WEBHOOK_ALLOWED_ORIGINS,WEBHOOK_RATE_LIMIT/WEBHOOK_RATE_WINDOW_MS,WEBHOOK_TIMEOUT_MS,WEBHOOK_TRUSTED_PROXIES. AI_SESSION_TOKEN_LIMIT— per-operation token budget for AI task generation (TokenBudgetManager), distinct from the per-agent budget.- CI/supply chain — lockfile (
check:lockfiles) and doc-count (check:docs) checks, CodeQL, Dependabot, CycloneDX SBOM attached to releases. - ADR-005 … ADR-012 recording rich entities, the composition-root exception, the tool error contract, App-auth precedence, idempotency + audit, observability, PromptRegistry/TokenBudgetManager, and the test-tree consolidation.
Changed
- Error contract — every tool failure (invalid arguments, GitHub errors, exhausted budget, executor errors) is
{content, isError: true}with a stable code in_meta.error; a JSON-RPC error is reserved for an unknown tool or protocol faults. - Hard-stop agent budgets gate AI tools — an exhausted budget refuses with
BudgetExhausted(remaining/limit in_meta.error). manage_sprints deleterequiresconfirm: true.manage_project updateacceptsclosed(true closes, false reopens) orstatus(closed/active/open).ProjectManagementServiceis a 121-line facade of typed service getters; it has no behavior of its own.- Tool executors self-construct through
createGitHubFactory()(documented composition-root exception); the container registers the componentsindex.tsowns andindex.tsconstructs none by hand. PromptRegistrynow serves every AI prompt (versioned{{var}}templates);AIResponseCacheis wired intoTaskContextGenerationService;TokenBudgetManageris consumed by the task-generation services.- The logger honors
LOG_LEVELandLOG_FORMAT=json(one JSON line per entry with the correlation id) and redacts secrets. - Domain entities carry behavior (rich entities); the domain layer imports nothing from
services/orinfrastructure/. - Test trees merged into
src/__tests__/(the roottests/directory is gone). - Docs reconciled to the code —
npm run check:docsnow also coversAGENTS.md/CLAUDE.md;docs/TOOLS.mdtables,architecture.md, the remediation tracker and ADRs agree with the registry.
Removed
- Dead modules:
infrastructure/validation,infrastructure/resource(ResourceManager,OptimisticLockManager),StructuredLogger/TracingLogger,project-types.ts,MCPErrorHandler. - The never-built
Pagination.tsclaim (superseded bycursor/nextCursor).
Security
- The webhook/SSE server binds
127.0.0.1by default and/events/*fails closed (503) withoutEVENTS_AUTH_TOKEN;X-Forwarded-Foris honored only fromWEBHOOK_TRUSTED_PROXIES; webhook signatures fail closed. - Audit records and logs are redacted; CodeQL scanning and Dependabot are enabled.
Fixed
- Documentation that contradicted the code: tool/action counts (21 / 175), the
manage_project/manage_issues/manage_sprints/manage_automation/ai_analyzeaction tables, references to deleted modules, and the agent field list (sevenagent_*fields).
📦 npm: npm install mcp-github-project-manager@4.0.0
See CHANGELOG.md for full details.