@virtengine/openfleet 0.25.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 (120) hide show
  1. package/.env.example +914 -0
  2. package/LICENSE +190 -0
  3. package/README.md +500 -0
  4. package/agent-endpoint.mjs +918 -0
  5. package/agent-hook-bridge.mjs +230 -0
  6. package/agent-hooks.mjs +1188 -0
  7. package/agent-pool.mjs +2403 -0
  8. package/agent-prompts.mjs +689 -0
  9. package/agent-sdk.mjs +141 -0
  10. package/anomaly-detector.mjs +1195 -0
  11. package/autofix.mjs +1294 -0
  12. package/claude-shell.mjs +708 -0
  13. package/cli.mjs +906 -0
  14. package/codex-config.mjs +1274 -0
  15. package/codex-model-profiles.mjs +135 -0
  16. package/codex-shell.mjs +762 -0
  17. package/config-doctor.mjs +613 -0
  18. package/config.mjs +1720 -0
  19. package/conflict-resolver.mjs +248 -0
  20. package/container-runner.mjs +450 -0
  21. package/copilot-shell.mjs +827 -0
  22. package/daemon-restart-policy.mjs +56 -0
  23. package/diff-stats.mjs +282 -0
  24. package/error-detector.mjs +829 -0
  25. package/fetch-runtime.mjs +34 -0
  26. package/fleet-coordinator.mjs +838 -0
  27. package/get-telegram-chat-id.mjs +71 -0
  28. package/git-safety.mjs +170 -0
  29. package/github-reconciler.mjs +403 -0
  30. package/hook-profiles.mjs +651 -0
  31. package/kanban-adapter.mjs +4491 -0
  32. package/lib/logger.mjs +645 -0
  33. package/maintenance.mjs +828 -0
  34. package/merge-strategy.mjs +1171 -0
  35. package/monitor.mjs +12207 -0
  36. package/openfleet.config.example.json +115 -0
  37. package/openfleet.schema.json +465 -0
  38. package/package.json +203 -0
  39. package/postinstall.mjs +187 -0
  40. package/pr-cleanup-daemon.mjs +978 -0
  41. package/preflight.mjs +408 -0
  42. package/prepublish-check.mjs +90 -0
  43. package/presence.mjs +328 -0
  44. package/primary-agent.mjs +282 -0
  45. package/publish.mjs +151 -0
  46. package/repo-root.mjs +29 -0
  47. package/restart-controller.mjs +100 -0
  48. package/review-agent.mjs +557 -0
  49. package/rotate-agent-logs.sh +133 -0
  50. package/sdk-conflict-resolver.mjs +973 -0
  51. package/session-tracker.mjs +880 -0
  52. package/setup.mjs +3937 -0
  53. package/shared-knowledge.mjs +410 -0
  54. package/shared-state-manager.mjs +841 -0
  55. package/shared-workspace-cli.mjs +199 -0
  56. package/shared-workspace-registry.mjs +537 -0
  57. package/shared-workspaces.json +18 -0
  58. package/startup-service.mjs +1070 -0
  59. package/sync-engine.mjs +1063 -0
  60. package/task-archiver.mjs +801 -0
  61. package/task-assessment.mjs +550 -0
  62. package/task-claims.mjs +924 -0
  63. package/task-complexity.mjs +581 -0
  64. package/task-executor.mjs +5111 -0
  65. package/task-store.mjs +753 -0
  66. package/telegram-bot.mjs +9281 -0
  67. package/telegram-sentinel.mjs +2010 -0
  68. package/ui/app.js +867 -0
  69. package/ui/app.legacy.js +1464 -0
  70. package/ui/app.monolith.js +2488 -0
  71. package/ui/components/charts.js +226 -0
  72. package/ui/components/chat-view.js +567 -0
  73. package/ui/components/command-palette.js +587 -0
  74. package/ui/components/diff-viewer.js +190 -0
  75. package/ui/components/forms.js +327 -0
  76. package/ui/components/kanban-board.js +451 -0
  77. package/ui/components/session-list.js +305 -0
  78. package/ui/components/shared.js +473 -0
  79. package/ui/index.html +70 -0
  80. package/ui/modules/api.js +297 -0
  81. package/ui/modules/icons.js +461 -0
  82. package/ui/modules/router.js +81 -0
  83. package/ui/modules/settings-schema.js +261 -0
  84. package/ui/modules/state.js +679 -0
  85. package/ui/modules/telegram.js +331 -0
  86. package/ui/modules/utils.js +270 -0
  87. package/ui/styles/animations.css +140 -0
  88. package/ui/styles/base.css +98 -0
  89. package/ui/styles/components.css +1915 -0
  90. package/ui/styles/kanban.css +286 -0
  91. package/ui/styles/layout.css +809 -0
  92. package/ui/styles/sessions.css +827 -0
  93. package/ui/styles/variables.css +188 -0
  94. package/ui/styles.css +141 -0
  95. package/ui/styles.monolith.css +1046 -0
  96. package/ui/tabs/agents.js +1417 -0
  97. package/ui/tabs/chat.js +74 -0
  98. package/ui/tabs/control.js +887 -0
  99. package/ui/tabs/dashboard.js +515 -0
  100. package/ui/tabs/infra.js +537 -0
  101. package/ui/tabs/logs.js +783 -0
  102. package/ui/tabs/settings.js +1487 -0
  103. package/ui/tabs/tasks.js +1385 -0
  104. package/ui-server.mjs +4073 -0
  105. package/update-check.mjs +465 -0
  106. package/utils.mjs +172 -0
  107. package/ve-kanban.mjs +654 -0
  108. package/ve-kanban.ps1 +1365 -0
  109. package/ve-kanban.sh +18 -0
  110. package/ve-orchestrator.mjs +340 -0
  111. package/ve-orchestrator.ps1 +6546 -0
  112. package/ve-orchestrator.sh +18 -0
  113. package/vibe-kanban-wrapper.mjs +41 -0
  114. package/vk-error-resolver.mjs +470 -0
  115. package/vk-log-stream.mjs +914 -0
  116. package/whatsapp-channel.mjs +520 -0
  117. package/workspace-monitor.mjs +581 -0
  118. package/workspace-reaper.mjs +405 -0
  119. package/workspace-registry.mjs +238 -0
  120. package/worktree-manager.mjs +1266 -0
