Commit Graph
273 Commits
Author SHA1 Message Date
Federico Jaramillo Martinez d09d7cc1ff Migrate authProviderOptions to ModelRuntime API
Rederive login/logout provider options from runtime.getProviders() +
listCredentials() + getProviderAuthStatus() instead of the removed
authStorage.getOAuthProviders()/list()/get() + getAll()/
getProviderDisplayName() surface (Pi 0.80.8+).

- Replace the AuthProviderModelRegistry structural interface with a
  runtime-shaped AuthProviderRuntime (getProviders/listCredentials/
  getProviderAuthStatus); a real ModelRuntime satisfies it.
- Make getLoginProviderOptions/getLogoutProviderOptions async to match
  the await call sites already in authService.ts.
- OAuth-capable providers = auth.oauth present; api-key providers =
  auth.apiKey present, preserving OAUTH_ONLY_PROVIDERS /
  isApiKeyLoginProvider logic. Display names from Provider.name.
- Update the test double to the new runtime shape.

Slice 2 of the authStorage migration relay. tsc: 31 -> 28 errors
(remaining are cross-slice: slices 3/4/5).
2026-07-17 20:58:46 +02:00
Federico Jaramillo Martinez e37148c193 Migrate authService to async ModelRuntime API (slice 1)
Move AuthService off the removed AuthStorage / ModelRegistry.create surface
onto the async ModelRuntime API:

- AuthService.create({ agentDir | runtime }) async factory wrapping
  ModelRuntime.create({ authPath, modelsPath }); createModelRuntimeForAgentDir
  replaces createModelRegistryForAgentDir.
- saveApiKey -> runtime.login(providerId, "api_key", nonInteractive) so the
  key is persisted through the runtime credential store.
- logoutProvider -> runtime.logout; refreshAuthState -> await runtime.refresh().
- startOAuthLogin now passes the runtime into OAuthLoginFlowService.start.
- authProviders/requireOAuthLoginProvider became async around getLogin/Logout
  provider options.
- sessiond.ts: async createRuntime, AuthService.create, pass modelRuntime to
  PiSessionService; sessionDaemonStartup awaits createRuntime.

Cross-slice: authProviderOptions (2), oauthLoginFlowService (3), and
piSessionService (4) still expose the old ModelRegistry shape, so the tree does
not fully typecheck yet. Session-daemon path changed -> manual sessiond restart
needed once the migration lands.
2026-07-17 20:53:42 +02:00
Federico Jaramillo Martinez aedcbf885e feat(sessions): surface live session startup warnings in the web UI
Show a pinned banner at the top of the session view with resource and
runtime diagnostics (skills, prompts, themes, extension load errors) plus
the Anthropic subscription-auth billing notice, recomputed live from the
current runtime so they stay accurate across browser reloads.

Warnings carry an optional dismiss capability; the Anthropic notice is
dismissable and durably suppressed through pi's own anthropicExtraUsage
warning setting. Also fixes the testing-guide skill frontmatter so it
loads.
2026-07-17 19:16:58 +02:00
Federico Jaramillo Martinez 2b17145291 feat(sessions): stream in-flight partial when joining a mid-turn session
Seed the in-flight partial assistant message (text, thinking, and
in-progress tool calls) when opening or reconnecting to a session that is
mid-stream, then continue streaming live deltas on top of it. Replaces the
blocking "Catching up..." placeholder and the end-of-turn transcript reload.

Server stamps every per-session UI event with a monotonic seq at the
SessionEventHub publish choke point and exposes
GET /sessions/:sessionId/stream-snapshot returning { seq, partial }. The
client fetches the snapshot on join, seeds the normalized partial into the
in-memory transcript (never the history cache), and applies buffered/live
events using the seq watermark for exactly-once delivery.

