expxdev 0.5.1 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/init.js +39 -5
- package/dist/cli/init.js.map +1 -1
- package/dist/harness/hooks.d.ts +9 -4
- package/dist/harness/hooks.js +34 -3
- package/dist/harness/hooks.js.map +1 -1
- package/dist/harness/instalar.d.ts +19 -0
- package/dist/harness/instalar.js +42 -1
- package/dist/harness/instalar.js.map +1 -1
- package/dist/harness/settings.js +6 -0
- package/dist/harness/settings.js.map +1 -1
- package/dist/nucleo/busca.d.ts +8 -0
- package/dist/nucleo/busca.js +27 -2
- package/dist/nucleo/busca.js.map +1 -1
- package/dist/nucleo/catalogo.d.ts +7 -1
- package/dist/nucleo/catalogo.js +73 -9
- package/dist/nucleo/catalogo.js.map +1 -1
- package/dist/nucleo/layout.d.ts +8 -0
- package/dist/nucleo/layout.js +22 -0
- package/dist/nucleo/layout.js.map +1 -1
- package/dist/parser/descoberta/trabalhos.d.ts +14 -2
- package/dist/parser/descoberta/trabalhos.js +59 -0
- package/dist/parser/descoberta/trabalhos.js.map +1 -1
- package/dist/parser/esquema/cabecalho.d.ts +21 -5
- package/dist/parser/esquema/cabecalho.js +24 -5
- package/dist/parser/esquema/cabecalho.js.map +1 -1
- package/dist/parser/esquema/enums.d.ts +41 -4
- package/dist/parser/esquema/enums.js +39 -9
- package/dist/parser/esquema/enums.js.map +1 -1
- package/dist/parser/esquema/evento.d.ts +1 -0
- package/dist/parser/esquema/kinds.d.ts +288 -0
- package/dist/parser/esquema/kinds.js +84 -1
- package/dist/parser/esquema/kinds.js.map +1 -1
- package/dist/plugin/montagem.d.ts +5 -0
- package/dist/plugin/montagem.js +67 -1
- package/dist/plugin/montagem.js.map +1 -1
- package/dist/servidor/http.d.ts +5 -0
- package/dist/servidor/http.js +28 -0
- package/dist/servidor/http.js.map +1 -1
- package/dist/servidor/observador.d.ts +27 -1
- package/dist/servidor/observador.js +152 -19
- package/dist/servidor/observador.js.map +1 -1
- package/dist/servidor/painel.js +13 -3
- package/dist/servidor/painel.js.map +1 -1
- package/dist/update/comparar.js +2 -2
- package/dist/update/comparar.js.map +1 -1
- package/dist/watch/desenho/barra.d.ts +29 -0
- package/dist/watch/desenho/barra.js +111 -0
- package/dist/watch/desenho/barra.js.map +1 -0
- package/dist/watch/desenho/desenhar.d.ts +15 -2
- package/dist/watch/desenho/desenhar.js +65 -11
- package/dist/watch/desenho/desenhar.js.map +1 -1
- package/dist/watch/desenho/painel.d.ts +14 -0
- package/dist/watch/desenho/painel.js +260 -0
- package/dist/watch/desenho/painel.js.map +1 -0
- package/dist/watch/fontes/estado-schema.d.ts +7 -0
- package/dist/watch/opcoes.d.ts +2 -0
- package/dist/watch/opcoes.js +11 -4
- package/dist/watch/opcoes.js.map +1 -1
- package/dist/watch/terminal/tela.d.ts +15 -12
- package/dist/watch/terminal/tela.js +79 -3
- package/dist/watch/terminal/tela.js.map +1 -1
- package/dist/watch/visao/atividade.d.ts +70 -0
- package/dist/watch/visao/atividade.js +0 -0
- package/dist/watch/visao/atividade.js.map +1 -0
- package/dist/watch/visao/frota.d.ts +46 -0
- package/dist/watch/visao/frota.js +67 -0
- package/dist/watch/visao/frota.js.map +1 -0
- package/dist/watch/visao/projetar.d.ts +9 -0
- package/dist/watch/visao/projetar.js +55 -0
- package/dist/watch/visao/projetar.js.map +1 -1
- package/dist/watch/watch.d.ts +2 -0
- package/dist/watch/watch.js +48 -3
- package/dist/watch/watch.js.map +1 -1
- package/nucleo/hooks/expx-lembrete.sh +136 -0
- package/package.json +1 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# expx-lembrete.sh — o gatilho que garante que a skill seja CONSIDERADA.
|
|
3
|
+
#
|
|
4
|
+
# UserPromptSubmit: roda antes da primeira acao do modelo, e o que ele
|
|
5
|
+
# escreve no stdout entra no contexto daquele turno.
|
|
6
|
+
#
|
|
7
|
+
# ---------------------------------------------------------------------------
|
|
8
|
+
# Por que este arquivo existe
|
|
9
|
+
#
|
|
10
|
+
# Uma descricao de skill so compete depois que o modelo decide procurar uma.
|
|
11
|
+
# Quando ele forma hipotese tecnica direto do relato — "sei o que provavelmente
|
|
12
|
+
# e isso" — a etapa de escolher o processo simplesmente nao acontece, e a
|
|
13
|
+
# descricao, por melhor que seja, nunca e lida.
|
|
14
|
+
#
|
|
15
|
+
# Foi medido: um relato de defeito nao acionou a runx em SEIS sessoes
|
|
16
|
+
# seguidas, com a descricao reescrita tres vezes (910, 1020 e 287 caracteres),
|
|
17
|
+
# sem concorrente, sem cache velho e com a palavra "bug" literal no pedido. A
|
|
18
|
+
# propria sessao, ao ser questionada, respondeu: "nao e que eu li a descricao
|
|
19
|
+
# e julguei que nao se aplicava — eu nao a li".
|
|
20
|
+
#
|
|
21
|
+
# O que resolve nao e descricao melhor: e uma instrucao imperativa injetada
|
|
22
|
+
# ANTES da primeira acao. E o mecanismo que o plugin superpowers usava, e a
|
|
23
|
+
# razao de ele vencer as skills do metodo mesmo sem descricao superior.
|
|
24
|
+
#
|
|
25
|
+
# ---------------------------------------------------------------------------
|
|
26
|
+
# Regras que este arquivo respeita
|
|
27
|
+
#
|
|
28
|
+
# 1. Rapido — so casamento de padrao em shell, sem rede, sem parser.
|
|
29
|
+
# 2. Falha aberta — qualquer erro sai 0 e nao injeta nada. Nunca bloqueia.
|
|
30
|
+
# 3. Um lembrete — no maximo UMA skill por prompt, a de maior prioridade.
|
|
31
|
+
# Injetar tres sugestoes e o mesmo que nao injetar nenhuma.
|
|
32
|
+
# 4. So o que esta instalado — nao sugere skill ausente do projeto.
|
|
33
|
+
|
|
34
|
+
set -u
|
|
35
|
+
|
|
36
|
+
# Sem stdin utilizavel, nao ha o que fazer.
|
|
37
|
+
EVENTO="$(cat 2>/dev/null || true)"
|
|
38
|
+
[ -z "$EVENTO" ] && exit 0
|
|
39
|
+
|
|
40
|
+
# O prompt do usuario. Com jq quando existe; sem jq, um grep tolerante.
|
|
41
|
+
if command -v jq >/dev/null 2>&1; then
|
|
42
|
+
PROMPT="$(printf '%s' "$EVENTO" | jq -r '.prompt // empty' 2>/dev/null)"
|
|
43
|
+
else
|
|
44
|
+
PROMPT="$(printf '%s' "$EVENTO" \
|
|
45
|
+
| grep -o '"prompt"[[:space:]]*:[[:space:]]*"[^"]*"' \
|
|
46
|
+
| head -1 | sed 's/.*:[[:space:]]*"//; s/"$//')"
|
|
47
|
+
fi
|
|
48
|
+
[ -z "$PROMPT" ] && exit 0
|
|
49
|
+
|
|
50
|
+
# Prompt curto e saudacao nao disparam nada.
|
|
51
|
+
[ "${#PROMPT}" -lt 12 ] && exit 0
|
|
52
|
+
|
|
53
|
+
# Minusculas e SEM acento: a pessoa digita "nao acompanha", "codigo", "calculo"
|
|
54
|
+
# tanto quanto as formas acentuadas, e um padrao que so casa com acento perde
|
|
55
|
+
# metade dos relatos reais.
|
|
56
|
+
# O `tr`/`sed` do BSD trabalha byte a byte e corta caracteres multibyte no
|
|
57
|
+
# meio, produzindo lixo invalido. O Python resolve isso com uma passada de
|
|
58
|
+
# normalizacao Unicode; sem ele, cai para minusculas so em ASCII, que ainda
|
|
59
|
+
# casa a maioria dos padroes.
|
|
60
|
+
if command -v python3 >/dev/null 2>&1; then
|
|
61
|
+
P="$(printf '%s' "$PROMPT" | python3 -c "
|
|
62
|
+
import sys,unicodedata
|
|
63
|
+
t=sys.stdin.read().lower()
|
|
64
|
+
print(''.join(c for c in unicodedata.normalize('NFD',t) if unicodedata.category(c)!='Mn'))
|
|
65
|
+
" 2>/dev/null)"
|
|
66
|
+
else
|
|
67
|
+
P="$(printf '%s' "$PROMPT" | tr '[:upper:]' '[:lower:]')"
|
|
68
|
+
fi
|
|
69
|
+
[ -z "$P" ] && P="$(printf '%s' "$PROMPT" | tr '[:upper:]' '[:lower:]')"
|
|
70
|
+
|
|
71
|
+
RAIZ="${CLAUDE_PROJECT_DIR:-$PWD}"
|
|
72
|
+
|
|
73
|
+
# A skill esta instalada NESTE projeto?
|
|
74
|
+
instalada() {
|
|
75
|
+
[ -f "$RAIZ/.claude/skills/$1/SKILL.md" ] && return 0
|
|
76
|
+
[ -d "$RAIZ/.expx/marketplace/plugins/expx/skills/$1" ] && return 0
|
|
77
|
+
return 1
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
casa() { printf '%s' "$P" | grep -Eq "$1"; }
|
|
81
|
+
|
|
82
|
+
# ------------------------------------------------------------------ gatilhos
|
|
83
|
+
#
|
|
84
|
+
# A ordem E a prioridade, e ela segue o fluxo do metodo: decidir se ha trabalho
|
|
85
|
+
# (prodx) vem antes de planejar (sprintx) e de corrigir (runx); entregar
|
|
86
|
+
# (mergex) vem depois. Consultas (memox, stackx) sao as mais especificas e
|
|
87
|
+
# ficam no topo por isso — quem pergunta "isso ja aconteceu antes?" nao quer
|
|
88
|
+
# que a resposta seja abrir uma ocorrencia.
|
|
89
|
+
|
|
90
|
+
SKILL=""
|
|
91
|
+
MOTIVO=""
|
|
92
|
+
|
|
93
|
+
# memox — pergunta sobre o passado
|
|
94
|
+
if casa '(ja (aconteceu|deu|teve|foi) (antes|isso)|e recorrente|voltou a (acontecer|dar)|historico (do|da|de)|quem mexeu|ja foi (decidido|tentado|descartado)|regressao)'; then
|
|
95
|
+
SKILL="memox"; MOTIVO="a pergunta e sobre o passado do codigo"
|
|
96
|
+
|
|
97
|
+
# stackx — pergunta sobre convencao do projeto
|
|
98
|
+
elif casa '(qual o padrao|como (escrevo|faco) (o )?teste|onde (coloco|fica|ponho)|convencao|esta no padrao|padroes do projeto)'; then
|
|
99
|
+
SKILL="stackx"; MOTIVO="a pergunta e sobre a convencao tecnica do repositorio"
|
|
100
|
+
|
|
101
|
+
# mergex — entrega
|
|
102
|
+
elif casa '(abrir? (o )?pr\b|pull request|criar? (a )?branch|commitar|versionar|subir o trabalho|mandar para revisao|pronto para (entregar|revisao)|pacote (do|de) qa)'; then
|
|
103
|
+
SKILL="mergex"; MOTIVO="e trabalho de entrega e revisao"
|
|
104
|
+
|
|
105
|
+
# prodx — pedido cru, ainda por decidir
|
|
106
|
+
elif casa '(seria bom se|seria legal se|poderia (ter|fazer)|vale a pena|ja existe (no sistema|isso)|ideia de|gostaria de ter|queria (uma|um) (tela|relatorio|campo) nov)'; then
|
|
107
|
+
SKILL="prodx"; MOTIVO="e um pedido cru, e decidir SE vira trabalho vem antes de planejar"
|
|
108
|
+
|
|
109
|
+
# runx — defeito no que ja existe
|
|
110
|
+
elif casa '(\bbug\b|defeito|nao funciona|parou de funcionar|nao esta funcionando|nao acompanha|nao segue o padrao|(esta|ta|vindo|vem|veio|calculando|somando|mostrando|exibindo) errad|valor errado|(errado|divergente|incorret)|nao responde|nao carrega|nao salva|nao aparece|trava|travando|quebrou|quebrado|erro ao|falha ao|deveria .* mas)'; then
|
|
111
|
+
SKILL="runx"; MOTIVO="e um defeito em algo que ja existe"
|
|
112
|
+
|
|
113
|
+
# sprintx — construir algo novo
|
|
114
|
+
elif casa '(implementar|construir|criar (uma|um) (feature|funcionalidade|integracao)|adicionar (uma|um) (feature|funcionalidade)|integrar com|refatorar|migrar (para|de))'; then
|
|
115
|
+
SKILL="sprintx"; MOTIVO="e trabalho de construcao"
|
|
116
|
+
fi
|
|
117
|
+
|
|
118
|
+
[ -z "$SKILL" ] && exit 0
|
|
119
|
+
instalada "$SKILL" || exit 0
|
|
120
|
+
|
|
121
|
+
# A instrucao. Imperativa e curta: ela existe para que a etapa de ESCOLHER o
|
|
122
|
+
# processo aconteca, nao para descrever a skill — isso a descricao ja faz.
|
|
123
|
+
TEXTO="[Expx] Este pedido casa com a skill \`$SKILL\` ($MOTIVO).
|
|
124
|
+
|
|
125
|
+
ANTES de ler codigo, formar hipotese ou editar qualquer arquivo: leia a descricao da skill \`$SKILL\` e decida explicitamente se ela se aplica. Se aplicar, use-a. Se nao aplicar, diga em uma linha por que nao.
|
|
126
|
+
|
|
127
|
+
Hipotese tecnica forte nao dispensa esta checagem — e justamente quando ela mais protege."
|
|
128
|
+
|
|
129
|
+
if command -v jq >/dev/null 2>&1; then
|
|
130
|
+
jq -n --arg t "$TEXTO" \
|
|
131
|
+
'{hookSpecificOutput:{hookEventName:"UserPromptSubmit",additionalContext:$t}}' 2>/dev/null || true
|
|
132
|
+
else
|
|
133
|
+
ESC="$(printf '%s' "$TEXTO" | sed 's/\\/\\\\/g; s/"/\\"/g' | awk '{printf "%s\\n",$0}')"
|
|
134
|
+
printf '{"hookSpecificOutput":{"hookEventName":"UserPromptSubmit","additionalContext":"%s"}}\n' "$ESC"
|
|
135
|
+
fi
|
|
136
|
+
exit 0
|