fa-mcp-sdk 0.4.111 → 0.4.114
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.
|
@@ -30,7 +30,7 @@ with concrete next-step options (retry, fix, roll back, leave-as-is) — never s
|
|
|
30
30
|
1. Parse arguments → resolve FROM/TO refs
|
|
31
31
|
2. Validate refs → fail fast on bogus versions
|
|
32
32
|
3. Preflight safety → branch + uncommitted-changes check
|
|
33
|
-
4. Install TO into project → `yarn add
|
|
33
|
+
4. Install TO into project → run `install-target-sdk.mjs` (yarn add + copy update-sdk.js + run it)
|
|
34
34
|
5. Analyze diff → categorize every change as Auto / Needs-Input / Manual
|
|
35
35
|
6. Build execution plan
|
|
36
36
|
7. PRESENT PLAN + CONFIRM ← blocking gate; nothing else mutates until user says go
|
|
@@ -154,25 +154,28 @@ This is the last point before mutating the project. Run these checks and **ask t
|
|
|
154
154
|
|
|
155
155
|
This is the first mutating action. From here on, we're committed to either finishing the upgrade or rolling back.
|
|
156
156
|
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
yarn add fa-mcp-sdk@<TO-version>
|
|
160
|
-
```
|
|
157
|
+
Run the bundled wrapper from the project root — it performs all three sub-steps in one go:
|
|
161
158
|
|
|
162
|
-
If TO is a commit hash:
|
|
163
159
|
```bash
|
|
164
|
-
|
|
160
|
+
node .claude/skills/upgrade-sdk/scripts/install-target-sdk.mjs <TO>
|
|
165
161
|
```
|
|
166
162
|
|
|
167
|
-
|
|
168
|
-
|
|
163
|
+
where `<TO>` is either:
|
|
164
|
+
- a published version (e.g. `0.4.108`), or
|
|
165
|
+
- a git URL with a commit hash (e.g. `https://github.com/Bazilio-san/fa-mcp-sdk#<TO-commit>`).
|
|
169
166
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
167
|
+
The wrapper sequentially:
|
|
168
|
+
1. runs `yarn add fa-mcp-sdk@<TO>`;
|
|
169
|
+
2. copies `node_modules/fa-mcp-sdk/scripts/update-sdk.js` over the project's `scripts/update-sdk.js` (overwriting
|
|
170
|
+
the existing file so the project always uses the updater shipped with the target SDK version);
|
|
171
|
+
3. runs `node scripts/update-sdk.js` from the project root.
|
|
172
|
+
|
|
173
|
+
`update-sdk.js` then copies the latest `FA-MCP-SDK-DOC/` and `.claude/` content from the SDK into the project.
|
|
174
|
+
Pinned folders (any folder under the project's `.claude/` containing a direct file named `pin`) are preserved by
|
|
175
|
+
the script as-is.
|
|
176
|
+
|
|
177
|
+
If any sub-step fails, the wrapper exits non-zero with the error. Show it verbatim and ask the user how to proceed
|
|
178
|
+
(retry, switch to a different TO ref, or abort).
|
|
176
179
|
|
|
177
180
|
## Step 5: Analyze the diff
|
|
178
181
|
|
|
@@ -230,6 +233,10 @@ structure with override values. If `default.yaml` changed but `_local.yaml` did
|
|
|
230
233
|
After `yarn add fa-mcp-sdk@<TO>`, the SDK ships its template at `node_modules/fa-mcp-sdk/cli-template/`. This is the
|
|
231
234
|
canonical source for any template files in the project.
|
|
232
235
|
|
|
236
|
+
**Scope:** the table below lists ONLY files that `scripts/update-sdk.js` (already executed in Step 4) does NOT
|
|
237
|
+
copy. Anything inside `cli-template/FA-MCP-SDK-DOC/`, `cli-template/.claude/`, and the individual scripts under
|
|
238
|
+
`node_modules/fa-mcp-sdk/scripts/` is refreshed by `update-sdk.js` automatically — do NOT re-process it here.
|
|
239
|
+
|
|
233
240
|
| Template (source of truth) | Project (destination) | Notes |
|
|
234
241
|
|------------------------------------------------------------------|-------------------------------|-------|
|
|
235
242
|
| `node_modules/fa-mcp-sdk/cli-template/package.json` | `package.json` | **Merge carefully** — see rule below |
|
|
@@ -239,10 +246,8 @@ canonical source for any template files in the project.
|
|
|
239
246
|
| `node_modules/fa-mcp-sdk/cli-template/CLAUDE.md` | `CLAUDE.md` | Merge — project may add custom sections |
|
|
240
247
|
| `node_modules/fa-mcp-sdk/cli-template/jest.config.js` | `jest.config.js` | Overwrite unless customized |
|
|
241
248
|
| `node_modules/fa-mcp-sdk/cli-template/deploy/` | `deploy/` | Merge per file |
|
|
242
|
-
| `node_modules/fa-mcp-sdk/cli-template/.claude/skills/<skill>/` | `.claude/skills/<skill>/` | Overwrite unless locally customized |
|
|
243
249
|
| `node_modules/fa-mcp-sdk/cli-template/r/<name>.xml` | `.run/<name>.run.xml` | **Renamed** — see rule below |
|
|
244
250
|
| `node_modules/fa-mcp-sdk/cli-template/gitignore` | `.gitignore` | Source has no leading dot |
|
|
245
|
-
| `node_modules/fa-mcp-sdk/cli-template/FA-MCP-SDK-DOC/` | `FA-MCP-SDK-DOC/` | Auto-updated by `update-sdk.js` in Step 4 |
|
|
246
251
|
|
|
247
252
|
#### Rule: `package.json` — ADD ONLY new dependencies
|
|
248
253
|
|
|
@@ -267,27 +272,18 @@ The project has no `r/` directory — it was renamed to `.run/` at generation, a
|
|
|
267
272
|
local customizations, treat as Needs-Input (ask the user: overwrite / merge / skip).
|
|
268
273
|
- REMOVED file → informational only; do not delete the project's `.run/<name>.run.xml`.
|
|
269
274
|
|
|
270
|
-
####
|
|
275
|
+
#### Editing `.claude/` files outside the auto-refresh
|
|
271
276
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
`
|
|
276
|
-
|
|
277
|
+
If during Step 8 you need to write or merge an individual file under the project's `.claude/` (e.g. a custom
|
|
278
|
+
non-template skill that `update-sdk.js` does NOT touch because its folder contains a `pin` marker), direct
|
|
279
|
+
`Write`/`Edit` is denied by the project's `settings.json`. Use the project's `scripts/fcp.js` workflow described in
|
|
280
|
+
the `edit-claude-files` skill: write the new content to a temp file, then
|
|
281
|
+
`node scripts/fcp.js .claude/<path> <temp-file>` to install it atomically.
|
|
277
282
|
|
|
278
283
|
For any other changed template file: source path under `node_modules/fa-mcp-sdk/cli-template/...`, destination in the
|
|
279
284
|
project, action = overwrite or merge (depending on local customization).
|
|
280
285
|
|
|
281
|
-
### 5.4
|
|
282
|
-
|
|
283
|
-
The CLI copies scripts from `node_modules/fa-mcp-sdk/scripts/` (NOT from `cli-template/scripts/`) into the project's
|
|
284
|
-
`scripts/`, then removes `copy-static.js`, `publish.js`, and `scripts/publish-README.md` (SDK-internal, not shipped).
|
|
285
|
-
|
|
286
|
-
- Canonical source: `node_modules/fa-mcp-sdk/scripts/<name>.js`
|
|
287
|
-
- Project destination: `scripts/<name>.js`
|
|
288
|
-
- Exclude: `copy-static.js`, `publish.js`, `publish-README.md`
|
|
289
|
-
|
|
290
|
-
### 5.5 Core library exports
|
|
286
|
+
### 5.4 Core library exports
|
|
291
287
|
|
|
292
288
|
**Prefer the TypeScript source over compiled output.** Fetch `src/core/index.ts` (and any re-exported `_types_/`
|
|
293
289
|
files it references) at both FROM and TO via GitHub raw:
|
|
@@ -307,10 +303,49 @@ Why source over `dist/`:
|
|
|
307
303
|
State explicitly in the report that analysis was made from compiled artifacts and double-check via the GitHub source
|
|
308
304
|
viewer for any flagged change.
|
|
309
305
|
|
|
310
|
-
|
|
306
|
+
#### Type / interface changes (not just renames)
|
|
307
|
+
|
|
308
|
+
Renaming an export is the obvious case — the harder one is a **shape change** to a type/interface the project
|
|
309
|
+
consumes. These break compilation in ways that don't show up as "removed export":
|
|
310
|
+
|
|
311
|
+
- A new **required** field added to an interface (e.g. `IToolHandlerParams`) — every place that constructs or
|
|
312
|
+
destructures that interface needs the new field.
|
|
313
|
+
- A previously required field made optional, OR an optional field made required.
|
|
314
|
+
- A field's **type** changed (e.g. `string` → `string | undefined`, `Foo` → `Foo[]`, a string-union narrowed).
|
|
315
|
+
- Generic signatures changed (added/removed type parameters, added constraints).
|
|
316
|
+
- Return-type changes on a function/method the project imports.
|
|
317
|
+
- Function parameters reordered, added, removed, or changed type.
|
|
318
|
+
|
|
319
|
+
For each such change, classify per consumer:
|
|
320
|
+
1. **Project does NOT consume the changed type/symbol** → informational only, no action.
|
|
321
|
+
2. **Project consumes it AND the migration is mechanical** (one obvious code edit, e.g. add a field with a known
|
|
322
|
+
default, rename a parameter) → Auto in Step 6.
|
|
323
|
+
3. **Project consumes it AND the migration requires a judgment call** (where does the new required value come from?
|
|
324
|
+
how should the new generic be parameterized? does the narrower type still cover the project's usage?) →
|
|
325
|
+
Needs-Input in Step 6.
|
|
326
|
+
|
|
327
|
+
For every consumer site, capture file:line and the exact migration plan. This list is the primary reference when
|
|
328
|
+
`tsc` fails in Step 9 — consult it before debugging blindly.
|
|
329
|
+
|
|
330
|
+
#### Optional new features
|
|
331
|
+
|
|
332
|
+
Not every SDK change is a breaking one. The TO version may add **new** exports, methods, hook params, config
|
|
333
|
+
options, or capabilities the project could adopt but isn't forced to:
|
|
334
|
+
|
|
335
|
+
- New helper functions / utilities re-exported from `fa-mcp-sdk`.
|
|
336
|
+
- New optional parameters on existing handlers (existing call sites keep working).
|
|
337
|
+
- New `appConfig` sections / options with sensible defaults.
|
|
338
|
+
- New transport / auth / DB capabilities the project's domain might benefit from.
|
|
339
|
+
|
|
340
|
+
These do NOT break the build, so they go on a separate **Optional improvements** list (see Step 6). The skill
|
|
341
|
+
should surface them, but never apply them silently — the user decides per item whether they're relevant.
|
|
342
|
+
|
|
343
|
+
### 5.5 Project code scan
|
|
311
344
|
|
|
312
345
|
Scan the project's `src/`, `config/`, and `tests/` for:
|
|
313
346
|
- Imports from `fa-mcp-sdk` referencing removed/renamed exports
|
|
347
|
+
- Consumers of types/interfaces whose **shape** changed in 5.4 (added required field, changed field type,
|
|
348
|
+
changed generic signature, changed function parameter/return type) — even if the import path is unchanged
|
|
314
349
|
- Usage of deprecated APIs
|
|
315
350
|
- Config keys that were renamed or restructured
|
|
316
351
|
|
|
@@ -318,18 +353,20 @@ For each hit, capture file:line and the exact replacement plan — needed for St
|
|
|
318
353
|
|
|
319
354
|
## Step 6: Categorize and build the execution plan
|
|
320
355
|
|
|
321
|
-
For every change found in Step 5, assign one of
|
|
356
|
+
For every change found in Step 5, assign one of four categories:
|
|
322
357
|
|
|
323
358
|
### Auto — LLM applies without asking
|
|
324
|
-
- `
|
|
325
|
-
|
|
359
|
+
- `node .claude/skills/upgrade-sdk/scripts/install-target-sdk.mjs <TO>` (already done in Step 4 — installs SDK,
|
|
360
|
+
refreshes `scripts/update-sdk.js`, and runs it)
|
|
326
361
|
- Adding a brand-new config key to `config/default.yaml` when the project doesn't override it
|
|
327
362
|
- Adding new env var mappings to `config/custom-environment-variables.yaml`
|
|
328
363
|
- Adding a missing dependency to `package.json` under `dependencies`/`devDependencies`
|
|
329
|
-
- Copying a new template file the project doesn't have yet (
|
|
364
|
+
- Copying a new template file the project doesn't have yet (`.run/` entries from `cli-template/r/`, etc. — note that
|
|
365
|
+
`FA-MCP-SDK-DOC/`, `.claude/`, and individual SDK scripts are refreshed automatically by `update-sdk.js`, not here)
|
|
330
366
|
- Applying a mechanical rename of a renamed SDK export across the project's `src/` when there's exactly one
|
|
331
367
|
unambiguous replacement
|
|
332
|
-
-
|
|
368
|
+
- Applying a mechanical type/interface migration when the fix is unambiguous (e.g. a newly required field has a
|
|
369
|
+
single obvious source, a renamed parameter where call sites use the same value)
|
|
333
370
|
|
|
334
371
|
### Needs-Input — LLM applies, but needs user input
|
|
335
372
|
- A locally-customized file conflicts with the new template — ask: overwrite / merge / skip
|
|
@@ -338,6 +375,19 @@ For every change found in Step 5, assign one of three categories:
|
|
|
338
375
|
- A `BREAKING CHANGE:` marker that the LLM can apply mechanically but wants explicit confirmation
|
|
339
376
|
- The project's `config/local.yaml` has stale overrides for keys that changed structure — ask whether to drop them,
|
|
340
377
|
port to the new structure, or leave them and warn
|
|
378
|
+
- A type/interface shape change where the project's consumer needs a non-obvious value (where does the new required
|
|
379
|
+
field come from? how should a new generic be parameterized?)
|
|
380
|
+
|
|
381
|
+
### 💡 Optional improvements — LLM proposes per item, applies only on per-item confirmation
|
|
382
|
+
Non-breaking SDK additions the project COULD adopt but isn't forced to. List each as a discrete `yes/no` question
|
|
383
|
+
in Step 7. Examples:
|
|
384
|
+
- A new helper now exported from `fa-mcp-sdk` that could replace a hand-rolled utility in the project
|
|
385
|
+
- A new optional parameter on an existing API that would let the project remove a workaround
|
|
386
|
+
- A new `appConfig` section that enables a capability the project may want (caching, AD auth, Consul, etc.)
|
|
387
|
+
- A new transport option / DB feature relevant to the project's domain
|
|
388
|
+
|
|
389
|
+
Default for every Optional item is **NO** — the user must explicitly opt in per item. Skipped items go to the
|
|
390
|
+
final report under "Optional improvements not adopted (FYI)".
|
|
341
391
|
|
|
342
392
|
### Manual — LLM cannot perform
|
|
343
393
|
Reserve this only for things the LLM truly cannot do in this session. Examples:
|
|
@@ -347,7 +397,7 @@ Reserve this only for things the LLM truly cannot do in this session. Examples:
|
|
|
347
397
|
|
|
348
398
|
**If a step could be automated in principle but requires human judgment, prefer Needs-Input over Manual.**
|
|
349
399
|
|
|
350
|
-
Build the plan as
|
|
400
|
+
Build the plan as four lists (Auto / Needs-Input / Optional / Manual) with item counts and concrete actions.
|
|
351
401
|
|
|
352
402
|
## Step 7: Present the plan and ASK FOR CONFIRMATION
|
|
353
403
|
|
|
@@ -357,13 +407,13 @@ Render the plan in the conversation in the detected language:
|
|
|
357
407
|
## Upgrade plan: fa-mcp-sdk v<FROM> → v<TO>
|
|
358
408
|
|
|
359
409
|
### 🤖 I will do automatically (N items)
|
|
360
|
-
1. ✅
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
410
|
+
1. ✅ node .claude/skills/upgrade-sdk/scripts/install-target-sdk.mjs <TO> [already done]
|
|
411
|
+
(yarn add + refresh `scripts/update-sdk.js` + run `node scripts/update-sdk.js`)
|
|
412
|
+
2. Add new key `webServer.foo` (default `bar`) to `config/default.yaml`
|
|
413
|
+
3. Copy new template file `.run/new-task.run.xml` (renamed from `r/new-task.xml`)
|
|
414
|
+
4. Add dep `some-pkg@^1.2.3` to package.json `dependencies`
|
|
415
|
+
5. Apply rename `oldFn` → `newFn` in src/foo.ts:42, src/bar.ts:17, src/baz.ts:55
|
|
416
|
+
6. Run verification: `oxlint --fix . && oxfmt . && rimraf dist && tsc` + project tests + clean startup
|
|
367
417
|
|
|
368
418
|
### ❓ I need your input on (M items)
|
|
369
419
|
1. `config/local.yaml` overrides `webServer.auth` which restructured in v<TO>. Options:
|
|
@@ -371,9 +421,16 @@ Render the plan in the conversation in the detected language:
|
|
|
371
421
|
2. New config key `someService.apiKey` has no default. What value should I set?
|
|
372
422
|
3. Project's `.claude/skills/upgrade-sdk/SKILL.md` is locally customized. Overwrite with new template,
|
|
373
423
|
merge non-conflicting parts only, or skip?
|
|
424
|
+
4. `IToolHandlerParams` gained required field `transport`. Project consumers at src/tools/handle-tool-call.ts:12
|
|
425
|
+
need it — should I derive it from `params.transport ?? 'http'` or expose it as a new tool argument?
|
|
426
|
+
|
|
427
|
+
### 💡 Optional improvements available (L items) — default NO per item
|
|
428
|
+
1. v<TO> adds `appConfig.cache.redis` — project currently uses in-memory cache. Adopt Redis cache? (no/yes)
|
|
429
|
+
2. v<TO> exports `mergeByBatch()` helper — project has a hand-rolled batch-merge in src/db/repo.ts:88. Replace? (no/yes)
|
|
430
|
+
3. v<TO> adds optional `agentTester.openAi.proxy` — project doesn't need a proxy today. Add scaffolding? (no/yes)
|
|
374
431
|
|
|
375
432
|
### 👋 You'll need to do manually (K items)
|
|
376
|
-
- [empty if everything is in Auto
|
|
433
|
+
- [empty if everything is in Auto / Needs-Input / Optional]
|
|
377
434
|
|
|
378
435
|
### Rollback info
|
|
379
436
|
- Pre-upgrade commit: <hash>
|
|
@@ -383,7 +440,8 @@ Render the plan in the conversation in the detected language:
|
|
|
383
440
|
|
|
384
441
|
Then ask **explicitly**:
|
|
385
442
|
|
|
386
|
-
> "Confirm — apply the Auto items now and prompt you inline for the Needs-Input items as I reach them?
|
|
443
|
+
> "Confirm — apply the Auto items now and prompt you inline for the Needs-Input + Optional items as I reach them?
|
|
444
|
+
> (yes/no)"
|
|
387
445
|
|
|
388
446
|
Wait for explicit confirmation. If the user declines, stop and leave the project as it is after Step 4 (note this in
|
|
389
447
|
the final report). If the user confirms, proceed to Step 8.
|
|
@@ -391,13 +449,15 @@ the final report). If the user confirms, proceed to Step 8.
|
|
|
391
449
|
## Step 8: Execute
|
|
392
450
|
|
|
393
451
|
Apply each Auto item in order. For each Needs-Input item, ask the user **at the moment you reach it** (one question
|
|
394
|
-
at a time so the user can reason — don't batch). Apply with the answer, then move on.
|
|
452
|
+
at a time so the user can reason — don't batch). Apply with the answer, then move on. After Auto + Needs-Input,
|
|
453
|
+
walk through Optional items one-by-one (default NO) — apply only those the user explicitly accepts.
|
|
395
454
|
|
|
396
455
|
Be transparent about state — after each item is applied, output a one-line acknowledgment so the user can follow
|
|
397
456
|
along, e.g. `✓ Added webServer.foo to config/default.yaml`.
|
|
398
457
|
|
|
399
|
-
When touching files under `.claude
|
|
400
|
-
|
|
458
|
+
When touching files under `.claude/` that `update-sdk.js` did not just refresh (e.g. pinned custom skills), always
|
|
459
|
+
use the project's `scripts/fcp.js` workflow — see Step 5.3 → "Editing `.claude/` files outside the auto-refresh"
|
|
460
|
+
and the project's `edit-claude-files` skill.
|
|
401
461
|
|
|
402
462
|
Maintain an in-memory execution log so the final report can list exactly what was done and what required input.
|
|
403
463
|
|
|
@@ -463,10 +523,14 @@ the likely-causing file(s), then ask the user to choose:
|
|
|
463
523
|
|
|
464
524
|
Apply the user's choice:
|
|
465
525
|
- **fix** → diagnose, apply a fix (asking inline for any info needed), re-run verification. Loop if it fails again.
|
|
526
|
+
**When `tsc` is the failing step, consult Step 5.4 (Core library exports → Type / interface changes) FIRST**
|
|
527
|
+
— most TS errors after an SDK upgrade trace back to a shape change you already cataloged there. Match the error
|
|
528
|
+
to the relevant 5.4 entry and apply the migration plan, instead of debugging the error in isolation.
|
|
466
529
|
- **retry** → rerun the failing step once. If it fails again, present the same four options.
|
|
467
|
-
- **rollback** → run
|
|
468
|
-
`node
|
|
469
|
-
|
|
530
|
+
- **rollback** → re-run the wrapper with the previous ref:
|
|
531
|
+
`node .claude/skills/upgrade-sdk/scripts/install-target-sdk.mjs <FROM>` (uses a git URL form for commit hashes,
|
|
532
|
+
e.g. `https://github.com/Bazilio-san/fa-mcp-sdk#<FROM-commit>`), then `git checkout <pre-upgrade-hash> -- .`.
|
|
533
|
+
If the user stashed changes in Step 3, restore them with `git stash pop`. Report what was rolled back.
|
|
470
534
|
- **leave-as-is** → no further changes. Final report will clearly mark the failure and what remains unverified.
|
|
471
535
|
|
|
472
536
|
## Step 10: Report
|
|
@@ -504,7 +568,22 @@ Pre-upgrade commit: <hash>
|
|
|
504
568
|
- `config/local.yaml`: chose (a) port to new structure — applied N keys
|
|
505
569
|
- `someService.apiKey`: set to `<value-you-provided>`
|
|
506
570
|
- `oldFn` → `newFn` rename: applied to src/foo.ts:42, src/bar.ts:17, src/baz.ts:55
|
|
571
|
+
- `IToolHandlerParams.transport`: derived from `params.transport ?? 'http'` per your choice — applied at
|
|
572
|
+
src/tools/handle-tool-call.ts:12
|
|
573
|
+
- ...
|
|
574
|
+
|
|
575
|
+
## 💡 Optional improvements adopted
|
|
576
|
+
|
|
577
|
+
- Redis cache: enabled (`appConfig.cache.redis` populated, dep `ioredis@^5.4.1` added)
|
|
578
|
+
- ...
|
|
579
|
+
- [empty if user declined all Optional items]
|
|
580
|
+
|
|
581
|
+
## 💡 Optional improvements NOT adopted (FYI)
|
|
582
|
+
|
|
583
|
+
- `mergeByBatch()` helper now available — project keeps hand-rolled version in src/db/repo.ts:88
|
|
584
|
+
- `agentTester.openAi.proxy` option available — not adopted (project doesn't need a proxy)
|
|
507
585
|
- ...
|
|
586
|
+
- [empty if no Optional items existed, or all were adopted]
|
|
508
587
|
|
|
509
588
|
## 👋 Still on your plate
|
|
510
589
|
|
|
@@ -525,9 +604,8 @@ Pre-upgrade commit: <hash>
|
|
|
525
604
|
- Prior SDK version: `v<FROM>`
|
|
526
605
|
- To roll back manually:
|
|
527
606
|
```bash
|
|
528
|
-
|
|
607
|
+
node .claude/skills/upgrade-sdk/scripts/install-target-sdk.mjs <FROM>
|
|
529
608
|
git checkout <hash> -- .
|
|
530
|
-
node ./node_modules/fa-mcp-sdk/scripts/update-sdk.js
|
|
531
609
|
```
|
|
532
610
|
|
|
533
611
|
## Notes
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { cpSync, existsSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { spawnSync } from 'child_process';
|
|
5
|
+
|
|
6
|
+
const target = process.argv[2];
|
|
7
|
+
if (!target) {
|
|
8
|
+
console.error('Usage: node install-target-sdk.mjs <version|git-url>');
|
|
9
|
+
console.error(' e.g. 0.4.108');
|
|
10
|
+
console.error(' e.g. https://github.com/Bazilio-san/fa-mcp-sdk#<commit-hash>');
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const cwd = process.cwd();
|
|
15
|
+
|
|
16
|
+
if (!existsSync(join(cwd, 'package.json'))) {
|
|
17
|
+
console.error(`No package.json in ${cwd}. Run this script from the project root.`);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function run(cmd, args) {
|
|
22
|
+
console.log(`\n> ${cmd} ${args.join(' ')}`);
|
|
23
|
+
const res = spawnSync(cmd, args, { cwd, stdio: 'inherit', shell: process.platform === 'win32' });
|
|
24
|
+
if (res.status !== 0) {
|
|
25
|
+
console.error(`Command failed: ${cmd} ${args.join(' ')} (exit ${res.status})`);
|
|
26
|
+
process.exit(res.status ?? 1);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
run('yarn', ['add', `fa-mcp-sdk@${target}`]);
|
|
31
|
+
|
|
32
|
+
const sdkUpdaterSrc = join(cwd, 'node_modules', 'fa-mcp-sdk', 'scripts', 'update-sdk.js');
|
|
33
|
+
const sdkUpdaterDest = join(cwd, 'scripts', 'update-sdk.js');
|
|
34
|
+
|
|
35
|
+
if (!existsSync(sdkUpdaterSrc)) {
|
|
36
|
+
console.error(`Updater not found: ${sdkUpdaterSrc}`);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
cpSync(sdkUpdaterSrc, sdkUpdaterDest);
|
|
41
|
+
console.log(`Copied update-sdk.js: ${sdkUpdaterSrc} -> ${sdkUpdaterDest}`);
|
|
42
|
+
|
|
43
|
+
run('node', ['scripts/update-sdk.js']);
|
|
44
|
+
|
|
45
|
+
console.log('\nSDK installed and template assets refreshed.');
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fa-mcp-sdk",
|
|
3
3
|
"productName": "FA MCP SDK",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.114",
|
|
5
5
|
"description": "Core infrastructure and templates for building Model Context Protocol (MCP) servers with TypeScript",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/core/index.js",
|
package/scripts/update-sdk.js
CHANGED
|
@@ -135,6 +135,7 @@ for (const { name, src, dest, preserve = [], respectPin = false } of targets) {
|
|
|
135
135
|
const scriptsSrcDir = join(cwd, './node_modules/fa-mcp-sdk/scripts');
|
|
136
136
|
const scriptsDestDir = join(cwd, 'scripts');
|
|
137
137
|
const individualScripts = [
|
|
138
|
+
'+x.js',
|
|
138
139
|
'cc-hook-oxlint-oxfmt-fix.cjs',
|
|
139
140
|
'clone-mcp-ext-apps.js',
|
|
140
141
|
'fcp.js',
|