Skip to content

Commit 269ca54

Browse files
author
SIN-Agent
committed
docs: add stealth-axiom to Stealth Suite table
1 parent d5f10a4 commit 269ca54

20 files changed

Lines changed: 407 additions & 315 deletions

.opencode/workspace.yaml

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,45 @@
1-
# unmask-cli — SENSE-Layer der Stealth-Triade
2-
role: sense-layer
3-
triad: [playstealth-cli, skylight-cli, unmask-cli]
4-
orchestrator: stealth-runner
5-
1+
# Stealth Suite Workspace — Teil des SIN-CLIs Ökosystems
62
repos:
73
- name: stealth-runner
8-
url: https://github.com/OpenSIN-AI/stealth-runner
4+
path: ~/dev/stealth-runner
95
role: orchestrator
6+
url: https://github.com/SIN-CLIs/stealth-runner
7+
- name: cua-touch
8+
path: ~/dev/cua-touch
9+
role: act-all
10+
url: https://github.com/SIN-CLIs/cua-touch
11+
- name: ax-graph
12+
path: ~/dev/ax-graph
13+
role: ax-indexer
14+
url: https://github.com/SIN-CLIs/ax-graph
1015
- name: skylight-cli
16+
path: ~/dev/skylight-cli
17+
role: act-legacy
1118
url: https://github.com/SIN-CLIs/skylight-cli
12-
role: act-layer
13-
- name: unmask-cli
14-
url: https://github.com/SIN-CLIs/unmask-cli
15-
role: sense-layer
16-
description: Stealth-Verifikation, Fingerprint-Check, Pre-Scan
19+
- name: screen-follow
20+
path: ~/dev/screen-follow
21+
role: verify
22+
url: https://github.com/SIN-CLIs/screen-follow
23+
- name: macos-ax-cli
24+
path: ~/dev/macos-ax-cli
25+
role: scan
26+
url: https://github.com/SIN-CLIs/macos-ax-cli
1727
- name: playstealth-cli
28+
path: ~/dev/playstealth-cli
29+
role: hide
1830
url: https://github.com/SIN-CLIs/playstealth-cli
19-
role: hide-layer
20-
- name: heypiggy-worker
21-
url: https://github.com/OpenSIN-AI/A2A-SIN-Worker-heypiggy
22-
role: archive
31+
- name: unmask-cli
32+
path: ~/dev/unmask-cli
33+
role: sense
34+
url: https://github.com/SIN-CLIs/unmask-cli
35+
- name: stealth-captcha
36+
path: ~/dev/stealth-captcha
37+
role: captcha
38+
url: https://github.com/SIN-CLIs/stealth-captcha
39+
- name: stealth-skills
40+
path: ~/dev/stealth-skills
41+
role: skills
42+
url: https://github.com/SIN-CLIs/stealth-skills
43+
click_mechanism: AXPress (via cua-touch)
44+
chrome_accessibility: playstealth
45+
forbidden: [webauto-nodriver, CDP Page.navigate, document.querySelector().click(), pyautogui, pynput]

ACKNOWLEDGMENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ACKNOWLEDGMENTS.md
22

3-
Danke an alle Open-Source-Projekte und Contributors der Stealth Quad.
3+
Danke an alle Open-Source-Projekte und Contributors der Stealth Suite.
44

55
## 2026-05-02: Contributors
66

AGENTS.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
Install: `npm install -g unmask-cli` | Start: `unmask serve --http`
55
API: JSON-RPC 2.0. Methods: `dom.scan`, `console.list`, `network.list`
66

7-
## 🔗 Stealth-Quad
7+
## 🔗 Stealth Suite
88

