Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
68fdd54
Add project workspace and Git overview
abasiri Sep 4, 2026
0705984
Polish Project View session workflows
abasiri Sep 4, 2026
0c273b8
Add Project View screenshots and welcome modal
abasiri Sep 4, 2026
6c0f73d
Copy nested environment files into project worktrees
abasiri Sep 6, 2026
88b94d3
Track busy state for plain terminal sessions
abasiri Sep 6, 2026
abe79fb
Preserve deleted track names and optionally archive sessions
abasiri Sep 6, 2026
2801495
Add project-scoped search across active and archived sessions
abasiri Sep 6, 2026
b4cefd6
Keep message viewing inside the project workspace
abasiri Sep 6, 2026
39b5e01
Give sidebar session titles more room
abasiri Sep 6, 2026
9198b51
Preview images, PDFs, and isolated interactive HTML
abasiri Sep 6, 2026
7ac078e
Polish project setup controls and add Slack community links
abasiri Sep 6, 2026
19db3f0
docs: reorganize README and drop the Codex design doc
abasiri Sep 6, 2026
b531f3a
Hold the session list still, and polish tasks and project creation
abasiri Sep 6, 2026
fd65bf4
Point the Slack invite at the doctly-ai workspace
abasiri Sep 7, 2026
40315ec
Improve project file management and conversation search
abasiri Sep 9, 2026
d552284
Snooze a project until later, and fix submenu clicks
abasiri Sep 9, 2026
1a51511
Add scheduled tasks, PowerPoint previews, and terminal file links
abasiri Sep 12, 2026
b0c40aa
Merge main into worktree-project_view
abasiri Sep 12, 2026
9d65c24
Preserve repository instructions and retry missed schedule imports
abasiri Sep 12, 2026
d4764fb
Share session configuration with schedules and preserve legacy settings
abasiri Sep 13, 2026
4c2fce0
Add model and effort settings, a JSON reader, and recent project files
abasiri Sep 14, 2026
6d30892
Remove the Brief card from the project Overview
abasiri Sep 14, 2026
45f3427
Let the Projects list in the sidebar scroll
abasiri Sep 14, 2026
396ee8b
Show projects back from snooze with a violet dot
abasiri Sep 14, 2026
7004478
Tuck optional session settings under More options, and announce Snooze
abasiri Sep 15, 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
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ jobs:
- name: Install dependencies
run: npm ci

- name: Bundle CodeMirror
run: npm run bundle:codemirror
- name: Bundle editor and file previews
run: npm run bundle

- name: Build
run: npx electron-builder --${{ matrix.platform }} --publish never
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ dist/
*.db-wal
*.db-shm
public/codemirror-bundle.js
public/pptx-preview-bundle.js
public/pptx-preview-bundle.js.LEGAL.txt
public/jsonc-parser-bundle.js
.DS_Store
.idea/
*.pem
Expand Down
422 changes: 260 additions & 162 deletions README.md

Large diffs are not rendered by default.

Binary file added build/project-view-new-session-menu.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added build/project-view-overview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added build/project-view-plan.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added build/project-view-session.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added build/project-view-snooze.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 7 additions & 3 deletions claude-auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ function formatResetTime(value) {
}
if (isNaN(resetDate.getTime())) return null;
const now = new Date();
const diffMs = resetDate - now;

const hours = resetDate.getHours();
const minutes = resetDate.getMinutes();
Expand All @@ -77,8 +76,13 @@ function formatResetTime(value) {
const tz = Intl.DateTimeFormat('en', { timeZoneName: 'short' }).formatToParts(resetDate)
.find(p => p.type === 'timeZoneName')?.value || '';

if (diffMs < 0) return `${timeStr} (${tz})`;
if (diffMs < 24 * 60 * 60 * 1000) return `${timeStr} (${tz})`;
// Which calendar day it lands on, not how far away it is: a reset 8 hours
// from 11pm is tomorrow, and a bare "7am" would read as one that has passed.
// Rounded, so a DST day of 23 or 25 hours still counts as one day.
const startOfDay = d => { const x = new Date(d); x.setHours(0, 0, 0, 0); return x.getTime(); };
const days = Math.round((startOfDay(resetDate) - startOfDay(now)) / 86400000);
if (days === 0) return `${timeStr} (${tz})`;
if (days === 1) return `tomorrow at ${timeStr} (${tz})`;

const month = resetDate.toLocaleString('en', { month: 'short' });
const day = resetDate.getDate();
Expand Down
9 changes: 7 additions & 2 deletions codex-auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ function formatResetTime(value) {
}
if (isNaN(resetDate.getTime())) return null;
const now = new Date();
const diffMs = resetDate - now;

const hours = resetDate.getHours();
const minutes = resetDate.getMinutes();
Expand All @@ -57,7 +56,13 @@ function formatResetTime(value) {
const tz = Intl.DateTimeFormat('en', { timeZoneName: 'short' }).formatToParts(resetDate)
.find(p => p.type === 'timeZoneName')?.value || '';

if (diffMs < 24 * 60 * 60 * 1000) return `${timeStr} (${tz})`;
// Which calendar day it lands on, not how far away it is: a reset 8 hours
// from 11pm is tomorrow, and a bare "7am" would read as one that has passed.
// Rounded, so a DST day of 23 or 25 hours still counts as one day.
const startOfDay = d => { const x = new Date(d); x.setHours(0, 0, 0, 0); return x.getTime(); };
const days = Math.round((startOfDay(resetDate) - startOfDay(now)) / 86400000);
if (days === 0) return `${timeStr} (${tz})`;
if (days === 1) return `tomorrow at ${timeStr} (${tz})`;

const month = resetDate.toLocaleString('en', { month: 'short' });
const day = resetDate.getDate();
Expand Down
481 changes: 474 additions & 7 deletions db.js

Large diffs are not rendered by default.

Loading
Loading