5.8 KiB
issueRef, version, updatedBy, updatedAt
| issueRef | version | updatedBy | updatedAt | ||||
|---|---|---|---|---|---|---|---|
| #294 | 4 |
|
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 :
git status --short --branch
Sortie :
## feature/294-node-mcp-launch-docs
M docs/manifest.md
M docs/packaging-distribution.md
M docs/services.md
git diff --stat
Sortie :
docs/manifest.md | 56 ++++++++++++++++++++++++++++++++++++------
docs/packaging-distribution.md | 19 ++++++++++++++
docs/services.md | 9 ++++++-
3 files changed, 76 insertions(+), 8 deletions(-)
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 :
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
npm run check
Sortie essentielle :
> @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 featureb5a3556(docs(sdk): clarifie le lancement Node des serveurs MCP plugins) puis merge localfdb3a90surdevelop. - Repo parent IdeA : commit
b1c173fsurdevelop(chore(sdk): bump du pointeur IdeaSDK pour #294). - Vérification reconfirmée par Git :
npm run checkvert.
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
- Pour un serveur MCP stdio JavaScript packagé, le contrat actuel est de lancer un
commandmanifest direct, sans shell. Pour ne pas dépendre du PATH shell utilisateur, il faut pointercommandvers un exécutable reproductible : package-relative sous${pluginRoot}ou géré sous${appDataDir}. Un.mjsavec shebang#!/usr/bin/env nodereste dépendant du Node visible par le process IdeA, pas du shell interactif. - Il n'existe pas de substitution officielle
${node},${runtimeNode},${hostNode}ni de champruntime. IdeA ne fournit pas actuellement de runtime Node plugin-scoped. allowAbsoluteCommand: falserejette les commandes absolues littérales dans le manifest, mais n'interdit pas uncommandqui devient absolu après substitution${pluginRoot}/${appDataDir}.command: "bash"est relatif et devient${pluginRoot}/bash;/bin/bashexigeallowAbsoluteCommand: true. Préférercommand: "scripts/wrapper"pour un wrapper packagé exécutable.- 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/nodeou/bin/bash) avecallowAbsoluteCommand: 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. - Documentation SDK enrichie dans
docs/manifest.md,docs/services.md,docs/packaging-distribution.md.