arkaos 3.62.0 → 3.63.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.62.0
1
+ 3.63.0
@@ -226,6 +226,59 @@ function csvToList(value: string): string[] {
226
226
  type SuggestField = 'mental_models' | 'frameworks' | 'expertise_domains' | 'communication_avoid' | 'key_quotes'
227
227
  const suggestingField = ref<SuggestField | null>(null)
228
228
 
229
+ // PR98a v3.63.0 — inline edit for name + title.
230
+ type InlineField = 'name' | 'title'
231
+ const inlineField = ref<InlineField | null>(null)
232
+ const inlineDraft = ref('')
233
+ const inlineSaving = ref(false)
234
+
235
+ function startInline(field: InlineField, current: string | undefined) {
236
+ inlineField.value = field
237
+ inlineDraft.value = current ?? ''
238
+ }
239
+ function cancelInline() {
240
+ inlineField.value = null
241
+ inlineDraft.value = ''
242
+ }
243
+ async function commitInline(field: InlineField) {
244
+ if (!detail.value || inlineField.value !== field) return
245
+ const next = inlineDraft.value.trim()
246
+ const current = (field === 'name' ? detail.value.name : detail.value.title) ?? ''
247
+ if (next === current) {
248
+ cancelInline()
249
+ return
250
+ }
251
+ if (field === 'name' && !next) {
252
+ // Names can't be empty — persona schema requires it.
253
+ cancelInline()
254
+ return
255
+ }
256
+ inlineSaving.value = true
257
+ try {
258
+ const res = await $fetch<{ updated?: boolean, error?: string }>(
259
+ `${apiBase}/api/personas/${personaId}`,
260
+ { method: 'PUT', body: { [field]: next } },
261
+ )
262
+ if (res.error) throw new Error(res.error)
263
+ toast.add({
264
+ title: field === 'name' ? 'Name updated' : 'Title updated',
265
+ description: next || '(empty)',
266
+ color: 'success',
267
+ icon: 'i-lucide-check',
268
+ })
269
+ await refresh()
270
+ } catch (err) {
271
+ toast.add({
272
+ title: 'Save failed',
273
+ description: err instanceof Error ? err.message : 'unknown error',
274
+ color: 'error',
275
+ })
276
+ } finally {
277
+ inlineSaving.value = false
278
+ inlineField.value = null
279
+ }
280
+ }
281
+
229
282
  // PR97b v3.60.0 — weekly usage timeline (when did agents clone from here).
230
283
  interface UsageWeek { week_start: string, count: number }
231
284
  const { data: usageTimelineData } = fetchApi<{
@@ -552,11 +605,58 @@ const vocabOptions = [
552
605
  <div class="flex-1 min-w-0 space-y-2">
553
606
  <div class="flex items-start justify-between gap-3 flex-wrap">
554
607
  <div class="min-w-0">
608
+ <!-- PR98a v3.63.0 — inline edit name + title -->
555
609
  <h1 class="text-3xl md:text-4xl font-bold tracking-tight text-highlighted">
556
- {{ detail.name }}
610
+ <UInput
611
+ v-if="inlineField === 'name'"
612
+ v-model="inlineDraft"
613
+ autofocus
614
+ size="lg"
615
+ class="font-bold"
616
+ :loading="inlineSaving"
617
+ @keydown.enter="commitInline('name')"
618
+ @keydown.escape="cancelInline"
619
+ @blur="commitInline('name')"
620
+ />
621
+ <button
622
+ v-else
623
+ type="button"
624
+ class="hover:text-primary transition-colors"
625
+ title="Click to edit name"
626
+ @click="startInline('name', detail.name)"
627
+ >
628
+ {{ detail.name }}
629
+ </button>
557
630
  </h1>
558
- <p v-if="detail.title" class="text-base md:text-lg text-muted mt-0.5">
559
- {{ detail.title }}
631
+ <p class="text-base md:text-lg text-muted mt-0.5">
632
+ <UInput
633
+ v-if="inlineField === 'title'"
634
+ v-model="inlineDraft"
635
+ autofocus
636
+ size="md"
637
+ :loading="inlineSaving"
638
+ @keydown.enter="commitInline('title')"
639
+ @keydown.escape="cancelInline"
640
+ @blur="commitInline('title')"
641
+ />
642
+ <button
643
+ v-else-if="detail.title"
644
+ type="button"
645
+ class="hover:text-primary transition-colors text-left"
646
+ title="Click to edit title"
647
+ @click="startInline('title', detail.title)"
648
+ >
649
+ {{ detail.title }}
650
+ </button>
651
+ <button
652
+ v-else
653
+ type="button"
654
+ class="hover:text-primary transition-colors text-left italic text-muted/60"
655
+ title="Click to add title"
656
+ @click="startInline('title', '')"
657
+ >
658
+ + Add title
659
+ </button>
560
660
  </p>
561
661
  </div>
562
662
  <div class="flex items-center gap-2">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arkaos",
3
- "version": "3.62.0",
3
+ "version": "3.63.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.62.0"
3
+ version = "3.63.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"}