arkaos 3.53.1 → 3.55.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/VERSION CHANGED
@@ -1 +1 @@
1
- 3.53.1
1
+ 3.55.0
@@ -225,6 +225,43 @@ function goToAgent(id: string) {
225
225
  navigateTo(`/agents/${id}`)
226
226
  }
227
227
 
228
+ // PR95d v3.54.0 — keyboard nav for the table.
229
+ const cursorIndex = ref(-1)
230
+
231
+ function cursorDown() {
232
+ const total = paginatedAgents.value.length
233
+ if (total === 0) return
234
+ cursorIndex.value = Math.min(total - 1, Math.max(0, cursorIndex.value + 1))
235
+ scrollCursorIntoView()
236
+ }
237
+ function cursorUp() {
238
+ const total = paginatedAgents.value.length
239
+ if (total === 0) return
240
+ cursorIndex.value = Math.max(0, cursorIndex.value === -1 ? 0 : cursorIndex.value - 1)
241
+ scrollCursorIntoView()
242
+ }
243
+ function cursorOpen() {
244
+ if (cursorIndex.value < 0) return
245
+ const row = paginatedAgents.value[cursorIndex.value]
246
+ if (row?.id) goToAgent(row.id)
247
+ }
248
+ function scrollCursorIntoView() {
249
+ if (typeof document === 'undefined') return
250
+ // Defer to next tick so the class change has rendered.
251
+ setTimeout(() => {
252
+ const el = document.querySelector('[data-cursor="true"]')
253
+ el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' })
254
+ }, 0)
255
+ }
256
+
257
+ defineShortcuts({
258
+ j: () => cursorDown(),
259
+ k: () => cursorUp(),
260
+ arrowdown: () => cursorDown(),
261
+ arrowup: () => cursorUp(),
262
+ enter: () => cursorOpen(),
263
+ })
264
+
228
265
  // PR86a v3.15.0 — favorites.
229
266
  // PR92b v3.40.0 — favoritesOnly persists in URL (`?fav=1`).
230
267
  const favs = useFavorites()
@@ -527,9 +564,16 @@ async function undoTrashIds(ids: string[]) {
527
564
  />
528
565
  </template>
529
566
  <template #name-cell="{ row }">
530
- <button class="text-left font-medium text-primary hover:underline" @click="goToAgent(row.original.id)">
531
- {{ row.original.name }}
532
- </button>
567
+ <div :data-cursor="row.index === cursorIndex ? 'true' : undefined" class="flex items-center gap-1.5">
568
+ <UIcon
569
+ v-if="row.index === cursorIndex"
570
+ name="i-lucide-chevron-right"
571
+ class="size-3.5 text-primary shrink-0"
572
+ />
573
+ <button class="text-left font-medium text-primary hover:underline" @click="goToAgent(row.original.id)">
574
+ {{ row.original.name }}
575
+ </button>
576
+ </div>
533
577
  </template>
534
578
  <template #department-cell="{ row }">
535
579
  <UBadge :label="row.original.department" variant="subtle" size="sm" />
@@ -137,6 +137,42 @@ function goToPersona(id: string) {
137
137
  navigateTo(`/personas/${id}`)
138
138
  }
139
139
 
140
+ // PR96a v3.55.0 — keyboard nav, mirror of PR95d on /agents.
141
+ const cursorIndex = ref(-1)
142
+
143
+ function cursorDown() {
144
+ const total = paginatedPersonas.value.length
145
+ if (total === 0) return
146
+ cursorIndex.value = Math.min(total - 1, Math.max(0, cursorIndex.value + 1))
147
+ scrollCursorIntoView()
148
+ }
149
+ function cursorUp() {
150
+ const total = paginatedPersonas.value.length
151
+ if (total === 0) return
152
+ cursorIndex.value = Math.max(0, cursorIndex.value === -1 ? 0 : cursorIndex.value - 1)
153
+ scrollCursorIntoView()
154
+ }
155
+ function cursorOpen() {
156
+ if (cursorIndex.value < 0) return
157
+ const row = paginatedPersonas.value[cursorIndex.value]
158
+ if (row?.id) goToPersona(row.id)
159
+ }
160
+ function scrollCursorIntoView() {
161
+ if (typeof document === 'undefined') return
162
+ setTimeout(() => {
163
+ const el = document.querySelector('[data-cursor="true"]')
164
+ el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' })
165
+ }, 0)
166
+ }
167
+
168
+ defineShortcuts({
169
+ j: () => cursorDown(),
170
+ k: () => cursorUp(),
171
+ arrowdown: () => cursorDown(),
172
+ arrowup: () => cursorUp(),
173
+ enter: () => cursorOpen(),
174
+ })
175
+
140
176
  // PR86a v3.15.0 — favorites.
141
177
  const favs = useFavorites()
142
178
  await favs.load()
@@ -593,7 +629,14 @@ async function undoTrashIds(ids: string[]) {
593
629
  />
594
630
  </template>
595
631
  <template #name-cell="{ row }">
596
- <span class="font-medium">{{ row.original.name }}</span>
632
+ <div :data-cursor="row.index === cursorIndex ? 'true' : undefined" class="flex items-center gap-1.5">
633
+ <UIcon
634
+ v-if="row.index === cursorIndex"
635
+ name="i-lucide-chevron-right"
636
+ class="size-3.5 text-primary shrink-0"
637
+ />
638
+ <span class="font-medium">{{ row.original.name }}</span>
639
+ </div>
597
640
  </template>
598
641
  <template #title-cell="{ row }">
599
642
  <span class="text-sm text-muted truncate">{{ row.original.title || '—' }}</span>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arkaos",
3
- "version": "3.53.1",
3
+ "version": "3.55.0",
4
4
  "description": "The Operating System for AI Agent Teams",
5
5
  "type": "module",
6
6
  "bin": {
package/pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "arkaos-core"
3
- version = "3.53.1"
3
+ version = "3.55.0"
4
4
  description = "Core engine for ArkaOS — The Operating System for AI Agent Teams"
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}