Commit Graph
904 Commits
Author SHA1 Message Date
Juan Denis 7cb04576bc fix(styles): remove duplicate disk reclaim owner 2026-08-22 15:00:53 -04:00
Juan Denis 1e4922746c fix(operations): normalize recipe handoff descriptors 2026-08-22 15:00:46 -04:00
Juan DenisandClaude Fable 5 2a5d18867f refactor(walkthroughs): the shell dock says Walkthroughs, not Recipes
Reserve the word Recipes for installers. The status-bar segment, dock
tab, hub aria-label and command-palette category now read Walkthroughs
(new app.walkthroughs.title/all keys; stale es allRecipes dropped).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 14:21:04 -04:00
Juan DenisandClaude Fable 5 93c8abbbbe feat(recipes): serverkit-recipes registry catalog with one-call installs
The curated serverkit-recipes index is consumed like the themes registry
(cached remote index, bundled fallback, SERVERKIT_RECIPES_REGISTRY_URL
override). GET /recipes/registry[/<slug>] browses it; POST /recipes/runs
now accepts a registry_slug plus server_id — targeting a server finds or
creates the per-workspace Recipes project — and validated non-secret
params that pre-supply handoff inputs so only true secrets pause the run.

Frontend: Recipes catalog page (cards, category chips, install drawer
with running-server picker, preflight table, up-front inputs and an
asked-during-the-run secrets preview) under new Services and Marketplace
tabs; runs land in the deployment console.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 14:20:55 -04:00
Juan DenisandClaude Fable 5 d867b92c98 chore(i18n): sync locales for the shell console round
en.json regenerated from inline defaults (new statusbar/console/palette/
recipes strings; Prompture and old walkthrough-hub strings gone). es picks
up translations for all 26 new keys; every locale drops the now-orphaned
keys so the parity gate stays green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 02:43:38 -04:00
Juan DenisandClaude Fable 5 adf6b48bff style(buttons): prototype accent treatment for the primary button
Gradient fill (accent-bright to accent), accent glow, inner top highlight,
and a hover that lifts the gradient toward white — all from theme tokens so
runtime skins keep recoloring it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 02:43:27 -04:00
Juan DenisandClaude Fable 5 8b7cecb62e feat(palette): create tile grid + recipes; the sidebar + opens the palette
The palette's empty state now leads with a Create tile grid (shared list in
data/createItems.js) plus a '+ n more' shelf that folds in the less-common
targets and any extension-contributed 'New ...' commands, then a Recipes
group (picking one starts it and opens the recipes console). Create and
recipe entries also score into regular search results.

The sidebar '+' stops carrying its own little dropdown and opens this
palette instead — one door for every new-thing flow, like the prototype.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 02:43:24 -04:00
Juan DenisandClaude Fable 5 3f3ff156f1 feat(ai): dock the assistant into the shell console; drop Prompture branding
The right-side chat drawer now carries the shared console tab strip, so the
assistant reads as the right-docked tab of the same console the bottom
panels belong to (its close moved into the strip). The 'powered by
Prompture' lines are gone from the header and empty state — the empty state
now tells the user what to ask instead.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 02:43:15 -04:00
Juan DenisandClaude Fable 5 6a8e80d7f1 feat(shell): one tabbed console + styled scope menus (port prototype chrome)
The bottom-edge surfaces (Operations, Alerts, Recipes, Assistant) now share
one console: every panel carries the same four-tab strip (ShellDockTabs) and
a ShellDockContext keeps exactly one open, so switching surfaces is a tab
click instead of hunting separate popovers. Recipes is rebuilt into the
prototype's split layout — step rail left, one step's story right, with a
deep-link action button, 'Done - next step', and Back.

The workspace/server switchers get real themed menus (dot - name - meta -
check) replacing the native <select> popup that ignored the theme, and the
sidebar keeps its full height again: it was shortened by the statusbar
height even though the bar only spans the content column, leaving a dead
30px hole under the user card.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 02:43:06 -04:00
Juan Denis c0de9fbcac refactor(i18n): consolidate duplicate locale strings into common.* namespace
en.json drops from 8107 to 6624 keys: repeated UI copy (Cancel x95,
Status x67, Refresh x54, ...) now lives under common.actions /
common.labels / common.loading, and extractor-era suffix duplicates
(refresh2, status3) within a component collapse onto one key.
Trailing ... defaults are normalized to the ellipsis character.

Translations are preserved: all 16 locales were re-keyed, carrying
existing per-component translations onto their new common.* keys
(majority vote where sources disagreed), and stale keys were pruned.

