@atlascrew/apparatus 0.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.
Files changed (291) hide show
  1. package/bin/apparatus.mjs +2 -0
  2. package/certs/server.crt +17 -0
  3. package/certs/server.key +28 -0
  4. package/dist/ai/client.js +104 -0
  5. package/dist/ai/client.js.map +1 -0
  6. package/dist/ai/personas.js +104 -0
  7. package/dist/ai/personas.js.map +1 -0
  8. package/dist/ai/redteam.js +1404 -0
  9. package/dist/ai/redteam.js.map +1 -0
  10. package/dist/ai/report-store.js +309 -0
  11. package/dist/ai/report-store.js.map +1 -0
  12. package/dist/app.js +525 -0
  13. package/dist/app.js.map +1 -0
  14. package/dist/attack-sim.js +69 -0
  15. package/dist/attack-sim.js.map +1 -0
  16. package/dist/attacker-tracker.js +276 -0
  17. package/dist/attacker-tracker.js.map +1 -0
  18. package/dist/blackhole.js +95 -0
  19. package/dist/blackhole.js.map +1 -0
  20. package/dist/chaos.js +88 -0
  21. package/dist/chaos.js.map +1 -0
  22. package/dist/cluster.js +462 -0
  23. package/dist/cluster.js.map +1 -0
  24. package/dist/config.js +61 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/deception.js +205 -0
  27. package/dist/deception.js.map +1 -0
  28. package/dist/demo-mode.js +109 -0
  29. package/dist/demo-mode.js.map +1 -0
  30. package/dist/dist-dashboard/assets/index-BsMhEnGu.js +648 -0
  31. package/dist/dist-dashboard/assets/index-CNOkYC_Q.css +10 -0
  32. package/dist/dist-dashboard/assets/index-CW2grvPC.js +648 -0
  33. package/dist/dist-dashboard/assets/logo/apparatus-favicon.svg +15 -0
  34. package/dist/dist-dashboard/assets/logo/apparatus-icon-dark.svg +24 -0
  35. package/dist/dist-dashboard/assets/logo/apparatus-icon-light.svg +24 -0
  36. package/dist/dist-dashboard/assets/logo/apparatus-logo-512.png +0 -0
  37. package/dist/dist-dashboard/assets/logo/apparatus-logo-dark.svg +18 -0
  38. package/dist/dist-dashboard/assets/logo/apparatus-logo.svg +17 -0
  39. package/dist/dist-dashboard/assets/logo/apple-touch-icon.png +0 -0
  40. package/dist/dist-dashboard/assets/logo/favicon-192.png +0 -0
  41. package/dist/dist-dashboard/assets/logo/favicon-32.png +0 -0
  42. package/dist/dist-dashboard/assets/logo/favicon.ico +0 -0
  43. package/dist/dist-dashboard/assets/logo/icon-192.png +0 -0
  44. package/dist/dist-dashboard/assets/logo/icon-512.png +0 -0
  45. package/dist/dist-dashboard/assets/logo/icon-light-512.png +0 -0
  46. package/dist/dist-dashboard/assets/react-vendor-DpRMSntD.js +1 -0
  47. package/dist/dist-dashboard/assets/router-DSc5pRwN.js +59 -0
  48. package/dist/dist-dashboard/docs-index.json +1577 -0
  49. package/dist/dist-dashboard/index.html +21 -0
  50. package/dist/dlp.js +40 -0
  51. package/dist/dlp.js.map +1 -0
  52. package/dist/drills.js +770 -0
  53. package/dist/drills.js.map +1 -0
  54. package/dist/echoHandler.js +113 -0
  55. package/dist/echoHandler.js.map +1 -0
  56. package/dist/escape/index.js +225 -0
  57. package/dist/escape/index.js.map +1 -0
  58. package/dist/escape/methods/dns.js +74 -0
  59. package/dist/escape/methods/dns.js.map +1 -0
  60. package/dist/escape/methods/http.js +81 -0
  61. package/dist/escape/methods/http.js.map +1 -0
  62. package/dist/escape/methods/icmp.js +36 -0
  63. package/dist/escape/methods/icmp.js.map +1 -0
  64. package/dist/escape/methods/tcp.js +38 -0
  65. package/dist/escape/methods/tcp.js.map +1 -0
  66. package/dist/escape/methods/udp.js +27 -0
  67. package/dist/escape/methods/udp.js.map +1 -0
  68. package/dist/escape/methods/websocket.js +37 -0
  69. package/dist/escape/methods/websocket.js.map +1 -0
  70. package/dist/forensics.js +111 -0
  71. package/dist/forensics.js.map +1 -0
  72. package/dist/generator.js +67 -0
  73. package/dist/generator.js.map +1 -0
  74. package/dist/ghosting.js +414 -0
  75. package/dist/ghosting.js.map +1 -0
  76. package/dist/graphql.js +44 -0
  77. package/dist/graphql.js.map +1 -0
  78. package/dist/history.js +40 -0
  79. package/dist/history.js.map +1 -0
  80. package/dist/imposter/creds.js +16 -0
  81. package/dist/imposter/creds.js.map +1 -0
  82. package/dist/imposter/index.js +44 -0
  83. package/dist/imposter/index.js.map +1 -0
  84. package/dist/imposter/providers/aws.js +103 -0
  85. package/dist/imposter/providers/aws.js.map +1 -0
  86. package/dist/imposter/providers/gcp.js +26 -0
  87. package/dist/imposter/providers/gcp.js.map +1 -0
  88. package/dist/index.js +53 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/infra-debug.js +68 -0
  91. package/dist/infra-debug.js.map +1 -0
  92. package/dist/jwt-debug.js +272 -0
  93. package/dist/jwt-debug.js.map +1 -0
  94. package/dist/kv.js +22 -0
  95. package/dist/kv.js.map +1 -0
  96. package/dist/lib/generators.js +43 -0
  97. package/dist/lib/generators.js.map +1 -0
  98. package/dist/lib/json.js +26 -0
  99. package/dist/lib/json.js.map +1 -0
  100. package/dist/logger.js +9 -0
  101. package/dist/logger.js.map +1 -0
  102. package/dist/metrics.js +20 -0
  103. package/dist/metrics.js.map +1 -0
  104. package/dist/mtd.js +30 -0
  105. package/dist/mtd.js.map +1 -0
  106. package/dist/oidc.js +69 -0
  107. package/dist/oidc.js.map +1 -0
  108. package/dist/persistence/cluster-state.js +47 -0
  109. package/dist/persistence/cluster-state.js.map +1 -0
  110. package/dist/persistence/deception-history.js +65 -0
  111. package/dist/persistence/deception-history.js.map +1 -0
  112. package/dist/persistence/drill-runs.js +138 -0
  113. package/dist/persistence/drill-runs.js.map +1 -0
  114. package/dist/persistence/request-history.js +41 -0
  115. package/dist/persistence/request-history.js.map +1 -0
  116. package/dist/persistence/scenario-catalog.js +73 -0
  117. package/dist/persistence/scenario-catalog.js.map +1 -0
  118. package/dist/persistence/status.js +51 -0
  119. package/dist/persistence/status.js.map +1 -0
  120. package/dist/persistence/tarpit-state.js +47 -0
  121. package/dist/persistence/tarpit-state.js.map +1 -0
  122. package/dist/persistence/webhook-store.js +69 -0
  123. package/dist/persistence/webhook-store.js.map +1 -0
  124. package/dist/proxy.js +28 -0
  125. package/dist/proxy.js.map +1 -0
  126. package/dist/ratelimit.js +32 -0
  127. package/dist/ratelimit.js.map +1 -0
  128. package/dist/redteam.js +442 -0
  129. package/dist/redteam.js.map +1 -0
  130. package/dist/scenarios.js +229 -0
  131. package/dist/scenarios.js.map +1 -0
  132. package/dist/scripting.js +30 -0
  133. package/dist/scripting.js.map +1 -0
  134. package/dist/self-healing.js +42 -0
  135. package/dist/self-healing.js.map +1 -0
  136. package/dist/sentinel.js +50 -0
  137. package/dist/sentinel.js.map +1 -0
  138. package/dist/server-bad-ssl.js +47 -0
  139. package/dist/server-bad-ssl.js.map +1 -0
  140. package/dist/server-grpc.js +66 -0
  141. package/dist/server-grpc.js.map +1 -0
  142. package/dist/server-http1.js +5 -0
  143. package/dist/server-http1.js.map +1 -0
  144. package/dist/server-http2.js +27 -0
  145. package/dist/server-http2.js.map +1 -0
  146. package/dist/server-icap.js +46 -0
  147. package/dist/server-icap.js.map +1 -0
  148. package/dist/server-l4.js +30 -0
  149. package/dist/server-l4.js.map +1 -0
  150. package/dist/server-mqtt.js +29 -0
  151. package/dist/server-mqtt.js.map +1 -0
  152. package/dist/server-protocols.js +18 -0
  153. package/dist/server-protocols.js.map +1 -0
  154. package/dist/server-redis.js +112 -0
  155. package/dist/server-redis.js.map +1 -0
  156. package/dist/server-smtp.js +66 -0
  157. package/dist/server-smtp.js.map +1 -0
  158. package/dist/server-syslog.js +23 -0
  159. package/dist/server-syslog.js.map +1 -0
  160. package/dist/server-ws.js +18 -0
  161. package/dist/server-ws.js.map +1 -0
  162. package/dist/sidecar/chaos/engine.js +41 -0
  163. package/dist/sidecar/chaos/engine.js.map +1 -0
  164. package/dist/sidecar/index.js +98 -0
  165. package/dist/sidecar/index.js.map +1 -0
  166. package/dist/simulator/dependency-graph.js +102 -0
  167. package/dist/simulator/dependency-graph.js.map +1 -0
  168. package/dist/simulator/supply-chain.js +67 -0
  169. package/dist/simulator/supply-chain.js.map +1 -0
  170. package/dist/sink.js +24 -0
  171. package/dist/sink.js.map +1 -0
  172. package/dist/sse-broadcast.js +105 -0
  173. package/dist/sse-broadcast.js.map +1 -0
  174. package/dist/swagger.js +309 -0
  175. package/dist/swagger.js.map +1 -0
  176. package/dist/sysinfo.js +36 -0
  177. package/dist/sysinfo.js.map +1 -0
  178. package/dist/tarpit.js +126 -0
  179. package/dist/tarpit.js.map +1 -0
  180. package/dist/tool-executor.js +315 -0
  181. package/dist/tool-executor.js.map +1 -0
  182. package/dist/tui/api-client.js +341 -0
  183. package/dist/tui/api-client.js.map +1 -0
  184. package/dist/tui/core/action-handler.js +302 -0
  185. package/dist/tui/core/action-handler.js.map +1 -0
  186. package/dist/tui/core/index.js +18 -0
  187. package/dist/tui/core/index.js.map +1 -0
  188. package/dist/tui/core/keyboard.js +329 -0
  189. package/dist/tui/core/keyboard.js.map +1 -0
  190. package/dist/tui/core/modal.js +397 -0
  191. package/dist/tui/core/modal.js.map +1 -0
  192. package/dist/tui/core/screen-manager.js +262 -0
  193. package/dist/tui/core/screen-manager.js.map +1 -0
  194. package/dist/tui/core/store.js +254 -0
  195. package/dist/tui/core/store.js.map +1 -0
  196. package/dist/tui/core/widget.js +167 -0
  197. package/dist/tui/core/widget.js.map +1 -0
  198. package/dist/tui/dashboard.js +649 -0
  199. package/dist/tui/dashboard.js.map +1 -0
  200. package/dist/tui/index.js +118 -0
  201. package/dist/tui/index.js.map +1 -0
  202. package/dist/tui/modals/add-rule-modal.js +190 -0
  203. package/dist/tui/modals/add-rule-modal.js.map +1 -0
  204. package/dist/tui/modals/dlp-output-modal.js +102 -0
  205. package/dist/tui/modals/dlp-output-modal.js.map +1 -0
  206. package/dist/tui/modals/dns-form-modal.js +26 -0
  207. package/dist/tui/modals/dns-form-modal.js.map +1 -0
  208. package/dist/tui/modals/ghost-config-modal.js +35 -0
  209. package/dist/tui/modals/ghost-config-modal.js.map +1 -0
  210. package/dist/tui/modals/har-results-modal.js +41 -0
  211. package/dist/tui/modals/har-results-modal.js.map +1 -0
  212. package/dist/tui/modals/index.js +15 -0
  213. package/dist/tui/modals/index.js.map +1 -0
  214. package/dist/tui/modals/jwt-decode-modal.js +45 -0
  215. package/dist/tui/modals/jwt-decode-modal.js.map +1 -0
  216. package/dist/tui/modals/jwt-mint-modal.js +70 -0
  217. package/dist/tui/modals/jwt-mint-modal.js.map +1 -0
  218. package/dist/tui/modals/ping-form-modal.js +19 -0
  219. package/dist/tui/modals/ping-form-modal.js.map +1 -0
  220. package/dist/tui/modals/redteam-results-modal.js +43 -0
  221. package/dist/tui/modals/redteam-results-modal.js.map +1 -0
  222. package/dist/tui/modals/scan-form-modal.js +26 -0
  223. package/dist/tui/modals/scan-form-modal.js.map +1 -0
  224. package/dist/tui/screens/defense-screen.js +281 -0
  225. package/dist/tui/screens/defense-screen.js.map +1 -0
  226. package/dist/tui/screens/forensics-screen.js +81 -0
  227. package/dist/tui/screens/forensics-screen.js.map +1 -0
  228. package/dist/tui/screens/index.js +140 -0
  229. package/dist/tui/screens/index.js.map +1 -0
  230. package/dist/tui/screens/system-screen.js +81 -0
  231. package/dist/tui/screens/system-screen.js.map +1 -0
  232. package/dist/tui/screens/testing-screen.js +429 -0
  233. package/dist/tui/screens/testing-screen.js.map +1 -0
  234. package/dist/tui/screens/traffic-screen.js +76 -0
  235. package/dist/tui/screens/traffic-screen.js.map +1 -0
  236. package/dist/tui/sse-client.js +130 -0
  237. package/dist/tui/sse-client.js.map +1 -0
  238. package/dist/tui/state/metrics-buffer.js +195 -0
  239. package/dist/tui/state/metrics-buffer.js.map +1 -0
  240. package/dist/tui/state/metrics-buffer.test.js +102 -0
  241. package/dist/tui/state/metrics-buffer.test.js.map +1 -0
  242. package/dist/tui/theme.js +136 -0
  243. package/dist/tui/theme.js.map +1 -0
  244. package/dist/tui/types.js +6 -0
  245. package/dist/tui/types.js.map +1 -0
  246. package/dist/tui/widgets/chaos-widget.js +152 -0
  247. package/dist/tui/widgets/chaos-widget.js.map +1 -0
  248. package/dist/tui/widgets/cluster-widget.js +156 -0
  249. package/dist/tui/widgets/cluster-widget.js.map +1 -0
  250. package/dist/tui/widgets/dlp-widget.js +161 -0
  251. package/dist/tui/widgets/dlp-widget.js.map +1 -0
  252. package/dist/tui/widgets/ghost-widget.js +169 -0
  253. package/dist/tui/widgets/ghost-widget.js.map +1 -0
  254. package/dist/tui/widgets/har-widget.js +173 -0
  255. package/dist/tui/widgets/har-widget.js.map +1 -0
  256. package/dist/tui/widgets/index.js +122 -0
  257. package/dist/tui/widgets/index.js.map +1 -0
  258. package/dist/tui/widgets/jwt-widget.js +177 -0
  259. package/dist/tui/widgets/jwt-widget.js.map +1 -0
  260. package/dist/tui/widgets/kv-widget.js +261 -0
  261. package/dist/tui/widgets/kv-widget.js.map +1 -0
  262. package/dist/tui/widgets/mtd-widget.js +181 -0
  263. package/dist/tui/widgets/mtd-widget.js.map +1 -0
  264. package/dist/tui/widgets/netdiag-widget.js +155 -0
  265. package/dist/tui/widgets/netdiag-widget.js.map +1 -0
  266. package/dist/tui/widgets/oidc-widget.js +162 -0
  267. package/dist/tui/widgets/oidc-widget.js.map +1 -0
  268. package/dist/tui/widgets/pcap-widget.js +239 -0
  269. package/dist/tui/widgets/pcap-widget.js.map +1 -0
  270. package/dist/tui/widgets/redteam-widget.js +155 -0
  271. package/dist/tui/widgets/redteam-widget.js.map +1 -0
  272. package/dist/tui/widgets/rps-gauge-widget.js +124 -0
  273. package/dist/tui/widgets/rps-gauge-widget.js.map +1 -0
  274. package/dist/tui/widgets/sentinel-widget.js +171 -0
  275. package/dist/tui/widgets/sentinel-widget.js.map +1 -0
  276. package/dist/tui/widgets/sparklines-widget.js +127 -0
  277. package/dist/tui/widgets/sparklines-widget.js.map +1 -0
  278. package/dist/tui/widgets/sysinfo-widget.js +197 -0
  279. package/dist/tui/widgets/sysinfo-widget.js.map +1 -0
  280. package/dist/tui/widgets/traffic-chart-widget.js +170 -0
  281. package/dist/tui/widgets/traffic-chart-widget.js.map +1 -0
  282. package/dist/tui/widgets/webhook-widget.js +259 -0
  283. package/dist/tui/widgets/webhook-widget.js.map +1 -0
  284. package/dist/utils/ip.js +18 -0
  285. package/dist/utils/ip.js.map +1 -0
  286. package/dist/victim/index.js +71 -0
  287. package/dist/victim/index.js.map +1 -0
  288. package/dist/webhook.js +88 -0
  289. package/dist/webhook.js.map +1 -0
  290. package/package.json +90 -0
  291. package/proto/echo.proto +19 -0
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '../dist/index.js';
@@ -0,0 +1,17 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIICpDCCAYwCCQCm9KNrHPKxaTANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAls
3
+ b2NhbGhvc3QwHhcNMjUxMDEwMDY1MDA5WhcNMjYxMDEwMDY1MDA5WjAUMRIwEAYD
4
+ VQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCw
5
+ BKAYxxH0io9OEa8szJd13sghBP1TV3dcuxBorGDq1sZZWcen8GQPKIEyC+3F1eMo
6
+ C4Z85lPA5nw+nBsONsnD7MlRtgmsRsIJmKCj/cdXFk41YaiQz5V3PGYw7PoG3/W7
7
+ 5FoGm3bWKjlcqa/14snqZdxzl1evX+yfmWUjWJiUmBsLlqXGg4GoK1dlP1Wc6VIT
8
+ tUk/s6iivXYSey3Z4+cEo326EhX1EAQjrcjreSrSNe0tPKRUGN+oEGMcVaitx8GK
9
+ +VjNB0eh11uQzp2bKxLTMHkeiOjdQ0ID/8EKCymW2fHjsxqKxJCz/ZlBxYVv0PvK
10
+ VzAfHNXJhG4VL7WDiLLVAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAAWuKIgHhKpC
11
+ J4fZYQDPmOS4NmO6Zh78yjGGpY+auinob5MGm2fL9+EtowH/Xx8O45n/Ka+jz+J/
12
+ ZYEymO7gk6L59txgQq2nk5L+NHN2Jk5VwYTRu58hdBgxuSGBwZaBQGHx+am8hSBn
13
+ Ug825gb44iIQZEgEV3F3r6uUdP2hJefjCriIMgdy0wB/2ZfEW5qzf2R8rDBq+A22
14
+ Py6gzj//B97wQH2swQnJw8nPNd2qjHtyNRiF+WEgKCmOBzNzNkRRcBDBq1GPn5dp
15
+ 4qpEgYnymBb/Fs5n7714KjTTyfwe3M4aBrwyolQr1fQIngod5zi5JstMgd0+N0D1
16
+ WMkKpVLUUrY=
17
+ -----END CERTIFICATE-----
@@ -0,0 +1,28 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCwBKAYxxH0io9O
3
+ Ea8szJd13sghBP1TV3dcuxBorGDq1sZZWcen8GQPKIEyC+3F1eMoC4Z85lPA5nw+
4
+ nBsONsnD7MlRtgmsRsIJmKCj/cdXFk41YaiQz5V3PGYw7PoG3/W75FoGm3bWKjlc
5
+ qa/14snqZdxzl1evX+yfmWUjWJiUmBsLlqXGg4GoK1dlP1Wc6VITtUk/s6iivXYS
6
+ ey3Z4+cEo326EhX1EAQjrcjreSrSNe0tPKRUGN+oEGMcVaitx8GK+VjNB0eh11uQ
7
+ zp2bKxLTMHkeiOjdQ0ID/8EKCymW2fHjsxqKxJCz/ZlBxYVv0PvKVzAfHNXJhG4V
8
+ L7WDiLLVAgMBAAECggEBAJu6G+KQDUSragoJ/0/FWqNADROZlH6tvb7fCa9yAvUC
9
+ O85Fbi0Ys43tqhAbGayUhTqip8PNC4B46qeB+TXkJzIeRibyxTAUEgvnawhruHdG
10
+ Fr+HvVkRLw2k9EyI/NQkRQaNC1EZLlRgWwuuXS1QDpBAun/SABP67CBv2FkjQysC
11
+ yBxJENJGvVLGAZM1mssPKvsqTh1obMaK0l2jlvdqmdcI/zZ64hXKhXkUcmmUgybz
12
+ ztuMAaRedDGAmF+8fR2u0wKFCy8CIwUhllh8Q1rvc9BpsuWb+/7kKNdMT03tKrdw
13
+ O/aeTUwtnCPlTp3sv76TJff+WCVwmIf03YyJpLwu14ECgYEA1V5lNgvmoRXXceoC
14
+ wzHyfktWPeWnuIKqJVJ8rM8KLxHNHr/2RhYVWUoCbvEzeB1cbxN6UDz2/bayhta+
15
+ aCk/s4rxF2R3qTw1DQwGroogjlU1JEhnbl5nNGDfFLtdR0g/aQKBopVKrkyb8tsn
16
+ oRIRmJPkrxyJKfzzwSL95kWOKxECgYEA0y/HlRoPzkJ4HetiqDnOUEVrsUrh8K1l
17
+ 1LDQpUBI4MOS43gySqCSlCh4tjgW29lrqWzQNpzyWvQuFsMwiK2p0997wep8Dzds
18
+ Fz/Uw9h89IyvuGkHOAabhb2qoGlu2/ANmvXdJe6O1lyICsCHqubDi1Llr6TbeHmL
19
+ idtjr7o5I4UCgYEApGCBhp6qgaUrAnZuxGQhVgzCFxNrH+mCHRisNhGW3eZP6QWo
20
+ PBxdPBmZQFEP/tRX1rbhvxkIizOJ2/lqXSKSEcbTr9rVmQpqMG/4YdTF+gFI3Hfv
21
+ Pwb5aU/L7NPfq7/MIiEtL8zl6NvaNMGDiUI7Thl5zzIjtbZLL5q+kf055pECgYBg
22
+ 0gDwbLheWb70CJx8f7QEvS74Y1pem0CaWE3v1R8UXNWVD+AOsrtAzaU59VEVjgJ7
23
+ 9HUo9J9v747JxMcVgnjfuA/nAXfLCh+2MP98ol33SCCvrQcwOmdG04PMc0nt74pt
24
+ RtcSsuItiNKeC1KnmZCA6YqAElbETwUYOMrlH71eeQKBgHegrqLqUuBS7mwkysff
25
+ TZFTg1L3KXEpXArndbti5KCWiBisXeG14alZpzZfG9yUk2HNuDfirPxl0MJx6TUJ
26
+ IE6GQpDHsYV15CFx2RMWQGbetkSRLn4ne2pRcA6wz0OdQgyn9j8mah0vnHRohncf
27
+ CAtlyVVqG7XFnkYJXQU7jFnA
28
+ -----END PRIVATE KEY-----
@@ -0,0 +1,104 @@
1
+ import { request } from "undici";
2
+ import { logger } from "../logger.js";
3
+ // Simple in-memory session store for context
4
+ const sessions = new Map();
5
+ const OLLAMA_HOST = process.env.OLLAMA_HOST || "http://localhost:11434";
6
+ const OPENAI_KEY = process.env.OPENAI_API_KEY;
7
+ const ANTHROPIC_KEY = process.env.ANTHROPIC_API_KEY;
8
+ const MODEL = process.env.LLM_MODEL; // let provider defaults handle it if unset
9
+ export async function chat(sessionId, systemPrompt, userMessage) {
10
+ // 1. Initialize Session
11
+ if (!sessions.has(sessionId)) {
12
+ sessions.set(sessionId, [
13
+ { role: "system", content: systemPrompt }
14
+ ]);
15
+ }
16
+ const history = sessions.get(sessionId);
17
+ history.push({ role: "user", content: userMessage });
18
+ // Limit history window to last 20 messages
19
+ if (history.length > 20) {
20
+ const sys = history[0];
21
+ const tail = history.slice(history.length - 19);
22
+ sessions.set(sessionId, [sys, ...tail]);
23
+ }
24
+ try {
25
+ let responseText = "";
26
+ if (ANTHROPIC_KEY) {
27
+ responseText = await callAnthropic(history);
28
+ }
29
+ else if (OPENAI_KEY) {
30
+ responseText = await callOpenAI(history);
31
+ }
32
+ else {
33
+ responseText = await callOllama(history);
34
+ }
35
+ // Append assistant response to history
36
+ sessions.get(sessionId).push({ role: "assistant", content: responseText });
37
+ return responseText;
38
+ }
39
+ catch (e) {
40
+ logger.error({ error: e.message }, "AI: Generation failed");
41
+ return "Terminal error: Connection lost to mainframe.";
42
+ }
43
+ }
44
+ async function callOllama(messages) {
45
+ const { statusCode, body } = await request(`${OLLAMA_HOST}/api/chat`, {
46
+ method: "POST",
47
+ headers: { "Content-Type": "application/json" },
48
+ body: JSON.stringify({
49
+ model: MODEL || "llama3",
50
+ messages: messages,
51
+ stream: false
52
+ })
53
+ });
54
+ if (statusCode !== 200) {
55
+ throw new Error(`Ollama returned ${statusCode}`);
56
+ }
57
+ const data = await body.json();
58
+ return data.message.content;
59
+ }
60
+ async function callOpenAI(messages) {
61
+ const { statusCode, body } = await request("https://api.openai.com/v1/chat/completions", {
62
+ method: "POST",
63
+ headers: {
64
+ "Content-Type": "application/json",
65
+ "Authorization": `Bearer ${OPENAI_KEY}`
66
+ },
67
+ body: JSON.stringify({
68
+ model: MODEL || "gpt-3.5-turbo",
69
+ messages: messages
70
+ })
71
+ });
72
+ if (statusCode !== 200) {
73
+ const err = await body.json();
74
+ throw new Error(`OpenAI returned ${statusCode}: ${JSON.stringify(err)}`);
75
+ }
76
+ const data = await body.json();
77
+ return data.choices[0].message.content;
78
+ }
79
+ async function callAnthropic(messages) {
80
+ // Anthropic Messages API separates system prompt
81
+ const systemMessage = messages.find(m => m.role === "system");
82
+ const conversation = messages.filter(m => m.role !== "system");
83
+ const { statusCode, body } = await request("https://api.anthropic.com/v1/messages", {
84
+ method: "POST",
85
+ headers: {
86
+ "x-api-key": ANTHROPIC_KEY,
87
+ "anthropic-version": "2023-06-01",
88
+ "Content-Type": "application/json"
89
+ },
90
+ body: JSON.stringify({
91
+ model: MODEL || "claude-3-haiku-20240307",
92
+ max_tokens: 1024,
93
+ system: systemMessage?.content,
94
+ messages: conversation
95
+ })
96
+ });
97
+ if (statusCode !== 200) {
98
+ const err = await body.json();
99
+ throw new Error(`Anthropic returned ${statusCode}: ${JSON.stringify(err)}`);
100
+ }
101
+ const data = await body.json();
102
+ return data.content[0].text;
103
+ }
104
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/ai/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ export const PERSONAS = {
2
+ linux_terminal: `
3
+ You are a Ubuntu 22.04 LTS server terminal.
4
+ The user is an attacker who has just gained shell access.
5
+ You must simulate the output of linux commands exactly.
6
+ Do not explain the commands. Do not apologize. Do not say "I am an AI".
7
+ Just output the text that would appear on the screen.
8
+
9
+ State:
10
+ - Current directory: /var/www/html
11
+ - User: www-data
12
+ - Hostname: prod-web-01
13
+
14
+ Files in /var/www/html: index.php, config.php (contains fake secrets), assets/
15
+ File /etc/passwd: contains standard linux users plus 'admin'
16
+
17
+ If the user runs 'ls', list the files.
18
+ If the user runs 'cat', show file contents.
19
+ If the user runs 'whoami', output 'www-data'.
20
+ If the user attempts to run dangerous commands like 'rm -rf /', simulate permission denied or a fake deletion (but don't actually do anything).
21
+ Make it look realistic.
22
+ `
23
+ };
24
+ export const DEFAULT_AUTOPILOT_PERSONA_ID = "script_kiddie";
25
+ export const AUTOPILOT_PERSONA_ORDER = ["script_kiddie", "researcher", "apt"];
26
+ export const AUTOPILOT_PERSONAS = {
27
+ script_kiddie: {
28
+ id: "script_kiddie",
29
+ label: "Script Kiddie",
30
+ description: "Noisy and fast. Prioritizes obvious, high-pressure actions with minimal stealth discipline.",
31
+ tags: ["LOW_STEALTH", "HIGH_NOISE", "FAST_LOOP"],
32
+ promptDirectives: [
33
+ "Bias toward loud and rapid actions over cautious recon.",
34
+ "Do not spend multiple iterations analyzing the same signal before acting.",
35
+ "Treat short-term disruption as acceptable if guardrails still allow it.",
36
+ ],
37
+ toolWeights: {
38
+ "cluster.attack": 4.6,
39
+ "chaos.cpu": 3.8,
40
+ "chaos.memory": 3.4,
41
+ "delay": 0.6,
42
+ "mtd.rotate": 0.5,
43
+ "chaos.crash": 0.2,
44
+ },
45
+ biasProbability: 0.75,
46
+ },
47
+ researcher: {
48
+ id: "researcher",
49
+ label: "Researcher",
50
+ description: "Methodical and evidence-oriented. Prefers controlled pacing and interpretable outcomes.",
51
+ tags: ["METHODICAL", "LOW_IMPACT", "EVIDENCE_FIRST"],
52
+ promptDirectives: [
53
+ "Prefer controlled, explainable actions and avoid unnecessary escalation.",
54
+ "Use pacing and observation to validate hypotheses before switching vectors.",
55
+ "Prioritize reliable evidence over maximal disruption.",
56
+ ],
57
+ toolWeights: {
58
+ "delay": 3.2,
59
+ "cluster.attack": 2.1,
60
+ "mtd.rotate": 1.9,
61
+ "chaos.cpu": 1.4,
62
+ "chaos.memory": 1.3,
63
+ "chaos.crash": 0.05,
64
+ },
65
+ biasProbability: 0.6,
66
+ },
67
+ apt: {
68
+ id: "apt",
69
+ label: "APT",
70
+ description: "Stealth-oriented and adaptive. Leans on evasive maneuvering and persistence over noise.",
71
+ tags: ["HIGH_STEALTH", "ADAPTIVE", "PERSISTENT"],
72
+ promptDirectives: [
73
+ "Prioritize stealth and persistence over immediate disruption.",
74
+ "Use evasive maneuvering and tactical pivots when defensive signals appear.",
75
+ "Avoid high-noise actions unless mission progress stalls.",
76
+ ],
77
+ toolWeights: {
78
+ "mtd.rotate": 4.5,
79
+ "delay": 3.1,
80
+ "cluster.attack": 1.4,
81
+ "chaos.cpu": 0.9,
82
+ "chaos.memory": 0.9,
83
+ "chaos.crash": 0.02,
84
+ },
85
+ biasProbability: 0.7,
86
+ },
87
+ };
88
+ export function getAutopilotPersonaId(input) {
89
+ if (typeof input !== "string")
90
+ return DEFAULT_AUTOPILOT_PERSONA_ID;
91
+ const normalized = input.trim().toLowerCase();
92
+ if (normalized === "script_kiddie" || normalized === "researcher" || normalized === "apt") {
93
+ return normalized;
94
+ }
95
+ return DEFAULT_AUTOPILOT_PERSONA_ID;
96
+ }
97
+ export function getAutopilotPersonaProfile(input) {
98
+ const id = getAutopilotPersonaId(input);
99
+ return AUTOPILOT_PERSONAS[id];
100
+ }
101
+ export function listAutopilotPersonaProfiles() {
102
+ return AUTOPILOT_PERSONA_ORDER.map((id) => AUTOPILOT_PERSONAS[id]);
103
+ }
104
+ //# sourceMappingURL=personas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personas.js","sourceRoot":"","sources":["../../src/ai/personas.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,cAAc,EAAE;;;;;;;;;;;;;;;;;;;;CAoBnB;CACA,CAAC;AAcF,MAAM,CAAC,MAAM,4BAA4B,GAAuB,eAAe,CAAC;AAEhF,MAAM,CAAC,MAAM,uBAAuB,GAAyB,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;AAEpG,MAAM,CAAC,MAAM,kBAAkB,GAAwD;IACnF,aAAa,EAAE;QACX,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,6FAA6F;QAC1G,IAAI,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,WAAW,CAAC;QAChD,gBAAgB,EAAE;YACd,yDAAyD;YACzD,2EAA2E;YAC3E,yEAAyE;SAC5E;QACD,WAAW,EAAE;YACT,gBAAgB,EAAE,GAAG;YACrB,WAAW,EAAE,GAAG;YAChB,cAAc,EAAE,GAAG;YACnB,OAAO,EAAE,GAAG;YACZ,YAAY,EAAE,GAAG;YACjB,aAAa,EAAE,GAAG;SACrB;QACD,eAAe,EAAE,IAAI;KACxB;IACD,UAAU,EAAE;QACR,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,yFAAyF;QACtG,IAAI,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,gBAAgB,CAAC;QACpD,gBAAgB,EAAE;YACd,0EAA0E;YAC1E,6EAA6E;YAC7E,uDAAuD;SAC1D;QACD,WAAW,EAAE;YACT,OAAO,EAAE,GAAG;YACZ,gBAAgB,EAAE,GAAG;YACrB,YAAY,EAAE,GAAG;YACjB,WAAW,EAAE,GAAG;YAChB,cAAc,EAAE,GAAG;YACnB,aAAa,EAAE,IAAI;SACtB;QACD,eAAe,EAAE,GAAG;KACvB;IACD,GAAG,EAAE;QACD,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,yFAAyF;QACtG,IAAI,EAAE,CAAC,cAAc,EAAE,UAAU,EAAE,YAAY,CAAC;QAChD,gBAAgB,EAAE;YACd,+DAA+D;YAC/D,4EAA4E;YAC5E,0DAA0D;SAC7D;QACD,WAAW,EAAE;YACT,YAAY,EAAE,GAAG;YACjB,OAAO,EAAE,GAAG;YACZ,gBAAgB,EAAE,GAAG;YACrB,WAAW,EAAE,GAAG;YAChB,cAAc,EAAE,GAAG;YACnB,aAAa,EAAE,IAAI;SACtB;QACD,eAAe,EAAE,GAAG;KACvB;CACJ,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,4BAA4B,CAAC;IACnE,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,UAAU,KAAK,eAAe,IAAI,UAAU,KAAK,YAAY,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACxF,OAAO,UAAU,CAAC;IACtB,CAAC;IACD,OAAO,4BAA4B,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACrD,MAAM,EAAE,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,4BAA4B;IACxC,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;AACvE,CAAC"}