@datasynx/agentic-ai-cartography 0.2.5 → 0.3.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/README.md +6 -59
- package/dist/{bookmarks-B2LUZQGG.js → bookmarks-ITLW7U5D.js} +2 -2
- package/dist/{chunk-MZUF7KGX.js → chunk-2VIAXA5T.js} +38 -12
- package/dist/chunk-2VIAXA5T.js.map +1 -0
- package/dist/{chunk-EVJP2FWQ.js → chunk-FFNOC6HF.js} +1 -33
- package/dist/chunk-FFNOC6HF.js.map +1 -0
- package/dist/cli.js +794 -989
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +24 -118
- package/dist/index.js +304 -307
- package/dist/index.js.map +1 -1
- package/dist/{types-NKF6BRMZ.js → types-ROE3Z6HY.js} +2 -8
- package/package.json +1 -2
- package/dist/chunk-EVJP2FWQ.js.map +0 -1
- package/dist/chunk-MZUF7KGX.js.map +0 -1
- package/dist/chunk-NEB52VYQ.js +0 -838
- package/dist/chunk-NEB52VYQ.js.map +0 -1
- package/dist/exporter-LRHXMSKN.js +0 -24
- package/dist/types-NKF6BRMZ.js.map +0 -1
- /package/dist/{bookmarks-B2LUZQGG.js.map → bookmarks-ITLW7U5D.js.map} +0 -0
- /package/dist/{exporter-LRHXMSKN.js.map → types-ROE3Z6HY.js.map} +0 -0
package/README.md
CHANGED
|
@@ -59,7 +59,6 @@ $ datasynx-cartography discover
|
|
|
59
59
|
| **Browser Bookmarks** | Chrome, Firefox, Safari, Brave, Edge — extracts business/SaaS domains automatically |
|
|
60
60
|
| **Cloud Scanning** | AWS (EC2/RDS/EKS/S3), GCP (Compute/GKE/Cloud Run), Azure (AKS/WebApps), Kubernetes |
|
|
61
61
|
| **Human-in-the-Loop** | Chat with the agent mid-discovery: type `"hubspot windsurf"` to search for specific tools |
|
|
62
|
-
| **Shadow Daemon** | Background observer every 30s — detects new services, ports, processes |
|
|
63
62
|
| **SOP Generation** | Automatically generates Standard Operating Procedures from observed workflows |
|
|
64
63
|
| **SOP Dashboard** | HTML dashboard with all SOPs, step details, frequency stats |
|
|
65
64
|
| **Export Formats** | Mermaid topology, D3.js interactive graph, Backstage YAML, JSON, SOP Markdown |
|
|
@@ -107,22 +106,6 @@ datasynx-cartography seed
|
|
|
107
106
|
# View all browser bookmarks
|
|
108
107
|
datasynx-cartography bookmarks
|
|
109
108
|
|
|
110
|
-
# Start background observer (Claude Haiku, every 30s)
|
|
111
|
-
datasynx-cartography shadow start
|
|
112
|
-
|
|
113
|
-
# Attach to live event feed
|
|
114
|
-
datasynx-cartography shadow attach # [P] pause [T] new task [D] detach [Q] stop
|
|
115
|
-
|
|
116
|
-
# Pause / resume the daemon
|
|
117
|
-
datasynx-cartography shadow pause
|
|
118
|
-
datasynx-cartography shadow resume
|
|
119
|
-
|
|
120
|
-
# Stop daemon + generate SOPs + open HTML dashboard
|
|
121
|
-
datasynx-cartography shadow stop
|
|
122
|
-
|
|
123
|
-
# Generate SOPs manually from a session
|
|
124
|
-
datasynx-cartography sops [session-id]
|
|
125
|
-
|
|
126
109
|
# Full feature reference
|
|
127
110
|
datasynx-cartography docs
|
|
128
111
|
```
|
|
@@ -153,29 +136,9 @@ Discovery pipeline (automatic, in order):
|
|
|
153
136
|
5. **Config files** — `.env`, `docker-compose.yml`, etc.
|
|
154
137
|
6. **Human-in-the-loop** — interactive follow-up after initial scan
|
|
155
138
|
|
|
156
|
-
### Shadow Daemon
|
|
157
|
-
|
|
158
|
-
```
|
|
159
|
-
datasynx-cartography shadow start [options]
|
|
160
|
-
|
|
161
|
-
--interval <ms> Poll interval (default: 30000, min: 15000)
|
|
162
|
-
--inactivity <ms> Task boundary gap (default: 300000)
|
|
163
|
-
--model <m> Claude model (default: claude-haiku-4-5-...)
|
|
164
|
-
--track-windows Track window focus (requires xdotool)
|
|
165
|
-
--auto-save Save nodes without prompting
|
|
166
|
-
--foreground Run in foreground (no fork)
|
|
167
|
-
|
|
168
|
-
datasynx-cartography shadow stop # stops + generates SOPs + opens dashboard
|
|
169
|
-
datasynx-cartography shadow pause # SIGUSR1
|
|
170
|
-
datasynx-cartography shadow resume # SIGUSR2
|
|
171
|
-
datasynx-cartography shadow status
|
|
172
|
-
datasynx-cartography shadow attach
|
|
173
|
-
```
|
|
174
|
-
|
|
175
139
|
### Analysis & Export
|
|
176
140
|
|
|
177
141
|
```
|
|
178
|
-
datasynx-cartography sops [session-id] Generate SOPs from observed workflows
|
|
179
142
|
datasynx-cartography export [session-id] [options]
|
|
180
143
|
--format <fmt...> mermaid, json, yaml, html, sops (default: all)
|
|
181
144
|
-o, --output <dir> Output directory
|
|
@@ -213,13 +176,8 @@ datasynx-output/
|
|
|
213
176
|
| Mode | Model | Interval | per Hour | per 8h Day |
|
|
214
177
|
|------|-------|----------|----------|------------|
|
|
215
178
|
| Discover | Sonnet | one-shot | $0.15–0.50 | one-shot |
|
|
216
|
-
| Shadow | Haiku | 30s | $0.12–0.36 | $0.96–2.88 |
|
|
217
|
-
| Shadow | Haiku | 60s | $0.06–0.18 | $0.48–1.44 |
|
|
218
|
-
| Shadow (quiet)* | Haiku | 30s | ~$0.02 | ~$0.16 |
|
|
219
179
|
| SOP generation | Sonnet | one-shot | $0.01–0.03 | one-shot |
|
|
220
180
|
|
|
221
|
-
\* *quiet = diff-check skips ~90% of cycles when the system is idle*
|
|
222
|
-
|
|
223
181
|
---
|
|
224
182
|
|
|
225
183
|
## Architecture
|
|
@@ -228,22 +186,13 @@ datasynx-output/
|
|
|
228
186
|
CLI (Commander.js)
|
|
229
187
|
└── Preflight: Claude CLI + API key + interval validation
|
|
230
188
|
└── Agent Orchestrator (src/agent.ts)
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
├── runShadowCycle() Claude Haiku + MCP Tools only (no Bash)
|
|
238
|
-
└── generateSOPs() Anthropic Messages API (no agent loop)
|
|
189
|
+
└── runDiscovery() Claude Sonnet + Bash + MCP Tools
|
|
190
|
+
├── scan_bookmarks() browser bookmark extraction
|
|
191
|
+
├── scan_installed_apps() /Applications, brew, dpkg, which
|
|
192
|
+
├── scan_k8s_resources() kubectl (readonly)
|
|
193
|
+
├── scan_aws/gcp/azure() cloud CLI scans (readonly)
|
|
194
|
+
└── ask_user() human-in-the-loop questions
|
|
239
195
|
└── Custom MCP Tools → CartographyDB (SQLite WAL)
|
|
240
|
-
|
|
241
|
-
Shadow Daemon (src/daemon.ts)
|
|
242
|
-
├── takeSnapshot() → ss + ps (no Claude!)
|
|
243
|
-
├── Diff-check → calls Claude only when something changed
|
|
244
|
-
├── SIGUSR1/2 → pause / resume
|
|
245
|
-
├── IPC Server → Unix socket ~/.cartography/daemon.sock
|
|
246
|
-
└── Notifications → desktop alerts when no client attached
|
|
247
196
|
```
|
|
248
197
|
|
|
249
198
|
### Safety
|
|
@@ -260,8 +209,6 @@ Every Bash call is guarded by a `PreToolUse` hook that blocks destructive comman
|
|
|
260
209
|
import {
|
|
261
210
|
CartographyDB,
|
|
262
211
|
runDiscovery,
|
|
263
|
-
runShadowCycle,
|
|
264
|
-
generateSOPs,
|
|
265
212
|
exportAll,
|
|
266
213
|
exportSOPDashboard,
|
|
267
214
|
safetyHook,
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
readFirefoxHistory,
|
|
4
4
|
scanAllBookmarks,
|
|
5
5
|
scanAllHistory
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2VIAXA5T.js";
|
|
7
7
|
export {
|
|
8
8
|
readFirefoxHistory,
|
|
9
9
|
scanAllBookmarks,
|
|
10
10
|
scanAllHistory
|
|
11
11
|
};
|
|
12
|
-
//# sourceMappingURL=bookmarks-
|
|
12
|
+
//# sourceMappingURL=bookmarks-ITLW7U5D.js.map
|
|
@@ -164,24 +164,36 @@ function chromeLikeHistoryPaths(base) {
|
|
|
164
164
|
}
|
|
165
165
|
var CHROME_BASE = IS_MAC ? `${HOME}/Library/Application Support/Google/Chrome` : `${HOME}/.config/google-chrome`;
|
|
166
166
|
var CHROMIUM_BASE = IS_MAC ? `${HOME}/Library/Application Support/Chromium` : `${HOME}/.config/chromium`;
|
|
167
|
+
var CHROMIUM_SNAP_BASE = `${HOME}/snap/chromium/common/chromium`;
|
|
168
|
+
var CHROMIUM_FLATPAK_BASE = `${HOME}/.var/app/org.chromium.Chromium/config/chromium`;
|
|
169
|
+
var CHROME_FLATPAK_BASE = `${HOME}/.var/app/com.google.Chrome/config/google-chrome`;
|
|
170
|
+
var BRAVE_FLATPAK_BASE = `${HOME}/.var/app/com.brave.Browser/config/BraveSoftware/Brave-Browser`;
|
|
171
|
+
var EDGE_FLATPAK_BASE = `${HOME}/.var/app/com.microsoft.Edge/config/microsoft-edge`;
|
|
172
|
+
var FIREFOX_SNAP_BASE = `${HOME}/snap/firefox/common/.mozilla/firefox`;
|
|
173
|
+
var FIREFOX_FLATPAK_BASE = `${HOME}/.var/app/org.mozilla.firefox/.mozilla/firefox`;
|
|
167
174
|
var EDGE_BASE = IS_MAC ? `${HOME}/Library/Application Support/Microsoft Edge` : `${HOME}/.config/microsoft-edge`;
|
|
168
175
|
var BRAVE_BASE = IS_MAC ? `${HOME}/Library/Application Support/BraveSoftware/Brave-Browser` : `${HOME}/.config/BraveSoftware/Brave-Browser`;
|
|
169
176
|
var VIVALDI_BASE = IS_MAC ? `${HOME}/Library/Application Support/Vivaldi` : `${HOME}/.config/vivaldi`;
|
|
170
177
|
var OPERA_BASE = IS_MAC ? `${HOME}/Library/Application Support/com.operasoftware.Opera` : `${HOME}/.config/opera`;
|
|
171
178
|
function firefoxProfileDirs() {
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
179
|
+
const bases = IS_MAC ? [`${HOME}/Library/Application Support/Firefox/Profiles`] : [`${HOME}/.mozilla/firefox`, FIREFOX_SNAP_BASE, FIREFOX_FLATPAK_BASE];
|
|
180
|
+
const dirs = [];
|
|
181
|
+
for (const base of bases) {
|
|
182
|
+
if (!existsSync(base)) continue;
|
|
183
|
+
try {
|
|
184
|
+
for (const d of readdirSync(base)) {
|
|
185
|
+
const full = join(base, d);
|
|
186
|
+
try {
|
|
187
|
+
if (statSync(full).isDirectory() && existsSync(join(full, "places.sqlite"))) {
|
|
188
|
+
dirs.push(full);
|
|
189
|
+
}
|
|
190
|
+
} catch {
|
|
191
|
+
}
|
|
180
192
|
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
return [];
|
|
193
|
+
} catch {
|
|
194
|
+
}
|
|
184
195
|
}
|
|
196
|
+
return dirs;
|
|
185
197
|
}
|
|
186
198
|
async function scanAllBookmarks() {
|
|
187
199
|
const all = [];
|
|
@@ -191,6 +203,13 @@ async function scanAllBookmarks() {
|
|
|
191
203
|
for (const p of chromeLikePaths(BRAVE_BASE)) all.push(...readChromeLike(p, "brave"));
|
|
192
204
|
for (const p of chromeLikePaths(VIVALDI_BASE)) all.push(...readChromeLike(p, "vivaldi"));
|
|
193
205
|
for (const p of chromeLikePaths(OPERA_BASE)) all.push(...readChromeLike(p, "opera"));
|
|
206
|
+
if (!IS_MAC) {
|
|
207
|
+
for (const p of chromeLikePaths(CHROMIUM_SNAP_BASE)) all.push(...readChromeLike(p, "chromium-snap"));
|
|
208
|
+
for (const p of chromeLikePaths(CHROMIUM_FLATPAK_BASE)) all.push(...readChromeLike(p, "chromium-flatpak"));
|
|
209
|
+
for (const p of chromeLikePaths(CHROME_FLATPAK_BASE)) all.push(...readChromeLike(p, "chrome-flatpak"));
|
|
210
|
+
for (const p of chromeLikePaths(BRAVE_FLATPAK_BASE)) all.push(...readChromeLike(p, "brave-flatpak"));
|
|
211
|
+
for (const p of chromeLikePaths(EDGE_FLATPAK_BASE)) all.push(...readChromeLike(p, "edge-flatpak"));
|
|
212
|
+
}
|
|
194
213
|
for (const dir of firefoxProfileDirs()) {
|
|
195
214
|
all.push(...await readFirefoxBookmarks(dir));
|
|
196
215
|
}
|
|
@@ -209,6 +228,13 @@ async function scanAllHistory() {
|
|
|
209
228
|
for (const p of chromeLikeHistoryPaths(BRAVE_BASE)) all.push(...await readChromiumHistory(p, "brave"));
|
|
210
229
|
for (const p of chromeLikeHistoryPaths(VIVALDI_BASE)) all.push(...await readChromiumHistory(p, "vivaldi"));
|
|
211
230
|
for (const p of chromeLikeHistoryPaths(OPERA_BASE)) all.push(...await readChromiumHistory(p, "opera"));
|
|
231
|
+
if (!IS_MAC) {
|
|
232
|
+
for (const p of chromeLikeHistoryPaths(CHROMIUM_SNAP_BASE)) all.push(...await readChromiumHistory(p, "chromium-snap"));
|
|
233
|
+
for (const p of chromeLikeHistoryPaths(CHROMIUM_FLATPAK_BASE)) all.push(...await readChromiumHistory(p, "chromium-flatpak"));
|
|
234
|
+
for (const p of chromeLikeHistoryPaths(CHROME_FLATPAK_BASE)) all.push(...await readChromiumHistory(p, "chrome-flatpak"));
|
|
235
|
+
for (const p of chromeLikeHistoryPaths(BRAVE_FLATPAK_BASE)) all.push(...await readChromiumHistory(p, "brave-flatpak"));
|
|
236
|
+
for (const p of chromeLikeHistoryPaths(EDGE_FLATPAK_BASE)) all.push(...await readChromiumHistory(p, "edge-flatpak"));
|
|
237
|
+
}
|
|
212
238
|
for (const dir of firefoxProfileDirs()) {
|
|
213
239
|
all.push(...await readFirefoxHistory(dir));
|
|
214
240
|
}
|
|
@@ -229,4 +255,4 @@ export {
|
|
|
229
255
|
scanAllBookmarks,
|
|
230
256
|
scanAllHistory
|
|
231
257
|
};
|
|
232
|
-
//# sourceMappingURL=chunk-
|
|
258
|
+
//# sourceMappingURL=chunk-2VIAXA5T.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/bookmarks.ts"],"sourcesContent":["import { homedir, tmpdir } from 'node:os';\nimport { existsSync, readFileSync, readdirSync, copyFileSync, statSync } from 'node:fs';\nimport { join } from 'node:path';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface BookmarkHost {\n hostname: string;\n port: number;\n protocol: 'http' | 'https';\n source: string;\n}\n\nexport interface HistoryHost extends BookmarkHost {\n visitCount: number;\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction extractHost(rawUrl: string, source: string): BookmarkHost | null {\n try {\n const u = new URL(rawUrl);\n if (u.protocol !== 'http:' && u.protocol !== 'https:') return null;\n const protocol = u.protocol === 'https:' ? 'https' as const : 'http' as const;\n // Strip: no paths, no params, no credentials — hostname only\n const port = u.port ? parseInt(u.port, 10) : (protocol === 'https' ? 443 : 80);\n const hostname = u.hostname.toLowerCase();\n if (!hostname || hostname === 'localhost' || hostname === '127.0.0.1') return null;\n return { hostname, port, protocol, source };\n } catch {\n return null;\n }\n}\n\n// Chrome/Edge/Brave JSON format\ninterface ChromeNode {\n type?: string;\n url?: string;\n children?: ChromeNode[];\n}\n\nfunction walkChrome(node: ChromeNode, source: string, out: BookmarkHost[]): void {\n if (node.type === 'url' && node.url) {\n const h = extractHost(node.url, source);\n if (h) out.push(h);\n }\n if (node.children) {\n for (const child of node.children) walkChrome(child, source, out);\n }\n}\n\nfunction readChromeLike(filePath: string, source: string): BookmarkHost[] {\n if (!existsSync(filePath)) return [];\n try {\n const raw = JSON.parse(readFileSync(filePath, 'utf8')) as {\n roots: Record<string, ChromeNode>;\n };\n const out: BookmarkHost[] = [];\n for (const root of Object.values(raw.roots)) {\n if (root) walkChrome(root, source, out);\n }\n return out;\n } catch {\n return [];\n }\n}\n\nasync function readFirefoxBookmarks(profileDir: string): Promise<BookmarkHost[]> {\n const src = join(profileDir, 'places.sqlite');\n if (!existsSync(src)) return [];\n const tmp = join(tmpdir(), `cartograph_ff_bm_${Date.now()}.sqlite`);\n try {\n copyFileSync(src, tmp);\n const { default: Database } = await import('better-sqlite3');\n const db = new Database(tmp, { readonly: true, fileMustExist: true });\n const rows = db.prepare(`\n SELECT DISTINCT p.url\n FROM moz_places p\n JOIN moz_bookmarks b ON b.fk = p.id\n WHERE b.type = 1 AND p.url NOT LIKE 'place:%'\n LIMIT 3000\n `).all() as { url: string }[];\n db.close();\n return rows.map(r => extractHost(r.url, 'firefox')).filter((h): h is BookmarkHost => h !== null);\n } catch {\n return [];\n } finally {\n try { (await import('node:fs')).unlinkSync(tmp); } catch { /* ignore */ }\n }\n}\n\nexport async function readFirefoxHistory(profileDir: string): Promise<HistoryHost[]> {\n const src = join(profileDir, 'places.sqlite');\n if (!existsSync(src)) return [];\n const tmp = join(tmpdir(), `cartograph_ff_hist_${Date.now()}.sqlite`);\n try {\n copyFileSync(src, tmp);\n const { default: Database } = await import('better-sqlite3');\n const db = new Database(tmp, { readonly: true, fileMustExist: true });\n const rows = db.prepare(`\n SELECT url, visit_count\n FROM moz_places\n WHERE url NOT LIKE 'place:%'\n AND visit_count > 0\n ORDER BY visit_count DESC\n LIMIT 5000\n `).all() as { url: string; visit_count: number }[];\n db.close();\n return rows\n .map(r => {\n const h = extractHost(r.url, 'firefox');\n if (!h) return null;\n return { ...h, visitCount: r.visit_count };\n })\n .filter((h): h is HistoryHost => h !== null);\n } catch {\n return [];\n } finally {\n try { (await import('node:fs')).unlinkSync(tmp); } catch { /* ignore */ }\n }\n}\n\nasync function readChromiumHistory(historyPath: string, source: string): Promise<HistoryHost[]> {\n if (!existsSync(historyPath)) return [];\n const tmp = join(tmpdir(), `cartograph_ch_hist_${Date.now()}.sqlite`);\n try {\n copyFileSync(historyPath, tmp);\n const { default: Database } = await import('better-sqlite3');\n const db = new Database(tmp, { readonly: true, fileMustExist: true });\n const rows = db.prepare(`\n SELECT url, visit_count\n FROM urls\n WHERE hidden = 0\n AND visit_count > 0\n ORDER BY visit_count DESC\n LIMIT 5000\n `).all() as { url: string; visit_count: number }[];\n db.close();\n return rows\n .map(r => {\n const h = extractHost(r.url, source);\n if (!h) return null;\n return { ...h, visitCount: r.visit_count };\n })\n .filter((h): h is HistoryHost => h !== null);\n } catch {\n return [];\n } finally {\n try { (await import('node:fs')).unlinkSync(tmp); } catch { /* ignore */ }\n }\n}\n\n// ── Platform paths ────────────────────────────────────────────────────────────\n\nconst HOME = homedir();\nconst IS_MAC = process.platform === 'darwin';\n\n// Browser bookmark file paths (multiple profiles supported)\nfunction chromeLikePaths(base: string): string[] {\n const paths: string[] = [];\n const defaultPath = join(base, 'Default', 'Bookmarks');\n if (existsSync(defaultPath)) paths.push(defaultPath);\n // Also check Profile 1, Profile 2, etc.\n if (existsSync(base)) {\n try {\n for (const entry of readdirSync(base)) {\n if (entry.startsWith('Profile ')) {\n const p = join(base, entry, 'Bookmarks');\n if (existsSync(p)) paths.push(p);\n }\n }\n } catch { /* ignore */ }\n }\n return paths;\n}\n\nfunction chromeLikeHistoryPaths(base: string): string[] {\n const paths: string[] = [];\n const defaultPath = join(base, 'Default', 'History');\n if (existsSync(defaultPath)) paths.push(defaultPath);\n if (existsSync(base)) {\n try {\n for (const entry of readdirSync(base)) {\n if (entry.startsWith('Profile ')) {\n const p = join(base, entry, 'History');\n if (existsSync(p)) paths.push(p);\n }\n }\n } catch { /* ignore */ }\n }\n return paths;\n}\n\nconst CHROME_BASE = IS_MAC\n ? `${HOME}/Library/Application Support/Google/Chrome`\n : `${HOME}/.config/google-chrome`;\n\nconst CHROMIUM_BASE = IS_MAC\n ? `${HOME}/Library/Application Support/Chromium`\n : `${HOME}/.config/chromium`;\n\n// Snap / Flatpak variants (Linux only)\nconst CHROMIUM_SNAP_BASE = `${HOME}/snap/chromium/common/chromium`;\nconst CHROMIUM_FLATPAK_BASE = `${HOME}/.var/app/org.chromium.Chromium/config/chromium`;\nconst CHROME_FLATPAK_BASE = `${HOME}/.var/app/com.google.Chrome/config/google-chrome`;\nconst BRAVE_FLATPAK_BASE = `${HOME}/.var/app/com.brave.Browser/config/BraveSoftware/Brave-Browser`;\nconst EDGE_FLATPAK_BASE = `${HOME}/.var/app/com.microsoft.Edge/config/microsoft-edge`;\nconst FIREFOX_SNAP_BASE = `${HOME}/snap/firefox/common/.mozilla/firefox`;\nconst FIREFOX_FLATPAK_BASE = `${HOME}/.var/app/org.mozilla.firefox/.mozilla/firefox`;\n\nconst EDGE_BASE = IS_MAC\n ? `${HOME}/Library/Application Support/Microsoft Edge`\n : `${HOME}/.config/microsoft-edge`;\n\nconst BRAVE_BASE = IS_MAC\n ? `${HOME}/Library/Application Support/BraveSoftware/Brave-Browser`\n : `${HOME}/.config/BraveSoftware/Brave-Browser`;\n\nconst VIVALDI_BASE = IS_MAC\n ? `${HOME}/Library/Application Support/Vivaldi`\n : `${HOME}/.config/vivaldi`;\n\nconst OPERA_BASE = IS_MAC\n ? `${HOME}/Library/Application Support/com.operasoftware.Opera`\n : `${HOME}/.config/opera`;\n\nfunction firefoxProfileDirs(): string[] {\n const bases = IS_MAC\n ? [`${HOME}/Library/Application Support/Firefox/Profiles`]\n : [`${HOME}/.mozilla/firefox`, FIREFOX_SNAP_BASE, FIREFOX_FLATPAK_BASE];\n\n const dirs: string[] = [];\n for (const base of bases) {\n if (!existsSync(base)) continue;\n try {\n for (const d of readdirSync(base)) {\n const full = join(base, d);\n try {\n if (statSync(full).isDirectory() && existsSync(join(full, 'places.sqlite'))) {\n dirs.push(full);\n }\n } catch { /* ignore */ }\n }\n } catch { /* ignore */ }\n }\n return dirs;\n}\n\n// ── Public API ────────────────────────────────────────────────────────────────\n\nexport async function scanAllBookmarks(): Promise<BookmarkHost[]> {\n const all: BookmarkHost[] = [];\n\n // Standard browser paths\n for (const p of chromeLikePaths(CHROME_BASE)) all.push(...readChromeLike(p, 'chrome'));\n for (const p of chromeLikePaths(CHROMIUM_BASE)) all.push(...readChromeLike(p, 'chromium'));\n for (const p of chromeLikePaths(EDGE_BASE)) all.push(...readChromeLike(p, 'edge'));\n for (const p of chromeLikePaths(BRAVE_BASE)) all.push(...readChromeLike(p, 'brave'));\n for (const p of chromeLikePaths(VIVALDI_BASE)) all.push(...readChromeLike(p, 'vivaldi'));\n for (const p of chromeLikePaths(OPERA_BASE)) all.push(...readChromeLike(p, 'opera'));\n\n // Snap / Flatpak paths (Linux)\n if (!IS_MAC) {\n for (const p of chromeLikePaths(CHROMIUM_SNAP_BASE)) all.push(...readChromeLike(p, 'chromium-snap'));\n for (const p of chromeLikePaths(CHROMIUM_FLATPAK_BASE)) all.push(...readChromeLike(p, 'chromium-flatpak'));\n for (const p of chromeLikePaths(CHROME_FLATPAK_BASE)) all.push(...readChromeLike(p, 'chrome-flatpak'));\n for (const p of chromeLikePaths(BRAVE_FLATPAK_BASE)) all.push(...readChromeLike(p, 'brave-flatpak'));\n for (const p of chromeLikePaths(EDGE_FLATPAK_BASE)) all.push(...readChromeLike(p, 'edge-flatpak'));\n }\n\n // Firefox: standard + snap + flatpak\n for (const dir of firefoxProfileDirs()) {\n all.push(...await readFirefoxBookmarks(dir));\n }\n\n // Deduplicate by hostname\n const seen = new Set<string>();\n return all.filter(h => {\n if (seen.has(h.hostname)) return false;\n seen.add(h.hostname);\n return true;\n });\n}\n\nexport async function scanAllHistory(): Promise<HistoryHost[]> {\n const all: HistoryHost[] = [];\n\n // Standard browser paths\n for (const p of chromeLikeHistoryPaths(CHROME_BASE)) all.push(...await readChromiumHistory(p, 'chrome'));\n for (const p of chromeLikeHistoryPaths(CHROMIUM_BASE)) all.push(...await readChromiumHistory(p, 'chromium'));\n for (const p of chromeLikeHistoryPaths(EDGE_BASE)) all.push(...await readChromiumHistory(p, 'edge'));\n for (const p of chromeLikeHistoryPaths(BRAVE_BASE)) all.push(...await readChromiumHistory(p, 'brave'));\n for (const p of chromeLikeHistoryPaths(VIVALDI_BASE)) all.push(...await readChromiumHistory(p, 'vivaldi'));\n for (const p of chromeLikeHistoryPaths(OPERA_BASE)) all.push(...await readChromiumHistory(p, 'opera'));\n\n // Snap / Flatpak paths (Linux)\n if (!IS_MAC) {\n for (const p of chromeLikeHistoryPaths(CHROMIUM_SNAP_BASE)) all.push(...await readChromiumHistory(p, 'chromium-snap'));\n for (const p of chromeLikeHistoryPaths(CHROMIUM_FLATPAK_BASE)) all.push(...await readChromiumHistory(p, 'chromium-flatpak'));\n for (const p of chromeLikeHistoryPaths(CHROME_FLATPAK_BASE)) all.push(...await readChromiumHistory(p, 'chrome-flatpak'));\n for (const p of chromeLikeHistoryPaths(BRAVE_FLATPAK_BASE)) all.push(...await readChromiumHistory(p, 'brave-flatpak'));\n for (const p of chromeLikeHistoryPaths(EDGE_FLATPAK_BASE)) all.push(...await readChromiumHistory(p, 'edge-flatpak'));\n }\n\n // Firefox: standard + snap + flatpak\n for (const dir of firefoxProfileDirs()) {\n all.push(...await readFirefoxHistory(dir));\n }\n\n // Deduplicate by hostname, summing visit counts\n const byHost = new Map<string, HistoryHost>();\n for (const h of all) {\n const existing = byHost.get(h.hostname);\n if (existing) {\n existing.visitCount += h.visitCount;\n } else {\n byHost.set(h.hostname, { ...h });\n }\n }\n\n // Sort by visit count descending\n return [...byHost.values()].sort((a, b) => b.visitCount - a.visitCount);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -28,14 +28,6 @@ var EDGE_RELATIONSHIPS = [
|
|
|
28
28
|
"contains",
|
|
29
29
|
"depends_on"
|
|
30
30
|
];
|
|
31
|
-
var EVENT_TYPES = [
|
|
32
|
-
"process_start",
|
|
33
|
-
"process_end",
|
|
34
|
-
"connection_open",
|
|
35
|
-
"connection_close",
|
|
36
|
-
"window_focus",
|
|
37
|
-
"tool_switch"
|
|
38
|
-
];
|
|
39
31
|
var NodeSchema = z.object({
|
|
40
32
|
id: z.string().describe('Format: "{type}:{host}:{port}" oder "{type}:{name}"'),
|
|
41
33
|
type: z.enum(NODE_TYPES),
|
|
@@ -52,15 +44,6 @@ var EdgeSchema = z.object({
|
|
|
52
44
|
evidence: z.string(),
|
|
53
45
|
confidence: z.number().min(0).max(1).default(0.5)
|
|
54
46
|
});
|
|
55
|
-
var EventSchema = z.object({
|
|
56
|
-
eventType: z.enum(EVENT_TYPES),
|
|
57
|
-
process: z.string(),
|
|
58
|
-
pid: z.number(),
|
|
59
|
-
target: z.string().optional(),
|
|
60
|
-
targetType: z.enum(NODE_TYPES).optional(),
|
|
61
|
-
protocol: z.string().optional(),
|
|
62
|
-
port: z.number().optional()
|
|
63
|
-
});
|
|
64
47
|
var SOPStepSchema = z.object({
|
|
65
48
|
order: z.number(),
|
|
66
49
|
instruction: z.string(),
|
|
@@ -77,27 +60,15 @@ var SOPSchema = z.object({
|
|
|
77
60
|
frequency: z.string(),
|
|
78
61
|
confidence: z.number().min(0).max(1)
|
|
79
62
|
});
|
|
80
|
-
var MIN_POLL_INTERVAL_MS = 15e3;
|
|
81
63
|
function defaultConfig(overrides = {}) {
|
|
82
64
|
const home = process.env.HOME ?? process.env.USERPROFILE ?? "/tmp";
|
|
83
65
|
return {
|
|
84
|
-
mode: "discover",
|
|
85
66
|
maxDepth: 8,
|
|
86
67
|
maxTurns: 50,
|
|
87
68
|
entryPoints: ["localhost"],
|
|
88
69
|
agentModel: "claude-sonnet-4-5-20250929",
|
|
89
|
-
shadowMode: "daemon",
|
|
90
|
-
pollIntervalMs: 3e4,
|
|
91
|
-
inactivityTimeoutMs: 3e5,
|
|
92
|
-
promptTimeoutMs: 6e4,
|
|
93
|
-
trackWindowFocus: false,
|
|
94
|
-
autoSaveNodes: false,
|
|
95
|
-
enableNotifications: true,
|
|
96
|
-
shadowModel: "claude-haiku-4-5-20251001",
|
|
97
70
|
outputDir: "./cartography-output",
|
|
98
71
|
dbPath: `${home}/.cartography/cartography.db`,
|
|
99
|
-
socketPath: `${home}/.cartography/daemon.sock`,
|
|
100
|
-
pidFile: `${home}/.cartography/daemon.pid`,
|
|
101
72
|
verbose: false,
|
|
102
73
|
...overrides
|
|
103
74
|
};
|
|
@@ -106,13 +77,10 @@ function defaultConfig(overrides = {}) {
|
|
|
106
77
|
export {
|
|
107
78
|
NODE_TYPES,
|
|
108
79
|
EDGE_RELATIONSHIPS,
|
|
109
|
-
EVENT_TYPES,
|
|
110
80
|
NodeSchema,
|
|
111
81
|
EdgeSchema,
|
|
112
|
-
EventSchema,
|
|
113
82
|
SOPStepSchema,
|
|
114
83
|
SOPSchema,
|
|
115
|
-
MIN_POLL_INTERVAL_MS,
|
|
116
84
|
defaultConfig
|
|
117
85
|
};
|
|
118
|
-
//# sourceMappingURL=chunk-
|
|
86
|
+
//# sourceMappingURL=chunk-FFNOC6HF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import { z } from 'zod';\n\n// ── Enums ────────────────────────────────\n\nexport const NODE_TYPES = [\n 'host', 'database_server', 'database', 'table',\n 'web_service', 'api_endpoint', 'cache_server',\n 'message_broker', 'queue', 'topic',\n 'container', 'pod', 'k8s_cluster',\n 'config_file', 'saas_tool', 'unknown',\n] as const;\nexport type NodeType = typeof NODE_TYPES[number];\n\nexport const EDGE_RELATIONSHIPS = [\n 'connects_to', 'reads_from', 'writes_to',\n 'calls', 'contains', 'depends_on',\n] as const;\nexport type EdgeRelationship = typeof EDGE_RELATIONSHIPS[number];\n\n// ── Zod Schemas ──────────────────────────\n\nexport const NodeSchema = z.object({\n id: z.string().describe('Format: \"{type}:{host}:{port}\" oder \"{type}:{name}\"'),\n type: z.enum(NODE_TYPES),\n name: z.string(),\n discoveredVia: z.string(),\n confidence: z.number().min(0).max(1).default(0.5),\n metadata: z.record(z.unknown()).default({}),\n tags: z.array(z.string()).default([]),\n});\nexport type DiscoveryNode = z.infer<typeof NodeSchema>;\n\nexport const EdgeSchema = z.object({\n sourceId: z.string(),\n targetId: z.string(),\n relationship: z.enum(EDGE_RELATIONSHIPS),\n evidence: z.string(),\n confidence: z.number().min(0).max(1).default(0.5),\n});\nexport type DiscoveryEdge = z.infer<typeof EdgeSchema>;\n\nexport const SOPStepSchema = z.object({\n order: z.number(),\n instruction: z.string(),\n tool: z.string(),\n target: z.string().optional(),\n notes: z.string().optional(),\n});\nexport type SOPStep = z.infer<typeof SOPStepSchema>;\n\nexport const SOPSchema = z.object({\n title: z.string(),\n description: z.string(),\n steps: z.array(SOPStepSchema),\n involvedSystems: z.array(z.string()),\n estimatedDuration: z.string(),\n frequency: z.string(),\n confidence: z.number().min(0).max(1),\n});\nexport type SOP = z.infer<typeof SOPSchema>;\n\n// ── DB Row Types ─────────────────────────\n\nexport interface NodeRow extends DiscoveryNode {\n sessionId: string;\n discoveredAt: string;\n depth: number;\n pathId?: string;\n}\n\nexport interface EdgeRow extends DiscoveryEdge {\n id: string;\n sessionId: string;\n discoveredAt: string;\n pathId?: string;\n}\n\nexport interface SessionRow {\n id: string;\n mode: 'discover';\n startedAt: string;\n completedAt?: string;\n config: string;\n}\n\n// ── Config ───────────────────────────────\n\nexport interface CartographyConfig {\n maxDepth: number;\n maxTurns: number;\n entryPoints: string[];\n agentModel: string;\n organization?: string;\n outputDir: string;\n dbPath: string;\n verbose: boolean;\n}\n\nexport function defaultConfig(overrides: Partial<CartographyConfig> = {}): CartographyConfig {\n const home = process.env.HOME ?? process.env.USERPROFILE ?? '/tmp';\n return {\n maxDepth: 8,\n maxTurns: 50,\n entryPoints: ['localhost'],\n agentModel: 'claude-sonnet-4-5-20250929',\n outputDir: './cartography-output',\n dbPath: `${home}/.cartography/cartography.db`,\n verbose: false,\n ...overrides,\n };\n}\n"],"mappings":";;;AAAA,SAAS,SAAS;AAIX,IAAM,aAAa;AAAA,EACxB;AAAA,EAAQ;AAAA,EAAmB;AAAA,EAAY;AAAA,EACvC;AAAA,EAAe;AAAA,EAAgB;AAAA,EAC/B;AAAA,EAAkB;AAAA,EAAS;AAAA,EAC3B;AAAA,EAAa;AAAA,EAAO;AAAA,EACpB;AAAA,EAAe;AAAA,EAAa;AAC9B;AAGO,IAAM,qBAAqB;AAAA,EAChC;AAAA,EAAe;AAAA,EAAc;AAAA,EAC7B;AAAA,EAAS;AAAA,EAAY;AACvB;AAKO,IAAM,aAAa,EAAE,OAAO;AAAA,EACjC,IAAI,EAAE,OAAO,EAAE,SAAS,qDAAqD;AAAA,EAC7E,MAAM,EAAE,KAAK,UAAU;AAAA,EACvB,MAAM,EAAE,OAAO;AAAA,EACf,eAAe,EAAE,OAAO;AAAA,EACxB,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG;AAAA,EAChD,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC1C,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAGM,IAAM,aAAa,EAAE,OAAO;AAAA,EACjC,UAAU,EAAE,OAAO;AAAA,EACnB,UAAU,EAAE,OAAO;AAAA,EACnB,cAAc,EAAE,KAAK,kBAAkB;AAAA,EACvC,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG;AAClD,CAAC;AAGM,IAAM,gBAAgB,EAAE,OAAO;AAAA,EACpC,OAAO,EAAE,OAAO;AAAA,EAChB,aAAa,EAAE,OAAO;AAAA,EACtB,MAAM,EAAE,OAAO;AAAA,EACf,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,OAAO,EAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAGM,IAAM,YAAY,EAAE,OAAO;AAAA,EAChC,OAAO,EAAE,OAAO;AAAA,EAChB,aAAa,EAAE,OAAO;AAAA,EACtB,OAAO,EAAE,MAAM,aAAa;AAAA,EAC5B,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EACnC,mBAAmB,EAAE,OAAO;AAAA,EAC5B,WAAW,EAAE,OAAO;AAAA,EACpB,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AACrC,CAAC;AAwCM,SAAS,cAAc,YAAwC,CAAC,GAAsB;AAC3F,QAAM,OAAO,QAAQ,IAAI,QAAQ,QAAQ,IAAI,eAAe;AAC5D,SAAO;AAAA,IACL,UAAU;AAAA,IACV,UAAU;AAAA,IACV,aAAa,CAAC,WAAW;AAAA,IACzB,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,QAAQ,GAAG,IAAI;AAAA,IACf,SAAS;AAAA,IACT,GAAG;AAAA,EACL;AACF;","names":[]}
|