Releases: portel-dev/photon
Releases · portel-dev/photon
v1.22.1
Bug Fixes
- ci: sync package-lock.json with package.json and add lockfile guardrail (#)
The v1.22.0 release bumped @portel/photon-core from ^2.20.0 to ^2.22.0 in package.json but bun install did not regenerate package-lock.json. CI and Release workflows run 'npm ci' which requires the lock file to match exactly -- both workflows failed with EUSAGE.
Full changelog: v1.22.0...v1.22.1
v1.22.0
Highlights
Full OpenTelemetry stack: traces + metrics + logs
Set OTEL_EXPORTER_OTLP_ENDPOINT, install @opentelemetry/sdk-node, and every span/counter/histogram/log record exports automatically. See docs/guides/observability.md for the one-page setup.
Observability
- W3C
traceparentpropagation with parent-context chaining acrossthis.call() photon.tool.durationhistogram,photon.tool.calls/errorscounters,photon.circuit_breaker.transitions,photon.rate_limit.rejections,photon.bulkhead.rejectionsAsyncLocalStoragerequest context (getRequestContext()) with ambientphoton/tool/traceId/caller- Logger auto-enrichment from ambient context; OTel logs bridge via
@opentelemetry/api-logs recordExceptionwith full stack viaError.causechain- Force-sampled error spans
Error handling
- MCP tool errors return
structuredContent.errorwith{ type, retryable, message }for typed auto-retry - Classifications:
circuit_open,rate_limited,bulkhead_full,validation_error,timeout_error,network_error,permission_error,not_found_error PhotonErrornative{ cause }support via photon-core 2.21+wrapErrorpreserves root cause chain
Resilience
- Circuit breaker half-open probe latch (only one probe allowed through)
@bulkhead Nmiddleware for concurrent-execution cap- Circuit state-change broadcasts for reactive UI updates
Health
GET /api/health— liveness/readiness with per-subsystem breakdown (runtime, daemon, photons, circuits); returns 503 when degradedGET /api/health/circuits— per-circuit state detail
AG-UI
RUN_ERRORcarriescode,retryable,runId,threadId- Every event includes
rawEvent.traceparentfor OTel correlation - Capability handshake:
experimental['ag-ui'].featuresadvertises server-side features
Promise coverage
65/65 assertions pass; Intent 10 (Standards-Aligned) grew from 10 → 27 documented assertions.
Dependencies
@portel/photon-core ^2.22.0 (from ^2.20.0):
PhotonError({ cause })constructor (2.21.0)@bulkheadmiddleware (2.22.0)- Audit path fixes for flat local-namespace layout
Full changelog: v1.21.0...v1.22.0
v1.21.0
v1.20.1
1.20.1 (2026-04-10)
Features
- add hideCloseButton property to photon-studio component (39a4b80)
- photon creation flow, MCP config export, and UI refinements (8098d8f)
- wire up pending approvals for deferred elicitations (6fff785)
Bug Fixes
- daemon stop→start race condition and worker spawn ceiling timeout (07d5a35)
- emit progress messages during worker initialization phases (55e748e)
- log stale symlink cleanup during photon discovery (a40eaea)
- update photon-core to v2.18.1 for broken symlink cleanup (76dccee)
- wire hideCloseButton on studio embed and default to source tab (4f9c5b5)
- worker dep resolution during spawn and client retry on connection close (a242d40)
v1.20.0
1.20.0 (2026-04-08)
Features
- add draggable resize handle to split pane divider (2661878)
- add sidebar resize handle with localStorage persistence (2c9b8c1)
- add tab switcher (App / Methods / Log) to main toolbar (a4d0bf4)
- beam UI improvements — sidebar tabs, bridge extensions, app renderer updates (a0454c4)
- gate edit controls on photon editability (951043d)
- merge context-bar into main-toolbar row to eliminate wasted vertical space (0c9efaa)
- namespace migration, beam route encoding, forking improvements, and test updates (1209827)
Bug Fixes
- add file locking for approvals and audit log to prevent race conditions (9775b7c)
- add global error handlers and replace silent catch blocks with logging (7cd8b2c)
- app tab fills viewport with no outer scroll or methods hint (08ded4b)
- block all studio/edit entry points for non-editable photons (a4db38c)
- cap activity log height so custom apps get their full vertical space (11e770f)
- cap method card grid column width at 380px to prevent overwide cards on large screens (1ddc189)
- constrain app tab to available viewport height without outer scroll (d26660a)
- fall back to auto-discovery when asset resolvedPath does not exist (88e4158)
- guard daemon socket connections against ENOENT on fresh install (dc006c6)
- move toolbars into scroll container, remove negative-margin hack (6b0bcfa)
- pin activity log to bottom, eliminate competing scrollbars in main area (73d058c)
- prevent command injection in marketplace fork/contribute operations (5ec76ae)
- prevent race conditions in daemon channel iteration, watcher debounce, and worker calls (bf0f6f4)
- prevent XSS by replacing innerHTML with safe DOM construction (7638223)
- reduce double-gap spacing between photon header and anchor nav (30075a7)
- remove border-radius clipping on app-viewport in app tab mode (6204e87)
- resolve singleton initialization races and clean up leaked timers (a5066a0)
- restore app sidebar, fill log tab height, fix app renderer flex (bef4e51)
- restrict CORS to localhost and add CSRF protection on marketplace endpoints (8212d02)
- route split pane progress events to the correct panel (3bf439a)
- set correct mainTab when loading app photon via URL route (fe9c888)
- use stable calc heights for app tab to prevent resize loop vibration (732c314)
v1.19.0
Features
- Channel support —
@channeltag turns photons into Claude Code channels via capabilities negotiation - Client-agnostic channel support via clientInfo name detection
- Channel permission relay and callable channel object (
this.channel()) - MCP Streamable HTTP — always-on for SSE mode, compatible with llama.cpp and modern MCP clients
- Elicitation custom message +
render('guide')stepper widget
Bug Fixes
- MCP Streamable HTTP: add
event: message+id:to SSE stream per spec - CORS: allow
Mcp-Protocol-Versionheader, add CORS headers to all responses (202, DELETE, 405) - Clean SSE startup output —
⚡ web → http://localhost:3000/mcpwith loader noise suppressed - Channel routing through daemon pub/sub with proper namespace isolation
- Bind instance context when capturing emit for channel injection
- Pass baseDir to MemoryProvider for correct directory resolution
- Auto-detect photon directory from cwd when PHOTON_DIR is not set
Refactor
- Migrate photon data and cache paths to
~/.photon/.data/directory - Pre-release check: use PHOTON_DIR env var instead of moving ~/.photon
v1.17.6
v1.17.5
v1.17.4
1.17.4 (2026-03-31)
Bug Fixes
- Split panel: Execute button on right panel no longer triggers left panel's method
- Enter to submit: Pressing Enter in a filled form now executes the method
- Markdown arrays:
@format markdownwithstring[]data now renders as separated markdown sections instead of raw JSON - Homepage text: Fixed unreadable black text on dark theme (button UA stylesheet override)
- Dashboard centering: Metric cards, gauges vertically/horizontally centered in panels
- Bun postinstall: Auto-trust dependency postinstall scripts (
bun install --trust) - Scrollbar spacing: Thinner (6px), translucent,
scrollbar-gutter: stableprevents content shift