@matt82198/aesop 0.1.0-beta.5 → 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 (198) hide show
  1. package/CHANGELOG.md +158 -5
  2. package/LICENSE +66 -21
  3. package/README.md +97 -33
  4. package/aesop.config.example.json +6 -0
  5. package/bin/CLAUDE.md +12 -3
  6. package/bin/cli.js +211 -40
  7. package/daemons/CLAUDE.md +1 -1
  8. package/daemons/backup-fleet.sh +209 -51
  9. package/daemons/run-watchdog.sh +208 -62
  10. package/dash/dash-extra.mjs +73 -4
  11. package/dash/watchdog-gui.sh +41 -35
  12. package/docs/ARCHITECTURE.md +296 -0
  13. package/docs/CONCEPTS.md +254 -0
  14. package/docs/CONFIGURE.md +256 -0
  15. package/docs/FIRST-WAVE.md +276 -0
  16. package/docs/INSTALL.md +224 -0
  17. package/docs/README.md +176 -27
  18. package/docs/autonomous-swe.md +149 -0
  19. package/docs/reproduce.md +121 -0
  20. package/hooks/CLAUDE.md +28 -0
  21. package/hooks/install-waveguard.sh +68 -0
  22. package/hooks/pre-commit-waveguard.sh +26 -0
  23. package/hooks/pre-push-policy.sh +253 -15
  24. package/monitor/CLAUDE.md +3 -3
  25. package/monitor/collect-signals.mjs +133 -20
  26. package/package.json +15 -7
  27. package/scan/CLAUDE.md +30 -0
  28. package/skills/CLAUDE.md +1 -0
  29. package/state_store/ingest.py +18 -1
  30. package/state_store/projections.py +78 -4
  31. package/state_store/store.py +102 -7
  32. package/tools/CLAUDE.md +25 -18
  33. package/tools/alert_bridge.py +14 -10
  34. package/tools/bench_runner.py +438 -0
  35. package/tools/buildlog.py +4 -7
  36. package/tools/ci_merge_wait.py +215 -34
  37. package/tools/common.py +62 -0
  38. package/tools/cost_ceiling.py +191 -0
  39. package/tools/dash.js +102 -0
  40. package/tools/doctor.js +220 -0
  41. package/tools/fleet_ledger.py +189 -17
  42. package/tools/halt.py +172 -0
  43. package/tools/healthcheck.py +24 -21
  44. package/tools/heartbeat.py +4 -7
  45. package/tools/metrics_gate.py +8 -2
  46. package/tools/orchestrator_status.py +4 -9
  47. package/tools/reconcile.py +277 -0
  48. package/tools/rotate_logs.py +152 -62
  49. package/tools/scanner_selftest.py +28 -3
  50. package/tools/secret_scan.py +359 -90
  51. package/tools/self_stats.py +292 -4
  52. package/tools/status.js +187 -0
  53. package/tools/verify_agent_inspector.py +289 -0
  54. package/tools/verify_prboard.py +344 -0
  55. package/tools/watch.js +49 -0
  56. package/ui/CLAUDE.md +2 -0
  57. package/ui/agents.py +332 -33
  58. package/ui/api/tracker.py +15 -7
  59. package/ui/collectors.py +125 -32
  60. package/ui/config.py +22 -2
  61. package/ui/cost.py +98 -3
  62. package/ui/csrf.py +2 -1
  63. package/ui/handler.py +209 -21
  64. package/ui/sse.py +102 -16
  65. package/ui/wave_prs.py +230 -0
  66. package/ui/web/dist/assets/index-0qQYnvMC.js +9 -0
  67. package/ui/web/dist/assets/index-BdIlFieV.css +1 -0
  68. package/ui/web/dist/index.html +2 -2
  69. package/monitor/.signal-state.json +0 -3
  70. package/monitor/ACTIONS.log +0 -1
  71. package/monitor/BRIEF.md +0 -24
  72. package/monitor/SIGNALS.json +0 -54
  73. package/state_store/__pycache__/__init__.cpython-314.pyc +0 -0
  74. package/state_store/__pycache__/api.cpython-314.pyc +0 -0
  75. package/state_store/__pycache__/export.cpython-314.pyc +0 -0
  76. package/state_store/__pycache__/ingest.cpython-314.pyc +0 -0
  77. package/state_store/__pycache__/projections.cpython-314.pyc +0 -0
  78. package/state_store/__pycache__/store.cpython-314.pyc +0 -0
  79. package/tools/__pycache__/alert_bridge.cpython-314.pyc +0 -0
  80. package/tools/__pycache__/buildlog.cpython-314.pyc +0 -0
  81. package/tools/__pycache__/ci_merge_wait.cpython-314.pyc +0 -0
  82. package/tools/__pycache__/ensure_state.cpython-314.pyc +0 -0
  83. package/tools/__pycache__/eod_sweep.cpython-314.pyc +0 -0
  84. package/tools/__pycache__/fleet_ledger.cpython-314.pyc +0 -0
  85. package/tools/__pycache__/fleet_prompt_extractor.cpython-314.pyc +0 -0
  86. package/tools/__pycache__/healthcheck.cpython-314.pyc +0 -0
  87. package/tools/__pycache__/heartbeat.cpython-314.pyc +0 -0
  88. package/tools/__pycache__/inbox_drain.cpython-314.pyc +0 -0
  89. package/tools/__pycache__/launch_tui.cpython-314.pyc +0 -0
  90. package/tools/__pycache__/metrics_gate.cpython-314.pyc +0 -0
  91. package/tools/__pycache__/orchestrator_status.cpython-314.pyc +0 -0
  92. package/tools/__pycache__/power_selftest.cpython-314.pyc +0 -0
  93. package/tools/__pycache__/prepublish_scan.cpython-314.pyc +0 -0
  94. package/tools/__pycache__/rotate_logs.cpython-314.pyc +0 -0
  95. package/tools/__pycache__/scanner_selftest.cpython-314.pyc +0 -0
  96. package/tools/__pycache__/secret_scan.cpython-314.pyc +0 -0
  97. package/tools/__pycache__/self_stats.cpython-314.pyc +0 -0
  98. package/tools/__pycache__/session_usage_summary.cpython-314.pyc +0 -0
  99. package/tools/__pycache__/stall_check.cpython-314.pyc +0 -0
  100. package/tools/__pycache__/transcript_replay.cpython-314.pyc +0 -0
  101. package/tools/__pycache__/transcript_timeline.cpython-314.pyc +0 -0
  102. package/tools/__pycache__/verify_dash.cpython-314.pyc +0 -0
  103. package/tools/__pycache__/verify_submit_encoding.cpython-314.pyc +0 -0
  104. package/ui/__pycache__/agents.cpython-314.pyc +0 -0
  105. package/ui/__pycache__/collectors.cpython-314.pyc +0 -0
  106. package/ui/__pycache__/config.cpython-314.pyc +0 -0
  107. package/ui/__pycache__/cost.cpython-314.pyc +0 -0
  108. package/ui/__pycache__/csrf.cpython-314.pyc +0 -0
  109. package/ui/__pycache__/handler.cpython-314.pyc +0 -0
  110. package/ui/__pycache__/render.cpython-314.pyc +0 -0
  111. package/ui/__pycache__/serve.cpython-314.pyc +0 -0
  112. package/ui/__pycache__/sse.cpython-314.pyc +0 -0
  113. package/ui/api/__pycache__/__init__.cpython-314.pyc +0 -0
  114. package/ui/api/__pycache__/submit.cpython-314.pyc +0 -0
  115. package/ui/api/__pycache__/tracker.cpython-314.pyc +0 -0
  116. package/ui/web/.gitattributes +0 -13
  117. package/ui/web/dist/assets/index-2LZDQirC.js +0 -9
  118. package/ui/web/dist/assets/index-D4M1qyOv.css +0 -1
  119. package/ui/web/index.html +0 -13
  120. package/ui/web/package-lock.json +0 -2225
  121. package/ui/web/package.json +0 -26
  122. package/ui/web/src/App.test.tsx +0 -74
  123. package/ui/web/src/App.tsx +0 -142
  124. package/ui/web/src/CONTRIBUTING-UI.md +0 -49
  125. package/ui/web/src/components/AgentRow.css +0 -187
  126. package/ui/web/src/components/AgentRow.test.tsx +0 -209
  127. package/ui/web/src/components/AgentRow.tsx +0 -207
  128. package/ui/web/src/components/AgentsPanel.css +0 -108
  129. package/ui/web/src/components/AgentsPanel.test.tsx +0 -41
  130. package/ui/web/src/components/AgentsPanel.tsx +0 -58
  131. package/ui/web/src/components/AlertsPanel.css +0 -88
  132. package/ui/web/src/components/AlertsPanel.test.tsx +0 -51
  133. package/ui/web/src/components/AlertsPanel.tsx +0 -67
  134. package/ui/web/src/components/BacklogPanel.test.tsx +0 -126
  135. package/ui/web/src/components/BacklogPanel.tsx +0 -122
  136. package/ui/web/src/components/CostChart.css +0 -110
  137. package/ui/web/src/components/CostChart.test.tsx +0 -144
  138. package/ui/web/src/components/CostChart.tsx +0 -152
  139. package/ui/web/src/components/CostTable.css +0 -93
  140. package/ui/web/src/components/CostTable.test.tsx +0 -165
  141. package/ui/web/src/components/CostTable.tsx +0 -94
  142. package/ui/web/src/components/EventsFeed.css +0 -68
  143. package/ui/web/src/components/EventsFeed.test.tsx +0 -36
  144. package/ui/web/src/components/EventsFeed.tsx +0 -31
  145. package/ui/web/src/components/HealthHeader.css +0 -137
  146. package/ui/web/src/components/HealthHeader.test.tsx +0 -278
  147. package/ui/web/src/components/HealthHeader.tsx +0 -281
  148. package/ui/web/src/components/InboxForm.css +0 -135
  149. package/ui/web/src/components/InboxForm.test.tsx +0 -208
  150. package/ui/web/src/components/InboxForm.tsx +0 -116
  151. package/ui/web/src/components/MessagesTail.module.css +0 -144
  152. package/ui/web/src/components/MessagesTail.test.tsx +0 -176
  153. package/ui/web/src/components/MessagesTail.tsx +0 -94
  154. package/ui/web/src/components/ReposPanel.css +0 -90
  155. package/ui/web/src/components/ReposPanel.test.tsx +0 -45
  156. package/ui/web/src/components/ReposPanel.tsx +0 -67
  157. package/ui/web/src/components/Scorecard.css +0 -106
  158. package/ui/web/src/components/Scorecard.test.tsx +0 -117
  159. package/ui/web/src/components/Scorecard.tsx +0 -85
  160. package/ui/web/src/components/Timeline.module.css +0 -151
  161. package/ui/web/src/components/Timeline.test.tsx +0 -215
  162. package/ui/web/src/components/Timeline.tsx +0 -99
  163. package/ui/web/src/components/TrackerBoard.test.tsx +0 -121
  164. package/ui/web/src/components/TrackerBoard.tsx +0 -107
  165. package/ui/web/src/components/TrackerCard.test.tsx +0 -180
  166. package/ui/web/src/components/TrackerCard.tsx +0 -160
  167. package/ui/web/src/components/TrackerForm.test.tsx +0 -189
  168. package/ui/web/src/components/TrackerForm.tsx +0 -144
  169. package/ui/web/src/lib/api.ts +0 -218
  170. package/ui/web/src/lib/format.test.ts +0 -89
  171. package/ui/web/src/lib/format.ts +0 -103
  172. package/ui/web/src/lib/sanitizeUrl.test.ts +0 -84
  173. package/ui/web/src/lib/sanitizeUrl.ts +0 -38
  174. package/ui/web/src/lib/types.ts +0 -230
  175. package/ui/web/src/lib/useHashRoute.test.ts +0 -60
  176. package/ui/web/src/lib/useHashRoute.ts +0 -23
  177. package/ui/web/src/lib/useSSE.ts +0 -175
  178. package/ui/web/src/main.tsx +0 -10
  179. package/ui/web/src/styles/global.css +0 -179
  180. package/ui/web/src/styles/theme.css +0 -184
  181. package/ui/web/src/styles/work.css +0 -572
  182. package/ui/web/src/test/fixtures.ts +0 -385
  183. package/ui/web/src/test/setup.ts +0 -49
  184. package/ui/web/src/views/Activity.module.css +0 -43
  185. package/ui/web/src/views/Activity.test.tsx +0 -89
  186. package/ui/web/src/views/Activity.tsx +0 -31
  187. package/ui/web/src/views/Cost.css +0 -87
  188. package/ui/web/src/views/Cost.test.tsx +0 -142
  189. package/ui/web/src/views/Cost.tsx +0 -54
  190. package/ui/web/src/views/Overview.css +0 -51
  191. package/ui/web/src/views/Overview.test.tsx +0 -76
  192. package/ui/web/src/views/Overview.tsx +0 -46
  193. package/ui/web/src/views/Work.test.tsx +0 -82
  194. package/ui/web/src/views/Work.tsx +0 -79
  195. package/ui/web/src/vite-env.d.ts +0 -10
  196. package/ui/web/tsconfig.json +0 -22
  197. package/ui/web/vite.config.ts +0 -25
  198. package/ui/web/vitest.config.ts +0 -12
