Commit Graph
451 Commits
Author SHA1 Message Date
Federico Jaramillo Martinez 7e812aa7f5 feat: support general chat file attachments 2026-06-25 21:32:07 +02:00
Federico Jaramillo Martinez 790b36f0ea docs: improve screenshot gallery 2026-06-25 15:50:45 +02:00
Federico Jaramillo Martinez a4ad23545a docs: refresh README overview 2026-06-25 15:39:44 +02:00
Federico Jaramillo Martinez cd5843e8e5 chore: update package lock 2026-06-25 15:20:42 +02:00
Federico Jaramillo Martinez e46d9ecbf8 feat: add safe manual workspace uploads 2026-06-25 15:16:44 +02:00
Federico Jaramillo Martinez f0b779b062 Merge pull request #32 from gilbertwong96/fix/fish-doctor-version-check
fix: run doctor version checks under fish
2026-06-25 14:47:34 +02:00
Federico Jaramillo Martinez 5269a7a7d7 fix: support symlinked CLI entrypoint guard 2026-06-25 14:41:58 +02:00
Federico Jaramillo Martinez f4ae82ab25 Merge pull request #34 from jmfederico/improve-relay-context-containment
docs(relay): add context-contained status baton
2026-06-25 11:54:18 +02:00
Federico Jaramillo Martinez 53073ad01c Merge branch 'main' into improve-relay-context-containment 2026-06-25 11:53:49 +02:00
Federico Jaramillo Martinez fb9d444743 docs(relay): add context-contained status baton 2026-06-25 11:30:49 +02:00
Federico Jaramillo Martinez 3c09915638 Merge pull request #31 from jmfederico/fix/persist-subsession-links
fix: persist tracked subsession links
2026-06-25 11:09:46 +02:00
Federico Jaramillo Martinez 446f588324 Merge branch 'main' into fix/persist-subsession-links 2026-06-25 11:09:18 +02:00
Federico Jaramillo Martinez 56c1c1714e fix: treat missing subsession files as unavailable 2026-06-25 11:08:26 +02:00
Federico Jaramillo Martinez 729635d246 Merge pull request #33 from jmfederico/feat/git-inline-diff
feat: add inline Git diff highlights
2026-06-25 11:01:45 +02:00
Federico Jaramillo Martinez b14205e523 feat: add inline Git diff highlights 2026-06-25 10:57:28 +02:00
Federico Jaramillo Martinez b0b497d493 fix: require exact active subsession files 2026-06-25 09:47:41 +02:00
Federico Jaramillo Martinez 5550c60950 fix: enforce exact subsession recovery links 2026-06-25 09:27:10 +02:00
Gilbert 47c9b66819 fix: run doctor version checks under fish
The doctor "can find npm/pi" checks wrap the version command in a POSIX
subshell, `(cmd --version 2>&1 || true)`. Fish treats `( ... )` as command
substitution syntax and forbids it in command position, so every fish user saw
false-negative failures:

  fish: command substitutions not allowed in command position
  command -v npm && (npm --version 2>&1 || true)

Branch on the detected service shell and emit fish's `begin; ...; end`
grouping for fish, mirroring the existing fish-aware quoting in
serviceShellQuote. Bash and zsh keep the POSIX subshell.

