113 lines
5.8 KiB
Markdown
113 lines
5.8 KiB
Markdown
---
|
|
issueRef: "#294"
|
|
version: 4
|
|
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
|
|
updatedAt: 1788963918771
|
|
---
|
|
|
|
## QA - 2026-09-09 - Validation doc-only SDK
|
|
|
|
Périmètre vérifié dans le submodule `sdk/IdeaSDK`, branche `feature/294-node-mcp-launch-docs`.
|
|
|
|
Diff relu : modifications limitées à `docs/manifest.md`, `docs/services.md` et `docs/packaging-distribution.md`.
|
|
|
|
Commandes exécutées :
|
|
|
|
```bash
|
|
git status --short --branch
|
|
```
|
|
|
|
Sortie :
|
|
|
|
```text
|
|
## feature/294-node-mcp-launch-docs
|
|
M docs/manifest.md
|
|
M docs/packaging-distribution.md
|
|
M docs/services.md
|
|
```
|
|
|
|
```bash
|
|
git diff --stat
|
|
```
|
|
|
|
Sortie :
|
|
|
|
```text
|
|
docs/manifest.md | 56 ++++++++++++++++++++++++++++++++++++------
|
|
docs/packaging-distribution.md | 19 ++++++++++++++
|
|
docs/services.md | 9 ++++++-
|
|
3 files changed, 76 insertions(+), 8 deletions(-)
|
|
```
|
|
|
|
```bash
|
|
rg -n "\\$\\{node\\}|\\$\\{runtimeNode\\}|\\$\\{hostNode\\}|runtime Node|plugin-scoped Node|command: \\\"node\\\"|allowAbsoluteCommand|shell|package-relative|runCommand\\(\\)|\\$\\{pluginRoot\\}|\\$\\{appDataDir\\}" docs/manifest.md docs/services.md docs/packaging-distribution.md
|
|
```
|
|
|
|
Sortie essentielle :
|
|
|
|
```text
|
|
docs/packaging-distribution.md:49:starting the declared `command` directly. IdeA does not inject a shell and does
|
|
docs/packaging-distribution.md:50:not provide a plugin-scoped Node.js runtime.
|
|
docs/packaging-distribution.md:52:For a packaged MCP server, prefer a package-relative executable such as
|
|
docs/packaging-distribution.md:61:or declare an explicit absolute host dependency with `allowAbsoluteCommand:
|
|
docs/packaging-distribution.md:62:true`. Avoid relying on a bare `command: "node"` in distributed or multi-harness
|
|
docs/services.md:45:as read-only. Unlike manifest-declared MCP servers, `runCommand()` does not
|
|
docs/services.md:54: command: "node",
|
|
docs/services.md:63:[Manifest](manifest.md), where a bare `command: "node"` is package-relative
|
|
docs/manifest.md:313:and no `runtime` field. IdeA does not provide a plugin-scoped Node.js runtime
|
|
docs/manifest.md:321:`command` is not shell syntax. IdeA starts it directly and passes `args`
|
|
docs/manifest.md:351:Avoid `command: "node"` for a packaged MCP server. With
|
|
docs/manifest.md:352:`allowAbsoluteCommand: false`, it is treated as package-relative and resolves to
|
|
docs/manifest.md:353:`${pluginRoot}/node`. With `allowAbsoluteCommand: true`, it is passed as a host
|
|
```
|
|
|
|
```bash
|
|
npm run check
|
|
```
|
|
|
|
Sortie essentielle :
|
|
|
|
```text
|
|
> @idea/plugin-sdk@0.1.0 check
|
|
> npm run build && npm run typecheck:examples && npm run package:hello-plugin
|
|
|
|
> @idea/plugin-sdk@0.1.0 build
|
|
> tsc -p tsconfig.json
|
|
|
|
> @idea/plugin-sdk@0.1.0 typecheck:examples
|
|
> tsc -p examples/hello-plugin/tsconfig.json --noEmit
|
|
|
|
> @idea/plugin-sdk@0.1.0 package:hello-plugin
|
|
> npm run build && npm run build:hello-plugin && node scripts/package-hello-plugin.mjs
|
|
|
|
> @idea/plugin-sdk@0.1.0 build
|
|
> tsc -p tsconfig.json
|
|
|
|
> @idea/plugin-sdk@0.1.0 build:hello-plugin
|
|
> tsc -p examples/hello-plugin/tsconfig.build.json
|
|
|
|
created /home/anthony/Documents/Projects/IdeA/sdk/IdeaSDK/examples/hello-plugin/build/hello-plugin-0.1.0.zip
|
|
```
|
|
|
|
Lecture QA : la documentation clarifie bien qu'il n'existe pas de substitution `${node}`, `${runtimeNode}`, `${hostNode}` ni de runtime Node plugin fourni par IdeA ; qu'un `command` MCP est lancé directement sans shell ; qu'un `command` relatif est résolu sous `${pluginRoot}` ; que `command: "node"` devient `${pluginRoot}/node` avec `allowAbsoluteCommand: false` ; qu'une dépendance host absolue requiert `allowAbsoluteCommand: true` ; et que les serveurs JS reproductibles doivent vendor/installer un runtime ou déclarer explicitement une dépendance absolue.
|
|
|
|
Verdict QA : VERT.
|
|
|
|
## Git - 2026-09-09 - Intégration locale
|
|
|
|
Cycle Git terminé, sans push.
|
|
|
|
- SDK submodule `sdk/IdeaSDK` : commit feature `b5a3556` (`docs(sdk): clarifie le lancement Node des serveurs MCP plugins`) puis merge local `fdb3a90` sur `develop`.
|
|
- Repo parent IdeA : commit `b1c173f` sur `develop` (`chore(sdk): bump du pointeur IdeaSDK pour #294`).
|
|
- Vérification reconfirmée par Git : `npm run check` vert.
|
|
|
|
Réserves : le submodule SDK est en avance sur origin avec les travaux #293/#294, et le parent `develop` est en avance localement. Aucune action distante effectuée. Fichiers `.ideai/tickets/*` et `scripts/` hors périmètre laissés tels quels.
|
|
|
|
## Réponse contractuelle pour UnityPlugin #12
|
|
|
|
1. Pour un serveur MCP stdio JavaScript packagé, le contrat actuel est de lancer un `command` manifest direct, sans shell. Pour ne pas dépendre du PATH shell utilisateur, il faut pointer `command` vers un exécutable reproductible : package-relative sous `${pluginRoot}` ou géré sous `${appDataDir}`. Un `.mjs` avec shebang `#!/usr/bin/env node` reste dépendant du Node visible par le process IdeA, pas du shell interactif.
|
|
2. Il n'existe pas de substitution officielle `${node}`, `${runtimeNode}`, `${hostNode}` ni de champ `runtime`. IdeA ne fournit pas actuellement de runtime Node plugin-scoped.
|
|
3. `allowAbsoluteCommand: false` rejette les commandes absolues littérales dans le manifest, mais n'interdit pas un `command` qui devient absolu après substitution `${pluginRoot}`/`${appDataDir}`. `command: "bash"` est relatif et devient `${pluginRoot}/bash`; `/bin/bash` exige `allowAbsoluteCommand: true`. Préférer `command: "scripts/wrapper"` pour un wrapper packagé exécutable.
|
|
4. Solution compatible aujourd'hui : packager un exécutable MCP autonome ou installer/vendor un runtime sous le package/appData et pointer dessus. À défaut, déclarer explicitement une dépendance host absolue (`/usr/bin/node` ou `/bin/bash`) avec `allowAbsoluteCommand: true`. Un wrapper de résolution Node peut améliorer le diagnostic, mais ne supprime pas la dépendance si aucun runtime n'est fourni.
|
|
5. Documentation SDK enrichie dans `docs/manifest.md`, `docs/services.md`, `docs/packaging-distribution.md`.
|