@@ -0,0 +1,286 @@
1
+ /* ─── Kanban Board Styles ─── */
2
+
3
+ .kanban-board {
4
+ display: flex;
5
+ gap: 14px;
6
+ overflow-x: auto;
7
+ padding: 8px 0;
8
+ min-height: 0;
9
+ flex: 1;
10
+ }
11
+
12
+ .kanban-column {
13
+ min-width: 260px;
14
+ max-width: 320px;
15
+ flex: 1;
16
+ display: flex;
17
+ flex-direction: column;
18
+ background: var(--glass-bg);
19
+ backdrop-filter: blur(12px);
20
+ -webkit-backdrop-filter: blur(12px);
21
+ border-radius: var(--radius-lg, 12px);
22
+ padding: 14px;
23
+ max-height: calc(100vh - 180px);
24
+ position: relative;
25
+ border: 1px solid var(--glass-border);
26
+ }
27
+
28
+ .kanban-column.drag-over {
29
+ border: 2px dashed var(--accent);
30
+ background: rgba(99, 102, 241, 0.06);
31
+ }
32
+
33
+ .kanban-column-header {
34
+ display: flex;
35
+ align-items: center;
36
+ gap: 8px;
37
+ padding: 8px 4px;
38
+ font-weight: 600;
39
+ font-size: 13px;
40
+ text-transform: uppercase;
41
+ letter-spacing: 0.5px;
42
+ color: var(--text-secondary);
43
+ border-bottom: 2px solid var(--border, rgba(255, 255, 255, 0.06));
44
+ margin-bottom: 8px;
45
+ }
46
+
47
+ .kanban-column-title {
48
+ flex: 1;
49
+ }
50
+
51
+ .kanban-count {
52
+ background: var(--glass-bg, rgba(255, 255, 255, 0.1));
53
+ padding: 2px 8px;
54
+ border-radius: var(--radius-full, 999px);
55
+ font-size: 12px;
56
+ font-weight: 500;
57
+ border: 1px solid var(--glass-border, transparent);
58
+ }
59
+
60
+ .kanban-add-btn {
61
+ width: 24px;
62
+ height: 24px;
63
+ display: flex;
64
+ align-items: center;
65
+ justify-content: center;
66
+ border: none;
67
+ background: transparent;
68
+ color: var(--text-secondary);
69
+ border-radius: var(--radius-sm, 6px);
70
+ cursor: pointer;
71
+ font-size: 16px;
72
+ font-weight: 600;
73
+ line-height: 1;
74
+ transition: background 0.15s, color 0.15s;
75
+ padding: 0;
76
+ font-family: inherit;
77
+ }
78
+
79
+ .kanban-add-btn:hover {
80
+ background: var(--bg-card, rgba(255, 255, 255, 0.1));
81
+ color: var(--text-primary);
82
+ }
83
+
84
+ .kanban-add-btn:focus-visible {
85
+ outline: 2px solid var(--accent);
86
+ outline-offset: 2px;
87
+ }
88
+
89
+ .kanban-inline-create {
90
+ width: 100%;
91
+ padding: 10px 12px;
92
+ border: 2px solid var(--accent);
93
+ border-radius: var(--radius-md, 8px);
94
+ background: var(--bg-primary);
95
+ color: var(--text-primary);
96
+ font-size: 14px;
97
+ font-family: inherit;
98
+ outline: none;
99
+ box-sizing: border-box;
100
+ }
101
+
102
+ .kanban-inline-create::placeholder {
103
+ color: var(--text-secondary);
104
+ opacity: 0.6;
105
+ }
106
+
107
+ .kanban-cards {
108
+ display: flex;
109
+ flex-direction: column;
110
+ gap: 8px;
111
+ overflow-y: auto;
112
+ flex: 1;
113
+ padding: 4px;
114
+ min-height: 0;
115
+ }
116
+
117
+ .kanban-card {
118
+ background: var(--glass-bg);
119
+ backdrop-filter: blur(8px);
120
+ -webkit-backdrop-filter: blur(8px);
121
+ border: 1px solid var(--glass-border, rgba(255, 255, 255, 0.06));
122
+ border-radius: var(--radius-md, 8px);
123
+ padding: 14px;
124
+ cursor: pointer;
125
+ transition: border-color 0.15s, box-shadow 0.15s, opacity 0.15s, transform 0.15s;
126
+ }
127
+
128
+ .kanban-card:hover {
129
+ border-color: var(--border-glow);
130
+ box-shadow: var(--shadow-glow-sm);
131
+ transform: translateY(-1px);
132
+ }
133
+
134
+ .kanban-card:active {
135
+ transform: translateY(0) scale(0.98);
136
+ }
137
+
138
+ .kanban-card.dragging {
139
+ opacity: 0.4;
140
+ }
141
+
142
+ /* ─── Touch drag clone ─── */
143
+ .kanban-card.touch-drag-clone {
144
+ opacity: 0.85;
145
+ transform: rotate(2deg) scale(1.04);
146
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.35), 0 4px 12px rgba(0, 0, 0, 0.2);
147
+ border-color: var(--accent, #6366f1);
148
+ pointer-events: none;
149
+ z-index: 9999;
150
+ transition: none;
151
+ }
152
+
153
+ .kanban-card-badge {
154
+ display: inline-block;
155
+ font-size: 10px;
156
+ font-weight: 700;
157
+ letter-spacing: 0.5px;
158
+ padding: 2px 6px;
159
+ border-radius: var(--radius-sm, 4px);
160
+ color: #fff;
161
+ margin-bottom: 6px;
162
+ }
163
+
164
+ .kanban-card-title {
165
+ font-size: 14px;
166
+ font-weight: 500;
167
+ color: var(--text-primary);
168
+ margin-bottom: 4px;
169
+ line-height: 1.4;
170
+ display: -webkit-box;
171
+ -webkit-line-clamp: 2;
172
+ -webkit-box-orient: vertical;
173
+ overflow: hidden;
174
+ }
175
+
176
+ .kanban-card-desc {
177
+ font-size: 12px;
178
+ color: var(--text-secondary);
179
+ margin-bottom: 8px;
180
+ line-height: 1.4;
181
+ white-space: nowrap;
182
+ overflow: hidden;
183
+ text-overflow: ellipsis;
184
+ }
185
+
186
+ .kanban-card-base {
187
+ font-size: 11px;
188
+ color: var(--text-secondary);
189
+ margin-bottom: 8px;
190
+ opacity: 0.8;
191
+ }
192
+
193
+ .kanban-card-base code {
194
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
195
+ font-size: 11px;
196
+ }
197
+
198
+ .kanban-card-tags {
199
+ display: flex;
200
+ flex-wrap: wrap;
201
+ gap: 6px;
202
+ margin-bottom: 8px;
203
+ }
204
+
205
+ .kanban-card-meta {
206
+ display: flex;
207
+ align-items: center;
208
+ gap: 8px;
209
+ font-size: 12px;
210
+ color: var(--text-secondary);
211
+ line-height: 1.4;
212
+ }
213
+
214
+ .kanban-card-priority {
215
+ width: 8px;
216
+ height: 8px;
217
+ border-radius: 50%;
218
+ flex-shrink: 0;
219
+ }
220
+
221
+ .kanban-card-id {
222
+ opacity: 0.6;
223
+ font-family: monospace;
224
+ font-size: 11px;
225
+ }
226
+
227
+ .kanban-empty-col {
228
+ display: flex;
229
+ align-items: center;
230
+ justify-content: center;
231
+ color: var(--text-secondary);
232
+ font-size: 13px;
233
+ padding: 24px 12px;
234
+ opacity: 0.5;
235
+ border: 2px dashed var(--border, rgba(255, 255, 255, 0.08));
236
+ border-radius: var(--radius-md, 8px);
237
+ margin: 4px;
238
+ }
239
+
240
+ .kanban-scroll-fade {
241
+ height: 16px;
242
+ flex-shrink: 0;
243
+ background: linear-gradient(to top, var(--glass-bg), transparent);
244
+ border-radius: 0 0 var(--radius-lg, 12px) var(--radius-lg, 12px);
245
+ pointer-events: none;
246
+ margin: 0 -12px -12px;
247
+ }
248
+
249
+ @media (min-width: 768px) {
250
+ .kanban-column {
251
+ min-width: 280px;
252
+ }
253
+ }
254
+
255
+ /* View toggle */
256
+ .view-toggle {
257
+ display: flex;
258
+ gap: 4px;
259
+ background: var(--glass-bg);
260
+ border: 1px solid var(--glass-border);
261
+ border-radius: var(--radius-md, 8px);
262
+ padding: 3px;
263
+ }
264
+
265
+ .view-toggle-btn {
266
+ padding: 6px 12px;
267
+ border: none;
268
+ background: none;
269
+ border-radius: var(--radius-sm, 6px);
270
+ color: var(--text-secondary);
271
+ font-size: 13px;
272
+ cursor: pointer;
273
+ transition: all 0.15s;
274
+ font-family: inherit;
275
+ }
276
+
277
+ .view-toggle-btn:focus-visible {
278
+ outline: 2px solid var(--accent);
279
+ outline-offset: 2px;
280
+ }
281
+
282
+ .view-toggle-btn.active {
283
+ background: var(--gradient-accent);
284
+ color: var(--accent-text);
285
+ box-shadow: var(--shadow-glow-sm);
286
+ }