Commit Graph
720 Commits
Author SHA1 Message Date
Federico Jaramillo Martinez 95102b8d78 fix(git): show staged submodule pointer moves and support spaced submodule paths
- parseStatus: detect staged submodule pointer moves by comparing the
  recorded HEAD/index OIDs (porcelain reports S... for a staged move, so
  the c flag never fires); staged moves previously vanished from the
  status response (PR #92 review finding B1).
- parseStatus: keep deleted gitlinks (index or working tree) as plain
  deletion rows instead of deferring them as submodules. Unstaged
  deletions vanished entirely, and staged deletions would render as a
  bogus pointer move to the zero OID. The finding assumed N... porcelain;
  git 2.54 actually emits .D/D. S... (finding S3's stated outcome).
- submodulePaths: parse 'git config -z' records so submodule paths with
  spaces survive .gitmodules key parsing instead of splitting lines at
  the first space (finding S1).
- tests: strip inherited GIT_* env vars in the fixture helper so the
  suite also passes when run from a git hook (pre-commit sets GIT_DIR).

Adds real-git fixture tests for staged moves, staged+dirty combos,
deleted submodules, inner renames, and spaced submodule/file paths.
2026-07-24 11:43:58 +02:00
Federico Jaramillo Martinez 63b85fc246 Merge branch 'pr-92-review' into test/pr-92 2026-07-24 10:21:29 +02:00
Federico Jaramillo Martinez 165928a543 docs(changeset): describe in-pane chevron in quiet-session-warnings
Update the single quiet-session-warnings changeset entry to cover the
final shipped behavior: status-bar expand/collapse toggle, the in-pane
minimise chevron restored in 2bdfd48, per-session remembered state, and
SVG warning icons. Frontmatter (patch) unchanged. No new changeset.

Relay restore-warning-chevron leg 2 (final).
2026-07-23 12:03:28 +02:00
Federico Jaramillo Martinez 8f6688e76e fix(ui): restore in-pane minimise chevron for session warnings
Re-add the minimise chevron to the expanded session-warnings pane in
ChatView, wired to the existing unified onToggleWarnings (toggle ≡
collapse in the expanded state). The status-bar warning toggle from
a13778c is retained unchanged; both controls share the single
sessionWarningVisibility mutation, so they cannot desync.

- ChatView: onToggleWarnings prop + handleToggleWarnings; chevron
  rendered inline via html (no svg re-import), guarded by
  onToggleWarnings === undefined.
- PiWebApp: renderChatView <chat-view> passes .onToggleWarnings.
- shared.ts: restore .session-warnings-controls / -collapse / icon CSS.
- ChatView.test.ts: restore the chevron-wiring test against
  onToggleWarnings via the session-warnings-collapse marker.

Relay restore-warning-chevron leg 1.
2026-07-23 12:03:28 +02:00
Federico Jaramillo Martinez 10f49f349c Merge pull request #91 from jmfederico/agent/global-provider-policy
fix: freeze extension providers to the global startup baseline
2026-07-23 12:01:01 +02:00
Federico Jaramillo Martinez e8d418a71a docs: distinguish Pi extensions from PI WEB plugins 2026-07-22 23:53:30 +02:00
Federico Jaramillo Martinez ced3261651 test(sessions): make unread checks portable 2026-07-22 23:36:28 +02:00
Federico Jaramillo Martinez e70b3d6bb9 fix(sessions): keep ignored provider mutations inert 2026-07-22 20:58:56 +02:00
Federico Jaramillo Martinez ee8d9e5359 docs: document immutable provider bootstrap 2026-07-22 20:46:41 +02:00
Federico Jaramillo Martinez 66f0ea44ce test(sessions): cover immutable provider baseline 2026-07-22 20:39:43 +02:00
Federico Jaramillo Martinez 04d8134ba4 fix(sessions): freeze providers after global bootstrap 2026-07-22 20:31:08 +02:00
Federico Jaramillo Martinez c2bf595999 feat(sessions): allow global-extension providers, require Pi 0.81
Relaxes the provider policy from 'global config only' to 'global sources':
providers registered by agent-dir (global) extensions are learned once at
daemon startup and allowed on the shared runtime; project-extension
registrations are still rejected with a session warning. Global extensions
load identically for every session, so their providers are daemon-consistent
and cannot leak project state (#76).

- Shim now allows allowlisted ids through and also covers Pi 0.81's native
  provider path (registerNativeProvider), closing a bypass.
- Startup learning step loads only global extensions against a scratch cwd
  and diffs the runtime's registered provider ids.
- Bumps @earendil-works/* dev/peer ranges to >=0.81.1 <0.82; adapts to the
  Agent.streamFn -> streamFunction rename.
- Docs, changeset, unit and acceptance tests updated (global-extension allow
  path, late re-registration a la pi-tensorx, native provider rule).
2026-07-22 17:13:57 +02:00
lzr dd435cb1b0 feat(git): view submodule working-tree changes in the Git panel
Recurse into dirty submodules when building the Git status so their
modified and untracked files appear as full-path entries, and add a
commit-pointer entry (with short SHAs) only when the recorded commit
actually moved. Route diffs whose path falls inside a submodule to run
in that submodule's working tree so real per-file diffs are shown.

The changed-file list groups these under the submodule: tree view keeps
the nested structure and marks the submodule root with a badge, list
view flattens them into one expandable group pinned above the ordinary
files. Depth 1 only; ignored files are excluded; the panel stays
read-only.

Covered by client tree/list-grouping tests, parser tests, and a
server test that drives a real temporary repository and submodule.
2026-07-22 21:35:06 +08:00
lzr 8a5aaf93a1 feat(git): add list/tree toggle for changed files in the Git panel
Extract the Git panel into a dedicated `workspace-git-panel` Lit component
(mirroring the Files panel) and add a segmented List/Tree toggle next to
Refresh.

Tree view builds an in-memory, collapsible directory tree from the changed
files, starts fully collapsed, and offers a single expand-all/collapse-all
button (visible only in tree view). List view keeps the existing flat,
full-path rows. The selected view mode persists in localStorage under
`pi-web.gitFileView`; per-directory expand state is intentionally ephemeral.

- gitFileViewPreference.ts: localStorage-backed view preference (+ test)
- gitFileTree.ts: pure flat-paths -> nested-tree builder (+ test)
- WorkspaceGitPanel.ts: the panel component with toggle + tree state
2026-07-22 21:34:54 +08:00
Federico Jaramillo Martinez 242911331a docs: document global provider policy and extension registration rejection 2026-07-22 09:36:32 +02:00
Federico Jaramillo Martinez fb4ceb5d04 test(sessions): cover the global provider policy
Unit tests for the policy shim (swallowed registrations, no-op
unregister, untouched global providers, rejection wording) and
acceptance tests wired as sessiond wires production: load-time
rejections surface as session warnings while extension tools and
commands keep working, late registrations are broadcast to active
sessions' notification inboxes, colliding provider ids across
workspaces cannot affect each other, and a project-level models.json
does not alter the shared runtime.
2026-07-22 09:30:40 +02:00
Federico Jaramillo Martinez 20d424c48f feat(sessions): reject extension-scoped provider registrations
PI WEB only supports globally configured providers (Pi built-ins,
agent-dir models.json, environment credentials). A daemon-wide shim on
the shared ModelRuntime swallows extension registerProvider calls and
makes unregisterProvider a no-op, so one workspace's extensions can no
longer corrupt the provider set of concurrent sessions (issue #76).

Rejections during a services load surface as session warnings through
the existing diagnostics pipeline; late registrations from session
event handlers broadcast a notification to active sessions. Everything
else extensions register keeps working.

Requires manual restart of pi-web-sessiond.service (daemon wiring changed).
2026-07-22 08:57:05 +02:00
Federico Jaramillo Martinez 24a3d3611e fix(ui): compact session tree indentation and allow default navigation after invalid custom input
- Only increment visual branch depth after forks so long linear session
  histories stay in one lane instead of scrolling off-screen; lower the
  max visual depth cap to match.
- Reset to the no-summary default when leaving an invalid custom summary
  choice so Navigate is never permanently disabled by a stale invalid entry.
2026-07-21 11:11:10 +02:00
Federico Jaramillo Martinez a13778c97b fix(ui): keep warning toggle visible 2026-07-21 10:43:13 +02:00
Federico Jaramillo Martinez 115d74e79a feat(sessions): persist shared unread state 2026-07-20 19:36:16 +02:00
Federico Jaramillo Martinez a20a8c8c09 fix: preserve minimised warnings across session navigation 2026-07-20 19:35:45 +02:00
Federico Jaramillo Martinez 15c12aa1b8 Merge pull request #81 from jmfederico/agent/issue-80-assessment
fix(sessions): provide plain-text extension theme
2026-07-20 15:04:27 +02:00
Federico Jaramillo Martinez a884773357 fix(sessions): provide plain-text extension theme 2026-07-20 14:01:47 +02:00
Federico Jaramillo Martinez b48b147b5b fix(install): allow node-pty scripts with npm 12 2026-07-20 11:57:39 +02:00
Federico Jaramillo Martinez 4ca4a1d096 feat: add hierarchical session tree navigator 2026-07-20 10:40:17 +02:00
Federico Jaramillo Martinez a77c83b309 fix(sessions): clarify delegation tool guidance 2026-07-20 00:48:08 +02:00
Federico Jaramillo Martinez 2c777b4959 feat: add collapsible session warnings 2026-07-19 22:39:35 +02:00
Federico Jaramillo Martinez d5650aef5b fix: scope notifications to the selected chat 2026-07-19 10:37:36 +02:00
Federico Jaramillo Martinez df8cf5a250 Merge pull request #77 from jmfederico/agent/session-notification-inbox
feat(sessions): add ephemeral notification inbox
2026-07-19 06:15:05 +02:00
Federico Jaramillo Martinez b85e1b9ebe fix: show project activity for external worktrees 2026-07-19 06:13:09 +02:00
Federico Jaramillo Martinez 793b492153 fix(sessions): canonicalize notification route cwd 2026-07-19 02:24:38 +02:00
Federico Jaramillo Martinez 71fd091e0e fix(sessions): preserve notification inbox authority 2026-07-19 02:17:59 +02:00
Federico Jaramillo Martinez 503c2c743d fix(sessions): harden notification inbox reconnects 2026-07-19 01:49:06 +02:00
Federico Jaramillo Martinez ada6f0ce1f feat(ui): add session notification tray and badges 2026-07-19 01:28:45 +02:00
Federico Jaramillo Martinez 6e09df8329 feat(sessions): add daemon notification inbox protocol 2026-07-19 01:28:45 +02:00
Federico Jaramillo Martinez d77ca66f28 chore(release): v1.202607.1 2026-07-19 00:37:48 +02:00
Federico Jaramillo Martinez 008c83bf72 Merge pull request #73 from jmfederico/agent/pr-64-audit
fix(auth): preserve browser auth-flow ownership
2026-07-18 22:14:44 +02:00
Federico Jaramillo Martinez 8ea3018415 fix(auth): guard post-login status refresh
Skip opportunistic status requests when the flow's originating machine is no longer selected, and discard in-flight status results after the machine or session selection changes.\n\nRefs #74
2026-07-18 21:54:26 +02:00
Federico Jaramillo Martinez d29fbb98b2 Merge pull request #70 from jmfederico/agent/issue-67
fix(terminals): load interactive login profiles
2026-07-18 21:46:57 +02:00
Federico Jaramillo Martinez 55cc1b7a3b test(auth): cover completion machine affinity
Verify that an auth flow's terminal status refresh remains targeted at the flow's originating machine after the selected machine changes.\n\nRefs #74
2026-07-18 21:18:53 +02:00
Federico Jaramillo Martinez 62396c3165 fix(auth): bind flows to their originating machine
Retain client-owned machine affinity for each interactive auth flow and use it for prompt responses, polling, cancellation, and completion refreshes. This prevents a later machine selection from forwarding secrets to a different remote.\n\nRefs #74
2026-07-18 21:09:51 +02:00
Federico Jaramillo Martinez 67f673b227 fix(auth): cancel stale started flows
Best-effort cancel a running auth flow when its start response arrives after the browser operation was closed or superseded, so sessiond does not retain orphaned provider polling or callback listeners.\n\nRefs #72
2026-07-18 20:55:28 +02:00
Federico Jaramillo Martinez bd99c44286 Merge pull request #71 from jmfederico/agent/issue-68
fix(sessions): surface extension command notifications
2026-07-18 20:54:39 +02:00
Federico Jaramillo Martinez d72a0012c7 fix(sessions): surface extension command notifications 2026-07-18 20:49:41 +02:00
Federico Jaramillo Martinez 2b1507ba35 fix(terminals): load interactive login profiles 2026-07-18 20:47:07 +02:00
Federico Jaramillo Martinez d2e2d512cd Merge pull request #64 from jmfederico/fix/issue-62-authstorage
fix: migrate auth/model plumbing to ModelRuntime (fixes #62)
2026-07-18 18:20:03 +02:00
Federico Jaramillo Martinez 5ebcd34690 docs: clarify supported Pi range 2026-07-18 08:40:12 +02:00
Federico Jaramillo Martinez 65350fd1b5 fix(realtime): terminate failed sockets 2026-07-18 08:33:51 +02:00
Federico Jaramillo Martinez c569a03f54 fix(auth): make API-key setup and status truthful 2026-07-18 08:28:03 +02:00
Federico Jaramillo Martinez cc8f379143 fix(auth): invalidate stale browser OAuth operations 2026-07-18 08:06:18 +02:00