Skip to content

feat: add agent provider credential storage - #574

Closed
Deeds67 wants to merge 1403 commits into
mainfrom
explore/pi-agent-brainstorm
Closed

Deeds67 wants to merge 1403 commits into
mainfrom
explore/pi-agent-brainstorm

Conversation

@Deeds67

@Deeds67 Deeds67 commented May 14, 2026 •

Copy link
Copy Markdown
Collaborator

Doing a little spike adding pi.dev into Noodle Gallery ;)

@Deeds67 Deeds67 added the changelog:feat Feature change for changelog label May 14, 2026
@Deeds67 Deeds67 changed the title feat: add agent provider credential storage [SPIKE] feat: add agent provider credential storage May 14, 2026
@Deeds67 Deeds67 changed the title [SPIKE] feat: add agent provider credential storage feat: [SPIKE] add agent provider credential storage May 14, 2026
@Deeds67 Deeds67 changed the title feat: [SPIKE] add agent provider credential storage feat: add agent provider credential storage May 14, 2026
@Deeds67
Deeds67 force-pushed the explore/pi-agent-brainstorm branch from f9632a1 to 4318188 Compare May 14, 2026 19:28
@Deeds67
Deeds67 force-pushed the explore/pi-agent-brainstorm branch from d382868 to 32a90a5 Compare May 16, 2026 11:04
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label May 16, 2026
@Deeds67
Deeds67 force-pushed the explore/pi-agent-brainstorm branch from 330aca4 to e6055d6 Compare May 23, 2026 20:00
Deeds67 added 19 commits May 30, 2026 17:13
…eal search-filter contract (phase 2 slice 2)
… workflows (phase 2 slice 5)

Adds resolveAssetSearchFilters to requiredReadTools for archive/favorite/tag/
create_album; finishes the contract fixture (rating-range + visibility-enum);
L1 entity recall/slot scenarios (full L1 100%, baseline re-seeded); L3 entity
routing + plan scenarios (baseline.l3 re-seed pending the Phase-0 RC).

create_album classifier text intentionally omits 'place' to keep the trip vs
create-album boundary; entity-album requests route via regex + the resolver.
…on + L1/L3 (phase 2 slice 9)

Closes Phase 1. Also fixes a regex-path integration bug surfaced by L1: match()
emits a NUMERIC rating but parseRatingValue used clean() (string-only), so
parseSlots returned null for 'rate … N stars' — now handles numbers. e2e-runtime
metadata-description test adapted (strict workflow now owns bounded metadata
edits; unbounded sources still hand off to the legacy path). Full L1 100% (84/84,
runs=5), baseline.json re-seeded.
…ation + L1/L3 (phase 2 slice 12)

Closes Phase 2. Collision guards (favorites→favorite, space→manage_space_members,
tag→none) verified. Also hardened the router: a 'delete the photos from my recent
trip' (recent-trip in the album position) is no longer claimed. Full L1 100%
(90/90, runs=5), baseline.json re-seeded.
…tures + registration + L1/L3 (phase 2 slice 14)

Closes Phase 3. Steals '… to the <space> space' from add_photos (ADD via
proposeAddAssetsToSpaceFromSearch spaceId-only; REMOVE via space.removeAssets
op). Removed the now-stale neg.space.add-photos L1 negative + flipped the L3 one.
Stabilized create_recent_trip_album recall (vacation/getaway/holiday are trips)
to stop borderline trip recalls flaking on each manifest addition. Full L1 100%
(94/94, runs=5), baseline.json re-seeded.
…rch selectionHandle assetSource (phase 2 slice 16)
…ation + L1/L3 (phase 2 slice 17)

Closes Phase 4. Full L1 100% (100/100), 0 regressions — createspace recall/slot/
negatives + album/member disambig all green. baseline.json re-seed deferred to the
final slice (one runs=5 --accept) to avoid re-recording the flaky trip-copy test.
…stration + L1/L3) (phase 2 slice 20)

