arkaos 2.96.0 → 2.98.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
- 2.96.0
1
+ 2.98.0
@@ -261,7 +261,7 @@ function formatTokens(n: number): string {
261
261
  :label="`${agent.expertise_years}y experience`"
262
262
  variant="outline"
263
263
  />
264
- <UBadge v-if="agent.mbti" :label="agent.mbti" variant="soft" size="xs" />
264
+ <UBadge v-if="agent.mbti" :label="agent.mbti" variant="soft" size="sm" />
265
265
  </div>
266
266
  <p class="text-xs text-muted/60 font-mono select-all pt-2">{{ agent.id }}</p>
267
267
  </div>
@@ -271,22 +271,22 @@ function formatTokens(n: number): string {
271
271
  <!-- ===== STATS ROW ===== -->
272
272
  <section class="grid grid-cols-2 md:grid-cols-4 gap-3">
273
273
  <div class="rounded-xl border border-default p-4 bg-elevated/20">
274
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-1">7d calls (dept)</p>
274
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-1">7d calls (dept)</p>
275
275
  <p class="text-2xl font-bold">{{ deptActivity?.call_count ?? 0 }}</p>
276
276
  </div>
277
277
  <div class="rounded-xl border border-default p-4 bg-elevated/20">
278
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-1">7d cost</p>
278
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-1">7d cost</p>
279
279
  <p class="text-2xl font-bold">{{ formatCost(deptActivity?.total_cost_usd) }}</p>
280
280
  </div>
281
281
  <div class="rounded-xl border border-default p-4 bg-elevated/20">
282
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-1">Tokens (in/out)</p>
282
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-1">Tokens (in/out)</p>
283
283
  <p class="text-lg font-semibold">
284
284
  {{ formatTokens(deptActivity?.total_tokens_in ?? 0) }} /
285
285
  {{ formatTokens(deptActivity?.total_tokens_out ?? 0) }}
286
286
  </p>
287
287
  </div>
288
288
  <div class="rounded-xl border border-default p-4 bg-elevated/20">
289
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-1">Linked personas</p>
289
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-1">Linked personas</p>
290
290
  <p class="text-2xl font-bold">{{ agent.linked_personas?.length ?? 0 }}</p>
291
291
  </div>
292
292
  </section>
@@ -307,7 +307,7 @@ function formatTokens(n: number): string {
307
307
  <!-- Card 1: MBTI -->
308
308
  <UCard>
309
309
  <div class="space-y-2">
310
- <p class="text-xs font-semibold text-muted uppercase tracking-wider">MBTI</p>
310
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide">MBTI</p>
311
311
  <p class="text-4xl font-bold font-mono tracking-widest">
312
312
  {{ agent.mbti || '----' }}
313
313
  </p>
@@ -320,7 +320,7 @@ function formatTokens(n: number): string {
320
320
  <!-- Card 2: Enneagram -->
321
321
  <UCard>
322
322
  <div class="space-y-3">
323
- <p class="text-xs font-semibold text-muted uppercase tracking-wider">Enneagram</p>
323
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide">Enneagram</p>
324
324
  <div>
325
325
  <p class="text-3xl font-bold">
326
326
  Type {{ agent.enneagram?.type ?? '-' }}
@@ -353,7 +353,7 @@ function formatTokens(n: number): string {
353
353
  <!-- Card 3: DISC -->
354
354
  <UCard>
355
355
  <div class="space-y-3">
356
- <p class="text-xs font-semibold text-muted uppercase tracking-wider">DISC</p>
356
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide">DISC</p>
357
357
  <div>
358
358
  <p class="text-3xl font-bold font-mono">
359
359
  {{ agent.disc?.primary ?? '' }}{{ agent.disc?.secondary ?? '' }}
@@ -385,7 +385,7 @@ function formatTokens(n: number): string {
385
385
  <!-- Big Five -->
386
386
  <UCard>
387
387
  <div class="space-y-1">
388
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-4">
388
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-4">
389
389
  Big Five (OCEAN)
390
390
  </p>
391
391
  <div v-if="agent.big_five" class="space-y-3">
@@ -418,15 +418,15 @@ function formatTokens(n: number): string {
418
418
  <UCard>
419
419
  <div class="space-y-4">
420
420
  <div>
421
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-1">Tone</p>
421
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-1">Tone</p>
422
422
  <p class="text-sm">{{ agent.communication.tone ?? '-' }}</p>
423
423
  </div>
424
424
  <div>
425
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-1">Vocabulary Level</p>
425
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-1">Vocabulary Level</p>
426
426
  <UBadge :label="agent.communication.vocabulary_level ?? '-'" variant="subtle" />
427
427
  </div>
428
428
  <div>
429
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-1">Language</p>
429
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-1">Language</p>
430
430
  <p class="text-sm font-mono">{{ agent.communication.language ?? '-' }}</p>
431
431
  </div>
432
432
  </div>
@@ -435,11 +435,11 @@ function formatTokens(n: number): string {
435
435
  <UCard>
436
436
  <div class="space-y-4">
437
437
  <div>
438
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-1">Preferred Format</p>
438
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-1">Preferred Format</p>
439
439
  <p class="text-sm">{{ agent.communication.preferred_format ?? '-' }}</p>
440
440
  </div>
441
441
  <div v-if="agent.communication.avoid?.length">
442
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-2">Avoids</p>
442
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-2">Avoids</p>
443
443
  <ul class="space-y-1.5">
444
444
  <li
445
445
  v-for="item in agent.communication.avoid"
@@ -458,7 +458,7 @@ function formatTokens(n: number): string {
458
458
  <!-- DISC Communication Details -->
459
459
  <UCard v-if="agent.disc?.communication_style || agent.disc?.under_pressure || agent.disc?.motivator">
460
460
  <div class="space-y-4">
461
- <p class="text-xs font-semibold text-muted uppercase tracking-wider">DISC Communication Profile</p>
461
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide">DISC Communication Profile</p>
462
462
  <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
463
463
  <div v-if="agent.disc.communication_style">
464
464
  <p class="text-xs text-muted mb-1">Communication Style</p>
@@ -486,7 +486,7 @@ function formatTokens(n: number): string {
486
486
  <div v-if="agent.mental_models" class="grid grid-cols-1 md:grid-cols-2 gap-4">
487
487
  <UCard>
488
488
  <div class="space-y-3">
489
- <p class="text-xs font-semibold text-muted uppercase tracking-wider">Primary Models</p>
489
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide">Primary Models</p>
490
490
  <ul v-if="agent.mental_models.primary?.length" class="space-y-2">
491
491
  <li
492
492
  v-for="model in agent.mental_models.primary"
@@ -503,7 +503,7 @@ function formatTokens(n: number): string {
503
503
 
504
504
  <UCard>
505
505
  <div class="space-y-3">
506
- <p class="text-xs font-semibold text-muted uppercase tracking-wider">Secondary Models</p>
506
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide">Secondary Models</p>
507
507
  <ul v-if="agent.mental_models.secondary?.length" class="space-y-2">
508
508
  <li
509
509
  v-for="model in agent.mental_models.secondary"
@@ -530,7 +530,7 @@ function formatTokens(n: number): string {
530
530
  <UCard>
531
531
  <div class="space-y-5">
532
532
  <div>
533
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-3">Permissions</p>
533
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-3">Permissions</p>
534
534
  <div class="flex flex-wrap gap-2">
535
535
  <UBadge v-if="agent.authority.veto" label="Veto" color="error" variant="subtle" />
536
536
  <UBadge v-if="agent.authority.approve_architecture" label="Approve Architecture" color="success" variant="subtle" />
@@ -542,7 +542,7 @@ function formatTokens(n: number): string {
542
542
  </div>
543
543
 
544
544
  <div v-if="agent.authority.delegates_to?.length">
545
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-2">Delegates To</p>
545
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-2">Delegates To</p>
546
546
  <div class="flex flex-wrap gap-2">
547
547
  <UBadge
548
548
  v-for="d in agent.authority.delegates_to"
@@ -555,7 +555,7 @@ function formatTokens(n: number): string {
555
555
  </div>
556
556
 
557
557
  <div v-if="agent.authority.escalates_to">
558
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-1">Escalates To</p>
558
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-1">Escalates To</p>
559
559
  <p class="text-sm font-mono">{{ agent.authority.escalates_to }}</p>
560
560
  </div>
561
561
 
@@ -576,7 +576,7 @@ function formatTokens(n: number): string {
576
576
  <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
577
577
  <UCard>
578
578
  <div class="space-y-3">
579
- <p class="text-xs font-semibold text-muted uppercase tracking-wider">Domains</p>
579
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide">Domains</p>
580
580
  <div v-if="agent.expertise_domains?.length" class="flex flex-wrap gap-2">
581
581
  <UBadge
582
582
  v-for="d in agent.expertise_domains"
@@ -593,7 +593,7 @@ function formatTokens(n: number): string {
593
593
 
594
594
  <UCard>
595
595
  <div class="space-y-3">
596
- <p class="text-xs font-semibold text-muted uppercase tracking-wider">Frameworks</p>
596
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide">Frameworks</p>
597
597
  <ul v-if="agent.frameworks?.length" class="space-y-2">
598
598
  <li
599
599
  v-for="f in agent.frameworks"
@@ -612,7 +612,7 @@ function formatTokens(n: number): string {
612
612
  <UCard v-if="agent.expertise_depth || agent.expertise_years">
613
613
  <div class="flex flex-wrap gap-6">
614
614
  <div v-if="agent.expertise_depth">
615
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-1">Depth</p>
615
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-1">Depth</p>
616
616
  <UBadge
617
617
  :label="agent.expertise_depth"
618
618
  :color="(depthColor[agent.expertise_depth] ?? 'neutral') as any"
@@ -621,7 +621,7 @@ function formatTokens(n: number): string {
621
621
  />
622
622
  </div>
623
623
  <div v-if="agent.expertise_years">
624
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-1">Experience</p>
624
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-1">Experience</p>
625
625
  <p class="text-2xl font-bold">
626
626
  {{ agent.expertise_years }}
627
627
  <span class="text-sm font-normal text-muted">years</span>
@@ -315,20 +315,20 @@ const vocabOptions = [
315
315
  icon="i-lucide-file-text"
316
316
  color="primary"
317
317
  variant="subtle"
318
- size="xs"
318
+ size="sm"
319
319
  />
320
320
  <UBadge
321
321
  v-else-if="detail._source_store === 'json'"
322
322
  label="JSON store"
323
323
  variant="outline"
324
- size="xs"
324
+ size="sm"
325
325
  />
326
- <UBadge v-if="detail.mbti" :label="detail.mbti" variant="soft" size="xs" />
326
+ <UBadge v-if="detail.mbti" :label="detail.mbti" variant="soft" size="sm" />
327
327
  <UBadge
328
328
  v-if="detail.disc?.primary"
329
329
  :label="`DISC: ${detail.disc.primary}${detail.disc.secondary ? '/' + detail.disc.secondary : ''}`"
330
330
  variant="subtle"
331
- size="xs"
331
+ size="sm"
332
332
  />
333
333
  </div>
334
334
  <p
@@ -345,19 +345,19 @@ const vocabOptions = [
345
345
  <!-- STATS -->
346
346
  <section class="grid grid-cols-2 md:grid-cols-4 gap-3">
347
347
  <div class="rounded-xl border border-default p-4 bg-elevated/20">
348
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-1">Linked agents</p>
348
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-1">Linked agents</p>
349
349
  <p class="text-2xl font-bold">{{ linkedAgentCount }}</p>
350
350
  </div>
351
351
  <div class="rounded-xl border border-default p-4 bg-elevated/20">
352
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-1">Mental models</p>
352
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-1">Mental models</p>
353
353
  <p class="text-2xl font-bold">{{ detail.mental_models?.length ?? 0 }}</p>
354
354
  </div>
355
355
  <div class="rounded-xl border border-default p-4 bg-elevated/20">
356
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-1">Expertise domains</p>
356
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-1">Expertise domains</p>
357
357
  <p class="text-2xl font-bold">{{ detail.expertise_domains?.length ?? 0 }}</p>
358
358
  </div>
359
359
  <div class="rounded-xl border border-default p-4 bg-elevated/20">
360
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-1">Frameworks</p>
360
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-1">Frameworks</p>
361
361
  <p class="text-2xl font-bold">{{ detail.frameworks?.length ?? 0 }}</p>
362
362
  </div>
363
363
  </section>
@@ -370,7 +370,7 @@ const vocabOptions = [
370
370
  <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
371
371
  <UCard>
372
372
  <div class="space-y-2">
373
- <p class="text-xs font-semibold text-muted uppercase tracking-wider">MBTI</p>
373
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide">MBTI</p>
374
374
  <p class="text-4xl font-bold font-mono tracking-widest">
375
375
  {{ detail.mbti || '----' }}
376
376
  </p>
@@ -382,7 +382,7 @@ const vocabOptions = [
382
382
 
383
383
  <UCard>
384
384
  <div class="space-y-2">
385
- <p class="text-xs font-semibold text-muted uppercase tracking-wider">Enneagram</p>
385
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide">Enneagram</p>
386
386
  <p class="text-3xl font-bold">
387
387
  Type {{ detail.enneagram?.type ?? '-' }}
388
388
  <span v-if="detail.enneagram?.wing" class="text-xl font-normal text-muted">
@@ -394,7 +394,7 @@ const vocabOptions = [
394
394
 
395
395
  <UCard>
396
396
  <div class="space-y-3">
397
- <p class="text-xs font-semibold text-muted uppercase tracking-wider">DISC</p>
397
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide">DISC</p>
398
398
  <p class="text-3xl font-bold font-mono">
399
399
  {{ detail.disc?.primary ?? '' }}{{ detail.disc?.secondary ?? '' }}
400
400
  </p>
@@ -418,7 +418,7 @@ const vocabOptions = [
418
418
  </div>
419
419
 
420
420
  <UCard>
421
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-4">
421
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-4">
422
422
  Big Five (OCEAN)
423
423
  </p>
424
424
  <div v-if="detail.big_five" class="space-y-3">
@@ -457,25 +457,25 @@ const vocabOptions = [
457
457
  <!-- KNOWLEDGE -->
458
458
  <div v-else-if="item.value === 'knowledge'" class="space-y-4 mt-6">
459
459
  <UCard v-if="detail.mental_models?.length">
460
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-3">
460
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-3">
461
461
  Mental models ({{ detail.mental_models.length }})
462
462
  </p>
463
463
  <div class="flex flex-wrap gap-1.5">
464
- <UBadge v-for="m in detail.mental_models" :key="m" :label="m" variant="outline" size="xs" />
464
+ <UBadge v-for="m in detail.mental_models" :key="m" :label="m" variant="outline" size="sm" />
465
465
  </div>
466
466
  </UCard>
467
467
 
468
468
  <UCard v-if="detail.expertise_domains?.length">
469
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-3">
469
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-3">
470
470
  Expertise ({{ detail.expertise_domains.length }})
471
471
  </p>
472
472
  <div class="flex flex-wrap gap-1.5">
473
- <UBadge v-for="e in detail.expertise_domains" :key="e" :label="e" variant="soft" size="xs" />
473
+ <UBadge v-for="e in detail.expertise_domains" :key="e" :label="e" variant="soft" size="sm" />
474
474
  </div>
475
475
  </UCard>
476
476
 
477
477
  <UCard v-if="detail.frameworks?.length">
478
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-3">
478
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-3">
479
479
  Frameworks ({{ detail.frameworks.length }})
480
480
  </p>
481
481
  <ul class="space-y-2">
@@ -487,7 +487,7 @@ const vocabOptions = [
487
487
  </UCard>
488
488
 
489
489
  <UCard v-if="detail.key_quotes?.length">
490
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-3">
490
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-3">
491
491
  Key quotes ({{ detail.key_quotes.length }})
492
492
  </p>
493
493
  <ul class="space-y-2">
@@ -512,7 +512,7 @@ const vocabOptions = [
512
512
  <!-- LINKED AGENTS -->
513
513
  <div v-else-if="item.value === 'agents'" class="space-y-4 mt-6">
514
514
  <UCard v-if="linkedAgentCount > 0">
515
- <p class="text-xs font-semibold text-muted uppercase tracking-wider mb-3">
515
+ <p class="text-sm font-semibold text-muted uppercase tracking-wide mb-3">
516
516
  Linked to {{ linkedAgentCount }} agent{{ linkedAgentCount === 1 ? '' : 's' }}
517
517
  </p>
518
518
  <div class="space-y-2">
@@ -0,0 +1,67 @@
1
+ <script setup lang="ts">
2
+ // PR80 v2.98.0 — /personas/new wraps the 4-step AI PersonaWizard.
3
+ //
4
+ // Fills the dead link that PR78 introduced when it moved the New Persona
5
+ // button into the table header but never built the destination route.
6
+ //
7
+ // Wizard contract (defined in components/PersonaWizard.vue):
8
+ // @completed(persona) → wizard finished + saved; navigate to detail
9
+ // @cancelled → operator backed out; return to the table
10
+ //
11
+ // The wizard never auto-saves; every step is operator-confirmed inside
12
+ // the component, so this page is purely a hosting shell.
13
+
14
+ import type { Persona } from '~/types'
15
+
16
+ const toast = useToast()
17
+
18
+ function onCompleted(persona: Persona) {
19
+ toast.add({
20
+ title: 'Persona created',
21
+ description: `${persona.name} is ready in the library.`,
22
+ color: 'success',
23
+ icon: 'i-lucide-check-circle',
24
+ })
25
+ navigateTo(`/personas/${persona.id}`)
26
+ }
27
+
28
+ function onCancelled() {
29
+ navigateTo('/personas')
30
+ }
31
+ </script>
32
+
33
+ <template>
34
+ <UDashboardPanel id="personas-new">
35
+ <template #header>
36
+ <UDashboardNavbar title="New Persona">
37
+ <template #leading>
38
+ <UButton
39
+ icon="i-lucide-arrow-left"
40
+ variant="ghost"
41
+ size="sm"
42
+ aria-label="Back to personas"
43
+ to="/personas"
44
+ />
45
+ </template>
46
+ <template #trailing>
47
+ <UBadge
48
+ label="AI-assisted"
49
+ icon="i-lucide-sparkles"
50
+ color="primary"
51
+ variant="soft"
52
+ size="sm"
53
+ />
54
+ </template>
55
+ </UDashboardNavbar>
56
+ </template>
57
+
58
+ <template #body>
59
+ <div class="max-w-5xl mx-auto py-2">
60
+ <PersonaWizard
61
+ @completed="onCompleted"
62
+ @cancelled="onCancelled"
63
+ />
64
+ </div>
65
+ </template>
66
+ </UDashboardPanel>
67
+ </template>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arkaos",
3
- "version": "2.96.0",
3
+ "version": "2.98.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 = "2.96.0"
3
+ version = "2.98.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"}