9-
- **Orchestrator:** [stealth-runner](https://github.com/OpenSIN-AI/stealth-runner)
9+
- **Orchestrator:** [stealth-runner](https://github.com/SIN-CLIs/stealth-runner)
1010
- **HIDE:** [playstealth-cli](https://github.com/SIN-CLIs/playstealth-cli)
1111
- **ACT:** [skylight-cli](https://github.com/SIN-CLIs/skylight-cli)
1212
- **VERIFY:** [screen-follow](https://github.com/SIN-CLIs/screen-follow)

README.md

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -214,23 +214,29 @@ MIT — see [LICENSE](LICENSE).
214214

215215
## 🔗 Stealth Suite
216216

217-
Part of the **SIN-CLIs Stealth Suite**12 Komponenten für autonome Browser-Automation:
217+
Part of the **SIN-CLIs Stealth Suite**17 Komponenten für autonome Browser-Automation:
218218

219219
| Layer | Repo | Technologie |
220220
|-------|------|-------------|
221-
| 🧠 Orchestrator | [`stealth-runner`](https://github.com/SIN-CLIs/stealth-runner) | Python |
222-
| 🖱️ ACT (CUA-ONLY) | [`cua-touch`](https://github.com/SIN-CLIs/cua-touch) | Python + Swift Binary |
223-
| 🎭 HIDE | [`playstealth-cli`](https://github.com/SIN-CLIs/playstealth-cli) | Python |
224-
| 👁️ SENSE | [`unmask-cli`](https://github.com/SIN-CLIs/unmask-cli) | TypeScript |
225-
| 📹 VERIFY | [`screen-follow`](https://github.com/SIN-CLIs/screen-follow) | Swift |
226-
| 🔍 SCAN | [`macos-ax-cli`](https://github.com/SIN-CLIs/macos-ax-cli) | Swift |
227-
| 🔒 CAPTCHA | [`stealth-captcha`](https://github.com/SIN-CLIs/stealth-captcha) | Python |
228-
| 🧩 SKILLS | [`stealth-skills`](https://github.com/SIN-CLIs/stealth-skills) | TS/Python |
229-
| 🐙 GRAPH | [`ax-graph`](https://github.com/SIN-CLIs/ax-graph) *(planned)* | Swift |
230-
| 💀 LEGACY | [`computer-use-mcp`](https://github.com/SIN-CLIs/computer-use-mcp) | TypeScript |
231-
| 💀 LEGACY | [`A2A-SIN-Worker-heypiggy`](https://github.com/OpenSIN-AI/A2A-SIN-Worker-heypiggy) | Python |
221+
| 🧠 Orchestrator | [stealth-runner](https://github.com/SIN-CLIs/stealth-runner) | Python |
222+
| 🧠 ROUTER | [stealth-axiom](https://github.com/SIN-CLIs/stealth-axiom) | Python |
223+
| 🖱️ ACT (CUA-ONLY) | [cua-touch](https://github.com/SIN-CLIs/cua-touch) | Python + Swift |
224+
| 🎭 HIDE | [playstealth-cli](https://github.com/SIN-CLIs/playstealth-cli) | Python |
225+
| 👁️ SENSE | [unmask-cli](https://github.com/SIN-CLIs/unmask-cli) | TypeScript |
226+
| 📹 VERIFY | [screen-follow](https://github.com/SIN-CLIs/screen-follow) | Swift |
227+
| 🔍 SCAN | [macos-ax-cli](https://github.com/SIN-CLIs/macos-ax-cli) | Swift |
228+
| 🐙 AX-INDEXER | [ax-graph](https://github.com/SIN-CLIs/ax-graph) | Swift |
229+
| 🔒 CAPTCHA | [stealth-captcha](https://github.com/SIN-CLIs/stealth-captcha) | Python |
230+
| 🧩 SKILLS | [stealth-skills](https://github.com/SIN-CLIs/stealth-skills) | TS/Python |
231+
| 🧱 CORE | [stealth-core](https://github.com/SIN-CLIs/stealth-core) | Python |
232+
| 🧠 MIND | [stealth-mind](https://github.com/SIN-CLIs/stealth-mind) | Python |
233+
| 🛡️ GUARDIAN | [stealth-guardian](https://github.com/SIN-CLIs/stealth-guardian) | Python |
234+
| 🔄 SYNC | [stealth-sync](https://github.com/SIN-CLIs/stealth-sync) | Python |
235+
| ⚡ SESSION | [stealth-session](https://github.com/SIN-CLIs/stealth-session) | Python |
236+
| 💀 LEGACY | [skylight-cli](https://github.com/SIN-CLIs/skylight-cli) | Swift |
237+
| 💀 LEGACY | [computer-use-mcp](https://github.com/SIN-CLIs/computer-use-mcp) | TypeScript |
238+
232239

233-
---
234240
## 🔗 Stealth Suite
235241

236242
Part of the **SIN-CLIs Stealth Suite** — 16 Komponenten für autonome Browser-Automation:

commands.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ unmask doctor
146146
# → Node version, Playwright, LLM API key, home-dir writable?
147147
```
148148

149-
## Integration mit Stealth-Quad
149+
## Integration mit Stealth Suite
150150

151151
```bash
152152
# 1. playstealth startet Chrome (CDP-Endpoint verfügbar)

graphify-out/GRAPH_REPORT.md

Lines changed: 49 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
# Graph Report - unmask-cli (2026-05-03)
1+
# Graph Report - unmask-cli (2026-05-04)
22

33
## Corpus Check
4-
- 59 files · ~29,678 words
4+
- 60 files · ~30,481 words
55
- Verdict: corpus is large enough that graph structure adds value.
66

77
## Summary
8-
- 243 nodes · 366 edges · 22 communities detected
8+
- 245 nodes · 370 edges · 20 communities detected
99
- Extraction: 95% EXTRACTED · 5% INFERRED · 0% AMBIGUOUS · INFERRED: 18 edges (avg confidence: 0.8)
1010
- Token cost: 0 input · 0 output
1111

@@ -30,22 +30,22 @@
3030
- [[_COMMUNITY_Community 17|Community 17]]
3131
- [[_COMMUNITY_Community 18|Community 18]]
3232
- [[_COMMUNITY_Community 19|Community 19]]
33-
- [[_COMMUNITY_Community 20|Community 20]]
34-
- [[_COMMUNITY_Community 21|Community 21]]
3533

3634
## God Nodes (most connected - your core abstractions)
3735
1. `UnmaskClient` - 21 edges
3836
2. `Logger` - 11 edges
3937
3. `MacOSAXBridge` - 11 edges
4038
4. `QueueManager` - 10 edges
4139
5. `ScreenClassifier` - 10 edges
42-
6. `StateStore` - 7 edges
43-
7. `NetworkSniffer` - 7 edges
40+
6. `NetworkSniffer` - 8 edges
41+
7. `StateStore` - 7 edges
4442
8. `ConsoleListener` - 7 edges
4543
9. `Dispatcher` - 6 edges
4644
10. `Session` - 6 edges
4745

4846
## Surprising Connections (you probably didn't know these)
47+
- `act()` --calls--> `observe()` [INFERRED]
48+
src/llm/act.ts → src/llm/observe.ts
4949
- `act()` --calls--> `selfHeal()` [INFERRED]
5050
src/llm/act.ts → src/modules/selectors.ts
5151
- `emptyUnmaskResponse()` --calls--> `inspect()` [INFERRED]
@@ -54,70 +54,68 @@
5454
src/schemas/unmask.ts → src/commands/inspect.ts
5555
- `extract()` --calls--> `serializeForLLM()` [INFERRED]
5656
src/llm/extract.ts → src/llm/serialize.ts
57-
- `act()` --calls--> `observe()` [INFERRED]
58-
src/llm/act.ts → src/llm/observe.ts
5957

6058
## Communities
6159

6260
### Community 0 - "Community 0"
63-
Cohesion: 0.1
64-
Nodes (1): emptyQueueState()
61+
Cohesion: 0.14
62+
Nodes (5): unmask_client.py — minimal Python JSON-RPC client for unmask-cli. Spawns `unmas, JSON-RPC 2.0 client over stdio., UnmaskClient, UnmaskRPCError, RuntimeError
6563

6664
### Community 1 - "Community 1"
6765
Cohesion: 0.14
68-
Nodes (5): unmask_client.py — minimal Python JSON-RPC client for unmask-cli. Spawns `unmas, JSON-RPC 2.0 client over stdio., UnmaskClient, UnmaskRPCError, RuntimeError
66+
Nodes (13): applyStealthPatches(), launchBrowser(), runBrowser(), deriveSurveys(), extractCandidatesFromJson(), inspect(), parseFirstAmount(), pickAny() (+5 more)
6967

7068
### Community 2 - "Community 2"
71-
Cohesion: 0.16
72-
Nodes (7): mapOutcomeToStatus(), QueueManager, humanPause(), jitterMs(), microJitter(), randomInt(), sleep()
69+
Cohesion: 0.12
70+
Nodes (5): act(), planFromText(), selfHeal(), colourPrefix(), Logger
7371

7472
### Community 3 - "Community 3"
75-
Cohesion: 0.2
76-
Nodes (4): handler(), createClassifier(), RUN_APPLESCRIPT(), ScreenClassifier
73+
Cohesion: 0.14
74+
Nodes (4): preScan(), Dispatcher, parse(), bundleSession()
7775

7876
### Community 4 - "Community 4"
79-
Cohesion: 0.19
80-
Nodes (9): preScan(), Dispatcher, parse(), act(), planFromText(), extract(), observe(), serializeForLLM() (+1 more)
77+
Cohesion: 0.14
78+
Nodes (6): visionFallback(), extract(), observe(), isLLMAvailable(), LLM, serializeForLLM()
8179

8280
### Community 5 - "Community 5"
83-
Cohesion: 0.24
84-
Nodes (12): applyStealthPatches(), launchBrowser(), runBrowser(), deriveSurveys(), extractCandidatesFromJson(), inspect(), parseFirstAmount(), pickAny() (+4 more)
81+
Cohesion: 0.16
82+
Nodes (7): mapOutcomeToStatus(), QueueManager, humanPause(), jitterMs(), microJitter(), randomInt(), sleep()
8583

8684
### Community 6 - "Community 6"
87-
Cohesion: 0.23
88-
Nodes (2): colourPrefix(), Logger
85+
Cohesion: 0.2
86+
Nodes (4): handler(), createClassifier(), RUN_APPLESCRIPT(), ScreenClassifier
8987

9088
### Community 7 - "Community 7"
9189
Cohesion: 0.22
92-
Nodes (2): bundleSession(), Session
90+
Nodes (2): StateStore, emptyQueueState()
9391

9492
### Community 8 - "Community 8"
9593
Cohesion: 0.33
9694
Nodes (1): MacOSAXBridge
9795

9896
### Community 9 - "Community 9"
99-
Cohesion: 0.22
100-
Nodes (3): PanelDetector, RiskAssessor, TrapScanner
97+
Cohesion: 0.31
98+
Nodes (2): ConsoleListener, mapLevel()
10199

102100
### Community 10 - "Community 10"
103-
Cohesion: 0.25
104-
Nodes (3): visionFallback(), isLLMAvailable(), LLM
101+
Cohesion: 0.22
102+
Nodes (3): PanelDetector, RiskAssessor, TrapScanner
105103

106104
### Community 11 - "Community 11"
107105
Cohesion: 0.29
108106
Nodes (2): Telemetry, toEuros()
109107

110108
### Community 12 - "Community 12"
111-
Cohesion: 0.32
112-
Nodes (2): ConsoleListener, mapLevel()
109+
Cohesion: 0.25
110+
Nodes (1): NetworkSniffer
113111

114112
### Community 13 - "Community 13"
115-
Cohesion: 0.57
116-
Nodes (1): StateStore
113+
Cohesion: 0.47
114+
Nodes (1): Session
117115

118116
### Community 14 - "Community 14"
119-
Cohesion: 0.29
120-
Nodes (1): NetworkSniffer
117+
Cohesion: 0.4
118+
Nodes (2): Notifier, post()
121119

122120
### Community 15 - "Community 15"
123121
Cohesion: 0.4
@@ -129,68 +127,56 @@ Nodes (3): api(), main(), walk()
129127

130128
### Community 17 - "Community 17"
131129
Cohesion: 0.5
132-
Nodes (2): Notifier, post()
133-
134-
### Community 18 - "Community 18"
135-
Cohesion: 0.5
136130
Nodes (1): RewardEstimator
137131

138-
### Community 19 - "Community 19"
132+
### Community 18 - "Community 18"
139133
Cohesion: 0.5
140134
Nodes (1): QuestionClassifier
141135

142-
### Community 20 - "Community 20"
136+
### Community 19 - "Community 19"
143137
Cohesion: 1.0
144138
Nodes (2): ensureLabel(), gh()
145139

146-
### Community 21 - "Community 21"
147-
Cohesion: 0.67
148-
Nodes (1): DomScanner
149-
150140
## Knowledge Gaps
151141
- **2 isolated node(s):** `unmask_client.py — minimal Python JSON-RPC client for unmask-cli. Spawns `unmas`, `JSON-RPC 2.0 client over stdio.`
152142
These have ≤1 connection - possible missing edges or undocumented components.
153-
- **Thin community `Community 0`** (39 nodes): `runHttpServer()`, `runStdioServer()`, `createPlaywrightSurveyRunner()`, `outcome()`, `emptyQueueState()`, `emit()`, `pickMixed()`, `cli.ts`, `macos-ax-bridge.ts`, `dispatch.ts`, `http.ts`, `stdio.ts`, `act.ts`, `extract.ts`, `observe.ts`, `provider.ts`, `serialize.ts`, `console.ts`, `dom.ts`, `network.ts`, `selectors.ts`, `manager.ts`, `playwright-runner.ts`, `state.ts`, `queue.ts`, `unmask.ts`, `logger.ts`, `notify.ts`, `dispatch.test.ts`, `e2e.test.ts`, `notify.test.ts`, `survey()`, `playwright-runner.test.ts`, `survey()`, `queue.test.ts`, `schemas.test.ts`, `fakePage()`, `serialize.test.ts`, `state.test.ts`
154-
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
155-
- **Thin community `Community 6`** (12 nodes): `colourPrefix()`, `Logger`, `.child()`, `.constructor()`, `.debug()`, `.error()`, `.info()`, `.setJson()`, `.setLevel()`, `.setSilent()`, `.warn()`, `.write()`
156-
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
157-
- **Thin community `Community 7`** (11 nodes): `bundleSession()`, `sessionArtifactPaths()`, `Session`, `.append()`, `.constructor()`, `.end()`, `.init()`, `.nextScreenshotPath()`, `bundle.ts`, `session.ts`, `bundle.test.ts`
143+
- **Thin community `Community 7`** (15 nodes): `StateStore`, `.appendBlacklist()`, `.constructor()`, `.ensureDir()`, `.load()`, `.loadBlacklist()`, `.save()`, `emptyQueueState()`, `manager.ts`, `state.ts`, `queue.ts`, `survey()`, `queue.test.ts`, `schemas.test.ts`, `state.test.ts`
158144
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
159145
- **Thin community `Community 8`** (11 nodes): `MacOSAXBridge`, `.clickElement()`, `.constructor()`, `.filterWindows()`, `.findText()`, `.getElements()`, `.getWindowsByPid()`, `.listWindows()`, `.runAXCommand()`, `.screenshotLabeled()`, `.setValue()`
160146
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
147+
- **Thin community `Community 9`** (9 nodes): `ConsoleListener`, `.attach()`, `.constructor()`, `.handle()`, `.push()`, `.results()`, `.tag()`, `mapLevel()`, `console.ts`
148+
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
161149
- **Thin community `Community 11`** (8 nodes): `Telemetry`, `.recordResult()`, `.summary()`, `.toJSONL()`, `toEuros()`, `telemetry.ts`, `survey()`, `telemetry.test.ts`
162150
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
163-
- **Thin community `Community 12`** (8 nodes): `ConsoleListener`, `.attach()`, `.constructor()`, `.handle()`, `.push()`, `.results()`, `.tag()`, `mapLevel()`
151+
- **Thin community `Community 12`** (8 nodes): `NetworkSniffer`, `.attach()`, `.constructor()`, `.detach()`, `.matchKeywords()`, `.results()`, `.toHar()`, `.topCandidates()`
164152
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
165-
- **Thin community `Community 13`** (7 nodes): `StateStore`, `.appendBlacklist()`, `.constructor()`, `.ensureDir()`, `.load()`, `.loadBlacklist()`, `.save()`
153+
- **Thin community `Community 13`** (6 nodes): `Session`, `.append()`, `.constructor()`, `.end()`, `.init()`, `.nextScreenshotPath()`
166154
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
167-
- **Thin community `Community 14`** (7 nodes): `NetworkSniffer`, `.attach()`, `.constructor()`, `.detach()`, `.matchKeywords()`, `.results()`, `.topCandidates()`
155+
- **Thin community `Community 14`** (6 nodes): `notify.ts`, `notify.test.ts`, `Notifier`, `.constructor()`, `.send()`, `post()`
168156
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
169157
- **Thin community `Community 15`** (5 nodes): `ScreenshotTimeline`, `.capture()`, `.constructor()`, `.getEntries()`, `screenshot-timeline.ts`
170158
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
171-
- **Thin community `Community 17`** (4 nodes): `Notifier`, `.constructor()`, `.send()`, `post()`
172-
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
173-
- **Thin community `Community 18`** (4 nodes): `reward-estimator.ts`, `RewardEstimator`, `.estimate()`, `.rank()`
174-
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
175-
- **Thin community `Community 19`** (4 nodes): `question-classifier.ts`, `QuestionClassifier`, `.classify()`, `.primary()`
159+
- **Thin community `Community 17`** (4 nodes): `reward-estimator.ts`, `RewardEstimator`, `.estimate()`, `.rank()`
176160
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
177-
- **Thin community `Community 20`** (3 nodes): `ensureLabel()`, `gh()`, `create-issues.mjs`
161+
- **Thin community `Community 18`** (4 nodes): `question-classifier.ts`, `QuestionClassifier`, `.classify()`, `.primary()`
178162
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
179-
- **Thin community `Community 21`** (3 nodes): `DomScanner`, `.constructor()`, `.scan()`
163+
- **Thin community `Community 19`** (3 nodes): `ensureLabel()`, `gh()`, `create-issues.mjs`
180164
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
181165

182166
## Suggested Questions
183167
_Questions this graph is uniquely positioned to answer:_
184168

185-
- **Why does `MacOSAXBridge` connect `Community 8` to `Community 0`?**
169+
- **Why does `MacOSAXBridge` connect `Community 8` to `Community 1`?**
186170
_High betweenness centrality (0.054) - this node is a cross-community bridge._
187-
- **Why does `Logger` connect `Community 6` to `Community 0`?**
188-
_High betweenness centrality (0.051) - this node is a cross-community bridge._
189-
- **Why does `QueueManager` connect `Community 2` to `Community 0`?**
171+
- **Why does `QueueManager` connect `Community 5` to `Community 7`?**
190172
_High betweenness centrality (0.046) - this node is a cross-community bridge._
191173
- **What connects `unmask_client.py — minimal Python JSON-RPC client for unmask-cli. Spawns `unmas`, `JSON-RPC 2.0 client over stdio.` to the rest of the system?**
192174
_2 weakly-connected nodes found - possible documentation gaps or missing edges._
193175
- **Should `Community 0` be split into smaller, more focused modules?**
194-
_Cohesion score 0.1 - nodes in this community are weakly interconnected._
176+
_Cohesion score 0.14 - nodes in this community are weakly interconnected._
195177
- **Should `Community 1` be split into smaller, more focused modules?**
178+
_Cohesion score 0.14 - nodes in this community are weakly interconnected._
179+
- **Should `Community 2` be split into smaller, more focused modules?**
180+
_Cohesion score 0.12 - nodes in this community are weakly interconnected._
181+
- **Should `Community 3` be split into smaller, more focused modules?**
196182
_Cohesion score 0.14 - nodes in this community are weakly interconnected._

0 commit comments

Comments
 (0)