@@ -1,184 +0,0 @@
1
- /**
2
- * Aesop design tokens — all colors/spacing/type as CSS custom properties.
3
- *
4
- * NAMING NOTE: the wave-14 plan calls this file tokens.css, but the repo's
5
- * pre-push secret-scan gate hard-fails any filename matching *token*
6
- * (credential_filename rule, pragma does not apply), so it lives as
7
- * theme.css. It is imported only by global.css; components never import it.
8
- *
9
- * Theming model (D5):
10
- * 1. Light palette is the base (:root).
11
- * 2. prefers-color-scheme: dark applies the dark palette by default.
12
- * 3. [data-theme="light"|"dark"] on <html> overrides the OS preference;
13
- * the toggle persists the choice to localStorage ("aesop-theme") and
14
- * stamps data-theme on the root element (see App.tsx).
15
- *
16
- * Status colors are chosen to pass WCAG AA (>= 4.5:1) as text against the
17
- * theme's --color-bg in BOTH palettes (Primer-derived values).
18
- */
19
-
20
- :root {
21
- /* ---- Light palette (base) ---- */
22
- --color-bg: #ffffff;
23
- --color-bg-subtle: #f6f8fa;
24
- --color-bg-inset: #eff2f5;
25
- --color-surface: #ffffff;
26
- --color-border: #d0d7de;
27
- --color-border-subtle: #e4e8ec;
28
-
29
- --color-text: #1f2328;
30
- --color-text-muted: #59636e;
31
- --color-text-inverse: #ffffff;
32
-
33
- --color-accent: #0969da; /* links, active tab, focus */
34
- --color-accent-emphasis: #0550ae;
35
-
36
- /* Status colors — AA on --color-bg */
37
- --color-status-ok: #1a7f37; /* ALIVE / running / OK */
38
- --color-status-warn: #9a6700; /* MED / DRIFT / reconnecting */
39
- --color-status-error: #cf222e; /* STALE / HIGH / SUSPICIOUS / FAILED */
40
- --color-status-info: #0969da; /* idle / neutral info */
41
- --color-status-neutral: #59636e; /* unknown / not running */
42
-
43
- /* Severity backgrounds (non-text, decorative) */
44
- --color-status-ok-bg: #dafbe1;
45
- --color-status-warn-bg: #fff8c5;
46
- --color-status-error-bg: #ffebe9;
47
- --color-status-info-bg: #ddf4ff;
48
-
49
- --color-focus-ring: #0969da;
50
-
51
- /* ---- Spacing scale ---- */
52
- --space-1: 0.25rem;
53
- --space-2: 0.5rem;
54
- --space-3: 0.75rem;
55
- --space-4: 1rem;
56
- --space-5: 1.5rem;
57
- --space-6: 2rem;
58
- --space-7: 3rem;
59
-
60
- /* ---- Typography ---- */
61
- --font-sans: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
62
- --font-mono: ui-monospace, SFMono-Regular, "Cascadia Mono", Consolas, "Liberation Mono", Menlo, monospace;
63
- --font-size-xs: 0.75rem;
64
- --font-size-sm: 0.875rem;
65
- --font-size-md: 1rem;
66
- --font-size-lg: 1.125rem;
67
- --font-size-xl: 1.375rem;
68
- --line-height-tight: 1.25;
69
- --line-height-normal: 1.5;
70
- --font-weight-normal: 400;
71
- --font-weight-medium: 500;
72
- --font-weight-bold: 600;
73
-
74
- /* ---- Radii / shadows / layout ---- */
75
- --radius-sm: 4px;
76
- --radius-md: 6px;
77
- --radius-lg: 10px;
78
- --shadow-sm: 0 1px 2px rgba(31, 35, 40, 0.08);
79
- --shadow-md: 0 3px 8px rgba(31, 35, 40, 0.12);
80
- --header-height: 3rem;
81
- --content-max-width: 90rem;
82
-
83
- /* ---- Motion ---- */
84
- --transition-fast: 120ms ease;
85
- --transition-normal: 200ms ease;
86
-
87
- color-scheme: light;
88
- }
89
-
90
- /* ---- Status color classes (replaces inline styles) ---- */
91
- .text-status-ok {
92
- color: var(--color-status-ok);
93
- }
94
-
95
- .text-status-warn {
96
- color: var(--color-status-warn);
97
- }
98
-
99
- .text-status-error {
100
- color: var(--color-status-error);
101
- }
102
-
103
- .text-status-info {
104
- color: var(--color-status-info);
105
- }
106
-
107
- .text-status-neutral {
108
- color: var(--color-status-neutral);
109
- }
110
-
111
- /* ---- Dark palette values, shared between the media query and the
112
- explicit data-theme override. Duplicated blocks because CSS custom
113
- properties can't be aliased conditionally without a preprocessor. ---- */
114
-
115
- @media (prefers-color-scheme: dark) {
116
- :root:not([data-theme='light']) {
117
- --color-bg: #0d1117;
118
- --color-bg-subtle: #161b22;
119
- --color-bg-inset: #010409;
120
- --color-surface: #161b22;
121
- --color-border: #30363d;
122
- --color-border-subtle: #21262d;
123
-
124
- --color-text: #e6edf3;
125
- --color-text-muted: #9198a1;
126
- --color-text-inverse: #0d1117;
127
-
128
- --color-accent: #4493f8;
129
- --color-accent-emphasis: #79b8ff;
130
-
131
- /* Status colors — AA on dark --color-bg */
132
- --color-status-ok: #3fb950;
133
- --color-status-warn: #d29922;
134
- --color-status-error: #f85149;
135
- --color-status-info: #58a6ff;
136
- --color-status-neutral: #9198a1;
137
-
138
- --color-status-ok-bg: #12261e;
139
- --color-status-warn-bg: #272115;
140
- --color-status-error-bg: #2d1517;
141
- --color-status-info-bg: #121d2f;
142
-
143
- --color-focus-ring: #58a6ff;
144
-
145
- --shadow-sm: 0 1px 2px rgba(1, 4, 9, 0.6);
146
- --shadow-md: 0 3px 8px rgba(1, 4, 9, 0.7);
147
-
148
- color-scheme: dark;
149
- }
150
- }
151
-
152
- :root[data-theme='dark'] {
153
- --color-bg: #0d1117;
154
- --color-bg-subtle: #161b22;
155
- --color-bg-inset: #010409;
156
- --color-surface: #161b22;
157
- --color-border: #30363d;
158
- --color-border-subtle: #21262d;
159
-
160
- --color-text: #e6edf3;
161
- --color-text-muted: #9198a1;
162
- --color-text-inverse: #0d1117;
163
-
164
- --color-accent: #4493f8;
165
- --color-accent-emphasis: #79b8ff;
166
-
167
- --color-status-ok: #3fb950;
168
- --color-status-warn: #d29922;
169
- --color-status-error: #f85149;
170
- --color-status-info: #58a6ff;
171
- --color-status-neutral: #9198a1;
172
-
173
- --color-status-ok-bg: #12261e;
174
- --color-status-warn-bg: #272115;
175
- --color-status-error-bg: #2d1517;
176
- --color-status-info-bg: #121d2f;
177
-
178
- --color-focus-ring: #58a6ff;
179
-
180
- --shadow-sm: 0 1px 2px rgba(1, 4, 9, 0.6);
181
- --shadow-md: 0 3px 8px rgba(1, 4, 9, 0.7);
182
-
183
- color-scheme: dark;
184
- }