Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 5 additions & 45 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ on:
required: true
type: choice
options:
- capture-protocol
- capture-viewer
- core
- viewer
- editor
Expand Down Expand Up @@ -150,7 +148,7 @@ jobs:
# peerDeps sync below must use shell vars, not env indirection.
declare -A NEW_VERSIONS

for pkg in capture-protocol core viewer capture-viewer editor nodes mcp ifc-converter cli; do
for pkg in core viewer editor nodes mcp ifc-converter cli; do
if [ "$TARGET" = "$pkg" ] || [ "$TARGET" = "all" ]; then
CUR=$(jq -r '.version' packages/$pkg/package.json)
NEW=$(bump_version "$CUR")
Expand All @@ -165,9 +163,9 @@ jobs:

# Sync inter-package references in dependencies, peerDependencies, and devDependencies.
# Anything that references a bumped @pascal-app/* package is updated to ^NEW.
for pkg in capture-protocol core viewer capture-viewer editor nodes mcp ifc-converter cli; do
for pkg in core viewer editor nodes mcp ifc-converter cli; do
FILE=packages/$pkg/package.json
for dep in capture-protocol core viewer capture-viewer editor nodes mcp ifc-converter cli; do
for dep in core viewer editor nodes mcp ifc-converter cli; do
VAL="${NEW_VERSIONS[$dep]}"
[ -z "$VAL" ] && continue
jq --arg name "@pascal-app/$dep" --arg v "^$VAL" '
Expand All @@ -179,7 +177,7 @@ jobs:
done

echo "=== @pascal-app/* refs after sync ==="
for pkg in capture-protocol core viewer capture-viewer editor nodes mcp ifc-converter cli; do
for pkg in core viewer editor nodes mcp ifc-converter cli; do
echo "--- packages/$pkg/package.json ---"
jq '{ dependencies: (.dependencies // {} | with_entries(select(.key | startswith("@pascal-app/")))), peerDependencies: (.peerDependencies // {} | with_entries(select(.key | startswith("@pascal-app/")))), devDependencies: (.devDependencies // {} | with_entries(select(.key | startswith("@pascal-app/")))) }' packages/$pkg/package.json
done
Expand All @@ -191,7 +189,7 @@ jobs:
# A single-package release may depend on another package introduced
# by this monorepo. Refuse to publish an uninstallable package when
# that dependency is not part of this run and is absent from npm.
RELEASE_PACKAGES="capture-protocol core viewer capture-viewer editor nodes mcp ifc-converter cli"
RELEASE_PACKAGES="core viewer editor nodes mcp ifc-converter cli"
if [ "$TARGET" != "all" ]; then
FILE="packages/$TARGET/package.json"
while IFS=$'\t' read -r DEP RANGE; do
Expand All @@ -217,21 +215,6 @@ jobs:
)
fi

- name: Build & publish capture protocol
if: inputs.package == 'capture-protocol' || inputs.package == 'all'
working-directory: packages/capture-protocol
run: |
bun run build
if [ "${{ inputs.dry-run }}" = "true" ]; then
echo "🏜️ Dry run — would publish @pascal-app/capture-protocol@$CAPTURE_PROTOCOL_VERSION"
npm publish --dry-run --access public --tag "$NPM_TAG"
elif npm view "@pascal-app/capture-protocol@$CAPTURE_PROTOCOL_VERSION" version >/dev/null 2>&1; then
echo "📦 @pascal-app/capture-protocol@$CAPTURE_PROTOCOL_VERSION is already published; continuing release recovery"
else
npm publish --access public --tag "$NPM_TAG"
echo "📦 Published @pascal-app/capture-protocol@$CAPTURE_PROTOCOL_VERSION"
fi

- name: Validate portable editor runtime
if: inputs.package == 'cli' || inputs.package == 'all'
env:
Expand Down Expand Up @@ -273,21 +256,6 @@ jobs:
echo "📦 Published @pascal-app/viewer@$VIEWER_VERSION"
fi

