Commit Graph
906 Commits
Author SHA1 Message Date
Juan DenisandClaude Fable 5 6f51b3b3c0 fix(i18n): drop orphaned noChange/envVar locale keys
ConfigDiffModal renamed noChange to noChangeValue and DeploymentTimeline
renamed envVar to envVarCount, but the old keys were left behind in the
16 translated locales, failing the i18n lint orphan check.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-25 02:44:09 -04:00
Juan Denis 69182c3d95 feat(restore-points): add server restore points UI 2026-08-23 23:40:22 -04:00
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