86 lines
3.5 KiB
Markdown
86 lines
3.5 KiB
Markdown
# @aoagents/ao-plugin-scm-github
|
||
|
||
## 0.4.0
|
||
|
||
### Patch Changes
|
||
|
||
- c8af50f: Make `ProjectConfig.repo` optional to support projects without a configured remote.
|
||
|
||
**Migration:** `ProjectConfig.repo` is now `string | undefined` instead of `string`.
|
||
External plugins that access `project.repo` directly (e.g. `project.repo.split("/")`) must
|
||
add a null check first. Use a guard like `if (!project.repo) return null;` or a helper that
|
||
throws with a descriptive error.
|
||
|
||
- a8bc746: scm-github: cache 4 more hot-path reads (CI, mergeability, pending comments, detectPR)
|
||
|
||
Completes the bulk of the AO-side caching work alongside the prior PR view
|
||
cache. Per-method TTLs match the approved policy: 5s max for
|
||
decision-influencing fields.
|
||
- `getCIChecks` (`gh pr checks`): 5s TTL
|
||
- `getMergeability` (composite `pr view` + CI + state): 5s TTL on the composite result
|
||
- `getPendingComments` (`gh api graphql` review threads): 5s TTL — ETag doesn't help on GraphQL per Experiment 2
|
||
- `detectPR` (`gh pr list --head BRANCH`): 5s TTL, **positive-only** — `[]` results are never cached so a freshly created PR surfaces on the next poll. Branch-keyed entry is invalidated by `mergePR`/`closePR` alongside the number-keyed entries.
|
||
|
||
Combined with the prior PR view cache, this covers the top 6 AO-side gh
|
||
operation categories that accounted for ~85% of calls in tier-5 bench traces.
|
||
|
||
Tests: 85 existing + 9 new cache tests, all 162 passing.
|
||
|
||
- a8bc746: scm-github: cache 5 `gh pr view` callsites with per-method TTLs
|
||
|
||
The lifecycle worker repeatedly polls each PR for state, summary, reviews,
|
||
and review decision. Trace data showed `gh pr view` was the single largest
|
||
AO-side endpoint at 1,280 calls per 5-session tier-5 run with >97% duplicate
|
||
rate (e.g. PR #184 polled 86× for `--json state` alone in 11.5 minutes).
|
||
|
||
Adds an in-process per-instance cache inside `createGitHubSCM()`, keyed by
|
||
`${owner}/${repo}#${prKey}:${method}` so different field-sets stay isolated.
|
||
Per-method TTLs balance reduction against staleness on decision-influencing
|
||
fields:
|
||
- `resolvePR`: 60s (identity metadata only — number, url, title, branch refs, isDraft)
|
||
- `getPRState`: 5s
|
||
- `getPRSummary`: 5s
|
||
- `getReviews`: 5s
|
||
- `getReviewDecision`: 5s
|
||
|
||
`assignPRToCurrentUser`, `mergePR`, and `closePR` each invalidate the entire
|
||
PR cache for that PR after the mutation, so AO never sees stale state from
|
||
its own writes. Failures are not cached.
|
||
|
||
`getCIChecksFromStatusRollup` and `getMergeability` are intentionally NOT
|
||
cached here — those need ETag-based revalidation, not blind TTL, and will
|
||
land in a follow-up change.
|
||
|
||
Expected reduction: ~1,165 of ~1,280 `gh pr view` calls per tier-5 run.
|
||
|
||
Tests: 73 existing + 12 new cache tests, all passing.
|
||
|
||
- Updated dependencies [2306078]
|
||
- Updated dependencies [faaddb1]
|
||
- Updated dependencies [f330a1e]
|
||
- Updated dependencies [a862327]
|
||
- Updated dependencies [331f1ce]
|
||
- Updated dependencies [703d584]
|
||
- Updated dependencies [f674422]
|
||
- Updated dependencies [62353eb]
|
||
- Updated dependencies [bd36c7b]
|
||
- Updated dependencies [e7ad928]
|
||
- Updated dependencies [ca8c4cc]
|
||
- Updated dependencies [7b82374]
|
||
- Updated dependencies [4701122]
|
||
- Updated dependencies [c8af50f]
|
||
- Updated dependencies [bcdda4b]
|
||
- Updated dependencies [1cbf657]
|
||
- Updated dependencies [c447c7c]
|
||
- Updated dependencies [a45eb32]
|
||
- Updated dependencies [7072143]
|
||
- Updated dependencies [ed2dcea]
|
||
- @aoagents/ao-core@0.4.0
|
||
|
||
## 0.2.0
|
||
|
||
### Patch Changes
|
||
|
||
- Updated dependencies [3a650b0]
|
||
- @composio/ao-core@0.2.0
|