@cryptiklemur/lattice 1.3.0 → 1.5.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/bun.lock +776 -2
- package/client/index.html +1 -13
- package/client/package.json +7 -1
- package/client/src/App.tsx +2 -0
- package/client/src/commands.ts +36 -0
- package/client/src/components/analytics/AnalyticsView.tsx +61 -0
- package/client/src/components/analytics/ChartCard.tsx +22 -0
- package/client/src/components/analytics/PeriodSelector.tsx +42 -0
- package/client/src/components/analytics/QuickStats.tsx +99 -0
- package/client/src/components/analytics/charts/CostAreaChart.tsx +83 -0
- package/client/src/components/analytics/charts/CostDistributionChart.tsx +62 -0
- package/client/src/components/analytics/charts/CostDonutChart.tsx +93 -0
- package/client/src/components/analytics/charts/CumulativeCostChart.tsx +62 -0
- package/client/src/components/analytics/charts/SessionBubbleChart.tsx +122 -0
- package/client/src/components/chat/AttachmentChips.tsx +116 -0
- package/client/src/components/chat/ChatInput.tsx +250 -73
- package/client/src/components/chat/ChatView.tsx +242 -10
- package/client/src/components/chat/CommandPalette.tsx +162 -0
- package/client/src/components/chat/Message.tsx +23 -2
- package/client/src/components/chat/PromptQuestion.tsx +271 -0
- package/client/src/components/chat/TodoCard.tsx +57 -0
- package/client/src/components/chat/ToolResultRenderer.tsx +2 -1
- package/client/src/components/chat/VoiceRecorder.tsx +85 -0
- package/client/src/components/dashboard/DashboardView.tsx +5 -0
- package/client/src/components/project-settings/ProjectMemory.tsx +12 -2
- package/client/src/components/project-settings/ProjectNotifications.tsx +48 -0
- package/client/src/components/project-settings/ProjectRules.tsx +10 -1
- package/client/src/components/project-settings/ProjectSettingsView.tsx +6 -0
- package/client/src/components/settings/Appearance.tsx +1 -0
- package/client/src/components/settings/ClaudeSettings.tsx +10 -0
- package/client/src/components/settings/Editor.tsx +123 -0
- package/client/src/components/settings/GlobalMcp.tsx +10 -1
- package/client/src/components/settings/GlobalMemory.tsx +19 -0
- package/client/src/components/settings/GlobalRules.tsx +149 -0
- package/client/src/components/settings/GlobalSkills.tsx +10 -0
- package/client/src/components/settings/Notifications.tsx +88 -0
- package/client/src/components/settings/SettingsView.tsx +12 -0
- package/client/src/components/settings/skill-shared.tsx +2 -1
- package/client/src/components/setup/SetupWizard.tsx +1 -1
- package/client/src/components/sidebar/NodeSettingsModal.tsx +23 -1
- package/client/src/components/sidebar/ProjectDropdown.tsx +176 -27
- package/client/src/components/sidebar/SettingsSidebar.tsx +11 -1
- package/client/src/components/sidebar/Sidebar.tsx +43 -2
- package/client/src/components/sidebar/UserIsland.tsx +18 -7
- package/client/src/components/ui/UpdatePrompt.tsx +47 -0
- package/client/src/components/workspace/FileBrowser.tsx +174 -0
- package/client/src/components/workspace/FileTree.tsx +129 -0
- package/client/src/components/workspace/FileViewer.tsx +211 -0
- package/client/src/components/workspace/NoteCard.tsx +119 -0
- package/client/src/components/workspace/NotesView.tsx +102 -0
- package/client/src/components/workspace/ScheduledTasksView.tsx +117 -0
- package/client/src/components/workspace/SplitPane.tsx +81 -0
- package/client/src/components/workspace/TabBar.tsx +185 -0
- package/client/src/components/workspace/TaskCard.tsx +158 -0
- package/client/src/components/workspace/TaskEditModal.tsx +114 -0
- package/client/src/components/{panels/Terminal.tsx → workspace/TerminalInstance.tsx} +50 -7
- package/client/src/components/workspace/TerminalView.tsx +110 -0
- package/client/src/components/workspace/WorkspaceView.tsx +116 -0
- package/client/src/hooks/useAnalytics.ts +75 -0
- package/client/src/hooks/useAttachments.ts +280 -0
- package/client/src/hooks/useEditorConfig.ts +28 -0
- package/client/src/hooks/useIdleDetection.ts +44 -0
- package/client/src/hooks/useInstallPrompt.ts +53 -0
- package/client/src/hooks/useNotifications.ts +54 -0
- package/client/src/hooks/useOnline.ts +6 -0
- package/client/src/hooks/useSession.ts +110 -4
- package/client/src/hooks/useSpinnerVerb.ts +36 -0
- package/client/src/hooks/useSwipeDrawer.ts +275 -0
- package/client/src/hooks/useVoiceRecorder.ts +123 -0
- package/client/src/hooks/useWorkspace.ts +48 -0
- package/client/src/providers/WebSocketProvider.tsx +18 -0
- package/client/src/router.tsx +52 -20
- package/client/src/stores/analytics.ts +54 -0
- package/client/src/stores/session.ts +136 -0
- package/client/src/stores/sidebar.ts +11 -2
- package/client/src/stores/workspace.ts +254 -0
- package/client/src/styles/global.css +123 -0
- package/client/src/utils/editorUrl.ts +62 -0
- package/client/vite.config.ts +54 -1
- package/package.json +1 -1
- package/server/src/analytics/engine.ts +491 -0
- package/server/src/daemon.ts +12 -1
- package/server/src/features/scheduler.ts +23 -0
- package/server/src/features/sticky-notes.ts +5 -3
- package/server/src/handlers/analytics.ts +34 -0
- package/server/src/handlers/attachment.ts +172 -0
- package/server/src/handlers/chat.ts +43 -2
- package/server/src/handlers/editor.ts +40 -0
- package/server/src/handlers/fs.ts +10 -2
- package/server/src/handlers/memory.ts +3 -0
- package/server/src/handlers/notes.ts +4 -2
- package/server/src/handlers/scheduler.ts +18 -1
- package/server/src/handlers/session.ts +14 -8
- package/server/src/handlers/settings.ts +37 -2
- package/server/src/handlers/terminal.ts +13 -6
- package/server/src/project/pty-worker.cjs +83 -0
- package/server/src/project/sdk-bridge.ts +266 -11
- package/server/src/project/session.ts +4 -4
- package/server/src/project/terminal.ts +78 -34
- package/shared/src/analytics.ts +24 -0
- package/shared/src/index.ts +1 -0
- package/shared/src/messages.ts +173 -4
- package/shared/src/models.ts +27 -1
- package/shared/src/project-settings.ts +1 -1
- package/tp.js +19 -0
- package/client/public/manifest.json +0 -24
- package/client/public/sw.js +0 -61
- package/client/src/components/panels/FileBrowser.tsx +0 -241
- package/client/src/components/panels/StickyNotes.tsx +0 -187
package/shared/src/messages.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { AnalyticsPayload } from "./analytics.js";
|
|
1
2
|
import type {
|
|
2
|
-
Attachment,
|
|
3
3
|
FileEntry,
|
|
4
4
|
HistoryMessage,
|
|
5
5
|
LatticeConfig,
|
|
@@ -44,7 +44,7 @@ export interface SessionListRequestMessage {
|
|
|
44
44
|
export interface ChatSendMessage {
|
|
45
45
|
type: "chat:send";
|
|
46
46
|
text: string;
|
|
47
|
-
|
|
47
|
+
attachmentIds?: string[];
|
|
48
48
|
model?: string;
|
|
49
49
|
effort?: string;
|
|
50
50
|
}
|
|
@@ -71,14 +71,85 @@ export interface ChatSetPermissionModeMessage {
|
|
|
71
71
|
mode: "default" | "acceptEdits" | "plan" | "dontAsk";
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
+
export interface AttachmentChunkMessage {
|
|
75
|
+
type: "attachment:chunk";
|
|
76
|
+
attachmentId: string;
|
|
77
|
+
chunkIndex: number;
|
|
78
|
+
totalChunks: number;
|
|
79
|
+
data: string;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface AttachmentCompleteMessage {
|
|
83
|
+
type: "attachment:complete";
|
|
84
|
+
attachmentId: string;
|
|
85
|
+
attachmentType: "file" | "image" | "paste";
|
|
86
|
+
name: string;
|
|
87
|
+
mimeType: string;
|
|
88
|
+
size: number;
|
|
89
|
+
lineCount?: number;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export interface AttachmentProgressMessage {
|
|
93
|
+
type: "attachment:progress";
|
|
94
|
+
attachmentId: string;
|
|
95
|
+
received: number;
|
|
96
|
+
total: number;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export interface AttachmentErrorMessage {
|
|
100
|
+
type: "attachment:error";
|
|
101
|
+
attachmentId: string;
|
|
102
|
+
error: string;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export interface ChatPromptRequestMessage {
|
|
106
|
+
type: "chat:prompt_request";
|
|
107
|
+
requestId: string;
|
|
108
|
+
questions: Array<{
|
|
109
|
+
question: string;
|
|
110
|
+
header: string;
|
|
111
|
+
options: Array<{ label: string; description: string; preview?: string }>;
|
|
112
|
+
multiSelect: boolean;
|
|
113
|
+
}>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export interface ChatPromptResponseMessage {
|
|
117
|
+
type: "chat:prompt_response";
|
|
118
|
+
requestId: string;
|
|
119
|
+
answers: Record<string, string>;
|
|
120
|
+
annotations?: Record<string, { notes?: string; preview?: string }>;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export interface ChatPromptResolvedMessage {
|
|
124
|
+
type: "chat:prompt_resolved";
|
|
125
|
+
requestId: string;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export interface ChatTodoUpdateMessage {
|
|
129
|
+
type: "chat:todo_update";
|
|
130
|
+
todos: Array<{
|
|
131
|
+
id: string;
|
|
132
|
+
content: string;
|
|
133
|
+
status: "pending" | "in_progress" | "completed";
|
|
134
|
+
priority: "high" | "medium" | "low";
|
|
135
|
+
}>;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export interface ChatPlanModeMessage {
|
|
139
|
+
type: "chat:plan_mode";
|
|
140
|
+
active: boolean;
|
|
141
|
+
}
|
|
142
|
+
|
|
74
143
|
export interface FsListMessage {
|
|
75
144
|
type: "fs:list";
|
|
76
145
|
path: string;
|
|
146
|
+
projectSlug?: string;
|
|
77
147
|
}
|
|
78
148
|
|
|
79
149
|
export interface FsReadMessage {
|
|
80
150
|
type: "fs:read";
|
|
81
151
|
path: string;
|
|
152
|
+
projectSlug?: string;
|
|
82
153
|
}
|
|
83
154
|
|
|
84
155
|
export interface FsWriteMessage {
|
|
@@ -89,6 +160,7 @@ export interface FsWriteMessage {
|
|
|
89
160
|
|
|
90
161
|
export interface TerminalCreateMessage {
|
|
91
162
|
type: "terminal:create";
|
|
163
|
+
projectSlug?: string;
|
|
92
164
|
}
|
|
93
165
|
|
|
94
166
|
export interface TerminalInputMessage {
|
|
@@ -168,13 +240,23 @@ export interface SchedulerToggleMessage {
|
|
|
168
240
|
taskId: string;
|
|
169
241
|
}
|
|
170
242
|
|
|
243
|
+
export interface SchedulerUpdateMessage {
|
|
244
|
+
type: "scheduler:update";
|
|
245
|
+
taskId: string;
|
|
246
|
+
name?: string;
|
|
247
|
+
prompt?: string;
|
|
248
|
+
cron?: string;
|
|
249
|
+
}
|
|
250
|
+
|
|
171
251
|
export interface NotesListMessage {
|
|
172
252
|
type: "notes:list";
|
|
253
|
+
projectSlug?: string;
|
|
173
254
|
}
|
|
174
255
|
|
|
175
256
|
export interface NotesCreateMessage {
|
|
176
257
|
type: "notes:create";
|
|
177
258
|
content: string;
|
|
259
|
+
projectSlug?: string;
|
|
178
260
|
}
|
|
179
261
|
|
|
180
262
|
export interface NotesUpdateMessage {
|
|
@@ -256,6 +338,24 @@ export interface BrowseSuggestionsMessage {
|
|
|
256
338
|
type: "browse:suggestions";
|
|
257
339
|
}
|
|
258
340
|
|
|
341
|
+
export interface EditorOpenMessage {
|
|
342
|
+
type: "editor:open";
|
|
343
|
+
path: string;
|
|
344
|
+
line?: number;
|
|
345
|
+
projectSlug?: string;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
export interface EditorDetectMessage {
|
|
349
|
+
type: "editor:detect";
|
|
350
|
+
editorType: string;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export interface EditorDetectResultMessage {
|
|
354
|
+
type: "editor:detect_result";
|
|
355
|
+
editorType: string;
|
|
356
|
+
path: string | null;
|
|
357
|
+
}
|
|
358
|
+
|
|
259
359
|
export interface ProjectSettingsGetMessage {
|
|
260
360
|
type: "project-settings:get";
|
|
261
361
|
projectSlug: string;
|
|
@@ -280,12 +380,42 @@ export interface ProjectSettingsErrorMessage {
|
|
|
280
380
|
message: string;
|
|
281
381
|
}
|
|
282
382
|
|
|
383
|
+
export interface SessionStopExternalMessage {
|
|
384
|
+
type: "session:stop_external";
|
|
385
|
+
sessionId: string;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
export interface AnalyticsRequestMessage {
|
|
389
|
+
type: "analytics:request";
|
|
390
|
+
requestId: string;
|
|
391
|
+
scope: "global" | "project" | "session";
|
|
392
|
+
projectSlug?: string;
|
|
393
|
+
sessionId?: string;
|
|
394
|
+
period: "24h" | "7d" | "30d" | "90d" | "all";
|
|
395
|
+
forceRefresh?: boolean;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
export interface AnalyticsDataMessage {
|
|
399
|
+
type: "analytics:data";
|
|
400
|
+
requestId: string;
|
|
401
|
+
scope: "global" | "project" | "session";
|
|
402
|
+
period: "24h" | "7d" | "30d" | "90d" | "all";
|
|
403
|
+
data: AnalyticsPayload;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
export interface AnalyticsErrorMessage {
|
|
407
|
+
type: "analytics:error";
|
|
408
|
+
scope: "global" | "project" | "session";
|
|
409
|
+
message: string;
|
|
410
|
+
}
|
|
411
|
+
|
|
283
412
|
export type ClientMessage =
|
|
284
413
|
| SessionCreateMessage
|
|
285
414
|
| SessionActivateMessage
|
|
286
415
|
| SessionRenameMessage
|
|
287
416
|
| SessionDeleteMessage
|
|
288
417
|
| SessionListRequestMessage
|
|
418
|
+
| SessionStopExternalMessage
|
|
289
419
|
| ChatSendMessage
|
|
290
420
|
| ChatPermissionResponseMessage
|
|
291
421
|
| ChatRewindMessage
|
|
@@ -309,12 +439,15 @@ export type ClientMessage =
|
|
|
309
439
|
| SchedulerCreateMessage
|
|
310
440
|
| SchedulerDeleteMessage
|
|
311
441
|
| SchedulerToggleMessage
|
|
442
|
+
| SchedulerUpdateMessage
|
|
312
443
|
| NotesListMessage
|
|
313
444
|
| NotesCreateMessage
|
|
314
445
|
| NotesUpdateMessage
|
|
315
446
|
| NotesDeleteMessage
|
|
316
447
|
| SkillsListRequestMessage
|
|
317
448
|
| ChatSetPermissionModeMessage
|
|
449
|
+
| AttachmentChunkMessage
|
|
450
|
+
| AttachmentCompleteMessage
|
|
318
451
|
| ProjectSettingsGetMessage
|
|
319
452
|
| ProjectSettingsUpdateMessage
|
|
320
453
|
| SessionListAllRequestMessage
|
|
@@ -328,7 +461,11 @@ export type ClientMessage =
|
|
|
328
461
|
| MemoryViewMessage
|
|
329
462
|
| MemorySaveMessage
|
|
330
463
|
| MemoryDeleteMessage
|
|
331
|
-
| BrowseSuggestionsMessage
|
|
464
|
+
| BrowseSuggestionsMessage
|
|
465
|
+
| EditorOpenMessage
|
|
466
|
+
| EditorDetectMessage
|
|
467
|
+
| ChatPromptResponseMessage
|
|
468
|
+
| AnalyticsRequestMessage;
|
|
332
469
|
|
|
333
470
|
export interface SessionListMessage {
|
|
334
471
|
type: "session:list";
|
|
@@ -348,6 +485,13 @@ export interface SessionHistoryMessage {
|
|
|
348
485
|
messages: HistoryMessage[];
|
|
349
486
|
title?: string;
|
|
350
487
|
interrupted?: boolean;
|
|
488
|
+
busy?: boolean;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
export interface SessionBusyMessage {
|
|
492
|
+
type: "session:busy";
|
|
493
|
+
sessionId: string;
|
|
494
|
+
busy: boolean;
|
|
351
495
|
}
|
|
352
496
|
|
|
353
497
|
export interface ChatUserMessage {
|
|
@@ -380,6 +524,11 @@ export interface ChatDoneMessage {
|
|
|
380
524
|
duration: number;
|
|
381
525
|
}
|
|
382
526
|
|
|
527
|
+
export interface ChatPromptSuggestionMessage {
|
|
528
|
+
type: "chat:prompt_suggestion";
|
|
529
|
+
suggestion: string;
|
|
530
|
+
}
|
|
531
|
+
|
|
383
532
|
export interface ChatErrorMessage {
|
|
384
533
|
type: "chat:error";
|
|
385
534
|
message: string;
|
|
@@ -502,6 +651,9 @@ export interface SettingsDataMessage {
|
|
|
502
651
|
config: LatticeConfig;
|
|
503
652
|
mcpServers?: Record<string, McpServerConfig>;
|
|
504
653
|
globalSkills?: SkillInfo[];
|
|
654
|
+
globalRules?: Array<{ filename: string; content: string }>;
|
|
655
|
+
spinnerVerbs?: string[];
|
|
656
|
+
wslDistro?: string;
|
|
505
657
|
}
|
|
506
658
|
|
|
507
659
|
export interface LoopStatusMessage {
|
|
@@ -531,6 +683,11 @@ export interface SchedulerTaskCreatedMessage {
|
|
|
531
683
|
task: ScheduledTask;
|
|
532
684
|
}
|
|
533
685
|
|
|
686
|
+
export interface SchedulerTaskUpdatedMessage {
|
|
687
|
+
type: "scheduler:task_updated";
|
|
688
|
+
task: ScheduledTask;
|
|
689
|
+
}
|
|
690
|
+
|
|
534
691
|
export interface NotesListResultMessage {
|
|
535
692
|
type: "notes:list_result";
|
|
536
693
|
notes: StickyNote[];
|
|
@@ -641,11 +798,13 @@ export type ServerMessage =
|
|
|
641
798
|
| SessionListMessage
|
|
642
799
|
| SessionCreatedMessage
|
|
643
800
|
| SessionHistoryMessage
|
|
801
|
+
| SessionBusyMessage
|
|
644
802
|
| ChatUserMessage
|
|
645
803
|
| ChatDeltaMessage
|
|
646
804
|
| ChatToolStartMessage
|
|
647
805
|
| ChatToolResultMessage
|
|
648
806
|
| ChatDoneMessage
|
|
807
|
+
| ChatPromptSuggestionMessage
|
|
649
808
|
| ChatErrorMessage
|
|
650
809
|
| ChatPermissionRequestMessage
|
|
651
810
|
| ChatStatusMessage
|
|
@@ -669,6 +828,7 @@ export type ServerMessage =
|
|
|
669
828
|
| LoopDeltaMessage
|
|
670
829
|
| SchedulerTasksMessage
|
|
671
830
|
| SchedulerTaskCreatedMessage
|
|
831
|
+
| SchedulerTaskUpdatedMessage
|
|
672
832
|
| NotesListResultMessage
|
|
673
833
|
| NoteCreatedMessage
|
|
674
834
|
| NoteUpdatedMessage
|
|
@@ -687,7 +847,16 @@ export type ServerMessage =
|
|
|
687
847
|
| MemoryViewResultMessage
|
|
688
848
|
| MemorySaveResultMessage
|
|
689
849
|
| MemoryDeleteResultMessage
|
|
690
|
-
| BrowseSuggestionsResultMessage
|
|
850
|
+
| BrowseSuggestionsResultMessage
|
|
851
|
+
| EditorDetectResultMessage
|
|
852
|
+
| AttachmentProgressMessage
|
|
853
|
+
| AttachmentErrorMessage
|
|
854
|
+
| ChatPromptRequestMessage
|
|
855
|
+
| ChatPromptResolvedMessage
|
|
856
|
+
| ChatTodoUpdateMessage
|
|
857
|
+
| ChatPlanModeMessage
|
|
858
|
+
| AnalyticsDataMessage
|
|
859
|
+
| AnalyticsErrorMessage;
|
|
691
860
|
|
|
692
861
|
export interface MeshHelloMessage {
|
|
693
862
|
type: "mesh:hello";
|
package/shared/src/models.ts
CHANGED
|
@@ -20,6 +20,7 @@ export interface ProjectSummary {
|
|
|
20
20
|
export interface ProjectInfo extends ProjectSummary {
|
|
21
21
|
nodeName: string;
|
|
22
22
|
isRemote: boolean;
|
|
23
|
+
ideProjectName?: string;
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
export interface SessionSummary {
|
|
@@ -40,9 +41,12 @@ export interface FileEntry {
|
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
export interface Attachment {
|
|
43
|
-
type: "file" | "image";
|
|
44
|
+
type: "file" | "image" | "paste";
|
|
44
45
|
name: string;
|
|
45
46
|
content: string;
|
|
47
|
+
mimeType?: string;
|
|
48
|
+
size: number;
|
|
49
|
+
lineCount?: number;
|
|
46
50
|
}
|
|
47
51
|
|
|
48
52
|
export interface HistoryMessage {
|
|
@@ -63,6 +67,20 @@ export interface HistoryMessage {
|
|
|
63
67
|
model?: string;
|
|
64
68
|
costEstimate?: number;
|
|
65
69
|
duration?: number;
|
|
70
|
+
promptQuestions?: Array<{
|
|
71
|
+
question: string;
|
|
72
|
+
header: string;
|
|
73
|
+
options: Array<{ label: string; description: string; preview?: string }>;
|
|
74
|
+
multiSelect: boolean;
|
|
75
|
+
}>;
|
|
76
|
+
promptAnswers?: Record<string, string>;
|
|
77
|
+
promptStatus?: "pending" | "answered" | "timed_out";
|
|
78
|
+
todos?: Array<{
|
|
79
|
+
id: string;
|
|
80
|
+
content: string;
|
|
81
|
+
status: "pending" | "in_progress" | "completed";
|
|
82
|
+
priority: "high" | "medium" | "low";
|
|
83
|
+
}>;
|
|
66
84
|
}
|
|
67
85
|
|
|
68
86
|
export interface PeerInfo {
|
|
@@ -87,6 +105,13 @@ export interface LatticeConfig {
|
|
|
87
105
|
env: Record<string, string>;
|
|
88
106
|
icon?: ProjectIcon;
|
|
89
107
|
}>;
|
|
108
|
+
editor?: {
|
|
109
|
+
type: "vscode" | "vscode-insiders" | "cursor" | "webstorm" | "intellij" | "pycharm" | "goland" | "notepad++" | "sublime" | "custom";
|
|
110
|
+
paths?: Record<string, string>;
|
|
111
|
+
customCommand?: string;
|
|
112
|
+
};
|
|
113
|
+
setupComplete?: boolean;
|
|
114
|
+
wsl?: boolean | "auto";
|
|
90
115
|
}
|
|
91
116
|
|
|
92
117
|
export interface StickyNote {
|
|
@@ -94,6 +119,7 @@ export interface StickyNote {
|
|
|
94
119
|
content: string;
|
|
95
120
|
createdAt: number;
|
|
96
121
|
updatedAt: number;
|
|
122
|
+
projectSlug?: string;
|
|
97
123
|
}
|
|
98
124
|
|
|
99
125
|
export interface ScheduledTask {
|
|
@@ -15,7 +15,7 @@ export type McpServerConfig =
|
|
|
15
15
|
| { type: "sse"; url: string; headers?: Record<string, string> };
|
|
16
16
|
|
|
17
17
|
export type ProjectSettingsSection =
|
|
18
|
-
| "general" | "claude" | "environment" | "mcp" | "skills" | "rules" | "permissions" | "memory";
|
|
18
|
+
| "general" | "claude" | "environment" | "mcp" | "skills" | "rules" | "permissions" | "memory" | "notifications";
|
|
19
19
|
|
|
20
20
|
export interface ProjectSettings {
|
|
21
21
|
title: string;
|
package/tp.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
var p = Bun.spawn(["bun", "run", "/home/aequasi/projects/cryptiklemur/lattice/server/src/project/pty-worker.js"], {
|
|
2
|
+
stdin: "pipe", stdout: "pipe", stderr: "pipe", cwd: "/tmp"
|
|
3
|
+
});
|
|
4
|
+
async function readOut() {
|
|
5
|
+
var d = new TextDecoder();
|
|
6
|
+
var rd = p.stdout.getReader();
|
|
7
|
+
while (true) { var x = await rd.read(); if (x.done) break; process.stdout.write("[OUT] " + d.decode(x.value)); }
|
|
8
|
+
}
|
|
9
|
+
async function readErr() {
|
|
10
|
+
var d = new TextDecoder();
|
|
11
|
+
var rd = p.stderr.getReader();
|
|
12
|
+
while (true) { var x = await rd.read(); if (x.done) break; process.stderr.write("[ERR] " + d.decode(x.value)); }
|
|
13
|
+
}
|
|
14
|
+
readOut();
|
|
15
|
+
readErr();
|
|
16
|
+
p.stdin.write('{"type":"create","cwd":"/tmp"}\n');
|
|
17
|
+
setTimeout(function() { p.stdin.write('{"type":"input","data":"echo hello\\r"}\n'); }, 1000);
|
|
18
|
+
setTimeout(function() { p.stdin.write('{"type":"kill"}\n'); }, 3000);
|
|
19
|
+
setTimeout(function() { process.exit(); }, 4000);
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Lattice",
|
|
3
|
-
"short_name": "Lattice",
|
|
4
|
-
"description": "Multi-machine agentic dashboard for Claude Code",
|
|
5
|
-
"display": "standalone",
|
|
6
|
-
"start_url": "/",
|
|
7
|
-
"scope": "/",
|
|
8
|
-
"theme_color": "#0d0d0d",
|
|
9
|
-
"background_color": "#0d0d0d",
|
|
10
|
-
"icons": [
|
|
11
|
-
{
|
|
12
|
-
"src": "/icons/icon-192.svg",
|
|
13
|
-
"sizes": "192x192",
|
|
14
|
-
"type": "image/svg+xml",
|
|
15
|
-
"purpose": "any maskable"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"src": "/icons/icon-512.svg",
|
|
19
|
-
"sizes": "512x512",
|
|
20
|
-
"type": "image/svg+xml",
|
|
21
|
-
"purpose": "any maskable"
|
|
22
|
-
}
|
|
23
|
-
]
|
|
24
|
-
}
|
package/client/public/sw.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
var CACHE_NAME = "lattice-v1";
|
|
2
|
-
var STATIC_ASSETS = [
|
|
3
|
-
"/",
|
|
4
|
-
"/manifest.json",
|
|
5
|
-
"/icons/icon-192.svg",
|
|
6
|
-
"/icons/icon-512.svg",
|
|
7
|
-
];
|
|
8
|
-
|
|
9
|
-
self.addEventListener("install", function (event) {
|
|
10
|
-
event.waitUntil(
|
|
11
|
-
caches.open(CACHE_NAME).then(function (cache) {
|
|
12
|
-
return cache.addAll(STATIC_ASSETS);
|
|
13
|
-
}).then(function () {
|
|
14
|
-
return self.skipWaiting();
|
|
15
|
-
})
|
|
16
|
-
);
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
self.addEventListener("activate", function (event) {
|
|
20
|
-
event.waitUntil(
|
|
21
|
-
caches.keys().then(function (keys) {
|
|
22
|
-
return Promise.all(
|
|
23
|
-
keys.filter(function (key) {
|
|
24
|
-
return key !== CACHE_NAME;
|
|
25
|
-
}).map(function (key) {
|
|
26
|
-
return caches.delete(key);
|
|
27
|
-
})
|
|
28
|
-
);
|
|
29
|
-
}).then(function () {
|
|
30
|
-
return self.clients.claim();
|
|
31
|
-
})
|
|
32
|
-
);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
self.addEventListener("fetch", function (event) {
|
|
36
|
-
var url = new URL(event.request.url);
|
|
37
|
-
|
|
38
|
-
if (url.pathname.startsWith("/ws") || url.pathname.startsWith("/auth")) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
if (event.request.method !== "GET") {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
event.respondWith(
|
|
47
|
-
caches.match(event.request).then(function (cached) {
|
|
48
|
-
var networkRequest = fetch(event.request).then(function (response) {
|
|
49
|
-
if (response && response.status === 200 && response.type === "basic") {
|
|
50
|
-
var clone = response.clone();
|
|
51
|
-
caches.open(CACHE_NAME).then(function (cache) {
|
|
52
|
-
cache.put(event.request, clone);
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
return response;
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
return cached || networkRequest;
|
|
59
|
-
})
|
|
60
|
-
);
|
|
61
|
-
});
|