mcp-garry-codes 1.0.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.
Files changed (177) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +133 -0
  3. package/dist/config/env.d.ts +4 -0
  4. package/dist/config/env.d.ts.map +1 -0
  5. package/dist/config/env.js +27 -0
  6. package/dist/config/env.js.map +1 -0
  7. package/dist/config/schema.d.ts +28 -0
  8. package/dist/config/schema.d.ts.map +1 -0
  9. package/dist/config/schema.js +12 -0
  10. package/dist/config/schema.js.map +1 -0
  11. package/dist/contracts/common.d.ts +53 -0
  12. package/dist/contracts/common.d.ts.map +1 -0
  13. package/dist/contracts/common.js +30 -0
  14. package/dist/contracts/common.js.map +1 -0
  15. package/dist/contracts/linter_contracts.d.ts +79 -0
  16. package/dist/contracts/linter_contracts.d.ts.map +1 -0
  17. package/dist/contracts/linter_contracts.js +16 -0
  18. package/dist/contracts/linter_contracts.js.map +1 -0
  19. package/dist/contracts/scaffold_contracts.d.ts +84 -0
  20. package/dist/contracts/scaffold_contracts.d.ts.map +1 -0
  21. package/dist/contracts/scaffold_contracts.js +27 -0
  22. package/dist/contracts/scaffold_contracts.js.map +1 -0
  23. package/dist/contracts/security_contracts.d.ts +37 -0
  24. package/dist/contracts/security_contracts.d.ts.map +1 -0
  25. package/dist/contracts/security_contracts.js +6 -0
  26. package/dist/contracts/security_contracts.js.map +1 -0
  27. package/dist/contracts/test_contracts.d.ts +42 -0
  28. package/dist/contracts/test_contracts.d.ts.map +1 -0
  29. package/dist/contracts/test_contracts.js +10 -0
  30. package/dist/contracts/test_contracts.js.map +1 -0
  31. package/dist/contracts/wiki_contracts.d.ts +96 -0
  32. package/dist/contracts/wiki_contracts.d.ts.map +1 -0
  33. package/dist/contracts/wiki_contracts.js +17 -0
  34. package/dist/contracts/wiki_contracts.js.map +1 -0
  35. package/dist/core/cache.d.ts +9 -0
  36. package/dist/core/cache.d.ts.map +1 -0
  37. package/dist/core/cache.js +56 -0
  38. package/dist/core/cache.js.map +1 -0
  39. package/dist/core/errors.d.ts +37 -0
  40. package/dist/core/errors.d.ts.map +1 -0
  41. package/dist/core/errors.js +52 -0
  42. package/dist/core/errors.js.map +1 -0
  43. package/dist/core/file_utils.d.ts +13 -0
  44. package/dist/core/file_utils.d.ts.map +1 -0
  45. package/dist/core/file_utils.js +90 -0
  46. package/dist/core/file_utils.js.map +1 -0
  47. package/dist/core/logger.d.ts +18 -0
  48. package/dist/core/logger.d.ts.map +1 -0
  49. package/dist/core/logger.js +46 -0
  50. package/dist/core/logger.js.map +1 -0
  51. package/dist/core/process_runner.d.ts +15 -0
  52. package/dist/core/process_runner.d.ts.map +1 -0
  53. package/dist/core/process_runner.js +64 -0
  54. package/dist/core/process_runner.js.map +1 -0
  55. package/dist/domain/glua/ast.d.ts +12 -0
  56. package/dist/domain/glua/ast.d.ts.map +1 -0
  57. package/dist/domain/glua/ast.js +176 -0
  58. package/dist/domain/glua/ast.js.map +1 -0
  59. package/dist/domain/glua/lexer.d.ts +42 -0
  60. package/dist/domain/glua/lexer.d.ts.map +1 -0
  61. package/dist/domain/glua/lexer.js +232 -0
  62. package/dist/domain/glua/lexer.js.map +1 -0
  63. package/dist/domain/networking/net_auditor.d.ts +5 -0
  64. package/dist/domain/networking/net_auditor.d.ts.map +1 -0
  65. package/dist/domain/networking/net_auditor.js +188 -0
  66. package/dist/domain/networking/net_auditor.js.map +1 -0
  67. package/dist/domain/packaging/validator.d.ts +5 -0
  68. package/dist/domain/packaging/validator.d.ts.map +1 -0
  69. package/dist/domain/packaging/validator.js +121 -0
  70. package/dist/domain/packaging/validator.js.map +1 -0
  71. package/dist/domain/performance/hot_path_analyzer.d.ts +5 -0
  72. package/dist/domain/performance/hot_path_analyzer.d.ts.map +1 -0
  73. package/dist/domain/performance/hot_path_analyzer.js +127 -0
  74. package/dist/domain/performance/hot_path_analyzer.js.map +1 -0
  75. package/dist/domain/scaffolding/templates.d.ts +5 -0
  76. package/dist/domain/scaffolding/templates.d.ts.map +1 -0
  77. package/dist/domain/scaffolding/templates.js +219 -0
  78. package/dist/domain/scaffolding/templates.js.map +1 -0
  79. package/dist/domain/wiki/offline_db.d.ts +3 -0
  80. package/dist/domain/wiki/offline_db.d.ts.map +1 -0
  81. package/dist/domain/wiki/offline_db.js +534 -0
  82. package/dist/domain/wiki/offline_db.js.map +1 -0
  83. package/dist/domain/wiki/types.d.ts +29 -0
  84. package/dist/domain/wiki/types.d.ts.map +1 -0
  85. package/dist/domain/wiki/types.js +2 -0
  86. package/dist/domain/wiki/types.js.map +1 -0
  87. package/dist/index.d.ts +3 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +28 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/integrations/glualint_adapter.d.ts +6 -0
  92. package/dist/integrations/glualint_adapter.d.ts.map +1 -0
  93. package/dist/integrations/glualint_adapter.js +62 -0
  94. package/dist/integrations/glualint_adapter.js.map +1 -0
  95. package/dist/integrations/python_test_harness.d.ts +5 -0
  96. package/dist/integrations/python_test_harness.d.ts.map +1 -0
  97. package/dist/integrations/python_test_harness.js +67 -0
  98. package/dist/integrations/python_test_harness.js.map +1 -0
  99. package/dist/integrations/web_search_adapter.d.ts +6 -0
  100. package/dist/integrations/web_search_adapter.d.ts.map +1 -0
  101. package/dist/integrations/web_search_adapter.js +80 -0
  102. package/dist/integrations/web_search_adapter.js.map +1 -0
  103. package/dist/integrations/wiki_client.d.ts +13 -0
  104. package/dist/integrations/wiki_client.d.ts.map +1 -0
  105. package/dist/integrations/wiki_client.js +110 -0
  106. package/dist/integrations/wiki_client.js.map +1 -0
  107. package/dist/prompts/index.d.ts +73 -0
  108. package/dist/prompts/index.d.ts.map +1 -0
  109. package/dist/prompts/index.js +127 -0
  110. package/dist/prompts/index.js.map +1 -0
  111. package/dist/resources/realms_resources.d.ts +2 -0
  112. package/dist/resources/realms_resources.d.ts.map +1 -0
  113. package/dist/resources/realms_resources.js +30 -0
  114. package/dist/resources/realms_resources.js.map +1 -0
  115. package/dist/resources/schema_resources.d.ts +2 -0
  116. package/dist/resources/schema_resources.d.ts.map +1 -0
  117. package/dist/resources/schema_resources.js +43 -0
  118. package/dist/resources/schema_resources.js.map +1 -0
  119. package/dist/resources/wiki_resources.d.ts +3 -0
  120. package/dist/resources/wiki_resources.d.ts.map +1 -0
  121. package/dist/resources/wiki_resources.js +31 -0
  122. package/dist/resources/wiki_resources.js.map +1 -0
  123. package/dist/security/path_guard.d.ts +8 -0
  124. package/dist/security/path_guard.d.ts.map +1 -0
  125. package/dist/security/path_guard.js +37 -0
  126. package/dist/security/path_guard.js.map +1 -0
  127. package/dist/security/process_guard.d.ts +8 -0
  128. package/dist/security/process_guard.d.ts.map +1 -0
  129. package/dist/security/process_guard.js +26 -0
  130. package/dist/security/process_guard.js.map +1 -0
  131. package/dist/security/redaction.d.ts +6 -0
  132. package/dist/security/redaction.d.ts.map +1 -0
  133. package/dist/security/redaction.js +49 -0
  134. package/dist/security/redaction.js.map +1 -0
  135. package/dist/server.d.ts +3 -0
  136. package/dist/server.d.ts.map +1 -0
  137. package/dist/server.js +364 -0
  138. package/dist/server.js.map +1 -0
  139. package/dist/tools/analyze_performance.d.ts +4 -0
  140. package/dist/tools/analyze_performance.d.ts.map +1 -0
  141. package/dist/tools/analyze_performance.js +20 -0
  142. package/dist/tools/analyze_performance.js.map +1 -0
  143. package/dist/tools/audit_net_security.d.ts +4 -0
  144. package/dist/tools/audit_net_security.d.ts.map +1 -0
  145. package/dist/tools/audit_net_security.js +19 -0
  146. package/dist/tools/audit_net_security.js.map +1 -0
  147. package/dist/tools/get_gmod_symbol.d.ts +4 -0
  148. package/dist/tools/get_gmod_symbol.d.ts.map +1 -0
  149. package/dist/tools/get_gmod_symbol.js +30 -0
  150. package/dist/tools/get_gmod_symbol.js.map +1 -0
  151. package/dist/tools/lint_glua.d.ts +4 -0
  152. package/dist/tools/lint_glua.d.ts.map +1 -0
  153. package/dist/tools/lint_glua.js +24 -0
  154. package/dist/tools/lint_glua.js.map +1 -0
  155. package/dist/tools/package_and_validate.d.ts +4 -0
  156. package/dist/tools/package_and_validate.d.ts.map +1 -0
  157. package/dist/tools/package_and_validate.js +23 -0
  158. package/dist/tools/package_and_validate.js.map +1 -0
  159. package/dist/tools/run_glua_test.d.ts +4 -0
  160. package/dist/tools/run_glua_test.d.ts.map +1 -0
  161. package/dist/tools/run_glua_test.js +15 -0
  162. package/dist/tools/run_glua_test.js.map +1 -0
  163. package/dist/tools/scaffold_gmod_component.d.ts +4 -0
  164. package/dist/tools/scaffold_gmod_component.d.ts.map +1 -0
  165. package/dist/tools/scaffold_gmod_component.js +16 -0
  166. package/dist/tools/scaffold_gmod_component.js.map +1 -0
  167. package/dist/tools/search_gmod_wiki.d.ts +4 -0
  168. package/dist/tools/search_gmod_wiki.d.ts.map +1 -0
  169. package/dist/tools/search_gmod_wiki.js +30 -0
  170. package/dist/tools/search_gmod_wiki.js.map +1 -0
  171. package/dist/tools/web_search_glua.d.ts +4 -0
  172. package/dist/tools/web_search_glua.d.ts.map +1 -0
  173. package/dist/tools/web_search_glua.js +15 -0
  174. package/dist/tools/web_search_glua.js.map +1 -0
  175. package/package.json +58 -0
  176. package/src/test_harness/lua/glua_mock.lua +383 -0
  177. package/src/test_harness/python/gmod_tester.py +156 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process_runner.js","sourceRoot":"","sources":["../../src/core/process_runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAe1C,MAAM,OAAO,aAAa;IACjB,MAAM,CAAC,KAAK,CAAC,OAAO,CACzB,MAAc,EACd,IAAc,EACd,OAA2B;QAE3B,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAEhC,MAAM,OAAO,GAAG,OAAO,EAAE,SAAS,IAAI,KAAK,CAAC;QAC5C,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,cAAc;QAExE,MAAM,CAAC,KAAK,CAAC,yBAAyB,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;YAChE,MAAM;YACN,IAAI;YACJ,GAAG,EAAE,OAAO,EAAE,GAAG;YACjB,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE;gBAC3D,GAAG,EAAE,OAAO,EAAE,GAAG;gBACjB,OAAO;gBACP,SAAS;gBACT,KAAK,EAAE,KAAK;gBACZ,GAAG,EAAE;oBACH,GAAG,OAAO,CAAC,GAAG;oBACd,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;iBACxB;aACF,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;gBACzB,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;gBACzB,QAAQ,EAAE,CAAC;aACZ,CAAC;QACJ,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,GAOb,CAAC;YAEF,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAE9C,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC/C,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,aAAa,CAAC,eAAe;oBACnC,OAAO,EAAE,YAAY,MAAM,qBAAqB,OAAO,KAAK;oBAC5D,WAAW,EAAE,sEAAsE;oBACnF,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC7C,CAAC,CAAC;YACL,CAAC;YAED,kGAAkG;YAClG,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACnC,OAAO;oBACL,MAAM;oBACN,MAAM;oBACN,QAAQ,EAAE,KAAK,CAAC,IAAI;iBACrB,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,YAAY,CAAC;gBACrB,IAAI,EAAE,aAAa,CAAC,wBAAwB;gBAC5C,OAAO,EAAE,6BAA6B,MAAM,MAAM,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;gBAChF,WAAW,EAAE,gBAAgB,MAAM,8EAA8E;gBACjH,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import { GLuaDiagnostic } from "../../contracts/linter_contracts.js";
