@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.
- package/bin/apparatus.mjs +2 -0
- package/certs/server.crt +17 -0
- package/certs/server.key +28 -0
- package/dist/ai/client.js +104 -0
- package/dist/ai/client.js.map +1 -0
- package/dist/ai/personas.js +104 -0
- package/dist/ai/personas.js.map +1 -0
- package/dist/ai/redteam.js +1404 -0
- package/dist/ai/redteam.js.map +1 -0
- package/dist/ai/report-store.js +309 -0
- package/dist/ai/report-store.js.map +1 -0
- package/dist/app.js +525 -0
- package/dist/app.js.map +1 -0
- package/dist/attack-sim.js +69 -0
- package/dist/attack-sim.js.map +1 -0
- package/dist/attacker-tracker.js +276 -0
- package/dist/attacker-tracker.js.map +1 -0
- package/dist/blackhole.js +95 -0
- package/dist/blackhole.js.map +1 -0
- package/dist/chaos.js +88 -0
- package/dist/chaos.js.map +1 -0
- package/dist/cluster.js +462 -0
- package/dist/cluster.js.map +1 -0
- package/dist/config.js +61 -0
- package/dist/config.js.map +1 -0
- package/dist/deception.js +205 -0
- package/dist/deception.js.map +1 -0
- package/dist/demo-mode.js +109 -0
- package/dist/demo-mode.js.map +1 -0
- package/dist/dist-dashboard/assets/index-BsMhEnGu.js +648 -0
- package/dist/dist-dashboard/assets/index-CNOkYC_Q.css +10 -0
- package/dist/dist-dashboard/assets/index-CW2grvPC.js +648 -0
- package/dist/dist-dashboard/assets/logo/apparatus-favicon.svg +15 -0
- package/dist/dist-dashboard/assets/logo/apparatus-icon-dark.svg +24 -0
- package/dist/dist-dashboard/assets/logo/apparatus-icon-light.svg +24 -0
- package/dist/dist-dashboard/assets/logo/apparatus-logo-512.png +0 -0
- package/dist/dist-dashboard/assets/logo/apparatus-logo-dark.svg +18 -0
- package/dist/dist-dashboard/assets/logo/apparatus-logo.svg +17 -0
- package/dist/dist-dashboard/assets/logo/apple-touch-icon.png +0 -0
- package/dist/dist-dashboard/assets/logo/favicon-192.png +0 -0
- package/dist/dist-dashboard/assets/logo/favicon-32.png +0 -0
- package/dist/dist-dashboard/assets/logo/favicon.ico +0 -0
- package/dist/dist-dashboard/assets/logo/icon-192.png +0 -0
- package/dist/dist-dashboard/assets/logo/icon-512.png +0 -0
- package/dist/dist-dashboard/assets/logo/icon-light-512.png +0 -0
- package/dist/dist-dashboard/assets/react-vendor-DpRMSntD.js +1 -0
- package/dist/dist-dashboard/assets/router-DSc5pRwN.js +59 -0
- package/dist/dist-dashboard/docs-index.json +1577 -0
- package/dist/dist-dashboard/index.html +21 -0
- package/dist/dlp.js +40 -0
- package/dist/dlp.js.map +1 -0
- package/dist/drills.js +770 -0
- package/dist/drills.js.map +1 -0
- package/dist/echoHandler.js +113 -0
- package/dist/echoHandler.js.map +1 -0
- package/dist/escape/index.js +225 -0
- package/dist/escape/index.js.map +1 -0
- package/dist/escape/methods/dns.js +74 -0
- package/dist/escape/methods/dns.js.map +1 -0
- package/dist/escape/methods/http.js +81 -0
- package/dist/escape/methods/http.js.map +1 -0
- package/dist/escape/methods/icmp.js +36 -0
- package/dist/escape/methods/icmp.js.map +1 -0
- package/dist/escape/methods/tcp.js +38 -0
- package/dist/escape/methods/tcp.js.map +1 -0
- package/dist/escape/methods/udp.js +27 -0
- package/dist/escape/methods/udp.js.map +1 -0
- package/dist/escape/methods/websocket.js +37 -0
- package/dist/escape/methods/websocket.js.map +1 -0
- package/dist/forensics.js +111 -0
- package/dist/forensics.js.map +1 -0
- package/dist/generator.js +67 -0
- package/dist/generator.js.map +1 -0
- package/dist/ghosting.js +414 -0
- package/dist/ghosting.js.map +1 -0
- package/dist/graphql.js +44 -0
- package/dist/graphql.js.map +1 -0
- package/dist/history.js +40 -0
- package/dist/history.js.map +1 -0
- package/dist/imposter/creds.js +16 -0
- package/dist/imposter/creds.js.map +1 -0
- package/dist/imposter/index.js +44 -0
- package/dist/imposter/index.js.map +1 -0
- package/dist/imposter/providers/aws.js +103 -0
- package/dist/imposter/providers/aws.js.map +1 -0
- package/dist/imposter/providers/gcp.js +26 -0
- package/dist/imposter/providers/gcp.js.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/infra-debug.js +68 -0
- package/dist/infra-debug.js.map +1 -0
- package/dist/jwt-debug.js +272 -0
- package/dist/jwt-debug.js.map +1 -0
- package/dist/kv.js +22 -0
- package/dist/kv.js.map +1 -0
- package/dist/lib/generators.js +43 -0
- package/dist/lib/generators.js.map +1 -0
- package/dist/lib/json.js +26 -0
- package/dist/lib/json.js.map +1 -0
- package/dist/logger.js +9 -0
- package/dist/logger.js.map +1 -0
- package/dist/metrics.js +20 -0
- package/dist/metrics.js.map +1 -0
- package/dist/mtd.js +30 -0
- package/dist/mtd.js.map +1 -0
- package/dist/oidc.js +69 -0
- package/dist/oidc.js.map +1 -0
- package/dist/persistence/cluster-state.js +47 -0
- package/dist/persistence/cluster-state.js.map +1 -0
- package/dist/persistence/deception-history.js +65 -0
- package/dist/persistence/deception-history.js.map +1 -0
- package/dist/persistence/drill-runs.js +138 -0
- package/dist/persistence/drill-runs.js.map +1 -0
- package/dist/persistence/request-history.js +41 -0
- package/dist/persistence/request-history.js.map +1 -0
- package/dist/persistence/scenario-catalog.js +73 -0
- package/dist/persistence/scenario-catalog.js.map +1 -0
- package/dist/persistence/status.js +51 -0
- package/dist/persistence/status.js.map +1 -0
- package/dist/persistence/tarpit-state.js +47 -0
- package/dist/persistence/tarpit-state.js.map +1 -0
- package/dist/persistence/webhook-store.js +69 -0
- package/dist/persistence/webhook-store.js.map +1 -0
- package/dist/proxy.js +28 -0
- package/dist/proxy.js.map +1 -0
- package/dist/ratelimit.js +32 -0
- package/dist/ratelimit.js.map +1 -0
- package/dist/redteam.js +442 -0
- package/dist/redteam.js.map +1 -0
- package/dist/scenarios.js +229 -0
- package/dist/scenarios.js.map +1 -0
- package/dist/scripting.js +30 -0
- package/dist/scripting.js.map +1 -0
- package/dist/self-healing.js +42 -0
- package/dist/self-healing.js.map +1 -0
- package/dist/sentinel.js +50 -0
- package/dist/sentinel.js.map +1 -0
- package/dist/server-bad-ssl.js +47 -0
- package/dist/server-bad-ssl.js.map +1 -0
- package/dist/server-grpc.js +66 -0
- package/dist/server-grpc.js.map +1 -0
- package/dist/server-http1.js +5 -0
- package/dist/server-http1.js.map +1 -0
- package/dist/server-http2.js +27 -0
- package/dist/server-http2.js.map +1 -0
- package/dist/server-icap.js +46 -0
- package/dist/server-icap.js.map +1 -0
- package/dist/server-l4.js +30 -0
- package/dist/server-l4.js.map +1 -0
- package/dist/server-mqtt.js +29 -0
- package/dist/server-mqtt.js.map +1 -0
- package/dist/server-protocols.js +18 -0
- package/dist/server-protocols.js.map +1 -0
- package/dist/server-redis.js +112 -0
- package/dist/server-redis.js.map +1 -0
- package/dist/server-smtp.js +66 -0
- package/dist/server-smtp.js.map +1 -0
- package/dist/server-syslog.js +23 -0
- package/dist/server-syslog.js.map +1 -0
- package/dist/server-ws.js +18 -0
- package/dist/server-ws.js.map +1 -0
- package/dist/sidecar/chaos/engine.js +41 -0
- package/dist/sidecar/chaos/engine.js.map +1 -0
- package/dist/sidecar/index.js +98 -0
- package/dist/sidecar/index.js.map +1 -0
- package/dist/simulator/dependency-graph.js +102 -0
- package/dist/simulator/dependency-graph.js.map +1 -0
- package/dist/simulator/supply-chain.js +67 -0
- package/dist/simulator/supply-chain.js.map +1 -0
- package/dist/sink.js +24 -0
- package/dist/sink.js.map +1 -0
- package/dist/sse-broadcast.js +105 -0
- package/dist/sse-broadcast.js.map +1 -0
- package/dist/swagger.js +309 -0
- package/dist/swagger.js.map +1 -0
- package/dist/sysinfo.js +36 -0
- package/dist/sysinfo.js.map +1 -0
- package/dist/tarpit.js +126 -0
- package/dist/tarpit.js.map +1 -0
- package/dist/tool-executor.js +315 -0
- package/dist/tool-executor.js.map +1 -0
- package/dist/tui/api-client.js +341 -0
- package/dist/tui/api-client.js.map +1 -0
- package/dist/tui/core/action-handler.js +302 -0
- package/dist/tui/core/action-handler.js.map +1 -0
- package/dist/tui/core/index.js +18 -0
- package/dist/tui/core/index.js.map +1 -0
- package/dist/tui/core/keyboard.js +329 -0
- package/dist/tui/core/keyboard.js.map +1 -0
- package/dist/tui/core/modal.js +397 -0
- package/dist/tui/core/modal.js.map +1 -0
- package/dist/tui/core/screen-manager.js +262 -0
- package/dist/tui/core/screen-manager.js.map +1 -0
- package/dist/tui/core/store.js +254 -0
- package/dist/tui/core/store.js.map +1 -0
- package/dist/tui/core/widget.js +167 -0
- package/dist/tui/core/widget.js.map +1 -0
- package/dist/tui/dashboard.js +649 -0
- package/dist/tui/dashboard.js.map +1 -0
- package/dist/tui/index.js +118 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/modals/add-rule-modal.js +190 -0
- package/dist/tui/modals/add-rule-modal.js.map +1 -0
- package/dist/tui/modals/dlp-output-modal.js +102 -0
- package/dist/tui/modals/dlp-output-modal.js.map +1 -0
- package/dist/tui/modals/dns-form-modal.js +26 -0
- package/dist/tui/modals/dns-form-modal.js.map +1 -0
- package/dist/tui/modals/ghost-config-modal.js +35 -0
- package/dist/tui/modals/ghost-config-modal.js.map +1 -0
- package/dist/tui/modals/har-results-modal.js +41 -0
- package/dist/tui/modals/har-results-modal.js.map +1 -0
- package/dist/tui/modals/index.js +15 -0
- package/dist/tui/modals/index.js.map +1 -0
- package/dist/tui/modals/jwt-decode-modal.js +45 -0
- package/dist/tui/modals/jwt-decode-modal.js.map +1 -0
- package/dist/tui/modals/jwt-mint-modal.js +70 -0
- package/dist/tui/modals/jwt-mint-modal.js.map +1 -0
- package/dist/tui/modals/ping-form-modal.js +19 -0
- package/dist/tui/modals/ping-form-modal.js.map +1 -0
- package/dist/tui/modals/redteam-results-modal.js +43 -0
- package/dist/tui/modals/redteam-results-modal.js.map +1 -0
- package/dist/tui/modals/scan-form-modal.js +26 -0
- package/dist/tui/modals/scan-form-modal.js.map +1 -0
- package/dist/tui/screens/defense-screen.js +281 -0
- package/dist/tui/screens/defense-screen.js.map +1 -0
- package/dist/tui/screens/forensics-screen.js +81 -0
- package/dist/tui/screens/forensics-screen.js.map +1 -0
- package/dist/tui/screens/index.js +140 -0
- package/dist/tui/screens/index.js.map +1 -0
- package/dist/tui/screens/system-screen.js +81 -0
- package/dist/tui/screens/system-screen.js.map +1 -0
- package/dist/tui/screens/testing-screen.js +429 -0
- package/dist/tui/screens/testing-screen.js.map +1 -0
- package/dist/tui/screens/traffic-screen.js +76 -0
- package/dist/tui/screens/traffic-screen.js.map +1 -0
- package/dist/tui/sse-client.js +130 -0
- package/dist/tui/sse-client.js.map +1 -0
- package/dist/tui/state/metrics-buffer.js +195 -0
- package/dist/tui/state/metrics-buffer.js.map +1 -0
- package/dist/tui/state/metrics-buffer.test.js +102 -0
- package/dist/tui/state/metrics-buffer.test.js.map +1 -0
- package/dist/tui/theme.js +136 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/tui/types.js +6 -0
- package/dist/tui/types.js.map +1 -0
- package/dist/tui/widgets/chaos-widget.js +152 -0
- package/dist/tui/widgets/chaos-widget.js.map +1 -0
- package/dist/tui/widgets/cluster-widget.js +156 -0
- package/dist/tui/widgets/cluster-widget.js.map +1 -0
- package/dist/tui/widgets/dlp-widget.js +161 -0
- package/dist/tui/widgets/dlp-widget.js.map +1 -0
- package/dist/tui/widgets/ghost-widget.js +169 -0
- package/dist/tui/widgets/ghost-widget.js.map +1 -0
- package/dist/tui/widgets/har-widget.js +173 -0
- package/dist/tui/widgets/har-widget.js.map +1 -0
- package/dist/tui/widgets/index.js +122 -0
- package/dist/tui/widgets/index.js.map +1 -0
- package/dist/tui/widgets/jwt-widget.js +177 -0
- package/dist/tui/widgets/jwt-widget.js.map +1 -0
- package/dist/tui/widgets/kv-widget.js +261 -0
- package/dist/tui/widgets/kv-widget.js.map +1 -0
- package/dist/tui/widgets/mtd-widget.js +181 -0
- package/dist/tui/widgets/mtd-widget.js.map +1 -0
- package/dist/tui/widgets/netdiag-widget.js +155 -0
- package/dist/tui/widgets/netdiag-widget.js.map +1 -0
- package/dist/tui/widgets/oidc-widget.js +162 -0
- package/dist/tui/widgets/oidc-widget.js.map +1 -0
- package/dist/tui/widgets/pcap-widget.js +239 -0
- package/dist/tui/widgets/pcap-widget.js.map +1 -0
- package/dist/tui/widgets/redteam-widget.js +155 -0
- package/dist/tui/widgets/redteam-widget.js.map +1 -0
- package/dist/tui/widgets/rps-gauge-widget.js +124 -0
- package/dist/tui/widgets/rps-gauge-widget.js.map +1 -0
- package/dist/tui/widgets/sentinel-widget.js +171 -0
- package/dist/tui/widgets/sentinel-widget.js.map +1 -0
- package/dist/tui/widgets/sparklines-widget.js +127 -0
- package/dist/tui/widgets/sparklines-widget.js.map +1 -0
- package/dist/tui/widgets/sysinfo-widget.js +197 -0
- package/dist/tui/widgets/sysinfo-widget.js.map +1 -0
- package/dist/tui/widgets/traffic-chart-widget.js +170 -0
- package/dist/tui/widgets/traffic-chart-widget.js.map +1 -0
- package/dist/tui/widgets/webhook-widget.js +259 -0
- package/dist/tui/widgets/webhook-widget.js.map +1 -0
- package/dist/utils/ip.js +18 -0
- package/dist/utils/ip.js.map +1 -0
- package/dist/victim/index.js +71 -0
- package/dist/victim/index.js.map +1 -0
- package/dist/webhook.js +88 -0
- package/dist/webhook.js.map +1 -0
- package/package.json +90 -0
- package/proto/echo.proto +19 -0
package/certs/server.crt
ADDED
|
@@ -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-----
|
package/certs/server.key
ADDED
|
@@ -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"}
|