Skip to content

Fix/ticket 039 windows icon#64

Merged
asieduernest12 merged 46 commits intodamoahdominic:mainfrom
asieduernest12:fix/ticket-039-windows-icon
Apr 4, 2026
Merged

Fix/ticket 039 windows icon#64
asieduernest12 merged 46 commits intodamoahdominic:mainfrom
asieduernest12:fix/ticket-039-windows-icon

Conversation

@asieduernest12
Copy link
Copy Markdown
Collaborator

No description provided.

asieduernest12 and others added 30 commits April 1, 2026 08:22
Renders v{major}.{minor}.{patch} in small muted text directly below
the logo image in the onboarding panel and all four home panel states
(loading, host-type selection, hosts overview, full dashboard).

Version is sourced dynamically from packageJSON.version — never
hardcoded. Also fixes a pre-existing TS1308 error: the
onDidReceiveMessage callback in home.ts was not marked async despite
containing await expressions.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
launch-editor.sh: when invoked as root, fix chrome-sandbox ownership
(chown root:root, chmod 4755) then re-exec as the bun user so Electron
can enable its renderer sandbox. Removes the --no-sandbox bypass added
as an interim workaround.

code.sh: detect virtual GPU vendor IDs (VMware 0x15ad, VirtualBox
0x80ee, QEMU 0x1234) at launch time and pass --disable-gpu
automatically, fixing blank windows on virtual/software display
adapters.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Added cache to Docker detection (5 min TTL)
- Implemented Local Setup wizard (4-step automation)
- Added Reset Setup modal with full data deletion
- Updated documentation (README, docs/setup.md)
- Accessibility: skip link, ARIA live regions, focus styles
- Minor polishing and UX improvements
- Add  with comprehensive checks:
  - Docker environment (daemon, version, compose)
  - Configuration validation (name: occ
services:
  editor:
    build:
      context: /home/linuxdev/Desktop/workshop/studio/hustle/occ
      dockerfile: Dockerfile.build-linux
    command:
      - npm i --ignore-scripts && npm run dev
    container_name: occ-editor-dev
    entrypoint:
      - bash
      - -lc
      - '-'
    environment:
      GITHUB_TOKEN: OCC_GITHUB_TOKEN_NOT_SET
      NODE_ENV: development
      NODE_OPTIONS: --max-old-space-size=7168
    healthcheck:
      test:
        - CMD
        - wget
        - --no-verbose
        - --tries=1
        - --spider
        - http://localhost:3000/
      timeout: 5s
      interval: 15s
      retries: 5
      start_period: 2m0s
    image: occ-build-linux:latest
    mem_limit: "6442450944"
    networks:
      dev-network: null
    ports:
      - mode: ingress
        target: 3000
        published: "3001"
        protocol: tcp
    restart: unless-stopped
    volumes:
      - type: bind
        source: /home/linuxdev/Desktop/workshop/studio/hustle/occ
        target: /workspace
        bind:
          create_host_path: true
    working_dir: /workspace
  web:
    build:
      context: /home/linuxdev/Desktop/workshop/studio/hustle/occ
      dockerfile: Dockerfile.build-linux
    command:
      - -c
      - '[ -s /root/.nvm/nvm.sh ] && . /root/.nvm/nvm.sh; cd apps/web && npm ci --ignore-scripts && npm run dev'
    container_name: occ-web-dev
    depends_on:
      editor:
        condition: service_healthy
        required: true
    entrypoint:
      - sh
    environment:
      NEXT_PUBLIC_API_URL: http://localhost:3001
      NODE_ENV: development
    healthcheck:
      test:
        - CMD
        - wget
        - --no-verbose
        - --tries=1
        - --spider
        - http://localhost:3000/
      timeout: 5s
      interval: 15s
      retries: 5
      start_period: 2m0s
    image: occ-build-linux:latest
    networks:
      dev-network: null
    ports:
      - mode: ingress
        target: 3000
        published: "3002"
        protocol: tcp
    volumes:
      - type: bind
        source: /home/linuxdev/Desktop/workshop/studio/hustle/occ
        target: /workspace
        bind:
          create_host_path: true
    working_dir: /workspace
networks:
  dev-network:
    name: occ_dev-network
    driver: bridge)
  - Container build, startup, health checks
  - Volume mount verification and port accessibility
  - Dev workflow validation (file sync)
  - Cleanup (docker compose down, orphan check)