- name: Build & publish capture viewer
if: inputs.package == 'capture-viewer' || inputs.package == 'all'
working-directory: packages/capture-viewer
run: |
bun run build
if [ "${{ inputs.dry-run }}" = "true" ]; then
echo "🏜️ Dry run — would publish @pascal-app/capture-viewer@$CAPTURE_VIEWER_VERSION"
npm publish --dry-run --access public --tag "$NPM_TAG"
elif npm view "@pascal-app/capture-viewer@$CAPTURE_VIEWER_VERSION" version >/dev/null 2>&1; then
echo "📦 @pascal-app/capture-viewer@$CAPTURE_VIEWER_VERSION is already published; continuing release recovery"
else
npm publish --access public --tag "$NPM_TAG"
echo "📦 Published @pascal-app/capture-viewer@$CAPTURE_VIEWER_VERSION"
fi

- name: Publish editor
if: inputs.package == 'editor' || inputs.package == 'all'
working-directory: packages/editor
Expand Down Expand Up @@ -378,10 +346,6 @@ jobs:
PKGS=""
TAGS=""

if [ -n "$CAPTURE_PROTOCOL_VERSION" ]; then
PKGS="$PKGS @pascal-app/capture-protocol@$CAPTURE_PROTOCOL_VERSION"
TAGS="$TAGS @pascal-app/capture-protocol@$CAPTURE_PROTOCOL_VERSION"
fi
if [ -n "$CORE_VERSION" ]; then
PKGS="$PKGS @pascal-app/core@$CORE_VERSION"
TAGS="$TAGS @pascal-app/core@$CORE_VERSION"
Expand All @@ -390,10 +354,6 @@ jobs:
PKGS="$PKGS @pascal-app/viewer@$VIEWER_VERSION"
TAGS="$TAGS @pascal-app/viewer@$VIEWER_VERSION"
fi
if [ -n "$CAPTURE_VIEWER_VERSION" ]; then
PKGS="$PKGS @pascal-app/capture-viewer@$CAPTURE_VIEWER_VERSION"
TAGS="$TAGS @pascal-app/capture-viewer@$CAPTURE_VIEWER_VERSION"
fi
if [ -n "$EDITOR_VERSION" ]; then
PKGS="$PKGS @pascal-app/editor@$EDITOR_VERSION"
TAGS="$TAGS @pascal-app/editor@$EDITOR_VERSION"
Expand Down
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ Public, open-source home of `@pascal-app/{core,viewer,editor,mcp}` and the stand

