@yiaany/ghostapi 0.1.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 (184) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/CONTRIBUTING.md +117 -0
  3. package/LICENSE +21 -0
  4. package/README.md +354 -0
  5. package/SECURITY.md +37 -0
  6. package/dist/agents/agentPrompt.d.ts +5 -0
  7. package/dist/agents/agentPrompt.js +30 -0
  8. package/dist/agents/agentPrompt.js.map +1 -0
  9. package/dist/ai/aiClient.d.ts +7 -0
  10. package/dist/ai/aiClient.js +30 -0
  11. package/dist/ai/aiClient.js.map +1 -0
  12. package/dist/ai/aiGenerator.d.ts +10 -0
  13. package/dist/ai/aiGenerator.js +101 -0
  14. package/dist/ai/aiGenerator.js.map +1 -0
  15. package/dist/ai/genericInference.d.ts +5 -0
  16. package/dist/ai/genericInference.js +80 -0
  17. package/dist/ai/genericInference.js.map +1 -0
  18. package/dist/ai/index.d.ts +3 -0
  19. package/dist/ai/index.js +2 -0
  20. package/dist/ai/index.js.map +1 -0
  21. package/dist/ai/jsonRepair.d.ts +2 -0
  22. package/dist/ai/jsonRepair.js +31 -0
  23. package/dist/ai/jsonRepair.js.map +1 -0
  24. package/dist/ai/prompts.d.ts +4 -0
  25. package/dist/ai/prompts.js +81 -0
  26. package/dist/ai/prompts.js.map +1 -0
  27. package/dist/behavior/behaviorStore.d.ts +12 -0
  28. package/dist/behavior/behaviorStore.js +72 -0
  29. package/dist/behavior/behaviorStore.js.map +1 -0
  30. package/dist/cache/index.d.ts +9 -0
  31. package/dist/cache/index.js +34 -0
  32. package/dist/cache/index.js.map +1 -0
  33. package/dist/cli/errors.d.ts +4 -0
  34. package/dist/cli/errors.js +9 -0
  35. package/dist/cli/errors.js.map +1 -0
  36. package/dist/cli/index.d.ts +2 -0
  37. package/dist/cli/index.js +277 -0
  38. package/dist/cli/index.js.map +1 -0
  39. package/dist/cli/parser.d.ts +56 -0
  40. package/dist/cli/parser.js +169 -0
  41. package/dist/cli/parser.js.map +1 -0
  42. package/dist/config/localConfig.d.ts +16 -0
  43. package/dist/config/localConfig.js +58 -0
  44. package/dist/config/localConfig.js.map +1 -0
  45. package/dist/config/serverConfig.d.ts +13 -0
  46. package/dist/config/serverConfig.js +44 -0
  47. package/dist/config/serverConfig.js.map +1 -0
  48. package/dist/dashboard/app.js +615 -0
  49. package/dist/dashboard/dashboard.d.ts +4 -0
  50. package/dist/dashboard/dashboard.js +20 -0
  51. package/dist/dashboard/dashboard.js.map +1 -0
  52. package/dist/dashboard/index.d.ts +1 -0
  53. package/dist/dashboard/index.html +298 -0
  54. package/dist/dashboard/index.js +2 -0
  55. package/dist/dashboard/index.js.map +1 -0
  56. package/dist/dashboard/styles.css +349 -0
  57. package/dist/errors/errorEngine.d.ts +3 -0
  58. package/dist/errors/errorEngine.js +65 -0
  59. package/dist/errors/errorEngine.js.map +1 -0
  60. package/dist/errors/index.d.ts +3 -0
  61. package/dist/errors/index.js +3 -0
  62. package/dist/errors/index.js.map +1 -0
  63. package/dist/errors/providerErrors.d.ts +3 -0
  64. package/dist/errors/providerErrors.js +6 -0
  65. package/dist/errors/providerErrors.js.map +1 -0
  66. package/dist/fault/faultLab.d.ts +27 -0
  67. package/dist/fault/faultLab.js +89 -0
  68. package/dist/fault/faultLab.js.map +1 -0
  69. package/dist/index.d.ts +2 -0
  70. package/dist/index.js +2 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/landing/assets/index-BXR41fAD.css +1 -0
  73. package/dist/landing/assets/index-D8_ggMRE.js +55 -0
  74. package/dist/landing/index.html +15 -0
  75. package/dist/landing/landing.d.ts +3 -0
  76. package/dist/landing/landing.js +12 -0
  77. package/dist/landing/landing.js.map +1 -0
  78. package/dist/mcp/server.d.ts +1 -0
  79. package/dist/mcp/server.js +52 -0
  80. package/dist/mcp/server.js.map +1 -0
  81. package/dist/providers/discord.d.ts +2 -0
  82. package/dist/providers/discord.js +11 -0
  83. package/dist/providers/discord.js.map +1 -0
  84. package/dist/providers/generic.d.ts +2 -0
  85. package/dist/providers/generic.js +13 -0
  86. package/dist/providers/generic.js.map +1 -0
  87. package/dist/providers/github.d.ts +2 -0
  88. package/dist/providers/github.js +11 -0
  89. package/dist/providers/github.js.map +1 -0
  90. package/dist/providers/index.d.ts +2 -0
  91. package/dist/providers/index.js +2 -0
  92. package/dist/providers/index.js.map +1 -0
  93. package/dist/providers/openai.d.ts +2 -0
  94. package/dist/providers/openai.js +15 -0
  95. package/dist/providers/openai.js.map +1 -0
  96. package/dist/providers/registry.d.ts +12 -0
  97. package/dist/providers/registry.js +23 -0
  98. package/dist/providers/registry.js.map +1 -0
  99. package/dist/providers/resend.d.ts +2 -0
  100. package/dist/providers/resend.js +12 -0
  101. package/dist/providers/resend.js.map +1 -0
  102. package/dist/providers/stripe.d.ts +2 -0
  103. package/dist/providers/stripe.js +15 -0
  104. package/dist/providers/stripe.js.map +1 -0
  105. package/dist/providers/twilio.d.ts +2 -0
  106. package/dist/providers/twilio.js +14 -0
  107. package/dist/providers/twilio.js.map +1 -0
  108. package/dist/providers/types.d.ts +13 -0
  109. package/dist/providers/types.js +2 -0
  110. package/dist/providers/types.js.map +1 -0
  111. package/dist/proxy/cacheKey.d.ts +2 -0
  112. package/dist/proxy/cacheKey.js +37 -0
  113. package/dist/proxy/cacheKey.js.map +1 -0
  114. package/dist/proxy/providerDetector.d.ts +11 -0
  115. package/dist/proxy/providerDetector.js +74 -0
  116. package/dist/proxy/providerDetector.js.map +1 -0
  117. package/dist/proxy/proxyHandler.d.ts +3 -0
  118. package/dist/proxy/proxyHandler.js +114 -0
  119. package/dist/proxy/proxyHandler.js.map +1 -0
  120. package/dist/proxy/requestNormalizer.d.ts +11 -0
  121. package/dist/proxy/requestNormalizer.js +30 -0
  122. package/dist/proxy/requestNormalizer.js.map +1 -0
  123. package/dist/report/safetyReport.d.ts +13 -0
  124. package/dist/report/safetyReport.js +65 -0
  125. package/dist/report/safetyReport.js.map +1 -0
  126. package/dist/rules/aiRules.d.ts +7 -0
  127. package/dist/rules/aiRules.js +31 -0
  128. package/dist/rules/aiRules.js.map +1 -0
  129. package/dist/scenarios/scenarioStore.d.ts +37 -0
  130. package/dist/scenarios/scenarioStore.js +201 -0
  131. package/dist/scenarios/scenarioStore.js.map +1 -0
  132. package/dist/security/headerSanitizer.d.ts +3 -0
  133. package/dist/security/headerSanitizer.js +12 -0
  134. package/dist/security/headerSanitizer.js.map +1 -0
  135. package/dist/security/maskSecrets.d.ts +1 -0
  136. package/dist/security/maskSecrets.js +2 -0
  137. package/dist/security/maskSecrets.js.map +1 -0
  138. package/dist/security/secrets.d.ts +4 -0
  139. package/dist/security/secrets.js +61 -0
  140. package/dist/security/secrets.js.map +1 -0
  141. package/dist/server/createServer.d.ts +8 -0
  142. package/dist/server/createServer.js +42 -0
  143. package/dist/server/createServer.js.map +1 -0
  144. package/dist/server/eventsStore.d.ts +17 -0
  145. package/dist/server/eventsStore.js +31 -0
  146. package/dist/server/eventsStore.js.map +1 -0
  147. package/dist/server/routes.d.ts +3 -0
  148. package/dist/server/routes.js +189 -0
  149. package/dist/server/routes.js.map +1 -0
  150. package/dist/server/sse.d.ts +5 -0
  151. package/dist/server/sse.js +32 -0
  152. package/dist/server/sse.js.map +1 -0
  153. package/dist/setup/sdkDetector.d.ts +9 -0
  154. package/dist/setup/sdkDetector.js +31 -0
  155. package/dist/setup/sdkDetector.js.map +1 -0
  156. package/dist/setup/setupGenerator.d.ts +28 -0
  157. package/dist/setup/setupGenerator.js +146 -0
  158. package/dist/setup/setupGenerator.js.map +1 -0
  159. package/dist/state/index.d.ts +1 -0
  160. package/dist/state/index.js +2 -0
  161. package/dist/state/index.js.map +1 -0
  162. package/dist/state/stateExtractor.d.ts +3 -0
  163. package/dist/state/stateExtractor.js +36 -0
  164. package/dist/state/stateExtractor.js.map +1 -0
  165. package/dist/state/stateResolver.d.ts +8 -0
  166. package/dist/state/stateResolver.js +95 -0
  167. package/dist/state/stateResolver.js.map +1 -0
  168. package/dist/state/stateStore.d.ts +4 -0
  169. package/dist/state/stateStore.js +72 -0
  170. package/dist/state/stateStore.js.map +1 -0
  171. package/dist/tests/testGenerator.d.ts +6 -0
  172. package/dist/tests/testGenerator.js +33 -0
  173. package/dist/tests/testGenerator.js.map +1 -0
  174. package/dist/utils/json.d.ts +2 -0
  175. package/dist/utils/json.js +10 -0
  176. package/dist/utils/json.js.map +1 -0
  177. package/docs/release-checklist.md +71 -0
  178. package/examples/agent-instructions/README.md +39 -0
  179. package/examples/generic-rest/README.md +27 -0
  180. package/examples/github-fetch/README.md +35 -0
  181. package/examples/resend-node/README.md +22 -0
  182. package/examples/stripe-node/README.md +29 -0
  183. package/examples/twilio-node/README.md +21 -0
  184. package/package.json +67 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/dashboard/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAiB,EAAE,QAAkB;IAC1E,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;IACnE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAiB,EAAE,QAAkB;IAC7E,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;IAClE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAiB,EAAE,QAAkB;IAC5E,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;IAC7D,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const dashboardRoute = "/dashboard";
