sinapse-ai 7.6.0 → 7.7.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/.claude/hooks/secret-scanning.cjs +155 -0
- package/.claude/rules/cross-squad-routing.md +47 -0
- package/.claude/rules/hook-governance.md +61 -0
- package/.claude/rules/security-scanning.md +42 -0
- package/.sinapse-ai/cli/commands/health/index.js +237 -0
- package/.sinapse-ai/cli/commands/performance/index.js +157 -0
- package/.sinapse-ai/cli/commands/routing-intel/index.js +176 -0
- package/.sinapse-ai/install-manifest.yaml +15 -3
- package/bin/sinapse.js +34 -0
- package/package.json +1 -1
- package/packages/installer/src/wizard/ide-config-generator.js +33 -1
- package/squads/squad-claude/agents/swarm-orqx.md +28 -0
- package/squads/squad-claude/preferences/README.md +15 -0
- package/squads/squad-claude/squad.yaml +13 -0
- package/squads/squad-commercial/agents/commercial-orqx.md +44 -3
- package/squads/squad-commercial/squad.yaml +7 -0
- package/squads/squad-council/preferences/README.md +15 -0
- package/squads/squad-council/squad.yaml +7 -0
- package/squads/squad-cybersecurity/preferences/README.md +15 -0
- package/squads/squad-cybersecurity/squad.yaml +12 -0
- package/squads/squad-finance/preferences/README.md +15 -0
- package/squads/squad-growth/agents/growth-orqx.md +30 -0
- package/squads/squad-growth/squad.yaml +7 -0
- package/squads/squad-paidmedia/preferences/README.md +15 -0
- package/squads/squad-product/squad.yaml +7 -0
- package/squads/squad-storytelling/preferences/README.md +15 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* sinapse performance — Squad & Agent Performance Ranking
|
|
6
|
+
*
|
|
7
|
+
* Analyzes squad and agent completeness, ranking by:
|
|
8
|
+
* - Asset coverage (agents, tasks, KBs, workflows, templates, checklists)
|
|
9
|
+
* - Metadata completeness
|
|
10
|
+
* - Preferences tracking
|
|
11
|
+
* - Orchestrator enrichment level
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* sinapse performance # Full ranking
|
|
15
|
+
* sinapse performance --json # JSON output
|
|
16
|
+
* sinapse performance --top 5 # Top 5 only
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const fs = require('fs');
|
|
20
|
+
const path = require('path');
|
|
21
|
+
|
|
22
|
+
function findProjectRoot() {
|
|
23
|
+
let dir = process.cwd();
|
|
24
|
+
while (dir !== path.dirname(dir)) {
|
|
25
|
+
if (fs.existsSync(path.join(dir, '.sinapse-ai'))) return dir;
|
|
26
|
+
dir = path.dirname(dir);
|
|
27
|
+
}
|
|
28
|
+
return process.cwd();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function analyzeSquad(squadDir, squadName) {
|
|
32
|
+
const result = {
|
|
33
|
+
name: squadName,
|
|
34
|
+
agents: 0,
|
|
35
|
+
tasks: 0,
|
|
36
|
+
kbs: 0,
|
|
37
|
+
workflows: 0,
|
|
38
|
+
templates: 0,
|
|
39
|
+
checklists: 0,
|
|
40
|
+
hasMetadata: false,
|
|
41
|
+
hasPreferences: false,
|
|
42
|
+
orchestratorLines: 0,
|
|
43
|
+
score: 0,
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// Count assets
|
|
47
|
+
const countMd = (subdir) => {
|
|
48
|
+
const dir = path.join(squadDir, subdir);
|
|
49
|
+
if (!fs.existsSync(dir)) return 0;
|
|
50
|
+
return fs.readdirSync(dir).filter((f) => f.endsWith('.md')).length;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const countAny = (subdir) => {
|
|
54
|
+
const dir = path.join(squadDir, subdir);
|
|
55
|
+
if (!fs.existsSync(dir)) return 0;
|
|
56
|
+
return fs.readdirSync(dir).filter((f) => !f.startsWith('.')).length;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
result.agents = countMd('agents');
|
|
60
|
+
result.tasks = countMd('tasks');
|
|
61
|
+
// Try both naming conventions
|
|
62
|
+
result.kbs = countAny('knowledge-bases') || countAny('knowledge-base');
|
|
63
|
+
result.workflows = countAny('workflows');
|
|
64
|
+
result.templates = countMd('templates') || countAny('templates');
|
|
65
|
+
result.checklists = countMd('checklists') || countAny('checklists');
|
|
66
|
+
|
|
67
|
+
// Metadata check
|
|
68
|
+
const yamlPath = path.join(squadDir, 'squad.yaml');
|
|
69
|
+
if (fs.existsSync(yamlPath)) {
|
|
70
|
+
const content = fs.readFileSync(yamlPath, 'utf8');
|
|
71
|
+
result.hasMetadata = /agents_count|total_files/.test(content);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Preferences check
|
|
75
|
+
result.hasPreferences = fs.existsSync(path.join(squadDir, 'preferences'));
|
|
76
|
+
|
|
77
|
+
// Orchestrator enrichment
|
|
78
|
+
const orqxFile = fs.readdirSync(path.join(squadDir, 'agents')).find((f) => f.includes('-orqx'));
|
|
79
|
+
if (orqxFile) {
|
|
80
|
+
const content = fs.readFileSync(path.join(squadDir, 'agents', orqxFile), 'utf8');
|
|
81
|
+
result.orchestratorLines = content.split('\n').length;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Calculate score (weighted)
|
|
85
|
+
result.score =
|
|
86
|
+
(result.agents >= 6 ? 15 : result.agents * 2.5) +
|
|
87
|
+
(result.tasks >= 50 ? 25 : result.tasks * 0.5) +
|
|
88
|
+
(result.kbs >= 8 ? 15 : result.kbs * 1.875) +
|
|
89
|
+
(result.workflows >= 3 ? 10 : result.workflows * 3.33) +
|
|
90
|
+
(result.templates >= 3 ? 10 : result.templates * 3.33) +
|
|
91
|
+
(result.checklists >= 2 ? 5 : result.checklists * 2.5) +
|
|
92
|
+
(result.hasMetadata ? 5 : 0) +
|
|
93
|
+
(result.hasPreferences ? 5 : 0) +
|
|
94
|
+
(result.orchestratorLines >= 100 ? 10 : result.orchestratorLines * 0.1);
|
|
95
|
+
|
|
96
|
+
result.score = Math.round(result.score * 10) / 10;
|
|
97
|
+
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
async function runPerformance(options = {}) {
|
|
102
|
+
const root = findProjectRoot();
|
|
103
|
+
const squadsDir = path.join(root, 'squads');
|
|
104
|
+
|
|
105
|
+
if (!fs.existsSync(squadsDir)) {
|
|
106
|
+
console.error('No squads/ directory found.');
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const squadDirs = fs.readdirSync(squadsDir)
|
|
111
|
+
.filter((d) => d.startsWith('squad-') && fs.statSync(path.join(squadsDir, d)).isDirectory());
|
|
112
|
+
|
|
113
|
+
const rankings = squadDirs
|
|
114
|
+
.map((d) => analyzeSquad(path.join(squadsDir, d), d))
|
|
115
|
+
.sort((a, b) => b.score - a.score);
|
|
116
|
+
|
|
117
|
+
const limit = options.top || rankings.length;
|
|
118
|
+
const display = rankings.slice(0, limit);
|
|
119
|
+
|
|
120
|
+
if (options.json) {
|
|
121
|
+
console.log(JSON.stringify({ rankings: display, total: rankings.length }, null, 2));
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Pretty output
|
|
126
|
+
console.log(`\n SINAPSE Performance Ranking — ${rankings.length} Squads`);
|
|
127
|
+
console.log(` ${'═'.repeat(60)}\n`);
|
|
128
|
+
|
|
129
|
+
const maxScore = rankings[0]?.score || 100;
|
|
130
|
+
|
|
131
|
+
display.forEach((sq, i) => {
|
|
132
|
+
const rank = i + 1;
|
|
133
|
+
const barLen = Math.round((sq.score / maxScore) * 20);
|
|
134
|
+
const bar = '█'.repeat(barLen) + '░'.repeat(20 - barLen);
|
|
135
|
+
const medal = rank === 1 ? '🥇' : rank === 2 ? '🥈' : rank === 3 ? '🥉' : `#${rank}`;
|
|
136
|
+
const meta = sq.hasMetadata ? '✓' : '✗';
|
|
137
|
+
const pref = sq.hasPreferences ? '✓' : '✗';
|
|
138
|
+
|
|
139
|
+
console.log(` ${String(medal).padEnd(4)} ${sq.name.padEnd(25)} ${bar} ${sq.score.toFixed(1)}`);
|
|
140
|
+
console.log(` ${sq.agents}a ${sq.tasks}t ${sq.kbs}kb ${sq.workflows}wf ${sq.templates}tpl ${sq.checklists}ck | meta:${meta} pref:${pref} orqx:${sq.orchestratorLines}L`);
|
|
141
|
+
console.log('');
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
module.exports = { runPerformance };
|
|
146
|
+
|
|
147
|
+
if (require.main === module) {
|
|
148
|
+
const args = process.argv.slice(2);
|
|
149
|
+
const topIdx = args.indexOf('--top');
|
|
150
|
+
runPerformance({
|
|
151
|
+
json: args.includes('--json'),
|
|
152
|
+
top: topIdx >= 0 ? parseInt(args[topIdx + 1], 10) : undefined,
|
|
153
|
+
}).catch((err) => {
|
|
154
|
+
console.error(`Error: ${err.message}`);
|
|
155
|
+
process.exit(1);
|
|
156
|
+
});
|
|
157
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* sinapse routing-intel — Routing Intelligence Analyzer
|
|
6
|
+
*
|
|
7
|
+
* Analyzes the routing configuration across all orchestrators:
|
|
8
|
+
* - Delegation matrix completeness
|
|
9
|
+
* - Cross-squad handoff coverage
|
|
10
|
+
* - Routing pattern conflicts
|
|
11
|
+
* - Agent reachability (can every agent be reached via routing?)
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* sinapse routing-intel # Full routing analysis
|
|
15
|
+
* sinapse routing-intel analyze # Deep analysis with recommendations
|
|
16
|
+
* sinapse routing-intel --json # JSON output
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const fs = require('fs');
|
|
20
|
+
const path = require('path');
|
|
21
|
+
|
|
22
|
+
function findProjectRoot() {
|
|
23
|
+
let dir = process.cwd();
|
|
24
|
+
while (dir !== path.dirname(dir)) {
|
|
25
|
+
if (fs.existsSync(path.join(dir, '.sinapse-ai'))) return dir;
|
|
26
|
+
dir = path.dirname(dir);
|
|
27
|
+
}
|
|
28
|
+
return process.cwd();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function extractDelegation(content) {
|
|
32
|
+
const delegations = [];
|
|
33
|
+
// Match delegation tables: | pattern | agent |
|
|
34
|
+
const tableRows = content.match(/\|[^|]+\|[^|]+\|/g) || [];
|
|
35
|
+
for (const row of tableRows) {
|
|
36
|
+
const cells = row.split('|').map((c) => c.trim()).filter(Boolean);
|
|
37
|
+
if (cells.length >= 2 && cells[1].startsWith('@')) {
|
|
38
|
+
delegations.push({ pattern: cells[0], target: cells[1] });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Match inline delegations: → @agent, delegate to @agent
|
|
43
|
+
const inlineMatches = content.match(/(?:→|delegate to|route to)\s+@([\w-]+)/gi) || [];
|
|
44
|
+
for (const match of inlineMatches) {
|
|
45
|
+
const agentMatch = match.match(/@([\w-]+)/);
|
|
46
|
+
if (agentMatch) delegations.push({ pattern: 'inline', target: `@${agentMatch[1]}` });
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return delegations;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function extractHandoffs(content) {
|
|
53
|
+
const handoffs = { inbound: [], outbound: [] };
|
|
54
|
+
|
|
55
|
+
// Look for inbound/outbound sections
|
|
56
|
+
const inboundMatch = content.match(/###?\s*Inbound[\s\S]*?(?=###?\s*Outbound|###?\s*[A-Z]|$)/i);
|
|
57
|
+
if (inboundMatch) {
|
|
58
|
+
const squads = inboundMatch[0].match(/@[\w-]+|squad-[\w-]+/g) || [];
|
|
59
|
+
handoffs.inbound = [...new Set(squads)];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const outboundMatch = content.match(/###?\s*Outbound[\s\S]*?(?=###?\s*[A-Z]|##\s|$)/i);
|
|
63
|
+
if (outboundMatch) {
|
|
64
|
+
const squads = outboundMatch[0].match(/@[\w-]+|squad-[\w-]+/g) || [];
|
|
65
|
+
handoffs.outbound = [...new Set(squads)];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return handoffs;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async function runRoutingIntel(options = {}) {
|
|
72
|
+
const root = findProjectRoot();
|
|
73
|
+
const squadsDir = path.join(root, 'squads');
|
|
74
|
+
|
|
75
|
+
if (!fs.existsSync(squadsDir)) {
|
|
76
|
+
console.error('No squads/ directory found.');
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const squadDirs = fs.readdirSync(squadsDir)
|
|
81
|
+
.filter((d) => d.startsWith('squad-') && fs.statSync(path.join(squadsDir, d)).isDirectory());
|
|
82
|
+
|
|
83
|
+
const routingMap = [];
|
|
84
|
+
const allAgents = new Set();
|
|
85
|
+
const reachableAgents = new Set();
|
|
86
|
+
|
|
87
|
+
for (const squad of squadDirs) {
|
|
88
|
+
const agentsDir = path.join(squadsDir, squad, 'agents');
|
|
89
|
+
if (!fs.existsSync(agentsDir)) continue;
|
|
90
|
+
|
|
91
|
+
const agentFiles = fs.readdirSync(agentsDir).filter((f) => f.endsWith('.md'));
|
|
92
|
+
for (const file of agentFiles) {
|
|
93
|
+
const agentId = file.replace('.md', '');
|
|
94
|
+
allAgents.add(agentId);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Find orchestrator
|
|
98
|
+
const orqxFile = agentFiles.find((f) => f.includes('-orqx'));
|
|
99
|
+
if (!orqxFile) continue;
|
|
100
|
+
|
|
101
|
+
const content = fs.readFileSync(path.join(agentsDir, orqxFile), 'utf8');
|
|
102
|
+
const delegations = extractDelegation(content);
|
|
103
|
+
const handoffs = extractHandoffs(content);
|
|
104
|
+
|
|
105
|
+
// Mark delegated agents as reachable
|
|
106
|
+
for (const d of delegations) {
|
|
107
|
+
const target = d.target.replace('@', '');
|
|
108
|
+
reachableAgents.add(target);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
routingMap.push({
|
|
112
|
+
squad,
|
|
113
|
+
orchestrator: orqxFile.replace('.md', ''),
|
|
114
|
+
delegations: delegations.length,
|
|
115
|
+
handoffs,
|
|
116
|
+
hasRoutingIntel: /routing intelligence|routing table/i.test(content),
|
|
117
|
+
hasDelegationMatrix: /delegation matrix|delegation|delegacao/i.test(content),
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Find unreachable agents (not in any delegation)
|
|
122
|
+
const unreachable = [...allAgents].filter((a) => !reachableAgents.has(a) && !a.includes('-orqx'));
|
|
123
|
+
|
|
124
|
+
if (options.json) {
|
|
125
|
+
console.log(JSON.stringify({
|
|
126
|
+
squads: routingMap,
|
|
127
|
+
totalAgents: allAgents.size,
|
|
128
|
+
reachableAgents: reachableAgents.size,
|
|
129
|
+
unreachableAgents: unreachable,
|
|
130
|
+
coverage: Math.round((reachableAgents.size / allAgents.size) * 100),
|
|
131
|
+
}, null, 2));
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Pretty output
|
|
136
|
+
console.log(`\n SINAPSE Routing Intelligence Report`);
|
|
137
|
+
console.log(` ${'═'.repeat(55)}\n`);
|
|
138
|
+
|
|
139
|
+
console.log(` Agents: ${allAgents.size} total | ${reachableAgents.size} reachable | ${unreachable.length} unreachable`);
|
|
140
|
+
console.log(` Coverage: ${Math.round((reachableAgents.size / allAgents.size) * 100)}%\n`);
|
|
141
|
+
|
|
142
|
+
console.log(` Squad Routing Matrix:`);
|
|
143
|
+
console.log(` ${'─'.repeat(55)}`);
|
|
144
|
+
|
|
145
|
+
for (const entry of routingMap) {
|
|
146
|
+
const routing = entry.hasRoutingIntel ? '✓' : '✗';
|
|
147
|
+
const deleg = entry.hasDelegationMatrix ? '✓' : '✗';
|
|
148
|
+
const inCount = entry.handoffs.inbound.length;
|
|
149
|
+
const outCount = entry.handoffs.outbound.length;
|
|
150
|
+
|
|
151
|
+
console.log(` ${entry.squad.padEnd(25)} ${entry.delegations}d | in:${inCount} out:${outCount} | routing:${routing} deleg:${deleg}`);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (options.analyze && unreachable.length > 0) {
|
|
155
|
+
console.log(`\n Unreachable Agents (${unreachable.length}):`);
|
|
156
|
+
for (const agent of unreachable.slice(0, 15)) {
|
|
157
|
+
console.log(` ⚠ ${agent}`);
|
|
158
|
+
}
|
|
159
|
+
if (unreachable.length > 15) console.log(` ... and ${unreachable.length - 15} more`);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
console.log('');
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
module.exports = { runRoutingIntel };
|
|
166
|
+
|
|
167
|
+
if (require.main === module) {
|
|
168
|
+
const args = process.argv.slice(2);
|
|
169
|
+
runRoutingIntel({
|
|
170
|
+
json: args.includes('--json'),
|
|
171
|
+
analyze: args.includes('analyze'),
|
|
172
|
+
}).catch((err) => {
|
|
173
|
+
console.error(`Error: ${err.message}`);
|
|
174
|
+
process.exit(1);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
# - SHA256 hashes for change detection
|
|
8
8
|
# - File types for categorization
|
|
9
9
|
#
|
|
10
|
-
version: 7.
|
|
11
|
-
generated_at: "2026-04-
|
|
10
|
+
version: 7.7.1
|
|
11
|
+
generated_at: "2026-04-01T21:15:14.671Z"
|
|
12
12
|
generator: scripts/generate-install-manifest.js
|
|
13
|
-
file_count:
|
|
13
|
+
file_count: 1107
|
|
14
14
|
files:
|
|
15
15
|
- path: cli/commands/config/index.js
|
|
16
16
|
hash: sha256:66f111eceef0f60fa0a8904add783b615d55b01d5fe36408623c3dd828e702f6
|
|
@@ -20,6 +20,10 @@ files:
|
|
|
20
20
|
hash: sha256:36f8e38ab767fa5478d8dabac548c66dc2c0fc521c216e954ac33fcea0ba597b
|
|
21
21
|
type: cli
|
|
22
22
|
size: 6720
|
|
23
|
+
- path: cli/commands/health/index.js
|
|
24
|
+
hash: sha256:7140286f6f0fcd283dcc0a6261dfe914ee50aae5c97ddd9e548ffa6a3279fe1e
|
|
25
|
+
type: cli
|
|
26
|
+
size: 8579
|
|
23
27
|
- path: cli/commands/manifest/index.js
|
|
24
28
|
hash: sha256:440df152d1be0d1700551206b512e47ce38ef1f6244eecebdf7df74888976250
|
|
25
29
|
type: cli
|
|
@@ -100,6 +104,10 @@ files:
|
|
|
100
104
|
hash: sha256:5f7ac17e3fd47ff9d3d4544f67b28f44b821097e0ce5eb2059e8550c0f54e4e1
|
|
101
105
|
type: cli
|
|
102
106
|
size: 12355
|
|
107
|
+
- path: cli/commands/performance/index.js
|
|
108
|
+
hash: sha256:aa2f14a846ff7301d9694fd1e50897e559b3c437d2eccb07e4f2ad21f9921c9c
|
|
109
|
+
type: cli
|
|
110
|
+
size: 5039
|
|
103
111
|
- path: cli/commands/pro/index.js
|
|
104
112
|
hash: sha256:be706f637b3f54d882a8e1d3ee953a40c7ae7b94ca3bfcafdd4d6865d0526964
|
|
105
113
|
type: cli
|
|
@@ -116,6 +124,10 @@ files:
|
|
|
116
124
|
hash: sha256:bc993858504617a233ce191ab44a438f675605022e43375d282f589a734b6c64
|
|
117
125
|
type: cli
|
|
118
126
|
size: 5320
|
|
127
|
+
- path: cli/commands/routing-intel/index.js
|
|
128
|
+
hash: sha256:f13824f426e7a2091024a20ecad0299d75abd46881bd0226b86a9207e6ecf3fa
|
|
129
|
+
type: cli
|
|
130
|
+
size: 5761
|
|
119
131
|
- path: cli/commands/validate/index.js
|
|
120
132
|
hash: sha256:93c39b64cd1a234ce848843c0a9b291a1f85f142e77485e281ebc0e7344afea2
|
|
121
133
|
type: cli
|
package/bin/sinapse.js
CHANGED
|
@@ -1077,6 +1077,40 @@ async function main() {
|
|
|
1077
1077
|
showHelp();
|
|
1078
1078
|
break;
|
|
1079
1079
|
|
|
1080
|
+
case 'health': {
|
|
1081
|
+
// Framework health analytics
|
|
1082
|
+
const { runHealth } = require('../.sinapse-ai/cli/commands/health/index.js');
|
|
1083
|
+
const healthArgs = args.slice(1);
|
|
1084
|
+
await runHealth({
|
|
1085
|
+
json: healthArgs.includes('--json'),
|
|
1086
|
+
fix: healthArgs.includes('--fix'),
|
|
1087
|
+
});
|
|
1088
|
+
break;
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
case 'performance': {
|
|
1092
|
+
// Squad & agent performance ranking
|
|
1093
|
+
const { runPerformance } = require('../.sinapse-ai/cli/commands/performance/index.js');
|
|
1094
|
+
const perfArgs = args.slice(1);
|
|
1095
|
+
const topIdx = perfArgs.indexOf('--top');
|
|
1096
|
+
await runPerformance({
|
|
1097
|
+
json: perfArgs.includes('--json'),
|
|
1098
|
+
top: topIdx >= 0 ? parseInt(perfArgs[topIdx + 1], 10) : undefined,
|
|
1099
|
+
});
|
|
1100
|
+
break;
|
|
1101
|
+
}
|
|
1102
|
+
|
|
1103
|
+
case 'routing-intel': {
|
|
1104
|
+
// Routing intelligence analyzer
|
|
1105
|
+
const { runRoutingIntel } = require('../.sinapse-ai/cli/commands/routing-intel/index.js');
|
|
1106
|
+
const riArgs = args.slice(1);
|
|
1107
|
+
await runRoutingIntel({
|
|
1108
|
+
json: riArgs.includes('--json'),
|
|
1109
|
+
analyze: riArgs.includes('analyze'),
|
|
1110
|
+
});
|
|
1111
|
+
break;
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1080
1114
|
case undefined:
|
|
1081
1115
|
// No arguments - launch Claude Code with SINAPSE branding
|
|
1082
1116
|
launchSinapse([]);
|
package/package.json
CHANGED
|
@@ -676,11 +676,17 @@ async function copyClaudeHooksFolder(projectRoot) {
|
|
|
676
676
|
|
|
677
677
|
await fs.ensureDir(targetDir);
|
|
678
678
|
|
|
679
|
-
//
|
|
679
|
+
// Copy CJS hooks that work standalone (no Python/shell deps)
|
|
680
680
|
const HOOKS_TO_COPY = [
|
|
681
681
|
'synapse-engine.cjs',
|
|
682
682
|
'code-intel-pretool.cjs',
|
|
683
683
|
'precompact-session-digest.cjs',
|
|
684
|
+
// v7.6.0 Constitutional enforcement hooks
|
|
685
|
+
'enforce-architecture-first.cjs',
|
|
686
|
+
'enforce-delegation.cjs',
|
|
687
|
+
'enforce-story-gate.cjs',
|
|
688
|
+
'secret-scanning.cjs',
|
|
689
|
+
'write-path-validation.cjs',
|
|
684
690
|
'README.md',
|
|
685
691
|
];
|
|
686
692
|
|
|
@@ -728,6 +734,32 @@ const HOOK_EVENT_MAP = {
|
|
|
728
734
|
matcher: null,
|
|
729
735
|
timeout: 10,
|
|
730
736
|
},
|
|
737
|
+
// v7.6.0 Constitutional enforcement hooks
|
|
738
|
+
'enforce-architecture-first.cjs': {
|
|
739
|
+
event: 'PreToolUse',
|
|
740
|
+
matcher: 'Write|Edit',
|
|
741
|
+
timeout: 5,
|
|
742
|
+
},
|
|
743
|
+
'enforce-story-gate.cjs': {
|
|
744
|
+
event: 'PreToolUse',
|
|
745
|
+
matcher: 'Write|Edit',
|
|
746
|
+
timeout: 5,
|
|
747
|
+
},
|
|
748
|
+
'write-path-validation.cjs': {
|
|
749
|
+
event: 'PreToolUse',
|
|
750
|
+
matcher: 'Write|Edit',
|
|
751
|
+
timeout: 5,
|
|
752
|
+
},
|
|
753
|
+
'enforce-delegation.cjs': {
|
|
754
|
+
event: 'PreToolUse',
|
|
755
|
+
matcher: 'Write|Edit|Bash',
|
|
756
|
+
timeout: 5,
|
|
757
|
+
},
|
|
758
|
+
'secret-scanning.cjs': {
|
|
759
|
+
event: 'PreToolUse',
|
|
760
|
+
matcher: 'Write|Edit',
|
|
761
|
+
timeout: 5,
|
|
762
|
+
},
|
|
731
763
|
};
|
|
732
764
|
|
|
733
765
|
/** Default event config for unmapped hooks (backwards compatible). */
|
|
@@ -68,3 +68,31 @@ Strategic and systems-oriented. Swarm thinks in terms of parallelism, isolation
|
|
|
68
68
|
| **Inbound** | Any squad | When multi-agent orchestration is needed |
|
|
69
69
|
| **Outbound** | squad-dev | When agent implementation patterns need coding |
|
|
70
70
|
| **Outbound** | squad-devops | When worktree branches need merge/deploy coordination |
|
|
71
|
+
|
|
72
|
+
## Activation Instructions
|
|
73
|
+
|
|
74
|
+
1. Read this file completely
|
|
75
|
+
2. Adopt the Swarm persona — systems-oriented, parallelism-focused
|
|
76
|
+
3. Greet user with: "🐝 Swarm — Multi-Agent Orchestrator activated. Can this be parallelized?"
|
|
77
|
+
4. Await user input
|
|
78
|
+
|
|
79
|
+
## Available Workflows
|
|
80
|
+
|
|
81
|
+
| Workflow | Description | Agents Involved |
|
|
82
|
+
|----------|-------------|-----------------|
|
|
83
|
+
| `team-formation` | Design and spawn a multi-agent team | Swarm + target agents |
|
|
84
|
+
| `parallel-sprint` | Decompose and execute tasks in parallel | Swarm + worker agents |
|
|
85
|
+
| `worktree-isolation` | Setup isolated git worktrees for parallel work | Swarm + devops |
|
|
86
|
+
|
|
87
|
+
## Routing Intelligence
|
|
88
|
+
|
|
89
|
+
| Request Pattern | Route To | Confidence |
|
|
90
|
+
|----------------|----------|------------|
|
|
91
|
+
| "team", "agents", "parallel", "swarm" | Handle directly | High |
|
|
92
|
+
| "worktree", "branch isolation", "parallel branches" | Handle directly | High |
|
|
93
|
+
| "hooks", "PreToolUse", "PostToolUse" | @hooks-architect | High |
|
|
94
|
+
| "MCP", "server", "tool integration" | @mcp-integrator | High |
|
|
95
|
+
| "config", "settings.json", "rules" | @config-engineer | High |
|
|
96
|
+
| "skill", "slash command", "workflow" | @skill-craftsman | High |
|
|
97
|
+
| "project setup", "install", "brownfield" | @project-integrator | High |
|
|
98
|
+
| "roadmap", "tracking", "changelog" | @roadmap-sentinel | High |
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Preferences Directory
|
|
2
|
+
|
|
3
|
+
> Diretorio para logs de preferencias por projeto/cliente.
|
|
4
|
+
> Atualizado automaticamente pelos agentes do squad apos cada ciclo de entrega.
|
|
5
|
+
|
|
6
|
+
## Como usar
|
|
7
|
+
|
|
8
|
+
1. Para cada novo projeto, criar `{projeto}-preferences.md`
|
|
9
|
+
2. Agentes consultam antes de iniciar nova entrega
|
|
10
|
+
3. Atualizar apos cada ciclo de aprovacao
|
|
11
|
+
|
|
12
|
+
## Arquivos
|
|
13
|
+
|
|
14
|
+
- `README.md` — Este arquivo
|
|
15
|
+
- `{projeto}-preferences.md` — Um arquivo por projeto ativo
|
|
@@ -3,6 +3,19 @@ version: "1.0.0"
|
|
|
3
3
|
short-title: "Claude Code Mastery Squad"
|
|
4
4
|
description: "Squad especialista em Claude Code: hooks, MCP servers, subagents, skills, configuracao, context engineering, integracao de projetos e roadmap tracking."
|
|
5
5
|
slashPrefix: SINAPSE
|
|
6
|
+
|
|
7
|
+
metadata:
|
|
8
|
+
created_at: "2026-03-16"
|
|
9
|
+
updated_at: "2026-04-01"
|
|
10
|
+
created_by: "squad-creator (Craft)"
|
|
11
|
+
agents_count: 10
|
|
12
|
+
tasks_count: 49
|
|
13
|
+
knowledge_bases_count: 5
|
|
14
|
+
workflows_count: 2
|
|
15
|
+
templates_count: 0
|
|
16
|
+
checklists_count: 0
|
|
17
|
+
quality_target: "5.0/5.0 em todas as dimensoes"
|
|
18
|
+
|
|
6
19
|
tags: [claude-code, hooks, mcp, subagents, skills, context-engineering, configuration]
|
|
7
20
|
components:
|
|
8
21
|
agents: [claude-orqx.md, hooks-architect.md, mcp-integrator.md, swarm-orqx.md, config-engineer.md, skill-craftsman.md, project-integrator.md, roadmap-sentinel.md]
|
|
@@ -41,7 +41,48 @@ Revenue Cycle Orchestrator — coordena o sistema comercial completo, desde dema
|
|
|
41
41
|
7. manage-pipeline-forecast
|
|
42
42
|
8. conduct-commercial-retrospective
|
|
43
43
|
|
|
44
|
+
## Activation Instructions
|
|
45
|
+
|
|
46
|
+
1. Read this file completely
|
|
47
|
+
2. Adopt the Pipeline persona — strategic, results-oriented, data-driven
|
|
48
|
+
3. Greet user with: "🚀 Pipeline — Revenue Cycle Orchestrator activated. Revenue previsivel nao e sorte — e engenharia de sistema."
|
|
49
|
+
4. Await user input
|
|
50
|
+
|
|
51
|
+
## Available Workflows
|
|
52
|
+
|
|
53
|
+
| Workflow | Description | Agents Involved |
|
|
54
|
+
|----------|-------------|-----------------|
|
|
55
|
+
| `greenfield-commercial-system` | Build commercial system from scratch | All 11 agents |
|
|
56
|
+
| `pipeline-optimization` | Optimize existing pipeline metrics | Vault, Cascade, Ledger |
|
|
57
|
+
| `deal-acceleration` | Accelerate specific deals through pipeline | Edge, Mint, Bond |
|
|
58
|
+
| `quarterly-review` | Full commercial performance review | Pipeline + all agents |
|
|
59
|
+
| `client-expansion` | Expand existing accounts | Bond, Mint, Edge |
|
|
60
|
+
| `forecast-calibration` | Calibrate revenue forecasts | Ledger, Vault, Pipeline |
|
|
61
|
+
|
|
62
|
+
## Routing Intelligence
|
|
63
|
+
|
|
64
|
+
| Request Pattern | Route To | Confidence |
|
|
65
|
+
|----------------|----------|------------|
|
|
66
|
+
| "CRM", "Hubspot", "Salesforce", "leads" | @vault (CRM Ops) | High |
|
|
67
|
+
| "funnel", "pipeline stages", "conversion" | @cascade (Funnel Architect) | High |
|
|
68
|
+
| "pricing", "offer", "proposal" | @mint (Offer Designer) | High |
|
|
69
|
+
| "revenue", "forecast", "MRR", "ARR" | @ledger (Revenue Analytics) | High |
|
|
70
|
+
| "onboarding", "churn", "NPS", "retention" | @bond (Client Success) | High |
|
|
71
|
+
| "sales methodology", "SPIN", "discovery" | @edge (Sales Method) | High |
|
|
72
|
+
| "outbound", "prospecting", "cold email" | @outreach (Outbound) | High |
|
|
73
|
+
| "social selling", "LinkedIn selling" | @signal-commercial (Social Selling) | High |
|
|
74
|
+
| "competitive analysis", "win/loss" | @scout (Competitive Intel) | Medium |
|
|
75
|
+
|
|
44
76
|
## Cross-Squad Handoffs
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
-
|
|
77
|
+
|
|
78
|
+
### Inbound
|
|
79
|
+
- **@growth-orqx:** Pipeline data, attribution, lead scoring
|
|
80
|
+
- **@content-orqx:** Funnel content, case studies, collateral
|
|
81
|
+
- **@copy-orqx:** Sales copy, email sequences, proposals
|
|
82
|
+
- **@brand-orqx:** Brand guidelines for commercial materials
|
|
83
|
+
|
|
84
|
+
### Outbound
|
|
85
|
+
- **@product-orqx:** Client feedback, feature requests, adoption data
|
|
86
|
+
- **@finance-orqx:** Revenue data, forecasts, pricing validation
|
|
87
|
+
- **@growth-orqx:** Conversion data, campaign attribution
|
|
88
|
+
- **@sinapse-orqx:** Cross-squad coordination, escalations
|
|
@@ -16,6 +16,13 @@ metadata:
|
|
|
16
16
|
language: pt-BR
|
|
17
17
|
created: "2026-03-13"
|
|
18
18
|
author: "Sinapse"
|
|
19
|
+
agents_count: 11
|
|
20
|
+
tasks_count: 85
|
|
21
|
+
knowledge_bases_count: 13
|
|
22
|
+
workflows_count: 6
|
|
23
|
+
templates_count: 6
|
|
24
|
+
checklists_count: 3
|
|
25
|
+
quality_target: "5.0/5.0 em todas as dimensoes"
|
|
19
26
|
|
|
20
27
|
agents:
|
|
21
28
|
- id: commercial-orqx
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Preferences Directory
|
|
2
|
+
|
|
3
|
+
> Diretorio para logs de preferencias por projeto/cliente.
|
|
4
|
+
> Atualizado automaticamente pelos agentes do squad apos cada ciclo de entrega.
|
|
5
|
+
|
|
6
|
+
## Como usar
|
|
7
|
+
|
|
8
|
+
1. Para cada novo projeto, criar `{projeto}-preferences.md`
|
|
9
|
+
2. Agentes consultam antes de iniciar nova entrega
|
|
10
|
+
3. Atualizar apos cada ciclo de aprovacao
|
|
11
|
+
|
|
12
|
+
## Arquivos
|
|
13
|
+
|
|
14
|
+
- `README.md` — Este arquivo
|
|
15
|
+
- `{projeto}-preferences.md` — Um arquivo por projeto ativo
|
|
@@ -16,6 +16,13 @@ metadata:
|
|
|
16
16
|
language: pt-BR
|
|
17
17
|
created: "2026-03-16"
|
|
18
18
|
author: "Sinapse"
|
|
19
|
+
agents_count: 11
|
|
20
|
+
tasks_count: 56
|
|
21
|
+
knowledge_bases_count: 3
|
|
22
|
+
workflows_count: 2
|
|
23
|
+
templates_count: 0
|
|
24
|
+
checklists_count: 0
|
|
25
|
+
quality_target: "5.0/5.0 em todas as dimensoes"
|
|
19
26
|
|
|
20
27
|
agents:
|
|
21
28
|
- id: council-orqx
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Preferences Directory
|
|
2
|
+
|
|
3
|
+
> Diretorio para logs de preferencias por projeto/cliente.
|
|
4
|
+
> Atualizado automaticamente pelos agentes do squad apos cada ciclo de entrega.
|
|
5
|
+
|
|
6
|
+
## Como usar
|
|
7
|
+
|
|
8
|
+
1. Para cada novo projeto, criar `{projeto}-preferences.md`
|
|
9
|
+
2. Agentes consultam antes de iniciar nova entrega
|
|
10
|
+
3. Atualizar apos cada ciclo de aprovacao
|
|
11
|
+
|
|
12
|
+
## Arquivos
|
|
13
|
+
|
|
14
|
+
- `README.md` — Este arquivo
|
|
15
|
+
- `{projeto}-preferences.md` — Um arquivo por projeto ativo
|
|
@@ -6,6 +6,18 @@ author: "Sinapse"
|
|
|
6
6
|
license: MIT
|
|
7
7
|
slashPrefix: SINAPSE
|
|
8
8
|
|
|
9
|
+
metadata:
|
|
10
|
+
created_at: "2026-03-16"
|
|
11
|
+
updated_at: "2026-04-01"
|
|
12
|
+
created_by: "squad-creator (Craft)"
|
|
13
|
+
agents_count: 9
|
|
14
|
+
tasks_count: 53
|
|
15
|
+
knowledge_bases_count: 3
|
|
16
|
+
workflows_count: 2
|
|
17
|
+
templates_count: 0
|
|
18
|
+
checklists_count: 0
|
|
19
|
+
quality_target: "5.0/5.0 em todas as dimensoes"
|
|
20
|
+
|
|
9
21
|
tags:
|
|
10
22
|
- cybersecurity
|
|
11
23
|
- security
|