Skip to content

feat(server): migrate openwork.json from .opencode/ to .openwork/#1570

Open
arozanov wants to merge 2372 commits into
different-ai:devfrom
arozanov:feat/openwork-config-migration
Open

feat(server): migrate openwork.json from .opencode/ to .openwork/#1570
arozanov wants to merge 2372 commits into
different-ai:devfrom
arozanov:feat/openwork-config-migration

Conversation

@arozanov
Copy link
Copy Markdown

Resolves #1161

Moves openwork.json out of .opencode/ into its own .openwork/ directory across all five packages: server, server-v2, orchestrator, Tauri desktop, Electron desktop.

What changed

Read paths check .openwork/openwork.json first, fall back to .opencode/openwork.json, default to .openwork/ for new workspaces.

Write paths always target .openwork/openwork.json.

Migration copies (not moves) the legacy file on first boot. Idempotent, never overwrites a different target, graceful on filesystem errors.

Watchers detect openwork.json changes in both directories. Server reload-watcher has a dedicated legacy watcher on .opencode/ and a tree watcher on .openwork/. Tauri desktop watcher now watches .openwork/ alongside .opencode/.

Inbox/outbox moved from .opencode/openwork/inbox to .openwork/inbox (server and server-v2).

Export/import includes both .opencode/ and .openwork/ in archives, validates at least one exists on import.

Docs updated: AGENTS.md, ARCHITECTURE.md, server README, tauri-audit PRD.

New files

  • apps/server/src/config-migration.ts -- migration logic
  • apps/server/src/workspace-files.ts -- path resolution with fallback
  • Tests for both (6 + 6 = 12 test cases)

Test plan

  • bun test server (15 pass)
  • bun test server-v2 (4 pass)
  • cargo check Tauri desktop (compiles clean)
  • tsc --noEmit server (0 errors on source files)
  • Integration test: 8 real filesystem flows (fresh workspace, legacy migration, idempotency, diverged configs, permission errors, full lifecycle, sequential migrations, empty/corrupt files) -- 44/44 pass

benjaminshafii and others added 30 commits March 31, 2026 18:14
* feat(den-api): migrate den controller to hono

* fix(den-api): align worker listing with current build setup

* fix(den-api): avoid duplicate org role seeding

---------

Co-authored-by: src-opn <src-opn@users.noreply.github.com>
* docs(den): deprecate den-controller

* docs(den): reference den-api as former controller

---------

Co-authored-by: src-opn <src-opn@users.noreply.github.com>
Developer mode already emitted useful workspace/session/perf logs, but they
mostly lived in the console and only a subset made it into exportable debug
artifacts. That made it hard to collect a clean report from users when chasing
racy workspace bugs.

Add a shared dev-log buffer, feed it from the existing app/workspace/session
and perf debug emitters, surface the log stream in Settings > Debug, and make
it copyable/exportable alongside the existing runtime debug report.
* feat(i18n): extract dashboard/workspace/share strings to en.ts (PR1)

- i18n/index.ts: add params interpolation support to t()
- en.ts: add 200+ translation keys for dashboard, workspace, share, den, session areas
- app.tsx: extract import bundle, skill, worker badge strings
- bundles/store.ts: extract shared_setup, skill_added, worker/badge labels
- bundles/skill-destination-modal.tsx: extract "Shared skill" badge
- components/den-settings-panel.tsx: extract all Cloud settings panel strings
- components/workspace-chip.tsx: extract sandbox/remote badge
- components/workspace-right-sidebar.tsx: extract sidebar labels
- workspace/create-workspace-modal.tsx: extract all create workspace modal strings
- workspace/share-workspace-modal.tsx: extract share modal strings
- session/share-workspace.ts: extract share fields/errors/labels
- shell/settings-shell.tsx: extract tab titles, update pill labels, nav labels

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(i18n): second pass — extract remaining hardcoded strings from app.tsx and create-workspace-modal.tsx

- app.tsx: extract ~35 hardcoded error/UI strings to app.* keys
  (auth failed, rate limit, compact errors, deep link messages,
   model behavior copy, skills/plugins access hints, reload labels, etc.)
- create-workspace-modal.tsx: extract 6 remaining strings
  (error_connect_worker, error_create_template, desktop_badge,
   import_config, importing); also support params in translate()
- en.ts: add all new keys under app.* and dashboard.*

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(i18n): apply t() calls to refactored store files

Replace 31 hardcoded English strings across 10 store/context files with
t() calls using the orphaned app.* i18n keys. Covers:
- actions-store.ts: auth, rate-limit, compact, session, command errors
- deep-links.ts: deep link messages and auth/signin errors
- openwork-server-store.ts: audit and remote access errors
- context/session.ts: connection lost, auth errors, session name
- context/providers/store.ts: not-connected, auth, rate-limit errors
- context/global-sync.tsx: unknown error fallback
- context/model-config.ts: model behavior title/desc, opencode.json,
  auto-compact scope errors
- context/workspace.ts: connection failed messages
- lib/model-behavior.ts: model behavior title
- pages/session.tsx: compact empty error

4 keys have no matching strings in the codebase after the rebase
(app.error.sidecar_unsupported_windows, app.error.command_name_template_required,
app.error.workspace_commands_desktop, app.error.command_scope_unknown)
and are left in en.ts per task instructions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: src-opn <src-opn@users.noreply.github.com>
…#1285)