The snapshot is a progressive enhancement: a 404 from an older remote
pi-web or a not-yet-restarted session daemon falls back to an empty seed
(seq 0, drops nothing), so sessions still open and stream normally. The
stream-snapshot route is registered in the federation allowlist for
remote-machine proxying.
2026-07-17 14:49:56 +02:00
Federico Jaramillo Martinez 15d25d8c2e fix(subsessions): omit oversized completion output 2026-07-17 09:22:54 +02:00
Federico Jaramillo Martinez 8da7b29ba6 fix(terminals): namespace terminal environment marker 2026-07-14 23:56:24 +02:00
Federico Jaramillo Martinez 1c22558105 test(terminals): cover IS_PIWEB spawn paths 2026-07-14 23:48:30 +02:00
ongspxm 73ac24c882 feat(terminals): set PI WEB shell environment 2026-07-14 21:21:50 +08:00
Federico Jaramillo Martinez ca07e48c0a docs: clarify Pi-compatible agent profiles 2026-07-14 00:30:09 +02:00
Federico Jaramillo Martinez a1f749cdb6 feat: add server session queue clearing 2026-07-14 00:24:14 +02:00
Federico Jaramillo Martinez 8b5ccc2fd9 feat: apply agent profile settings atomically 2026-07-14 00:11:39 +02:00
Federico Jaramillo Martinez c0465c4a5c fix: delimit subsession output from guidance 2026-07-14 00:04:53 +02:00
Federico Jaramillo Martinez 0761e1509a fix: report remaining subsessions on completion 2026-07-13 23:41:20 +02:00
Federico Jaramillo Martinez adc2e297a4 fix: harden agent profile boundaries 2026-07-13 23:39:49 +02:00
Federico Jaramillo Martinez 97e0afc6fa feat: route profile consumers through sessiond 2026-07-13 23:09:32 +02:00
Federico Jaramillo Martinez 141cda93c8 feat: expose daemon-owned active agent profile 2026-07-13 22:50:50 +02:00
Federico Jaramillo Martinez d5154dfb3a feat: add explicit tracked subsession yielding 2026-07-13 22:45:07 +02:00
Federico Jaramillo Martinez a1a019e7b1 chore: merge origin/main 2026-07-13 22:36:36 +02:00
Federico Jaramillo Martinez 37fba00066 Merge pull request #50 from jmfederico/review-issue-48
fix: store session archives under PI_WEB_DATA_DIR
2026-07-13 21:11:50 +02:00
Federico Jaramillo Martinez cb61146b0a fix(tests): isolate Git fixtures from hook environment 2026-07-13 21:11:05 +02:00
Federico Jaramillo Martinez f2ed8c82de Merge branch 'main' into review-issue-48 2026-07-13 21:08:17 +02:00
Federico Jaramillo Martinez cfa9f5a2fa Merge remote-tracking branch 'origin/main' into pr-36-generic-agent-config
# Conflicts:
#	docs/config.html
#	docs/config.md
#	src/cli.test.ts
#	src/cli.ts
#	src/client/src/components/settings/SettingsSessiondPanel.ts
#	src/client/src/components/settings/settingsConfigDraft.test.ts
#	src/client/src/components/settings/settingsConfigDraft.ts
#	src/server/app.test.ts
#	src/server/app.ts
#	src/server/configRoutes.test.ts
#	src/server/configRoutes.ts
#	src/server/piWebPluginService.test.ts
#	src/server/piWebPluginService.ts
#	src/server/piWebStatus.test.ts
#	src/server/piWebStatus.ts
#	src/server/piWebStatusCache.ts
#	src/server/sessions/authService.test.ts
#	src/server/sessions/piSessionService.ts
#	src/server/sessions/sessionRoutes.test.ts
2026-07-13 20:30:08 +02:00
Federico Jaramillo Martinez 47c24ed850 Merge branch 'main' into fix/pr-46-base-path 2026-07-13 19:55:14 +02:00
Federico Jaramillo Martinez 4df7f430d4 Merge branch 'main' into review-issue-48 2026-07-13 19:48:21 +02:00
Pi Web Agent c217c4a417 fix(docker): refuse unsafe development updates 2026-07-13 15:08:39 +00:00
Federico Jaramillo Martinez 050b053d23 test(sessiond): harden archive migration safety 2026-07-13 14:45:14 +02:00
Federico Jaramillo Martinez 31c98454ec fix(sessiond): migrate legacy archives before startup 2026-07-13 14:37:05 +02:00
Federico Jaramillo Martinez 7878cbe57b fix(sessions): add safe legacy archive migration core 2026-07-13 14:26:32 +02:00
Pi Web Agent 8b0452d545 fix(docker): synchronize dev dependency volume 2026-07-13 12:15:18 +00:00
Federico Jaramillo Martinez a9bcfe25ff fix: preserve plugin manifest compatibility 2026-07-13 12:29:21 +02:00
Federico Jaramillo Martinez ceeb0d413d fix(plugins): make manifests deployment relative 2026-07-12 23:28:03 +02:00
chenyimeng 27af5a70ad feat: support deploying pi-web under an arbitrary base path
Make all browser-facing API paths and WebSocket URLs relative so that
vite's <base href> can resolve them correctly when pi-web is served
from a subpath (e.g. /ai or /test/ai).

