@sentry/warden 0.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 (199) hide show
  1. package/.agents/skills/find-bugs/SKILL.md +75 -0
  2. package/.agents/skills/vercel-react-best-practices/AGENTS.md +2934 -0
  3. package/.agents/skills/vercel-react-best-practices/SKILL.md +136 -0
  4. package/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  5. package/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  6. package/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  7. package/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  8. package/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  9. package/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  10. package/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  11. package/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  12. package/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  13. package/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  14. package/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  15. package/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  16. package/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  17. package/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  18. package/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  19. package/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  20. package/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  21. package/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  22. package/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  23. package/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  24. package/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  25. package/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  26. package/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  27. package/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  28. package/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  29. package/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  30. package/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  31. package/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  32. package/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  33. package/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  34. package/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  35. package/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  36. package/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  37. package/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  38. package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  39. package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  40. package/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  41. package/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  42. package/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  43. package/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  44. package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  45. package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  46. package/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  47. package/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  48. package/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  49. package/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  50. package/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  51. package/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  52. package/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  53. package/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  54. package/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  55. package/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  56. package/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  57. package/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  58. package/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  59. package/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  60. package/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  61. package/.claude/settings.json +57 -0
  62. package/.claude/settings.local.json +88 -0
  63. package/.claude/skills/agent-prompt/SKILL.md +54 -0
  64. package/.claude/skills/agent-prompt/references/agentic-patterns.md +94 -0
  65. package/.claude/skills/agent-prompt/references/anti-patterns.md +140 -0
  66. package/.claude/skills/agent-prompt/references/context-design.md +124 -0
  67. package/.claude/skills/agent-prompt/references/core-principles.md +75 -0
  68. package/.claude/skills/agent-prompt/references/model-guidance.md +118 -0
  69. package/.claude/skills/agent-prompt/references/output-formats.md +98 -0
  70. package/.claude/skills/agent-prompt/references/skill-structure.md +115 -0
  71. package/.claude/skills/agent-prompt/references/system-prompts.md +115 -0
  72. package/.claude/skills/notseer/SKILL.md +131 -0
  73. package/.claude/skills/skill-writer/SKILL.md +140 -0
  74. package/.claude/skills/testing-guidelines/SKILL.md +132 -0
  75. package/.claude/skills/warden-skill/SKILL.md +250 -0
  76. package/.claude/skills/warden-skill/references/config-schema.md +133 -0
  77. package/.dex/config.toml +2 -0
  78. package/.github/workflows/ci.yml +33 -0
  79. package/.github/workflows/release.yml +54 -0
  80. package/.github/workflows/warden.yml +40 -0
  81. package/AGENTS.md +89 -0
  82. package/CONTRIBUTING.md +60 -0
  83. package/LICENSE +105 -0
  84. package/README.md +43 -0
  85. package/SPEC.md +263 -0
  86. package/action.yml +87 -0
  87. package/assets/favicon.png +0 -0
  88. package/assets/warden-icon-bw.svg +5 -0
  89. package/assets/warden-icon-purple.png +0 -0
  90. package/assets/warden-icon-purple.svg +5 -0
  91. package/docs/.claude/settings.local.json +11 -0
  92. package/docs/astro.config.mjs +43 -0
  93. package/docs/package.json +19 -0
  94. package/docs/pnpm-lock.yaml +4000 -0
  95. package/docs/public/favicon.svg +5 -0
  96. package/docs/src/components/Code.astro +141 -0
  97. package/docs/src/components/PackageManagerTabs.astro +183 -0
  98. package/docs/src/components/Terminal.astro +212 -0
  99. package/docs/src/layouts/Base.astro +380 -0
  100. package/docs/src/pages/cli.astro +167 -0
  101. package/docs/src/pages/config.astro +394 -0
  102. package/docs/src/pages/guide.astro +449 -0
  103. package/docs/src/pages/index.astro +490 -0
  104. package/docs/src/styles/global.css +551 -0
  105. package/docs/tsconfig.json +3 -0
  106. package/docs/vercel.json +5 -0
  107. package/eslint.config.js +33 -0
  108. package/package.json +73 -0
  109. package/src/action/index.ts +1 -0
  110. package/src/action/main.ts +868 -0
  111. package/src/cli/args.test.ts +477 -0
  112. package/src/cli/args.ts +415 -0
  113. package/src/cli/commands/add.ts +447 -0
  114. package/src/cli/commands/init.test.ts +136 -0
  115. package/src/cli/commands/init.ts +132 -0
  116. package/src/cli/commands/setup-app/browser.ts +38 -0
  117. package/src/cli/commands/setup-app/credentials.ts +45 -0
  118. package/src/cli/commands/setup-app/manifest.ts +48 -0
  119. package/src/cli/commands/setup-app/server.ts +172 -0
  120. package/src/cli/commands/setup-app.ts +156 -0
  121. package/src/cli/commands/sync.ts +114 -0
  122. package/src/cli/context.ts +131 -0
  123. package/src/cli/files.test.ts +155 -0
  124. package/src/cli/files.ts +89 -0
  125. package/src/cli/fix.test.ts +310 -0
  126. package/src/cli/fix.ts +387 -0
  127. package/src/cli/git.test.ts +119 -0
  128. package/src/cli/git.ts +318 -0
  129. package/src/cli/index.ts +14 -0
  130. package/src/cli/main.ts +672 -0
  131. package/src/cli/output/box.ts +235 -0
  132. package/src/cli/output/formatters.test.ts +187 -0
  133. package/src/cli/output/formatters.ts +269 -0
  134. package/src/cli/output/icons.ts +13 -0
  135. package/src/cli/output/index.ts +44 -0
  136. package/src/cli/output/ink-runner.tsx +337 -0
  137. package/src/cli/output/jsonl.test.ts +347 -0
  138. package/src/cli/output/jsonl.ts +126 -0
  139. package/src/cli/output/reporter.ts +435 -0
  140. package/src/cli/output/tasks.ts +374 -0
  141. package/src/cli/output/tty.test.ts +117 -0
  142. package/src/cli/output/tty.ts +60 -0
  143. package/src/cli/output/verbosity.test.ts +40 -0
  144. package/src/cli/output/verbosity.ts +31 -0
  145. package/src/cli/terminal.test.ts +148 -0
  146. package/src/cli/terminal.ts +301 -0
  147. package/src/config/index.ts +3 -0
  148. package/src/config/loader.test.ts +313 -0
  149. package/src/config/loader.ts +103 -0
  150. package/src/config/schema.ts +168 -0
  151. package/src/config/writer.test.ts +119 -0
  152. package/src/config/writer.ts +84 -0
  153. package/src/diff/classify.test.ts +162 -0
  154. package/src/diff/classify.ts +92 -0
  155. package/src/diff/coalesce.test.ts +208 -0
  156. package/src/diff/coalesce.ts +133 -0
  157. package/src/diff/context.test.ts +226 -0
  158. package/src/diff/context.ts +201 -0
  159. package/src/diff/index.ts +4 -0
  160. package/src/diff/parser.test.ts +212 -0
  161. package/src/diff/parser.ts +149 -0
  162. package/src/event/context.ts +132 -0
  163. package/src/event/index.ts +2 -0
  164. package/src/event/schedule-context.ts +101 -0
  165. package/src/examples/examples.integration.test.ts +66 -0
  166. package/src/examples/index.test.ts +101 -0
  167. package/src/examples/index.ts +122 -0
  168. package/src/examples/setup.ts +25 -0
  169. package/src/index.ts +115 -0
  170. package/src/output/dedup.test.ts +419 -0
  171. package/src/output/dedup.ts +607 -0
  172. package/src/output/github-checks.test.ts +300 -0
  173. package/src/output/github-checks.ts +476 -0
  174. package/src/output/github-issues.ts +329 -0
  175. package/src/output/index.ts +5 -0
  176. package/src/output/issue-renderer.ts +197 -0
  177. package/src/output/renderer.test.ts +727 -0
  178. package/src/output/renderer.ts +217 -0
  179. package/src/output/stale.test.ts +375 -0
  180. package/src/output/stale.ts +155 -0
  181. package/src/output/types.ts +34 -0
  182. package/src/sdk/index.ts +1 -0
  183. package/src/sdk/runner.test.ts +806 -0
  184. package/src/sdk/runner.ts +1232 -0
  185. package/src/skills/index.ts +36 -0
  186. package/src/skills/loader.test.ts +300 -0
  187. package/src/skills/loader.ts +423 -0
  188. package/src/skills/remote.test.ts +704 -0
  189. package/src/skills/remote.ts +604 -0
  190. package/src/triggers/matcher.test.ts +277 -0
  191. package/src/triggers/matcher.ts +152 -0
  192. package/src/types/index.ts +194 -0
  193. package/src/utils/async.ts +18 -0
  194. package/src/utils/index.test.ts +84 -0
  195. package/src/utils/index.ts +50 -0
  196. package/tsconfig.json +25 -0
  197. package/vitest.config.ts +8 -0
  198. package/vitest.integration.config.ts +11 -0
  199. package/warden.toml +19 -0
