api-sync
Check upstream Basecamp API changes and sync the Smithy spec. Compares bc3 API docs and app code against the tracked bc3 revision in spec/api-provenance.json, identifies what changed, and optionally updates the Smithy spec and regenerates SDKs.
معلومات المصدر
- المستودع
- basecamp/basecamp-sdk
- آخر نشاط في المصدر
- ١٧ أغسطس ٢٠٢٦ في ٠١:٣٦
- لغة SKILL.md المكتشفة
- الإنجليزية
- النجوم
- ٥٣
- التفرعات
- ١٠
خيارات التثبيت
يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.
مراجعة ملفات المصدر
اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.
عرض SKILL.md
SKILL.md
تعليمات المصدر · معاينة للقراءة فقط- name
- api-sync
- description
- Check upstream Basecamp API changes and sync the Smithy spec. Compares bc3 API docs and app code against the tracked bc3 revision in spec/api-provenance.json, identifies what changed, and optionally updates the Smithy spec and regenerates SDKs.
- disable-model-invocation
- true
- argument-hint
- [check|sync|update-rev]
# API Sync Skill
You are synchronizing the Basecamp SDK's Smithy spec against upstream API changes.
## Inputs
- **mode**: `{{ arguments.mode | default: "check" }}`
## Upstream repo
- **bc3** (canonical source): `basecamp/bc3`
- API reference docs: watch `doc/api/`
- Rails app/API implementation: watch `app/controllers/`
The public `basecamp/bc3-api` repo is a mirror for documentation consumption, not a provenance input.
## Phase 1: Load State
1. Read `spec/api-provenance.json` to get the last-synced revision for `bc3`.
## Phase 2: Check Upstream
List files changed in the watched paths since the last sync.
For **bc3 API docs** (`doc/api/`):
```bash
gh api repos/basecamp/bc3/compare/<bc3.revision>...HEAD \
--jq '[.files[] | select(.filename | startswith("doc/api/"))] |
if length == 0 then " (no changes in doc/api/)"
else .[] | .status[:1] + " " + .filename
end'
```
For **bc3 API implementation** (`app/controllers/`):
```bash
gh api repos/basecamp/bc3/compare/<bc3.revision>...HEAD \
--jq '[.files[] | select(.filename | startswith("app/controllers/"))] |
if length == 0 then " (no changes in app/controllers/)"
else .[] | .status[:1] + " " + .filename
end'
```
Summarize the changed files by API domain (todos, messages, people, etc.). If there are no changes in either watched path, report "up to date" and stop.
If mode is `check`, stop here after reporting what changed.
## Phase 3: Sync Spec (mode=sync only)
For each changed doc file in `bc3`:
1. Fetch the upstream doc from `basecamp/bc3`:
```bash
gh api repos/basecamp/bc3/contents/doc/api/<path> --jq '.content' | base64 -d
```
2. Read the corresponding Smithy operations in `spec/basecamp.smithy` and `spec/overlays/`
3. Identify gaps: missing operations, changed fields, new parameters
4. Propose specific Smithy changes and apply after confirmation
For controller changes in `bc3`, cross-reference them with `doc/api/` to identify behavioral changes that affect the spec.
## Phase 4: Regenerate (mode=sync only)
After spec changes are applied:
```bash
make generate
make check
```
`make generate` is the pipeline's only definition — do not expand it into
individual targets here. The list this replaced had gone stale in five places:
it omitted `py-generate`, `kt-generate-services` and `swift-generate` entirely
(so following it left three SDKs ungenerated), along with `behavior-model` and
the final `sync-api-version` that re-derives prose constants from the generated
accessors.
Fix any issues that arise during generation or checks.
## Phase 5: Update Revision (mode=sync or update-rev)
Get the current `bc3` HEAD:
```bash
gh api repos/basecamp/bc3/commits/HEAD --jq '.sha'
```
Write the new revision and today's date to `spec/api-provenance.json`:
```json
{
"bc3": {
"revision": "<new-sha>",
"date": "<today>"
}
}
```
Then run `make provenance-sync` to update the Go embedded copy.
## Output
Report a summary of:
- What changed upstream (by domain)
- What spec changes were made (if sync mode)
- New revision SHA stamped
- Any warnings or issues encountered
عرض على GitHub