@nodefony/devkit 10.0.0-beta.1 → 10.0.0-beta.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/README.md +23 -12
- package/dist/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.152.0}/helpers/esm/decorate.js +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.152.0}/helpers/esm/decorateMetadata.js +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.152.0}/helpers/esm/decorateParam.js +1 -1
- package/dist/index.js +2 -2
- package/dist/nodefony/controllers/DevkitController.js +2 -2
- package/dist/nodefony/controllers/McpController.js +3 -3
- package/dist/nodefony/service/DevkitService.js +2 -2
- package/docs/index.md +1 -1
- package/package.json +7 -7
- package/skills/nodefony-dev/SKILL.md +9 -0
- package/skills/nodefony-devops/references/image.md +1 -1
package/README.md
CHANGED
|
@@ -75,10 +75,13 @@ navigateur — d'où la commande, qui reste la porte utile.
|
|
|
75
75
|
npx nodefony ai:mcp # écrit .mcp.json ; --dry-run pour voir sans écrire
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
(ce qui manque), **`nodefony_symbols`** (ce qu'une
|
|
80
|
-
**`nodefony_card`** (par où commencer)
|
|
81
|
-
|
|
78
|
+
Sept outils : **`nodefony_inspect`** (ce qui est monté), **`nodefony_check`**
|
|
79
|
+
(ce qui manque — la commande s'appelle `doctor`), **`nodefony_symbols`** (ce qu'une
|
|
80
|
+
API du framework signifie), **`nodefony_card`** (par où commencer),
|
|
81
|
+
**`nodefony_docs`** (la documentation des modules installés), **`nodefony_admin_list`**
|
|
82
|
+
et **`nodefony_admin_call`** (lectures du data plane d'administration, jeton porteur
|
|
83
|
+
du scope `admin:read` exigé). Ce sont les mêmes briques que les commandes — une
|
|
84
|
+
source, plusieurs portes.
|
|
82
85
|
|
|
83
86
|
**Ce n'est pas un process de plus.** Depuis la révision `2026-07-28` du transport
|
|
84
87
|
« Streamable HTTP », un serveur MCP est un simple endpoint `POST` sans session :
|
|
@@ -162,7 +165,7 @@ connaît pas encore.
|
|
|
162
165
|
|
|
163
166
|
### Vos propres outils
|
|
164
167
|
|
|
165
|
-
Ces
|
|
168
|
+
Ces outils intégrés décrivent le framework ; ils ne savent rien de votre métier. Tout
|
|
166
169
|
module de votre application peut publier les siens en implémentant
|
|
167
170
|
`getMcpTools(): IMcpTool[]` :
|
|
168
171
|
|
|
@@ -203,12 +206,13 @@ c'est fermé par défaut, et c'est voulu. Détail et pièges :
|
|
|
203
206
|
|
|
204
207
|
## Les skills d'agent
|
|
205
208
|
|
|
206
|
-
Le paquet livre
|
|
209
|
+
Le paquet livre huit **skills** au format [Agent Skills](https://agentskills.io)
|
|
207
210
|
— la marche à suivre complète pour les tâches où un agent, sans eux, inventerait
|
|
208
211
|
du code : créer une ressource REST, ajouter un service injectable, réserver une
|
|
209
212
|
route à qui est habilité, ouvrir un canal temps réel, faire évoluer le schéma
|
|
210
|
-
d'une base sans la détruire,
|
|
211
|
-
|
|
213
|
+
d'une base sans la détruire, voir puis MESURER un écran dans un navigateur
|
|
214
|
+
piloté — plus un skill qui conduit toute tâche de développement et un qui décrit
|
|
215
|
+
l'exploitation en conteneur. Ils sont lus par tout client conforme (Claude Code, Cursor, Copilot,
|
|
212
216
|
VS Code, Codex, Goose…).
|
|
213
217
|
|
|
214
218
|
`nodefony create app` les met à disposition à la création. Après un
|
|
@@ -225,10 +229,12 @@ npx nodefony ai:sync # --dry-run pour voir sans écrire, --json pour
|
|
|
225
229
|
= nodefony-add-realtime-channel @nodefony/devkit
|
|
226
230
|
= nodefony-add-service @nodefony/devkit
|
|
227
231
|
= nodefony-browser @nodefony/devkit
|
|
232
|
+
= nodefony-dev @nodefony/devkit
|
|
233
|
+
= nodefony-devops @nodefony/devkit
|
|
228
234
|
= nodefony-migrate-schema @nodefony/devkit
|
|
229
235
|
= nodefony-protect-route @nodefony/devkit
|
|
230
236
|
|
|
231
|
-
0 posé(s) · 0 mis à jour ·
|
|
237
|
+
0 posé(s) · 0 mis à jour · 8 inchangé(s)
|
|
232
238
|
```
|
|
233
239
|
|
|
234
240
|
**Le préfixe `nodefony-` vous laisse la place.** Ces pointeurs arrivent dans
|
|
@@ -262,9 +268,14 @@ plus aucun paquet ne livre est **signalé, jamais supprimé** — vous avez pu e
|
|
|
262
268
|
|
|
263
269
|
## Configuration
|
|
264
270
|
|
|
265
|
-
| Clé
|
|
266
|
-
|
|
|
267
|
-
| `enabled`
|
|
271
|
+
| Clé | Type | Défaut | Rôle |
|
|
272
|
+
| -------------------- | ---------- | --------------- | ----------------------------------------------------- |
|
|
273
|
+
| `enabled` | `boolean` | `true` | Interrupteur du module |
|
|
274
|
+
| `mcp.enabled` | `boolean` | `true` | Interrupteur de la porte MCP |
|
|
275
|
+
| `mcp.allowedOrigins` | `string[]` | `[]` | Origines navigateur admises sur la porte MCP |
|
|
276
|
+
| `mcp.allowRemote` | `boolean` | `false` | Accepte un client hors de la boucle locale |
|
|
277
|
+
| `mcp.tools` | `string[]` | les sept outils | Outils exposés |
|
|
278
|
+
| `mcp.authorization` | objet | — | Autorisation OAuth de la porte (voir `docs/index.md`) |
|
|
268
279
|
|
|
269
280
|
La source unique est le schéma Zod de `nodefony/config/config.ts` : c'est lui qui
|
|
270
281
|
porte les défauts, les descriptions et la validation. Une clé inconnue ou mal
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region \0@oxc-project+runtime@0.
|
|
1
|
+
//#region \0@oxc-project+runtime@0.152.0/helpers/esm/decorate.js
|
|
2
2
|
function __decorate(decorators, target, key, desc) {
|
|
3
3
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
4
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region \0@oxc-project+runtime@0.
|
|
1
|
+
//#region \0@oxc-project+runtime@0.152.0/helpers/esm/decorateMetadata.js
|
|
2
2
|
function __decorateMetadata(k, v) {
|
|
3
3
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
4
4
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import defaults, { devkitConfigSchema } from "./nodefony/config/config.js";
|
|
2
2
|
import { defineDevkitConfig } from "./nodefony/config/defineModuleConfig.js";
|
|
3
3
|
import { buildCard } from "./nodefony/src/card.js";
|
|
4
|
-
import __decorateMetadata from "./_virtual/_@oxc-project_runtime@0.
|
|
5
|
-
import __decorate from "./_virtual/_@oxc-project_runtime@0.
|
|
4
|
+
import __decorateMetadata from "./_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
5
|
+
import __decorate from "./_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
6
6
|
import DevkitService_default from "./nodefony/service/DevkitService.js";
|
|
7
7
|
import DevkitController_default from "./nodefony/controllers/DevkitController.js";
|
|
8
8
|
import McpController_default from "./nodefony/controllers/McpController.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import __decorate from "../../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import __decorate from "../../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
3
3
|
import { Controller, controller, route } from "@nodefony/framework";
|
|
4
4
|
//#region nodefony/controllers/DevkitController.ts
|
|
5
5
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import __decorate from "../../_virtual/_@oxc-project_runtime@0.
|
|
3
|
-
import __decorateParam from "../../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import __decorate from "../../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
3
|
+
import __decorateParam from "../../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateParam.js";
|
|
4
4
|
import { ACCESS_TOKEN_VERIFIER, JsonRpcError, Nodefony, authorizeProtectedResource, checkMcpAccess, collectMcpTools, handleMcpMessage, jsonRpcFailure, mcpCallerRoles, protectedResourceMetadataUrl, readBearerHeader } from "nodefony";
|
|
5
5
|
import { Body, Controller, Headers, controller, route } from "@nodefony/framework";
|
|
6
6
|
//#region nodefony/controllers/McpController.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import defaults from "../config/config.js";
|
|
2
2
|
import { buildCard } from "../src/card.js";
|
|
3
|
-
import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.
|
|
4
|
-
import __decorate from "../../_virtual/_@oxc-project_runtime@0.
|
|
3
|
+
import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
4
|
+
import __decorate from "../../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
5
5
|
import { Module, Nodefony, Service, extend, injectable, mcpDeclaredScopes } from "nodefony";
|
|
6
6
|
//#region nodefony/service/DevkitService.ts
|
|
7
7
|
/**
|
package/docs/index.md
CHANGED
|
@@ -198,7 +198,7 @@ convient.
|
|
|
198
198
|
|
|
199
199
|
### Ajouter VOS outils — ce que l'agent ne peut pas deviner
|
|
200
200
|
|
|
201
|
-
Les
|
|
201
|
+
Les outils intégrés ci-dessus décrivent le framework. Ils ne savent rien de votre
|
|
202
202
|
métier — et c'est précisément ce qu'un agent invente le plus mal. N'importe quel
|
|
203
203
|
module de votre application peut donc en publier :
|
|
204
204
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nodefony/devkit",
|
|
3
|
-
"version": "10.0.0-beta.
|
|
3
|
+
"version": "10.0.0-beta.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Outillage de développement d'une application Nodefony : carte de visite du projet et portes de découverte pour un agent de développement",
|
|
6
6
|
"author": "Christophe CAMENSULI <ccamensuli@gmail.com>",
|
|
@@ -25,17 +25,17 @@
|
|
|
25
25
|
"coverage": "vitest run --coverage"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
|
-
"@nodefony/framework": "^10.0.0-beta.
|
|
29
|
-
"@nodefony/http": "^10.0.0-beta.
|
|
30
|
-
"nodefony": "^10.0.0-beta.
|
|
28
|
+
"@nodefony/framework": "^10.0.0-beta.2",
|
|
29
|
+
"@nodefony/http": "^10.0.0-beta.2",
|
|
30
|
+
"nodefony": "^10.0.0-beta.2",
|
|
31
31
|
"zod": "^4.6.5",
|
|
32
32
|
"playwright": "^1.50.0",
|
|
33
33
|
"lighthouse": "^13.0.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@nodefony/framework": "^10.0.0-beta.
|
|
37
|
-
"@nodefony/http": "^10.0.0-beta.
|
|
38
|
-
"nodefony": "^10.0.0-beta.
|
|
36
|
+
"@nodefony/framework": "^10.0.0-beta.2",
|
|
37
|
+
"@nodefony/http": "^10.0.0-beta.2",
|
|
38
|
+
"nodefony": "^10.0.0-beta.2"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"axe-core": "4.13.0",
|
|
@@ -240,6 +240,15 @@ npx nodefony stop <nom|chemin> # arrêter un AUTRE projet, sans change
|
|
|
240
240
|
npx nodefony production --detach --wait # boot réel en arrière-plan ; rend la main ports OUVERTS
|
|
241
241
|
```
|
|
242
242
|
|
|
243
|
+
**Déboguer** : en développement, les piles d'appels pointent vers les `.ts` de l'application (le
|
|
244
|
+
build de dev émet ses sourcemaps et le serveur les lit ; `npm run build`, lui, n'en émet pas — une
|
|
245
|
+
pile de production pointe vers `dist/`). Pour un point d'arrêt : `npm run debug` (= `nodefony debug` :
|
|
246
|
+
le mode développement, débogueur ouvert sur `127.0.0.1:9229`), puis `chrome://inspect` ou « Attach »
|
|
247
|
+
dans l'éditeur. `--inspect=<port>` change le port, `--inspect-brk` arrête avant le chargement de
|
|
248
|
+
l'application ; `nodefony development --inspect` fait la même chose. C'est le SERVEUR qui ouvre
|
|
249
|
+
l'inspecteur, et il le rouvre à chaque rechargement ; marche aussi avec `--no-watch`. ⚠️ Jamais `NODE_OPTIONS=--inspect` :
|
|
250
|
+
le premier process node de la chaîne (`npx`, `npm`) prend le port, et le serveur ne s'arrête jamais.
|
|
251
|
+
|
|
243
252
|
**Arrête ce que tu démarres.** Un serveur laissé derrière garde les ports : le run suivant échoue
|
|
244
253
|
sur une erreur qui ne parle jamais de lui (`EADDRINUSE`) — ou pire, un test interroge l'ANCIENNE
|
|
245
254
|
version du code. Et **jamais `… &`** : le processus reçoit SIGHUP et meurt ; tuer le PID du port ne
|
|
@@ -11,7 +11,7 @@ du frontal ne sort que si tu le demandes explicitement.
|
|
|
11
11
|
| ----------- | ------------------- | --------------------------------------------------------------------- | ----------------------------- |
|
|
12
12
|
| `build` | `node:24-alpine` | Installe, compile, élague les dépendances de développement | seulement son `/app` |
|
|
13
13
|
| `proxyconf` | hérite de `build` | **Dérive** la configuration nginx et rassemble les fichiers statiques | non — étage intermédiaire |
|
|
14
|
-
| `edge` | `nginx:1.
|
|
14
|
+
| `edge` | `nginx:1.30-alpine` | Le frontal, avec la configuration dérivée ci-dessus | non — cible séparée |
|
|
15
15
|
| _(final)_ | `node:24-alpine` | L'application en production | **oui** |
|
|
16
16
|
|
|
17
17
|
```bash
|