@@ -0,0 +1,551 @@
1
+ :root {
2
+ /* Backgrounds */
3
+ --bg: #000000;
4
+ --bg-elevated: #111111;
5
+ --bg-subtle: #0a0a0a;
6
+
7
+ /* Text */
8
+ --text: #fafafa;
9
+ --text-secondary: #888888;
10
+ --text-tertiary: #555555;
11
+
12
+ /* Links */
13
+ --link: #3b9eff;
14
+ --link-hover: #6bb3ff;
15
+
16
+ /* Borders */
17
+ --border: rgba(255, 255, 255, 0.1);
18
+ --border-strong: rgba(255, 255, 255, 0.2);
19
+
20
+ /* Radius */
21
+ --radius: 8px;
22
+ --radius-lg: 12px;
23
+
24
+ /* Fonts */
25
+ --font-mono: 'Geist Mono', monospace;
26
+ --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
27
+ }
28
+
29
+ * {
30
+ margin: 0;
31
+ padding: 0;
32
+ box-sizing: border-box;
33
+ }
34
+
35
+ html {
36
+ font-size: 16px;
37
+ scroll-behavior: smooth;
38
+ }
39
+
40
+ body {
41
+ font-family: var(--font-sans);
42
+ background: var(--bg);
43
+ color: var(--text);
44
+ line-height: 1.6;
45
+ min-height: 100vh;
46
+ -webkit-font-smoothing: antialiased;
47
+ -moz-osx-font-smoothing: grayscale;
48
+ }
49
+
50
+ /* Links */
51
+ a {
52
+ color: var(--link);
53
+ text-decoration: none;
54
+ transition: color 0.15s ease;
55
+ }
56
+
57
+ a:visited {
58
+ color: var(--link);
59
+ }
60
+
61
+ a:hover,
62
+ a:visited:hover {
63
+ color: var(--link-hover);
64
+ }
65
+
66
+ /* Typography */
67
+ h1, h2, h3, h4, h5, h6 {
68
+ position: relative;
69
+ font-weight: 600;
70
+ line-height: 1.25;
71
+ color: var(--text);
72
+ letter-spacing: -0.02em;
73
+ }
74
+
75
+ /* Heading anchors */
76
+ .heading-anchor {
77
+ position: absolute;
78
+ left: -1.5em;
79
+ opacity: 0;
80
+ font-weight: 400;
81
+ text-decoration: none;
82
+ color: var(--text-tertiary);
83
+ transition: opacity 0.15s ease;
84
+ }
85
+
86
+ h1:hover .heading-anchor,
87
+ h2:hover .heading-anchor,
88
+ h3:hover .heading-anchor,
89
+ h4:hover .heading-anchor {
90
+ opacity: 1;
91
+ }
92
+
93
+ .heading-anchor:hover {
94
+ color: var(--link);
95
+ }
96
+
97
+ h1 {
98
+ font-size: 2.25rem;
99
+ margin: 0 0 1.5rem;
100
+ }
101
+
102
+ h2 {
103
+ font-size: 1.5rem;
104
+ margin: 3rem 0 1rem;
105
+ padding-bottom: 0.5rem;
106
+ border-bottom: 1px solid var(--border);
107
+ }
108
+
109
+ h3 {
110
+ font-size: 1.125rem;
111
+ margin: 2rem 0 0.75rem;
112
+ }
113
+
114
+ h4 {
115
+ font-size: 1rem;
116
+ margin: 1.5rem 0 0.5rem;
117
+ }
118
+
119
+ p {
120
+ margin: 0 0 1rem;
121
+ color: var(--text-secondary);
122
+ line-height: 1.7;
123
+ }
124
+
125
+ strong {
126
+ color: var(--text);
127
+ font-weight: 600;
128
+ }
129
+
130
+ ul, ol {
131
+ margin: 0 0 1rem;
132
+ padding-left: 1.25rem;
133
+ color: var(--text-secondary);
134
+ }
135
+
136
+ li {
137
+ margin-bottom: 0.375rem;
138
+ line-height: 1.6;
139
+ }
140
+
141
+ li strong {
142
+ color: var(--text);
143
+ }
144
+
145
+ /* Inline code */
146
+ code {
147
+ font-family: var(--font-mono);
148
+ font-size: 0.875em;
149
+ background: var(--bg-elevated);
150
+ color: var(--text);
151
+ padding: 0.15em 0.4em;
152
+ border-radius: 4px;
153
+ border: 1px solid var(--border);
154
+ }
155
+
156
+ /* Code blocks */
157
+ pre {
158
+ font-family: var(--font-mono);
159
+ font-size: 0.8125rem;
160
+ line-height: 1.7;
161
+ background: var(--bg) !important;
162
+ border: 1px solid var(--border);
163
+ border-radius: var(--radius);
164
+ padding: 1rem 1.25rem;
165
+ overflow-x: auto;
166
+ margin: 1rem 0;
167
+ }
168
+
169
+ pre code {
170
+ background: none !important;
171
+ border: none;
172
+ padding: 0;
173
+ font-size: inherit;
174
+ color: inherit;
175
+ }
176
+
177
+ /* Shiki overrides */
178
+ pre.astro-code,
179
+ pre[class*="astro-code"] {
180
+ background: var(--bg) !important;
181
+ border: 1px solid var(--border);
182
+ border-radius: var(--radius);
183
+ padding: 1rem 1.25rem;
184
+ }
185
+
186
+ pre.astro-code code,
187
+ pre[class*="astro-code"] code {
188
+ background: none !important;
189
+ border: none;
190
+ }
191
+
192
+ /* Tables */
193
+ table {
194
+ width: 100%;
195
+ border-collapse: separate;
196
+ border-spacing: 0;
197
+ margin: 1.5rem 0;
198
+ font-size: 0.875rem;
199
+ background: #0a0a0a;
200
+ border: 1px solid rgba(255, 255, 255, 0.1);
201
+ border-radius: 8px;
202
+ overflow: hidden;
203
+ }
204
+
205
+ thead {
206
+ background: #111;
207
+ }
208
+
209
+ th {
210
+ text-align: left;
211
+ padding: 0.875rem 1.25rem;
212
+ font-weight: 600;
213
+ color: #fafafa;
214
+ font-size: 0.75rem;
215
+ text-transform: uppercase;
216
+ letter-spacing: 0.05em;
217
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
218
+ }
219
+
220
+ td {
221
+ text-align: left;
222
+ padding: 0.875rem 1.25rem;
223
+ color: #888;
224
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
225
+ }
226
+
227
+ td strong {
228
+ color: #fafafa;
229
+ font-weight: 500;
230
+ }
231
+
232
+ td code {
233
+ font-size: 0.8125rem;
234
+ }
235
+
236
+ tbody tr:last-child td {
237
+ border-bottom: none;
238
+ }
239
+
240
+ tbody tr:hover td {
241
+ background: rgba(255, 255, 255, 0.02);
242
+ }
243
+
244
+ /* Definition lists */
245
+ dl {
246
+ margin: 1.5rem 0;
247
+ }
248
+
249
+ dt {
250
+ font-family: var(--font-mono);
251
+ font-size: 0.875rem;
252
+ font-weight: 500;
253
+ color: #c084fc;
254
+ margin-top: 0.75rem;
255
+ }
256
+
257
+ dt:first-child {
258
+ margin-top: 0;
259
+ }
260
+
261
+ dd {
262
+ color: var(--text-secondary);
263
+ margin: 0.25rem 0 0 1rem;
264
+ font-size: 0.9375rem;
265
+ line-height: 1.5;
266
+ }
267
+
268
+ /* Blockquotes */
269
+ blockquote {
270
+ margin: 1.5rem 0;
271
+ padding: 1rem 1.25rem;
272
+ background: var(--bg-subtle);
273
+ border-left: 3px solid var(--border-strong);
274
+ border-radius: 0 var(--radius) var(--radius) 0;
275
+ color: var(--text-secondary);
276
+ }
277
+
278
+ blockquote p {
279
+ margin: 0;
280
+ }
281
+
282
+ blockquote p + p {
283
+ margin-top: 0.75rem;
284
+ }
285
+
286
+ /* Horizontal rules */
287
+ hr {
288
+ border: none;
289
+ border-top: 1px solid var(--border);
290
+ margin: 2rem 0;
291
+ }
292
+
293
+ /* Layout */
294
+ .container {
295
+ max-width: 860px;
296
+ margin: 0 auto;
297
+ padding: 0 1.5rem;
298
+ }
299
+
300
+ /* Hero */
301
+ .hero {
302
+ padding: 5rem 0 4rem;
303
+ text-align: center;
304
+ }
305
+
306
+ .hero h1 {
307
+ font-size: 5rem;
308
+ font-weight: 700;
309
+ letter-spacing: -0.05em;
310
+ margin-bottom: 0.75rem;
311
+ background: linear-gradient(to bottom, #ffffff 0%, #666666 100%);
312
+ -webkit-background-clip: text;
313
+ -webkit-text-fill-color: transparent;
314
+ background-clip: text;
315
+ }
316
+
317
+ .hero .tagline {
318
+ font-size: 1.25rem;
319
+ color: var(--text-secondary);
320
+ margin-bottom: 0.25rem;
321
+ font-weight: 400;
322
+ }
323
+
324
+ .hero .tagline:last-of-type {
325
+ margin-bottom: 2.5rem;
326
+ }
327
+
328
+ /* Sections */
329
+ .section {
330
+ padding: 3rem 0;
331
+ border-top: 1px solid var(--border);
332
+ }
333
+
334
+ .section h2 {
335
+ border-bottom: none;
336
+ padding-bottom: 0;
337
+ margin-top: 0;
338
+ margin-bottom: 1.5rem;
339
+ }
340
+
341
+ /* Feature grid */
342
+ .feature-grid {
343
+ display: grid;
344
+ grid-template-columns: repeat(2, 1fr);
345
+ gap: 1rem;
346
+ margin-top: 1.5rem;
347
+ }
348
+
349
+ .feature {
350
+ background: var(--bg-subtle);
351
+ border: 1px solid var(--border);
352
+ border-radius: var(--radius-lg);
353
+ padding: 1.25rem 1.5rem;
354
+ transition: border-color 0.2s ease;
355
+ }
356
+
357
+ .feature:hover {
358
+ border-color: var(--border-strong);
359
+ }
360
+
361
+ .feature h3 {
362
+ margin: 0 0 0.5rem;
363
+ font-size: 0.9375rem;
364
+ font-weight: 600;
365
+ color: var(--text);
366
+ }
367
+
368
+ .feature p {
369
+ margin: 0;
370
+ font-size: 0.875rem;
371
+ line-height: 1.5;
372
+ color: var(--text-secondary);
373
+ }
374
+
375
+ /* Command cards */
376
+ .command-card {
377
+ background: #000;
378
+ border: 1px solid rgba(255, 255, 255, 0.1);
379
+ border-radius: var(--radius-lg);
380
+ padding: 1.25rem 1.5rem;
381
+ margin-bottom: 1.25rem;
382
+ }
383
+
384
+ .command-card h3 {
385
+ margin: 0 0 0.375rem;
386
+ font-family: var(--font-mono);
387
+ font-size: 1rem;
388
+ font-weight: 600;
389
+ color: var(--text);
390
+ letter-spacing: 0;
391
+ }
392
+
393
+ .command-card .synopsis {
394
+ font-family: var(--font-mono);
395
+ font-size: 0.8125rem;
396
+ color: var(--text-tertiary);
397
+ margin-bottom: 0.75rem;
398
+ }
399
+
400
+ .command-card p {
401
+ font-size: 0.875rem;
402
+ margin-bottom: 0.5rem;
403
+ color: var(--text-secondary);
404
+ }
405
+
406
+ .command-card ul {
407
+ font-size: 0.8125rem;
408
+ margin-bottom: 0.75rem;
409
+ color: var(--text-secondary);
410
+ }
411
+
412
+ .command-card ul code {
413
+ font-size: 0.8125rem;
414
+ }
415
+
416
+ .command-card pre {
417
+ margin: 0.75rem 0 0;
418
+ }
419
+
420
+ .command-card .terminal {
421
+ margin: 0.75rem 0 0;
422
+ }
423
+
424
+ .command-card .terminal:last-child {
425
+ margin-bottom: 0;
426
+ }
427
+
428
+ .install-method {
429
+ margin-bottom: 2rem;
430
+ }
431
+
432
+ .install-method h3 {
433
+ margin-top: 0;
434
+ }
435
+
436
+ /* Buttons */
437
+ .cta-buttons {
438
+ display: flex;
439
+ gap: 0.75rem;
440
+ justify-content: center;
441
+ margin-top: 2.5rem;
442
+ }
443
+
444
+ .btn,
445
+ .btn:link,
446
+ .btn:visited,
447
+ .btn:active {
448
+ display: inline-flex;
449
+ align-items: center;
450
+ justify-content: center;
451
+ padding: 0.75rem 1.75rem;
452
+ font-size: 0.9375rem;
453
+ font-weight: 500;
454
+ border-radius: var(--radius);
455
+ border: 1px solid rgba(255, 255, 255, 0.2);
456
+ background: transparent;
457
+ color: #fff !important;
458
+ transition: all 0.15s ease;
459
+ cursor: pointer;
460
+ }
461
+
462
+ .btn:hover {
463
+ color: #fff !important;
464
+ background: rgba(255, 255, 255, 0.1);
465
+ border-color: rgba(255, 255, 255, 0.3);
466
+ }
467
+
468
+ .btn-primary,
469
+ .btn-primary:link,
470
+ .btn-primary:visited,
471
+ .btn-primary:active {
472
+ background: #fff;
473
+ color: #000 !important;
474
+ border-color: #fff;
475
+ font-weight: 600;
476
+ }
477
+
478
+ .btn-primary:hover {
479
+ background: #e5e5e5;
480
+ border-color: #e5e5e5;
481
+ color: #000 !important;
482
+ }
483
+
484
+ /* Responsive */
485
+ @media (max-width: 640px) {
486
+ .hero {
487
+ padding: 3rem 0;
488
+ }
489
+
490
+ .hero h1 {
491
+ font-size: 3rem;
492
+ }
493
+
494
+ .hero .tagline {
495
+ font-size: 1rem;
496
+ }
497
+
498
+ .feature-grid {
499
+ grid-template-columns: 1fr;
500
+ }
501
+
502
+ .cta-buttons {
503
+ flex-direction: column;
504
+ align-items: center;
505
+ }
506
+
507
+ .btn {
508
+ width: 100%;
509
+ max-width: 220px;
510
+ }
511
+ }
512
+
513
+ /* CLI output colors (used across Terminal and PackageManagerTabs) */
514
+ .cli-output {
515
+ font-family: var(--font-mono);
516
+ font-size: 0.875rem;
517
+ line-height: 1.6;
518
+ color: #e5e5e5;
519
+ margin: 0;
520
+ white-space: pre-wrap;
521
+ word-break: break-word;
522
+ }
523
+
524
+ .cli-green {
525
+ color: #4ade80;
526
+ }
527
+
528
+ .cli-yellow {
529
+ color: #facc15;
530
+ }
531
+
532
+ .cli-cyan {
533
+ color: #22d3ee;
534
+ }
535
+
536
+ .cli-red {
537
+ color: #f87171;
538
+ }
539
+
540
+ .cli-magenta {
541
+ color: #c084fc;
542
+ }
543
+
544
+ .cli-bold {
545
+ font-weight: 600;
546
+ color: #fff;
547
+ }
548
+
549
+ .cli-dim {
550
+ color: #737373;
551
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "astro/tsconfigs/strict"
3
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "buildCommand": "pnpm build",
3
+ "outputDirectory": "dist",
4
+ "framework": "astro"
5
+ }
@@ -0,0 +1,33 @@
1
+ import eslint from "@eslint/js";
2
+ import tseslint from "typescript-eslint";
3
+
4
+ export default tseslint.config(
5
+ eslint.configs.recommended,
6
+ ...tseslint.configs.strict,
7
+ ...tseslint.configs.stylistic,
8
+ {
9
+ languageOptions: {
10
+ parserOptions: {
11
+ projectService: true,
12
+ tsconfigRootDir: import.meta.dirname,
13
+ },
14
+ },
15
+ rules: {
16
+ "@typescript-eslint/no-unused-vars": [
17
+ "error",
18
+ { argsIgnorePattern: "^_", varsIgnorePattern: "^_" },
19
+ ],
20
+ "@typescript-eslint/consistent-type-imports": "error",
21
+ "@typescript-eslint/no-import-type-side-effects": "error",
22
+ },
23
+ },
24
+ {
25
+ files: ["**/*.test.ts"],
26
+ rules: {
27
+ "@typescript-eslint/no-non-null-assertion": "off",
28
+ },
29
+ },
30
+ {
31
+ ignores: ["dist/**", "node_modules/**", "*.js", "examples/**", "vitest*.config.ts"],
32
+ }
33
+ );
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@sentry/warden",
3
+ "version": "0.0.0",
4
+ "description": "Event-driven agent that reacts to GitHub events and executes skills via Claude Code SDK",
5
+ "type": "module",
6
+ "scripts": {
7
+ "cli": "tsx src/cli/index.ts",
8
+ "build": "tsc",
9
+ "build:action": "ncc build src/action/main.ts -o dist/action --source-map --license licenses.txt",
10
+ "dev": "tsc --watch",
11
+ "lint": "eslint src",
12
+ "lint:fix": "eslint src --fix",
13
+ "test": "vitest run",
14
+ "test:watch": "vitest",
15
+ "test:examples": "vitest run --config vitest.integration.config.ts",
16
+ "typecheck": "tsc --noEmit",
17
+ "prepare": "simple-git-hooks",
18
+ "release": "pnpm lint && pnpm build && pnpm test && npm version"
19
+ },
20
+ "simple-git-hooks": {
21
+ "pre-commit": "pnpm lint-staged && pnpm typecheck"
22
+ },
23
+ "lint-staged": {
24
+ "*.ts": [
25
+ "eslint --fix"
26
+ ],
27
+ "docs/**/*.astro": [
28
+ "pnpm -C docs build"
29
+ ]
30
+ },
31
+ "keywords": [
32
+ "github",
33
+ "automation",
34
+ "claude",
35
+ "ai",
36
+ "code-review",
37
+ "security"
38
+ ],
39
+ "author": "Functional Software, Inc.",
40
+ "license": "FSL-1.1-ALv2",
41
+ "dependencies": {
42
+ "@anthropic-ai/claude-agent-sdk": "^0.2.22",
43
+ "@anthropic-ai/sdk": "^0.72.1",
44
+ "@inquirer/select": "^5.0.4",
45
+ "@octokit/rest": "^22.0.1",
46
+ "chalk": "^5.6.2",
47
+ "dotenv": "^17.2.3",
48
+ "fast-glob": "^3.3.3",
49
+ "figures": "^6.1.0",
50
+ "ink": "^5.2.1",
51
+ "ink-spinner": "^5.0.0",
52
+ "react": "^18.3.1",
53
+ "smol-toml": "^1.6.0",
54
+ "zod": "^4.3.6"
55
+ },
56
+ "devDependencies": {
57
+ "@eslint/js": "^9.39.2",
58
+ "@types/node": "^25.0.10",
59
+ "@types/react": "^18.3.27",
60
+ "@vercel/ncc": "^0.38.4",
61
+ "eslint": "^9.39.2",
62
+ "ink-testing-library": "^4.0.0",
63
+ "lint-staged": "^16.2.7",
64
+ "simple-git-hooks": "^2.13.1",
65
+ "tsx": "^4.19.0",
66
+ "typescript": "^5.9.3",
67
+ "typescript-eslint": "^8.54.0",
68
+ "vitest": "^4.0.18"
69
+ },
70
+ "engines": {
71
+ "node": ">=20.0.0"
72
+ }
73
+ }
@@ -0,0 +1 @@
1
+ export * from './main.js';