arkaos 2.2.2 → 2.3.1

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 (66) hide show
  1. package/VERSION +1 -1
  2. package/arka/skills/conclave/SKILL.md +194 -0
  3. package/arka/skills/human-writing/SKILL.md +143 -0
  4. package/config/agent-memory-template.md +28 -0
  5. package/config/disc-profiles.json +108 -0
  6. package/config/disc-team-validator.sh +94 -0
  7. package/config/gotchas-fixes.json +148 -0
  8. package/config/profile-template.json +12 -0
  9. package/config/providers-registry.json +56 -0
  10. package/config/settings-template.json +42 -0
  11. package/config/standards/communication.md +64 -0
  12. package/config/standards/orchestration.md +91 -0
  13. package/config/statusline-v2.sh +101 -0
  14. package/config/statusline.sh +139 -0
  15. package/config/system-prompt.sh +190 -0
  16. package/dashboard/LICENSE +21 -0
  17. package/dashboard/README.md +64 -0
  18. package/dashboard/app/app.config.ts +8 -0
  19. package/dashboard/app/app.vue +42 -0
  20. package/dashboard/app/assets/css/main.css +18 -0
  21. package/dashboard/app/composables/useApi.ts +8 -0
  22. package/dashboard/app/composables/useDashboard.ts +19 -0
  23. package/dashboard/app/error.vue +24 -0
  24. package/dashboard/app/layouts/default.vue +114 -0
  25. package/dashboard/app/pages/agents/[id].vue +506 -0
  26. package/dashboard/app/pages/agents/index.vue +225 -0
  27. package/dashboard/app/pages/budget.vue +132 -0
  28. package/dashboard/app/pages/commands.vue +180 -0
  29. package/dashboard/app/pages/health.vue +98 -0
  30. package/dashboard/app/pages/index.vue +126 -0
  31. package/dashboard/app/pages/knowledge.vue +729 -0
  32. package/dashboard/app/pages/personas.vue +597 -0
  33. package/dashboard/app/pages/settings.vue +146 -0
  34. package/dashboard/app/pages/tasks.vue +203 -0
  35. package/dashboard/app/types/index.d.ts +181 -0
  36. package/dashboard/app/utils/index.ts +7 -0
  37. package/dashboard/nuxt.config.ts +39 -0
  38. package/dashboard/package.json +37 -0
  39. package/dashboard/pnpm-workspace.yaml +7 -0
  40. package/dashboard/tsconfig.json +10 -0
  41. package/installer/cli.js +0 -0
  42. package/installer/index.js +262 -62
  43. package/knowledge/INDEX.md +34 -0
  44. package/knowledge/agents-registry.json +254 -0
  45. package/knowledge/channels-config.json +6 -0
  46. package/knowledge/commands-keywords.json +466 -0
  47. package/knowledge/commands-registry.json +2791 -0
  48. package/knowledge/commands-registry.json.bak +2791 -0
  49. package/knowledge/ecosystems.json +7 -0
  50. package/knowledge/obsidian-config.json +112 -0
  51. package/package.json +10 -6
  52. package/pyproject.toml +1 -1
  53. package/scripts/check-version.js +13 -0
  54. package/scripts/dashboard-api.py +636 -0
  55. package/scripts/knowledge-index.py +113 -0
  56. package/scripts/skill_validator.py +217 -0
  57. package/scripts/start-dashboard.sh +54 -0
  58. package/scripts/synapse-bridge.py +199 -0
  59. package/scripts/tools/brand_voice_analyzer.py +192 -0
  60. package/scripts/tools/dcf_calculator.py +168 -0
  61. package/scripts/tools/headline_scorer.py +215 -0
  62. package/scripts/tools/okr_cascade.py +207 -0
  63. package/scripts/tools/rice_prioritizer.py +230 -0
  64. package/scripts/tools/saas_metrics.py +234 -0
  65. package/scripts/tools/seo_checker.py +197 -0
  66. package/scripts/tools/tech_debt_analyzer.py +206 -0
