Skip to content

Releases: portel-dev/photon

v1.25.0

25 Apr 15:07

Choose a tag to compare

Features

Bug Fixes

  • deploy/cf: pass through string returns as raw text in tools/call (e426bee)
  • propagate caller cwd across worker and cross-photon-call boundaries (c7f34da)

v1.24.0

24 Apr 14:04

Choose a tag to compare

Features

  • beam: human-in-the-loop sampling — Beam answers sampling/createMessage (7f7a3dd)
  • beam: SDK-transport-only MCP client prototype (not yet wired) (e34ef2f)
  • claim: scoped remote access for MCP sessions via short-lived codes (6300a87)
  • cli: remove timeouts, heartbeat contract, Ctrl+C handling (95f470d)
  • deploy/cf: auto-bridge cf CLI token and bump wrangler pin to v4 (84e5171)
  • runtime: SQLite-backed memory backend (4fb70e5)
  • runtime: wire this.sample / this.confirm / this.elicit end-to-end (44016ab)
  • scheduler: catch up missed fires after daemon downtime (9a32bff)

Bug Fixes

  • address codex adversarial review findings (4 P1 + 4 P2) (ea2a87c)
  • address codex review P1s + P2s on claim + sampling + SDK client (470e610)
  • beam: bump MCP method-call timeout from 60s to 5 min (b3cc61a)
  • beam: mirror theme tokens on sampling modal so dark/light tracks beam-app (667128c)
  • daemon: boot-time scanner loads schedule.create() files (23b1c1a)
  • deploy/cf: replace hung SSE session transport with stateless MCP Streamable HTTP (809373a)
  • loader: always-inject this.memory and this.instanceMeta on plain classes (f1f74d4)
  • loader: inject schedule-unschedule hook so cancel evicts ghosts (eece871)
  • runtime: serialize concurrent method calls per photon instance (2ebfcc0)
  • scheduler: fire cron jobs without requiring a warm photon (d74bfc0)
  • serv: tools/call echoes client-supplied _meta.progressToken (dc45b9d)

v1.23.1

21 Apr 03:56

Choose a tag to compare

1.23.1 (2026-04-21)

Bug Fixes

  • install: auto-trust native deps + actionable error messages (678445f)

v1.23.0

21 Apr 03:38

Choose a tag to compare

1.23.0 (2026-04-21)

Features

  • a2ui: action round-trip — button name dispatches photon method (f3f0d33)
  • a2ui: Beam renderer + end-to-end tests + docs (fc64192)
  • audit: SQLite-backed audit store with runtime-agnostic loader (ee8b653)
  • beam: daemon panel UI — four tables, actions, history drawer (7a0bbc7), closes #16
  • beam: HTTP wrappers around the daemon ps/schedule RPCs (97d28e4)
  • beam: instance label + JSDoc help text in Settings tabs (9cc3719)
  • beam: split Settings view into Setup + Configuration sub-tabs (7e6a489)
  • cli: add 'photon new' as a top-level shortcut for 'photon maker new' (e66cfb7)
  • cli: announceContext adoption across PHOTON_DIR-sensitive commands (78cf93a)
  • cli: announceContext helper + --verbose/--json context envelope (a178d42)
  • daemon: brand registry-key types so bare-string lookups don't compile (7f5ac35)
  • daemon: brand scheduledJobs/jobTimers keys + route disable through unscheduleJob (99476fa)
  • daemon: brand the remaining photon-scoped maps + patch two latent multi-base bugs (78e991e)
  • daemon: discover @scheduled and @webhook tags at boot, lazy-load on fire (c6206d3)
  • daemon: live watcher for @scheduled / @webhook tag edits (2725f3c)
  • daemon: SQLite backend for execution history with indexed queries (c10ae80)
  • doctor: tool-sprawl and secret-named-param lints (abc331d), closes #4 #5 #3
  • errors: link common errors to TROUBLESHOOTING.md (be914fa), closes #photon-not-found #mcp-not-found-in-marketplace #photon-not-found #missing-environment-variables
  • loader: inject this.shell with cwd pinned to the photon's folder (4d4b791)
  • loader: register stat-gate reloader for CLI-direct dispatch (0db9177), closes #17
  • maker: scaffold new photons into CWD by default, --global opts into ~/.photon (6b32479)
  • mcp: add 'photon mcp install' to register a photon in Claude Desktop (366133e)
  • new: add --for and --force flags to scaffold command (848bcd8)
  • ps: photon ps command for observing + controlling scheduled work (157e33f)
  • schedules: cross-base startup scan + legacy IPC sweep (3c44a88)
  • schedules: persist execution history for scheduled jobs (1dbdf82)
  • schedules: two-step model — declare via @scheduled, enroll via active list (45da5c1)
  • security: default 60/min rate limits on webhook + /mcp transports (b7766b6)
  • serv: HTTP adapter mounts the OAuth 2.1 endpoints onto Node's http server (1d79b00)
  • serv: OAuth 2.1 authorization server endpoints with CIMD + DCR (f97b473)
  • serv: Serv-class factory + OTel metrics + AS docs (8f3cefc)
  • serv: SQLite elicitation + grant stores for upstream OAuth persistence (4a4c001)
  • serv: token revocation/introspection, OIDC id_token, RS256/ES256, RFC 8693 token exchange, SQLite persistent stores (7e17ac0)
  • update,upgrade: add --dry-run to preview changes before installing (2d3970a)
  • version: dev-build marker via semver build-metadata (+sha.) (3c0e110)
  • webhook: CIDR source allowlist for daemon webhook server (26f568e)