Also guard the `main()` invocation with an ESM main-module check so the CLI
helpers can be imported by tests without side effects, and add a regression
test covering the bash, zsh, and fish command shapes.
2026-06-25 10:54:49 +08:00
Federico Jaramillo Martinez 417b04a23f fix: harden subsession recovery validation 2026-06-25 00:30:16 +02:00
Federico Jaramillo Martinez a99696bd09 fix: persist tracked subsession links 2026-06-25 00:20:19 +02:00
Federico Jaramillo Martinez deb4f9feca Merge pull request #30 from jmfederico/feat/plugin-panel-prompt-context
feat: expose prompt helper to workspace panels
2026-06-25 00:07:55 +02:00
Federico Jaramillo Martinez 9980027cee feat: expose prompt helper to workspace panels 2026-06-24 23:59:39 +02:00
Federico Jaramillo Martinez f6fbf6b851 Merge pull request #25 from jmfederico/cleanup/plugin-api-scope
feat: plugin API — workspace file mutations & prompt editor access
2026-06-24 09:23:53 +02:00
Federico Jaramillo Martinez 3134421652 chore(release): v1.202606.6 2026-06-24 09:17:26 +02:00
Federico Jaramillo Martinez c479a0d54d fix: support pi-ai provider compat entrypoint 2026-06-24 09:15:32 +02:00
Federico Jaramillo Martinez a0dd9e1cd7 Merge branch 'main' into cleanup/plugin-api-scope 2026-06-24 08:49:49 +02:00
Federico Jaramillo Martinez bf36df24fd chore(release): v1.202606.5 2026-06-23 21:37:02 +02:00
Federico Jaramillo Martinez 2bb6e48a8b fix: normalize Windows path suggestions 2026-06-23 20:03:44 +02:00
Federico Jaramillo Martinez c2e2a29847 docs: add PI WEB configuration reference 2026-06-23 19:58:36 +02:00
Federico Jaramillo Martinez 6933d3aa88 fix: guard stale mobile navigation focus 2026-06-23 15:01:05 +02:00
Federico Jaramillo Martinez 4f4c6fa794 fix: proxy remote session reloads 2026-06-23 14:44:24 +02:00
Federico Jaramillo Martinez 8ceadb2a62 docs: replace demo animation with screenshots 2026-06-23 14:12:09 +02:00
Federico Jaramillo Martinez 9cc20d65fb feat: add external path access allowlist 2026-06-23 12:30:30 +02:00
Federico Jaramillo Martinez 997b821717 feat: add check_subsession and an exploratory read_subsession transcript reader
Split subsession inspection into two tools: check_subsession gives a quick
glance (status + latest assistant output), while read_subsession reads through
a child's transcript with role/content filters, full-content substring search
(including tool-call args), optional per-value maxChars truncation that flags
clipped parts, includeToolArgs, and pagination.

Filtering and search run on full untruncated content; truncation is an explicit,
caller-owned final projection (no default) so a narrow read never silently hides
a match. Empty page-windows are distinguished from zero-match results.
2026-06-19 23:48:12 +02:00
Federico Jaramillo Martinez 62c2234b85 fix: avoid duplicate skill loading cards 2026-06-19 23:44:58 +02:00
Federico Jaramillo Martinez 1e8cfe9073 chore(deps): refresh dependencies to latest in-range versions
Ran npm update to refresh the lockfile to the latest versions allowed by
the existing package.json ranges; no declared ranges changed.

Notable bumps:
- @earendil-works/pi-coding-agent 0.79.1 -> 0.79.8
- @earendil-works/pi-agent-core 0.79.3 -> 0.79.8
- @earendil-works/pi-ai 0.79.3 -> 0.79.8
- eslint 10.3.0 -> 10.5.0, typescript-eslint 8.59.2 -> 8.61.1
- vitest 4.1.5 -> 4.1.9, tsx 4.21.0 -> 4.22.4, vite 7.3.3 -> 7.3.5, ws 8.20.1 -> 8.21.0

Out-of-range majors left for a deliberate upgrade. npm audit --omit=dev: 0 vulnerabilities.
2026-06-19 12:59:26 +02:00
Federico Jaramillo Martinez 27bc924d4c fix: persist subsessions setting 2026-06-18 22:17:56 +02:00
Federico Jaramillo Martinez d93110135b fix: dead-key/IME input in terminal (e.g. Swedish ~) 2026-06-18 12:00:03 +02:00
Federico Jaramillo Martinez ab46d7addc feat: add relay skill and distributable skills folder
Add the Relay method skill (execute a long plan as a chain of independent
sessions handing off via spawn_session) under a top-level skills/ folder that
follows the open agent-skills convention, installable with the skills CLI.

Also clarify the changeset-changelog skill: no changeset is needed for changes
outside the npm release allowlist (package.json files), such as repo-only
agent skills under .agents/ and skills/.
2026-06-17 12:17:11 +02:00
Federico Jaramillo Martinez 355ebe8cf8 feat(sessions): add tracked subsessions behind a beta flag
Add spawn_subsession / list_subsessions / read_subsession tools that let an
agent start child sessions it stays attached to: the child records its parent
in the session tree, the parent is notified (as a system-authored custom
message that wakes an idle parent and queues behind in-flight work) when the
child stops working, and the parent can inspect children's status and result.

