summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/compilationManager.ts3
-rw-r--r--src/main/fileSyncBridge.ts3
-rw-r--r--src/main/index.ts3
-rw-r--r--src/main/otClient.ts3
-rw-r--r--src/main/otTransform.ts3
-rw-r--r--src/main/otTypes.ts3
-rw-r--r--src/main/overleafProtocol.ts3
-rw-r--r--src/main/overleafSocket.ts3
-rw-r--r--src/preload/index.d.ts3
-rw-r--r--src/preload/index.ts3
-rw-r--r--src/renderer/src/App.css3
-rw-r--r--src/renderer/src/App.tsx3
-rw-r--r--src/renderer/src/components/ChatPanel.tsx3
-rw-r--r--src/renderer/src/components/Editor.tsx3
-rw-r--r--src/renderer/src/components/FileTree.tsx3
-rw-r--r--src/renderer/src/components/ModalProvider.tsx3
-rw-r--r--src/renderer/src/components/PdfViewer.tsx3
-rw-r--r--src/renderer/src/components/ProjectList.tsx3
-rw-r--r--src/renderer/src/components/ReviewPanel.tsx3
-rw-r--r--src/renderer/src/components/StatusBar.tsx3
-rw-r--r--src/renderer/src/components/Terminal.tsx3
-rw-r--r--src/renderer/src/components/Toolbar.tsx3
-rw-r--r--src/renderer/src/data/latexCommands.ts3
-rw-r--r--src/renderer/src/data/latexEnvironments.ts3
-rw-r--r--src/renderer/src/extensions/addCommentTooltip.ts3
-rw-r--r--src/renderer/src/extensions/commentHighlights.ts3
-rw-r--r--src/renderer/src/extensions/latexAutocomplete.ts3
-rw-r--r--src/renderer/src/extensions/otSyncExtension.ts3
-rw-r--r--src/renderer/src/extensions/remoteCursors.ts3
-rw-r--r--src/renderer/src/hooks/useModal.ts3
-rw-r--r--src/renderer/src/main.tsx3
-rw-r--r--src/renderer/src/ot/cmAdapter.ts3
-rw-r--r--src/renderer/src/ot/otClient.ts3
-rw-r--r--src/renderer/src/ot/overleafSync.ts3
-rw-r--r--src/renderer/src/ot/transform.ts3
-rw-r--r--src/renderer/src/ot/types.ts3
-rw-r--r--src/renderer/src/stores/appStore.ts3
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 {