diff options
Diffstat (limited to 'src')
37 files changed, 111 insertions, 0 deletions
diff --git a/src/main/compilationManager.ts b/src/main/compilationManager.ts index 8fbd946..72c0c5e 100644 --- a/src/main/compilationManager.ts +++ b/src/main/compilationManager.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // Manages temp directory for Overleaf socket-mode compilation import { join, basename } from 'path' import { writeFile, mkdir, rm } from 'fs/promises' diff --git a/src/main/fileSyncBridge.ts b/src/main/fileSyncBridge.ts index e0529cb..0bd24b0 100644 --- a/src/main/fileSyncBridge.ts +++ b/src/main/fileSyncBridge.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // Bidirectional file sync bridge: temp dir ↔ Overleaf via OT import { join } from 'path' import { readFile, writeFile, mkdir } from 'fs/promises' diff --git a/src/main/index.ts b/src/main/index.ts index 7fc1c4d..b543b46 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { app, BrowserWindow, ipcMain, dialog, shell, net } from 'electron' import { join, basename } from 'path' import { readFile, writeFile } from 'fs/promises' diff --git a/src/main/otClient.ts b/src/main/otClient.ts index 7985c66..dc6bb4c 100644 --- a/src/main/otClient.ts +++ b/src/main/otClient.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // OT state machine for main process (mirror of renderer otClient) import type { OtOp } from './otTypes' import { transformOps } from './otTransform' diff --git a/src/main/otTransform.ts b/src/main/otTransform.ts index 0d05450..f1c8331 100644 --- a/src/main/otTransform.ts +++ b/src/main/otTransform.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // OT transform functions for main process (mirror of renderer transform) import type { OtOp } from './otTypes' import { isInsert, isDelete, isComment } from './otTypes' diff --git a/src/main/otTypes.ts b/src/main/otTypes.ts index 8e9df9f..e4f0d07 100644 --- a/src/main/otTypes.ts +++ b/src/main/otTypes.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // OT type definitions for main process (mirror of renderer types) export interface InsertOp { diff --git a/src/main/overleafProtocol.ts b/src/main/overleafProtocol.ts index 49b06d7..884aff2 100644 --- a/src/main/overleafProtocol.ts +++ b/src/main/overleafProtocol.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // Socket.IO v0.9 protocol encoding/decoding export interface ParsedMessage { diff --git a/src/main/overleafSocket.ts b/src/main/overleafSocket.ts index 1a12260..811e433 100644 --- a/src/main/overleafSocket.ts +++ b/src/main/overleafSocket.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // Persistent Socket.IO v0.9 client for real-time Overleaf collaboration import { EventEmitter } from 'events' import WebSocket from 'ws' diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts index ccfa000..bc9d166 100644 --- a/src/preload/index.d.ts +++ b/src/preload/index.d.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import type { ElectronAPI } from './index' declare global { diff --git a/src/preload/index.ts b/src/preload/index.ts index ca7f098..d36c9e7 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { contextBridge, ipcRenderer } from 'electron' import { createHash } from 'crypto' diff --git a/src/renderer/src/App.css b/src/renderer/src/App.css index 2a681a5..760c333 100644 --- a/src/renderer/src/App.css +++ b/src/renderer/src/App.css @@ -1,3 +1,6 @@ +/* Copyright (c) 2026 Yuren Hao */ +/* Licensed under AGPL-3.0 - see LICENSE file */ + /* ── Reset & Base ─────────────────────────────────────────────── */ * { diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index fb24a36..88a351b 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { useState, useEffect, useCallback, useRef, Component, type ReactNode } from 'react' import { PanelGroup, Panel, PanelResizeHandle } from 'react-resizable-panels' import { useAppStore } from './stores/appStore' diff --git a/src/renderer/src/components/ChatPanel.tsx b/src/renderer/src/components/ChatPanel.tsx index a0638bd..a4c5165 100644 --- a/src/renderer/src/components/ChatPanel.tsx +++ b/src/renderer/src/components/ChatPanel.tsx @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { useState, useEffect, useRef, useCallback } from 'react' import { useAppStore } from '../stores/appStore' diff --git a/src/renderer/src/components/Editor.tsx b/src/renderer/src/components/Editor.tsx index 362c705..649b238 100644 --- a/src/renderer/src/components/Editor.tsx +++ b/src/renderer/src/components/Editor.tsx @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { useEffect, useRef, useState, useCallback } from 'react' import { EditorView, keymap, lineNumbers, highlightActiveLine, highlightActiveLineGutter, drawSelection, rectangularSelection } from '@codemirror/view' import { EditorState } from '@codemirror/state' diff --git a/src/renderer/src/components/FileTree.tsx b/src/renderer/src/components/FileTree.tsx index e2f31f1..0dda560 100644 --- a/src/renderer/src/components/FileTree.tsx +++ b/src/renderer/src/components/FileTree.tsx @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { useState, useCallback, useEffect, useRef } from 'react' import { useAppStore, type FileNode } from '../stores/appStore' diff --git a/src/renderer/src/components/ModalProvider.tsx b/src/renderer/src/components/ModalProvider.tsx index 75572d5..df8084f 100644 --- a/src/renderer/src/components/ModalProvider.tsx +++ b/src/renderer/src/components/ModalProvider.tsx @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { useState, useEffect, useRef } from 'react' import { useModalStore } from '../hooks/useModal' diff --git a/src/renderer/src/components/PdfViewer.tsx b/src/renderer/src/components/PdfViewer.tsx index cbfc857..d4c5558 100644 --- a/src/renderer/src/components/PdfViewer.tsx +++ b/src/renderer/src/components/PdfViewer.tsx @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { useEffect, useRef, useState, useCallback } from 'react' import * as pdfjsLib from 'pdfjs-dist' import { useAppStore } from '../stores/appStore' diff --git a/src/renderer/src/components/ProjectList.tsx b/src/renderer/src/components/ProjectList.tsx index ea71f2b..d5b382c 100644 --- a/src/renderer/src/components/ProjectList.tsx +++ b/src/renderer/src/components/ProjectList.tsx @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { useState, useEffect, useCallback, useMemo } from 'react' import { useAppStore } from '../stores/appStore' diff --git a/src/renderer/src/components/ReviewPanel.tsx b/src/renderer/src/components/ReviewPanel.tsx index fe94867..7edac50 100644 --- a/src/renderer/src/components/ReviewPanel.tsx +++ b/src/renderer/src/components/ReviewPanel.tsx @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { useState, useEffect, useCallback, useRef } from 'react' import { useAppStore } from '../stores/appStore' diff --git a/src/renderer/src/components/StatusBar.tsx b/src/renderer/src/components/StatusBar.tsx index f24e6d6..5b91833 100644 --- a/src/renderer/src/components/StatusBar.tsx +++ b/src/renderer/src/components/StatusBar.tsx @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { useAppStore } from '../stores/appStore' export default function StatusBar() { diff --git a/src/renderer/src/components/Terminal.tsx b/src/renderer/src/components/Terminal.tsx index d84a00c..3781a53 100644 --- a/src/renderer/src/components/Terminal.tsx +++ b/src/renderer/src/components/Terminal.tsx @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { useEffect, useRef, useState } from 'react' import { Terminal as XTerm } from '@xterm/xterm' import { FitAddon } from '@xterm/addon-fit' diff --git a/src/renderer/src/components/Toolbar.tsx b/src/renderer/src/components/Toolbar.tsx index c847a9d..b480ede 100644 --- a/src/renderer/src/components/Toolbar.tsx +++ b/src/renderer/src/components/Toolbar.tsx @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { useAppStore } from '../stores/appStore' interface ToolbarProps { diff --git a/src/renderer/src/data/latexCommands.ts b/src/renderer/src/data/latexCommands.ts index 2e183b1..2e2dad7 100644 --- a/src/renderer/src/data/latexCommands.ts +++ b/src/renderer/src/data/latexCommands.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // Static LaTeX command/snippet completions // Each entry: [command, snippet (with $1 tab stops), detail] // Snippet syntax: $1, $2 etc are tab stops, ${1:placeholder} has default text diff --git a/src/renderer/src/data/latexEnvironments.ts b/src/renderer/src/data/latexEnvironments.ts index ff6fab6..2838ad5 100644 --- a/src/renderer/src/data/latexEnvironments.ts +++ b/src/renderer/src/data/latexEnvironments.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // Static LaTeX environment names for \begin{} completion // Each entry: [name, detail, snippet body (optional)] diff --git a/src/renderer/src/extensions/addCommentTooltip.ts b/src/renderer/src/extensions/addCommentTooltip.ts index dc60bb1..c56df90 100644 --- a/src/renderer/src/extensions/addCommentTooltip.ts +++ b/src/renderer/src/extensions/addCommentTooltip.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + /** * CodeMirror extension: "Add comment" tooltip on text selection. * Inspired by Overleaf's review-tooltip.ts. diff --git a/src/renderer/src/extensions/commentHighlights.ts b/src/renderer/src/extensions/commentHighlights.ts index 3994060..3215026 100644 --- a/src/renderer/src/extensions/commentHighlights.ts +++ b/src/renderer/src/extensions/commentHighlights.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + /** * CodeMirror extension for highlighting commented text ranges. * Inspired by Overleaf's ranges.ts — renders Decoration.mark for each comment diff --git a/src/renderer/src/extensions/latexAutocomplete.ts b/src/renderer/src/extensions/latexAutocomplete.ts index d5f8c75..a151876 100644 --- a/src/renderer/src/extensions/latexAutocomplete.ts +++ b/src/renderer/src/extensions/latexAutocomplete.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { autocompletion, type CompletionContext, diff --git a/src/renderer/src/extensions/otSyncExtension.ts b/src/renderer/src/extensions/otSyncExtension.ts index 7ff2203..c4171a3 100644 --- a/src/renderer/src/extensions/otSyncExtension.ts +++ b/src/renderer/src/extensions/otSyncExtension.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // CM6 extension for OT sync: ViewPlugin + annotation to prevent echo loops import { Annotation } from '@codemirror/state' import { ViewPlugin, type ViewUpdate } from '@codemirror/view' diff --git a/src/renderer/src/extensions/remoteCursors.ts b/src/renderer/src/extensions/remoteCursors.ts index 522d15d..cf07857 100644 --- a/src/renderer/src/extensions/remoteCursors.ts +++ b/src/renderer/src/extensions/remoteCursors.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // CM6 extension for rendering remote collaborator cursors import { StateEffect, StateField } from '@codemirror/state' import { Decoration, type DecorationSet, EditorView, WidgetType } from '@codemirror/view' diff --git a/src/renderer/src/hooks/useModal.ts b/src/renderer/src/hooks/useModal.ts index fdf6eb3..911f619 100644 --- a/src/renderer/src/hooks/useModal.ts +++ b/src/renderer/src/hooks/useModal.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { create } from 'zustand' interface ModalState { diff --git a/src/renderer/src/main.tsx b/src/renderer/src/main.tsx index 136bef2..e6e2ba9 100644 --- a/src/renderer/src/main.tsx +++ b/src/renderer/src/main.tsx @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import React from 'react' import ReactDOM from 'react-dom/client' import App from './App' diff --git a/src/renderer/src/ot/cmAdapter.ts b/src/renderer/src/ot/cmAdapter.ts index 852402d..87c23bf 100644 --- a/src/renderer/src/ot/cmAdapter.ts +++ b/src/renderer/src/ot/cmAdapter.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // Bidirectional conversion: CM6 ChangeSet <-> Overleaf OT ops import type { ChangeSet, Text, ChangeSpec } from '@codemirror/state' import type { OtOp, InsertOp, DeleteOp } from './types' diff --git a/src/renderer/src/ot/otClient.ts b/src/renderer/src/ot/otClient.ts index a491d23..4a0a873 100644 --- a/src/renderer/src/ot/otClient.ts +++ b/src/renderer/src/ot/otClient.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // OT state machine: Synchronized / AwaitingConfirm / AwaitingWithBuffer import type { OtOp, OtState } from './types' import { transformOps } from './transform' diff --git a/src/renderer/src/ot/overleafSync.ts b/src/renderer/src/ot/overleafSync.ts index e6169fc..787a458 100644 --- a/src/renderer/src/ot/overleafSync.ts +++ b/src/renderer/src/ot/overleafSync.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // Per-document orchestrator: ties CM6 adapter to OT client, IPC bridge import type { EditorView } from '@codemirror/view' import { ChangeSet, Transaction, type Text } from '@codemirror/state' diff --git a/src/renderer/src/ot/transform.ts b/src/renderer/src/ot/transform.ts index 846e312..d416a4a 100644 --- a/src/renderer/src/ot/transform.ts +++ b/src/renderer/src/ot/transform.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // OT transform functions for Overleaf's text operation format import type { OtOp } from './types' import { isInsert, isDelete, isComment } from './types' diff --git a/src/renderer/src/ot/types.ts b/src/renderer/src/ot/types.ts index 2732e4f..34e3ff5 100644 --- a/src/renderer/src/ot/types.ts +++ b/src/renderer/src/ot/types.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + // OT type definitions for Overleaf's text operation format /** Insert text at position p */ diff --git a/src/renderer/src/stores/appStore.ts b/src/renderer/src/stores/appStore.ts index 867026c..9e1e141 100644 --- a/src/renderer/src/stores/appStore.ts +++ b/src/renderer/src/stores/appStore.ts @@ -1,3 +1,6 @@ +// Copyright (c) 2026 Yuren Hao +// Licensed under AGPL-3.0 - see LICENSE file + import { create } from 'zustand' export interface FileNode { |
