auroq-os 2.4.9 → 2.4.10
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/.auroq-core/core/synapse/engine.js +17 -1
- package/.auroq-core/core/synapse/output/formatter.js +9 -4
- package/.auroq-core/core/synapse/runtime/hook-runtime.js +8 -2
- package/.auroq-core/core-config.yaml +1 -1
- package/.synapse/agent-companion +9 -0
- package/.synapse/agent-ops +10 -0
- package/.synapse/agent-organizer +9 -0
- package/.synapse/context +1 -1
- package/.synapse/manifest +4 -12
- package/.synapse/squad-clone-forge +6 -0
- package/.synapse/squad-etlmaker +7 -0
- package/.synapse/squad-mind-forge +5 -0
- package/.synapse/squad-squad-forge +7 -0
- package/.synapse/squad-worker-forge +5 -0
- package/CHANGELOG.md +42 -0
- package/package.json +1 -1
- package/scripts/prepack-casca.mjs +19 -0
|
@@ -22,6 +22,7 @@ const {
|
|
|
22
22
|
needsHandoffWarning,
|
|
23
23
|
} = require('./context/context-tracker');
|
|
24
24
|
const { buildLayerContext } = require('./context/context-builder');
|
|
25
|
+
const { parseManifest } = require('./domain/domain-loader');
|
|
25
26
|
|
|
26
27
|
const { formatSynapseRules } = require('./output/formatter');
|
|
27
28
|
const { MemoryBridge } = require('./memory/memory-bridge');
|
|
@@ -196,7 +197,22 @@ class SynapseEngine {
|
|
|
196
197
|
*/
|
|
197
198
|
constructor(synapsePath, config = {}) {
|
|
198
199
|
this.synapsePath = synapsePath;
|
|
199
|
-
|
|
200
|
+
|
|
201
|
+
// The manifest is what L2/L5 use to resolve an active agent/squad to its
|
|
202
|
+
// domain file. When the caller does not pass one (the hook never did),
|
|
203
|
+
// parse it here — otherwise those layers silently produce nothing.
|
|
204
|
+
let manifest = config.manifest;
|
|
205
|
+
if (!manifest || Object.keys(manifest).length === 0) {
|
|
206
|
+
try {
|
|
207
|
+
const parsed = parseManifest(path.join(synapsePath, 'manifest'));
|
|
208
|
+
manifest = parsed;
|
|
209
|
+
} catch (err) {
|
|
210
|
+
console.warn(`[synapse:engine] Failed to parse manifest: ${err.message}`);
|
|
211
|
+
manifest = {};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
this.config = { ...config, manifest };
|
|
200
216
|
|
|
201
217
|
/** @type {Array<import('./layers/layer-processor')>} */
|
|
202
218
|
this.layers = [];
|
|
@@ -120,7 +120,7 @@ function formatAgent(result) {
|
|
|
120
120
|
if (result.rules.length > 0) {
|
|
121
121
|
lines.push(' RULES:');
|
|
122
122
|
result.rules.forEach((rule, i) => {
|
|
123
|
-
lines.push(` ${i}. ${rule}`);
|
|
123
|
+
lines.push(` ${i + 1}. ${rule}`);
|
|
124
124
|
});
|
|
125
125
|
}
|
|
126
126
|
|
|
@@ -146,7 +146,7 @@ function formatWorkflow(result) {
|
|
|
146
146
|
if (result.rules.length > 0) {
|
|
147
147
|
lines.push(' RULES:');
|
|
148
148
|
result.rules.forEach((rule, i) => {
|
|
149
|
-
lines.push(` ${i}. ${rule}`);
|
|
149
|
+
lines.push(` ${i + 1}. ${rule}`);
|
|
150
150
|
});
|
|
151
151
|
}
|
|
152
152
|
|
|
@@ -234,7 +234,7 @@ function formatStarCommands(result) {
|
|
|
234
234
|
];
|
|
235
235
|
|
|
236
236
|
result.rules.forEach((rule, i) => {
|
|
237
|
-
lines.push(` ${i}. ${rule}`);
|
|
237
|
+
lines.push(` ${i + 1}. ${rule}`);
|
|
238
238
|
});
|
|
239
239
|
|
|
240
240
|
lines.push('============================================================');
|
|
@@ -366,7 +366,12 @@ function formatSummary(results, _metrics) {
|
|
|
366
366
|
for (const result of results) {
|
|
367
367
|
if (!result || !result.rules || result.rules.length === 0) continue;
|
|
368
368
|
const meta = result.metadata || {};
|
|
369
|
-
|
|
369
|
+
// Layers may report a single `source` or a list of `sources` (e.g. L1
|
|
370
|
+
// combines global + context). Accept both so the summary never says UNKNOWN.
|
|
371
|
+
const rawSource = Array.isArray(meta.sources) && meta.sources.length > 0
|
|
372
|
+
? meta.sources.join('+')
|
|
373
|
+
: (meta.source || meta.domain || 'unknown');
|
|
374
|
+
const source = String(rawSource).toUpperCase();
|
|
370
375
|
const reason = meta.activationReason || meta.reason || 'active layer';
|
|
371
376
|
lines.push(` [${source}] ${reason} (${result.rules.length} rules)`);
|
|
372
377
|
}
|
|
@@ -81,12 +81,18 @@ function resolveHookRuntime(input) {
|
|
|
81
81
|
|
|
82
82
|
/**
|
|
83
83
|
* Normalize hook output payload shape.
|
|
84
|
+
*
|
|
85
|
+
* `hookEventName` is REQUIRED by Claude Code — without it the whole payload is
|
|
86
|
+
* rejected and `additionalContext` never reaches the model.
|
|
87
|
+
*
|
|
84
88
|
* @param {string} xml
|
|
85
|
-
* @
|
|
89
|
+
* @param {string} [eventName] - Hook event name (default: 'UserPromptSubmit')
|
|
90
|
+
* @returns {{hookSpecificOutput: {hookEventName: string, additionalContext: string}}}
|
|
86
91
|
*/
|
|
87
|
-
function buildHookOutput(xml) {
|
|
92
|
+
function buildHookOutput(xml, eventName) {
|
|
88
93
|
return {
|
|
89
94
|
hookSpecificOutput: {
|
|
95
|
+
hookEventName: eventName || 'UserPromptSubmit',
|
|
90
96
|
additionalContext: xml || '',
|
|
91
97
|
},
|
|
92
98
|
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# SYNAPSE Agent Domain (L2) — Companion
|
|
2
|
+
# Fonte: agents/companion/agents/companion.md (IDENTIDADE, PERSONALIDADE, ESTILO)
|
|
3
|
+
|
|
4
|
+
COMPANION_RULE_1=Parceiro que manja — nunca guru, nunca servo. Verdade acima de validacao
|
|
5
|
+
COMPANION_RULE_2=Confrontar quando necessario; se o expert esta dispersando, avisar
|
|
6
|
+
COMPANION_RULE_3=Fundamentar em contexto real do projeto — nunca inventar para preencher lacuna
|
|
7
|
+
COMPANION_RULE_4=Opcoes numeradas quando houver mais de um caminho real
|
|
8
|
+
COMPANION_RULE_5=Ser transparente sobre o que sabe e o que nao sabe
|
|
9
|
+
COMPANION_RULE_6=Ciclo operacional: Situar > Priorizar > Executar > Documentar > Refinar
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# SYNAPSE Agent Domain (L2) — Ops
|
|
2
|
+
# Fonte: .claude/commands/AuroqOS/agents/ops.md (CRITICAL — OPS FAZ, EXPERT APROVA / LINGUAGEM)
|
|
3
|
+
|
|
4
|
+
OPS_RULE_1=O Ops FAZ sozinho sempre que possivel; o expert so aprova, loga no browser e decide
|
|
5
|
+
OPS_RULE_2=O expert e leigo em tecnologia — nunca assumir que ele sabe o que e terminal, CLI ou auth
|
|
6
|
+
OPS_RULE_3=Quando o expert precisar agir, dar receita de bolo: o que fazer, o que colar, o que vai aparecer, como saber que deu certo
|
|
7
|
+
OPS_RULE_4=Uma fase por vez; so avancar quando os checks da fase atual passarem de verdade
|
|
8
|
+
OPS_RULE_5=Detectar o sistema operacional antes de instalar e nunca misturar comandos de Mac e Windows
|
|
9
|
+
OPS_RULE_6=Nunca pedir segredo colado no chat; credencial vai para o 1Password ou para o vault local fora do git
|
|
10
|
+
OPS_RULE_7=O corpo do Bootstrap vem do MCP arcane — se a tool falhar, mostrar a mensagem e parar, nunca improvisar de memoria
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# SYNAPSE Agent Domain (L2) — Organizer
|
|
2
|
+
# Fonte: agents/organizer/agents/organizer.md (PRINCIPIOS INEGOCIAVEIS)
|
|
3
|
+
|
|
4
|
+
ORGANIZER_RULE_1=Organizacao que nao serve acao e decoracao — se nao ajuda a FAZER, nao tem valor
|
|
5
|
+
ORGANIZER_RULE_2=Quase tudo e ruido, pouquissimo e vital: filtros rigorosos sao inegociaveis
|
|
6
|
+
ORGANIZER_RULE_3=Diagnosticar antes de prescrever — nunca sugerir sem entender primeiro
|
|
7
|
+
ORGANIZER_RULE_4=Sistema previsivel que o expert USA vale mais que sistema perfeito que vira arquivo morto
|
|
8
|
+
ORGANIZER_RULE_5=NUNCA mover ou apagar sem aprovacao explicita do expert
|
|
9
|
+
ORGANIZER_RULE_6=NUNCA mexer no vault sem permissao e NUNCA modificar .auroq-core/
|
package/.synapse/context
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# SYNAPSE Context Domain (L1)
|
|
2
2
|
# Dynamic context loaded on every prompt
|
|
3
3
|
|
|
4
|
-
CONTEXT_FRAMEWORK=Auroq OS
|
|
4
|
+
CONTEXT_FRAMEWORK=Auroq OS — Sistema Operacional de IA para Experts
|
|
5
5
|
CONTEXT_PHILOSOPHY=Pensar, Fazer e Lembrar com IA. Expert manda e julga, IA executa
|
|
6
6
|
CONTEXT_FORMULA=Repertorio + IA = Resultado
|
|
7
7
|
CONTEXT_CYCLE=Situar > Priorizar > Executar > Documentar > Refinar
|
package/.synapse/manifest
CHANGED
|
@@ -8,29 +8,21 @@ CONSTITUTION_ALWAYS_ON=true
|
|
|
8
8
|
CONSTITUTION_NON_NEGOTIABLE=true
|
|
9
9
|
|
|
10
10
|
# Global rules (L1) — always loaded
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
GLOBAL_STATE=active
|
|
12
|
+
GLOBAL_ALWAYS_ON=true
|
|
13
13
|
|
|
14
14
|
# Global context (L1) — always loaded
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
CONTEXT_STATE=active
|
|
16
|
+
CONTEXT_ALWAYS_ON=true
|
|
17
17
|
|
|
18
18
|
# Agent: Companion
|
|
19
19
|
AGENT_COMPANION_STATE=active
|
|
20
20
|
AGENT_COMPANION_AGENT_TRIGGER=companion
|
|
21
21
|
|
|
22
|
-
# Agent: Aurora (auroq-master)
|
|
23
|
-
AGENT_AUROQ_MASTER_STATE=active
|
|
24
|
-
AGENT_AUROQ_MASTER_AGENT_TRIGGER=auroq-master
|
|
25
|
-
|
|
26
22
|
# Agent: Ops
|
|
27
23
|
AGENT_OPS_STATE=active
|
|
28
24
|
AGENT_OPS_AGENT_TRIGGER=ops
|
|
29
25
|
|
|
30
|
-
# Agent: Atlas (analyst)
|
|
31
|
-
AGENT_ANALYST_STATE=active
|
|
32
|
-
AGENT_ANALYST_AGENT_TRIGGER=analyst
|
|
33
|
-
|
|
34
26
|
# Agent: Organizer
|
|
35
27
|
AGENT_ORGANIZER_STATE=active
|
|
36
28
|
AGENT_ORGANIZER_AGENT_TRIGGER=organizer
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# SYNAPSE Squad Domain (L5) — Clone Forge
|
|
2
|
+
# Fonte: agents/clone-forge/README.md (pipeline, quality gates)
|
|
3
|
+
|
|
4
|
+
CLONE_FORGE_RULE_1=Clonagem cognitiva preserva voz, heuristicas e estilo de decisao do expert — fidelidade acima de fluencia
|
|
5
|
+
CLONE_FORGE_RULE_2=Seguir as fases do pipeline em ordem, respeitando os quality gates de cada uma
|
|
6
|
+
CLONE_FORGE_RULE_3=Modo completo tem 11 fases e modo rapido tem 5 — nunca misturar nem pular fase sem declarar
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# SYNAPSE Squad Domain (L5) — ETLmaker
|
|
2
|
+
# Fonte: agents/etlmaker/skill.md (activation-instructions)
|
|
3
|
+
|
|
4
|
+
ETLMAKER_RULE_1=SEMPRE responder em portugues brasileiro, casual e direto
|
|
5
|
+
ETLMAKER_RULE_2=Ao executar tasks de dependencias, seguir as instrucoes da task exatamente
|
|
6
|
+
ETLMAKER_RULE_3=Tasks com elicit=true exigem interacao real do expert — nunca preencher por ele
|
|
7
|
+
ETLMAKER_RULE_4=Carregar arquivo de dependencia apenas quando o expert pedir a execucao do comando
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# SYNAPSE Squad Domain (L5) — Mind Forge
|
|
2
|
+
# Fonte: agents/mind-forge/skill.md
|
|
3
|
+
|
|
4
|
+
MIND_FORGE_RULE_1=Fabrica de mentes sinteticas e consultores — adotar a persona de forge-chief antes de agir
|
|
5
|
+
MIND_FORGE_RULE_2=A persona e a task de start sao a unica fonte de verdade; seguir exatamente como escritas
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# SYNAPSE Squad Domain (L5) — Squad Forge
|
|
2
|
+
# Fonte: agents/squad-forge/README.md (pipeline, modos, hard gates)
|
|
3
|
+
|
|
4
|
+
SQUAD_FORGE_RULE_1=Extracao profunda com 8 lentes iterativas antes de montar qualquer squad
|
|
5
|
+
SQUAD_FORGE_RULE_2=Playback validation obrigatorio: devolver o processo entendido ao expert antes de construir
|
|
6
|
+
SQUAD_FORGE_RULE_3=Hard gates de profundidade — squad raso nao passa para instalacao
|
|
7
|
+
SQUAD_FORGE_RULE_4=Seguir o pipeline em ordem: Setup > Extracao > Playback > Arquitetura > Montagem > Validacao e Instalacao
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# SYNAPSE Squad Domain (L5) — Worker Forge
|
|
2
|
+
# Fonte: agents/worker-forge/skill.md
|
|
3
|
+
|
|
4
|
+
WORKER_FORGE_RULE_1=Transforma descricao de cargo em worker operacional com KB viva que cresce a cada missao
|
|
5
|
+
WORKER_FORGE_RULE_2=Adotar a persona de worker-chief e seguir a task de start exatamente como escritas
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,47 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.4.10] — 2026-09-02
|
|
4
|
+
|
|
5
|
+
### O Synapse voltou a existir
|
|
6
|
+
Um aluno reportou o aviso `UserPromptSubmit hook error`. A auditoria mostrou que o
|
|
7
|
+
aviso era so o sintoma: o Synapse — a camada que reforca as regras do sistema e do
|
|
8
|
+
agente ativo a cada mensagem — nunca funcionou em nenhuma versao publicada. Eram tres
|
|
9
|
+
falhas em serie.
|
|
10
|
+
|
|
11
|
+
- **O pacote de regras ia sem etiqueta.** Faltava o campo `hookEventName`, obrigatorio,
|
|
12
|
+
e o Claude Code recusava o payload inteiro. Nada chegava ao modelo — a conta era zero,
|
|
13
|
+
nao parcial.
|
|
14
|
+
- **O motor nunca lia o proprio indice.** A engine so usava o manifesto se o chamador
|
|
15
|
+
passasse um, e o hook nunca passou. Com indice vazio, as camadas de agente (L2) e de
|
|
16
|
+
squad (L5) nao resolviam o dominio e produziam zero regras. Sobravam a Constituicao e
|
|
17
|
+
as regras globais, essas por acaso — tinham caminho fixo no codigo.
|
|
18
|
+
- **O indice apontava para o vazio.** 12 dos 13 dominios declarados nao tinham arquivo,
|
|
19
|
+
com nomes descasados dos que existem em disco, mais dois agentes fantasma
|
|
20
|
+
(`auroq-master`, `analyst`) que nao existem no Auroq OS.
|
|
21
|
+
|
|
22
|
+
Agora o indice bate com a realidade (11/11 no diagnostico, era 1/13) e os dominios dos
|
|
23
|
+
tres agentes core e dos cinco meta-squads existem, escritos a partir dos principios que
|
|
24
|
+
ja estavam dentro de cada agente. O resumo tambem parou de rotular tudo como `[UNKNOWN]`.
|
|
25
|
+
|
|
26
|
+
### O Bootstrap 2 parou de cobrar caro pelo Google Drive
|
|
27
|
+
O passo se chamava "Google Drive conectado" e nao conectava conector nenhum: instalava o
|
|
28
|
+
rclone, que serve a UMA funcao (o `*backup` do Organizer). O aluno passava pelo pedaco
|
|
29
|
+
mais chato da instalacao — terminal separado, configuracao interativa — achando que tinha
|
|
30
|
+
ganhado Drive no dia a dia, e nao tinha.
|
|
31
|
+
|
|
32
|
+
- **Conector oficial virou o padrao.** Clique no navegador, resolve ler, criar, buscar e
|
|
33
|
+
compartilhar arquivo. E agora o Ops pergunta com qual conta Google conectar, em vez de
|
|
34
|
+
pegar a que estiver logada no navegador.
|
|
35
|
+
- **rclone virou opcional declarado**, oferecido so a quem quer espelhar pastas inteiras,
|
|
36
|
+
baixar arquivo grande que o conector recusa ou conferir integridade do backup.
|
|
37
|
+
- **O `*health` parou de contar rclone como pendencia.** Quem nao tem esta correto.
|
|
38
|
+
|
|
39
|
+
### O aviso de "saiu versao nova" que nunca calava
|
|
40
|
+
`core-config.yaml` estava congelado em 2.4.3 desde a 2.4.7. Como o hook de sync compara
|
|
41
|
+
essa versao com a do npm, todo aluno ja atualizado via o aviso de versao nova todo dia,
|
|
42
|
+
para sempre — e alguns reinstalavam por causa disso. O `prepack` agora sincroniza a
|
|
43
|
+
versao sozinho, entao nao desatualiza de novo.
|
|
44
|
+
|
|
3
45
|
## [2.4.9] — 2026-09-01
|
|
4
46
|
|
|
5
47
|
### Salvar nunca mais leva junto o trabalho de outra conversa
|
package/package.json
CHANGED
|
@@ -44,4 +44,23 @@ for (const src of files) {
|
|
|
44
44
|
fs.copyFileSync(src, dest);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
// O hook auroq-sync compara a versao lida de .auroq-core/core-config.yaml com a
|
|
48
|
+
// do npm para avisar de update. Se o core-config ficar para tras, TODO aluno ja
|
|
49
|
+
// atualizado ve "saiu versao nova" para sempre. Sincroniza no pack.
|
|
50
|
+
const pkgVersion = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8')).version;
|
|
51
|
+
const cfgPath = path.join(root, '.auroq-core', 'core-config.yaml');
|
|
52
|
+
if (fs.existsSync(cfgPath)) {
|
|
53
|
+
const cfg = fs.readFileSync(cfgPath, 'utf8');
|
|
54
|
+
const synced = cfg.replace(/^(\s*version:\s*)["']?\d+\.\d+\.\d+["']?/m, `$1${pkgVersion}`);
|
|
55
|
+
if (synced !== cfg) {
|
|
56
|
+
const bak = path.join(backupRoot, '.auroq-core', 'core-config.yaml');
|
|
57
|
+
if (!fs.existsSync(bak)) {
|
|
58
|
+
fs.mkdirSync(path.dirname(bak), { recursive: true });
|
|
59
|
+
fs.copyFileSync(cfgPath, bak);
|
|
60
|
+
}
|
|
61
|
+
fs.writeFileSync(cfgPath, synced);
|
|
62
|
+
console.log(`prepack-casca: core-config.yaml sincronizado para ${pkgVersion}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
47
66
|
console.log(`prepack-casca: ${files.length} arquivos sobrepostos`);
|