Repository navigation
Releases: dkedar7/langstage-jupyter
Releases · dkedar7/langstage-jupyter
Release list
langstage-jupyter 0.6.11
Fixed
- The headline
langstage-jupyterlauncher died immediately when run as root (gh #64). jupyter_server refuses to boot as root without--allow-root, so the primary zero-config command exited1(after the extension loaded) on thejupyter/*Docker images, Binder, CI runners, K8s notebook pods, and devcontainers — the exact root environments--serve-checkwas hardened for (gh #58). The launch path now mirrors that treatment: whenos.geteuid() == 0and the user hasn't already passed it, it injects--allow-root(same rationale as #58 — a token-gated, localhost server). A non-root laptop is unchanged, and an explicit user--allow-rootisn't duplicated.
v0.6.10
Fixed
- The launcher now propagates JupyterLab's exit code (gh #62).
langstage-jupyterranjupyter labviasubprocess.run(...)but discarded the return code, so a startup failure (port in use, a fatal config error, the root guard) still exited 0 — masking the failure fromset -e, CI steps, systemd, healthchecks, andlangstage-jupyter && …. It now exits with the child's return code.
v0.6.9
Fixed
- The sidebar status no longer shows 🟢 "ready" for an agent that can't actually run a turn (gh #60). Readiness was
agent is not None, but the bundled default agent's model is built lazily — it constructs fine with noANTHROPIC_API_KEYand only fails at the first API call — so a common first-run (no key) lit green, then failed on the first message with a raw provider auth error./healthnow returns areadyflag gated on the agent being a runnable graph and (for the default agent) its provider key being present, and the sidebar shows a distinct 🟠needs_setupstate with an actionable tooltip (e.g. "ANTHROPIC_API_KEY is not set — the first turn will fail") instead of green. A custom/BYO agent's credentials remain the operator's concern.
v0.6.8
Fixed
--serve-checknow works when running as root — i.e. in CI and Docker, the environments it targets (gh #58). The spawnedjupyter_servernow passes--ServerApp.allow_root=True(safe: an ephemeral, token-gated, localhost-only smoke server), so it no longer hits Jupyter's root guard and exits before serving. And when the server exits before it is ready, the verdict now includes the server's own last output lines (the real cause) instead of a bare exit code.
v0.6.7
Added
langstage-jupyter --serve-check— a headless HTTP smoke test of the deployed extension (gh #56). The HTTP counterpart of--verify: where--verifyproves the agent object completes a turn,--serve-checkboots the server extension headlessly, polls/langstage-jupyter/healthuntil the agent is loaded, POSTs one turn to/langstage-jupyter/chat, and asserts the SSE stream yields a non-empty chunk and completes — catching route/registration/handler regressions (e.g. the #53 empty-body 500) that--verifystructurally can't. Exits0/1; defaults to the keyless demo agent (CI-safe) and honors-ato smoke-test a real agent.--smokeis an alias.
Docs
- Documented both preflights (
--verify,--serve-check) and the extension's served routes (/<base_url>langstage-jupyter/{health,chat,resume,reload,cancel}) in the README.
v0.6.6
Changed
- The chat sidebar is now branded "LangStage", not "Deep Agents" (dogfood). The JupyterLab left-rail tab tooltip, launcher entry, and default agent-name fallback all said "Deep Agents" (the pre-rename name); they now read "LangStage". Command IDs and CSS classes (
deepagents:open-chat,.deepagents-*) are unchanged, so nothing that targets them breaks.
Docs
- Refreshed the README header to a
langstage-jupyterSVG banner (was a remotecover.pnglabelled "DeepAgent Lab").
v0.6.5
Fixed
- Empty POST body to
/chat,/resume,/cancelreturned HTTP 500 instead of 400 (gh #53). Jupyter Server'sget_json_body()returnsNonefor an empty body (only invalid JSON raises), so the handlers hitNone.get(...)→ unhandledAttributeError→ 500. All three now guarddata is Noneand raiseHTTPError(400), matching the adjacent malformed-input handling.
v0.6.4
Changed
- Workspace root now flows through the shared
core.apply_workspace()/core.workspace_root()source of truth (ADR 0005). The extension used to apply the workspace via a bespoke dance — a mutableconfig.WORKSPACE_ROOTglobal, manualos.environwrites, andset_root_dir()mutating that global to re-root (the code behind #45/#36). Nowagent_wrappercallsapply_workspace()(pinned root at init, else JupyterLab's live launch dir per message) and the default agent readsworkspace_root()— one source the env, the backend, and the rebuilt agent all agree on. Behavior preserved (pinned still wins; re-root still happens on a real change); the published env value is now the resolved absolute root. Requireslangstage-core>=1.0.7.
Fourth surface migration of the consolidated workspace (cli / vscode / hermes / jupyter).
v0.6.3
Added
langstage-jupyter --verify: preflight the agent with one real turn (ADR 0004). The extension previously had no real readiness check —/healthonly reports whether the agent object is non-None.--verifyresolves the same spec the extension would run, loads it, and runs ONE real turn through the sharedlangstage-coreprimitivecore.verify(), exiting 0 clean / non-zero otherwise (use--demofor a keyless check). Catches a missing key, broken tool, or bad graph before you launch. Requireslangstage-core>=1.0.6.
Third surface adoption of the consolidated preflight, after cli --verify and web check --live.
langstage-jupyter 0.6.2
Fixed #48: the 0.6.1 wheel bundled a stale labextension reporting v0.6.0 (0.6.1 was a Python-only fix and the build hook skipped the JS rebuild). Clean-rebuilt so the bundled labextension version matches the package. No functional change.