Also introduce PI_WEB_BASE_PATH so the server can generate plugin
module URLs that include the base path.
2026-07-12 23:27:43 +02:00
Federico Jaramillo Martinez d72b14f40a feat: add manual PI WEB update checks 2026-07-12 23:21:43 +02:00
Federico Jaramillo Martinez f9c0fed5e3 fix: preserve extension-only plugin asset MIME types 2026-07-12 23:07:16 +02:00
Federico Jaramillo Martinez ec0ca13120 fix: store session archives under PI_WEB_DATA_DIR 2026-07-12 22:52:59 +02:00
Federico Jaramillo Martinez 21c58fe656 fix: serve plugin SVG assets with correct MIME type 2026-07-12 22:39:41 +02:00
Federico Jaramillo Martinez 338faf4b81 perf: speed up chat loading and resume 2026-07-12 09:22:19 +02:00
Federico Jaramillo Martinez 6fbeed345e fix(sessions): clarify subsession join guidance 2026-07-11 22:03:31 +02:00
Federico Jaramillo Martinez 52925c1405 fix(sessions): restrict delegation tools in tracked children 2026-07-11 15:56:20 +02:00
Federico Jaramillo Martinez a660ba8ef8 fix(sessions): clarify subsession waiting behavior 2026-07-11 09:41:03 +02:00
Pi Web Agent 8f1b6b91ab fix: stream docker helper logs inline 2026-07-10 20:50:26 +00:00
Federico Jaramillo Martinez 410242aae8 Merge branch 'test-suite-audit-followup'
# Conflicts:
#	src/server/sessions/piSessionService.test.ts
2026-07-10 22:44:13 +02:00
Federico Jaramillo Martinez 32907bba5f chore(deps): update runtime and development packages 2026-07-10 22:10:40 +02:00
Pi Web Agent 3b2a225f87 fix(docker): resolve Pi runtime from peer dependency 2026-07-10 19:44:31 +00:00
Pi Web Agent 829b3508a4 fix: repair Docker installer asset fetch 2026-07-08 20:45:56 +00:00
Federico Jaramillo Martinez 6b61596ebd test(sessions): cover attachment filename safety 2026-07-05 00:49:45 +02:00
Federico Jaramillo Martinez 7b11f2ad75 test(server): cover websocket bridge behavior 2026-07-05 00:16:27 +02:00
Federico Jaramillo Martinez 168343a289 test(terminals): cover lifecycle publication 2026-07-05 00:11:22 +02:00
Federico Jaramillo Martinez 6bfb0a47d3 test(machines): cover remote mutation contract 2026-07-05 00:01:39 +02:00
Federico Jaramillo Martinez 1f26ae3935 test(sessions): cover archive lookup edge cases 2026-07-04 23:58:32 +02:00