* feat: add deep research report workflow and viewer
* docs: update changelog
* ci: update pizza repository reference from infinilabs to pizza-rs org
* fix deep research completion state
* fix: prevent deep research stream timeout
* fix: update deep research cancel copy
* fix: apply rustfmt formatting to attachment.rs
* fix: resolve fst-no-std version conflict in pizza-engine CI check
The 'check (macos-latest)' CI job fails because pizza-engine (added as a
CI dependency) uses infinilabs/fst-no-std while its transitive dependency
fst-regex uses pizza-rs/fst-no-std. Cargo treats these as two separate
crates, causing:
1. Automaton trait incompatibility between the two fst_no_std instances
2. MapBuilder, Error::Io, and Set::from_iter not found because the
infinilabs fork gates them behind 'std' feature while pizza-engine
only enabled 'alloc'
Fix:
- Add [patch."https://github.com/infinilabs/fst-no-std"] to
src-tauri/Cargo.toml to redirect the infinilabs fork to
pizza-rs/fst-no-std, unifying both into a single crate instance.
This patch is a no-op for normal builds without pizza-engine.
- Update the CI workflow to also add fst-no-std with std feature so that
Error::Io (gated by std) and MapBuilder are available after the redirect.
* Update Cargo.toml
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Medcl <m@medcl.net>
* feat: add Open Camera feature with live preview, photo capture, mirror toggle, and camera switching
Agent-Logs-Url: https://github.com/infinilabs/coco-app/sessions/e874b626-f179-4d54-bc6c-c239394459e3
Co-authored-by: medcl <64487+medcl@users.noreply.github.com>
* fix: address code review feedback - add error logging, remove invisible button, document eslint-disable
Agent-Logs-Url: https://github.com/infinilabs/coco-app/sessions/e874b626-f179-4d54-bc6c-c239394459e3
Co-authored-by: medcl <64487+medcl@users.noreply.github.com>
* refactor: convert camera from dedicated window to built-in extension with permission handling
- Create Open Camera built-in extension (search source in Rust)
- Add camera permission check/request via macOS permissions plugin
- Render camera inline in main Coco window (not a separate window)
- Add com.apple.security.device.camera entitlement
- Remove dedicated camera window, tray menu entry, and window commands
- Add cameraOpened state to search store for navigation support
- Handle Escape/Back navigation for camera view
Agent-Logs-Url: https://github.com/infinilabs/coco-app/sessions/bb996add-d287-464c-bc53-c69167630351
Co-authored-by: medcl <64487+medcl@users.noreply.github.com>
* fix: address code review feedback - fix permission check flow, remove duplicate cleanup, fix type
Agent-Logs-Url: https://github.com/infinilabs/coco-app/sessions/bb996add-d287-464c-bc53-c69167630351
Co-authored-by: medcl <64487+medcl@users.noreply.github.com>
* fix: camera not displaying video due to missing CSP media-src, secure context, and stream lifecycle issues
Three root causes fixed:
1. CSP missing media-src directive - Added media-src with blob: and mediastream:
schemes to allow camera streams in the webview
2. Missing useHttpsScheme - Added to main window config to ensure secure context
required by getUserMedia API on macOS WKWebView
3. Camera.tsx stream lifecycle - Rewrote initialization to use a single sequential
flow (permission → getUserMedia → enumerate → assign) instead of three
separate useEffects with circular dependency issues. Uses refs for stream
tracking to prevent stale closure bugs in cleanup.
Agent-Logs-Url: https://github.com/infinilabs/coco-app/sessions/f3b86e6b-3ce2-423d-a5a1-c3a5f4e115f2
Co-authored-by: medcl <64487+medcl@users.noreply.github.com>
* fix: tighten CSP media-src directive and add permission polling timeout
- Remove overly permissive https:/http: from media-src (only need self/blob/mediastream)
- Remove unnecessary img-src override (falls back to default-src)
- Add 60-second timeout to camera permission polling to prevent infinite loops
- Check cancelled flag during polling to support component unmount
Agent-Logs-Url: https://github.com/infinilabs/coco-app/sessions/f3b86e6b-3ce2-423d-a5a1-c3a5f4e115f2
Co-authored-by: medcl <64487+medcl@users.noreply.github.com>
* feat: add Open Camera functionality with icon and translations
* fix: remove unused setCameraOpened from SearchResultsPanel
* feat: update platform adapters to include saveFileDialog method for Tauri and Web
* fix: streamline camera search source registration in built-in extension
* refactor: update extension icon
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: medcl <64487+medcl@users.noreply.github.com>
Co-authored-by: ayangweb <473033518@qq.com>
* fix(logging): include webview target in production log level config
In production mode, COCO_LOG was set to 'coco_lib=trace' which caused
the global log level to be set to Off first, then only coco_lib module
was enabled. This silently dropped all frontend logs whose target is
'webview', making them disappear in packaged builds while working fine
in dev mode (which uses the default Info level for all targets).
Fix by adding 'webview=trace' to the COCO_LOG value so frontend logs
are also captured in the log file when running the packaged app.
* docs: release notes
Previously, the last update time of the Coco server in the
"Connect" settings page was displayed using the raw string
directly from the `updated` field, which lacked consistent
formatting.
This commit refactors the `ServiceMetadata` component to use
the `formatDateToLocal` utility function. This ensures
the update time is displayed in a standardized
`YYYY/MM/DD HH:mm:ss` format and provides a fallback value if
the date is invalid or missing.
* fix: apply local results weight to scores generated by rerank()
We have two kinds of scores:
1. Scores calculated by query sources
2. In the post-search phase, we re-score the documents in
`boosted_levenshtein_rerank()`
When applying the setting "local search results weight", previous
implementation modified the first score. Its effect was not noticeable,
since we collect documents evenly from the hits returned by query sources.
This commit refactors the implementation so that the setting adjusts the
second score, making the effect obvious.
* refactor: keep O(1) lookup && update var names
* chore: one more var name to update
* feat: support app search even if Spotlight is disabled
Previously, we relied on Spotlight (mdfind) to fetch the app list,
which means it won't work if users disable their Spotlight index.
This commit bumps the applications-rs library, which can now list
apps using `lsregister`, macOS's launch service tool. (See commit [1]
for details). With this, our app search works even tough Spotlight
is disabled.
[1]: ec174b7761
* release notes
* refactor: display doc.{updated,created} in local time
Previously, document created/updated times were displayed as raw
strings, and can be in UTC, which was not user-friendly.
This commit adds a helper function `formatDateToLocal()` that formats
date to a local time string, then uses it to unify the date formatting
in application and document details.
* chore: address review comments