* feat(den-db): add skill hub schema and own migrations

* feat(den-api): add skill hub org routes

* fix(den-db): restore drizzle migration workflow

Move the Docker Den service onto den-api and repair den-db's Drizzle metadata so skill hub migrations generate incrementally from the package.

* refactor(den-db): drop legacy org table aliases

---------

Co-authored-by: src-opn <src-opn@users.noreply.github.com>
* feat(ui): add shared seeded paper gradients

Centralize the Paper mesh and grain wrappers so React and Solid apps can reuse the same deterministic seed-based visuals without repeating shader config. Add a standalone demo surface and update existing consumers so the shared package is easier to validate and evolve.

* fix(ui): resolve shared package from source

Point the shared UI package exports at source files so Next builds do not depend on a prebuilt dist directory. Add Next transpilation for @openwork/ui in Landing and Den Web so monorepo and Vercel builds resolve the package consistently.

---------

Co-authored-by: src-opn <src-opn@users.noreply.github.com>
* feat(den): add teams and skill hub management

* feat(den-web): add UnderlineTabs component and apply to members + skill hubs screens

* feat(den-web): add DashboardPageTemplate and apply to all 6 dashboard pages

* feat(den-web): add DenButton component and apply across all dashboard pages

* feat(den-web): add DenInput component and apply across all dashboard inputs

* feat(den-web): UI polish pass — shared component system and skill hub redesign

- Add UnderlineTabs, DashboardPageTemplate, DenButton, DenInput, DenTextarea shared components
- Apply DashboardPageTemplate with PaperMeshGradient headers to all 6 dashboard pages
- Apply DenButton (primary/secondary/destructive + loading/disabled) across all dashboard pages
- Apply DenInput and DenTextarea replacing all raw inputs and textareas
- Redesign skill hub list cards: PaperMeshGradient seeded by hub ID, clean layout
- Redesign skill list cards: PaperMeshGradient seeded by skill ID, matching hub card design
- Rewrite skill hub detail page: lighter type scale, moved last-updated inline, clean sidebar
- Rewrite skill detail page: gradient header, visibility pill inline with title, removed sidebar
- Rewrite skill editor: remove category field (not persisted), clean form layout
- Clean up all 4 member tables: tighter rows, items-center alignment, lighter type
- Fix ActionButton icon stacking bug (Tailwind Preflight svg display:block via icon prop)
- Move member tab toolbar buttons inline with description text per tab
- Add destructive button variant; fix button disabled/loading states
- Clean up manage-members, billing, templates, background-agents screen designs

---------

Co-authored-by: src-opn <src-opn@users.noreply.github.com>
Co-authored-by: OmarMcAdam <gh@mcadam.io>
…rent-ai#1300)

Co-authored-by: src-opn <src-opn@users.noreply.github.com>
…nt-ai#1301)

* feat(app): OpenWork Cloud team skills on Skills page

- Den client: listOrgSkills, listOrgSkillHubs, fetchDenOrgSkillsCatalog (hub name enrichment)
- Extensions: cloud catalog refresh/install via upsertSkill; stale on workspace + Den session
- Skills UI: Team filter, org section, sign-in and org gates, refresh and install flow
- i18n: English strings for cloud catalog
- Storybook: Skills tab notes full app needs ExtensionsProvider

Made-with: Cursor

* feat(app): share skill to org with minimal Cloud + public chooser modal

- Den client: listOrgSkillHubSummaries, createOrgSkill, addOrgSkillToHub
- Orchestrate org resolve + POST skill + optional hub attach (skill-org-publish)
- Skills share modal: WorkspaceOptionCard chooser, public link drill-in, team path with hub picker and sign-in CTA
- i18n: EN, ja, zh, vi, pt-BR

Made-with: Cursor

* fix(app): softer share-skill notices and reusable SelectMenu

- Add select-menu custom dropdown (listbox, outside click, Escape)
- modalNotice* classes: light dls-border + body text (no heavy emerald/red outlines)
- Replace native hub select in share-to-team flow

Made-with: Cursor
@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Apr 26, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
openwork-landing Ready Ready Preview, Comment, Open in v0 Apr 26, 2026 2:29pm

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Apr 26, 2026

@arozanov is attempting to deploy a commit to the Different AI Team on Vercel.

A member of the Team first needs to authorize it.

@github-actions
Copy link
Copy Markdown
Contributor

The following comment was made by an LLM, it may be inaccurate:

Moves the canonical location of openwork.json from .opencode/openwork.json
to .openwork/openwork.json across server, server-v2, orchestrator, Tauri
desktop, and Electron desktop.

Read paths prefer .openwork/, fall back to .opencode/, default to .openwork/.
Write paths always target .openwork/openwork.json.
Migration copies (not moves) the legacy file on first boot.

Closes different-ai#1161

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@src-opn
Copy link
Copy Markdown
Collaborator

src-opn commented May 4, 2026

not sure on this one yet

@src-opn src-opn added the hold label May 4, 2026
@benjaminshafii benjaminshafii force-pushed the dev branch 2 times, most recently from 71d8845 to bb87ed2 Compare May 15, 2026 17:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Move workspace config from .opencode/openwork.json to .openwork/openwork.json with safe migration