@@ -0,0 +1,146 @@
1
+ <script setup lang="ts">
2
+ const { fetchApi, apiBase } = useApi()
3
+
4
+ const { data, status, error, refresh } = fetchApi<any>('/api/keys')
5
+
6
+ const keys = computed(() => data.value?.keys ?? [])
7
+
8
+ const newKey = ref('')
9
+ const newValue = ref('')
10
+ const saving = ref(false)
11
+ const deletingKey = ref<string | null>(null)
12
+
13
+ async function saveKey() {
14
+ if (!newKey.value || !newValue.value) return
15
+ saving.value = true
16
+ try {
17
+ await $fetch(`${apiBase}/api/keys`, {
18
+ method: 'POST',
19
+ body: { key: newKey.value, value: newValue.value },
20
+ })
21
+ newKey.value = ''
22
+ newValue.value = ''
23
+ await refresh()
24
+ } catch {}
25
+ saving.value = false
26
+ }
27
+
28
+ async function deleteKey(keyName: string) {
29
+ deletingKey.value = keyName
30
+ try {
31
+ await $fetch(`${apiBase}/api/keys/${keyName}`, { method: 'DELETE' })
32
+ await refresh()
33
+ } catch {}
34
+ deletingKey.value = null
35
+ }
36
+
37
+ const keyOptions = [
38
+ { label: 'OPENAI_API_KEY', value: 'OPENAI_API_KEY' },
39
+ { label: 'FAL_API_KEY', value: 'FAL_API_KEY' },
40
+ { label: 'GOOGLE_API_KEY', value: 'GOOGLE_API_KEY' },
41
+ { label: 'Custom...', value: 'custom' },
42
+ ]
43
+
44
+ const isCustom = computed(() => newKey.value === 'custom')
45
+ const customKeyName = ref('')
46
+ const effectiveKeyName = computed(() => isCustom.value ? customKeyName.value : newKey.value)
47
+ </script>
48
+
49
+ <template>
50
+ <UDashboardPanel id="settings">
51
+ <template #header>
52
+ <UDashboardNavbar title="Settings">
53
+ <template #leading>
54
+ <UDashboardSidebarCollapse />
55
+ </template>
56
+ </UDashboardNavbar>
57
+ </template>
58
+
59
+ <template #body>
60
+ <div class="space-y-8">
61
+ <!-- API Keys Section -->
62
+ <div>
63
+ <h2 class="text-lg font-semibold mb-1">API Keys</h2>
64
+ <p class="text-sm text-muted mb-6">Configure API keys for external services. Keys are stored locally at ~/.arkaos/keys.json.</p>
65
+
66
+ <!-- Add Key Form -->
67
+ <UCard class="mb-6">
68
+ <div class="space-y-4">
69
+ <p class="text-xs font-semibold text-muted uppercase tracking-wider">Add API Key</p>
70
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-3 items-end">
71
+ <div>
72
+ <label class="text-xs text-muted mb-1 block">Provider</label>
73
+ <USelect v-model="newKey" :items="keyOptions" class="w-full" placeholder="Select key..." />
74
+ </div>
75
+ <div v-if="isCustom">
76
+ <label class="text-xs text-muted mb-1 block">Key Name</label>
77
+ <UInput v-model="customKeyName" class="w-full" placeholder="MY_CUSTOM_KEY" />
78
+ </div>
79
+ <div :class="isCustom ? '' : 'md:col-span-1'">
80
+ <label class="text-xs text-muted mb-1 block">Value</label>
81
+ <UInput v-model="newValue" type="password" class="w-full" placeholder="sk-..." />
82
+ </div>
83
+ <div>
84
+ <UButton
85
+ label="Save Key"
86
+ icon="i-lucide-key"
87
+ :loading="saving"
88
+ :disabled="!effectiveKeyName || !newValue"
89
+ @click="() => { newKey = effectiveKeyName; saveKey() }"
90
+ block
91
+ />
92
+ </div>
93
+ </div>
94
+ </div>
95
+ </UCard>
96
+
97
+ <!-- Keys List -->
98
+ <div v-if="status === 'pending'" class="flex items-center justify-center py-8">
99
+ <UIcon name="i-lucide-loader-2" class="size-6 animate-spin text-muted" />
100
+ </div>
101
+
102
+ <div v-else class="space-y-2">
103
+ <div
104
+ v-for="k in keys"
105
+ :key="k.key"
106
+ class="flex items-center gap-4 p-3 rounded-lg border border-default"
107
+ >
108
+ <div class="flex-1 min-w-0">
109
+ <div class="flex items-center gap-2">
110
+ <span class="text-sm font-mono font-medium">{{ k.key }}</span>
111
+ <UBadge :label="k.provider" variant="subtle" size="xs" />
112
+ <UBadge
113
+ v-if="k.configured"
114
+ label="Configured"
115
+ color="success"
116
+ variant="subtle"
117
+ size="xs"
118
+ />
119
+ <UBadge
120
+ v-else
121
+ label="Not Set"
122
+ color="neutral"
123
+ variant="outline"
124
+ size="xs"
125
+ />
126
+ </div>
127
+ <p v-if="k.used_for" class="text-xs text-muted mt-0.5">{{ k.used_for }}</p>
128
+ <p v-if="k.masked_value && k.configured" class="text-xs font-mono text-muted/60 mt-0.5">{{ k.masked_value }}</p>
129
+ </div>
130
+ <UButton
131
+ v-if="k.configured && k.masked_value !== '(from environment)'"
132
+ icon="i-lucide-trash-2"
133
+ variant="ghost"
134
+ color="error"
135
+ size="xs"
136
+ :loading="deletingKey === k.key"
137
+ @click="deleteKey(k.key)"
138
+ aria-label="Delete key"
139
+ />
140
+ </div>
141
+ </div>
142
+ </div>
143
+ </div>
144
+ </template>
145
+ </UDashboardPanel>
146
+ </template>
@@ -0,0 +1,203 @@
1
+ <script setup lang="ts">
2
+ import type { TableColumn } from '@nuxt/ui'
3
+ import type { Task, TaskSummary } from '~/types'
4
+
5
+ const { fetchApi } = useApi()
6
+
7
+ const { data, status, error, refresh } = await fetchApi<{ tasks: Task[], summary: TaskSummary }>('/api/tasks')
8
+
9
+ const tasks = computed(() => data.value?.tasks ?? [])
10
+ const summary = computed(() => data.value?.summary ?? { total: 0, active: 0, queued: 0, completed: 0 })
11
+
12
+ const activeTab = ref('all')
13
+
14
+ const tabItems = [
15
+ { label: 'All', value: 'all' },
16
+ { label: 'Active', value: 'active' },
17
+ { label: 'Queued', value: 'queued' },
18
+ { label: 'Completed', value: 'completed' },
19
+ { label: 'Failed', value: 'failed' }
20
+ ]
21
+
22
+ const filteredTasks = computed(() => {
23
+ if (activeTab.value === 'all') return tasks.value
24
+ return tasks.value.filter(t => {
25
+ if (activeTab.value === 'active') return t.status === 'processing' || t.status === 'active'
26
+ return t.status === activeTab.value
27
+ })
28
+ })
29
+
30
+ type StatusColorType = 'success' | 'error' | 'primary' | 'warning' | 'neutral'
31
+
32
+ function statusColor(taskStatus: string): StatusColorType {
33
+ const colors: Record<string, StatusColorType> = {
34
+ completed: 'success',
35
+ processing: 'primary',
36
+ active: 'primary',
37
+ queued: 'neutral',
38
+ failed: 'error',
39
+ cancelled: 'warning'
40
+ }
41
+ return colors[taskStatus] ?? 'neutral'
42
+ }
43
+
44
+ function formatDate(dateStr: string) {
45
+ if (!dateStr) return '-'
46
+ try {
47
+ return new Intl.DateTimeFormat('en-US', {
48
+ month: 'short',
49
+ day: 'numeric',
50
+ hour: '2-digit',
51
+ minute: '2-digit'
52
+ }).format(new Date(dateStr))
53
+ } catch {
54
+ return dateStr
55
+ }
56
+ }
57
+
58
+ const columns: TableColumn<Task>[] = [
59
+ {
60
+ accessorKey: 'agent',
61
+ header: 'Type'
62
+ },
63
+ {
64
+ accessorKey: 'title',
65
+ header: 'Title'
66
+ },
67
+ {
68
+ accessorKey: 'department',
69
+ header: 'Department'
70
+ },
71
+ {
72
+ accessorKey: 'status',
73
+ header: 'Status'
74
+ },
75
+ {
76
+ accessorKey: 'progress',
77
+ header: 'Progress'
78
+ },
79
+ {
80
+ accessorKey: 'created_at',
81
+ header: 'Created'
82
+ }
83
+ ]
84
+ </script>
85
+
86
+ <template>
87
+ <UDashboardPanel id="tasks">
88
+ <template #header>
89
+ <UDashboardNavbar title="Tasks">
90
+ <template #leading>
91
+ <UDashboardSidebarCollapse />
92
+ </template>
93
+ </UDashboardNavbar>
94
+ </template>
95
+
96
+ <template #body>
97
+ <!-- Loading -->
98
+ <div v-if="status === 'pending'" class="flex items-center justify-center py-12">
99
+ <UIcon name="i-lucide-loader-2" class="size-8 animate-spin text-muted" />
100
+ </div>
101
+
102
+ <!-- Error -->
103
+ <div v-else-if="error" class="flex flex-col items-center justify-center gap-4 py-12" role="alert">
104
+ <UIcon name="i-lucide-alert-triangle" class="size-12 text-red-500" />
105
+ <p class="text-sm text-muted">Failed to load tasks.</p>
106
+ <UButton label="Retry" variant="outline" color="primary" icon="i-lucide-refresh-cw" @click="refresh()" />
107
+ </div>
108
+
109
+ <!-- Content -->
110
+ <template v-else>
111
+ <!-- Summary Cards -->
112
+ <div class="grid grid-cols-2 gap-4 sm:grid-cols-4">
113
+ <div class="rounded-lg border border-default p-4 text-center">
114
+ <p class="text-2xl font-semibold text-highlighted">{{ summary.total }}</p>
115
+ <p class="text-xs text-muted">Total</p>
116
+ </div>
117
+ <div class="rounded-lg border border-default p-4 text-center">
118
+ <p class="text-2xl font-semibold text-primary">{{ summary.active }}</p>
119
+ <p class="text-xs text-muted">Active</p>
120
+ </div>
121
+ <div class="rounded-lg border border-default p-4 text-center">
122
+ <p class="text-2xl font-semibold text-yellow-500">{{ summary.queued }}</p>
123
+ <p class="text-xs text-muted">Queued</p>
124
+ </div>
125
+ <div class="rounded-lg border border-default p-4 text-center">
126
+ <p class="text-2xl font-semibold text-green-500">{{ summary.completed }}</p>
127
+ <p class="text-xs text-muted">Completed</p>
128
+ </div>
129
+ </div>
130
+
131
+ <!-- Status Filter Tabs -->
132
+ <div class="mt-6">
133
+ <UTabs
134
+ :items="tabItems"
135
+ :model-value="activeTab"
136
+ @update:model-value="activeTab = $event as string"
137
+ />
138
+ </div>
139
+
140
+ <!-- Empty State -->
141
+ <div v-if="!tasks.length" class="mt-6 flex flex-col items-center justify-center gap-4 py-16">
142
+ <UIcon name="i-lucide-list-checks" class="size-16 text-muted" />
143
+ <h3 class="text-lg font-semibold text-highlighted">No tasks yet</h3>
144
+ <p class="text-sm text-muted text-center max-w-md">
145
+ Tasks are created when you run ArkaOS workflows. Start by indexing your project or running a command.
146
+ </p>
147
+ <div class="mt-2 rounded-lg border border-default bg-elevated/50 px-4 py-3">
148
+ <p class="text-xs text-muted mb-1">Try running:</p>
149
+ <code class="font-mono text-sm text-primary">npx arkaos index</code>
150
+ </div>
151
+ </div>
152
+
153
+ <!-- Filtered Empty -->
154
+ <div v-else-if="!filteredTasks.length" class="mt-6 flex flex-col items-center justify-center gap-4 py-12">
155
+ <UIcon name="i-lucide-filter-x" class="size-12 text-muted" />
156
+ <p class="text-sm text-muted">No {{ activeTab }} tasks found.</p>
157
+ </div>
158
+
159
+ <!-- Task Table -->
160
+ <div v-else class="mt-4">
161
+ <UTable
162
+ :data="filteredTasks"
163
+ :columns="columns"
164
+ :loading="status === 'pending'"
165
+ class="shrink-0"
166
+ :ui="{
167
+ base: 'table-fixed border-separate border-spacing-0',
168
+ thead: '[&>tr]:bg-elevated/50 [&>tr]:after:content-none',
169
+ tbody: '[&>tr]:last:[&>td]:border-b-0',
170
+ th: 'py-2 first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r',
171
+ td: 'border-b border-default'
172
+ }"
173
+ >
174
+ <template #agent-cell="{ row }">
175
+ <UBadge :label="row.original.agent" variant="subtle" color="primary" size="sm" />
176
+ </template>
177
+ <template #department-cell="{ row }">
178
+ <span class="text-sm text-muted">{{ row.original.department }}</span>
179
+ </template>
180
+ <template #status-cell="{ row }">
181
+ <UBadge
182
+ :label="row.original.status"
183
+ :color="statusColor(row.original.status)"
184
+ variant="subtle"
185
+ size="sm"
186
+ class="capitalize"
187
+ />
188
+ </template>
189
+ <template #progress-cell="{ row }">
190
+ <div class="flex items-center gap-2 min-w-24">
191
+ <UProgress :value="row.original.progress" :max="100" size="xs" class="flex-1" />
192
+ <span class="text-xs text-muted font-mono w-8 text-right">{{ row.original.progress }}%</span>
193
+ </div>
194
+ </template>
195
+ <template #created_at-cell="{ row }">
196
+ <span class="text-xs text-muted">{{ formatDate(row.original.created_at) }}</span>
197
+ </template>
198
+ </UTable>
199
+ </div>
200
+ </template>
201
+ </template>
202
+ </UDashboardPanel>
203
+ </template>
@@ -0,0 +1,181 @@
1
+ export interface OverviewData {
2
+ agents: number
3
+ skills: number
4
+ departments: number
5
+ tests: number
6
+ commands: number
7
+ workflows: number
8
+ version: string
9
+ budget: {
10
+ allocated: number
11
+ used: number
12
+ percent_used: number
13
+ is_unlimited: boolean
14
+ }
15
+ tasks: {
16
+ total: number
17
+ active: number
18
+ queued: number
19
+ }
20
+ knowledge: {
21
+ total_chunks: number
22
+ total_files: number
23
+ }
24
+ }
25
+
26
+ export interface Agent {
27
+ id: string
28
+ name: string
29
+ role: string
30
+ department: string
31
+ tier: number
32
+ disc: {
33
+ primary: string
34
+ secondary?: string
35
+ description?: string
36
+ }
37
+ enneagram: {
38
+ type: string
39
+ wing?: string
40
+ label?: string
41
+ }
42
+ big_five: {
43
+ O: number
44
+ C: number
45
+ E: number
46
+ A: number
47
+ N: number
48
+ }
49
+ mbti: string
50
+ expertise_domains: string[]
51
+ frameworks: string[]
52
+ authority?: {
53
+ veto?: boolean
54
+ approve_budget?: boolean
55
+ approve_architecture?: boolean
56
+ orchestrate?: boolean
57
+ block_release?: boolean
58
+ delegates_to?: string[]
59
+ escalates_to?: string[]
60
+ }
61
+ }
62
+
63
+ export interface Command {
64
+ id: string
65
+ command: string
66
+ department: string
67
+ description: string
68
+ keywords?: string[]
69
+ }
70
+
71
+ export interface BudgetTier {
72
+ tier: number
73
+ allocated: number
74
+ used: number
75
+ remaining: number
76
+ percent_used: number
77
+ status: string
78
+ is_unlimited: boolean
79
+ }
80
+
81
+ export interface Task {
82
+ id: string
83
+ title: string
84
+ status: string
85
+ agent: string
86
+ department: string
87
+ progress: number
88
+ created_at: string
89
+ }
90
+
91
+ export interface TaskSummary {
92
+ total: number
93
+ active: number
94
+ queued: number
95
+ completed: number
96
+ }
97
+
98
+ export interface KnowledgeStats {
99
+ total_chunks: number
100
+ total_files: number
101
+ vss_available?: boolean
102
+ areas?: {
103
+ name: string
104
+ chunks: number
105
+ files: number
106
+ }[]
107
+ }
108
+
109
+ export interface KnowledgeSearchResult {
110
+ id?: string
111
+ text?: string
112
+ content?: string
113
+ heading?: string
114
+ source?: string
115
+ area?: string
116
+ score: number
117
+ }
118
+
119
+ export interface IngestRequest {
120
+ source: string
121
+ type: 'youtube' | 'web' | 'pdf' | 'audio' | 'markdown'
122
+ }
123
+
124
+ export interface IngestResponse {
125
+ task_id: string
126
+ source_type: string
127
+ status: string
128
+ }
129
+
130
+ export interface IngestTask {
131
+ id: string
132
+ title: string
133
+ status: 'queued' | 'processing' | 'completed' | 'failed'
134
+ progress_percent: number
135
+ progress_message: string
136
+ output_data?: {
137
+ chunks_created?: number
138
+ [key: string]: unknown
139
+ }
140
+ error?: string
141
+ source_type?: string
142
+ created_at?: string
143
+ }
144
+
145
+ export interface HealthCheck {
146
+ name: string
147
+ passed: boolean
148
+ fix: string
149
+ }
150
+
151
+ export interface Persona {
152
+ id: string
153
+ name: string
154
+ title: string
155
+ tagline: string
156
+ source: string
157
+ mbti: string
158
+ disc: {
159
+ primary: string
160
+ secondary: string
161
+ }
162
+ enneagram: {
163
+ type: number
164
+ wing: number
165
+ }
166
+ big_five: {
167
+ openness: number
168
+ conscientiousness: number
169
+ extraversion: number
170
+ agreeableness: number
171
+ neuroticism: number
172
+ }
173
+ mental_models: string[]
174
+ expertise_domains: string[]
175
+ frameworks: string[]
176
+ communication: {
177
+ tone: string
178
+ vocabulary_level: string
179
+ }
180
+ cloned_to_agents: string[]
181
+ }
@@ -0,0 +1,7 @@
1
+ export function randomInt(min: number, max: number): number {
2
+ return Math.floor(Math.random() * (max - min + 1)) + min
3
+ }
4
+
5
+ export function randomFrom<T>(array: T[]): T {
6
+ return array[Math.floor(Math.random() * array.length)]!
7
+ }
@@ -0,0 +1,39 @@
1
+ // https://nuxt.com/docs/api/configuration/nuxt-config
2
+ export default defineNuxtConfig({
3
+ modules: [
4
+ '@nuxt/eslint',
5
+ '@nuxt/ui',
6
+ '@vueuse/nuxt'
7
+ ],
8
+
9
+ ssr: false,
10
+
11
+ devtools: {
12
+ enabled: true
13
+ },
14
+
15
+ css: ['~/assets/css/main.css'],
16
+
17
+ runtimeConfig: {
18
+ public: {
19
+ apiBase: 'http://localhost:3334'
20
+ }
21
+ },
22
+
23
+ routeRules: {
24
+ '/api/**': {
25
+ cors: true
26
+ }
27
+ },
28
+
29
+ compatibilityDate: '2024-07-11',
30
+
31
+ eslint: {
32
+ config: {
33
+ stylistic: {
34
+ commaDangle: 'never',
35
+ braceStyle: '1tbs'
36
+ }
37
+ }
38
+ }
39
+ })
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "nuxt-ui-template-dashboard",
3
+ "private": true,
4
+ "type": "module",
5
+ "scripts": {
6
+ "build": "nuxt build",
7
+ "dev": "nuxt dev",
8
+ "preview": "nuxt preview",
9
+ "postinstall": "nuxt prepare",
10
+ "lint": "eslint .",
11
+ "typecheck": "nuxt typecheck"
12
+ },
13
+ "dependencies": {
14
+ "@iconify-json/lucide": "^1.2.100",
15
+ "@iconify-json/simple-icons": "^1.2.75",
16
+ "@internationalized/date": "^3.12.0",
17
+ "@nuxt/ui": "^4.6.0",
18
+ "@tanstack/table-core": "^8.21.3",
19
+ "@unovis/ts": "^1.6.4",
20
+ "@unovis/vue": "^1.6.4",
21
+ "@vueuse/core": "^14.2.1",
22
+ "@vueuse/nuxt": "^14.2.1",
23
+ "date-fns": "^4.1.0",
24
+ "nuxt": "^4.4.2",
25
+ "scule": "^1.3.0",
26
+ "tailwindcss": "^4.2.2",
27
+ "vue": "^3.5.31",
28
+ "zod": "^4.3.6"
29
+ },
30
+ "devDependencies": {
31
+ "@nuxt/eslint": "^1.15.2",
32
+ "eslint": "^10.1.0",
33
+ "typescript": "^6.0.2",
34
+ "vue-tsc": "^3.2.6"
35
+ },
36
+ "packageManager": "pnpm@10.33.0"
37
+ }
@@ -0,0 +1,7 @@
1
+ ignoredBuiltDependencies:
2
+ - '@parcel/watcher'
3
+ - '@tailwindcss/oxide'
4
+ - esbuild
5
+ - maplibre-gl
6
+ - unrs-resolver
7
+ - vue-demi
@@ -0,0 +1,10 @@
1
+ {
2
+ // https://nuxt.com/docs/guide/concepts/typescript
3
+ "files": [],
4
+ "references": [
5
+ { "path": "./.nuxt/tsconfig.app.json" },
6
+ { "path": "./.nuxt/tsconfig.server.json" },
7
+ { "path": "./.nuxt/tsconfig.shared.json" },
8
+ { "path": "./.nuxt/tsconfig.node.json" }
9
+ ]
10
+ }
package/installer/cli.js CHANGED
File without changes