@fprad0/skill-master-mcp 1.0.0 → 1.0.1
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/CHANGELOG.md +9 -3
- package/README.md +2 -2
- package/VERSION.md +4 -4
- package/bin/lib/client-config.mjs +11 -9
- package/bin/lib/menu-core.mjs +241 -70
- package/bin/skill-master-activation.mjs +3 -1
- package/bin/skill-master-menu.mjs +127 -17
- package/bin/skill-master-success-skills.mjs +52 -2
- package/docs/operations/assets/menu-frame-compact.html +78 -75
- package/docs/operations/assets/menu-frame-dna-hero.html +87 -0
- package/docs/operations/assets/menu-frame-fine-helix.html +89 -0
- package/docs/operations/assets/menu-frame-large.html +86 -83
- package/docs/operations/assets/menu-frame-running.html +82 -79
- package/docs/operations/assets/menu-frame-score-10-contact-sheet.html +184 -0
- package/docs/planning/mcp-1.0.0/00_RESUMO_EXECUTIVO_AUDITORIA_MENU.md +118 -0
- package/docs/planning/mcp-1.0.0/01_MATRIZ_TESTES_MENU_E_RESULTADOS.md +250 -0
- package/docs/planning/mcp-1.0.0/02_PLANO_CORRECAO_ATIVAR_SKILL_APRENDIDA.md +200 -0
- package/docs/planning/mcp-1.0.0/03_PLANO_COMPATIBILIDADE_WINDOWS_LINUX_MACOS.md +167 -0
- package/docs/planning/mcp-1.0.0/04_PLANO_UI_CYBERPUNK_PIXEL_ART_E_PERFORMANCE.md +165 -0
- package/docs/planning/mcp-1.0.0/05_PROMPT_TASK_EXECUCAO_CORRECOES.md +151 -0
- package/docs/planning/mcp-1.0.0/06_CHECKLIST_REGRESSAO_PRE_RELEASE.md +159 -0
- package/docs/planning/mcp-1.0.0/07_RELATORIO_APLICACAO_CORRECOES_MENU_SKILL_MASTER.md +136 -0
- package/docs/planning/mcp-1.0.0/08_AUDITORIA_CRITICA_MENU_NOTA_E_DNA_REFINADO.md +184 -0
- package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/00_PROMPT_TASK_MASTER_NOTA_10_10.md +103 -0
- package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/01_PROMPT_TASK_FINE_HELIX_DNA.md +116 -0
- package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/02_PROMPT_TASK_DNA_HERO_BOOT_AND_MOTION.md +109 -0
- package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/03_PROMPT_TASK_MENU_UX_HELP_ERROR_COPY.md +99 -0
- package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/04_PROMPT_TASK_EVIDENCE_RENDERER_1_0_0.md +97 -0
- package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/05_PROMPT_TASK_CROSS_PLATFORM_UTF8_MOJIBAKE.md +99 -0
- package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/06_PROMPT_TASK_VISUAL_REGRESSION_QA.md +105 -0
- package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/07_PROMPT_TASK_PRE_RELEASE_SCORE_GATE_10_10.md +104 -0
- package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/README_ORDEM_EXECUCAO_NOTA_10_10.md +77 -0
- package/manifests/channels/beta.json +7 -7
- package/manifests/channels/stable.json +8 -8
- package/package.json +16 -14
- package/scripts/render-menu-evidence.mjs +115 -49
- package/scripts/verify-menu-actions.mjs +13 -8
- package/scripts/verify-menu-visual.mjs +90 -0
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
formatRunningActionFrame,
|
|
14
14
|
formatResultMessage,
|
|
15
15
|
formatSkillMasterIntroFrame,
|
|
16
|
+
formatSkillMasterDnaHeroFrame,
|
|
16
17
|
formatStatusReport,
|
|
17
18
|
getMenuStatus,
|
|
18
19
|
isInteractiveTerminal,
|
|
@@ -42,9 +43,16 @@ const CONTROL = {
|
|
|
42
43
|
function parseArgs(argv) {
|
|
43
44
|
const parsed = {
|
|
44
45
|
help: false,
|
|
46
|
+
manifest: null,
|
|
47
|
+
overwrite: false,
|
|
48
|
+
prompt: null,
|
|
45
49
|
status: false,
|
|
46
50
|
yes: false,
|
|
47
51
|
run: null,
|
|
52
|
+
prompt: null,
|
|
53
|
+
manifest: null,
|
|
54
|
+
list: false,
|
|
55
|
+
overwrite: false,
|
|
48
56
|
};
|
|
49
57
|
|
|
50
58
|
for (let i = 0; i < argv.length; i += 1) {
|
|
@@ -57,9 +65,21 @@ function parseArgs(argv) {
|
|
|
57
65
|
case '--status':
|
|
58
66
|
parsed.status = true;
|
|
59
67
|
break;
|
|
60
|
-
case '--yes':
|
|
61
|
-
parsed.yes = true;
|
|
62
|
-
break;
|
|
68
|
+
case '--yes':
|
|
69
|
+
parsed.yes = true;
|
|
70
|
+
break;
|
|
71
|
+
case '--prompt':
|
|
72
|
+
parsed.prompt = argv[++i] ?? null;
|
|
73
|
+
break;
|
|
74
|
+
case '--manifest':
|
|
75
|
+
parsed.manifest = argv[++i] ?? null;
|
|
76
|
+
break;
|
|
77
|
+
case '--list':
|
|
78
|
+
parsed.list = true;
|
|
79
|
+
break;
|
|
80
|
+
case '--overwrite':
|
|
81
|
+
parsed.overwrite = true;
|
|
82
|
+
break;
|
|
63
83
|
case '--run':
|
|
64
84
|
parsed.run = argv[++i] ?? null;
|
|
65
85
|
break;
|
|
@@ -79,7 +99,77 @@ function printStatus() {
|
|
|
79
99
|
console.log(formatStatusReport(getMenuStatus(rootDir)));
|
|
80
100
|
}
|
|
81
101
|
|
|
82
|
-
|
|
102
|
+
function prepareActionForRun(action, args) {
|
|
103
|
+
if (action.key === 'promptRecommendation') {
|
|
104
|
+
if (args.prompt) {
|
|
105
|
+
return {
|
|
106
|
+
...action,
|
|
107
|
+
description: 'Avalia o prompt informado pelo router local.',
|
|
108
|
+
args: [action.args[0], '--route-prompt', args.prompt],
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (!isInteractiveTerminal()) {
|
|
113
|
+
throw new Error('prompt-router precisa de --prompt fora do TTY. Exemplo: skill-master-menu --run prompt-router --prompt "validar menu nota 10"');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (action.key === 'activateLearnedLocal' || action.key === 'activateLearnedGlobal') {
|
|
118
|
+
const target = action.key === 'activateLearnedLocal' ? 'local' : 'global';
|
|
119
|
+
if (args.list) {
|
|
120
|
+
return {
|
|
121
|
+
...action,
|
|
122
|
+
label: 'Listar drafts de skills aprendidas',
|
|
123
|
+
description: 'Lista manifests disponiveis para aprovacao ou ativacao humana.',
|
|
124
|
+
details: ['Nao instala skill.', 'Use um Manifest listado com --manifest <manifest.json> --yes para ativar.'],
|
|
125
|
+
success: 'Drafts pendentes listados com caminhos de manifest quando existirem.',
|
|
126
|
+
confirmMessage: null,
|
|
127
|
+
args: [action.args[0], '--list'],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (args.manifest) {
|
|
132
|
+
return {
|
|
133
|
+
...action,
|
|
134
|
+
description: `Ativa a skill aprendida informada em ${target}.`,
|
|
135
|
+
args: [
|
|
136
|
+
action.args[0],
|
|
137
|
+
'--activate',
|
|
138
|
+
args.manifest,
|
|
139
|
+
'--target',
|
|
140
|
+
target,
|
|
141
|
+
...(args.yes ? ['--yes'] : []),
|
|
142
|
+
...(args.overwrite ? ['--overwrite'] : []),
|
|
143
|
+
],
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (!isInteractiveTerminal()) {
|
|
148
|
+
if (args.yes) {
|
|
149
|
+
return {
|
|
150
|
+
...action,
|
|
151
|
+
description: `Ativa automaticamente o unico draft pronto em ${target}, quando existir.`,
|
|
152
|
+
args: [
|
|
153
|
+
action.args[0],
|
|
154
|
+
'--activate-ready',
|
|
155
|
+
'--target',
|
|
156
|
+
target,
|
|
157
|
+
'--yes',
|
|
158
|
+
...(args.overwrite ? ['--overwrite'] : []),
|
|
159
|
+
],
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
throw new Error(`A acao ${action.aliases[0]} precisa de selecao explicita fora do TTY. Use: skill-master-menu --run ${action.aliases[0]} --manifest <manifest.json> --yes, ou skill-master-menu --run ${action.aliases[0]} --yes quando exatamente um draft estiver pronto. Para listar manifests: skill-master-menu --run ${action.aliases[0]} --list`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return action;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
async function runSelectedAction(action, { yes = false, useColor = false, cliArgs = {} } = {}) {
|
|
171
|
+
action = prepareActionForRun(action, { ...cliArgs, yes });
|
|
172
|
+
|
|
83
173
|
if (action.disabledReason) {
|
|
84
174
|
throw new Error(`Action ${action.key} is unavailable here: ${action.disabledReason}`);
|
|
85
175
|
}
|
|
@@ -225,6 +315,16 @@ function renderIntro(tick, message) {
|
|
|
225
315
|
writeStableFrame(frame, { clear: tick === 0 });
|
|
226
316
|
}
|
|
227
317
|
|
|
318
|
+
function renderDnaHero(tick) {
|
|
319
|
+
const status = getMenuStatus(rootDir);
|
|
320
|
+
const frame = formatSkillMasterDnaHeroFrame(status, tick, {
|
|
321
|
+
columns: process.stdout.columns ?? 120,
|
|
322
|
+
rows: process.stdout.rows ?? 32,
|
|
323
|
+
useColor: true,
|
|
324
|
+
});
|
|
325
|
+
writeStableFrame(frame, { clear: tick === 0 });
|
|
326
|
+
}
|
|
327
|
+
|
|
228
328
|
function renderConfirmAction(action, tick) {
|
|
229
329
|
const status = getMenuStatus(rootDir);
|
|
230
330
|
const frame = formatCyberConfirmFrame(status, action, tick, {
|
|
@@ -244,6 +344,14 @@ async function animateIntro(message = 'skill_master assumindo o workflow', frame
|
|
|
244
344
|
}
|
|
245
345
|
}
|
|
246
346
|
|
|
347
|
+
async function animateDnaHeroIntro(frames = 5) {
|
|
348
|
+
if (!visualHudAllowed()) return;
|
|
349
|
+
for (let frame = 0; frame < frames; frame += 1) {
|
|
350
|
+
renderDnaHero(frame);
|
|
351
|
+
await sleep(220);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
247
355
|
async function animateRunningAction(action, startTick) {
|
|
248
356
|
for (let frame = 0; frame < 5; frame += 1) {
|
|
249
357
|
renderRunningAction(action, startTick + frame);
|
|
@@ -293,6 +401,7 @@ async function runVisualMenu() {
|
|
|
293
401
|
restoreMenuInput();
|
|
294
402
|
|
|
295
403
|
try {
|
|
404
|
+
await animateDnaHeroIntro(5);
|
|
296
405
|
await animateIntro('skill_master online / carregando menu operacional', 7);
|
|
297
406
|
|
|
298
407
|
while (true) {
|
|
@@ -376,19 +485,20 @@ async function main() {
|
|
|
376
485
|
if (!actionKey) {
|
|
377
486
|
throw new Error(`Unknown action: ${args.run}`);
|
|
378
487
|
}
|
|
379
|
-
|
|
380
|
-
const action = commands.find((entry) => entry.key === actionKey);
|
|
381
|
-
if (visualHudAllowed()) {
|
|
382
|
-
enterVisualScreen();
|
|
383
|
-
try {
|
|
384
|
-
await
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
488
|
+
|
|
489
|
+
const action = commands.find((entry) => entry.key === actionKey);
|
|
490
|
+
if (visualHudAllowed()) {
|
|
491
|
+
enterVisualScreen();
|
|
492
|
+
try {
|
|
493
|
+
await animateDnaHeroIntro(4);
|
|
494
|
+
await animateIntro(`skill_master executando ${action.label}`, 6);
|
|
495
|
+
} finally {
|
|
496
|
+
leaveVisualScreen();
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
const result = await runSelectedAction(action, { yes: args.yes, useColor: isInteractiveTerminal(), cliArgs: args });
|
|
500
|
+
return result.code;
|
|
501
|
+
}
|
|
392
502
|
|
|
393
503
|
if (!isInteractiveTerminal()) {
|
|
394
504
|
throw new Error('Interactive menu requires a TTY. Use --run <acao> or --status in automated environments.');
|
|
@@ -63,6 +63,7 @@ const parseArgs = (argv) => {
|
|
|
63
63
|
parsed.command = 'activate';
|
|
64
64
|
parsed.manifest = argv[++index] ?? null;
|
|
65
65
|
} else if (arg === '--activate-interactive') parsed.command = 'activate-interactive';
|
|
66
|
+
else if (arg === '--activate-ready') parsed.command = 'activate-ready';
|
|
66
67
|
else if (arg === '--yes') parsed.yes = true;
|
|
67
68
|
else if (arg === '--overwrite') parsed.overwrite = true;
|
|
68
69
|
else if (arg.startsWith('--target=')) parsed.target = arg.slice('--target='.length);
|
|
@@ -103,6 +104,7 @@ Usage:
|
|
|
103
104
|
skill-master-success-skills --mark-study-interactive
|
|
104
105
|
skill-master-success-skills --reject-interactive
|
|
105
106
|
skill-master-success-skills --activate <manifest.json> --target local|global|<path> --yes
|
|
107
|
+
skill-master-success-skills --activate-ready --target local|global|<path> --yes
|
|
106
108
|
skill-master-success-skills --activate-interactive --target local|global
|
|
107
109
|
`);
|
|
108
110
|
};
|
|
@@ -189,7 +191,7 @@ const chooseManifest = async (directory, { readyOnly = true } = {}) => {
|
|
|
189
191
|
}
|
|
190
192
|
|
|
191
193
|
if (choices.length === 0) {
|
|
192
|
-
throw new Error('
|
|
194
|
+
throw new Error('Nenhum draft pendente encontrado. Gere um pacote com: skill-master-menu --run approval-package. Para revisar a fila: skill-master-menu --run notifications');
|
|
193
195
|
}
|
|
194
196
|
|
|
195
197
|
const response = await prompts({
|
|
@@ -206,6 +208,27 @@ const chooseManifest = async (directory, { readyOnly = true } = {}) => {
|
|
|
206
208
|
return response.manifest;
|
|
207
209
|
};
|
|
208
210
|
|
|
211
|
+
const listReadyDrafts = async (directory) => {
|
|
212
|
+
const manifests = await listSuccessSkillDraftManifests(directory);
|
|
213
|
+
const approvedIndex = await readApprovedSkillIndex(approvedSkillIndexPath);
|
|
214
|
+
const ready = [];
|
|
215
|
+
|
|
216
|
+
for (const manifestPath of manifests) {
|
|
217
|
+
const draft = await readSuccessSkillDraft(manifestPath);
|
|
218
|
+
if (!draft || draft.governance.approved) continue;
|
|
219
|
+
const review = await reviewSuccessSkillDraft({ manifestPath, approvedIndex });
|
|
220
|
+
if (review.recommendation === 'ready-for-human-approval') {
|
|
221
|
+
ready.push({
|
|
222
|
+
manifestPath,
|
|
223
|
+
name: draft.candidateSkill.name,
|
|
224
|
+
recommendation: review.recommendation,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
return ready;
|
|
230
|
+
};
|
|
231
|
+
|
|
209
232
|
const activate = async ({ manifest, target, yes, overwrite }) => {
|
|
210
233
|
if (!manifest) throw new Error('Missing manifest path.');
|
|
211
234
|
const targetRoot = resolveTargetRoot(target);
|
|
@@ -241,6 +264,30 @@ const activate = async ({ manifest, target, yes, overwrite }) => {
|
|
|
241
264
|
console.log(`- Registro: ${result.approvalRecordPath}`);
|
|
242
265
|
};
|
|
243
266
|
|
|
267
|
+
const activateReady = async ({ directory, target, yes, overwrite }) => {
|
|
268
|
+
const ready = await listReadyDrafts(directory);
|
|
269
|
+
|
|
270
|
+
if (ready.length === 0) {
|
|
271
|
+
throw new Error('No ready learned skill drafts found. Use --approval-package to review pending drafts first.');
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
if (ready.length > 1) {
|
|
275
|
+
console.log('Multiple ready learned skill drafts found:');
|
|
276
|
+
for (const [index, draft] of ready.entries()) {
|
|
277
|
+
console.log(`${index + 1}. ${draft.name}`);
|
|
278
|
+
console.log(` Manifest: ${draft.manifestPath}`);
|
|
279
|
+
}
|
|
280
|
+
throw new Error('Multiple ready drafts require an explicit --activate <manifest.json> selection.');
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
await activate({
|
|
284
|
+
manifest: ready[0].manifestPath,
|
|
285
|
+
target,
|
|
286
|
+
yes,
|
|
287
|
+
overwrite,
|
|
288
|
+
});
|
|
289
|
+
};
|
|
290
|
+
|
|
244
291
|
const recordDecision = async ({ command, manifest, reason }) => {
|
|
245
292
|
if (!manifest) throw new Error('Missing manifest path.');
|
|
246
293
|
if (!reason) throw new Error('Decision commands require --reason.');
|
|
@@ -290,8 +337,11 @@ const main = async () => {
|
|
|
290
337
|
else if (args.command === 'mark-study' || args.command === 'reject') await recordDecision(args);
|
|
291
338
|
else if (args.command === 'mark-study-interactive' || args.command === 'reject-interactive') await recordDecisionInteractive(args);
|
|
292
339
|
else if (args.command === 'activate') await activate(args);
|
|
340
|
+
else if (args.command === 'activate-ready') await activateReady(args);
|
|
293
341
|
else if (args.command === 'activate-interactive') {
|
|
294
|
-
if (!isTty())
|
|
342
|
+
if (!isTty()) {
|
|
343
|
+
throw new Error('Ativacao interativa requer TTY. Em automacao use: skill-master-menu --run activate-learned-local --manifest <manifest.json> --yes. Para listar manifests: skill-master-menu --run activate-learned-local --list');
|
|
344
|
+
}
|
|
295
345
|
const manifest = await chooseManifest(args.directory);
|
|
296
346
|
await activate({ ...args, manifest });
|
|
297
347
|
} else {
|
|
@@ -1,76 +1,79 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="pt-BR">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8" />
|
|
5
|
-
<title>Menu Frame 96x24</title>
|
|
6
|
-
<style>
|
|
7
|
-
:root {
|
|
8
|
-
color-scheme: dark;
|
|
9
|
-
--bg: #
|
|
10
|
-
--panel: #
|
|
11
|
-
--grid: rgba(
|
|
12
|
-
--line: rgba(
|
|
13
|
-
--text: #
|
|
14
|
-
--muted: #
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
var(--
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="pt-BR">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<title>Menu Frame 96x24</title>
|
|
6
|
+
<style>
|
|
7
|
+
:root {
|
|
8
|
+
color-scheme: dark;
|
|
9
|
+
--bg: #050708;
|
|
10
|
+
--panel: #0b1113;
|
|
11
|
+
--grid: rgba(112, 230, 229, 0.08);
|
|
12
|
+
--line: rgba(112, 230, 229, 0.34);
|
|
13
|
+
--text: #ecffff;
|
|
14
|
+
--muted: #9aa8ad;
|
|
15
|
+
--cyan: #70e6e5;
|
|
16
|
+
--amber: #e5c27a;
|
|
17
|
+
}
|
|
18
|
+
* { box-sizing: border-box; }
|
|
19
|
+
body {
|
|
20
|
+
margin: 0;
|
|
21
|
+
min-height: 100vh;
|
|
22
|
+
background:
|
|
23
|
+
linear-gradient(var(--grid) 1px, transparent 1px),
|
|
24
|
+
linear-gradient(90deg, var(--grid) 1px, transparent 1px),
|
|
25
|
+
radial-gradient(circle at 70% 10%, rgba(112,230,229,0.13), transparent 36%),
|
|
26
|
+
radial-gradient(circle at 20% 80%, rgba(229,194,122,0.09), transparent 30%),
|
|
27
|
+
var(--bg);
|
|
28
|
+
background-size: 42px 42px, 42px 42px, auto, auto, auto;
|
|
29
|
+
color: var(--text);
|
|
30
|
+
font-family: "Courier New", monospace;
|
|
31
|
+
padding: 32px;
|
|
32
|
+
}
|
|
33
|
+
.frame {
|
|
34
|
+
max-width: max-content;
|
|
35
|
+
background: linear-gradient(180deg, rgba(112,230,229,0.05), rgba(255,255,255,0.01));
|
|
36
|
+
border: 1px solid var(--line);
|
|
37
|
+
box-shadow: 0 0 0 1px rgba(112,230,229,0.08), 0 24px 64px rgba(0,0,0,0.48);
|
|
38
|
+
padding: 20px 24px;
|
|
39
|
+
white-space: pre;
|
|
40
|
+
line-height: 1.1;
|
|
41
|
+
font-size: 13px;
|
|
42
|
+
border-radius: 10px;
|
|
43
|
+
}
|
|
44
|
+
.title {
|
|
45
|
+
margin: 0 0 16px;
|
|
46
|
+
color: var(--muted);
|
|
47
|
+
letter-spacing: 0.12em;
|
|
48
|
+
text-transform: uppercase;
|
|
49
|
+
font-size: 12px;
|
|
50
|
+
}
|
|
51
|
+
</style>
|
|
52
|
+
</head>
|
|
53
|
+
<body>
|
|
54
|
+
<p class="title">Menu Frame 96x24</p>
|
|
55
|
+
<pre class="frame">+----------- OVERVIEW#..--#--------------------------------------------------------------------+
|
|
56
|
+
| .SKILL MASTER MENU |
|
|
57
|
+
| version 1.0.1 | channel 1.0.1 | readiness ready |
|
|
58
|
+
| GLOBAL SKILLS 25/25 |
|
|
59
|
+
| bundle 69 | drafts 3 | study 8 |
|
|
60
|
+
| .signal :::-=### health ###=-::: |
|
|
61
|
+
+-----------------###-.-.-.-.------------------------------------------------------------------+
|
|
62
|
+
|
|
63
|
+
+---------- ACTIONS#..--#----------------------------------------+ +---- DNA-CORE#------------+
|
|
64
|
+
| .ACTION MATRIX | | .DNA CYBER HELIX / ativa |
|
|
65
|
+
| up/down move enter run q exit | | fine strand / focus |
|
|
66
|
+
| window 21/23 | visible 4 | | * ************ * |
|
|
67
|
+
| - Manter skill candidata para estudo | | *********** |
|
|
68
|
+
| - Rejeitar skill candidata | | * * ********* * |
|
|
69
|
+
| .> Ativar skill aprendida no workspace | | . ******** |
|
|
70
|
+
+------------###-.-.-.-.-----------------------------------------+ +-----#--------------------+
|
|
71
|
+
+-========= DETAILS#..==#=======================================-+ +---- TELEMETRY#-----------+
|
|
72
|
+
| .DETAIL FOCUS | | .SYSTEM WINDOWS |
|
|
73
|
+
| Ativar skill aprendida no workspace | | [AREA] ativacao-skill |
|
|
74
|
+
| [AREA] ativacao-skill | action 21/23 | | [LEAD] frontend-ui 22 |
|
|
75
|
+
| [WRITES-LOCAL] [RISK:MEDIUM] [CONFIRM] [TTY] | | bundle 69 ########## |
|
|
76
|
+
| .=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | | .global 25/25 ######## |
|
|
77
|
+
+-===========###=.=.=.=.========================================-+ +-----#--------------------+</pre>
|
|
78
|
+
</body>
|
|
76
79
|
</html>
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="pt-BR">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<title>DNA Hero Boot</title>
|
|
6
|
+
<style>
|
|
7
|
+
:root {
|
|
8
|
+
color-scheme: dark;
|
|
9
|
+
--bg: #050708;
|
|
10
|
+
--panel: #0b1113;
|
|
11
|
+
--grid: rgba(112, 230, 229, 0.08);
|
|
12
|
+
--line: rgba(112, 230, 229, 0.34);
|
|
13
|
+
--text: #ecffff;
|
|
14
|
+
--muted: #9aa8ad;
|
|
15
|
+
--cyan: #70e6e5;
|
|
16
|
+
--amber: #e5c27a;
|
|
17
|
+
}
|
|
18
|
+
* { box-sizing: border-box; }
|
|
19
|
+
body {
|
|
20
|
+
margin: 0;
|
|
21
|
+
min-height: 100vh;
|
|
22
|
+
background:
|
|
23
|
+
linear-gradient(var(--grid) 1px, transparent 1px),
|
|
24
|
+
linear-gradient(90deg, var(--grid) 1px, transparent 1px),
|
|
25
|
+
radial-gradient(circle at 70% 10%, rgba(112,230,229,0.13), transparent 36%),
|
|
26
|
+
radial-gradient(circle at 20% 80%, rgba(229,194,122,0.09), transparent 30%),
|
|
27
|
+
var(--bg);
|
|
28
|
+
background-size: 42px 42px, 42px 42px, auto, auto, auto;
|
|
29
|
+
color: var(--text);
|
|
30
|
+
font-family: "Courier New", monospace;
|
|
31
|
+
padding: 32px;
|
|
32
|
+
}
|
|
33
|
+
.frame {
|
|
34
|
+
max-width: max-content;
|
|
35
|
+
background: linear-gradient(180deg, rgba(112,230,229,0.05), rgba(255,255,255,0.01));
|
|
36
|
+
border: 1px solid var(--line);
|
|
37
|
+
box-shadow: 0 0 0 1px rgba(112,230,229,0.08), 0 24px 64px rgba(0,0,0,0.48);
|
|
38
|
+
padding: 20px 24px;
|
|
39
|
+
white-space: pre;
|
|
40
|
+
line-height: 1.1;
|
|
41
|
+
font-size: 13px;
|
|
42
|
+
border-radius: 10px;
|
|
43
|
+
}
|
|
44
|
+
.title {
|
|
45
|
+
margin: 0 0 16px;
|
|
46
|
+
color: var(--muted);
|
|
47
|
+
letter-spacing: 0.12em;
|
|
48
|
+
text-transform: uppercase;
|
|
49
|
+
font-size: 12px;
|
|
50
|
+
}
|
|
51
|
+
</style>
|
|
52
|
+
</head>
|
|
53
|
+
<body>
|
|
54
|
+
<p class="title">DNA Hero Boot</p>
|
|
55
|
+
<pre class="frame">+----------- DNA-HERO#----#--------------------------------------------------------------------------------------------+
|
|
56
|
+
| .SKILL_MASTER DNA ONLINE |
|
|
57
|
+
| boot hero / intelligence configuration / terminal-safe animation |
|
|
58
|
+
| package @fprad0/skill-master-mcp | version 1.0.1 | channel 1.0.1 |
|
|
59
|
+
| DNA signal ===-:..:-=###==-=====::..:-== |
|
|
60
|
+
| DNA CYBER HELIX / geral |
|
|
61
|
+
| luminous fine helix / low flicker |
|
|
62
|
+
| * * * * * * **************** * * * * * |
|
|
63
|
+
| ****************** |
|
|
64
|
+
| * * * * * * ****** * ***** * * * * * |
|
|
65
|
+
| ************ |
|
|
66
|
+
| ************ |
|
|
67
|
+
| * * * * * * ***************** * * * * * |
|
|
68
|
+
| *** * *** |
|
|
69
|
+
| * * * * * * ********* **** * * * * * |
|
|
70
|
+
| ******** |
|
|
71
|
+
| ***** ******** |
|
|
72
|
+
| * * * * * * ***************** * * * * * |
|
|
73
|
+
| **** *** |
|
|
74
|
+
| [HELIX] frames 5/48 | global 25/25 |
|
|
75
|
+
| <=/===/>-<=/===/>-<=/===/>-<=/===/>-<=/===/>-<=/===/>-<=/===/>-<=/===/>-<=/===/>-<=/===/>-<=/===/>-<=/===/>-<=/===/ |
|
|
76
|
+
| ONLINE | global 25/25 | bundle 69 |
|
|
77
|
+
| |
|
|
78
|
+
| |
|
|
79
|
+
| |
|
|
80
|
+
| |
|
|
81
|
+
| |
|
|
82
|
+
| |
|
|
83
|
+
| |
|
|
84
|
+
| . |
|
|
85
|
+
+---------------------###----------------------------------------------------------------------------------------------+</pre>
|
|
86
|
+
</body>
|
|
87
|
+
</html>
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="pt-BR">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<title>Fine Helix Focus</title>
|
|
6
|
+
<style>
|
|
7
|
+
:root {
|
|
8
|
+
color-scheme: dark;
|
|
9
|
+
--bg: #050708;
|
|
10
|
+
--panel: #0b1113;
|
|
11
|
+
--grid: rgba(112, 230, 229, 0.08);
|
|
12
|
+
--line: rgba(112, 230, 229, 0.34);
|
|
13
|
+
--text: #ecffff;
|
|
14
|
+
--muted: #9aa8ad;
|
|
15
|
+
--cyan: #70e6e5;
|
|
16
|
+
--amber: #e5c27a;
|
|
17
|
+
}
|
|
18
|
+
* { box-sizing: border-box; }
|
|
19
|
+
body {
|
|
20
|
+
margin: 0;
|
|
21
|
+
min-height: 100vh;
|
|
22
|
+
background:
|
|
23
|
+
linear-gradient(var(--grid) 1px, transparent 1px),
|
|
24
|
+
linear-gradient(90deg, var(--grid) 1px, transparent 1px),
|
|
25
|
+
radial-gradient(circle at 70% 10%, rgba(112,230,229,0.13), transparent 36%),
|
|
26
|
+
radial-gradient(circle at 20% 80%, rgba(229,194,122,0.09), transparent 30%),
|
|
27
|
+
var(--bg);
|
|
28
|
+
background-size: 42px 42px, 42px 42px, auto, auto, auto;
|
|
29
|
+
color: var(--text);
|
|
30
|
+
font-family: "Courier New", monospace;
|
|
31
|
+
padding: 32px;
|
|
32
|
+
}
|
|
33
|
+
.frame {
|
|
34
|
+
max-width: max-content;
|
|
35
|
+
background: linear-gradient(180deg, rgba(112,230,229,0.05), rgba(255,255,255,0.01));
|
|
36
|
+
border: 1px solid var(--line);
|
|
37
|
+
box-shadow: 0 0 0 1px rgba(112,230,229,0.08), 0 24px 64px rgba(0,0,0,0.48);
|
|
38
|
+
padding: 20px 24px;
|
|
39
|
+
white-space: pre;
|
|
40
|
+
line-height: 1.1;
|
|
41
|
+
font-size: 13px;
|
|
42
|
+
border-radius: 10px;
|
|
43
|
+
}
|
|
44
|
+
.title {
|
|
45
|
+
margin: 0 0 16px;
|
|
46
|
+
color: var(--muted);
|
|
47
|
+
letter-spacing: 0.12em;
|
|
48
|
+
text-transform: uppercase;
|
|
49
|
+
font-size: 12px;
|
|
50
|
+
}
|
|
51
|
+
</style>
|
|
52
|
+
</head>
|
|
53
|
+
<body>
|
|
54
|
+
<p class="title">Fine Helix Focus</p>
|
|
55
|
+
<pre class="frame">+----------- OVERVIEW#----#--------------------------------------------------------------------------------------------+
|
|
56
|
+
| .SKILL MASTER MENU |
|
|
57
|
+
| version 1.0.1 | channel 1.0.1 | readiness ready |
|
|
58
|
+
| GLOBAL SKILLS 25/25 |
|
|
59
|
+
| bundle 69 | drafts 3 | study 8 |
|
|
60
|
+
| [FOCUS] roteamento / promptRecommendation |
|
|
61
|
+
| signal :-=####=-::- health #=-::::-=-:: |
|
|
62
|
+
| .moral-core 10 | frontend-ui 22 | backend-data 19 | ops-clients 12 | knowledge 2 |
|
|
63
|
+
+---------------------###----------------------------------------------------------------------------------------------+
|
|
64
|
+
|
|
65
|
+
+----------- ACTIONS#----#---------------------------------------------------+ +------ DNA-CORE#----------------------+
|
|
66
|
+
| .ACTION MATRIX | | .DNA CYBER HELIX / roteamento |
|
|
67
|
+
| up/down move enter run q exit | | luminous fine helix / low flicker |
|
|
68
|
+
| window 15/23 | visible 9 | | * * ************** * * |
|
|
69
|
+
| - Instalar skills globais do Skill Master | | ********** |
|
|
70
|
+
| - Instalar skills no projeto atual | | * * * *********** * * |
|
|
71
|
+
| - Ativar MCP global neste computador | | *************** |
|
|
72
|
+
| - Registrar clientes MCP | | **** *** |
|
|
73
|
+
| > Ver recomendacao para um prompt > | | * * ************** * * |
|
|
74
|
+
| - Notificacoes de skills aprendidas | | ******** |
|
|
75
|
+
| - Skills para estudar | | * * ************** * * |
|
|
76
|
+
| - Gerar pacote de aprovacao humana | | **** ***** |
|
|
77
|
+
| .- Manter skill candidata para estudo | | . ***************** |
|
|
78
|
+
+--------------###-----------------------------------------------------------+ +-------###----------------------------+
|
|
79
|
+
+-========== DETAILS#====#==================================================-+ +------ TELEMETRY#---------------------+
|
|
80
|
+
| .DETAIL FOCUS | | .SYSTEM WINDOWS |
|
|
81
|
+
| Ver recomendacao para um prompt | | [AREA] roteamento |
|
|
82
|
+
| [AREA] roteamento | action 15/23 | | [LEAD] frontend-ui 22 |
|
|
83
|
+
| [READ-ONLY] [RISK:LOW] [TTY] | | bundle 69 ################ |
|
|
84
|
+
| =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | | global 25/25 ################ |
|
|
85
|
+
| desc: Abre um fluxo interativo para avaliar um prompt pelo router local. | | [LINK] cx+ cl+ gm+ ag+ |
|
|
86
|
+
| .detail: Ajuda a decidir se skill-master, skill_master ou skill-master-mcp | | .skills -=###==--=== |
|
|
87
|
+
+-=============###==========================================================-+ +-------###----------------------------+</pre>
|
|
88
|
+
</body>
|
|
89
|
+
</html>
|