cognova 0.1.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 (205) hide show
  1. package/.env.example +58 -0
  2. package/Claude/CLAUDE.md +92 -0
  3. package/Claude/hooks/lib/__init__.py +1 -0
  4. package/Claude/hooks/lib/hook_client.py +207 -0
  5. package/Claude/hooks/log-event.py +97 -0
  6. package/Claude/hooks/pre-compact.py +46 -0
  7. package/Claude/hooks/session-end.py +26 -0
  8. package/Claude/hooks/session-start.py +35 -0
  9. package/Claude/hooks/stop-extract.py +40 -0
  10. package/Claude/rules/frontmatter.md +54 -0
  11. package/Claude/rules/markdown.md +43 -0
  12. package/Claude/rules/note-organization.md +33 -0
  13. package/Claude/settings.json +54 -0
  14. package/Claude/skills/README.md +136 -0
  15. package/Claude/skills/_lib/__init__.py +1 -0
  16. package/Claude/skills/_lib/api.py +164 -0
  17. package/Claude/skills/_lib/output.py +95 -0
  18. package/Claude/skills/environment/SKILL.md +73 -0
  19. package/Claude/skills/environment/environment.py +239 -0
  20. package/Claude/skills/memory/SKILL.md +153 -0
  21. package/Claude/skills/memory/memory.py +270 -0
  22. package/Claude/skills/project/SKILL.md +105 -0
  23. package/Claude/skills/project/project.py +203 -0
  24. package/Claude/skills/skill-creator/SKILL.md +261 -0
  25. package/Claude/skills/task/SKILL.md +135 -0
  26. package/Claude/skills/task/task.py +310 -0
  27. package/LICENSE +21 -0
  28. package/README.md +176 -0
  29. package/app/app.config.ts +8 -0
  30. package/app/app.vue +39 -0
  31. package/app/assets/css/main.css +10 -0
  32. package/app/components/AppLogo.vue +40 -0
  33. package/app/components/AssistantPanel.client.vue +518 -0
  34. package/app/components/ConfirmModal.vue +84 -0
  35. package/app/components/TemplateMenu.vue +49 -0
  36. package/app/components/agents/AgentActivityChart.client.vue +105 -0
  37. package/app/components/agents/AgentActivityChart.server.vue +25 -0
  38. package/app/components/agents/AgentForm.vue +304 -0
  39. package/app/components/agents/AgentRunModal.vue +154 -0
  40. package/app/components/agents/AgentStatsCards.vue +98 -0
  41. package/app/components/chat/ChatInput.vue +85 -0
  42. package/app/components/chat/ConversationList.vue +78 -0
  43. package/app/components/chat/MessageBubble.vue +81 -0
  44. package/app/components/chat/StreamingMessage.vue +36 -0
  45. package/app/components/chat/ToolCallBlock.vue +77 -0
  46. package/app/components/editor/CodeEditor.client.vue +212 -0
  47. package/app/components/editor/CodeEditorFallback.vue +12 -0
  48. package/app/components/editor/DocumentEditor.vue +326 -0
  49. package/app/components/editor/DocumentMetadata.vue +140 -0
  50. package/app/components/editor/MarkdownEditor.vue +146 -0
  51. package/app/components/files/FileTree.vue +436 -0
  52. package/app/components/hooks/HookActivityChart.client.vue +117 -0
  53. package/app/components/hooks/HookActivityChart.server.vue +25 -0
  54. package/app/components/hooks/HookStatsCards.vue +63 -0
  55. package/app/components/hooks/RecentEventsTable.vue +123 -0
  56. package/app/components/hooks/ToolBreakdownTable.vue +72 -0
  57. package/app/components/search/DashboardSearch.vue +122 -0
  58. package/app/components/tasks/ProjectSelect.vue +35 -0
  59. package/app/components/tasks/TaskCard.vue +182 -0
  60. package/app/components/tasks/TaskDetail.vue +160 -0
  61. package/app/components/tasks/TaskForm.vue +280 -0
  62. package/app/components/tasks/TaskList.vue +69 -0
  63. package/app/components/view/ViewToc.vue +85 -0
  64. package/app/composables/useAgents.ts +153 -0
  65. package/app/composables/useAuth.ts +73 -0
  66. package/app/composables/useChat.ts +298 -0
  67. package/app/composables/useDocument.ts +141 -0
  68. package/app/composables/useEditor.ts +100 -0
  69. package/app/composables/useFileTree.ts +220 -0
  70. package/app/composables/useHookEvents.ts +68 -0
  71. package/app/composables/useMemories.ts +83 -0
  72. package/app/composables/useNotificationBus.ts +154 -0
  73. package/app/composables/usePreferences.ts +131 -0
  74. package/app/composables/useProjects.ts +97 -0
  75. package/app/composables/useSearch.ts +52 -0
  76. package/app/composables/useTasks.ts +201 -0
  77. package/app/composables/useTerminal.ts +135 -0
  78. package/app/layouts/auth.vue +20 -0
  79. package/app/layouts/dashboard.vue +186 -0
  80. package/app/layouts/view.vue +60 -0
  81. package/app/middleware/auth.ts +9 -0
  82. package/app/pages/agents/[id].vue +602 -0
  83. package/app/pages/agents/index.vue +412 -0
  84. package/app/pages/chat.vue +146 -0
  85. package/app/pages/dashboard.vue +80 -0
  86. package/app/pages/docs.vue +131 -0
  87. package/app/pages/hooks.vue +163 -0
  88. package/app/pages/index.vue +249 -0
  89. package/app/pages/login.vue +60 -0
  90. package/app/pages/memories.vue +282 -0
  91. package/app/pages/settings.vue +625 -0
  92. package/app/pages/tasks.vue +312 -0
  93. package/app/pages/view/[uuid].vue +376 -0
  94. package/dist/cli/index.js +2711 -0
  95. package/drizzle.config.ts +10 -0
  96. package/nuxt.config.ts +98 -0
  97. package/package.json +107 -0
  98. package/server/api/agents/[id]/cancel.post.ts +27 -0
  99. package/server/api/agents/[id]/run.post.ts +34 -0
  100. package/server/api/agents/[id]/runs.get.ts +45 -0
  101. package/server/api/agents/[id]/stats.get.ts +94 -0
  102. package/server/api/agents/[id].delete.ts +29 -0
  103. package/server/api/agents/[id].get.ts +25 -0
  104. package/server/api/agents/[id].patch.ts +55 -0
  105. package/server/api/agents/index.get.ts +15 -0
  106. package/server/api/agents/index.post.ts +48 -0
  107. package/server/api/agents/stats.get.ts +86 -0
  108. package/server/api/auth/[...all].ts +5 -0
  109. package/server/api/conversations/[id].delete.ts +16 -0
  110. package/server/api/conversations/[id].get.ts +34 -0
  111. package/server/api/conversations/index.get.ts +17 -0
  112. package/server/api/documents/[id]/index.delete.ts +47 -0
  113. package/server/api/documents/[id]/index.put.ts +102 -0
  114. package/server/api/documents/[id]/public.get.ts +60 -0
  115. package/server/api/documents/[id]/restore.post.ts +65 -0
  116. package/server/api/documents/by-path.post.ts +168 -0
  117. package/server/api/documents/index.get.ts +48 -0
  118. package/server/api/fs/delete.post.ts +41 -0
  119. package/server/api/fs/list.get.ts +99 -0
  120. package/server/api/fs/mkdir.post.ts +44 -0
  121. package/server/api/fs/move.post.ts +68 -0
  122. package/server/api/fs/read.post.ts +48 -0
  123. package/server/api/fs/rename.post.ts +55 -0
  124. package/server/api/fs/write.post.ts +51 -0
  125. package/server/api/health.get.ts +40 -0
  126. package/server/api/home.get.ts +26 -0
  127. package/server/api/hooks/events/index.get.ts +56 -0
  128. package/server/api/hooks/events/index.post.ts +36 -0
  129. package/server/api/hooks/stats.get.ts +99 -0
  130. package/server/api/memory/[id].delete.ts +26 -0
  131. package/server/api/memory/context.get.ts +83 -0
  132. package/server/api/memory/extract.post.ts +42 -0
  133. package/server/api/memory/search.get.ts +70 -0
  134. package/server/api/memory/store.post.ts +31 -0
  135. package/server/api/projects/[id]/index.delete.ts +40 -0
  136. package/server/api/projects/[id]/index.get.ts +25 -0
  137. package/server/api/projects/[id]/index.put.ts +50 -0
  138. package/server/api/projects/index.get.ts +20 -0
  139. package/server/api/projects/index.post.ts +34 -0
  140. package/server/api/secrets/[key].delete.ts +31 -0
  141. package/server/api/secrets/[key].get.ts +30 -0
  142. package/server/api/secrets/[key].put.ts +52 -0
  143. package/server/api/secrets/index.get.ts +20 -0
  144. package/server/api/secrets/index.post.ts +58 -0
  145. package/server/api/tasks/[id]/index.delete.ts +46 -0
  146. package/server/api/tasks/[id]/index.get.ts +24 -0
  147. package/server/api/tasks/[id]/index.put.ts +70 -0
  148. package/server/api/tasks/[id]/restore.post.ts +49 -0
  149. package/server/api/tasks/index.get.ts +53 -0
  150. package/server/api/tasks/index.post.ts +47 -0
  151. package/server/api/tasks/tags.get.ts +21 -0
  152. package/server/api/user/email.patch.ts +56 -0
  153. package/server/db/index.ts +76 -0
  154. package/server/db/migrate.ts +41 -0
  155. package/server/db/schema.ts +345 -0
  156. package/server/db/seed.ts +46 -0
  157. package/server/db/types.ts +28 -0
  158. package/server/drizzle/migrations/0000_brown_george_stacy.sql +34 -0
  159. package/server/drizzle/migrations/0001_stormy_pyro.sql +16 -0
  160. package/server/drizzle/migrations/0002_clean_colossus.sql +50 -0
  161. package/server/drizzle/migrations/0003_fine_joystick.sql +12 -0
  162. package/server/drizzle/migrations/0004_tan_groot.sql +26 -0
  163. package/server/drizzle/migrations/0005_cloudy_lilith.sql +33 -0
  164. package/server/drizzle/migrations/0006_ordinary_retro_girl.sql +13 -0
  165. package/server/drizzle/migrations/0007_flowery_venus.sql +15 -0
  166. package/server/drizzle/migrations/0008_talented_zombie.sql +13 -0
  167. package/server/drizzle/migrations/0009_gray_shen.sql +15 -0
  168. package/server/drizzle/migrations/meta/0000_snapshot.json +230 -0
  169. package/server/drizzle/migrations/meta/0001_snapshot.json +306 -0
  170. package/server/drizzle/migrations/meta/0002_snapshot.json +615 -0
  171. package/server/drizzle/migrations/meta/0003_snapshot.json +730 -0
  172. package/server/drizzle/migrations/meta/0004_snapshot.json +916 -0
  173. package/server/drizzle/migrations/meta/0005_snapshot.json +1127 -0
  174. package/server/drizzle/migrations/meta/0006_snapshot.json +1213 -0
  175. package/server/drizzle/migrations/meta/0007_snapshot.json +1307 -0
  176. package/server/drizzle/migrations/meta/0008_snapshot.json +1390 -0
  177. package/server/drizzle/migrations/meta/0009_snapshot.json +1487 -0
  178. package/server/drizzle/migrations/meta/_journal.json +76 -0
  179. package/server/middleware/auth.ts +79 -0
  180. package/server/plugins/00.env-validate.ts +38 -0
  181. package/server/plugins/01.api-token.ts +31 -0
  182. package/server/plugins/02.database.ts +54 -0
  183. package/server/plugins/03.file-watcher.ts +65 -0
  184. package/server/plugins/04.cron-agents.ts +26 -0
  185. package/server/routes/_ws/chat.ts +252 -0
  186. package/server/routes/notifications.ts +47 -0
  187. package/server/routes/terminal.ts +98 -0
  188. package/server/services/agent-executor.ts +218 -0
  189. package/server/services/cron-scheduler.ts +78 -0
  190. package/server/services/memory-extractor.ts +120 -0
  191. package/server/utils/agent-cleanup.ts +91 -0
  192. package/server/utils/agent-registry.ts +95 -0
  193. package/server/utils/auth.ts +33 -0
  194. package/server/utils/chat-session-manager.ts +59 -0
  195. package/server/utils/crypto.ts +40 -0
  196. package/server/utils/db-guard.ts +12 -0
  197. package/server/utils/db-state.ts +63 -0
  198. package/server/utils/document-sync.ts +207 -0
  199. package/server/utils/frontmatter.ts +84 -0
  200. package/server/utils/notification-bus.ts +60 -0
  201. package/server/utils/path-validator.ts +55 -0
  202. package/server/utils/pty-manager.ts +130 -0
  203. package/shared/types/index.ts +604 -0
  204. package/shared/utils/language-detection.ts +87 -0
  205. package/tsconfig.json +10 -0
