@fprad0/skill-master-mcp 0.0.10 → 0.0.12

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.
Files changed (108) hide show
  1. package/CHANGELOG.md +12 -1
  2. package/README.md +59 -10
  3. package/VERSION.md +3 -3
  4. package/bin/lib/client-config.mjs +293 -0
  5. package/bin/lib/menu-core.mjs +509 -131
  6. package/bin/lib/skill-installation.mjs +215 -0
  7. package/bin/skill-master-bootstrap-global.mjs +2 -1
  8. package/bin/skill-master-doctor.mjs +92 -32
  9. package/bin/skill-master-install-global-skills.mjs +4 -42
  10. package/bin/skill-master-install-project-skills.mjs +97 -0
  11. package/bin/skill-master-menu.mjs +91 -6
  12. package/bin/skill-master-register-clients.mjs +91 -115
  13. package/docs/operations/GUIA_MULTI_COMPUTADOR.md +262 -0
  14. package/docs/operations/GUIA_NPM_PUBLICO.md +147 -0
  15. package/docs/operations/MENU_VISUAL_EVIDENCE_2026-06-28.md +66 -0
  16. package/docs/operations/assets/menu-frame-compact.html +76 -0
  17. package/docs/operations/assets/menu-frame-compact.png +0 -0
  18. package/docs/operations/assets/menu-frame-large.html +84 -0
  19. package/docs/operations/assets/menu-frame-large.png +0 -0
  20. package/docs/operations/assets/menu-frame-running.html +80 -0
  21. package/docs/operations/assets/menu-frame-running.png +0 -0
  22. package/docs/operations/cross-platform-auth-transfer/ANALISE_COMPATIBILIDADE_MCP_2026-06-28.md +140 -0
  23. package/docs/operations/cross-platform-auth-transfer/README_TRANSFERENCIA.md +85 -0
  24. package/docs/operations/reborn-menu-cyberpunk-transfer/ANALISE_MENU_REBORN_CYBERPUNK_2026-06-28.md +174 -0
  25. package/docs/operations/reborn-menu-cyberpunk-transfer/HANDOFF_IMPLEMENTACAO_REBORN_CYBERPUNK_2026-06-28.md +119 -0
  26. package/docs/operations/reborn-menu-cyberpunk-transfer/ORDEM_DE_EXECUCAO_MENU_REBORN_CYBERPUNK.md +134 -0
  27. package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA.md +84 -0
  28. package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA_REBORN_PACKAGE.md +56 -0
  29. package/docs/operations/reborn-menu-cyberpunk-transfer/references/cyan-hud-frame-sheet.jpg +0 -0
  30. package/docs/operations/reborn-menu-cyberpunk-transfer/references/cyberpunk-pattern-sheet.jpg +0 -0
  31. package/docs/operations/reborn-menu-cyberpunk-transfer/references/fluid-workflow-windows.gif +0 -0
  32. package/docs/prompt-tasks/PROMPT_TASK_001_BOOTSTRAP_SKILL_MASTER_MCP.md +6 -0
  33. package/docs/prompt-tasks/PROMPT_TASK_002_AUTO_UPDATE_LAUNCHER.md +6 -0
  34. package/docs/prompt-tasks/PROMPT_TASK_003_REMOTE_MANIFEST_AND_RELEASES.md +6 -0
  35. package/docs/prompt-tasks/PROMPT_TASK_004_MULTI_USER_DISTRIBUTION.md +6 -0
  36. package/docs/prompt-tasks/PROMPT_TASK_005_SECURITY_AND_QUALITY_GATE.md +6 -0
  37. package/docs/prompt-tasks/PROMPT_TASK_006_MASTER_ACIONAMENTO_APRENDIZADO.md +83 -0
  38. package/docs/prompt-tasks/PROMPT_TASK_007_PERSONA_ORQUESTRADORA.md +88 -0
  39. package/docs/prompt-tasks/PROMPT_TASK_008_PROMPT_ROUTER_MODOS_ATIVACAO.md +156 -0
  40. package/docs/prompt-tasks/PROMPT_TASK_009_PIPELINE_APRENDIZADO_SUCESSO.md +105 -0
  41. package/docs/prompt-tasks/PROMPT_TASK_010_EVALS_GOVERNANCA_ATIVACAO.md +119 -0
  42. package/docs/prompt-tasks/PROMPT_TASK_011_MENU_NOTIFICACOES_NOTION.md +120 -0
  43. package/docs/prompt-tasks/PROMPT_TASK_012_MENU_CYBERPUNK_PIXEL_FRAME.md +123 -0
  44. package/docs/prompt-tasks/PROMPT_TASK_013_MENU_FLUID_DNA_ANIMATION.md +114 -0
  45. package/docs/prompt-tasks/PROMPT_TASK_014_MENU_FUNCTIONAL_PARITY_QA.md +157 -0
  46. package/docs/prompt-tasks/PROMPT_TASK_015_TRANSFER_RELEASE_HANDOFF.md +127 -0
  47. package/docs/prompt-tasks/PROMPT_TASK_016_CROSS_PLATFORM_MCP_AUTH_REGISTRATION.md +107 -0
  48. package/docs/prompt-tasks/PROMPT_TASK_018_NPM_PUBLISH_2FA_SETUP.md +80 -0
  49. package/docs/prompt-tasks/PROMPT_TASK_MASTER_EXECUTOR.md +6 -0
  50. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/SKILL.md +399 -0
  51. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/common-patterns.md +331 -0
  52. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/complete-examples.md +872 -0
  53. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/component-patterns.md +502 -0
  54. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/data-fetching.md +767 -0
  55. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/file-organization.md +502 -0
  56. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/loading-and-error-states.md +501 -0
  57. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/performance.md +406 -0
  58. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/routing-guide.md +364 -0
  59. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/styling-guide.md +428 -0
  60. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/typescript-standards.md +418 -0
  61. package/docs/skill-candidates/v0.0.11/git-version-control-ops/SKILL.md +34 -0
  62. package/docs/skill-candidates/v0.0.11/go-engineering/SKILL.md +34 -0
  63. package/docs/skill-candidates/v0.0.11/java-engineering/SKILL.md +34 -0
  64. package/docs/skill-candidates/v0.0.11/javascript-engineering/SKILL.md +34 -0
  65. package/docs/skill-candidates/v0.0.11/json-contract-design/SKILL.md +34 -0
  66. package/docs/skill-candidates/v0.0.11/multi-client-mcp-ops/SKILL.md +36 -0
  67. package/docs/skill-candidates/v0.0.11/nextjs/SKILL.md +745 -0
  68. package/docs/skill-candidates/v0.0.11/nextjs/agents/openai.yaml +3 -0
  69. package/docs/skill-candidates/v0.0.11/nextjs/references/app-router-files.md +94 -0
  70. package/docs/skill-candidates/v0.0.11/python-engineering/SKILL.md +34 -0
  71. package/docs/skill-candidates/v0.0.11/ruby-engineering/SKILL.md +34 -0
  72. package/docs/skill-candidates/v0.0.11/senior-fullstack/SKILL.md +209 -0
  73. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/architecture_patterns.md +103 -0
  74. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/development_workflows.md +103 -0
  75. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/tech_stack_guide.md +103 -0
  76. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/code_quality_analyzer.py +114 -0
  77. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/fullstack_scaffolder.py +114 -0
  78. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/project_scaffolder.py +114 -0
  79. package/docs/skill-candidates/v0.0.11/shadcn/SKILL.md +573 -0
  80. package/docs/skill-candidates/v0.0.11/shadcn/agents/openai.yaml +3 -0
  81. package/docs/skill-candidates/v0.0.11/sql-postgresql-engineering/SKILL.md +34 -0
  82. package/docs/skill-candidates/v0.0.11/terminal-shell-ops/SKILL.md +34 -0
  83. package/docs/skill-candidates/v0.0.11/typescript-expert/SKILL.md +429 -0
  84. package/docs/skill-candidates/v0.0.11/typescript-expert/references/tsconfig-strict.json +92 -0
  85. package/docs/skill-candidates/v0.0.11/typescript-expert/references/typescript-cheatsheet.md +383 -0
  86. package/docs/skill-candidates/v0.0.11/typescript-expert/references/utility-types.ts +335 -0
  87. package/docs/skill-candidates/v0.0.11/typescript-expert/scripts/ts_diagnostic.py +203 -0
  88. package/docs/skill-candidates/v0.0.11/ui-component-primitives/SKILL.md +34 -0
  89. package/docs/skill-candidates/v0.0.11/web-mobile-design-systems/SKILL.md +34 -0
  90. package/docs/skill-candidates/v0.0.11/windows-linux-platform-ops/SKILL.md +34 -0
  91. package/docs/skill-candidates/v0.0.12/csharp-senior-master-engineering/SKILL.md +32 -0
  92. package/docs/skill-candidates/v0.0.12/css-senior-master-engineering/SKILL.md +32 -0
  93. package/docs/skill-candidates/v0.0.12/go-senior-master-engineering/SKILL.md +32 -0
  94. package/docs/skill-candidates/v0.0.12/html-senior-master-engineering/SKILL.md +32 -0
  95. package/docs/skill-candidates/v0.0.12/javascript-senior-master-engineering/SKILL.md +32 -0
  96. package/docs/skill-candidates/v0.0.12/json-senior-master-engineering/SKILL.md +32 -0
  97. package/docs/skill-candidates/v0.0.12/python-senior-master-engineering/SKILL.md +32 -0
  98. package/docs/skill-candidates/v0.0.12/react-senior-master-engineering/SKILL.md +32 -0
  99. package/docs/skill-candidates/v0.0.12/ruby-senior-master-engineering/SKILL.md +32 -0
  100. package/docs/skill-candidates/v0.0.12/senior-master-code-optimizer/SKILL.md +48 -0
  101. package/docs/skill-candidates/v0.0.12/sql-senior-master-engineering/SKILL.md +31 -0
  102. package/docs/skill-candidates/v0.0.12/typescript-senior-master-engineering/SKILL.md +35 -0
  103. package/examples/client-configs/claude-code.commands.md +11 -7
  104. package/manifests/channels/beta.json +7 -7
  105. package/manifests/channels/stable.json +8 -8
  106. package/package.json +14 -2
  107. package/scripts/render-menu-evidence.mjs +130 -0
  108. package/scripts/verify-menu-actions.mjs +117 -0
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: sql-senior-master-engineering
3
+ description: "Senior master SQL engineering for schemas, queries, migrations, indexes, transactions, data integrity, performance and safety. Use when writing, reviewing, optimizing or hardening SQL, PostgreSQL, relational data access or database migrations."
4
+ ---
5
+
6
+ # SQL Senior Master Engineering
7
+
8
+ Use this skill for SQL and relational database work with production impact.
9
+
10
+ ## Workflow
11
+
12
+ - Start from the real schema, data volume, access pattern and transaction path.
13
+ - Separate read query tuning, write path cost, migration safety and data integrity concerns.
14
+ - Prefer explicit constraints, keys and reversible migrations.
15
+ - Validate with realistic samples, `EXPLAIN`, tests, migration dry-runs or smoke queries when available.
16
+
17
+ ## Optimization Rules
18
+
19
+ - Check joins, filters, sort keys, indexes, N+1 access, lock scope and transaction duration.
20
+ - Do not add indexes without explaining read benefit and write/storage cost.
21
+ - Avoid query changes that alter cardinality or null semantics without proof.
22
+
23
+ ## Security Rules
24
+
25
+ - Use parameters for untrusted values.
26
+ - Avoid dynamic SQL unless identifiers are allowlisted and quoted safely.
27
+ - Never run destructive data changes without explicit approval and rollback reasoning.
28
+
29
+ ## Completion Standard
30
+
31
+ - State expected query behavior, migration risk and validation evidence.
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: typescript-senior-master-engineering
3
+ description: "Senior master TypeScript engineering for writing, organizing, refactoring, optimizing and securing TypeScript code, types, functions, modules, APIs, CLIs, frontend or backend systems. Use with typescript-expert for type safety, build correctness, performance and maintainability."
4
+ ---
5
+
6
+ # TypeScript Senior Master Engineering
7
+
8
+ Use this skill for TypeScript code that must be clean, fast, safe and maintainable.
9
+
10
+ ## Workflow
11
+
12
+ - Read `package.json`, `tsconfig.json`, source layout, imports and existing scripts before editing.
13
+ - Preserve the project's module style, path aliases, formatting and test strategy.
14
+ - Model data with explicit types at boundaries and inference inside implementation details.
15
+ - Prefer `unknown` plus validation over `any`; use `satisfies`, discriminated unions and branded types where they reduce real bugs.
16
+ - Keep functions small enough to test and reason about, but avoid abstraction for its own sake.
17
+ - Validate with `npm run typecheck`, `npx tsc --noEmit`, tests or build according to available scripts.
18
+
19
+ ## Optimization Rules
20
+
21
+ - Remove duplicate branches, repeated parsing, repeated object creation in hot paths and avoidable async waterfalls.
22
+ - Avoid deep generic machinery unless it protects a public API or removes duplicated unsafe code.
23
+ - Use type-only imports where appropriate and keep runtime imports intentional.
24
+ - Keep API contracts stable and make breaking changes explicit.
25
+
26
+ ## Security Rules
27
+
28
+ - Validate external input at process, HTTP, CLI, file and database boundaries.
29
+ - Avoid unsafe dynamic property access, `eval`, shell interpolation and untrusted deserialization.
30
+ - Keep secrets out of logs, errors, snapshots and generated examples.
31
+
32
+ ## Completion Standard
33
+
34
+ - Summarize behavior changed, files touched, validation run and remaining risks.
35
+ - Do not claim zero bugs; report evidence.
@@ -1,17 +1,21 @@
1
1
  # Claude Code - comandos para registrar o skill_master
