Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
589 commits
Select commit Hold shift + click to select a range
a9ddfde
feat(frontend): add monitor icon to Pythinker's Computer header
mohamed-elkholy95 Mar 21, 2026
087fe32
chore(backend): stage agent_service changes
mohamed-elkholy95 Mar 21, 2026
521273b
feat(frontend): add file attachments grid inside report card
mohamed-elkholy95 Mar 21, 2026
ac70fcf
fix(frontend): remove duplicate file attachments below report card
mohamed-elkholy95 Mar 21, 2026
e8024bd
refactor(frontend): separate file attachments grid from report card
mohamed-elkholy95 Mar 21, 2026
7a05f6b
feat(frontend): add bouncing dots animation to planning view
mohamed-elkholy95 Mar 22, 2026
cd568d7
fix(frontend): use sans-serif font for search result titles
mohamed-elkholy95 Mar 22, 2026
52ef0fc
fix(frontend): match Manus file grid design and fix serif font in report
mohamed-elkholy95 Mar 22, 2026
790bee6
fix(frontend): match Manus report card design exactly
mohamed-elkholy95 Mar 22, 2026
057a288
fix(frontend): hide h1 title in report card preview
mohamed-elkholy95 Mar 22, 2026
ac0ca3d
fix(frontend): show Author/Date metadata in report card preview
mohamed-elkholy95 Mar 22, 2026
b433e86
fix(frontend): prepend Author/Date metadata to report card preview
mohamed-elkholy95 Mar 22, 2026
22393c9
fix(sandbox): ensure /workspace tmpfs mount is applied on container r…
mohamed-elkholy95 Mar 22, 2026
7b503f9
fix(frontend): resolve TypeScript errors in LiveMiniPreview search re…
mohamed-elkholy95 Mar 22, 2026
440b22d
fix(frontend): handle session 404 gracefully on maintenance cleanup
mohamed-elkholy95 Mar 22, 2026
e33cd53
refactor(frontend): self-host Google Fonts to eliminate external depe…
mohamed-elkholy95 Mar 22, 2026
384e0d4
fix(backend): register skill_invoke tool event and suppress dev warni…
mohamed-elkholy95 Mar 22, 2026
68be61a
fix(browser): replace try-except-pass with contextlib.suppress (S110)
mohamed-elkholy95 Mar 22, 2026
2c6f118
feat(frontend): add self-hosted Libre Baskerville font
mohamed-elkholy95 Mar 22, 2026
fda9e1b
refactor(frontend): standardize app fonts to Libre Baskerville
mohamed-elkholy95 Mar 22, 2026
82f4c4a
refactor(frontend): switch default app font to Arial, keep Libre Bask…
mohamed-elkholy95 Mar 22, 2026
a7c24e8
fix(frontend): update LiveMiniPreview tests for refactored component
mohamed-elkholy95 Mar 22, 2026
1549c74
fix(backend): replace ternary with or-operator (FURB110)
mohamed-elkholy95 Mar 22, 2026
f07c0d4
chore(ci): bump ruff floor to >=0.15.7 in CI workflow
mohamed-elkholy95 Mar 22, 2026
4b36248
fix(security): resolve Trivy CVE findings in sandbox image
mohamed-elkholy95 Mar 22, 2026
3d0cc26
refactor(frontend): restructure LiveMiniPreview with direct-render pa…
mohamed-elkholy95 Mar 22, 2026
0e55270
refactor(frontend): make PlanningCard thinner to match TaskProgressBar
mohamed-elkholy95 Mar 22, 2026
1d0853d
feat(frontend): enhance PlannerActivityIndicator with richer animations
mohamed-elkholy95 Mar 22, 2026
955d9fb
refactor(frontend): replace running dot with PlannerActivityIndicator
mohamed-elkholy95 Mar 22, 2026
2d88f76
feat(frontend): make ReportModal editable with TipTap edit toggle
mohamed-elkholy95 Mar 22, 2026
bb86313
fix(frontend): hide PlanningCard when TaskProgressBar is visible
mohamed-elkholy95 Mar 22, 2026
d803d97
fix(frontend): use offsetWidth/Height in KonvaLiveStage to avoid doub…
mohamed-elkholy95 Mar 22, 2026
968207d
refactor(frontend): simplify ModelSettings and SearchSettings components
mohamed-elkholy95 Mar 22, 2026
312d102
fix(tests): resolve CI test failures and hanging embedding test
mohamed-elkholy95 Mar 22, 2026
22da7f2
fix(frontend): remove unused getDomain function (lint error)
mohamed-elkholy95 Mar 22, 2026
cfef6e2
refactor(frontend): match SearchContentView to blueprint design
mohamed-elkholy95 Mar 22, 2026
00f2fc6
fix(frontend): hide duplicate Planning header during streaming placeh…
mohamed-elkholy95 Mar 22, 2026
aece16c
fix(frontend): update TaskProgressBar test for renamed CSS class
mohamed-elkholy95 Mar 22, 2026
8457cc7
docs(readme): enhance README for discoverability and viral appeal
mohamed-elkholy95 Mar 22, 2026
12c78e5
fix(agents): prevent infinite text→inject→text loop in stuck detection
mohamed-elkholy95 Mar 22, 2026
97cbe73
fix(frontend): remove black accent bar from LiveMiniPreview dc-header
mohamed-elkholy95 Mar 22, 2026
42bde49
fix(security): bump urllib3 to >=2.6.3 for 3 HIGH CVEs
mohamed-elkholy95 Mar 22, 2026
4dd3a3e
fix(security): resolve Trivy scan failures in sandbox image
mohamed-elkholy95 Mar 22, 2026
2a6f5d9
fix(agents): return success=False for duplicate URL rejections in bro…
mohamed-elkholy95 Mar 22, 2026
e7f3589
fix(browser): add full-page innerText fallback for low-content extrac…
mohamed-elkholy95 Mar 22, 2026
ae28a15
fix(agents): add summarization recovery for empty final message after…
mohamed-elkholy95 Mar 22, 2026
8b0b610
fix(models): add enum coercion for sandbox_lifecycle_mode and researc…
mohamed-elkholy95 Mar 22, 2026
a6562e5
fix(agents): prevent [Previously called file_write] from leaking into…
mohamed-elkholy95 Mar 22, 2026
21f8af6
fix(agents): filter self-referential claims from grounding verification
mohamed-elkholy95 Mar 22, 2026
c46e121
fix(sandbox): resolve X11 cursor appearing in screencast frames
mohamed-elkholy95 Mar 22, 2026
c25b0d6
refactor(frontend): compact search results in LiveMiniPreview
mohamed-elkholy95 Mar 22, 2026
1186ecc
fix(a11y): resolve 5 Lighthouse accessibility violations
mohamed-elkholy95 Mar 22, 2026
546bf22
test(agents): add _file_write_report_cache to test fixture
mohamed-elkholy95 Mar 22, 2026
f8af142
fix(agents): detect HTML/XSS injection before file-path heuristic
mohamed-elkholy95 Mar 22, 2026
6cdb5e8
fix(agents): enforce input guardrail safety gate in plan-act flow
mohamed-elkholy95 Mar 22, 2026
20491b6
fix(frontend): prevent duplicate session creation on race condition
mohamed-elkholy95 Mar 22, 2026
cafc28f
fix(frontend): debounce sessionId reconnects in SandboxViewer
mohamed-elkholy95 Mar 22, 2026
b9920d4
fix(agents): lower salvage threshold and model-agnostic recovery for …
mohamed-elkholy95 Mar 22, 2026
dbee572
refactor(agents): remove unused InputRiskLevel import from plan-act flow
mohamed-elkholy95 Mar 22, 2026
3fedcd5
fix(frontend): compact PlanningCard into single-row pill layout
mohamed-elkholy95 Mar 22, 2026
6499b89
chore(frontend): remove unused nextTick import from SandboxViewer
mohamed-elkholy95 Mar 22, 2026
ebfc25b
fix(security): clean stale vendored dist-info from sandbox setuptools
mohamed-elkholy95 Mar 22, 2026
e8801e9
fix(security): remove stale pip/setuptools from backend image before …
mohamed-elkholy95 Mar 22, 2026
ba1c22b
fix(frontend): move activity dot to dc-header in LiveMiniPreview
mohamed-elkholy95 Mar 22, 2026
896d11e
fix(security): quote temp_file path in sandbox file write command
mohamed-elkholy95 Mar 22, 2026
00c1fe3
fix(frontend): complete activity dot header migration in LiveMiniPreview
mohamed-elkholy95 Mar 22, 2026
934d4d1
chore(security): add .trivyignore for backend and frontend images
mohamed-elkholy95 Mar 22, 2026
054bb7d
fix(browser): park cursor after every browser action to prevent scree…
mohamed-elkholy95 Mar 22, 2026
f3f61d3
fix(frontend): hide local cursor and agent overlays in view-only mode
mohamed-elkholy95 Mar 22, 2026
a725ebc
test(frontend): add SandboxViewer component test
mohamed-elkholy95 Mar 22, 2026
6d08ff9
fix(frontend): align PlanningCard tests with component message-priori…
mohamed-elkholy95 Mar 22, 2026
4a91b96
fix(grounding): add common_knowledge verdict to reduce false positives
mohamed-elkholy95 Mar 22, 2026
8add415
fix(sse): only use Redis stream IDs for Last-Event-ID resume cursor
mohamed-elkholy95 Mar 22, 2026
6235563
fix(screencast): prevent duplicate WebSocket connections on init
mohamed-elkholy95 Mar 22, 2026
34c3fc2
fix(sandbox): tune x11vnc to prevent X11 event queue buildup
mohamed-elkholy95 Mar 22, 2026
0b5de52
fix(sweep): skip workspace sweep when session directory doesn't exist
mohamed-elkholy95 Mar 22, 2026
e364225
fix(sandbox): log source IP on auth rejection for diagnostics
mohamed-elkholy95 Mar 22, 2026
0eddec8
fix(citations): instruct LLM to only reference inline-cited sources
mohamed-elkholy95 Mar 22, 2026
fc65e55
fix(output): sanitize [Previously called ...] markers from user output
mohamed-elkholy95 Mar 22, 2026
6504ab4
fix: remove autonomous browser cursor overlay
mohamed-elkholy95 Mar 22, 2026
c294beb
fix(agents): strip orphaned tool-call placeholders from report conten…
mohamed-elkholy95 Mar 22, 2026
ae3a639
fix(frontend): strip context-compression placeholders from report events
mohamed-elkholy95 Mar 22, 2026
73ed183
style(agents): apply ruff format to placeholder stripping block
mohamed-elkholy95 Mar 22, 2026
46ba05f
fix(frontend): only store Redis stream IDs as SSE resume cursors
mohamed-elkholy95 Mar 22, 2026
dfe27b1
fix(agents): rewrite unsupported claims instead of only appending dis…
mohamed-elkholy95 Mar 22, 2026
b02fdc7
fix(frontend): debounce all screencast WebSocket reconnection triggers
mohamed-elkholy95 Mar 22, 2026
8d28fb0
fix(sandbox): suppress Chromium SharedImageManager GPU compositing noise
mohamed-elkholy95 Mar 22, 2026
afc8f8b
fix(security): add jaraco.context CVE-2026-23949 to sandbox trivyignore
mohamed-elkholy95 Mar 22, 2026
dc1daf1
chore(ci): upgrade GitHub Actions to Node.js 24 compatible versions
mohamed-elkholy95 Mar 22, 2026
fd14a19
fix(sse): prevent retry storm on terminal sessions
mohamed-elkholy95 Mar 22, 2026
d547e8c
fix(agents): improve empty final message recovery with JSON salvage
mohamed-elkholy95 Mar 22, 2026
fe3aa03
fix(sandbox): add --disable-gpu flag to suppress SharedImageManager e…
mohamed-elkholy95 Mar 22, 2026
cb6beb5
fix(frontend): add terminal-state guards to screencast reconnection
mohamed-elkholy95 Mar 22, 2026
7d8ffdc
fix(backend): reject screencast requests for terminal sessions
mohamed-elkholy95 Mar 22, 2026
eda185e
fix(sandbox): drain X11 event queue on screencast session teardown
mohamed-elkholy95 Mar 22, 2026
f9b8869
fix(sandbox): suppress STUN DNS resolution errors in Chrome stderr fi…
mohamed-elkholy95 Mar 22, 2026
eeb91e4
fix(backend): use configurable threshold for stale session cleanup
mohamed-elkholy95 Mar 22, 2026
90f21e7
fix(tests): align file sweep tests with two-step sandbox exec pattern
mohamed-elkholy95 Mar 22, 2026
044c6a5
fix(tests): align delivery integrity tests with non-downgradable hall…
mohamed-elkholy95 Mar 22, 2026
8cee08e
fix(agents): downgrade hallucination gate when all plan steps completed
mohamed-elkholy95 Mar 22, 2026
a45e5f0
test(agents): update delivery gate tests for soft hallucination downg…
mohamed-elkholy95 Mar 22, 2026
d16cf98
fix(agents): handle dict response in hallucination rewrite
mohamed-elkholy95 Mar 22, 2026
86c9379
fix(ci): ignore CVE-2025-69872 in pip-audit (no upstream fix)
mohamed-elkholy95 Mar 22, 2026
fd7a51b
chore(deps): bump instructor minimum to 1.14.5
mohamed-elkholy95 Mar 22, 2026
0f5c0a9
fix(tests): suppress cross-test AsyncMock RuntimeWarning noise
mohamed-elkholy95 Mar 22, 2026
fc06d48
fix(tests): align telegram delivery e2e test with two-step sandbox exec
mohamed-elkholy95 Mar 22, 2026
bd835f4
fix(ui): mobile-responsive TaskProgressBar — stack expanded header, f…
mohamed-elkholy95 Mar 22, 2026
bc11078
fix(ui): mobile ToolPanelContent — larger touch targets, wrapped acti…
mohamed-elkholy95 Mar 22, 2026
9ae9146
fix(ui): mobile ChatPage — tighter header spacing for small phones
mohamed-elkholy95 Mar 22, 2026
10becdf
fix(ui): mobile ToolPanelContent — larger touch targets, wrapped acti…
mohamed-elkholy95 Mar 22, 2026
76f3ec7
fix(sandbox): serve fresh context + reduce idle CPU
mohamed-elkholy95 Mar 22, 2026
a178ed0
fix(agents): reduce hallucination gate false-positive block rate
mohamed-elkholy95 Mar 22, 2026
6b00836
fix(api): SSE log visibility, search chain accuracy, startup race
mohamed-elkholy95 Mar 22, 2026
13d3b9d
fix(agents): fast-ack timeout + tool tracing observability
mohamed-elkholy95 Mar 22, 2026
b2a59d3
chore(config): add OpenCode project config with headless env support
mohamed-elkholy95 Mar 22, 2026
e4b6903
feat(sandbox): add ChromeLifecycleManager for on-demand browser lifec…
mohamed-elkholy95 Mar 22, 2026
d264e32
feat(sandbox): add browser ensure/status API endpoints
mohamed-elkholy95 Mar 22, 2026
78483d5
feat(sandbox): wire Chrome lifecycle into lifespan, set autostart=false
mohamed-elkholy95 Mar 22, 2026
91a862c
feat(backend): integrate on-demand Chrome lifecycle
mohamed-elkholy95 Mar 22, 2026
b111ed6
docs(sandbox): add on-demand Chrome lifecycle implementation plan
mohamed-elkholy95 Mar 22, 2026
3f8124e
chore(config): add Claude, Cursor, GitHub agent configs and project docs
mohamed-elkholy95 Mar 22, 2026
df2c60d
fix(sandbox): use group-qualified process name for supervisord RPC
mohamed-elkholy95 Mar 22, 2026
ff25195
docs(config): add Chrome on-demand lifecycle settings to .env.example
mohamed-elkholy95 Mar 22, 2026
58a4afc
Merge remote-tracking branch 'origin/tuf-15'
mohamed-elkholy95 Mar 22, 2026
92cbd47
fix(ui): show live preview thumbnail on mobile matching desktop design
mohamed-elkholy95 Mar 22, 2026
b41c372
fix(ui): reduce LiveMiniPreview fonts for minimal rendering in thumbn…
mohamed-elkholy95 Mar 22, 2026
dfa5644
fix(ui): apply minimal compact font design to desktop LiveMiniPreview
mohamed-elkholy95 Mar 22, 2026
cd147bf
fix(ui): preserve sidebar logo proportions — remove forced square aspect
mohamed-elkholy95 Mar 22, 2026
937d077
feat(ui): enhance SearchModal with rich two-line layout matching refe…
mohamed-elkholy95 Mar 22, 2026
caae3d4
fix(test): isolate channel config tests from local .env overrides
mohamed-elkholy95 Mar 22, 2026
401bed1
chore: remove stale test_openrouter.py scratch file
mohamed-elkholy95 Mar 22, 2026
633de7e
feat(backend): add GET /sessions/all-files endpoint for Library files…
mohamed-elkholy95 Mar 22, 2026
e4b55b1
feat(frontend): add Library files API and composable
mohamed-elkholy95 Mar 22, 2026
9218749
feat(frontend): add LibraryFileCard and LibraryFilesView components
mohamed-elkholy95 Mar 22, 2026
ad0aee1
feat(frontend): add Sessions/Files tabs to Library page
mohamed-elkholy95 Mar 22, 2026
2ff3a31
style(backend): format mongo_session_repository
mohamed-elkholy95 Mar 22, 2026
54cdc68
refactor(ui): reorganize Library page with two-row header layout
mohamed-elkholy95 Mar 22, 2026
7eee62f
redesign(ui): Library page matching Manus reference design
mohamed-elkholy95 Mar 22, 2026
8372a98
fix(backend): move /all-files route before /{session_id} to prevent s…
mohamed-elkholy95 Mar 22, 2026
12cb607
fix(ui): center Library page content with max-width 900px
mohamed-elkholy95 Mar 22, 2026
5927c56
fix(ui): remove max-width constraint — Library fills available width
mohamed-elkholy95 Mar 22, 2026
88affa2
fix(ui): Library page fills parent flex container — use h-full + flex-1
mohamed-elkholy95 Mar 22, 2026
4391555
feat(project): add Project domain model and ProjectContext value object
mohamed-elkholy95 Mar 22, 2026
4635164
feat(project): add ProjectDocument Beanie model and register in lifespan
mohamed-elkholy95 Mar 22, 2026
d32d79b
feat(project): add ProjectRepository protocol and MongoDB implementation
mohamed-elkholy95 Mar 22, 2026
d98b11e
feat(project): add ProjectService application service with singleton …
mohamed-elkholy95 Mar 22, 2026
7df10dd
feat(project): add project API schemas, routes, and register in router
mohamed-elkholy95 Mar 22, 2026
348123b
feat(project): add project_id field to Session model
mohamed-elkholy95 Mar 22, 2026
2cfb361
feat(project): add frontend TypeScript types and API client
mohamed-elkholy95 Mar 22, 2026
d9b5829
feat(project): add useProject/useProjectList composables and router c…
mohamed-elkholy95 Mar 22, 2026
ff367d2
feat(project): add CreateProjectModal matching Manus design
mohamed-elkholy95 Mar 22, 2026
92b4f44
feat(project): enable project sidebar with project list and create modal
mohamed-elkholy95 Mar 22, 2026
31a0c27
feat(project): add project sub-components (header, input, list, panel…
mohamed-elkholy95 Mar 22, 2026
cd060c8
feat(project): add ProjectPage detail view with two-column layout
mohamed-elkholy95 Mar 22, 2026
251dbe3
feat(project): add ProjectsPage with project grid listing
mohamed-elkholy95 Mar 22, 2026
99047fa
fix(project): format mongo_project_repository.py
mohamed-elkholy95 Mar 22, 2026
7cf35ba
fix(project): add project_id field to SessionDocument for query support
mohamed-elkholy95 Mar 22, 2026
1993d89
refactor(project): replace ProjectTaskInput with reusable ChatBox fro…
mohamed-elkholy95 Mar 22, 2026
f5503f6
feat(project): wire real connectors/skills/files into sidebar panels
mohamed-elkholy95 Mar 22, 2026
85dd97d
refactor(project): remove static connector modal, panels self-manage …
mohamed-elkholy95 Mar 22, 2026
b24dcc6
feat(project): rewrite ProjectPage to match Manus grid layout with mo…
mohamed-elkholy95 Mar 22, 2026
001d0c3
chore(project): remove unused standalone panel components (sidebar no…
mohamed-elkholy95 Mar 22, 2026
76e07ec
fix(router): add redirects for library, search, settings routes
mohamed-elkholy95 Mar 22, 2026
f42f992
fix(security): tighten CSP headers and add charset to HTML responses
mohamed-elkholy95 Mar 22, 2026
6eb6af5
fix(security): add basic auth to root /metrics endpoint
mohamed-elkholy95 Mar 22, 2026
b6e49c8
fix(ui): prevent Lottie event listener memory leak
mohamed-elkholy95 Mar 22, 2026
a85261e
fix(sandbox): move WebSocket state from module scope to per-instance
mohamed-elkholy95 Mar 22, 2026
04a7820
fix(project): match Manus design — correct descriptions, simplify ski…
mohamed-elkholy95 Mar 22, 2026
be46978
chore(frontend): remove 44 stray console.log/debug statements
mohamed-elkholy95 Mar 22, 2026
e4959ad
fix(types): enable no-explicit-any rule, switch type-check to vue-tsc
mohamed-elkholy95 Mar 22, 2026
23eca66
chore(deps): pin upper bounds on 48 Python dependency versions
mohamed-elkholy95 Mar 22, 2026
f6446c8
feat(cleanup): implement stale cancel event and orphaned sandbox cleanup
mohamed-elkholy95 Mar 22, 2026
6a71ac9
fix(ui): eliminate screencast ghost frame on route transitions
mohamed-elkholy95 Mar 22, 2026
ec39619
feat(project): accept project_id in session creation and link session…
mohamed-elkholy95 Mar 22, 2026
7c67815
feat(project): pass project_id through session creation flow from Pro…
mohamed-elkholy95 Mar 22, 2026
ea59fd3
fix(project): add project_id to ALLOWED_SESSION_UPDATE_FIELDS allowlist
mohamed-elkholy95 Mar 22, 2026
f5cce44
feat(project): add ProjectSkillsModal for project-scoped skill selection
mohamed-elkholy95 Mar 22, 2026
3c36662
feat(project): wire file upload and skill selection to project sidebar
mohamed-elkholy95 Mar 22, 2026
8bacd07
fix(ui): remove route transition — ChatPage has fragment root which b…
mohamed-elkholy95 Mar 22, 2026
1dac8a1
fix(project): don't push sidebar file uploads to ChatBox attachments …
mohamed-elkholy95 Mar 22, 2026
d64cbb4
fix(project): use sessionStorage fallback for pending session state a…
mohamed-elkholy95 Mar 22, 2026
161fac1
fix(project): resolve file_ids in get_project_context and add manifes…
mohamed-elkholy95 Mar 22, 2026
34711f6
feat(project): store ProjectContext on Session for agent access
mohamed-elkholy95 Mar 22, 2026
25ed577
feat(project): display project sessions in Tasks section with status …
mohamed-elkholy95 Mar 22, 2026
9e1cc81
feat(project): resolve and store project context at session creation
mohamed-elkholy95 Mar 22, 2026
0c8b54d
feat(project): inject project instructions, files, and skills into ag…
mohamed-elkholy95 Mar 22, 2026
1f265f4
perf(project): add compound index on sessions.project_id
mohamed-elkholy95 Mar 22, 2026
62bd303
chore(project): fix ruff formatting
mohamed-elkholy95 Mar 22, 2026
10914d7
refactor(project): extract ProjectSidebar with 3 distinct cards, remo…
mohamed-elkholy95 Mar 22, 2026
9978832
fix(project): fix ImportError — get_file_service is in dependencies, …
mohamed-elkholy95 Mar 22, 2026
c5ab8cd
feat(codex): add codex-first harness foundation
mohamed-elkholy95 Mar 22, 2026
c79817f
feat(harness): add codex governance hooks and audits
mohamed-elkholy95 Mar 22, 2026
444287d
Merge branch 'codex-first-harness'
mohamed-elkholy95 Mar 22, 2026
79dae7d
chore(gitignore): stop ignoring codex harness files
mohamed-elkholy95 Mar 22, 2026
f38bcfc
fix(project): reuse FileSyncManager for project files — fixes 4 bugs
mohamed-elkholy95 Mar 22, 2026
adfc951
fix(harness): restore codex-first harness files
mohamed-elkholy95 Mar 22, 2026
d991d20
refactor(ui): collapsible Projects section in sidebar, Manus-style la…
mohamed-elkholy95 Mar 22, 2026
56bf38b
fix(infra): replace get_pymongo_collection with get_motor_collection
mohamed-elkholy95 Mar 22, 2026
b5c8c28
fix(deps): relax websockets upper bound for browser-use compatibility
mohamed-elkholy95 Mar 22, 2026
a7f7f9a
feat(config): add MODEL_DISPLAY_NAME env var for custom UI branding
mohamed-elkholy95 Mar 22, 2026
c2bc8bc
feat(ui): display custom model name with Manus-style typography
mohamed-elkholy95 Mar 22, 2026
b1e6741
feat(ui): animate projects section expand/collapse in sidebar
mohamed-elkholy95 Mar 22, 2026
96d861e
feat(projects): add latest_message field and exclude project sessions…
mohamed-elkholy95 Mar 22, 2026
b476bb9
feat(ui): switch model title to DM Sans 600 and clean up header layout
mohamed-elkholy95 Mar 22, 2026
b663bb8
chore: add CLAUDE.md project instructions
mohamed-elkholy95 Mar 22, 2026
920b20b
fix(ui): remove unused isLeftPanelShow destructure in HomePage
mohamed-elkholy95 Mar 22, 2026
8917b66
fix(lint): replace all no-explicit-any warnings with proper types
mohamed-elkholy95 Mar 22, 2026
77dcfb9
fix(infra): harden sandbox and memory persistence paths
mohamed-elkholy95 Mar 22, 2026
52ba7fb
test(usage): replace repository mocks with deterministic fake
mohamed-elkholy95 Mar 22, 2026
808f96c
fix(deploy): make mongo replica-set healthcheck tolerant
mohamed-elkholy95 Mar 22, 2026
4a54546
fix(ui): improve projects header interactions in left panel
mohamed-elkholy95 Mar 22, 2026
452fc0b
refactor(frontend): tighten tool-view typing and remove dead refs
mohamed-elkholy95 Mar 22, 2026
9f78c22
fix(test): add create=True to Beanie get_motor_collection patches
mohamed-elkholy95 Mar 22, 2026
4188a41
refactor(projects): inject file service dependency into ProjectService
mohamed-elkholy95 Mar 22, 2026
cf2527b
fix(ci): resolve audit and design token failures
mohamed-elkholy95 Mar 22, 2026
d9084d0
fix(deploy): add MongoDB keyfile for replica set auth
mohamed-elkholy95 Mar 22, 2026
eb26544
fix(ci): remove SSH deploy job to prevent dual-stack conflict
mohamed-elkholy95 Mar 22, 2026
4805658
fix(email): use CID inline attachment for logo instead of data URI
mohamed-elkholy95 Mar 23, 2026
96625be
fix(qdrant): skip payload index creation on in-memory fallback
mohamed-elkholy95 Mar 23, 2026
c4cee4c
fix(deploy): set ENVIRONMENT=production for backend and gateway
mohamed-elkholy95 Mar 23, 2026
cbda858
fix(email): switch logo from CID attachment to hosted URL
mohamed-elkholy95 Mar 23, 2026
9fe5063
fix(deploy): remove empty Qdrant API key that blocks all requests
mohamed-elkholy95 Mar 23, 2026
16aefb6
fix(deploy): create MinIO buckets in init container before backend st…
mohamed-elkholy95 Mar 23, 2026
78e73d8
fix(deploy): apply Docker Compose best practices for startup ordering
mohamed-elkholy95 Mar 23, 2026
6849d3c
fix(deploy): use explicit hostnames to prevent cross-project DNS coll…
mohamed-elkholy95 Mar 23, 2026
242e7af
fix(email): use square icon and table-based layout for robust rendering
mohamed-elkholy95 Mar 23, 2026
876f5ce
fix(assets): regenerate icons with correct aspect ratio and eye align…
mohamed-elkholy95 Mar 23, 2026
0995822
feat(config): set default rating notification email
mohamed-elkholy95 Mar 23, 2026
c283cee
feat(frontend): enhance TaskCompletedFooter with phased rating flow
mohamed-elkholy95 Mar 23, 2026
4fadf1f
fix(test): resolve CI test failures in qdrant and TaskCompletedFooter
mohamed-elkholy95 Mar 23, 2026
8a36ed0
fix(frontend): pass reportId through reportRate emit for type safety
mohamed-elkholy95 Mar 23, 2026
22c2fba
fix(frontend): add error handling, transitions, and anti-abuse to rat…
mohamed-elkholy95 Mar 23, 2026
d476641
fix(email): use bare email address for SMTP envelope sender
mohamed-elkholy95 Mar 23, 2026
7249394
fix(frontend): add dark mode color for model name in header
mohamed-elkholy95 Mar 23, 2026
ec86870
feat(email): add BIMI SVG Tiny PS logo for Gmail brand display
mohamed-elkholy95 Mar 23, 2026
b63715b
fix(frontend): prevent sidebar from shrinking in flex layout on tablet
mohamed-elkholy95 Mar 23, 2026
a0f337d
fix(frontend): hide chat dock behind fullscreen tool panel on tablet
mohamed-elkholy95 Mar 23, 2026
f20aad0
fix(frontend): prevent undefined arg in TaskCompletedFooter rate emit
mohamed-elkholy95 Mar 23, 2026
04cd2f8
fix(agent): trim tool context and prevent redundant tool loops
mohamed-elkholy95 Mar 23, 2026
d6e22f7
fix(sandbox): harden browser lifecycle and screencast recovery
mohamed-elkholy95 Mar 23, 2026
99a3f78
fix(telegram): force-claim polling session on startup
mohamed-elkholy95 Mar 23, 2026
a32f98b
perf(agent): add hard context cap and recovery truncation to prevent …
mohamed-elkholy95 Mar 23, 2026
1cd3824
fix(agent): reset stuck detector and browser budget at step boundaries
mohamed-elkholy95 Mar 23, 2026
6f6c0fb
perf(browser): HEAD pre-check to skip dead URLs before full navigation
mohamed-elkholy95 Mar 23, 2026
792fe3f
fix(agent): use self.executor for per-step reset instead of step_exec…
mohamed-elkholy95 Mar 23, 2026
95ec189
fix(browser): add debug log for HEAD pre-check failures
mohamed-elkholy95 Mar 23, 2026
739cee3
fix(agent): emit StepEvents for blocked and auto-completed steps
mohamed-elkholy95 Mar 23, 2026
b7279d5
fix(frontend): reconcile plan step statuses into message timeline
mohamed-elkholy95 Mar 23, 2026
4dd2c93
chore(deps-dev): bump typescript from 5.9.3 to 6.0.2 in /frontend
dependabot[bot] Mar 23, 2026
ee198c8
fix(frontend): regenerate bun.lock and suppress TS 6.0 baseUrl deprec…
mohamed-elkholy95 Mar 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"permissions": {
"allow": [
"mcp__docker-mcp__get-logs"
]
}
}
1 change: 1 addition & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ reviews:
drafts: false
base_branches:
- main
- main-dev

tools:
# ── Python Static Analysis ──
Expand Down
3 changes: 3 additions & 0 deletions .codex/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Ephemeral Codex session artifacts
session/*
!session/.gitkeep
39 changes: 39 additions & 0 deletions .codex/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Codex Repo Layer

This directory contains the repo-local Codex harness surface for Pythinker.

## Ownership

- `AGENTS.md`: repo law and current repo constraints
- `instructions.md`: engineering behavior and communication rules
- `skills/`: workflow guidance for recurring task types
- `.codex/`: Codex-local hooks, session artifacts, and harness glue
- `.opencode/` and `.cursor/`: downstream adapters that should follow the Codex-first contract

## Scope

Use `.codex/` for:

- hook entrypoints and wrappers
- Codex session artifacts
- local harness README and utilities

Do not move repo law or shared engineering rules into this directory.

## Session Artifacts

- `.codex/session/` is for ephemeral local artifacts generated during Codex sessions
- reviewed patterns belong in `docs/superpowers/observations/`, not in ephemeral session files

## Phase-1 Hooks

Planned phase-1 governance hooks:

- `session-start`
- `session-end`
- `quality-gate`
- `compact-reminder`
- `mcp-health`
- `doc-write-warning`

These hooks should stay low-noise and review-friendly.
44 changes: 44 additions & 0 deletions .codex/commands/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Codex Command Equivalents

This repo does not depend on a custom slash-command system for Codex. Use these thin command equivalents instead.

## Planning

- `/plan`
- Use `skills/pythinker-plan-execute/SKILL.md`
- Store plans in `docs/superpowers/plans/`

## Review

- `/review`
- Use `skills/pythinker-review/SKILL.md`

## Verify

- `/verify`
- Use `skills/pythinker-verification/SKILL.md`
- Or run `node .codex/hooks/quality-gate.js` to print the likely verification path

## Harness Audit

- `/harness-audit`

```bash
python3 scripts/ai/harness_audit.py
```

## Skill Stocktake

- `/skill-stocktake`

```bash
python3 scripts/ai/skill_stocktake.py
```

## Session Summary

- `/session-summary`

```bash
python3 scripts/ai/session_summary.py
```
26 changes: 26 additions & 0 deletions .codex/hooks/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Codex Hooks

These scripts are the low-noise phase-1 governance hooks for Pythinker.

## Runtime Flags

- `PYTHINKER_HOOK_PROFILE=minimal|standard|strict`
- `PYTHINKER_DISABLED_HOOKS=hook1,hook2`

Use `run-with-flags.js` to gate hooks by profile rather than wiring profile logic into each script.

## Hooks

- `session-start.js`: writes a small session snapshot to `.codex/session/`
- `session-end.js`: writes a small end-of-session summary to `.codex/session/`
- `quality-gate.js`: prints the likely verification commands for the current change set
- `compact-reminder.js`: suggests compaction after enough hook invocations
- `mcp-health.js`: reports whether repo MCP config files are present
- `doc-write-warning.js`: warns when writing docs outside expected repo locations

## Design Rules

- Hooks should be low-noise.
- Hooks should never rewrite repo guidance automatically.
- Raw session artifacts stay under `.codex/session/`.
- Reviewed patterns belong in `docs/superpowers/observations/`.
25 changes: 25 additions & 0 deletions .codex/hooks/compact-reminder.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/usr/bin/env node

const { mkdirSync, readFileSync, writeFileSync } = require("node:fs");
const { join, resolve } = require("node:path");

const repoRoot = resolve(__dirname, "..", "..");
const sessionDir = join(repoRoot, ".codex", "session");
const counterPath = join(sessionDir, "compact-counter.json");
const threshold = Number(process.env.PYTHINKER_COMPACT_THRESHOLD || "25");

mkdirSync(sessionDir, { recursive: true });

let count = 0;
try {
count = JSON.parse(readFileSync(counterPath, "utf8")).count || 0;
} catch {
count = 0;
}

count += 1;
writeFileSync(counterPath, `${JSON.stringify({ count }, null, 2)}\n`, "utf8");

if (count >= threshold && count % threshold === 0) {
process.stdout.write("[compact-reminder] Consider compacting at the next phase boundary.\n");
}
22 changes: 22 additions & 0 deletions .codex/hooks/doc-write-warning.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env node

const { relative, resolve } = require("node:path");

const repoRoot = resolve(__dirname, "..", "..");
const target = process.argv[2];

if (!target) {
process.stdout.write("[doc-write-warning] no target path provided\n");
process.exit(0);
}

const relativePath = relative(repoRoot, resolve(target));
const allowed =
relativePath.startsWith("docs/") ||
relativePath === "README.md" ||
relativePath === "AGENTS.md" ||
relativePath === "instructions.md";

if (!allowed && relativePath.endsWith(".md")) {
process.stdout.write(`[doc-write-warning] ${relativePath} is outside the expected docs locations\n`);
}
12 changes: 12 additions & 0 deletions .codex/hooks/mcp-health.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/usr/bin/env node

const { existsSync } = require("node:fs");
const { resolve } = require("node:path");

const repoRoot = resolve(__dirname, "..", "..");
const expected = ["mcp.json", "mcp.json.example"];

for (const file of expected) {
const fullPath = resolve(repoRoot, file);
process.stdout.write(`[mcp-health] ${file}: ${existsSync(fullPath) ? "present" : "missing"}\n`);
}
46 changes: 46 additions & 0 deletions .codex/hooks/quality-gate.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#!/usr/bin/env node

const { execSync } = require("node:child_process");

function safe(command) {
try {
return execSync(command, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
} catch {
return "";
}
}

const changed = safe("git status --short").split("\n").filter(Boolean);
const files = changed.map((line) => line.replace(/^\s*[A-Z?]{1,2}\s+/, ""));
const touchedBackend = files.some((file) => file.startsWith("backend/"));
const touchedFrontend = files.some((file) => file.startsWith("frontend/"));
const harnessPrefixes = [
".codex/",
".opencode/",
".cursor/",
"skills/",
"docs/",
"scripts/",
"tests/",
];
const touchedHarnessOnly =
files.length > 0 &&
files.every(
(file) =>
harnessPrefixes.some((prefix) => file.startsWith(prefix)) ||
file === "AGENTS.md" ||
file === "instructions.md" ||
file === "opencode.json",
);

process.stdout.write("[quality-gate] recommended verification:\n");

if (touchedBackend) {
process.stdout.write("- cd backend && ruff check . && ruff format --check . && pytest tests/\n");
}
if (touchedFrontend) {
process.stdout.write("- cd frontend && bun run lint:check && bun run type-check\n");
}
if (touchedHarnessOnly || files.length === 0) {
process.stdout.write("- targeted file/script checks for docs and harness-only changes\n");
}
74 changes: 74 additions & 0 deletions .codex/hooks/run-with-flags.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#!/usr/bin/env node

const { spawnSync } = require("node:child_process");
const { resolve, extname } = require("node:path");

const VALID_PROFILES = new Set(["minimal", "standard", "strict"]);

function normalizeProfile(rawProfile) {
return VALID_PROFILES.has(rawProfile) ? rawProfile : "standard";
}

function parseDisabledHooks(rawDisabled) {
if (!rawDisabled) return new Set();
return new Set(
rawDisabled
.split(",")
.map((value) => value.trim())
.filter(Boolean),
);
}

function parseAllowedProfiles(rawProfiles) {
if (!rawProfiles) return new Set(["minimal", "standard", "strict"]);
return new Set(
rawProfiles
.split(",")
.map((value) => value.trim())
.filter(Boolean),
);
}

function main() {
const [, , hookId, scriptPath, rawProfiles, ...scriptArgs] = process.argv;

if (!hookId || !scriptPath) {
process.stderr.write(
"Usage: run-with-flags.js <hook-id> <script-path> [allowed-profiles] [script-args...]\n",
);
process.exit(2);
}

const profile = normalizeProfile(process.env.PYTHINKER_HOOK_PROFILE);
const disabledHooks = parseDisabledHooks(process.env.PYTHINKER_DISABLED_HOOKS);
const allowedProfiles = parseAllowedProfiles(rawProfiles);

if (disabledHooks.has(hookId)) {
process.stdout.write(`[skip] ${hookId} disabled\n`);
return;
}

if (!allowedProfiles.has(profile)) {
process.stdout.write(`[skip] ${hookId} not enabled for profile ${profile}\n`);
return;
}

const absoluteScriptPath = resolve(scriptPath);
const executable = extname(absoluteScriptPath) === ".js" || extname(absoluteScriptPath) === ".mjs"
? process.execPath
: absoluteScriptPath;
const args = executable === process.execPath ? [absoluteScriptPath, ...scriptArgs] : scriptArgs;

const result = spawnSync(executable, args, {
env: process.env,
stdio: "inherit",
});

if (typeof result.status === "number") {
process.exit(result.status);
}

process.exit(1);
}

main();
27 changes: 27 additions & 0 deletions .codex/hooks/session-end.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/usr/bin/env node

const { execSync } = require("node:child_process");
const { mkdirSync, writeFileSync } = require("node:fs");
const { join, resolve } = require("node:path");

function safe(command) {
try {
return execSync(command, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
} catch {
return "";
}
}

const repoRoot = resolve(__dirname, "..", "..");
const sessionDir = join(repoRoot, ".codex", "session");
mkdirSync(sessionDir, { recursive: true });

const summary = {
ended_at: new Date().toISOString(),
branch: safe("git branch --show-current"),
head: safe("git rev-parse --short HEAD"),
status: safe("git status --short").split("\n").filter(Boolean),
};

writeFileSync(join(sessionDir, "latest-summary.json"), `${JSON.stringify(summary, null, 2)}\n`, "utf8");
process.stdout.write(`[session-end] tracked ${summary.status.length} changed entries\n`);
27 changes: 27 additions & 0 deletions .codex/hooks/session-start.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/usr/bin/env node

const { execSync } = require("node:child_process");
const { mkdirSync, writeFileSync } = require("node:fs");
const { join, resolve } = require("node:path");

function safe(command) {
try {
return execSync(command, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
} catch {
return "";
}
}

const repoRoot = resolve(__dirname, "..", "..");
const sessionDir = join(repoRoot, ".codex", "session");
mkdirSync(sessionDir, { recursive: true });

const snapshot = {
started_at: new Date().toISOString(),
branch: safe("git branch --show-current"),
head: safe("git rev-parse --short HEAD"),
modified_files: safe("git status --short").split("\n").filter(Boolean),
};

writeFileSync(join(sessionDir, "latest-session.json"), `${JSON.stringify(snapshot, null, 2)}\n`, "utf8");
process.stdout.write(`[session-start] ${snapshot.branch || "unknown-branch"} ${snapshot.head || "unknown-head"}\n`);
Loading
Loading