Gated behind a beta flag, off by default, mirroring spawnSessions: enable via
PI_WEB_SUBSESSIONS, the subsessions config key, or the Settings toggle. Also
requires spawnSessions.

Also fix the release skill so the version step resyncs package-lock.json
(npm install --package-lock-only) and the commit step refuses a release where
package.json and package-lock.json versions disagree.
2026-06-17 12:13:23 +02:00
Federico Jaramillo Martinez ef454f2b65 chore: sync package-lock.json to 1.202606.4
The v1.202606.4 release bumped package.json but left package-lock.json at
1.202606.3, surfacing as a phantom diff after npm install. Sync it.
2026-06-17 12:12:37 +02:00
Federico Jaramillo Martinez ebe65b7565 chore(release): v1.202606.4 2026-06-17 01:11:12 +02:00
Federico Jaramillo Martinez 82db7caeac docs: update changeset to drop removed message accent stripe 2026-06-17 01:04:05 +02:00
Federico Jaramillo Martinez 32d11de38c Rename attachment folder from .pi-web/paste to .pi-web/attachments
Attachments can be pasted, dropped, or uploaded, so 'paste' was too
narrow. Rename the default folder and filename prefix accordingly and
update the changeset reference.
2026-06-17 01:02:33 +02:00
Federico Jaramillo Martinez 81dba2abc9 fix: remove 3px left border on chat bubbles 2026-06-17 00:57:17 +02:00
Federico Jaramillo Martinez 3930505450 Fix stuck "Catching up…" badge after session goes idle
The stream catch-up mode was represented by two fields that could drift:
the private catchupStreamSessionId guard (which suppresses live transcript
events while the in-flight message prefix is missing) and the public
isReceivingPartialStream flag (which drives the badge). The socket reconnect
path (refreshSelectedSession) set the flag from status without updating the
guard, so a later idle status.update was skipped by the guard check and the
badge never cleared.

Route every mutation of the mode through a single setStreamCatchup helper so
the guard and badge can't disagree, and clear the mode on any non-streaming
status for the selected session.
2026-06-17 00:43:53 +02:00
Federico Jaramillo Martinez e77ab98361 fix(sessions): stop duplicating user message for slash commands
A slash command sent as the first (or any idle) message showed the raw
command text twice until reload: once from the client's optimistic insert
and once from the server's message.append echo, neither of which converges
with the agent's canonical expanded message (e.g. a /skill:* block).

Make commands obey the same source-of-truth contract as prompts:
- client no longer inserts the raw command text optimistically; it shows
  the existing per-session sending indicator instead
- forwarded runtime/skill commands return a bare done result rather than a
  synthetic "Accepted ..." line
- server suppresses the raw message.append echo for command-forwarded
  prompts (threaded through the compaction queue too)

Result: pre-reload state matches reload, with no transient duplicate.
2026-06-17 00:02:04 +02:00
Federico Jaramillo Martinez dd23b3e054 fix(sessions): dedupe started session when created broadcast races
The session.created global event (added with spawn_session) could arrive
in the initiating tab before the start request's HTTP response resolved.
applyCreatedSession inserted a plain session row (archive/reload actions)
and then startSession unconditionally prepended the cached version (delete
action), leaving two badges with the same id.

Make the optimistic insert idempotent by filtering out any existing entry
with the same id before prepending the cached session, so the locally
cached session always wins regardless of event ordering.
2026-06-16 23:40:47 +02:00
Federico Jaramillo Martinez 1c6bc96110 Show Tasks tab badge only for unavailable config
Drop the task-count badge so the Tasks tab no longer draws attention
during normal use. Keep the '!' badge for when the tasks config exists
but cannot be loaded, which is the only state that warrants attention.
2026-06-16 22:32:57 +02:00
Federico Jaramillo Martinez 95c151233a feat: let agents start new sessions via spawn_session tool
Add a project-scoped spawn_session tool so agents can dispatch new,
independent sessions (ralph loops, long-plan chaining). Spawned sessions
are constrained to a workspace/worktree of the same registered project,
appear in the session list immediately via a new session.created event,
and the capability is on by default with a Settings -> Session daemon
toggle (spawnSessions / PI_WEB_SPAWN_SESSIONS).

Note: adds a session daemon code path, so pi-web-sessiond.service must be
restarted manually for the server side to take effect.
2026-06-16 14:53:37 +02:00