59 Commits

Author SHA1 Message Date
Carlos Florêncio 7d0c4ec2f1 feat: add native desktop download handling (#3933) 2026-09-25 18:07:55 +01:00
github-actions[bot] f099a46dc7 release: publish 0.96.0 2026-09-25 17:19:15 +01:00
github-actions[bot] 7b2a4c0712 release: publish 0.95.1 2026-09-22 10:26:57 +01:00
github-actions[bot] f92877b4be release: publish 0.95.0 2026-09-18 15:51:55 +01:00
github-actions[bot] bf819a0228 release: publish 0.94.0 2026-09-09 17:44:45 +01:00
Carlos Florêncio d796cf131d feat(desktop): add consent-aware repository discovery 2026-09-06 11:32:14 +01:00
Carlos Florêncio d74e85883d feat: add plugin-backed canvases (#3111) 2026-09-05 18:44:43 +00:00
github-actions[bot] 866bd32485 release: publish 0.93.0 2026-09-02 09:40:33 +01:00
github-actions[bot] 5b4a8e1013 release: publish 0.92.2 2026-08-30 21:27:00 +01:00
github-actions[bot] df524a86ce release: publish 0.92.1 2026-08-29 09:52:28 +01:00
github-actions[bot] bf3bfab378 release: publish 0.92.0 2026-08-28 21:08:21 +01:00
Henry 54d507b8d7 fix(backend): bind the HTTP listener before startup recovery so health checks don't crash-loop (#2944)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-24 19:35:07 +00:00
github-actions[bot] e04428fa36 release: publish 0.91.0 2026-08-21 15:11:55 +01:00
WaleWangPW d3f356876a fix(desktop): preserve inherited KANDEV_SERVER_HOST for embedded backend (#2838)
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-20 13:00:13 +01:00
github-actions[bot] c0850898be release: publish 0.90.0 2026-08-19 15:33:06 +01:00
Carlos Florêncio 33a8e71f6d fix: prevent orphaned desktop backends from holding locks (#2802) 2026-08-19 14:01:59 +01:00
github-actions[bot] 6c10072f5b release: publish 0.89.0 2026-08-17 20:47:25 +01:00
github-actions[bot] cab9eaf19d release: 0.88.0 2026-08-14 16:09:06 +00:00
github-actions[bot] 2089e7c92d release: 0.87.1 2026-08-12 13:29:13 +00:00
github-actions[bot] dafb315f49 release: 0.87.0 2026-08-11 22:50:46 +00:00
github-actions[bot] 5ac632cbc1 release: 0.86.1 2026-08-10 21:32:28 +00:00
github-actions[bot] 50a65247dd release: 0.86.0 2026-08-10 10:48:07 +00:00
github-actions[bot] 02e96c0591 release: 0.85.0 2026-08-04 14:50:57 +00:00
github-actions[bot] d462af8ce7 release: 0.84.1 2026-08-02 13:24:55 +00:00
github-actions[bot] 55f2cc13cc release: 0.84.0 2026-08-02 10:55:03 +00:00
github-actions[bot] 9a3f224224 release: 0.83.0 2026-07-31 19:05:12 +00:00
Carlos Florêncio dc38aaf0d0 feat: update ACP compatibility and subagent handling (#1880) 2026-07-25 19:31:15 +01:00
github-actions[bot] cbc3b97b29 release: 0.82.0 2026-07-25 15:27:30 +00:00
Carlos Florêncio 715a2033b2 fix: route update alerts through notification providers (#1938) 2026-07-25 11:07:06 +01:00
João Salavisa 767cc89e6c fix(backend): move Docker client to the maintained moby client module (#1935)
github.com/docker/docker is frozen at v28.5.2 — moby publishes v29+ under
github.com/moby/moby/v2, with the API client split out into the standalone
github.com/moby/moby/client and github.com/moby/moby/api modules. That leaves
five Dependabot alerts on the old module path with no reachable fix version:

  CVE-2026-42306  high    docker cp bind mount redirection      <= 28.5.2
  CVE-2026-41567  high    PUT /containers/{id}/archive          <= 28.5.2
  CVE-2026-41568  medium  docker cp symlink swap                <= 28.5.2
  CVE-2026-34040  high    AuthZ plugin bypass                   < 29.3.1
  CVE-2026-33997  medium  plugin privilege off-by-one           < 29.3.1

All five are daemon-side defects, and we only ever imported the client. Moving
to the split client module drops the daemon source out of the module graph
entirely, so these alerts resolve and future daemon advisories will not flag us
at all. It also trims six transitive dependencies.

The new client takes an options struct per call and returns a result struct, so
this is a mechanical rewrite of the wrapper. Behavioural notes:

- Ports moved from docker/go-connections/nat to moby/api/types/network, where
  Port is opaque and PortBinding.HostIP is a netip.Addr. buildDockerPortBindings
  now returns an error for out-of-range ports and unparseable host IPs instead
  of handing the daemon a malformed request. An empty HostIP still maps to the
  zero address, preserving "publish on all interfaces".
- DiskUsage needs Verbose to get per-image and per-container records; the
  aggregate LayersSize is now Images.TotalSize.
- BuildCachePrune no longer takes KeepStorage — the client derives the legacy
  keep-storage parameter from ReservedSpace for daemons on API <= 1.47.
- ImagesPrune is now ImagePrune.
- Container state and health are typed string enums, and InspectResponse.Config
  and .State are pointers, so inspect mapping guards for nil.

Also corrects the RUSTSEC-2024-0429 note in the cargo-audit ignore list. It
claimed the advisory resolves once Tauri moves to webkit2gtk-4.1, but Tauri v2
is already on those bindings and still resolves glib to 0.18.5; the real
blocker is that gtk3-rs is archived. Backport submitted upstream.

Co-authored-by: Kandev Agent <agent@kandev.dev>
2026-07-24 23:33:41 +01:00
Clément Fiere f85b648d97 feat: notify user when a kandev update is detected (#1924)
* feat: notify user when a kandev update is detected

Adds a background-poller-driven update notification with a saved
preference for delivery channel (desktop / in-app banner / both) and
an enable/disable switch on the Updates settings page.

Backend:
- internal/system/updates: NotifySettings + NotifyStore persist the
  enable/channel preference on the existing install-wide settings
  table; notifyIfNewUpdate broadcasts a WS event the first time a
  newer release is observed, deduped durably via kandev_meta so a
  restart or repeat poll doesn't re-announce the same version.
- New GET/PUT /api/v1/system/updates/notification-settings endpoints.
- pkg/websocket: new system.update_available action.

Desktop (Tauri):
- native_notifications.rs: task_id is now optional (Option<String>,
  required only for session-scoped events) and the event allowlist
  accepts system.update_available: alongside the existing session
  events, so the update notification can use the native bridge.

Frontend:
- New UpdateNotificationsCard on the Updates settings page (Switch +
  channel Select), wired through the shared settings-save-provider
  floating Save/Discard action.
- useUpdateAvailableToast bridges the WS event to an in-app toast
  and/or the native/browser desktop notification, per the saved
  channel, deduped per version.

* docs: document the update notification channel setting

* fix: hydrate update notification settings and broadcast delivery ack

- Only mark a release notification as delivered when the broadcaster
  reports at least one connected client, closing a race where an
  update could be silently dropped before the first client connects.
- Hydrate updateNotificationSettings through the settings boot payload
  (loadSettingsInitialState -> hydrateState) instead of a component-
  level fetch, per the boot-payload -> store -> component data flow.
  Widen the hydration types (HydrationState) so callers can hydrate a
  partial system slice without fabricating the other system fields.
  UpdateNotificationsCard now only reads/writes the subscribed store
  state.
- Fix module-scope settings-fetch cache leaking across tests in
  use-update-available-toast.test.ts so the fetch-failure test
  actually exercises the catch/fallback path.
- Add API-client contract tests for fetchUpdateNotificationSettings
  and saveUpdateNotificationSettings (GET cache policy, PUT method
  and body).

* test: cover delayed hydration and boot-payload mapping for update notifications
2026-07-24 22:40:24 +01:00
João Salavisa a0ee801b82 fix(deps): resolve low and medium Dependabot alerts (#1926)
* fix(deps): resolve low and medium Dependabot alerts

Bump vulnerable transitive and direct dependencies across npm, Go, and
Rust to clear all fixable low/medium severity Dependabot advisories.

npm (pnpm.overrides, scoped by major; hono pinned in @kandev/theme to
force the shadcn dev-CLI peer):
- ajv@6 6.15.0, @babel/core 7.29.x, body-parser 2.3.0,
  brace-expansion 1.1.16/2.1.2, dompurify 3.4.12, hono 4.12.x,
  @hono/node-server 2.0.x, js-yaml 4.3.0, lodash(-es) 4.18.x,
  markdown-it 14.3.x, mermaid 11.16.x, path-to-regexp@8 8.4.x,
  picomatch@2 2.3.2, postcss 8.5.x, protobufjs 7.6.5, qs 6.15.x,
  uuid@11 11.1.1, ws 8.21.x

Go: golang.org/x/net 0.55.0, github.com/jackc/pgx/v5 5.9.2

Rust (apps/desktop): serde_with 3.21.0, tauri family 2.11.x
(rand 0.7.3 dropped by the tauri cascade)

Highs are handled by a separate effort; docker/grpc left untouched.
Remaining unresolved mediums: glib (blocked by tauri's gtk ^0.18
constraint) and docker cp advisories (fix requires the docker major
bump owned by the highs effort / no patched version yet).

* fix(desktop): align @tauri-apps/cli with the 2.11 Rust crate bump

The Rust `tauri` crate moved to 2.11.5, but `@tauri-apps/cli` (which runs
`tauri build` for desktop packaging) was still pinned to 2.8.4. Tauri
expects the CLI and crate on the same minor line, so bump the CLI to
2.11.4 to keep packaging tooling in sync with the Cargo crates.

---------

Co-authored-by: Kandev Agent <agent@kandev.dev>
2026-07-24 19:02:10 +01:00
Carlos Florêncio 65c303d37f fix: distinguish session notification events (#1918) 2026-07-24 16:39:43 +01:00
github-actions[bot] a43cd19902 release: 0.81.0 2026-07-21 13:09:32 +00:00
github-actions[bot] 801300645d release: 0.80.0 2026-07-20 15:05:49 +00:00
github-actions[bot] 486baa8e54 release: 0.79.0 2026-07-16 08:39:43 +00:00
Carlos Florêncio b9eb6ae058 refactor(web): remove legacy settings migration (#1704)
* refactor(web): remove legacy settings migration

* fix(web): hydrate portable settings from boot state

* fix(web): preserve sidebar sync contracts

* fix(web): retain portable settings filters

* fix(web): retry sidebar settings writes

* fix(web): retain sidebar boot settings

* fix(websocket): avoid shutdown teardown leaks

* fix(boot): normalize sidebar task preferences

* fix(settings): preserve saved views during hydration

* fix(jira): avoid duplicate saved-view syncs

* fix(jira): preserve saved views on fetch failure

* fix(jira): retry saved-view hydration failures

* refactor(jira): simplify hydration request cleanup

* fix(websocket): close late clients after hub shutdown
2026-07-16 00:06:41 +01:00
Carlos Florêncio d763b8c0c9 feat(desktop): add native app integrations (#1715) 2026-07-15 23:19:00 +01:00
github-actions[bot] 3eaa0e6702 release: 0.78.0 2026-07-13 15:35:03 +00:00
github-actions[bot] ec9004e0bc release: 0.77.0 2026-07-10 10:09:26 +00:00
Clément Fiere e7aa5de634 fix: stop archived automation-run tasks from pinning max_concurrent_runs (#1632) 2026-07-09 19:22:00 +01:00
github-actions[bot] 1da2710881 release: 0.76.0 2026-07-09 10:31:59 +00:00
Carl Sue 9722a39639 fix(ssh-executor): forward agent creds, fix terminal host config, restore linux/arm64 (#1559)
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-07-09 09:20:07 +01:00
github-actions[bot] bd22a1318c release: 0.75.0 2026-07-08 17:32:23 +00:00
github-actions[bot] a65df78bdd release: 0.74.0 2026-07-06 19:27:44 +00:00
github-actions[bot] 396e2a9fef release: 0.73.0 2026-07-03 19:26:41 +00:00
github-actions[bot] 7a3b979820 release: 0.72.0 2026-07-02 19:16:16 +00:00
github-actions[bot] 805a36b6e8 release: 0.71.0 2026-07-01 20:40:18 +00:00
github-actions[bot] 7c6b55ddd0 release: 0.70.0 2026-07-01 07:01:30 +00:00
Clément Fiere c53b8f4bea ci: cargo audit + SHA-pin all GHA action refs + enforcement lint (#1539) 2026-06-29 19:09:22 +01:00