Verified: npm run lint (0 errors), node --test (140 pass), vite build.

edit
2026-08-22 01:32:52 -04:00
Juan Denis 6eb7e5433d feat: redesign app shell and file manager 2026-08-22 00:41:06 -04:00
Juan Denis 7b7779a6b2 fix(monitoring): restore missing disk-reclaim stylesheet (unbreaks build) 2026-08-21 23:59:46 -04:00
Juan Denis a16561a0fb refactor(ds): fold Drawer/PageTopbar/AppMap static styles into SCSS 2026-08-21 23:54:26 -04:00
Juan Denis 5a297adf97 refactor(ui): move widget/skeleton static inline styles into SCSS 2026-08-21 23:50:42 -04:00
Juan Denis 6ddeb0dad4 refactor(setup): replace wizard inline styles with modifier classes 2026-08-21 23:45:03 -04:00
Juan Denis 9f1aed7943 refactor(settings): replace static inline styles with SCSS classes 2026-08-21 23:43:02 -04:00
Juan Denis ab7505c934 refactor(servers): replace static inline styles with SCSS classes 2026-08-21 23:35:44 -04:00
Juan Denis 58dce6225b fix(a11y): make JS smooth-scrolls honor prefers-reduced-motion 2026-08-21 23:20:11 -04:00
Juan Denis f5023c0613 feat(disk): reclaim space from the panel
Expose disk_reclaim_service behind /api/v1/system/disk/reclaim: a
read-only report and a confirm-gated POST whose keys are re-validated
against a fresh scan server-side (safe candidates only — telemetry
stays CLI-only). ?wait=false runs it as a background job; both paths
are audit-logged.

The curated fix shows up where the problem is reported: a failing
disk.headroom doctor check and an alerting disk tile each offer
'Reclaim space', which previews measured candidates before handing
the run to Operations.
2026-08-21 23:05:40 -04:00
Juan Denis d6950cc40f feat: add guided operator walkthroughs 2026-08-21 22:04:09 -04:00
Juan Denis 811cf7dde9 feat: add resumable recipe execution foundation 2026-08-21 21:47:24 -04:00
Juan DenisandClaude Opus 5 507a467d98 fix(scss): use the amber token for the AI attachment warning state
check-frontend-boundaries failed on dev: _ai-assistant.scss carried 11
colour literals against a legacy baseline of 10.

The extra one came in with the attachment composer as
`var(--warning, <amber literal>)`. `--warning` is not a defined token
anywhere in the tree, so that declaration always fell through to the
literal -- a hardcoded amber that runtime skins could never recolour,
which is precisely what the boundary check exists to catch. (_doctor.scss
reaches for the same undefined token with a *different* fallback, so the
two rendered slightly different ambers.)

$warning resolves to var(--amber, …), the real token. The adjacent line
already uses $warning-raw, so the variables are in scope; $warning itself
must not be fed to fade() since it expands to a var() rather than a
compile-time colour.