- Updated PRD with all subtasks marked completed
- Documentation in docs/setup.md references validation script
When launch-editor.sh is present (dev mode), the extension now temporarily
owns the occode:// protocol scheme for its lifetime and releases it on exit,
restoring whatever handler was registered before. This routes all deep links
to the live dev instance without backend changes.

- Replaces ensureLinuxProtocolHandler with cross-platform ensureDevProtocolHandler
- Dev mode detected by presence of launch-editor.sh (no VSCODE_DEV env var needed)
- Linux: writes .desktop with X-OCC-Dev-PID, saves/restores mimeapps.list entry
- macOS: registers .build/electron app with lsregister, unregisters on exit
- Windows: writes HKCU\Software\Classes\occode registry keys, deletes on exit
- Stale PID guard: dead dev instance registrations are not restored on next launch
- Release wired to deactivate(), SIGTERM, SIGINT, and context.subscriptions

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…s done

Mark Subtask 2.4 (detection cache) and Subtasks 7.2/7.3 (reset UI) as
complete with notes on _handleResetSetup implementation location.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…alidate-docker

_handleResetSetup was resolving docker-compose.full.yml 3 levels up from the
extension directory, landing in apps/docker/ (non-existent). Needs 4 levels
up to reach the repo-root docker/ directory. Also fixes the same path in
scripts/validate-docker.js and updates port constants to match actual stack
(gateway 18789, postgres 5432).

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…t e2e

Investigates using scripts/code-server.sh to serve the OCC editor over HTTP
so it can be accessed in a browser and tested with Playwright. Covers a new
launch-server.sh script, playwright.config.ts with webServer integration,
guards for desktop-only extension code paths in server mode, and tunnel
access via cloudflared/VS Code tunnel for CI and remote demos.
Supersedes the Electron/CDP approach from ticket-016.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
npm run dev:editor (root + apps/editor) starts the TypeScript watch
process and VS Code Server concurrently using concurrently@9. The watch
process keeps out/ live while code-server serves the full workbench at
http://localhost:9888 — browser reload picks up source changes without
restarting the server.

docker-compose editor service updated: calls npm run dev:editor, exposes
port 9888, and healthchecks against localhost:9888. The existing dev
(watch-only) and dev:react scripts are unchanged.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Ensures dependencies are installed in apps/editor before the watch and
code-server processes start, so dev:editor is self-contained.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Separates code-server startup into its own named script so it can be
referenced by name in other contexts (e.g. launch-server.sh).

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…ostinstall in dev

- editor:serve adds --host 0.0.0.0 so Docker port mapping can reach the server
  (was binding to ::1 loopback only)
- dev:editor uses npm i --ignore-scripts to avoid postinstall.js git config
  failure inside Docker containers where .git safe.directory rules block git
- healthcheck switches from wget (not in image) to curl on both services

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Covers server accessibility, workbench render, activity bar navigation,
and OpenClaw home panel loading inside the VS Code webview iframe.
Supersedes ticket-016 Electron/CDP approach; implements ticket-028 Phase 3.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…fixes

- Add playwright.config.ts targeting localhost:9888
- Add smoke, navigation, and home-panel e2e test suites (11 tests, all passing)
- Fix VS Code web/server workbench crash: NullMetricsService overrides
  Electron-IPC-dependent MetricsService (IMainProcessService not available
  in web mode; caused globalCompositeBar.create() to throw and prevented
  .monaco-workbench from rendering)