Bug Fixes

  • a2ui: tighter stream detection + card shape guard + RFC 6901 decode (cd23d13)
  • add: drop spurious fuzzy matches that echo the query back (d525640)
  • cli-runner: cast hint to string for 'a2ui' comparison (8e3d26d)
  • cli,daemon: bundled-photon guard runs first + legacy-key sweep on disable (ddb1423)
  • cli,server: photon ps --base flag + revert hot-reload heuristic (7f0b94a)
  • cli: always persist PHOTON_DIR in mcp install when workspace != ~/.photon (0fd0ec3)
  • cli: exclude lifecycle hooks from photon cli method listing (6a8adb7)
  • cli: preserve JSDoc paragraph breaks in photon cli help output (a70f759)
  • cli: show subcommands in group --help (maker, host, marketplace) (e28f81e)
  • context-store: honor PHOTON_DIR for instance state, env, state log paths (7df9fcd)
  • context: require .marketplace/ for PHOTON_DIR detection (with one-release transition) (0eac2a0)
  • daemon,ag-ui: hot-rescan and AG-UI adapter both normalize with boot discovery (7578ed0)
  • daemon,bridge: webhook tracker scoped to base + Beam card heuristic mirrors server (e1b08ad)
  • daemon,cli,a2ui: scope cross-base drops, walk to workspace root, preserve A2UI escape-hatch fields (fdf3ad9)
  • daemon,cli: proactive locations keyed by base + a2ui handles null (e8e07d0)
  • daemon,cli: restore default-base schedules + tighten A2UI heuristic (58766a2)
  • daemon,cli: three regressions from round-6 fixes (a6f9d98)
  • **daemon,se...
Read more

v1.22.1

16 Apr 08:09

Choose a tag to compare

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

16 Apr 07:05

Choose a tag to compare

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 traceparent propagation with parent-context chaining across this.call()
  • photon.tool.duration histogram, photon.tool.calls/errors counters, photon.circuit_breaker.transitions, photon.rate_limit.rejections, photon.bulkhead.rejections
  • AsyncLocalStorage request context (getRequestContext()) with ambient photon/tool/traceId/caller
  • Logger auto-enrichment from ambient context; OTel logs bridge via @opentelemetry/api-logs
  • recordException with full stack via Error.cause chain
  • Force-sampled error spans

Error handling

  • MCP tool errors return structuredContent.error with { 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
  • PhotonError native { cause } support via photon-core 2.21+
  • wrapError preserves root cause chain

Resilience

  • Circuit breaker half-open probe latch (only one probe allowed through)
  • @bulkhead N middleware 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 degraded
  • GET /api/health/circuits — per-circuit state detail

AG-UI

  • RUN_ERROR carries code, retryable, runId, threadId
  • Every event includes rawEvent.traceparent for OTel correlation
  • Capability handshake: experimental['ag-ui'].features advertises 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)
  • @bulkhead middleware (2.22.0)
  • Audit path fixes for flat local-namespace layout

Full changelog: v1.21.0...v1.22.0

v1.21.0

14 Apr 12:02

Choose a tag to compare

Release 1.21.0

v1.20.1

10 Apr 00:33

Choose a tag to compare

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

08 Apr 09:37

Choose a tag to compare

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

05 Apr 02:49

Choose a tag to compare

Features

  • Channel support@channel tag 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-Version header, add CORS headers to all responses (202, DELETE, 405)
  • Clean SSE startup output — ⚡ web → http://localhost:3000/mcp with 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