Closes Phase 5. All 6 new workflows + the named-entity resolver are now
implemented + registered (20/23 slices). Full L1 100% (111/111), 0 regressions.
Deeds67 added 24 commits June 10, 2026 00:47
…aces activity block + busy indicator)

Wire `buildAgentTurnTimelines` into the chat panel: each assistant turn produces an `AgentTurnTimeline` that renders as a running one-liner ("Thinking…") while the session is active, or a settled summary button ("N steps") once completed. `coveredToolCallIds` is now derived from the timeline rows, removing the need for the old activity-block and busy-indicator. Adds 26 `assistant_timeline_*` i18n keys.
… (restores dropped guard)

Adds a module-private redactTechnicalText() to agent-turn-timeline-ui.ts
(exact patterns from agent-activity-ui.ts: Bearer/Basic headers,
token/api_key assignments, runner token, provider key, sk-* keys) and
applies it to summaryText, requestSummary, responseSummary, and error
when building each row. Restores the redaction guard that was removed
with AgentActivityBlock in Slice 3, with builder-level and panel-level
tests.
…emoved

Replace the ⋯ overflow menu in the session header with a plain Details
icon-pill button (mdiInformationOutline, rounded-full). Remove the
AgentActivityVisibilityMode type, its localStorage persistence
(readAgentActivityVisibilityMode / writeAgentActivityVisibilityMode),
the storage-event listener in the pane, and the mode props threaded
through header → pane → chat panel. Delete agent-activity-visibility-ui.ts,
agent-activity-visibility-menu.svelte, and their specs.
…odel code

Delete agent-activity-block.svelte (replaced by agent-turn-timeline in
Slice 3), agent-activity-ui.ts (buildAgentActivityModel / buildAgentActivityTechnicalRows
/ redactAgentActivityTechnicalText all dead with no live callers), and
agent-session-activity-turns-ui.ts's buildAgentSessionActivityTurns path
(also dead — no non-spec caller). Thin agent-session-activity-turns-ui.ts
to keep only the anchor helpers that agent-turn-timeline-ui.ts still needs
(buildStableTurnAnchors / toolCallBelongsToTurn / activityEventBelongsToTurn)
plus the AgentActivityEvent type definition. Delete all specs whose only
tested functions are now deleted.
Remove 38 keys from i18n/en.json that were only used by the deleted
activity block and visibility menu (assistant_activity_count,
assistant_activity_hide/show/show_newer/show_older,
assistant_activity_status_*, assistant_activity_summary_title,
assistant_activity_technical_*, assistant_activity_title,
assistant_activity_visibility*, assistant_activity_window_summary,
assistant_session_menu, assistant_busy_ascii). Purge the corresponding
dead entries from spec mock maps. Fix a pre-existing TS2322 in
agent-turn-timeline-ui.spec.ts (null → undefined for requestSummary).
…ultSize)

Local check:svelte is a no-op (scans 0 files) so these only surfaced in CI:
dynamic $t() calls need Translations-typed keys (timeline one-liner/verb map,
onboarding preset labels and chips), and the timeline row's resultSize guard
could not narrow undefined out of the SDK's optional field.
…ssages

Sessions rest at status Running between turns, so the timeline's
last-turn-plus-active-session rule kept the one-liner ("Thinking...")
alive forever once the assistant had answered. A turn is now only
running while its anchor has no terminal assistant message.

Also re-sync messages when a terminal activity event arrives: the
Slice-1 closer events fire at every settle, which covers the race where
assistant-message-created beat the panel's websocket subscription (the
response then only appeared after a manual refresh).
The previous fix only healed when SOME websocket event arrived, but
delivery is best-effort: dev-server restarts kill sockets silently and
fast turns can finish before the panel subscribes. The buggy session ran
in a window with no live websocket connection at all, so nothing ever
brought the assistant's reply in.