- Add --disable-workspace-trust to editor:serve to suppress modal that
  blocks UI during automated tests

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
- Add data-card attributes to host picker cards for reliable test selectors
- Fix step timeline labels for Docker flow (Check Requirements → Provision Docker)
- Pass setupFor to _getSetupHtml for context-aware rendering
- Add backToHostPicker handler and goBack() JS function for bootstrap choice
- Correct provision-actions container from display:none to display:flex
- Rewrite PRD with corrected bug analysis (original claimed bug did not exist)
- Update acceptance criteria and task statuses to reflect actual implementation
- Skip bootstrap/path/doctor steps when setupFor === 'docker'
- Show provision panel immediately after clicking Docker card
- Auto-trigger dockerProvision() on page load (400ms delay)
- Hide bootstrap choice panel for docker direct flow
- Update step timeline: Docker Selected ✓ → Provision Compose → Ready
- Rewrite PRD to reflect direct-to-provision flow
…e all references

- Create docker/Dockerfile.openclaw — Node 20 Alpine gateway stub with
  /health, /status, /api/config endpoints for development/testing
- Rename docker-compose.full.yml → docker-compose.openclaw.yml
- Update compose to build from Dockerfile.openclaw (context: repo root)
- Update all 4 references in home.ts (provision, teardown, reset)
- Update scripts/validate-docker.js compose file path
- Update ticket-030 PRD with new compose file name and Dockerfile details
… node 24, openclaw cli

- Base image: oven/bun:latest (Debian-based)
- Install fnm and use it to install Node.js 24 as default
- Install sqlite3, cron, coreutils (nproc), tini
- Install openclaw globally via npm
- CMD: activate fnm + node 24, then run openclaw gateway
…im template

- Base: oven/bun:1.3.10-slim (Debian-based)
- Install system deps: make, tmux, tree, nano, curl, unzip, docker-cli,
  docker-compose, bash, git, starship, procps, pipenv, sqlite3, cron,
  coreutils, tini
- Install global CLIs via bun: openclaw, opencode-ai, @kilocode/cli,
  @google/gemini-cli, @anthropic-ai/claude-code, @musistudio/claude-code-router
- Install fnm at /opt/fnm, Node.js 24 as default
- Login shell profile sources fnm env automatically
- CMD: bash -lc 'openclaw gateway run'
…mage