| Path | Purpose |
|---|---|
| `packages/core` | Scene graph, node schemas, stores, event bus, core systems — pure logic, no Three.js |
| `packages/viewer` | Standalone 3D canvas: renderers, viewer systems, presentation state |
| `packages/core` | Scene graph, node schemas, stores, event bus, core systems — pure logic, no Three.js. `src/capture/` holds the capture-session contracts published as `@pascal-app/core/capture` |
| `packages/viewer` | Standalone 3D canvas: renderers, viewer systems, presentation state. `src/capture/` holds the capture runtime and reference layers published as `@pascal-app/viewer/capture` |
| `packages/editor` | Editor UI components reused by the standalone app and embedders |
| `packages/mcp` | MCP server and scene storage adapters |
| `apps/editor` | Standalone editor app — composes `viewer` + `editor` + tools |
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
- **`pascal agent claim` and `pascal agent status`** — an agent can open a prefilled 15-minute human handoff and verify its hosted key without storing or printing it, available in the verified GitHub CLI preview ([#815](https://github.com/pascalorg/editor/pull/815), [#818](https://github.com/pascalorg/editor/pull/818), [#819](https://github.com/pascalorg/editor/pull/819), [#821](https://github.com/pascalorg/editor/pull/821), [#822](https://github.com/pascalorg/editor/pull/822))
- **Small CLI, downloaded web runtime** — `@pascal-app/cli` now installs from a 0.5 MB npm package instead of 65 MB: the MCP service ships inside it, so `pascal mcp connect` works with no editor process and no download, while the web editor runtime is fetched once per version from its release asset, verified against a SHA-256 digest published in the package, and installed atomically; `--runtime <directory-or-archive>` covers offline hosts, `HTTPS_PROXY`/`NO_PROXY` are honoured, and an editor started by a pre-split CLI keeps its own MCP child, which must be stopped once by hand after upgrading (#845)
- **Optional hosted key in the Cursor plugin** — `.cursor-plugin/plugin.json` declares an optional `PASCAL_API_KEY` variable and points at a Cursor-dialect `.cursor-plugin/mcp.json` that adds a `pascal-hosted` server for `https://editor.pascal.app/api/mcp`, so a Cursor install can reach hosted projects, Capture scans, and shared workspaces while the credential-free local server keeps working; the portable `mcp.json` stays credential-free because Agent Plugins 1.0.0 forbids secrets and placeholder expansion in `headers`, so Codex configures the hosted endpoint with `codex mcp add --bearer-token-env-var PASCAL_API_KEY` instead ([#849](https://github.com/pascalorg/editor/pull/849))
- **Capture packages folded into core and viewer** — `@pascal-app/capture-protocol` is now `@pascal-app/core/capture` and `@pascal-app/capture-viewer` is now `@pascal-app/viewer/capture` (plus `@pascal-app/viewer/capture/preview`), so 1.0.0 ships seven packages instead of nine. Neither package was ever published to npm, so there is no npm migration; in-repo and workspace consumers change their import paths only.

### Fixes

Expand Down
16 changes: 6 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,11 +122,11 @@ owner publishes an approved version from `main` with the official registry publi

The viewer runtime and built-in node definitions are separate packages. Install the full built-in
viewer set, then load the built-in plugin once before mounting `<Viewer>`. Capture sessions are an
optional transport-neutral extension:
optional extension shipped inside those packages as the `@pascal-app/core/capture` and
`@pascal-app/viewer/capture` subpaths:

```bash
npm install @pascal-app/core @pascal-app/viewer @pascal-app/editor @pascal-app/nodes
npm install @pascal-app/capture-protocol @pascal-app/capture-viewer
```

```typescript
Expand All @@ -149,10 +149,8 @@ editor/
├── apps/
│ └── editor/ # Next.js application
├── packages/
│ ├── core/ # Schemas, scene state, and registry contracts
│ ├── viewer/ # 3D rendering runtime and shared systems
│ ├── capture-protocol/ # Static/live capture-session contracts
│ ├── capture-viewer/ # Capture source runtime and reference renderers
│ ├── core/ # Schemas, scene state, registry contracts, capture contracts
│ ├── viewer/ # 3D rendering runtime, shared systems, capture runtime
│ ├── editor/ # Editing tools and UI components
│ ├── nodes/ # Built-in node definitions, renderers, and systems
│ ├── cli/ # Persistent local editor installer and process manager
Expand All @@ -164,10 +162,8 @@ editor/

| Package | Responsibility |
|---------|---------------|
| **@pascal-app/core** | Node schemas, scene state (Zustand), registry contracts, spatial queries, and event bus |
| **@pascal-app/viewer** | 3D rendering via React Three Fiber, shared render systems, default camera/controls, and post-processing |
| **@pascal-app/capture-protocol** | Versioned capture manifests, normalized streams, and transport-neutral static/live sources |
| **@pascal-app/capture-viewer** | Viewer child runtime and reference model, device-motion, and point-cloud layers |
| **@pascal-app/core** | Node schemas, scene state (Zustand), registry contracts, spatial queries, and event bus. `core/capture` adds versioned capture manifests, normalized streams, and transport-neutral static/live sources |
| **@pascal-app/viewer** | 3D rendering via React Three Fiber, shared render systems, default camera/controls, and post-processing. `viewer/capture` adds the capture runtime and reference model, device-motion, point-cloud, and surface-mesh layers |
| **@pascal-app/editor** | Editing tools, panels, selection, and direct-manipulation UI |
| **@pascal-app/nodes** | Built-in registry plugin with node definitions, renderers, geometry, and systems |
| **@pascal-app/cli** | Installs and manages a versioned standalone editor runtime and persistent local data |
Expand Down
50 changes: 3 additions & 47 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 0 additions & 21 deletions packages/capture-protocol/LICENSE

This file was deleted.

30 changes: 0 additions & 30 deletions packages/capture-protocol/README.md

This file was deleted.

Loading
Loading