@monoes/monomindcli 1.11.11 → 1.11.13
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/skills/mastermind/architect.md +4 -7
- package/.claude/skills/mastermind/autodev.md +1 -3
- package/.claude/skills/mastermind/idea.md +0 -8
- package/.claude/skills/mastermind/monitor.md +2 -2
- package/README.md +286 -129
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +55 -1
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/ui/collector.mjs +118 -9
- package/dist/src/ui/dashboard.html +1432 -493
- package/dist/src/ui/data/agent-avatars.html +763 -0
- package/dist/src/ui/data/agent-avatars.json +966 -0
- package/dist/src/ui/data/avatars/account-strategist.svg +58 -0
- package/dist/src/ui/data/avatars/accounts-payable.svg +54 -0
- package/dist/src/ui/data/avatars/adaptive-coordinator.svg +55 -0
- package/dist/src/ui/data/avatars/adaptive-coordinator2.svg +54 -0
- package/dist/src/ui/data/avatars/ai-citation.svg +57 -0
- package/dist/src/ui/data/avatars/ai-engineer.svg +61 -0
- package/dist/src/ui/data/avatars/analytics-reporter.svg +53 -0
- package/dist/src/ui/data/avatars/api-tester.svg +53 -0
- package/dist/src/ui/data/avatars/architecture.svg +54 -0
- package/dist/src/ui/data/avatars/automation-governance.svg +55 -0
- package/dist/src/ui/data/avatars/backend-dev.svg +53 -0
- package/dist/src/ui/data/avatars/benchmarker.svg +54 -0
- package/dist/src/ui/data/avatars/blockchain-auditor.svg +53 -0
- package/dist/src/ui/data/avatars/byzantine-coord.svg +57 -0
- package/dist/src/ui/data/avatars/case-analyst.svg +57 -0
- package/dist/src/ui/data/avatars/cicd-engineer.svg +55 -0
- package/dist/src/ui/data/avatars/cloud-architect.svg +54 -0
- package/dist/src/ui/data/avatars/code-review-swarm.svg +57 -0
- package/dist/src/ui/data/avatars/coder-v119.svg +57 -0
- package/dist/src/ui/data/avatars/coder.svg +58 -0
- package/dist/src/ui/data/avatars/collective-coord.svg +54 -0
- package/dist/src/ui/data/avatars/compliance-auditor.svg +58 -0
- package/dist/src/ui/data/avatars/consensus-coordinator.svg +54 -0
- package/dist/src/ui/data/avatars/content-creator.svg +54 -0
- package/dist/src/ui/data/avatars/crdt-synchronizer.svg +53 -0
- package/dist/src/ui/data/avatars/cro-specialist.svg +58 -0
- package/dist/src/ui/data/avatars/data-consolidator.svg +54 -0
- package/dist/src/ui/data/avatars/data-engineer.svg +53 -0
- package/dist/src/ui/data/avatars/database-optimizer.svg +61 -0
- package/dist/src/ui/data/avatars/deal-strategist.svg +54 -0
- package/dist/src/ui/data/avatars/defender.svg +53 -0
- package/dist/src/ui/data/avatars/devops-automator.svg +56 -0
- package/dist/src/ui/data/avatars/discovery-coach.svg +54 -0
- package/dist/src/ui/data/avatars/email-marketing.svg +57 -0
- package/dist/src/ui/data/avatars/embedded-firmware.svg +61 -0
- package/dist/src/ui/data/avatars/evidence-collector.svg +57 -0
- package/dist/src/ui/data/avatars/experiment-tracker.svg +53 -0
- package/dist/src/ui/data/avatars/feedback-synthesizer.svg +54 -0
- package/dist/src/ui/data/avatars/finance-tracker.svg +54 -0
- package/dist/src/ui/data/avatars/frontend-developer.svg +54 -0
- package/dist/src/ui/data/avatars/game-audio-engineer.svg +59 -0
- package/dist/src/ui/data/avatars/game-designer.svg +54 -0
- package/dist/src/ui/data/avatars/gossip-coordinator.svg +54 -0
- package/dist/src/ui/data/avatars/hierarchical-coord.svg +54 -0
- package/dist/src/ui/data/avatars/incident-commander.svg +57 -0
- package/dist/src/ui/data/avatars/infrastructure.svg +54 -0
- package/dist/src/ui/data/avatars/input-validator.svg +53 -0
- package/dist/src/ui/data/avatars/ios-developer.svg +54 -0
- package/dist/src/ui/data/avatars/issue-tracker.svg +53 -0
- package/dist/src/ui/data/avatars/judge.svg +55 -0
- package/dist/src/ui/data/avatars/launch-strategist.svg +54 -0
- package/dist/src/ui/data/avatars/legal-compliance.svg +53 -0
- package/dist/src/ui/data/avatars/level-designer.svg +53 -0
- package/dist/src/ui/data/avatars/load-balancer.svg +57 -0
- package/dist/src/ui/data/avatars/mcp-builder.svg +53 -0
- package/dist/src/ui/data/avatars/memory-coordinator.svg +55 -0
- package/dist/src/ui/data/avatars/mesh-coordinator.svg +55 -0
- package/dist/src/ui/data/avatars/ml-developer.svg +58 -0
- package/dist/src/ui/data/avatars/mobile-app-builder.svg +53 -0
- package/dist/src/ui/data/avatars/mobile-dev.svg +54 -0
- package/dist/src/ui/data/avatars/model-qa.svg +58 -0
- package/dist/src/ui/data/avatars/narrative-designer.svg +58 -0
- package/dist/src/ui/data/avatars/outbound-strategist.svg +55 -0
- package/dist/src/ui/data/avatars/path-validator.svg +54 -0
- package/dist/src/ui/data/avatars/payment-agent.svg +53 -0
- package/dist/src/ui/data/avatars/perf-analyzer.svg +58 -0
- package/dist/src/ui/data/avatars/pipeline-analyst.svg +54 -0
- package/dist/src/ui/data/avatars/planner.svg +55 -0
- package/dist/src/ui/data/avatars/pr-manager.svg +54 -0
- package/dist/src/ui/data/avatars/pricing-strategist.svg +54 -0
- package/dist/src/ui/data/avatars/product-manager.svg +54 -0
- package/dist/src/ui/data/avatars/production-validator.svg +54 -0
- package/dist/src/ui/data/avatars/project-shepherd.svg +54 -0
- package/dist/src/ui/data/avatars/proposal-strategist.svg +54 -0
- package/dist/src/ui/data/avatars/prosecutor.svg +57 -0
- package/dist/src/ui/data/avatars/pseudocode.svg +53 -0
- package/dist/src/ui/data/avatars/queen-coordinator.svg +55 -0
- package/dist/src/ui/data/avatars/quorum-manager.svg +53 -0
- package/dist/src/ui/data/avatars/raft-manager.svg +53 -0
- package/dist/src/ui/data/avatars/reality-checker.svg +58 -0
- package/dist/src/ui/data/avatars/recruitment.svg +58 -0
- package/dist/src/ui/data/avatars/refinement.svg +53 -0
- package/dist/src/ui/data/avatars/release-manager.svg +54 -0
- package/dist/src/ui/data/avatars/repo-architect.svg +54 -0
- package/dist/src/ui/data/avatars/researcher.svg +58 -0
- package/dist/src/ui/data/avatars/resource-allocator.svg +53 -0
- package/dist/src/ui/data/avatars/reviewer.svg +53 -0
- package/dist/src/ui/data/avatars/safe-executor.svg +53 -0
- package/dist/src/ui/data/avatars/sales-coach.svg +53 -0
- package/dist/src/ui/data/avatars/sales-engineer.svg +58 -0
- package/dist/src/ui/data/avatars/scout-explorer.svg +58 -0
- package/dist/src/ui/data/avatars/security-architect.svg +54 -0
- package/dist/src/ui/data/avatars/security-auditor.svg +55 -0
- package/dist/src/ui/data/avatars/senior-developer.svg +58 -0
- package/dist/src/ui/data/avatars/senior-pm.svg +58 -0
- package/dist/src/ui/data/avatars/seo-specialist.svg +57 -0
- package/dist/src/ui/data/avatars/social-media.svg +54 -0
- package/dist/src/ui/data/avatars/solidity-engineer.svg +58 -0
- package/dist/src/ui/data/avatars/sparc-coder.svg +58 -0
- package/dist/src/ui/data/avatars/sparc-coord.svg +56 -0
- package/dist/src/ui/data/avatars/specification.svg +57 -0
- package/dist/src/ui/data/avatars/sprint-prioritizer.svg +53 -0
- package/dist/src/ui/data/avatars/sre.svg +54 -0
- package/dist/src/ui/data/avatars/studio-operations.svg +53 -0
- package/dist/src/ui/data/avatars/studio-producer.svg +55 -0
- package/dist/src/ui/data/avatars/support-responder.svg +56 -0
- package/dist/src/ui/data/avatars/system-architect.svg +54 -0
- package/dist/src/ui/data/avatars/task-orchestrator.svg +56 -0
- package/dist/src/ui/data/avatars/technical-artist.svg +53 -0
- package/dist/src/ui/data/avatars/technical-writer.svg +59 -0
- package/dist/src/ui/data/avatars/tester.svg +53 -0
- package/dist/src/ui/data/avatars/threat-detection.svg +61 -0
- package/dist/src/ui/data/avatars/trend-researcher.svg +54 -0
- package/dist/src/ui/data/avatars/trial-director.svg +55 -0
- package/dist/src/ui/data/avatars/unity-architect.svg +54 -0
- package/dist/src/ui/data/avatars/visionos-engineer.svg +57 -0
- package/dist/src/ui/data/avatars/worker-specialist.svg +55 -0
- package/dist/src/ui/data/avatars/workflow-architect.svg +57 -0
- package/dist/src/ui/data/avatars/workflow-automation.svg +54 -0
- package/dist/src/ui/data/avatars/zk-steward.svg +54 -0
- package/dist/src/ui/server.mjs +75 -73
- package/dist/src/update/checker.d.ts.map +1 -1
- package/dist/src/update/checker.js +24 -7
- package/dist/src/update/checker.js.map +1 -1
- package/dist/src/update/index.d.ts.map +1 -1
- package/dist/src/update/index.js +3 -6
- package/dist/src/update/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -9
- package/dist/src/ui/.monomind/data/pending-insights.jsonl +0 -0
- package/dist/src/ui/.monomind/data/ranked-context.json +0 -5
- package/dist/src/ui/.monomind/loops/mastermind-review-1778664132789.json +0 -16
- package/dist/src/ui/.monomind/sessions/current.json +0 -13
- package/dist/src/ui/.monomind/sessions/session-1776778451399.json +0 -15
package/dist/src/ui/server.mjs
CHANGED
|
@@ -1031,7 +1031,8 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1031
1031
|
// ---------------------------------------------------------- GET /api/loops
|
|
1032
1032
|
if (req.method === 'GET' && url === '/api/loops') {
|
|
1033
1033
|
try {
|
|
1034
|
-
const
|
|
1034
|
+
const qs = new URL(req.url, 'http://localhost').searchParams;
|
|
1035
|
+
const cwd = qs.get('dir') || projectDir || process.cwd();
|
|
1035
1036
|
const loopsDir = path.join(cwd, '.monomind', 'loops');
|
|
1036
1037
|
let loops = [];
|
|
1037
1038
|
let stopFiles = new Set();
|
|
@@ -1059,7 +1060,8 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1059
1060
|
let alive = false;
|
|
1060
1061
|
try { process.kill(pid, 0); alive = true; } catch {}
|
|
1061
1062
|
const alreadyTracked = loops.some(l => l.id === sessionId || l.sessionId === sessionId);
|
|
1062
|
-
|
|
1063
|
+
const hasRepeatLoops = loops.some(l => l.source === '_repeat.md');
|
|
1064
|
+
if (alive && sessionId && !alreadyTracked && !hasRepeatLoops && !stopFiles.has(sessionId)) {
|
|
1063
1065
|
// Try to extract ScheduleWakeup context from session JSONL
|
|
1064
1066
|
let loopEntry = null;
|
|
1065
1067
|
try {
|
|
@@ -1099,11 +1101,15 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1099
1101
|
const timesFlag = (prompt).match(/--times\s+(\d+)/);
|
|
1100
1102
|
const finalRep = repFlag ? parseInt(repFlag[1]) : currentRep;
|
|
1101
1103
|
const finalMax = timesFlag ? parseInt(timesFlag[1]) : maxReps;
|
|
1102
|
-
const
|
|
1104
|
+
const isTillendPrompt = /--tillend/i.test(prompt);
|
|
1105
|
+
const type = isTillendPrompt ? 'tillend' : (finalMax > 0 || /repeat|loop/i.test(prompt)) ? 'repeat' : 'do';
|
|
1106
|
+
const cmdMatch = prompt.match(/^\s*(\/[\w:_-]+)/);
|
|
1107
|
+
const command = cmdMatch ? cmdMatch[1] : '';
|
|
1103
1108
|
loopEntry = {
|
|
1104
1109
|
id: sessionId,
|
|
1105
1110
|
sessionId,
|
|
1106
1111
|
type,
|
|
1112
|
+
command,
|
|
1107
1113
|
status: 'waiting',
|
|
1108
1114
|
prompt: prompt.slice(0, 300),
|
|
1109
1115
|
reason,
|
|
@@ -1151,9 +1157,10 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1151
1157
|
req.on('data', chunk => { body += chunk; });
|
|
1152
1158
|
req.on('end', () => {
|
|
1153
1159
|
try {
|
|
1160
|
+
const stopQs = new URL(req.url, 'http://localhost').searchParams;
|
|
1154
1161
|
const { id } = JSON.parse(body);
|
|
1155
1162
|
if (!id) { res.writeHead(400); res.end(JSON.stringify({ error: 'id required' })); return; }
|
|
1156
|
-
const loopsDir = path.join(projectDir || process.cwd(), '.monomind', 'loops');
|
|
1163
|
+
const loopsDir = path.join(stopQs.get('dir') || projectDir || process.cwd(), '.monomind', 'loops');
|
|
1157
1164
|
fs.mkdirSync(loopsDir, { recursive: true });
|
|
1158
1165
|
fs.writeFileSync(path.join(loopsDir, `${id}.stop`), `stop-requested-${Date.now()}`);
|
|
1159
1166
|
res.writeHead(200, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' });
|
|
@@ -1169,12 +1176,14 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1169
1176
|
req.on('data', chunk => { body += chunk; });
|
|
1170
1177
|
req.on('end', () => {
|
|
1171
1178
|
try {
|
|
1179
|
+
const createQs = new URL(req.url, 'http://localhost').searchParams;
|
|
1172
1180
|
const { name, prompt, interval, maxReps } = JSON.parse(body);
|
|
1173
1181
|
if (!prompt) { res.writeHead(400); res.end(JSON.stringify({ error: 'prompt required' })); return; }
|
|
1174
|
-
const loopsDir = path.join(projectDir || process.cwd(), '.monomind', 'loops');
|
|
1182
|
+
const loopsDir = path.join(createQs.get('dir') || projectDir || process.cwd(), '.monomind', 'loops');
|
|
1175
1183
|
fs.mkdirSync(loopsDir, { recursive: true });
|
|
1176
1184
|
const id = `loop-${Date.now()}-${Math.random().toString(36).slice(2,7)}`;
|
|
1177
|
-
const
|
|
1185
|
+
const nowMs = Date.now();
|
|
1186
|
+
const loop = { id, type: 'repeat', name: name || prompt.slice(0, 40), prompt, interval: interval || '1h', maxReps: maxReps || null, status: 'active', currentRep: 0, startedAt: nowMs, lastRunAt: null };
|
|
1178
1187
|
fs.writeFileSync(path.join(loopsDir, `${id}.json`), JSON.stringify(loop, null, 2));
|
|
1179
1188
|
res.writeHead(200, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' });
|
|
1180
1189
|
res.end(JSON.stringify({ ok: true, id }));
|
|
@@ -1343,8 +1352,8 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1343
1352
|
|
|
1344
1353
|
// Generate HTML on-the-fly from SQLite DB using the improved toHtml export
|
|
1345
1354
|
if (fs.existsSync(dbPath)) {
|
|
1346
|
-
const { openDb, closeDb } = await import('
|
|
1347
|
-
const { toHtml } = await import('
|
|
1355
|
+
const { openDb, closeDb } = await import(new URL('../../../../monograph/dist/src/storage/db.js', import.meta.url).href);
|
|
1356
|
+
const { toHtml } = await import(new URL('../../../../monograph/dist/src/export/html.js', import.meta.url).href);
|
|
1348
1357
|
const db = openDb(dbPath);
|
|
1349
1358
|
let html;
|
|
1350
1359
|
try {
|
|
@@ -1404,7 +1413,7 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1404
1413
|
let report = null, exists = false, stats = null;
|
|
1405
1414
|
if (fs.existsSync(dbPath)) {
|
|
1406
1415
|
exists = true;
|
|
1407
|
-
const { openDb, closeDb } = await import('
|
|
1416
|
+
const { openDb, closeDb } = await import(new URL('../../../../monograph/dist/src/storage/db.js', import.meta.url).href);
|
|
1408
1417
|
const db = openDb(dbPath);
|
|
1409
1418
|
try {
|
|
1410
1419
|
const nodeCount = db.prepare('SELECT COUNT(*) AS c FROM nodes').get().c;
|
|
@@ -1447,7 +1456,7 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1447
1456
|
const dbPath = path.join(d, '.monomind', 'monograph.db');
|
|
1448
1457
|
let nodes = [], edges = [];
|
|
1449
1458
|
if (fs.existsSync(dbPath)) {
|
|
1450
|
-
const { openDb, closeDb } = await import('
|
|
1459
|
+
const { openDb, closeDb } = await import(new URL('../../../../monograph/dist/src/storage/db.js', import.meta.url).href);
|
|
1451
1460
|
const db = openDb(dbPath);
|
|
1452
1461
|
try {
|
|
1453
1462
|
const nodeLimit = Math.min(parseInt(qs.get('limit') || '500', 10), 5000);
|
|
@@ -1585,8 +1594,8 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1585
1594
|
|
|
1586
1595
|
// Run doc parsing in background
|
|
1587
1596
|
(async () => {
|
|
1588
|
-
const { openDb, closeDb } = await import('
|
|
1589
|
-
const { isFileCached, updateFileCache, hashFileContent } = await import('
|
|
1597
|
+
const { openDb, closeDb } = await import(new URL('../../../../monograph/dist/src/storage/db.js', import.meta.url).href);
|
|
1598
|
+
const { isFileCached, updateFileCache, hashFileContent } = await import(new URL('../../../../monograph/dist/src/storage/file-cache.js', import.meta.url).href);
|
|
1590
1599
|
const { readFileSync, readdirSync, statSync } = fs;
|
|
1591
1600
|
|
|
1592
1601
|
const docExts = new Set(['.md', '.mdx', '.txt', '.rst']);
|
|
@@ -1749,7 +1758,7 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1749
1758
|
const dbPath = path.join(d, '.monomind', 'monograph.db');
|
|
1750
1759
|
if (!id) { res.writeHead(400); res.end(JSON.stringify({ error: 'Missing ?id=' })); return; }
|
|
1751
1760
|
if (!fs.existsSync(dbPath)) { res.writeHead(404); res.end(JSON.stringify({ error: 'Graph not built' })); return; }
|
|
1752
|
-
const { openDb, closeDb } = await import('
|
|
1761
|
+
const { openDb, closeDb } = await import(new URL('../../../../monograph/dist/src/storage/db.js', import.meta.url).href);
|
|
1753
1762
|
const db = openDb(dbPath);
|
|
1754
1763
|
let content = '', filePath = '', startLine = 0, endLine = 0, language = '', name = '', type = '';
|
|
1755
1764
|
try {
|
|
@@ -1799,8 +1808,8 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1799
1808
|
const dbPath = path.join(d, '.monomind', 'monograph.db');
|
|
1800
1809
|
if (!q) { res.writeHead(400); res.end(JSON.stringify({ error: 'Missing ?q=' })); return; }
|
|
1801
1810
|
if (!fs.existsSync(dbPath)) { res.writeHead(200, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }); res.end(JSON.stringify({ nodes: [] })); return; }
|
|
1802
|
-
const { openDb, closeDb } = await import('
|
|
1803
|
-
const { ftsSearch } = await import('
|
|
1811
|
+
const { openDb, closeDb } = await import(new URL('../../../../monograph/dist/src/storage/db.js', import.meta.url).href);
|
|
1812
|
+
const { ftsSearch } = await import(new URL('../../../../monograph/dist/src/storage/fts-store.js', import.meta.url).href);
|
|
1804
1813
|
const db = openDb(dbPath);
|
|
1805
1814
|
let nodes = [];
|
|
1806
1815
|
try {
|
|
@@ -1831,7 +1840,7 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1831
1840
|
const d = path.resolve(dir || process.cwd());
|
|
1832
1841
|
const dbPath = path.join(d, '.monomind', 'monograph.db');
|
|
1833
1842
|
if (!id || !fs.existsSync(dbPath)) { res.writeHead(200, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }); res.end(JSON.stringify({ related: [] })); return; }
|
|
1834
|
-
const { openDb, closeDb } = await import('
|
|
1843
|
+
const { openDb, closeDb } = await import(new URL('../../../../monograph/dist/src/storage/db.js', import.meta.url).href);
|
|
1835
1844
|
const db = openDb(dbPath);
|
|
1836
1845
|
const related = [];
|
|
1837
1846
|
try {
|
|
@@ -1872,7 +1881,7 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1872
1881
|
const d = path.resolve(dir || process.cwd());
|
|
1873
1882
|
const dbPath = path.join(d, '.monomind', 'monograph.db');
|
|
1874
1883
|
if (!id || !fs.existsSync(dbPath)) { res.writeHead(404); res.end(JSON.stringify({ error: 'Not found' })); return; }
|
|
1875
|
-
const { openDb, closeDb } = await import('
|
|
1884
|
+
const { openDb, closeDb } = await import(new URL('../../../../monograph/dist/src/storage/db.js', import.meta.url).href);
|
|
1876
1885
|
const db = openDb(dbPath);
|
|
1877
1886
|
let result = { node: null, content: '', neighbors: [], markdown: '' };
|
|
1878
1887
|
try {
|
|
@@ -1932,8 +1941,8 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1932
1941
|
const dbPath = path.join(d, '.monomind', 'monograph.db');
|
|
1933
1942
|
if (!q) { res.writeHead(400); res.end(JSON.stringify({ error: 'Missing ?q= parameter' })); return; }
|
|
1934
1943
|
if (!fs.existsSync(dbPath)) { res.writeHead(200, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }); res.end(JSON.stringify({ success: false, result: 'Graph not built yet. Run: monomind monograph build' })); return; }
|
|
1935
|
-
const { openDb, closeDb } = await import('
|
|
1936
|
-
const { ftsSearch } = await import('
|
|
1944
|
+
const { openDb, closeDb } = await import(new URL('../../../../monograph/dist/src/storage/db.js', import.meta.url).href);
|
|
1945
|
+
const { ftsSearch } = await import(new URL('../../../../monograph/dist/src/storage/fts-store.js', import.meta.url).href);
|
|
1937
1946
|
const db = openDb(dbPath);
|
|
1938
1947
|
let result = '';
|
|
1939
1948
|
try {
|
|
@@ -1969,8 +1978,8 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
1969
1978
|
const dbPath = path.join(d, '.monomind', 'monograph.db');
|
|
1970
1979
|
if (!nodeQ) { res.writeHead(400); res.end(JSON.stringify({ error: 'Missing ?node= parameter' })); return; }
|
|
1971
1980
|
if (!fs.existsSync(dbPath)) { res.writeHead(200, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }); res.end(JSON.stringify({ success: false, explanation: 'Graph not built yet. Run: monomind monograph build' })); return; }
|
|
1972
|
-
const { openDb, closeDb } = await import('
|
|
1973
|
-
const { ftsSearch } = await import('
|
|
1981
|
+
const { openDb, closeDb } = await import(new URL('../../../../monograph/dist/src/storage/db.js', import.meta.url).href);
|
|
1982
|
+
const { ftsSearch } = await import(new URL('../../../../monograph/dist/src/storage/fts-store.js', import.meta.url).href);
|
|
1974
1983
|
const db = openDb(dbPath);
|
|
1975
1984
|
let explanation = '';
|
|
1976
1985
|
try {
|
|
@@ -2013,8 +2022,8 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
2013
2022
|
if (!from || !to) { res.writeHead(400); res.end(JSON.stringify({ error: 'Missing ?from= and ?to= parameters' })); return; }
|
|
2014
2023
|
if (!fs.existsSync(dbPath)) { res.writeHead(200, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }); res.end(JSON.stringify({ success: false, path: 'Graph not built yet.' })); return; }
|
|
2015
2024
|
// Import only graphology-free storage modules to avoid broken graphology dep
|
|
2016
|
-
const { openDb, closeDb } = await import('
|
|
2017
|
-
const { ftsSearch } = await import('
|
|
2025
|
+
const { openDb, closeDb } = await import(new URL('../../../../monograph/dist/src/storage/db.js', import.meta.url).href);
|
|
2026
|
+
const { ftsSearch } = await import(new URL('../../../../monograph/dist/src/storage/fts-store.js', import.meta.url).href);
|
|
2018
2027
|
// SQL-based BFS for shortest path (avoids graphology)
|
|
2019
2028
|
const getShortestPath = (db, fromId, toId, maxDepth = 6) => {
|
|
2020
2029
|
if (fromId === toId) return [fromId];
|
|
@@ -2141,10 +2150,10 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
2141
2150
|
const dbPath2 = path.join(d2, '.monomind', 'monograph.db');
|
|
2142
2151
|
if (!fs.existsSync(dbPath2)) { err('monograph.db not found — run monograph build first'); return; }
|
|
2143
2152
|
// Import only graphology-free storage modules to avoid broken graphology dep
|
|
2144
|
-
const { openDb, closeDb } = await import('
|
|
2145
|
-
const { ftsSearch } = await import('
|
|
2146
|
-
const { countNodes } = await import('
|
|
2147
|
-
const { countEdges } = await import('
|
|
2153
|
+
const { openDb, closeDb } = await import(new URL('../../../../monograph/dist/src/storage/db.js', import.meta.url).href);
|
|
2154
|
+
const { ftsSearch } = await import(new URL('../../../../monograph/dist/src/storage/fts-store.js', import.meta.url).href);
|
|
2155
|
+
const { countNodes } = await import(new URL('../../../../monograph/dist/src/storage/node-store.js', import.meta.url).href);
|
|
2156
|
+
const { countEdges } = await import(new URL('../../../../monograph/dist/src/storage/edge-store.js', import.meta.url).href);
|
|
2148
2157
|
const getShortestPath = (db, fromId, toId, maxDepth = 6) => {
|
|
2149
2158
|
if (fromId === toId) return [fromId];
|
|
2150
2159
|
const visited = new Set([fromId]);
|
|
@@ -2769,54 +2778,47 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
2769
2778
|
if (req.method === 'GET' && url.startsWith('/api/token-usage')) {
|
|
2770
2779
|
try {
|
|
2771
2780
|
const qs = new URL(req.url, 'http://localhost').searchParams;
|
|
2772
|
-
const period =
|
|
2781
|
+
const period = qs.get('period') || 'today';
|
|
2773
2782
|
const dir = path.resolve(qs.get('dir') || projectDir || process.cwd());
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2783
|
+
|
|
2784
|
+
// Determine date window
|
|
2785
|
+
const now = new Date();
|
|
2786
|
+
const todayStr = now.toISOString().slice(0, 10);
|
|
2787
|
+
let fromStr;
|
|
2788
|
+
let daysBack;
|
|
2789
|
+
if (period === 'today') {
|
|
2790
|
+
fromStr = todayStr; daysBack = 1;
|
|
2791
|
+
} else if (period === 'week') {
|
|
2792
|
+
const d = new Date(now); d.setDate(d.getDate() - 6);
|
|
2793
|
+
fromStr = d.toISOString().slice(0, 10); daysBack = 7;
|
|
2794
|
+
} else if (period === '30d' || period === '30days') {
|
|
2795
|
+
const d = new Date(now); d.setDate(d.getDate() - 29);
|
|
2796
|
+
fromStr = d.toISOString().slice(0, 10); daysBack = 30;
|
|
2797
|
+
} else { // month
|
|
2798
|
+
fromStr = now.toISOString().slice(0, 7) + '-01'; daysBack = 32;
|
|
2799
|
+
}
|
|
2800
|
+
|
|
2801
|
+
const raw = collectTokens(dir, Math.max(daysBack + 1, 14));
|
|
2802
|
+
// Filter daily to the requested window
|
|
2803
|
+
const daily = (raw.daily || []).filter(d => d.date >= fromStr);
|
|
2804
|
+
// Aggregate summary for the period
|
|
2805
|
+
let cost = 0, calls = 0, tokensIn = 0, tokensOut = 0;
|
|
2806
|
+
for (const d of daily) { cost += d.cost; calls += d.calls; tokensIn += d.tokensIn; tokensOut += d.tokensOut; }
|
|
2807
|
+
// Filter rows to sessions that had activity in the window
|
|
2808
|
+
const rows = (raw.rows || []).filter(r => {
|
|
2809
|
+
// rows don't have dates yet, just include top ones by cost
|
|
2810
|
+
return true;
|
|
2811
|
+
}).slice(0, 30);
|
|
2812
|
+
|
|
2813
|
+
const summary = {
|
|
2814
|
+
todayCost: cost,
|
|
2815
|
+
todayCalls: calls,
|
|
2816
|
+
cost, calls,
|
|
2817
|
+
totalTokens: tokensIn + tokensOut,
|
|
2818
|
+
modelCount: Object.keys(raw.summary?.modelBreakdown || {}).length || null,
|
|
2779
2819
|
};
|
|
2780
|
-
|
|
2781
|
-
|
|
2782
|
-
const _req = createRequire(import.meta.url);
|
|
2783
|
-
const tracker = _req(trackerPath);
|
|
2784
|
-
const range = tracker.getDateRange(period);
|
|
2785
|
-
const projects = tracker.parseAllSessions(range.start, range.end);
|
|
2786
|
-
let totalCost = 0, totalIn = 0, totalOut = 0, totalCR = 0, totalCW = 0, totalCalls = 0;
|
|
2787
|
-
const modelBreakdown = {}, categoryBreakdown = {}, toolBreakdown = {}, mcpBreakdown = {};
|
|
2788
|
-
for (const p of projects) {
|
|
2789
|
-
totalCost += p.totalCost || 0;
|
|
2790
|
-
for (const s of (p.sessions || [])) {
|
|
2791
|
-
totalIn += s.totalInputTokens || 0;
|
|
2792
|
-
totalOut += s.totalOutputTokens || 0;
|
|
2793
|
-
totalCR += s.totalCacheRead || 0;
|
|
2794
|
-
totalCW += s.totalCacheWrite || 0;
|
|
2795
|
-
totalCalls += s.apiCalls || 0;
|
|
2796
|
-
for (const [mn, m] of Object.entries(s.modelBreakdown || {})) {
|
|
2797
|
-
if (!modelBreakdown[mn]) modelBreakdown[mn] = { calls: 0, cost: 0, tokens: 0 };
|
|
2798
|
-
modelBreakdown[mn].calls += m.calls || 0;
|
|
2799
|
-
modelBreakdown[mn].cost += m.cost || 0;
|
|
2800
|
-
modelBreakdown[mn].tokens += m.tokens || 0;
|
|
2801
|
-
}
|
|
2802
|
-
for (const [cat, c] of Object.entries(s.categoryBreakdown || {})) {
|
|
2803
|
-
if (!categoryBreakdown[cat]) categoryBreakdown[cat] = { turns: 0, cost: 0 };
|
|
2804
|
-
categoryBreakdown[cat].turns += c.turns || 0;
|
|
2805
|
-
categoryBreakdown[cat].cost += c.cost || 0;
|
|
2806
|
-
}
|
|
2807
|
-
for (const [tool, t] of Object.entries(s.toolBreakdown || {})) {
|
|
2808
|
-
if (!toolBreakdown[tool]) toolBreakdown[tool] = { calls: 0 };
|
|
2809
|
-
toolBreakdown[tool].calls += t.calls || 0;
|
|
2810
|
-
}
|
|
2811
|
-
for (const [srv, m] of Object.entries(s.mcpBreakdown || {})) {
|
|
2812
|
-
if (!mcpBreakdown[srv]) mcpBreakdown[srv] = { calls: 0 };
|
|
2813
|
-
mcpBreakdown[srv].calls += m.calls || 0;
|
|
2814
|
-
}
|
|
2815
|
-
}
|
|
2816
|
-
}
|
|
2817
|
-
res.writeHead(200, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', 'Cache-Control': 'no-cache' });
|
|
2818
|
-
res.end(JSON.stringify({ totalCost, totalCalls, totalIn, totalOut, totalCR, totalCW, projects, modelBreakdown, categoryBreakdown, toolBreakdown, mcpBreakdown, periodLabel: period }));
|
|
2819
|
-
} catch (e) { fallback(); }
|
|
2820
|
+
res.writeHead(200, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', 'Cache-Control': 'no-cache' });
|
|
2821
|
+
res.end(JSON.stringify({ summary, daily, rows, periodLabel: period }));
|
|
2820
2822
|
} catch (err) {
|
|
2821
2823
|
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
2822
2824
|
res.end(JSON.stringify({ error: err.message }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/update/checker.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/update/checker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACjD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE;QACV,KAAK,EAAE,OAAO,CAAC;QACf,KAAK,EAAE,OAAO,CAAC;QACf,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC;IACjE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,QAAA,MAAM,cAAc,EAAE,YAiBrB,CAAC;AAkGF,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqCtE;AAED,wBAAsB,eAAe,CACnC,MAAM,GAAE,YAA6B,GACpC,OAAO,CAAC;IAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAyE9E;AAED,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,YAA6B,GACpC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CA4BnC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Queries npm registry and compares versions
|
|
4
4
|
*/
|
|
5
5
|
import { createRequire } from 'module';
|
|
6
|
+
import { execFileSync } from 'child_process';
|
|
6
7
|
import * as semver from 'semver';
|
|
7
8
|
import { reserveCheck, recordCheck, getCachedVersions } from './rate-limiter.js';
|
|
8
9
|
const require = createRequire(import.meta.url);
|
|
@@ -82,8 +83,8 @@ function getUpdateType(current, latest) {
|
|
|
82
83
|
function shouldAutoUpdate(updateType, priority, config) {
|
|
83
84
|
if (updateType === 'none')
|
|
84
85
|
return false;
|
|
85
|
-
// Critical security packages always auto-update patches
|
|
86
|
-
if (priority === 'critical' && updateType === 'patch') {
|
|
86
|
+
// Critical security packages always auto-update patches and minors
|
|
87
|
+
if (priority === 'critical' && (updateType === 'patch' || updateType === 'minor')) {
|
|
87
88
|
return true;
|
|
88
89
|
}
|
|
89
90
|
// Check config
|
|
@@ -99,23 +100,39 @@ export function getInstalledVersion(packageName) {
|
|
|
99
100
|
if (!isValidNpmName(packageName))
|
|
100
101
|
return null;
|
|
101
102
|
try {
|
|
102
|
-
//
|
|
103
|
-
|
|
103
|
+
// Attempt 1: let Node resolve from any search path (covers local and global installs)
|
|
104
|
+
try {
|
|
105
|
+
const resolved = require.resolve(`${packageName}/package.json`);
|
|
106
|
+
const pkg = require(resolved);
|
|
107
|
+
if (pkg.version)
|
|
108
|
+
return pkg.version;
|
|
109
|
+
}
|
|
110
|
+
catch { /* not on default paths */ }
|
|
111
|
+
// Attempt 2: resolve from cwd (monorepo / workspace installs)
|
|
112
|
+
const cwdPaths = [
|
|
104
113
|
`${packageName}/package.json`,
|
|
105
114
|
`../../node_modules/${packageName}/package.json`,
|
|
106
115
|
`../../../node_modules/${packageName}/package.json`,
|
|
107
116
|
];
|
|
108
|
-
for (const modulePath of
|
|
117
|
+
for (const modulePath of cwdPaths) {
|
|
109
118
|
try {
|
|
110
|
-
// Use dynamic import with require for package.json
|
|
111
119
|
const resolved = require.resolve(modulePath, { paths: [process.cwd()] });
|
|
112
120
|
const pkg = require(resolved);
|
|
113
|
-
|
|
121
|
+
if (pkg.version)
|
|
122
|
+
return pkg.version;
|
|
114
123
|
}
|
|
115
124
|
catch {
|
|
116
125
|
continue;
|
|
117
126
|
}
|
|
118
127
|
}
|
|
128
|
+
// Attempt 3: npm global prefix (covers `npm i -g monomind`)
|
|
129
|
+
try {
|
|
130
|
+
const prefix = execFileSync('npm', ['prefix', '-g'], { encoding: 'utf8', timeout: 3000 }).trim();
|
|
131
|
+
const globalPkg = require(require.resolve(`${packageName}/package.json`, { paths: [`${prefix}/lib/node_modules`] }));
|
|
132
|
+
if (globalPkg.version)
|
|
133
|
+
return globalPkg.version;
|
|
134
|
+
}
|
|
135
|
+
catch { /* no global install or npm unavailable */ }
|
|
119
136
|
return null;
|
|
120
137
|
}
|
|
121
138
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checker.js","sourceRoot":"","sources":["../../../src/update/checker.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"checker.js","sourceRoot":"","sources":["../../../src/update/checker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/update/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,SAAS,GACV,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAI/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAKtD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/update/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,SAAS,GACV,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAI/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAKtD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAY/D;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAC7C,GAAG,OAAO,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IACtC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC,CAqDD"}
|
package/dist/src/update/index.js
CHANGED
|
@@ -28,16 +28,13 @@ import * as semver from 'semver';
|
|
|
28
28
|
export function getUpdateTagline(currentVersion) {
|
|
29
29
|
try {
|
|
30
30
|
const cached = getCachedVersions();
|
|
31
|
-
//
|
|
32
|
-
|
|
31
|
+
// Compare CLI version against its own cached version only — the umbrella package
|
|
32
|
+
// has a different version number and must not be used for this comparison.
|
|
33
|
+
const latest = cached['@monoes/monomindcli'];
|
|
33
34
|
if (!latest || !semver.valid(latest) || !semver.valid(currentVersion))
|
|
34
35
|
return '';
|
|
35
36
|
if (semver.lte(latest, currentVersion))
|
|
36
37
|
return ' ✓ up to date';
|
|
37
|
-
const type = semver.diff(currentVersion, latest);
|
|
38
|
-
if (type === 'patch' || type === 'minor') {
|
|
39
|
-
return ` ↑ v${latest} installing...`;
|
|
40
|
-
}
|
|
41
38
|
return ` ↑ v${latest} available`;
|
|
42
39
|
}
|
|
43
40
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/update/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC;AAItB,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,SAAS,GACV,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAIpE,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AAIvB,+CAA+C;AAC/C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,cAAsB;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/update/index.ts"],"names":[],"mappings":"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"}
|