Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
c2d1bdc
Refactored SQLite integration by removing fts5-sql-bundle and impleme…
TimRl Feb 10, 2026
79db469
Refactored the deactivate function to be asynchronous, improving erro…
TimRl Feb 10, 2026
de62911
Refactored SQLite index manager cleanup to be asynchronous, ensuring …
TimRl Feb 10, 2026
1b09be1
Merge branch 'main' into native-sql-write-fix
TimRl Feb 10, 2026
a7cc401
Enhance SQLiteIndexManager with production-grade PRAGMAs and integrit…
TimRl Feb 10, 2026
c8884a6
Refactored project structure by removing unused dictionary-related co…
TimRl Feb 11, 2026
d0f7696
Refactored smart edit functionality by replacing the SmartEdit comman…
TimRl Feb 11, 2026
a411d76
Merge branch 'main' into native-sql-write-fix
TimRl Feb 11, 2026
a0dc101
Added comprehensive test suite for native SQLite database layer
TimRl Feb 12, 2026
ab92ead
Updated .vscodeignore to allowlist specific output files and enhanced…
TimRl Feb 12, 2026
5a4422d
Refactored native SQLite binding initialization test to skip graceful…
TimRl Feb 12, 2026
e0a5c09
Refactored file synchronization process in FileSyncManager to optimiz…
TimRl Feb 12, 2026
f79d61f
Enhanced logging and error handling in SQLiteIndexManager and index c…
TimRl Feb 12, 2026
dc5ae2b
Restored window.vscodeApi global after spellcheck module removal (it …
TimRl Feb 13, 2026
358b0d2
Merge branch 'main' into native-sql-write-fix
TimRl Feb 14, 2026
8b3cbc9
Refactored event handling in Editor component to streamline LLM respo…
TimRl Feb 14, 2026
c000b24
Implemented periodic WAL checkpoints in FileSyncManager during large …
TimRl Feb 14, 2026
9d9ad1b
Updated FileSyncManager to ensure periodic WAL checkpoints occur when…
TimRl Feb 14, 2026
2ddca8f
Refactored FileSyncManager to improve error handling by logging actua…
TimRl Feb 14, 2026
432ab89
Refactored FileSyncManager to utilize the public API for updating syn…
TimRl Feb 14, 2026
3a575ef
Enhanced error handling and transaction management in FileSyncManager…
TimRl Feb 14, 2026
465816a
Added checks to prevent operations on closed SQLite databases in crea…
TimRl Feb 14, 2026
10c6ea3
Refactored SQLite schema management by centralizing schema definition…
TimRl Feb 14, 2026
dcf113c
Enhanced SQLiteIndexManager and CodexCellDocument for improved error …
TimRl Feb 14, 2026
4beb0e5
Enhanced error handling and logging in SQLiteIndexManager and CodexCe…
TimRl Feb 15, 2026
9c5f1ef
Refactored FileSyncManager and SQLiteIndexManager to utilize runInTra…
TimRl Feb 15, 2026
5fc49e9
Enhanced FileSyncManager to handle database shutdown scenarios gracef…
TimRl Feb 15, 2026
0a13a76
Refactored error handling in createIndexWithContext and SQLiteIndexMa…
TimRl Feb 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,11 @@ node_modules
/package-lock.json
pnpm-lock.yaml
__pycache__
webviews/editable-react-table/node_modules
/webviews/commentsWebview
.DS_Store
package-lock.json
.project/complete_drafts.txt
.project/indexes.sqlite
.project/dictionary.sqlite
.wdio-vscode-service
AGENTS.md
# TypeScript build cache
Expand Down
9 changes: 4 additions & 5 deletions .vscodeignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,21 @@
*
*/**

# Allowlist what we need
!out/**
!out/sqldb/**
# Allowlist what we need (only extension output, NOT test bundles)
!out/*.js
!out/*.js.map
!out/node_modules/**
!assets/**
# !servers/**

!webviews/codex-webviews/dist/**
!webviews/codex-webviews/src/assets/**
!webviews/editable-react-table/dist/**

!src/assets/reset.css
# vscode.css was removed in favor of Tailwind CSS
!src/assets/bible_data_with_vref_keys.json.gz
!**/*.svg
!node_modules/@vscode/codicons/dist/**
!node_modules/vscode-languageserver-textdocument
!node_modules/vscode-uri

!CHANGELOG.md
Expand Down
11 changes: 0 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ You can also use the "Create Codex Notebook" command to generate a new Codex Not
- **Search Passages**: View search passages to compare translations.
- **Comments**: Manage and view comments on your translations.
- **Scripture Explorer**: Navigate through your scripture files easily.
- **Dictionary Table**: Access a comprehensive dictionary for translation help.

### Configuration

Expand Down Expand Up @@ -85,16 +84,6 @@ codex-webviews % pnpm i
codex-webviews % pnpm run build:all


## build the editable-react-table
#FIXME: if you get this error -
# you may have to do:
# `pnpm add @types/react`
# `pnpm add @types/react-dom`
# and then run build command again
dictionary-side-panel % cd ../editable-react-table
editable-react-table % pnpm i
editable-react-table % pnpm run build

# Now, let's go back to the root of the project and start the extension
ChatSideBar % cd ../..
codex-editor % code . # this opens the project in VS Code, but you can also open it manually by opening VS Code and opening the extension folder you cloned
Expand Down
1 change: 0 additions & 1 deletion docs/AB_TESTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ A/B testing in Codex shows two translation suggestions side‑by‑side once in
Change these in VS Code Settings → Extensions → Codex Editor.

## Results & privacy
- Local log: Each choice is appended to `files/ab-test-results.jsonl` in your workspace (newline‑delimited JSON).
- Win rates: The editor may compute simple win‑rates by variant label and show them in the chooser.
- Network: If analytics posting is enabled in code, the extension may attempt to send anonymized A/B summaries to a configured endpoint. If your environment blocks network access, the extension continues without error.

Expand Down
18 changes: 1 addition & 17 deletions docs/merge-strategy.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,35 +21,19 @@ This document outlines the strategy for resolving merge conflicts in Codex proje

- **Files**:
- `metadata.json`
- `chat-threads.json`
- `files/chat_history.jsonl`
- `files/silver_path_memories.json`
- `files/smart_passages_memories.json`
- `.project/dictionary.sqlite`
- **Strategy**: Keep newest version (timestamp-based override)

### 3. Mergeable JSON Arrays

- **Files**:
- `.project/comments.json`
- `files/project.dictionary`
- **Strategy**:
1. Parse both versions as JSON arrays
2. Combine arrays
3. Deduplicate by thread ID and comment content
4. Preserve all unique threads and comments

### 4. Special JSON Merges

- **Files**:
- `files/smart_edits.json`
- **Strategy**:
1. Parse both versions
2. Merge based on edit timestamps
3. Preserve all unique edits
4. Deduplicate identical edit operations

### 5. Source Files (Read-only)
### 4. Source Files (Read-only)

- **Location**: `.project/sourceTexts/*.source`
- **Strategy**: Keep newest version (conflicts unlikely as these are typically read-only)
Expand Down
82 changes: 3 additions & 79 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "codex-editor-extension",
"displayName": "Codex Translation Editor",
"description": "Support for `.codex` notebooks and translation source files. Includes Codex Language Server for translation drafting and checking diagnostics and features.",
"description": "Support for `.codex` notebooks and translation source files.",
"publisher": "project-accelerate",
"homepage": "https://codex-editor.gitbook.io/",
"repository": {
Expand Down Expand Up @@ -114,20 +114,8 @@
]
},
"menus": {
"view/title": [
{
"command": "dictionaryTable.showDictionaryTable",
"when": "view == dictionaryTable",
"group": "navigation"
}
],
"view/item/context": [
{
"command": "dictionaryTable.showDictionaryTable",
"when": "view == dictionaryTable",
"group": "navigation"
}
],
"view/title": [],
"view/item/context": [],
"editor/title": [
{
"command": "codex-editor-extension.scm.stageAndCommitAll",
Expand Down Expand Up @@ -187,10 +175,6 @@
"title": "Migrate Audio Files (.x-m4a to .m4a)",
"category": "Codex Editor"
},
{
"command": "codex-editor-extension.JOSH_COMMAND",
"title": "JOSH_COMMAND"
},
{
"command": "codex-editor-extension.forceReindex",
"title": "Force Reindex",
Expand Down Expand Up @@ -262,10 +246,6 @@
"title": "Set Global Line Numbers",
"category": "Codex Project"
},
{
"command": "dictionaryTable.showDictionaryTable",
"title": "Dictionary Table: Show"
},
{
"command": "translationNotes.openTnEditor",
"title": "Open Translation Notes"
Expand Down Expand Up @@ -396,20 +376,6 @@
"command": "codex-editor-extension.getTargetCellByCellId",
"title": "Get Target Cell by Cell ID"
},
{
"command": "extension.lookupWord",
"title": "Look Up Word",
"category": "Dictionary"
},
{
"command": "extension.importWiktionaryJSONL",
"title": "Import Wiktionary"
},
{
"command": "frontier.showWordsView",
"title": "Frontier: View All Words",
"category": "Frontier"
},
{
"command": "codex-project-manager.openAISettings",
"title": "Open AI Settings",
Expand Down Expand Up @@ -627,11 +593,6 @@
"type": "string"
}
},
"codex-project-manager.spellcheckIsEnabled": {
"type": "boolean",
"default": false,
"description": "Enable or disable spellcheck for the project"
},
"codex-project-manager.autoSyncEnabled": {
"type": "boolean",
"default": true,
Expand Down Expand Up @@ -678,21 +639,6 @@
}
}
},
{
"title": "Codex Extension Server",
"properties": {
"codex-editor-extension-server.enable": {
"type": "boolean",
"default": true,
"description": "Enable or disable the Codex Extension feature."
},
"codex-editor-extension-server.primarySourceText": {
"type": "string",
"default": "",
"description": "The source text to use for the Codex Extension feature."
}
}
},
{
"title": "Codex Extension",
"properties": {
Expand Down Expand Up @@ -885,12 +831,6 @@
"default": false,
"description": "If activated, inline completion LLM prompts will be saved to the `copilot-messages.log` file in the project."
},
"codex-editor-extension.wordFrequencyThreshold": {
"title": "Word Frequency Threshold",
"type": "number",
"default": 50,
"description": "The minimum frequency of a word to be automatically added to the dictionary. Changing this value will trigger updates to the dictionary."
},
"codex-editor-extension.enableDoctrineGrading": {
"title": "Enable Doctrine Grading",
"type": "boolean",
Expand Down Expand Up @@ -1007,16 +947,6 @@
}
],
"priority": "default"
},
{
"viewType": "codex.dictionaryEditor",
"displayName": "Dictionary Editor",
"selector": [
{
"filenamePattern": "*.dictionary"
}
],
"priority": "default"
}
]
},
Expand Down Expand Up @@ -1074,7 +1004,6 @@
"crypto-browserify": "^3.12.1",
"encoding": "^0.1.13",
"eslint": "^7.27.0",
"fts5-sql-bundle": "^1.0.2",
"glob": "^7.1.4",
"html-loader": "^5.1.0",
"https-browserify": "^1.0.0",
Expand All @@ -1099,15 +1028,12 @@
"typescript": "^5.4.2",
"util": "^0.12.5",
"vm-browserify": "^1.1.2",
"vscode-languageserver": "^9.0.1",
"vscode-languageserver-textdocument": "^1.0.12",
"wdio-vscode-service": "^6.1.3",
"webdriverio": "^8.45.0",
"webpack": "^5.101.3",
"webpack-cli": "^6.0.1"
},
"dependencies": {
"@types/better-sqlite3": "^7.6.11",
"@types/csv-parse": "^1.2.5",
"@types/xml2js": "^0.4.14",
"@vscode/codicons": "^0.0.36",
Expand All @@ -1123,7 +1049,6 @@
"diff": "^7.0.0",
"events": "^3.3.0",
"fitty": "^2.4.2",
"fts5-sql-bundle": "^1.0.2",
"hog-features": "^1.0.0",
"i": "^0.3.7",
"immutability-helper": "^3.1.1",
Expand All @@ -1148,7 +1073,6 @@
"url": "^0.11.4",
"usfm-grammar": "^2.3.1",
"uuid": "^9.0.1",
"vscode-languageclient": "^9.0.1",
"vscode-uri": "^3.0.8",
"webvtt-parser": "^2.2.0",
"xlsx": "^0.18.5",
Expand Down
4 changes: 0 additions & 4 deletions sharedUtils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ export const removeHtmlTags = (content: string) => {
const footnotes = tempDiv.querySelectorAll('sup.footnote-marker, sup[data-footnote], sup');
footnotes.forEach(footnote => footnote.remove());

// Remove spell check markup
const spellCheckElements = tempDiv.querySelectorAll('.spell-check-error, .spell-check-suggestion, [class*="spell-check"]');
spellCheckElements.forEach(el => el.remove());

// Replace paragraph end tags with spaces to preserve word boundaries
tempDiv.innerHTML = tempDiv.innerHTML.replace(/<\/p>/gi, ' ');

Expand Down
29 changes: 0 additions & 29 deletions src/activationHelpers/contextAware/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,34 +129,6 @@ export async function registerCommands(context: vscode.ExtensionContext) {
}
);

const openDictionaryCommand = vscode.commands.registerCommand(
"codex-editor-extension.openDictionaryFile",
async () => {
const workspaceUri = vscode.workspace.workspaceFolders?.[0]?.uri;
if (!workspaceUri) {
vscode.window.showErrorMessage(
"No workspace found. Please open a workspace first."
);
return;
}
const dictionaryUri = vscode.Uri.joinPath(workspaceUri, "files", "project.dictionary");
try {
// Ensure the files directory and dictionary file exist
const filesUri = vscode.Uri.joinPath(workspaceUri, "files");
await vscode.workspace.fs.createDirectory(filesUri);
try {
await vscode.workspace.fs.stat(dictionaryUri);
} catch {
// Create the file if it doesn't exist
await vscode.workspace.fs.writeFile(dictionaryUri, new Uint8Array([]));
}
await vscode.commands.executeCommand("vscode.open", dictionaryUri);
} catch (error) {
vscode.window.showErrorMessage(`Failed to open dictionary: ${error}`);
}
}
);

const createCodexNotebookCommand = vscode.commands.registerCommand(
"codex-editor-extension.createCodexNotebook",
async () => {
Expand Down Expand Up @@ -374,7 +346,6 @@ export async function registerCommands(context: vscode.ExtensionContext) {
codexKernel,
openChapterCommand,
openFileCommand,
openDictionaryCommand,
createCodexNotebookCommand,
setEditorFontCommand,
exportCodexContentCommand,
Expand Down
Loading