- occ-gateway uses build: from Dockerfile.openclaw, not a registry image
- docker compose pull fails because openclaw/pod:latest isn't on Docker Hub
- Replace pull step with docker compose build
- Add --build flag to docker compose up as safety net
- Update PRD provisioning engine steps to match
- Gateway runs as root in the container, stores config at /root/.openclaw
- Compose was mounting to /home/openclaw/.openclaw (directory doesn't exist)
- Change mount to /root/.openclaw to match where the gateway actually looks
…o-open, dashboard unify, IDE transition, reset command

Ticket 031: AI Model Configuration After Docker Provision
- Add #panel-ai-config with provider dropdown (Anthropic, OpenAI, Google, Groq, OpenRouter)
- API key input with show/hide toggle
- saveAiConfig writes provider + API key to openclaw.json
- skipAiConfig allows user to defer configuration

Ticket 032: Auto-Open Dashboard After Successful Provision
- Auto-open web control 2s after provision succeeds (guarded to prevent double-open)
- _dashboardAutoOpened flag prevents duplicate browser opens

Ticket 033: Unify Dashboard Buttons
- Provision button renamed to 'Open Web Control →' (local)
- User popover retains 'Open Dashboard' (external occ.mba.sh)
- Status dashboard has 'Open Web Control' button

Ticket 034: Auto-Transition to IDE Experience After Setup
- _transitionToIde() closes Home panel, opens workspace folder, opens AI chat sidebar
- Only triggers when Docker is running and AI configured or skipped
- Falls back to _update() if Docker not running

Ticket 035: Register occ.setup.reset Command
- Registered in extension.ts with confirmation dialog
- Public resetSetup() method (renamed from _handleResetSetup)
- Preserves openclaw.json (user config intact)
- Clears WindowHostBinding, returns to host picker
Ticket 032:
- Add auto-open dashboard 2s after provision succeeds (guarded)
- _dashboardAutoOpened flag prevents double-open

Ticket 034:
- _transitionToIde(aiConfigured) — only opens sidebar when AI configured
- Skipped AI config no longer opens sidebar unconditionally
…audit

Ticket 035 CRITICAL:
- Preserve openclaw.json on full reset — save config, rm dir, restore config
- runDockerTeardown() now accepts volumes param, passes -v flag when true

Ticket 034:
- Show welcome notification after sidebar opens (showInformationMessage)
- VS Code notification serves as welcome since Void sidebar has no public API
…dence

All 28 acceptance criteria verified against compiled output:
- Ticket 031: 6/6 PASS (AI config panel, providers, API key, save, skip)
- Ticket 032: 4/4 PASS (auto-open, guard, Open Web Control button)
- Ticket 033: 5/5 PASS (unified buttons, external dashboard preserved)
- Ticket 034: 6/6 PASS (panel close, workspace, sidebar, welcome, conditional)
- Ticket 035: 7/7 PASS (command registered, confirm dialog, preserve config)
…PRDs

- ticket-031: 5 tasks, 14 subtasks, agent-history
- ticket-032: 4 tasks, 8 subtasks, agent-history
- ticket-033: 4 tasks, 9 subtasks, agent-history
- ticket-034: 4 tasks, 12 subtasks, agent-history
- ticket-035: 5 tasks, 15 subtasks, agent-history

All tasks marked [x] — implementation already complete, PRDs updated
to reflect verified work with evidence and proper AGENTS.md structure
- occ-postgres and occ-redis now run on internal Docker network only
- No more port 5432 conflict with kitchenbookapp-db-1
- occ-gateway port 18789 remains exposed for extension access
- More secure: database/cache not exposed to host
…lean state

- runDockerProvision() now tears down any existing compose stack first
- Non-fatal — continues even if no previous stack exists
- Prevents port conflicts and stale container state on re-provision
- void.openChatWithMessage was inheriting thread stagingSelections
- If user had staged image files, the model rejected the request
- Pass empty _chatSelections: [] to prevent staged selections from
  being included in the new chat thread
- Affects: MoltPilot Open Chat, Ask MoltPilot to fix this, extension
  handoff messages, uninstall handoff messages
…, rename Start Free to Create Account

- Free CTA buttons: 'Start Free' → 'Create Account' (2 locations)
- Error help button: 'Ask MoltPilot to fix this' → 'Ask AI to fix this'
- Setup log: removed 'Installing Inference for MoltPilot...' prefix
- Wizard log: 'handing off to MoltPilot' → 'handing off to AI assistant'
- Updated PRD to match actual code state (original PRD referenced strings that no longer exist)
- Internal function names and CSS classes unchanged (non-user-facing)
- Add win32AppIcon to product.json
- Update code.iss to use occode.ico
- Create occode.ico from code.ico as placeholder
- Document root cause in ticket
- Add reference to .tickets/AGENTS.md in root AGENTS.md
- Add ticket-038 gateway reboot functionality PRD
- Add GATEWAY_PORT env var with default 18789
- Add --allow-unconfigured to Dockerfile.openclaw
- Create .env.openclaw and .env.openclaw.example
- Add gatewayReboot method to Docker, Local, SSH adapters
- Add gatewayPort to types and localDefault handling
- Add port input field to docker path panel
- Add dockerLoadEnv/dockerSaveEnv handlers
- Add auto-port selection when port is empty
- Add reboot button to status panel and controller
- Update docker-compose.yml with editor service
- Add Dockerfile.build-linux
- Add docker-compose.windows.yml with dockur/windows
- Add scripts/docker-dev.sh
- Increase timeout to 240s
- Add snapshot directory
- Add screenshot diff options
- Force serial workers for shared VS Code server
- Add docker-compose-v2 to Dockerfile.build-linux
- Rename dev:editor to editor:dev for consistency
- Add openclaw.host.setup.docker command
@asieduernest12 asieduernest12 merged commit 5f56e58 into damoahdominic:main Apr 4, 2026
2 checks passed
@asieduernest12 asieduernest12 deleted the fix/ticket-039-windows-icon branch April 4, 2026 07:39
@asieduernest12
Copy link
Copy Markdown
Collaborator Author

fixes #62 #63

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant