Commit graph

12796 commits

Author SHA1 Message Date
Cathie Integra
d4666a5765 Build: Make install-chrome.sh safe to run via curl | sudo bash
Two issues prevented the script from running cleanly when piped into
sudo (the most reliable invocation over SSH):

1. The header recommended `bash <(curl …)`, but with sudo the process
   substitution opens /dev/fd/63 in the unprivileged parent shell and
   the elevated bash cannot read it — the script aborted with
   `bash: /dev/fd/63: No such file or directory`. Replace with the
   `curl -fsSL … | sudo bash` pattern (and keep an explicit
   download-then-run fallback). Also call out the broken sudo + process
   substitution form so users do not retry it.

2. With stdin piped to bash, `gpg --dearmor` tried to write status to
   /dev/tty and failed with `gpg: cannot open '/dev/tty'`, breaking the
   keyring import (and silently leaving an empty keyring on a fresh
   host). Pass `--no-tty --batch --yes` to both gpg calls.

Tested end-to-end on Ubuntu 26.04 ("resolute") via
`curl -fsSL …/install-chrome.sh | sudo bash` from a clean state
(no preexisting keyring or apt list): keyring valid OpenPGP file, deb
fetched and installed, `google-chrome --version` returns 147.0.7727.116.
2026-04-25 13:06:14 +02:00
Michael Mayer
c1e9d80692 CLI: Document urfave/cli v2 to v3 upgrade analysis and decision
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-25 10:31:38 +02:00
Michael Mayer
452bdde31e ONNX: Upgrade runtime from v1.24.1 to v1.25.0 and bump onnxruntime_go
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-24 18:06:54 +02:00
Michael Mayer
b263651c5e Build: Upgrade base image from 260417-questing to 260424-questing
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-24 17:12:43 +02:00
Michael Mayer
5bda752118 Build: Add shared .telemetry file to opt out of CLI telemetry
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-24 16:42:21 +02:00
Cathie Integra
989227097a Docs: Clarify NPM_CONFIG_IGNORE_SCRIPTS default and rebuild override 2026-04-21 07:56:17 +02:00
Michael Mayer
7d39b2d9fe API: Extend check-api-request-limits.sh for ServeHTTP and direct reads
- Flag <name>.ServeHTTP(<writer>, c.Request) calls without a nearby
  LimitRequestBodyBytes so SDK-delegated handlers (MCP today, future
  SDKs tomorrow) are held to the same body-cap contract as BindJSON.
