jarvis
bbf4a8e6c0
feat(agent-skills): publish Realmroot ZPan skill
2026-08-15 12:46:37 -04:00
realmroot[bot]
10e16d14a2
fix(store): complete agent capacity purchase workflow ( #561 )
...
* fix(oauth): make token revocation idempotent
* fix(store): complete agent capacity purchase workflow
* fix(build): refresh patched dependency lock hash
* fix(oauth): hide inactive token state on revoke
---------
Co-authored-by: saltbo <saltbo@foxmail.com >
2026-08-12 02:26:35 +00:00
Jasper Van
1b7d8d55f5
fix(audit): resolve agent api key and device actors ( #557 )
...
* fix(audit): resolve agent api key and device actors
* fix(deps): address high severity advisories
* test(audit): cover actor identity boundaries
* fix(audit): support Cloudflare agent info fetches
* docs: add audit actor preview evidence
* docs: add api key audit preview evidence
2026-08-07 23:55:22 -04:00
saltbo
3064403c92
fix(ids): make normalization optional
...
Keep historical identifiers readable and addressable while generating all new entity IDs with Base62. Reject unsafe external ID references and preserve API keys and device codes during optional normalization.
2026-08-05 13:06:41 -04:00
Jasper Van
17db813d1c
feat(ids)!: normalize persistent identifiers to Base62 ( #554 )
...
* feat(ids)!: normalize persistent identifiers to Base62
BREAKING CHANGE: historical ZPan-owned IDs and public tokens require the one-time normalization migration; old public links and stored credentials are invalidated without runtime fallback.
* fix(ids): namespace public redirect tokens
Generate share tokens as s plus 11 Base62 characters and image tokens as i plus 11 Base62 characters. Dispatch /r by namespace prefix, reuse the single resolved record, and update migration validation, contracts, documentation, and tests.
* fix(ids): guard future object storage keys
* fix(ids): normalize historical references safely
2026-08-05 00:36:18 -04:00
Jasper Van
4ab0b0922a
fix(openapi): whitelist Better Auth downloader Device Flow ( #552 )
...
Publish only explicitly registered Better Auth operations in the ZPan product OpenAPI contract while preserving runtime auth routes and discovery.
2026-08-04 16:39:54 -04:00
saltbo
0be5c1b7e9
feat(agent): support workspace-scoped resource access
2026-08-03 19:13:50 -04:00
saltbo
b93db898a4
docs(agent): finalize cleanroom acceptance report
2026-08-03 05:37:52 -04:00
saltbo
84dcc71b4c
docs(agent): record final file workflow acceptance
2026-08-03 05:33:57 -04:00
saltbo
06dc7c2479
docs(agent): record staging workflow regression
2026-08-03 04:26:37 -04:00
saltbo
3ef1561ba2
docs(agent): record file workflow regressions
2026-08-03 04:05:01 -04:00
saltbo
9b95117595
feat(oauth): manage dynamic client registrations
2026-08-02 22:04:43 -04:00
Jasper Van
8513b18a8e
feat(oauth): expose workspace authorization catalog ( #551 )
...
* feat(oauth): expose workspace authorization catalog
* fix(oauth): verify catalog tokens against canonical audience
* fix(auth): normalize Workers preview requests
* Revert "fix(auth): normalize Workers preview requests"
This reverts commit 02009f098f .
* fix(oauth): refresh configured resource scopes
2026-08-02 21:00:20 -04:00
Jasper Van
2657f82ef1
feat(auth): add contextual OAuth workspace grants ( #550 )
...
* feat(auth): add contextual OAuth workspace grants
* fix(auth): register RFC 9396 detail types
* fix(openapi): restore delegated CLI auth profile
* fix(store): recover paid capacity fulfillment
* fix(auth): close OAuth contract gaps
* fix(store): resume verified x402 settlements
* chore(deps): update zpan cloud sdk to 2.5.2
* test(store): cover verified settlement recovery
* fix(auth): localize standard consent scopes
* fix(docker): include dependency patches before install
* fix(store): harden x402 purchase responses
* test(auth): cover OAuth authorization boundaries
* docs: add PR 550 verification screenshots
* chore: remove temporary verification screenshots
* docs(openapi): document exhausted capacity response
2026-08-02 13:33:15 -04:00
Jasper Van
1caa4e580c
refactor(oauth): replace agent access naming ( #549 )
2026-08-01 00:32:31 -04:00
saltbo
8402844b5e
feat(store): add agent x402 capacity purchases
2026-07-31 09:27:24 -04:00
saltbo
d7ba55b9da
feat(auth): support external agent resources
...
Replace bundled agent profiles, API keys, plugin, and skill surfaces with dynamic OAuth client registration, delegated DPoP tokens, discoverable scopes, and Arazzo-backed direct upload workflows.
Refs realmroot/realmroot#115
2026-07-30 10:41:39 -04:00
saltbo
09fc8de901
refactor(auth): model workspace binding explicitly
2026-07-30 00:07:15 -04:00
agent-kanban[bot]
e50c19051a
docs: publish ZPan Agent Skill ( #543 )
...
* docs: publish zpan agent skill
Agent-Profile: https://agent-kanban.dev/agents/b0abe6cd7aeba133
* test: cover openapi auth route metadata
Agent-Profile: https://agent-kanban.dev/agents/b0abe6cd7aeba133
* fix: align zpan skill restish commands
Agent-Profile: https://agent-kanban.dev/agents/b0abe6cd7aeba133
* docs: clarify zpan skill release boundaries
* docs: align zpan upload profile examples
Agent-Profile: https://agent-kanban.dev/agents/b0abe6cd7aeba133
* fix: select upload plugin profile via environment
* fix: return zpan upload plugin help
Agent-Profile: https://agent-kanban.dev/agents/b0abe6cd7aeba133
---------
Co-authored-by: Noah Reed <noah-reed@mails.agent-kanban.dev >
Co-authored-by: saltbo <saltbo@foxmail.com >
2026-07-29 20:19:16 -04:00
agent-kanban[bot]
360237d069
feat: add restish zpan upload plugin ( #542 )
...
* feat: add restish zpan upload plugin
Agent-Profile: https://agent-kanban.dev/agents/f68cfbce6456edb5
* fix: restore single upload resume for restish plugin
Agent-Profile: https://agent-kanban.dev/agents/f68cfbce6456edb5
* ci(release): publish restish-zpan plugin assets
* fix(restish-zpan): accept restish operation aliases
---------
Co-authored-by: Ethan Cole <ethan-cole@mails.agent-kanban.dev >
Co-authored-by: saltbo <saltbo@foxmail.com >
2026-07-29 16:55:52 -04:00
agent-kanban[bot]
d22227ed2f
feat: add delegated agent OAuth provider ( #539 )
...
* feat: add delegated agent oauth provider
Agent-Profile: https://agent-kanban.dev/agents/e0a1ce35687e48ef
* test(auth): cover delegated OAuth configuration
* fix(auth): route OAuth metadata through worker
* fix(auth): advertise canonical OAuth issuer
* test: cover agent oauth provider integration
Agent-Profile: https://agent-kanban.dev/agents/e0a1ce35687e48ef
* test(auth): cover managed OAuth consent flow
---------
Co-authored-by: Ravi Shah <ravi-shah@mails.agent-kanban.dev >
Co-authored-by: saltbo <saltbo@foxmail.com >
2026-07-29 13:26:44 -04:00
agent-kanban[bot]
f2aea1bedb
feat: stabilize multipart upload protocol ( #537 )
...
Preserve legacy upload clients while adding explicit resumable parts, safe completion recovery, idempotent cleanup, and downloader-bound authorization.
2026-07-29 10:37:31 -04:00
agent-kanban[bot]
1b1b1db772
feat: add workspace agent API keys ( #538 )
...
Enforce owner/admin management, terminal expired/revoked lifecycle, explicit workspace scopes, current membership rechecks, and authenticated management UI.
2026-07-29 10:08:44 -04:00
agent-kanban[bot]
bba443817a
fix: harden legacy downloader bootstrap ( #536 )
...
* fix: harden legacy downloader bootstrap
Agent-Profile: https://agent-kanban.dev/agents/f68cfbce6456edb5
* fix: cover downloader bootstrap hardening
Agent-Profile: https://agent-kanban.dev/agents/f68cfbce6456edb5
* fix: document downloader bootstrap auth policy
Agent-Profile: https://agent-kanban.dev/agents/f68cfbce6456edb5
---------
Co-authored-by: Ethan Cole <ethan-cole@mails.agent-kanban.dev >
2026-07-29 01:42:47 -04:00
saltbo
ddb87f4901
docs(v2.9): define agent access architecture
2026-07-28 20:08:03 -04:00
saltbo
c66590a51b
feat(image-hosting): gate custom domains and support origins
2026-07-28 14:48:53 -04:00
Jasper Van
6ad1563acc
feat(image-hosting): automate Cloudflare domain setup ( #530 )
2026-07-28 01:03:56 -04:00
Jasper Van
1d58d5b80d
feat(image-hosting): add configurable custom domain providers ( #529 )
...
* feat(image-hosting): add custom domain providers
* test(image-hosting): cover custom domain provider flows
2026-07-27 22:52:18 -04:00
Jasper Van
a5c281b26a
refactor(api)!: make site routes RESTful ( #526 )
...
Move site configuration under settings, model analytics and licensing as resources, and isolate scheduler runs under the internal API.
BREAKING CHANGE: site email, branding, analytics, licensing, WebDAV verification, and scheduler endpoint paths have changed.
Refs #451
2026-07-27 15:22:28 -04:00
Jasper Van
5473db9be1
fix(downloads): separate list data from task details ( #525 )
...
* fix(downloads): separate list items from task details
* fix(downloads): scope task list to downloader
* fix(downloads): stabilize table data
2026-07-27 10:22:47 -04:00
Jasper Van
ad0f21bb39
fix: unify list pagination and realtime updates ( #524 )
...
* fix!: unify pagination and realtime change delivery
Replace offset paging on affected unbounded collections with signed keyset tokens and infinite loading. Persist scoped resource changes so one global SSE connection can resume and invalidate query caches safely.
BREAKING CHANGE: migrated list APIs now accept pageToken and return nextPageToken instead of page and total fields.
Refs #450
* fix: keep page tokens at the HTTP boundary
Move signed page-token handling out of the pure domain layer so dependency-cruiser architecture checks pass without changing behavior.
* fix: route background job stats through usecase
Keep the HTTP boundary from reaching directly into repository ports and cover the new usecase wrapper.
* fix: align clients and checks with cursor pagination
* refactor: unify pagination boundaries and infinite loading
2026-07-27 02:02:53 -04:00
saltbo
3921d9c00d
perf(webdav): reduce hot-path database work
2026-07-26 13:51:02 -04:00
saltbo
ef78e20261
docs(changelog): add v2.7.4 and v2.8.0 release notes
2026-07-24 14:54:59 -04:00
saltbo
0550e41868
feat(shares)!: make landing shares public by default
...
Replace opt-in profile listings with an opt-out private flag and a unified privacy endpoint.
BREAKING CHANGE: showOnProfile, listedAt, and the profile-listing endpoints are replaced by private and PUT /api/shares/:token/privacy.
2026-07-24 01:07:01 -04:00
saltbo
3894af86ec
docs(storage): propose selector-based upload policies
2026-07-23 18:31:24 -04:00
saltbo
387c731b3b
feat(api-keys): unify user ownership and workspace scopes
2026-07-23 01:41:41 -04:00
saltbo
8c2fbe1ed1
docs: add Subsonic music protocol proposal
2026-07-23 01:30:54 -04:00
saltbo
23f679d18c
feat(webdav): add admin service controls
2026-07-22 23:25:54 -04:00
saltbo
3abf4f231e
fix(storage): preserve purge history and track usage deltas
...
Retain purged matter and image metadata while hiding tombstones from live reads. Record exact storage deltas and build hourly trends only after the opening balance.
2026-07-21 00:29:27 -04:00
saltbo
e761b6aec7
feat(webdav): verify derived domains before publishing
2026-07-20 18:54:12 -04:00
saltbo
0bf1f9e973
feat(webdav): derive fixed domain from public URL
2026-07-20 13:45:22 -04:00
saltbo
75d7b50538
feat(webdav): support optional custom domains
...
Serve canonical root-relative DAV URLs on a configured hostname while preserving the existing /dav mount. Reconcile Cloudflare rewrite rules and Worker custom domains during fork deployments, and expose the effective URL through site options.
2026-07-20 12:59:58 -04:00
Jasper Van
34a801c49b
fix(stats): validate required rollup dimensions ( #514 )
...
* fix(stats): validate required rollup dimensions
* test(stats): cover dimension validation failure
2026-07-20 12:03:17 -04:00
Jasper Van
c85e60f200
fix(analytics): enforce trustworthy offline statistics ( #510 )
...
* fix(analytics): enforce trustworthy offline statistics
Separate immutable counters from point-in-time snapshots, expose incomplete coverage instead of synthetic zeroes, and keep browser analytics result-only.
Restore finite Free quota baselines, fail closed for invalid storage quota, reconcile traffic reports fairly, and add production-safe backfill and data-quality diagnostics.
* fix(analytics): preserve global backfill totals
Group generated hourly backfill rows by their projected values so SQLite cannot resolve output aliases to source organization columns and overwrite cross-organization totals.
2026-07-20 10:23:22 -04:00
saltbo
3dc4b170d6
fix(analytics): snapshot mutable report status
2026-07-19 15:17:41 -04:00
saltbo
ca654b8d03
fix(analytics): rebuild complete historical counters
2026-07-19 14:57:52 -04:00
saltbo
60f8f64481
refactor(analytics): enforce offline result boundaries
...
Build versioned UTC hourly rollups, validate analytics facts, and keep dashboard requests result-only with explicit coverage semantics.
Move derived metrics to the server and simplify the admin dashboard around one reconcilable UTC range without export.
2026-07-18 01:58:34 -04:00
Jasper Van
8bd1e55b5c
refactor(analytics): replace daily stats with hourly rollups ( #505 )
...
* refactor(analytics): replace daily stats with hourly rollups
* fix(analytics): merge hourly inventory sources
* test(analytics): cover rollup failure boundaries
* test(analytics): verify growth dashboard metrics
* test(analytics): cover historical rollup reads
* test(analytics): verify hourly dashboard dimensions
* test(analytics): cover remaining metric boundaries
* test(analytics): cover backfill SQL parsing
2026-07-10 13:26:27 -04:00
saltbo
ccdab7814d
docs: update roadmap for analytics cli and sync
2026-07-08 23:24:31 -04:00
saltbo
e55dae3d2f
refactor(admin): standardize management forms
2026-06-24 14:50:08 -04:00