nexakit 0.0.0-stage → 0.2.0
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/.claude-plugin/marketplace.json +28 -0
- package/LICENSE +26 -0
- package/README.md +79 -2
- package/agents/claude/docs-researcher.md +9 -0
- package/agents/claude/implementation-tutor.md +9 -0
- package/agents/claude/project-explorer.md +9 -0
- package/agents/claude/quality-reviewer.md +9 -0
- package/agents/claude/requirements-analyst.md +9 -0
- package/agents/claude/solution-architect.md +9 -0
- package/agents/codex/docs-researcher.toml +10 -0
- package/agents/codex/implementation-tutor.toml +10 -0
- package/agents/codex/project-explorer.toml +10 -0
- package/agents/codex/quality-reviewer.toml +10 -0
- package/agents/codex/requirements-analyst.toml +11 -0
- package/agents/codex/solution-architect.toml +10 -0
- package/assets/brand/README.md +38 -0
- package/assets/brand/agent-toolkit-mark.png +0 -0
- package/assets/brand/agent-toolkit-mark.svg +13 -0
- package/assets/brand/agent-toolkit-tui-hero.png +0 -0
- package/assets/brand/nexakit-readme-hero.png +0 -0
- package/assets/brand/nexakit-readme-hero.svg +21 -0
- package/assets/runtime/package-lock.json +1425 -0
- package/bin/agent-task.js +14 -0
- package/bin/agent-toolkit-gemini.js +13 -0
- package/bin/agent-toolkit-inbox.js +14 -0
- package/bin/agent-toolkit-mcp.js +17 -0
- package/bin/agent-toolkit.js +13 -0
- package/bin/nexakit.js +13 -0
- package/bin/project-memory-mcp.js +22 -0
- package/bin/project-memory.js +7 -0
- package/catalogs/skills/api-design-principles/LICENSE.txt +21 -0
- package/catalogs/skills/api-design-principles/SKILL.md +110 -0
- package/catalogs/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/catalogs/skills/api-design-principles/assets/rest-api-template.py +185 -0
- package/catalogs/skills/api-design-principles/references/details.md +413 -0
- package/catalogs/skills/api-design-principles/references/graphql-schema-design.md +589 -0
- package/catalogs/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/catalogs/skills/nodejs-backend-patterns/LICENSE.txt +21 -0
- package/catalogs/skills/nodejs-backend-patterns/SKILL.md +45 -0
- package/catalogs/skills/nodejs-backend-patterns/references/advanced-patterns.md +430 -0
- package/catalogs/skills/nodejs-backend-patterns/references/details.md +599 -0
- package/catalogs/skills/supabase-postgres-best-practices/CHANGELOG.md +73 -0
- package/catalogs/skills/supabase-postgres-best-practices/LICENSE.txt +21 -0
- package/catalogs/skills/supabase-postgres-best-practices/SKILL.md +64 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/_sections.md +39 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/_template.md +34 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/catalogs/skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
- package/catalogs/skills/vercel-composition-patterns/AGENTS.md +946 -0
- package/catalogs/skills/vercel-composition-patterns/LICENSE.txt +27 -0
- package/catalogs/skills/vercel-composition-patterns/README.md +60 -0
- package/catalogs/skills/vercel-composition-patterns/SKILL.md +89 -0
- package/catalogs/skills/vercel-composition-patterns/metadata.json +11 -0
- package/catalogs/skills/vercel-composition-patterns/rules/_sections.md +29 -0
- package/catalogs/skills/vercel-composition-patterns/rules/_template.md +24 -0
- package/catalogs/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- package/catalogs/skills/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
- package/catalogs/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- package/catalogs/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
- package/catalogs/skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/catalogs/skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
- package/catalogs/skills/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
- package/catalogs/skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
- package/catalogs/skills/vercel-react-best-practices/AGENTS.md +3810 -0
- package/catalogs/skills/vercel-react-best-practices/LICENSE.txt +27 -0
- package/catalogs/skills/vercel-react-best-practices/README.md +123 -0
- package/catalogs/skills/vercel-react-best-practices/SKILL.md +149 -0
- package/catalogs/skills/vercel-react-best-practices/metadata.json +15 -0
- package/catalogs/skills/vercel-react-best-practices/rules/_sections.md +46 -0
- package/catalogs/skills/vercel-react-best-practices/rules/_template.md +28 -0
- package/catalogs/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/catalogs/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/catalogs/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/catalogs/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/catalogs/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/catalogs/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/catalogs/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- package/catalogs/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/catalogs/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/catalogs/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/catalogs/skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
- package/catalogs/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/catalogs/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/catalogs/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/catalogs/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/catalogs/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/catalogs/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/catalogs/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/catalogs/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/catalogs/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/catalogs/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/catalogs/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/catalogs/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/catalogs/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/catalogs/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/catalogs/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/catalogs/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/catalogs/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/catalogs/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/catalogs/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/catalogs/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/catalogs/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/catalogs/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/catalogs/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/catalogs/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/catalogs/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/catalogs/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/catalogs/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/catalogs/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/catalogs/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/catalogs/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/catalogs/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/catalogs/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/catalogs/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/catalogs/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/catalogs/skills/webapp-testing/LICENSE.txt +202 -0
- package/catalogs/skills/webapp-testing/SKILL.md +96 -0
- package/catalogs/skills/webapp-testing/examples/console_logging.py +35 -0
- package/catalogs/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/catalogs/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/catalogs/skills/webapp-testing/scripts/with_server.py +106 -0
- package/catalogs/skills.json +1115 -0
- package/docs/skills/evidencias/2026-10-28-evaluacion-inicial-mcp-seguridad.md +118 -0
- package/docs/skills/evidencias/2026-10-28-incorporacion-mcp-seguridad.json +152 -0
- package/docs/skills/evidencias/2026-10-28-recomendador-preparacion.md +50 -0
- package/package.json +73 -4
- package/plugins/nexakit-modelo/.claude-plugin/plugin.json +1 -0
- package/plugins/nexakit-modelo/hooks/hooks.json +1 -0
- package/plugins/nexakit-modelo/hooks/register.js +48 -0
- package/plugins/nexakit-modelo/hooks/status.js +8 -0
- package/plugins/nexakit-modelo/tests/register.test.ts +21 -0
- package/plugins/nexakit-panel/.claude-plugin/plugin.json +1 -0
- package/plugins/nexakit-panel/README.md +20 -0
- package/plugins/nexakit-panel/hooks/hooks.json +1 -0
- package/plugins/nexakit-panel/hooks/lienzo.js +382 -0
- package/plugins/nexakit-panel/hooks/panel.js +279 -0
- package/plugins/nexakit-panel/hooks/register.tsx +248 -0
- package/plugins/nexakit-panel/tests/lienzo.test.ts +142 -0
- package/plugins/nexakit-panel/tests/panel.test.ts +240 -0
- package/plugins/nexakit-panel/tests/register.test.ts +167 -0
- package/plugins/nexakit-panel/types/index.d.ts +41 -0
- package/plugins/nexakit-sesion/.claude-plugin/plugin.json +1 -0
- package/plugins/nexakit-sesion/README.md +12 -0
- package/plugins/nexakit-sesion/hooks/aviso.js +38 -0
- package/plugins/nexakit-sesion/hooks/hooks.json +1 -0
- package/plugins/nexakit-sesion/hooks/register.js +28 -0
- package/plugins/nexakit-sesion/tests/register.test.ts +96 -0
- package/plugins/niveles/.claude-plugin/plugin.json +5 -0
- package/plugins/niveles/agents/nivel-alto.md +13 -0
- package/plugins/niveles/agents/nivel-exigente.md +13 -0
- package/plugins/niveles/agents/nivel-ligero.md +13 -0
- package/plugins/niveles/agents/nivel-normal.md +13 -0
- package/schemas/agent-client-adapter.schema.json +786 -0
- package/schemas/agent-client-auth-diagnostic.schema.json +801 -0
- package/schemas/agent-client-isolated-variant.schema.json +105 -0
- package/schemas/agent-client-isolated-verification.schema.json +99 -0
- package/schemas/agent-client-managed-preferences-invocation.schema.json +67 -0
- package/schemas/agent-client-managed-preferences.schema.json +63 -0
- package/schemas/agent-client-native-diagnostics.schema.json +85 -0
- package/schemas/agent-client-native-evaluation.schema.json +171 -0
- package/schemas/agent-client-native-preflight.schema.json +90 -0
- package/schemas/agent-client-output.schema.json +551 -0
- package/schemas/agent-client-runtime-fixture.schema.json +90 -0
- package/schemas/agent-client-runtime-local.schema.json +95 -0
- package/schemas/agent-client-runtime.schema.json +1288 -0
- package/schemas/agent-client-selective-config.schema.json +77 -0
- package/schemas/agent-client-supervised-local.schema.json +135 -0
- package/schemas/agent-client-supervised.schema.json +186 -0
- package/schemas/agent-model-preference.schema.json +573 -0
- package/schemas/agent-model-selection.schema.json +311 -0
- package/schemas/agent-task-approvals.schema.json +362 -0
- package/schemas/agent-task-prepare.schema.json +1324 -0
- package/schemas/agent-task-verify.schema.json +198 -0
- package/schemas/project-memory-update.schema.json +33 -0
- package/schemas/project-memory.schema.json +298 -0
- package/schemas/skill-catalog.schema.json +246 -0
- package/schemas/task-workflow-plan-output.schema.json +35 -0
- package/scripts/prepare-package.js +6 -0
- package/scripts/validate-skill-catalog.js +41 -0
- package/skills/cerrar-avisens/SKILL.md +12 -0
- package/skills/cerrar-memoria/SKILL.md +96 -0
- package/skills/cerrar-memoria/references/cierre.md +76 -0
- package/skills/decision-records/SKILL.md +27 -0
- package/skills/decision-records/agents/openai.yaml +7 -0
- package/skills/decision-records/references/adr-template.md +35 -0
- package/skills/differential-review/LICENSE.txt +427 -0
- package/skills/differential-review/SKILL.md +225 -0
- package/skills/differential-review/adversarial.md +203 -0
- package/skills/differential-review/agents/openai.yaml +6 -0
- package/skills/differential-review/assets/trail-of-bits-mark.svg +1 -0
- package/skills/differential-review/methodology.md +234 -0
- package/skills/differential-review/patterns.md +300 -0
- package/skills/differential-review/reporting.md +369 -0
- package/skills/elegir-modelo/SKILL.md +68 -0
- package/skills/elegir-modelo/modelos.mjs +108 -0
- package/skills/frontend-design/LICENSE.txt +177 -0
- package/skills/frontend-design/SKILL.md +71 -0
- package/skills/gemini/SKILL.md +52 -0
- package/skills/imagen/SKILL.md +12 -0
- package/skills/investigar/SKILL.md +11 -0
- package/skills/mcp-builder/LICENSE.txt +202 -0
- package/skills/mcp-builder/SKILL.md +236 -0
- package/skills/mcp-builder/reference/evaluation.md +602 -0
- package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/skills/mcp-builder/scripts/connections.py +151 -0
- package/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/skills/ordenar-proyecto/SKILL.md +56 -0
- package/skills/project-handoff/SKILL.md +53 -0
- package/skills/project-handoff/agents/openai.yaml +7 -0
- package/skills/project-handoff/references/handoff-template.md +35 -0
- package/skills/quality-gate/LICENSE.txt +26 -0
- package/skills/quality-gate/SKILL.md +44 -0
- package/skills/quality-gate/agents/openai.yaml +7 -0
- package/skills/quality-gate/references/review-checklist.md +42 -0
- package/skills/revisar/SKILL.md +11 -0
- package/skills/revisar-skill/LICENSE-find-skills.txt +26 -0
- package/skills/revisar-skill/SKILL.md +94 -0
- package/skills/revision-cruzada/SKILL.md +59 -0
- package/skills/web-design-guidelines/AGENTS.md +156 -0
- package/skills/web-design-guidelines/LICENSE.txt +21 -0
- package/skills/web-design-guidelines/SKILL.md +29 -0
- package/src/agent-models.js +131 -0
- package/src/brand.js +117 -0
- package/src/claude-code-runner.js +642 -0
- package/src/cli-executable.js +88 -0
- package/src/cli.js +778 -0
- package/src/client-adapter-plan.js +271 -0
- package/src/client-auth-diagnostic-parser.js +211 -0
- package/src/client-auth-diagnostic.js +257 -0
- package/src/client-isolated-variant.js +106 -0
- package/src/client-isolated-verification.js +130 -0
- package/src/client-local-platform.js +14 -0
- package/src/client-managed-preferences-invocation.js +209 -0
- package/src/client-managed-preferences.js +78 -0
- package/src/client-native-access.js +134 -0
- package/src/client-native-diagnostics.js +253 -0
- package/src/client-native-evaluation.js +106 -0
- package/src/client-native-preflight-files.js +68 -0
- package/src/client-native-preflight.js +95 -0
- package/src/client-output-json.js +118 -0
- package/src/client-output-parser.js +278 -0
- package/src/client-runtime-admission.js +80 -0
- package/src/client-runtime-coordinator.js +70 -0
- package/src/client-runtime-core.js +92 -0
- package/src/client-runtime-fixture-permit.js +20 -0
- package/src/client-runtime-fixture-protocol.js +39 -0
- package/src/client-runtime-state.js +67 -0
- package/src/client-runtime-store-files.js +91 -0
- package/src/client-runtime-store.js +239 -0
- package/src/client-runtime-supervisor.js +146 -0
- package/src/client-selective-config.js +195 -0
- package/src/client-selective-files.js +126 -0
- package/src/client-supervised-codes.js +32 -0
- package/src/client-supervised-contract.js +52 -0
- package/src/client-supervised-coordinator.js +36 -0
- package/src/client-supervised-permit.js +20 -0
- package/src/client-supervised-protocol.js +37 -0
- package/src/client-supervised-store.js +167 -0
- package/src/client-supervised-supervisor.js +167 -0
- package/src/client-supervised.js +160 -0
- package/src/codex-cli-runner.js +358 -0
- package/src/codex-delivery.js +101 -0
- package/src/connect.js +703 -0
- package/src/doctor.js +795 -0
- package/src/gemini-cli.js +76 -0
- package/src/gemini-files.js +45 -0
- package/src/gemini-tools.js +249 -0
- package/src/init.js +473 -0
- package/src/install-lock.js +127 -0
- package/src/install-registry.js +61 -0
- package/src/legacy-repair.js +71 -0
- package/src/level-agents.js +111 -0
- package/src/link-states.js +172 -0
- package/src/memory-connection-artifacts.js +192 -0
- package/src/memory-connection-descriptor.js +158 -0
- package/src/memory-connection-diagnostic.js +177 -0
- package/src/memory-connection-files.js +191 -0
- package/src/memory-connection-manifest.js +118 -0
- package/src/memory-connection-package.js +176 -0
- package/src/memory-connection-plan.js +211 -0
- package/src/memory-connection-skill.js +211 -0
- package/src/memory-connection-toml.js +153 -0
- package/src/memory-locator.js +118 -0
- package/src/memory-mcp-policy.js +181 -0
- package/src/memory-mcp-server.js +166 -0
- package/src/memory-mcp-transport.js +59 -0
- package/src/missing-dependencies.js +21 -0
- package/src/model-command.js +147 -0
- package/src/model-preference.js +235 -0
- package/src/model-selection.js +368 -0
- package/src/native/managed-preferences.c +100 -0
- package/src/native/managed-preferences.h +17 -0
- package/src/package-lock-path.js +13 -0
- package/src/panel-cli.js +182 -0
- package/src/peer-handoff.js +27 -0
- package/src/peer-inbox-cli.js +211 -0
- package/src/peer-review-mcp.js +210 -0
- package/src/peer-review-store.js +532 -0
- package/src/platform.js +24 -0
- package/src/project-root.js +41 -0
- package/src/project-signals.js +339 -0
- package/src/recommend-report.js +77 -0
- package/src/review-instructions.js +211 -0
- package/src/review-policy.js +35 -0
- package/src/revision-adapters.js +157 -0
- package/src/revision-context.js +86 -0
- package/src/revision-isolation.js +222 -0
- package/src/revision-process.js +103 -0
- package/src/revision-provenance.js +89 -0
- package/src/revision-snapshot.js +120 -0
- package/src/revision.js +242 -0
- package/src/runtime-fixtures/runtime-supervisor/child.cjs +3 -0
- package/src/runtime-fixtures/runtime-supervisor/fixture.cjs +49 -0
- package/src/runtime-fixtures/supervised/child.cjs +3 -0
- package/src/runtime-fixtures/supervised/fixture.cjs +47 -0
- package/src/sensitive-data.js +21 -0
- package/src/setup-apply.js +231 -0
- package/src/setup-plan.js +231 -0
- package/src/setup-state.js +277 -0
- package/src/setup-tui.js +555 -0
- package/src/skill-catalog-add.js +91 -0
- package/src/skill-catalog-audit.js +68 -0
- package/src/skill-catalog.js +170 -0
- package/src/skill-files.js +39 -0
- package/src/skill-recommendations.js +1673 -0
- package/src/skill-scan-report.js +14 -0
- package/src/skill-scan.js +178 -0
- package/src/stable-command.js +53 -0
- package/src/stable-install.js +222 -0
- package/src/status.js +200 -0
- package/src/superpowers.js +133 -0
- package/src/sync-apply.js +227 -0
- package/src/sync-files.js +109 -0
- package/src/sync-inspect.js +394 -0
- package/src/sync-ledger.js +94 -0
- package/src/sync-markdown.js +151 -0
- package/src/sync-proposal.js +84 -0
- package/src/sync-record.js +459 -0
- package/src/sync.js +360 -0
- package/src/task-approvals.js +367 -0
- package/src/task-cli.js +79 -0
- package/src/task-external-verifier.js +584 -0
- package/src/task-prepare-files.js +115 -0
- package/src/task-prepare.js +180 -0
- package/src/task-verify-cli.js +67 -0
- package/src/task-verify-files.js +188 -0
- package/src/task-verify.js +118 -0
- package/src/task-workflow-mcp.js +544 -0
- package/src/task-workflow-store.js +254 -0
- package/src/terminal-text.js +68 -0
- package/src/toolkit-cli.js +543 -0
- package/src/toolkit-commands-guide.js +107 -0
- package/src/toolkit-setup.js +614 -0
- package/src/usage-metrics.js +43 -0
- package/templates/agent-team/01-encargo.md +158 -0
- package/templates/agent-team/02-propuesta.md +132 -0
- package/templates/agent-team/03-revision.md +150 -0
- package/templates/agent-team/README.md +213 -0
- package/templates/model-inventory/01-inventario.md +154 -0
- package/templates/model-inventory/README.md +115 -0
- package/templates/project-memory/README.md +67 -0
- package/templates/project-memory/project-memory.example.json +53 -0
- package/templates/project-memory/skill/project-id/SKILL.md +37 -0
- package/templates/project-memory/skill/project-id/references/project-profile.md +44 -0
- package/templates/project-memory/vault/00-INICIO/Estado actual.md +44 -0
- package/templates/project-memory/vault/00-INICIO/Fuentes de verdad.md +30 -0
- package/templates/project-memory/vault/00-INICIO/Inicio del proyecto.md +44 -0
- package/templates/project-memory/vault/00-INICIO/Mantenimiento de la memoria.md +26 -0
- package/templates/project-memory/vault/00-INICIO/Mapa de la memoria.md +33 -0
- package/templates/project-memory/vault/00-INICIO/Registro de sincronizaci/303/263n.md" +28 -0
- package/templates/project-memory/vault/01-PRODUCTO/Producto.md +16 -0
- package/templates/project-memory/vault/02-ARQUITECTURA/Arquitectura.md +16 -0
- package/templates/project-memory/vault/03-IMPLEMENTACION/Implementaci/303/263n.md +15 -0
- package/templates/project-memory/vault/04-DECISIONES/Decisiones.md +19 -0
- package/templates/project-memory/vault/05-ENTREGAS/Entregas.md +12 -0
- package/templates/project-memory/vault/06-OPERACION/Operaci/303/263n.md +15 -0
- package/templates/project-memory/vault/07-AGENTES/Protocolo de agentes.md +33 -0
- package/templates/project-memory/vault/08-RECURSOS/Recursos.md +12 -0
- package/templates/project-memory/vault/09-ARCHIVO/README.md +5 -0
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
# REST API Best Practices
|
|
2
|
+
|
|
3
|
+
## URL Structure
|
|
4
|
+
|
|
5
|
+
### Resource Naming
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
# Good - Plural nouns
|
|
9
|
+
GET /api/users
|
|
10
|
+
GET /api/orders
|
|
11
|
+
GET /api/products
|
|
12
|
+
|
|
13
|
+
# Bad - Verbs or mixed conventions
|
|
14
|
+
GET /api/getUser
|
|
15
|
+
GET /api/user (inconsistent singular)
|
|
16
|
+
POST /api/createOrder
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Nested Resources
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
# Shallow nesting (preferred)
|
|
23
|
+
GET /api/users/{id}/orders
|
|
24
|
+
GET /api/orders/{id}
|
|
25
|
+
|
|
26
|
+
# Deep nesting (avoid)
|
|
27
|
+
GET /api/users/{id}/orders/{orderId}/items/{itemId}/reviews
|
|
28
|
+
# Better:
|
|
29
|
+
GET /api/order-items/{id}/reviews
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## HTTP Methods and Status Codes
|
|
33
|
+
|
|
34
|
+
### GET - Retrieve Resources
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
GET /api/users → 200 OK (with list)
|
|
38
|
+
GET /api/users/{id} → 200 OK or 404 Not Found
|
|
39
|
+
GET /api/users?page=2 → 200 OK (paginated)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### POST - Create Resources
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
POST /api/users
|
|
46
|
+
Body: {"name": "John", "email": "john@example.com"}
|
|
47
|
+
→ 201 Created
|
|
48
|
+
Location: /api/users/123
|
|
49
|
+
Body: {"id": "123", "name": "John", ...}
|
|
50
|
+
|
|
51
|
+
POST /api/users (validation error)
|
|
52
|
+
→ 422 Unprocessable Entity
|
|
53
|
+
Body: {"errors": [...]}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### PUT - Replace Resources
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
PUT /api/users/{id}
|
|
60
|
+
Body: {complete user object}
|
|
61
|
+
→ 200 OK (updated)
|
|
62
|
+
→ 404 Not Found (doesn't exist)
|
|
63
|
+
|
|
64
|
+
# Must include ALL fields
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### PATCH - Partial Update
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
PATCH /api/users/{id}
|
|
71
|
+
Body: {"name": "Jane"} (only changed fields)
|
|
72
|
+
→ 200 OK
|
|
73
|
+
→ 404 Not Found
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### DELETE - Remove Resources
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
DELETE /api/users/{id}
|
|
80
|
+
→ 204 No Content (deleted)
|
|
81
|
+
→ 404 Not Found
|
|
82
|
+
→ 409 Conflict (can't delete due to references)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Filtering, Sorting, and Searching
|
|
86
|
+
|
|
87
|
+
### Query Parameters
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
# Filtering
|
|
91
|
+
GET /api/users?status=active
|
|
92
|
+
GET /api/users?role=admin&status=active
|
|
93
|
+
|
|
94
|
+
# Sorting
|
|
95
|
+
GET /api/users?sort=created_at
|
|
96
|
+
GET /api/users?sort=-created_at (descending)
|
|
97
|
+
GET /api/users?sort=name,created_at
|
|
98
|
+
|
|
99
|
+
# Searching
|
|
100
|
+
GET /api/users?search=john
|
|
101
|
+
GET /api/users?q=john
|
|
102
|
+
|
|
103
|
+
# Field selection (sparse fieldsets)
|
|
104
|
+
GET /api/users?fields=id,name,email
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Pagination Patterns
|
|
108
|
+
|
|
109
|
+
### Offset-Based Pagination
|
|
110
|
+
|
|
111
|
+
```python
|
|
112
|
+
GET /api/users?page=2&page_size=20
|
|
113
|
+
|
|
114
|
+
Response:
|
|
115
|
+
{
|
|
116
|
+
"items": [...],
|
|
117
|
+
"page": 2,
|
|
118
|
+
"page_size": 20,
|
|
119
|
+
"total": 150,
|
|
120
|
+
"pages": 8
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Cursor-Based Pagination (for large datasets)
|
|
125
|
+
|
|
126
|
+
```python
|
|
127
|
+
GET /api/users?limit=20&cursor=eyJpZCI6MTIzfQ
|
|
128
|
+
|
|
129
|
+
Response:
|
|
130
|
+
{
|
|
131
|
+
"items": [...],
|
|
132
|
+
"next_cursor": "eyJpZCI6MTQzfQ",
|
|
133
|
+
"has_more": true
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Link Header Pagination (RESTful)
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
GET /api/users?page=2
|
|
141
|
+
|
|
142
|
+
Response Headers:
|
|
143
|
+
Link: <https://api.example.com/users?page=3>; rel="next",
|
|
144
|
+
<https://api.example.com/users?page=1>; rel="prev",
|
|
145
|
+
<https://api.example.com/users?page=1>; rel="first",
|
|
146
|
+
<https://api.example.com/users?page=8>; rel="last"
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Versioning Strategies
|
|
150
|
+
|
|
151
|
+
### URL Versioning (Recommended)
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
/api/v1/users
|
|
155
|
+
/api/v2/users
|
|
156
|
+
|
|
157
|
+
Pros: Clear, easy to route
|
|
158
|
+
Cons: Multiple URLs for same resource
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Header Versioning
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
GET /api/users
|
|
165
|
+
Accept: application/vnd.api+json; version=2
|
|
166
|
+
|
|
167
|
+
Pros: Clean URLs
|
|
168
|
+
Cons: Less visible, harder to test
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Query Parameter
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
GET /api/users?version=2
|
|
175
|
+
|
|
176
|
+
Pros: Easy to test
|
|
177
|
+
Cons: Optional parameter can be forgotten
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Rate Limiting
|
|
181
|
+
|
|
182
|
+
### Headers
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
X-RateLimit-Limit: 1000
|
|
186
|
+
X-RateLimit-Remaining: 742
|
|
187
|
+
X-RateLimit-Reset: 1640000000
|
|
188
|
+
|
|
189
|
+
Response when limited:
|
|
190
|
+
429 Too Many Requests
|
|
191
|
+
Retry-After: 3600
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Implementation Pattern
|
|
195
|
+
|
|
196
|
+
```python
|
|
197
|
+
from fastapi import HTTPException, Request
|
|
198
|
+
from datetime import datetime, timedelta
|
|
199
|
+
|
|
200
|
+
class RateLimiter:
|
|
201
|
+
def __init__(self, calls: int, period: int):
|
|
202
|
+
self.calls = calls
|
|
203
|
+
self.period = period
|
|
204
|
+
self.cache = {}
|
|
205
|
+
|
|
206
|
+
def check(self, key: str) -> bool:
|
|
207
|
+
now = datetime.now()
|
|
208
|
+
if key not in self.cache:
|
|
209
|
+
self.cache[key] = []
|
|
210
|
+
|
|
211
|
+
# Remove old requests
|
|
212
|
+
self.cache[key] = [
|
|
213
|
+
ts for ts in self.cache[key]
|
|
214
|
+
if now - ts < timedelta(seconds=self.period)
|
|
215
|
+
]
|
|
216
|
+
|
|
217
|
+
if len(self.cache[key]) >= self.calls:
|
|
218
|
+
return False
|
|
219
|
+
|
|
220
|
+
self.cache[key].append(now)
|
|
221
|
+
return True
|
|
222
|
+
|
|
223
|
+
limiter = RateLimiter(calls=100, period=60)
|
|
224
|
+
|
|
225
|
+
@app.get("/api/users")
|
|
226
|
+
async def get_users(request: Request):
|
|
227
|
+
if not limiter.check(request.client.host):
|
|
228
|
+
raise HTTPException(
|
|
229
|
+
status_code=429,
|
|
230
|
+
headers={"Retry-After": "60"}
|
|
231
|
+
)
|
|
232
|
+
return {"users": [...]}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Authentication and Authorization
|
|
236
|
+
|
|
237
|
+
### Bearer Token
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
|
|
241
|
+
|
|
242
|
+
401 Unauthorized - Missing/invalid token
|
|
243
|
+
403 Forbidden - Valid token, insufficient permissions
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### API Keys
|
|
247
|
+
|
|
248
|
+
```
|
|
249
|
+
X-API-Key: your-api-key-here
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## Error Response Format
|
|
253
|
+
|
|
254
|
+
### Consistent Structure
|
|
255
|
+
|
|
256
|
+
```json
|
|
257
|
+
{
|
|
258
|
+
"error": {
|
|
259
|
+
"code": "VALIDATION_ERROR",
|
|
260
|
+
"message": "Request validation failed",
|
|
261
|
+
"details": [
|
|
262
|
+
{
|
|
263
|
+
"field": "email",
|
|
264
|
+
"message": "Invalid email format",
|
|
265
|
+
"value": "not-an-email"
|
|
266
|
+
}
|
|
267
|
+
],
|
|
268
|
+
"timestamp": "2025-10-16T12:00:00Z",
|
|
269
|
+
"path": "/api/users"
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Status Code Guidelines
|
|
275
|
+
|
|
276
|
+
- `200 OK`: Successful GET, PATCH, PUT
|
|
277
|
+
- `201 Created`: Successful POST
|
|
278
|
+
- `204 No Content`: Successful DELETE
|
|
279
|
+
- `400 Bad Request`: Malformed request
|
|
280
|
+
- `401 Unauthorized`: Authentication required
|
|
281
|
+
- `403 Forbidden`: Authenticated but not authorized
|
|
282
|
+
- `404 Not Found`: Resource doesn't exist
|
|
283
|
+
- `409 Conflict`: State conflict (duplicate email, etc.)
|
|
284
|
+
- `422 Unprocessable Entity`: Validation errors
|
|
285
|
+
- `429 Too Many Requests`: Rate limited
|
|
286
|
+
- `500 Internal Server Error`: Server error
|
|
287
|
+
- `503 Service Unavailable`: Temporary downtime
|
|
288
|
+
|
|
289
|
+
## Caching
|
|
290
|
+
|
|
291
|
+
### Cache Headers
|
|
292
|
+
|
|
293
|
+
```
|
|
294
|
+
# Client caching
|
|
295
|
+
Cache-Control: public, max-age=3600
|
|
296
|
+
|
|
297
|
+
# No caching
|
|
298
|
+
Cache-Control: no-cache, no-store, must-revalidate
|
|
299
|
+
|
|
300
|
+
# Conditional requests
|
|
301
|
+
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
|
|
302
|
+
If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
|
|
303
|
+
→ 304 Not Modified
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
## Bulk Operations
|
|
307
|
+
|
|
308
|
+
### Batch Endpoints
|
|
309
|
+
|
|
310
|
+
```python
|
|
311
|
+
POST /api/users/batch
|
|
312
|
+
{
|
|
313
|
+
"items": [
|
|
314
|
+
{"name": "User1", "email": "user1@example.com"},
|
|
315
|
+
{"name": "User2", "email": "user2@example.com"}
|
|
316
|
+
]
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
Response:
|
|
320
|
+
{
|
|
321
|
+
"results": [
|
|
322
|
+
{"id": "1", "status": "created"},
|
|
323
|
+
{"id": null, "status": "failed", "error": "Email already exists"}
|
|
324
|
+
]
|
|
325
|
+
}
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
## Idempotency
|
|
329
|
+
|
|
330
|
+
### Idempotency Keys
|
|
331
|
+
|
|
332
|
+
```
|
|
333
|
+
POST /api/orders
|
|
334
|
+
Idempotency-Key: unique-key-123
|
|
335
|
+
|
|
336
|
+
If duplicate request:
|
|
337
|
+
→ 200 OK (return cached response)
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
## CORS Configuration
|
|
341
|
+
|
|
342
|
+
```python
|
|
343
|
+
from fastapi.middleware.cors import CORSMiddleware
|
|
344
|
+
|
|
345
|
+
app.add_middleware(
|
|
346
|
+
CORSMiddleware,
|
|
347
|
+
allow_origins=["https://example.com"],
|
|
348
|
+
allow_credentials=True,
|
|
349
|
+
allow_methods=["*"],
|
|
350
|
+
allow_headers=["*"],
|
|
351
|
+
)
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
## Documentation with OpenAPI
|
|
355
|
+
|
|
356
|
+
```python
|
|
357
|
+
from fastapi import FastAPI
|
|
358
|
+
|
|
359
|
+
app = FastAPI(
|
|
360
|
+
title="My API",
|
|
361
|
+
description="API for managing users",
|
|
362
|
+
version="1.0.0",
|
|
363
|
+
docs_url="/docs",
|
|
364
|
+
redoc_url="/redoc"
|
|
365
|
+
)
|
|
366
|
+
|
|
367
|
+
@app.get(
|
|
368
|
+
"/api/users/{user_id}",
|
|
369
|
+
summary="Get user by ID",
|
|
370
|
+
response_description="User details",
|
|
371
|
+
tags=["Users"]
|
|
372
|
+
)
|
|
373
|
+
async def get_user(
|
|
374
|
+
user_id: str = Path(..., description="The user ID")
|
|
375
|
+
):
|
|
376
|
+
"""
|
|
377
|
+
Retrieve user by ID.
|
|
378
|
+
|
|
379
|
+
Returns full user profile including:
|
|
380
|
+
- Basic information
|
|
381
|
+
- Contact details
|
|
382
|
+
- Account status
|
|
383
|
+
"""
|
|
384
|
+
pass
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
## Health and Monitoring Endpoints
|
|
388
|
+
|
|
389
|
+
```python
|
|
390
|
+
@app.get("/health")
|
|
391
|
+
async def health_check():
|
|
392
|
+
return {
|
|
393
|
+
"status": "healthy",
|
|
394
|
+
"version": "1.0.0",
|
|
395
|
+
"timestamp": datetime.now().isoformat()
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
@app.get("/health/detailed")
|
|
399
|
+
async def detailed_health():
|
|
400
|
+
return {
|
|
401
|
+
"status": "healthy",
|
|
402
|
+
"checks": {
|
|
403
|
+
"database": await check_database(),
|
|
404
|
+
"redis": await check_redis(),
|
|
405
|
+
"external_api": await check_external_api()
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
```
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Seth Hobson
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: nodejs-backend-patterns
|
|
3
|
+
description: Build production-ready Node.js backend services with Express/Fastify, implementing middleware patterns, error handling, authentication, database integration, and API design best practices. Use when creating Node.js servers, REST APIs, GraphQL backends, or microservices architectures.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Node.js Backend Patterns
|
|
7
|
+
|
|
8
|
+
Comprehensive guidance for building scalable, maintainable, and production-ready Node.js backend applications with modern frameworks, architectural patterns, and best practices.
|
|
9
|
+
|
|
10
|
+
## When to Use This Skill
|
|
11
|
+
|
|
12
|
+
- Building REST APIs or GraphQL servers
|
|
13
|
+
- Creating microservices with Node.js
|
|
14
|
+
- Implementing authentication and authorization
|
|
15
|
+
- Designing scalable backend architectures
|
|
16
|
+
- Setting up middleware and error handling
|
|
17
|
+
- Integrating databases (SQL and NoSQL)
|
|
18
|
+
- Building real-time applications with WebSockets
|
|
19
|
+
- Implementing background job processing
|
|
20
|
+
|
|
21
|
+
## Detailed patterns and worked examples
|
|
22
|
+
|
|
23
|
+
Detailed pattern documentation lives in `references/details.md`. Read that file when the navigation tier above is insufficient.
|
|
24
|
+
|
|
25
|
+
## Best Practices
|
|
26
|
+
|
|
27
|
+
1. **Use TypeScript**: Type safety prevents runtime errors
|
|
28
|
+
2. **Implement proper error handling**: Use custom error classes
|
|
29
|
+
3. **Validate input**: Use libraries like Zod or Joi
|
|
30
|
+
4. **Use environment variables**: Never hardcode secrets
|
|
31
|
+
5. **Implement logging**: Use structured logging (Pino, Winston)
|
|
32
|
+
6. **Add rate limiting**: Prevent abuse
|
|
33
|
+
7. **Use HTTPS**: Always in production
|
|
34
|
+
8. **Implement CORS properly**: Don't use `*` in production
|
|
35
|
+
9. **Use dependency injection**: Easier testing and maintenance
|
|
36
|
+
10. **Write tests**: Unit, integration, and E2E tests
|
|
37
|
+
11. **Handle graceful shutdown**: Clean up resources
|
|
38
|
+
12. **Use connection pooling**: For databases
|
|
39
|
+
13. **Implement health checks**: For monitoring
|
|
40
|
+
14. **Use compression**: Reduce response size
|
|
41
|
+
15. **Monitor performance**: Use APM tools
|
|
42
|
+
|
|
43
|
+
## Testing Patterns
|
|
44
|
+
|
|
45
|
+
See `javascript-testing-patterns` skill for comprehensive testing guidance.
|