@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.
Files changed (30) hide show
  1. package/CLAUDE.md +1 -1
  2. package/README.md +1 -1
  3. package/changelog/0.8.x/0.8.0.md +17 -15
  4. package/changelog/0.8.x/0.8.1.md +17 -0
  5. package/changelog/0.8.x/0.8.2.md +18 -0
  6. package/changelog/template.md +13 -0
  7. package/dist/logs/combined.log +4 -4
  8. package/dist/logs/error.log +4 -4
  9. package/dist/mcp-server/transports/http/landing-page/assets/copy-script.d.ts +13 -4
  10. package/dist/mcp-server/transports/http/landing-page/assets/copy-script.d.ts.map +1 -1
  11. package/dist/mcp-server/transports/http/landing-page/assets/copy-script.js +99 -25
  12. package/dist/mcp-server/transports/http/landing-page/assets/copy-script.js.map +1 -1
  13. package/dist/mcp-server/transports/http/landing-page/assets/styles.d.ts.map +1 -1
  14. package/dist/mcp-server/transports/http/landing-page/assets/styles.js +318 -8
  15. package/dist/mcp-server/transports/http/landing-page/assets/styles.js.map +1 -1
  16. package/dist/mcp-server/transports/http/landing-page/sections/status-strip.d.ts.map +1 -1
  17. package/dist/mcp-server/transports/http/landing-page/sections/status-strip.js +20 -1
  18. package/dist/mcp-server/transports/http/landing-page/sections/status-strip.js.map +1 -1
  19. package/dist/mcp-server/transports/http/landing-page/sections/tools.d.ts +6 -5
  20. package/dist/mcp-server/transports/http/landing-page/sections/tools.d.ts.map +1 -1
  21. package/dist/mcp-server/transports/http/landing-page/sections/tools.js +114 -69
  22. package/dist/mcp-server/transports/http/landing-page/sections/tools.js.map +1 -1
  23. package/package.json +1 -1
  24. package/skills/add-app-tool/SKILL.md +24 -8
  25. package/skills/add-service/SKILL.md +7 -1
  26. package/skills/add-tool/SKILL.md +3 -1
  27. package/skills/api-errors/SKILL.md +21 -1
  28. package/skills/field-test/SKILL.md +73 -13
  29. package/skills/maintenance/SKILL.md +22 -7
  30. 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: "1.8"
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`) — default adopt.**
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 conventions are authoritative. Adopt directly unless the change genuinely conflicts with a documented local override.
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 framework features that don't match existing use cases** — skip; those are for future features, not retroactive refactors.
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 the cost/benefit is close
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
- - [ ] Adoption opportunities identified and applied
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.1.x/0.1.0.md)
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
- [#12](https://github.com/<owner>/<repo>/issues/12) ← issue
35
- [#17](https://github.com/<owner>/<repo>/pull/17) ← PR
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 — `#17` for "my
39
- upcoming PR" will quietly resolve to whatever real item already owns 17,
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