File back to 10 literals, matching the baseline without moving it.
Verified: boundary check, theme-token check, npm run lint and npm run
build all pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-21 19:30:57 -04:00
Juan Denis 885df406b2 feat(ai): add resource attachment composer 2026-08-21 10:59:01 -04:00
Juan Denis 0cb26d6739 feat(operations): adopt core run workflows 2026-08-21 10:40:42 -04:00
Juan Denis bba2019720 feat(operations): absorb service log sessions 2026-08-21 10:31:40 -04:00
Juan Denis 5db3595fe3 feat(operations): replace deploy pill with dock 2026-08-21 10:24:29 -04:00
Juan Denis 5a29dd5a6d feat(operations): add shell state provider 2026-08-21 10:15:23 -04:00
Juan Denis ee58075fae feat(operations): add generalized run stream 2026-08-21 10:09:02 -04:00
Juan Denis 0062a1a9f5 feat(remote-access): add paired resource pickers 2026-08-21 10:02:21 -04:00
Juan Denis 86c2ce5530 feat(templates): add capability-aware server picker 2026-08-21 09:58:52 -04:00
Juan Denis 988cb659d0 feat(new-service): add scoped resource selection 2026-08-21 09:54:56 -04:00
Juan Denis 652d1ab409 feat(frontend): adopt resource picker for targets 2026-08-21 09:51:50 -04:00
Juan Denis 29a95236fd feat(dashboard): add transactional editing session 2026-08-21 09:46:06 -04:00
Juan Denis 08315c99d7 feat(frontend): add editing controls and shortcut scope 2026-08-21 09:36:02 -04:00
Juan Denis c823c8dc15 feat(frontend): add editing session history 2026-08-21 09:28:20 -04:00
Juan Denis cfcc49adc2 feat(frontend): add resource options adapter 2026-08-21 09:24:29 -04:00
Juan Denis 5fb29f14ef fix: preserve ErrorState SDK compatibility [skip version] 2026-08-21 01:35:07 -04:00
Juan Denis f1c7d1f44e refactor: consolidate error state component [skip version] 2026-08-21 01:30:58 -04:00
Juan Denis 5377a1f3e6 fix: prevent tab overflow route crashes 2026-08-21 01:20:43 -04:00
Juan Denis 4a31f2a8a4 feat: add second-wave locale bundles 2026-08-20 23:22:32 -04:00
Juan Denis 2a25ff839d fix: restore appearance settings rendering 2026-08-20 23:01:37 -04:00
Juan Denis 240ce23765 feat: add next localization batch 2026-08-20 22:50:06 -04:00
Juan Denis 5481057f95 feat: add five localized language bundles 2026-08-20 22:34:34 -04:00
Juan Denis cc7178f994 fix(i18n): address Copilot review — render keyed labels, un-split sentences
- QuickCreate menu items carried labelKey but rendered item.label
- DataTable and the ColumnsMenu/GroupMenu/SortMenu/SortChipBar helpers
  rendered column.header while 66 files declare headerKey; all now
  resolve through translateLabel when the header is a string
- ExtensionBoundary failure card glued 'The extension' + slug + 'could
  not be loaded' from two fragments; now one Trans key with a component
  slot so translators can reorder
- LogFileList/IconReferenceTab empty states split 'No matches for "'
  around the query; now single keys with a {{query}} placeholder

es.json synced: orphans pruned, changed keys retranslated.
2026-08-20 22:00:55 -04:00
Juan Denis be130be5c4 chore(i18n): ratchet literal ceiling from 8034 to 0
All user-visible literals are now keyed; the ratchet prevents regressions.
2026-08-20 20:23:42 -04:00
Juan Denis 6424fec1d2 feat(i18n): complete Spanish locale — 7,969 keys
Full informal-tú Latin American Spanish translation of every en.json
key, merged over the existing 183-key locale (existing entries kept).
Mechanically verified: exact key-set parity, {{placeholder}} and <N>
tag parity, no empty values. Adversarial 3-reviewer QA pass applied
(28 fixes: glossary consistency, SDK gate/severity/rate-limit terms,
{{action}} quoting, register and punctuation).

check-i18n: no orphans, no placeholder drift, 0 untranslated.
2026-08-20 20:23:41 -04:00
Juan Denis 549a02f73b feat(i18n): regenerate en.json with 7,969 extracted keys
Generated by scripts/extract-i18n.mjs from the inline t() defaults —
was 183 keys before the mass conversion.
2026-08-20 20:23:41 -04:00
Juan Denis cc9c3fb70d feat(i18n): convert all remaining user-visible literals to translation keys
Mass conversion of ~8,000 English literals across 320+ files to
t('app.<file>.<key>', 'English default') calls, plus hand-conversion of
the 43 literals the codemod refused (concatenated toasts, module-level
helpers, class components) using bare t() from i18n/t or restructured
{{placeholder}} keys. Marketplace unsigned-release dialog now translates
the Install/Update verb inside the placeholder.

ESLint: 0 errors. Literal checker: 0 remaining.
2026-08-20 20:23:29 -04:00
Juan Denis f7d421797a fix(settings): use path-based settings routes in AI drawer and docker gate
DrawerHeader navigated to /settings?tab=ai and RequiresDocker linked to
/settings?tab=system, but settings routes are path-based — the query-tab
URLs landed on the wrong screen. Now /settings/ai and /settings/system.
Both files also converted to i18n keys as part of the mass conversion.
2026-08-20 20:23:19 -04:00
Juan Denis 2825c536a8 fix(i18n): address review — reset locale readiness, typed error for bad language, correct parity test reference
- LocaleContext: reset ready on each language change so non-default
  locale bundles trigger a rerender once active
- auth PUT /me: raise typed ValidationError (auth.unsupported_language)
  instead of a hand-shaped error body; error-shape ceiling 1145 -> 1144
- i18n.py docstring: point at the real parity test
  (test_user_language_preference.py)
2026-08-20 19:04:09 -04:00