- Also flag direct reads via io.ReadAll, io.LimitReader,
  json.NewDecoder, xml.NewDecoder, and yaml.NewDecoder on c.Request.Body

Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-20 13:55:29 +02:00
Michael Mayer
a61d284134 MCP: Cap /api/v1/mcp body size and shorten session idle timeout #5024
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-20 13:54:07 +02:00
Cathie Integra
543d43ab6a Docker: Raise BuildKit step log size/speed limits in buildx-multi.sh
Set BUILDKIT_STEP_LOG_MAX_SIZE=5 MiB and BUILDKIT_STEP_LOG_MAX_SPEED=10 MiB/s
on both the local and remote ssh://arm multibuilder nodes so long apt-get
transcripts on unstable Ubuntu bases aren't truncated during preview builds.
2026-04-18 11:45:28 +02:00
Michael Mayer
c37fdf51a7 Translations: Update frontend/src/locales/json/*.json #5536
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-18 11:37:10 +02:00
Weblate
d53f8f0fd2 Weblate: Update frontend translations 2026-04-18 11:35:06 +02:00
Michael Mayer
4599cc07ce MCP: Expose DisableMCP via ClientConfig for frontend gating #5024 #5536
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-18 11:31:31 +02:00
Michael Mayer
0cf372af79 Config: Add PHOTOPRISM_DISABLE_MCP to compose.yaml & charts #5024 #5536
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-18 11:09:52 +02:00
Michael Mayer
da224d309e MCP: Add "DisableMCP" option to disable /api/v1/mcp #5024 #5536
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-18 11:08:58 +02:00
Michael Mayer
d529f7fe4a Docs: Document heading style as Chicago-style title case
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-18 09:41:11 +02:00
Michael Mayer
ac9c9cf27b MCP: Remove experimental gate test and update documentation #5024
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-18 08:08:29 +02:00
Michael Mayer
825b8049cf MCP: Remove experimental gate from /api/v1/mcp registration #5024
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-18 07:51:57 +02:00
Michael Mayer
51976b7f5c Search: Add NOT & AND operators to label filter #5535
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-17 17:25:18 +02:00
Michael Mayer
15036786bc Claude: Auto-accept file edits in project settings.json
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-17 12:45:07 +02:00
Michael Mayer
1ced5cbf1e Backend: Update github.com/zitadel/oidc/v3 in go.mod and go.sum
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-17 11:57:35 +02:00
Michael Mayer
55edaeae57 Claude: Add project settings.json with shared team defaults
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-17 11:51:48 +02:00
Michael Mayer
85ca9dfb19 Develop: Upgrade base image from 260413-questing to 260417-questing
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-17 09:44:52 +02:00
Cathie Integra
8e5ece95a3 Scripts: Install Mermaid CLI and Chromium for ARM64 in dev images 2026-04-17 09:38:37 +02:00
Cathie Integra
7e6773e94e Claude: Compact repo rules to reduce context size 2026-04-17 08:16:17 +02:00
Michael Mayer
79b3f569a8 API: Fix incorrect Swagger response schemas and "Fore more" typos
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-15 15:56:13 +02:00
Michael Mayer
be98c04d0d Docker: Document directory layout and legacy image policy in README.md
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-15 15:20:53 +02:00
Michael Mayer
c46deb6129 Go: Upgrade "govips" to v2.18.0 (requires libvips 8.14 or later)
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-15 15:09:23 +02:00
Michael Mayer
edb6f2f2b1 Go: Upgrade dependencies (gocron, oidc, mcp-sdk, x/*, sqlite3, otel)
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-15 14:58:05 +02:00
Michael Mayer
7db82af193 API: Document "GET /api/v1/photos/view" in swagger.json
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-15 14:01:19 +02:00
Cathie Integra
fcbfbfd8be Docs: Disable Co-Authored-By: Claude trailer in CLAUDE.md 2026-04-14 10:40:34 +02:00
Cathie Integra
ee6ff221a0 Docs: Note "--ignore-scripts" for npm outside the dev image
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 15:11:51 +02:00
Michael Mayer
1beb83b554 Develop: Upgrade base image from 260331-questing to 260413-questing
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-13 14:06:20 +02:00
Michael Mayer
6d29459aca Build: Add Codex skill bundles and auto-link target to Makefile
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-13 13:00:49 +02:00
Michael Mayer
26a5c06762 Claude: Run "claude update" if already installed and add render-pdf deps
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-13 12:49:04 +02:00
Michael Mayer
0c226fafcf Header: Add ContentTypeEventStream and reuse in MCP code #5024
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-13 09:18:40 +02:00
Michael Mayer
6704b217d8 MCP: Document constants and vars, export ToolNames/ResourceURIs #5024
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-13 09:09:12 +02:00
Michael Mayer
fdfe46c7b3 MCP: Add stdio smoke test and mcpAppMetadata coverage #5024 #5519
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-13 08:57:46 +02:00
Michael Mayer
342b03e317 MCP: Drop "internalmcp" alias and use "mcp" package name directly #5024
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-13 08:48:52 +02:00
Michael Mayer
4f14ed90c0 MCP: Remove "prototype" wording for production-readiness #5024 #5519
- Rewrite package doc, struct comments, log line, and route-registration
  comment so they describe the MCP server as a first-class feature
  rather than a pre-release prototype. The "Usage" strings on
  MCPCommands / MCPServeCommand were updated separately and stay
  unchanged.
- Drop "in this prototype" from the edition-advisory warning emitted by
  list_config_keys; the message now reads "edition filtering is
  advisory; results come from the current <edition> build metadata".
- Rewrite internal/mcp/README.md: new "Scope" section with
  in-scope/out-of-scope invariants, corrected authorization summary
  (admin + API client roles + manager in Pro/Portal, anonymous in
  public mode for the registered read-only tools), and a clearer
  "Current Capabilities" block.

Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-13 08:46:07 +02:00
Michael Mayer
16fc758f54 MCP: Allow anonymous access in public mode for demo deployments #5024
- Drop the public-mode 403 short-circuit in internal/api/mcp.go. In
  public mode api.Session() returns the default public session, so
  Auth(c, acl.ResourceMCP, acl.ActionView) + s.Abort(c) authorize
  anonymous callers naturally. This enables the prototype to run on
  demo.photoprism.app and similar showcase installations without
  loosening the auth path or adding another toggle.
- The exemption is only safe because every currently registered tool
  returns static reference metadata derived from config.Flags and
  form.Report(&form.SearchPhotos{}) — no database access, no per-user
  state, no secrets, no mutations. A handler-level comment captures
  that contract so a future tool that does not fit cannot slip in
  unnoticed.
- Flip the public-mode test case (ForbiddenPublicMode ->
  AllowedPublicMode) in internal/api/mcp_test.go to a full anonymous
  initialize + notifications/initialized + tools/call round-trip
  against both registered tools, so any future tightening of the
  policy regresses loudly.
- Update internal/mcp/README.md: the Authorization bullets now
  describe the public-mode path, the Rate Limiting note reflects that
  CE/Plus have no generic throttle in public mode, and a new
  "Extending the Tool Surface" section documents the contract every
  new tool must uphold plus the three supported extension paths
  (two-server factory, per-tool context checks, SDK middleware).

Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-13 08:19:29 +02:00
Michael Mayer
df13ea9e02 MCP: Refine auth flow, JWT scope, and find_search_filters #5024 #5519
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-10 13:40:22 +02:00
Ömer Duran
e2f8474309
MCP: Add read-only Model Context Protocol prototype #5024 #5519
* MCP: Add internal read-only prototype #5024

* MCP: Fix edition detection, section assignment, and input validation #5024

* MCP: Add authenticated HTTP endpoint with ACL and experimental gate #5024

* MCP: Document client compatibility and config examples #502

* MCP: Refine ACL grants and finalize prototype polish #5024 #5519

Signed-off-by: Michael Mayer <michael@photoprism.app>

* MCP: Update go.sum #5024 #5519

Signed-off-by: Michael Mayer <michael@photoprism.app>

* MCP: Update license NOTICE files #5024 #5519

Signed-off-by: Michael Mayer <michael@photoprism.app>

---------

Signed-off-by: Michael Mayer <michael@photoprism.app>
Co-authored-by: Michael Mayer <michael@photoprism.app>
2026-04-10 12:51:11 +02:00
Michael Mayer
32f8bd9896 Claude: Align rules with AGENTS.md and fix test coverage placement
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-09 19:52:49 +02:00
Michael Mayer
8640dee635 Docs: Split AGENTS guides into a hierarchical structure
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-09 19:28:14 +02:00
Michael Mayer
997ca175be Claude: Add rules files and update CLAUDE.md
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-09 18:22:16 +02:00
Michael Mayer
f0f3ce400f Docs: Update AGENTS.md
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-08 09:34:07 +02:00
Michael Mayer
a8ec6f9cbb Develop: Refactor project configuration directory structure
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-08 09:25:48 +02:00
Michael Mayer
0759dfc946 Frontend: Use monospaced font for .p-log-message in logs.css
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-01 15:28:52 +02:00
Michael Mayer
e0333cb43b Frontend: Update deps in package.json and package-lock.json
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-01 15:26:06 +02:00
Michael Mayer
cbcebe8de4 Frontend: Update src/locales/json/*.json after translation removals
Signed-off-by: Michael Mayer <michael@photoprism.app>
2026-04-01 15:25:44 +02:00