@@ -0,0 +1,282 @@
1
+ <script setup lang="ts">
2
+ import { formatDistanceToNow } from 'date-fns'
3
+ import { useDebounceFn } from '@vueuse/core'
4
+ import type { MemoryChunkType } from '~~/shared/types'
5
+
6
+ definePageMeta({
7
+ layout: 'dashboard',
8
+ middleware: 'auth'
9
+ })
10
+
11
+ const toast = useToast()
12
+ const { memories, loading, filters, stats, fetchMemories, deleteMemory } = useMemories()
13
+
14
+ // Delete confirmation
15
+ const showDeleteModal = ref(false)
16
+ const memoryToDelete = ref<string | null>(null)
17
+ const deleteLoading = ref(false)
18
+
19
+ // Type filter options
20
+ const ALL_VALUE = '__all__'
21
+ const typeOptions = [
22
+ { value: ALL_VALUE, label: 'All Types' },
23
+ { value: 'decision', label: 'Decisions' },
24
+ { value: 'fact', label: 'Facts' },
25
+ { value: 'solution', label: 'Solutions' },
26
+ { value: 'pattern', label: 'Patterns' },
27
+ { value: 'preference', label: 'Preferences' },
28
+ { value: 'summary', label: 'Summaries' }
29
+ ]
30
+
31
+ const typeFilter = ref(ALL_VALUE)
32
+ const searchQuery = ref('')
33
+
34
+ // Watch filters
35
+ watch(typeFilter, (value) => {
36
+ filters.chunkType = value === ALL_VALUE ? 'all' : value as MemoryChunkType
37
+ fetchMemories()
38
+ })
39
+
40
+ // Debounced search
41
+ const debouncedFetch = useDebounceFn(() => {
42
+ filters.query = searchQuery.value || undefined
43
+ fetchMemories()
44
+ }, 300)
45
+
46
+ watch(searchQuery, debouncedFetch)
47
+
48
+ // Delete handlers
49
+ function confirmDelete(id: string) {
50
+ memoryToDelete.value = id
51
+ showDeleteModal.value = true
52
+ }
53
+
54
+ async function handleDeleteConfirm() {
55
+ if (!memoryToDelete.value) return
56
+
57
+ deleteLoading.value = true
58
+ try {
59
+ await deleteMemory(memoryToDelete.value)
60
+ toast.add({ title: 'Memory deleted', color: 'success' })
61
+ showDeleteModal.value = false
62
+ } catch {
63
+ toast.add({ title: 'Failed to delete memory', color: 'error' })
64
+ } finally {
65
+ deleteLoading.value = false
66
+ memoryToDelete.value = null
67
+ }
68
+ }
69
+
70
+ // Type badge colors
71
+ function getTypeColor(type: string): 'primary' | 'success' | 'warning' | 'info' | 'neutral' {
72
+ switch (type) {
73
+ case 'decision': return 'primary'
74
+ case 'fact': return 'info'
75
+ case 'solution': return 'success'
76
+ case 'pattern': return 'warning'
77
+ case 'preference': return 'neutral'
78
+ case 'summary': return 'neutral'
79
+ default: return 'neutral'
80
+ }
81
+ }
82
+
83
+ // Type icons
84
+ function getTypeIcon(type: string): string {
85
+ switch (type) {
86
+ case 'decision': return 'i-lucide-git-branch'
87
+ case 'fact': return 'i-lucide-info'
88
+ case 'solution': return 'i-lucide-check-circle'
89
+ case 'pattern': return 'i-lucide-repeat'
90
+ case 'preference': return 'i-lucide-settings'
91
+ case 'summary': return 'i-lucide-file-text'
92
+ default: return 'i-lucide-circle'
93
+ }
94
+ }
95
+
96
+ // Format date
97
+ function formatTime(date: Date | string): string {
98
+ return formatDistanceToNow(new Date(date), { addSuffix: true })
99
+ }
100
+
101
+ // Table columns
102
+ const columns = [
103
+ { accessorKey: 'chunkType', header: 'Type' },
104
+ { accessorKey: 'content', header: 'Content' },
105
+ { accessorKey: 'relevanceScore', header: 'Relevance' },
106
+ { accessorKey: 'accessCount', header: 'Accessed' },
107
+ { accessorKey: 'createdAt', header: 'Created' },
108
+ { accessorKey: 'actions', header: '' }
109
+ ]
110
+
111
+ // Menu items for row actions
112
+ function getRowMenuItems(id: string) {
113
+ return [[{
114
+ label: 'Delete',
115
+ icon: 'i-lucide-trash-2',
116
+ color: 'error' as const,
117
+ onSelect: () => confirmDelete(id)
118
+ }]]
119
+ }
120
+
121
+ // Load on mount
122
+ onMounted(() => {
123
+ fetchMemories()
124
+ })
125
+ </script>
126
+
127
+ <template>
128
+ <div class="contents">
129
+ <UDashboardPanel
130
+ id="memories"
131
+ grow
132
+ >
133
+ <template #header>
134
+ <UDashboardNavbar title="Memories">
135
+ <template #leading>
136
+ <UBadge
137
+ v-if="stats.total > 0"
138
+ color="neutral"
139
+ variant="subtle"
140
+ class="ml-2"
141
+ >
142
+ {{ stats.total }}
143
+ </UBadge>
144
+ </template>
145
+ </UDashboardNavbar>
146
+
147
+ <UDashboardToolbar>
148
+ <template #left>
149
+ <USelect
150
+ v-model="typeFilter"
151
+ :items="typeOptions"
152
+ value-key="value"
153
+ class="w-40"
154
+ />
155
+ </template>
156
+ <template #right>
157
+ <UInput
158
+ v-model="searchQuery"
159
+ placeholder="Search memories..."
160
+ icon="i-lucide-search"
161
+ class="w-64"
162
+ />
163
+ </template>
164
+ </UDashboardToolbar>
165
+ </template>
166
+
167
+ <template #body>
168
+ <div class="p-4">
169
+ <!-- Loading -->
170
+ <div
171
+ v-if="loading"
172
+ class="space-y-3"
173
+ >
174
+ <USkeleton
175
+ v-for="i in 10"
176
+ :key="i"
177
+ class="h-12 w-full"
178
+ />
179
+ </div>
180
+
181
+ <!-- Empty state -->
182
+ <div
183
+ v-else-if="memories.length === 0"
184
+ class="flex flex-col items-center justify-center h-64 text-neutral-500"
185
+ >
186
+ <UIcon
187
+ name="i-lucide-brain"
188
+ class="w-12 h-12 mb-4"
189
+ />
190
+ <p class="text-lg font-medium">
191
+ No memories yet
192
+ </p>
193
+ <p class="text-sm text-center max-w-md mt-2">
194
+ Memories are automatically extracted from your Claude conversations.
195
+ They will appear here once extraction hooks are triggered.
196
+ </p>
197
+ </div>
198
+
199
+ <!-- Table -->
200
+ <UTable
201
+ v-else
202
+ :data="memories"
203
+ :columns="columns"
204
+ >
205
+ <template #chunkType-cell="{ row }">
206
+ <UBadge
207
+ :color="getTypeColor(row.original.chunkType)"
208
+ variant="subtle"
209
+ size="sm"
210
+ >
211
+ <UIcon
212
+ :name="getTypeIcon(row.original.chunkType)"
213
+ class="w-3 h-3 mr-1"
214
+ />
215
+ {{ row.original.chunkType }}
216
+ </UBadge>
217
+ </template>
218
+
219
+ <template #content-cell="{ row }">
220
+ <span
221
+ class="text-sm line-clamp-2"
222
+ :title="row.original.content"
223
+ >
224
+ {{ row.original.content }}
225
+ </span>
226
+ </template>
227
+
228
+ <template #relevanceScore-cell="{ row }">
229
+ <div class="flex items-center gap-2">
230
+ <div class="w-16 h-1.5 bg-neutral-200 dark:bg-neutral-700 rounded-full overflow-hidden">
231
+ <div
232
+ class="h-full bg-primary-500 rounded-full"
233
+ :style="{ width: `${row.original.relevanceScore * 100}%` }"
234
+ />
235
+ </div>
236
+ <span class="text-xs text-muted">
237
+ {{ (row.original.relevanceScore * 100).toFixed(0) }}%
238
+ </span>
239
+ </div>
240
+ </template>
241
+
242
+ <template #accessCount-cell="{ row }">
243
+ <span class="text-sm text-muted">
244
+ {{ row.original.accessCount }}x
245
+ </span>
246
+ </template>
247
+
248
+ <template #createdAt-cell="{ row }">
249
+ <span class="text-sm text-muted">
250
+ {{ formatTime(row.original.createdAt) }}
251
+ </span>
252
+ </template>
253
+
254
+ <template #actions-cell="{ row }">
255
+ <UDropdownMenu :items="getRowMenuItems(row.original.id)">
256
+ <UButton
257
+ icon="i-lucide-more-horizontal"
258
+ color="neutral"
259
+ variant="ghost"
260
+ size="xs"
261
+ />
262
+ </UDropdownMenu>
263
+ </template>
264
+ </UTable>
265
+ </div>
266
+ </template>
267
+ </UDashboardPanel>
268
+
269
+ <!-- Delete Confirmation Modal -->
270
+ <ConfirmModal
271
+ v-model:open="showDeleteModal"
272
+ title="Delete Memory"
273
+ description="Are you sure you want to delete this memory? This action cannot be undone."
274
+ confirm-label="Delete"
275
+ confirm-color="error"
276
+ icon="i-lucide-trash-2"
277
+ :loading="deleteLoading"
278
+ @confirm="handleDeleteConfirm"
279
+ @cancel="memoryToDelete = null"
280
+ />
281
+ </div>
282
+ </template>