@@ -0,0 +1,298 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>GhostAPI Dashboard</title>
7
+ <link rel="stylesheet" href="/dashboard/styles.css">
8
+ <link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>👻</text></svg>">
9
+ </head>
10
+ <body>
11
+
12
+ <div class="app-wrapper">
13
+
14
+ <!-- Left Nav Sidebar (Exact React replica) -->
15
+ <aside class="sidebar" id="sidebar">
16
+ <!-- Workspace Switcher -->
17
+ <div class="ws-switcher">
18
+ <div class="ws-btn" style="cursor: default">
19
+ <div class="ws-btn-content">
20
+ <div class="ws-avatar">G</div>
21
+ <div class="ws-info">
22
+ <span class="ws-title">GhostAPI.local</span>
23
+ <span class="ws-subtitle">Proxy Engine</span>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </div>
28
+
29
+ <!-- Navigation Scroll -->
30
+ <div class="nav-scroll-area">
31
+ <!-- Group 1 -->
32
+ <div class="nav-group">
33
+ <div class="nav-item" onclick="openSearch()">
34
+ <div class="nav-item-left">
35
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
36
+ <span class="nav-item-title">Search</span>
37
+ </div>
38
+ <div class="nav-item-right"><div class="sc-badge">⌘K</div></div>
39
+ </div>
40
+ <div class="nav-item active" id="nav-all" onclick="setFilter('all')">
41
+ <div class="nav-item-left">
42
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg>
43
+ <span class="nav-item-title">Live Traffic</span>
44
+ </div>
45
+ </div>
46
+ <div class="nav-item" onclick="generateRepoSetup(event)">
47
+ <div class="nav-item-left">
48
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v6"></path><path d="m16 6-4 4-4-4"></path><rect x="4" y="12" width="16" height="8" rx="2"></rect><path d="M8 16h.01"></path><path d="M12 16h.01"></path></svg>
49
+ <span class="nav-item-title">Agent Setup</span>
50
+ </div>
51
+ <div class="nav-item-right"><div class="sc-badge">1-click</div></div>
52
+ </div>
53
+ <div class="nav-item" onclick="openScenarios(event)">
54
+ <div class="nav-item-left">
55
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6h16"></path><path d="M4 12h10"></path><path d="M4 18h7"></path><path d="m15 16 2 2 4-4"></path></svg>
56
+ <span class="nav-item-title">Scenarios</span>
57
+ </div>
58
+ </div>
59
+ <div class="nav-item" onclick="copyAgentPrompt(event)">
60
+ <div class="nav-item-left">
61
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"></path></svg>
62
+ <span class="nav-item-title">Copy Agent Prompt</span>
63
+ </div>
64
+ </div>
65
+ <div class="nav-item" onclick="openSafetyReport(event)">
66
+ <div class="nav-item-left">
67
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path><path d="m9 12 2 2 4-4"></path></svg>
68
+ <span class="nav-item-title">Safety Report</span>
69
+ </div>
70
+ </div>
71
+ </div>
72
+
73
+ <!-- Group 2 Filters -->
74
+ <div class="nav-group">
75
+ <span class="nav-heading">Filter Providers</span>
76
+ <div class="nav-item" id="nav-stripe" onclick="setFilter('stripe')">
77
+ <div class="nav-item-left">
78
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path></svg>
79
+ <span class="nav-item-title">Stripe</span>
80
+ </div>
81
+ </div>
82
+ <div class="nav-item" id="nav-twilio" onclick="setFilter('twilio')">
83
+ <div class="nav-item-left">
84
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 21v-4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v4"></path><path d="M3 21v-4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v4"></path><path d="M9 15V9a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v6"></path></svg>
85
+ <span class="nav-item-title">Twilio</span>
86
+ </div>
87
+ </div>
88
+ <div class="nav-item" id="nav-resend" onclick="setFilter('resend')">
89
+ <div class="nav-item-left">
90
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg>
91
+ <span class="nav-item-title">Resend</span>
92
+ </div>
93
+ </div>
94
+ <div class="nav-item" id="nav-github" onclick="setFilter('github')">
95
+ <div class="nav-item-left">
96
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"></path><path d="M9 18c-4.51 2-5-2-7-2"></path></svg>
97
+ <span class="nav-item-title">GitHub</span>
98
+ </div>
99
+ </div>
100
+ <div class="nav-item" id="nav-discord" onclick="setFilter('discord')">
101
+ <div class="nav-item-left">
102
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M18 10a4 4 0 0 0-4-4h-4a4 4 0 0 0-4 4v4a4 4 0 0 0 4 4h4a4 4 0 0 0 4-4v-4z"></path><line x1="8" y1="10" x2="8" y2="10.01"></line><line x1="16" y1="10" x2="16" y2="10.01"></line></svg>
103
+ <span class="nav-item-title">Discord</span>
104
+ </div>
105
+ </div>
106
+ <div class="nav-item" id="nav-generic" onclick="setFilter('generic')">
107
+ <div class="nav-item-left">
108
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"></polygon><polyline points="2 17 12 22 22 17"></polyline><polyline points="2 12 12 17 22 12"></polyline></svg>
109
+ <span class="nav-item-title">Generic REST</span>
110
+ </div>
111
+ </div>
112
+ </div>
113
+ </div>
114
+
115
+ <!-- Nav Bottom -->
116
+ <div class="nav-bottom">
117
+ <div class="nav-item" onclick="clearStorage('cache', event)">
118
+ <div class="nav-item-left">
119
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><rect x="9" y="9" width="6" height="6"></rect><line x1="9" y1="1" x2="9" y2="4"></line><line x1="15" y1="1" x2="15" y2="4"></line><line x1="9" y1="20" x2="9" y2="23"></line><line x1="15" y1="20" x2="15" y2="23"></line><line x1="20" y1="9" x2="23" y2="9"></line><line x1="20" y1="14" x2="23" y2="14"></line><line x1="1" y1="9" x2="4" y2="9"></line><line x1="1" y1="14" x2="4" y2="14"></line></svg>
120
+ <span class="nav-item-title">Clear Cache</span>
121
+ </div>
122
+ </div>
123
+ <div class="nav-item" onclick="clearStorage('state', event)">
124
+ <div class="nav-item-left">
125
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg>
126
+ <span class="nav-item-title">Clear State</span>
127
+ </div>
128
+ </div>
129
+ <div class="nav-item fault-toggle" id="fault-toggle" onclick="toggleFaultLab(event)">
130
+ <div class="nav-item-left">
131
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2 3 14h8l-1 8 11-14h-8l0-6z"></path></svg>
132
+ <span class="nav-item-title">Chaos Mode</span>
133
+ </div>
134
+ <span class="fault-state" id="fault-state">Off</span>
135
+ </div>
136
+ <div class="nav-item" onclick="generateAiRules(event)">
137
+ <div class="nav-item-left">
138
+ <svg class="nav-item-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3v3"></path><path d="M18.36 5.64 16.24 7.76"></path><path d="M21 12h-3"></path><path d="M18.36 18.36 16.24 16.24"></path><path d="M12 18v3"></path><path d="M7.76 16.24 5.64 18.36"></path><path d="M6 12H3"></path><path d="M7.76 7.76 5.64 5.64"></path><circle cx="12" cy="12" r="3"></circle></svg>
139
+ <span class="nav-item-title">Generate AI Rules</span>
140
+ </div>
141
+ </div>
142
+ </div>
143
+ </aside>
144
+
145
+ <!-- Main Content Structure -->
146
+ <main class="main">
147
+
148
+ <!-- Topbar -->
149
+ <header class="topbar">
150
+ <div class="topbar-left">
151
+ <button class="toggle-btn" id="sidebar-toggle">
152
+ <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line></svg>
153
+ </button>
154
+ <div class="breadcrumb">
155
+ <span>GhostAPI</span>
156
+ <span>/</span>
157
+ <span class="breadcrumb-active">Live Traffic</span>
158
+ </div>
159
+ </div>
160
+ <div class="topbar-right">
161
+ <div class="status-indicator connected" id="status-indicator">
162
+ <div class="status-dot"></div>
163
+ <span id="status-text">Connected</span>
164
+ </div>
165
+ </div>
166
+ </header>
167
+
168
+ <!-- Content Engine -->
169
+ <div class="content-wrapper">
170
+
171
+ <!-- Event List Pane -->
172
+ <div class="event-list-pane">
173
+ <div class="event-list-header">
174
+ <h2>Requests</h2>
175
+ <div class="event-count" id="event-count">0</div>
176
+ </div>
177
+ <div class="events-scroll" id="event-list">
178
+ <!-- JS mounts events here -->
179
+ </div>
180
+ </div>
181
+
182
+ <!-- Details Split Pane -->
183
+ <div class="details-pane">
184
+ <!-- Empty State -->
185
+ <div class="empty-view" id="empty-details">
186
+ <svg viewBox="0 0 24 24" width="48" height="48" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>
187
+ <p>Select a request to view details</p>
188
+ </div>
189
+
190
+ <!-- Populated Details -->
191
+ <div class="details-content" id="details-content">
192
+ <div class="dep-header">
193
+ <div class="dep-title">
194
+ <span class="ec-method" id="d-method"></span>
195
+ <span id="d-path"></span>
196
+ </div>
197
+ <div class="dep-badges">
198
+ <button class="mini-action" onclick="generateSelectedTest()">Generate Test</button>
199
+ <span class="pill" id="d-status"></span>
200
+ <span class="pill" id="d-time"></span>
201
+ <span class="pill" id="d-provider"></span>
202
+ <span class="pill" id="d-source"></span>
203
+ </div>
204
+ </div>
205
+
206
+ <div class="json-split">
207
+ <div class="json-pane">
208
+ <div class="json-header">
209
+ <span>Request</span>
210
+ <svg class="ws-icon" style="cursor:pointer" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" onclick="copy('req')"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>
211
+ </div>
212
+ <div class="json-body"><pre id="d-req-body"></pre></div>
213
+ </div>
214
+ <div class="json-pane">
215
+ <div class="json-header">
216
+ <span>Response</span>
217
+ <svg class="ws-icon" style="cursor:pointer" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" onclick="copy('res')"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>
218
+ </div>
219
+ <div class="json-body"><pre id="d-res-body"></pre></div>
220
+ </div>
221
+ </div>
222
+ </div>
223
+
224
+ </div>
225
+ </div>
226
+ </main>
227
+
228
+ <!-- Modal Search -->
229
+ <div class="modal-overlay" id="search-modal">
230
+ <div class="modal-content">
231
+ <div class="modal-header">
232
+ <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
233
+ <input type="text" class="modal-input" id="search-input" placeholder="Search paths, providers, payloads...">
234
+ <div class="sc-badge" style="display:flex">ESC</div>
235
+ </div>
236
+ <div class="modal-body">
237
+ <svg viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" style="opacity: 0.3"><polyline points="4 7 4 4 20 4 20 7"></polyline><line x1="9" y1="20" x2="15" y2="20"></line><line x1="12" y1="4" x2="12" y2="20"></line></svg>
238
+ <p>Type to filter live traffic...</p>
239
+ </div>
240
+ </div>
241
+ </div>
242
+
243
+ <div class="modal-overlay" id="rules-modal">
244
+ <div class="modal-content rules-modal-content">
245
+ <div class="modal-header rules-modal-header">
246
+ <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5V4a2 2 0 0 1 2-2h9l5 5v12.5a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2z"></path><path d="M14 2v6h6"></path></svg>
247
+ <div class="rules-title-block">
248
+ <strong>.cursorrules</strong>
249
+ <span id="rules-subtitle">Generated from package.json</span>
250
+ </div>
251
+ <button class="modal-action" onclick="copyRules()">Copy</button>
252
+ <button class="modal-action ghost" onclick="closeRulesModal()">Close</button>
253
+ </div>
254
+ <div class="rules-body">
255
+ <pre id="rules-output">Generating...</pre>
256
+ </div>
257
+ </div>
258
+ </div>
259
+
260
+ <div class="modal-overlay" id="setup-modal">
261
+ <div class="modal-content setup-modal-content">
262
+ <div class="modal-header rules-modal-header">
263
+ <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v6"></path><path d="m16 6-4 4-4-4"></path><rect x="4" y="12" width="16" height="8" rx="2"></rect></svg>
264
+ <div class="rules-title-block">
265
+ <strong>Agent Setup</strong>
266
+ <span id="setup-subtitle">One-click onboarding for this repo</span>
267
+ </div>
268
+ <button class="modal-action" onclick="copySetupOutput()">Copy Selected</button>
269
+ <button class="modal-action ghost" onclick="closeSetupModal()">Close</button>
270
+ </div>
271
+ <div class="setup-grid">
272
+ <div class="setup-list" id="setup-list"></div>
273
+ <div class="rules-body setup-output"><pre id="setup-output">Generating setup...</pre></div>
274
+ </div>
275
+ </div>
276
+ </div>
277
+
278
+ <div class="modal-overlay" id="scenarios-modal">
279
+ <div class="modal-content setup-modal-content">
280
+ <div class="modal-header rules-modal-header">
281
+ <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6h16"></path><path d="M4 12h10"></path><path d="M4 18h7"></path><path d="m15 16 2 2 4-4"></path></svg>
282
+ <div class="rules-title-block">
283
+ <strong>Scenario Presets</strong>
284
+ <span id="scenarios-subtitle">Replay, export, or share agent-ready API flows</span>
285
+ </div>
286
+ <button class="modal-action ghost" onclick="closeScenariosModal()">Close</button>
287
+ </div>
288
+ <div class="scenario-shell">
289
+ <div class="scenario-list" id="scenario-list"></div>
290
+ <div class="rules-body scenario-output"><pre id="scenario-output">Select a scenario.</pre></div>
291
+ </div>
292
+ </div>
293
+ </div>
294
+
295
+ </div>
296
+ <script src="/dashboard/app.js"></script>
297
+ </body>
298
+ </html>
@@ -0,0 +1,2 @@
1
+ export const dashboardRoute = "/dashboard";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dashboard/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC"}