While the latest turn is running (session active, no terminal assistant
answer) the panel now polls messages + activity events every 2.5s —
mirroring the action dock's poll-while-active design. The poll is
self-limiting: the answer's arrival settles the turn, which stops it.
…rawer

The action dock's poll returns a fresh session object every cycle; the
workspace swapped it into localSessions unconditionally, changing the
pane's session prop identity, which reset the drawer's derived open
state. The workspace now keeps the existing object when status and
updatedAt are unchanged, and the drawer closes only when the session ID
actually changes.
Deletes could intermittently leave dangling rows until a refresh: the
server row was gone (retries 400'd with not-found) but the local list
update was lost to a race. Deletion now treats 400/404 as success (the
row is gone either way, so remove it locally), surfaces genuine failures
via toast instead of an unhandled rejection, and re-syncs the session
list from the server afterwards (churn-guarded) so the sidebar always
converges with reality.
…ware

Sessions rest at status Running between turns, so the action dock's 3s
tool-call/session poll ran forever on every open chat. The chat panel
already knows precisely when a turn is in progress (latestTurnRunning);
it now signals that up through the pane to the dock, which polls only
while a turn is running or approvals/apply work is pending. When the
assistant has answered, all polling stops.
Deeds67 added a commit that referenced this pull request Jun 11, 2026
- fix(agent): linearize manage_album_access SHARE_WITH regex (CodeQL js/redos — splitMembers already parses the member list)
- fix(web): add shareAlbums/lockAssets/deleteContainers to 15 agent spec writeScope fixtures (SDK type gained the 3 scopes → web check:typescript)
- style: prettier server (agent-operation-plan.service[.spec], agent-operation.dto.spec) + the slice plan docs (Test & Lint Server + Docs Build prettier gates)
Deeds67 added a commit that referenced this pull request Jun 11, 2026
- fix(agent): linearize manage_album_access SHARE_WITH regex (CodeQL js/redos — splitMembers already parses the member list)
- fix(web): add shareAlbums/lockAssets/deleteContainers to 15 agent spec writeScope fixtures (SDK type gained the 3 scopes → web check:typescript)
- style: prettier server (agent-operation-plan.service[.spec], agent-operation.dto.spec) + the slice plan docs (Test & Lint Server + Docs Build prettier gates)
Deeds67 added a commit that referenced this pull request Jun 17, 2026
- fix(agent): linearize manage_album_access SHARE_WITH regex (CodeQL js/redos — splitMembers already parses the member list)
- fix(web): add shareAlbums/lockAssets/deleteContainers to 15 agent spec writeScope fixtures (SDK type gained the 3 scopes → web check:typescript)
- style: prettier server (agent-operation-plan.service[.spec], agent-operation.dto.spec) + the slice plan docs (Test & Lint Server + Docs Build prettier gates)
Deeds67 added a commit that referenced this pull request Jun 18, 2026
- fix(agent): linearize manage_album_access SHARE_WITH regex (CodeQL js/redos — splitMembers already parses the member list)
- fix(web): add shareAlbums/lockAssets/deleteContainers to 15 agent spec writeScope fixtures (SDK type gained the 3 scopes → web check:typescript)
- style: prettier server (agent-operation-plan.service[.spec], agent-operation.dto.spec) + the slice plan docs (Test & Lint Server + Docs Build prettier gates)
Deeds67 added a commit that referenced this pull request Jun 25, 2026
- fix(agent): linearize manage_album_access SHARE_WITH regex (CodeQL js/redos — splitMembers already parses the member list)
- fix(web): add shareAlbums/lockAssets/deleteContainers to 15 agent spec writeScope fixtures (SDK type gained the 3 scopes → web check:typescript)
- style: prettier server (agent-operation-plan.service[.spec], agent-operation.dto.spec) + the slice plan docs (Test & Lint Server + Docs Build prettier gates)
@Deeds67 Deeds67 closed this Jun 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog:feat Feature change for changelog documentation Improvements or additions to documentation 🧠machine-learning 📱mobile 🗄️server 🖥️web

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants