diff --git a/README.md b/README.md index 3ef5a56a..15f53709 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ > ⭐ **Star the repo:** If this project has been helpful, we'd greatly appreciate a star on GitHub. Starring the repository encourages continued development. It only takes a second, but it has a meaningful impact on the project. -> 💡 **[Open Science v0.8.1 released](https://github.com/aipoch/open-science/releases/latest)** _(last updated July 2026)_. This patch keeps you oriented during long-running work: the context-usage indicator now breaks the window down by category, completed tasks leave a durable unread badge with native attention on blocking approvals, and the project file library gains scoped search, grid/list views, and a large expand modal. It also hardens artifact finalization and provenance recovery, prevents R package installs from upgrading the live kernel, and keeps Claude Code's built-in web tools available in every session. See the [latest release notes](https://github.com/aipoch/open-science/releases/latest) for full details. +> 💡 **[Open Science v0.9.0 released](https://github.com/aipoch/open-science/releases/latest)** _(last updated July 2026)_. This release adds personal specialist agents with scoped capabilities, scoped permission management with revocable grants, Markdown and PDF conversation export, selective session-artifact downloads, TIFF image previews, collapsible side panels, and per-turn token usage in the transcript. It also adds native Responses API support for DeepSeek, hardens conversation export, Windows upgrades, framework switching, and RPC contract enforcement. See the [latest release notes](https://github.com/aipoch/open-science/releases/latest) for full details.

Open Science open-source AI research workbench desktop app workspace showing an agent session with generated artifacts @@ -239,7 +239,7 @@ Review connector parameters and tool activity before approving them. Never inclu ## Project Status -Open Science is available as a released desktop application and is actively developed. v0.8.0 established immutable artifact versioning and inspectable provenance as shipped foundations, and v0.8.1 hardens provenance recovery, sharpens context and file-library awareness, and stabilizes R package management, while keeping deterministic reconstruction, portable environment restoration, and full-fidelity session replay on the roadmap. +Open Science is available as a released desktop application and is actively developed. v0.8.0 established immutable artifact versioning and inspectable provenance as shipped foundations, and v0.9.0 adds personal specialist agents with scoped capabilities, scoped permission management, conversation and artifact export, TIFF previews, collapsible side panels, and per-turn token usage, while keeping deterministic reconstruction, portable environment restoration, and full-fidelity session replay on the roadmap. For version-specific features, provider and catalog changes, platform packaging, and recent fixes, use the [latest release notes](https://github.com/aipoch/open-science/releases/latest) and the installed app. For a maintained shipped/partial/planned breakdown, see the [Capability Map](ROADMAP.md#capability-map). diff --git a/ROADMAP.md b/ROADMAP.md index 924cb6ae..43ff93f4 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -40,7 +40,7 @@ flowchart LR ## Where We Are Today -Open Science is an **early preview with a working research loop**, not a concept demo. Horizon 1's connectivity foundation is usable today, Horizon 2's portability work is underway across model providers, agent frameworks, skills, and compute environments, and v0.8.0 establishes the first concrete Horizon 4 traceability layer: persistent message branches for alternative research paths plus immutable artifact versions tied to inspectable production evidence. +Open Science is an **early preview with a working research loop**, not a concept demo. Horizon 1's connectivity foundation is usable today, Horizon 2's portability work is underway across model providers, agent frameworks, skills, and compute environments, and v0.8.0 establishes the first concrete Horizon 4 traceability layer: persistent message branches for alternative research paths plus immutable artifact versions tied to inspectable production evidence. v0.9.0 adds personal specialist agents with scoped capabilities, durable scoped permission management, and portable conversation and artifact export — bringing the first slices of Phase 3's "specialist roles" and Phase 4's "scoped permissions" into early form. That is an audit milestone, not the finish line for reproducibility. Open Science can preserve what it can prove about a result and make missing evidence explicit; it cannot yet reconstruct every environment, replay a complete session, or guarantee that rerunning an analysis yields identical output. The roadmap now separates those two promises deliberately: @@ -52,20 +52,21 @@ That is an audit milestone, not the finish line for reproducibility. Open Scienc - ✅ Agent runtime with a full plan/execute/tool-call loop, wrapped over the Agent Client Protocol (ACP), on a pluggable agent-framework backend — Claude Code by default, with OpenCode and Codex selectable as alternative implementations behind the same runtime (Codex drives OpenAI Responses providers directly and Chat-Completions providers through a loopback translation gateway, and can authenticate with an existing ChatGPT/Codex subscription login instead of an API key); each backend's app-managed runtime can be installed, switched, and uninstalled from Settings cards - ✅ Multi-provider model configuration with per-session selection — built-in vendors (Anthropic (Claude), Grok (xAI), DeepSeek, Zhipu AI (GLM), GLM Coding Plan, Kimi (Moonshot), Kimi For Coding, MiniMax, StepFun, StepFun Step Plan, Xiaomi MIMO, SenseNova, Volcengine Ark, and the OpenRouter aggregation gateway) plus custom gateways (whose default API format is derived from the active agent framework) and Claude / Codex subscription logins (Claude via the `claude setup-token` flow, Codex via the existing ChatGPT/Codex subscription), with live catalog refresh, mid-run switching, per-model multimodal metadata, and a combined composer picker for model and supported reasoning effort; Anthropic-compatible endpoints on any backend, plus OpenAI-compatible (`/v1/chat/completions`) and Responses (`/v1/responses`) endpoints when an OpenAI-speaking backend is selected - ✅ An opt-in specialist reviewer that audits a completed turn in a clean, tool-restricted context — tracing the agent's claims against the real transcript, execution log, and artifacts, emitting structured pass/warn/fail findings, and running a bounded, user-abortable fix loop to correct flagged findings -- ✅ Electron + React + TypeScript desktop shell with a shadcn-based design system, a system-tray presence with single-instance locking, awaited cleanup of agent processes on quit, and a dark-mode theme toggle applied synchronously before first render -- ✅ Parallel multi-session workspace with typed tool-activity visualization (diffs, code blocks, web search rows) grouped under agent-declared purpose titles, editable completed prompts that fork into selectable message branches while preserving the original path, a live context-usage indicator with category-level estimates and on-demand native context compaction (automatic at 90% or manual from the indicator popover), a whole-window find bar (`Cmd/Ctrl+F`), and session pinning to keep key sessions at the top of the sidebar +- ✅ Personal specialist agent profiles — define reusable agents with their own name, avatar, persona, and scoped capabilities (skills/connectors whitelist or full access), bind one per session so identity applies from the first turn, and hot-switch specialists mid-conversation behind a reconfigure barrier that fails closed +- ✅ Electron + React + TypeScript desktop shell with a shadcn-based design system, a system-tray presence with single-instance locking, awaited cleanup of agent processes on quit, a dark-mode theme toggle applied synchronously before first render, and collapsible side panels for flexible workspace layout +- ✅ Parallel multi-session workspace with typed tool-activity visualization (diffs, code blocks, web search rows) grouped under agent-declared purpose titles, editable completed prompts that fork into selectable message branches while preserving the original path, a live context-usage indicator with category-level estimates and on-demand native context compaction (automatic at 90% or manual from the indicator popover), per-turn token usage footers (input, cache, output) under the final agent message, a whole-window find bar (`Cmd/Ctrl+F`), and session pinning to keep key sessions at the top of the sidebar - ✅ Project layer with per-project, per-file session storage, a durable conversation graph that retains branch-specific messages and activity across restarts, migration from the legacy single-file format, and a home page - ✅ A persistent notebook execution runtime — warm Python, R, and REPL control-plane kernels routed per session binding, with cross-kernel handoff through a shared workspace channel, app-managed conda environments with offline provisioning plus bring-your-own interpreter discovery, and durable, replayable run history with crash-recoverable operation journaling (R is managed-only in this first version) - ✅ Immutable, session-scoped artifact versioning with checksummed content, producer code, execution history, exact input references, environment inventory, producing message-branch context, version-scoped reviewer evidence, crash recovery, and migration-aware storage validation; files remain indexed across branch switches and evidence that cannot be proven is surfaced as unavailable -- ✅ Rich in-app file previews (CSV, FASTA, HTML, image with zoom and pan, JSON, Markdown, plain text, notebook cells, and Office documents — DOCX, XLSX, PPTX — rendered in isolated processes), with responsive multi-tab navigation, readable long names, a searchable project file library with grid/list views and a large expand modal, and a full-screen preview mode from both the preview panel and the Files tab -- ✅ Attachment uploads (up to 10 GB per file via streaming upload) and a permission-approval UI for tool calls, with per-conversation approval profiles (remembered by tool category, with per-session grants visible) +- ✅ Rich in-app file previews (CSV, FASTA, HTML, image with zoom and pan including TIFF, JSON, Markdown, plain text, notebook cells, and Office documents — DOCX, XLSX, PPTX — rendered in isolated processes), with responsive multi-tab navigation, readable long names, a searchable project file library with grid/list views and a large expand modal, and a full-screen preview mode from both the preview panel and the Files tab +- ✅ Attachment uploads (up to 10 GB per file via streaming upload) and a permission-approval UI for tool calls, with per-conversation approval profiles (remembered by tool category, with per-session grants visible) and durable scoped permission management (global, project, and session-scoped allow grants with filtering, per-row and family revoke, and an Undo stack) - ✅ File-based agent skills — create, edit, and import (zip) skills, pull them into a session through a `/` selector in the composer, with materialized skill directories kept read-only; import skills already installed in global agent directories with candidate preview, and let the agent request a package import from a session attachment behind an app-owned confirmation step - ✅ 24 built-in connectors — 23 life-science data connectors expanded and aligned to their upstream MCP servers into 200+ callable tools, plus an offline OpenChemLib molecule viewer — plus custom MCP servers (stdio/HTTP/SSE), callable from agent sessions behind the permission gate - ✅ Packaged desktop installers for macOS (Apple Silicon + Intel — Developer ID signed and notarized by Apple), Windows, and Linux, plus a nightly build channel off `main` - ✅ An optional localhost web UI and headless backend mode — serve the same renderer to a browser bound to `127.0.0.1` (with external project/session lifecycle kept in sync and shareable via deep links), run the backend/tray/agent/notebook without an Electron window, and drive that headless service from a bundled `open-science` CLI plus a zero-dependency Node.js task SDK (installable to PATH from the packaged app, no separate Node.js needed) that reuse the same daemon, projects, sessions, credentials, and permissions as the desktop app - ✅ Remote SSH compute hosts — register a remote machine over SSH as an execution target for notebook runs, alongside the local kernels, so heavier work can run off the laptop; harvested results follow the active data-storage location - ✅ Desktop notifications on task completion and failure plus durable unread conversation badges and native attention on blocking approval requests, so a long-running run doesn't need the window in the foreground to report its outcome -- ✅ Notebook sessions exportable as `.ipynb` — per-tab export plus a download-all, validated against the nbformat spec +- ✅ Notebook sessions exportable as `.ipynb` — per-tab export plus a download-all, validated against the nbformat spec; whole-conversation export as Markdown and PDF with a normalized public export model, and selective session-artifact downloads with collision-safe batch saving - ✅ In-place background auto-update (electron-updater) on macOS, Windows, and Linux, with an About panel and condensed release-note highlights, and a manual-download fallback when auto-update can't complete - ✅ A configurable data-storage location — relocate large data (artifacts, notebooks, uploads) to another folder with a copy-verify-restart migration, adopt an existing folder, or return to default, plus a legacy-install migration prompt and a missing-root recovery path - ✅ A read-only session notebook viewer, and ACP reconnect-and-continue (Resume) on an abnormal disconnect @@ -78,7 +79,8 @@ That is an audit milestone, not the finish line for reproducibility. Open Scienc - 🟡 Additional execution kernels and reproducible environment management — warm Python/R/REPL kernels with cross-kernel handoff, app-managed conda environments with offline provisioning, and immutable environment inventory evidence ship today (see above); R is managed-only in this first version, and portable lock export/restore is not built yet - ⬜ A public skills commons — versioned, forkable, shareable skills with lexical discovery; local file-based skill management ships today (see above), the shared commons does not - 🟡 Remote compute and async tasks — remote SSH compute hosts and desktop task-completion/failure notifications ship today (see above); Slurm/cloud-GPU submission and parallel sub-agent fan-out are not built yet -- ⬜ Network sandboxing, a credential vault, and scoped (single-use / session / project / global) permissions +- 🟡 Scoped permissions — global, project, and session-scoped allow grants with filtering, family revoke, and Undo ship today (see above); network sandboxing, a credential vault, and directory-level file access control are not built yet +- 🟡 Specialist roles — personal specialist agent profiles with scoped capabilities ship today (see above); a shared public commons for forking and discovering specialist roles across machines is not built yet - ⬜ Spatial annotations, editable scientific viewers, and automatic skill-aware context discovery ## Capability Map @@ -87,17 +89,17 @@ The product is organized into cooperating layers (see [`docs/PRD.md`](docs/PRD.m | Layer | Target capability | Current state | Status | | ---------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | -| **Agent Harness & Shell** | Planning/execution/reflection loop, multi-session UI, skill discovery, async notifications | Single-agent loop via ACP on a pluggable framework backend (Claude Code default, OpenCode and Codex alternatives), parallel session mounting, selectable message branches, typed tool-activity visualization, category-level context-usage estimates, native context compaction, durable unread conversation badges and native attention on blocking approvals, a whole-window find bar, and dark mode; no automatic skill discovery or async notification bus for fan-out yet | 🟡 | +| **Agent Harness & Shell** | Planning/execution/reflection loop, multi-session UI, skill discovery, async notifications | Single-agent loop via ACP on a pluggable framework backend (Claude Code default, OpenCode and Codex alternatives), parallel session mounting, selectable message branches, typed tool-activity visualization, category-level context-usage estimates, per-turn token usage footers, native context compaction, durable unread conversation badges and native attention on blocking approvals, personal specialist profiles with scoped capabilities, collapsible side panels, a whole-window find bar, and dark mode; no automatic skill discovery or async notification bus for fan-out yet | 🟡 | | **Model Layer** | Pluggable gateway across model vendors and locally-hosted models, per-agent routing | Multi-provider config with per-session selection (built-in vendors — Anthropic (Claude), Grok (xAI), DeepSeek, Zhipu AI (GLM), GLM Coding Plan, Kimi (Moonshot), Kimi For Coding, MiniMax, StepFun, StepFun Step Plan, Xiaomi MIMO, SenseNova, Volcengine Ark, and the OpenRouter aggregation gateway — plus custom gateways whose default API format is derived from the active framework and Claude / Codex subscription logins), with per-model multimodal metadata and a combined model/reasoning-effort composer picker; provider choice is still gated on framework/endpoint compatibility and there is no unified per-agent routing yet | 🟡 | -| **Project & Session Organization** | Durable per-project workspaces, session history, fast resume | Project CRUD, per-project/per-file session storage with migration, persistent alternative message branches, and a home page with recents | ✅ | +| **Project & Session Organization** | Durable per-project workspaces, session history, fast resume | Project CRUD, per-project/per-file session storage with migration, persistent alternative message branches, a home page with recents, whole-conversation export as Markdown and PDF, and selective session-artifact downloads | ✅ | | **Multi-Kernel Execution Engine** | Interchangeable Python / R / shell kernels with cross-kernel handoff | Warm Python, R, and REPL control-plane kernels routed per session binding, with cross-kernel handoff through a shared workspace channel, durable run history, and crash-recoverable operation journaling; R is managed-only in this first version | 🟡 | | **Environment Management** | Create, switch, snapshot, and register reproducible compute environments | App-managed conda environments with version-pinned, SHA256-verified offline provisioning, named-environment create/remove, and bring-your-own interpreter discovery, bound and selected per session; provenance records immutable observed inventories, but portable lock export/restore is not built yet | 🟡 | | **Artifacts & Provenance** | Versioned outputs with full lineage (code, logs, dependencies, environment, conversation) | Immutable, checksummed, session-scoped artifact versions retain available producer code, execution history, input references, environment inventory, producing message-branch context, and reviewer evidence; unavailable evidence is explicit, while portable restoration and deterministic replay remain open | 🟡 | -| **File Preview & Viewers** | Native, in-app rendering of scientific artifacts | Responsive multi-tab renderers for CSV, FASTA, HTML, images, JSON, Markdown, text, Office documents, Notebook history, and molecular structures/reactions; includes a project file library, readable long names, isolated Office rendering, and full-screen preview | ✅ | +| **File Preview & Viewers** | Native, in-app rendering of scientific artifacts | Responsive multi-tab renderers for CSV, FASTA, HTML, images (including TIFF, with zoom and pan), JSON, Markdown, text, Office documents, Notebook history, and molecular structures/reactions; includes a project file library, readable long names, isolated Office rendering, and full-screen preview | ✅ | | **Skills Commons** | Versioned, forkable, file-based skills with lexical discovery and explicit loading | File-based skill management (create/edit/import, `/`-selector discovery in the composer, read-only materialized dirs), with per-skill version stamps driving incremental re-materialization; user-facing version pinning and a shared public commons for discovery/reuse are not built yet | 🟡 | | **Data & MCP Connectors** | Pre-built connectors to open scientific databases, callable from an isolated execution context | 24 built-in connectors — 23 life-science data connectors (literature, genes/proteins, genomes, variants, structures, clinical, chemistry, expression) expanded to 200+ tools aligned with their upstream MCP servers, plus an offline OpenChemLib molecule viewer — plus custom MCP server support (stdio/HTTP/SSE), all callable behind the permission gate | ✅ | | **Remote Compute & Async Tasks** | Job submission to HPC/cloud, async completion notifications, parallel sub-agent fan-out | Remote SSH compute hosts registrable as notebook execution targets, harvested results routed through the active data-storage location, and desktop notifications on task completion/failure; Slurm/cloud-GPU submission and parallel sub-agent fan-out are not built yet | 🟡 | -| **Security & Permissions** | Scoped permission gates, network allowlisting, directory-level file access control, credential vault | Tool-call permission gate with an approval UI and per-conversation approval profiles (grants remembered by tool category and visible per session), plus an opt-in reviewer that audits a turn's claims against its transcript/logs/artifacts with a bounded fix loop; no network sandbox or credential vault yet | 🟡 | +| **Security & Permissions** | Scoped permission gates, network allowlisting, directory-level file access control, credential vault | Tool-call permission gate with an approval UI, per-conversation approval profiles, durable scoped allow grants (global, project, session) with filtering, family revoke, and an Undo stack, plus an opt-in reviewer that audits a turn's claims against its transcript/logs/artifacts with a bounded fix loop; no network sandbox or credential vault yet | 🟡 | | **Context Management** | Layered system rules, attachment ingestion, skill-aware context injection, history compaction | File/attachment upload wired into prompts (with large-file streaming up to 10 GB), explicit `/`-selector skill injection, category-level context-usage estimates, and native context compaction for Claude Code and OpenCode (automatic at 90% or manual from the context popover); no automatic skill-aware injection yet | 🟡 | | **Interactive Annotations** | Spatially-anchored feedback on images, PDFs, text, and HTML surfaces | Not implemented | ⬜ | @@ -118,8 +120,8 @@ flowchart LR - **Phase 0 — Vision & Architecture (done).** This roadmap, the [PRD](docs/PRD.md), the design system, and initial community formation. - **Phase 1 — Core Loop (in progress).** Desktop shell, single-agent runtime, project/session persistence with editable message branching, a persistent multi-kernel notebook runtime, versioned artifact storage, rich in-app previews, file-based agent skills, built-in life-science data connectors plus custom MCP servers, packaged installers for macOS/Windows/Linux (macOS signed and notarized) with a configurable data-storage location, a guided first-run onboarding wizard, and in-place background auto-update — all shipping today. Multi-provider model configuration with per-session model and reasoning-effort selection also ships now — across Anthropic-compatible endpoints on any backend, and OpenAI-compatible / Responses endpoints when the OpenCode or Codex agent-framework backend is selected. A first CLI/browser entry point has also landed: an optional localhost web UI (with synced external project/session lifecycle and deep links), a headless backend mode, an `open-science` CLI that runs the backend as a background daemon, and a zero-dependency Node.js task SDK over the same daemon. Still open in this phase: a truly model-agnostic gateway (unified routing across arbitrary native protocols, independent of the selected framework) and a broader scriptable/embeddable SDK surface. - **Phase 2 — Reproducibility & Multi-Agent.** The first traceability slice now ships: immutable artifact versions, production evidence, warm Python/R/REPL kernels, and app-managed conda environments. The remaining target is stronger than auditability — deterministic reconstruction, portable environment lock export/restore, full-fidelity session replay, and specialist sub-agents alongside the generalist coordinator. This is the project's core differentiation from a generic coding agent and the highest-priority phase for contributors who want to make the biggest structural dent. -- **Phase 3 — Knowledge & Connectors.** A public skills commons with versioned, forkable skills and lexical discovery; savable "specialist" roles (instructions + skills + connectors + permissions bundled together). The connector layer — the built-in life-science connectors plus custom MCP servers — already shipped in Phase 1; what remains in this phase is the shared skills commons and those savable specialist roles. -- **Phase 4 — Compute & Trust.** Remote compute as a first-class primitive (SSH/Slurm/cloud GPU) with async job notifications and sub-agent fan-out; the full security stack (scoped permissions, network allowlisting, directory-level file sandboxing, a credential vault). Several of this phase's primitives have already begun landing in early form during Phase 1: remote SSH compute hosts as notebook execution targets and desktop notifications on task completion/failure (so what remains here on the compute side is Slurm/cloud-GPU submission and sub-agent fan-out); an opt-in reviewer/verifier that audits a turn against its own record with a bounded fix loop; and a pluggable agent-framework backend (Claude Code, OpenCode, and Codex) so the runtime isn't locked to one agent implementation. Deepening these — richer verification rubrics, additional framework backends, and the full security stack — continues here. +- **Phase 3 — Knowledge & Connectors.** A public skills commons with versioned, forkable skills and lexical discovery; savable "specialist" roles (instructions + skills + connectors + permissions bundled together). The connector layer — the built-in life-science connectors plus custom MCP servers — already shipped in Phase 1, and personal specialist agent profiles with scoped capabilities now ship in v0.9.0 as the first concrete specialist-role slice; what remains in this phase is the shared public skills commons and cross-machine specialist sharing. +- **Phase 4 — Compute & Trust.** Remote compute as a first-class primitive (SSH/Slurm/cloud GPU) with async job notifications and sub-agent fan-out; the full security stack (scoped permissions, network allowlisting, directory-level file sandboxing, a credential vault). Several of this phase's primitives have already begun landing in early form during Phase 1: remote SSH compute hosts as notebook execution targets and desktop notifications on task completion/failure (so what remains here on the compute side is Slurm/cloud-GPU submission and sub-agent fan-out); an opt-in reviewer/verifier that audits a turn against its own record with a bounded fix loop; a pluggable agent-framework backend (Claude Code, OpenCode, and Codex) so the runtime isn't locked to one agent implementation; and scoped permission management (global, project, and session-scoped allow grants with filtering, family revoke, and Undo) landing in v0.9.0 as the first concrete trust-stack slice. Deepening these — richer verification rubrics, additional framework backends, and the remaining security stack (network sandboxing, credential vault, directory-level sandboxing) — continues here. - **Phase 5 — Commons & Interaction.** A public skills marketplace, an optional hosted offering, and institutional governance/audit features; spatially-anchored annotations; editable scientific viewers; automatic skill-aware context discovery and injection. Phase kickoffs and priority calls get announced on **[X](https://x.com/aipoch_ai)** first and debated in **[Discord](https://discord.gg/85dKfuGM9)** before they land here — this roadmap is a living hypothesis, not a fixed spec, and each phase becomes tracked issues/RFCs as contributors join. diff --git a/package-lock.json b/package-lock.json index efb76740..ee1d1181 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "open-science", - "version": "0.8.1", + "version": "0.9.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "open-science", - "version": "0.8.1", + "version": "0.9.0", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index 49f6c4fb..1b15444d 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "open-science", "productName": "Open Science", "desktopName": "open-science.desktop", - "version": "0.8.1", + "version": "0.9.0", "description": "Open Science — an open-source, model-agnostic AI workbench for scientific discovery.", "main": "./out/main/index.js", "author": "aipoch", diff --git a/scripts/windows-installer-smoke.test.ts b/scripts/windows-installer-smoke.test.ts index de0359b1..f7c1daaf 100644 --- a/scripts/windows-installer-smoke.test.ts +++ b/scripts/windows-installer-smoke.test.ts @@ -36,7 +36,7 @@ describe('Windows installer smoke plan', () => { ) await mkdir(join(root, 'nested')) - await writeFile(join(root, 'aipoch-open-science-0.8.1-win-x64-setup.exe'), '') + await writeFile(join(root, 'aipoch-open-science-0.9.0-win-x64-setup.exe'), '') await expect(findSetupInstaller(root)).rejects.toThrow(/exactly one Windows setup executable/) })