2
+ export type GModRealm = "server" | "client" | "shared" | "menu";
3
+ export interface RealmRule {
4
+ functionName: string;
5
+ allowedRealm: GModRealm[];
6
+ errorMessage: string;
7
+ }
8
+ export declare class GLuaAnalyzer {
9
+ static detectRealmFromPath(filePath: string): GModRealm;
10
+ static analyze(code: string, realm: GModRealm): GLuaDiagnostic[];
11
+ }
12
+ //# sourceMappingURL=ast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../../src/domain/glua/ast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAErE,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEhE,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,SAAS,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAmCD,qBAAa,YAAY;WACT,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS;WAoBhD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,cAAc,EAAE;CAwIxE"}
@@ -0,0 +1,176 @@
1
+ import { GLuaLexer, TokenType } from "./lexer.js";
2
+ const REALM_RESTRICTIONS = [
3
+ {
4
+ functionName: "util.AddNetworkString",
5
+ allowedRealm: ["server"],
6
+ errorMessage: "util.AddNetworkString can ONLY be called on the SERVER."
7
+ },
8
+ {
9
+ functionName: "vgui.Create",
10
+ allowedRealm: ["client", "menu"],
11
+ errorMessage: "vgui.Create is a CLIENT/MENU UI function and does not exist on the SERVER."
12
+ },
13
+ {
14
+ functionName: "LocalPlayer",
15
+ allowedRealm: ["client"],
16
+ errorMessage: "LocalPlayer() only exists on the CLIENT. On the SERVER, use entity/player references passed in hooks or net.Receive."
17
+ },
18
+ {
19
+ functionName: "surface.DrawRect",
20
+ allowedRealm: ["client"],
21
+ errorMessage: "surface rendering functions only exist on the CLIENT."
22
+ },
23
+ {
24
+ functionName: "draw.SimpleText",
25
+ allowedRealm: ["client"],
26
+ errorMessage: "draw library functions only exist on the CLIENT."
27
+ },
28
+ {
29
+ functionName: "cam.Start3D2D",
30
+ allowedRealm: ["client"],
31
+ errorMessage: "cam.Start3D2D only exists on the CLIENT."
32
+ }
33
+ ];
34
+ export class GLuaAnalyzer {
35
+ static detectRealmFromPath(filePath) {
36
+ const normalized = filePath.replace(/\\/g, "/").toLowerCase();
37
+ const fileName = normalized.split("/").pop() ?? "";
38
+ if (fileName === "cl_init.lua" || fileName.startsWith("cl_") || normalized.includes("/client/")) {
39
+ return "client";
40
+ }
41
+ if (fileName === "init.lua" || fileName.startsWith("sv_") || normalized.includes("/server/")) {
42
+ return "server";
43
+ }
44
+ if (fileName === "shared.lua" || fileName.startsWith("sh_") || normalized.includes("/shared/")) {
45
+ return "shared";
46
+ }
47
+ if (normalized.includes("/menu/")) {
48
+ return "menu";
49
+ }
50
+ return "shared";
51
+ }
52
+ static analyze(code, realm) {
53
+ const diagnostics = [];
54
+ const lexer = new GLuaLexer(code);
55
+ const tokens = lexer.tokenize();
56
+ // Check line by line and token stream
57
+ for (let i = 0; i < tokens.length; i++) {
58
+ const token = tokens[i];
59
+ // Check realm-restricted calls
60
+ for (const rule of REALM_RESTRICTIONS) {
61
+ if (rule.functionName.includes(".")) {
62
+ const parts = rule.functionName.split(".");
63
+ if (token.type === TokenType.IDENTIFIER &&
64
+ token.value === parts[0] &&
65
+ tokens[i + 1]?.value === "." &&
66
+ tokens[i + 2]?.value === parts[1]) {
67
+ if (realm !== "shared" && !rule.allowedRealm.includes(realm)) {
68
+ diagnostics.push({
69
+ line: token.line,
70
+ column: token.column,
71
+ severity: "error",
72
+ code: "GMOD_REALM_MISMATCH",
73
+ message: rule.errorMessage,
74
+ suggestion: `Move this call to a ${rule.allowedRealm.join(" or ")} script or wrap in 'if ${rule.allowedRealm[0].toUpperCase()} then ... end'.`
75
+ });
76
+ }
77
+ }
78
+ }
79
+ else {
80
+ if (token.type === TokenType.IDENTIFIER && token.value === rule.functionName) {
81
+ if (realm !== "shared" && !rule.allowedRealm.includes(realm)) {
82
+ diagnostics.push({
83
+ line: token.line,
84
+ column: token.column,
85
+ severity: "error",
86
+ code: "GMOD_REALM_MISMATCH",
87
+ message: rule.errorMessage,
88
+ suggestion: `Move this call to a ${rule.allowedRealm.join(" or ")} script or wrap in 'if ${rule.allowedRealm[0].toUpperCase()} then ... end'.`
89
+ });
90
+ }
91
+ }
92
+ }
93
+ }
94
+ // Check global pollution: "function Identifier(" without "local" preceding it
95
+ if (token.type === TokenType.KEYWORD && token.value === "function") {
96
+ const prevToken = tokens[i - 1];
97
+ const nextToken = tokens[i + 1];
98
+ if ((!prevToken || prevToken.value !== "local") &&
99
+ nextToken &&
100
+ nextToken.type === TokenType.IDENTIFIER &&
101
+ tokens[i + 2]?.value === "(") {
102
+ // If identifier is not namespaced (no ':' or '.')
103
+ if (tokens[i + 2]?.value !== "." && tokens[i + 2]?.value !== ":") {
104
+ diagnostics.push({
105
+ line: token.line,
106
+ column: token.column,
107
+ severity: "warning",
108
+ code: "GLOBAL_POLLUTION",
109
+ message: `Function '${nextToken.value}' is defined in the global scope.`,
110
+ suggestion: `Consider making it 'local function ${nextToken.value}' or namespacing it into an addon table.`
111
+ });
112
+ }
113
+ }
114
+ }
115
+ // Check deprecated / dangerous functions
116
+ if (token.type === TokenType.IDENTIFIER && token.value === "CompileString") {
117
+ diagnostics.push({
118
+ line: token.line,
119
+ column: token.column,
120
+ severity: "warning",
121
+ code: "DYNAMIC_CODE_EXECUTION",
122
+ message: "CompileString detected. Executing dynamic code may introduce backdoor or remote execution risks.",
123
+ suggestion: "Ensure input to CompileString is strictly vetted or avoid dynamic compilation."
124
+ });
125
+ }
126
+ if (token.type === TokenType.IDENTIFIER && token.value === "RunString") {
127
+ diagnostics.push({
128
+ line: token.line,
129
+ column: token.column,
130
+ severity: "warning",
131
+ code: "DYNAMIC_CODE_EXECUTION",
132
+ message: "RunString detected. Arbitrary string execution presents a severe security risk.",
133
+ suggestion: "Avoid RunString in production addons."
134
+ });
135
+ }
136
+ // Check net.ReadTable exploitation risk
137
+ if (token.type === TokenType.IDENTIFIER &&
138
+ token.value === "net" &&
139
+ tokens[i + 1]?.value === "." &&
140
+ tokens[i + 2]?.value === "ReadTable") {
141
+ diagnostics.push({
142
+ line: token.line,
143
+ column: token.column,
144
+ severity: "warning",
145
+ code: "UNRESTRICTED_TABLE_NETWORKING",
146
+ message: "net.ReadTable() detected. Arbitrary table deserialization over net messages is slow and susceptible to payload bloat or server freezes.",
147
+ suggestion: "Prefer structured primitive streaming (net.WriteUInt, net.WriteString) over net.WriteTable/net.ReadTable."
148
+ });
149
+ }
150
+ }
151
+ // Check for missing AddCSLuaFile in shared scripts
152
+ if (realm === "shared" && !code.includes("AddCSLuaFile")) {
153
+ diagnostics.push({
154
+ line: 1,
155
+ column: 1,
156
+ severity: "info",
157
+ code: "MISSING_ADDCSLUAFILE",
158
+ message: "Shared script is missing AddCSLuaFile().",
159
+ suggestion: "Add 'AddCSLuaFile()' at the very top of shared weapon/entity files so clients download them."
160
+ });
161
+ }
162
+ // Check for potential infinite loops
163
+ if (/while\s+true\s+do/.test(code) && !code.includes("coroutine.yield") && !code.includes("break")) {
164
+ diagnostics.push({
165
+ line: 1,
166
+ column: 1,
167
+ severity: "error",
168
+ code: "INFINITE_LOOP_RISK",
169
+ message: "Unbounded 'while true do' loop detected without break or coroutine.yield.",
170
+ suggestion: "Ensure the loop has a termination condition or yields execution."
171
+ });
172
+ }
173
+ return diagnostics;
174
+ }
175
+ }
176
+ //# sourceMappingURL=ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../src/domain/glua/ast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * GLua Tokenizer supporting standard Lua 5.1 and Garry's Mod extensions:
3
+ * - Single-line C++ comments: //
4
+ * - Multi-line C comments: /* ... * /
5
+ * - C-style boolean operators: &&, ||, !=, !
6
+ * - 'continue' keyword
7
+ */
8
+ export declare enum TokenType {
9
+ KEYWORD = "KEYWORD",
10
+ IDENTIFIER = "IDENTIFIER",
11
+ STRING = "STRING",
12
+ NUMBER = "NUMBER",
13
+ OPERATOR = "OPERATOR",
14
+ PUNCTUATION = "PUNCTUATION",
15
+ COMMENT = "COMMENT",
16
+ WHITESPACE = "WHITESPACE",
17
+ EOF = "EOF"
18
+ }
19
+ export interface Token {
20
+ type: TokenType;
21
+ value: string;
22
+ line: number;
23
+ column: number;
24
+ }
25
+ export declare class GLuaLexer {
26
+ private input;
27
+ private pos;
28
+ private line;
29
+ private column;
30
+ constructor(input: string);
31
+ tokenize(): Token[];
32
+ private peek;
33
+ private advance;
34
+ private makeToken;
35
+ private readSingleLineComment;
36
+ private readMultiLineCComment;
37
+ private readLuaComment;
38
+ private readString;
39
+ private readNumber;
40
+ private readIdentifier;
41
+ }
42
+ //# sourceMappingURL=lexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../../src/domain/glua/lexer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,oBAAY,SAAS;IACnB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,GAAG,QAAQ;CACZ;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;gBAEP,KAAK,EAAE,MAAM;IAIlB,QAAQ,IAAI,KAAK,EAAE;IAoG1B,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,UAAU;IA2BlB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,cAAc;CAWvB"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * GLua Tokenizer supporting standard Lua 5.1 and Garry's Mod extensions:
3
+ * - Single-line C++ comments: //
4
+ * - Multi-line C comments: /* ... * /
5
+ * - C-style boolean operators: &&, ||, !=, !
6
+ * - 'continue' keyword
7
+ */
8
+ export var TokenType;
9
+ (function (TokenType) {
10
+ TokenType["KEYWORD"] = "KEYWORD";
11
+ TokenType["IDENTIFIER"] = "IDENTIFIER";
12
+ TokenType["STRING"] = "STRING";
13
+ TokenType["NUMBER"] = "NUMBER";
14
+ TokenType["OPERATOR"] = "OPERATOR";
15
+ TokenType["PUNCTUATION"] = "PUNCTUATION";
16
+ TokenType["COMMENT"] = "COMMENT";
17
+ TokenType["WHITESPACE"] = "WHITESPACE";
18
+ TokenType["EOF"] = "EOF";
19
+ })(TokenType || (TokenType = {}));
20
+ const GLUA_KEYWORDS = new Set([
21
+ "and", "break", "do", "else", "elseif", "end", "false", "for", "function",
22
+ "if", "in", "local", "nil", "not", "or", "repeat", "return", "then",
23
+ "true", "until", "while",
24
+ // GMod specific
25
+ "continue"
26
+ ]);
27
+ export class GLuaLexer {
28
+ input;
29
+ pos = 0;
30
+ line = 1;
31
+ column = 1;
32
+ constructor(input) {
33
+ this.input = input;
34
+ }
35
+ tokenize() {
36
+ const tokens = [];
37
+ while (this.pos < this.input.length) {
38
+ const char = this.input[this.pos];
39
+ // Whitespace
40
+ if (/\s/.test(char)) {
41
+ if (char === "\n") {
42
+ this.line++;
43
+ this.column = 1;
44
+ }
45
+ else {
46
+ this.column++;
47
+ }
48
+ this.pos++;
49
+ continue;
50
+ }
51
+ // C++ style single-line comment (//)
52
+ if (char === "/" && this.peek() === "/") {
53
+ tokens.push(this.readSingleLineComment());
54
+ continue;
55
+ }
56
+ // C style multi-line comment (/* ... */)
57
+ if (char === "/" && this.peek() === "*") {
58
+ tokens.push(this.readMultiLineCComment());
59
+ continue;
60
+ }
61
+ // Lua comment (-- or --[[ ... ]])
62
+ if (char === "-" && this.peek() === "-") {
63
+ tokens.push(this.readLuaComment());
64
+ continue;
65
+ }
66
+ // Strings ('...' or "..." or [[...]])
67
+ if (char === '"' || char === "'") {
68
+ tokens.push(this.readString(char));
69
+ continue;
70
+ }
71
+ // C-style !=, &&, || operators
72
+ if (char === "!" && this.peek() === "=") {
73
+ tokens.push(this.makeToken(TokenType.OPERATOR, "!="));
74
+ this.advance(2);
75
+ continue;
76
+ }
77
+ if (char === "&" && this.peek() === "&") {
78
+ tokens.push(this.makeToken(TokenType.OPERATOR, "&&"));
79
+ this.advance(2);
80
+ continue;
81
+ }
82
+ if (char === "|" && this.peek() === "|") {
83
+ tokens.push(this.makeToken(TokenType.OPERATOR, "||"));
84
+ this.advance(2);
85
+ continue;
86
+ }
87
+ if (char === "=" && this.peek() === "=") {
88
+ tokens.push(this.makeToken(TokenType.OPERATOR, "=="));
89
+ this.advance(2);
90
+ continue;
91
+ }
92
+ if (char === "~" && this.peek() === "=") {
93
+ tokens.push(this.makeToken(TokenType.OPERATOR, "~="));
94
+ this.advance(2);
95
+ continue;
96
+ }
97
+ if (char === "." && this.peek() === ".") {
98
+ tokens.push(this.makeToken(TokenType.OPERATOR, ".."));
99
+ this.advance(2);
100
+ continue;
101
+ }
102
+ // Numbers
103
+ if (/[0-9]/.test(char)) {
104
+ tokens.push(this.readNumber());
105
+ continue;
106
+ }
107
+ // Identifiers / Keywords
108
+ if (/[a-zA-Z_]/.test(char)) {
109
+ tokens.push(this.readIdentifier());
110
+ continue;
111
+ }
112
+ // Generic punctuation/operator
113
+ tokens.push(this.makeToken(TokenType.PUNCTUATION, char));
114
+ this.advance(1);
115
+ }
116
+ tokens.push({
117
+ type: TokenType.EOF,
118
+ value: "",
119
+ line: this.line,
120
+ column: this.column
121
+ });
122
+ return tokens;
123
+ }
124
+ peek(offset = 1) {
125
+ return this.pos + offset < this.input.length ? this.input[this.pos + offset] : "";
126
+ }
127
+ advance(n = 1) {
128
+ for (let i = 0; i < n; i++) {
129
+ if (this.input[this.pos] === "\n") {
130
+ this.line++;
131
+ this.column = 1;
132
+ }
133
+ else {
134
+ this.column++;
135
+ }
136
+ this.pos++;
137
+ }
138
+ }
139
+ makeToken(type, value) {
140
+ return {
141
+ type,
142
+ value,
143
+ line: this.line,
144
+ column: this.column
145
+ };
146
+ }
147
+ readSingleLineComment() {
148
+ const startLine = this.line;
149
+ const startCol = this.column;
150
+ let comment = "";
151
+ while (this.pos < this.input.length && this.input[this.pos] !== "\n") {
152
+ comment += this.input[this.pos];
153
+ this.pos++;
154
+ this.column++;
155
+ }
156
+ return { type: TokenType.COMMENT, value: comment, line: startLine, column: startCol };
157
+ }
158
+ readMultiLineCComment() {
159
+ const startLine = this.line;
160
+ const startCol = this.column;
161
+ let comment = "/*";
162
+ this.advance(2); // skip /*
163
+ while (this.pos < this.input.length) {
164
+ if (this.input[this.pos] === "*" && this.peek() === "/") {
165
+ comment += "*/";
166
+ this.advance(2);
167
+ break;
168
+ }
169
+ comment += this.input[this.pos];
170
+ this.advance(1);
171
+ }
172
+ return { type: TokenType.COMMENT, value: comment, line: startLine, column: startCol };
173
+ }
174
+ readLuaComment() {
175
+ const startLine = this.line;
176
+ const startCol = this.column;
177
+ let comment = "--";
178
+ this.advance(2);
179
+ while (this.pos < this.input.length && this.input[this.pos] !== "\n") {
180
+ comment += this.input[this.pos];
181
+ this.pos++;
182
+ this.column++;
183
+ }
184
+ return { type: TokenType.COMMENT, value: comment, line: startLine, column: startCol };
185
+ }
186
+ readString(quote) {
187
+ const startLine = this.line;
188
+ const startCol = this.column;
189
+ let str = quote;
190
+ this.advance(1); // skip opening quote
191
+ while (this.pos < this.input.length) {
192
+ const char = this.input[this.pos];
193
+ str += char;
194
+ if (char === "\\") {
195
+ this.advance(1);
196
+ if (this.pos < this.input.length) {
197
+ str += this.input[this.pos];
198
+ this.advance(1);
199
+ }
200
+ continue;
201
+ }
202
+ if (char === quote) {
203
+ this.advance(1);
204
+ break;
205
+ }
206
+ this.advance(1);
207
+ }
208
+ return { type: TokenType.STRING, value: str, line: startLine, column: startCol };
209
+ }
210
+ readNumber() {
211
+ const startLine = this.line;
212
+ const startCol = this.column;
213
+ let num = "";
214
+ while (this.pos < this.input.length && /[0-9.xXa-fA-F]/.test(this.input[this.pos])) {
215
+ num += this.input[this.pos];
216
+ this.advance(1);
217
+ }
218
+ return { type: TokenType.NUMBER, value: num, line: startLine, column: startCol };
219
+ }
220
+ readIdentifier() {
221
+ const startLine = this.line;
222
+ const startCol = this.column;
223
+ let id = "";
224
+ while (this.pos < this.input.length && /[a-zA-Z0-9_]/.test(this.input[this.pos])) {
225
+ id += this.input[this.pos];
226
+ this.advance(1);
227
+ }
228
+ const type = GLUA_KEYWORDS.has(id) ? TokenType.KEYWORD : TokenType.IDENTIFIER;
229
+ return { type, value: id, line: startLine, column: startCol };
230
+ }
231
+ }
232
+ //# sourceMappingURL=lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../../src/domain/glua/lexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { AuditNetSecurityOutput } from "../../contracts/security_contracts.js";
2
+ export declare class NetAuditor {
3
+ static audit(addonDir: string, specificFiles?: string[]): Promise<AuditNetSecurityOutput>;
4
+ }
5
+ //# sourceMappingURL=net_auditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"net_auditor.d.ts","sourceRoot":"","sources":["../../../src/domain/networking/net_auditor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EAGvB,MAAM,uCAAuC,CAAC;AAI/C,qBAAa,UAAU;WACD,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAmNvG"}