@cyanheads/mcp-ts-core 0.8.0 → 0.8.2
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/CLAUDE.md +1 -1
- package/README.md +1 -1
- package/changelog/0.8.x/0.8.0.md +17 -15
- package/changelog/0.8.x/0.8.1.md +17 -0
- package/changelog/0.8.x/0.8.2.md +18 -0
- package/changelog/template.md +13 -0
- package/dist/logs/combined.log +4 -4
- package/dist/logs/error.log +4 -4
- package/dist/mcp-server/transports/http/landing-page/assets/copy-script.d.ts +13 -4
- package/dist/mcp-server/transports/http/landing-page/assets/copy-script.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/assets/copy-script.js +99 -25
- package/dist/mcp-server/transports/http/landing-page/assets/copy-script.js.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/assets/styles.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/assets/styles.js +318 -8
- package/dist/mcp-server/transports/http/landing-page/assets/styles.js.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/sections/status-strip.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/sections/status-strip.js +20 -1
- package/dist/mcp-server/transports/http/landing-page/sections/status-strip.js.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/sections/tools.d.ts +6 -5
- package/dist/mcp-server/transports/http/landing-page/sections/tools.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/landing-page/sections/tools.js +114 -69
- package/dist/mcp-server/transports/http/landing-page/sections/tools.js.map +1 -1
- package/package.json +1 -1
- package/skills/add-app-tool/SKILL.md +24 -8
- package/skills/add-service/SKILL.md +7 -1
- package/skills/add-tool/SKILL.md +3 -1
- package/skills/api-errors/SKILL.md +21 -1
- package/skills/field-test/SKILL.md +73 -13
- package/skills/maintenance/SKILL.md +22 -7
- package/templates/changelog/template.md +18 -5
|
@@ -4,7 +4,7 @@ description: >
|
|
|
4
4
|
Investigate, adopt, and verify dependency updates — with special handling for `@cyanheads/mcp-ts-core`. Captures what changed, understands why, cross-references against the codebase, adopts framework improvements, syncs project skills, and runs final checks. Supports two entry modes: run the full flow end-to-end, or review updates you already applied.
|
|
5
5
|
metadata:
|
|
6
6
|
author: cyanheads
|
|
7
|
-
version: "
|
|
7
|
+
version: "2.0"
|
|
8
8
|
audience: external
|
|
9
9
|
type: workflow
|
|
10
10
|
---
|
|
@@ -50,6 +50,8 @@ Do not redo this investigation inline — the `changelog` skill handles tag-form
|
|
|
50
50
|
|
|
51
51
|
### 4. Framework review (`@cyanheads/mcp-ts-core`)
|
|
52
52
|
|
|
53
|
+
**Skill-version paradox.** If `node_modules/@cyanheads/mcp-ts-core/skills/maintenance/SKILL.md`'s `version` exceeds the one running, run Step 5 Phase A first and re-invoke `maintenance` — otherwise feature-adoption rows added in the new version silently don't surface.
|
|
54
|
+
|
|
53
55
|
If `@cyanheads/mcp-ts-core` was updated, do a deeper pass beyond what the `changelog` skill covers. The framework ships a **directory-based changelog** grouped by minor series (`.x` semver-wildcard convention) — one file per released version at `node_modules/@cyanheads/mcp-ts-core/changelog/<major.minor>.x/<version>.md`. Read only the files between old and new rather than scanning a monolithic file.
|
|
54
56
|
|
|
55
57
|
Example — `0.5.2 → 0.5.4` means reading two new version files:
|
|
@@ -66,6 +68,7 @@ Scan specifically for:
|
|
|
66
68
|
| Area | Adoption Check |
|
|
67
69
|
|:-----|:---------------|
|
|
68
70
|
| New `/errors` surface — factories, typed contracts (`errors[]` + `ctx.fail`), `httpErrorFromResponse` | Replace ad-hoc `new McpError(...)` with factories; declare `errors: [...]` on tools that surface domain-specific failure modes; route declared throws through `ctx.fail(reason, …)` so the conformance lint is happy |
|
|
71
|
+
| Existing factory choice — semantic audit | Beyond factory-vs-`new McpError`: audit each `throw factory(...)` against intent. `invalidParams` (-32602) is for malformed JSON-RPC params (wrong-shape post-Zod is rare); semantic post-shape validation should use `validationError` (-32007). `notFound` for missing entities, `conflict` for state collisions, `unauthorized` vs `forbidden` for unauth vs scope-denied. Wrong codes degrade `mcp_error_classified_code` observability and break client retry logic — fix during this pass even if not adopting contracts yet. |
|
|
69
72
|
| New utilities in `/utils` | Identify any that supersede local helper code |
|
|
70
73
|
| New context capabilities | Added `ctx.*` methods worth adopting |
|
|
71
74
|
| Provider/service APIs | Updates to `OpenRouterProvider`, `SpeechService`, `GraphService`, etc. |
|
|
@@ -145,16 +148,28 @@ If the consumer customized a framework script, the overwrite discards those chan
|
|
|
145
148
|
|
|
146
149
|
Apply the findings from Steps 3 and 4. Framework changes and third-party library changes have different adoption defaults — the asymmetry is deliberate.
|
|
147
150
|
|
|
148
|
-
**Framework changes (`@cyanheads/mcp-ts-core`) —
|
|
151
|
+
**Framework changes (`@cyanheads/mcp-ts-core`) — auto-adopt every applicable site, in this pass.**
|
|
149
152
|
|
|
150
|
-
The consumer opted into the framework; its templates, skills, scripts, linter rules, and
|
|
153
|
+
The consumer opted into the framework; its templates, skills, scripts, linter rules, conventions, and new APIs that supersede local code are authoritative. Adopt them now — not as a follow-up.
|
|
151
154
|
|
|
152
155
|
- **Breaking changes** — fix call sites. Not optional.
|
|
153
156
|
- **Deprecations** — migrate now, while context is fresh.
|
|
154
157
|
- **New linter rules** — if the rule now flags existing code, fix the code; don't silence the rule.
|
|
155
|
-
- **New utilities that supersede local code** — swap them in. The point of the framework is to centralize.
|
|
158
|
+
- **New utilities that supersede local code** — swap them in. The point of the framework is to centralize. This applies even when the local helper has richer messages or branch handling — port the domain detail onto the framework path; don't leave the local helper as-is. (E.g., `httpErrorFromResponse` replacing a project-local `throwForStatus`: keep the per-route message map, but route it through the framework utility.)
|
|
156
159
|
- **New conventions** (template changes, new config keys, renamed env vars) — adopt and update `.env.example`, server config schema, `server.json`, and README if user-facing.
|
|
157
|
-
- **New
|
|
160
|
+
- **New patterns that match existing surfaces** — refactor *every* matching site in this pass. Examples: typed error contracts (`errors[]` + `ctx.fail`) on tools that already throw domain-specific failures; factory adoption (`notFound()`, `validationError()`, …) replacing ad-hoc `new McpError(...)`; new logging/observability hooks supplanting bespoke logging. If the framework added a pattern that fits N tools/services, do all N — partial adoption fragments the surface and rots faster.
|
|
161
|
+
- **New framework features that don't match existing use cases** — skip. These are for future features, not retroactive refactors. "Don't match" means *the surface doesn't exist in this server* (e.g., a new Speech API in a non-speech server) — not "I'd have to touch a few files."
|
|
162
|
+
|
|
163
|
+
**Hard rule — invalid framework deferrals.**
|
|
164
|
+
|
|
165
|
+
| ❌ Not a valid reason to defer | ✅ Valid reason to defer |
|
|
166
|
+
|:-------------------------------|:-------------------------|
|
|
167
|
+
| "Larger change than fits this pass" | Code-commented or `CLAUDE.md`-documented local override that intentionally diverges from the framework convention |
|
|
168
|
+
| "Marginal benefit / leaving as-is" | Breaking change with multiple migration paths that need user input |
|
|
169
|
+
| "Per-tool refactor — worth doing as a focused follow-up" | Feature genuinely doesn't apply (the surface doesn't exist in this server) |
|
|
170
|
+
| "Existing helper has rich domain messages we'd lose" | — (port the messages onto the framework path) |
|
|
171
|
+
|
|
172
|
+
If you find yourself writing the left-column phrasing in Step 8's "Open decisions", stop and adopt it instead. Cost/benefit reasoning belongs to third-party changes only.
|
|
158
173
|
|
|
159
174
|
**Third-party library changes — default cost/benefit.**
|
|
160
175
|
|
|
@@ -186,7 +201,7 @@ Present a concise numbered summary to the user:
|
|
|
186
201
|
3. **Features adopted** — new framework APIs now in use
|
|
187
202
|
4. **Skills synced** — added/updated with versions (Phase A) and agent directories refreshed (Phase B)
|
|
188
203
|
5. **New/changed skills available** — skills that appeared in Phase A for the first time or had materially-changed step sequences. Frame as "consider running when the time is right" rather than immediate actions; the user decides when to invoke them.
|
|
189
|
-
6. **Open decisions** — genuinely ambiguous items: breaking changes with multiple migration paths, framework changes that conflict with a documented local override, third-party adoptions where
|
|
204
|
+
6. **Open decisions** — genuinely ambiguous items only. Valid: breaking changes with multiple migration paths needing user input, framework changes that conflict with a code-commented or `CLAUDE.md`-documented local override, third-party adoptions where cost/benefit is close. **Not valid:** framework adoptions deferred for scope, effort, or marginal-benefit reasoning — those were already adopted in Step 6 and belong under "Features adopted." If this section is empty, that's the expected outcome of a clean framework upgrade.
|
|
190
205
|
7. **Status** — rebuild / devcheck / test results
|
|
191
206
|
|
|
192
207
|
## Checklist
|
|
@@ -194,7 +209,7 @@ Present a concise numbered summary to the user:
|
|
|
194
209
|
- [ ] Update applied (`bun update --latest`) — Mode A, or already done by user — Mode B
|
|
195
210
|
- [ ] `changelog` skill invoked for each updated package
|
|
196
211
|
- [ ] Framework CHANGELOG reviewed if `@cyanheads/mcp-ts-core` was updated
|
|
197
|
-
- [ ]
|
|
212
|
+
- [ ] Every applicable framework adoption opportunity applied in this pass — no scope/effort/marginal-benefit deferrals; third-party adoptions evaluated on cost/benefit
|
|
198
213
|
- [ ] Project `skills/` synced from package (Phase A), with a change report
|
|
199
214
|
- [ ] Agent skill directories (`.claude/skills/`, `.agents/skills/`, etc.) refreshed from project `skills/` (Phase B)
|
|
200
215
|
- [ ] Framework `scripts/` resynced from package via content-hash compare (Phase C), with a change report; `scripts/` diff reviewed before committing
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# FORMAT REFERENCE — this file is never edited, never moved, never renamed.
|
|
3
3
|
#
|
|
4
4
|
# At release time, author a new per-version file at:
|
|
5
|
-
# changelog/<major.minor>.x/<version>.md (e.g. changelog/0.
|
|
5
|
+
# changelog/<major.minor>.x/<version>.md (e.g. changelog/0.6.x/0.6.6.md)
|
|
6
6
|
# using this file's frontmatter and section layout as the starting point.
|
|
7
7
|
# Set that new file's H1 to `# <version> — YYYY-MM-DD` with a concrete date.
|
|
8
8
|
|
|
@@ -27,16 +27,29 @@ breaking: false
|
|
|
27
27
|
|
|
28
28
|
Optional narrative intro — 1-3 sentences framing the release theme. Delete if not needed.
|
|
29
29
|
|
|
30
|
+
TONE: terse and fact-dense. 1-2 sentence(s) per bullet where possible —
|
|
31
|
+
name the symbol, state what changed, stop. Drop "explains how it works" prose;
|
|
32
|
+
that belongs in JSDoc, AGENTS.md, or the relevant skill. Drop ceremonial
|
|
33
|
+
framings ("This release introduces…", "fully backwards compatible:" with a
|
|
34
|
+
paragraph of justification). Prefer code/symbol names over English
|
|
35
|
+
re-explanations. If a bullet runs more than ~2 lines, split it or cut it.
|
|
36
|
+
|
|
37
|
+
WHAT TO INCLUDE: every distinct fact a reader needs to adopt or audit the
|
|
38
|
+
release — new exports, signatures, lint rule IDs, env vars, breaking
|
|
39
|
+
changes, version bumps on shipped skills. WHAT TO CUT: mechanism walkthroughs,
|
|
40
|
+
duplicate prose between Added and Changed, file-by-file test enumerations,
|
|
41
|
+
internal implementation notes. Trust the reader to read the code or the docs.
|
|
42
|
+
|
|
30
43
|
Linking issues/PRs: use full URLs so the link works everywhere (GitHub web UI,
|
|
31
44
|
npm/node_modules reads, local editors). GitHub's bare `#NN` auto-link only
|
|
32
45
|
resolves inside its own UI.
|
|
33
46
|
|
|
34
|
-
[#
|
|
35
|
-
[#
|
|
47
|
+
[#38](https://github.com/cyanheads/mcp-ts-core/issues/38) ← issue
|
|
48
|
+
[#42](https://github.com/cyanheads/mcp-ts-core/pull/42) ← PR
|
|
36
49
|
|
|
37
50
|
Only link numbers you've verified exist (via `gh issue view NN` or
|
|
38
|
-
`gh pr view NN`). Never speculate on a future number — `#
|
|
39
|
-
upcoming PR" will quietly resolve to whatever real item already owns
|
|
51
|
+
`gh pr view NN`). Never speculate on a future number — `#42` for "my
|
|
52
|
+
upcoming PR" will quietly resolve to whatever real item already owns 42,
|
|
40
53
|
and GitHub timeline previews will pull in that unrelated item's title.
|
|
41
54
|
-->
|
|
42
55
|
|