create-merlin-brain 3.8.1 → 3.9.0
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/bin/install.cjs +126 -21
- package/dist/server/api/client.d.ts.map +1 -1
- package/dist/server/api/client.js +11 -7
- package/dist/server/api/client.js.map +1 -1
- package/dist/server/cost/classifier.d.ts +22 -0
- package/dist/server/cost/classifier.d.ts.map +1 -0
- package/dist/server/cost/classifier.js +137 -0
- package/dist/server/cost/classifier.js.map +1 -0
- package/dist/server/cost/tracker.d.ts +34 -0
- package/dist/server/cost/tracker.d.ts.map +1 -0
- package/dist/server/cost/tracker.js +81 -0
- package/dist/server/cost/tracker.js.map +1 -0
- package/dist/server/lang/detector.d.ts +17 -0
- package/dist/server/lang/detector.d.ts.map +1 -0
- package/dist/server/lang/detector.js +144 -0
- package/dist/server/lang/detector.js.map +1 -0
- package/dist/server/lang/rules.d.ts +21 -0
- package/dist/server/lang/rules.d.ts.map +1 -0
- package/dist/server/lang/rules.js +70 -0
- package/dist/server/lang/rules.js.map +1 -0
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +69 -32
- package/dist/server/server.js.map +1 -1
- package/dist/server/tools/adaptive.d.ts.map +1 -1
- package/dist/server/tools/adaptive.js +2 -1
- package/dist/server/tools/adaptive.js.map +1 -1
- package/dist/server/tools/agents-index.d.ts.map +1 -1
- package/dist/server/tools/agents-index.js +6 -3
- package/dist/server/tools/agents-index.js.map +1 -1
- package/dist/server/tools/agents.d.ts.map +1 -1
- package/dist/server/tools/agents.js +10 -5
- package/dist/server/tools/agents.js.map +1 -1
- package/dist/server/tools/auto-teach.d.ts.map +1 -1
- package/dist/server/tools/auto-teach.js +2 -1
- package/dist/server/tools/auto-teach.js.map +1 -1
- package/dist/server/tools/behaviors.d.ts.map +1 -1
- package/dist/server/tools/behaviors.js +8 -4
- package/dist/server/tools/behaviors.js.map +1 -1
- package/dist/server/tools/config-sync.d.ts.map +1 -1
- package/dist/server/tools/config-sync.js +8 -4
- package/dist/server/tools/config-sync.js.map +1 -1
- package/dist/server/tools/context.d.ts.map +1 -1
- package/dist/server/tools/context.js +66 -7
- package/dist/server/tools/context.js.map +1 -1
- package/dist/server/tools/cost.d.ts +7 -0
- package/dist/server/tools/cost.d.ts.map +1 -0
- package/dist/server/tools/cost.js +53 -0
- package/dist/server/tools/cost.js.map +1 -0
- package/dist/server/tools/discoveries.d.ts.map +1 -1
- package/dist/server/tools/discoveries.js +8 -11
- package/dist/server/tools/discoveries.js.map +1 -1
- package/dist/server/tools/lite.d.ts.map +1 -1
- package/dist/server/tools/lite.js +8 -4
- package/dist/server/tools/lite.js.map +1 -1
- package/dist/server/tools/project.d.ts.map +1 -1
- package/dist/server/tools/project.js +14 -7
- package/dist/server/tools/project.js.map +1 -1
- package/dist/server/tools/route.d.ts.map +1 -1
- package/dist/server/tools/route.js +76 -13
- package/dist/server/tools/route.js.map +1 -1
- package/dist/server/tools/sights-index.d.ts.map +1 -1
- package/dist/server/tools/sights-index.js +4 -2
- package/dist/server/tools/sights-index.js.map +1 -1
- package/dist/server/tools/verification.d.ts.map +1 -1
- package/dist/server/tools/verification.js +2 -1
- package/dist/server/tools/verification.js.map +1 -1
- package/files/agents/code-organization-supervisor.md +1 -0
- package/files/agents/context-guardian.md +1 -0
- package/files/agents/docs-keeper.md +1 -0
- package/files/agents/dry-refactor.md +1 -0
- package/files/agents/elite-code-refactorer.md +1 -0
- package/files/agents/hardening-guard.md +1 -0
- package/files/agents/implementation-dev.md +1 -0
- package/files/agents/merlin-api-designer.md +1 -0
- package/files/agents/merlin-codebase-mapper.md +4 -0
- package/files/agents/merlin-debugger.md +1 -0
- package/files/agents/merlin-executor.md +1 -0
- package/files/agents/merlin-frontend.md +1 -0
- package/files/agents/merlin-integration-checker.md +1 -0
- package/files/agents/merlin-migrator.md +1 -0
- package/files/agents/merlin-milestone-auditor.md +1 -0
- package/files/agents/merlin-performance.md +1 -0
- package/files/agents/merlin-planner.md +1 -0
- package/files/agents/merlin-researcher.md +4 -0
- package/files/agents/merlin-reviewer.md +1 -0
- package/files/agents/merlin-security.md +1 -0
- package/files/agents/merlin-verifier.md +1 -0
- package/files/agents/merlin-work-verifier.md +1 -0
- package/files/agents/merlin.md +1 -0
- package/files/agents/ops-railway.md +1 -0
- package/files/agents/orchestrator-retrofit.md +1 -0
- package/files/agents/product-spec.md +1 -0
- package/files/agents/remotion.md +1 -0
- package/files/agents/system-architect.md +1 -0
- package/files/agents/tests-qa.md +1 -0
- package/files/commands/merlin/help.md +11 -0
- package/files/commands/merlin/loop-recipes.md +73 -0
- package/files/hooks/agent-sync.sh +3 -0
- package/files/hooks/check-file-size.sh +12 -0
- package/files/hooks/config-change.sh +43 -0
- package/files/hooks/instructions-loaded.sh +34 -0
- package/files/hooks/session-start.sh +5 -1
- package/files/hooks/worktree-create.sh +44 -0
- package/files/hooks/worktree-remove.sh +36 -0
- package/files/loop/lib/agents.sh +3 -0
- package/files/loop/lib/blend-handoff.sh +3 -0
- package/files/loop/lib/blend-learn.sh +3 -0
- package/files/loop/lib/blend-parallel.sh +3 -0
- package/files/loop/lib/blend-verify.sh +3 -0
- package/files/loop/lib/blend.sh +3 -0
- package/files/loop/lib/boot.sh +3 -0
- package/files/loop/lib/context.sh +3 -0
- package/files/loop/lib/discuss.sh +3 -0
- package/files/loop/lib/modes.sh +3 -0
- package/files/loop/lib/progress.sh +3 -0
- package/files/loop/lib/safety.sh +3 -0
- package/files/loop/lib/session-end.sh +3 -0
- package/files/loop/lib/sights.sh +3 -0
- package/files/loop/lib/state.sh +3 -0
- package/files/loop/lib/teams.sh +3 -0
- package/files/loop/lib/timeout.sh +3 -0
- package/files/loop/lib/tui.sh +3 -0
- package/files/loop/lib/workflow-gen.sh +3 -0
- package/files/loop/lib/workflow-run.sh +3 -0
- package/files/loop/lib/workflow.sh +3 -0
- package/files/loop/merlin-loop.sh +3 -0
- package/files/loop/merlin-session.sh +3 -0
- package/package.json +2 -1
- package/rules/go.md +38 -0
- package/rules/java.md +36 -0
- package/rules/python.md +38 -0
- package/rules/rust.md +34 -0
- package/rules/swift.md +35 -0
- package/rules/typescript.md +38 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Cost Tracker (in-memory)
|
|
3
|
+
*
|
|
4
|
+
* Tracks routing decisions and estimates cost savings vs always using Opus.
|
|
5
|
+
* Resets on each MCP server restart (per session).
|
|
6
|
+
*/
|
|
7
|
+
import { randomUUID } from 'crypto';
|
|
8
|
+
// Estimated cost per routing call (rough approximation)
|
|
9
|
+
// These are per-message estimates for a typical agentic task
|
|
10
|
+
const COST_PER_CALL = {
|
|
11
|
+
haiku: 0.003,
|
|
12
|
+
sonnet: 0.015,
|
|
13
|
+
opus: 0.075,
|
|
14
|
+
};
|
|
15
|
+
// Baseline: cost if every routing call used Opus
|
|
16
|
+
const OPUS_BASELINE_COST = COST_PER_CALL.opus;
|
|
17
|
+
/** Normalize model string to haiku | sonnet | opus key */
|
|
18
|
+
function normalizeModel(model) {
|
|
19
|
+
const lower = model.toLowerCase();
|
|
20
|
+
if (lower.includes('haiku'))
|
|
21
|
+
return 'haiku';
|
|
22
|
+
if (lower.includes('sonnet'))
|
|
23
|
+
return 'sonnet';
|
|
24
|
+
return 'opus';
|
|
25
|
+
}
|
|
26
|
+
// Singleton session state
|
|
27
|
+
const SESSION_ID = randomUUID();
|
|
28
|
+
const state = {
|
|
29
|
+
sessionId: SESSION_ID,
|
|
30
|
+
totalCalls: 0,
|
|
31
|
+
byModel: {
|
|
32
|
+
haiku: { calls: 0, estimatedCost: 0 },
|
|
33
|
+
sonnet: { calls: 0, estimatedCost: 0 },
|
|
34
|
+
opus: { calls: 0, estimatedCost: 0 },
|
|
35
|
+
},
|
|
36
|
+
savedVsBaseline: 0,
|
|
37
|
+
totalEstimatedCost: 0,
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Record a routing decision. Call this each time a task is routed to an agent.
|
|
41
|
+
*/
|
|
42
|
+
export function recordRouting(model, _taskComplexity) {
|
|
43
|
+
const key = normalizeModel(model);
|
|
44
|
+
const cost = COST_PER_CALL[key] ?? COST_PER_CALL.opus;
|
|
45
|
+
state.totalCalls += 1;
|
|
46
|
+
state.byModel[key].calls += 1;
|
|
47
|
+
state.byModel[key].estimatedCost = parseFloat((state.byModel[key].estimatedCost + cost).toFixed(6));
|
|
48
|
+
state.totalEstimatedCost = parseFloat((state.totalEstimatedCost + cost).toFixed(6));
|
|
49
|
+
// Savings: how much cheaper vs always using Opus
|
|
50
|
+
const baselineCostForThisCall = OPUS_BASELINE_COST;
|
|
51
|
+
const saved = baselineCostForThisCall - cost;
|
|
52
|
+
state.savedVsBaseline = parseFloat((state.savedVsBaseline + saved).toFixed(6));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get a snapshot of current session costs.
|
|
56
|
+
*/
|
|
57
|
+
export function getSessionCost() {
|
|
58
|
+
return {
|
|
59
|
+
sessionId: state.sessionId,
|
|
60
|
+
totalCalls: state.totalCalls,
|
|
61
|
+
byModel: {
|
|
62
|
+
haiku: { ...state.byModel.haiku },
|
|
63
|
+
sonnet: { ...state.byModel.sonnet },
|
|
64
|
+
opus: { ...state.byModel.opus },
|
|
65
|
+
},
|
|
66
|
+
savedVsBaseline: state.savedVsBaseline,
|
|
67
|
+
totalEstimatedCost: state.totalEstimatedCost,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Reset session counters (useful for testing or explicit reset).
|
|
72
|
+
*/
|
|
73
|
+
export function resetSession() {
|
|
74
|
+
state.totalCalls = 0;
|
|
75
|
+
state.byModel.haiku = { calls: 0, estimatedCost: 0 };
|
|
76
|
+
state.byModel.sonnet = { calls: 0, estimatedCost: 0 };
|
|
77
|
+
state.byModel.opus = { calls: 0, estimatedCost: 0 };
|
|
78
|
+
state.savedVsBaseline = 0;
|
|
79
|
+
state.totalEstimatedCost = 0;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../../src/server/cost/tracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,wDAAwD;AACxD,6DAA6D;AAC7D,MAAM,aAAa,GAA2B;IAC5C,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,KAAK;CACZ,CAAC;AAEF,iDAAiD;AACjD,MAAM,kBAAkB,GAAG,aAAa,CAAC,IAAI,CAAC;AAmB9C,0DAA0D;AAC1D,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5C,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;AAEhC,MAAM,KAAK,GAAgB;IACzB,SAAS,EAAE,UAAU;IACrB,UAAU,EAAE,CAAC;IACb,OAAO,EAAE;QACP,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE;QACrC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE;QACtC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE;KACrC;IACD,eAAe,EAAE,CAAC;IAClB,kBAAkB,EAAE,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,eAAuB;IAClE,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC;IAEtD,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;IACtB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC9B,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,GAAG,UAAU,CAC3C,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACrD,CAAC;IAEF,KAAK,CAAC,kBAAkB,GAAG,UAAU,CACnC,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAC7C,CAAC;IAEF,iDAAiD;IACjD,MAAM,uBAAuB,GAAG,kBAAkB,CAAC;IACnD,MAAM,KAAK,GAAG,uBAAuB,GAAG,IAAI,CAAC;IAC7C,KAAK,CAAC,eAAe,GAAG,UAAU,CAChC,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAC3C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE;YACP,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE;YACjC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;YACnC,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;SAChC;QACD,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;KAC7C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;IACrB,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;IACrD,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;IACtD,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;IACpD,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC;IAC1B,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Detector
|
|
3
|
+
* Detects the primary programming language from Sights manifest data.
|
|
4
|
+
*/
|
|
5
|
+
export type Language = 'typescript' | 'python' | 'go' | 'swift' | 'java' | 'rust' | 'unknown';
|
|
6
|
+
export interface LanguageProfile {
|
|
7
|
+
primary: Language;
|
|
8
|
+
secondary: Language[];
|
|
9
|
+
frameworks: string[];
|
|
10
|
+
confidence: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Detect primary language from Sights manifest data.
|
|
14
|
+
* Priority: techStack → package manager files → file extension counts
|
|
15
|
+
*/
|
|
16
|
+
export declare function detectLanguage(manifest: Record<string, unknown>): LanguageProfile;
|
|
17
|
+
//# sourceMappingURL=detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/server/lang/detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAE9F,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,QAAQ,CAAC;IAClB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AA6DD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAuDjF"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Detector
|
|
3
|
+
* Detects the primary programming language from Sights manifest data.
|
|
4
|
+
*/
|
|
5
|
+
/** Map from Sights techStack name → Language */
|
|
6
|
+
const TECH_STACK_MAP = {
|
|
7
|
+
TypeScript: 'typescript',
|
|
8
|
+
JavaScript: 'typescript', // treat JS as TS family
|
|
9
|
+
'Node.js': 'typescript',
|
|
10
|
+
Python: 'python',
|
|
11
|
+
Go: 'go',
|
|
12
|
+
Swift: 'swift',
|
|
13
|
+
Java: 'java',
|
|
14
|
+
Kotlin: 'java', // JVM family
|
|
15
|
+
Rust: 'rust',
|
|
16
|
+
};
|
|
17
|
+
/** Package manager filename → language (highest priority) */
|
|
18
|
+
const PACKAGE_MANAGER_MAP = {
|
|
19
|
+
'package.json': 'typescript',
|
|
20
|
+
'pyproject.toml': 'python',
|
|
21
|
+
'requirements.txt': 'python',
|
|
22
|
+
'setup.py': 'python',
|
|
23
|
+
'go.mod': 'go',
|
|
24
|
+
'Package.swift': 'swift',
|
|
25
|
+
'pom.xml': 'java',
|
|
26
|
+
'build.gradle': 'java',
|
|
27
|
+
'build.gradle.kts': 'java',
|
|
28
|
+
'Cargo.toml': 'rust',
|
|
29
|
+
};
|
|
30
|
+
/** File extension → language */
|
|
31
|
+
const EXTENSION_MAP = {
|
|
32
|
+
'.ts': 'typescript',
|
|
33
|
+
'.tsx': 'typescript',
|
|
34
|
+
'.js': 'typescript',
|
|
35
|
+
'.jsx': 'typescript',
|
|
36
|
+
'.mjs': 'typescript',
|
|
37
|
+
'.cjs': 'typescript',
|
|
38
|
+
'.py': 'python',
|
|
39
|
+
'.go': 'go',
|
|
40
|
+
'.swift': 'swift',
|
|
41
|
+
'.java': 'java',
|
|
42
|
+
'.kt': 'java',
|
|
43
|
+
'.kts': 'java',
|
|
44
|
+
'.rs': 'rust',
|
|
45
|
+
};
|
|
46
|
+
function countBy(arr, key) {
|
|
47
|
+
const counts = new Map();
|
|
48
|
+
for (const item of arr) {
|
|
49
|
+
const lang = key(item);
|
|
50
|
+
if (lang !== 'unknown')
|
|
51
|
+
counts.set(lang, (counts.get(lang) ?? 0) + 1);
|
|
52
|
+
}
|
|
53
|
+
return counts;
|
|
54
|
+
}
|
|
55
|
+
function topLanguages(counts) {
|
|
56
|
+
return [...counts.entries()]
|
|
57
|
+
.sort((a, b) => b[1] - a[1])
|
|
58
|
+
.map(([lang]) => lang);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Detect primary language from Sights manifest data.
|
|
62
|
+
* Priority: techStack → package manager files → file extension counts
|
|
63
|
+
*/
|
|
64
|
+
export function detectLanguage(manifest) {
|
|
65
|
+
const project = manifest?.project;
|
|
66
|
+
const techStack = Array.isArray(project?.techStack)
|
|
67
|
+
? project.techStack
|
|
68
|
+
: [];
|
|
69
|
+
const frameworks = Array.isArray(project?.frameworks)
|
|
70
|
+
? project.frameworks
|
|
71
|
+
: [];
|
|
72
|
+
const fileList = extractFilePaths(manifest);
|
|
73
|
+
// --- Priority 1: Sights techStack field ---
|
|
74
|
+
const techHits = new Map();
|
|
75
|
+
for (const tech of techStack) {
|
|
76
|
+
const lang = TECH_STACK_MAP[tech];
|
|
77
|
+
if (lang)
|
|
78
|
+
techHits.set(lang, (techHits.get(lang) ?? 0) + 2); // weight 2
|
|
79
|
+
}
|
|
80
|
+
// --- Priority 2: Package manager detection from file list ---
|
|
81
|
+
const pmHits = new Map();
|
|
82
|
+
for (const filePath of fileList) {
|
|
83
|
+
const basename = filePath.split('/').pop() ?? '';
|
|
84
|
+
const lang = PACKAGE_MANAGER_MAP[basename];
|
|
85
|
+
if (lang)
|
|
86
|
+
pmHits.set(lang, (pmHits.get(lang) ?? 0) + 3); // weight 3
|
|
87
|
+
}
|
|
88
|
+
// --- Priority 3: File extension counts ---
|
|
89
|
+
const extCounts = countBy(fileList, (f) => {
|
|
90
|
+
const ext = '.' + (f.split('.').pop() ?? '');
|
|
91
|
+
return EXTENSION_MAP[ext] ?? 'unknown';
|
|
92
|
+
});
|
|
93
|
+
// Merge all scores
|
|
94
|
+
const scores = new Map();
|
|
95
|
+
const addAll = (m) => {
|
|
96
|
+
for (const [lang, score] of m) {
|
|
97
|
+
scores.set(lang, (scores.get(lang) ?? 0) + score);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
addAll(techHits);
|
|
101
|
+
addAll(pmHits);
|
|
102
|
+
addAll(extCounts);
|
|
103
|
+
const ranked = topLanguages(scores);
|
|
104
|
+
const primary = ranked[0] ?? 'unknown';
|
|
105
|
+
const secondary = ranked.slice(1).filter(l => l !== primary);
|
|
106
|
+
// Confidence: high if techStack or pm gave a clear signal
|
|
107
|
+
const topScore = scores.get(primary) ?? 0;
|
|
108
|
+
const totalScore = [...scores.values()].reduce((a, b) => a + b, 0);
|
|
109
|
+
const confidence = totalScore === 0 ? 0 : Math.min(1, topScore / totalScore + (techHits.has(primary) ? 0.2 : 0));
|
|
110
|
+
return { primary, secondary, frameworks, confidence };
|
|
111
|
+
}
|
|
112
|
+
/** Extract all file paths from a Sights manifest (various schemas) */
|
|
113
|
+
function extractFilePaths(manifest) {
|
|
114
|
+
const paths = [];
|
|
115
|
+
// serviceMap contains files
|
|
116
|
+
const serviceMap = manifest?.serviceMap;
|
|
117
|
+
if (Array.isArray(serviceMap)) {
|
|
118
|
+
for (const service of serviceMap) {
|
|
119
|
+
if (service && typeof service === 'object') {
|
|
120
|
+
const files = service.files;
|
|
121
|
+
if (Array.isArray(files)) {
|
|
122
|
+
for (const f of files) {
|
|
123
|
+
if (typeof f === 'string')
|
|
124
|
+
paths.push(f);
|
|
125
|
+
else if (f && typeof f === 'object' && typeof f.path === 'string') {
|
|
126
|
+
paths.push(f.path);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// entryPoints
|
|
134
|
+
const entryPoints = manifest?.entryPoints;
|
|
135
|
+
if (Array.isArray(entryPoints)) {
|
|
136
|
+
for (const ep of entryPoints) {
|
|
137
|
+
if (ep && typeof ep === 'object' && typeof ep.path === 'string') {
|
|
138
|
+
paths.push(ep.path);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return paths;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../src/server/lang/detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,gDAAgD;AAChD,MAAM,cAAc,GAA6B;IAC/C,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY,EAAE,wBAAwB;IAClD,SAAS,EAAE,YAAY;IACvB,MAAM,EAAE,QAAQ;IAChB,EAAE,EAAE,IAAI;IACR,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,MAAM,EAAE,aAAa;IAC7B,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,6DAA6D;AAC7D,MAAM,mBAAmB,GAA6B;IACpD,cAAc,EAAE,YAAY;IAC5B,gBAAgB,EAAE,QAAQ;IAC1B,kBAAkB,EAAE,QAAQ;IAC5B,UAAU,EAAE,QAAQ;IACpB,QAAQ,EAAE,IAAI;IACd,eAAe,EAAE,OAAO;IACxB,SAAS,EAAE,MAAM;IACjB,cAAc,EAAE,MAAM;IACtB,kBAAkB,EAAE,MAAM;IAC1B,YAAY,EAAE,MAAM;CACrB,CAAC;AAEF,gCAAgC;AAChC,MAAM,aAAa,GAA6B;IAC9C,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,OAAO;IACjB,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,SAAS,OAAO,CAAI,GAAQ,EAAE,GAAuB;IACnD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,MAA6B;IACjD,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;SACzB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAiC;IAC9D,MAAM,OAAO,GAAG,QAAQ,EAAE,OAA8C,CAAC;IAEzE,MAAM,SAAS,GAAa,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC;QAC3D,CAAC,CAAE,OAAO,CAAC,SAAsB;QACjC,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,UAAU,GAAa,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;QAC7D,CAAC,CAAE,OAAO,CAAC,UAAuB;QAClC,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,QAAQ,GAAa,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAEtD,6CAA6C;IAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,IAAI;YAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;IAC1E,CAAC;IAED,+DAA+D;IAC/D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,IAAI;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;IACtE,CAAC;IAED,4CAA4C;IAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;QACxC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,mBAAmB;IACnB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,CAAwB,EAAE,EAAE;QAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC;IACF,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjB,MAAM,CAAC,MAAM,CAAC,CAAC;IACf,MAAM,CAAC,SAAS,CAAC,CAAC;IAElB,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,OAAO,GAAa,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;IAE7D,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AACxD,CAAC;AAED,sEAAsE;AACtE,SAAS,gBAAgB,CAAC,QAAiC;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,4BAA4B;IAC5B,MAAM,UAAU,GAAG,QAAQ,EAAE,UAAU,CAAC;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,KAAK,MAAM,OAAO,IAAI,UAAU,EAAE,CAAC;YACjC,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC3C,MAAM,KAAK,GAAI,OAAmC,CAAC,KAAK,CAAC;gBACzD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;wBACtB,IAAI,OAAO,CAAC,KAAK,QAAQ;4BAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;6BACpC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAQ,CAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;4BAC/F,KAAK,CAAC,IAAI,CAAE,CAA6B,CAAC,IAAc,CAAC,CAAC;wBAC5D,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,cAAc;IACd,MAAM,WAAW,GAAG,QAAQ,EAAE,WAAW,CAAC;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC7B,IAAI,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAQ,EAA8B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7F,KAAK,CAAC,IAAI,CAAE,EAA8B,CAAC,IAAc,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Rule Loader & Composer
|
|
3
|
+
* Loads language-specific markdown rule files and composes them with project rules.
|
|
4
|
+
*/
|
|
5
|
+
import type { LanguageProfile } from './detector.js';
|
|
6
|
+
/**
|
|
7
|
+
* Get the language rules markdown for the detected profile.
|
|
8
|
+
* Returns the primary language rules only (secondary languages are lower signal).
|
|
9
|
+
*/
|
|
10
|
+
export declare function getLanguageRules(profile: LanguageProfile): string;
|
|
11
|
+
/**
|
|
12
|
+
* Compose final rules output in priority order:
|
|
13
|
+
* 1. Language defaults (lowest priority)
|
|
14
|
+
* 2. Project conventions from Sights
|
|
15
|
+
* 3. Custom user rules (merlin_save_rule)
|
|
16
|
+
*
|
|
17
|
+
* Later entries override earlier ones when conflicting.
|
|
18
|
+
* Returns a formatted markdown string ready for injection into context responses.
|
|
19
|
+
*/
|
|
20
|
+
export declare function composeRules(langRules: string, projectRules: string[], customRules: string[]): string;
|
|
21
|
+
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../src/server/lang/rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAY,eAAe,EAAE,MAAM,eAAe,CAAC;AAsC/D;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAEjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,WAAW,EAAE,MAAM,EAAE,GACpB,MAAM,CAgBR"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Rule Loader & Composer
|
|
3
|
+
* Loads language-specific markdown rule files and composes them with project rules.
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync } from 'fs';
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
import { join, dirname } from 'path';
|
|
8
|
+
// Resolve package root relative to compiled dist/server/lang/rules.js
|
|
9
|
+
// dist/server/lang → dist/server → dist → package root
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dirname = dirname(__filename);
|
|
12
|
+
const RULES_DIR = join(__dirname, '..', '..', '..', 'rules');
|
|
13
|
+
const RULE_FILES = {
|
|
14
|
+
typescript: 'typescript.md',
|
|
15
|
+
python: 'python.md',
|
|
16
|
+
go: 'go.md',
|
|
17
|
+
swift: 'swift.md',
|
|
18
|
+
java: 'java.md',
|
|
19
|
+
rust: 'rust.md',
|
|
20
|
+
unknown: null,
|
|
21
|
+
};
|
|
22
|
+
/** Simple in-memory cache for loaded rule file contents */
|
|
23
|
+
const ruleCache = new Map();
|
|
24
|
+
/** Load rules markdown for a language (cached after first read) */
|
|
25
|
+
function loadRuleFile(language) {
|
|
26
|
+
if (ruleCache.has(language))
|
|
27
|
+
return ruleCache.get(language);
|
|
28
|
+
const filename = RULE_FILES[language];
|
|
29
|
+
if (!filename)
|
|
30
|
+
return '';
|
|
31
|
+
try {
|
|
32
|
+
const content = readFileSync(join(RULES_DIR, filename), 'utf-8');
|
|
33
|
+
ruleCache.set(language, content);
|
|
34
|
+
return content;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Rule file not found — not a fatal error
|
|
38
|
+
return '';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get the language rules markdown for the detected profile.
|
|
43
|
+
* Returns the primary language rules only (secondary languages are lower signal).
|
|
44
|
+
*/
|
|
45
|
+
export function getLanguageRules(profile) {
|
|
46
|
+
return loadRuleFile(profile.primary);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Compose final rules output in priority order:
|
|
50
|
+
* 1. Language defaults (lowest priority)
|
|
51
|
+
* 2. Project conventions from Sights
|
|
52
|
+
* 3. Custom user rules (merlin_save_rule)
|
|
53
|
+
*
|
|
54
|
+
* Later entries override earlier ones when conflicting.
|
|
55
|
+
* Returns a formatted markdown string ready for injection into context responses.
|
|
56
|
+
*/
|
|
57
|
+
export function composeRules(langRules, projectRules, customRules) {
|
|
58
|
+
const sections = [];
|
|
59
|
+
if (langRules) {
|
|
60
|
+
sections.push(langRules);
|
|
61
|
+
}
|
|
62
|
+
if (projectRules.length > 0) {
|
|
63
|
+
sections.push('## Project-Specific Rules\n' + projectRules.map(r => `- ${r}`).join('\n'));
|
|
64
|
+
}
|
|
65
|
+
if (customRules.length > 0) {
|
|
66
|
+
sections.push('## Your Custom Rules\n' + customRules.map(r => `- ${r}`).join('\n'));
|
|
67
|
+
}
|
|
68
|
+
return sections.join('\n\n');
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../src/server/lang/rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGrC,sEAAsE;AACtE,uDAAuD;AACvD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAE7D,MAAM,UAAU,GAAoC;IAClD,UAAU,EAAE,eAAe;IAC3B,MAAM,EAAE,WAAW;IACnB,EAAE,EAAE,OAAO;IACX,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,2DAA2D;AAC3D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;AAE9C,mEAAmE;AACnE,SAAS,YAAY,CAAC,QAAkB;IACtC,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;IAE7D,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEzB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QACjE,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjC,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAwB;IACvD,OAAO,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,YAAsB,EACtB,WAAqB;IAErB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,SAAS,EAAE,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC,6BAA6B,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,wBAAwB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA6CpE,0CAA0C;AAC1C,wBAAgB,YAAY,IAAI,SAAS,CA23FxC;AAED,gDAAgD;AAChD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAoCjD"}
|