2
2
 
3
- ## macOS/Linux
3
+ ## npm global
4
4
 
5
5
  ```bash
6
- claude mcp add --transport stdio skill_master -- bash /home/YOU/Documents/skill-master-mcp/scripts/skill-master-launcher.sh
6
+ skill-master-register-clients --apply-claude-code --claude-code-scope user
7
7
  ```
8
8
 
9
- ## Windows
9
+ ## comando Claude Code equivalente
10
10
 
11
- ```powershell
12
- claude mcp add --transport stdio skill_master -- C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File C:\Users\YOU\Documents\skill-master-mcp\scripts\skill-master-launcher.ps1
11
+ ```bash
12
+ claude mcp add skill_master --scope user -- node /ABSOLUTE/PATH/TO/@fprad0/skill-master-mcp/bin/skill-master.mjs
13
13
  ```
14
14
 
15
- ## Observacao
15
+ ## validar
16
+
17
+ ```bash
18
+ claude mcp list
19
+ ```
16
20
 
17
- O separador `--` e importante no Claude Code. Tudo depois dele e tratado como comando do servidor MCP.
21
+ Reinicie a sessao do Claude Code depois do registro. O separador `--` e importante: tudo depois dele e tratado como comando do servidor MCP.
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "skill_master",
3
3
  "channel": "beta",
4
- "version": "00.04-beta",
5
- "semver": "0.0.10",
6
- "publishedAt": "2026-06-28T14:00:39-03:00",
4
+ "version": "00.06-beta",
5
+ "semver": "0.0.12",
6
+ "publishedAt": "PENDING_PUBLISH",
7
7
  "git": {
8
8
  "repo": "https://github.com/FPrad0/skill-master-mcp",
9
9
  "branch": "main",
10
- "commit": "f955c13"
10
+ "commit": "PENDING_RELEASE_COMMIT"
11
11
  },
12
12
  "node": {
13
13
  "minimum": "18.0.0"
@@ -19,8 +19,8 @@
19
19
  "buildCommand": "npm run build"
20
20
  },
21
21
  "changelog": [
22
- "Canal beta acompanha o bundle global ampliado e a nova apresentacao cyberpunk do menu.",
23
- "Fluxo interativo volta selecionavel apos executar acoes e retornar ao TUI.",
24
- "Doctor, bootstrap global e registro multi-cliente continuam prontos para notebooks novos."
22
+ "Canal beta acompanha o HUD Reborn completo e o DNA CYBER HELIX com pixel art mais cheio.",
23
+ "Menu e doctor continuam auditando a matriz completa de acoes e os modos robustos/legados de configuracao.",
24
+ "Bootstrap global e registro multi-cliente seguem prontos para notebooks novos."
25
25
  ]
26
26
  }
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "skill_master",
3
3
  "channel": "stable",
4
- "version": "00.04",
5
- "semver": "0.0.10",
6
- "publishedAt": "2026-06-28T14:00:39-03:00",
4
+ "version": "00.06",
5
+ "semver": "0.0.12",
6
+ "publishedAt": "PENDING_PUBLISH",
7
7
  "git": {
8
8
  "repo": "https://github.com/FPrad0/skill-master-mcp",
9
9
  "branch": "main",
10
- "commit": "f955c13"
10
+ "commit": "PENDING_RELEASE_COMMIT"
11
11
  },
12
12
  "node": {
13
13
  "minimum": "18.0.0"
@@ -19,9 +19,9 @@
19
19
  "buildCommand": "npm run build"
20
20
  },
21
21
  "changelog": [
22
- "Catalogo global embutido cresce com skills de frontend, backend, CLI, GitHub, OpenAI docs, design, idiomas, ciencia e MCP.",
23
- "Menu visual exibe totais do bundle, dominios, metadata da acao selecionada e telemetria operacional em layout cyberpunk.",
24
- "Retorno ao menu volta a aceitar selecao por teclado depois de executar uma acao.",
25
- "Doctor e bootstrap continuam validando e preparando Codex, Claude, Gemini e Antigravity para uso global."
22
+ "Menu visual ganha HUD Reborn completo com intro, confirmacao, running state e retorno estavel ao workflow.",
23
+ "DNA-CORE evolui para DNA CYBER HELIX com pixel art braille, paleta cyan/amber, halo artistico e ciclo de 36 frames suavizado.",
24
+ "Menu e doctor continuam validando a matriz completa de 22 acoes e o registro MCP robusto por Node absoluto.",
25
+ "Bootstrap global e comandos operacionais seguem seguros para atualizacao em notebooks novos."
26
26
  ]
27
27
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fprad0/skill-master-mcp",
3
- "version": "0.0.10",
3
+ "version": "0.0.12",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Personal MCP server that catalogs, recommends and reports skills with update-aware metadata.",
@@ -12,6 +12,7 @@
12
12
  "skill-master-eval-activation": "./bin/skill-master-eval-activation.mjs",
13
13
  "skill-master-bootstrap-global": "./bin/skill-master-bootstrap-global.mjs",
14
14
  "skill-master-install-global-skills": "./bin/skill-master-install-global-skills.mjs",
15
+ "skill-master-install-project-skills": "./bin/skill-master-install-project-skills.mjs",
15
16
  "skill-master-menu": "./bin/skill-master-menu.mjs",
16
17
  "skill-master-mcp": "./bin/skill-master.mjs",
17
18
  "skill-master-register-clients": "./bin/skill-master-register-clients.mjs",
@@ -25,12 +26,21 @@
25
26
  "docs/planning",
26
27
  "docs/skill-candidates",
27
28
  "docs/operations/GUIA_NPM_PRIVADO.md",
29
+ "docs/operations/GUIA_NPM_PUBLICO.md",
30
+ "docs/operations/GUIA_MULTI_COMPUTADOR.md",
31
+ "docs/operations/MENU_VISUAL_EVIDENCE_2026-06-28.md",
32
+ "docs/operations/assets",
33
+ "docs/operations/cross-platform-auth-transfer",
34
+ "docs/operations/reborn-menu-cyberpunk-transfer",
35
+ "docs/prompt-tasks",
28
36
  "manifests",
29
37
  "network",
30
38
  "README.md",
31
39
  "CHANGELOG.md",
32
40
  "VERSION.md",
33
41
  "examples/client-configs",
42
+ "scripts/render-menu-evidence.mjs",
43
+ "scripts/verify-menu-actions.mjs",
34
44
  "scripts/configure-private-registry.mjs",
35
45
  "scripts/lib",
36
46
  "sources.json"
@@ -51,10 +61,12 @@
51
61
  "build": "npm run clean && tsc -p tsconfig.json",
52
62
  "start": "node dist/index.js",
53
63
  "test": "vitest run",
64
+ "install:project-skills": "node bin/skill-master-install-project-skills.mjs --project-root . --sync-package-json",
54
65
  "setup:private-registry": "node scripts/configure-private-registry.mjs",
55
66
  "eval:activation": "npm run build && node bin/skill-master-eval-activation.mjs",
67
+ "verify:menu": "node scripts/verify-menu-actions.mjs",
56
68
  "check:manifest": "node scripts/check-manifest.mjs",
57
- "check": "npm run build && npm test && npm run check:manifest",
69
+ "check": "npm run build && npm test && npm run verify:menu && npm run check:manifest",
58
70
  "prepack": "npm run build",
59
71
  "pack:dry-run": "npm pack --dry-run",
60
72
  "publish:github": "npm publish --registry=https://npm.pkg.github.com",
@@ -0,0 +1,130 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { mkdirSync, writeFileSync } from 'node:fs';
4
+ import { dirname, join, resolve } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { buildMenuCommands, formatCyberMenuFrame, formatRunningActionFrame } from '../bin/lib/menu-core.mjs';
7
+
8
+ const here = dirname(fileURLToPath(import.meta.url));
9
+ const rootDir = resolve(here, '..');
10
+ const outputDir = join(rootDir, 'docs', 'operations', 'assets');
11
+
12
+ const commands = buildMenuCommands({
13
+ rootDir: '/tmp/skill-master',
14
+ currentFile: '/tmp/skill-master/bin/skill-master-menu.mjs',
15
+ nodeExecPath: '/usr/bin/node',
16
+ });
17
+
18
+ const baseStatus = {
19
+ packageName: '@fprad0/skill-master-mcp',
20
+ semver: '0.0.11',
21
+ manifestVersion: '00.05',
22
+ manifestSemver: '0.0.11',
23
+ versionText: '',
24
+ rootDir: '/tmp/skill-master',
25
+ pendingSuccessDrafts: 3,
26
+ studyCandidates: 8,
27
+ globalReadiness: {
28
+ ready: true,
29
+ mode: 'ready',
30
+ required: 13,
31
+ installed: Array.from({ length: 13 }, (_, index) => `skill-${index}`),
32
+ missing: [],
33
+ codex: { present: true, kind: 'global', globalCommand: true },
34
+ claude: { present: true, globalCommand: true },
35
+ gemini: { present: true, globalCommand: true },
36
+ antigravity: { present: true, globalCommand: true },
37
+ },
38
+ bundledCatalog: {
39
+ total: 54,
40
+ categories: [
41
+ { key: 'moral', label: 'moral-core', count: 10 },
42
+ { key: 'frontend', label: 'frontend-ui', count: 19 },
43
+ { key: 'backend', label: 'backend-data', count: 10 },
44
+ { key: 'ops', label: 'ops-clients', count: 12 },
45
+ { key: 'knowledge', label: 'knowledge', count: 2 },
46
+ ],
47
+ },
48
+ };
49
+
50
+ function stripAnsi(text) {
51
+ return String(text).replace(/\x1b\[[0-9;?]*[A-Za-z]/g, '');
52
+ }
53
+
54
+ function escapeHtml(text) {
55
+ return text
56
+ .replaceAll('&', '&')
57
+ .replaceAll('<', '&lt;')
58
+ .replaceAll('>', '&gt;');
59
+ }
60
+
61
+ function renderPage(title, frame) {
62
+ return `<!doctype html>
63
+ <html lang="pt-BR">
64
+ <head>
65
+ <meta charset="utf-8" />
66
+ <title>${title}</title>
67
+ <style>
68
+ :root {
69
+ color-scheme: dark;
70
+ --bg: #060606;
71
+ --panel: #0d0d0d;
72
+ --grid: rgba(255,255,255,0.06);
73
+ --line: rgba(255,255,255,0.25);
74
+ --text: #f3f3f3;
75
+ --muted: #8f949c;
76
+ }
77
+ * { box-sizing: border-box; }
78
+ body {
79
+ margin: 0;
80
+ min-height: 100vh;
81
+ background:
82
+ linear-gradient(var(--grid) 1px, transparent 1px),
83
+ linear-gradient(90deg, var(--grid) 1px, transparent 1px),
84
+ radial-gradient(circle at top, rgba(255,255,255,0.06), transparent 35%),
85
+ var(--bg);
86
+ background-size: 48px 48px, 48px 48px, auto, auto;
87
+ color: var(--text);
88
+ font-family: "Courier New", monospace;
89
+ padding: 32px;
90
+ }
91
+ .frame {
92
+ max-width: max-content;
93
+ background: linear-gradient(180deg, rgba(255,255,255,0.03), rgba(255,255,255,0.01));
94
+ border: 1px solid var(--line);
95
+ box-shadow: 0 0 0 1px rgba(255,255,255,0.04), 0 24px 64px rgba(0,0,0,0.45);
96
+ padding: 20px 24px;
97
+ white-space: pre;
98
+ line-height: 1.1;
99
+ font-size: 13px;
100
+ border-radius: 8px;
101
+ }
102
+ .title {
103
+ margin: 0 0 16px;
104
+ color: var(--muted);
105
+ letter-spacing: 0.12em;
106
+ text-transform: uppercase;
107
+ font-size: 12px;
108
+ }
109
+ </style>
110
+ </head>
111
+ <body>
112
+ <p class="title">${title}</p>
113
+ <pre class="frame">${escapeHtml(stripAnsi(frame))}</pre>
114
+ </body>
115
+ </html>`;
116
+ }
117
+
118
+ mkdirSync(outputDir, { recursive: true });
119
+
120
+ const largeFrame = formatCyberMenuFrame(baseStatus, commands, 1, 8, { columns: 120, rows: 32, useColor: false });
121
+ const compactFrame = formatCyberMenuFrame(baseStatus, commands, 20, 8, { columns: 96, rows: 24, useColor: false });
122
+ const runningFrame = formatRunningActionFrame(baseStatus, commands.find((command) => command.key === 'doctor'), 5, { columns: 120, rows: 28, useColor: false });
123
+
124
+ writeFileSync(join(outputDir, 'menu-frame-large.html'), renderPage('Menu Frame 120x32', largeFrame), 'utf8');
125
+ writeFileSync(join(outputDir, 'menu-frame-compact.html'), renderPage('Menu Frame 96x24', compactFrame), 'utf8');
126
+ writeFileSync(join(outputDir, 'menu-frame-running.html'), renderPage('Menu Running State', runningFrame), 'utf8');
127
+
128
+ console.log(join(outputDir, 'menu-frame-large.html'));
129
+ console.log(join(outputDir, 'menu-frame-compact.html'));
130
+ console.log(join(outputDir, 'menu-frame-running.html'));
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { dirname, join } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import {
6
+ buildMenuCommands,
7
+ resolveActionKey,
8
+ } from '../bin/lib/menu-core.mjs';
9
+
10
+ const here = dirname(fileURLToPath(import.meta.url));
11
+ const rootDir = dirname(here);
12
+ const currentFile = join(rootDir, 'bin', 'skill-master-menu.mjs');
13
+
14
+ const REQUIRED_ACTIONS = [
15
+ 'status',
16
+ 'doctor',
17
+ 'check',
18
+ 'build',
19
+ 'publicNpm',
20
+ 'updateGlobal',
21
+ 'privateRegistry',
22
+ 'activationStatus',
23
+ 'activationBalanced',
24
+ 'activationAlwaysOn',
25
+ 'installGlobalSkills',
26
+ 'installProjectSkills',
27
+ 'bootstrapGlobal',
28
+ 'registerClients',
29
+ 'promptRecommendation',
30
+ 'successNotifications',
31
+ 'studySkills',
32
+ 'approvalPackage',
33
+ 'markLearnedStudy',
34
+ 'rejectLearnedSkill',
35
+ 'activateLearnedLocal',
36
+ 'activateLearnedGlobal',
37
+ 'notionSummary',
38
+ ];
39
+
40
+ const CONFIRMATION_REQUIRED = [
41
+ 'updateGlobal',
42
+ 'privateRegistry',
43
+ 'activationAlwaysOn',
44
+ 'installGlobalSkills',
45
+ 'installProjectSkills',
46
+ 'bootstrapGlobal',
47
+ 'registerClients',
48
+ 'rejectLearnedSkill',
49
+ 'activateLearnedLocal',
50
+ 'activateLearnedGlobal',
51
+ ];
52
+
53
+ const READ_ONLY_ACTIONS = [
54
+ 'status',
55
+ 'doctor',
56
+ 'publicNpm',
57
+ 'activationStatus',
58
+ 'successNotifications',
59
+ 'studySkills',
60
+ 'approvalPackage',
61
+ 'notionSummary',
62
+ ];
63
+
64
+ const commands = buildMenuCommands({
65
+ rootDir,
66
+ currentFile,
67
+ nodeExecPath: process.execPath,
68
+ });
69
+
70
+ const byKey = new Map(commands.map((command) => [command.key, command]));
71
+ const failures = [];
72
+
73
+ for (const key of REQUIRED_ACTIONS) {
74
+ if (!byKey.has(key)) failures.push(`missing action: ${key}`);
75
+ }
76
+
77
+ for (const key of CONFIRMATION_REQUIRED) {
78
+ const command = byKey.get(key);
79
+ if (command && !command.confirmMessage) failures.push(`missing confirmation: ${key}`);
80
+ }
81
+
82
+ for (const command of commands) {
83
+ if (!command.command) failures.push(`missing command executable: ${command.key}`);
84
+ if (!Array.isArray(command.args)) failures.push(`args must be array: ${command.key}`);
85
+ for (const alias of command.aliases ?? []) {
86
+ if (resolveActionKey(alias, commands) !== command.key) failures.push(`alias does not resolve: ${command.key}:${alias}`);
87
+ }
88
+ }
89
+
90
+ for (const key of READ_ONLY_ACTIONS) {
91
+ const command = byKey.get(key);
92
+ if (!command) continue;
93
+ if (command.confirmMessage) failures.push(`read-only action unexpectedly asks confirmation: ${key}`);
94
+ }
95
+
96
+ console.log('Skill Master menu action verification');
97
+ console.log(`- Actions: ${commands.length}`);
98
+ console.log(`- Required actions: ${REQUIRED_ACTIONS.length}`);
99
+ console.log(`- Read-only smoke candidates: ${READ_ONLY_ACTIONS.join(', ')}`);
100
+ console.log(`- Confirmation protected: ${CONFIRMATION_REQUIRED.join(', ')}`);
101
+ console.log('');
102
+
103
+ for (const command of commands) {
104
+ const protection = command.confirmMessage ? 'confirm' : 'direct';
105
+ const disabled = command.disabledReason ? 'disabled' : 'enabled';
106
+ console.log(`- ${command.key}: ${disabled}, ${protection}, aliases=${command.aliases.join('|') || '-'}`);
107
+ }
108
+
109
+ if (failures.length) {
110
+ console.log('');
111
+ console.log('Failures:');
112
+ for (const failure of failures) console.log(`- ${failure}`);
113
+ process.exitCode = 1;
114
+ } else {
115
+ console.log('');
116
+ console.log('Menu action matrix OK.');
117
+ }